From de5d55508afd27fb2b47e6d4d6fd9984525c222c Mon Sep 17 00:00:00 2001
From: ustcyc <yincun@163.com>
Date: 星期二, 07 一月 2025 14:28:26 +0800
Subject: [PATCH] 升级架构

---
 zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java                               |  327 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/ElectricityPriceDate.java                                  |   76 
 zhitan-system/src/main/java/com/zhitan/system/service/ISysUserOnlineService.java                                    |   48 
 zhitan-admin/src/main/resources/application-dev.yml                                                                 |   61 
 zhitan-admin/target/classes/mybatis/mybatis-config.xml                                                              |   20 
 zhitan-system/src/main/java/com/zhitan/basicdata/domain/FacilityArchives.java                                       |  300 
 zhitan-generator/src/main/resources/vm/java/sub-domain.java.vm                                                      |   73 
 zhitan-quartz/target/classes/mapper/quartz/SysJobLogMapper.xml                                                      |   94 
 zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/FacilityArchivesServiceImpl.java                     |  285 
 zhitan-system/src/main/java/com/zhitan/realtimedata/domain/TagValueResult.java                                      |   91 
 zhitan-system/target/classes/mapper/keyequipment/YearKeyEquipmentMapper.xml                                         |   76 
 zhitan-generator/target/classes/vm/js/api.js.vm                                                                     |   44 
 zhitan-system/target/classes/mapper/basicdata/SysEnerclassMapper.xml                                                |   96 
 zhitan-system/src/main/java/com/zhitan/alarm/services/IRealtimeAlarmService.java                                    |   45 
 zhitan-framework/src/main/java/com/zhitan/framework/config/MyBatisInterceptor.java                                  |  121 
 zhitan-system/src/main/java/com/zhitan/system/mapper/SysNoticeMapper.java                                           |   62 
 zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/dto/ConsumptionAnalysisDTO.java                   |   52 
 zhitan-system/target/classes/mapper/system/SysDictDataMapper.xml                                                    |  124 
 zhitan-framework/src/main/java/com/zhitan/framework/aspectj/LogAspect.java                                          |  256 
 zhitan-system/src/main/java/com/zhitan/model/mapper/CalcFunctionMapper.java                                         |   62 
 zhitan-generator/target/classes/mapper/generator/GenTableMapper.xml                                                 |  172 
 zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java                                            |  199 
 zhitan-system/target/classes/mapper/basicdata/MeterImplementMapper.xml                                              |  233 
 zhitan-system/target/classes/mapper/system/SysPostMapper.xml                                                        |  123 
 zhitan-common/src/main/java/com/zhitan/common/exception/user/UserPasswordRetryLimitExceedException.java             |   16 
 zhitan-common/src/main/java/com/zhitan/common/core/text/CharsetKit.java                                             |   86 
 zhitan-quartz/src/main/java/com/zhitan/quartz/util/QuartzJobExecution.java                                          |   19 
 zhitan-quartz/src/main/java/com/zhitan/quartz/mapper/SysJobLogMapper.java                                           |   64 
 zhitan-system/src/main/java/com/zhitan/peakvalley/service/IElectricityPriceService.java                             |   64 
 zhitan-common/src/main/java/com/zhitan/common/utils/file/FileUploadUtils.java                                       |  310 
 zhitan-admin/src/main/resources/i18n/messages.properties                                                            |   38 
 zhitan-system/src/main/java/com/zhitan/keyequipment/service/IYearKeyEquipmentService.java                           |   19 
 zhitan-admin/src/main/java/com/zhitan/web/controller/gatewaysetting/GatewaySettingController.java                   |  142 
 zhitan-system/src/main/java/com/zhitan/alarm/domain/vo/AlarmAnalysisVO.java                                         |   41 
 zhitan-system/src/main/java/com/zhitan/home/domain/vo/HomeEnergyConsumptionTrendVO.java                             |   18 
 zhitan-system/src/main/resources/mapper/system/SysConfigMapper.xml                                                  |  112 
 zhitan-common/src/main/java/com/zhitan/common/utils/StringUtils.java                                                |  685 
 zhitan-generator/src/main/java/com/zhitan/generator/service/GenTableColumnServiceImpl.java                          |   69 
 zhitan-system/src/main/java/com/zhitan/system/mapper/SysRoleDeptMapper.java                                         |   46 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyDayDataVO.java                     |   89 
 zhitan-system/src/main/resources/mapper/system/SysDictDataMapper.xml                                                |  124 
 zhitan-framework/src/main/java/com/zhitan/framework/web/domain/Server.java                                          |  240 
 zhitan-common/src/main/java/com/zhitan/common/enums/BusinessStatus.java                                             |   20 
 zhitan-system/src/main/java/com/zhitan/dataitem/domain/StagseDataEntry.java                                         |   50 
 zhitan-generator/target/classes/mapper/generator/GenTableColumnMapper.xml                                           |  154 
 zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/impl/ComprehensiveStatisticsImpl.java        |   60 
 zhitan-system/src/main/java/com/zhitan/system/domain/SysOperLog.java                                                |  272 
 zhitan-system/src/main/java/com/zhitan/system/service/ISysDeptService.java                                          |  124 
 zhitan-system/src/main/java/com/zhitan/model/service/impl/DaqTemplateServiceImpl.java                               |  165 
 zhitan-system/target/classes/mapper/system/SysNoticeMapper.xml                                                      |   89 
 zhitan-system/src/main/java/com/zhitan/keyequipment/domain/DailyKeyEquipment.java                                   |  320 
 zhitan-system/src/main/java/com/zhitan/basicdata/mapper/FacilityArchivesMapper.java                                 |   95 
 zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/RealTimeAlarmController.java                             |   88 
 zhitan-system/src/main/java/com/zhitan/system/service/ISysNoticeService.java                                        |   60 
 pom.xml                                                                                                             |  445 
 zhitan-system/src/main/java/com/zhitan/alarm/services/impl/RealtimeAlarmServiceImpl.java                            |   64 
 zhitan-system/src/main/java/com/zhitan/system/service/impl/SysNoticeServiceImpl.java                                |   94 
 zhitan-system/target/classes/mapper/gatewaysetting/GatewaySettingMapper.xml                                         |  160 
 zhitan-common/src/main/java/com/zhitan/common/utils/ReflectionUtils.java                                            |   29 
 zhitan-common/src/main/java/com/zhitan/common/enums/HttpMethod.java                                                 |   36 
 zhitan-common/src/main/java/com/zhitan/common/xss/Xss.java                                                          |   27 
 zhitan-system/src/main/java/com/zhitan/model/service/IndexFormulaService.java                                       |   11 
 zhitan-system/src/main/java/com/zhitan/basicdata/domain/vo/EnergyTypeModel.java                                     |   28 
 zhitan-admin/src/main/java/com/zhitan/web/controller/tool/TestController.java                                       |  183 
 zhitan-system/src/main/java/com/zhitan/productoutput/services/IProductOutputService.java                            |   65 
 zhitan-system/src/main/java/com/zhitan/system/service/impl/SysPostServiceImpl.java                                  |  180 
 zhitan-common/src/main/java/com/zhitan/common/utils/reflect/ReflectUtils.java                                       |  410 
 zhitan-system/src/main/java/com/zhitan/system/domain/SysUserPost.java                                               |   46 
 zhitan-common/src/main/java/com/zhitan/common/utils/ExceptionUtil.java                                              |   39 
 zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysProfileController.java                               |  138 
 zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmAnalyisisService.java                                   |   16 
 zhitan-system/src/main/java/com/zhitan/keyequipment/domain/YearKeyEquipment.java                                    |  198 
 zhitan-system/src/main/resources/mapper/system/SysNoticeMapper.xml                                                  |   89 
 zhitan-system/src/main/java/com/zhitan/consumptionanalysis/service/impl/ConsumptionAnalysisServiceImpl.java         | 1168 
 zhitan-system/src/main/java/com/zhitan/system/domain/SysRoleMenu.java                                               |   46 
 zhitan-system/src/main/java/com/zhitan/model/mapper/IndexFormulaMapper.java                                         |   20 
 zhitan-generator/src/main/java/com/zhitan/generator/service/IGenTableService.java                                   |  130 
 zhitan-system/src/main/java/com/zhitan/basicdata/domain/MeterAnnex.java                                             |  107 
 zhitan-common/src/main/java/com/zhitan/common/enums/CollectionModes.java                                            |   26 
 zhitan-common/src/main/java/com/zhitan/common/exception/ServiceException.java                                       |   65 
 zhitan-system/src/main/java/com/zhitan/realtimedata/data/influxdb/InfluxDBRepository.java                           |  231 
 zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysDeptController.java                                  |  132 
 zhitan-admin/target/classes/banner.txt                                                                              |   24 
 zhitan-common/src/main/java/com/zhitan/common/utils/sign/Md5Utils.java                                              |   67 
 zhitan-common/src/main/java/com/zhitan/common/core/domain/model/RegisterBody.java                                   |   11 
 zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/IComprehensiveStatisticsService.java         |   23 
 zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysPasswordService.java                             |   87 
 zhitan-system/src/main/java/com/zhitan/model/domain/vo/PointDataVO.java                                             |   36 
 zhitan-system/src/main/java/com/zhitan/keyequipment/service/IDailyKeyEquipmentService.java                          |   21 
 zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java                                                |  218 
 zhitan-system/src/main/java/com/zhitan/system/domain/SysNotice.java                                                 |  105 
 zhitan-system/src/main/java/com/zhitan/model/service/ICalcFunctionService.java                                      |   62 
 zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/DailyComprehensiveMapper.java                 |   30 
 zhitan-system/target/classes/mapper/system/SysRoleMenuMapper.xml                                                    |   27 
 zhitan-system/src/main/java/com/zhitan/keyequipment/service/IMonthlyKeyEquipmentService.java                        |   19 
 zhitan-system/src/main/java/com/zhitan/model/domain/vo/ModelNodeIndexInfor.java                                     |   66 
 zhitan-system/src/main/java/com/zhitan/model/service/impl/ModelInfoServiceImpl.java                                 |  158 
 zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysUser.java                                       |  327 
 zhitan-system/src/main/java/com/zhitan/alarm/domain/LimitType.java                                                  |  119 
 zhitan-system/src/main/java/com/zhitan/energyIndicators/service/IEnergyIndicatorsService.java                       |   67 
 zhitan-system/src/main/java/com/zhitan/basicdata/services/IMeterImplementCountService.java                          |   63 
 zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/PeakValleyMapper.java                                      |   30 
 zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ConsumptionAnalysisVO.java                     |   31 
 zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/SysUserOnlineController.java                           |   83 
 zhitan-common/src/main/java/com/zhitan/common/utils/SecurityUtils.java                                              |  169 
 zhitan-system/target/classes/mapper/realtimedata/PeriodDataMapper.xml                                               |  501 
 zhitan-admin/target/classes/META-INF/spring-devtools.properties                                                     |    1 
 zhitan-system/src/main/java/com/zhitan/system/mapper/SysUserMapper.java                                             |  129 
 zhitan-system/src/main/java/com/zhitan/system/service/impl/SysOperLogServiceImpl.java                               |   78 
 zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysPermissionService.java                           |   83 
 bin/run.bat                                                                                                         |   14 
 zhitan-system/src/main/resources/mapper/realtimedata/SysEquipmentFileMapper.xml                                     |   48 
 zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/MeterImplementController.java                        |  162 
 zhitan-system/target/classes/mapper/system/SysUserMapper.xml                                                        |  222 
 bin/package.bat                                                                                                     |   12 
 zhitan-system/src/main/java/com/zhitan/productoutput/domain/ProductOutput.java                                      |  165 
 zhitan-generator/src/main/java/com/zhitan/generator/service/GenTableServiceImpl.java                                |  534 
 LICENSE                                                                                                             |   27 
 zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/YearKeyEquipmentController.java                   |   84 
 zhitan-system/src/main/java/com/zhitan/system/service/ISysOperLogService.java                                       |   48 
 zhitan-framework/pom.xml                                                                                            |   84 
 zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java                                          |   78 
 zhitan-common/src/main/java/com/zhitan/common/utils/MessageUtils.java                                               |   26 
 zhitan-common/src/main/java/com/zhitan/common/utils/uuid/Seq.java                                                   |   86 
 zhitan-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml                                       |  154 
 zhitan-common/src/main/java/com/zhitan/common/exception/user/UserNotExistsException.java                            |   16 
 zhitan-framework/src/main/java/com/zhitan/framework/security/filter/JwtAuthenticationTokenFilter.java               |   44 
 zhitan-system/target/classes/mapper/peakvalley/ElectricityDataItemMapper.xml                                        |   31 
 zhitan-admin/src/main/java/com/zhitan/web/controller/auxiliaryinput/EnergyIndicatorsController.java                 |  117 
 zhitan-system/src/main/java/com/zhitan/basicdata/services/ISysEnerclassService.java                                 |   74 
 zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/EnergyProportion.java                          |   19 
 zhitan-common/src/main/java/com/zhitan/common/utils/time/TimeManager.java                                           |  149 
 zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/RankingEnergyData.java                         |   14 
 zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/SysFile.java                                  |  114 
 zhitan-system/target/classes/mapper/auxiliaryinput/ProductOutputMapper.xml                                          |  121 
 zhitan-system/target/classes/mapper/system/SysConfigMapper.xml                                                      |  112 
 zhitan-admin/src/main/java/com/zhitan/web/controller/model/IndexStorageController.java                              |  151 
 zhitan-generator/target/classes/vm/java/mapper.java.vm                                                              |   91 
 zhitan-quartz/src/main/java/com/zhitan/quartz/controller/SysJobLogController.java                                   |   93 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/ElectricityPrice.java                                      |  131 
 zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/SysOperlogController.java                              |   69 
 zhitan-common/src/main/java/com/zhitan/common/enums/DataSourceType.java                                             |   19 
 zhitan-generator/src/main/resources/mapper/generator/GenTableMapper.xml                                             |  172 
 zhitan-system/target/classes/mapper/comprehensivestatistics/ComprehensiveStatisticsMapper.xml                       |  172 
 zhitan-admin/pom.xml                                                                                                |  101 
 zhitan-system/src/main/resources/mapper/basicdata/SysEnerclassMapper.xml                                            |   96 
 zhitan-generator/src/main/java/com/zhitan/generator/util/VelocityInitializer.java                                   |   34 
 zhitan-generator/src/main/resources/vm/sql/sql.vm                                                                   |   22 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/ElectricityTypeSettingItemQueryVO.java                  |  151 
 zhitan-system/target/classes/mapper/comprehensivestatistics/DailyComprehensiveMapper.xml                            |   93 
 zhitan-system/src/main/java/com/zhitan/energyIndicators/domain/EnergyIndicators.java                                |  196 
 zhitan-common/src/main/java/com/zhitan/common/enums/BusinessType.java                                               |   59 
 zhitan-system/src/main/resources/mapper/basicdata/MeterImplementMapper.xml                                          |  233 
 zhitan-system/src/main/java/com/zhitan/alarm/domain/JkRealTimeAlarmList.java                                        |  208 
 zhitan-admin/src/main/java/com/zhitan/web/controller/consumptionanalysis/ConsumptionAnalysisController.java         |  184 
 zhitan-common/src/main/java/com/zhitan/common/utils/Threads.java                                                    |   99 
 zhitan-system/src/main/java/com/zhitan/consumptionanalysis/service/IConsumptionAnalysisService.java                 |   31 
 zhitan-generator/src/main/resources/vm/java/domain.java.vm                                                          |  112 
 zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysDictDataController.java                              |  115 
 zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysDictData.java                                   |  180 
 zhitan-common/src/main/java/com/zhitan/common/utils/DesensitizedUtil.java                                           |   49 
 zhitan-system/src/main/resources/mapper/system/SysPostMapper.xml                                                    |  123 
 zhitan-framework/src/main/java/com/zhitan/framework/config/ApplicationConfig.java                                   |   30 
 zhitan-admin/src/main/java/com/zhitan/AdminApplication.java                                                         |   21 
 zhitan-system/src/main/java/com/zhitan/alarm/domain/AlarmItem.java                                                  |  184 
 zhitan-system/src/main/java/com/zhitan/alarm/domain/dto/AlarmAnalysisDTO.java                                       |   45 
 zhitan-admin/src/main/java/com/zhitan/web/controller/realtimedata/RealtimeDataController.java                       |   61 
 zhitan-generator/src/main/resources/vm/xml/mapper.xml.vm                                                            |  126 
 zhitan-generator/pom.xml                                                                                            |   40 
 zhitan-common/src/main/java/com/zhitan/common/utils/spring/SpringUtils.java                                         |  158 
 zhitan-system/target/classes/mapper/peakvalley/ElectricityPriceDateMapper.xml                                       |   83 
 zhitan-system/src/main/java/com/zhitan/system/service/impl/SysDictTypeServiceImpl.java                              |  239 
 zhitan-system/src/main/resources/mapper/system/SysLoginInfoMapper.xml                                               |   57 
 zhitan-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm                                                     |  474 
 zhitan-generator/target/classes/vm/xml/mapper.xml.vm                                                                |  126 
 zhitan-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml                                                  |   94 
 zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/SysEnergyServiceImpl.java                            |  235 
 zhitan-common/src/main/java/com/zhitan/common/core/domain/TreeSelect.java                                           |   77 
 zhitan-admin/src/main/resources/mybatis/mybatis-config.xml                                                          |   20 
 zhitan-admin/src/main/java/com/zhitan/web/controller/homepage/HomePageController.java                               |  105 
 zhitan-common/src/main/java/com/zhitan/common/enums/RetrievalModes.java                                             |   10 
 zhitan-common/src/main/java/com/zhitan/common/exception/user/CaptchaExpireException.java                            |   16 
 zhitan-common/src/main/java/com/zhitan/common/filter/RepeatedlyRequestWrapper.java                                  |   76 
 zhitan-system/src/main/java/com/zhitan/keyequipment/service/impl/YearKeyEquipmentServiceImpl.java                   |   38 
 zhitan-framework/src/main/java/com/zhitan/framework/config/KaptchaTextCreator.java                                  |   68 
 zhitan-common/src/main/java/com/zhitan/common/annotation/Sensitive.java                                             |   24 
 zhitan-system/src/main/java/com/zhitan/model/mapper/EnergyIndexMapper.java                                          |  101 
 zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java                            |  108 
 zhitan-common/src/main/java/com/zhitan/common/core/domain/R.java                                                    |  115 
 zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/MonthlyKeyEquipmentController.java                |  132 
 zhitan-system/src/main/java/com/zhitan/realtimedata/data/VirtualRtdb.java                                           |  167 
 zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysRoleController.java                                  |  262 
 zhitan-system/src/main/java/com/zhitan/keyequipment/domain/MonthlyKeyEquipment.java                                 |  428 
 zhitan-system/target/classes/mapper/dataitem/DataItemMapper.xml                                                     |  139 
 zhitan-common/src/main/java/com/zhitan/common/annotation/RateLimiter.java                                           |   40 
 zhitan-common/src/main/java/com/zhitan/common/utils/html/HTMLFilter.java                                            |  570 
 zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysLoginService.java                                |  181 
 zhitan-admin/src/main/java/com/zhitan/web/controller/model/EnergyIndexController.java                               |  207 
 zhitan-common/src/main/java/com/zhitan/common/constant/HttpStatus.java                                              |   94 
 zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/ComprehensiveStatisticsController.java |  175 
 zhitan-admin/src/main/java/com/zhitan/web/controller/meter/MeterController.java                                     |   93 
 zhitan-framework/src/main/java/com/zhitan/framework/manager/ShutdownManager.java                                    |   39 
 zhitan-system/src/main/java/com/zhitan/system/service/impl/SysUserOnlineServiceImpl.java                            |   96 
 zhitan-common/src/main/java/com/zhitan/common/enums/IndexType.java                                                  |   12 
 zhitan-system/src/main/java/com/zhitan/keyequipment/mapper/DailyKeyEquipmentMapper.java                             |   31 
 zhitan-common/src/main/java/com/zhitan/common/utils/html/EscapeUtil.java                                            |  167 
 zhitan-common/src/main/java/com/zhitan/common/exception/file/FileSizeLimitExceededException.java                    |   16 
 zhitan-quartz/src/main/java/com/zhitan/quartz/util/CronUtils.java                                                   |   63 
 zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmItemController.java                                 |  139 
 zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/HistoryAlarmController.java                              |  171 
 zhitan-quartz/target/classes/mapper/quartz/SysJobMapper.xml                                                         |  111 
 zhitan-common/src/main/java/com/zhitan/common/annotation/Log.java                                                   |   51 
 zhitan-system/src/main/java/com/zhitan/system/domain/SysPost.java                                                   |  127 
 zhitan-system/src/main/resources/mapper/dataitem/DataItemMapper.xml                                                 |  139 
 zhitan-system/target/classes/mapper/alarm/AlarmLimitTypeMapper.xml                                                  |   92 
 zhitan-system/src/main/java/com/zhitan/system/mapper/SysConfigMapper.java                                           |   78 
 zhitan-common/src/main/java/com/zhitan/common/annotation/Excel.java                                                 |  187 
 start.sh                                                                                                            |   86 
 zhitan-common/src/main/java/com/zhitan/common/constant/CacheConstants.java                                          |   44 
 zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java                           |  207 
 .idea/jarRepositories.xml                                                                                           |   35 
 zhitan-generator/src/main/resources/generator.yml                                                                   |   10 
 zhitan-generator/target/classes/vm/java/controller.java.vm                                                          |  108 
 zhitan-system/src/main/java/com/zhitan/basicdata/services/ISysEnergyService.java                                    |  132 
 zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/RealTimeDataVO.java                                   |   20 
 zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/PeriodDataServiceImpl.java                         |  635 
 zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java                               |  106 
 zhitan-common/src/main/java/com/zhitan/common/exception/file/FileUploadException.java                               |   61 
 zhitan-generator/src/main/java/com/zhitan/generator/mapper/GenTableMapper.java                                      |   91 
 zhitan-common/src/main/java/com/zhitan/common/utils/poi/ExcelUtil.java                                              | 1795 +
 zhitan-framework/src/main/java/com/zhitan/framework/security/context/PermissionContextHolder.java                   |   27 
 zhitan-system/src/main/java/com/zhitan/peakvalley/service/IElectricityPriceDateService.java                         |   65 
 zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/ElectricityPriceDateServiceImpl.java                 |  106 
 zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/CacheController.java                                   |  120 
 zhitan-common/src/main/java/com/zhitan/common/utils/bean/BeanValidators.java                                        |   24 
 zhitan-system/src/main/java/com/zhitan/system/mapper/SysUserRoleMapper.java                                         |   63 
 zhitan-common/src/main/java/com/zhitan/common/utils/Arith.java                                                      |  114 
 zhitan-system/src/main/java/com/zhitan/system/service/ISysMenuService.java                                          |  144 
 zhitan-system/src/main/resources/mapper/basicdata/FacilityArchivesMapper.xml                                        |  183 
 zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysIndexController.java                                 |   30 
 zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterImplementCountMapper.java                              |   63 
 zhitan-system/src/main/resources/mapper/energyIndicators/EnergyIndicatorsMapper.xml                                 |  124 
 zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/SysLogininforController.java                           |   82 
 zhitan-common/src/main/java/com/zhitan/common/utils/ServletUtils.java                                               |  219 
 zhitan-framework/src/main/java/com/zhitan/framework/config/properties/DruidProperties.java                          |   89 
 zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysDept.java                                       |  208 
 zhitan-framework/src/main/java/com/zhitan/framework/manager/AsyncManager.java                                       |   55 
 zhitan-system/src/main/java/com/zhitan/gatewaysetting/service/IGatewaySettingService.java                           |   85 
 zhitan-system/src/main/java/com/zhitan/model/service/impl/IndexStorageServiceImpl.java                              |  100 
 zhitan-system/src/main/resources/mapper/auxiliaryinput/ProductOutputMapper.xml                                      |  121 
 zhitan-system/src/main/java/com/zhitan/basicdata/domain/MeterImplementExcel.java                                    |  245 
 zhitan-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml                                                |   34 
 zhitan-system/src/main/java/com/zhitan/realtimedata/mapper/PeriodDataMapper.java                                    |  104 
 zhitan-quartz/src/main/java/com/zhitan/quartz/domain/SysJob.java                                                    |  172 
 zhitan-system/target/classes/mapper/system/SysNameConfigMapper.xml                                                  |   93 
 zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/RealTimeIndexModel.java                               |   40 
 zhitan-admin/src/main/java/com/zhitan/web/controller/common/CommonController.java                                   |  163 
 zhitan-common/src/main/java/com/zhitan/common/utils/DictUtils.java                                                  |  186 
 zhitan-system/src/main/java/com/zhitan/realtimedata/domain/StatisticResult.java                                     |   95 
 zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/FacilityAnnexServiceImpl.java                        |   97 
 zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/ElectricityPriceDateController.java                 |  100 
 zhitan-system/target/classes/mapper/model/ModelInfoMapper.xml                                                       |   72 
 zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndexQuery.java                                           |   54 
 zhitan-system/src/main/java/com/zhitan/system/service/ISysPostService.java                                          |   99 
 zhitan-system/src/main/java/com/zhitan/alarm/services/IHistoryAlarmService.java                                     |   36 
 zhitan-system/src/main/resources/mapper/peakvalley/EletricityPriceMapper.xml                                        |   98 
 zhitan-system/src/main/java/com/zhitan/productoutput/services/impl/ProductOutputServiceImpl.java                    |  108 
 zhitan-system/src/main/java/com/zhitan/productoutput/mapper/ProductOutputMapper.java                                |   62 
 zhitan-framework/src/main/java/com/zhitan/framework/interceptor/impl/SameUrlDataInterceptor.java                    |  110 
 zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysEnercoefficient.java                                     |  172 
 zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysPostController.java                                  |  129 
 zhitan-system/src/main/java/com/zhitan/keyequipment/mapper/MonthlyKeyEquipmentMapper.java                           |   29 
 zhitan-common/src/main/java/com/zhitan/common/enums/TimeType.java                                                   |   33 
 zhitan-system/src/main/java/com/zhitan/realtimedata/domain/DataItem.java                                            |  168 
 zhitan-system/src/main/java/com/zhitan/gatewaysetting/service/impl/GatewaySettingServiceImpl.java                   |  127 
 zhitan-system/src/main/java/com/zhitan/system/domain/SysNameConfig.java                                             |  104 
 zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysNoticeController.java                                |   91 
 zhitan-system/src/main/resources/mapper/comprehensivestatistics/ComprehensiveStatisticsMapper.xml                   |  172 
 zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/DailyKeyEquipmenteController.java                 |  123 
 zhitan-common/src/main/java/com/zhitan/common/core/controller/BaseController.java                                   |  218 
 zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysPrice.java                                               |  174 
 zhitan-common/src/main/java/com/zhitan/common/enums/CalcType.java                                                   |   16 
 zhitan-common/src/main/java/com/zhitan/common/core/domain/model/LoginUser.java                                      |  266 
 zhitan-system/src/main/java/com/zhitan/alarm/mapper/AlarmItemMapper.java                                            |  129 
 zhitan-system/src/main/resources/mapper/system/SysRoleMapper.xml                                                    |  157 
 zhitan-system/src/main/java/com/zhitan/meter/services/IMetersService.java                                           |   40 
 zhitan-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml                                                |   27 
 zhitan-system/target/classes/mapper/alarm/HistoryAlarmMapper.xml                                                    |  339 
 zhitan-system/src/main/java/com/zhitan/system/mapper/SysUserPostMapper.java                                         |   46 
 start.bat                                                                                                           |   67 
 zhitan-system/src/main/java/com/zhitan/alarm/mapper/AlarmLimitTypeMapper.java                                       |   61 
 zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmLimitTypeService.java                                   |   27 
 zhitan-system/src/main/java/com/zhitan/realtimedata/mapper/SysEquipmentFileMapper.java                              |   24 
 zhitan-system/src/main/java/com/zhitan/system/domain/SysRoleDept.java                                               |   46 
 zhitan-common/src/main/java/com/zhitan/common/core/redis/RedisCache.java                                            |  268 
 zhitan-system/pom.xml                                                                                               |   28 
 zhitan-system/src/main/java/com/zhitan/keyequipment/service/impl/DailyKeyEquipmentServiceImpl.java                  |   48 
 zhitan-common/src/main/java/com/zhitan/common/config/serializer/SensitiveJsonSerializer.java                        |   67 
 zhitan-system/src/main/java/com/zhitan/meter/domain/MeterParam.java                                                 |  104 
 zhitan-common/pom.xml                                                                                               |  139 
 zhitan-system/src/main/java/com/zhitan/system/mapper/SysDictTypeMapper.java                                         |   85 
 zhitan-system/src/main/java/com/zhitan/realtimedata/domain/SysSvgInfo.java                                          |   11 
 zhitan-system/src/main/java/com/zhitan/system/service/impl/SysNameConfigServiceImpl.java                            |   27 
 zhitan-system/src/main/java/com/zhitan/system/mapper/SysLoginInfoMapper.java                                        |   44 
 zhitan-common/src/main/java/com/zhitan/common/constant/ScheduleConstants.java                                       |   50 
 zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/RankingDataVO.java                             |   20 
 zhitan-generator/src/main/java/com/zhitan/generator/util/GenUtils.java                                              |  258 
 zhitan-system/src/main/java/com/zhitan/keyequipment/service/impl/MonthlyKeyEquipmentServiceImpl.java                |   40 
 zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/PeakValleyController.java                           |   66 
 zhitan-system/src/main/resources/mapper/model/IndexStorageMapper.xml                                                |   58 
 zhitan-common/src/main/java/com/zhitan/common/annotation/DataScope.java                                             |   33 
 zhitan-system/src/main/resources/mapper/system/SysDeptMapper.xml                                                    |  182 
 zhitan-system/target/classes/mapper/basicdata/MeterImplementCountMapper.xml                                         |  143 
 zhitan-system/target/classes/mapper/realtimedata/SysEquipmentFileMapper.xml                                         |   48 
 zhitan-common/src/main/java/com/zhitan/common/constant/CommonConst.java                                             |  145 
 zhitan-common/src/main/java/com/zhitan/common/xss/XssValidator.java                                                 |   40 
 zhitan-framework/src/main/java/com/zhitan/framework/mqtt/MqttClientUtil.java                                        |  130 
 zhitan-framework/src/main/java/com/zhitan/framework/mqtt/MqttMessageCallback.java                                   |   47 
 zhitan-admin/src/main/java/com/zhitan/web/controller/auxiliaryinput/ProductOutputController.java                    |  528 
 zhitan-system/target/classes/mapper/model/DaqTemplateMapper.xml                                                     |   93 
 zhitan-system/src/main/java/com/zhitan/meter/services/impl/MetersServiceImpl.java                                   |   58 
 zhitan-system/src/main/java/com/zhitan/model/service/impl/CalcFunctionServiceImpl.java                              |   94 
 zhitan-common/src/main/java/com/zhitan/common/constant/Constants.java                                               |  178 
 zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java                                        |  456 
 zhitan-system/target/classes/mapper/system/SysRoleDeptMapper.xml                                                    |   34 
 zhitan-system/src/main/java/com/zhitan/basicdata/mapper/FacilityAnnexMapper.java                                    |   63 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityTypeSettingItemAddDTO.java                  |   42 
 zhitan-framework/src/main/java/com/zhitan/framework/datasource/DynamicDataSourceContextHolder.java                  |   45 
 zhitan-system/src/main/java/com/zhitan/system/domain/SysUserOnline.java                                             |  113 
 zhitan-system/target/classes/mapper/basicdata/FacilityAnnexMapper.xml                                               |   95 
 zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterImplementMapper.java                                   |   89 
 zhitan-system/src/main/java/com/zhitan/system/domain/SysLoginInfo.java                                              |  149 
 zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysRegisterService.java                             |  115 
 zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/FacilityAnnexController.java                         |  181 
 zhitan-common/src/main/java/com/zhitan/common/core/domain/AjaxResult.java                                           |  216 
 zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterAnnexMapper.java                                       |   63 
 zhitan-system/target/classes/mapper/alarm/RealtimeAlarmMapper.xml                                                   |  238 
 zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmLimitTypeController.java                            |  100 
 zhitan-common/src/main/java/com/zhitan/common/utils/file/ImageUtils.java                                            |   99 
 zhitan-common/src/main/java/com/zhitan/common/filter/RepeatableFilter.java                                          |   52 
 zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysUserController.java                                  |  251 
 zhitan-generator/target/classes/vm/vue/index-tree.vue.vm                                                            |  505 
 zhitan-system/target/classes/mapper/system/SysUserRoleMapper.xml                                                    |   44 
 zhitan-quartz/src/main/java/com/zhitan/quartz/mapper/SysJobMapper.java                                              |   67 
 zhitan-generator/target/classes/vm/vue/v3/index-tree.vue.vm                                                         |  474 
 zhitan-system/src/main/java/com/zhitan/model/domain/IndexStorage.java                                               |   94 
 zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/Comprehensive.java                            |  386 
 zhitan-system/src/main/java/com/zhitan/system/mapper/SysNameConfigMapper.java                                       |   62 
 zhitan-system/src/main/java/com/zhitan/system/service/ISysConfigService.java                                        |   89 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/ElectricityPeriodFeeDetailVO.java                       |   54 
 zhitan-framework/src/main/java/com/zhitan/framework/aspectj/RateLimiterAspect.java                                  |   89 
 zhitan-quartz/src/main/java/com/zhitan/quartz/util/JobInvokeUtil.java                                               |  182 
 zhitan-common/src/main/java/com/zhitan/common/exception/CustomException.java                                        |   43 
 zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/MeterImplementServiceImpl.java                       |  354 
 zhitan-common/src/main/java/com/zhitan/common/utils/uuid/IdUtils.java                                               |   49 
 zhitan-system/src/main/java/com/zhitan/system/service/impl/SysDeptServiceImpl.java                                  |  340 
 zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysDictType.java                                   |  100 
 zhitan-framework/src/main/java/com/zhitan/framework/datasource/DynamicDataSource.java                               |   26 
 zhitan-system/src/main/java/com/zhitan/system/service/impl/SysUserServiceImpl.java                                  |  494 
 zhitan-admin/src/main/java/com/zhitan/web/controller/model/ModelNodeController.java                                 |  383 
 zhitan-framework/src/main/java/com/zhitan/framework/config/properties/PermitAllUrlProperties.java                   |   73 
 zhitan-system/src/main/java/com/zhitan/system/service/impl/SysConfigServiceImpl.java                                |  234 
 .idea/misc.xml                                                                                                      |   12 
 zhitan-common/src/main/java/com/zhitan/common/utils/ip/AddressUtils.java                                            |   56 
 zhitan-common/src/main/java/com/zhitan/common/enums/Quality.java                                                    |   12 
 zhitan-common/src/main/java/com/zhitan/common/core/text/Convert.java                                                | 1006 
 zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/ServerController.java                                  |   27 
 zhitan-framework/src/main/java/com/zhitan/framework/config/MyBatisPlusConfig.java                                   |   63 
 zhitan-system/src/main/java/com/zhitan/home/domain/vo/HomeEnergyStatisticsVO.java                                   |   47 
 zhitan-common/src/main/java/com/zhitan/common/enums/UserStatus.java                                                 |   30 
 zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/ComprehensiveStatistics.java                  |  186 
 zhitan-system/src/main/java/com/zhitan/realtimedata/data/influxdb/QueryType.java                                    |   45 
 zhitan-system/src/main/resources/mapper/system/SysMenuMapper.xml                                                    |  206 
 zhitan-system/src/main/java/com/zhitan/model/service/IDaqTemplateService.java                                       |   91 
 zhitan-system/src/main/resources/mapper/alarm/AlarmItemMapper.xml                                                   |  226 
 zhitan-framework/src/main/java/com/zhitan/framework/web/service/TokenService.java                                   |  230 
 zhitan-generator/src/main/java/com/zhitan/generator/controller/GenController.java                                   |  258 
 zhitan-quartz/src/main/java/com/zhitan/quartz/task/RyTask.java                                                      |   28 
 zhitan-system/src/main/java/com/zhitan/model/domain/IndexFormulaParam.java                                          |   50 
 zhitan-common/src/main/java/com/zhitan/common/enums/GroupTimeType.java                                              |   22 
 zhitan-generator/src/main/resources/vm/vue/v3/index.vue.vm                                                          |  590 
 zhitan-framework/src/main/java/com/zhitan/framework/aspectj/DataScopeAspect.java                                    |  175 
 zhitan-framework/src/main/java/com/zhitan/framework/security/handle/AuthenticationEntryPointImpl.java               |   34 
 zhitan-admin/src/main/java/com/zhitan/web/controller/meter/MeterAnnexController.java                                |  179 
 zhitan-admin/src/main/java/com/zhitan/web/core/config/SwaggerConfig.java                                            |  127 
 zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ChartData.java                                 |   18 
 zhitan-system/src/main/resources/mapper/peakvalley/ElectricityDataItemMapper.xml                                    |   31 
 zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysEnerclass.java                                           |  131 
 zhitan-system/src/main/java/com/zhitan/system/mapper/SysOperLogMapper.java                                          |   50 
 zhitan-system/src/main/java/com/zhitan/model/domain/IndexStorageParam.java                                          |   23 
 zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmItemService.java                                        |  109 
 zhitan-framework/src/main/java/com/zhitan/framework/config/ResourcesConfig.java                                     |   74 
 zhitan-framework/src/main/java/com/zhitan/framework/web/exception/GlobalExceptionHandler.java                       |  138 
 zhitan-system/src/main/java/com/zhitan/system/service/ISysDictTypeService.java                                      |  103 
 zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/ElectricityPriceDateMapper.java                            |   62 
 zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysDictTypeController.java                              |  125 
 zhitan-generator/target/classes/vm/java/domain.java.vm                                                              |  112 
 zhitan-common/src/main/java/com/zhitan/common/utils/file/FileUtils.java                                             |  292 
 zhitan-generator/src/main/resources/vm/java/serviceImpl.java.vm                                                     |  162 
 zhitan-common/src/main/java/com/zhitan/common/utils/file/FileTypeUtils.java                                         |   76 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyPieChatVO.java                     |   53 
 zhitan-admin/src/main/java/com/zhitan/web/controller/common/CaptchaController.java                                  |   94 
 zhitan-system/src/main/java/com/zhitan/system/domain/vo/MetaVo.java                                                 |  106 
 zhitan-system/src/main/java/com/zhitan/gatewaysetting/domain/GatewaySetting.java                                    |   62 
 zhitan-quartz/src/main/java/com/zhitan/quartz/service/ISysJobService.java                                           |  102 
 zhitan-framework/src/main/java/com/zhitan/framework/web/service/PermissionService.java                              |  161 
 zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmAnalyisisController.java                            |   37 
 zhitan-system/target/classes/mapper/basicdata/SysEnergyMapper.xml                                                   |  263 
 zhitan-admin/src/main/java/com/zhitan/web/controller/model/ModelInfoController.java                                 |  116 
 zhitan-common/src/main/java/com/zhitan/common/utils/sql/SqlUtil.java                                                |   70 
 zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/ElectricityPriceMapper.java                                |   62 
 zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysConfigController.java                                |  133 
 bin/clean.bat                                                                                                       |   12 
 zhitan-system/src/main/resources/mapper/system/SysUserPostMapper.xml                                                |   34 
 zhitan-system/src/main/java/com/zhitan/basicdata/mapper/SysEnergyMapper.java                                        |  119 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityTypeSettingUpdateDTO.java                   |   93 
 zhitan-admin/src/main/java/com/zhitan/AdminServletInitializer.java                                                  |   18 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyHourVO.java                        |   18 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyDayVO.java                         |   18 
 zhitan-system/src/main/resources/mapper/comprehensivestatistics/DailyComprehensiveMapper.xml                        |   93 
 zhitan-system/target/classes/mapper/basicdata/FacilityArchivesMapper.xml                                            |  183 
 zhitan-common/src/main/java/com/zhitan/common/core/page/TableDataInfo.java                                          |   85 
 zhitan-generator/src/main/resources/vm/java/mapper.java.vm                                                          |   91 
 zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/ComprehensiveStatisticsMapper.java            |   20 
 zhitan-system/src/main/resources/mapper/keyequipment/DailyKeyEquipmentMapper.xml                                    |   93 
 zhitan-generator/src/main/java/com/zhitan/generator/domain/GenTable.java                                            |  385 
 zhitan-generator/src/main/resources/vm/java/service.java.vm                                                         |   61 
 zhitan-system/src/main/java/com/zhitan/keyequipment/mapper/YearKeyEquipmentMapper.java                              |   29 
 zhitan-system/src/main/java/com/zhitan/model/service/impl/IndexFormulaServiceImpl.java                              |   56 
 zhitan-system/src/main/resources/mapper/system/SysUserRoleMapper.xml                                                |   44 
 zhitan-admin/src/main/java/com/zhitan/web/controller/model/CalcFunctionController.java                              |  109 
 zhitan-framework/src/main/java/com/zhitan/framework/config/RedisConfig.java                                         |   69 
 zhitan-system/src/main/java/com/zhitan/realtimedata/domain/WritePoint.java                                          |   26 
 zhitan-common/src/main/java/com/zhitan/common/filter/XssFilter.java                                                 |   75 
 zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/DailyComprehensiveController.java      |   94 
 zhitan-framework/src/main/java/com/zhitan/framework/aspectj/DataSourceAspect.java                                   |   73 
 zhitan-system/target/classes/mapper/energyIndicators/EnergyIndicatorsMapper.xml                                     |  124 
 zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/IDailyComprehensiveService.java              |   19 
 zhitan-common/src/main/java/com/zhitan/common/exception/DemoModeException.java                                      |   15 
 zhitan-system/target/classes/mapper/peakvalley/EletricityPriceMapper.xml                                            |   98 
 zhitan-common/src/main/java/com/zhitan/common/filter/XssHttpServletRequestWrapper.java                              |  111 
 zhitan-system/target/classes/mapper/model/ModelNodeMapper.xml                                                       |  423 
 zhitan-common/src/main/java/com/zhitan/common/utils/sign/Base64.java                                                |  291 
 zhitan-system/src/main/java/com/zhitan/basicdata/services/IMeterAnnexService.java                                   |   63 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/ElectricityTypeSettingItemVO.java                       |   59 
 zhitan-system/src/main/resources/mapper/meter/MeterImplementMapper.xml                                              |   89 
 zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysLoginController.java                                 |   86 
 zhitan-common/src/main/java/com/zhitan/common/exception/UtilException.java                                          |   26 
 zhitan-system/src/main/java/com/zhitan/system/service/ISysLoginInfoService.java                                     |   40 
 zhitan-system/src/main/java/com/zhitan/model/domain/DaqTemplate.java                                                |   93 
 zhitan-system/src/main/resources/mapper/basicdata/MeterImplementCountMapper.xml                                     |  143 
 .idea/encodings.xml                                                                                                 |   29 
 zhitan-common/src/main/java/com/zhitan/common/utils/DateUtils.java                                                  |  196 
 zhitan-system/src/main/resources/mapper/alarm/HistoryAlarmMapper.xml                                                |  339 
 zhitan-common/src/main/java/com/zhitan/common/utils/time/Time24HourUtil.java                                        |  101 
 zhitan-generator/src/main/java/com/zhitan/generator/config/GenConfig.java                                           |   73 
 zhitan-system/src/main/java/com/zhitan/system/domain/SysCache.java                                                  |   81 
 zhitan-system/src/main/java/com/zhitan/model/mapper/DaqTemplateMapper.java                                          |   74 
 zhitan-system/src/main/resources/mapper/gatewaysetting/GatewaySettingMapper.xml                                     |  160 
 zhitan-system/target/classes/mapper/meter/MeterImplementMapper.xml                                                  |   89 
 zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/MeterImplementCountServiceImpl.java                  |   97 
 zhitan-admin/target/classes/application-prod.yml                                                                    |   61 
 zhitan-common/src/main/java/com/zhitan/common/utils/http/HttpUtils.java                                             |  275 
 zhitan-system/src/main/java/com/zhitan/meter/domain/MeterConfig.java                                                |  182 
 zhitan-system/src/main/java/com/zhitan/alarm/domain/RealTimeAlarm.java                                              |  177 
 zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeTrendService.java                               |   35 
 zhitan-admin/src/main/resources/application.yml                                                                     |  172 
 zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/ElectricityPriceServiceImpl.java                     |  150 
 zhitan-system/src/main/java/com/zhitan/realtimedata/service/IPeriodDataService.java                                 |  314 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/PeakValleyDTO.java                                     |   65 
 zhitan-system/src/main/java/com/zhitan/realtimedata/service/ISysEquipmentFileService.java                           |   31 
 zhitan-system/target/classes/mapper/system/SysOperLogMapper.xml                                                     |   87 
 zhitan-common/src/main/java/com/zhitan/common/exception/user/CaptchaException.java                                  |   16 
 zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysMenu.java                                       |  276 
 zhitan-system/src/main/java/com/zhitan/energyIndicators/service/impl/EnergyIndicatorsServiceImpl.java               |  108 
 zhitan-system/src/main/resources/mapper/model/ModelInfoMapper.xml                                                   |   72 
 zhitan-system/target/classes/mapper/model/IndexStorageMapper.xml                                                    |   58 
 .idea/.gitignore                                                                                                    |    8 
 zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysNameConfigController.java                            |   48 
 zhitan-system/src/main/java/com/zhitan/model/domain/ModelNode.java                                                  |  145 
 zhitan-common/src/main/java/com/zhitan/common/exception/file/FileNameLengthLimitExceededException.java              |   16 
 zhitan-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml                                                     |  111 
 zhitan-system/src/main/java/com/zhitan/alarm/services/impl/HistoryAlarmServiceImpl.java                             |   90 
 zhitan-generator/src/main/resources/vm/vue/index-tree.vue.vm                                                        |  505 
 zhitan-system/src/main/java/com/zhitan/peakvalley/service/IPeakValleyService.java                                   |   45 
 zhitan-system/target/classes/mapper/system/SysUserPostMapper.xml                                                    |   34 
 zhitan-common/src/main/java/com/zhitan/common/annotation/Anonymous.java                                             |   19 
 zhitan-common/src/main/java/com/zhitan/common/enums/LimitType.java                                                  |   20 
 zhitan-system/src/main/java/com/zhitan/system/mapper/SysRoleMenuMapper.java                                         |   46 
 zhitan-system/src/main/resources/mapper/alarm/RealtimeAlarmMapper.xml                                               |  238 
 zhitan-generator/src/main/java/com/zhitan/generator/util/VelocityUtils.java                                         |  409 
 zhitan-framework/src/main/java/com/zhitan/framework/security/handle/LogoutSuccessHandlerImpl.java                   |   53 
 zhitan-system/src/main/resources/mapper/keyequipment/MonthlyKeyEquipmentMapper.xml                                  |   95 
 zhitan-system/src/main/java/com/zhitan/realtimedata/config/RtdbConfig.java                                          |   22 
 zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysRegisterController.java                              |   38 
 zhitan-system/src/main/java/com/zhitan/system/service/ISysRoleService.java                                          |  173 
 zhitan-system/target/classes/mapper/basicdata/MeterAnnexMapper.xml                                                  |   95 
 zhitan-system/src/main/resources/mapper/system/SysNameConfigMapper.xml                                              |   93 
 zhitan-admin/target/classes/i18n/messages.properties                                                                |   38 
 zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ConsumptionAnalysisData.java                   |   64 
 zhitan-system/src/main/java/com/zhitan/realtimedata/domain/ElectricityDataDetail.java                               |  157 
 .idea/vcs.xml                                                                                                       |    6 
 zhitan-quartz/src/main/java/com/zhitan/quartz/service/ISysJobLogService.java                                        |   56 
 zhitan-system/src/main/resources/mapper/basicdata/MeterAnnexMapper.xml                                              |   95 
 zhitan-framework/src/main/java/com/zhitan/framework/config/FastJson2JsonRedisSerializer.java                        |   54 
 zhitan-system/src/main/java/com/zhitan/model/domain/ModelInfo.java                                                  |   75 
 zhitan-system/src/main/java/com/zhitan/model/domain/TreeObject.java                                                 |   76 
 zhitan-system/target/classes/mapper/keyequipment/MonthlyKeyEquipmentMapper.xml                                      |   95 
 zhitan-common/src/main/java/com/zhitan/common/exception/GlobalException.java                                        |   58 
 zhitan-system/src/main/java/com/zhitan/system/service/impl/SysDictDataServiceImpl.java                              |  118 
 zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml                                                 |  380 
 zhitan-system/src/main/java/com/zhitan/basicdata/mapper/SysEnerclassMapper.java                                     |   72 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityTypeSettingAddDTO.java                      |   86 
 zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/ElectricityPriceController.java                     |  110 
 zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/SysEnerclassServiceImpl.java                         |  127 
 zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysRole.java                                       |  245 
 zhitan-system/target/classes/mapper/model/IndexFormulaMapper.xml                                                    |   47 
 zhitan-common/src/main/java/com/zhitan/common/exception/user/UserException.java                                     |   18 
 zhitan-common/src/main/java/com/zhitan/common/filter/PropertyPreExcludeFilter.java                                  |   24 
 zhitan-system/src/main/java/com/zhitan/basicdata/services/IFacilityAnnexService.java                                |   62 
 zhitan-framework/src/main/java/com/zhitan/framework/interceptor/RepeatSubmitInterceptor.java                        |   56 
 zhitan-generator/target/classes/generator.yml                                                                       |   10 
 zhitan-system/src/main/java/com/zhitan/meter/mapper/MetersMapper.java                                               |   42 
 zhitan-common/src/main/java/com/zhitan/common/core/domain/BaseEntity.java                                           |  170 
 zhitan-system/src/main/java/com/zhitan/system/mapper/SysPostMapper.java                                             |  101 
 zhitan-common/src/main/java/com/zhitan/common/utils/bean/BeanUtils.java                                             |  110 
 zhitan-generator/src/main/resources/vm/java/controller.java.vm                                                      |  108 
 zhitan-system/src/main/resources/mapper/peakvalley/ElectricityPriceDateMapper.xml                                   |   83 
 zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/Mem.java                                      |   61 
 zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/FacilityArchivesController.java                      |  166 
 zhitan-common/src/main/java/com/zhitan/common/enums/OperatorType.java                                               |   24 
 zhitan-admin/src/main/resources/banner.txt                                                                          |   24 
 zhitan-quartz/src/main/java/com/zhitan/quartz/controller/SysJobController.java                                      |  186 
 zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeTrendServiceImpl.java                      |  169 
 zhitan-system/target/classes/mapper/system/SysMenuMapper.xml                                                        |  206 
 zhitan-system/src/main/java/com/zhitan/alarm/mapper/RealtimeAlarmMapper.java                                        |   83 
 zhitan-common/src/main/java/com/zhitan/common/core/domain/TreeEntity.java                                           |   79 
 zhitan-common/src/main/java/com/zhitan/common/constant/UserConstants.java                                           |   78 
 zhitan-system/src/main/java/com/zhitan/basicdata/domain/MeterImplement.java                                         |  328 
 zhitan-system/src/main/resources/mapper/alarm/AlarmLimitTypeMapper.xml                                              |   92 
 zhitan-common/src/main/java/com/zhitan/common/exception/file/FileException.java                                     |   19 
 zhitan-common/src/main/java/com/zhitan/common/enums/ElectricityTypeEnum.java                                        |   24 
 zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/SysEnergyController.java                             |  211 
 zhitan-admin/target/classes/application.yml                                                                         |  172 
 zhitan-admin/target/classes/application-dev.yml                                                                     |   61 
 zhitan-quartz/src/main/java/com/zhitan/quartz/domain/SysJobLog.java                                                 |  155 
 zhitan-system/src/main/java/com/zhitan/alarm/domain/JkHistoryAlarm.java                                             |  271 
 zhitan-admin/src/main/resources/logback.xml                                                                         |   93 
 zhitan-admin/src/main/java/com/zhitan/web/controller/model/DaqTemplateController.java                               |  102 
 zhitan-system/src/main/java/com/zhitan/home/service/impl/IHomePageService.java                                      |   24 
 zhitan-system/src/main/java/com/zhitan/model/mapper/ModelInfoMapper.java                                            |   63 
 zhitan-system/src/main/resources/mapper/realtimedata/PeriodDataMapper.xml                                           |  501 
 zhitan-system/src/main/java/com/zhitan/realtimedata/domain/SysEquipmentFile.java                                    |   18 
 zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/PeakValleyServiceImpl.java                           |  475 
 zhitan-system/src/main/java/com/zhitan/gatewaysetting/mapper/GatewaySettingMapper.java                              |   83 
 zhitan-system/target/classes/mapper/model/EnergyIndexMapper.xml                                                     |  380 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/ElectricityDataItem.java                                   |  106 
 zhitan-admin/src/main/java/com/zhitan/web/controller/realtimedata/SysEquipmentFileController.java                   |  103 
 zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/Jvm.java                                      |  130 
 zhitan-system/src/main/java/com/zhitan/basicdata/domain/FacilityAnnex.java                                          |  107 
 zhitan-system/src/main/resources/mapper/system/SysOperLogMapper.xml                                                 |   87 
 zhitan-common/src/main/java/com/zhitan/common/core/text/StrFormatter.java                                           |   92 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyDayTotalVO.java                    |  250 
 zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/MeterAnnexServiceImpl.java                           |   97 
 zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/SensorParamModel.java                                 |   31 
 zhitan-system/src/main/java/com/zhitan/system/service/impl/SysRoleServiceImpl.java                                  |  426 
 zhitan-framework/src/main/java/com/zhitan/framework/config/ThreadPoolConfig.java                                    |   63 
 zhitan-system/target/classes/mapper/alarm/AlarmItemMapper.xml                                                       |  226 
 zhitan-system/src/main/java/com/zhitan/model/service/IModelInfoService.java                                         |   72 
 zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/impl/DailyComprehensiveServiceImpl.java      |   41 
 zhitan-generator/src/main/resources/vm/vue/index.vue.vm                                                             |  602 
 zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/EquipmentPointParametersVO.java                       |   76 
 zhitan-system/src/main/resources/mapper/system/SysUserMapper.xml                                                    |  222 
 zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/EquipmentPointParametersExcel.java                    |   70 
 zhitan-generator/src/main/java/com/zhitan/generator/mapper/GenTableColumnMapper.java                                |   60 
 zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabase.java                                   |   88 
 .idea/compiler.xml                                                                                                  |   48 
 zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/RealTimeHistoryDataVO.java                            |   21 
 zhitan-framework/src/main/java/com/zhitan/framework/config/FilterConfig.java                                        |   58 
 zhitan-generator/target/classes/vm/java/sub-domain.java.vm                                                          |   73 
 zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmItemServiceImpl.java                                |  204 
 zhitan-system/target/classes/mapper/model/CalcFunctionMapper.xml                                                    |   70 
 zhitan-quartz/src/main/java/com/zhitan/quartz/util/QuartzDisallowConcurrentExecution.java                           |   21 
 zhitan-quartz/pom.xml                                                                                               |   40 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyLineChatVO.java                    |   28 
 zhitan-system/src/main/java/com/zhitan/home/domain/vo/HomePeakValleyVO.java                                         |   26 
 zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/SysEnerclassController.java                          |  128 
 zhitan-framework/src/main/java/com/zhitan/framework/mqtt/domain/EletricData.java                                    |   18 
 zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java                                       |   80 
 zhitan-system/src/main/java/com/zhitan/system/service/ISysDictDataService.java                                      |   70 
 zhitan-common/src/main/java/com/zhitan/common/utils/PageUtils.java                                                  |   44 
 zhitan-system/src/main/java/com/zhitan/system/mapper/SysDictDataMapper.java                                         |   97 
 zhitan-framework/src/main/java/com/zhitan/framework/config/SecurityConfig.java                                      |  147 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityTypeSettingItemUpdateDTO.java               |   38 
 zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysEnergy.java                                              |  322 
 zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/ExportrealtimeTrendVO.java                            |   17 
 zhitan-system/target/classes/mapper/system/SysDictTypeMapper.xml                                                    |  105 
 zhitan-system/src/main/java/com/zhitan/basicdata/services/IMeterImplementService.java                               |   98 
 zhitan-common/src/main/java/com/zhitan/common/constant/GenConstants.java                                            |  117 
 zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java                                       |  119 
 zhitan-quartz/src/main/java/com/zhitan/quartz/util/ScheduleUtils.java                                               |  141 
 zhitan-common/src/main/java/com/zhitan/common/annotation/Excels.java                                                |   18 
 zhitan-system/src/main/java/com/zhitan/system/service/ISysUserService.java                                          |  206 
 zhitan-generator/target/classes/vm/java/service.java.vm                                                             |   61 
 zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysMenuController.java                                  |  142 
 zhitan-generator/src/main/java/com/zhitan/generator/domain/GenTableColumn.java                                      |  373 
 zhitan-admin/target/classes/logback.xml                                                                             |   93 
 zhitan-generator/src/main/resources/vm/js/api.js.vm                                                                 |   44 
 zhitan-system/src/main/resources/mapper/basicdata/FacilityAnnexMapper.xml                                           |   95 
 zhitan-common/src/main/java/com/zhitan/common/enums/DesensitizedType.java                                           |   59 
 zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/Sys.java                                      |   84 
 zhitan-system/src/main/java/com/zhitan/alarm/domain/HistoryAlarm.java                                               |  173 
 zhitan-system/src/main/java/com/zhitan/basicdata/services/IFacilityArchivesService.java                             |  104 
 zhitan-common/src/main/java/com/zhitan/common/enums/StatisticType.java                                              |    5 
 zhitan-generator/target/classes/vm/vue/v3/index.vue.vm                                                              |  590 
 zhitan-system/src/main/java/com/zhitan/system/service/impl/SysMenuServiceImpl.java                                  |  531 
 zhitan-common/src/main/java/com/zhitan/common/exception/file/InvalidExtensionException.java                         |   80 
 zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml                                                   |  423 
 zhitan-system/src/main/java/com/zhitan/model/mapper/IndexStorageMapper.java                                         |   26 
 zhitan-system/src/main/java/com/zhitan/system/service/ISysNameConfigService.java                                    |   15 
 zhitan-system/src/main/resources/mapper/keyequipment/YearKeyEquipmentMapper.xml                                     |   76 
 zhitan-framework/src/main/java/com/zhitan/framework/web/service/UserDetailsServiceImpl.java                         |   66 
 zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/DailyComprehensive.java                       |   79 
 zhitan-common/src/main/java/com/zhitan/common/core/page/TableSupport.java                                           |   56 
 zhitan-quartz/src/main/java/com/zhitan/quartz/util/AbstractQuartzJob.java                                           |  108 
 zhitan-common/src/main/java/com/zhitan/common/utils/file/MimeTypeUtils.java                                         |   59 
 zhitan-common/src/main/java/com/zhitan/common/exception/user/BlackListException.java                                |   16 
 zhitan-quartz/src/main/java/com/zhitan/quartz/service/impl/SysJobLogServiceImpl.java                                |   88 
 zhitan-common/src/main/java/com/zhitan/common/core/domain/model/LoginBody.java                                      |   69 
 zhitan-system/src/main/java/com/zhitan/model/domain/CalcFunction.java                                               |   86 
 zhitan-generator/target/classes/vm/sql/sql.vm                                                                       |   22 
 zhitan-framework/src/main/java/com/zhitan/framework/constant/SQLFieldConst.java                                     |   23 
 zhitan-admin/src/main/java/com/zhitan/web/controller/realtimedata/RealtimeTrendController.java                      |   72 
 zhitan-framework/src/main/java/com/zhitan/framework/manager/factory/AsyncFactory.java                               |  102 
 zhitan-admin/src/main/resources/META-INF/spring-devtools.properties                                                 |    1 
 zhitan-common/src/main/java/com/zhitan/common/exception/user/UserPasswordNotMatchException.java                     |   16 
 zhitan-framework/src/main/java/com/zhitan/framework/security/context/AuthenticationContextHolder.java               |   28 
 zhitan-system/src/main/java/com/zhitan/system/domain/SysConfig.java                                                 |  115 
 zhitan-system/src/main/java/com/zhitan/system/domain/vo/RouterVo.java                                               |  148 
 zhitan-common/src/main/java/com/zhitan/common/exception/base/BaseException.java                                     |   97 
 zhitan-admin/src/main/resources/application-prod.yml                                                                |   61 
 zhitan-generator/target/classes/vm/vue/index.vue.vm                                                                 |  602 
 zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/SysEquipmentFileServiceImpl.java                   |   47 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/ElectricityTypeSettingPageListVO.java                   |   66 
 zhitan-system/src/main/java/com/zhitan/alarm/domain/HistoryTable.java                                               |   84 
 zhitan-system/src/main/java/com/zhitan/model/service/IIndexStorageService.java                                      |   25 
 zhitan-system/src/main/java/com/zhitan/realtimedata/domain/dto/EnergyIndexMonitorDTO.java                           |   54 
 zhitan-system/src/main/java/com/zhitan/model/service/IModelNodeService.java                                         |  159 
 zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java                   |  149 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyHourDataVO.java                    |  115 
 zhitan-common/src/main/java/com/zhitan/common/utils/LogUtils.java                                                   |   18 
 zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityDataItemListDTO.java                        |   68 
 zhitan-system/src/main/resources/mapper/model/IndexFormulaMapper.xml                                                |   47 
 zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/Cpu.java                                      |  101 
 zhitan-system/src/main/resources/mapper/model/DaqTemplateMapper.xml                                                 |   93 
 zhitan-system/src/main/resources/mapper/basicdata/SysEnergyMapper.xml                                               |  263 
 zhitan-system/src/main/java/com/zhitan/dataitem/domain/DataEntry.java                                               |  112 
 zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysProduct.java                                             |  240 
 zhitan-system/src/main/java/com/zhitan/system/mapper/SysDeptMapper.java                                             |  120 
 zhitan-generator/target/classes/vm/java/serviceImpl.java.vm                                                         |  162 
 zhitan-common/src/main/java/com/zhitan/common/utils/ip/IpUtils.java                                                 |  382 
 zhitan-framework/src/main/java/com/zhitan/framework/config/ServerConfig.java                                        |   32 
 zhitan-framework/src/main/java/com/zhitan/framework/config/I18nConfig.java                                          |   43 
 zhitan-system/src/main/java/com/zhitan/meter/domain/MeterImplements.java                                            |  267 
 zhitan-system/src/main/resources/mapper/system/SysDictTypeMapper.xml                                                |  105 
 zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmLimitTypeServiceImpl.java                           |   78 
 zhitan-system/src/main/java/com/zhitan/system/mapper/SysMenuMapper.java                                             |  127 
 zhitan-framework/src/main/java/com/zhitan/framework/config/CaptchaConfig.java                                       |   83 
 zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ProductEnergyAnalysisVO.java                   |   46 
 zhitan-system/target/classes/mapper/system/SysRoleMapper.xml                                                        |  157 
 zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ProductEnergyAnalysisData.java                 |   47 
 zhitan-system/src/main/java/com/zhitan/model/service/impl/ModelNodeServiceImpl.java                                 |  359 
 zhitan-system/src/main/resources/mapper/model/CalcFunctionMapper.xml                                                |   70 
 zhitan-common/src/main/java/com/zhitan/common/utils/uuid/UUID.java                                                  |  484 
 zhitan-system/src/main/java/com/zhitan/model/domain/IndexFormula.java                                               |   54 
 zhitan-system/target/classes/mapper/system/SysLoginInfoMapper.xml                                                   |   57 
 zhitan-system/src/main/java/com/zhitan/alarm/mapper/HistoryAlarmMapper.java                                         |   44 
 zhitan-system/src/main/java/com/zhitan/basicdata/domain/MeterImplementCount.java                                    |  245 
 zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/RankingChartData.java                          |   19 
 zhitan-common/src/main/java/com/zhitan/common/utils/poi/ExcelHandlerAdapter.java                                    |   24 
 zhitan-system/target/classes/mapper/keyequipment/DailyKeyEquipmentMapper.xml                                        |   93 
 zhitan-common/src/main/java/com/zhitan/common/core/page/PageDomain.java                                             |  101 
 zhitan-system/src/main/java/com/zhitan/realtimedata/domain/TagValue.java                                            |   99 
 zhitan-system/src/main/java/com/zhitan/system/service/impl/SysLoginInfoServiceImpl.java                             |   67 
 zhitan-quartz/src/main/java/com/zhitan/quartz/service/impl/SysJobServiceImpl.java                                   |  262 
 zhitan-common/src/main/java/com/zhitan/common/exception/job/TaskException.java                                      |   34 
 zhitan-common/src/main/java/com/zhitan/common/utils/http/HttpHelper.java                                            |   55 
 zhitan-system/src/main/java/com/zhitan/system/mapper/SysRoleMapper.java                                             |  109 
 zhitan-generator/src/main/java/com/zhitan/generator/service/IGenTableColumnService.java                             |   44 
 zhitan-system/target/classes/mapper/system/SysDeptMapper.xml                                                        |  182 
 zhitan-system/src/main/java/com/zhitan/system/domain/SysUserRole.java                                               |   46 
 /dev/null                                                                                                           |  285 
 zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java                                                |  122 
 zhitan-common/src/main/java/com/zhitan/common/annotation/DataSource.java                                            |   28 
 zhitan-framework/src/main/java/com/zhitan/framework/config/DruidConfig.java                                         |  127 
 zhitan-system/src/main/java/com/zhitan/energyIndicators/mapper/EnergyIndicatorsMapper.java                          |   62 
 zhitan-common/src/main/java/com/zhitan/common/annotation/RepeatSubmit.java                                          |   31 
 697 files changed, 84,253 insertions(+), 380 deletions(-)

diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..a3d5fae
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <annotationProcessing>
+      <profile default="true" name="Default" enabled="true" />
+      <profile name="Maven default annotation processors profile" enabled="true">
+        <sourceOutputDir name="target/generated-sources/annotations" />
+        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
+        <outputRelativeToContentRoot value="true" />
+        <module name="zhitan-quartz" />
+        <module name="zhitan-generator" />
+        <module name="zhitan-admin" />
+        <module name="zhitan-system" />
+        <module name="zhitan-common" />
+        <module name="zhitan-framework" />
+      </profile>
+    </annotationProcessing>
+    <bytecodeTargetLevel>
+      <module name="basic" target="1.8" />
+      <module name="basic-data" target="1.8" />
+      <module name="compute-engine" target="1.8" />
+      <module name="data-model" target="1.8" />
+      <module name="data-monitoring" target="1.8" />
+      <module name="data-service" target="1.8" />
+      <module name="energy-management-server" target="1.8" />
+      <module name="parent" target="1.8" />
+    </bytecodeTargetLevel>
+  </component>
+  <component name="JavacSettings">
+    <option name="ADDITIONAL_OPTIONS_OVERRIDE">
+      <module name="basic" options="-parameters" />
+      <module name="basic-data" options="-parameters" />
+      <module name="compute-engine" options="-parameters" />
+      <module name="data-model" options="-parameters" />
+      <module name="data-monitoring" options="-parameters" />
+      <module name="data-service" options="-parameters" />
+      <module name="energy-management" options="-bootclasspath $USER_HOME$/.jdks/semeru-1.8.0_432/jre/lib/rt.jar;$USER_HOME$/.jdks/semeru-1.8.0_432/jre/lib/jce.jar -Xlint:deprecation" />
+      <module name="energy-management-server" options="-parameters" />
+      <module name="parent" options="-parameters" />
+      <module name="zhitan-admin" options="-bootclasspath $USER_HOME$/.jdks/semeru-1.8.0_432/jre/lib/rt.jar;$USER_HOME$/.jdks/semeru-1.8.0_432/jre/lib/jce.jar -Xlint:deprecation" />
+      <module name="zhitan-common" options="-bootclasspath $USER_HOME$/.jdks/semeru-1.8.0_432/jre/lib/rt.jar;$USER_HOME$/.jdks/semeru-1.8.0_432/jre/lib/jce.jar -Xlint:deprecation" />
+      <module name="zhitan-framework" options="-bootclasspath $USER_HOME$/.jdks/semeru-1.8.0_432/jre/lib/rt.jar;$USER_HOME$/.jdks/semeru-1.8.0_432/jre/lib/jce.jar -Xlint:deprecation" />
+      <module name="zhitan-generator" options="-bootclasspath $USER_HOME$/.jdks/semeru-1.8.0_432/jre/lib/rt.jar;$USER_HOME$/.jdks/semeru-1.8.0_432/jre/lib/jce.jar -Xlint:deprecation" />
+      <module name="zhitan-quartz" options="-bootclasspath $USER_HOME$/.jdks/semeru-1.8.0_432/jre/lib/rt.jar;$USER_HOME$/.jdks/semeru-1.8.0_432/jre/lib/jce.jar -Xlint:deprecation" />
+      <module name="zhitan-system" options="-bootclasspath $USER_HOME$/.jdks/semeru-1.8.0_432/jre/lib/rt.jar;$USER_HOME$/.jdks/semeru-1.8.0_432/jre/lib/jce.jar -Xlint:deprecation" />
+    </option>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..4e9e1d4
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding">
+    <file url="file://$PROJECT_DIR$/basic-data/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/basic/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/compute-engine/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/compute-engine/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-model/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-monitoring/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-service/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/energy_management_server/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/energy_management_server/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/parent/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/zhitan-admin/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/zhitan-admin/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/zhitan-common/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/zhitan-common/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/zhitan-framework/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/zhitan-framework/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/zhitan-generator/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/zhitan-generator/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/zhitan-quartz/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/zhitan-quartz/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/zhitan-system/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/zhitan-system/src/main/resources" charset="UTF-8" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..97350d4
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RemoteRepositoriesConfiguration">
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Central Repository" />
+      <option name="url" value="https://repo.maven.apache.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="central" />
+      <option name="url" value="https://maven.aliyun.com/repository/central" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="public" />
+      <option name="name" value="aliyun nexus" />
+      <option name="url" value="http://maven.aliyun.com/nexus/content/groups/public/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="ali-public" />
+      <option name="name" value="ali-public" />
+      <option name="url" value="https://maven.aliyun.com/repository/public" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Maven Central repository" />
+      <option name="url" value="https://repo1.maven.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="jboss.community" />
+      <option name="name" value="JBoss Community repository" />
+      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
+    </remote-repository>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..b784bbc
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ExternalStorageConfigurationManager" enabled="true" />
+  <component name="MavenProjectsManager">
+    <option name="originalFiles">
+      <list>
+        <option value="$PROJECT_DIR$/pom.xml" />
+      </list>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
+</project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index bc51d50..204d22b 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,21 +1,20 @@
-MIT License
+The MIT License (MIT)
 
-Copyright (c) 2024 AndyYin
+Copyright (c) 2018 admin
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF
deleted file mode 100644
index 57e1ec5..0000000
--- a/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Main-Class: com.dingzhuo.energy.EnergyManagementApplication
-
diff --git a/basic-data/pom.xml b/basic-data/pom.xml
deleted file mode 100644
index 90ea352..0000000
--- a/basic-data/pom.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <parent>
-    <artifactId>energy-management</artifactId>
-    <groupId>com.dingzhuo</groupId>
-    <version>1.0.0</version>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-
-  <artifactId>basic-data</artifactId>
-  <dependencies>
-    <dependency>
-      <groupId>com.dingzhuo</groupId>
-      <artifactId>basic</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-
-
-</project>
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/controller/SysEnerclassController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/controller/SysEnerclassController.java
deleted file mode 100644
index 9d72b86..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/controller/SysEnerclassController.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.controller;
-
-import java.util.List;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysEnerclass;
-import com.dingzhuo.energy.basic.data.enerInfoManage.service.ISysEnerclassService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * 鑳芥簮鍝佺璁剧疆Controller
- *
- * @author ruoyi
- * @date 2020-02-10
- */
-@RestController
-@RequestMapping("/enerInfoManage/enerclass")
-public class SysEnerclassController extends BaseController
-{
-    @Autowired
-    private ISysEnerclassService sysEnerclassService;
-
-    /**
-     * 鏌ヨ鑳芥簮鍝佺璁剧疆鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:enerclass:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(SysEnerclass sysEnerclass)
-    {
-        startPage();
-        List<SysEnerclass> list = sysEnerclassService.selectSysEnerclassList(sysEnerclass);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭鑳芥簮鍝佺璁剧疆鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:enerclass:export')")
-    @Log(title = "鑳芥簮鍝佺璁剧疆", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(SysEnerclass sysEnerclass)
-    {
-        List<SysEnerclass> list = sysEnerclassService.selectSysEnerclassList(sysEnerclass);
-        ExcelUtil<SysEnerclass> util = new ExcelUtil<SysEnerclass>(SysEnerclass.class);
-        return util.exportExcel(list, "enerclass");
-    }
-
-    /**
-     * 鑾峰彇鑳芥簮鍝佺璁剧疆璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:enerclass:query')")
-    @GetMapping(value = "/{enerclassid}")
-    public AjaxResult getInfo(@PathVariable("enerclassid") Integer enerclassid)
-    {
-        return AjaxResult.success(sysEnerclassService.selectSysEnerclassById(enerclassid));
-    }
-
-    /**
-     * 鏂板鑳芥簮鍝佺璁剧疆
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:enerclass:add')")
-    @Log(title = "鑳芥簮鍝佺璁剧疆", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody SysEnerclass sysEnerclass) {
-        //闈炵┖鏍¢獙
-        String name = sysEnerclass.getEnerclassname();
-        if(name.length()>10){
-            return AjaxResult.error("鏂板澶辫触锛岃兘婧愬悕绉拌秴闀匡紒");
-        }
-        Integer nameNum = sysEnerclassService.selectSameEnergyNameNum(name);
-        if (nameNum==0){
-            return toAjax(sysEnerclassService.insertSysEnerclass(sysEnerclass));
-        }
-        return AjaxResult.error("鏂板澶辫触锛岃妫�鏌ヨ兘婧愬悕绉版槸鍚﹂噸澶嶏紒");
-    }
-
-    /**
-     * 淇敼鑳芥簮鍝佺璁剧疆
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:enerclass:edit')")
-    @Log(title = "鑳芥簮鍝佺璁剧疆", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody SysEnerclass sysEnerclass) {
-        //鍞竴鏍¢獙
-        Integer id = sysEnerclass.getEnerclassid();
-        String enerName = sysEnerclass.getEnerclassname();
-        if(enerName.length()>10){
-            return AjaxResult.error("淇敼澶辫触锛岃兘婧愬悕绉拌秴闀匡紒");
-        }
-        //  閫氳繃瑕佹敼鐨勮兘婧愬悕绉版煡宸叉湁涓�鏍风殑鑳芥簮鍚嶇О鏈夊嚑涓�                  濡傛灉绛変簬1灏辫閫氳繃id鍒ゆ柇鏄笉鏄敼鑷繁
-        if(sysEnerclassService.selectSameEnergyNameNum(enerName)==1&&id.equals(sysEnerclassService.selectIdByName(enerName))){
-            return toAjax(sysEnerclassService.updateSysEnerclass(sysEnerclass));
-        //                  濡傛灉=0 灏辫鏄庤繖涓兘婧愬悕绉板彲鏀�
-        }else if(sysEnerclassService.selectSameEnergyNameNum(enerName)==0){
-            return toAjax(sysEnerclassService.updateSysEnerclass(sysEnerclass));
-        }
-        return AjaxResult.error("淇敼澶辫触锛岃兘婧愬悕绉伴噸澶嶏紒");
-    }
-
-    /**
-     * 鍒犻櫎鑳芥簮鍝佺璁剧疆
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:enerclass:remove')")
-    @Log(title = "鑳芥簮鍝佺璁剧疆", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{enerclassids}")
-    public AjaxResult remove(@PathVariable Integer[] enerclassids)
-    {
-        return toAjax(sysEnerclassService.deleteSysEnerclassByIds(enerclassids));
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/controller/SysEnercoefficientController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/controller/SysEnercoefficientController.java
deleted file mode 100644
index 4d20fe9..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/controller/SysEnercoefficientController.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.controller;
-
-import java.util.List;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysEnercoefficient;
-import com.dingzhuo.energy.basic.data.enerInfoManage.service.ISysEnercoefficientService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * 鑳芥簮鎶樻爣绯绘暟Controller
- * 
- * @author sys
- * @date 2020-02-18
- */
-@RestController
-@RequestMapping("/enerInfoManage/enercoefficient")
-public class SysEnercoefficientController extends BaseController
-{
-    @Autowired
-    private ISysEnercoefficientService sysEnercoefficientService;
-
-    /**
-     * 鏌ヨ鑳芥簮鎶樻爣绯绘暟鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:enercoefficient:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(SysEnercoefficient sysEnercoefficient)
-    {
-        startPage();
-        List<SysEnercoefficient> list = sysEnercoefficientService.selectSysEnercoefficientList(sysEnercoefficient);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭鑳芥簮鎶樻爣绯绘暟鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:enercoefficient:export')")
-    @Log(title = "鑳芥簮鎶樻爣绯绘暟", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(SysEnercoefficient sysEnercoefficient)
-    {
-        List<SysEnercoefficient> list = sysEnercoefficientService.selectSysEnercoefficientList(sysEnercoefficient);
-        ExcelUtil<SysEnercoefficient> util = new ExcelUtil<SysEnercoefficient>(SysEnercoefficient.class);
-        return util.exportExcel(list, "enercoefficient");
-    }
-
-    /**
-     * 鑾峰彇鑳芥簮鎶樻爣绯绘暟璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:enercoefficient:query')")
-    @GetMapping(value = "/{ecid}")
-    public AjaxResult getInfo(@PathVariable("ecid") Integer ecid)
-    {
-        return AjaxResult.success(sysEnercoefficientService.selectSysEnercoefficientById(ecid));
-    }
-
-    /**
-     * 鏂板鑳芥簮鎶樻爣绯绘暟
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:enercoefficient:add')")
-    @Log(title = "鑳芥簮鎶樻爣绯绘暟", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody SysEnercoefficient sysEnercoefficient)
-    {
-        return toAjax(sysEnercoefficientService.insertSysEnercoefficient(sysEnercoefficient));
-    }
-
-    /**
-     * 淇敼鑳芥簮鎶樻爣绯绘暟
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:enercoefficient:edit')")
-    @Log(title = "鑳芥簮鎶樻爣绯绘暟", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody SysEnercoefficient sysEnercoefficient)
-    {
-        return toAjax(sysEnercoefficientService.updateSysEnercoefficient(sysEnercoefficient));
-    }
-
-    /**
-     * 鍒犻櫎鑳芥簮鎶樻爣绯绘暟
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:enercoefficient:remove')")
-    @Log(title = "鑳芥簮鎶樻爣绯绘暟", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ecids}")
-    public AjaxResult remove(@PathVariable Integer[] ecids)
-    {
-        return toAjax(sysEnercoefficientService.deleteSysEnercoefficientByIds(ecids));
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/controller/SysEnergyController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/controller/SysEnergyController.java
deleted file mode 100644
index c78d23e..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/controller/SysEnergyController.java
+++ /dev/null
@@ -1,218 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.controller;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.List;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysEnerclass;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysEnergy;
-import com.dingzhuo.energy.basic.data.enerInfoManage.service.ISysEnergyService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * energyController
- *
- * @author ruoyi
- * @date 2020-02-12
- */
-@RestController
-@RequestMapping("/enerInfoManage/energy")
-public class SysEnergyController extends BaseController
-{
-    @Autowired
-    private ISysEnergyService sysEnergyService;
-
-    /**
-     * 鏌ヨenerclassname鑳芥簮绫诲瀷鍚嶇О涓嬫媺妗�
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:getenerclassname')")
-    @GetMapping("/getenerclassname")
-    public AjaxResult list()
-    {
-        List<SysEnerclass> s = sysEnergyService.getenerclassname();
-        return AjaxResult.success(s);
-    }
-
-    /**
-     * 鏌ヨenergy鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(SysEnergy sysEnergy)
-    {
-        startPage();
-        List<SysEnergy> list = sysEnergyService.selectSysEnergyList(sysEnergy);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭energy鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:export')")
-    @Log(title = "energy", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(SysEnergy sysEnergy)
-    {
-        List<SysEnergy> list = sysEnergyService.selectSysEnergyList(sysEnergy);
-        ExcelUtil<SysEnergy> util = new ExcelUtil<SysEnergy>(SysEnergy.class);
-        return util.exportExcel(list, "energy");
-    }
-
-    /**
-     * 鑾峰彇energy璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:query')")
-    @GetMapping(value = "/{enerid}")
-    public AjaxResult getInfo(@PathVariable("enerid") Integer enerid)
-    {
-        SysEnergy sysEnergy = sysEnergyService.selectSysEnergyById(enerid);
-        if(sysEnergy.getIsstorage()==0){
-            sysEnergy.setIsstorageString("鏄�");
-        }else{
-            sysEnergy.setIsstorageString("鍚�");
-        }
-        return AjaxResult.success(sysEnergy);
-    }
-
-    /**
-     * 鏂板energy
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:add')")
-    @Log(title = "energy", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody SysEnergy sysEnergy)
-    {
-        String a = sysEnergy.getIsstorageString();
-        if(a.equals("鏄�")){
-            sysEnergy.setIsstorage(0);
-        }else {
-            sysEnergy.setIsstorage(1);
-        }
-        String d = sysEnergy.getEnerclassname();
-        Integer enerclassid = sysEnergyService.getEnerClassid(d);
-        sysEnergy.setEnerclassid(enerclassid);
-        //闈炵┖鏍¢獙
-        String name = sysEnergy.getEnername();
-        if(name.length()>10){
-            return AjaxResult.error("鏂板澶辫触锛岃兘婧愬悕绉拌秴闀匡紒");
-        }
-        Integer nameNum = sysEnergyService.selectSameEnergyNameNum(name);
-        if (nameNum==0){
-            return toAjax(sysEnergyService.insertSysEnergy(sysEnergy));
-        }
-        return AjaxResult.error("鏂板澶辫触锛岃妫�鏌ヨ兘婧愬悕绉版槸鍚﹂噸澶嶏紒");
-    }
-
-    /**
-     * 淇敼energy
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:edit')")
-    @Log(title = "energy", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody SysEnergy sysEnergy)
-    {
-        String a = sysEnergy.getIsstorageString();
-        if(a.equals("鏄�")){
-            sysEnergy.setIsstorage(0);
-        }else {
-            sysEnergy.setIsstorage(1);
-        }
-        String d = sysEnergy.getEnerclassname();
-        Integer enerclassid = sysEnergyService.getEnerClassid(d);
-        sysEnergy.setEnerclassid(enerclassid);
-        //鍞竴鏍¢獙
-        Integer id = sysEnergy.getEnerid();
-        String enerName = sysEnergy.getEnerclassname();
-        if(enerName.length()>10){
-            return AjaxResult.error("淇敼澶辫触锛岃兘婧愬悕绉拌秴闀匡紒");
-        }
-        //  閫氳繃瑕佹敼鐨勮兘婧愬悕绉版煡宸叉湁涓�鏍风殑鑳芥簮鍚嶇О鏈夊嚑涓�                  濡傛灉绛変簬1灏辫閫氳繃id鍒ゆ柇鏄笉鏄敼鑷繁
-        if(sysEnergyService.selectSameEnergyNameNum(enerName)==1&&id.equals(sysEnergyService.selectIdByName(enerName))){
-            return toAjax(sysEnergyService.updateSysEnergy(sysEnergy));
-            //                  濡傛灉=0 灏辫鏄庤繖涓兘婧愬悕绉板彲鏀�
-        }else if(sysEnergyService.selectSameEnergyNameNum(enerName)==0){
-            return toAjax(sysEnergyService.updateSysEnergy(sysEnergy));
-        }
-        return AjaxResult.error("淇敼澶辫触锛岃兘婧愬悕绉伴噸澶嶏紒");
-    }
-    /**
-     * 淇濆瓨鑳芥簮鍗曚环璁剧疆
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:updateEnergyPrice')")
-    @Log(title = "energy", businessType = BusinessType.UPDATE)
-    @PutMapping("/updateEnergyPrice")
-    public AjaxResult updateEnergyPrice(@RequestBody(required = false) SysEnergy sysEnergy) throws ParseException {
-        Integer enerid = sysEnergy.getEnerid();
-        if(sysEnergy.getExecdate()==null){
-            return AjaxResult.error("鎵ц鏃ユ湡涓嶈兘涓虹┖锛�");
-        }
-        Date date = new Date();
-        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
-        String dateString = formatter.format(date);
-        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-        Date now = df.parse(dateString);
-        if(sysEnergy.getExecdate().before(now)){
-            return AjaxResult.error("鎵ц鏃ユ湡浠ヨ繃锛�");
-        }
-        if((sysEnergyService.getPriceCountByEnerid(sysEnergy))==0){
-            return toAjax(sysEnergyService.insertEnergyPrice(sysEnergy));
-        }else if((sysEnergyService.getPriceCountByEnerid(sysEnergy))==1){
-            return toAjax(sysEnergyService.updateEnergyPrice(sysEnergy));
-        }
-            return AjaxResult.error("淇濆瓨澶辫触锛�");
-    }
-    /**
-     * 淇濆瓨鑳芥簮鎶樻爣绯绘暟璁剧疆
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:updateEnergyCoefficient')")
-    @Log(title = "energy", businessType = BusinessType.UPDATE)
-    @PutMapping("/updateEnergyCoefficient")
-    public AjaxResult updateEnergyCoefficient(@RequestBody(required = false) SysEnergy sysEnergy) throws ParseException {
-        Integer enerid = sysEnergy.getEnerid();
-        if(sysEnergy.getCoefficientexecdate()==null){
-            return AjaxResult.error("鎵ц鏃ユ湡涓嶈兘涓虹┖锛�");
-        }
-        Date date = new Date();
-        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
-        String dateString = formatter.format(date);
-        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-        Date now = df.parse(dateString);
-        if(sysEnergy.getCoefficientexecdate().before(now)){
-            return AjaxResult.error("鎵ц鏃ユ湡浠ヨ繃锛�");
-        }
-        Integer count = sysEnergyService.getCoefficientCountByEnerid(enerid);
-        if(count==0){
-            return toAjax(sysEnergyService.insertEnergyCoefficient(sysEnergy));
-        }else if(count==1){
-            return toAjax(sysEnergyService.updateEnergyCoefficient(sysEnergy));
-        }
-        return AjaxResult.error("淇濆瓨澶辫触锛�");
-    }
-
-    /**
-     * 鍒犻櫎energy
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:remove')")
-    @Log(title = "energy", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{enerids}")
-    public AjaxResult remove(@PathVariable Integer[] enerids)
-    {
-        return toAjax(sysEnergyService.deleteSysEnergyByIds(enerids));
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/controller/SysPriceController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/controller/SysPriceController.java
deleted file mode 100644
index 35b86ee..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/controller/SysPriceController.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysPrice;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.basic.data.enerInfoManage.service.ISysPriceService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * 鍗曚环璁剧疆Controller
- *
- * @author ruoyi
- * @date 2020-02-15
- */
-@RestController
-@RequestMapping("/price/price")
-public class SysPriceController extends BaseController
-{
-    @Autowired
-    private ISysPriceService sysPriceService;
-
-    /**
-     * 鏌ヨ鍗曚环璁剧疆鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('price:price:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(SysPrice sysPrice)
-    {
-        startPage();
-        List<SysPrice> list = sysPriceService.selectSysPriceList(sysPrice);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭鍗曚环璁剧疆鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('price:price:export')")
-    @Log(title = "鍗曚环璁剧疆", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(SysPrice sysPrice)
-    {
-        List<SysPrice> list = sysPriceService.selectSysPriceList(sysPrice);
-        ExcelUtil<SysPrice> util = new ExcelUtil<SysPrice>(SysPrice.class);
-        return util.exportExcel(list, "price");
-    }
-
-    /**
-     * 鑾峰彇鍗曚环璁剧疆璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('price:price:query')")
-    @GetMapping(value = "/{priceid}")
-    public AjaxResult getInfo(@PathVariable("priceid") Integer priceid)
-    {
-        return AjaxResult.success(sysPriceService.selectSysPriceById(priceid));
-    }
-
-    /**
-     * 鏂板鍗曚环璁剧疆
-     */
-    @PreAuthorize("@ss.hasPermi('price:price:add')")
-    @Log(title = "鍗曚环璁剧疆", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody SysPrice sysPrice)
-    {
-        return toAjax(sysPriceService.insertSysPrice(sysPrice));
-    }
-
-    /**
-     * 淇敼鍗曚环璁剧疆
-     */
-    @PreAuthorize("@ss.hasPermi('price:price:edit')")
-    @Log(title = "鍗曚环璁剧疆", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody SysPrice sysPrice)
-    {
-        return toAjax(sysPriceService.updateSysPrice(sysPrice));
-    }
-
-    /**
-     * 鍒犻櫎鍗曚环璁剧疆
-     */
-    @PreAuthorize("@ss.hasPermi('price:price:remove')")
-    @Log(title = "鍗曚环璁剧疆", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{priceids}")
-    public AjaxResult remove(@PathVariable Integer[] priceids)
-    {
-        return toAjax(sysPriceService.deleteSysPriceByIds(priceids));
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/controller/SysProductController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/controller/SysProductController.java
deleted file mode 100644
index ed98c5b..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/controller/SysProductController.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.controller;
-
-import java.util.List;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysProduct;
-import com.dingzhuo.energy.basic.data.enerInfoManage.service.ISysProductService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * 浜у搧Controller
- *
- * @author sys
- * @date 2020-02-19
- */
-@RestController
-@RequestMapping("/enerInfoManage/product")
-public class SysProductController extends BaseController
-{
-    @Autowired
-    private ISysProductService sysProductService;
-
-    /**
-     * 鏌ヨ浜у搧鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:product:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(SysProduct sysProduct)
-    {
-        startPage();
-        List<SysProduct> list = sysProductService.selectSysProductList(sysProduct);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭浜у搧鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:product:export')")
-    @Log(title = "浜у搧", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(SysProduct sysProduct)
-    {
-        List<SysProduct> list = sysProductService.selectSysProductList(sysProduct);
-        ExcelUtil<SysProduct> util = new ExcelUtil<SysProduct>(SysProduct.class);
-        return util.exportExcel(list, "product");
-    }
-
-    /**
-     * 鑾峰彇浜у搧璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:product:query')")
-    @GetMapping(value = "/{productid}")
-    public AjaxResult getInfo(@PathVariable("productid") Integer productid)
-    {
-        return AjaxResult.success(sysProductService.selectSysProductById(productid));
-    }
-
-    /**
-     * 鏂板浜у搧
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:product:add')")
-    @Log(title = "浜у搧", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody SysProduct sysProduct) {
-        Integer sameNameNum = sysProductService.selectCountByName(sysProduct);
-        Integer sameNoNum = sysProductService.selectCountByNo(sysProduct);
-        if(sameNameNum==sameNoNum){
-            if(sameNameNum==0){
-                return toAjax(sysProductService.insertSysProduct(sysProduct));
-            }
-        }
-        return AjaxResult.error("鏂板澶辫触锛屼骇鍝佸悕绉版垨浜у搧缂栧彿閲嶅锛�");
-    }
-
-    /**
-     * 淇敼浜у搧
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:product:edit')")
-    @Log(title = "浜у搧", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody SysProduct sysProduct)
-    {
-        Integer id = sysProduct.getProductid();
-        Integer sameNameNum = sysProductService.selectCountByName(sysProduct);
-        Integer sameNoNum = sysProductService.selectCountByNo(sysProduct);
-        if(sameNameNum==sameNoNum){
-            if(sameNameNum==0){
-                return toAjax(sysProductService.updateSysProduct(sysProduct));
-            }
-        }
-        boolean s = id==sysProductService.selectIdByName(sysProduct);
-        boolean a = id==sysProductService.selectIdByNo(sysProduct);
-        if(sameNameNum==1&&sameNoNum==1){
-            if(a&&s){
-                return toAjax(sysProductService.updateSysProduct(sysProduct));
-            }
-        }else if(sameNameNum==1&&sameNoNum==0&&s){
-            return toAjax(sysProductService.updateSysProduct(sysProduct));
-        }else if(sameNoNum==1&&sameNameNum==0&&a){
-            return toAjax(sysProductService.updateSysProduct(sysProduct));
-        }
-        return AjaxResult.error("淇敼澶辫触锛屼骇鍝佸悕绉版垨浜у搧缂栧彿閲嶅锛�");
-    }
-
-    /**
-     * 鍒犻櫎浜у搧
-     */
-    @PreAuthorize("@ss.hasPermi('enerInfoManage:product:remove')")
-    @Log(title = "浜у搧", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{productids}")
-    public AjaxResult remove(@PathVariable Integer[] productids)
-    {
-        return toAjax(sysProductService.deleteSysProductByIds(productids));
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/domain/SysEnerclass.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/domain/SysEnerclass.java
deleted file mode 100644
index 28f895d..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/domain/SysEnerclass.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * 鑳芥簮鍝佺璁剧疆瀵硅薄 sys_enerclass
- * 
- * @author ruoyi
- * @date 2020-02-10
- */
-public class SysEnerclass extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 鑳芥簮绫诲埆ID */
-    private Integer enerclassid;
-
-    /** 鑳芥簮绫诲埆鍚嶇О */
-    @Excel(name = "鑳芥簮绫诲埆鍚嶇О")
-    private String enerclassname;
-
-    /** 鎿嶄綔浜� */
-    @Excel(name = "鎿嶄綔浜�")
-    private String oprMan;
-
-    /** 鎿嶄綔鏃堕棿 */
-    @Excel(name = "鎿嶄綔鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date oprTime;
-
-    /** 鏇存柊浜� */
-    @Excel(name = "鏇存柊浜�")
-    private String modMan;
-
-    /** 鏇存柊鏃堕棿 */
-    @Excel(name = "鏇存柊鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date modTime;
-
-    /** 澶囨敞 */
-    @Excel(name = "澶囨敞")
-    private String note;
-
-    public void setEnerclassid(Integer enerclassid) 
-    {
-        this.enerclassid = enerclassid;
-    }
-
-    public Integer getEnerclassid() 
-    {
-        return enerclassid;
-    }
-    public void setEnerclassname(String enerclassname) 
-    {
-        this.enerclassname = enerclassname;
-    }
-
-    public String getEnerclassname() 
-    {
-        return enerclassname;
-    }
-    public void setOprMan(String oprMan) 
-    {
-        this.oprMan = oprMan;
-    }
-
-    public String getOprMan() 
-    {
-        return oprMan;
-    }
-    public void setOprTime(Date oprTime) 
-    {
-        this.oprTime = oprTime;
-    }
-
-    public Date getOprTime() 
-    {
-        return oprTime;
-    }
-    public void setModMan(String modMan) 
-    {
-        this.modMan = modMan;
-    }
-
-    public String getModMan() 
-    {
-        return modMan;
-    }
-    public void setModTime(Date modTime) 
-    {
-        this.modTime = modTime;
-    }
-
-    public Date getModTime() 
-    {
-        return modTime;
-    }
-    public void setNote(String note) 
-    {
-        this.note = note;
-    }
-
-    public String getNote() 
-    {
-        return note;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("enerclassid", getEnerclassid())
-            .append("enerclassname", getEnerclassname())
-            .append("oprMan", getOprMan())
-            .append("oprTime", getOprTime())
-            .append("modMan", getModMan())
-            .append("modTime", getModTime())
-            .append("note", getNote())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/domain/SysEnercoefficient.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/domain/SysEnercoefficient.java
deleted file mode 100644
index 1e901db..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/domain/SysEnercoefficient.java
+++ /dev/null
@@ -1,171 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * 鑳芥簮鎶樻爣绯绘暟瀵硅薄 sys_enercoefficient
- *
- * @author sys
- * @date 2020-02-18
- */
-public class SysEnercoefficient extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 鎶樻爣绯绘暟ID */
-    private Integer ecid;
-
-    /** 鑳芥簮ID */
-    @Excel(name = "鑳芥簮ID")
-    private Integer enerid;
-
-    /** 绛変环鎶樻爣绯绘暟 */
-    @Excel(name = "绛変环鎶樻爣绯绘暟")
-    private double coefficient;
-
-    /** 褰撻噺鎶樻爣绯绘暟 */
-    @Excel(name = "褰撻噺鎶樻爣绯绘暟")
-    private double coefficient2;
-
-    /** 鎵ц鏃ユ湡 */
-    @Excel(name = "鎵ц鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date execdate;
-
-    /** 鎿嶄綔浜� */
-    private String oprMan;
-
-    /** 鎿嶄綔鏃堕棿 */
-    private Date oprTime;
-
-    /** 鏇存柊浜� */
-    private String modMan;
-
-    /** 鏇存柊鏃堕棿 */
-    private Date modTime;
-
-    /** 澶囨敞 */
-    @Excel(name = "澶囨敞")
-    private String note;
-
-    //  鑳芥簮鍚嶇О
-    private String enername;
-
-    public String getEnername() {
-        return enername;
-    }
-
-    public void setEnername(String enername) {
-        this.enername = enername;
-    }
-
-    public void setEcid(Integer ecid)
-    {
-        this.ecid = ecid;
-    }
-
-    public Integer getEcid()
-    {
-        return ecid;
-    }
-    public void setEnerid(Integer enerid)
-    {
-        this.enerid = enerid;
-    }
-
-    public Integer getEnerid()
-    {
-        return enerid;
-    }
-    public void setCoefficient(double coefficient)
-    {
-        this.coefficient = coefficient;
-    }
-
-    public double getCoefficient()
-    {
-        return coefficient;
-    }
-    public void setCoefficient2(double coefficient2)
-    {
-        this.coefficient2 = coefficient2;
-    }
-
-    public double getCoefficient2()
-    {
-        return coefficient2;
-    }
-    public void setExecdate(Date execdate)
-    {
-        this.execdate = execdate;
-    }
-
-    public Date getExecdate()
-    {
-        return execdate;
-    }
-    public void setOprMan(String oprMan)
-    {
-        this.oprMan = oprMan;
-    }
-
-    public String getOprMan()
-    {
-        return oprMan;
-    }
-    public void setOprTime(Date oprTime)
-    {
-        this.oprTime = oprTime;
-    }
-
-    public Date getOprTime()
-    {
-        return oprTime;
-    }
-    public void setModMan(String modMan)
-    {
-        this.modMan = modMan;
-    }
-
-    public String getModMan()
-    {
-        return modMan;
-    }
-    public void setModTime(Date modTime)
-    {
-        this.modTime = modTime;
-    }
-
-    public Date getModTime()
-    {
-        return modTime;
-    }
-    public void setNote(String note)
-    {
-        this.note = note;
-    }
-
-    public String getNote()
-    {
-        return note;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("ecid", getEcid())
-            .append("enerid", getEnerid())
-            .append("coefficient", getCoefficient())
-            .append("coefficient2", getCoefficient2())
-            .append("execdate", getExecdate())
-            .append("oprMan", getOprMan())
-            .append("oprTime", getOprTime())
-            .append("modMan", getModMan())
-            .append("modTime", getModTime())
-            .append("note", getNote())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/domain/SysEnergy.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/domain/SysEnergy.java
deleted file mode 100644
index 2eab4e8..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/domain/SysEnergy.java
+++ /dev/null
@@ -1,298 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * energy瀵硅薄 sys_energy
- *
- * @author ruoyi
- * @date 2020-02-12
- */
-public class SysEnergy extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 鎿嶄綔浜� */
-    @Excel(name = "鎿嶄綔浜�")
-    private String oprMan;
-
-    /** 鎿嶄綔鏃堕棿 */
-    @Excel(name = "鎿嶄綔鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date oprTime;
-
-    /** 淇敼浜� */
-    @Excel(name = "淇敼浜�")
-    private String modMan;
-
-    /** 淇敼鏃堕棿 */
-    @Excel(name = "淇敼鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date modTime;
-
-    /** 鑳芥簮ID */
-    private Integer enerid;
-
-    /** 鑳芥簮鍚嶇О */
-    @Excel(name = "鑳芥簮鍚嶇О")
-    private String enername;
-
-    /** 璁¢噺鍗曚綅ID */
-    private Integer muid;
-
-    /** 鑳芥簮绫诲埆ID */
-    private Integer enerclassid;
-
-    /** 鑳芥簮缂栧彿 */
-    @Excel(name = "鑳芥簮缂栧彿")
-    private String enersno;
-
-    /** 鏄惁瀛樺偍 */
-    @Excel(name = "鏄惁瀛樺偍")
-    private Integer isstorage;
-
-    /** 澶囨敞 */
-    @Excel(name = "澶囨敞")
-    private String note;
-
-    /** 鑳芥簮绫诲瀷 */
-    @Excel(name = "鑳芥簮绫诲瀷")
-    private String enerclassname;
-
-    /** 鏄惁鍌ㄥ瓨锛堝瓧绗︿覆锛� */
-    private String isstorageString;
-
-    /** 鍗曚环*/
-    private double price;
-
-    /** 鎵ц鏃ユ湡 */
-    @Excel(name = "淇敼鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date execdate;
-
-    /** 浠锋牸澶囨敞 */
-    private String pricenote;
-
-    private Integer muidString;
-
-    public String getMuidName() {
-        return muidName;
-    }
-
-    public void setMuidName(String muidName) {
-        this.muidName = muidName;
-    }
-
-    private String muidName;
-
-    //绛変环鎶樻爣绯绘暟
-    private double coefficient;
-
-    //褰撻噺鎶樻爣绯绘暟
-    private double coefficient2;
-
-    //鎶樻爣绯绘暟note
-    private String coefficientnote;
-
-    /** 鎶樻爣绯绘暟鎵ц鏃ユ湡 */
-    @Excel(name = "淇敼鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date coefficientexecdate;
-
-    public double getCoefficient() {
-        return coefficient;
-    }
-
-    public void setCoefficient(double coefficient) {
-        this.coefficient = coefficient;
-    }
-
-    public double getCoefficient2() {
-        return coefficient2;
-    }
-
-    public void setCoefficient2(double coefficient2) {
-        this.coefficient2 = coefficient2;
-    }
-
-    public String getCoefficientnote() {
-        return coefficientnote;
-    }
-
-    public void setCoefficientnote(String coefficientnote) {
-        this.coefficientnote = coefficientnote;
-    }
-
-    public Date getCoefficientexecdate() {
-        return coefficientexecdate;
-    }
-
-    public void setCoefficientexecdate(Date coefficientexecdate) {
-        this.coefficientexecdate = coefficientexecdate;
-    }
-
-    public Integer getMuidString() {
-        return muidString;
-    }
-
-    public void setMuidString(Integer muidString) {
-        this.muidString = muidString;
-    }
-
-    public double getPrice() {
-        return price;
-    }
-
-    public void setPrice(double price) {
-        this.price = price;
-    }
-
-    public Date getExecdate() {
-        return execdate;
-    }
-
-    public void setExecdate(Date execdate) {
-        this.execdate = execdate;
-    }
-
-    public String getPricenote() {
-        return pricenote;
-    }
-
-    public void setPricenote(String pricenote) {
-        this.pricenote = pricenote;
-    }
-
-    public String getIsstorageString() {
-        return isstorageString;
-    }
-
-    public void setIsstorageString(String isstorageString) {
-        this.isstorageString = isstorageString;
-    }
-
-    public String getEnerclassname() {
-        return enerclassname;
-    }
-
-    public void setEnerclassname(String enerclassname) {
-        this.enerclassname = enerclassname;
-    }
-
-    public void setOprMan(String oprMan)
-    {
-        this.oprMan = oprMan;
-    }
-
-    public String getOprMan()
-    {
-        return oprMan;
-    }
-    public void setOprTime(Date oprTime)
-    {
-        this.oprTime = oprTime;
-    }
-
-    public Date getOprTime()
-    {
-        return oprTime;
-    }
-    public void setModMan(String modMan)
-    {
-        this.modMan = modMan;
-    }
-
-    public String getModMan()
-    {
-        return modMan;
-    }
-    public void setModTime(Date modTime)
-    {
-        this.modTime = modTime;
-    }
-
-    public Date getModTime()
-    {
-        return modTime;
-    }
-    public void setEnerid(Integer enerid)
-    {
-        this.enerid = enerid;
-    }
-
-    public Integer getEnerid()
-    {
-        return enerid;
-    }
-    public void setEnername(String enername)
-    {
-        this.enername = enername;
-    }
-
-    public String getEnername()
-    {
-        return enername;
-    }
-    public void setMuid(Integer muid)
-    {
-        this.muid = muid;
-    }
-
-    public Integer getMuid()
-    {
-        return muid;
-    }
-    public void setEnerclassid(Integer enerclassid)
-    {
-        this.enerclassid = enerclassid;
-    }
-
-    public Integer getEnerclassid()
-    {
-        return enerclassid;
-    }
-    public void setEnersno(String enersno)
-    {
-        this.enersno = enersno;
-    }
-
-    public String getEnersno()
-    {
-        return enersno;
-    }
-    public void setIsstorage(Integer isstorage)
-    {
-        this.isstorage = isstorage;
-    }
-
-    public Integer getIsstorage()
-    {
-        return isstorage;
-    }
-    public void setNote(String note)
-    {
-        this.note = note;
-    }
-
-    public String getNote()
-    {
-        return note;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("oprMan", getOprMan())
-            .append("oprTime", getOprTime())
-            .append("modMan", getModMan())
-            .append("modTime", getModTime())
-            .append("enerid", getEnerid())
-            .append("enername", getEnername())
-            .append("muid", getMuid())
-            .append("enerclassid", getEnerclassid())
-            .append("enersno", getEnersno())
-            .append("isstorage", getIsstorage())
-            .append("note", getNote())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/domain/SysPrice.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/domain/SysPrice.java
deleted file mode 100644
index a8a6f62..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/domain/SysPrice.java
+++ /dev/null
@@ -1,173 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * 鍗曚环璁剧疆瀵硅薄 sys_price
- *
- * @author ruoyi
- * @date 2020-02-15
- */
-public class SysPrice extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 鍗曚环ID */
-    private Integer priceid;
-
-    /** ObjectID_瀵硅薄ID锛�
-銆�銆�鑳芥簮ID銆佸師鏂橧D鎴栦骇鍝両D
- */
-    @Excel(name = "ObjectID_瀵硅薄ID锛� 鑳芥簮ID銆佸師鏂橧D鎴栦骇鍝両D ")
-    private Integer objectid;
-
-    /** ObjectType_瀵硅薄绫诲瀷
-銆�銆�1=鑳芥簮(Energy琛�)锛�2=鍘熸枡(Material琛�)锛�3=浜у搧(Product琛�) */
-    private Integer objecttype;
-
-    /** 鍗曚环 */
-    @Excel(name = "鍗曚环")
-    private Double price;
-
-    /** 鎵ц鏃ユ湡 */
-    @Excel(name = "鎵ц鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date execdate;
-
-    /** 鎿嶄綔浜� */
-    private String oprMan;
-
-    /** 鎿嶄綔鏃堕棿 */
-    private Date oprTime;
-
-    /** 鏇存柊浜� */
-    private String modMan;
-
-    /** 鏇存柊鏃堕棿 */
-    private Date modTime;
-
-    /** 澶囨敞 */
-    @Excel(name = "澶囨敞")
-    private String note;
-
-    //鑳芥簮鍚�
-    private String enername;
-
-    public String getEnername() {
-        return enername;
-    }
-
-    public void setEnername(String enername) {
-        this.enername = enername;
-    }
-
-    public void setPriceid(Integer priceid)
-    {
-        this.priceid = priceid;
-    }
-
-    public Integer getPriceid()
-    {
-        return priceid;
-    }
-    public void setObjectid(Integer objectid)
-    {
-        this.objectid = objectid;
-    }
-
-    public Integer getObjectid()
-    {
-        return objectid;
-    }
-    public void setObjecttype(Integer objecttype)
-    {
-        this.objecttype = objecttype;
-    }
-
-    public Integer getObjecttype()
-    {
-        return objecttype;
-    }
-    public void setPrice(Double price)
-    {
-        this.price = price;
-    }
-
-    public Double getPrice()
-    {
-        return price;
-    }
-    public void setExecdate(Date execdate)
-    {
-        this.execdate = execdate;
-    }
-
-    public Date getExecdate()
-    {
-        return execdate;
-    }
-    public void setOprMan(String oprMan)
-    {
-        this.oprMan = oprMan;
-    }
-
-    public String getOprMan()
-    {
-        return oprMan;
-    }
-    public void setOprTime(Date oprTime)
-    {
-        this.oprTime = oprTime;
-    }
-
-    public Date getOprTime()
-    {
-        return oprTime;
-    }
-    public void setModMan(String modMan)
-    {
-        this.modMan = modMan;
-    }
-
-    public String getModMan()
-    {
-        return modMan;
-    }
-    public void setModTime(Date modTime)
-    {
-        this.modTime = modTime;
-    }
-
-    public Date getModTime()
-    {
-        return modTime;
-    }
-    public void setNote(String note)
-    {
-        this.note = note;
-    }
-
-    public String getNote()
-    {
-        return note;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("priceid", getPriceid())
-            .append("objectid", getObjectid())
-            .append("objecttype", getObjecttype())
-            .append("price", getPrice())
-            .append("execdate", getExecdate())
-            .append("oprMan", getOprMan())
-            .append("oprTime", getOprTime())
-            .append("modMan", getModMan())
-            .append("modTime", getModTime())
-            .append("note", getNote())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/domain/SysProduct.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/domain/SysProduct.java
deleted file mode 100644
index 43d9ef7..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/domain/SysProduct.java
+++ /dev/null
@@ -1,238 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * 浜у搧瀵硅薄 sys_product
- *
- * @author sys
- * @date 2020-02-19
- */
-public class SysProduct extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 浜у搧ID */
-    private Integer productid;
-
-    /** 浜у搧鍚嶇О */
-    @Excel(name = "浜у搧鍚嶇О")
-    private String productname;
-
-    /** 浜у搧缂栧彿 */
-    @Excel(name = "浜у搧缂栧彿")
-    private String productsno;
-
-    /** 璁¢噺鍗曚綅 */
-    @Excel(name = "璁¢噺鍗曚綅")
-    private String muid;
-
-    /** 鐖剁骇浜у搧ID */
-    @Excel(name = "鐖剁骇浜у搧ID")
-    private Integer superid;
-
-    /** 鏄惁涓哄瓙绾� */
-    @Excel(name = "鏄惁涓哄瓙绾�")
-    private String issub;
-
-    /** 鎶樼畻绯绘暟 */
-    @Excel(name = "鎶樼畻绯绘暟")
-    private Double procofficient;
-
-    /** 鏄惁鏄剧ず */
-    @Excel(name = "鏄惁鏄剧ず")
-    private String isshow;
-
-    /** 鏄惁涓昏浜у搧 */
-    @Excel(name = "鏄惁涓昏浜у搧")
-    private String iscpnyproduct;
-
-    /** 鎿嶄綔浜� */
-    private String oprMan;
-
-    /** 鎿嶄綔鏃堕棿 */
-    private Date oprTime;
-
-    /** 鏇存柊浜� */
-    private String modMan;
-
-    /** 鏇存柊鏃堕棿 */
-    private Date modTime;
-
-    /** 澶囨敞 */
-    @Excel(name = "澶囨敞")
-    private String note;
-    //浠锋牸
-    private double price;
-
-    private String superidname;
-
-    public String getSuperidname() {
-        return superidname;
-    }
-
-    public void setSuperidname(String superidname) {
-        this.superidname = superidname;
-    }
-
-    public double getPrice() {
-        return price;
-    }
-
-    public void setPrice(double price) {
-        this.price = price;
-    }
-
-
-
-    public void setProductid(Integer productid)
-    {
-        this.productid = productid;
-    }
-
-    public Integer getProductid()
-    {
-        return productid;
-    }
-    public void setProductname(String productname)
-    {
-        this.productname = productname;
-    }
-
-    public String getProductname()
-    {
-        return productname;
-    }
-    public void setProductsno(String productsno)
-    {
-        this.productsno = productsno;
-    }
-
-    public String getProductsno()
-    {
-        return productsno;
-    }
-    public void setMuid(String muid)
-    {
-        this.muid = muid;
-    }
-
-    public String getMuid()
-    {
-        return muid;
-    }
-    public void setSuperid(Integer superid)
-    {
-        this.superid = superid;
-    }
-
-    public Integer getSuperid()
-    {
-        return superid;
-    }
-    public void setIssub(String issub)
-    {
-        this.issub = issub;
-    }
-
-    public String getIssub()
-    {
-        return issub;
-    }
-    public void setProcofficient(Double procofficient)
-    {
-        this.procofficient = procofficient;
-    }
-
-    public Double getProcofficient()
-    {
-        return procofficient;
-    }
-    public void setIsshow(String isshow)
-    {
-        this.isshow = isshow;
-    }
-
-    public String getIsshow()
-    {
-        return isshow;
-    }
-    public void setIscpnyproduct(String iscpnyproduct)
-    {
-        this.iscpnyproduct = iscpnyproduct;
-    }
-
-    public String getIscpnyproduct()
-    {
-        return iscpnyproduct;
-    }
-    public void setOprMan(String oprMan)
-    {
-        this.oprMan = oprMan;
-    }
-
-    public String getOprMan()
-    {
-        return oprMan;
-    }
-    public void setOprTime(Date oprTime)
-    {
-        this.oprTime = oprTime;
-    }
-
-    public Date getOprTime()
-    {
-        return oprTime;
-    }
-    public void setModMan(String modMan)
-    {
-        this.modMan = modMan;
-    }
-
-    public String getModMan()
-    {
-        return modMan;
-    }
-    public void setModTime(Date modTime)
-    {
-        this.modTime = modTime;
-    }
-
-    public Date getModTime()
-    {
-        return modTime;
-    }
-    public void setNote(String note)
-    {
-        this.note = note;
-    }
-
-    public String getNote()
-    {
-        return note;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("productid", getProductid())
-            .append("productname", getProductname())
-            .append("productsno", getProductsno())
-            .append("muid", getMuid())
-            .append("superid", getSuperid())
-            .append("issub", getIssub())
-            .append("procofficient", getProcofficient())
-            .append("isshow", getIsshow())
-            .append("iscpnyproduct", getIscpnyproduct())
-            .append("oprMan", getOprMan())
-            .append("oprTime", getOprTime())
-            .append("modMan", getModMan())
-            .append("modTime", getModTime())
-            .append("note", getNote())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/mapper/SysEnerclassMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/mapper/SysEnerclassMapper.java
deleted file mode 100644
index 195ec84..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/mapper/SysEnerclassMapper.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.mapper;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysEnerclass;
-import io.swagger.models.auth.In;
-
-import java.util.List;
-
-/**
- * 鑳芥簮鍝佺璁剧疆Mapper鎺ュ彛
- *
- * @author ruoyi
- * @date 2020-02-10
- */
-public interface SysEnerclassMapper
-{
-    /**
-     * 鏌ヨ鑳芥簮鍝佺璁剧疆
-     *
-     * @param enerclassid 鑳芥簮鍝佺璁剧疆ID
-     * @return 鑳芥簮鍝佺璁剧疆
-     */
-    public SysEnerclass selectSysEnerclassById(Integer enerclassid);
-
-    /**
-     * 鏌ヨ鑳芥簮鍝佺璁剧疆鍒楄〃
-     *
-     * @param sysEnerclass 鑳芥簮鍝佺璁剧疆
-     * @return 鑳芥簮鍝佺璁剧疆闆嗗悎
-     */
-    public List<SysEnerclass> selectSysEnerclassList(SysEnerclass sysEnerclass);
-
-    /**
-     * 鏂板鑳芥簮鍝佺璁剧疆
-     *
-     * @param sysEnerclass 鑳芥簮鍝佺璁剧疆
-     * @return 缁撴灉
-     */
-    public int insertSysEnerclass(SysEnerclass sysEnerclass);
-
-    /**
-     * 淇敼鑳芥簮鍝佺璁剧疆
-     *
-     * @param sysEnerclass 鑳芥簮鍝佺璁剧疆
-     * @return 缁撴灉
-     */
-    public int updateSysEnerclass(SysEnerclass sysEnerclass);
-
-    /**
-     * 鍒犻櫎鑳芥簮鍝佺璁剧疆
-     *
-     * @param enerclassid 鑳芥簮鍝佺璁剧疆ID
-     * @return 缁撴灉
-     */
-    public int deleteSysEnerclassById(Integer enerclassid);
-
-    /**
-     * 鎵归噺鍒犻櫎鑳芥簮鍝佺璁剧疆
-     *
-     * @param enerclassids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteSysEnerclassByIds(Integer[] enerclassids);
-    /**
-     * 鏌ヨ涓�鏍风殑鑳芥簮鍚嶇О鏈夊嚑涓� 鑳芥簮鍚嶇О鍞竴鏍¢獙
-     */
-    int selectSameEnergyNameNum(String enerclassname);
-    /**
-     * 淇敼鐨勬椂鍊欐煡璇竴鏍疯兘婧愬悕绉扮殑id
-     */
-    Integer selectIdByName(String enerclassname);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/mapper/SysEnercoefficientMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/mapper/SysEnercoefficientMapper.java
deleted file mode 100644
index d4ebadd..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/mapper/SysEnercoefficientMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.mapper;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysEnercoefficient;
-import java.util.List;
-
-/**
- * 鑳芥簮鎶樻爣绯绘暟Mapper鎺ュ彛
- * 
- * @author sys
- * @date 2020-02-18
- */
-public interface SysEnercoefficientMapper 
-{
-    /**
-     * 鏌ヨ鑳芥簮鎶樻爣绯绘暟
-     * 
-     * @param ecid 鑳芥簮鎶樻爣绯绘暟ID
-     * @return 鑳芥簮鎶樻爣绯绘暟
-     */
-    public SysEnercoefficient selectSysEnercoefficientById(Integer ecid);
-
-    /**
-     * 鏌ヨ鑳芥簮鎶樻爣绯绘暟鍒楄〃
-     * 
-     * @param sysEnercoefficient 鑳芥簮鎶樻爣绯绘暟
-     * @return 鑳芥簮鎶樻爣绯绘暟闆嗗悎
-     */
-    public List<SysEnercoefficient> selectSysEnercoefficientList(SysEnercoefficient sysEnercoefficient);
-
-    /**
-     * 鏂板鑳芥簮鎶樻爣绯绘暟
-     * 
-     * @param sysEnercoefficient 鑳芥簮鎶樻爣绯绘暟
-     * @return 缁撴灉
-     */
-    public int insertSysEnercoefficient(SysEnercoefficient sysEnercoefficient);
-
-    /**
-     * 淇敼鑳芥簮鎶樻爣绯绘暟
-     * 
-     * @param sysEnercoefficient 鑳芥簮鎶樻爣绯绘暟
-     * @return 缁撴灉
-     */
-    public int updateSysEnercoefficient(SysEnercoefficient sysEnercoefficient);
-
-    /**
-     * 鍒犻櫎鑳芥簮鎶樻爣绯绘暟
-     * 
-     * @param ecid 鑳芥簮鎶樻爣绯绘暟ID
-     * @return 缁撴灉
-     */
-    public int deleteSysEnercoefficientById(Integer ecid);
-
-    /**
-     * 鎵归噺鍒犻櫎鑳芥簮鎶樻爣绯绘暟
-     * 
-     * @param ecids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteSysEnercoefficientByIds(Integer[] ecids);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/mapper/SysEnergyMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/mapper/SysEnergyMapper.java
deleted file mode 100644
index a57f5e4..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/mapper/SysEnergyMapper.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.mapper;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysEnergy;
-import java.util.List;
-
-/**
- * energyMapper鎺ュ彛
- *
- * @author ruoyi
- * @date 2020-02-12
- */
-public interface SysEnergyMapper
-{
-    /**
-     * 鏌ヨ鑳芥簮绫诲瀷涓嬫媺妗�
-     *
-     * @param
-     * @return 缁撴灉
-     */
-    List getenerclassname();
-    /**
-     * 鏌ヨenergy
-     *
-     * @param
-     * @return energy
-     */
-    public SysEnergy selectSysEnergyById(Integer enerid);
-
-    /**
-     * 鏌ヨenergy鍒楄〃
-     *
-     * @param sysEnergy energy
-     * @return energy闆嗗悎
-     */
-    public List<SysEnergy> selectSysEnergyList(SysEnergy sysEnergy);
-
-    /**
-     * 鏂板energy
-     *
-     * @param sysEnergy energy
-     * @return 缁撴灉
-     */
-    public int insertSysEnergy(SysEnergy sysEnergy);
-
-    /**
-     * 淇敼energy
-     *
-     * @param sysEnergy energy
-     * @return 缁撴灉
-     */
-    public int updateSysEnergy(SysEnergy sysEnergy);
-
-    /**
-     * 鍒犻櫎energy
-     *
-     * @param
-     * @return 缁撴灉
-     */
-    public int deleteSysEnergyById(Integer enerid);
-
-    /**
-     * 鎵归噺鍒犻櫎energy
-     *
-     * @param
-     * @return 缁撴灉
-     */
-    public int deleteSysEnergyByIds(Integer[] enerids);
-    /**
-     * 閫氳繃鑳芥簮绫诲瀷鍚嶇О鏌ヨ 鑳芥簮绫诲瀷id
-     */
-    Integer getEnerClassid(String enerclassname);
-    /**
-     * 鏌ヨ涓�鏍风殑鑳芥簮鍚嶇О鏈夊嚑涓� 鑳芥簮鍚嶇О鍞竴鏍¢獙
-     */
-    int selectSameEnergyNameNum(String enername);
-    /**
-     * 淇敼鐨勬椂鍊欐煡璇竴鏍疯兘婧愬悕绉扮殑id
-     */
-    Integer selectIdByName(String enername);
-    /**
-     * 閫氳繃鑳芥簮id鏌ヨ鍗曚环淇℃伅
-     */
-    Integer getPriceCountByEnerid(SysEnergy sysEnergy);
-    /**
-     * 澧炲姞鍗曚环淇℃伅
-     */
-    Integer insertEnergyPrice(SysEnergy sysEnergy);
-    /**
-     * 淇敼鍗曚环淇℃伅
-     */
-    Integer updateEnergyPrice(SysEnergy sysEnergy);
-    /**
-     * 閫氳繃鑳芥簮id鏌ユ姌鏍囩郴鏁皀um
-     */
-    Integer getCoefficientCountByEnerid(Integer enerid);
-    /**
-     * 澧炲姞鎶樻爣绯绘暟淇℃伅
-     */
-    Integer insertEnergyCoefficient(SysEnergy sysEnergy);
-    /**
-     * 淇敼鎶樻爣绯绘暟淇℃伅
-     */
-    Integer updateEnergyCoefficient(SysEnergy sysEnergy);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/mapper/SysPriceMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/mapper/SysPriceMapper.java
deleted file mode 100644
index bca85a1..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/mapper/SysPriceMapper.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.mapper;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysPrice;
-
-import java.util.List;
-
-/**
- * 鍗曚环璁剧疆Mapper鎺ュ彛
- *
- * @author ruoyi
- * @date 2020-02-15
- */
-public interface SysPriceMapper
-{
-    /**
-     * 鏌ヨ鍗曚环璁剧疆
-     *
-     * @param priceid 鍗曚环璁剧疆ID
-     * @return 鍗曚环璁剧疆
-     */
-    public SysPrice selectSysPriceById(Integer priceid);
-
-    /**
-     * 鏌ヨ鍗曚环璁剧疆鍒楄〃
-     *
-     * @param sysPrice 鍗曚环璁剧疆
-     * @return 鍗曚环璁剧疆闆嗗悎
-     */
-    public List<SysPrice> selectSysPriceList(SysPrice sysPrice);
-
-    /**
-     * 鏂板鍗曚环璁剧疆
-     *
-     * @param sysPrice 鍗曚环璁剧疆
-     * @return 缁撴灉
-     */
-    public int insertSysPrice(SysPrice sysPrice);
-
-    /**
-     * 淇敼鍗曚环璁剧疆
-     *
-     * @param sysPrice 鍗曚环璁剧疆
-     * @return 缁撴灉
-     */
-    public int updateSysPrice(SysPrice sysPrice);
-
-    /**
-     * 鍒犻櫎鍗曚环璁剧疆
-     *
-     * @param priceid 鍗曚环璁剧疆ID
-     * @return 缁撴灉
-     */
-    public int deleteSysPriceById(Integer priceid);
-
-    /**
-     * 鎵归噺鍒犻櫎鍗曚环璁剧疆
-     *
-     * @param priceids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteSysPriceByIds(Integer[] priceids);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/mapper/SysProductMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/mapper/SysProductMapper.java
deleted file mode 100644
index fee1d58..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/mapper/SysProductMapper.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.mapper;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysProduct;
-import java.util.List;
-
-/**
- * 浜у搧Mapper鎺ュ彛
- *
- * @author sys
- * @date 2020-02-19
- */
-public interface SysProductMapper
-{
-    /**
-     * 鏌ヨ浜у搧
-     *
-     * @param productid 浜у搧ID
-     * @return 浜у搧
-     */
-    public SysProduct selectSysProductById(Integer productid);
-
-    /**
-     * 鏌ヨ浜у搧鍒楄〃
-     *
-     * @param sysProduct 浜у搧
-     * @return 浜у搧闆嗗悎
-     */
-    public List<SysProduct> selectSysProductList(SysProduct sysProduct);
-
-    /**
-     * 鏂板浜у搧
-     *
-     * @param sysProduct 浜у搧
-     * @return 缁撴灉
-     */
-    public int insertSysProduct(SysProduct sysProduct);
-
-    /**
-     * 淇敼浜у搧
-     *
-     * @param sysProduct 浜у搧
-     * @return 缁撴灉
-     */
-    public int updateSysProduct(SysProduct sysProduct);
-
-    /**
-     * 鍒犻櫎浜у搧
-     *
-     * @param productid 浜у搧ID
-     * @return 缁撴灉
-     */
-    public int deleteSysProductById(Integer productid);
-
-    /**
-     * 鎵归噺鍒犻櫎浜у搧
-     *
-     * @param productids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteSysProductByIds(Integer[] productids);
-
-    //鏍¢獙no鍜宯ame 鍞竴
-    Integer selectCountByName(SysProduct sysProduct);
-    Integer selectCountByNo(SysProduct sysProduct);
-    Integer selectIdByName(SysProduct sysProduct);
-    Integer selectIdByNo(SysProduct sysProduct);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/ISysEnerclassService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/ISysEnerclassService.java
deleted file mode 100644
index 427dc99..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/ISysEnerclassService.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.service;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysEnerclass;
-import java.util.List;
-
-/**
- * 鑳芥簮鍝佺璁剧疆Service鎺ュ彛
- *
- * @author ruoyi
- * @date 2020-02-10
- */
-public interface ISysEnerclassService
-{
-    /**
-     * 鏌ヨ鑳芥簮鍝佺璁剧疆
-     *
-     * @param enerclassid 鑳芥簮鍝佺璁剧疆ID
-     * @return 鑳芥簮鍝佺璁剧疆
-     */
-    public SysEnerclass selectSysEnerclassById(Integer enerclassid);
-
-    /**
-     * 鏌ヨ鑳芥簮鍝佺璁剧疆鍒楄〃
-     *
-     * @param sysEnerclass 鑳芥簮鍝佺璁剧疆
-     * @return 鑳芥簮鍝佺璁剧疆闆嗗悎
-     */
-    public List<SysEnerclass> selectSysEnerclassList(SysEnerclass sysEnerclass);
-
-    /**
-     * 鏂板鑳芥簮鍝佺璁剧疆
-     *
-     * @param sysEnerclass 鑳芥簮鍝佺璁剧疆
-     * @return 缁撴灉
-     */
-    public int insertSysEnerclass(SysEnerclass sysEnerclass);
-
-    /**
-     * 淇敼鑳芥簮鍝佺璁剧疆
-     *
-     * @param sysEnerclass 鑳芥簮鍝佺璁剧疆
-     * @return 缁撴灉
-     */
-    public int updateSysEnerclass(SysEnerclass sysEnerclass);
-
-    /**
-     * 鎵归噺鍒犻櫎鑳芥簮鍝佺璁剧疆
-     *
-     * @param enerclassids 闇�瑕佸垹闄ょ殑鑳芥簮鍝佺璁剧疆ID
-     * @return 缁撴灉
-     */
-    public int deleteSysEnerclassByIds(Integer[] enerclassids);
-
-    /**
-     * 鍒犻櫎鑳芥簮鍝佺璁剧疆淇℃伅
-     *
-     * @param enerclassid 鑳芥簮鍝佺璁剧疆ID
-     * @return 缁撴灉
-     */
-    public int deleteSysEnerclassById(Integer enerclassid);
-    /**
-     * 鏌ヨ涓�鏍风殑鑳芥簮鍚嶇О鏈夊嚑涓� 鑳芥簮鍚嶇О鍞竴鏍¢獙
-     */
-    int selectSameEnergyNameNum(String enerclassname);
-    /**
-     * 淇敼鐨勬椂鍊欐煡璇竴鏍疯兘婧愬悕绉扮殑id
-     */
-    Integer selectIdByName(String enerclassname);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/ISysEnercoefficientService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/ISysEnercoefficientService.java
deleted file mode 100644
index 0905e68..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/ISysEnercoefficientService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.service;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysEnercoefficient;
-import java.util.List;
-
-/**
- * 鑳芥簮鎶樻爣绯绘暟Service鎺ュ彛
- * 
- * @author sys
- * @date 2020-02-18
- */
-public interface ISysEnercoefficientService 
-{
-    /**
-     * 鏌ヨ鑳芥簮鎶樻爣绯绘暟
-     * 
-     * @param ecid 鑳芥簮鎶樻爣绯绘暟ID
-     * @return 鑳芥簮鎶樻爣绯绘暟
-     */
-    public SysEnercoefficient selectSysEnercoefficientById(Integer ecid);
-
-    /**
-     * 鏌ヨ鑳芥簮鎶樻爣绯绘暟鍒楄〃
-     * 
-     * @param sysEnercoefficient 鑳芥簮鎶樻爣绯绘暟
-     * @return 鑳芥簮鎶樻爣绯绘暟闆嗗悎
-     */
-    public List<SysEnercoefficient> selectSysEnercoefficientList(SysEnercoefficient sysEnercoefficient);
-
-    /**
-     * 鏂板鑳芥簮鎶樻爣绯绘暟
-     * 
-     * @param sysEnercoefficient 鑳芥簮鎶樻爣绯绘暟
-     * @return 缁撴灉
-     */
-    public int insertSysEnercoefficient(SysEnercoefficient sysEnercoefficient);
-
-    /**
-     * 淇敼鑳芥簮鎶樻爣绯绘暟
-     * 
-     * @param sysEnercoefficient 鑳芥簮鎶樻爣绯绘暟
-     * @return 缁撴灉
-     */
-    public int updateSysEnercoefficient(SysEnercoefficient sysEnercoefficient);
-
-    /**
-     * 鎵归噺鍒犻櫎鑳芥簮鎶樻爣绯绘暟
-     * 
-     * @param ecids 闇�瑕佸垹闄ょ殑鑳芥簮鎶樻爣绯绘暟ID
-     * @return 缁撴灉
-     */
-    public int deleteSysEnercoefficientByIds(Integer[] ecids);
-
-    /**
-     * 鍒犻櫎鑳芥簮鎶樻爣绯绘暟淇℃伅
-     * 
-     * @param ecid 鑳芥簮鎶樻爣绯绘暟ID
-     * @return 缁撴灉
-     */
-    public int deleteSysEnercoefficientById(Integer ecid);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/ISysEnergyService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/ISysEnergyService.java
deleted file mode 100644
index ff16724..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/ISysEnergyService.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.service;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysEnergy;
-import java.util.List;
-
-/**
- * energyService鎺ュ彛
- *
- * @author ruoyi
- * @date 2020-02-12
- */
-public interface ISysEnergyService
-{
-    /**
-     * 鏌ヨenergy
-     *
-     * @param
-     * @return energy
-     */
-    public SysEnergy selectSysEnergyById(Integer enerid);
-
-    /**
-     * 鏌ヨenergy鍒楄〃
-     *
-     * @param sysEnergy energy
-     * @return energy闆嗗悎
-     */
-    public List<SysEnergy> selectSysEnergyList(SysEnergy sysEnergy);
-
-    /**
-     * 鏂板energy
-     *
-     * @param sysEnergy energy
-     * @return 缁撴灉
-     */
-    public int insertSysEnergy(SysEnergy sysEnergy);
-
-    /**
-     * 淇敼energy
-     *
-     * @param sysEnergy energy
-     * @return 缁撴灉
-     */
-    public int updateSysEnergy(SysEnergy sysEnergy);
-
-    /**
-     * 鎵归噺鍒犻櫎energy
-     *
-     * @param
-     * @return 缁撴灉
-     */
-    public int deleteSysEnergyByIds(Integer[] enerids);
-
-    /**
-     * 鍒犻櫎energy淇℃伅
-     *
-     * @param
-     * @return 缁撴灉
-     */
-    public int deleteSysEnergyById(Integer enerid);
-    /**
-     * 鏌ヨ鑳芥簮绫诲瀷涓嬫媺妗�
-     *
-     * @param
-     * @return 缁撴灉
-     */
-    public List getenerclassname();
-    /**
-     * 鏌ヨ鑳芥簮绫诲瀷id by enerclassname
-     */
-    Integer getEnerClassid(String enerclassname);
-    /**
-     * 鏌ヨ涓�鏍风殑鑳芥簮鍚嶇О鏈夊嚑涓� 鑳芥簮鍚嶇О鍞竴鏍¢獙
-     */
-    int selectSameEnergyNameNum(String enername);
-    /**
-     * 淇敼鐨勬椂鍊欐煡璇竴鏍疯兘婧愬悕绉扮殑id
-     */
-    Integer selectIdByName(String enername);
-    /**
-     * 閫氳繃鑳芥簮id鏌ヨ鍗曚环淇℃伅
-     */
-    Integer getPriceCountByEnerid(SysEnergy sysEnergy);
-    /**
-     * 澧炲姞鍗曚环淇℃伅
-     */
-    Integer insertEnergyPrice(SysEnergy sysEnergy);
-    /**
-     * 淇敼鍗曚环淇℃伅
-     */
-    Integer updateEnergyPrice(SysEnergy sysEnergy);
-    /**
-     * 閫氳繃鑳芥簮id鏌ユ姌鏍囩郴鏁皀um
-     */
-    Integer getCoefficientCountByEnerid(Integer enerid);
-    /**
-     * 澧炲姞鎶樻爣绯绘暟淇℃伅
-     */
-    Integer insertEnergyCoefficient(SysEnergy sysEnergy);
-    /**
-     * 淇敼鎶樻爣绯绘暟淇℃伅
-     */
-    Integer updateEnergyCoefficient(SysEnergy sysEnergy);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/ISysPriceService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/ISysPriceService.java
deleted file mode 100644
index 89b8fe2..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/ISysPriceService.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.service;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysPrice;
-
-import java.util.List;
-
-/**
- * 鍗曚环璁剧疆Service鎺ュ彛
- *
- * @author ruoyi
- * @date 2020-02-15
- */
-public interface ISysPriceService
-{
-    /**
-     * 鏌ヨ鍗曚环璁剧疆
-     *
-     * @param priceid 鍗曚环璁剧疆ID
-     * @return 鍗曚环璁剧疆
-     */
-    public Object selectSysPriceById(Integer priceid);
-
-    /**
-     * 鏌ヨ鍗曚环璁剧疆鍒楄〃
-     *
-     * @param sysPrice 鍗曚环璁剧疆
-     * @return 鍗曚环璁剧疆闆嗗悎
-     */
-    public List<SysPrice> selectSysPriceList(SysPrice sysPrice);
-
-    /**
-     * 鏂板鍗曚环璁剧疆
-     *
-     * @param sysPrice 鍗曚环璁剧疆
-     * @return 缁撴灉
-     */
-    public int insertSysPrice(SysPrice sysPrice);
-
-    /**
-     * 淇敼鍗曚环璁剧疆
-     *
-     * @param sysPrice 鍗曚环璁剧疆
-     * @return 缁撴灉
-     */
-    public int updateSysPrice(SysPrice sysPrice);
-
-    /**
-     * 鎵归噺鍒犻櫎鍗曚环璁剧疆
-     *
-     * @param priceids 闇�瑕佸垹闄ょ殑鍗曚环璁剧疆ID
-     * @return 缁撴灉
-     */
-    public int deleteSysPriceByIds(Integer[] priceids);
-
-    /**
-     * 鍒犻櫎鍗曚环璁剧疆淇℃伅
-     *
-     * @param priceid 鍗曚环璁剧疆ID
-     * @return 缁撴灉
-     */
-    public int deleteSysPriceById(Integer priceid);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/ISysProductService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/ISysProductService.java
deleted file mode 100644
index 7ee0d40..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/ISysProductService.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.service;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysProduct;
-import java.util.List;
-
-/**
- * 浜у搧Service鎺ュ彛
- *
- * @author sys
- * @date 2020-02-19
- */
-public interface ISysProductService
-{
-    /**
-     * 鏌ヨ浜у搧
-     *
-     * @param productid 浜у搧ID
-     * @return 浜у搧
-     */
-    public SysProduct selectSysProductById(Integer productid);
-
-    /**
-     * 鏌ヨ浜у搧鍒楄〃
-     *
-     * @param sysProduct 浜у搧
-     * @return 浜у搧闆嗗悎
-     */
-    public List<SysProduct> selectSysProductList(SysProduct sysProduct);
-
-    /**
-     * 鏂板浜у搧
-     *
-     * @param sysProduct 浜у搧
-     * @return 缁撴灉
-     */
-    public int insertSysProduct(SysProduct sysProduct);
-
-    /**
-     * 淇敼浜у搧
-     *
-     * @param sysProduct 浜у搧
-     * @return 缁撴灉
-     */
-    public int updateSysProduct(SysProduct sysProduct);
-
-    /**
-     * 鎵归噺鍒犻櫎浜у搧
-     *
-     * @param productids 闇�瑕佸垹闄ょ殑浜у搧ID
-     * @return 缁撴灉
-     */
-    public int deleteSysProductByIds(Integer[] productids);
-
-    /**
-     * 鍒犻櫎浜у搧淇℃伅
-     *
-     * @param productid 浜у搧ID
-     * @return 缁撴灉
-     */
-    public int deleteSysProductById(Integer productid);
-    //鏍¢獙no鍜宯ame 鍞竴
-    Integer selectCountByName(SysProduct sysProduct);
-    Integer selectCountByNo(SysProduct sysProduct);
-    Integer selectIdByName(SysProduct sysProduct);
-    Integer selectIdByNo(SysProduct sysProduct);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/impl/SysEnerclassServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/impl/SysEnerclassServiceImpl.java
deleted file mode 100644
index aa0b3e4..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/impl/SysEnerclassServiceImpl.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.service.impl;
-
-import java.util.List;
-
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.basic.data.enerInfoManage.mapper.SysEnerclassMapper;
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysEnerclass;
-import com.dingzhuo.energy.basic.data.enerInfoManage.service.ISysEnerclassService;
-
-/**
- * 鑳芥簮鍝佺璁剧疆Service涓氬姟灞傚鐞�
- *
- * @author ruoyi
- * @date 2020-02-10
- */
-@Service
-public class SysEnerclassServiceImpl implements ISysEnerclassService
-{
-    @Autowired
-    private SysEnerclassMapper sysEnerclassMapper;
-
-    /**
-     * 鏌ヨ鑳芥簮鍝佺璁剧疆
-     *
-     * @param enerclassid 鑳芥簮鍝佺璁剧疆ID
-     * @return 鑳芥簮鍝佺璁剧疆
-     */
-    @Override
-    public SysEnerclass selectSysEnerclassById(Integer enerclassid)
-    {
-        return sysEnerclassMapper.selectSysEnerclassById(enerclassid);
-    }
-
-    /**
-     * 鏌ヨ鑳芥簮鍝佺璁剧疆鍒楄〃
-     *
-     * @param sysEnerclass 鑳芥簮鍝佺璁剧疆
-     * @return 鑳芥簮鍝佺璁剧疆
-     */
-    @Override
-    public List<SysEnerclass> selectSysEnerclassList(SysEnerclass sysEnerclass)
-    {
-        return sysEnerclassMapper.selectSysEnerclassList(sysEnerclass);
-    }
-
-    /**
-     * 鏂板鑳芥簮鍝佺璁剧疆
-     *
-     * @param sysEnerclass 鑳芥簮鍝佺璁剧疆
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertSysEnerclass(SysEnerclass sysEnerclass) {
-        //鑾峰彇褰撳墠鐧诲綍浜�
-        String nowMan = SecurityUtils.getUsername();
-        sysEnerclass.setModMan(nowMan);
-        sysEnerclass.setOprMan(nowMan);
-        return sysEnerclassMapper.insertSysEnerclass(sysEnerclass);
-    }
-
-    /**
-     * 淇敼鑳芥簮鍝佺璁剧疆
-     *
-     * @param sysEnerclass 鑳芥簮鍝佺璁剧疆
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateSysEnerclass(SysEnerclass sysEnerclass) {
-        String nowMan = SecurityUtils.getUsername();
-        sysEnerclass.setModMan(nowMan);
-        return sysEnerclassMapper.updateSysEnerclass(sysEnerclass);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鑳芥簮鍝佺璁剧疆
-     *
-     * @param enerclassids 闇�瑕佸垹闄ょ殑鑳芥簮鍝佺璁剧疆ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteSysEnerclassByIds(Integer[] enerclassids)
-    {
-        return sysEnerclassMapper.deleteSysEnerclassByIds(enerclassids);
-    }
-
-    /**
-     * 鍒犻櫎鑳芥簮鍝佺璁剧疆淇℃伅
-     *
-     * @param enerclassid 鑳芥簮鍝佺璁剧疆ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteSysEnerclassById(Integer enerclassid)
-    {
-        return sysEnerclassMapper.deleteSysEnerclassById(enerclassid);
-    }
-    /**
-     * 鏌ヨ涓�鏍风殑鑳芥簮鍚嶇О鏈夊嚑涓� 鑳芥簮鍚嶇О鍞竴鏍¢獙
-     */
-    @Override
-    public int selectSameEnergyNameNum(String enerclassname) {
-        return sysEnerclassMapper.selectSameEnergyNameNum(enerclassname);
-    }
-    /**
-     * 淇敼鐨勬椂鍊欐煡璇竴鏍疯兘婧愬悕绉扮殑id
-     */
-    @Override
-    public Integer selectIdByName(String enerclassname) {
-        return sysEnerclassMapper.selectIdByName(enerclassname);
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/impl/SysEnercoefficientServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/impl/SysEnercoefficientServiceImpl.java
deleted file mode 100644
index 16d57e9..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/impl/SysEnercoefficientServiceImpl.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.service.impl;
-
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.basic.data.enerInfoManage.mapper.SysEnercoefficientMapper;
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysEnercoefficient;
-import com.dingzhuo.energy.basic.data.enerInfoManage.service.ISysEnercoefficientService;
-
-/**
- * 鑳芥簮鎶樻爣绯绘暟Service涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-02-18
- */
-@Service
-public class SysEnercoefficientServiceImpl implements ISysEnercoefficientService 
-{
-    @Autowired
-    private SysEnercoefficientMapper sysEnercoefficientMapper;
-
-    /**
-     * 鏌ヨ鑳芥簮鎶樻爣绯绘暟
-     * 
-     * @param ecid 鑳芥簮鎶樻爣绯绘暟ID
-     * @return 鑳芥簮鎶樻爣绯绘暟
-     */
-    @Override
-    public SysEnercoefficient selectSysEnercoefficientById(Integer ecid)
-    {
-        return sysEnercoefficientMapper.selectSysEnercoefficientById(ecid);
-    }
-
-    /**
-     * 鏌ヨ鑳芥簮鎶樻爣绯绘暟鍒楄〃
-     * 
-     * @param sysEnercoefficient 鑳芥簮鎶樻爣绯绘暟
-     * @return 鑳芥簮鎶樻爣绯绘暟
-     */
-    @Override
-    public List<SysEnercoefficient> selectSysEnercoefficientList(SysEnercoefficient sysEnercoefficient)
-    {
-        return sysEnercoefficientMapper.selectSysEnercoefficientList(sysEnercoefficient);
-    }
-
-    /**
-     * 鏂板鑳芥簮鎶樻爣绯绘暟
-     * 
-     * @param sysEnercoefficient 鑳芥簮鎶樻爣绯绘暟
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertSysEnercoefficient(SysEnercoefficient sysEnercoefficient)
-    {
-        return sysEnercoefficientMapper.insertSysEnercoefficient(sysEnercoefficient);
-    }
-
-    /**
-     * 淇敼鑳芥簮鎶樻爣绯绘暟
-     * 
-     * @param sysEnercoefficient 鑳芥簮鎶樻爣绯绘暟
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateSysEnercoefficient(SysEnercoefficient sysEnercoefficient)
-    {
-        return sysEnercoefficientMapper.updateSysEnercoefficient(sysEnercoefficient);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鑳芥簮鎶樻爣绯绘暟
-     * 
-     * @param ecids 闇�瑕佸垹闄ょ殑鑳芥簮鎶樻爣绯绘暟ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteSysEnercoefficientByIds(Integer[] ecids)
-    {
-        return sysEnercoefficientMapper.deleteSysEnercoefficientByIds(ecids);
-    }
-
-    /**
-     * 鍒犻櫎鑳芥簮鎶樻爣绯绘暟淇℃伅
-     * 
-     * @param ecid 鑳芥簮鎶樻爣绯绘暟ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteSysEnercoefficientById(Integer ecid)
-    {
-        return sysEnercoefficientMapper.deleteSysEnercoefficientById(ecid);
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/impl/SysEnergyServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/impl/SysEnergyServiceImpl.java
deleted file mode 100644
index f36ea0f..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/impl/SysEnergyServiceImpl.java
+++ /dev/null
@@ -1,183 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.service.impl;
-
-import java.util.List;
-
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.basic.data.enerInfoManage.mapper.SysEnergyMapper;
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysEnergy;
-import com.dingzhuo.energy.basic.data.enerInfoManage.service.ISysEnergyService;
-
-/**
- * energyService涓氬姟灞傚鐞�
- *
- * @author ruoyi
- * @date 2020-02-12
- */
-@Service
-public class SysEnergyServiceImpl implements ISysEnergyService
-{
-    @Autowired
-    private SysEnergyMapper sysEnergyMapper;
-
-    /**
-     * 鏌ヨenergy
-     *
-     * @param
-     * @return energy
-     */
-    @Override
-    public SysEnergy selectSysEnergyById(Integer enerid)
-    {
-        return sysEnergyMapper.selectSysEnergyById(enerid);
-    }
-
-    /**
-     * 鏌ヨenergy鍒楄〃
-     *
-     * @param sysEnergy energy
-     * @return energy
-     */
-    @Override
-    public List<SysEnergy> selectSysEnergyList(SysEnergy sysEnergy)
-    {
-        String s = "1";
-        //鏀惧叆  鏄惁鍌ㄥ瓨锛堝瓧绗︿覆锛�
-        List<SysEnergy> list = sysEnergyMapper.selectSysEnergyList(sysEnergy);
-        for (SysEnergy energy : list) {
-            if (energy.getIsstorage() == 0) {
-                energy.setIsstorageString("鏄�");
-            }else {
-                energy.setIsstorageString("鍚�");
-            }
-        }
-        return list;
-    }
-
-    /**
-     * 鏂板energy
-     *
-     * @param sysEnergy energy
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertSysEnergy(SysEnergy sysEnergy)
-    {
-        //鑾峰彇褰撳墠鐧诲綍浜�
-        String nowMan = SecurityUtils.getUsername();
-        sysEnergy.setModMan(nowMan);
-        sysEnergy.setOprMan(nowMan);
-        return sysEnergyMapper.insertSysEnergy(sysEnergy);
-    }
-
-    /**
-     * 淇敼energy
-     *
-     * @param sysEnergy energy
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateSysEnergy(SysEnergy sysEnergy)
-    {
-        String nowMan = SecurityUtils.getUsername();
-        sysEnergy.setModMan(nowMan);
-        return sysEnergyMapper.updateSysEnergy(sysEnergy);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎energy
-     *
-     * @param
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteSysEnergyByIds(Integer[] enerids)
-    {
-        return sysEnergyMapper.deleteSysEnergyByIds(enerids);
-    }
-
-    /**
-     * 鍒犻櫎energy淇℃伅
-     *
-     * @param
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteSysEnergyById(Integer enerid)
-    {
-        return sysEnergyMapper.deleteSysEnergyById(enerid);
-    }
-    /**
-     * 鏌ヨ鑳芥簮绫诲瀷涓嬫媺妗�
-     *
-     * @param
-     * @return 缁撴灉
-     */
-    @Override
-    public List getenerclassname() {
-        return sysEnergyMapper.getenerclassname();
-    }
-
-    @Override
-    public Integer getEnerClassid(String enerclassname) {
-        return sysEnergyMapper.getEnerClassid(enerclassname);
-    }
-
-    /**
-     * 鏌ヨ涓�鏍风殑鑳芥簮鍚嶇О鏈夊嚑涓� 鑳芥簮鍚嶇О鍞竴鏍¢獙
-     */
-    @Override
-    public int selectSameEnergyNameNum(String enername) {
-        return sysEnergyMapper.selectSameEnergyNameNum(enername);
-    }
-    /**
-     * 淇敼鐨勬椂鍊欐煡璇竴鏍疯兘婧愬悕绉扮殑id
-     */
-    @Override
-    public Integer selectIdByName(String enername) {
-        return sysEnergyMapper.selectIdByName(enername);
-    }
-
-    @Override
-    public Integer getPriceCountByEnerid(SysEnergy sysEnergy) {
-        return sysEnergyMapper.getPriceCountByEnerid(sysEnergy);
-    }
-
-    @Override
-    public Integer insertEnergyPrice(SysEnergy sysEnergy) {
-        //鑾峰彇褰撳墠鐧诲綍浜�
-        String nowMan = SecurityUtils.getUsername();
-        sysEnergy.setModMan(nowMan);
-        sysEnergy.setOprMan(nowMan);
-        return sysEnergyMapper.insertEnergyPrice(sysEnergy);
-    }
-
-    @Override
-    public Integer updateEnergyPrice(SysEnergy sysEnergy) {
-        String nowMan = SecurityUtils.getUsername();
-        sysEnergy.setModMan(nowMan);
-        return sysEnergyMapper.updateEnergyPrice(sysEnergy);
-    }
-
-    @Override
-    public Integer getCoefficientCountByEnerid(Integer enerid) {
-        return sysEnergyMapper.getCoefficientCountByEnerid(enerid);
-    }
-
-    @Override
-    public Integer insertEnergyCoefficient(SysEnergy sysEnergy) {
-        //鑾峰彇褰撳墠鐧诲綍浜�
-        String nowMan = SecurityUtils.getUsername();
-        sysEnergy.setModMan(nowMan);
-        sysEnergy.setOprMan(nowMan);
-        return sysEnergyMapper.insertEnergyCoefficient(sysEnergy);
-    }
-
-    @Override
-    public Integer updateEnergyCoefficient(SysEnergy sysEnergy) {
-        String nowMan = SecurityUtils.getUsername();
-        sysEnergy.setModMan(nowMan);
-        return sysEnergyMapper.updateEnergyCoefficient(sysEnergy);
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/impl/SysPriceServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/impl/SysPriceServiceImpl.java
deleted file mode 100644
index 6319854..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/impl/SysPriceServiceImpl.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.service.impl;
-
-import java.util.List;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysPrice;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.basic.data.enerInfoManage.mapper.SysPriceMapper;
-import com.dingzhuo.energy.basic.data.enerInfoManage.service.ISysPriceService;
-
-/**
- * 鍗曚环璁剧疆Service涓氬姟灞傚鐞�
- *
- * @author ruoyi
- * @date 2020-02-15
- */
-@Service
-public class SysPriceServiceImpl implements ISysPriceService
-{
-    @Autowired
-    private SysPriceMapper sysPriceMapper;
-
-    /**
-     * 鏌ヨ鍗曚环璁剧疆
-     *
-     * @param priceid 鍗曚环璁剧疆ID
-     * @return 鍗曚环璁剧疆
-     */
-    @Override
-    public Object selectSysPriceById(Integer priceid)
-    {
-        return sysPriceMapper.selectSysPriceById(priceid);
-    }
-
-    /**
-     * 鏌ヨ鍗曚环璁剧疆鍒楄〃
-     *
-     * @param sysPrice 鍗曚环璁剧疆
-     * @return 鍗曚环璁剧疆
-     */
-    @Override
-    public List<SysPrice> selectSysPriceList(SysPrice sysPrice)
-    {
-        return sysPriceMapper.selectSysPriceList(sysPrice);
-    }
-
-    /**
-     * 鏂板鍗曚环璁剧疆
-     *
-     * @param sysPrice 鍗曚环璁剧疆
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertSysPrice(SysPrice sysPrice)
-    {
-        return sysPriceMapper.insertSysPrice(sysPrice);
-    }
-
-    /**
-     * 淇敼鍗曚环璁剧疆
-     *
-     * @param sysPrice 鍗曚环璁剧疆
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateSysPrice(SysPrice sysPrice)
-    {
-        return sysPriceMapper.updateSysPrice(sysPrice);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鍗曚环璁剧疆
-     *
-     * @param priceids 闇�瑕佸垹闄ょ殑鍗曚环璁剧疆ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteSysPriceByIds(Integer[] priceids)
-    {
-        return sysPriceMapper.deleteSysPriceByIds(priceids);
-    }
-
-    /**
-     * 鍒犻櫎鍗曚环璁剧疆淇℃伅
-     *
-     * @param priceid 鍗曚环璁剧疆ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteSysPriceById(Integer priceid)
-    {
-        return sysPriceMapper.deleteSysPriceById(priceid);
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/impl/SysProductServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/impl/SysProductServiceImpl.java
deleted file mode 100644
index 3913853..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/enerInfoManage/service/impl/SysProductServiceImpl.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package com.dingzhuo.energy.basic.data.enerInfoManage.service.impl;
-
-import java.util.List;
-
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.basic.data.enerInfoManage.mapper.SysProductMapper;
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysProduct;
-import com.dingzhuo.energy.basic.data.enerInfoManage.service.ISysProductService;
-
-/**
- * 浜у搧Service涓氬姟灞傚鐞�
- *
- * @author sys
- * @date 2020-02-19
- */
-@Service
-public class SysProductServiceImpl implements ISysProductService
-{
-    @Autowired
-    private SysProductMapper sysProductMapper;
-
-    /**
-     * 鏌ヨ浜у搧
-     *
-     * @param productid 浜у搧ID
-     * @return 浜у搧
-     */
-    @Override
-    public SysProduct selectSysProductById(Integer productid)
-    {
-        return sysProductMapper.selectSysProductById(productid);
-    }
-
-    /**
-     * 鏌ヨ浜у搧鍒楄〃
-     *
-     * @param sysProduct 浜у搧
-     * @return 浜у搧
-     */
-    @Override
-    public List<SysProduct> selectSysProductList(SysProduct sysProduct)
-    {
-        return sysProductMapper.selectSysProductList(sysProduct);
-    }
-
-    /**
-     * 鏂板浜у搧
-     *
-     * @param sysProduct 浜у搧
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertSysProduct(SysProduct sysProduct)
-    {
-        //鑾峰彇褰撳墠鐧诲綍浜�
-        String nowMan = SecurityUtils.getUsername();
-        sysProduct.setModMan(nowMan);
-        sysProduct.setOprMan(nowMan);
-        return sysProductMapper.insertSysProduct(sysProduct);
-    }
-
-    /**
-     * 淇敼浜у搧
-     *
-     * @param sysProduct 浜у搧
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateSysProduct(SysProduct sysProduct)
-    {
-        String nowMan = SecurityUtils.getUsername();
-        sysProduct.setModMan(nowMan);
-        return sysProductMapper.updateSysProduct(sysProduct);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎浜у搧
-     *
-     * @param productids 闇�瑕佸垹闄ょ殑浜у搧ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteSysProductByIds(Integer[] productids)
-    {
-        return sysProductMapper.deleteSysProductByIds(productids);
-    }
-
-    /**
-     * 鍒犻櫎浜у搧淇℃伅
-     *
-     * @param productid 浜у搧ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteSysProductById(Integer productid)
-    {
-        return sysProductMapper.deleteSysProductById(productid);
-    }
-
-
-    //鏍¢獙no鍜宯ame 鍞竴
-    @Override
-    public Integer selectCountByName(SysProduct sysProduct) {
-        return sysProductMapper.selectCountByName(sysProduct);
-    }
-
-    @Override
-    public Integer selectCountByNo(SysProduct sysProduct) {
-        return sysProductMapper.selectCountByNo(sysProduct);
-    }
-
-    @Override
-    public Integer selectIdByName(SysProduct sysProduct) {
-        return sysProductMapper.selectIdByName(sysProduct);
-    }
-
-    @Override
-    public Integer selectIdByNo(SysProduct sysProduct) {
-        return sysProductMapper.selectIdByNo(sysProduct);
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/controller/EnergyProjectAnnexController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/controller/EnergyProjectAnnexController.java
deleted file mode 100644
index 0af7790..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/controller/EnergyProjectAnnexController.java
+++ /dev/null
@@ -1,180 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.controller;
-
-import com.dingzhuo.energy.basic.data.energy.domain.EnergyProjectAnnex;
-import com.dingzhuo.energy.basic.data.energy.service.IEnergyProjectAnnexService;
-import com.dingzhuo.energy.common.utils.IdUtils;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.common.utils.file.FileUploadUtils;
-import com.dingzhuo.energy.common.utils.file.FileUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.config.RuoYiConfig;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.List;
-
-/**
- * 鑺傝兘椤圭洰绠$悊闄勪欢Controller
- * 
- * @author sys
- * @date 2020-12-08
- */
-@RestController
-@RequestMapping("/energy/energyAnnex")
-public class EnergyProjectAnnexController extends BaseController
-{
-    @Autowired
-    private IEnergyProjectAnnexService energyProjectAnnexService;
-    @Autowired
-    private TokenService tokenService;
-    private static final Logger log = LoggerFactory.getLogger(EnergyProjectAnnexController.class);
-    /**
-     * 鏌ヨ鑺傝兘椤圭洰绠$悊闄勪欢鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('energy:energyAnnex:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(EnergyProjectAnnex energyProjectAnnex)
-    {
-        startPage();
-        List<EnergyProjectAnnex> list = energyProjectAnnexService.selectEnergyProjectAnnexList(energyProjectAnnex);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭鑺傝兘椤圭洰绠$悊闄勪欢鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('energy:energyAnnex:export')")
-    @Log(title = "鑺傝兘椤圭洰绠$悊闄勪欢", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(EnergyProjectAnnex energyProjectAnnex)
-    {
-        List<EnergyProjectAnnex> list = energyProjectAnnexService.selectEnergyProjectAnnexList(energyProjectAnnex);
-        ExcelUtil<EnergyProjectAnnex> util = new ExcelUtil<EnergyProjectAnnex>(EnergyProjectAnnex.class);
-        return util.exportExcel(list, "energyAnnex");
-    }
-
-    /**
-     * 鑾峰彇鑺傝兘椤圭洰绠$悊闄勪欢璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('energy:energyAnnex:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(energyProjectAnnexService.selectEnergyProjectAnnexById(id));
-    }
-
-    /**
-     * 鏂板鑺傝兘椤圭洰绠$悊闄勪欢
-     */
-    @PreAuthorize("@ss.hasPermi('energy:energyAnnex:add')")
-    @Log(title = "鑺傝兘椤圭洰绠$悊闄勪欢", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody EnergyProjectAnnex energyProjectAnnex)
-    {
-        return toAjax(energyProjectAnnexService.insertEnergyProjectAnnex(energyProjectAnnex));
-    }
-
-    /**
-     * 淇敼鑺傝兘椤圭洰绠$悊闄勪欢
-     */
-    @PreAuthorize("@ss.hasPermi('energy:energyAnnex:edit')")
-    @Log(title = "鑺傝兘椤圭洰绠$悊闄勪欢", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody EnergyProjectAnnex energyProjectAnnex)
-    {
-        return toAjax(energyProjectAnnexService.updateEnergyProjectAnnex(energyProjectAnnex));
-    }
-
-    /**
-     * 鍒犻櫎鑺傝兘椤圭洰绠$悊闄勪欢
-     */
-    @PreAuthorize("@ss.hasPermi('energy:energyAnnex:remove')")
-    @Log(title = "鑺傝兘椤圭洰绠$悊闄勪欢", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(energyProjectAnnexService.deleteEnergyProjectAnnexByIds(ids));
-    }
-    /**
-     * 鑺傝兘璁″垝闄勪欢涓婁紶
-     */
-    @Log(title = "鑺傝兘璁″垝闄勪欢涓婁紶", businessType = BusinessType.IMPORT)
-    @PreAuthorize("@ss.hasPermi('energy:energyAnnex:fileImport')")
-    @PostMapping("/fileImport")
-    public AjaxResult importData(MultipartFile file, String projectId) throws Exception
-    {
-        if (!file.isEmpty())
-        {
-            LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-            //鑾峰彇閰嶇疆鐨勬枃浠朵笂浼犺矾寰�
-            String uploadPathDir = RuoYiConfig.getUploadPath();
-            //鑾峰彇鏂囦欢鍘熷鍚嶇О
-            String fileName = file.getOriginalFilename();
-            //鑾峰彇鏂囦欢鎵╁睍鍚�
-            String fileSuffix = FileUploadUtils.getExtension(file);
-//            System.out.println("implementId==="+implementId);
-//            System.out.println("filedir==="+uploadPathDir);
-//            System.out.println("fileName==="+fileName);
-//            System.out.println("fileSuffix==="+fileSuffix);
-            //鏂囦欢鏈�缁堜繚瀛樼殑缁濆璺緞
-            String filePath = FileUploadUtils.uploadAll(uploadPathDir, file);
-//            System.out.println("涓婁紶鏂囦欢鍦板潃:===>"+filePath);
-            EnergyProjectAnnex energyProjectAnnex=new EnergyProjectAnnex();
-            //璁剧疆涓婚敭UUID
-            energyProjectAnnex.setId(IdUtils.simpleUUID());
-            energyProjectAnnex.setFileName(fileName);
-            energyProjectAnnex.setFilePath(filePath);
-            energyProjectAnnex.setFileSuffix(fileSuffix);
-            energyProjectAnnex.setProjectId(projectId);
-            energyProjectAnnex.setCreateBy(loginUser.getUsername());
-            if (this.energyProjectAnnexService.insertEnergyProjectAnnex(energyProjectAnnex)>0)
-            {
-                return AjaxResult.success("闄勪欢涓婁紶瀹屾垚");
-            }
-        }
-        return AjaxResult.success("闄勪欢涓婁紶澶辫触");
-    }
-    /**
-     * 閫氱敤鎸囧畾鏂囦欢涓嬭浇璇锋眰
-     *
-     * @param showFileName 涓嬭浇灞曠ず鏂囦欢鍚嶇О
-    //     * @param filePath 涓嬭浇鏂囦欢缁濆璺緞 甯� 鏂囦欢鐪熷疄鍚嶅瓧鍙婅矾寰�
-     * @param delete 鏄惁鍒犻櫎/
-     */
-    @PreAuthorize("@ss.hasPermi('energy:energyAnnex:assignDownload')")
-    @PostMapping("/assignDownload")
-    public void fileAssignDownload(String showFileName, String filePath, Boolean delete, HttpServletResponse response, HttpServletRequest request)
-    {
-
-        try
-        {
-            response.setCharacterEncoding("utf-8");
-            response.setContentType("multipart/form-data");
-            response.setHeader("Content-Disposition",
-                    "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, showFileName));
-            FileUtils.writeBytes(filePath, response.getOutputStream());
-//            if (delete)
-//            {
-//                FileUtils.deleteFile(filePath);
-//            }
-            log.error("涓嬭浇鎴愬姛", "aa");
-        }
-        catch (Exception e)
-        {
-            log.error("涓嬭浇鏂囦欢澶辫触", e);
-        }
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/controller/EnergyProjectController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/controller/EnergyProjectController.java
deleted file mode 100644
index 0f18b32..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/controller/EnergyProjectController.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.controller;
-
-import com.dingzhuo.energy.basic.data.energy.domain.EnergyProject;
-import com.dingzhuo.energy.basic.data.energy.service.IEnergyProjectService;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-import java.util.UUID;
-
-/**
- * 鑺傝兘椤圭洰绠$悊Controller
- *
- * @author sys
- * @date 2020-12-07
- */
-@RestController
-@RequestMapping("/energy/energyProject")
-@Api(value = "鑺傝兘椤圭洰绠$悊",tags = {"鑺傝兘椤圭洰绠$悊"})
-public class EnergyProjectController extends BaseController
-{
-    @Autowired
-    private IEnergyProjectService energyProjectService;
-
-    /**
-     * 鏌ヨ鑺傝兘椤圭洰绠$悊鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('energy:energyProject:list')")
-    @GetMapping("/list")
-    @ApiOperation(value = "鑺傝兘椤圭洰鍒楄〃")
-    public TableDataInfo list(EnergyProject energyProject)
-    {
-        startPage();
-        List<EnergyProject> list = energyProjectService.selectEnergyProjectList(energyProject);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭鑺傝兘椤圭洰绠$悊鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('energy:energyProject:export')")
-    @Log(title = "鑺傝兘椤圭洰绠$悊", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    @ApiOperation(value = "鑺傝兘椤圭洰瀵煎嚭")
-    public AjaxResult export(EnergyProject energyProject)
-    {
-        List<EnergyProject> list = energyProjectService.selectEnergyProjectList(energyProject);
-        ExcelUtil<EnergyProject> util = new ExcelUtil<EnergyProject>(EnergyProject.class);
-        return util.exportExcel(list, "energyProject");
-    }
-
-    /**
-     * 鑾峰彇鑺傝兘椤圭洰绠$悊璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('energy:energyProject:query')")
-    @GetMapping(value = "/{id}")
-    @ApiOperation(value = "鏍规嵁id鑾峰彇鑺傝兘椤圭洰璇︽儏")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(energyProjectService.selectEnergyProjectById(id));
-    }
-
-    /**
-     * 鏂板鑺傝兘椤圭洰绠$悊
-     */
-    @PreAuthorize("@ss.hasPermi('energy:energyProject:add')")
-    @Log(title = "鑺傝兘椤圭洰绠$悊", businessType = BusinessType.INSERT)
-    @PostMapping
-    @ApiOperation(value = "鏂板鑺傝兘椤圭洰")
-    public AjaxResult add(@RequestBody EnergyProject energyProject)
-    {
-        energyProject.setId(UUID.randomUUID().toString());
-        energyProject.setCreateOperator(SecurityUtils.getUsername());
-        return toAjax(energyProjectService.insertEnergyProject(energyProject));
-    }
-
-    /**
-     * 淇敼鑺傝兘椤圭洰绠$悊
-     */
-    @PreAuthorize("@ss.hasPermi('energy:energyProject:edit')")
-    @Log(title = "鑺傝兘椤圭洰绠$悊", businessType = BusinessType.UPDATE)
-    @PutMapping
-    @ApiOperation(value = "缂栬緫鑺傝兘椤圭洰")
-    public AjaxResult edit(@RequestBody EnergyProject energyProject)
-    {
-        return toAjax(energyProjectService.updateEnergyProject(energyProject));
-    }
-
-    /**
-     * 鍒犻櫎鑺傝兘椤圭洰绠$悊
-     */
-    @PreAuthorize("@ss.hasPermi('energy:energyProject:remove')")
-    @Log(title = "鑺傝兘椤圭洰绠$悊", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    @ApiOperation(value = "鍒犻櫎鑺傝兘椤圭洰")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(energyProjectService.deleteEnergyProjectByIds(ids));
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/controller/EnergyReportAnnexController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/controller/EnergyReportAnnexController.java
deleted file mode 100644
index 10d95ad..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/controller/EnergyReportAnnexController.java
+++ /dev/null
@@ -1,148 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.basic.data.energy.domain.EnergyProjectAnnex;
-import com.dingzhuo.energy.common.utils.IdUtils;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.common.utils.file.FileUploadUtils;
-import com.dingzhuo.energy.framework.config.RuoYiConfig;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.basic.data.energy.domain.EnergyReportAnnex;
-import com.dingzhuo.energy.basic.data.energy.service.IEnergyReportAnnexService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.web.multipart.MultipartFile;
-
-/**
- * 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢Controller
- * 
- * @author zhaow
- * @date 2020-12-21
- */
-@RestController
-@RequestMapping("/energy/reportAnnex")
-public class EnergyReportAnnexController extends BaseController
-{
-    @Autowired
-    private IEnergyReportAnnexService energyReportAnnexService;
-    @Autowired
-    private TokenService tokenService;
-    /**
-     * 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('energy:reportAnnex:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(EnergyReportAnnex energyReportAnnex)
-    {
-        startPage();
-        List<EnergyReportAnnex> list = energyReportAnnexService.selectEnergyReportAnnexList(energyReportAnnex);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('energy:reportAnnex:export')")
-    @Log(title = "鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(EnergyReportAnnex energyReportAnnex)
-    {
-        List<EnergyReportAnnex> list = energyReportAnnexService.selectEnergyReportAnnexList(energyReportAnnex);
-        ExcelUtil<EnergyReportAnnex> util = new ExcelUtil<EnergyReportAnnex>(EnergyReportAnnex.class);
-        return util.exportExcel(list, "reportAnnex");
-    }
-
-    /**
-     * 鑾峰彇鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('energy:reportAnnex:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(energyReportAnnexService.selectEnergyReportAnnexById(id));
-    }
-
-    /**
-     * 鏂板鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     */
-    @PreAuthorize("@ss.hasPermi('energy:reportAnnex:add')")
-    @Log(title = "鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody EnergyReportAnnex energyReportAnnex)
-    {
-        return toAjax(energyReportAnnexService.insertEnergyReportAnnex(energyReportAnnex));
-    }
-
-    /**
-     * 淇敼鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     */
-    @PreAuthorize("@ss.hasPermi('energy:reportAnnex:edit')")
-    @Log(title = "鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody EnergyReportAnnex energyReportAnnex)
-    {
-        return toAjax(energyReportAnnexService.updateEnergyReportAnnex(energyReportAnnex));
-    }
-
-    /**
-     * 鍒犻櫎鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     */
-    @PreAuthorize("@ss.hasPermi('energy:reportAnnex:remove')")
-    @Log(title = "鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(energyReportAnnexService.deleteEnergyReportAnnexByIds(ids));
-    }
-
-    /**
-     * 鑺傝兘璁″垝闄勪欢涓婁紶
-     */
-    @Log(title = "鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢涓婁紶", businessType = BusinessType.IMPORT)
-    @PostMapping("/fileImport")
-    public AjaxResult importData(MultipartFile file, String reportId) throws Exception
-    {
-        if (!file.isEmpty())
-        {
-            LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-            //鑾峰彇閰嶇疆鐨勬枃浠朵笂浼犺矾寰�
-            String uploadPathDir = RuoYiConfig.getUploadPath();
-            //鑾峰彇鏂囦欢鍘熷鍚嶇О
-            String fileName = file.getOriginalFilename();
-            //鑾峰彇鏂囦欢鎵╁睍鍚�
-            String fileSuffix = FileUploadUtils.getExtension(file);
-            //鏂囦欢鏈�缁堜繚瀛樼殑缁濆璺緞
-            String filePath = FileUploadUtils.uploadAll(uploadPathDir, file);
-//            System.out.println("涓婁紶鏂囦欢鍦板潃:===>"+filePath);
-            EnergyReportAnnex energyReportAnnex=new EnergyReportAnnex();
-            //璁剧疆涓婚敭UUID
-            energyReportAnnex.setId(IdUtils.simpleUUID());
-            energyReportAnnex.setFileName(fileName);
-            energyReportAnnex.setFilePath(filePath);
-            energyReportAnnex.setFileSuffix(fileSuffix);
-            energyReportAnnex.setReportId(reportId);
-            energyReportAnnex.setCreateBy(loginUser.getUsername());
-            if (this.energyReportAnnexService.insertEnergyReportAnnex(energyReportAnnex)>0)
-            {
-                return AjaxResult.success("闄勪欢涓婁紶瀹屾垚");
-            }
-        }
-        return AjaxResult.success("闄勪欢涓婁紶澶辫触");
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/controller/EnergyReportController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/controller/EnergyReportController.java
deleted file mode 100644
index c640067..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/controller/EnergyReportController.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.controller;
-
-import java.util.List;
-import java.util.UUID;
-
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.basic.data.energy.domain.EnergyReport;
-import com.dingzhuo.energy.basic.data.energy.service.IEnergyReportService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊Controller
- * 
- * @author zhaow
- * @date 2020-12-21
- */
-@RestController
-@RequestMapping("/energy/report")
-public class EnergyReportController extends BaseController
-{
-    @Autowired
-    private IEnergyReportService energyReportService;
-
-    /**
-     * 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('energy:report:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(EnergyReport energyReport)
-    {
-        startPage();
-        List<EnergyReport> list = energyReportService.selectEnergyReportList(energyReport);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭鑺傝兘鍒嗘瀽鎶ュ憡绠$悊鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('energy:report:export')")
-    @Log(title = "鑺傝兘鍒嗘瀽鎶ュ憡绠$悊", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(EnergyReport energyReport)
-    {
-        List<EnergyReport> list = energyReportService.selectEnergyReportList(energyReport);
-        ExcelUtil<EnergyReport> util = new ExcelUtil<EnergyReport>(EnergyReport.class);
-        return util.exportExcel(list, "report");
-    }
-
-    /**
-     * 鑾峰彇鑺傝兘鍒嗘瀽鎶ュ憡绠$悊璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('energy:report:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(energyReportService.selectEnergyReportById(id));
-    }
-
-    /**
-     * 鏂板鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     */
-    @PreAuthorize("@ss.hasPermi('energy:report:add')")
-    @Log(title = "鑺傝兘鍒嗘瀽鎶ュ憡绠$悊", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody EnergyReport energyReport)
-    {
-        energyReport.setId(UUID.randomUUID().toString());
-        energyReport.setCreateBy(SecurityUtils.getUsername());
-        return toAjax(energyReportService.insertEnergyReport(energyReport));
-    }
-
-    /**
-     * 淇敼鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     */
-    @PreAuthorize("@ss.hasPermi('energy:report:edit')")
-    @Log(title = "鑺傝兘鍒嗘瀽鎶ュ憡绠$悊", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody EnergyReport energyReport)
-    {
-        return toAjax(energyReportService.updateEnergyReport(energyReport));
-    }
-
-    /**
-     * 鍒犻櫎鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     */
-    @PreAuthorize("@ss.hasPermi('energy:report:remove')")
-    @Log(title = "鑺傝兘鍒嗘瀽鎶ュ憡绠$悊", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(energyReportService.deleteEnergyReportByIds(ids));
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/domain/EnergyProject.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/domain/EnergyProject.java
deleted file mode 100644
index b6b2364..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/domain/EnergyProject.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.domain;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * 鑺傝兘椤圭洰绠$悊瀵硅薄 energy_project
- *
- * @author sys
- * @date 2020-12-07
- */
-@ApiModel(value = "鑺傝兘椤圭洰")
-public class EnergyProject extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** id */
-    @ApiModelProperty(value = "id")
-    private String id;
-
-    /** 椤圭洰鍚嶇О */
-    @ApiModelProperty(value = "椤圭洰鍚嶇О")
-    @Excel(name = "椤圭洰鍚嶇О")
-    private String name;
-
-    /** 鑺傝兘璁″垝 */
-    @ApiModelProperty(value = "鑺傝兘璁″垝")
-    @Excel(name = "鑺傝兘璁″垝")
-    private String plan;
-
-    /** 鑺傝兘鐩爣 */
-    @ApiModelProperty(value = "鑺傝兘鐩爣")
-    @Excel(name = "鑺傝兘鐩爣")
-    private String target;
-
-    /** 寮�濮嬫椂闂� */
-    @ApiModelProperty(value = "寮�濮嬫椂闂�")
-    @Excel(name = "寮�濮嬫椂闂�", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date startTime;
-
-    /** 缁撴潫鏃堕棿 */
-    @ApiModelProperty(value = "缁撴潫鏃堕棿")
-    @Excel(name = "缁撴潫鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date enddTime;
-
-    /** 璐熻矗浜� */
-    @ApiModelProperty(value = "璐熻矗浜�")
-    @Excel(name = "璐熻矗浜�")
-    private String people;
-
-    /** 鍒跺畾鏃舵 */
-    @ApiModelProperty(value = "鍒跺畾鏃舵")
-    @Excel(name = "鍒跺畾鏃舵", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date setTime;
-
-    /** 鍒涘缓浜� */
-    @ApiModelProperty(value = "鍒涘缓浜�")
-    @Excel(name = "鍒涘缓浜�")
-    private String createOperator;
-
-    /** 淇敼浜� */
-    @ApiModelProperty(value = "淇敼浜�")
-    @Excel(name = "淇敼浜�")
-    private String updateOperator;
-
-    public void setId(String id)
-    {
-        this.id = id;
-    }
-
-    public String getId()
-    {
-        return id;
-    }
-    public void setName(String name)
-    {
-        this.name = name;
-    }
-
-    public String getName()
-    {
-        return name;
-    }
-    public void setPlan(String plan)
-    {
-        this.plan = plan;
-    }
-
-    public String getPlan()
-    {
-        return plan;
-    }
-    public void setTarget(String target)
-    {
-        this.target = target;
-    }
-
-    public String getTarget()
-    {
-        return target;
-    }
-    public void setStartTime(Date startTime)
-    {
-        this.startTime = startTime;
-    }
-
-    public Date getStartTime()
-    {
-        return startTime;
-    }
-    public void setEnddTime(Date enddTime)
-    {
-        this.enddTime = enddTime;
-    }
-
-    public Date getEnddTime()
-    {
-        return enddTime;
-    }
-    public void setPeople(String people)
-    {
-        this.people = people;
-    }
-
-    public String getPeople()
-    {
-        return people;
-    }
-    public void setSetTime(Date setTime)
-    {
-        this.setTime = setTime;
-    }
-
-    public Date getSetTime()
-    {
-        return setTime;
-    }
-    public void setCreateOperator(String createOperator)
-    {
-        this.createOperator = createOperator;
-    }
-
-    public String getCreateOperator()
-    {
-        return createOperator;
-    }
-    public void setUpdateOperator(String updateOperator)
-    {
-        this.updateOperator = updateOperator;
-    }
-
-    public String getUpdateOperator()
-    {
-        return updateOperator;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("name", getName())
-            .append("plan", getPlan())
-            .append("target", getTarget())
-            .append("startTime", getStartTime())
-            .append("enddTime", getEnddTime())
-            .append("people", getPeople())
-            .append("setTime", getSetTime())
-            .append("createOperator", getCreateOperator())
-            .append("createTime", getCreateTime())
-            .append("updateOperator", getUpdateOperator())
-            .append("updateTime", getUpdateTime())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/domain/EnergyProjectAnnex.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/domain/EnergyProjectAnnex.java
deleted file mode 100644
index 581df4d..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/domain/EnergyProjectAnnex.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 鑺傝兘椤圭洰绠$悊闄勪欢瀵硅薄 energy_project_annex
- * 
- * @author sys
- * @date 2020-12-08
- */
-public class EnergyProjectAnnex extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 涓婚敭 */
-    private String id;
-
-    /** 鍏宠仈鍏宠仈energy_project */
-    @Excel(name = "鍏宠仈energy_project")
-    private String projectId;
-
-    /** 鏂囦欢鍚� */
-    @Excel(name = "鏂囦欢鍚�")
-    private String fileName;
-
-    /** 鏂囦欢鍚庣紑 */
-    @Excel(name = "鏂囦欢鍚庣紑")
-    private String fileSuffix;
-
-    /** 鏂囦欢璺緞 */
-    @Excel(name = "鏂囦欢璺緞")
-    private String filePath;
-
-    /** 鍒犻櫎鏍囧織Y鍒犻櫎 N涓哄垹闄� */
-    @Excel(name = "鍒犻櫎鏍囧織Y鍒犻櫎 N涓哄垹闄�")
-    private String delFlage;
-
-    /** 寤虹珛浜� */
-    @Excel(name = "寤虹珛浜�")
-    private String createOperator;
-
-    /** 淇敼浜� */
-    @Excel(name = "淇敼浜�")
-    private String updateOperator;
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setProjectId(String projectId) 
-    {
-        this.projectId = projectId;
-    }
-
-    public String getProjectId() 
-    {
-        return projectId;
-    }
-    public void setFileName(String fileName) 
-    {
-        this.fileName = fileName;
-    }
-
-    public String getFileName() 
-    {
-        return fileName;
-    }
-    public void setFileSuffix(String fileSuffix) 
-    {
-        this.fileSuffix = fileSuffix;
-    }
-
-    public String getFileSuffix() 
-    {
-        return fileSuffix;
-    }
-    public void setFilePath(String filePath) 
-    {
-        this.filePath = filePath;
-    }
-
-    public String getFilePath() 
-    {
-        return filePath;
-    }
-    public void setDelFlage(String delFlage) 
-    {
-        this.delFlage = delFlage;
-    }
-
-    public String getDelFlage() 
-    {
-        return delFlage;
-    }
-    public void setCreateOperator(String createOperator) 
-    {
-        this.createOperator = createOperator;
-    }
-
-    public String getCreateOperator() 
-    {
-        return createOperator;
-    }
-    public void setUpdateOperator(String updateOperator) 
-    {
-        this.updateOperator = updateOperator;
-    }
-
-    public String getUpdateOperator() 
-    {
-        return updateOperator;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("projectId", getProjectId())
-            .append("fileName", getFileName())
-            .append("fileSuffix", getFileSuffix())
-            .append("filePath", getFilePath())
-            .append("delFlage", getDelFlage())
-            .append("createTime", getCreateTime())
-            .append("createOperator", getCreateOperator())
-            .append("updateTime", getUpdateTime())
-            .append("updateOperator", getUpdateOperator())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/domain/EnergyReport.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/domain/EnergyReport.java
deleted file mode 100644
index 650d1d0..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/domain/EnergyReport.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊瀵硅薄 energy_report
- * 
- * @author zhaow
- * @date 2020-12-21
- */
-public class EnergyReport extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** id */
-    private String id;
-
-    /** 鎶ュ憡鍚嶇О */
-    @Excel(name = "鎶ュ憡鍚嶇О")
-    private String name;
-
-    /** 寮�濮嬫椂闂� */
-    @Excel(name = "寮�濮嬫椂闂�", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date startTime;
-
-    /** 缁撴潫鏃堕棿 */
-    @Excel(name = "缁撴潫鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date enddTime;
-
-    /** 澶囨敞 */
-    @Excel(name = "澶囨敞")
-    private String bak;
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setName(String name) 
-    {
-        this.name = name;
-    }
-
-    public String getName() 
-    {
-        return name;
-    }
-    public void setStartTime(Date startTime) 
-    {
-        this.startTime = startTime;
-    }
-
-    public Date getStartTime() 
-    {
-        return startTime;
-    }
-    public void setEnddTime(Date enddTime) 
-    {
-        this.enddTime = enddTime;
-    }
-
-    public Date getEnddTime() 
-    {
-        return enddTime;
-    }
-    public void setBak(String bak) 
-    {
-        this.bak = bak;
-    }
-
-    public String getBak() 
-    {
-        return bak;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("name", getName())
-            .append("startTime", getStartTime())
-            .append("enddTime", getEnddTime())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .append("bak", getBak())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/domain/EnergyReportAnnex.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/domain/EnergyReportAnnex.java
deleted file mode 100644
index 9dd9564..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/domain/EnergyReportAnnex.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢瀵硅薄 energy_report_annex
- * 
- * @author zhaow
- * @date 2020-12-21
- */
-public class EnergyReportAnnex extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 涓婚敭 */
-    private String id;
-
-    /** 鍏宠仈energy_report.id */
-    @Excel(name = "鍏宠仈energy_report.id")
-    private String reportId;
-
-    /** 鏂囦欢鍚� */
-    @Excel(name = "鏂囦欢鍚�")
-    private String fileName;
-
-    /** 鏂囦欢鍚庣紑 */
-    @Excel(name = "鏂囦欢鍚庣紑")
-    private String fileSuffix;
-
-    /** 鏂囦欢璺緞 */
-    @Excel(name = "鏂囦欢璺緞")
-    private String filePath;
-
-    /** 鍒犻櫎鏍囧織Y鍒犻櫎 N涓哄垹闄� */
-    @Excel(name = "鍒犻櫎鏍囧織Y鍒犻櫎 N涓哄垹闄�")
-    private String delFlage;
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setReportId(String reportId) 
-    {
-        this.reportId = reportId;
-    }
-
-    public String getReportId() 
-    {
-        return reportId;
-    }
-    public void setFileName(String fileName) 
-    {
-        this.fileName = fileName;
-    }
-
-    public String getFileName() 
-    {
-        return fileName;
-    }
-    public void setFileSuffix(String fileSuffix) 
-    {
-        this.fileSuffix = fileSuffix;
-    }
-
-    public String getFileSuffix() 
-    {
-        return fileSuffix;
-    }
-    public void setFilePath(String filePath) 
-    {
-        this.filePath = filePath;
-    }
-
-    public String getFilePath() 
-    {
-        return filePath;
-    }
-    public void setDelFlage(String delFlage) 
-    {
-        this.delFlage = delFlage;
-    }
-
-    public String getDelFlage() 
-    {
-        return delFlage;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("reportId", getReportId())
-            .append("fileName", getFileName())
-            .append("fileSuffix", getFileSuffix())
-            .append("filePath", getFilePath())
-            .append("delFlage", getDelFlage())
-            .append("createTime", getCreateTime())
-            .append("createBy", getCreateBy())
-            .append("updateTime", getUpdateTime())
-            .append("updateBy", getUpdateBy())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/mapper/EnergyProjectAnnexMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/mapper/EnergyProjectAnnexMapper.java
deleted file mode 100644
index 93b9013..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/mapper/EnergyProjectAnnexMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.mapper;
-
-import com.dingzhuo.energy.basic.data.energy.domain.EnergyProjectAnnex;
-import java.util.List;
-
-/**
- * 鑺傝兘椤圭洰绠$悊闄勪欢Mapper鎺ュ彛
- * 
- * @author sys
- * @date 2020-12-08
- */
-public interface EnergyProjectAnnexMapper 
-{
-    /**
-     * 鏌ヨ鑺傝兘椤圭洰绠$悊闄勪欢
-     * 
-     * @param id 鑺傝兘椤圭洰绠$悊闄勪欢ID
-     * @return 鑺傝兘椤圭洰绠$悊闄勪欢
-     */
-    public EnergyProjectAnnex selectEnergyProjectAnnexById(String id);
-
-    /**
-     * 鏌ヨ鑺傝兘椤圭洰绠$悊闄勪欢鍒楄〃
-     * 
-     * @param energyProjectAnnex 鑺傝兘椤圭洰绠$悊闄勪欢
-     * @return 鑺傝兘椤圭洰绠$悊闄勪欢闆嗗悎
-     */
-    public List<EnergyProjectAnnex> selectEnergyProjectAnnexList(EnergyProjectAnnex energyProjectAnnex);
-
-    /**
-     * 鏂板鑺傝兘椤圭洰绠$悊闄勪欢
-     * 
-     * @param energyProjectAnnex 鑺傝兘椤圭洰绠$悊闄勪欢
-     * @return 缁撴灉
-     */
-    public int insertEnergyProjectAnnex(EnergyProjectAnnex energyProjectAnnex);
-
-    /**
-     * 淇敼鑺傝兘椤圭洰绠$悊闄勪欢
-     * 
-     * @param energyProjectAnnex 鑺傝兘椤圭洰绠$悊闄勪欢
-     * @return 缁撴灉
-     */
-    public int updateEnergyProjectAnnex(EnergyProjectAnnex energyProjectAnnex);
-
-    /**
-     * 鍒犻櫎鑺傝兘椤圭洰绠$悊闄勪欢
-     * 
-     * @param id 鑺傝兘椤圭洰绠$悊闄勪欢ID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyProjectAnnexById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎鑺傝兘椤圭洰绠$悊闄勪欢
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyProjectAnnexByIds(String[] ids);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/mapper/EnergyProjectMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/mapper/EnergyProjectMapper.java
deleted file mode 100644
index 99a1b55..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/mapper/EnergyProjectMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.mapper;
-
-import com.dingzhuo.energy.basic.data.energy.domain.EnergyProject;
-import java.util.List;
-
-/**
- * 鑺傝兘椤圭洰绠$悊Mapper鎺ュ彛
- * 
- * @author sys
- * @date 2020-12-07
- */
-public interface EnergyProjectMapper 
-{
-    /**
-     * 鏌ヨ鑺傝兘椤圭洰绠$悊
-     * 
-     * @param id 鑺傝兘椤圭洰绠$悊ID
-     * @return 鑺傝兘椤圭洰绠$悊
-     */
-    public EnergyProject selectEnergyProjectById(String id);
-
-    /**
-     * 鏌ヨ鑺傝兘椤圭洰绠$悊鍒楄〃
-     * 
-     * @param energyProject 鑺傝兘椤圭洰绠$悊
-     * @return 鑺傝兘椤圭洰绠$悊闆嗗悎
-     */
-    public List<EnergyProject> selectEnergyProjectList(EnergyProject energyProject);
-
-    /**
-     * 鏂板鑺傝兘椤圭洰绠$悊
-     * 
-     * @param energyProject 鑺傝兘椤圭洰绠$悊
-     * @return 缁撴灉
-     */
-    public int insertEnergyProject(EnergyProject energyProject);
-
-    /**
-     * 淇敼鑺傝兘椤圭洰绠$悊
-     * 
-     * @param energyProject 鑺傝兘椤圭洰绠$悊
-     * @return 缁撴灉
-     */
-    public int updateEnergyProject(EnergyProject energyProject);
-
-    /**
-     * 鍒犻櫎鑺傝兘椤圭洰绠$悊
-     * 
-     * @param id 鑺傝兘椤圭洰绠$悊ID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyProjectById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎鑺傝兘椤圭洰绠$悊
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyProjectByIds(String[] ids);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/mapper/EnergyReportAnnexMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/mapper/EnergyReportAnnexMapper.java
deleted file mode 100644
index e989c24..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/mapper/EnergyReportAnnexMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.mapper;
-
-import com.dingzhuo.energy.basic.data.energy.domain.EnergyReportAnnex;
-import java.util.List;
-
-/**
- * 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢Mapper鎺ュ彛selectEnergyReportAnnexList
- * 
- * @author zhaow
- * @date 2020-12-21
- */
-public interface EnergyReportAnnexMapper 
-{
-    /**
-     * 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * 
-     * @param id 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢ID
-     * @return 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     */
-    public EnergyReportAnnex selectEnergyReportAnnexById(String id);
-
-    /**
-     * 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢鍒楄〃
-     * 
-     * @param energyReportAnnex 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * @return 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢闆嗗悎
-     */
-    public List<EnergyReportAnnex> selectEnergyReportAnnexList(EnergyReportAnnex energyReportAnnex);
-
-    /**
-     * 鏂板鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * 
-     * @param energyReportAnnex 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * @return 缁撴灉
-     */
-    public int insertEnergyReportAnnex(EnergyReportAnnex energyReportAnnex);
-
-    /**
-     * 淇敼鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * 
-     * @param energyReportAnnex 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * @return 缁撴灉
-     */
-    public int updateEnergyReportAnnex(EnergyReportAnnex energyReportAnnex);
-
-    /**
-     * 鍒犻櫎鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * 
-     * @param id 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢ID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyReportAnnexById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyReportAnnexByIds(String[] ids);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/mapper/EnergyReportMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/mapper/EnergyReportMapper.java
deleted file mode 100644
index f4fd823..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/mapper/EnergyReportMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.mapper;
-
-import com.dingzhuo.energy.basic.data.energy.domain.EnergyReport;
-import java.util.List;
-
-/**
- * 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊Mapper鎺ュ彛
- * 
- * @author zhaow
- * @date 2020-12-21
- */
-public interface EnergyReportMapper 
-{
-    /**
-     * 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * 
-     * @param id 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊ID
-     * @return 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     */
-    public EnergyReport selectEnergyReportById(String id);
-
-    /**
-     * 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊鍒楄〃
-     * 
-     * @param energyReport 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * @return 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闆嗗悎
-     */
-    public List<EnergyReport> selectEnergyReportList(EnergyReport energyReport);
-
-    /**
-     * 鏂板鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * 
-     * @param energyReport 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * @return 缁撴灉
-     */
-    public int insertEnergyReport(EnergyReport energyReport);
-
-    /**
-     * 淇敼鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * 
-     * @param energyReport 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * @return 缁撴灉
-     */
-    public int updateEnergyReport(EnergyReport energyReport);
-
-    /**
-     * 鍒犻櫎鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * 
-     * @param id 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊ID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyReportById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyReportByIds(String[] ids);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/IEnergyProjectAnnexService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/IEnergyProjectAnnexService.java
deleted file mode 100644
index cff6259..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/IEnergyProjectAnnexService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.service;
-
-import com.dingzhuo.energy.basic.data.energy.domain.EnergyProjectAnnex;
-import java.util.List;
-
-/**
- * 鑺傝兘椤圭洰绠$悊闄勪欢Service鎺ュ彛
- * 
- * @author sys
- * @date 2020-12-08
- */
-public interface IEnergyProjectAnnexService 
-{
-    /**
-     * 鏌ヨ鑺傝兘椤圭洰绠$悊闄勪欢
-     * 
-     * @param id 鑺傝兘椤圭洰绠$悊闄勪欢ID
-     * @return 鑺傝兘椤圭洰绠$悊闄勪欢
-     */
-    public EnergyProjectAnnex selectEnergyProjectAnnexById(String id);
-
-    /**
-     * 鏌ヨ鑺傝兘椤圭洰绠$悊闄勪欢鍒楄〃
-     * 
-     * @param energyProjectAnnex 鑺傝兘椤圭洰绠$悊闄勪欢
-     * @return 鑺傝兘椤圭洰绠$悊闄勪欢闆嗗悎
-     */
-    public List<EnergyProjectAnnex> selectEnergyProjectAnnexList(EnergyProjectAnnex energyProjectAnnex);
-
-    /**
-     * 鏂板鑺傝兘椤圭洰绠$悊闄勪欢
-     * 
-     * @param energyProjectAnnex 鑺傝兘椤圭洰绠$悊闄勪欢
-     * @return 缁撴灉
-     */
-    public int insertEnergyProjectAnnex(EnergyProjectAnnex energyProjectAnnex);
-
-    /**
-     * 淇敼鑺傝兘椤圭洰绠$悊闄勪欢
-     * 
-     * @param energyProjectAnnex 鑺傝兘椤圭洰绠$悊闄勪欢
-     * @return 缁撴灉
-     */
-    public int updateEnergyProjectAnnex(EnergyProjectAnnex energyProjectAnnex);
-
-    /**
-     * 鎵归噺鍒犻櫎鑺傝兘椤圭洰绠$悊闄勪欢
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鑺傝兘椤圭洰绠$悊闄勪欢ID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyProjectAnnexByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎鑺傝兘椤圭洰绠$悊闄勪欢淇℃伅
-     * 
-     * @param id 鑺傝兘椤圭洰绠$悊闄勪欢ID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyProjectAnnexById(String id);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/IEnergyProjectService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/IEnergyProjectService.java
deleted file mode 100644
index fece34d..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/IEnergyProjectService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.service;
-
-import com.dingzhuo.energy.basic.data.energy.domain.EnergyProject;
-import java.util.List;
-
-/**
- * 鑺傝兘椤圭洰绠$悊Service鎺ュ彛
- * 
- * @author sys
- * @date 2020-12-07
- */
-public interface IEnergyProjectService 
-{
-    /**
-     * 鏌ヨ鑺傝兘椤圭洰绠$悊
-     * 
-     * @param id 鑺傝兘椤圭洰绠$悊ID
-     * @return 鑺傝兘椤圭洰绠$悊
-     */
-    public EnergyProject selectEnergyProjectById(String id);
-
-    /**
-     * 鏌ヨ鑺傝兘椤圭洰绠$悊鍒楄〃
-     * 
-     * @param energyProject 鑺傝兘椤圭洰绠$悊
-     * @return 鑺傝兘椤圭洰绠$悊闆嗗悎
-     */
-    public List<EnergyProject> selectEnergyProjectList(EnergyProject energyProject);
-
-    /**
-     * 鏂板鑺傝兘椤圭洰绠$悊
-     * 
-     * @param energyProject 鑺傝兘椤圭洰绠$悊
-     * @return 缁撴灉
-     */
-    public int insertEnergyProject(EnergyProject energyProject);
-
-    /**
-     * 淇敼鑺傝兘椤圭洰绠$悊
-     * 
-     * @param energyProject 鑺傝兘椤圭洰绠$悊
-     * @return 缁撴灉
-     */
-    public int updateEnergyProject(EnergyProject energyProject);
-
-    /**
-     * 鎵归噺鍒犻櫎鑺傝兘椤圭洰绠$悊
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鑺傝兘椤圭洰绠$悊ID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyProjectByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎鑺傝兘椤圭洰绠$悊淇℃伅
-     * 
-     * @param id 鑺傝兘椤圭洰绠$悊ID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyProjectById(String id);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/IEnergyReportAnnexService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/IEnergyReportAnnexService.java
deleted file mode 100644
index 8c5160c..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/IEnergyReportAnnexService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.service;
-
-import com.dingzhuo.energy.basic.data.energy.domain.EnergyReportAnnex;
-import java.util.List;
-
-/**
- * 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢Service鎺ュ彛
- * 
- * @author zhaow
- * @date 2020-12-21
- */
-public interface IEnergyReportAnnexService 
-{
-    /**
-     * 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * 
-     * @param id 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢ID
-     * @return 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     */
-    public EnergyReportAnnex selectEnergyReportAnnexById(String id);
-
-    /**
-     * 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢鍒楄〃
-     * 
-     * @param energyReportAnnex 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * @return 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢闆嗗悎
-     */
-    public List<EnergyReportAnnex> selectEnergyReportAnnexList(EnergyReportAnnex energyReportAnnex);
-
-    /**
-     * 鏂板鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * 
-     * @param energyReportAnnex 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * @return 缁撴灉
-     */
-    public int insertEnergyReportAnnex(EnergyReportAnnex energyReportAnnex);
-
-    /**
-     * 淇敼鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * 
-     * @param energyReportAnnex 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * @return 缁撴灉
-     */
-    public int updateEnergyReportAnnex(EnergyReportAnnex energyReportAnnex);
-
-    /**
-     * 鎵归噺鍒犻櫎鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢ID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyReportAnnexByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢淇℃伅
-     * 
-     * @param id 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢ID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyReportAnnexById(String id);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/IEnergyReportService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/IEnergyReportService.java
deleted file mode 100644
index 3b250c6..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/IEnergyReportService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.service;
-
-import com.dingzhuo.energy.basic.data.energy.domain.EnergyReport;
-import java.util.List;
-
-/**
- * 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊Service鎺ュ彛
- * 
- * @author zhaow
- * @date 2020-12-21
- */
-public interface IEnergyReportService 
-{
-    /**
-     * 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * 
-     * @param id 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊ID
-     * @return 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     */
-    public EnergyReport selectEnergyReportById(String id);
-
-    /**
-     * 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊鍒楄〃
-     * 
-     * @param energyReport 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * @return 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闆嗗悎
-     */
-    public List<EnergyReport> selectEnergyReportList(EnergyReport energyReport);
-
-    /**
-     * 鏂板鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * 
-     * @param energyReport 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * @return 缁撴灉
-     */
-    public int insertEnergyReport(EnergyReport energyReport);
-
-    /**
-     * 淇敼鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * 
-     * @param energyReport 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * @return 缁撴灉
-     */
-    public int updateEnergyReport(EnergyReport energyReport);
-
-    /**
-     * 鎵归噺鍒犻櫎鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鑺傝兘鍒嗘瀽鎶ュ憡绠$悊ID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyReportByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎鑺傝兘鍒嗘瀽鎶ュ憡绠$悊淇℃伅
-     * 
-     * @param id 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊ID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyReportById(String id);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/impl/EnergyProjectAnnexServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/impl/EnergyProjectAnnexServiceImpl.java
deleted file mode 100644
index d5ae467..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/impl/EnergyProjectAnnexServiceImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.service.impl;
-
-import com.dingzhuo.energy.basic.data.energy.domain.EnergyProjectAnnex;
-import com.dingzhuo.energy.basic.data.energy.mapper.EnergyProjectAnnexMapper;
-import com.dingzhuo.energy.basic.data.energy.service.IEnergyProjectAnnexService;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * 鑺傝兘椤圭洰绠$悊闄勪欢Service涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-12-08
- */
-@Service
-public class EnergyProjectAnnexServiceImpl implements IEnergyProjectAnnexService 
-{
-    @Autowired
-    private EnergyProjectAnnexMapper energyProjectAnnexMapper;
-
-    /**
-     * 鏌ヨ鑺傝兘椤圭洰绠$悊闄勪欢
-     * 
-     * @param id 鑺傝兘椤圭洰绠$悊闄勪欢ID
-     * @return 鑺傝兘椤圭洰绠$悊闄勪欢
-     */
-    @Override
-    public EnergyProjectAnnex selectEnergyProjectAnnexById(String id)
-    {
-        return energyProjectAnnexMapper.selectEnergyProjectAnnexById(id);
-    }
-
-    /**
-     * 鏌ヨ鑺傝兘椤圭洰绠$悊闄勪欢鍒楄〃
-     * 
-     * @param energyProjectAnnex 鑺傝兘椤圭洰绠$悊闄勪欢
-     * @return 鑺傝兘椤圭洰绠$悊闄勪欢
-     */
-    @Override
-    public List<EnergyProjectAnnex> selectEnergyProjectAnnexList(EnergyProjectAnnex energyProjectAnnex)
-    {
-        return energyProjectAnnexMapper.selectEnergyProjectAnnexList(energyProjectAnnex);
-    }
-
-    /**
-     * 鏂板鑺傝兘椤圭洰绠$悊闄勪欢
-     * 
-     * @param energyProjectAnnex 鑺傝兘椤圭洰绠$悊闄勪欢
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertEnergyProjectAnnex(EnergyProjectAnnex energyProjectAnnex)
-    {
-        energyProjectAnnex.setCreateTime(DateUtils.getNowDate());
-        return energyProjectAnnexMapper.insertEnergyProjectAnnex(energyProjectAnnex);
-    }
-
-    /**
-     * 淇敼鑺傝兘椤圭洰绠$悊闄勪欢
-     * 
-     * @param energyProjectAnnex 鑺傝兘椤圭洰绠$悊闄勪欢
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateEnergyProjectAnnex(EnergyProjectAnnex energyProjectAnnex)
-    {
-        energyProjectAnnex.setUpdateTime(DateUtils.getNowDate());
-        return energyProjectAnnexMapper.updateEnergyProjectAnnex(energyProjectAnnex);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鑺傝兘椤圭洰绠$悊闄勪欢
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鑺傝兘椤圭洰绠$悊闄勪欢ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteEnergyProjectAnnexByIds(String[] ids)
-    {
-        return energyProjectAnnexMapper.deleteEnergyProjectAnnexByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎鑺傝兘椤圭洰绠$悊闄勪欢淇℃伅
-     * 
-     * @param id 鑺傝兘椤圭洰绠$悊闄勪欢ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteEnergyProjectAnnexById(String id)
-    {
-        return energyProjectAnnexMapper.deleteEnergyProjectAnnexById(id);
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/impl/EnergyProjectServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/impl/EnergyProjectServiceImpl.java
deleted file mode 100644
index a2e0f25..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/impl/EnergyProjectServiceImpl.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.service.impl;
-
-import com.dingzhuo.energy.basic.data.energy.domain.EnergyProject;
-import com.dingzhuo.energy.basic.data.energy.mapper.EnergyProjectMapper;
-import com.dingzhuo.energy.basic.data.energy.service.IEnergyProjectService;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * 鑺傝兘椤圭洰绠$悊Service涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-12-07
- */
-@Service
-public class EnergyProjectServiceImpl implements IEnergyProjectService 
-{
-    @Autowired
-    private EnergyProjectMapper energyProjectMapper;
-
-    /**
-     * 鏌ヨ鑺傝兘椤圭洰绠$悊
-     * 
-     * @param id 鑺傝兘椤圭洰绠$悊ID
-     * @return 鑺傝兘椤圭洰绠$悊
-     */
-    @Override
-    public EnergyProject selectEnergyProjectById(String id)
-    {
-        return energyProjectMapper.selectEnergyProjectById(id);
-    }
-
-    /**
-     * 鏌ヨ鑺傝兘椤圭洰绠$悊鍒楄〃
-     * 
-     * @param energyProject 鑺傝兘椤圭洰绠$悊
-     * @return 鑺傝兘椤圭洰绠$悊
-     */
-    @Override
-    public List<EnergyProject> selectEnergyProjectList(EnergyProject energyProject)
-    {
-        return energyProjectMapper.selectEnergyProjectList(energyProject);
-    }
-
-    /**
-     * 鏂板鑺傝兘椤圭洰绠$悊
-     * 
-     * @param energyProject 鑺傝兘椤圭洰绠$悊
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertEnergyProject(EnergyProject energyProject)
-    {
-        energyProject.setCreateTime(DateUtils.getNowDate());
-        return energyProjectMapper.insertEnergyProject(energyProject);
-    }
-
-    /**
-     * 淇敼鑺傝兘椤圭洰绠$悊
-     * 
-     * @param energyProject 鑺傝兘椤圭洰绠$悊
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateEnergyProject(EnergyProject energyProject)
-    {
-        energyProject.setUpdateTime(DateUtils.getNowDate());
-        energyProject.setUpdateOperator(SecurityUtils.getUsername());
-        return energyProjectMapper.updateEnergyProject(energyProject);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鑺傝兘椤圭洰绠$悊
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鑺傝兘椤圭洰绠$悊ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteEnergyProjectByIds(String[] ids)
-    {
-        return energyProjectMapper.deleteEnergyProjectByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎鑺傝兘椤圭洰绠$悊淇℃伅
-     * 
-     * @param id 鑺傝兘椤圭洰绠$悊ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteEnergyProjectById(String id)
-    {
-        return energyProjectMapper.deleteEnergyProjectById(id);
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/impl/EnergyReportAnnexServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/impl/EnergyReportAnnexServiceImpl.java
deleted file mode 100644
index 44c3e54..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/impl/EnergyReportAnnexServiceImpl.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.service.impl;
-
-import java.util.List;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.basic.data.energy.mapper.EnergyReportAnnexMapper;
-import com.dingzhuo.energy.basic.data.energy.domain.EnergyReportAnnex;
-import com.dingzhuo.energy.basic.data.energy.service.IEnergyReportAnnexService;
-
-/**
- * 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢Service涓氬姟灞傚鐞�
- * 
- * @author zhaow
- * @date 2020-12-21
- */
-@Service
-public class EnergyReportAnnexServiceImpl implements IEnergyReportAnnexService 
-{
-    @Autowired
-    private EnergyReportAnnexMapper energyReportAnnexMapper;
-
-    /**
-     * 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * 
-     * @param id 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢ID
-     * @return 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     */
-    @Override
-    public EnergyReportAnnex selectEnergyReportAnnexById(String id)
-    {
-        return energyReportAnnexMapper.selectEnergyReportAnnexById(id);
-    }
-
-    /**
-     * 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢鍒楄〃
-     * 
-     * @param energyReportAnnex 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * @return 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     */
-    @Override
-    public List<EnergyReportAnnex> selectEnergyReportAnnexList(EnergyReportAnnex energyReportAnnex)
-    {
-        return energyReportAnnexMapper.selectEnergyReportAnnexList(energyReportAnnex);
-    }
-
-    /**
-     * 鏂板鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * 
-     * @param energyReportAnnex 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertEnergyReportAnnex(EnergyReportAnnex energyReportAnnex)
-    {
-        energyReportAnnex.setCreateTime(DateUtils.getNowDate());
-        return energyReportAnnexMapper.insertEnergyReportAnnex(energyReportAnnex);
-    }
-
-    /**
-     * 淇敼鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * 
-     * @param energyReportAnnex 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateEnergyReportAnnex(EnergyReportAnnex energyReportAnnex)
-    {
-        energyReportAnnex.setUpdateTime(DateUtils.getNowDate());
-        return energyReportAnnexMapper.updateEnergyReportAnnex(energyReportAnnex);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteEnergyReportAnnexByIds(String[] ids)
-    {
-        return energyReportAnnexMapper.deleteEnergyReportAnnexByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢淇℃伅
-     * 
-     * @param id 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteEnergyReportAnnexById(String id)
-    {
-        return energyReportAnnexMapper.deleteEnergyReportAnnexById(id);
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/impl/EnergyReportServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/impl/EnergyReportServiceImpl.java
deleted file mode 100644
index 691d0a6..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energy/service/impl/EnergyReportServiceImpl.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.dingzhuo.energy.basic.data.energy.service.impl;
-
-import java.util.List;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.basic.data.energy.mapper.EnergyReportMapper;
-import com.dingzhuo.energy.basic.data.energy.domain.EnergyReport;
-import com.dingzhuo.energy.basic.data.energy.service.IEnergyReportService;
-
-/**
- * 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊Service涓氬姟灞傚鐞�
- * 
- * @author zhaow
- * @date 2020-12-21
- */
-@Service
-public class EnergyReportServiceImpl implements IEnergyReportService 
-{
-    @Autowired
-    private EnergyReportMapper energyReportMapper;
-
-    /**
-     * 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * 
-     * @param id 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊ID
-     * @return 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     */
-    @Override
-    public EnergyReport selectEnergyReportById(String id)
-    {
-        return energyReportMapper.selectEnergyReportById(id);
-    }
-
-    /**
-     * 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊鍒楄〃
-     * 
-     * @param energyReport 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * @return 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     */
-    @Override
-    public List<EnergyReport> selectEnergyReportList(EnergyReport energyReport)
-    {
-        return energyReportMapper.selectEnergyReportList(energyReport);
-    }
-
-    /**
-     * 鏂板鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * 
-     * @param energyReport 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertEnergyReport(EnergyReport energyReport)
-    {
-        energyReport.setCreateTime(DateUtils.getNowDate());
-        return energyReportMapper.insertEnergyReport(energyReport);
-    }
-
-    /**
-     * 淇敼鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * 
-     * @param energyReport 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateEnergyReport(EnergyReport energyReport)
-    {
-        energyReport.setUpdateTime(DateUtils.getNowDate());
-        return energyReportMapper.updateEnergyReport(energyReport);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鑺傝兘鍒嗘瀽鎶ュ憡绠$悊ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteEnergyReportByIds(String[] ids)
-    {
-        return energyReportMapper.deleteEnergyReportByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎鑺傝兘鍒嗘瀽鎶ュ憡绠$悊淇℃伅
-     * 
-     * @param id 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteEnergyReportById(String id)
-    {
-        return energyReportMapper.deleteEnergyReportById(id);
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energyExamine/controller/AssessmentIndexController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energyExamine/controller/AssessmentIndexController.java
deleted file mode 100644
index d1b5c44..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energyExamine/controller/AssessmentIndexController.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package com.dingzhuo.energy.basic.data.energyExamine.controller;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.basic.data.energyExamine.domain.AssessmentIndex;
-import com.dingzhuo.energy.basic.data.energyExamine.service.IAssessmentIndexService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * 鐢ㄨ兘鑰冩牳鏍囧噯Controller
- * 
- * @author zhaow
- * @date 2020-12-22
- */
-@RestController
-@RequestMapping("/energyExamine/assessmentIndex")
-public class AssessmentIndexController extends BaseController
-{
-    @Autowired
-    private IAssessmentIndexService assessmentIndexService;
-
-    /**
-     * 鏌ヨ鐢ㄨ兘鑰冩牳鏍囧噯鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('energyExamine:assessmentIndex:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(AssessmentIndex assessmentIndex)
-    {
-        startPage();
-        List<AssessmentIndex> list = assessmentIndexService.selectAssessmentIndexList(assessmentIndex);
-        return getDataTable(list);
-    }
-
-    /**
-     * 鏌ヨ鐢ㄨ兘鑰冩牳鏍囧噯鍒楄〃鏍规嵁妯″瀷ID
-     */
-    @PreAuthorize("@ss.hasPermi('energyExamine:assessmentIndex:listindex')")
-    @GetMapping("/list/{modeNodeId}")
-    public TableDataInfo listindex(@PathVariable String modeNodeId,AssessmentIndex assessmentIndex)
-    {
-        assessmentIndex.setModeNodeId(modeNodeId);
-        startPage();
-        List<AssessmentIndex> list = assessmentIndexService.selectAssessmentIndexListByMode(assessmentIndex);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭鐢ㄨ兘鑰冩牳鏍囧噯鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('energyExamine:assessmentIndex:export')")
-    @Log(title = "鐢ㄨ兘鑰冩牳鏍囧噯", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(AssessmentIndex assessmentIndex)
-    {
-        List<AssessmentIndex> list = assessmentIndexService.selectAssessmentIndexList(assessmentIndex);
-        ExcelUtil<AssessmentIndex> util = new ExcelUtil<AssessmentIndex>(AssessmentIndex.class);
-        return util.exportExcel(list, "assessmentIndex");
-    }
-
-    /**
-     * 鑾峰彇鐢ㄨ兘鑰冩牳鏍囧噯璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('energyExamine:assessmentIndex:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(assessmentIndexService.selectAssessmentIndexById(id));
-    }
-
-    /**
-     * 鏂板鐢ㄨ兘鑰冩牳鏍囧噯
-     */
-    @PreAuthorize("@ss.hasPermi('energyExamine:assessmentIndex:add')")
-    @Log(title = "鐢ㄨ兘鑰冩牳鏍囧噯", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody AssessmentIndex assessmentIndex)
-    {
-        return toAjax(assessmentIndexService.insertAssessmentIndex(assessmentIndex));
-    }
-
-    /**
-     * 淇敼鐢ㄨ兘鑰冩牳鏍囧噯
-     */
-    @PreAuthorize("@ss.hasPermi('energyExamine:assessmentIndex:edit')")
-    @Log(title = "鐢ㄨ兘鑰冩牳鏍囧噯", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody AssessmentIndex assessmentIndex)
-    {
-        return toAjax(assessmentIndexService.updateAssessmentIndex(assessmentIndex));
-    }
-
-    /**
-     * 鍒犻櫎鐢ㄨ兘鑰冩牳鏍囧噯
-     */
-    @PreAuthorize("@ss.hasPermi('energyExamine:assessmentIndex:remove')")
-    @Log(title = "鐢ㄨ兘鑰冩牳鏍囧噯", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(assessmentIndexService.deleteAssessmentIndexByIds(ids));
-    }
-
-    /**
-     * 娣诲姞妯″瀷鑰冩牳鑺傜偣鐨勬寚鏍�
-     */
-    @Log(title = "娣诲姞妯″瀷鑰冩牳鑺傜偣鐨勬寚鏍�", businessType = BusinessType.INSERT)
-    @PostMapping(value = "/addIndex/{modeNodeId}")
-    public AjaxResult edit(@PathVariable String modeNodeId, @RequestBody String[] ids) {
-        List<AssessmentIndex> assessmentIndexList = new ArrayList<AssessmentIndex>();
-        if(ids!=null && modeNodeId!=null && modeNodeId.trim().length()>0)
-        {
-            for(String indexId:ids)
-            {
-                AssessmentIndex assessMentIdex = new AssessmentIndex();
-                assessMentIdex.setId(UUID.randomUUID().toString());
-                assessMentIdex.setIndexId(indexId);
-                assessMentIdex.setModeNodeId(modeNodeId);
-                assessmentIndexList.add(assessMentIdex);
-            }
-        }
-        AjaxResult ajax = toAjax(assessmentIndexService.batchAssessIndex(assessmentIndexList));
-        return ajax;
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energyExamine/domain/AssessmentIndex.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energyExamine/domain/AssessmentIndex.java
deleted file mode 100644
index 76fb96f..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energyExamine/domain/AssessmentIndex.java
+++ /dev/null
@@ -1,210 +0,0 @@
-package com.dingzhuo.energy.basic.data.energyExamine.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 鐢ㄨ兘鑰冩牳鏍囧噯瀵硅薄 assessmentIndex
- * 
- * @author zhaow
- * @date 2020-12-22
- */
-public class AssessmentIndex extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 涓婚敭id */
-    private String id;
-
-    /** 妯″瀷鑺傜偣id */
-    private String modeNodeId;
-
-    /** 鎸囨爣id */
-    private String indexId;
-
-    /** 鏄惁鑳借�楄鍒� Y  N */
-    private boolean plan;
-
-    /** 鏄惁瀵规爣 Y  N */
-    private boolean benchmarking;
-
-    /** 鏍囨潌鑼冨洿瀛楀吀椤� */
-    private String benchRange;
-
-    /** 鏍囨潌绫诲瀷瀛楀吀椤� */
-    private String benchType;
-
-    /** 鏄惁鑳芥簮鍙屾帶 Y N */
-    private boolean dualControl;
-
-    /** 鏄惁鑷畾涔夋爣鍑� Y  N */
-    private boolean customStandard;
-
-    /** 鎸囧畾鑷畾涔夋爣鍑嗘暟鍊� */
-    private Double customVal;
-
-    /**妯″瀷鍚嶇О**/
-    private String modename;
-
-    /**鎸囨爣鍚嶇О**/
-    private String indexname;
-
-    /**璁¢噺鍗曚綅**/
-    private String jldw;
-    /**浣跨敤鐘舵�� Y浣跨敤  N鍋滅敤**/
-    private String state;
-    //鏌ヨ鏈骇銆佸叏閮ㄧ殑鏍囧織
-    private String eierarchyFlag;
-
-    public String getEierarchyFlag(){
-        return  this.eierarchyFlag;
-    }
-    public void setEierarchyFlag(String eierarchyFlag)
-    {
-        this.eierarchyFlag =eierarchyFlag;
-    }
-
-    public String getModename() {
-        return modename;
-    }
-
-    public void setModename(String modename) {
-        this.modename = modename;
-    }
-
-    public String getIndexname() {
-        return indexname;
-    }
-
-    public void setIndexname(String indexname) {
-        this.indexname = indexname;
-    }
-
-    public String getJldw() {
-        return jldw;
-    }
-
-    public void setJldw(String jldw) {
-        this.jldw = jldw;
-    }
-
-    public String getState() {
-        return state;
-    }
-
-    public void setState(String state) {
-        this.state = state;
-    }
-
-    public AssessmentIndex() {
-    }
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setModeNodeId(String modeNodeId) 
-    {
-        this.modeNodeId = modeNodeId;
-    }
-
-    public String getModeNodeId() 
-    {
-        return modeNodeId;
-    }
-    public void setIndexId(String indexId) 
-    {
-        this.indexId = indexId;
-    }
-
-    public String getIndexId() 
-    {
-        return indexId;
-    }
-    public void setPlan(boolean plan)
-    {
-        this.plan = plan;
-    }
-
-    public boolean getPlan()
-    {
-        return plan;
-    }
-    public void setBenchmarking(boolean benchmarking)
-    {
-        this.benchmarking = benchmarking;
-    }
-
-    public boolean getBenchmarking()
-    {
-        return benchmarking;
-    }
-    public void setBenchRange(String benchRange)
-    {
-        this.benchRange = benchRange;
-    }
-
-    public String getBenchRange()
-    {
-        return benchRange;
-    }
-    public void setBenchType(String benchType)
-    {
-        this.benchType = benchType;
-    }
-
-    public String getBenchType()
-    {
-        return benchType;
-    }
-    public void setDualControl(boolean dualControl)
-    {
-        this.dualControl = dualControl;
-    }
-
-    public boolean getDualControl()
-    {
-        return dualControl;
-    }
-    public void setCustomStandard(boolean customStandard)
-    {
-        this.customStandard = customStandard;
-    }
-
-    public boolean getCustomStandard()
-    {
-        return customStandard;
-    }
-    public void setCustomVal(Double customVal)
-    {
-        this.customVal = customVal;
-    }
-
-    public Double getCustomVal()
-    {
-        return customVal;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("modeNodeId", getModeNodeId())
-            .append("indexId", getIndexId())
-            .append("plan", getPlan())
-            .append("benchmarking", getBenchmarking())
-            .append("benchRange", getBenchRange())
-            .append("benchType", getBenchType())
-            .append("dualControl", getDualControl())
-            .append("customStandard", getCustomStandard())
-            .append("customVal", getCustomVal())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energyExamine/mapper/AssessmentIndexMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energyExamine/mapper/AssessmentIndexMapper.java
deleted file mode 100644
index d89c46f..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energyExamine/mapper/AssessmentIndexMapper.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.dingzhuo.energy.basic.data.energyExamine.mapper;
-
-import com.dingzhuo.energy.basic.data.energyExamine.domain.AssessmentIndex;
-import java.util.List;
-
-/**
- * 鐢ㄨ兘鑰冩牳鏍囧噯Mapper鎺ュ彛
- * 
- * @author zhaow
- * @date 2020-12-22
- */
-public interface AssessmentIndexMapper 
-{
-    /**
-     * 鏌ヨ鐢ㄨ兘鑰冩牳鏍囧噯
-     * 
-     * @param id 鐢ㄨ兘鑰冩牳鏍囧噯ID
-     * @return 鐢ㄨ兘鑰冩牳鏍囧噯
-     */
-    public AssessmentIndex selectAssessmentIndexById(String id);
-
-    /**
-     * 鏌ヨ鐢ㄨ兘鑰冩牳鏍囧噯鍒楄〃
-     * 
-     * @param assessmentIndex 鐢ㄨ兘鑰冩牳鏍囧噯
-     * @return 鐢ㄨ兘鑰冩牳鏍囧噯闆嗗悎
-     */
-    public List<AssessmentIndex> selectAssessmentIndexList(AssessmentIndex assessmentIndex);
-
-    /**
-     * 鏌ヨ鐢ㄨ兘鑰冩牳鏍囧噯鍒楄〃鏍规嵁妯″瀷ID
-     *
-     * @param assessmentIndex 鐢ㄨ兘鑰冩牳鏍囧噯
-     * @return 鐢ㄨ兘鑰冩牳鏍囧噯闆嗗悎
-     */
-    public List<AssessmentIndex> selectAssessmentIndexListByMode(AssessmentIndex assessmentIndex);
-
-    /**
-     * 鏂板鐢ㄨ兘鑰冩牳鏍囧噯
-     * 
-     * @param assessmentIndex 鐢ㄨ兘鑰冩牳鏍囧噯
-     * @return 缁撴灉
-     */
-    public int insertAssessmentIndex(AssessmentIndex assessmentIndex);
-
-    /**
-     * 淇敼鐢ㄨ兘鑰冩牳鏍囧噯
-     * 
-     * @param assessmentIndex 鐢ㄨ兘鑰冩牳鏍囧噯
-     * @return 缁撴灉
-     */
-    public int updateAssessmentIndex(AssessmentIndex assessmentIndex);
-
-    /**
-     * 鍒犻櫎鐢ㄨ兘鑰冩牳鏍囧噯
-     * 
-     * @param id 鐢ㄨ兘鑰冩牳鏍囧噯ID
-     * @return 缁撴灉
-     */
-    public int deleteAssessmentIndexById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎鐢ㄨ兘鑰冩牳鏍囧噯
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteAssessmentIndexByIds(String[] ids);
-
-    /**
-     * 鎵归噺鏂板妯″瀷鑰冩牳鎸囨爣
-     *
-     * @param assessmentIndexList 鑰冩牳鎸囨爣鍒楄〃
-     * @return 缁撴灉
-     */
-    int batchAssessIndex(List<AssessmentIndex> assessmentIndexList);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energyExamine/service/IAssessmentIndexService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energyExamine/service/IAssessmentIndexService.java
deleted file mode 100644
index c033cf7..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energyExamine/service/IAssessmentIndexService.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.dingzhuo.energy.basic.data.energyExamine.service;
-
-import com.dingzhuo.energy.basic.data.energyExamine.domain.AssessmentIndex;
-import java.util.List;
-
-/**
- * 鐢ㄨ兘鑰冩牳鏍囧噯Service鎺ュ彛
- * 
- * @author zhaow
- * @date 2020-12-22
- */
-public interface IAssessmentIndexService 
-{
-    /**
-     * 鏌ヨ鐢ㄨ兘鑰冩牳鏍囧噯
-     * 
-     * @param id 鐢ㄨ兘鑰冩牳鏍囧噯ID
-     * @return 鐢ㄨ兘鑰冩牳鏍囧噯
-     */
-    public AssessmentIndex selectAssessmentIndexById(String id);
-
-    /**
-     * 鏌ヨ鐢ㄨ兘鑰冩牳鏍囧噯鍒楄〃
-     * 
-     * @param assessmentIndex 鐢ㄨ兘鑰冩牳鏍囧噯
-     * @return 鐢ㄨ兘鑰冩牳鏍囧噯闆嗗悎
-     */
-    public List<AssessmentIndex> selectAssessmentIndexList(AssessmentIndex assessmentIndex);
-
-    /**
-     * 鏌ヨ鐢ㄨ兘鑰冩牳鏍囧噯鍒楄〃鏍规嵁妯″瀷ID
-     *
-     * @param assessmentIndex 鐢ㄨ兘鑰冩牳鏍囧噯
-     * @return 鐢ㄨ兘鑰冩牳鏍囧噯闆嗗悎
-     */
-    public List<AssessmentIndex> selectAssessmentIndexListByMode(AssessmentIndex assessmentIndex);
-
-    /**
-     * 鏂板鐢ㄨ兘鑰冩牳鏍囧噯
-     * 
-     * @param assessmentIndex 鐢ㄨ兘鑰冩牳鏍囧噯
-     * @return 缁撴灉
-     */
-    public int insertAssessmentIndex(AssessmentIndex assessmentIndex);
-
-    /**
-     * 淇敼鐢ㄨ兘鑰冩牳鏍囧噯
-     * 
-     * @param assessmentIndex 鐢ㄨ兘鑰冩牳鏍囧噯
-     * @return 缁撴灉
-     */
-    public int updateAssessmentIndex(AssessmentIndex assessmentIndex);
-
-    /**
-     * 鎵归噺鍒犻櫎鐢ㄨ兘鑰冩牳鏍囧噯
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鐢ㄨ兘鑰冩牳鏍囧噯ID
-     * @return 缁撴灉
-     */
-    public int deleteAssessmentIndexByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎鐢ㄨ兘鑰冩牳鏍囧噯淇℃伅
-     * 
-     * @param id 鐢ㄨ兘鑰冩牳鏍囧噯ID
-     * @return 缁撴灉
-     */
-    public int deleteAssessmentIndexById(String id);
-
-    /**
-     * 鎵归噺鏂板妯″瀷鑰冩牳鎸囨爣
-     *
-     * @param assessmentIndexList 鑰冩牳鎸囨爣鍒楄〃
-     * @return 缁撴灉
-     */
-    public int batchAssessIndex(List<AssessmentIndex> assessmentIndexList);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energyExamine/service/impl/AssessmentIndexServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energyExamine/service/impl/AssessmentIndexServiceImpl.java
deleted file mode 100644
index 141259a..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/energyExamine/service/impl/AssessmentIndexServiceImpl.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package com.dingzhuo.energy.basic.data.energyExamine.service.impl;
-
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.basic.data.energyExamine.mapper.AssessmentIndexMapper;
-import com.dingzhuo.energy.basic.data.energyExamine.domain.AssessmentIndex;
-import com.dingzhuo.energy.basic.data.energyExamine.service.IAssessmentIndexService;
-
-/**
- * 鐢ㄨ兘鑰冩牳鏍囧噯Service涓氬姟灞傚鐞�
- * 
- * @author zhaow
- * @date 2020-12-22
- */
-@Service
-public class AssessmentIndexServiceImpl implements IAssessmentIndexService 
-{
-    @Autowired
-    private AssessmentIndexMapper assessmentIndexMapper;
-
-    /**
-     * 鏌ヨ鐢ㄨ兘鑰冩牳鏍囧噯
-     * 
-     * @param id 鐢ㄨ兘鑰冩牳鏍囧噯ID
-     * @return 鐢ㄨ兘鑰冩牳鏍囧噯
-     */
-    @Override
-    public AssessmentIndex selectAssessmentIndexById(String id)
-    {
-        return assessmentIndexMapper.selectAssessmentIndexById(id);
-    }
-
-    /**
-     * 鏌ヨ鐢ㄨ兘鑰冩牳鏍囧噯鍒楄〃
-     * 
-     * @param assessmentIndex 鐢ㄨ兘鑰冩牳鏍囧噯
-     * @return 鐢ㄨ兘鑰冩牳鏍囧噯
-     */
-    @Override
-    public List<AssessmentIndex> selectAssessmentIndexList(AssessmentIndex assessmentIndex)
-    {
-        return assessmentIndexMapper.selectAssessmentIndexList(assessmentIndex);
-    }
-
-    /**
-     * 鏌ヨ鐢ㄨ兘鑰冩牳鏍囧噯鍒楄〃鏍规嵁妯″瀷ID
-     *
-     * @param assessmentIndex 鐢ㄨ兘鑰冩牳鏍囧噯
-     * @return 鐢ㄨ兘鑰冩牳鏍囧噯闆嗗悎
-     */
-    public List<AssessmentIndex> selectAssessmentIndexListByMode(AssessmentIndex assessmentIndex)
-    {
-        return assessmentIndexMapper.selectAssessmentIndexListByMode(assessmentIndex);
-    }
-
-    /**
-     * 鏂板鐢ㄨ兘鑰冩牳鏍囧噯
-     * 
-     * @param assessmentIndex 鐢ㄨ兘鑰冩牳鏍囧噯
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertAssessmentIndex(AssessmentIndex assessmentIndex)
-    {
-        return assessmentIndexMapper.insertAssessmentIndex(assessmentIndex);
-    }
-
-    /**
-     * 淇敼鐢ㄨ兘鑰冩牳鏍囧噯
-     * 
-     * @param assessmentIndex 鐢ㄨ兘鑰冩牳鏍囧噯
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateAssessmentIndex(AssessmentIndex assessmentIndex)
-    {
-        return assessmentIndexMapper.updateAssessmentIndex(assessmentIndex);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鐢ㄨ兘鑰冩牳鏍囧噯
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鐢ㄨ兘鑰冩牳鏍囧噯ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteAssessmentIndexByIds(String[] ids)
-    {
-        return assessmentIndexMapper.deleteAssessmentIndexByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎鐢ㄨ兘鑰冩牳鏍囧噯淇℃伅
-     * 
-     * @param id 鐢ㄨ兘鑰冩牳鏍囧噯ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteAssessmentIndexById(String id)
-    {
-        return assessmentIndexMapper.deleteAssessmentIndexById(id);
-    }
-
-    /**
-     * 鎵归噺鏂板妯″瀷鑰冩牳鎸囨爣
-     *
-     * @param assessmentIndexList 鑰冩牳鎸囨爣鍒楄〃
-     * @return 缁撴灉
-     */
-    @Override
-    public int batchAssessIndex(List<AssessmentIndex> assessmentIndexList){
-        return assessmentIndexMapper.batchAssessIndex(assessmentIndexList);
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/controller/FacilityAnnexController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/controller/FacilityAnnexController.java
deleted file mode 100644
index b2e9ea1..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/controller/FacilityAnnexController.java
+++ /dev/null
@@ -1,189 +0,0 @@
-package com.dingzhuo.energy.basic.data.facility.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.common.utils.IdUtils;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.common.utils.file.FileUploadUtils;
-import com.dingzhuo.energy.common.utils.file.FileUtils;
-import com.dingzhuo.energy.framework.config.RuoYiConfig;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.basic.data.facility.domain.FacilityAnnex;
-import com.dingzhuo.energy.basic.data.facility.service.IFacilityAnnexService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * 璁惧妗f闄勪欢Controller
- *
- * @author sys
- * @date 2020-02-24
- */
-@RestController
-@RequestMapping("/facility/annex")
-public class FacilityAnnexController extends BaseController
-{
-    @Autowired
-    private IFacilityAnnexService facilityAnnexService;
-    @Autowired
-    private TokenService tokenService;
-
-    private static final Logger log = LoggerFactory.getLogger(FacilityAnnexController.class);
-    /**
-     * 鏌ヨ璁惧妗f闄勪欢鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('facility:annex:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(FacilityAnnex facilityAnnex)
-    {
-        startPage();
-        List<FacilityAnnex> list = facilityAnnexService.selectFacilityAnnexList(facilityAnnex);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭璁惧妗f闄勪欢鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('facility:annex:export')")
-    @Log(title = "璁惧妗f闄勪欢", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(FacilityAnnex facilityAnnex)
-    {
-        List<FacilityAnnex> list = facilityAnnexService.selectFacilityAnnexList(facilityAnnex);
-        ExcelUtil<FacilityAnnex> util = new ExcelUtil<FacilityAnnex>(FacilityAnnex.class);
-        return util.exportExcel(list, "annex");
-    }
-
-    /**
-     * 鑾峰彇璁惧妗f闄勪欢璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('facility:annex:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(facilityAnnexService.selectFacilityAnnexById(id));
-    }
-
-    /**
-     * 鏂板璁惧妗f闄勪欢
-     */
-    @PreAuthorize("@ss.hasPermi('facility:annex:add')")
-    @Log(title = "璁惧妗f闄勪欢", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody FacilityAnnex facilityAnnex)
-    {
-        return toAjax(facilityAnnexService.insertFacilityAnnex(facilityAnnex));
-    }
-
-    /**
-     * 淇敼璁惧妗f闄勪欢
-     */
-    @PreAuthorize("@ss.hasPermi('facility:annex:edit')")
-    @Log(title = "璁惧妗f闄勪欢", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody FacilityAnnex facilityAnnex)
-    {
-        return toAjax(facilityAnnexService.updateFacilityAnnex(facilityAnnex));
-    }
-
-    /**
-     * 鍒犻櫎璁惧妗f闄勪欢
-     */
-    @PreAuthorize("@ss.hasPermi('facility:annex:remove')")
-    @Log(title = "璁惧妗f闄勪欢", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(facilityAnnexService.deleteFacilityAnnexByIds(ids));
-    }
-
-
-    /**
-     * 閫氱敤鎸囧畾鏂囦欢涓嬭浇璇锋眰
-     *
-     * @param showFileName 涓嬭浇灞曠ず鏂囦欢鍚嶇О
-    //     * @param filePath 涓嬭浇鏂囦欢缁濆璺緞 甯� 鏂囦欢鐪熷疄鍚嶅瓧鍙婅矾寰�
-     * @param delete 鏄惁鍒犻櫎/
-     */
-    @PreAuthorize("@ss.hasPermi('facility:annex:assignDownload')")
-    @PostMapping("/assignDownload")
-    public void fileAssignDownload(String showFileName, String filePath, Boolean delete, HttpServletResponse response, HttpServletRequest request)
-    {
-        try
-        {
-            response.setCharacterEncoding("utf-8");
-            response.setContentType("multipart/form-data");
-            response.setHeader("Content-Disposition",
-                    "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, showFileName));
-            FileUtils.writeBytes(filePath, response.getOutputStream());
-//            if (delete)
-//            {
-//                FileUtils.deleteFile(filePath);
-//            }
-            log.error("涓嬭浇鎴愬姛", "aa");
-        }
-        catch (Exception e)
-        {
-            log.error("涓嬭浇鏂囦欢澶辫触", e);
-        }
-    }
-    @Log(title = "璁惧妗f闄勪欢涓婁紶", businessType = BusinessType.IMPORT)
-    @PreAuthorize("@ss.hasPermi('facility:annex:fileImport')")
-    @PostMapping("/fileImport")
-    public AjaxResult importData(MultipartFile file, String facilityId) throws Exception
-    {
-        if (!file.isEmpty())
-        {
-            LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-            //鑾峰彇閰嶇疆鐨勬枃浠朵笂浼犺矾寰�
-            String uploadPathDir = RuoYiConfig.getUploadPath();
-            //鑾峰彇鏂囦欢鍘熷鍚嶇О
-            String fileName = file.getOriginalFilename();
-            //鑾峰彇鏂囦欢鎵╁睍鍚�
-            String fileSuffix = FileUploadUtils.getExtension(file);
-//            System.out.println("implementId==="+implementId);
-//            System.out.println("filedir==="+uploadPathDir);
-//            System.out.println("fileName==="+fileName);
-//            System.out.println("fileSuffix==="+fileSuffix);
-            //鏂囦欢鏈�缁堜繚瀛樼殑缁濆璺緞
-            String filePath = FileUploadUtils.uploadAll(uploadPathDir, file);
-//            System.out.println("涓婁紶鏂囦欢鍦板潃:===>"+filePath);
-            FacilityAnnex facilityAnnex = new FacilityAnnex();
-            //璁剧疆涓婚敭UUID
-            facilityAnnex.setId(IdUtils.simpleUUID());
-            facilityAnnex.setFileName(fileName);
-            facilityAnnex.setFilePath(filePath);
-            facilityAnnex.setFilesuffix(fileSuffix);
-            facilityAnnex.setFacilityId(facilityId);
-            facilityAnnex.setCreateBy(loginUser.getUsername());
-
-            facilityAnnex.setCreateBy(loginUser.getUsername());
-            if (this.facilityAnnexService.insertFacilityAnnex(facilityAnnex)>0)
-            {
-                return AjaxResult.success("闄勪欢涓婁紶瀹屾垚");
-            }
-        }
-        return AjaxResult.success("闄勪欢涓婁紶澶辫触");
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/controller/FacilityArchivesController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/controller/FacilityArchivesController.java
deleted file mode 100644
index 70e9acc..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/controller/FacilityArchivesController.java
+++ /dev/null
@@ -1,177 +0,0 @@
-package com.dingzhuo.energy.basic.data.facility.controller;
-
-import java.util.List;
-import java.util.UUID;
-
-import com.dingzhuo.energy.common.utils.IdUtils;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-//import com.dingzhuo.energy.basic.data.meter.domain.MeterImplement;
-//import com.dingzhuo.energy.basic.data.meter.domain.MeterImplementExcel;
-//import com.sun.org.glassfish.external.statistics.annotations.Reset;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.basic.data.facility.domain.FacilityArchives;
-import com.dingzhuo.energy.basic.data.facility.service.IFacilityArchivesService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.web.multipart.MultipartFile;
-
-/**
- * 璁惧妗fController
- *
- * @author zhaowei
- * @date 2020-02-24
- */
-@RestController
-@RequestMapping("/facility/archives")
-@Api(value = "璁惧妗fcontroller",tags = {"璁惧妗f绠$悊"})
-public class FacilityArchivesController extends BaseController
-{
-    @Autowired
-    private IFacilityArchivesService facilityArchivesService;
-    @Autowired
-    private TokenService tokenService;
-    /**
-     * 鏌ヨ璁惧妗f鍒楄〃
-     */
-    @ApiOperation(value = "璁惧妗f鍒楄〃")
-    @PreAuthorize("@ss.hasPermi('facility:archives:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(FacilityArchives facilityArchives)
-    {
-        startPage();
-        List<FacilityArchives> list = facilityArchivesService.selectFacilityArchivesList(facilityArchives);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭璁惧妗f鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('facility:archives:export')")
-    @Log(title = "璁惧妗f", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    @ApiOperation("璁惧妗f鍒楄〃瀵煎嚭")
-    public AjaxResult export(FacilityArchives facilityArchives)
-    {
-        List<FacilityArchives> list = facilityArchivesService.excelFacilityArchivesList(facilityArchives);
-        ExcelUtil<FacilityArchives> util = new ExcelUtil<FacilityArchives>(FacilityArchives.class);
-        return util.exportExcel(list, "archives");
-    }
-
-    /**
-     * 鑾峰彇璁惧妗f璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('facility:archives:query')")
-    @GetMapping(value = "/{id}")
-    @ApiOperation(value = "鏍规嵁id鑾峰彇璁惧妗f璇︾粏淇℃伅")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(facilityArchivesService.selectFacilityArchivesById(id));
-    }
-
-    /**
-     * 鏂板璁惧妗f
-     */
-    @PreAuthorize("@ss.hasPermi('facility:archives:add')")
-    @Log(title = "璁惧妗f", businessType = BusinessType.INSERT)
-    @PostMapping
-    @ApiOperation(value = "鏂板璁惧妗f")
-    public AjaxResult add(@RequestBody FacilityArchives facilityArchives)
-    {
-        FacilityArchives check = facilityArchivesService.selectFacilityArchivesByCode(facilityArchives);
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        //缂栧彿鍞竴鎬ф娴�
-        if(check!=null && check.getCode()!=null && check.getCode().length()>0)
-        {
-            return  AjaxResult.error(check.getCode()+"缂栫爜宸插瓨鍦�!");
-        }else
-        {
-            facilityArchives.setId(UUID.randomUUID().toString());
-            facilityArchives.setCreateBy(loginUser.getUsername());
-            return toAjax(facilityArchivesService.insertFacilityArchives(facilityArchives));
-        }
-    }
-
-    /**
-     * 淇敼璁惧妗f
-     */
-    @PreAuthorize("@ss.hasPermi('facility:archives:edit')")
-    @Log(title = "璁惧妗f", businessType = BusinessType.UPDATE)
-    @PutMapping
-    @ApiOperation(value = "缂栬緫璁惧妗f")
-    public AjaxResult edit(@RequestBody FacilityArchives facilityArchives)
-    {
-        //鏇存柊鏃剁殑缂栫爜 鍞竴绾︽潫 瑕佸垽鏂� id涓嶇瓑浜庤嚜宸憋紝涓� code瀛樺湪閲嶅鐨勶紝瑕佸厛鍘绘帀鑷繁锛屽惁鍒� 鑷繁鐨勪慨鏀逛篃鎶ラ敊
-        FacilityArchives check = facilityArchivesService.selectFacilityArchivesByCode(facilityArchives);
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        //缂栧彿鍞竴鎬ф娴�
-        if(check!=null && check.getCode()!=null && check.getCode().length()>0)
-        {
-            return  AjaxResult.error(check.getCode()+"缂栫爜宸插瓨鍦�!");
-        }else
-        {
-            facilityArchives.setUpdateBy(loginUser.getUsername());
-            return toAjax(facilityArchivesService.updateFacilityArchives(facilityArchives));
-        }
-
-    }
-
-    /**
-     * 鍒犻櫎璁惧妗f
-     */
-    @PreAuthorize("@ss.hasPermi('facility:archives:remove')")/**/
-    @Log(title = "璁惧妗f", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    @ApiOperation(value = "鍒犻櫎璁惧妗f")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(facilityArchivesService.deleteFacilityArchivesByIds(ids));
-    }
-  /**
-     * 妫�瀹氭仮澶�
-     */
-    @PreAuthorize("@ss.hasPermi('facility:archives:reset')")
-    @Log(title = "璁惧妗f", businessType = BusinessType.UPDATE)
-    @PostMapping ("/{ids}")
-    @ApiOperation(value = "璁惧妗f妫�瀹氭仮澶�")
-    public AjaxResult reset(@PathVariable String[] ids)
-    {
-        return toAjax(facilityArchivesService.resetFacilityArchivesByIds(ids));
-    }
-
-
-    @Log(title = "璁惧妗f缁存姢瀵煎叆", businessType = BusinessType.IMPORT)
-    @PreAuthorize("@ss.hasPermi('facility:archives:import')")
-    @PostMapping("/importData")
-    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
-    {
-        ExcelUtil<FacilityArchives> util = new ExcelUtil<FacilityArchives>(FacilityArchives.class);
-        List<FacilityArchives> facilityList = util.importExcel(file.getInputStream());
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        String message = facilityArchivesService.excelImpSave(facilityList,loginUser);
-        return AjaxResult.success(message);
-    }
-
-    @GetMapping("/importTemplate")
-    public AjaxResult importTemplate()
-    {
-        ExcelUtil<FacilityArchives> util = new ExcelUtil<FacilityArchives>(FacilityArchives.class);
-        return util.importTemplateExcel("璁惧妗f鏁版嵁");
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/domain/FacilityAnnex.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/domain/FacilityAnnex.java
deleted file mode 100644
index 284e5cb..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/domain/FacilityAnnex.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package com.dingzhuo.energy.basic.data.facility.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 璁惧妗f闄勪欢瀵硅薄 facility_annex
- * 
- * @author sys
- * @date 2020-02-24
- */
-public class FacilityAnnex extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 涓婚敭id */
-    private String id;
-
-    /** 璁惧妗fid */
-    private String facilityId;
-
-    /** 鏂囦欢鍚� */
-    @Excel(name = "鏂囦欢鍚�")
-    private String fileName;
-
-    /** 鏂囦欢鍚庣紑 */
-    private String filesuffix;
-
-    /** 鏂囦欢璺緞 */
-    private String filePath;
-
-    /** 鍒犻櫎鏍囧織 */
-    private String delFlage;
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setFacilityId(String facilityId) 
-    {
-        this.facilityId = facilityId;
-    }
-
-    public String getFacilityId() 
-    {
-        return facilityId;
-    }
-    public void setFileName(String fileName) 
-    {
-        this.fileName = fileName;
-    }
-
-    public String getFileName() 
-    {
-        return fileName;
-    }
-    public void setFilesuffix(String filesuffix) 
-    {
-        this.filesuffix = filesuffix;
-    }
-
-    public String getFilesuffix() 
-    {
-        return filesuffix;
-    }
-    public void setFilePath(String filePath) 
-    {
-        this.filePath = filePath;
-    }
-
-    public String getFilePath() 
-    {
-        return filePath;
-    }
-    public void setDelFlage(String delFlage) 
-    {
-        this.delFlage = delFlage;
-    }
-
-    public String getDelFlage() 
-    {
-        return delFlage;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("createTime", getCreateTime())
-            .append("createBy", getCreateBy())
-            .append("updateTime", getUpdateTime())
-            .append("updateBy", getUpdateBy())
-            .append("id", getId())
-            .append("facilityId", getFacilityId())
-            .append("fileName", getFileName())
-            .append("filesuffix", getFilesuffix())
-            .append("filePath", getFilePath())
-            .append("delFlage", getDelFlage())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/domain/FacilityArchives.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/domain/FacilityArchives.java
deleted file mode 100644
index 1606fcc..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/domain/FacilityArchives.java
+++ /dev/null
@@ -1,301 +0,0 @@
-package com.dingzhuo.energy.basic.data.facility.domain;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.util.Date;
-
-/**
- * 璁惧妗f瀵硅薄 facility_archives
- *
- * @author zhaowei
- * @date 2020-02-24
- */
-@ApiModel(value = "璁惧妗f")
-public class FacilityArchives extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 涓婚敭id */
-    @ApiModelProperty(value = "涓婚敭id")
-    private String id;
-
-    /** 缂栫爜 */
-    @Excel(name = "缂栫爜")
-    @ApiModelProperty(value = "缂栫爜")
-    private String code;
-
-    /** 璁惧鍚嶇О */
-    @Excel(name = "璁惧鍚嶇О")
-    @ApiModelProperty(value = "璁惧鍚嶇О")
-    private String facilityName;
-
-    /** 璁惧绫诲瀷 */
-    @Excel(name = "璁惧绫诲瀷")
-    @ApiModelProperty(value = "璁惧绫诲瀷")
-    private String facilityType;
-
-    /** 浣跨敤鍒嗗巶 */
-    @Excel(name = "浣跨敤鍒嗗巶")
-    @ApiModelProperty(value = "浣跨敤鍒嗗巶")
-    private String branchFactory;
-
-    /** 鐗╃悊浣嶇疆 */
-    @Excel(name = "鐗╃悊浣嶇疆")
-    @ApiModelProperty(value = "鐗╃悊浣嶇疆")
-    private String istallationLocationn;
-
-    /** 鑳借�楃瓑绾� */
-    @Excel(name = "鑳借�楃瓑绾�")
-    @ApiModelProperty(value = "鑳借�楃瓑绾�")
-    private String facilityGrade;
-
-    /** 棰濆畾鍔熺巼 */
-    @Excel(name = "棰濆畾鍔熺巼")
-    @ApiModelProperty(value = "棰濆畾鍔熺巼")
-    private String ratedPower;
-
-    /** 鐢熶骇鏃ユ湡 */
-    @Excel(name = "鐢熶骇鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
-    @ApiModelProperty(value = "鐢熶骇鏃ユ湡")
-    private Date productionDate;
-
-    /** 鎶曡繍鏃ユ湡 */
-    @Excel(name = "鎶曡繍鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
-    @ApiModelProperty(value = "鎶曡繍鏃ユ湡")
-    @JsonFormat(pattern="yyyy-MM-dd")
-    private Date putrunDate;
-
-    /** 鐢熶骇鍘傚 */
-    @Excel(name = "鐢熶骇鍘傚")
-    @ApiModelProperty(value = "鐢熶骇鍘傚")
-    private String manufacturer;
-
-    /** 璐熻矗浜� */
-    @Excel(name = "璐熻矗浜�")
-    @ApiModelProperty(value = "璐熻矗浜�")
-    private String personCharge;
-
-    /** 鎶�鏈弬鏁� */
-    @Excel(name = "鎶�鏈弬鏁�")
-    @ApiModelProperty(value = "鎶�鏈弬鏁�")
-    private String technicalData;
-
-    /** 璧峰鏃堕棿 */
-    @Excel(name = "璧峰鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
-    @ApiModelProperty(value = "璧峰鏃堕棿")
-    private Date startTime;
-
-    /** 妫�瀹氬懆鏈� */
-    @Excel(name = "妫�瀹氬懆鏈�")
-    @ApiModelProperty(value = "妫�瀹氬懆鏈�")
-    private Integer checkCycle;
-
-    /** 鎻愰啋鍛ㄦ湡 */
-    @Excel(name = "鎻愰啋鍛ㄦ湡")
-    @ApiModelProperty(value = "鎻愰啋鍛ㄦ湡")
-    private Integer reminderCycle;
-    /** 鏄惁閲嶇偣璁惧 */
-    @Excel(name = "鏄惁閲嶇偣璁惧")
-    @ApiModelProperty(value = "鏄惁閲嶇偣璁惧")
-    private String pointFlag;
-
-    private boolean txflage;
-
-    public void setTxflage(boolean txflage)
-    {
-        this.txflage = txflage;
-    }
-    public boolean getTxflage()
-    {
-        return this.txflage;
-    }
-
-    public void setId(String id)
-    {
-        this.id = id;
-    }
-
-    public String getId()
-    {
-        return id;
-    }
-    public void setCode(String code)
-    {
-        this.code = code;
-    }
-
-    public String getCode()
-    {
-        return code;
-    }
-    public void setFacilityName(String facilityName)
-    {
-        this.facilityName = facilityName;
-    }
-
-    public String getFacilityName()
-    {
-        return facilityName;
-    }
-    public void setFacilityType(String facilityType)
-    {
-        this.facilityType = facilityType;
-    }
-
-    public String getFacilityType()
-    {
-        return facilityType;
-    }
-    public void setBranchFactory(String branchFactory)
-    {
-        this.branchFactory = branchFactory;
-    }
-
-    public String getBranchFactory()
-    {
-        return branchFactory;
-    }
-    public void setIstallationLocationn(String istallationLocationn)
-    {
-        this.istallationLocationn = istallationLocationn;
-    }
-
-    public String getIstallationLocationn()
-    {
-        return istallationLocationn;
-    }
-    public void setFacilityGrade(String facilityGrade)
-    {
-        this.facilityGrade = facilityGrade;
-    }
-
-    public String getFacilityGrade()
-    {
-        return facilityGrade;
-    }
-    public void setRatedPower(String ratedPower)
-    {
-        this.ratedPower = ratedPower;
-    }
-
-    public String getRatedPower()
-    {
-        return ratedPower;
-    }
-    public void setProductionDate(Date productionDate)
-    {
-        this.productionDate = productionDate;
-    }
-
-    public Date getProductionDate()
-    {
-        return productionDate;
-    }
-    public void setPutrunDate(Date putrunDate)
-    {
-        this.putrunDate = putrunDate;
-    }
-
-    public Date getPutrunDate()
-    {
-        return putrunDate;
-    }
-    public void setManufacturer(String manufacturer)
-    {
-        this.manufacturer = manufacturer;
-    }
-
-    public String getManufacturer()
-    {
-        return manufacturer;
-    }
-    public void setPersonCharge(String personCharge)
-    {
-        this.personCharge = personCharge;
-    }
-
-    public String getPersonCharge()
-    {
-        return personCharge;
-    }
-    public void setTechnicalData(String technicalData)
-    {
-        this.technicalData = technicalData;
-    }
-
-    public String getTechnicalData()
-    {
-        return technicalData;
-    }
-    public void setStartTime(Date startTime)
-    {
-        this.startTime = startTime;
-    }
-
-    public Date getStartTime()
-    {
-        return startTime;
-    }
-    public void setCheckCycle(Integer checkCycle)
-    {
-        this.checkCycle = checkCycle;
-    }
-
-    public Integer getCheckCycle()
-    {
-        return checkCycle;
-    }
-    public void setReminderCycle(Integer reminderCycle)
-    {
-        this.reminderCycle = reminderCycle;
-    }
-
-    public Integer getReminderCycle()
-    {
-        return reminderCycle;
-    }
-
-    public String getPointFlag() {
-        return pointFlag;
-    }
-
-    public void setPointFlag(String pointFlag) {
-        this.pointFlag = pointFlag;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("code", getCode())
-            .append("facilityName", getFacilityName())
-            .append("facilityType", getFacilityType())
-            .append("branchFactory", getBranchFactory())
-            .append("istallationLocationn", getIstallationLocationn())
-            .append("facilityGrade", getFacilityGrade())
-            .append("ratedPower", getRatedPower())
-            .append("productionDate", getProductionDate())
-            .append("putrunDate", getPutrunDate())
-            .append("manufacturer", getManufacturer())
-            .append("personCharge", getPersonCharge())
-            .append("technicalData", getTechnicalData())
-            .append("startTime", getStartTime())
-            .append("checkCycle", getCheckCycle())
-            .append("reminderCycle", getReminderCycle())
-            .append("remark", getRemark())
-            .append("createTime", getCreateTime())
-            .append("createBy", getCreateBy())
-            .append("updateTime", getUpdateTime())
-            .append("updateBy", getUpdateBy())
-                .append("txflage", getTxflage())
-                .append("pointFlag", getPointFlag())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/mapper/FacilityAnnexMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/mapper/FacilityAnnexMapper.java
deleted file mode 100644
index e67f354..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/mapper/FacilityAnnexMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.facility.mapper;
-
-import com.dingzhuo.energy.basic.data.facility.domain.FacilityAnnex;
-import java.util.List;
-
-/**
- * 璁惧妗f闄勪欢Mapper鎺ュ彛
- *
- * @author sys
- * @date 2020-02-24
- */
-public interface FacilityAnnexMapper
-{
-    /**
-     * 鏌ヨ璁惧妗f闄勪欢
-     *
-     * @param id 璁惧妗f闄勪欢ID
-     * @return 璁惧妗f闄勪欢
-     */
-    public FacilityAnnex selectFacilityAnnexById(String  id);
-
-    /**
-     * 鏌ヨ璁惧妗f闄勪欢鍒楄〃
-     *
-     * @param facilityAnnex 璁惧妗f闄勪欢
-     * @return 璁惧妗f闄勪欢闆嗗悎
-     */
-    public List<FacilityAnnex> selectFacilityAnnexList(FacilityAnnex facilityAnnex);
-
-    /**
-     * 鏂板璁惧妗f闄勪欢
-     *
-     * @param facilityAnnex 璁惧妗f闄勪欢
-     * @return 缁撴灉
-     */
-    public int insertFacilityAnnex(FacilityAnnex facilityAnnex);
-
-    /**
-     * 淇敼璁惧妗f闄勪欢
-     *
-     * @param facilityAnnex 璁惧妗f闄勪欢
-     * @return 缁撴灉
-     */
-    public int updateFacilityAnnex(FacilityAnnex facilityAnnex);
-
-    /**
-     * 鍒犻櫎璁惧妗f闄勪欢
-     *
-     * @param id 璁惧妗f闄勪欢ID
-     * @return 缁撴灉
-     */
-    public int deleteFacilityAnnexById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎璁惧妗f闄勪欢
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteFacilityAnnexByIds(String[] ids);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/mapper/FacilityArchivesMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/mapper/FacilityArchivesMapper.java
deleted file mode 100644
index b767430..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/mapper/FacilityArchivesMapper.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.dingzhuo.energy.basic.data.facility.mapper;
-
-import com.dingzhuo.energy.basic.data.facility.domain.FacilityArchives;
-import java.util.List;
-
-/**
- * 璁惧妗fMapper鎺ュ彛
- *
- * @author zhaowei
- * @date 2020-02-24
- */
-public interface FacilityArchivesMapper
-{
-    /**
-     * 鏌ヨ璁惧妗f
-     *
-     * @param id 璁惧妗fID
-     * @return 璁惧妗f
-     */
-    public FacilityArchives selectFacilityArchivesById(String id);
-
-    /**
-     * 鏌ヨ璁惧妗f鐨刢ode鏄惁瀛樺湪
-     *
-     * @param facilityArchives 璁惧妗ffacilityArchives
-     * @return 璁惧妗f
-     */
-    public FacilityArchives selectFacilityArchivesByCode(FacilityArchives facilityArchives);
-    /**
-     * 鏌ヨ璁惧妗f鍒楄〃
-     *
-     * @param facilityArchives 璁惧妗f
-     * @return 璁惧妗f闆嗗悎
-     */
-    public List<FacilityArchives> selectFacilityArchivesList(FacilityArchives facilityArchives);
-    /**
-     * 鏌ヨ璁惧妗f瀵煎嚭鍒楄〃
-     *
-     * @param facilityArchives 璁惧妗f
-     * @return 璁惧妗f闆嗗悎
-     */
-    public List<FacilityArchives> excelFacilityArchivesList(FacilityArchives facilityArchives);
-
-    /**
-     * 鏂板璁惧妗f
-     *
-     * @param facilityArchives 璁惧妗f
-     * @return 缁撴灉
-     */
-    public int insertFacilityArchives(FacilityArchives facilityArchives);
-
-    /**
-     * 淇敼璁惧妗f
-     *
-     * @param facilityArchives 璁惧妗f
-     * @return 缁撴灉
-     */
-    public int updateFacilityArchives(FacilityArchives facilityArchives);
-
-    /**
-     * 鍒犻櫎璁惧妗f
-     *
-     * @param id 璁惧妗fID
-     * @return 缁撴灉
-     */
-    public int deleteFacilityArchivesById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎璁惧妗f
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteFacilityArchivesByIds(String[] ids);
-
-
-
-/*
-    *
-     * 妫�瀹氭仮澶嶈澶囨。妗�
-     *
-     * @param id 璁惧妗fID
-     * @return 缁撴灉
-    public int resetFacilityArchivesById(String[] id);
-*/
-
-    /**
-     * 鎵归噺妫�瀹氭仮澶嶈澶囨。妗�
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int resetFacilityArchivesByIds(String[] ids);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/service/IFacilityAnnexService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/service/IFacilityAnnexService.java
deleted file mode 100644
index 19e6491..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/service/IFacilityAnnexService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.facility.service;
-
-import com.dingzhuo.energy.basic.data.facility.domain.FacilityAnnex;
-import java.util.List;
-
-/**
- * 璁惧妗f闄勪欢Service鎺ュ彛
- *
- * @author sys
- * @date 2020-02-24
- */
-public interface IFacilityAnnexService
-{
-    /**
-     * 鏌ヨ璁惧妗f闄勪欢
-     *
-     * @param id 璁惧妗f闄勪欢ID
-     * @return 璁惧妗f闄勪欢
-     */
-    public FacilityAnnex selectFacilityAnnexById(String id);
-
-    /**
-     * 鏌ヨ璁惧妗f闄勪欢鍒楄〃
-     *
-     * @param facilityAnnex 璁惧妗f闄勪欢
-     * @return 璁惧妗f闄勪欢闆嗗悎
-     */
-    public List<FacilityAnnex> selectFacilityAnnexList(FacilityAnnex facilityAnnex);
-
-    /**
-     * 鏂板璁惧妗f闄勪欢
-     *
-     * @param facilityAnnex 璁惧妗f闄勪欢
-     * @return 缁撴灉
-     */
-    public int insertFacilityAnnex(FacilityAnnex facilityAnnex);
-
-    /**
-     * 淇敼璁惧妗f闄勪欢
-     *
-     * @param facilityAnnex 璁惧妗f闄勪欢
-     * @return 缁撴灉
-     */
-    public int updateFacilityAnnex(FacilityAnnex facilityAnnex);
-
-    /**
-     * 鎵归噺鍒犻櫎璁惧妗f闄勪欢
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑璁惧妗f闄勪欢ID
-     * @return 缁撴灉
-     */
-    public int deleteFacilityAnnexByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎璁惧妗f闄勪欢淇℃伅
-     *
-     * @param id 璁惧妗f闄勪欢ID
-     * @return 缁撴灉
-     */
-    public int deleteFacilityAnnexById(String id);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/service/IFacilityArchivesService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/service/IFacilityArchivesService.java
deleted file mode 100644
index 007d7f1..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/service/IFacilityArchivesService.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package com.dingzhuo.energy.basic.data.facility.service;
-
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.basic.data.facility.domain.FacilityArchives;
-
-import java.util.List;
-
-/**
- * 璁惧妗fService鎺ュ彛
- *
- * @author zhaowei
- * @date 2020-02-24
- */
-public interface IFacilityArchivesService
-{
-    /**
-     * 鏌ヨ璁惧妗f
-     *
-     * @param id 璁惧妗fID
-     * @return 璁惧妗f
-     */
-    public FacilityArchives selectFacilityArchivesById(String id);
-
-    /**
-     * 鏌ヨ璁惧妗fcode
-     *
-     * @param facilityArchives 璁惧妗f
-     * @return 璁惧妗f
-     */
-    public FacilityArchives selectFacilityArchivesByCode(FacilityArchives facilityArchives);
-
-    /**
-     * 鏌ヨ璁惧妗f鍒楄〃
-     *
-     * @param facilityArchives 璁惧妗f
-     * @return 璁惧妗f闆嗗悎
-     */
-    public List<FacilityArchives> selectFacilityArchivesList(FacilityArchives facilityArchives);
-    /**
-     * 鏌ヨ璁惧妗f鍒楄〃瀵煎嚭鍒楄〃
-     *
-     * @param facilityArchives 璁惧妗f
-     * @return 璁惧妗f闆嗗悎
-     */
-    public List<FacilityArchives> excelFacilityArchivesList(FacilityArchives facilityArchives);
-
-    /**
-     * 鏂板璁惧妗f
-     *
-     * @param facilityArchives 璁惧妗f
-     * @return 缁撴灉
-     */
-    public int insertFacilityArchives(FacilityArchives facilityArchives);
-
-    /**
-     * 淇敼璁惧妗f
-     *
-     * @param facilityArchives 璁惧妗f
-     * @return 缁撴灉
-     */
-    public int updateFacilityArchives(FacilityArchives facilityArchives);
-
-    /**
-     * 鎵归噺鍒犻櫎璁惧妗f
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑璁惧妗fID
-     * @return 缁撴灉
-     */
-    public int deleteFacilityArchivesByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎璁惧妗f淇℃伅
-     *
-     * @param id 璁惧妗fID
-     * @return 缁撴灉
-     */
-    public int deleteFacilityArchivesById(String id);
-
-
-    /**
-     * 鎵归噺妫�瀹氭仮澶嶈澶囨。妗�
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑璁惧妗fID
-     * @return 缁撴灉
-     */
-    public int resetFacilityArchivesByIds(String[] ids);
-
-   /* *//**
-     * 妫�瀹氭仮澶嶈澶囨。妗堜俊鎭�
-     *
-     * @param id 璁惧妗fID
-     * @return 缁撴灉
-     *//*
-    public int resetFacilityArchivesById(String[] id);*/
-
-    /**
-     * Excel瀵煎叆 璁惧妗f缁存姢淇℃伅
-     *
-     * @param facilityArchivesList  瑕佸鍏ョ殑璁惧妗f闆嗗悎
-     * @param loginUser 鐧诲綍鐢ㄦ埛瀵硅薄
-     * @return 缁撴灉
-     */
-    public String excelImpSave(List<FacilityArchives> facilityArchivesList, LoginUser loginUser);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/service/impl/FacilityAnnexServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/service/impl/FacilityAnnexServiceImpl.java
deleted file mode 100644
index 210a556..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/service/impl/FacilityAnnexServiceImpl.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.dingzhuo.energy.basic.data.facility.service.impl;
-
-import java.util.List;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.basic.data.facility.mapper.FacilityAnnexMapper;
-import com.dingzhuo.energy.basic.data.facility.domain.FacilityAnnex;
-import com.dingzhuo.energy.basic.data.facility.service.IFacilityAnnexService;
-
-/**
- * 璁惧妗f闄勪欢Service涓氬姟灞傚鐞�
- *
- * @author sys
- * @date 2020-02-24
- */
-@Service
-public class FacilityAnnexServiceImpl implements IFacilityAnnexService
-{
-    @Autowired
-    private FacilityAnnexMapper facilityAnnexMapper;
-
-    /**
-     * 鏌ヨ璁惧妗f闄勪欢
-     *
-     * @param id 璁惧妗f闄勪欢ID
-     * @return 璁惧妗f闄勪欢
-     */
-    @Override
-    public FacilityAnnex selectFacilityAnnexById(String id)
-    {
-        return facilityAnnexMapper.selectFacilityAnnexById(id);
-    }
-
-    /**
-     * 鏌ヨ璁惧妗f闄勪欢鍒楄〃
-     *
-     * @param facilityAnnex 璁惧妗f闄勪欢
-     * @return 璁惧妗f闄勪欢
-     */
-    @Override
-    public List<FacilityAnnex> selectFacilityAnnexList(FacilityAnnex facilityAnnex)
-    {
-        return facilityAnnexMapper.selectFacilityAnnexList(facilityAnnex);
-    }
-
-    /**
-     * 鏂板璁惧妗f闄勪欢
-     *
-     * @param facilityAnnex 璁惧妗f闄勪欢
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertFacilityAnnex(FacilityAnnex facilityAnnex)
-    {
-        facilityAnnex.setCreateTime(DateUtils.getNowDate());
-        return facilityAnnexMapper.insertFacilityAnnex(facilityAnnex);
-    }
-
-    /**
-     * 淇敼璁惧妗f闄勪欢
-     *
-     * @param facilityAnnex 璁惧妗f闄勪欢
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateFacilityAnnex(FacilityAnnex facilityAnnex)
-    {
-        facilityAnnex.setUpdateTime(DateUtils.getNowDate());
-        return facilityAnnexMapper.updateFacilityAnnex(facilityAnnex);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎璁惧妗f闄勪欢
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑璁惧妗f闄勪欢ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteFacilityAnnexByIds(String[] ids)
-    {
-        return facilityAnnexMapper.deleteFacilityAnnexByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎璁惧妗f闄勪欢淇℃伅
-     *
-     * @param id 璁惧妗f闄勪欢ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteFacilityAnnexById(String id)
-    {
-        return facilityAnnexMapper.deleteFacilityAnnexById(id);
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/service/impl/FacilityArchivesServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/service/impl/FacilityArchivesServiceImpl.java
deleted file mode 100644
index 0bff6a7..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/facility/service/impl/FacilityArchivesServiceImpl.java
+++ /dev/null
@@ -1,285 +0,0 @@
-package com.dingzhuo.energy.basic.data.facility.service.impl;
-
-import java.util.*;
-
-import com.dingzhuo.energy.common.exception.CustomException;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.project.system.domain.SysDictData;
-import com.dingzhuo.energy.project.system.mapper.SysDictDataMapper;
-import com.dingzhuo.energy.project.system.service.impl.SysUserServiceImpl;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.basic.data.facility.mapper.FacilityArchivesMapper;
-import com.dingzhuo.energy.basic.data.facility.domain.FacilityArchives;
-import com.dingzhuo.energy.basic.data.facility.service.IFacilityArchivesService;
-
-/**
- * 璁惧妗fService涓氬姟灞傚鐞�
- *
- * @author zhaowei
- * @date 2020-02-24
- */
-@Service
-public class FacilityArchivesServiceImpl implements IFacilityArchivesService
-{
-    @Autowired
-    private FacilityArchivesMapper facilityArchivesMapper;
-
-    @Autowired
-    private SysDictDataMapper dictDataMapper;
-
-    private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
-
-
-    /**
-     * 鏌ヨ璁惧妗f
-     *
-     * @param id 璁惧妗fID
-     * @return 璁惧妗f
-     */
-    @Override
-    public FacilityArchives selectFacilityArchivesById(String id)
-    {
-        return facilityArchivesMapper.selectFacilityArchivesById(id);
-    }
-
-    /**
-     * 鏌ヨ璁惧妗f鏍规嵁code
-     *
-     * @param facilityArchives 璁惧妗fcode
-     * @return 璁惧妗f
-     */
-    @Override
-    public FacilityArchives selectFacilityArchivesByCode(FacilityArchives facilityArchives)
-    {
-        return facilityArchivesMapper.selectFacilityArchivesByCode(facilityArchives);
-    }
-
-    /**
-     * 鏌ヨ璁惧妗f鍒楄〃
-     *
-     * @param facilityArchives 璁惧妗f
-     * @return 璁惧妗f
-     */
-    @Override
-    public List<FacilityArchives> selectFacilityArchivesList(FacilityArchives facilityArchives)
-    {
-        return facilityArchivesMapper.selectFacilityArchivesList(facilityArchives);
-    }
-
-    /**
-     * 鏌ヨ璁惧妗f鍒楄〃瀵煎嚭鍒楄〃
-     *
-     * @param facilityArchives 璁惧妗f
-     * @return 璁惧妗f
-     */
-    @Override
-    public List<FacilityArchives> excelFacilityArchivesList(FacilityArchives facilityArchives)
-    {
-        return facilityArchivesMapper.excelFacilityArchivesList(facilityArchives);
-    }
-
-    /**
-     * 鏂板璁惧妗f
-     *
-     * @param facilityArchives 璁惧妗f
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertFacilityArchives(FacilityArchives facilityArchives)
-    {
-        facilityArchives.setCreateTime(DateUtils.getNowDate());
-        return facilityArchivesMapper.insertFacilityArchives(facilityArchives);
-    }
-
-    /**
-     * 淇敼璁惧妗f
-     *
-     * @param facilityArchives 璁惧妗f
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateFacilityArchives(FacilityArchives facilityArchives)
-    {
-        facilityArchives.setUpdateTime(DateUtils.getNowDate());
-        return facilityArchivesMapper.updateFacilityArchives(facilityArchives);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎璁惧妗f
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑璁惧妗fID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteFacilityArchivesByIds(String[] ids)
-    {
-        return facilityArchivesMapper.deleteFacilityArchivesByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎璁惧妗f淇℃伅
-     *
-     * @param id 璁惧妗fID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteFacilityArchivesById(String id)
-    {
-        return facilityArchivesMapper.deleteFacilityArchivesById(id);
-    }
-
-
-    /**
-     * 鎵归噺妫�瀹氭仮澶嶈澶囨。妗�
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑璁惧妗fID
-     * @return 缁撴灉
-     */
-    @Override
-    public int resetFacilityArchivesByIds(String[] ids)
-    {
-        return facilityArchivesMapper.resetFacilityArchivesByIds(ids);
-    }
-
-   /* *//**
-     * 妫�瀹氭仮澶嶈澶囨。妗堜俊鎭�
-     *
-     * @param id 璁惧妗fID
-     * @return 缁撴灉
-     *//*
-    @Override
-    public int resetFacilityArchivesById(String[] id)
-    {
-        return facilityArchivesMapper.resetFacilityArchivesById(id);
-    }
-*/
-    /**
-     * Excel瀵煎叆 璁惧妗f缁存姢淇℃伅
-     *
-     * @param facilityArchivesList  瑕佸鍏ョ殑璁惧妗f闆嗗悎
-     * @param loginUser 鐧诲綍鐢ㄦ埛瀵硅薄
-     * @return 缁撴灉
-     */
-    @Override
-    public String excelImpSave(List<FacilityArchives> facilityArchivesList, LoginUser loginUser)
-    {
-
-        if (StringUtils.isNull(facilityArchivesList) || facilityArchivesList.size() == 0)
-        {
-            throw new CustomException("瀵煎叆璁惧妗f涓嶈兘涓虹┖锛�");
-        }
-        int successNum = 0;
-        int failureNum = 0;
-        StringBuilder successMsg = new StringBuilder();
-        StringBuilder failureMsg = new StringBuilder();
-        //1銆佸瓧鍏告暟鎹炕璇�
-        // 璁惧绫诲瀷
-        List<SysDictData> facilityTypeList = dictDataMapper.selectDictDataByType("facility_type");
-        Map<String,String> facilityTypeMap = this.initDictMap(facilityTypeList);
-        // 浣跨敤鍒嗗巶
-        List<SysDictData> facilityBranchList = dictDataMapper.selectDictDataByType(
-                "branch_factory");
-        Map<String,String> facilityBranchMap = this.initDictMap(facilityBranchList);
-        //鑳借�楃瓑绾�
-        List<SysDictData> facilityGradeList = dictDataMapper.selectDictDataByType(
-                "facility_grade");
-        Map<String,String> facilityGradeMap = this.initDictMap(facilityGradeList);
-        for (FacilityArchives facilityArchives : facilityArchivesList)
-        {
-            try
-            {
-
-                //  妫�瀹氬懆鏈熴�佹彁閱掑懆鏈� 瀹氫箟鐨処nteger绫诲瀷锛屽鏋滄暟鎹笉鍖归厤浼氶粯璁や负0
-                facilityArchives.setCheckCycle(facilityArchives.getCheckCycle()==null?1:facilityArchives.getCheckCycle());
-                facilityArchives.setReminderCycle(facilityArchives.getReminderCycle()==null?1:facilityArchives.getReminderCycle());
-                // 2楠岃瘉 缂栫爜鏄惁瀛樺湪
-                FacilityArchives chekcFacilityImplement = facilityArchivesMapper.selectFacilityArchivesByCode(facilityArchives);
-                if (StringUtils.isNull(chekcFacilityImplement))
-                {
-                    //璁剧疆涓婚敭
-                    facilityArchives.setId(UUID.randomUUID().toString());
-                    //缈昏瘧 璁惧绫诲瀷 鏃犳垨鑰呭�间笉瀵瑰垯璁剧疆涓虹┖瀛楃涓�
-                    String facilityType= StringUtils.nvl(facilityTypeMap.get(facilityArchives.getFacilityType()+""),"");
-                    //鍒ゆ柇鐘舵�佹槸鍚︽纭�
-                    if(StringUtils.isEmpty(facilityType))
-                    {
-                        failureNum++;
-                        failureMsg.append("<br/>" + failureNum + "銆佺紪鍙� " + facilityArchives.getCode() + " 鐨勮澶囩被鍨嬮敊璇�");
-                        continue;
-                    }
-                    facilityArchives.setFacilityType(facilityType+"");
-                    //缈昏瘧 浣跨敤鍒嗗巶  鏃犳垨鑰呭�间笉瀵瑰垯璁剧疆涓虹┖瀛楃涓�
-                    String branchFactory= StringUtils.nvl(facilityBranchMap.get(facilityArchives.getBranchFactory()+""),"");
-                    if(StringUtils.isEmpty(branchFactory))
-                    {
-                        failureNum++;
-                        failureMsg.append("<br/>" + failureNum + "銆佺紪鍙� " + facilityArchives.getCode() + " 鐨勪娇鐢ㄥ垎鍘傞敊璇�");
-                        continue;
-                    }
-                    facilityArchives.setBranchFactory(branchFactory);
-
-                    //缈昏瘧 鑳借�楃瓑绾�  鏃犳垨鑰呭�间笉瀵瑰垯璁剧疆涓虹┖瀛楃涓�
-                    String facilityGrade= StringUtils.nvl(facilityGradeMap.get(facilityArchives.getFacilityGrade()+""),"");
-                    if(StringUtils.isEmpty(facilityGrade))
-                    {
-                        failureNum++;
-                        failureMsg.append("<br/>" + failureNum + "銆佺紪鍙� " + facilityArchives.getCode() + " 鐨勮兘鑰楃瓑绾ч敊璇�");
-                        continue;
-                    }
-                    facilityArchives.setFacilityGrade(facilityGrade);
-
-                    //璁剧疆寤虹珛浜哄拰寤虹珛鏃堕棿
-                    facilityArchives.setCreateBy(loginUser.getUsername());
-                    facilityArchives.setCreateTime(new Date());
-                    //瀛樺偍涓�鏉℃暟鎹�
-                    this.insertFacilityArchives(facilityArchives);
-                    successNum++;
-                    successMsg.append("<br/>" + successNum + "銆佺紪鍙� " + facilityArchives.getCode() + " 瀵煎叆鎴愬姛");
-                }
-                else
-                {
-                    failureNum++;
-                    failureMsg.append("<br/>" + failureNum + "銆佺紪鍙� " + facilityArchives.getCode() + " 宸插瓨鍦�");
-                }
-            }
-            catch (Exception e)
-            {
-                failureNum++;
-                String msg = "<br/>" + failureNum + "銆佺紪鍙� " + facilityArchives.getCode() + " 瀵煎叆澶辫触锛�";
-                failureMsg.append(msg + e.getMessage());
-                log.error(msg, e);
-            }
-        }
-        if (failureNum > 0)
-        {
-            failureMsg.insert(0, "寰堟姳姝夛紝瀵煎叆澶辫触锛佸叡 " + failureNum + " 鏉℃暟鎹牸寮忎笉姝g‘锛岄敊璇涓嬶細");
-            throw new CustomException(failureMsg.toString());
-        }
-        else
-        {
-            successMsg.insert(0, "鎭枩鎮紝鏁版嵁宸插叏閮ㄥ鍏ユ垚鍔燂紒鍏� " + successNum + " 鏉★紝鏁版嵁濡備笅锛�");
-        }
-        return successMsg.toString();
-    }
-
-    /**
-     * 灏嗗瓧鍏哥被鍨� 瀵瑰簲鐨� 瀛楀吀闆嗗悎  瀛樺叆map涓娇鐢�
-     * @param sysDictDataList
-     * @return
-     */
-    public Map initDictMap(List<SysDictData> sysDictDataList)
-    {
-        Map<String,String> map = new HashMap<String,String>();
-        for(SysDictData sysDictData : sysDictDataList)
-        {
-            //瀛樻斁 key=鏍囩鍚嶅瓧  value鏄� 璁剧疆鍊�
-            map.put(sysDictData.getDictLabel(),sysDictData.getDictValue());
-        }
-        return map;
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/controller/MeterAnnexController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/controller/MeterAnnexController.java
deleted file mode 100644
index 4e61ede..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/controller/MeterAnnexController.java
+++ /dev/null
@@ -1,190 +0,0 @@
-package com.dingzhuo.energy.basic.data.meter.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.IdUtils;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.common.utils.file.FileUploadUtils;
-import com.dingzhuo.energy.common.utils.file.FileUtils;
-import com.dingzhuo.energy.common.utils.text.Convert;
-import com.dingzhuo.energy.framework.config.RuoYiConfig;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.project.common.CommonController;
-import org.apache.commons.io.IOUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.basic.data.meter.domain.MeterAnnex;
-import com.dingzhuo.energy.basic.data.meter.service.IMeterAnnexService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * 璁¢噺鍣ㄥ叿妗f闄勪欢Controller
- * 
- * @author zhaowei
- * @date 2020-02-14
- */
-@RestController
-@RequestMapping("/meter/annex")
-public class MeterAnnexController extends BaseController
-{
-    @Autowired
-    private IMeterAnnexService meterAnnexService;
-    @Autowired
-    private TokenService tokenService;
-
-    private static final Logger log = LoggerFactory.getLogger(MeterAnnexController.class);
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿妗f闄勪欢鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('meter:annex:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(MeterAnnex meterAnnex)
-    {
-        startPage();
-        List<MeterAnnex> list = meterAnnexService.selectMeterAnnexList(meterAnnex);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭璁¢噺鍣ㄥ叿妗f闄勪欢鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('meter:annex:export')")
-    @Log(title = "璁¢噺鍣ㄥ叿妗f闄勪欢", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(MeterAnnex meterAnnex)
-    {
-        List<MeterAnnex> list = meterAnnexService.selectMeterAnnexList(meterAnnex);
-        ExcelUtil<MeterAnnex> util = new ExcelUtil<MeterAnnex>(MeterAnnex.class);
-        return util.exportExcel(list, "annex");
-    }
-
-    /**
-     * 鑾峰彇璁¢噺鍣ㄥ叿妗f闄勪欢璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('meter:annex:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(meterAnnexService.selectMeterAnnexById(id));
-    }
-
-    /**
-     * 鏂板璁¢噺鍣ㄥ叿妗f闄勪欢
-     */
-    @PreAuthorize("@ss.hasPermi('meter:annex:add')")
-    @Log(title = "璁¢噺鍣ㄥ叿妗f闄勪欢", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody MeterAnnex meterAnnex)
-    {
-        return toAjax(meterAnnexService.insertMeterAnnex(meterAnnex));
-    }
-
-    /**
-     * 淇敼璁¢噺鍣ㄥ叿妗f闄勪欢
-     */
-    @PreAuthorize("@ss.hasPermi('meter:annex:edit')")
-    @Log(title = "璁¢噺鍣ㄥ叿妗f闄勪欢", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody MeterAnnex meterAnnex)
-    {
-        return toAjax(meterAnnexService.updateMeterAnnex(meterAnnex));
-    }
-
-    /**
-     * 鍒犻櫎璁¢噺鍣ㄥ叿妗f闄勪欢
-     */
-    @PreAuthorize("@ss.hasPermi('meter:annex:remove')")
-    @Log(title = "璁¢噺鍣ㄥ叿妗f闄勪欢", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(meterAnnexService.deleteMeterAnnexByIds(ids));
-    }
-
-    /**
-     * 閫氱敤鎸囧畾鏂囦欢涓嬭浇璇锋眰
-     *
-     * @param showFileName 涓嬭浇灞曠ず鏂囦欢鍚嶇О
-//     * @param filePath 涓嬭浇鏂囦欢缁濆璺緞 甯� 鏂囦欢鐪熷疄鍚嶅瓧鍙婅矾寰�
-     * @param delete 鏄惁鍒犻櫎/
-     */
-    @PreAuthorize("@ss.hasPermi('meter:annex:assignDownload')")
-    @PostMapping("/assignDownload")
-    public void fileAssignDownload(String showFileName, String filePath,Boolean delete, HttpServletResponse response, HttpServletRequest request)
-    {
-        try
-        {
-            response.setCharacterEncoding("utf-8");
-            response.setContentType("multipart/form-data");
-            response.setHeader("Content-Disposition",
-                    "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, showFileName));
-            FileUtils.writeBytes(filePath, response.getOutputStream());
-//            if (delete)
-//            {
-//                FileUtils.deleteFile(filePath);
-//            }
-            log.error("涓嬭浇鎴愬姛", "aa");
-        }
-        catch (Exception e)
-        {
-            log.error("涓嬭浇鏂囦欢澶辫触", e);
-        }
-    }
-    @Log(title = "璁¢噺鍣ㄥ叿妗f闄勪欢涓婁紶", businessType = BusinessType.IMPORT)
-    @PreAuthorize("@ss.hasPermi('meter:annex:fileImport')")
-    @PostMapping("/fileImport")
-    public AjaxResult importData(MultipartFile file, String implementId) throws Exception
-    {
-        if (!file.isEmpty())
-        {
-            LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-            //鑾峰彇閰嶇疆鐨勬枃浠朵笂浼犺矾寰�
-            String uploadPathDir = RuoYiConfig.getUploadPath();
-            //鑾峰彇鏂囦欢鍘熷鍚嶇О
-            String fileName = file.getOriginalFilename();
-            //鑾峰彇鏂囦欢鎵╁睍鍚�
-            String fileSuffix = FileUploadUtils.getExtension(file);
-//            System.out.println("implementId==="+implementId);
-//            System.out.println("filedir==="+uploadPathDir);
-//            System.out.println("fileName==="+fileName);
-//            System.out.println("fileSuffix==="+fileSuffix);
-            //鏂囦欢鏈�缁堜繚瀛樼殑缁濆璺緞
-            String filePath = FileUploadUtils.uploadAll(uploadPathDir, file);
-//            System.out.println("涓婁紶鏂囦欢鍦板潃:===>"+filePath);
-            MeterAnnex meterAnnex = new MeterAnnex();
-            //璁剧疆涓婚敭UUID
-            meterAnnex.setId(IdUtils.simpleUUID());
-            meterAnnex.setFileName(fileName);
-            meterAnnex.setFilePath(filePath);
-            meterAnnex.setFileSuffix(fileSuffix);
-            meterAnnex.setImplementId(implementId);
-            meterAnnex.setCreateBy(loginUser.getUsername());
-            if (this.meterAnnexService.insertMeterAnnex(meterAnnex)>0)
-            {
-                return AjaxResult.success("闄勪欢涓婁紶瀹屾垚");
-            }
-        }
-        return AjaxResult.success("闄勪欢涓婁紶澶辫触");
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/controller/MeterImplementController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/controller/MeterImplementController.java
deleted file mode 100644
index af01dc7..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/controller/MeterImplementController.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package com.dingzhuo.energy.basic.data.meter.controller;
-
-import java.util.List;
-import java.util.UUID;
-
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplementExcel;
-import com.dingzhuo.energy.project.system.domain.SysDictData;
-import com.dingzhuo.energy.project.system.domain.SysUser;
-import com.dingzhuo.energy.project.system.service.ISysDictDataService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplement;
-import com.dingzhuo.energy.basic.data.meter.service.IMeterImplementService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.web.multipart.MultipartFile;
-
-/**
- * 璁¢噺鍣ㄥ叿妗f缁存姢Controller
- *
- * @author zhaowei
- * @date 2020-02-12
- */
-@RestController
-@RequestMapping("/meter/implement")
-@Api(value = "璁¢噺鍣ㄥ叿绠$悊",tags = {"璁¢噺鍣ㄥ叿绠$悊"})
-public class MeterImplementController extends BaseController
-{
-    @Autowired
-    private IMeterImplementService meterImplementService;
-
-    @Autowired
-    private TokenService tokenService;
-
-
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('meter:implement:list')")
-    @GetMapping("/list")
-    @ApiOperation(value = "璁¢噺鍣ㄥ叿鍒楄〃")
-    public TableDataInfo list(MeterImplement meterImplement)
-    {
-        startPage();
-        List<MeterImplement> list = meterImplementService.selectMeterImplementList(meterImplement);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('meter:implement:export')")
-    @Log(title = "璁¢噺鍣ㄥ叿妗f缁存姢", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    @ApiOperation(value = "璁¢噺鍣ㄥ叿鍒楄〃瀵煎嚭")
-    public AjaxResult export(MeterImplement meterImplement)
-    {
-//        List<MeterImplement> list = meterImplementService.selectMeterImplementList(meterImplement);
-        //浣跨敤涓撶敤鐨勫鍑鸿皟鐢ㄦ柟娉曪紝杩欓噷闈㈠皢 鏁版嵁杩涜杞寲锛� 鐘舵�併�佺绫� 杞崲鎴� 涓枃锛岀敤鍑芥暟瀹炵幇   閫氳繃鏁版嵁瀛楀吀杞崲
-        //MeterImplementExcel  瀵煎嚭 Excel涓撶敤瀵硅薄
-        List<MeterImplementExcel> list = meterImplementService.exectMeterImplementList(meterImplement);
-        ExcelUtil<MeterImplementExcel> util = new ExcelUtil<MeterImplementExcel>(MeterImplementExcel.class);
-        return util.exportExcel(list, "implement");
-    }
-
-    /**
-     * 鑾峰彇璁¢噺鍣ㄥ叿妗f缁存姢璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('meter:implement:query')")
-    @GetMapping(value = "/{id}")
-    @ApiOperation(value = "鏍规嵁id鑾峰彇璁¢噺鍣ㄥ叿鐩镐俊淇℃伅")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(meterImplementService.selectMeterImplementById(id));
-    }
-
-    /**
-     * 鏂板璁¢噺鍣ㄥ叿妗f缁存姢
-     */
-    @PreAuthorize("@ss.hasPermi('meter:implement:add')")
-    @Log(title = "璁¢噺鍣ㄥ叿妗f缁存姢", businessType = BusinessType.INSERT)
-    @PostMapping
-    @ApiOperation(value = "鏂板璁¢噺鍣ㄥ叿")
-    public AjaxResult add(@RequestBody MeterImplement meterImplement)
-    {
-        MeterImplement check = meterImplementService.selectMeterImplementByCode(meterImplement);
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        //缂栧彿鍞竴鎬ф娴�
-        if(check!=null && check.getCode()!=null && check.getCode().length()>0)
-        {
-           return  AjaxResult.error(check.getCode()+"缂栫爜宸插瓨鍦�!");
-        }else
-        {
-            meterImplement.setId(UUID.randomUUID().toString());
-            meterImplement.setCreateBy(loginUser.getUsername());
-           return toAjax(meterImplementService.insertMeterImplement(meterImplement));
-        }
-    }
-
-    /**
-     * 淇敼璁¢噺鍣ㄥ叿妗f缁存姢
-     */
-    @PreAuthorize("@ss.hasPermi('meter:implement:edit')")
-    @Log(title = "璁¢噺鍣ㄥ叿妗f缁存姢", businessType = BusinessType.UPDATE)
-    @PutMapping
-    @ApiOperation(value = "缂栬緫璁¢噺鍣ㄥ叿")
-    public AjaxResult edit(@RequestBody MeterImplement meterImplement)
-    {
-        //鏇存柊鏃剁殑缂栫爜 鍞竴绾︽潫 瑕佸垽鏂� id涓嶇瓑浜庤嚜宸憋紝涓� code瀛樺湪閲嶅鐨勶紝瑕佸厛鍘绘帀鑷繁锛屽惁鍒� 鑷繁鐨勪慨鏀逛篃鎶ラ敊
-        MeterImplement check = meterImplementService.selectMeterImplementByCode(meterImplement);
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        //缂栧彿鍞竴鎬ф娴�
-        if(check!=null && check.getCode()!=null && check.getCode().length()>0)
-        {
-            return  AjaxResult.error(check.getCode()+"缂栫爜宸插瓨鍦�!");
-        }else
-        {
-            meterImplement.setUpdateBy(loginUser.getUsername());
-            return  toAjax(meterImplementService.updateMeterImplement(meterImplement));
-        }
-    }
-
-    /**
-     * 鍒犻櫎璁¢噺鍣ㄥ叿妗f缁存姢
-     */
-    @PreAuthorize("@ss.hasPermi('meter:implement:remove')")
-    @Log(title = "璁¢噺鍣ㄥ叿妗f缁存姢", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    @ApiOperation(value = "鍒犻櫎璁¢噺鍣ㄥ叿")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(meterImplementService.deleteMeterImplementByIds(ids));
-    }
-
-    @Log(title = "璁¢噺鍣ㄥ叿妗f缁存姢", businessType = BusinessType.IMPORT)
-    @PreAuthorize("@ss.hasPermi('meter:implement:import')")
-    @PostMapping("/importData")
-    @ApiOperation(value = "璁¢噺鍣ㄥ叿瀵煎叆")
-    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
-    {
-        ExcelUtil<MeterImplement> util = new ExcelUtil<MeterImplement>(MeterImplement.class);
-        List<MeterImplement> meterList = util.importExcel(file.getInputStream());
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        String message = meterImplementService.excelImpSave(meterList,loginUser);
-        return AjaxResult.success(message);
-    }
-
-    @GetMapping("/importTemplate")
-    @ApiOperation(value = "璁¢噺鍣ㄥ叿瀵煎嚭妯℃澘")
-    public AjaxResult importTemplate()
-    {
-        ExcelUtil<MeterImplementExcel> util = new ExcelUtil<MeterImplementExcel>(MeterImplementExcel.class);
-        return util.importTemplateExcel("璁¢噺鍣ㄥ叿妗f鏁版嵁");
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/controller/MeterImplementCountController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/controller/MeterImplementCountController.java
deleted file mode 100644
index 3b5f3a5..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/controller/MeterImplementCountController.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.dingzhuo.energy.basic.data.meter.controller;
-
-import java.util.List;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplementCount;
-import com.dingzhuo.energy.basic.data.meter.service.IMeterImplementCountService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * 璁¢噺鍣ㄥ叿缁熻鏌ヨController
- * 
- * @author zhaowei
- * @date 2020-02-21
- */
-@RestController
-@RequestMapping("/meter/implementCount")
-public class MeterImplementCountController extends BaseController
-{
-    @Autowired
-    private IMeterImplementCountService meterImplementCountService;
-
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿缁熻鏌ヨ鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('meter:implementCount:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(MeterImplementCount meterImplementCount)
-    {
-        startPage();
-        List<MeterImplementCount> list = meterImplementCountService.selectMeterImplementCountList(meterImplementCount);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭璁¢噺鍣ㄥ叿缁熻鏌ヨ鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('meter:implementCount:export')")
-    @Log(title = "璁¢噺鍣ㄥ叿缁熻鏌ヨ", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(MeterImplementCount meterImplementCount)
-    {
-        List<MeterImplementCount> list = meterImplementCountService.selectMeterImplementCountList(meterImplementCount);
-        ExcelUtil<MeterImplementCount> util = new ExcelUtil<MeterImplementCount>(MeterImplementCount.class);
-        return util.exportExcel(list, "implementCount");
-    }
-
-    /**
-     * 鑾峰彇璁¢噺鍣ㄥ叿缁熻鏌ヨ璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('meter:implementCount:query')")
-    @GetMapping(value = "/{code}")
-    public AjaxResult getInfo(@PathVariable("code") String code)
-    {
-        return AjaxResult.success(meterImplementCountService.selectMeterImplementCountById(code));
-    }
-
-    /**
-     * 鏂板璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     */
-    @PreAuthorize("@ss.hasPermi('meter:implementCount:add')")
-    @Log(title = "璁¢噺鍣ㄥ叿缁熻鏌ヨ", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody MeterImplementCount meterImplementCount)
-    {
-        return toAjax(meterImplementCountService.insertMeterImplementCount(meterImplementCount));
-    }
-
-    /**
-     * 淇敼璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     */
-    @PreAuthorize("@ss.hasPermi('meter:implementCount:edit')")
-    @Log(title = "璁¢噺鍣ㄥ叿缁熻鏌ヨ", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody MeterImplementCount meterImplementCount)
-    {
-        return toAjax(meterImplementCountService.updateMeterImplementCount(meterImplementCount));
-    }
-
-    /**
-     * 鍒犻櫎璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     */
-    @PreAuthorize("@ss.hasPermi('meter:implementCount:remove')")
-    @Log(title = "璁¢噺鍣ㄥ叿缁熻鏌ヨ", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{codes}")
-    public AjaxResult remove(@PathVariable String[] codes)
-    {
-        return toAjax(meterImplementCountService.deleteMeterImplementCountByIds(codes));
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/domain/MeterAnnex.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/domain/MeterAnnex.java
deleted file mode 100644
index 639a849..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/domain/MeterAnnex.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package com.dingzhuo.energy.basic.data.meter.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 璁¢噺鍣ㄥ叿妗f闄勪欢瀵硅薄 meter_annex
- * 
- * @author zhaowei
- * @date 2020-02-14
- */
-public class MeterAnnex extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 涓婚敭 */
-    private String id;
-
-    /** 鍏宠仈meter_implement.id */
-    private String implementId;
-
-    /** 鏂囦欢鍚� */
-    @Excel(name = "鏂囦欢鍚�")
-    private String fileName;
-
-    /** 鏂囦欢鍚庣紑 */
-    private String fileSuffix;
-
-    /** 鏂囦欢璺緞 */
-    private String filePath;
-
-    /** 鍒犻櫎鏍囧織Y 鍒犻櫎  N鏈垹闄� */
-    private String delFlage;
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setImplementId(String implementId) 
-    {
-        this.implementId = implementId;
-    }
-
-    public String getImplementId() 
-    {
-        return implementId;
-    }
-    public void setFileName(String fileName) 
-    {
-        this.fileName = fileName;
-    }
-
-    public String getFileName() 
-    {
-        return fileName;
-    }
-    public void setFileSuffix(String fileSuffix) 
-    {
-        this.fileSuffix = fileSuffix;
-    }
-
-    public String getFileSuffix() 
-    {
-        return fileSuffix;
-    }
-    public void setFilePath(String filePath) 
-    {
-        this.filePath = filePath;
-    }
-
-    public String getFilePath() 
-    {
-        return filePath;
-    }
-    public void setDelFlage(String delFlage) 
-    {
-        this.delFlage = delFlage;
-    }
-
-    public String getDelFlage() 
-    {
-        return delFlage;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("implementId", getImplementId())
-            .append("fileName", getFileName())
-            .append("fileSuffix", getFileSuffix())
-            .append("filePath", getFilePath())
-            .append("delFlage", getDelFlage())
-            .append("createTime", getCreateTime())
-            .append("createBy", getCreateBy())
-            .append("updateTime", getUpdateTime())
-            .append("updateBy", getUpdateBy())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/domain/MeterImplement.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/domain/MeterImplement.java
deleted file mode 100644
index 6478a6a..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/domain/MeterImplement.java
+++ /dev/null
@@ -1,266 +0,0 @@
-package com.dingzhuo.energy.basic.data.meter.domain;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * 璁¢噺鍣ㄥ叿妗f缁存姢瀵硅薄 meter_implement
- *
- * @author zhaowei
- * @date 2020-02-12
- */
-@ApiModel(value = "璁¢噺鍣ㄥ叿")
-public class MeterImplement extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 涓婚敭 */
-    @ApiModelProperty(value = "涓婚敭")
-    private String id;
-
-    /** 缂栫爜 */
-    @Excel(name = "缂栫爜")
-    @ApiModelProperty(value = "缂栫爜")
-    private String code;
-
-    /** 鍣ㄥ叿鍚嶇О */
-    @Excel(name = "鍣ㄥ叿鍚嶇О")
-    @ApiModelProperty(value = "鍣ㄥ叿鍚嶇О")
-    private String meterName;
-
-    /** 绉嶇被 */
-    @Excel(name = "绉嶇被")
-    @ApiModelProperty(value = "绉嶇被")
-    private String meterType;
-
-    /** 瑙勬牸鍨嬪彿 */
-    @Excel(name = "瑙勬牸鍨嬪彿")
-    @ApiModelProperty(value = "瑙勬牸鍨嬪彿")
-    private String modelNumber;
-
-    /** 娴嬮噺鑼冨洿 */
-    @Excel(name = "娴嬮噺鑼冨洿")
-    @ApiModelProperty(value = "娴嬮噺鑼冨洿")
-    private String measureRange;
-
-    /** 鐢熶骇鍘傚晢 */
-    @Excel(name = "鐢熶骇鍘傚晢")
-    @ApiModelProperty(value = "鐢熶骇鍘傚晢")
-    private String manufacturer;
-
-    /** 璐熻矗浜� */
-    @Excel(name = "璐熻矗浜�")
-    @ApiModelProperty(value = "")
-    private String personCharge;
-
-    /** 瀹夎浣嶇疆 */
-    @Excel(name = "瀹夎浣嶇疆")
-    @ApiModelProperty(value = "瀹夎浣嶇疆")
-    private String installactionLocation;
-
-    /** 璧峰鏃堕棿 */
-    @Excel(name = "璧峰鏃堕棿")
-    @ApiModelProperty(value = "璧峰鏃堕棿")
-    private Date startTime;
-
-    /** 鎶曡繍鏃堕棿 */
-    @Excel(name = "鎶曡繍鏃堕棿")
-    @ApiModelProperty(value = "鎶曡繍鏃堕棿")
-    private Date putrunTime;
-
-    /** 妫�瀹氬懆鏈� */
-    @Excel(name = "妫�瀹氬懆鏈�")
-    @ApiModelProperty(value = "妫�瀹氬懆鏈�")
-    private Integer checkCycle;
-
-    /** 鎻愰啋鍛ㄦ湡 */
-    @Excel(name = "鎻愰啋鍛ㄦ湡")
-    @ApiModelProperty(value = "鎻愰啋鍛ㄦ湡")
-    private Integer reminderCycle;
-
-    /** 鐘舵�� */
-    @Excel(name = "鐘舵��")
-    @ApiModelProperty(value = "鐘舵��")
-    private String meterStatus;
-
-    /** 閫昏緫鍒犻櫎鏍囧織,Y宸插垹闄�,N鏈垹闄� */
-    @ApiModelProperty(value = "閫昏緫鍒犻櫎鏍囧織,Y宸插垹闄�,N鏈垹闄�")
-    private String delFlage;
-    /** 妫�瀹氭彁閱掓爣蹇�  true 鎻愰啋 false涓嶉渶瑕佹彁閱� */
-    @ApiModelProperty(value = "妫�瀹氭彁閱掓爣蹇�  true 鎻愰啋 false涓嶉渶瑕佹彁閱�")
-    private boolean txflage;
-
-    public void setTxflage(boolean txflage)
-    {
-        this.txflage = txflage;
-    }
-    public boolean getTxflage()
-    {
-        return this.txflage;
-    }
-    public void setId(String id)
-    {
-        this.id = id;
-    }
-
-    public String getId()
-    {
-        return id;
-    }
-    public void setCode(String code)
-    {
-        this.code = code;
-    }
-
-    public String getCode()
-    {
-        return code;
-    }
-    public void setMeterName(String meterName)
-    {
-        this.meterName = meterName;
-    }
-
-    public String getMeterName()
-    {
-        return meterName;
-    }
-    public void setMeterType(String meterType)
-    {
-        this.meterType = meterType;
-    }
-
-    public String getMeterType()
-    {
-        return meterType;
-    }
-    public void setModelNumber(String modelNumber)
-    {
-        this.modelNumber = modelNumber;
-    }
-
-    public String getModelNumber()
-    {
-        return modelNumber;
-    }
-    public void setMeasureRange(String measureRange)
-    {
-        this.measureRange = measureRange;
-    }
-
-    public String getMeasureRange()
-    {
-        return measureRange;
-    }
-    public void setManufacturer(String manufacturer)
-    {
-        this.manufacturer = manufacturer;
-    }
-
-    public String getManufacturer()
-    {
-        return manufacturer;
-    }
-    public void setPersonCharge(String personCharge)
-    {
-        this.personCharge = personCharge;
-    }
-
-    public String getPersonCharge()
-    {
-        return personCharge;
-    }
-    public void setInstallactionLocation(String installactionLocation)
-    {
-        this.installactionLocation = installactionLocation;
-    }
-
-    public String getInstallactionLocation()
-    {
-        return installactionLocation;
-    }
-    public void setStartTime(Date startTime)
-    {
-        this.startTime = startTime;
-    }
-
-    public Date getStartTime()
-    {
-        return startTime;
-    }
-    public void setCheckCycle(Integer checkCycle)
-    {
-        this.checkCycle = checkCycle;
-    }
-
-    public Integer getCheckCycle()
-    {
-        return checkCycle;
-    }
-    public void setReminderCycle(Integer reminderCycle)
-    {
-        this.reminderCycle = reminderCycle;
-    }
-
-    public Integer getReminderCycle()
-    {
-        return reminderCycle;
-    }
-    public void setMeterStatus(String meterStatus)
-    {
-        this.meterStatus = meterStatus;
-    }
-
-    public String getMeterStatus()
-    {
-        return meterStatus;
-    }
-    public void setDelFlage(String delFlage)
-    {
-        this.delFlage = delFlage;
-    }
-
-    public String getDelFlage()
-    {
-        return delFlage;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("code", getCode())
-            .append("meterName", getMeterName())
-            .append("meterType", getMeterType())
-            .append("modelNumber", getModelNumber())
-            .append("measureRange", getMeasureRange())
-            .append("manufacturer", getManufacturer())
-            .append("personCharge", getPersonCharge())
-            .append("installactionLocation", getInstallactionLocation())
-            .append("startTime", getStartTime())
-            .append("checkCycle", getCheckCycle())
-            .append("reminderCycle", getReminderCycle())
-            .append("meterStatus", getMeterStatus())
-            .append("delFlage", getDelFlage())
-            .append("remark", getRemark())
-            .append("createTime", getCreateTime())
-            .append("createBy", getCreateBy())
-            .append("updateTime", getUpdateTime())
-            .append("updateBy", getUpdateBy())
-            .append("txflage", getTxflage())
-            .toString();
-    }
-
-    public Date getPutrunTime() {
-        return putrunTime;
-    }
-
-    public void setPutrunTime(Date putrunTime) {
-        this.putrunTime = putrunTime;
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/domain/MeterImplementCount.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/domain/MeterImplementCount.java
deleted file mode 100644
index 8d807ce..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/domain/MeterImplementCount.java
+++ /dev/null
@@ -1,244 +0,0 @@
-package com.dingzhuo.energy.basic.data.meter.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * 璁¢噺鍣ㄥ叿缁熻鏌ヨ瀵硅薄 meter_implement
- * 
- * @author zhaowei
- * @date 2020-02-21
- */
-public class MeterImplementCount extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 缂栫爜 */
-    @Excel(name = "缂栫爜")
-    private String code;
-
-    /** 鍣ㄥ叿鍚嶇О */
-    @Excel(name = "鍣ㄥ叿鍚嶇О")
-    private String meterName;
-
-    /** 绉嶇被 */
-    @Excel(name = "绉嶇被")
-    private String meterType;
-
-    /** 瑙勬牸鍨嬪彿 */
-    @Excel(name = "瑙勬牸鍨嬪彿")
-    private String modelNumber;
-
-    /** 娴嬮噺鑼冨洿 */
-    @Excel(name = "娴嬮噺鑼冨洿")
-    private String measureRange;
-
-    /** 涓婚敭 */
-    private String id;
-
-    /** 鐢熶骇鍘傚晢 */
-    @Excel(name = "鐢熶骇鍘傚晢")
-    private String manufacturer;
-
-    /** 璐熻矗浜� */
-    private String personCharge;
-
-    /** 瀹夎浣嶇疆 */
-    @Excel(name = "瀹夎浣嶇疆")
-    private String installactionLocation;
-
-    /** 璧峰鏃堕棿 */
-    private Date startTime;
-
-    /** 鎶曡繍鏃堕棿 */
-    @Excel(name = "鎶曡繍鏃堕棿")
-    private Date putrunTime;
-
-
-    /** 妫�瀹氬懆鏈� */
-    private Integer checkCycle;
-
-    /** 鎻愰啋鍛ㄦ湡 */
-    private Integer reminderCycle;
-
-    /** 鐘舵�� */
-    @Excel(name = "鐘舵��")
-    private String meterStatus;
-
-    /** 閫昏緫鍒犻櫎鏍囧織,Y宸插垹闄�,N鏈垹闄� */
-    private String delFlage;
-
-    private boolean txflage;
-
-    public void setTxflage(boolean txflage)
-    {
-        this.txflage = txflage;
-    }
-    public boolean getTxflage()
-    {
-        return this.txflage;
-    }
-
-    public void setCode(String code) 
-    {
-        this.code = code;
-    }
-
-    public String getCode() 
-    {
-        return code;
-    }
-    public void setMeterName(String meterName) 
-    {
-        this.meterName = meterName;
-    }
-
-    public String getMeterName() 
-    {
-        return meterName;
-    }
-    public void setMeterType(String meterType) 
-    {
-        this.meterType = meterType;
-    }
-
-    public String getMeterType() 
-    {
-        return meterType;
-    }
-    public void setModelNumber(String modelNumber) 
-    {
-        this.modelNumber = modelNumber;
-    }
-
-    public String getModelNumber() 
-    {
-        return modelNumber;
-    }
-    public void setMeasureRange(String measureRange) 
-    {
-        this.measureRange = measureRange;
-    }
-
-    public String getMeasureRange() 
-    {
-        return measureRange;
-    }
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setManufacturer(String manufacturer) 
-    {
-        this.manufacturer = manufacturer;
-    }
-
-    public String getManufacturer() 
-    {
-        return manufacturer;
-    }
-    public void setPersonCharge(String personCharge) 
-    {
-        this.personCharge = personCharge;
-    }
-
-    public String getPersonCharge() 
-    {
-        return personCharge;
-    }
-    public void setInstallactionLocation(String installactionLocation) 
-    {
-        this.installactionLocation = installactionLocation;
-    }
-
-    public String getInstallactionLocation() 
-    {
-        return installactionLocation;
-    }
-    public void setStartTime(Date startTime) 
-    {
-        this.startTime = startTime;
-    }
-
-    public Date getStartTime() 
-    {
-        return startTime;
-    }
-    public void setCheckCycle(Integer checkCycle) 
-    {
-        this.checkCycle = checkCycle;
-    }
-
-    public Integer getCheckCycle() 
-    {
-        return checkCycle;
-    }
-    public void setReminderCycle(Integer reminderCycle) 
-    {
-        this.reminderCycle = reminderCycle;
-    }
-
-    public Integer getReminderCycle() 
-    {
-        return reminderCycle;
-    }
-    public void setMeterStatus(String meterStatus) 
-    {
-        this.meterStatus = meterStatus;
-    }
-
-    public String getMeterStatus() 
-    {
-        return meterStatus;
-    }
-    public void setDelFlage(String delFlage) 
-    {
-        this.delFlage = delFlage;
-    }
-
-    public String getDelFlage() 
-    {
-        return delFlage;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("code", getCode())
-            .append("meterName", getMeterName())
-            .append("meterType", getMeterType())
-            .append("modelNumber", getModelNumber())
-            .append("measureRange", getMeasureRange())
-            .append("id", getId())
-            .append("manufacturer", getManufacturer())
-            .append("personCharge", getPersonCharge())
-            .append("installactionLocation", getInstallactionLocation())
-            .append("startTime", getStartTime())
-            .append("checkCycle", getCheckCycle())
-            .append("reminderCycle", getReminderCycle())
-            .append("meterStatus", getMeterStatus())
-            .append("delFlage", getDelFlage())
-            .append("remark", getRemark())
-            .append("createTime", getCreateTime())
-            .append("createBy", getCreateBy())
-            .append("updateTime", getUpdateTime())
-            .append("updateBy", getUpdateBy())
-                .append("txflage", getTxflage())
-            .toString();
-    }
-    public Date getPutrunTime() {
-        return putrunTime;
-    }
-
-    public void setPutrunTime(Date putrunTime) {
-        this.putrunTime = putrunTime;
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/domain/MeterImplementExcel.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/domain/MeterImplementExcel.java
deleted file mode 100644
index 3931cfa..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/domain/MeterImplementExcel.java
+++ /dev/null
@@ -1,223 +0,0 @@
-package com.dingzhuo.energy.basic.data.meter.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-
-/**
- * 璁¢噺鍣ㄥ叿妗f缁存姢 瀵煎嚭 Excel涓撶敤瀵硅薄 meter_implement
- * 
- * @author zhaowei
- * @date 2020-02-12
- */
-public class MeterImplementExcel extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 涓婚敭 */
-    private String id;
-
-    /** 缂栫爜 */
-    @Excel(name = "缂栫爜")
-    private String code;
-
-    /** 鍣ㄥ叿鍚嶇О */
-    @Excel(name = "鍣ㄥ叿鍚嶇О")
-    private String meterName;
-
-    /** 绉嶇被 */
-    @Excel(name = "绉嶇被")
-    private String meterType;
-
-    /** 瑙勬牸鍨嬪彿 */
-    @Excel(name = "瑙勬牸鍨嬪彿")
-    private String modelNumber;
-
-    /** 娴嬮噺鑼冨洿 */
-    @Excel(name = "娴嬮噺鑼冨洿")
-    private String measureRange;
-
-    /** 鐢熶骇鍘傚晢 */
-    @Excel(name = "鐢熶骇鍘傚晢")
-    private String manufacturer;
-
-    /** 璐熻矗浜� */
-    @Excel(name = "璐熻矗浜�")
-    private String personCharge;
-
-    /** 瀹夎浣嶇疆 */
-    @Excel(name = "瀹夎浣嶇疆")
-    private String installactionLocation;
-
-    /** 璧峰鏃堕棿 */
-    @Excel(name = "璧峰鏃堕棿")
-    private String startTime;
-
-    /** 妫�瀹氬懆鏈� */
-    @Excel(name = "妫�瀹氬懆鏈�")
-    private Integer checkCycle;
-
-    /** 鎻愰啋鍛ㄦ湡 */
-    @Excel(name = "鎻愰啋鍛ㄦ湡")
-    private Integer reminderCycle;
-
-    /** 鐘舵�� */
-    @Excel(name = "鐘舵��")
-    private String meterStatus;
-
-    /** 閫昏緫鍒犻櫎鏍囧織,Y宸插垹闄�,N鏈垹闄� */
-    private String delFlage;
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setCode(String code) 
-    {
-        this.code = code;
-    }
-
-    public String getCode() 
-    {
-        return code;
-    }
-    public void setMeterName(String meterName) 
-    {
-        this.meterName = meterName;
-    }
-
-    public String getMeterName() 
-    {
-        return meterName;
-    }
-    public void setMeterType(String meterType) 
-    {
-        this.meterType = meterType;
-    }
-
-    public String getMeterType() 
-    {
-        return meterType;
-    }
-    public void setModelNumber(String modelNumber) 
-    {
-        this.modelNumber = modelNumber;
-    }
-
-    public String getModelNumber() 
-    {
-        return modelNumber;
-    }
-    public void setMeasureRange(String measureRange) 
-    {
-        this.measureRange = measureRange;
-    }
-
-    public String getMeasureRange() 
-    {
-        return measureRange;
-    }
-    public void setManufacturer(String manufacturer) 
-    {
-        this.manufacturer = manufacturer;
-    }
-
-    public String getManufacturer() 
-    {
-        return manufacturer;
-    }
-    public void setPersonCharge(String personCharge) 
-    {
-        this.personCharge = personCharge;
-    }
-
-    public String getPersonCharge() 
-    {
-        return personCharge;
-    }
-    public void setInstallactionLocation(String installactionLocation) 
-    {
-        this.installactionLocation = installactionLocation;
-    }
-
-    public String getInstallactionLocation() 
-    {
-        return installactionLocation;
-    }
-    public void setStartTime(String startTime)
-    {
-        this.startTime = startTime;
-    }
-
-    public String getStartTime()
-    {
-        return startTime;
-    }
-    public void setCheckCycle(Integer checkCycle) 
-    {
-        this.checkCycle = checkCycle;
-    }
-
-    public Integer getCheckCycle() 
-    {
-        return checkCycle;
-    }
-    public void setReminderCycle(Integer reminderCycle) 
-    {
-        this.reminderCycle = reminderCycle;
-    }
-
-    public Integer getReminderCycle() 
-    {
-        return reminderCycle;
-    }
-    public void setMeterStatus(String meterStatus) 
-    {
-        this.meterStatus = meterStatus;
-    }
-
-    public String getMeterStatus() 
-    {
-        return meterStatus;
-    }
-    public void setDelFlage(String delFlage) 
-    {
-        this.delFlage = delFlage;
-    }
-
-    public String getDelFlage() 
-    {
-        return delFlage;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("code", getCode())
-            .append("meterName", getMeterName())
-            .append("meterType", getMeterType())
-            .append("modelNumber", getModelNumber())
-            .append("measureRange", getMeasureRange())
-            .append("manufacturer", getManufacturer())
-            .append("personCharge", getPersonCharge())
-            .append("installactionLocation", getInstallactionLocation())
-            .append("startTime", getStartTime())
-            .append("checkCycle", getCheckCycle())
-            .append("reminderCycle", getReminderCycle())
-            .append("meterStatus", getMeterStatus())
-            .append("delFlage", getDelFlage())
-            .append("remark", getRemark())
-            .append("createTime", getCreateTime())
-            .append("createBy", getCreateBy())
-            .append("updateTime", getUpdateTime())
-            .append("updateBy", getUpdateBy())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/mapper/MeterAnnexMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/mapper/MeterAnnexMapper.java
deleted file mode 100644
index ff8a062..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/mapper/MeterAnnexMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.meter.mapper;
-
-import com.dingzhuo.energy.basic.data.meter.domain.MeterAnnex;
-import java.util.List;
-
-/**
- * 璁¢噺鍣ㄥ叿妗f闄勪欢Mapper鎺ュ彛
- * 
- * @author zhaowei
- * @date 2020-02-14
- */
-public interface MeterAnnexMapper 
-{
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿妗f闄勪欢
-     * 
-     * @param id 璁¢噺鍣ㄥ叿妗f闄勪欢ID
-     * @return 璁¢噺鍣ㄥ叿妗f闄勪欢
-     */
-    public MeterAnnex selectMeterAnnexById(String id);
-
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿妗f闄勪欢鍒楄〃
-     * 
-     * @param meterAnnex 璁¢噺鍣ㄥ叿妗f闄勪欢
-     * @return 璁¢噺鍣ㄥ叿妗f闄勪欢闆嗗悎
-     */
-    public List<MeterAnnex> selectMeterAnnexList(MeterAnnex meterAnnex);
-
-    /**
-     * 鏂板璁¢噺鍣ㄥ叿妗f闄勪欢
-     * 
-     * @param meterAnnex 璁¢噺鍣ㄥ叿妗f闄勪欢
-     * @return 缁撴灉
-     */
-    public int insertMeterAnnex(MeterAnnex meterAnnex);
-
-    /**
-     * 淇敼璁¢噺鍣ㄥ叿妗f闄勪欢
-     * 
-     * @param meterAnnex 璁¢噺鍣ㄥ叿妗f闄勪欢
-     * @return 缁撴灉
-     */
-    public int updateMeterAnnex(MeterAnnex meterAnnex);
-
-    /**
-     * 鍒犻櫎璁¢噺鍣ㄥ叿妗f闄勪欢
-     * 
-     * @param id 璁¢噺鍣ㄥ叿妗f闄勪欢ID
-     * @return 缁撴灉
-     */
-    public int deleteMeterAnnexById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎璁¢噺鍣ㄥ叿妗f闄勪欢
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteMeterAnnexByIds(String[] ids);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/mapper/MeterImplementCountMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/mapper/MeterImplementCountMapper.java
deleted file mode 100644
index 3b5d932..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/mapper/MeterImplementCountMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.meter.mapper;
-
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplementCount;
-import java.util.List;
-
-/**
- * 璁¢噺鍣ㄥ叿缁熻鏌ヨMapper鎺ュ彛
- * 
- * @author zhaowei
- * @date 2020-02-21
- */
-public interface MeterImplementCountMapper 
-{
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * 
-     * @param code 璁¢噺鍣ㄥ叿缁熻鏌ヨID
-     * @return 璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     */
-    public MeterImplementCount selectMeterImplementCountById(String code);
-
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿缁熻鏌ヨ鍒楄〃
-     * 
-     * @param meterImplementCount 璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * @return 璁¢噺鍣ㄥ叿缁熻鏌ヨ闆嗗悎
-     */
-    public List<MeterImplementCount> selectMeterImplementCountList(MeterImplementCount meterImplementCount);
-
-    /**
-     * 鏂板璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * 
-     * @param meterImplementCount 璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * @return 缁撴灉
-     */
-    public int insertMeterImplementCount(MeterImplementCount meterImplementCount);
-
-    /**
-     * 淇敼璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * 
-     * @param meterImplementCount 璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * @return 缁撴灉
-     */
-    public int updateMeterImplementCount(MeterImplementCount meterImplementCount);
-
-    /**
-     * 鍒犻櫎璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * 
-     * @param code 璁¢噺鍣ㄥ叿缁熻鏌ヨID
-     * @return 缁撴灉
-     */
-    public int deleteMeterImplementCountById(String code);
-
-    /**
-     * 鎵归噺鍒犻櫎璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * 
-     * @param codes 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteMeterImplementCountByIds(String[] codes);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/mapper/MeterImplementExcel.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/mapper/MeterImplementExcel.java
deleted file mode 100644
index db9f973..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/mapper/MeterImplementExcel.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.dingzhuo.energy.basic.data.meter.mapper;
-
-public class MeterImplementExcel {
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/mapper/MeterImplementMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/mapper/MeterImplementMapper.java
deleted file mode 100644
index 28eb5a4..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/mapper/MeterImplementMapper.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package com.dingzhuo.energy.basic.data.meter.mapper;
-
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplement;
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplementExcel;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * 璁¢噺鍣ㄥ叿妗f缁存姢Mapper鎺ュ彛
- * 
- * @author zhaowei
- * @date 2020-02-12
- */
-public interface MeterImplementMapper 
-{
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢
-     * 
-     * @param id 璁¢噺鍣ㄥ叿妗f缁存姢ID
-     * @return 璁¢噺鍣ㄥ叿妗f缁存姢
-     */
-    public MeterImplement selectMeterImplementById(String id);
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢
-     *
-     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢缂栧彿
-     * @return 璁¢噺鍣ㄥ叿妗f缁存姢
-     */
-    public MeterImplement selectMeterImplementByCode(MeterImplement meterImplement);
-
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃
-     * 
-     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
-     * @return 璁¢噺鍣ㄥ叿妗f缁存姢闆嗗悎
-     */
-    public List<MeterImplement> selectMeterImplementList(MeterImplement meterImplement);
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢瀵煎嚭鍒楄〃锛屽叾涓瓧鍏稿瓧娈靛湪SQL涓繘琛岀炕璇�
-     *
-     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
-     * @return 璁¢噺鍣ㄥ叿妗f缁存姢闆嗗悎
-     */
-    public List<MeterImplementExcel> exectMeterImplementList(MeterImplement meterImplement);
-
-    /**
-     * 鏂板璁¢噺鍣ㄥ叿妗f缁存姢
-     * 
-     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
-     * @return 缁撴灉
-     */
-    public int insertMeterImplement(MeterImplement meterImplement);
-
-    /**
-     * 淇敼璁¢噺鍣ㄥ叿妗f缁存姢
-     * 
-     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
-     * @return 缁撴灉
-     */
-    public int updateMeterImplement(MeterImplement meterImplement);
-
-    /**
-     * 鍒犻櫎璁¢噺鍣ㄥ叿妗f缁存姢
-     * 
-     * @param id 璁¢噺鍣ㄥ叿妗f缁存姢ID
-     * @return 缁撴灉
-     */
-    public int deleteMeterImplementById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎璁¢噺鍣ㄥ叿妗f缁存姢
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteMeterImplementByIds(String[] ids);
-
-    /**
-     * 鏍规嵁id闆嗗悎鏌ヨ璁¢噺鍣ㄥ叿淇℃伅
-     *
-     * @param meterIdList   璁¢噺鍣ㄥ叿id
-     * @return
-     */
-    List<MeterImplement> listMeterImplementByIds(@Param("meterIdList") List<String> meterIdList);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/service/IMeterAnnexService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/service/IMeterAnnexService.java
deleted file mode 100644
index 6c2e3db..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/service/IMeterAnnexService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.meter.service;
-
-import com.dingzhuo.energy.basic.data.meter.domain.MeterAnnex;
-import java.util.List;
-
-/**
- * 璁¢噺鍣ㄥ叿妗f闄勪欢Service鎺ュ彛
- * 
- * @author zhaowei
- * @date 2020-02-14
- */
-public interface IMeterAnnexService 
-{
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿妗f闄勪欢
-     * 
-     * @param id 璁¢噺鍣ㄥ叿妗f闄勪欢ID
-     * @return 璁¢噺鍣ㄥ叿妗f闄勪欢
-     */
-    public MeterAnnex selectMeterAnnexById(String id);
-
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿妗f闄勪欢鍒楄〃
-     * 
-     * @param meterAnnex 璁¢噺鍣ㄥ叿妗f闄勪欢
-     * @return 璁¢噺鍣ㄥ叿妗f闄勪欢闆嗗悎
-     */
-    public List<MeterAnnex> selectMeterAnnexList(MeterAnnex meterAnnex);
-
-    /**
-     * 鏂板璁¢噺鍣ㄥ叿妗f闄勪欢
-     * 
-     * @param meterAnnex 璁¢噺鍣ㄥ叿妗f闄勪欢
-     * @return 缁撴灉
-     */
-    public int insertMeterAnnex(MeterAnnex meterAnnex);
-
-    /**
-     * 淇敼璁¢噺鍣ㄥ叿妗f闄勪欢
-     * 
-     * @param meterAnnex 璁¢噺鍣ㄥ叿妗f闄勪欢
-     * @return 缁撴灉
-     */
-    public int updateMeterAnnex(MeterAnnex meterAnnex);
-
-    /**
-     * 鎵归噺鍒犻櫎璁¢噺鍣ㄥ叿妗f闄勪欢
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑璁¢噺鍣ㄥ叿妗f闄勪欢ID
-     * @return 缁撴灉
-     */
-    public int deleteMeterAnnexByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎璁¢噺鍣ㄥ叿妗f闄勪欢淇℃伅
-     * 
-     * @param id 璁¢噺鍣ㄥ叿妗f闄勪欢ID
-     * @return 缁撴灉
-     */
-    public int deleteMeterAnnexById(String id);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/service/IMeterImplementCountService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/service/IMeterImplementCountService.java
deleted file mode 100644
index 30fd995..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/service/IMeterImplementCountService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.meter.service;
-
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplementCount;
-import java.util.List;
-
-/**
- * 璁¢噺鍣ㄥ叿缁熻鏌ヨService鎺ュ彛
- * 
- * @author zhaowei
- * @date 2020-02-21
- */
-public interface IMeterImplementCountService 
-{
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * 
-     * @param code 璁¢噺鍣ㄥ叿缁熻鏌ヨID
-     * @return 璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     */
-    public MeterImplementCount selectMeterImplementCountById(String code);
-
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿缁熻鏌ヨ鍒楄〃
-     * 
-     * @param meterImplementCount 璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * @return 璁¢噺鍣ㄥ叿缁熻鏌ヨ闆嗗悎
-     */
-    public List<MeterImplementCount> selectMeterImplementCountList(MeterImplementCount meterImplementCount);
-
-    /**
-     * 鏂板璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * 
-     * @param meterImplementCount 璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * @return 缁撴灉
-     */
-    public int insertMeterImplementCount(MeterImplementCount meterImplementCount);
-
-    /**
-     * 淇敼璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * 
-     * @param meterImplementCount 璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * @return 缁撴灉
-     */
-    public int updateMeterImplementCount(MeterImplementCount meterImplementCount);
-
-    /**
-     * 鎵归噺鍒犻櫎璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * 
-     * @param codes 闇�瑕佸垹闄ょ殑璁¢噺鍣ㄥ叿缁熻鏌ヨID
-     * @return 缁撴灉
-     */
-    public int deleteMeterImplementCountByIds(String[] codes);
-
-    /**
-     * 鍒犻櫎璁¢噺鍣ㄥ叿缁熻鏌ヨ淇℃伅
-     * 
-     * @param code 璁¢噺鍣ㄥ叿缁熻鏌ヨID
-     * @return 缁撴灉
-     */
-    public int deleteMeterImplementCountById(String code);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/service/IMeterImplementService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/service/IMeterImplementService.java
deleted file mode 100644
index 388b437..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/service/IMeterImplementService.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.dingzhuo.energy.basic.data.meter.service;
-
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplement;
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplementExcel;
-import com.dingzhuo.energy.framework.security.LoginUser;
-
-import java.util.List;
-
-/**
- * 璁¢噺鍣ㄥ叿妗f缁存姢Service鎺ュ彛
- * 
- * @author zhaowei
- * @date 2020-02-12
- */
-public interface IMeterImplementService 
-{
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢
-     * 
-     * @param id 璁¢噺鍣ㄥ叿妗f缁存姢ID
-     * @return 璁¢噺鍣ㄥ叿妗f缁存姢
-     */
-    public MeterImplement selectMeterImplementById(String id);
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢
-     *
-     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢缂栧彿
-     * @return 璁¢噺鍣ㄥ叿妗f缁存姢
-     */
-    public MeterImplement selectMeterImplementByCode(MeterImplement meterImplement);
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃
-     * 
-     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
-     * @return 璁¢噺鍣ㄥ叿妗f缁存姢闆嗗悎
-     */
-    public List<MeterImplement> selectMeterImplementList(MeterImplement meterImplement);
-
-    /**
-     * 瀵煎嚭璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃
-     *
-     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
-     * @return 璁¢噺鍣ㄥ叿妗f缁存姢闆嗗悎
-     */
-    public List<MeterImplementExcel> exectMeterImplementList(MeterImplement meterImplement);
-
-    /**
-     * 鏂板璁¢噺鍣ㄥ叿妗f缁存姢
-     * 
-     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
-     * @return 缁撴灉
-     */
-    public int insertMeterImplement(MeterImplement meterImplement);
-
-    /**
-     * 淇敼璁¢噺鍣ㄥ叿妗f缁存姢
-     * 
-     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
-     * @return 缁撴灉
-     */
-    public int updateMeterImplement(MeterImplement meterImplement);
-
-    /**
-     * 鎵归噺鍒犻櫎璁¢噺鍣ㄥ叿妗f缁存姢
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑璁¢噺鍣ㄥ叿妗f缁存姢ID
-     * @return 缁撴灉
-     */
-    public int deleteMeterImplementByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎璁¢噺鍣ㄥ叿妗f缁存姢淇℃伅
-     * 
-     * @param id 璁¢噺鍣ㄥ叿妗f缁存姢ID
-     * @return 缁撴灉
-     */
-    public int deleteMeterImplementById(String id);
-
-    /**
-     * Excel瀵煎叆 璁¢噺鍣ㄥ叿妗f缁存姢淇℃伅
-     *
-     * @param meterImplementList 瑕佸鍏ョ殑璁¢噺鍣ㄥ叿妗f闆嗗悎
-     * @param loginUser          鐧诲綍鐢ㄦ埛瀵硅薄
-     * @return 缁撴灉
-     */
-    public String excelImpSave(List<MeterImplement> meterImplementList, LoginUser loginUser);
-
-    /**
-     * 鏍规嵁id闆嗗悎鏌ヨ璁¢噺鍣ㄥ叿淇℃伅
-     *
-     * @param meterIdList
-     * @return
-     */
-    List<MeterImplement> listMeterImplementByIds(List<String> meterIdList);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/service/impl/MeterAnnexServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/service/impl/MeterAnnexServiceImpl.java
deleted file mode 100644
index 4976cf4..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/service/impl/MeterAnnexServiceImpl.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.dingzhuo.energy.basic.data.meter.service.impl;
-
-import java.util.List;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.basic.data.meter.mapper.MeterAnnexMapper;
-import com.dingzhuo.energy.basic.data.meter.domain.MeterAnnex;
-import com.dingzhuo.energy.basic.data.meter.service.IMeterAnnexService;
-
-/**
- * 璁¢噺鍣ㄥ叿妗f闄勪欢Service涓氬姟灞傚鐞�
- * 
- * @author zhaowei
- * @date 2020-02-14
- */
-@Service
-public class MeterAnnexServiceImpl implements IMeterAnnexService 
-{
-    @Autowired
-    private MeterAnnexMapper meterAnnexMapper;
-
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿妗f闄勪欢
-     * 
-     * @param id 璁¢噺鍣ㄥ叿妗f闄勪欢ID
-     * @return 璁¢噺鍣ㄥ叿妗f闄勪欢
-     */
-    @Override
-    public MeterAnnex selectMeterAnnexById(String id)
-    {
-        return meterAnnexMapper.selectMeterAnnexById(id);
-    }
-
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿妗f闄勪欢鍒楄〃
-     * 
-     * @param meterAnnex 璁¢噺鍣ㄥ叿妗f闄勪欢
-     * @return 璁¢噺鍣ㄥ叿妗f闄勪欢
-     */
-    @Override
-    public List<MeterAnnex> selectMeterAnnexList(MeterAnnex meterAnnex)
-    {
-        return meterAnnexMapper.selectMeterAnnexList(meterAnnex);
-    }
-
-    /**
-     * 鏂板璁¢噺鍣ㄥ叿妗f闄勪欢
-     * 
-     * @param meterAnnex 璁¢噺鍣ㄥ叿妗f闄勪欢
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertMeterAnnex(MeterAnnex meterAnnex)
-    {
-        meterAnnex.setCreateTime(DateUtils.getNowDate());
-        return meterAnnexMapper.insertMeterAnnex(meterAnnex);
-    }
-
-    /**
-     * 淇敼璁¢噺鍣ㄥ叿妗f闄勪欢
-     * 
-     * @param meterAnnex 璁¢噺鍣ㄥ叿妗f闄勪欢
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateMeterAnnex(MeterAnnex meterAnnex)
-    {
-        meterAnnex.setUpdateTime(DateUtils.getNowDate());
-        return meterAnnexMapper.updateMeterAnnex(meterAnnex);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎璁¢噺鍣ㄥ叿妗f闄勪欢
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑璁¢噺鍣ㄥ叿妗f闄勪欢ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteMeterAnnexByIds(String[] ids)
-    {
-        return meterAnnexMapper.deleteMeterAnnexByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎璁¢噺鍣ㄥ叿妗f闄勪欢淇℃伅
-     * 
-     * @param id 璁¢噺鍣ㄥ叿妗f闄勪欢ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteMeterAnnexById(String id)
-    {
-        return meterAnnexMapper.deleteMeterAnnexById(id);
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/service/impl/MeterImplementCountServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/service/impl/MeterImplementCountServiceImpl.java
deleted file mode 100644
index dbc5aed..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/service/impl/MeterImplementCountServiceImpl.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.dingzhuo.energy.basic.data.meter.service.impl;
-
-import java.util.List;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.basic.data.meter.mapper.MeterImplementCountMapper;
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplementCount;
-import com.dingzhuo.energy.basic.data.meter.service.IMeterImplementCountService;
-
-/**
- * 璁¢噺鍣ㄥ叿缁熻鏌ヨService涓氬姟灞傚鐞�
- * 
- * @author zhaowei
- * @date 2020-02-21
- */
-@Service
-public class MeterImplementCountServiceImpl implements IMeterImplementCountService 
-{
-    @Autowired
-    private MeterImplementCountMapper meterImplementCountMapper;
-
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * 
-     * @param code 璁¢噺鍣ㄥ叿缁熻鏌ヨID
-     * @return 璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     */
-    @Override
-    public MeterImplementCount selectMeterImplementCountById(String code)
-    {
-        return meterImplementCountMapper.selectMeterImplementCountById(code);
-    }
-
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿缁熻鏌ヨ鍒楄〃
-     * 
-     * @param meterImplementCount 璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * @return 璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     */
-    @Override
-    public List<MeterImplementCount> selectMeterImplementCountList(MeterImplementCount meterImplementCount)
-    {
-        return meterImplementCountMapper.selectMeterImplementCountList(meterImplementCount);
-    }
-
-    /**
-     * 鏂板璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * 
-     * @param meterImplementCount 璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertMeterImplementCount(MeterImplementCount meterImplementCount)
-    {
-        meterImplementCount.setCreateTime(DateUtils.getNowDate());
-        return meterImplementCountMapper.insertMeterImplementCount(meterImplementCount);
-    }
-
-    /**
-     * 淇敼璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * 
-     * @param meterImplementCount 璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateMeterImplementCount(MeterImplementCount meterImplementCount)
-    {
-        meterImplementCount.setUpdateTime(DateUtils.getNowDate());
-        return meterImplementCountMapper.updateMeterImplementCount(meterImplementCount);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎璁¢噺鍣ㄥ叿缁熻鏌ヨ
-     * 
-     * @param codes 闇�瑕佸垹闄ょ殑璁¢噺鍣ㄥ叿缁熻鏌ヨID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteMeterImplementCountByIds(String[] codes)
-    {
-        return meterImplementCountMapper.deleteMeterImplementCountByIds(codes);
-    }
-
-    /**
-     * 鍒犻櫎璁¢噺鍣ㄥ叿缁熻鏌ヨ淇℃伅
-     * 
-     * @param code 璁¢噺鍣ㄥ叿缁熻鏌ヨID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteMeterImplementCountById(String code)
-    {
-        return meterImplementCountMapper.deleteMeterImplementCountById(code);
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/service/impl/MeterImplementServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/service/impl/MeterImplementServiceImpl.java
deleted file mode 100644
index 249e95f..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/meter/service/impl/MeterImplementServiceImpl.java
+++ /dev/null
@@ -1,250 +0,0 @@
-package com.dingzhuo.energy.basic.data.meter.service.impl;
-
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplement;
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplementExcel;
-import com.dingzhuo.energy.basic.data.meter.mapper.MeterImplementMapper;
-import com.dingzhuo.energy.basic.data.meter.service.IMeterImplementService;
-import com.dingzhuo.energy.common.exception.CustomException;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.project.system.domain.SysDictData;
-import com.dingzhuo.energy.project.system.mapper.SysDictDataMapper;
-import com.dingzhuo.energy.project.system.service.impl.SysUserServiceImpl;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-
-/**
- * 璁¢噺鍣ㄥ叿妗f缁存姢Service涓氬姟灞傚鐞�
- * 
- * @author zhaowei
- * @date 2020-02-12
- */
-@Service
-public class MeterImplementServiceImpl implements IMeterImplementService 
-{
-    @Autowired
-    private MeterImplementMapper meterImplementMapper;
-
-    @Autowired
-    private SysDictDataMapper dictDataMapper;
-
-    private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢
-     * 
-     * @param id 璁¢噺鍣ㄥ叿妗f缁存姢ID
-     * @return 璁¢噺鍣ㄥ叿妗f缁存姢
-     */
-    @Override
-    public MeterImplement selectMeterImplementById(String id)
-    {
-        return meterImplementMapper.selectMeterImplementById(id);
-    }
-
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢
-     *
-     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢 缂栧彿
-     * @return 璁¢噺鍣ㄥ叿妗f缁存姢
-     */
-    @Override
-    public MeterImplement selectMeterImplementByCode(MeterImplement meterImplement) {
-        return meterImplementMapper.selectMeterImplementByCode(meterImplement);
-    }
-
-    /**
-     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃
-     * 
-     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
-     * @return 璁¢噺鍣ㄥ叿妗f缁存姢
-     */
-    @Override
-    public List<MeterImplement> selectMeterImplementList(MeterImplement meterImplement)
-    {
-        return meterImplementMapper.selectMeterImplementList(meterImplement);
-    }
-    /**
-     * 瀵煎嚭璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃
-     *
-     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
-     * @return 璁¢噺鍣ㄥ叿妗f缁存姢
-     */
-    @Override
-    public List<MeterImplementExcel> exectMeterImplementList(MeterImplement meterImplement)
-    {
-        return meterImplementMapper.exectMeterImplementList(meterImplement);
-    }
-
-    /**
-     * 鏂板璁¢噺鍣ㄥ叿妗f缁存姢
-     * 
-     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertMeterImplement(MeterImplement meterImplement)
-    {
-        meterImplement.setCreateTime(DateUtils.getNowDate());
-        return meterImplementMapper.insertMeterImplement(meterImplement);
-    }
-
-    /**
-     * 淇敼璁¢噺鍣ㄥ叿妗f缁存姢
-     * 
-     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateMeterImplement(MeterImplement meterImplement)
-    {
-        meterImplement.setUpdateTime(DateUtils.getNowDate());
-        return meterImplementMapper.updateMeterImplement(meterImplement);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎璁¢噺鍣ㄥ叿妗f缁存姢
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑璁¢噺鍣ㄥ叿妗f缁存姢ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteMeterImplementByIds(String[] ids)
-    {
-        return meterImplementMapper.deleteMeterImplementByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎璁¢噺鍣ㄥ叿妗f缁存姢淇℃伅
-     * 
-     * @param id 璁¢噺鍣ㄥ叿妗f缁存姢ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteMeterImplementById(String id)
-    {
-        return meterImplementMapper.deleteMeterImplementById(id);
-    }
-
-    /**
-     * Excel瀵煎叆 璁¢噺鍣ㄥ叿妗f缁存姢淇℃伅
-     *
-     * @param meterImplementList  瑕佸鍏ョ殑璁¢噺鍣ㄥ叿妗f闆嗗悎
-     * @param loginUser 鐧诲綍鐢ㄦ埛瀵硅薄
-     * @return 缁撴灉
-     */
-    @Override
-    public String excelImpSave(List<MeterImplement> meterImplementList, LoginUser loginUser)
-    {
-
-        if (StringUtils.isNull(meterImplementList) || meterImplementList.size() == 0)
-        {
-            throw new CustomException("瀵煎叆璁¢噺鍣ㄥ叿妗f涓嶈兘涓虹┖锛�");
-        }
-        int successNum = 0;
-        int failureNum = 0;
-        StringBuilder successMsg = new StringBuilder();
-        StringBuilder failureMsg = new StringBuilder();
-        //1銆佸瓧鍏告暟鎹炕璇�
-        //璁¢噺鍣ㄥ叿鐘舵��
-        List<SysDictData> meterStatusList = dictDataMapper.selectDictDataByType("meter_status");
-        Map<String,String> meterStatusMap = this.initDictMap(meterStatusList);
-        //璁¢噺鍣ㄥ叿绫诲瀷
-        List<SysDictData> meterTypeList = dictDataMapper.selectDictDataByType(
-                "sys_device_type");
-        Map<String,String> meterTypeMap = this.initDictMap(meterTypeList);
-
-        for (MeterImplement meterImplement : meterImplementList)
-        {
-            try
-            {
-                //  妫�瀹氬懆鏈熴�佹彁閱掑懆鏈� 瀹氫箟鐨処nteger绫诲瀷锛屽鏋滄暟鎹笉鍖归厤浼氶粯璁や负0
-                meterImplement.setCheckCycle(meterImplement.getCheckCycle()==null?1:meterImplement.getCheckCycle());
-                meterImplement.setReminderCycle(meterImplement.getReminderCycle()==null?1:meterImplement.getReminderCycle());
-                // 2楠岃瘉 缂栫爜鏄惁瀛樺湪
-                MeterImplement chekcMeterImplement = meterImplementMapper.selectMeterImplementByCode(meterImplement);
-                if (StringUtils.isNull(chekcMeterImplement))
-                {
-                    //璁剧疆涓婚敭
-                    meterImplement.setId(UUID.randomUUID().toString());
-                    //缈昏瘧鍣ㄥ叿鐘舵�� 鏃犳垨鑰呭�间笉瀵瑰垯璁剧疆涓虹┖瀛楃涓�
-                    String meterStatus= StringUtils.nvl(meterStatusMap.get(meterImplement.getMeterStatus()+""),"");
-                    //鍒ゆ柇鐘舵�佹槸鍚︽纭�
-                    if(StringUtils.isEmpty(meterStatus))
-                    {
-                        failureNum++;
-                        failureMsg.append("<br/>" + failureNum + "銆佺紪鍙� " + meterImplement.getCode() + " 鐨勭姸鎬侀敊璇�");
-                        continue;
-                    }
-                    meterImplement.setMeterStatus(meterStatus);
-                    //缈昏瘧鍣ㄥ叿绉嶇被  鏃犳垨鑰呭�间笉瀵瑰垯璁剧疆涓虹┖瀛楃涓�
-                    String meterType= StringUtils.nvl(meterTypeMap.get(meterImplement.getMeterType()+""),"");
-                    if(StringUtils.isEmpty(meterType))
-                    {
-                        failureNum++;
-                        failureMsg.append("<br/>" + failureNum + "銆佺紪鍙� " + meterImplement.getCode() + " 鐨勭绫婚敊璇�");
-                        continue;
-                    }
-                    meterImplement.setMeterType(meterType);
-                    //璁剧疆寤虹珛浜哄拰寤虹珛鏃堕棿
-                    meterImplement.setCreateBy(loginUser.getUsername());
-                    meterImplement.setCreateTime(new Date());
-                    //瀛樺偍涓�鏉℃暟鎹�
-                    this.insertMeterImplement(meterImplement);
-                    successNum++;
-                    successMsg.append("<br/>" + successNum + "銆佺紪鍙� " + meterImplement.getCode() + " 瀵煎叆鎴愬姛");
-                }
-                else
-                {
-                    failureNum++;
-                    failureMsg.append("<br/>" + failureNum + "銆佺紪鍙� " + meterImplement.getCode() + " 宸插瓨鍦�");
-                }
-            }
-            catch (Exception e)
-            {
-                failureNum++;
-                String msg = "<br/>" + failureNum + "銆佺紪鍙� " + meterImplement.getCode() + " 瀵煎叆澶辫触锛�";
-                failureMsg.append(msg + e.getMessage());
-                log.error(msg, e);
-            }
-        }
-        if (failureNum > 0) {
-            failureMsg.insert(0, "寰堟姳姝夛紝瀵煎叆澶辫触锛佸叡 " + failureNum + " 鏉℃暟鎹牸寮忎笉姝g‘锛岄敊璇涓嬶細");
-            throw new CustomException(failureMsg.toString());
-        } else {
-            successMsg.insert(0, "鎭枩鎮紝鏁版嵁宸插叏閮ㄥ鍏ユ垚鍔燂紒鍏� " + successNum + " 鏉★紝鏁版嵁濡備笅锛�");
-        }
-        return successMsg.toString();
-    }
-
-    /**
-     * 鏍规嵁id闆嗗悎鏌ヨ璁¢噺鍣ㄥ叿淇℃伅
-     *
-     * @param meterIdList 璁¢噺鍣ㄥ叿id
-     * @return
-     */
-    @Override
-    public List<MeterImplement> listMeterImplementByIds(List<String> meterIdList) {
-        return meterImplementMapper.listMeterImplementByIds(meterIdList);
-    }
-
-    /**
-     * 灏嗗瓧鍏哥被鍨� 瀵瑰簲鐨� 瀛楀吀闆嗗悎  瀛樺叆map涓娇鐢�
-     *
-     * @param sysDictDataList
-     * @return
-     */
-    public Map initDictMap(List<SysDictData> sysDictDataList) {
-        Map<String, String> map = new HashMap<String, String>();
-        for (SysDictData sysDictData : sysDictDataList) {
-            //瀛樻斁 key=鏍囩鍚嶅瓧  value鏄� 璁剧疆鍊�
-            map.put(sysDictData.getDictLabel(), sysDictData.getDictValue());
-        }
-        return map;
-    }
-
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/controller/PolicyAnnexController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/controller/PolicyAnnexController.java
deleted file mode 100644
index d369de2..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/controller/PolicyAnnexController.java
+++ /dev/null
@@ -1,178 +0,0 @@
-package com.dingzhuo.energy.basic.data.policy.controller;
-
-import com.dingzhuo.energy.basic.data.policy.domain.PolicyAnnex;
-import com.dingzhuo.energy.basic.data.policy.service.IPolicyAnnexService;
-import com.dingzhuo.energy.common.utils.IdUtils;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.common.utils.file.FileUploadUtils;
-import com.dingzhuo.energy.common.utils.file.FileUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.config.RuoYiConfig;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.List;
-
-/**
- * 鏀跨瓥娉曡闄勪欢Controller
- * 
- * @author liuli
- * @date 2020-04-24
- */
-@RestController
-@RequestMapping("/policy/annex")
-public class PolicyAnnexController extends BaseController
-{
-    @Autowired
-    private IPolicyAnnexService policyAnnexService;
-    @Autowired
-    private TokenService tokenService;
-    private static final Logger log = LoggerFactory.getLogger(PolicyAnnexController.class);
-    /**
-     * 鏌ヨ鏀跨瓥娉曡闄勪欢鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('policy:annex:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(PolicyAnnex policyAnnex)
-    {
-        startPage();
-        List<PolicyAnnex> list = policyAnnexService.selectPolicyAnnexList(policyAnnex);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭鏀跨瓥娉曡闄勪欢鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('policy:annex:export')")
-    @Log(title = "鏀跨瓥娉曡闄勪欢", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(PolicyAnnex policyAnnex)
-    {
-        List<PolicyAnnex> list = policyAnnexService.selectPolicyAnnexList(policyAnnex);
-        ExcelUtil<PolicyAnnex> util = new ExcelUtil<PolicyAnnex>(PolicyAnnex.class);
-        return util.exportExcel(list, "annex");
-    }
-
-    /**
-     * 鑾峰彇鏀跨瓥娉曡闄勪欢璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('policy:annex:query')")
-    @GetMapping(value = "/{filePath}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(policyAnnexService.selectPolicyAnnexById(id));
-    }
-
-    /**
-     * 鏂板鏀跨瓥娉曡闄勪欢
-     */
-    @PreAuthorize("@ss.hasPermi('policy:annex:add')")
-    @Log(title = "鏀跨瓥娉曡闄勪欢", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody PolicyAnnex policyAnnex)
-    {
-        return toAjax(policyAnnexService.insertPolicyAnnex(policyAnnex));
-    }
-
-    /**
-     * 淇敼鏀跨瓥娉曡闄勪欢
-     */
-    @PreAuthorize("@ss.hasPermi('policy:annex:edit')")
-    @Log(title = "鏀跨瓥娉曡闄勪欢", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody PolicyAnnex policyAnnex)
-    {
-        return toAjax(policyAnnexService.updatePolicyAnnex(policyAnnex));
-    }
-
-    /**
-     * 鍒犻櫎鏀跨瓥娉曡闄勪欢
-     */
-    @PreAuthorize("@ss.hasPermi('policy:annex:remove')")
-    @Log(title = "鏀跨瓥娉曡闄勪欢", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(policyAnnexService.deletePolicyAnnexByIds(ids));
-    }
-
-    @Log(title = "鏀跨瓥娉曡闄勪欢涓婁紶", businessType = BusinessType.IMPORT)
-    @PreAuthorize("@ss.hasPermi('policy:annex:fileImport')")
-    @PostMapping("/fileImport")
-    public AjaxResult importData(MultipartFile file, String regulations_id) throws Exception
-    {
-        if (!file.isEmpty())
-        {
-            LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-            //鑾峰彇閰嶇疆鐨勬枃浠朵笂浼犺矾寰�
-            String uploadPathDir = RuoYiConfig.getUploadPath();
-            //鑾峰彇鏂囦欢鍘熷鍚嶇О
-            String fileName = file.getOriginalFilename();
-            //鑾峰彇鏂囦欢鎵╁睍鍚�
-            String fileSuffix = FileUploadUtils.getExtension(file);
-//            System.out.println("implementId==="+implementId);
-//            System.out.println("filedir==="+uploadPathDir);
-//            System.out.println("fileName==="+fileName);
-//            System.out.println("fileSuffix==="+fileSuffix);
-            //鏂囦欢鏈�缁堜繚瀛樼殑缁濆璺緞
-            String filePath = FileUploadUtils.uploadAll(uploadPathDir, file);
-//            System.out.println("涓婁紶鏂囦欢鍦板潃:===>"+filePath);
-            PolicyAnnex policyAnnex=new PolicyAnnex();
-            //璁剧疆涓婚敭UUID
-            policyAnnex.setId(IdUtils.simpleUUID());
-            policyAnnex.setFileName(fileName);
-            policyAnnex.setFilePath(filePath);
-            policyAnnex.setFileSuffix(fileSuffix);
-            policyAnnex.setRegulationsId(regulations_id);
-            policyAnnex.setCreateBy(loginUser.getUsername());
-            if (this.policyAnnexService.insertPolicyAnnex(policyAnnex)>0)
-            {
-                return AjaxResult.success("闄勪欢涓婁紶瀹屾垚");
-            }
-        }
-        return AjaxResult.success("闄勪欢涓婁紶澶辫触");
-    }
-    /**
-     * 閫氱敤鎸囧畾鏂囦欢涓嬭浇璇锋眰
-     *
-     * @param showFileName 涓嬭浇灞曠ず鏂囦欢鍚嶇О
-    //     * @param filePath 涓嬭浇鏂囦欢缁濆璺緞 甯� 鏂囦欢鐪熷疄鍚嶅瓧鍙婅矾寰�
-     * @param delete 鏄惁鍒犻櫎/
-     */
-    @PreAuthorize("@ss.hasPermi('policy:annex:assignDownload')")
-    @PostMapping("/assignDownload")
-    public void fileAssignDownload(String showFileName, String filePath, Boolean delete, HttpServletResponse response, HttpServletRequest request)
-    {
-
-        try
-        {
-            response.setCharacterEncoding("utf-8");
-            response.setContentType("multipart/form-data");
-            response.setHeader("Content-Disposition",
-                    "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, showFileName));
-            FileUtils.writeBytes(filePath, response.getOutputStream());
-//            if (delete)
-//            {
-//                FileUtils.deleteFile(filePath);
-//            }
-            log.error("涓嬭浇鎴愬姛", "aa");
-        }
-        catch (Exception e)
-        {
-            log.error("涓嬭浇鏂囦欢澶辫触", e);
-        }
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/controller/PolicyRegulationsController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/controller/PolicyRegulationsController.java
deleted file mode 100644
index 1290c27..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/controller/PolicyRegulationsController.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package com.dingzhuo.energy.basic.data.policy.controller;
-
-
-
-import com.dingzhuo.energy.basic.data.policy.domain.PolicyRegulations;
-import com.dingzhuo.energy.basic.data.policy.service.IPolicyRegulationsService;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-import java.util.UUID;
-
-/**
- * 鏀跨瓥娉曡缁存姢Controller
- *
- * @author liuli
- * @date 2020-04-23
- */
-@RestController
-@RequestMapping("/policy/policyInsert")
-@Api(value = "鏀跨瓥娉曡绠$悊",tags = {"鏀跨瓥娉曡绠$悊"})
-public class PolicyRegulationsController extends BaseController
-{
-    @Autowired
-    private IPolicyRegulationsService policyRegulationsService;
-    @Autowired
-    private TokenService tokenService;
-
-    /**
-     * 鏌ヨ鏀跨瓥娉曡缁存姢鍒楄〃
-     */
-    @ApiOperation(value = "鏀跨瓥娉曡鍒楄〃")
-    @PreAuthorize("@ss.hasPermi('policy:policyInsert:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(PolicyRegulations policyRegulations)
-    {
-        startPage();
-        List<PolicyRegulations> list = policyRegulationsService.selectPolicyRegulationsList(policyRegulations);
-        return getDataTable(list);
-    }
-    /**
-     * 瀵煎嚭璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃
-     */
-    @ApiOperation(value = "鏀跨瓥娉曡鍒楄〃瀵煎嚭")
-    @PreAuthorize("@ss.hasPermi('policy:policyInsert:export')")
-    @Log(title = "鏀跨瓥娉曡鏌ヨ", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(PolicyRegulations policyRegulations)
-    {
-        List<PolicyRegulations> list = policyRegulationsService.selectPolicyRegulationsList(policyRegulations);
-        ExcelUtil<PolicyRegulations> util = new ExcelUtil<PolicyRegulations>(PolicyRegulations.class);
-        return util.exportExcel(list, "implement");
-    }
-    /**
-     * 鑾峰彇鏀跨瓥娉曡缁存姢璇︾粏淇℃伅
-     */
-    @ApiOperation(value = "鏍规嵁id鑾峰彇鏀跨瓥娉曡璇︽儏")
-    @PreAuthorize("@ss.hasPermi('policy:policyInsert:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(policyRegulationsService.selectPolicyRegulationsById(id));
-    }
-
-    /**
-     * 鏂板鏀跨瓥娉曡缁存姢
-     */
-    @ApiOperation(value = "鏂板鏀跨瓥娉曡")
-    @PreAuthorize("@ss.hasPermi('policy:policyInsert:add')")
-    @Log(title = "鏀跨瓥娉曡缁存姢", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody PolicyRegulations policyRegulations)
-    {
-        policyRegulations.setId(UUID.randomUUID().toString());
-        policyRegulations.setOperator(SecurityUtils.getUsername());
-        policyRegulations.setCreationTime(DateUtils.getNowDate());
-        return toAjax(policyRegulationsService.insertPolicyRegulations(policyRegulations));
-    }
-
-    /**
-     * 淇敼鏀跨瓥娉曡缁存姢
-     */
-    @ApiOperation(value = "缂栬緫鏀跨瓥娉曡")
-    @PreAuthorize("@ss.hasPermi('policy:policyInsert:edit')")
-    @Log(title = "鏀跨瓥娉曡缁存姢", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody PolicyRegulations policyRegulations)
-    {
-        return toAjax(policyRegulationsService.updatePolicyRegulations(policyRegulations));
-    }
-
-    /**
-     * 鍒犻櫎鏀跨瓥娉曡缁存姢
-     */
-    @ApiOperation(value = "鍒犻櫎鏀跨瓥娉曡")
-    @PreAuthorize("@ss.hasPermi('policy:policyInsert:remove')")
-    @Log(title = "鏀跨瓥娉曡缁存姢", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(policyRegulationsService.deletePolicyRegulationsByIds(ids));
-    }
-
-
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/controller/PolicyRegulationsTranslateController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/controller/PolicyRegulationsTranslateController.java
deleted file mode 100644
index 75d72ac..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/controller/PolicyRegulationsTranslateController.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.dingzhuo.energy.basic.data.policy.controller;
-
-import com.dingzhuo.energy.basic.data.policy.domain.PolicyRegulationsTranslate;
-import com.dingzhuo.energy.basic.data.policy.service.IPolicyRegulationsTranslateService;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-import java.util.UUID;
-
-/**
- * 鏀跨瓥娉曡鏌ヨController
- * 
- * @author liuli
- * @date 2020-04-24
- */
-@RestController
-@RequestMapping("/policy/policyselete")
-public class PolicyRegulationsTranslateController extends BaseController
-{
-    @Autowired
-    private IPolicyRegulationsTranslateService policyRegulationsTranslateService;
-    /**
-     * 鏌ヨ鏀跨瓥娉曡鏌ヨ鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('policy:policyselete:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(PolicyRegulationsTranslate policyRegulationsTranslate)
-    {
-        startPage();
-        List<PolicyRegulationsTranslate> list = policyRegulationsTranslateService.selectPolicyRegulationsTranslateList(policyRegulationsTranslate);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭鏀跨瓥娉曡鏌ヨ鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('policy:policyselete:export')")
-    @Log(title = "鏀跨瓥娉曡鏌ヨ", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(PolicyRegulationsTranslate policyRegulationsTranslate)
-    {
-        List<PolicyRegulationsTranslate> list = policyRegulationsTranslateService.selectPolicyRegulationsTranslateList(policyRegulationsTranslate);
-        ExcelUtil<PolicyRegulationsTranslate> util = new ExcelUtil<PolicyRegulationsTranslate>(PolicyRegulationsTranslate.class);
-        return util.exportExcel(list, "policyselete");
-
-    }
-
-    /**
-     * 鑾峰彇鏀跨瓥娉曡鏌ヨ璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('policy:policyselete:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(policyRegulationsTranslateService.selectPolicyRegulationsTranslateById(id));
-    }
-
-    /**
-     * 鏂板鏀跨瓥娉曡鏌ヨ
-     */
-    @PreAuthorize("@ss.hasPermi('policy:policyselete:add')")
-    @Log(title = "鏀跨瓥娉曡鏌ヨ", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody PolicyRegulationsTranslate policyRegulationsTranslate)
-    {
-        policyRegulationsTranslate.setId(UUID.randomUUID().toString());
-        policyRegulationsTranslate.setOperator(SecurityUtils.getUsername());
-        policyRegulationsTranslate.setCreationTime(DateUtils.getNowDate());
-        return toAjax(policyRegulationsTranslateService.insertPolicyRegulationsTranslate(policyRegulationsTranslate));
-    }
-
-    /**
-     * 淇敼鏀跨瓥娉曡鏌ヨ
-     */
-    @PreAuthorize("@ss.hasPermi('policy:policyselete:edit')")
-    @Log(title = "鏀跨瓥娉曡鏌ヨ", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody PolicyRegulationsTranslate policyRegulationsTranslate)
-    {
-        return toAjax(policyRegulationsTranslateService.updatePolicyRegulationsTranslate(policyRegulationsTranslate));
-    }
-
-    /**
-     * 鍒犻櫎鏀跨瓥娉曡鏌ヨ
-     */
-    @PreAuthorize("@ss.hasPermi('policy:policyselete:remove')")
-    @Log(title = "鏀跨瓥娉曡鏌ヨ", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(policyRegulationsTranslateService.deletePolicyRegulationsTranslateByIds(ids));
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/domain/PolicyAnnex.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/domain/PolicyAnnex.java
deleted file mode 100644
index 70e78ee..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/domain/PolicyAnnex.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package com.dingzhuo.energy.basic.data.policy.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 鏀跨瓥娉曡闄勪欢瀵硅薄 policy_annex
- * 
- * @author liuli
- * @date 2020-04-24
- */
-public class PolicyAnnex extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 鏂囦欢璺緞 */
-    private String filePath;
-
-    /** 鍒犻櫎鏍囧織Y鍒犻櫎 N涓哄垹闄� */
-    private String delFlage;
-
-    /** 寤虹珛浜� */
-    private String createOperator;
-
-    /** 淇敼浜� */
-    private String updateOperator;
-
-    /** 涓婚敭 */
-    private String id;
-
-    /** 鍏宠仈policy_regulations */
-    private String regulationsId;
-
-    /** 鏂囦欢鍚� */
-    @Excel(name = "鏂囦欢鍚�")
-    private String fileName;
-
-    /** 鏂囦欢鍚庣紑 */
-    private String fileSuffix;
-
-    public void setFilePath(String filePath) 
-    {
-        this.filePath = filePath;
-    }
-
-    public String getFilePath() 
-    {
-        return filePath;
-    }
-    public void setDelFlage(String delFlage) 
-    {
-        this.delFlage = delFlage;
-    }
-
-    public String getDelFlage() 
-    {
-        return delFlage;
-    }
-    public void setCreateOperator(String createOperator) 
-    {
-        this.createOperator = createOperator;
-    }
-
-    public String getCreateOperator() 
-    {
-        return createOperator;
-    }
-    public void setUpdateOperator(String updateOperator) 
-    {
-        this.updateOperator = updateOperator;
-    }
-
-    public String getUpdateOperator() 
-    {
-        return updateOperator;
-    }
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setRegulationsId(String regulationsId) 
-    {
-        this.regulationsId = regulationsId;
-    }
-
-    public String getRegulationsId() 
-    {
-        return regulationsId;
-    }
-    public void setFileName(String fileName) 
-    {
-        this.fileName = fileName;
-    }
-
-    public String getFileName() 
-    {
-        return fileName;
-    }
-    public void setFileSuffix(String fileSuffix) 
-    {
-        this.fileSuffix = fileSuffix;
-    }
-
-    public String getFileSuffix() 
-    {
-        return fileSuffix;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("filePath", getFilePath())
-            .append("delFlage", getDelFlage())
-            .append("createTime", getCreateTime())
-            .append("createOperator", getCreateOperator())
-            .append("updateTime", getUpdateTime())
-            .append("updateOperator", getUpdateOperator())
-            .append("id", getId())
-            .append("regulationsId", getRegulationsId())
-            .append("fileName", getFileName())
-            .append("fileSuffix", getFileSuffix())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/domain/PolicyRegulations.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/domain/PolicyRegulations.java
deleted file mode 100644
index 92ed43b..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/domain/PolicyRegulations.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package com.dingzhuo.energy.basic.data.policy.domain;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * 鏀跨瓥娉曡缁存姢瀵硅薄 policy_regulations
- *
- * @author liuli
- * @date 2020-04-23
- */
-@ApiModel(value = "鏀跨瓥娉曡")
-public class PolicyRegulations extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 搴忓彿 */
-    @ApiModelProperty(value = "搴忓彿")
-    private String id;
-
-    /** 鏍囬 */
-    @Excel(name = "鏍囬")
-    @ApiModelProperty(value = "鏍囬")
-    private String titleName;
-
-    /** 鍐呭 */
-    @Excel(name = "鍐呭")
-    @ApiModelProperty(value = "鍐呭")
-    private String content;
-
-    /** 鍒嗙被 */
-    @Excel(name = "鍒嗙被")
-    @ApiModelProperty(value = "鍒嗙被")
-    private String sort;
-
-    /** 鍒涘缓鏃堕棿 */
-    @Excel(name = "鍒涘缓鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    private Date creationTime;
-
-    /** 鎿嶄綔浜哄憳 */
-    @Excel(name = "鎿嶄綔浜哄憳")
-    @ApiModelProperty(value = "鎿嶄綔浜哄憳")
-    private String operator;
-
-    public void setId(String id)
-    {
-        this.id = id;
-    }
-
-    public String getId()
-    {
-        return id;
-    }
-    public void setTitleName(String titleName)
-    {
-        this.titleName = titleName;
-    }
-
-    public String getTitleName()
-    {
-        return titleName;
-    }
-    public void setContent(String content)
-    {
-        this.content = content;
-    }
-
-    public String getContent()
-    {
-        return content;
-    }
-    public void setSort(String sort)
-    {
-        this.sort = sort;
-    }
-
-    public String getSort()
-    {
-        return sort;
-    }
-    public void setCreationTime(Date creationTime)
-    {
-        this.creationTime = creationTime;
-    }
-
-    public Date getCreationTime()
-    {
-        return creationTime;
-    }
-    public void setOperator(String operator)
-    {
-        this.operator = operator;
-    }
-
-    public String getOperator()
-    {
-        return operator;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("titleName", getTitleName())
-            .append("content", getContent())
-            .append("sort", getSort())
-            .append("creationTime", getCreationTime())
-            .append("operator", getOperator())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/domain/PolicyRegulationsTranslate.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/domain/PolicyRegulationsTranslate.java
deleted file mode 100644
index cff69ab..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/domain/PolicyRegulationsTranslate.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.dingzhuo.energy.basic.data.policy.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * 鏀跨瓥娉曡鏌ヨ瀵硅薄 policy_regulations
- * 
- * @author liuli
- * @date 2020-04-24
- */
-public class PolicyRegulationsTranslate extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 搴忓彿 */
-    private String id;
-
-    /** 鏍囬 */
-    @Excel(name = "鏍囬")
-    private String titleName;
-
-    /** 鍐呭 */
-    @Excel(name = "鍐呭")
-    private String content;
-
-    /** 鍒嗙被 */
-    @Excel(name = "鍒嗙被")
-    private String sort;
-
-    /** 鍒涘缓鏃堕棿 */
-    @Excel(name = "鍒涘缓鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date creationTime;
-
-    /** 鎿嶄綔浜哄憳 */
-    @Excel(name = "鎿嶄綔浜哄憳")
-    private String operator;
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setTitleName(String titleName) 
-    {
-        this.titleName = titleName;
-    }
-
-    public String getTitleName() 
-    {
-        return titleName;
-    }
-    public void setContent(String content) 
-    {
-        this.content = content;
-    }
-
-    public String getContent() 
-    {
-        return content;
-    }
-    public void setSort(String sort) 
-    {
-        this.sort = sort;
-    }
-
-    public String getSort() 
-    {
-        return sort;
-    }
-    public void setCreationTime(Date creationTime) 
-    {
-        this.creationTime = creationTime;
-    }
-
-    public Date getCreationTime() 
-    {
-        return creationTime;
-    }
-    public void setOperator(String operator) 
-    {
-        this.operator = operator;
-    }
-
-    public String getOperator() 
-    {
-        return operator;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("titleName", getTitleName())
-            .append("content", getContent())
-            .append("sort", getSort())
-            .append("creationTime", getCreationTime())
-            .append("operator", getOperator())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/mapper/PolicyAnnexMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/mapper/PolicyAnnexMapper.java
deleted file mode 100644
index 01f451e..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/mapper/PolicyAnnexMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.policy.mapper;
-
-import com.dingzhuo.energy.basic.data.policy.domain.PolicyAnnex;
-import java.util.List;
-
-/**
- * 鏀跨瓥娉曡闄勪欢Mapper鎺ュ彛
- * 
- * @author liuli
- * @date 2020-04-24
- */
-public interface PolicyAnnexMapper 
-{
-    /**
-     * 鏌ヨ鏀跨瓥娉曡闄勪欢
-     * 
-     * @param id 鏀跨瓥娉曡闄勪欢ID
-     * @return 鏀跨瓥娉曡闄勪欢
-     */
-    public PolicyAnnex selectPolicyAnnexById(String id);
-
-    /**
-     * 鏌ヨ鏀跨瓥娉曡闄勪欢鍒楄〃
-     * 
-     * @param policyAnnex 鏀跨瓥娉曡闄勪欢
-     * @return 鏀跨瓥娉曡闄勪欢闆嗗悎
-     */
-    public List<PolicyAnnex> selectPolicyAnnexList(PolicyAnnex policyAnnex);
-
-    /**
-     * 鏂板鏀跨瓥娉曡闄勪欢
-     * 
-     * @param policyAnnex 鏀跨瓥娉曡闄勪欢
-     * @return 缁撴灉
-     */
-    public int insertPolicyAnnex(PolicyAnnex policyAnnex);
-
-    /**
-     * 淇敼鏀跨瓥娉曡闄勪欢
-     * 
-     * @param policyAnnex 鏀跨瓥娉曡闄勪欢
-     * @return 缁撴灉
-     */
-    public int updatePolicyAnnex(PolicyAnnex policyAnnex);
-
-    /**
-     * 鍒犻櫎鏀跨瓥娉曡闄勪欢
-     * 
-     * @param id 鏀跨瓥娉曡闄勪欢ID
-     * @return 缁撴灉
-     */
-    public int deletePolicyAnnexById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎鏀跨瓥娉曡闄勪欢
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deletePolicyAnnexByIds(String[] ids);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/mapper/PolicyRegulationsMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/mapper/PolicyRegulationsMapper.java
deleted file mode 100644
index f9e9620..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/mapper/PolicyRegulationsMapper.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.dingzhuo.energy.basic.data.policy.mapper;
-
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplement;
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplementExcel;
-import com.dingzhuo.energy.basic.data.policy.domain.PolicyRegulations;
-
-import java.util.List;
-
-/**
- * 鏀跨瓥娉曡缁存姢Mapper鎺ュ彛
- * 
- * @author liuli
- * @date 2020-04-23
- */
-public interface PolicyRegulationsMapper 
-{
-    /**
-     * 鏌ヨ鏀跨瓥娉曡缁存姢
-     * 
-     * @param id 鏀跨瓥娉曡缁存姢ID
-     * @return 鏀跨瓥娉曡缁存姢
-     */
-    public PolicyRegulations selectPolicyRegulationsById(String id);
-
-    /**
-     * 鏌ヨ鏀跨瓥娉曡缁存姢鍒楄〃
-     * 
-     * @param policyRegulations 鏀跨瓥娉曡缁存姢
-     * @return 鏀跨瓥娉曡缁存姢闆嗗悎
-     */
-    public List<PolicyRegulations> selectPolicyRegulationsList(PolicyRegulations policyRegulations);
-
-    /**
-     * 鏂板鏀跨瓥娉曡缁存姢
-     * 
-     * @param policyRegulations 鏀跨瓥娉曡缁存姢
-     * @return 缁撴灉
-     */
-    public int insertPolicyRegulations(PolicyRegulations policyRegulations);
-
-    /**
-     * 淇敼鏀跨瓥娉曡缁存姢
-     * 
-     * @param policyRegulations 鏀跨瓥娉曡缁存姢
-     * @return 缁撴灉
-     */
-    public int updatePolicyRegulations(PolicyRegulations policyRegulations);
-
-    /**
-     * 鍒犻櫎鏀跨瓥娉曡缁存姢
-     * 
-     * @param id 鏀跨瓥娉曡缁存姢ID
-     * @return 缁撴灉
-     */
-    public int deletePolicyRegulationsById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎鏀跨瓥娉曡缁存姢
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deletePolicyRegulationsByIds(String[] ids);
-
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/mapper/PolicyRegulationsTranslateMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/mapper/PolicyRegulationsTranslateMapper.java
deleted file mode 100644
index 8cfaecd..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/mapper/PolicyRegulationsTranslateMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.policy.mapper;
-
-import com.dingzhuo.energy.basic.data.policy.domain.PolicyRegulationsTranslate;
-import java.util.List;
-
-/**
- * 鏀跨瓥娉曡鏌ヨMapper鎺ュ彛
- * 
- * @author liuli
- * @date 2020-04-24
- */
-public interface PolicyRegulationsTranslateMapper 
-{
-    /**
-     * 鏌ヨ鏀跨瓥娉曡鏌ヨ
-     * 
-     * @param id 鏀跨瓥娉曡鏌ヨID
-     * @return 鏀跨瓥娉曡鏌ヨ
-     */
-    public PolicyRegulationsTranslate selectPolicyRegulationsTranslateById(String id);
-
-    /**
-     * 鏌ヨ鏀跨瓥娉曡鏌ヨ鍒楄〃
-     * 
-     * @param policyRegulationsTranslate 鏀跨瓥娉曡鏌ヨ
-     * @return 鏀跨瓥娉曡鏌ヨ闆嗗悎
-     */
-    public List<PolicyRegulationsTranslate> selectPolicyRegulationsTranslateList(PolicyRegulationsTranslate policyRegulationsTranslate);
-
-    /**
-     * 鏂板鏀跨瓥娉曡鏌ヨ
-     * 
-     * @param policyRegulationsTranslate 鏀跨瓥娉曡鏌ヨ
-     * @return 缁撴灉
-     */
-    public int insertPolicyRegulationsTranslate(PolicyRegulationsTranslate policyRegulationsTranslate);
-
-    /**
-     * 淇敼鏀跨瓥娉曡鏌ヨ
-     * 
-     * @param policyRegulationsTranslate 鏀跨瓥娉曡鏌ヨ
-     * @return 缁撴灉
-     */
-    public int updatePolicyRegulationsTranslate(PolicyRegulationsTranslate policyRegulationsTranslate);
-
-    /**
-     * 鍒犻櫎鏀跨瓥娉曡鏌ヨ
-     * 
-     * @param id 鏀跨瓥娉曡鏌ヨID
-     * @return 缁撴灉
-     */
-    public int deletePolicyRegulationsTranslateById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎鏀跨瓥娉曡鏌ヨ
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deletePolicyRegulationsTranslateByIds(String[] ids);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/service/IPolicyAnnexService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/service/IPolicyAnnexService.java
deleted file mode 100644
index a4513ad..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/service/IPolicyAnnexService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.policy.service;
-
-import com.dingzhuo.energy.basic.data.policy.domain.PolicyAnnex;
-import java.util.List;
-
-/**
- * 鏀跨瓥娉曡闄勪欢Service鎺ュ彛
- * 
- * @author liuli
- * @date 2020-04-24
- */
-public interface IPolicyAnnexService 
-{
-    /**
-     * 鏌ヨ鏀跨瓥娉曡闄勪欢
-     * 
-     * @param id 鏀跨瓥娉曡闄勪欢ID
-     * @return 鏀跨瓥娉曡闄勪欢
-     */
-    public PolicyAnnex selectPolicyAnnexById(String id);
-
-    /**
-     * 鏌ヨ鏀跨瓥娉曡闄勪欢鍒楄〃
-     * 
-     * @param policyAnnex 鏀跨瓥娉曡闄勪欢
-     * @return 鏀跨瓥娉曡闄勪欢闆嗗悎
-     */
-    public List<PolicyAnnex> selectPolicyAnnexList(PolicyAnnex policyAnnex);
-
-    /**
-     * 鏂板鏀跨瓥娉曡闄勪欢
-     * 
-     * @param policyAnnex 鏀跨瓥娉曡闄勪欢
-     * @return 缁撴灉
-     */
-    public int insertPolicyAnnex(PolicyAnnex policyAnnex);
-
-    /**
-     * 淇敼鏀跨瓥娉曡闄勪欢
-     * 
-     * @param policyAnnex 鏀跨瓥娉曡闄勪欢
-     * @return 缁撴灉
-     */
-    public int updatePolicyAnnex(PolicyAnnex policyAnnex);
-
-    /**
-     * 鎵归噺鍒犻櫎鏀跨瓥娉曡闄勪欢
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏀跨瓥娉曡闄勪欢ID
-     * @return 缁撴灉
-     */
-    public int deletePolicyAnnexByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎鏀跨瓥娉曡闄勪欢淇℃伅
-     * 
-     * @param id 鏀跨瓥娉曡闄勪欢ID
-     * @return 缁撴灉
-     */
-    public int deletePolicyAnnexById(String id);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/service/IPolicyRegulationsService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/service/IPolicyRegulationsService.java
deleted file mode 100644
index 45070a0..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/service/IPolicyRegulationsService.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.dingzhuo.energy.basic.data.policy.service;
-
-
-import com.dingzhuo.energy.basic.data.policy.domain.PolicyRegulations;
-
-import java.util.List;
-
-/**
- * 鏀跨瓥娉曡缁存姢Service鎺ュ彛
- * 
- * @author liuli
- * @date 2020-04-23
- */
-public interface IPolicyRegulationsService 
-{
-    /**
-     * 鏌ヨ鏀跨瓥娉曡缁存姢
-     * 
-     * @param id 鏀跨瓥娉曡缁存姢ID
-     * @return 鏀跨瓥娉曡缁存姢
-     */
-    public PolicyRegulations selectPolicyRegulationsById(String id);
-
-    /**
-     * 鏌ヨ鏀跨瓥娉曡缁存姢鍒楄〃
-     * 
-     * @param policyRegulations 鏀跨瓥娉曡缁存姢
-     * @return 鏀跨瓥娉曡缁存姢闆嗗悎
-     */
-    public List<PolicyRegulations> selectPolicyRegulationsList(PolicyRegulations policyRegulations);
-
-    /**
-     * 鏂板鏀跨瓥娉曡缁存姢
-     * 
-     * @param policyRegulations 鏀跨瓥娉曡缁存姢
-     * @return 缁撴灉
-     */
-    public int insertPolicyRegulations(PolicyRegulations policyRegulations);
-
-    /**
-     * 淇敼鏀跨瓥娉曡缁存姢
-     * 
-     * @param policyRegulations 鏀跨瓥娉曡缁存姢
-     * @return 缁撴灉
-     */
-    public int updatePolicyRegulations(PolicyRegulations policyRegulations);
-
-    /**
-     * 鎵归噺鍒犻櫎鏀跨瓥娉曡缁存姢
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏀跨瓥娉曡缁存姢ID
-     * @return 缁撴灉
-     */
-    public int deletePolicyRegulationsByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎鏀跨瓥娉曡缁存姢淇℃伅
-     * 
-     * @param id 鏀跨瓥娉曡缁存姢ID
-     * @return 缁撴灉
-     */
-    public int deletePolicyRegulationsById(String id);
-
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/service/IPolicyRegulationsTranslateService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/service/IPolicyRegulationsTranslateService.java
deleted file mode 100644
index 6f0aa86..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/service/IPolicyRegulationsTranslateService.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.dingzhuo.energy.basic.data.policy.service;
-
-import com.dingzhuo.energy.basic.data.policy.domain.PolicyRegulationsTranslate;
-
-import java.util.List;
-
-/**
- * 鏀跨瓥娉曡鏌ヨService鎺ュ彛
- * 
- * @author liuli
- * @date 2020-04-24
- */
-public interface IPolicyRegulationsTranslateService 
-{
-    /**
-     * 鏌ヨ鏀跨瓥娉曡鏌ヨ
-     * 
-     * @param id 鏀跨瓥娉曡鏌ヨID
-     * @return 鏀跨瓥娉曡鏌ヨ
-     */
-    public PolicyRegulationsTranslate selectPolicyRegulationsTranslateById(String id);
-
-    /**
-     * 鏌ヨ鏀跨瓥娉曡鏌ヨ鍒楄〃
-     * 
-     * @param policyRegulationsTranslate 鏀跨瓥娉曡鏌ヨ
-     * @return 鏀跨瓥娉曡鏌ヨ闆嗗悎
-     */
-    public List<PolicyRegulationsTranslate> selectPolicyRegulationsTranslateList(PolicyRegulationsTranslate policyRegulationsTranslate);
-
-    /**
-     * 鏂板鏀跨瓥娉曡鏌ヨ
-     * 
-     * @param policyRegulationsTranslate 鏀跨瓥娉曡鏌ヨ
-     * @return 缁撴灉
-     */
-    public int insertPolicyRegulationsTranslate(PolicyRegulationsTranslate policyRegulationsTranslate);
-
-    /**
-     * 淇敼鏀跨瓥娉曡鏌ヨ
-     * 
-     * @param policyRegulationsTranslate 鏀跨瓥娉曡鏌ヨ
-     * @return 缁撴灉
-     */
-    public int updatePolicyRegulationsTranslate(PolicyRegulationsTranslate policyRegulationsTranslate);
-
-    /**
-     * 鎵归噺鍒犻櫎鏀跨瓥娉曡鏌ヨ
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏀跨瓥娉曡鏌ヨID
-     * @return 缁撴灉
-     */
-    public int deletePolicyRegulationsTranslateByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎鏀跨瓥娉曡鏌ヨ淇℃伅
-     * 
-     * @param id 鏀跨瓥娉曡鏌ヨID
-     * @return 缁撴灉
-     */
-    public int deletePolicyRegulationsTranslateById(String id);
-
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/service/impl/PolicyAnnexServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/service/impl/PolicyAnnexServiceImpl.java
deleted file mode 100644
index be8234e..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/service/impl/PolicyAnnexServiceImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.dingzhuo.energy.basic.data.policy.service.impl;
-
-import com.dingzhuo.energy.basic.data.policy.domain.PolicyAnnex;
-import com.dingzhuo.energy.basic.data.policy.mapper.PolicyAnnexMapper;
-import com.dingzhuo.energy.basic.data.policy.service.IPolicyAnnexService;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * 鏀跨瓥娉曡闄勪欢Service涓氬姟灞傚鐞�
- * 
- * @author liuli
- * @date 2020-04-24
- */
-@Service
-public class PolicyAnnexServiceImpl implements IPolicyAnnexService 
-{
-    @Autowired
-    private PolicyAnnexMapper policyAnnexMapper;
-
-    /**
-     * 鏌ヨ鏀跨瓥娉曡闄勪欢
-     * 
-     * @param id 鏀跨瓥娉曡闄勪欢ID
-     * @return 鏀跨瓥娉曡闄勪欢
-     */
-    @Override
-    public PolicyAnnex selectPolicyAnnexById(String id)
-    {
-        return policyAnnexMapper.selectPolicyAnnexById(id);
-    }
-
-    /**
-     * 鏌ヨ鏀跨瓥娉曡闄勪欢鍒楄〃
-     * 
-     * @param policyAnnex 鏀跨瓥娉曡闄勪欢
-     * @return 鏀跨瓥娉曡闄勪欢
-     */
-    @Override
-    public List<PolicyAnnex> selectPolicyAnnexList(PolicyAnnex policyAnnex)
-    {
-        return policyAnnexMapper.selectPolicyAnnexList(policyAnnex);
-    }
-
-    /**
-     * 鏂板鏀跨瓥娉曡闄勪欢
-     * 
-     * @param policyAnnex 鏀跨瓥娉曡闄勪欢
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertPolicyAnnex(PolicyAnnex policyAnnex)
-    {
-        policyAnnex.setCreateTime(DateUtils.getNowDate());
-        return policyAnnexMapper.insertPolicyAnnex(policyAnnex);
-    }
-
-    /**
-     * 淇敼鏀跨瓥娉曡闄勪欢
-     * 
-     * @param policyAnnex 鏀跨瓥娉曡闄勪欢
-     * @return 缁撴灉
-     */
-    @Override
-    public int updatePolicyAnnex(PolicyAnnex policyAnnex)
-    {
-        policyAnnex.setUpdateTime(DateUtils.getNowDate());
-        return policyAnnexMapper.updatePolicyAnnex(policyAnnex);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鏀跨瓥娉曡闄勪欢
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏀跨瓥娉曡闄勪欢ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deletePolicyAnnexByIds(String[] ids)
-    {
-        return policyAnnexMapper.deletePolicyAnnexByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎鏀跨瓥娉曡闄勪欢淇℃伅
-     * 
-     * @param id 鏀跨瓥娉曡闄勪欢ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deletePolicyAnnexById(String id)
-    {
-        return policyAnnexMapper.deletePolicyAnnexById(id);
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/service/impl/PolicyRegulationsServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/service/impl/PolicyRegulationsServiceImpl.java
deleted file mode 100644
index 858f1a2..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/service/impl/PolicyRegulationsServiceImpl.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package com.dingzhuo.energy.basic.data.policy.service.impl;
-
-
-import com.dingzhuo.energy.basic.data.policy.domain.PolicyRegulations;
-import com.dingzhuo.energy.basic.data.policy.mapper.PolicyRegulationsMapper;
-import com.dingzhuo.energy.basic.data.policy.service.IPolicyRegulationsService;
-import com.dingzhuo.energy.project.system.mapper.SysDictDataMapper;
-import com.dingzhuo.energy.project.system.service.impl.SysUserServiceImpl;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import java.util.List;
-
-/**
- * 鏀跨瓥娉曡缁存姢Service涓氬姟灞傚鐞�
- * 
- * @author liuli
- * @date 2020-04-23
- */
-@Service
-public class PolicyRegulationsServiceImpl implements IPolicyRegulationsService 
-{
-    @Autowired
-    private PolicyRegulationsMapper policyRegulationsMapper;
-    @Autowired
-    private SysDictDataMapper dictDataMapper;
-
-    private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
-    /**
-     * 鏌ヨ鏀跨瓥娉曡缁存姢
-     * 
-     * @param id 鏀跨瓥娉曡缁存姢ID
-     * @return 鏀跨瓥娉曡缁存姢
-     */
-    @Override
-    public PolicyRegulations selectPolicyRegulationsById(String id)
-    {
-        return policyRegulationsMapper.selectPolicyRegulationsById(id);
-    }
-
-    /**
-     * 鏌ヨ鏀跨瓥娉曡缁存姢鍒楄〃
-     * 
-     * @param policyRegulations 鏀跨瓥娉曡缁存姢
-     * @return 鏀跨瓥娉曡缁存姢
-     */
-    @Override
-    public List<PolicyRegulations> selectPolicyRegulationsList(PolicyRegulations policyRegulations)
-    {
-        return policyRegulationsMapper.selectPolicyRegulationsList(policyRegulations);
-    }
-    /**
-     * 鏂板鏀跨瓥娉曡缁存姢
-     * 
-     * @param policyRegulations 鏀跨瓥娉曡缁存姢
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertPolicyRegulations(PolicyRegulations policyRegulations)
-    {
-        return policyRegulationsMapper.insertPolicyRegulations(policyRegulations);
-    }
-
-    /**
-     * 淇敼鏀跨瓥娉曡缁存姢
-     * 
-     * @param policyRegulations 鏀跨瓥娉曡缁存姢
-     * @return 缁撴灉
-     */
-    @Override
-    public int updatePolicyRegulations(PolicyRegulations policyRegulations)
-    {
-        return policyRegulationsMapper.updatePolicyRegulations(policyRegulations);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鏀跨瓥娉曡缁存姢
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏀跨瓥娉曡缁存姢ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deletePolicyRegulationsByIds(String[] ids)
-    {
-        return policyRegulationsMapper.deletePolicyRegulationsByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎鏀跨瓥娉曡缁存姢淇℃伅
-     * 
-     * @param id 鏀跨瓥娉曡缁存姢ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deletePolicyRegulationsById(String id)
-    {
-        return policyRegulationsMapper.deletePolicyRegulationsById(id);
-    }
-
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/service/impl/PolicyRegulationsTranslateServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/service/impl/PolicyRegulationsTranslateServiceImpl.java
deleted file mode 100644
index 8f1c1bf..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/policy/service/impl/PolicyRegulationsTranslateServiceImpl.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.dingzhuo.energy.basic.data.policy.service.impl;
-
-import com.dingzhuo.energy.basic.data.policy.domain.PolicyRegulationsTranslate;
-import com.dingzhuo.energy.basic.data.policy.mapper.PolicyRegulationsTranslateMapper;
-import com.dingzhuo.energy.basic.data.policy.service.IPolicyRegulationsTranslateService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * 鏀跨瓥娉曡鏌ヨService涓氬姟灞傚鐞�
- * 
- * @author liuli
- * @date 2020-04-24
- */
-@Service
-public class PolicyRegulationsTranslateServiceImpl implements IPolicyRegulationsTranslateService 
-{
-    @Autowired
-    private PolicyRegulationsTranslateMapper policyRegulationsTranslateMapper;
-
-    /**
-     * 鏌ヨ鏀跨瓥娉曡鏌ヨ
-     * 
-     * @param id 鏀跨瓥娉曡鏌ヨID
-     * @return 鏀跨瓥娉曡鏌ヨ
-     */
-    @Override
-    public PolicyRegulationsTranslate selectPolicyRegulationsTranslateById(String id)
-    {
-        return policyRegulationsTranslateMapper.selectPolicyRegulationsTranslateById(id);
-    }
-
-    /**
-     * 鏌ヨ鏀跨瓥娉曡鏌ヨ鍒楄〃
-     * 
-     * @param policyRegulationsTranslate 鏀跨瓥娉曡鏌ヨ
-     * @return 鏀跨瓥娉曡鏌ヨ
-     */
-    @Override
-    public List<PolicyRegulationsTranslate> selectPolicyRegulationsTranslateList(PolicyRegulationsTranslate policyRegulationsTranslate)
-    {
-        return policyRegulationsTranslateMapper.selectPolicyRegulationsTranslateList(policyRegulationsTranslate);
-    }
-
-    /**
-     * 鏂板鏀跨瓥娉曡鏌ヨ
-     * 
-     * @param policyRegulationsTranslate 鏀跨瓥娉曡鏌ヨ
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertPolicyRegulationsTranslate(PolicyRegulationsTranslate policyRegulationsTranslate)
-    {
-        return policyRegulationsTranslateMapper.insertPolicyRegulationsTranslate(policyRegulationsTranslate);
-    }
-
-    /**
-     * 淇敼鏀跨瓥娉曡鏌ヨ
-     * 
-     * @param policyRegulationsTranslate 鏀跨瓥娉曡鏌ヨ
-     * @return 缁撴灉
-     */
-    @Override
-    public int updatePolicyRegulationsTranslate(PolicyRegulationsTranslate policyRegulationsTranslate)
-    {
-        return policyRegulationsTranslateMapper.updatePolicyRegulationsTranslate(policyRegulationsTranslate);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鏀跨瓥娉曡鏌ヨ
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏀跨瓥娉曡鏌ヨID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deletePolicyRegulationsTranslateByIds(String[] ids)
-    {
-        return policyRegulationsTranslateMapper.deletePolicyRegulationsTranslateByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎鏀跨瓥娉曡鏌ヨ淇℃伅
-     * 
-     * @param id 鏀跨瓥娉曡鏌ヨID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deletePolicyRegulationsTranslateById(String id)
-    {
-        return policyRegulationsTranslateMapper.deletePolicyRegulationsTranslateById(id);
-    }
-
-
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/controller/RosteringController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/controller/RosteringController.java
deleted file mode 100644
index 797aedf..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/controller/RosteringController.java
+++ /dev/null
@@ -1,204 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.controller;
-
-import com.dingzhuo.energy.basic.data.workforce.domain.Rostering;
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringCopy;
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringScheme;
-import com.dingzhuo.energy.basic.data.workforce.service.IRosteringService;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-
-/**
- * 鎺掔彮琛ㄦ煡璇ontroller
- * 
- * @author liuli
- * @date 2020-05-13
- */
-@RestController
-@RequestMapping("/workforce/rosteringManagement")
-public class RosteringController extends BaseController
-{
-    @Autowired
-    private IRosteringService rosteringService;
-    /**
-     *鏌ヨ杞�兼柟妗堝悕绉伴泦鍚�
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:rosteringManagement:schemeNamelist')")
-    @GetMapping("/schemeNamelist")
-    public TableDataInfo schemeNamelist(Rostering rostering) {
-        startPage();
-        List<RosteringScheme> list = rosteringService.selectSchemeNameList();
-        return getDataTable(list);
-    }
-
-    /**
-     * 鏌ヨ鎺掔彮琛ㄦ煡璇㈠垪琛�
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:rosteringManagement:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(Rostering rostering)
-    {
-        startPage();
-        List<Rostering> list = rosteringService.selectRosteringList(rostering);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭鎺掔彮琛ㄦ煡璇㈠垪琛�
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:rosteringManagement:export')")
-    @Log(title = "鎺掔彮琛ㄦ煡璇�", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(Rostering rostering)
-    {
-        List<Rostering> list = rosteringService.selectRosteringList(rostering);
-        ExcelUtil<Rostering> util = new ExcelUtil<Rostering>(Rostering.class);
-        return util.exportExcel(list, "rosteringManagement");
-    }
-
-    /**
-     * 鑾峰彇鎺掔彮琛ㄦ煡璇㈣缁嗕俊鎭�
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:rosteringManagement:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(rosteringService.selectRosteringById(id));
-    }
-
-    /**
-     * 鏂板鎺掔彮琛ㄦ煡璇紙鐢熸垚锛�
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:rosteringManagement:add')")
-    @PostMapping
-    public AjaxResult add(@RequestBody Rostering rostering) throws ParseException {
-        //鏍规嵁杞�兼柟妗坕d鏌ヨ鐝id銆佸�兼id绛塴ist
-        List<RosteringCopy> list=rosteringService.selectList(rostering);
-        //璁剧疆杞崲鐨勬棩鏈熸牸寮�
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-        //寤轰竴涓柊鐨刲ist瀛樻斁insert鐨刲ist
-        List<Rostering> dataItems = new ArrayList<>();
-        //瀹氫箟涓�涓猚ount鏉ュ畬鎴恈ode锛堢紪鐮侊級鐨勮嚜澧�
-        int count=1;
-        //瀹氫箟浠庡墠鍙拌幏鍙栫殑寮�濮嬫椂闂� startdate涓哄紑濮嬫椂闂�
-        String startdate=sdf.format(rostering.getBeginTimes());
-       /* Long timenum =(rostering.getEndTimes().getTime()-rostering.getBeginTimes().getTime())/(60*60*24*1000);//鏃堕棿宸�*/
-        for(RosteringCopy b:list){
-            Date loopstarttime=sdf.parse(startdate);
-            long long3 =loopstarttime.getTime();
-            long long4= rostering.getEndTimes().getTime();
-            if(long3 > long4){//寰幆鍚庣殑鏃堕棿>浠庨〉闈㈣幏鍙栫殑缁撴潫鏃堕棿鍒欏仠姝㈠惊鐜�
-                break;
-            }else {
-                startdate=sdf.format(loopstarttime.getTime());
-                for (RosteringCopy a:list) {
-                    Rostering rosterings =new Rostering();
-                    rosterings.setId(UUID.randomUUID().toString());
-                    String code=String.valueOf(count);
-                    rosterings.setCode(code);
-                    rosterings.setName("鎺掔彮"+code);
-                    rosterings.setSchemeId(a.getSchemeId());
-                    rosterings.setShiftId(a.getShiftId());
-                    rosterings.setDutyId(a.getDutyId());
-                    rosterings.setDepartMemberId(rostering.getDepartMemberId());
-                    rosterings.setCreateBy(SecurityUtils.getUsername());
-                    rosterings.setCreateTime(DateUtils.getNowDate());
-                    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                    String bengintime=startdate +" "+a.getStartTime();//bengintime涓烘嫾鎺ュ畬鐨勫紑濮嬫椂闂�
-                    Date looptime=sdf.parse(startdate);//寰幆鍚庣殑寮�濮嬫椂闂�
-                    Date endtime =rostering.getEndTimes();//浠庡墠鍙拌幏鍙栫殑缁撴潫鏃堕棿
-                    long long1 =looptime.getTime();
-                    long long2= endtime.getTime();
-                    if(long1 > long2){//鑻ュ綋鍓嶆椂闂�>浠庡墠鍙拌幏鍙栫殑缁撴潫鏃堕棿鍒欑粨鏉熷惊鐜�
-                        break;
-                    }else {
-                        if(a.getIsCrossDay().equals("Y")) {//鏄惁璺ㄥぉ
-                            Date starttime = sdf.parse(startdate);
-                            Calendar calendar = Calendar.getInstance();
-                            calendar.setTime(starttime);
-                            calendar.add(Calendar.DAY_OF_MONTH, 1);
-                            Date looptimes=sdf.parse(startdate);//寰幆鍚庣殑寮�濮嬫椂闂�
-                            Date endtimes =rostering.getEndTimes();//浠庡墠鍙拌幏鍙栫殑缁撴潫鏃堕棿
-                            long long5 =looptime.getTime();
-                            long long6= endtime.getTime();
-                            Date beginTimes = df.parse(bengintime);
-                            String enddate=startdate+" "+a.getEnddTime();
-                            Date endTimes = df.parse(enddate);
-                            rosterings.setBeginTimes(beginTimes);
-                            rosterings.setEndTimes(endTimes);
-                            startdate=sdf.format(calendar.getTime());//缁欏紑濮嬫椂闂磋祴鍊艰法澶╁悗鐨勬椂闂�
-                        }else{
-                            Date beginTimes = df.parse(bengintime);
-                            String enddate=startdate+" "+a.getEnddTime();
-                            Date endTimes = df.parse(enddate);
-                            rosterings.setBeginTimes(beginTimes);
-                            rosterings.setEndTimes(endTimes);
-                        }
-                    }
-                    dataItems.add(rosterings);
-                    count ++;
-                }
-            }
-        }
-
-        this.rosteringService.saveRostering(dataItems);
-        return AjaxResult.success("淇濆瓨鎴愬姛锛�");
-    }
-
-    /**
-     * 淇敼鎺掔彮琛ㄦ煡璇�
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:rosteringManagement:edit')")
-    @Log(title = "鎺掔彮琛ㄦ煡璇�", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody Rostering rostering)
-    {
-        rostering.setUpdateBy(SecurityUtils.getUsername());
-        rostering.setUpdateTime(DateUtils.getNowDate());
-        return toAjax(rosteringService.updateRostering(rostering));
-    }
-
-    /**
-     * 鍒犻櫎鎺掔彮琛ㄦ煡璇�
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:rosteringManagement:remove')")
-    @Log(title = "鎺掔彮琛ㄦ煡璇�", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(rosteringService.deleteRosteringByIds(ids));
-    }
-    public static <E> List<List<E>> splitList(List<E> targetList, Integer splitSize) {
-        if (targetList == null) {
-            return new ArrayList<>();
-        }
-
-        int size = targetList.size();
-        List<List<E>> resultList = new ArrayList<>();
-        if (size <= splitSize) {
-            resultList.add(targetList);
-        } else {
-            for (int i = 0; i < size; i += splitSize) {
-                //鐢ㄤ簬闄愬埗鏈�鍚庝竴閮ㄥ垎size灏忎簬splitSize鐨刲ist
-                int limit = i + splitSize;
-                if (limit > size) {
-                    limit = size;
-                }
-                resultList.add(targetList.subList(i, limit));
-            }
-        }
-        return resultList;
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/controller/RosteringDutyController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/controller/RosteringDutyController.java
deleted file mode 100644
index fcdb684..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/controller/RosteringDutyController.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.controller;
-
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringDuty;
-import com.dingzhuo.energy.basic.data.workforce.service.IRosteringDutyService;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-import java.util.UUID;
-
-/**
- * 鎺掔彮绠$悊Controller
- * 
- * @author liuli
- * @date 2020-05-12
- */
-@RestController
-@RequestMapping("/workforce/dutyManagement")
-public class RosteringDutyController extends BaseController
-{
-    @Autowired
-    private IRosteringDutyService rosteringDutyService;
-
-    /**
-     * 鏌ヨ鎺掔彮绠$悊鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:dutyManagement:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(RosteringDuty rosteringDuty)
-    {
-        startPage();
-        List<RosteringDuty> list = rosteringDutyService.selectRosteringDutyList(rosteringDuty);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭鎺掔彮绠$悊鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:dutyManagement:export')")
-    @Log(title = "鎺掔彮绠$悊", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(RosteringDuty rosteringDuty)
-    {
-        List<RosteringDuty> list = rosteringDutyService.selectRosteringDutyList(rosteringDuty);
-        ExcelUtil<RosteringDuty> util = new ExcelUtil<RosteringDuty>(RosteringDuty.class);
-        return util.exportExcel(list, "dutyManagement");
-    }
-
-    /**
-     * 鑾峰彇鎺掔彮绠$悊璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:dutyManagement:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(rosteringDutyService.selectRosteringDutyById(id));
-    }
-
-    /**
-     * 鏂板鎺掔彮绠$悊
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:dutyManagement:add')")
-    @Log(title = "鎺掔彮绠$悊", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody RosteringDuty rosteringDuty)
-    {
-        rosteringDuty.setId(UUID.randomUUID().toString());
-        rosteringDuty.setCreateBy(SecurityUtils.getUsername());
-        rosteringDuty.setCreateTime(DateUtils.getNowDate());
-        return toAjax(rosteringDutyService.insertRosteringDuty(rosteringDuty));
-    }
-
-    /**
-     * 淇敼鎺掔彮绠$悊
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:dutyManagement:edit')")
-    @Log(title = "鎺掔彮绠$悊", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody RosteringDuty rosteringDuty)
-    {
-        rosteringDuty.setUpdateBy(SecurityUtils.getUsername());
-        rosteringDuty.setUpdateTime(DateUtils.getNowDate());
-        return toAjax(rosteringDutyService.updateRosteringDuty(rosteringDuty));
-    }
-
-    /**
-     * 鍒犻櫎鎺掔彮绠$悊
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:dutyManagement:remove')")
-    @Log(title = "鎺掔彮绠$悊", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(rosteringDutyService.deleteRosteringDutyByIds(ids));
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/controller/RosteringSchemeController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/controller/RosteringSchemeController.java
deleted file mode 100644
index f7f01a8..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/controller/RosteringSchemeController.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.controller;
-
-import java.util.List;
-import java.util.UUID;
-
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringScheme;
-import com.dingzhuo.energy.basic.data.workforce.service.IRosteringSchemeService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * 杞�兼柟妗圕ontroller
- * 
- * @author sys
- * @date 2020-05-12
- */
-@RestController
-@RequestMapping("/rosteringSrcheme/scheme")
-public class RosteringSchemeController extends BaseController
-{
-    @Autowired
-    private IRosteringSchemeService rosteringSchemeService;
-
-    /**
-     * 鏌ヨ杞�兼柟妗堝垪琛�
-     */
-    @PreAuthorize("@ss.hasPermi('rosteringSrcheme:scheme:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(RosteringScheme rosteringScheme)
-    {
-        startPage();
-        List<RosteringScheme> list = rosteringSchemeService.selectRosteringSchemeList(rosteringScheme);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭杞�兼柟妗堝垪琛�
-     */
-    @PreAuthorize("@ss.hasPermi('rosteringSrcheme:scheme:export')")
-    @Log(title = "杞�兼柟妗�", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(RosteringScheme rosteringScheme)
-    {
-        List<RosteringScheme> list = rosteringSchemeService.selectRosteringSchemeList(rosteringScheme);
-        ExcelUtil<RosteringScheme> util = new ExcelUtil<RosteringScheme>(RosteringScheme.class);
-        return util.exportExcel(list, "scheme");
-    }
-
-    /**
-     * 鑾峰彇杞�兼柟妗堣缁嗕俊鎭�
-     */
-    @PreAuthorize("@ss.hasPermi('rosteringSrcheme:scheme:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(rosteringSchemeService.selectRosteringSchemeById(id));
-    }
-
-    /**
-     * 鏂板杞�兼柟妗�
-     */
-    @PreAuthorize("@ss.hasPermi('rosteringSrcheme:scheme:add')")
-    @Log(title = "杞�兼柟妗�", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody RosteringScheme rosteringScheme)
-    {
-        rosteringScheme.setId(UUID.randomUUID().toString());
-        rosteringScheme.setCreateBy(SecurityUtils.getUsername());
-        rosteringScheme.setCreateTime(DateUtils.getNowDate());
-        return toAjax(rosteringSchemeService.insertRosteringScheme(rosteringScheme));
-    }
-
-    /**
-     * 淇敼杞�兼柟妗�
-     */
-    @PreAuthorize("@ss.hasPermi('rosteringSrcheme:scheme:edit')")
-    @Log(title = "杞�兼柟妗�", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody RosteringScheme rosteringScheme)
-    {
-        rosteringScheme.setUpdateBy(SecurityUtils.getUsername());
-        rosteringScheme.setUpdateTime(DateUtils.getNowDate());
-        return toAjax(rosteringSchemeService.updateRosteringScheme(rosteringScheme));
-    }
-
-    /**
-     * 鍒犻櫎杞�兼柟妗�
-     */
-    @PreAuthorize("@ss.hasPermi('rosteringSrcheme:scheme:remove')")
-    @Log(title = "杞�兼柟妗�", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(rosteringSchemeService.deleteRosteringSchemeByIds(ids));
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/controller/RosteringSchemeitemController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/controller/RosteringSchemeitemController.java
deleted file mode 100644
index fd86226..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/controller/RosteringSchemeitemController.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.controller;
-
-import java.util.List;
-import java.util.UUID;
-
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringSchemeitem;
-import com.dingzhuo.energy.basic.data.workforce.service.IRosteringSchemeitemService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * 杞�兼柟妗圕ontroller
- * 
- * @author sys
- * @date 2020-05-13
- */
-@RestController
-@RequestMapping("/rosteringSchemeitem/schemeItem")
-public class RosteringSchemeitemController extends BaseController
-{
-    @Autowired
-    private IRosteringSchemeitemService rosteringSchemeitemService;
-
-    /**
-     * 鏌ヨ杞�兼柟妗堝垪琛�
-     */
-    @PreAuthorize("@ss.hasPermi('rosteringSchemeitem:schemeItem:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(RosteringSchemeitem rosteringSchemeitem)
-    {
-        startPage();
-        List<RosteringSchemeitem> list = rosteringSchemeitemService.selectRosteringSchemeitemList(rosteringSchemeitem);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭杞�兼柟妗堝垪琛�
-     */
-    @PreAuthorize("@ss.hasPermi('rosteringSchemeitem:schemeItem:export')")
-    @Log(title = "杞�兼柟妗�", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(RosteringSchemeitem rosteringSchemeitem)
-    {
-        List<RosteringSchemeitem> list = rosteringSchemeitemService.selectRosteringSchemeitemList(rosteringSchemeitem);
-        ExcelUtil<RosteringSchemeitem> util = new ExcelUtil<RosteringSchemeitem>(RosteringSchemeitem.class);
-        return util.exportExcel(list, "schemeItem");
-    }
-
-    /**
-     * 鑾峰彇杞�兼柟妗堣缁嗕俊鎭�
-     */
-    @PreAuthorize("@ss.hasPermi('rosteringSchemeitem:schemeItem:query')")
-    @GetMapping(value = "/{description}")
-    public AjaxResult getInfo(@PathVariable("description") String description)
-    {
-        return AjaxResult.success(rosteringSchemeitemService.selectRosteringSchemeitemById(description));
-    }
-
-    /**
-     * 鏂板杞�兼柟妗�
-     */
-    @PreAuthorize("@ss.hasPermi('rosteringSchemeitem:schemeItem:add')")
-    @Log(title = "杞�兼柟妗�", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody RosteringSchemeitem rosteringSchemeitem)
-    {
-        rosteringSchemeitem.setId(UUID.randomUUID().toString());
-        rosteringSchemeitem.setCreateBy(SecurityUtils.getUsername());
-        rosteringSchemeitem.setCreateTime(DateUtils.getNowDate());
-        return toAjax(rosteringSchemeitemService.insertRosteringSchemeitem(rosteringSchemeitem));
-    }
-
-    /**
-     * 淇敼杞�兼柟妗�
-     */
-    @PreAuthorize("@ss.hasPermi('rosteringSchemeitem:schemeItem:edit')")
-    @Log(title = "杞�兼柟妗�", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody RosteringSchemeitem rosteringSchemeitem)
-    {
-        rosteringSchemeitem.setUpdateBy(SecurityUtils.getUsername());
-        rosteringSchemeitem.setUpdateTime(DateUtils.getNowDate());
-        return toAjax(rosteringSchemeitemService.updateRosteringSchemeitem(rosteringSchemeitem));
-    }
-
-    /**
-     * 鍒犻櫎杞�兼柟妗�
-     */
-    @PreAuthorize("@ss.hasPermi('rosteringSchemeitem:schemeItem:remove')")
-    @Log(title = "杞�兼柟妗�", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{descriptions}")
-    public AjaxResult remove(@PathVariable String[] descriptions)
-    {
-        return toAjax(rosteringSchemeitemService.deleteRosteringSchemeitemByIds(descriptions));
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/controller/RosteringShiftController.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/controller/RosteringShiftController.java
deleted file mode 100644
index 3a9e483..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/controller/RosteringShiftController.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.controller;
-
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringShift;
-import com.dingzhuo.energy.basic.data.workforce.service.IRosteringShiftService;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.system.domain.SysDept;
-import org.jetbrains.annotations.NotNull;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-import java.util.UUID;
-
-/**
- * 鎺掔彮绠$悊璁剧疆Controller
- * 
- * @author liuli
- * @date 2020-05-12
- */
-@RestController
-@RequestMapping("/workforce/shiftManagement")
-public class RosteringShiftController extends BaseController
-{
-    @Autowired
-    private IRosteringShiftService rosteringShiftService;
-
-    /**
-     * 鏌ヨ鎺掔彮绠$悊鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:shiftManagement:treeList')")
-    @GetMapping("/treeList")
-    public AjaxResult treeList(RosteringShift rosteringShift) {
-        List<SysDept> list = rosteringShiftService.treeList();
-        return AjaxResult.success(rosteringShiftService.buildModelNodeTree(list));
-    }
-
-    /**
-     * 鏌ヨ鎺掔彮绠$悊璁剧疆鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:shiftManagement:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(RosteringShift rosteringShift)
-    {
-        startPage();
-        List<RosteringShift> list = rosteringShiftService.selectRosteringShiftList(rosteringShift);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭鎺掔彮绠$悊璁剧疆鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:shiftManagement:export')")
-    @Log(title = "鎺掔彮绠$悊璁剧疆", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(RosteringShift rosteringShift)
-    {
-        List<RosteringShift> list = rosteringShiftService.selectRosteringShiftList(rosteringShift);
-        ExcelUtil<RosteringShift> util = new ExcelUtil<RosteringShift>(RosteringShift.class);
-        return util.exportExcel(list, "shiftManagement");
-    }
-
-    /**
-     * 鑾峰彇鎺掔彮绠$悊璁剧疆璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:shiftManagement:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(rosteringShiftService.selectRosteringShiftById(id));
-    }
-
-    /**
-     * 鏂板鎺掔彮绠$悊璁剧疆
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:shiftManagement:add')")
-    @Log(title = "鎺掔彮绠$悊璁剧疆", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@NotNull @RequestBody RosteringShift rosteringShift){
-        rosteringShift.setId(UUID.randomUUID().toString());
-        rosteringShift.setCreateBy(SecurityUtils.getUsername());
-        rosteringShift.setCreateTime(DateUtils.getNowDate());
-        return toAjax(rosteringShiftService.insertRosteringShift(rosteringShift));
-    }
-
-    /**
-     * 淇敼鎺掔彮绠$悊璁剧疆
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:shiftManagement:edit')")
-    @Log(title = "鎺掔彮绠$悊璁剧疆", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody RosteringShift rosteringShift)
-    {
-        rosteringShift.setUpdateBy(SecurityUtils.getUsername());
-        rosteringShift.setUpdateTime(DateUtils.getNowDate());
-        return toAjax(rosteringShiftService.updateRosteringShift(rosteringShift));
-    }
-
-    /**
-     * 鍒犻櫎鎺掔彮绠$悊璁剧疆
-     */
-    @PreAuthorize("@ss.hasPermi('workforce:shiftManagement:remove')")
-    @Log(title = "鎺掔彮绠$悊璁剧疆", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(rosteringShiftService.deleteRosteringShiftByIds(ids));
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/Rostering.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/Rostering.java
deleted file mode 100644
index ff7cde9..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/Rostering.java
+++ /dev/null
@@ -1,202 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-
-import java.util.Date;
-
-/**
- * 鎺掔彮琛ㄦ煡璇㈠璞� rostering
- * 
- * @author liuli
- * @date 2020-05-13
- */
-public class Rostering extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** id */
-    private String id;
-
-    /** 缂栫爜 */
-    @Excel(name = "缂栫爜")
-    private String code;
-
-    /** 鍚嶇О */
-    @Excel(name = "鍚嶇О")
-    private String name;
-
-    /** 杞�兼柟妗坕d */
-    @Excel(name = "杞�兼柟妗坕d")
-    private String schemeId;
-    /** 杞�兼柟妗坣ame */
-    @Excel(name = "杞�兼柟妗坣ame")
-    private String schemeName;
-
-    /** 鐝id */
-    @Excel(name = "鐝id")
-    private String shiftId;
-
-    /** 鐝 */
-    @Excel(name = "鐝")
-    private String shiftName;
-
-    /** 鍊兼id */
-    @Excel(name = "鍊兼id")
-    private String dutyId;
-
-    /** 鍊兼 */
-    @Excel(name = "鍊兼")
-    private String dutyName;
-
-    /** 鎻忚堪 */
-    @Excel(name = "鎻忚堪")
-    private String description;
-
-    /** 缁勭粐缁撴瀯Id */
-    @Excel(name = "缁勭粐缁撴瀯Id")
-    private Long departMemberId;
-
-    /** 缁勭粐缁撴瀯Name */
-    @Excel(name = "缁勭粐缁撴瀯Name")
-    private String deptName;
-
-    /** 寮�濮嬫椂闂� */
-    @Excel(name = "寮�濮嬫椂闂�",dateFormat = "yyyy-MM-dd")
-    private Date beginTimes;
-
-    /** 缁撴潫鏃堕棿 */
-    @Excel(name = "缁撴潫鏃堕棿",dateFormat = "yyyy-MM-dd")
-    private Date endTimes;
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-    public String getId() 
-    {
-        return id;
-    }
-
-    public void setCode(String code) 
-    {
-        this.code = code;
-    }
-    public String getCode() 
-    {
-        return code;
-    }
-
-    public void setName(String name) 
-    {
-        this.name = name;
-    }
-    public String getName() 
-    {
-        return name;
-    }
-
-    public void setSchemeId(String schemeId) 
-    {
-        this.schemeId = schemeId;
-    }
-    public String getSchemeId()
-    {
-        return schemeId;
-    }
-
-    public void setShiftId(String shiftId) 
-    {
-        this.shiftId = shiftId;
-    }
-    public String getShiftId() 
-    {
-        return shiftId;
-    }
-
-    public void setShiftName(String shiftName) 
-    {
-        this.shiftName = shiftName;
-    }
-    public String getShiftName() 
-    {
-        return shiftName;
-    }
-
-    public void setDutyId(String dutyId) 
-    {
-        this.dutyId = dutyId;
-    }
-    public String getDutyId() 
-    {
-        return dutyId;
-    }
-
-    public void setDutyName(String dutyName) 
-    {
-        this.dutyName = dutyName;
-    }
-    public String getDutyName() 
-    {
-        return dutyName;
-    }
-
-    public void setDescription(String description) 
-    {
-        this.description = description;
-    }
-    public String getDescription() 
-    {
-        return description;
-    }
-
-    public void setDepartMemberId(Long departMemberId)
-    {
-        this.departMemberId = departMemberId;
-    }
-    public Long getDepartMemberId() {
-        return departMemberId;
-    }
-
-    public Date getBeginTimes() { return beginTimes; }
-    public void setBeginTimes(Date beginTimes)
-    {
-        this.beginTimes = beginTimes;
-    }
-
-    public Date getEndTimes()
-    {
-        return endTimes;
-    }
-    public void setEndTimes(Date endTimes)
-    {
-        this.endTimes = endTimes;
-    }
-
-    public void setSchemeName(String schemeName) { this.schemeName = schemeName; }
-    public String getSchemeName() { return schemeName; }
-
-    public void setDeptName(String deptName) { this.deptName = deptName; }
-    public String getDeptName() { return deptName; }
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("code", getCode())
-            .append("name", getName())
-            .append("schemeId", getSchemeId())
-            .append("shiftId", getShiftId())
-            .append("shiftName", getShiftName())
-            .append("dutyId", getDutyId())
-            .append("dutyName", getDutyName())
-            .append("description", getDescription())
-            .append("departMemberId",getDepartMemberId())
-            .append("beginTimes",getBeginTimes())
-            .append("endTimes",getEndTimes())
-            .append("schemeName",getSchemeName())
-            .append("deptName",getDeptName())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/RosteringCopy.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/RosteringCopy.java
deleted file mode 100644
index c2cff0e..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/RosteringCopy.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-
-public class RosteringCopy extends BaseEntity {
-
-    private static final long serialVersionUID = 1L;
-
-    /** 缂栫爜 */
-    @Excel(name = "缂栫爜")
-    private String code;
-    /** 鍚嶇О */
-    @Excel(name = "鍚嶇О")
-    private String name;
-    /** 杞�兼柟妗坕d */
-    @Excel(name = "杞�兼柟妗坕d")
-    private String schemeId;
-    /** 鐝鍚嶇О */
-    @Excel(name = "鐝鍚嶇О")
-    private String shiftName;
-    /** 寮�濮嬫椂闂� */
-    @Excel(name = "寮�濮嬫椂闂�", width = 30)
-    private String startTime;
-    /** 缁撴潫鏃堕棿 */
-    @Excel(name = "缁撴潫鏃堕棿", width = 30)
-    private String enddTime;
-    /** 鏄惁璺ㄥぉ */
-    @Excel(name = "鏄惁璺ㄥぉ")
-    private String isCrossDay;
-    /** 鍊兼鍚嶇О */
-    @Excel(name = "鍊兼鍚嶇О")
-    private String dutyName;
-    /** 鐝id */
-    @Excel(name = "鐝id")
-    private String shiftId;
-    /** 鍊兼id */
-    @Excel(name = "鍊兼id")
-    private String dutyId;
-
-    public void setCode(String code)
-    {
-        this.code = code;
-    }
-    public String getCode()
-    {
-        return code;
-    }
-
-    public void setName(String name)
-    {
-        this.name = name;
-    }
-    public String getName()
-    {
-        return name;
-    }
-
-    public void setSchemeId(String schemeId)
-    {
-        this.schemeId = schemeId;
-    }
-    public String getSchemeId() { return schemeId; }
-
-    public void setShiftName(String shiftName) { this.shiftName = shiftName; }
-    public String getShiftName() { return shiftName; }
-
-    public void setStartTime(String startTime)
-    {
-        this.startTime = startTime;
-    }
-    public String getStartTime() { return startTime; }
-
-    public void setEnddTime(String enddTime)
-    {
-        this.enddTime = enddTime;
-    }
-    public String getEnddTime() { return enddTime; }
-
-    public void setIsCrossDay(String isCrossDay)
-    {
-        this.isCrossDay = isCrossDay;
-    }
-    public String getIsCrossDay()
-    {
-        return isCrossDay;
-    }
-
-    public void setDutyName(String dutyName) { this.dutyName = dutyName; }
-    public String getDutyName() { return dutyName; }
-
-    public void setShiftId(String shiftId)
-    {
-        this.shiftId = shiftId;
-    }
-    public String getShiftId()
-    {
-        return shiftId;
-    }
-    public void setDutyId(String dutyId)
-    {
-        this.dutyId = dutyId;
-    }
-    public String getDutyId()
-    {
-        return dutyId;
-    }
-    @Override
-    public String toString(){
-        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
-                .append("code",getCode())
-                .append("name",getName())
-                .append("schemeId",getSchemeId())
-                .append("shiftName",getShiftName())
-                .append("startTime",getStartTime())
-                .append("enddTime",getEnddTime())
-                .append("isCrossDay",getIsCrossDay())
-                .append("dutyName",getDutyName())
-                .append("shiftId", getShiftId())
-                .append("dutyId", getDutyId())
-                .toString();
-    }
-
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/RosteringDuty.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/RosteringDuty.java
deleted file mode 100644
index 58890ea..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/RosteringDuty.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-
-/**
- * 鎺掔彮绠$悊瀵硅薄 rostering_duty
- * 
- * @author liuli
- * @date 2020-05-12
- */
-public class RosteringDuty extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** id */
-    private String id;
-
-    /** 缂栧彿 */
-    @Excel(name = "缂栧彿")
-    private String code;
-
-    /** 鍊兼鍚嶇О */
-    @Excel(name = "鍊兼鍚嶇О")
-    private String name;
-
-    /** 缁勭粐缁撴瀯id */
-    @Excel(name = "缁勭粐缁撴瀯id")
-    private Long deptId;
-    private String deptName;
-
-    /** 椤哄簭鍙� */
-    @Excel(name = "椤哄簭鍙�")
-    private String orderNo;
-
-    /** 鎻忚堪 */
-    @Excel(name = "鎻忚堪")
-    private String description;
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-    public String getId() 
-    {
-        return id;
-    }
-
-    public void setCode(String code) 
-    {
-        this.code = code;
-    }
-    public String getCode() 
-    {
-        return code;
-    }
-
-    public void setName(String name) 
-    {
-        this.name = name;
-    }
-    public String getName() 
-    {
-        return name;
-    }
-
-    public void setDeptId(Long deptId)
-    {
-        this.deptId = deptId;
-    }
-    public Long getDeptId()
-    {
-        return deptId;
-    }
-
-    public void setDeptName(String deptName)
-    {
-        this.deptName = deptName;
-    }
-    public String getDeptName()
-    {
-        return deptName;
-    }
-
-    public void setOrderNo(String orderNo) 
-    {
-        this.orderNo = orderNo;
-    }
-
-    public String getOrderNo() 
-    {
-        return orderNo;
-    }
-    public void setDescription(String description) 
-    {
-        this.description = description;
-    }
-
-    public String getDescription() 
-    {
-        return description;
-    }
-
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("code", getCode())
-            .append("name", getName())
-            .append("deptId", getDeptId())
-            .append("deptName", getDeptName())
-            .append("orderNo", getOrderNo())
-            .append("description", getDescription())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/RosteringScheme.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/RosteringScheme.java
deleted file mode 100644
index e41e1f0..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/RosteringScheme.java
+++ /dev/null
@@ -1,143 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * 杞�兼柟妗堝璞� rostering_scheme
- * 
- * @author sys
- * @date 2020-05-12
- */
-public class RosteringScheme extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** $column.columnComment */
-    private String id;
-
-    /** 缂栫爜 */
-    @Excel(name = "缂栫爜")
-    private String code;
-
-    /** 鍚嶇О */
-    @Excel(name = "鍚嶇О")
-    private String name;
-
-    /** 缁勭粐缁撴瀯Id */
-    @Excel(name = "缁勭粐缁撴瀯Id")
-    private Long departMemberId;
-    private String departMember;
-    /** 杞�兼柟妗堢被鍨� */
-    @Excel(name = "杞�兼柟妗堢被鍨�")
-    private String rosteringschemekind;
-
-    /** 鍙傜収鏃ユ湡 */
-    @Excel(name = "鍙傜収鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date referencedate;
-
-    /** 鏄惁鑷姩鎺掔彮 */
-    @Excel(name = "鏄惁鑷姩鎺掔彮")
-    private String isautorostering;
-
-    /** 鎻忚堪 */
-    @Excel(name = "鎻忚堪")
-    private String description;
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setCode(String code) 
-    {
-        this.code = code;
-    }
-
-    public String getCode() 
-    {
-        return code;
-    }
-    public void setName(String name) 
-    {
-        this.name = name;
-    }
-
-    public String getName() 
-    {
-        return name;
-    }
-    public void setRosteringschemekind(String rosteringschemekind) 
-    {
-        this.rosteringschemekind = rosteringschemekind;
-    }
-
-    public String getRosteringschemekind() 
-    {
-        return rosteringschemekind;
-    }
-    public void setReferencedate(Date referencedate) 
-    {
-        this.referencedate = referencedate;
-    }
-
-    public Date getReferencedate() 
-    {
-        return referencedate;
-    }
-    public void setIsautorostering(String isautorostering)
-    {
-        this.isautorostering = isautorostering;
-    }
-
-    public String getIsautorostering()
-    {
-        return isautorostering;
-    }
-    public void setDescription(String description) 
-    {
-        this.description = description;
-    }
-
-    public String getDescription() 
-    {
-        return description;
-    }
-
-    public Long getDepartMemberId() {
-        return departMemberId;
-    }
-
-    public void setDepartMemberId(Long departMemberId) {
-        this.departMemberId = departMemberId;
-    }
-
-    public String getDepartMember() {
-        return departMember;
-    }
-
-    public void setDepartMember(String departMember) {
-        this.departMember = departMember;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("code", getCode())
-            .append("name", getName())
-            .append("departMemberId", getDepartMemberId())
-            .append("rosteringschemekind", getRosteringschemekind())
-            .append("referencedate", getReferencedate())
-            .append("isautorostering", getIsautorostering())
-            .append("description", getDescription())
-            .toString();
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/RosteringSchemeitem.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/RosteringSchemeitem.java
deleted file mode 100644
index ba43abd..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/RosteringSchemeitem.java
+++ /dev/null
@@ -1,168 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-
-/**
- * 杞�兼柟妗堝璞� rostering_schemeItem
- *
- * @author sys
- * @date 2020-05-13
- */
-
-/**
- * 銆愯濉啓鍔熻兘鍚嶇О銆戝璞� rostering_schemeItem
- *
- * @author sys
- * @date 2020-05-13
- */
-public class RosteringSchemeitem extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-    private String id;
-
-    /** 缂栫爜 */
-    @Excel(name = "缂栫爜")
-    private String code;
-
-    /** 鍚嶇О */
-    @Excel(name = "鍚嶇О")
-    private String name;
-
-    /** 杞�兼柟妗圛d */
-    @Excel(name = "杞�兼柟妗圛d")
-    private String schemeId;
-    private String schemeName;
-    /** 澶╂ */
-    @Excel(name = "澶╂")
-    private String dayofloopdays;
-
-    /** 鐝Id */
-    @Excel(name = "鐝Id")
-    private String shiftId;
-    private String shiftName;
-    /** 鍊兼Id */
-    @Excel(name = "鍊兼Id")
-    private String dutyId;
-    private String dutyName;
-    /** 鎻忚堪 */
-    @Excel(name = "鎻忚堪")
-    private String description;
-
-    public void setId(String id)
-    {
-        this.id = id;
-    }
-
-    public String getId()
-    {
-        return id;
-    }
-    public void setCode(String code)
-    {
-        this.code = code;
-    }
-
-    public String getCode()
-    {
-        return code;
-    }
-    public void setName(String name)
-    {
-        this.name = name;
-    }
-
-    public String getName()
-    {
-        return name;
-    }
-    public void setSchemeId(String schemeId)
-    {
-        this.schemeId = schemeId;
-    }
-
-    public String getSchemeId()
-    {
-        return schemeId;
-    }
-    public void setDayofloopdays(String dayofloopdays)
-    {
-        this.dayofloopdays = dayofloopdays;
-    }
-
-    public String getDayofloopdays()
-    {
-        return dayofloopdays;
-    }
-    public void setShiftId(String shiftId)
-    {
-        this.shiftId = shiftId;
-    }
-
-    public String getShiftId()
-    {
-        return shiftId;
-    }
-    public void setDutyId(String dutyId)
-    {
-        this.dutyId = dutyId;
-    }
-
-    public String getDutyId()
-    {
-        return dutyId;
-    }
-    public void setDescription(String description)
-    {
-        this.description = description;
-    }
-
-    public String getDescription()
-    {
-        return description;
-    }
-
-    public String getSchemeName() {
-        return schemeName;
-    }
-
-    public void setSchemeName(String schemeName) {
-        this.schemeName = schemeName;
-    }
-
-    public String getShiftName() {
-        return shiftName;
-    }
-
-    public void setShiftName(String shiftName) {
-        this.shiftName = shiftName;
-    }
-
-    public String getDutyName() {
-        return dutyName;
-    }
-
-    public void setDutyName(String dutyName) {
-        this.dutyName = dutyName;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-                .append("id", getId())
-                .append("code", getCode())
-                .append("name", getName())
-                .append("schemeId", getSchemeId())
-                .append("dayofloopdays", getDayofloopdays())
-                .append("shiftId", getShiftId())
-                .append("dutyId", getDutyId())
-                .append("description", getDescription())
-                .append("createBy", getCreateBy())
-                .append("createTime", getCreateTime())
-                .append("updateBy", getUpdateBy())
-                .append("updateTime", getUpdateTime())
-                .toString();
-    }
-}
\ No newline at end of file
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/RosteringShift.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/RosteringShift.java
deleted file mode 100644
index 7768fc3..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/RosteringShift.java
+++ /dev/null
@@ -1,165 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import com.dingzhuo.energy.project.system.domain.SysDept;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 鎺掔彮绠$悊璁剧疆瀵硅薄 rostering_shift
- * 
- * @author liuli
- * @date 2020-05-12
- */
-public class RosteringShift extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** id */
-    private String id;
-
-    /** 缂栧彿 */
-    @Excel(name = "缂栧彿")
-    private String code;
-
-    /** 鐝鍚嶇О */
-    @Excel(name = "鐝鍚嶇О")
-    private String name;
-
-    /** 缁勭粐缁撴瀯id锛堥儴闂╥d锛� */
-    @Excel(name = "缁勭粐缁撴瀯id")
-    private Long deptId;
-    private String deptName;
-    /** 寮�濮嬫椂闂� */
-    @Excel(name = "寮�濮嬫椂闂�", width = 30)
-    private String startTime;
-
-    /** 缁撴潫鏃堕棿 */
-    @Excel(name = "缁撴潫鏃堕棿", width = 30)
-    private String enddTime;
-
-    /** 鏄惁璺ㄥぉ */
-    @Excel(name = "鏄惁璺ㄥぉ")
-    private String isCrossDay;
-
-    /** 椤哄簭鍙� */
-    @Excel(name = "椤哄簭鍙�")
-    private String orderNo;
-
-    /** 鎻忚堪 */
-    @Excel(name = "鎻忚堪")
-    private String description;
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-    public String getId() 
-    {
-        return id;
-    }
-
-    public void setCode(String code) 
-    {
-        this.code = code;
-    }
-    public String getCode() 
-    {
-        return code;
-    }
-
-    public void setName(String name) 
-    {
-        this.name = name;
-    }
-    public String getName() 
-    {
-        return name;
-    }
-
-    public void setDeptId(Long deptId)
-    {
-        this.deptId = deptId;
-    }
-    public Long getDeptId()
-    {
-        return deptId;
-    }
-
-    public void setDeptName(String deptName)
-    {
-        this.deptName = deptName;
-    }
-    public String getDeptName()
-    {
-        return deptName;
-    }
-
-    public void setStartTime(String startTime)
-    {
-        this.startTime = startTime;
-    }
-    public String getStartTime() { return startTime; }
-
-    public void setEnddTime(String enddTime)
-    {
-        this.enddTime = enddTime;
-    }
-    public String getEnddTime() { return enddTime; }
-
-    public void setIsCrossDay(String isCrossDay) 
-    {
-        this.isCrossDay = isCrossDay;
-    }
-    public String getIsCrossDay() 
-    {
-        return isCrossDay;
-    }
-
-    public void setOrderNo(String orderNo) 
-    {
-        this.orderNo = orderNo;
-    }
-    public String getOrderNo() 
-    {
-        return orderNo;
-    }
-
-    public void setDescription(String description) 
-    {
-        this.description = description;
-    }
-    public String getDescription() 
-    {
-        return description;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("code", getCode())
-            .append("name", getName())
-            .append("deptId", getDeptId())
-            .append("startTime", getStartTime())
-            .append("enddTime", getEnddTime())
-            .append("isCrossDay", getIsCrossDay())
-            .append("orderNo", getOrderNo())
-            .append("description", getDescription())
-            .append("deptName", getDeptName())
-            .toString();
-    }
-    private List<SysDept> children = new ArrayList<SysDept>();
-
-    public List<SysDept> getChildren() {
-        return children;
-    }
-
-    public void setChildren(List<SysDept> children) {
-        this.children = children;
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/workForceTreeObject.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/workForceTreeObject.java
deleted file mode 100644
index 7148647..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/domain/workForceTreeObject.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.domain;
-
-import com.dingzhuo.energy.project.system.domain.SysDept;
-import com.fasterxml.jackson.annotation.JsonInclude;
-
-import java.io.Serializable;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * Treeselect鏍戠粨鏋勫疄浣撶被
- *
- * @author ruoyi
- */
-public class workForceTreeObject implements Serializable {
-  private static final long serialVersionUID = 1L;
-
-  /**
-   * 鑺傜偣ID
-   */
-  private Long id;
-
-  /**
-   * 鑺傜偣鍚嶇О
-   */
-  private String label;
-
-  /**
-   * 瀛愯妭鐐�
-   */
-  @JsonInclude(JsonInclude.Include.NON_EMPTY)
-  private List<workForceTreeObject> children;
-
-  public workForceTreeObject() {
-
-  }
-
-  public workForceTreeObject(SysDept sysDept) {
-    this.id = sysDept.getDeptId();
-    this.label = sysDept.getDeptName();
-    this.children = sysDept.getChildren().stream().map(workForceTreeObject::new).collect(Collectors.toList());
-  }
-
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public String getLabel() {
-    return label;
-  }
-
-  public void setLabel(String label) {
-    this.label = label;
-  }
-
-  public List<workForceTreeObject> getChildren() {
-    return children;
-  }
-
-  public void setChildren(List<workForceTreeObject> children) {
-    this.children = children;
-  }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/mapper/RosteringDutyMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/mapper/RosteringDutyMapper.java
deleted file mode 100644
index 41b9f97..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/mapper/RosteringDutyMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.mapper;
-
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringDuty;
-import java.util.List;
-
-/**
- * 鎺掔彮绠$悊Mapper鎺ュ彛
- * 
- * @author liuli
- * @date 2020-05-12
- */
-public interface RosteringDutyMapper 
-{
-    /**
-     * 鏌ヨ鎺掔彮绠$悊
-     * 
-     * @param id 鎺掔彮绠$悊ID
-     * @return 鎺掔彮绠$悊
-     */
-    public RosteringDuty selectRosteringDutyById(String id);
-
-    /**
-     * 鏌ヨ鎺掔彮绠$悊鍒楄〃
-     * 
-     * @param rosteringDuty 鎺掔彮绠$悊
-     * @return 鎺掔彮绠$悊闆嗗悎
-     */
-    public List<RosteringDuty> selectRosteringDutyList(RosteringDuty rosteringDuty);
-
-    /**
-     * 鏂板鎺掔彮绠$悊
-     * 
-     * @param rosteringDuty 鎺掔彮绠$悊
-     * @return 缁撴灉
-     */
-    public int insertRosteringDuty(RosteringDuty rosteringDuty);
-
-    /**
-     * 淇敼鎺掔彮绠$悊
-     * 
-     * @param rosteringDuty 鎺掔彮绠$悊
-     * @return 缁撴灉
-     */
-    public int updateRosteringDuty(RosteringDuty rosteringDuty);
-
-    /**
-     * 鍒犻櫎鎺掔彮绠$悊
-     * 
-     * @param id 鎺掔彮绠$悊ID
-     * @return 缁撴灉
-     */
-    public int deleteRosteringDutyById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎鎺掔彮绠$悊
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteRosteringDutyByIds(String[] ids);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/mapper/RosteringMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/mapper/RosteringMapper.java
deleted file mode 100644
index 0eb7464..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/mapper/RosteringMapper.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.mapper;
-
-import com.dingzhuo.energy.basic.data.workforce.domain.Rostering;
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringCopy;
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringScheme;
-
-import java.util.List;
-
-/**
- * 鎺掔彮琛ㄦ煡璇apper鎺ュ彛
- * 
- * @author liuli
- * @date 2020-05-13
- */
-public interface RosteringMapper 
-{
-    /**
-     * 鏌ヨ杞�兼柟妗堝垪琛�
-     * @return 杞�兼柟妗堝悕绉版煡璇㈤泦鍚�
-     */
-    public List<RosteringScheme> selectSchemeNameList();
-
-    /**
-     * 鏌ヨ鎺掔彮琛ㄦ煡璇�
-     * 
-     * @param id 鎺掔彮琛ㄦ煡璇D
-     * @return 鎺掔彮琛ㄦ煡璇�
-     */
-    public Rostering selectRosteringById(String id);
-
-    /**
-     * 鏌ヨ鎺掔彮琛ㄦ煡璇㈠垪琛�
-     * 
-     * @param rostering 鎺掔彮琛ㄦ煡璇�
-     * @return 鎺掔彮琛ㄦ煡璇㈤泦鍚�
-     */
-    public List<Rostering> selectRosteringList(Rostering rostering);
-
-    public List<RosteringCopy> selectList(Rostering rostering);
-    /**
-     * 鏂板鎺掔彮琛ㄦ煡璇�
-     * 
-     * @param rostering 鎺掔彮琛ㄦ煡璇�
-     * @return 缁撴灉
-     */
-    public int insertRostering(Rostering rostering);
-    public void saveRostering( List<Rostering> dataItems);
-    /**
-     * 淇敼鎺掔彮琛ㄦ煡璇�
-     * 
-     * @param rostering 鎺掔彮琛ㄦ煡璇�
-     * @return 缁撴灉
-     */
-    public int updateRostering(Rostering rostering);
-
-    /**
-     * 鍒犻櫎鎺掔彮琛ㄦ煡璇�
-     * 
-     * @param id 鎺掔彮琛ㄦ煡璇D
-     * @return 缁撴灉
-     */
-    public int deleteRosteringById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎鎺掔彮琛ㄦ煡璇�
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteRosteringByIds(String[] ids);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/mapper/RosteringSchemeMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/mapper/RosteringSchemeMapper.java
deleted file mode 100644
index 5d6917c..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/mapper/RosteringSchemeMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.mapper;
-
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringScheme;
-import java.util.List;
-
-/**
- * 杞�兼柟妗圡apper鎺ュ彛
- * 
- * @author sys
- * @date 2020-05-12
- */
-public interface RosteringSchemeMapper 
-{
-    /**
-     * 鏌ヨ杞�兼柟妗�
-     * 
-     * @param id 杞�兼柟妗圛D
-     * @return 杞�兼柟妗�
-     */
-    public RosteringScheme selectRosteringSchemeById(String id);
-
-    /**
-     * 鏌ヨ杞�兼柟妗堝垪琛�
-     * 
-     * @param rosteringScheme 杞�兼柟妗�
-     * @return 杞�兼柟妗堥泦鍚�
-     */
-    public List<RosteringScheme> selectRosteringSchemeList(RosteringScheme rosteringScheme);
-
-    /**
-     * 鏂板杞�兼柟妗�
-     * 
-     * @param rosteringScheme 杞�兼柟妗�
-     * @return 缁撴灉
-     */
-    public int insertRosteringScheme(RosteringScheme rosteringScheme);
-
-    /**
-     * 淇敼杞�兼柟妗�
-     * 
-     * @param rosteringScheme 杞�兼柟妗�
-     * @return 缁撴灉
-     */
-    public int updateRosteringScheme(RosteringScheme rosteringScheme);
-
-    /**
-     * 鍒犻櫎杞�兼柟妗�
-     * 
-     * @param id 杞�兼柟妗圛D
-     * @return 缁撴灉
-     */
-    public int deleteRosteringSchemeById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎杞�兼柟妗�
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteRosteringSchemeByIds(String[] ids);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/mapper/RosteringSchemeitemMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/mapper/RosteringSchemeitemMapper.java
deleted file mode 100644
index aff7e03..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/mapper/RosteringSchemeitemMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.mapper;
-
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringSchemeitem;
-import java.util.List;
-
-/**
- * 杞�兼柟妗圡apper鎺ュ彛
- * 
- * @author sys
- * @date 2020-05-13
- */
-public interface RosteringSchemeitemMapper 
-{
-    /**
-     * 鏌ヨ杞�兼柟妗�
-     * 
-     * @param description 杞�兼柟妗圛D
-     * @return 杞�兼柟妗�
-     */
-    public RosteringSchemeitem selectRosteringSchemeitemById(String description);
-
-    /**
-     * 鏌ヨ杞�兼柟妗堝垪琛�
-     * 
-     * @param rosteringSchemeitem 杞�兼柟妗�
-     * @return 杞�兼柟妗堥泦鍚�
-     */
-    public List<RosteringSchemeitem> selectRosteringSchemeitemList(RosteringSchemeitem rosteringSchemeitem);
-
-    /**
-     * 鏂板杞�兼柟妗�
-     * 
-     * @param rosteringSchemeitem 杞�兼柟妗�
-     * @return 缁撴灉
-     */
-    public int insertRosteringSchemeitem(RosteringSchemeitem rosteringSchemeitem);
-
-    /**
-     * 淇敼杞�兼柟妗�
-     * 
-     * @param rosteringSchemeitem 杞�兼柟妗�
-     * @return 缁撴灉
-     */
-    public int updateRosteringSchemeitem(RosteringSchemeitem rosteringSchemeitem);
-
-    /**
-     * 鍒犻櫎杞�兼柟妗�
-     * 
-     * @param description 杞�兼柟妗圛D
-     * @return 缁撴灉
-     */
-    public int deleteRosteringSchemeitemById(String description);
-
-    /**
-     * 鎵归噺鍒犻櫎杞�兼柟妗�
-     * 
-     * @param descriptions 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteRosteringSchemeitemByIds(String[] descriptions);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/mapper/RosteringShiftMapper.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/mapper/RosteringShiftMapper.java
deleted file mode 100644
index e6b9478..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/mapper/RosteringShiftMapper.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.mapper;
-
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringShift;
-import com.dingzhuo.energy.project.system.domain.SysDept;
-
-import java.util.List;
-
-/**
- * 鎺掔彮绠$悊璁剧疆Mapper鎺ュ彛
- * 
- * @author liuli
- * @date 2020-05-12
- */
-public interface RosteringShiftMapper 
-{
-    public List<SysDept> treeList();
-    /**
-     * 鏌ヨ鎺掔彮绠$悊璁剧疆
-     * 
-     * @param id 鎺掔彮绠$悊璁剧疆ID
-     * @return 鎺掔彮绠$悊璁剧疆
-     */
-    public RosteringShift selectRosteringShiftById(String id);
-
-    /**
-     * 鏌ヨ鎺掔彮绠$悊璁剧疆鍒楄〃
-     * 
-     * @param rosteringShift 鎺掔彮绠$悊璁剧疆
-     * @return 鎺掔彮绠$悊璁剧疆闆嗗悎
-     */
-    public List<RosteringShift> selectRosteringShiftList(RosteringShift rosteringShift);
-
-    /**
-     * 鏂板鎺掔彮绠$悊璁剧疆
-     * 
-     * @param rosteringShift 鎺掔彮绠$悊璁剧疆
-     * @return 缁撴灉
-     */
-    public int insertRosteringShift(RosteringShift rosteringShift);
-
-    /**
-     * 淇敼鎺掔彮绠$悊璁剧疆
-     * 
-     * @param rosteringShift 鎺掔彮绠$悊璁剧疆
-     * @return 缁撴灉
-     */
-    public int updateRosteringShift(RosteringShift rosteringShift);
-
-    /**
-     * 鍒犻櫎鎺掔彮绠$悊璁剧疆
-     * 
-     * @param id 鎺掔彮绠$悊璁剧疆ID
-     * @return 缁撴灉
-     */
-    public int deleteRosteringShiftById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎鎺掔彮绠$悊璁剧疆
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteRosteringShiftByIds(String[] ids);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/IRosteringDutyService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/IRosteringDutyService.java
deleted file mode 100644
index ceea57b..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/IRosteringDutyService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.service;
-
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringDuty;
-import java.util.List;
-
-/**
- * 鎺掔彮绠$悊Service鎺ュ彛
- * 
- * @author liuli
- * @date 2020-05-12
- */
-public interface IRosteringDutyService 
-{
-    /**
-     * 鏌ヨ鎺掔彮绠$悊
-     * 
-     * @param id 鎺掔彮绠$悊ID
-     * @return 鎺掔彮绠$悊
-     */
-    public RosteringDuty selectRosteringDutyById(String id);
-
-    /**
-     * 鏌ヨ鎺掔彮绠$悊鍒楄〃
-     * 
-     * @param rosteringDuty 鎺掔彮绠$悊
-     * @return 鎺掔彮绠$悊闆嗗悎
-     */
-    public List<RosteringDuty> selectRosteringDutyList(RosteringDuty rosteringDuty);
-
-    /**
-     * 鏂板鎺掔彮绠$悊
-     * 
-     * @param rosteringDuty 鎺掔彮绠$悊
-     * @return 缁撴灉
-     */
-    public int insertRosteringDuty(RosteringDuty rosteringDuty);
-
-    /**
-     * 淇敼鎺掔彮绠$悊
-     * 
-     * @param rosteringDuty 鎺掔彮绠$悊
-     * @return 缁撴灉
-     */
-    public int updateRosteringDuty(RosteringDuty rosteringDuty);
-
-    /**
-     * 鎵归噺鍒犻櫎鎺掔彮绠$悊
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鎺掔彮绠$悊ID
-     * @return 缁撴灉
-     */
-    public int deleteRosteringDutyByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎鎺掔彮绠$悊淇℃伅
-     * 
-     * @param id 鎺掔彮绠$悊ID
-     * @return 缁撴灉
-     */
-    public int deleteRosteringDutyById(String id);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/IRosteringSchemeService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/IRosteringSchemeService.java
deleted file mode 100644
index 1223d25..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/IRosteringSchemeService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.service;
-
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringScheme;
-import java.util.List;
-
-/**
- * 杞�兼柟妗圫ervice鎺ュ彛
- * 
- * @author sys
- * @date 2020-05-12
- */
-public interface IRosteringSchemeService 
-{
-    /**
-     * 鏌ヨ杞�兼柟妗�
-     * 
-     * @param id 杞�兼柟妗圛D
-     * @return 杞�兼柟妗�
-     */
-    public RosteringScheme selectRosteringSchemeById(String id);
-
-    /**
-     * 鏌ヨ杞�兼柟妗堝垪琛�
-     * 
-     * @param rosteringScheme 杞�兼柟妗�
-     * @return 杞�兼柟妗堥泦鍚�
-     */
-    public List<RosteringScheme> selectRosteringSchemeList(RosteringScheme rosteringScheme);
-
-    /**
-     * 鏂板杞�兼柟妗�
-     * 
-     * @param rosteringScheme 杞�兼柟妗�
-     * @return 缁撴灉
-     */
-    public int insertRosteringScheme(RosteringScheme rosteringScheme);
-
-    /**
-     * 淇敼杞�兼柟妗�
-     * 
-     * @param rosteringScheme 杞�兼柟妗�
-     * @return 缁撴灉
-     */
-    public int updateRosteringScheme(RosteringScheme rosteringScheme);
-
-    /**
-     * 鎵归噺鍒犻櫎杞�兼柟妗�
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑杞�兼柟妗圛D
-     * @return 缁撴灉
-     */
-    public int deleteRosteringSchemeByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎杞�兼柟妗堜俊鎭�
-     * 
-     * @param id 杞�兼柟妗圛D
-     * @return 缁撴灉
-     */
-    public int deleteRosteringSchemeById(String id);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/IRosteringSchemeitemService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/IRosteringSchemeitemService.java
deleted file mode 100644
index 9d8bbc6..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/IRosteringSchemeitemService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.service;
-
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringSchemeitem;
-import java.util.List;
-
-/**
- * 杞�兼柟妗圫ervice鎺ュ彛
- * 
- * @author sys
- * @date 2020-05-13
- */
-public interface IRosteringSchemeitemService 
-{
-    /**
-     * 鏌ヨ杞�兼柟妗�
-     * 
-     * @param description 杞�兼柟妗圛D
-     * @return 杞�兼柟妗�
-     */
-    public RosteringSchemeitem selectRosteringSchemeitemById(String description);
-
-    /**
-     * 鏌ヨ杞�兼柟妗堝垪琛�
-     * 
-     * @param rosteringSchemeitem 杞�兼柟妗�
-     * @return 杞�兼柟妗堥泦鍚�
-     */
-    public List<RosteringSchemeitem> selectRosteringSchemeitemList(RosteringSchemeitem rosteringSchemeitem);
-
-    /**
-     * 鏂板杞�兼柟妗�
-     * 
-     * @param rosteringSchemeitem 杞�兼柟妗�
-     * @return 缁撴灉
-     */
-    public int insertRosteringSchemeitem(RosteringSchemeitem rosteringSchemeitem);
-
-    /**
-     * 淇敼杞�兼柟妗�
-     * 
-     * @param rosteringSchemeitem 杞�兼柟妗�
-     * @return 缁撴灉
-     */
-    public int updateRosteringSchemeitem(RosteringSchemeitem rosteringSchemeitem);
-
-    /**
-     * 鎵归噺鍒犻櫎杞�兼柟妗�
-     * 
-     * @param descriptions 闇�瑕佸垹闄ょ殑杞�兼柟妗圛D
-     * @return 缁撴灉
-     */
-    public int deleteRosteringSchemeitemByIds(String[] descriptions);
-
-    /**
-     * 鍒犻櫎杞�兼柟妗堜俊鎭�
-     * 
-     * @param description 杞�兼柟妗圛D
-     * @return 缁撴灉
-     */
-    public int deleteRosteringSchemeitemById(String description);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/IRosteringService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/IRosteringService.java
deleted file mode 100644
index 1691ea5..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/IRosteringService.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.service;
-
-import com.dingzhuo.energy.basic.data.workforce.domain.Rostering;
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringCopy;
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringScheme;
-
-import java.util.List;
-
-/**
- * 鎺掔彮琛ㄦ煡璇ervice鎺ュ彛
- * 
- * @author liuli
- * @date 2020-05-13
- */
-public interface IRosteringService 
-{
-    /**
-     * 鏌ヨ杞�兼柟妗堝悕绉�
-     * @return 杞�兼柟妗堝悕绉伴泦鍚�
-     */
-    public List<RosteringScheme> selectSchemeNameList();
-    /**
-     * 鏌ヨ鎺掔彮琛ㄦ煡璇�
-     * 
-     * @param id 鎺掔彮琛ㄦ煡璇D
-     * @return 鎺掔彮琛ㄦ煡璇�
-     */
-    public Rostering selectRosteringById(String id);
-
-    /**
-     * 鏌ヨ鎺掔彮琛ㄦ煡璇㈠垪琛�
-     * 
-     * @param rostering 鎺掔彮琛ㄦ煡璇�
-     * @return 鎺掔彮琛ㄦ煡璇㈤泦鍚�
-     */
-    public List<Rostering> selectRosteringList(Rostering rostering);
-
-    /**
-     *
-     * @return
-     */
-    public List<RosteringCopy> selectList(Rostering rostering);
-    /**
-     * 鏂板鎺掔彮琛ㄦ煡璇�
-
-     * @return 缁撴灉
-     */
-    public int insertRostering(Rostering rostering );
-    public void saveRostering(List<Rostering> dataItems);
-
-    /**
-     * 淇敼鎺掔彮琛ㄦ煡璇�
-     * 
-     * @param rostering 鎺掔彮琛ㄦ煡璇�
-     * @return 缁撴灉
-     */
-    public int updateRostering(Rostering rostering);
-
-    /**
-     * 鎵归噺鍒犻櫎鎺掔彮琛ㄦ煡璇�
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鎺掔彮琛ㄦ煡璇D
-     * @return 缁撴灉
-     */
-    public int deleteRosteringByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎鎺掔彮琛ㄦ煡璇俊鎭�
-     * 
-     * @param id 鎺掔彮琛ㄦ煡璇D
-     * @return 缁撴灉
-     */
-    public int deleteRosteringById(String id);
-
-
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/IRosteringShiftService.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/IRosteringShiftService.java
deleted file mode 100644
index 40b25de..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/IRosteringShiftService.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.service;
-
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringShift;
-import com.dingzhuo.energy.basic.data.workforce.domain.workForceTreeObject;
-import com.dingzhuo.energy.project.system.domain.SysDept;
-
-import java.util.List;
-
-/**
- * 鎺掔彮绠$悊璁剧疆Service鎺ュ彛
- * 
- * @author liuli
- * @date 2020-05-12
- */
-public interface IRosteringShiftService 
-{
-    public List<SysDept> treeList();
-    public List<workForceTreeObject> buildModelNodeTree(List<SysDept> modelNodes);
-    /**
-     * 鏌ヨ鎺掔彮绠$悊璁剧疆
-     * 
-     * @param id 鎺掔彮绠$悊璁剧疆ID
-     * @return 鎺掔彮绠$悊璁剧疆
-     */
-    public RosteringShift selectRosteringShiftById(String id);
-
-    /**
-     * 鏌ヨ鎺掔彮绠$悊璁剧疆鍒楄〃
-     * 
-     * @param rosteringShift 鎺掔彮绠$悊璁剧疆
-     * @return 鎺掔彮绠$悊璁剧疆闆嗗悎
-     */
-    public List<RosteringShift> selectRosteringShiftList(RosteringShift rosteringShift);
-
-    /**
-     * 鏂板鎺掔彮绠$悊璁剧疆
-     * 
-     * @param rosteringShift 鎺掔彮绠$悊璁剧疆
-     * @return 缁撴灉
-     */
-    public int insertRosteringShift(RosteringShift rosteringShift);
-
-    /**
-     * 淇敼鎺掔彮绠$悊璁剧疆
-     * 
-     * @param rosteringShift 鎺掔彮绠$悊璁剧疆
-     * @return 缁撴灉
-     */
-    public int updateRosteringShift(RosteringShift rosteringShift);
-
-    /**
-     * 鎵归噺鍒犻櫎鎺掔彮绠$悊璁剧疆
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鎺掔彮绠$悊璁剧疆ID
-     * @return 缁撴灉
-     */
-    public int deleteRosteringShiftByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎鎺掔彮绠$悊璁剧疆淇℃伅
-     * 
-     * @param id 鎺掔彮绠$悊璁剧疆ID
-     * @return 缁撴灉
-     */
-    public int deleteRosteringShiftById(String id);
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/impl/RosteringDutyServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/impl/RosteringDutyServiceImpl.java
deleted file mode 100644
index 6178baf..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/impl/RosteringDutyServiceImpl.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.service.impl;
-
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringDuty;
-import com.dingzhuo.energy.basic.data.workforce.mapper.RosteringDutyMapper;
-import com.dingzhuo.energy.basic.data.workforce.service.IRosteringDutyService;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * 鎺掔彮绠$悊Service涓氬姟灞傚鐞�
- * 
- * @author liuli
- * @date 2020-05-12
- */
-@Service
-public class RosteringDutyServiceImpl implements IRosteringDutyService 
-{
-    @Autowired
-    private RosteringDutyMapper rosteringDutyMapper;
-
-    /**
-     * 鏌ヨ鎺掔彮绠$悊
-     * 
-     * @param id 鎺掔彮绠$悊ID
-     * @return 鎺掔彮绠$悊
-     */
-    @Override
-    public RosteringDuty selectRosteringDutyById(String id)
-    {
-        return rosteringDutyMapper.selectRosteringDutyById(id);
-    }
-
-    /**
-     * 鏌ヨ鎺掔彮绠$悊鍒楄〃
-     * 
-     * @param rosteringDuty 鎺掔彮绠$悊
-     * @return 鎺掔彮绠$悊
-     */
-    @Override
-    public List<RosteringDuty> selectRosteringDutyList(RosteringDuty rosteringDuty)
-    {
-        return rosteringDutyMapper.selectRosteringDutyList(rosteringDuty);
-    }
-
-    /**
-     * 鏂板鎺掔彮绠$悊
-     * 
-     * @param rosteringDuty 鎺掔彮绠$悊
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertRosteringDuty(RosteringDuty rosteringDuty)
-    {
-        return rosteringDutyMapper.insertRosteringDuty(rosteringDuty);
-    }
-
-    /**
-     * 淇敼鎺掔彮绠$悊
-     * 
-     * @param rosteringDuty 鎺掔彮绠$悊
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateRosteringDuty(RosteringDuty rosteringDuty)
-    {
-        rosteringDuty.setUpdateTime(DateUtils.getNowDate());
-        return rosteringDutyMapper.updateRosteringDuty(rosteringDuty);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鎺掔彮绠$悊
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鎺掔彮绠$悊ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteRosteringDutyByIds(String[] ids)
-    {
-        return rosteringDutyMapper.deleteRosteringDutyByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎鎺掔彮绠$悊淇℃伅
-     * 
-     * @param id 鎺掔彮绠$悊ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteRosteringDutyById(String id)
-    {
-        return rosteringDutyMapper.deleteRosteringDutyById(id);
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/impl/RosteringSchemeServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/impl/RosteringSchemeServiceImpl.java
deleted file mode 100644
index cf04f64..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/impl/RosteringSchemeServiceImpl.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.service.impl;
-
-import java.util.List;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.basic.data.workforce.mapper.RosteringSchemeMapper;
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringScheme;
-import com.dingzhuo.energy.basic.data.workforce.service.IRosteringSchemeService;
-
-/**
- * 杞�兼柟妗圫ervice涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-05-12
- */
-@Service
-public class RosteringSchemeServiceImpl implements IRosteringSchemeService 
-{
-    @Autowired
-    private RosteringSchemeMapper rosteringSchemeMapper;
-
-    /**
-     * 鏌ヨ杞�兼柟妗�
-     * 
-     * @param id 杞�兼柟妗圛D
-     * @return 杞�兼柟妗�
-     */
-    @Override
-    public RosteringScheme selectRosteringSchemeById(String id)
-    {
-        return rosteringSchemeMapper.selectRosteringSchemeById(id);
-    }
-
-    /**
-     * 鏌ヨ杞�兼柟妗堝垪琛�
-     * 
-     * @param rosteringScheme 杞�兼柟妗�
-     * @return 杞�兼柟妗�
-     */
-    @Override
-    public List<RosteringScheme> selectRosteringSchemeList(RosteringScheme rosteringScheme)
-    {
-        return rosteringSchemeMapper.selectRosteringSchemeList(rosteringScheme);
-    }
-
-    /**
-     * 鏂板杞�兼柟妗�
-     * 
-     * @param rosteringScheme 杞�兼柟妗�
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertRosteringScheme(RosteringScheme rosteringScheme)
-    {
-        return rosteringSchemeMapper.insertRosteringScheme(rosteringScheme);
-    }
-
-    /**
-     * 淇敼杞�兼柟妗�
-     * 
-     * @param rosteringScheme 杞�兼柟妗�
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateRosteringScheme(RosteringScheme rosteringScheme)
-    {
-        rosteringScheme.setUpdateTime(DateUtils.getNowDate());
-        return rosteringSchemeMapper.updateRosteringScheme(rosteringScheme);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎杞�兼柟妗�
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑杞�兼柟妗圛D
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteRosteringSchemeByIds(String[] ids)
-    {
-        return rosteringSchemeMapper.deleteRosteringSchemeByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎杞�兼柟妗堜俊鎭�
-     * 
-     * @param id 杞�兼柟妗圛D
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteRosteringSchemeById(String id)
-    {
-        return rosteringSchemeMapper.deleteRosteringSchemeById(id);
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/impl/RosteringSchemeitemServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/impl/RosteringSchemeitemServiceImpl.java
deleted file mode 100644
index acc05b3..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/impl/RosteringSchemeitemServiceImpl.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.service.impl;
-
-import java.util.List;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.basic.data.workforce.mapper.RosteringSchemeitemMapper;
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringSchemeitem;
-import com.dingzhuo.energy.basic.data.workforce.service.IRosteringSchemeitemService;
-
-/**
- * 杞�兼柟妗圫ervice涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-05-13
- */
-@Service
-public class RosteringSchemeitemServiceImpl implements IRosteringSchemeitemService 
-{
-    @Autowired
-    private RosteringSchemeitemMapper rosteringSchemeitemMapper;
-
-    /**
-     * 鏌ヨ杞�兼柟妗�
-     * 
-     * @param description 杞�兼柟妗圛D
-     * @return 杞�兼柟妗�
-     */
-    @Override
-    public RosteringSchemeitem selectRosteringSchemeitemById(String description)
-    {
-        return rosteringSchemeitemMapper.selectRosteringSchemeitemById(description);
-    }
-
-    /**
-     * 鏌ヨ杞�兼柟妗堝垪琛�
-     * 
-     * @param rosteringSchemeitem 杞�兼柟妗�
-     * @return 杞�兼柟妗�
-     */
-    @Override
-    public List<RosteringSchemeitem> selectRosteringSchemeitemList(RosteringSchemeitem rosteringSchemeitem)
-    {
-        return rosteringSchemeitemMapper.selectRosteringSchemeitemList(rosteringSchemeitem);
-    }
-
-    /**
-     * 鏂板杞�兼柟妗�
-     * 
-     * @param rosteringSchemeitem 杞�兼柟妗�
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertRosteringSchemeitem(RosteringSchemeitem rosteringSchemeitem)
-    {
-        return rosteringSchemeitemMapper.insertRosteringSchemeitem(rosteringSchemeitem);
-    }
-
-    /**
-     * 淇敼杞�兼柟妗�
-     * 
-     * @param rosteringSchemeitem 杞�兼柟妗�
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateRosteringSchemeitem(RosteringSchemeitem rosteringSchemeitem)
-    {
-        rosteringSchemeitem.setUpdateTime(DateUtils.getNowDate());
-        return rosteringSchemeitemMapper.updateRosteringSchemeitem(rosteringSchemeitem);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎杞�兼柟妗�
-     * 
-     * @param descriptions 闇�瑕佸垹闄ょ殑杞�兼柟妗圛D
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteRosteringSchemeitemByIds(String[] descriptions)
-    {
-        return rosteringSchemeitemMapper.deleteRosteringSchemeitemByIds(descriptions);
-    }
-
-    /**
-     * 鍒犻櫎杞�兼柟妗堜俊鎭�
-     * 
-     * @param description 杞�兼柟妗圛D
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteRosteringSchemeitemById(String description)
-    {
-        return rosteringSchemeitemMapper.deleteRosteringSchemeitemById(description);
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/impl/RosteringServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/impl/RosteringServiceImpl.java
deleted file mode 100644
index 5c058f3..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/impl/RosteringServiceImpl.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.service.impl;
-
-import com.dingzhuo.energy.basic.data.workforce.domain.Rostering;
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringCopy;
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringScheme;
-import com.dingzhuo.energy.basic.data.workforce.mapper.RosteringMapper;
-import com.dingzhuo.energy.basic.data.workforce.service.IRosteringService;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * 鎺掔彮琛ㄦ煡璇ervice涓氬姟灞傚鐞�
- * 
- * @author liuli
- * @date 2020-05-13
- */
-@Service
-public class RosteringServiceImpl implements IRosteringService 
-{
-    @Autowired
-    private RosteringMapper rosteringMapper;
-
-    /**
-     * 鏌ヨ杞�兼柟妗堝悕绉�
-     * @return 杞�兼柟妗堝悕绉伴泦鍚�
-     */
-    @Override
-    public List<RosteringScheme> selectSchemeNameList() {
-        return rosteringMapper.selectSchemeNameList();
-    }
-
-
-    /**
-     * 鏌ヨ鎺掔彮琛ㄦ煡璇�
-     * 
-     * @param id 鎺掔彮琛ㄦ煡璇D
-     * @return 鎺掔彮琛ㄦ煡璇�
-     */
-    @Override
-    public Rostering selectRosteringById(String id)
-    {
-        return rosteringMapper.selectRosteringById(id);
-    }
-
-    /**
-     * 鏌ヨ鎺掔彮琛ㄦ煡璇㈠垪琛�
-     * 
-     * @param rostering 鎺掔彮琛ㄦ煡璇�
-     * @return 鎺掔彮琛ㄦ煡璇�
-     */
-    @Override
-    public List<Rostering> selectRosteringList(Rostering rostering)
-    {
-        return rosteringMapper.selectRosteringList(rostering);
-    }
-    @Override
-    public List<RosteringCopy> selectList(Rostering rostering)
-    {
-        return rosteringMapper.selectList(rostering);
-    }
-    /**
-     * 鏂板鎺掔彮琛ㄦ煡璇�
-     * 
-     * @param rostering 鎺掔彮琛ㄦ煡璇�
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertRostering(Rostering rostering)
-    {
-        return rosteringMapper.insertRostering(rostering);
-    }
-    @Override
-    public void saveRostering(List<Rostering> dataItems){
-        rosteringMapper.saveRostering(dataItems);
-    }
-    /**
-     * 淇敼鎺掔彮琛ㄦ煡璇�
-     * 
-     * @param rostering 鎺掔彮琛ㄦ煡璇�
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateRostering(Rostering rostering)
-    {
-        rostering.setUpdateTime(DateUtils.getNowDate());
-        return rosteringMapper.updateRostering(rostering);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鎺掔彮琛ㄦ煡璇�
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鎺掔彮琛ㄦ煡璇D
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteRosteringByIds(String[] ids)
-    {
-        return rosteringMapper.deleteRosteringByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎鎺掔彮琛ㄦ煡璇俊鎭�
-     * 
-     * @param id 鎺掔彮琛ㄦ煡璇D
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteRosteringById(String id)
-    {
-        return rosteringMapper.deleteRosteringById(id);
-    }
-}
diff --git a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/impl/RosteringShiftServiceImpl.java b/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/impl/RosteringShiftServiceImpl.java
deleted file mode 100644
index c13c2e4..0000000
--- a/basic-data/src/main/java/com/dingzhuo/energy/basic/data/workforce/service/impl/RosteringShiftServiceImpl.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package com.dingzhuo.energy.basic.data.workforce.service.impl;
-
-import com.dingzhuo.energy.basic.data.workforce.domain.RosteringShift;
-import com.dingzhuo.energy.basic.data.workforce.domain.workForceTreeObject;
-import com.dingzhuo.energy.basic.data.workforce.mapper.RosteringShiftMapper;
-import com.dingzhuo.energy.basic.data.workforce.service.IRosteringShiftService;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.project.system.domain.SysDept;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-import static org.apache.commons.lang3.StringUtils.equalsAnyIgnoreCase;
-
-/**
- * 鎺掔彮绠$悊璁剧疆Service涓氬姟灞傚鐞�
- * 
- * @author liuli
- * @date 2020-05-12
- */
-@Service
-public class RosteringShiftServiceImpl implements IRosteringShiftService 
-{
-    @Autowired
-    private RosteringShiftMapper rosteringShiftMapper;
-    @Override
-    public List<SysDept> treeList() {
-        return rosteringShiftMapper.treeList();
-    }
-    @Override
-    public List<workForceTreeObject> buildModelNodeTree(List<SysDept> modelNodes) {
-        List<SysDept> modelNodeTree = modelNodes.stream()
-                .filter(f -> f.getParentId().toString().equals("0"))
-                .collect(Collectors.toList());
-        for (SysDept modelNode : modelNodeTree) {
-            List<SysDept> children = modelNodes.stream()
-                    .filter(f -> equalsAnyIgnoreCase(f.getParentId().toString(), modelNode.getDeptId().toString()))
-                    .collect(Collectors.toList());
-            buildTree(modelNode, children, modelNodes);
-        }
-        return modelNodeTree.stream().map(workForceTreeObject::new).collect(Collectors.toList());
-    }
-    private void buildTree(SysDept parent, List<SysDept> children, List<SysDept> modelNodes) {
-        parent.setChildren(children);
-
-        for (SysDept modelNode : children) {
-            List<SysDept> tmp = modelNodes.stream()
-                    .filter(f -> equalsAnyIgnoreCase(f.getParentId().toString(), modelNode.getDeptId().toString()))
-                    .collect(Collectors.toList());
-            if (!tmp.isEmpty()) {
-                buildTree(modelNode, tmp, modelNodes);
-            }
-        }
-    }
-    /**
-     * 鏌ヨ鎺掔彮绠$悊璁剧疆
-     * 
-     * @param id 鎺掔彮绠$悊璁剧疆ID
-     * @return 鎺掔彮绠$悊璁剧疆
-     */
-    @Override
-    public RosteringShift selectRosteringShiftById(String id)
-    {
-        return rosteringShiftMapper.selectRosteringShiftById(id);
-    }
-
-    /**
-     * 鏌ヨ鎺掔彮绠$悊璁剧疆鍒楄〃
-     * 
-     * @param rosteringShift 鎺掔彮绠$悊璁剧疆
-     * @return 鎺掔彮绠$悊璁剧疆
-     */
-    @Override
-    public List<RosteringShift> selectRosteringShiftList(RosteringShift rosteringShift)
-    {
-        return rosteringShiftMapper.selectRosteringShiftList(rosteringShift);
-    }
-
-    /**
-     * 鏂板鎺掔彮绠$悊璁剧疆
-     * 
-     * @param rosteringShift 鎺掔彮绠$悊璁剧疆
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertRosteringShift(RosteringShift rosteringShift)
-    {
-        return rosteringShiftMapper.insertRosteringShift(rosteringShift);
-    }
-
-    /**
-     * 淇敼鎺掔彮绠$悊璁剧疆
-     * 
-     * @param rosteringShift 鎺掔彮绠$悊璁剧疆
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateRosteringShift(RosteringShift rosteringShift)
-    {
-        rosteringShift.setUpdateTime(DateUtils.getNowDate());
-        return rosteringShiftMapper.updateRosteringShift(rosteringShift);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鎺掔彮绠$悊璁剧疆
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鎺掔彮绠$悊璁剧疆ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteRosteringShiftByIds(String[] ids)
-    {
-        return rosteringShiftMapper.deleteRosteringShiftByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎鎺掔彮绠$悊璁剧疆淇℃伅
-     * 
-     * @param id 鎺掔彮绠$悊璁剧疆ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteRosteringShiftById(String id)
-    {
-        return rosteringShiftMapper.deleteRosteringShiftById(id);
-    }
-}
diff --git a/basic-data/src/main/resources/mybatis/enerInfoManage/SysEnerclassMapper.xml b/basic-data/src/main/resources/mybatis/enerInfoManage/SysEnerclassMapper.xml
deleted file mode 100644
index aa8e840..0000000
--- a/basic-data/src/main/resources/mybatis/enerInfoManage/SysEnerclassMapper.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.enerInfoManage.mapper.SysEnerclassMapper">
-
-    <resultMap type="SysEnerclass" id="SysEnerclassResult">
-        <result property="enerclassid"    column="enerclassid"    />
-        <result property="enerclassname"    column="enerclassname"    />
-        <result property="oprMan"    column="opr_man"    />
-        <result property="oprTime"    column="opr_time"    />
-        <result property="modMan"    column="mod_man"    />
-        <result property="modTime"    column="mod_time"    />
-        <result property="note"    column="note"    />
-    </resultMap>
-
-    <sql id="selectSysEnerclassVo">
-        select enerclassid, enerclassname, opr_man, opr_time, mod_man, mod_time, note from sys_enerclass
-    </sql>
-
-    <select id="selectSysEnerclassList" parameterType="SysEnerclass" resultMap="SysEnerclassResult">
-        <include refid="selectSysEnerclassVo"/>
-        <where>
-            <if test="enerclassname != null  and enerclassname != ''"> and enerclassname like concat('%', #{enerclassname}, '%')</if>
-        </where>
-    </select>
-
-    <select id="selectSysEnerclassById" parameterType="Integer" resultMap="SysEnerclassResult">
-        <include refid="selectSysEnerclassVo"/>
-        where enerclassid = #{enerclassid}
-    </select>
-
-    <insert id="insertSysEnerclass" parameterType="SysEnerclass">
-        insert into sys_enerclass
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            mod_time,
-            opr_time,
-            <if test="note != null  and note != ''">note,</if>
-            <if test="enerclassid != null ">enerclassid,</if>
-            <if test="enerclassname != null  and enerclassname != ''">enerclassname,</if>
-            <if test="oprMan != null  and oprMan != ''">opr_man,</if>
-            <if test="modMan != null  and modMan != ''">mod_man,</if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            now(),
-            now(),
-            <if test="note != null  and note != ''">#{note},</if>
-            <if test="enerclassid != null ">#{enerclassid},</if>
-            <if test="enerclassname != null  and enerclassname != ''">#{enerclassname},</if>
-            <if test="oprMan != null  and oprMan != ''">#{oprMan},</if>
-            <if test="modMan != null  and modMan != ''">#{modMan},</if>
-        </trim>
-    </insert>
-
-    <update id="updateSysEnerclass" parameterType="SysEnerclass">
-        update sys_enerclass
-        <trim prefix="SET" suffixOverrides=",">
-            mod_time = now(),
-            <if test="enerclassname != null  and enerclassname != ''">enerclassname = #{enerclassname},</if>
-            <if test="modMan != null  and modMan != ''">mod_man = #{modMan},</if>
-            <if test="note != null  and note != ''">note = #{note},</if>
-        </trim>
-        where enerclassid = #{enerclassid}
-    </update>
-
-    <delete id="deleteSysEnerclassById" parameterType="Integer">
-        delete from sys_enerclass where enerclassid = #{enerclassid}
-    </delete>
-
-    <delete id="deleteSysEnerclassByIds" parameterType="String">
-        delete from sys_enerclass where enerclassid in
-        <foreach item="enerclassid" collection="array" open="(" separator="," close=")">
-            #{enerclassid}
-        </foreach>
-    </delete>
-
-    <select id="selectSameEnergyNameNum" parameterType="String" resultType="Integer">
-        select COUNT(enerclassid) from sys_enerclass where enerclassname = #{enerclassname}
-    </select>
-
-    <select id="selectIdByName" parameterType="String" resultType="Integer">
-        select enerclassid from sys_enerclass where enerclassname = #{enerclassname}
-    </select>
-</mapper>
diff --git a/basic-data/src/main/resources/mybatis/enerInfoManage/SysEnercoefficientMapper.xml b/basic-data/src/main/resources/mybatis/enerInfoManage/SysEnercoefficientMapper.xml
deleted file mode 100644
index 31cf6b9..0000000
--- a/basic-data/src/main/resources/mybatis/enerInfoManage/SysEnercoefficientMapper.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.enerInfoManage.mapper.SysEnercoefficientMapper">
-
-    <resultMap type="SysEnercoefficient" id="SysEnercoefficientResult">
-        <result property="ecid"    column="ecid"    />
-        <result property="enerid"    column="enerid"    />
-        <result property="coefficient"    column="coefficient"    />
-        <result property="coefficient2"    column="coefficient2"    />
-        <result property="execdate"    column="execdate"    />
-        <result property="oprMan"    column="opr_man"    />
-        <result property="oprTime"    column="opr_time"    />
-        <result property="modMan"    column="mod_man"    />
-        <result property="modTime"    column="mod_time"    />
-        <result property="note"    column="note"    />
-    </resultMap>
-
-    <sql id="selectSysEnercoefficientVo">
-        select ecid, enerid, coefficient, coefficient2, execdate, opr_man, opr_time, mod_man, mod_time, note from sys_enercoefficient
-    </sql>
-
-    <select id="selectSysEnercoefficientList" parameterType="SysEnercoefficient" resultMap="SysEnercoefficientResult">
-        select a.ecid, a.enerid, a.coefficient, a.coefficient2, a.execdate, a.opr_man, a.opr_time, a.mod_man, a.mod_time, a.note,b.enername
-        from sys_enercoefficient a
-        left join sys_energy b on a.enerid = b.enerid
-        <where>
-            <if test="enername != null  and enername != ''"> and enername like concat('%', #{enername}, '%')</if>
-        </where>
-    </select>
-
-    <select id="selectSysEnercoefficientById" parameterType="Integer" resultMap="SysEnercoefficientResult">
-        <include refid="selectSysEnercoefficientVo"/>
-        where ecid = #{ecid}
-    </select>
-
-    <insert id="insertSysEnercoefficient" parameterType="SysEnercoefficient">
-        insert into sys_enercoefficient
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="ecid != null ">ecid,</if>
-            <if test="enerid != null ">enerid,</if>
-            <if test="coefficient != null  and coefficient != ''">coefficient,</if>
-            <if test="coefficient2 != null  and coefficient2 != ''">coefficient2,</if>
-            <if test="execdate != null ">execdate,</if>
-            <if test="oprMan != null  and oprMan != ''">opr_man,</if>
-            <if test="oprTime != null ">opr_time,</if>
-            <if test="modMan != null  and modMan != ''">mod_man,</if>
-            <if test="modTime != null ">mod_time,</if>
-            <if test="note != null  and note != ''">note,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="ecid != null ">#{ecid},</if>
-            <if test="enerid != null ">#{enerid},</if>
-            <if test="coefficient != null  and coefficient != ''">#{coefficient},</if>
-            <if test="coefficient2 != null  and coefficient2 != ''">#{coefficient2},</if>
-            <if test="execdate != null ">#{execdate},</if>
-            <if test="oprMan != null  and oprMan != ''">#{oprMan},</if>
-            <if test="oprTime != null ">#{oprTime},</if>
-            <if test="modMan != null  and modMan != ''">#{modMan},</if>
-            <if test="modTime != null ">#{modTime},</if>
-            <if test="note != null  and note != ''">#{note},</if>
-         </trim>
-    </insert>
-
-    <update id="updateSysEnercoefficient" parameterType="SysEnercoefficient">
-        update sys_enercoefficient
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="enerid != null ">enerid = #{enerid},</if>
-            <if test="coefficient != null  and coefficient != ''">coefficient = #{coefficient},</if>
-            <if test="coefficient2 != null  and coefficient2 != ''">coefficient2 = #{coefficient2},</if>
-            <if test="execdate != null ">execdate = #{execdate},</if>
-            <if test="oprMan != null  and oprMan != ''">opr_man = #{oprMan},</if>
-            <if test="oprTime != null ">opr_time = #{oprTime},</if>
-            <if test="modMan != null  and modMan != ''">mod_man = #{modMan},</if>
-            <if test="modTime != null ">mod_time = #{modTime},</if>
-            <if test="note != null  and note != ''">note = #{note},</if>
-        </trim>
-        where ecid = #{ecid}
-    </update>
-
-    <delete id="deleteSysEnercoefficientById" parameterType="Integer">
-        delete from sys_enercoefficient where ecid = #{ecid}
-    </delete>
-
-    <delete id="deleteSysEnercoefficientByIds" parameterType="String">
-        delete from sys_enercoefficient where ecid in
-        <foreach item="ecid" collection="array" open="(" separator="," close=")">
-            #{ecid}
-        </foreach>
-    </delete>
-
-</mapper>
diff --git a/basic-data/src/main/resources/mybatis/enerInfoManage/SysEnergyMapper.xml b/basic-data/src/main/resources/mybatis/enerInfoManage/SysEnergyMapper.xml
deleted file mode 100644
index d1cee51..0000000
--- a/basic-data/src/main/resources/mybatis/enerInfoManage/SysEnergyMapper.xml
+++ /dev/null
@@ -1,209 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.enerInfoManage.mapper.SysEnergyMapper">
-
-    <resultMap type="SysEnergy" id="SysEnergyResult">
-        <result property="oprMan"    column="opr_man"    />
-        <result property="oprTime"    column="opr_time"    />
-        <result property="modMan"    column="mod_man"    />
-        <result property="modTime"    column="mod_time"    />
-        <result property="enerid"    column="enerid"    />
-        <result property="enername"    column="enername"    />
-        <result property="muid"    column="muid"    />
-        <result property="enerclassid"    column="enerclassid"    />
-        <result property="enersno"    column="enersno"    />
-        <result property="isstorage"    column="isstorage"    />
-        <result property="note"    column="note"    />
-    </resultMap>
-
-    <sql id="selectSysEnergyVo">
-        select
-        a.opr_man, a.opr_time, a.mod_man, a.mod_time, a.enerid, a.enername,
-        a.muid as muidString, a.enerclassid, a.enersno, a.isstorage, a.note,enerclassname
-        from sys_energy a left join sys_enerclass  b on a.enerclassid = b.enerclassid
-    </sql>
-
-    <select id="getenerclassname" resultType="SysEnerclass">
-        select enerclassid,enerclassname from sys_enerclass
-    </select>
-
-    <select id="selectSysEnergyList" parameterType="SysEnergy" resultMap="SysEnergyResult">
-        select
-        a.opr_man, a.opr_time, a.mod_man, a.mod_time, a.enerid, a.enername,
-        a.muid as muidString, a.enerclassid, a.enersno, a.isstorage, a.note,enerclassname,
-        c.dict_label as muidName
-        from sys_energy a left join sys_enerclass  b on a.enerclassid = b.enerclassid
-        left join sys_dict_data c on a.muid = c.dict_sort and dict_type = 'sys_unit'
-        <where>
-            <if test="enername != null  and enername != ''"> and enername like concat('%', #{enername}, '%')</if>
-            <if test="enerclassname != null  and enerclassname != ''"> and enerclassname = #{enerclassname}</if>
-        </where>
-    </select>
-
-    <select id="selectSysEnergyById" parameterType="Integer" resultMap="SysEnergyResult">
-        select
-        a.opr_man, a.opr_time, a.mod_man, a.mod_time, a.enerid, a.enername,
-        a.muid as muidString, a.enerclassid, a.enersno, a.isstorage, a.note,enerclassname,
-        c.dict_label as muidName,d.coefficient,d.coefficient2,d.execdate as coefficientexecdate,d.note as coefficientnote
-        from sys_energy a left join sys_enerclass  b on a.enerclassid = b.enerclassid
-        left join sys_dict_data c on a.muid = c.dict_sort and dict_type = 'sys_unit'
-            left join sys_enercoefficient d on a.enerid = d.enerid
-        where a.enerid = #{enerid}
-    </select>
-
-    <insert id="insertSysEnergy" parameterType="SysEnergy">
-        insert into sys_energy
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            mod_time,
-            opr_time,
-            <if test="oprMan != null  and oprMan != ''">opr_man,</if>
-            <if test="modMan != null  and modMan != ''">mod_man,</if>
-            <if test="enerid != null ">enerid,</if>
-            <if test="enername != null  and enername != ''">enername,</if>
-            <if test="muidString != null ">muid,</if>
-            <if test="enerclassid != null ">enerclassid,</if>
-            <if test="enersno != null  and enersno != ''">enersno,</if>
-            <if test="isstorage != null ">isstorage,</if>
-            <if test="note != null  and note != ''">note,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            now(),
-            now(),
-            <if test="oprMan != null  and oprMan != ''">#{oprMan},</if>
-            <if test="modMan != null  and modMan != ''">#{modMan},</if>
-            <if test="enerid != null ">#{enerid},</if>
-            <if test="enername != null  and enername != ''">#{enername},</if>
-            <if test="muidString != null ">#{muidString},</if>
-            <if test="enerclassid != null ">#{enerclassid},</if>
-            <if test="enersno != null  and enersno != ''">#{enersno},</if>
-            <if test="isstorage != null ">#{isstorage},</if>
-            <if test="note != null  and note != ''">#{note},</if>
-         </trim>
-    </insert>
-
-    <update id="updateSysEnergy" parameterType="SysEnergy">
-        update sys_energy
-        <trim prefix="SET" suffixOverrides=",">
-            mod_time = now(),
-            <if test="modMan != null  and modMan != ''">mod_man = #{modMan},</if>
-            <if test="enerid != null ">enerid = #{enerid},</if>
-            <if test="enername != null  and enername != ''">enername = #{enername},</if>
-            <if test="muidString != null ">muid = #{muidString},</if>
-            <if test="enerclassid != null ">enerclassid = #{enerclassid},</if>
-            <if test="enersno != null  and enersno != ''">enersno = #{enersno},</if>
-            <if test="isstorage != null ">isstorage = #{isstorage},</if>
-            <if test="note != null  and note != ''">note = #{note},</if>
-        </trim>
-        where enerid = #{enerid}
-    </update>
-
-    <delete id="deleteSysEnergyById" parameterType="String">
-        delete from sys_energy where enerid = #{enerid}
-    </delete>
-
-    <delete id="deleteSysEnergyByIds" parameterType="String">
-        delete from sys_energy where enerid in
-        <foreach item="enerid" collection="array" open="(" separator="," close=")">
-            #{enerid}
-        </foreach>
-    </delete>
-
-    <select id="getEnerClassid" parameterType="String" resultType="Integer">
-        select enerclassid from sys_enerclass where enerclassname = #{enerclassname}
-    </select>
-
-    <select id="selectSameEnergyNameNum" parameterType="String" resultType="Integer">
-        select COUNT(enerid) from sys_energy where enername = #{enername}
-    </select>
-
-    <select id="selectIdByName" parameterType="String" resultType="Integer">
-        select enerid from sys_energy where enername = #{enername}
-    </select>
-
-    <select id="getPriceCountByEnerid" parameterType="SysEnergy" resultType="Integer">
-        select COUNT(objectid) from sys_price where objectid = #{enerid} and objecttype = 1 and execdate = #{execdate}
-    </select>
-
-    <insert id="insertEnergyPrice" parameterType="SysEnergy">
-        insert into sys_price
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            mod_time,
-            opr_time,
-            <if test="oprMan != null  and oprMan != ''">opr_man,</if>
-            <if test="modMan != null  and modMan != ''">mod_man,</if>
-            objectid,
-            objecttype,
-            price,
-            execdate,
-            <if test="note != null  and note != ''">note,</if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            now(),
-            now(),
-            <if test="oprMan != null  and oprMan != ''">#{oprMan},</if>
-            <if test="modMan != null  and modMan != ''">#{modMan},</if>
-            <if test="enerid != null ">#{enerid},</if>
-            1,
-            #{price},
-            #{execdate},
-            <if test="note != null  and note != ''">#{pricenote},</if>
-        </trim>
-    </insert>
-
-    <update id="updateEnergyPrice" parameterType="SysEnergy" >
-        update sys_price
-        <trim prefix="SET" suffixOverrides=",">
-            mod_time = now(),
-            <if test="modMan != null  and modMan != ''">mod_man = #{modMan},</if>
-            price = #{price},
-            execdate = #{execdate},
-            <if test="note != null  and note != ''">note = #{pricenote},</if>
-        </trim>
-    </update>
-
-    <select id="getCoefficientCountByEnerid" parameterType="Integer" resultType="Integer">
-        select COUNT(enerid) from sys_enercoefficient where enerid = #{enerid}
-    </select>
-
-    <insert id="insertEnergyCoefficient" parameterType="SysEnergy">
-        insert into sys_enercoefficient
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            mod_time,
-            opr_time,
-            <if test="oprMan != null  and oprMan != ''">opr_man,</if>
-            <if test="modMan != null  and modMan != ''">mod_man,</if>
-            enerid,
-            coefficient,
-            coefficient2,
-            execdate,
-            <if test="note != null  and note != ''">note,</if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            now(),
-            now(),
-            <if test="oprMan != null  and oprMan != ''">#{oprMan},</if>
-            <if test="modMan != null  and modMan != ''">#{modMan},</if>
-            <if test="enerid != null ">#{enerid},</if>
-            #{coefficient},
-            #{coefficient2},
-            #{coefficientexecdate},
-            <if test="note != null  and note != ''">#{coefficientnote},</if>
-        </trim>
-    </insert>
-
-    <update id="updateEnergyCoefficient" parameterType="SysEnergy" >
-        update sys_enercoefficient
-        <trim prefix="SET" suffixOverrides=",">
-            mod_time = now(),
-            <if test="modMan != null  and modMan != ''">mod_man = #{modMan},</if>
-            coefficient = #{coefficient},
-            coefficient2 = #{coefficient2},
-            execdate = #{coefficientexecdate},
-            <if test="note != null  and note != ''">note = #{coefficientnote},</if>
-        </trim>
-        where enerid = #{enerid}
-    </update>
-
-</mapper>
diff --git a/basic-data/src/main/resources/mybatis/enerInfoManage/SysPriceMapper.xml b/basic-data/src/main/resources/mybatis/enerInfoManage/SysPriceMapper.xml
deleted file mode 100644
index e977119..0000000
--- a/basic-data/src/main/resources/mybatis/enerInfoManage/SysPriceMapper.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.enerInfoManage.mapper.SysPriceMapper">
-
-    <resultMap type="SysPrice" id="SysPriceResult">
-        <result property="oprTime"    column="opr_time"    />
-        <result property="modMan"    column="mod_man"    />
-        <result property="priceid"    column="priceid"    />
-        <result property="objectid"    column="objectid"    />
-        <result property="objecttype"    column="objecttype"    />
-        <result property="price"    column="price"    />
-        <result property="execdate"    column="execdate"    />
-        <result property="oprMan"    column="opr_man"    />
-        <result property="modTime"    column="mod_time"    />
-        <result property="note"    column="note"    />
-    </resultMap>
-
-    <sql id="selectSysPriceVo">
-        select a.opr_time, a.mod_man, a.priceid, a.objectid, a.objecttype, a.price, a.execdate, a.opr_man, a.mod_time, a.note , b.enername
-        from sys_price a
-        left join sys_energy b on objectid = enerid and objecttype = 1
-    </sql>
-
-    <select id="selectSysPriceList" parameterType="SysPrice" resultMap="SysPriceResult">
-        <include refid="selectSysPriceVo"/>
-        <where>
-            <if test="enername != null  and enername != ''"> and enername like concat('%', #{enername}, '%')</if>
-        </where>
-    </select>
-
-    <select id="selectSysPriceById" parameterType="Date" resultMap="SysPriceResult">
-        <include refid="selectSysPriceVo"/>
-        where opr_time = #{oprTime}
-    </select>
-
-    <insert id="insertSysPrice" parameterType="SysPrice">
-        insert into sys_price
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="oprTime != null ">opr_time,</if>
-            <if test="modMan != null  and modMan != ''">mod_man,</if>
-            <if test="priceid != null ">priceid,</if>
-            <if test="objectid != null ">objectid,</if>
-            <if test="objecttype != null ">objecttype,</if>
-            <if test="price != null ">price,</if>
-            <if test="execdate != null ">execdate,</if>
-            <if test="oprMan != null  and oprMan != ''">opr_man,</if>
-            <if test="modTime != null ">mod_time,</if>
-            <if test="note != null  and note != ''">note,</if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="oprTime != null ">#{oprTime},</if>
-            <if test="modMan != null  and modMan != ''">#{modMan},</if>
-            <if test="priceid != null ">#{priceid},</if>
-            <if test="objectid != null ">#{objectid},</if>
-            <if test="objecttype != null ">#{objecttype},</if>
-            <if test="price != null ">#{price},</if>
-            <if test="execdate != null ">#{execdate},</if>
-            <if test="oprMan != null  and oprMan != ''">#{oprMan},</if>
-            <if test="modTime != null ">#{modTime},</if>
-            <if test="note != null  and note != ''">#{note},</if>
-        </trim>
-    </insert>
-
-    <update id="updateSysPrice" parameterType="SysPrice">
-        update sys_price
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="modMan != null  and modMan != ''">mod_man = #{modMan},</if>
-            <if test="priceid != null ">priceid = #{priceid},</if>
-            <if test="objectid != null ">objectid = #{objectid},</if>
-            <if test="objecttype != null ">objecttype = #{objecttype},</if>
-            <if test="price != null ">price = #{price},</if>
-            <if test="execdate != null ">execdate = #{execdate},</if>
-            <if test="oprMan != null  and oprMan != ''">opr_man = #{oprMan},</if>
-            <if test="modTime != null ">mod_time = #{modTime},</if>
-            <if test="note != null  and note != ''">note = #{note},</if>
-        </trim>
-        where opr_time = #{oprTime}
-    </update>
-
-    <delete id="deleteSysPriceById" parameterType="Date">
-        delete from sys_price where opr_time = #{oprTime}
-    </delete>
-
-    <delete id="deleteSysPriceByIds" parameterType="String">
-        delete from sys_price where opr_time in
-        <foreach item="oprTime" collection="array" open="(" separator="," close=")">
-            #{oprTime}
-        </foreach>
-    </delete>
-
-</mapper>
diff --git a/basic-data/src/main/resources/mybatis/enerInfoManage/SysProductMapper.xml b/basic-data/src/main/resources/mybatis/enerInfoManage/SysProductMapper.xml
deleted file mode 100644
index f9bcceb..0000000
--- a/basic-data/src/main/resources/mybatis/enerInfoManage/SysProductMapper.xml
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.enerInfoManage.mapper.SysProductMapper">
-
-    <resultMap type="SysProduct" id="SysProductResult">
-        <result property="productid"    column="productid"    />
-        <result property="productname"    column="productname"    />
-        <result property="productsno"    column="productsno"    />
-        <result property="muid"    column="muid"    />
-        <result property="superid"    column="superid"    />
-        <result property="issub"    column="issub"    />
-        <result property="procofficient"    column="procofficient"    />
-        <result property="isshow"    column="isshow"    />
-        <result property="iscpnyproduct"    column="iscpnyproduct"    />
-        <result property="oprMan"    column="opr_man"    />
-        <result property="oprTime"    column="opr_time"    />
-        <result property="modMan"    column="mod_man"    />
-        <result property="modTime"    column="mod_time"    />
-        <result property="note"    column="note"    />
-    </resultMap>
-
-    <sql id="selectSysProductVo">
-        select productid, productname, productsno, muid,
-        superid, issub, procofficient,
-        isshow, iscpnyproduct, opr_man, opr_time, mod_man, mod_time, note,price from sys_product
-    </sql>
-
-    <select id="selectSysProductList" parameterType="SysProduct" resultMap="SysProductResult">
-        select a.productid, a.productname, productsno, muid,
-        b.productname as superidname,
-        issub, procofficient,
-        isshow, iscpnyproduct, opr_man, opr_time, mod_man, mod_time, note,price from sys_product a
-        left join (select productid,productname from sys_product) as b on a.superid = b.productid
-        <where>
-            <if test="productname != null  and productname != ''"> and a.productname like concat('%', #{productname}, '%')</if>
-        </where>
-    </select>
-
-    <select id="selectSysProductById" parameterType="Integer" resultMap="SysProductResult">
-        <include refid="selectSysProductVo"/>
-        where productid = #{productid}
-    </select>
-
-    <insert id="insertSysProduct" parameterType="SysProduct">
-        insert into sys_product
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            opr_time,
-            mod_time,
-            <if test="productname != null  and productname != ''">productname,</if>
-            <if test="productsno != null  and productsno != ''">productsno,</if>
-            <if test="muid != null ">muid,</if>
-            <if test="superid != null ">superid,</if>
-            <if test="issub != null ">issub,</if>
-            <if test="procofficient != null ">procofficient,</if>
-            <if test="isshow != null ">isshow,</if>
-            <if test="iscpnyproduct != null ">iscpnyproduct,</if>
-            <if test="oprMan != null  and oprMan != ''">opr_man,</if>
-
-            <if test="modMan != null  and modMan != ''">mod_man,</if>
-
-            <if test="note != null  and note != ''">note,</if>
-            <if test="price != null  and price != ''">price,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            now(),
-            now(),
-            <if test="productid != null ">#{productid},</if>
-            <if test="productname != null  and productname != ''">#{productname},</if>
-            <if test="productsno != null  and productsno != ''">#{productsno},</if>
-            <if test="muid != null ">#{muid},</if>
-            <if test="superid != null ">#{superid},</if>
-            <if test="issub != null ">#{issub},</if>
-            <if test="procofficient != null ">#{procofficient},</if>
-            <if test="isshow != null ">#{isshow},</if>
-            <if test="iscpnyproduct != null ">#{iscpnyproduct},</if>
-            <if test="oprMan != null  and oprMan != ''">#{oprMan},</if>
-            <if test="modMan != null  and modMan != ''">#{modMan},</if>
-            <if test="note != null  and note != ''">#{note},</if>
-            <if test="price != null  and price != ''">#{price},</if>
-         </trim>
-    </insert>
-
-    <update id="updateSysProduct" parameterType="SysProduct">
-        update sys_product
-        <trim prefix="SET" suffixOverrides=",">
-            mod_time = now(),
-            <if test="productname != null  and productname != ''">productname = #{productname},</if>
-            <if test="productsno != null  and productsno != ''">productsno = #{productsno},</if>
-            <if test="muid != null ">muid = #{muid},</if>
-            <if test="superid != null ">superid = #{superid},</if>
-            <if test="issub != null ">issub = #{issub},</if>
-            <if test="procofficient != null ">procofficient = #{procofficient},</if>
-            <if test="isshow != null ">isshow = #{isshow},</if>
-            <if test="iscpnyproduct != null ">iscpnyproduct = #{iscpnyproduct},</if>
-            <if test="modMan != null  and modMan != ''">mod_man = #{modMan},</if>
-            <if test="note != null  and note != ''">note = #{note},</if>
-            <if test="price != null  and price != ''">price = #{price},</if>
-        </trim>
-        where productid = #{productid}
-    </update>
-
-    <delete id="deleteSysProductById" parameterType="Integer">
-        delete from sys_product where productid = #{productid}
-    </delete>
-
-    <delete id="deleteSysProductByIds" parameterType="String">
-        delete from sys_product where productid in
-        <foreach item="productid" collection="array" open="(" separator="," close=")">
-            #{productid}
-        </foreach>
-    </delete>
-
-    <select id="selectCountByName" parameterType="SysProduct" resultType="Integer">
-        select count(productid) from sys_product where productname = #{productname}
-    </select>
-
-    <select id="selectCountByNo" parameterType="SysProduct" resultType="Integer">
-        select count(productid) from sys_product where productsno = #{productsno}
-    </select>
-
-    <select id="selectIdByName" parameterType="SysProduct" resultType="Integer">
-        select productid from sys_product where productname = #{productname}
-    </select>
-
-    <select id="selectIdByNo" parameterType="SysProduct" resultType="Integer">
-        select productid from sys_product where productsno = #{productsno}
-    </select>
-</mapper>
diff --git a/basic-data/src/main/resources/mybatis/energy/EnergyProjectAnnexMapper.xml b/basic-data/src/main/resources/mybatis/energy/EnergyProjectAnnexMapper.xml
deleted file mode 100644
index e22db3c..0000000
--- a/basic-data/src/main/resources/mybatis/energy/EnergyProjectAnnexMapper.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.energy.mapper.EnergyProjectAnnexMapper">
-    
-    <resultMap type="EnergyProjectAnnex" id="EnergyProjectAnnexResult">
-        <result property="id"    column="id"    />
-        <result property="projectId"    column="project_id"    />
-        <result property="fileName"    column="file_name"    />
-        <result property="fileSuffix"    column="file_suffix"    />
-        <result property="filePath"    column="file_path"    />
-        <result property="delFlage"    column="del_flage"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="createOperator"    column="create_operator"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="updateOperator"    column="update_operator"    />
-    </resultMap>
-
-    <sql id="selectEnergyProjectAnnexVo">
-        select id, project_id, file_name, file_suffix, file_path, del_flage, create_time, create_operator, update_time, update_operator from energy_project_annex
-    </sql>
-
-    <select id="selectEnergyProjectAnnexList" parameterType="EnergyProjectAnnex" resultMap="EnergyProjectAnnexResult">
-        <include refid="selectEnergyProjectAnnexVo"/>
-        <where>
-            <if test="projectId != null  and projectId != ''"> and project_id=#{projectId}</if>
-            <if test="fileName != null  and fileName != ''"> and file_name like concat('%', #{fileName}, '%')</if>
-            <if test="fileSuffix != null  and fileSuffix != ''"> and file_suffix like concat('%', #{fileSuffix}, '%')</if>
-            <if test="filePath != null  and filePath != ''"> and file_path like concat('%', #{filePath}, '%')</if>
-            <if test="delFlage != null  and delFlage != ''"> and del_flage like concat('%', #{delFlage}, '%')</if>
-            <if test="createOperator != null  and createOperator != ''"> and create_operator like concat('%', #{createOperator}, '%')</if>
-            <if test="updateOperator != null  and updateOperator != ''"> and update_operator like concat('%', #{updateOperator}, '%')</if>
-        </where>
-    </select>
-    
-    <select id="selectEnergyProjectAnnexById" parameterType="String" resultMap="EnergyProjectAnnexResult">
-        <include refid="selectEnergyProjectAnnexVo"/>
-        where id = #{id}
-    </select>
-        
-    <insert id="insertEnergyProjectAnnex" parameterType="EnergyProjectAnnex">
-        insert into energy_project_annex
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="projectId != null  and projectId != ''">project_id,</if>
-            <if test="fileName != null  and fileName != ''">file_name,</if>
-            <if test="fileSuffix != null  and fileSuffix != ''">file_suffix,</if>
-            <if test="filePath != null  and filePath != ''">file_path,</if>
-            <if test="delFlage != null  and delFlage != ''">del_flage,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="createOperator != null  and createOperator != ''">create_operator,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="updateOperator != null  and updateOperator != ''">update_operator,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="projectId != null  and projectId != ''">#{projectId},</if>
-            <if test="fileName != null  and fileName != ''">#{fileName},</if>
-            <if test="fileSuffix != null  and fileSuffix != ''">#{fileSuffix},</if>
-            <if test="filePath != null  and filePath != ''">#{filePath},</if>
-            <if test="delFlage != null  and delFlage != ''">#{delFlage},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="createOperator != null  and createOperator != ''">#{createOperator},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="updateOperator != null  and updateOperator != ''">#{updateOperator},</if>
-         </trim>
-    </insert>
-
-    <update id="updateEnergyProjectAnnex" parameterType="EnergyProjectAnnex">
-        update energy_project_annex
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="projectId != null  and projectId != ''">project_id = #{projectId},</if>
-            <if test="fileName != null  and fileName != ''">file_name = #{fileName},</if>
-            <if test="fileSuffix != null  and fileSuffix != ''">file_suffix = #{fileSuffix},</if>
-            <if test="filePath != null  and filePath != ''">file_path = #{filePath},</if>
-            <if test="delFlage != null  and delFlage != ''">del_flage = #{delFlage},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="createOperator != null  and createOperator != ''">create_operator = #{createOperator},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="updateOperator != null  and updateOperator != ''">update_operator = #{updateOperator},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteEnergyProjectAnnexById" parameterType="String">
-        delete from energy_project_annex where id = #{id}
-    </delete>
-
-    <delete id="deleteEnergyProjectAnnexByIds" parameterType="String">
-        delete from energy_project_annex where id in 
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    
-</mapper>
\ No newline at end of file
diff --git a/basic-data/src/main/resources/mybatis/energy/EnergyProjectMapper.xml b/basic-data/src/main/resources/mybatis/energy/EnergyProjectMapper.xml
deleted file mode 100644
index a413df1..0000000
--- a/basic-data/src/main/resources/mybatis/energy/EnergyProjectMapper.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.energy.mapper.EnergyProjectMapper">
-    
-    <resultMap type="EnergyProject" id="EnergyProjectResult">
-        <result property="id"    column="id"    />
-        <result property="name"    column="name"    />
-        <result property="plan"    column="plan"    />
-        <result property="target"    column="target"    />
-        <result property="startTime"    column="start_time"    />
-        <result property="enddTime"    column="endd_time"    />
-        <result property="people"    column="people"    />
-        <result property="setTime"    column="set_time"    />
-        <result property="createOperator"    column="create_operator"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateOperator"    column="update_operator"    />
-        <result property="updateTime"    column="update_time"    />
-    </resultMap>
-
-    <sql id="selectEnergyProjectVo">
-        select id, name, plan, target, start_time, endd_time, people, set_time, create_operator, create_time, update_operator, update_time from energy_project
-    </sql>
-
-    <select id="selectEnergyProjectList" parameterType="EnergyProject" resultMap="EnergyProjectResult">
-        <include refid="selectEnergyProjectVo"/>
-        <where>  
-            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
-            <if test="plan != null  and plan != ''"> and plan like concat('%', #{plan}, '%')</if>
-            <if test="target != null  and target != ''"> and target like concat('%', #{target}, '%')</if>
-            <if test="startTime != null "> and start_time like concat('%', #{startTime}, '%')</if>
-            <if test="enddTime != null "> and endd_time like concat('%', #{enddTime}, '%')</if>
-            <if test="people != null  and people != ''"> and people like concat('%', #{people}, '%')</if>
-            <if test="setTime != null "> and set_time like concat('%', #{setTime}, '%')</if>
-            <if test="createOperator != null  and createOperator != ''"> and create_operator like concat('%', #{createOperator}, '%')</if>
-            <if test="updateOperator != null  and updateOperator != ''"> and update_operator like concat('%', #{updateOperator}, '%')</if>
-        </where>
-    </select>
-    
-    <select id="selectEnergyProjectById" parameterType="String" resultMap="EnergyProjectResult">
-        <include refid="selectEnergyProjectVo"/>
-        where id = #{id}
-    </select>
-        
-    <insert id="insertEnergyProject" parameterType="EnergyProject">
-        insert into energy_project
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="name != null  and name != ''">name,</if>
-            <if test="plan != null  and plan != ''">plan,</if>
-            <if test="target != null  and target != ''">target,</if>
-            <if test="startTime != null ">start_time,</if>
-            <if test="enddTime != null ">endd_time,</if>
-            <if test="people != null  and people != ''">people,</if>
-            <if test="setTime != null ">set_time,</if>
-            <if test="createOperator != null  and createOperator != ''">create_operator,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="updateOperator != null  and updateOperator != ''">update_operator,</if>
-            <if test="updateTime != null ">update_time,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="name != null  and name != ''">#{name},</if>
-            <if test="plan != null  and plan != ''">#{plan},</if>
-            <if test="target != null  and target != ''">#{target},</if>
-            <if test="startTime != null ">#{startTime},</if>
-            <if test="enddTime != null ">#{enddTime},</if>
-            <if test="people != null  and people != ''">#{people},</if>
-            <if test="setTime != null ">#{setTime},</if>
-            <if test="createOperator != null  and createOperator != ''">#{createOperator},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="updateOperator != null  and updateOperator != ''">#{updateOperator},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-         </trim>
-    </insert>
-
-    <update id="updateEnergyProject" parameterType="EnergyProject">
-        update energy_project
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="name != null  and name != ''">name = #{name},</if>
-            <if test="plan != null  and plan != ''">plan = #{plan},</if>
-            <if test="target != null  and target != ''">target = #{target},</if>
-            <if test="startTime != null ">start_time = #{startTime},</if>
-            <if test="enddTime != null ">endd_time = #{enddTime},</if>
-            <if test="people != null  and people != ''">people = #{people},</if>
-            <if test="setTime != null ">set_time = #{setTime},</if>
-            <if test="createOperator != null  and createOperator != ''">create_operator = #{createOperator},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="updateOperator != null  and updateOperator != ''">update_operator = #{updateOperator},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteEnergyProjectById" parameterType="String">
-        delete from energy_project where id = #{id}
-    </delete>
-
-    <delete id="deleteEnergyProjectByIds" parameterType="String">
-        delete from energy_project where id in 
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    
-</mapper>
\ No newline at end of file
diff --git a/basic-data/src/main/resources/mybatis/energy/EnergyReportAnnexMapper.xml b/basic-data/src/main/resources/mybatis/energy/EnergyReportAnnexMapper.xml
deleted file mode 100644
index b21d5d2..0000000
--- a/basic-data/src/main/resources/mybatis/energy/EnergyReportAnnexMapper.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.energy.mapper.EnergyReportAnnexMapper">
-    
-    <resultMap type="EnergyReportAnnex" id="EnergyReportAnnexResult">
-        <result property="id"    column="id"    />
-        <result property="reportId"    column="report_id"    />
-        <result property="fileName"    column="file_name"    />
-        <result property="fileSuffix"    column="file_suffix"    />
-        <result property="filePath"    column="file_path"    />
-        <result property="delFlage"    column="del_flage"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="updateBy"    column="update_by"    />
-    </resultMap>
-
-    <sql id="selectEnergyReportAnnexVo">
-        select id, report_id, file_name, file_suffix, file_path, del_flage, create_time, create_by, update_time, update_by from energy_report_annex
-    </sql>
-
-    <select id="selectEnergyReportAnnexList" parameterType="EnergyReportAnnex" resultMap="EnergyReportAnnexResult">
-        <include refid="selectEnergyReportAnnexVo"/>
-        <where>  
-            <if test="fileName != null  and fileName != ''"> and file_name like concat('%', #{fileName}, '%')</if>
-            <if test="fileSuffix != null  and fileSuffix != ''"> and file_suffix like concat('%', #{fileSuffix}, '%')</if>
-            <if test="filePath != null  and filePath != ''"> and file_path like concat('%', #{filePath}, '%')</if>
-            <if test="delFlage != null  and delFlage != ''"> and del_flage like concat('%', #{delFlage}, '%')</if>
-        </where>
-    </select>
-    
-    <select id="selectEnergyReportAnnexById" parameterType="String" resultMap="EnergyReportAnnexResult">
-        <include refid="selectEnergyReportAnnexVo"/>
-        where id = #{id}
-    </select>
-        
-    <insert id="insertEnergyReportAnnex" parameterType="EnergyReportAnnex">
-        insert into energy_report_annex
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="reportId != null  and reportId != ''">report_id,</if>
-            <if test="fileName != null  and fileName != ''">file_name,</if>
-            <if test="fileSuffix != null  and fileSuffix != ''">file_suffix,</if>
-            <if test="filePath != null  and filePath != ''">file_path,</if>
-            <if test="delFlage != null  and delFlage != ''">del_flage,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="updateBy != null  and updateBy != ''">update_by,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="reportId != null  and reportId != ''">#{reportId},</if>
-            <if test="fileName != null  and fileName != ''">#{fileName},</if>
-            <if test="fileSuffix != null  and fileSuffix != ''">#{fileSuffix},</if>
-            <if test="filePath != null  and filePath != ''">#{filePath},</if>
-            <if test="delFlage != null  and delFlage != ''">#{delFlage},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
-         </trim>
-    </insert>
-
-    <update id="updateEnergyReportAnnex" parameterType="EnergyReportAnnex">
-        update energy_report_annex
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="reportId != null  and reportId != ''">report_id = #{reportId},</if>
-            <if test="fileName != null  and fileName != ''">file_name = #{fileName},</if>
-            <if test="fileSuffix != null  and fileSuffix != ''">file_suffix = #{fileSuffix},</if>
-            <if test="filePath != null  and filePath != ''">file_path = #{filePath},</if>
-            <if test="delFlage != null  and delFlage != ''">del_flage = #{delFlage},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteEnergyReportAnnexById" parameterType="String">
-        delete from energy_report_annex where id = #{id}
-    </delete>
-
-    <delete id="deleteEnergyReportAnnexByIds" parameterType="String">
-        delete from energy_report_annex where id in 
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    
-</mapper>
\ No newline at end of file
diff --git a/basic-data/src/main/resources/mybatis/energy/EnergyReportMapper.xml b/basic-data/src/main/resources/mybatis/energy/EnergyReportMapper.xml
deleted file mode 100644
index a6c5445..0000000
--- a/basic-data/src/main/resources/mybatis/energy/EnergyReportMapper.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.energy.mapper.EnergyReportMapper">
-    
-    <resultMap type="EnergyReport" id="EnergyReportResult">
-        <result property="id"    column="id"    />
-        <result property="name"    column="name"    />
-        <result property="startTime"    column="start_time"    />
-        <result property="enddTime"    column="endd_time"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="bak"    column="bak"    />
-    </resultMap>
-
-    <sql id="selectEnergyReportVo">
-        select id, name, to_char(start_time,'YYYY-MM-DD') as start_time, to_char(endd_time,'YYYY-MM-DD') as endd_time, create_by, create_time, update_by, update_time, bak from energy_report
-    </sql>
-
-    <select id="selectEnergyReportList" parameterType="EnergyReport" resultMap="EnergyReportResult">
-        <include refid="selectEnergyReportVo"/>
-        <where>  
-            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
-        </where>
-    </select>
-    
-    <select id="selectEnergyReportById" parameterType="String" resultMap="EnergyReportResult">
-        <include refid="selectEnergyReportVo"/>
-        where id = #{id}
-    </select>
-        
-    <insert id="insertEnergyReport" parameterType="EnergyReport">
-        insert into energy_report
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="name != null  and name != ''">name,</if>
-            <if test="startTime != null ">start_time,</if>
-            <if test="enddTime != null ">endd_time,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="updateBy != null  and updateBy != ''">update_by,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="bak != null  and bak != ''">bak,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="name != null  and name != ''">#{name},</if>
-            <if test="startTime != null ">#{startTime},</if>
-            <if test="enddTime != null ">#{enddTime},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="bak != null  and bak != ''">#{bak},</if>
-         </trim>
-    </insert>
-
-    <update id="updateEnergyReport" parameterType="EnergyReport">
-        update energy_report
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="name != null  and name != ''">name = #{name},</if>
-            <if test="startTime != null ">start_time = #{startTime},</if>
-            <if test="enddTime != null ">endd_time = #{enddTime},</if>
-            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="bak != null  and bak != ''">bak = #{bak},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteEnergyReportById" parameterType="String">
-        delete from energy_report where id = #{id}
-    </delete>
-
-    <delete id="deleteEnergyReportByIds" parameterType="String">
-        delete from energy_report where id in 
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    
-</mapper>
\ No newline at end of file
diff --git a/basic-data/src/main/resources/mybatis/energyExamine/AssessmentIndexMapper.xml b/basic-data/src/main/resources/mybatis/energyExamine/AssessmentIndexMapper.xml
deleted file mode 100644
index 10560ce..0000000
--- a/basic-data/src/main/resources/mybatis/energyExamine/AssessmentIndexMapper.xml
+++ /dev/null
@@ -1,150 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.energyExamine.mapper.AssessmentIndexMapper">
-    
-    <resultMap type="AssessmentIndex" id="AssessmentIndexResult">
-        <result property="id"    column="id"    />
-        <result property="modeNodeId"    column="mode_node_id"    />
-        <result property="indexId"    column="index_id"    />
-        <result property="plan"    column="plan"    />
-        <result property="benchmarking"    column="benchmarking"    />
-        <result property="benchRange"    column="bench_range"    />
-        <result property="benchType"    column="bench_type"    />
-        <result property="dualControl"    column="dual_control"    />
-        <result property="customStandard"    column="custom_standard"    />
-        <result property="customVal"    column="custom_val"    />
-        <result property="modename"    column="modename"    />
-        <result property="indexname"    column="indexname"    />
-        <result property="jldw"    column="jldw"    />
-    </resultMap>
-
-    <sql id="selectAssessmentIndexVo">
-        select id, mode_node_id, index_id, plan, benchmarking, bench_range, bench_type, dual_control, custom_standard, custom_val from assessment_Index
-    </sql>
-
-    <select id="selectAssessmentIndexList" parameterType="AssessmentIndex" resultMap="AssessmentIndexResult">
-        <include refid="selectAssessmentIndexVo"/>
-        <where>
-        </where>
-    </select>
-
-    <select id="selectAssessmentIndexListByMode" parameterType="AssessmentIndex" resultMap="AssessmentIndexResult">
-        SELECT ID,
-            mode_node_id,
-            a.index_id,
-            plan,
-            benchmarking,
-            bench_range,
-            bench_type,
-            dual_control,
-            custom_standard,
-            custom_val,
-            b.name as modename,
-            c.name as indexname,
-            d.dict_label as jldw
-        FROM
-            assessment_Index a,model_node b,energy_index c,sys_dict_data d
-        WHERE
-            a.mode_node_id IN ( SELECT node_id FROM model_node WHERE address LIKE ( SELECT address FROM
-            model_node WHERE node_id = #{modeNodeId} )
-            <if test='eierarchyFlag=="ALL"'>
-                || '%'
-            </if>
-            )
-            and a.mode_node_id = b.node_id
-            and a.index_id = c.index_id
-            and d.dict_type='sys_unit'
-            and c.unit_id = d.dict_value
-    </select>
-    
-    <select id="selectAssessmentIndexById" parameterType="String" resultMap="AssessmentIndexResult">
-        SELECT ID,
-            mode_node_id,
-            a.index_id,
-            plan,
-            benchmarking,
-            bench_range,
-            bench_type,
-            dual_control,
-            custom_standard,
-            custom_val,
-            b.name as modename,
-            c.name as indexname,
-            d.dict_label as jldw
-        FROM
-            assessment_Index a,model_node b,energy_index c,sys_dict_data d
-        WHERE
-            a.id = #{id}
-            and a.mode_node_id = b.node_id
-            and a.index_id = c.index_id
-            and d.dict_type='sys_unit'
-            and c.unit_id = d.dict_value
-    </select>
-        
-    <insert id="insertAssessmentIndex" parameterType="AssessmentIndex">
-        insert into assessmentIndex
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="modeNodeId != null  and modeNodeId != ''">mode_node_id,</if>
-            <if test="indexId != null  and indexId != ''">index_id,</if>
-            <if test="plan != null  and plan != ''">plan,</if>
-            <if test="benchmarking != null  and benchmarking != ''">benchmarking,</if>
-            <if test="benchRange != null ">bench_range,</if>
-            <if test="benchType != null ">bench_type,</if>
-            <if test="dualControl != null  and dualControl != ''">dual_control,</if>
-            <if test="customStandard != null  and customStandard != ''">custom_standard,</if>
-            <if test="customVal != null ">custom_val,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="modeNodeId != null  and modeNodeId != ''">#{modeNodeId},</if>
-            <if test="indexId != null  and indexId != ''">#{indexId},</if>
-            <if test="plan != null  and plan != ''">#{plan},</if>
-            <if test="benchmarking != null  and benchmarking != ''">#{benchmarking},</if>
-            <if test="benchRange != null ">#{benchRange},</if>
-            <if test="benchType != null ">#{benchType},</if>
-            <if test="dualControl != null  and dualControl != ''">#{dualControl},</if>
-            <if test="customStandard != null  and customStandard != ''">#{customStandard},</if>
-            <if test="customVal != null ">#{customVal},</if>
-         </trim>
-    </insert>
-
-    <update id="updateAssessmentIndex" parameterType="AssessmentIndex">
-        update assessment_Index
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="modeNodeId != null  and modeNodeId != ''">mode_node_id = #{modeNodeId},</if>
-            <if test="indexId != null  and indexId != ''">index_id = #{indexId},</if>
-            <if test="plan != null  and plan != ''">plan = #{plan},</if>
-            <if test="benchmarking != null  and benchmarking != ''">benchmarking = #{benchmarking},</if>
-            <if test="benchRange != null ">bench_range = #{benchRange},</if>
-            <if test="benchType != null ">bench_type = #{benchType},</if>
-            <if test="dualControl != null  and dualControl != ''">dual_control = #{dualControl},</if>
-            <if test="customStandard != null  and customStandard != ''">custom_standard = #{customStandard},</if>
-            <if test="customVal != null ">custom_val = #{customVal},</if>
-            <if test="plan == null  or plan == ''">plan = false,</if>
-            <if test="benchmarking == null  or benchmarking == ''">benchmarking = false,</if>
-            <if test="dualControl == null  or dualControl == ''">dual_control = false,</if>
-            <if test="customStandard == null  or customStandard == ''">custom_standard = false,</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteAssessmentIndexById" parameterType="String">
-        delete from assessment_Index where id = #{id}
-    </delete>
-
-    <delete id="deleteAssessmentIndexByIds" parameterType="String">
-        delete from assessment_Index where id in
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    <insert id="batchAssessIndex">
-        insert into assessment_Index(id, mode_node_id, index_id) values
-        <foreach item="item" index="index" collection="list" separator=",">
-            (#{item.id},#{item.modeNodeId},#{item.indexId})
-        </foreach>
-    </insert>
-</mapper>
\ No newline at end of file
diff --git a/basic-data/src/main/resources/mybatis/facility/FacilityAnnexMapper.xml b/basic-data/src/main/resources/mybatis/facility/FacilityAnnexMapper.xml
deleted file mode 100644
index 626f945..0000000
--- a/basic-data/src/main/resources/mybatis/facility/FacilityAnnexMapper.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.facility.mapper.FacilityAnnexMapper">
-    
-    <resultMap type="FacilityAnnex" id="FacilityAnnexResult">
-        <result property="createTime"    column="create_time"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="id"    column="id"    />
-        <result property="facilityId"    column="facility_id"    />
-        <result property="fileName"    column="file_name"    />
-        <result property="filesuffix"    column="file_suffix"    />
-        <result property="filePath"    column="file_path"    />
-        <result property="delFlage"    column="del_flage"    />
-    </resultMap>
-
-    <sql id="selectFacilityAnnexVo">
-        select create_time, create_by, update_time, update_by, id, facility_id, file_name, file_suffix, file_path, del_flage from facility_annex
-    </sql>
-
-    <select id="selectFacilityAnnexList" parameterType="FacilityAnnex" resultMap="FacilityAnnexResult">
-        <include refid="selectFacilityAnnexVo"/>
-        <where>
-            del_flage='N'
-            <if test="fileName != null  and fileName != ''"> and file_name like concat('%', #{fileName}, '%')</if>
-            <if test="facilityId != null  and facilityId != ''"> and facility_id=#{facilityId}</if>
-        </where>
-    </select>
-    
-    <select id="selectFacilityAnnexById" parameterType="Date" resultMap="FacilityAnnexResult">
-        <include refid="selectFacilityAnnexVo"/>
-        where id = #{id}
-    </select>
-        
-    <insert id="insertFacilityAnnex" parameterType="FacilityAnnex">
-        insert into facility_annex
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="createTime != null ">create_time,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="updateBy != null  and updateBy != ''">update_by,</if>
-            <if test="id != null  and id != ''">id,</if>
-            <if test="facilityId != null  and facilityId != ''">facility_id,</if>
-            <if test="fileName != null  and fileName != ''">file_name,</if>
-            <if test="filesuffix != null  and filesuffix != ''">file_suffix,</if>
-            <if test="filePath != null  and filePath != ''">file_path,</if>
-            <if test="delFlage != null  and delFlage != ''">del_flage,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="facilityId != null  and facilityId != ''">#{facilityId},</if>
-            <if test="fileName != null  and fileName != ''">#{fileName},</if>
-            <if test="filesuffix != null  and filesuffix != ''">#{filesuffix},</if>
-            <if test="filePath != null  and filePath != ''">#{filePath},</if>
-            <if test="delFlage != null  and delFlage != ''">#{delFlage},</if>
-         </trim>
-    </insert>
-
-    <update id="updateFacilityAnnex" parameterType="FacilityAnnex">
-        update facility_annex
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="id != null  and id != ''">id = #{id},</if>
-            <if test="facilityId != null  and facilityId != ''">facility_id = #{facilityId},</if>
-            <if test="fileName != null  and fileName != ''">file_name = #{fileName},</if>
-            <if test="filesuffix != null  and filesuffix != ''">file_suffix = #{filesuffix},</if>
-            <if test="filePath != null  and filePath != ''">file_path = #{filePath},</if>
-            <if test="delFlage != null  and delFlage != ''">del_flage = #{delFlage},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteFacilityAnnexById" parameterType="Date">
-        <!--delete from facility_annex where create_time = #{createTime}-->
-        update facility_annex set del_flage='Y',update_time=now() where id = #{id}
-    </delete>
-
-    <delete id="deleteFacilityAnnexByIds" parameterType="String">
-        <!--delete from facility_annex where create_time in-->
-        update facility_annex set del_flage='Y',update_time=now() where id in
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    
-</mapper>
diff --git a/basic-data/src/main/resources/mybatis/facility/FacilityArchivesMapper.xml b/basic-data/src/main/resources/mybatis/facility/FacilityArchivesMapper.xml
deleted file mode 100644
index 3cdf322..0000000
--- a/basic-data/src/main/resources/mybatis/facility/FacilityArchivesMapper.xml
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.facility.mapper.FacilityArchivesMapper">
-
-    <resultMap type="FacilityArchives" id="FacilityArchivesResult">
-        <result property="id"    column="id"    />
-        <result property="code"    column="code"    />
-        <result property="facilityName"    column="facility_name"    />
-        <result property="facilityType"    column="facility_type"    />
-        <result property="branchFactory"    column="branch_factory"    />
-        <result property="istallationLocationn"    column="installation_location"    />
-        <result property="facilityGrade"    column="facility_grade"    />
-        <result property="ratedPower"    column="rated_power"    />
-        <result property="productionDate"    column="production_date"    />
-        <result property="putrunDate"    column="putrun_date"    />
-        <result property="manufacturer"    column="manufacturer"    />
-        <result property="personCharge"    column="person_charge"    />
-        <result property="technicalData"    column="technical_data"    />
-        <result property="startTime"    column="start_time"    />
-        <result property="checkCycle"    column="check_cycle"    />
-        <result property="reminderCycle"    column="reminder_cycle"    />
-        <result property="remark"    column="remark"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="txflage"    column="txflage"    />
-        <result property="pointFlag"    column="point_flag"    />
-    </resultMap>
-
-    <sql id="selectFacilityArchivesVo">
-        select id, code, facility_name, facility_type, branch_factory, installation_location, facility_grade, rated_power, production_date, putrun_date, manufacturer, person_charge, technical_data, start_time, check_cycle, reminder_cycle, remark, create_time, create_by, update_time, update_by,point_flag,(start_time+check_cycle-reminder_cycle)&lt;=current_date as txflage from facility_archives
-    </sql>
-
-    <select id="selectFacilityArchivesList" parameterType="FacilityArchives" resultMap="FacilityArchivesResult">
-        <include refid="selectFacilityArchivesVo"/>
-        <where>
-            <if test="code != null  and code != ''"> and code like concat('%', #{code}, '%')</if>
-            <if test="facilityName != null  and facilityName != ''"> and facility_name like concat('%', #{facilityName}, '%')</if>
-            <if test="manufacturer != null  and manufacturer != ''"> and manufacturer like concat('%', #{manufacturer}, '%')</if>
-            <if test="facilityType != null  and facilityType != ''"> and facility_type = #{facilityType}</if>
-            <if test="branchFactory != null  and branchFactory != ''"> and branch_factory = #{branchFactory}</if>
-            <if test="istallationLocationn != null  and istallationLocationn != ''"> and installation_location like concat('%', #{istallationLocationn}, '%')</if>
-            <if test="facilityGrade != null  and facilityGrade != ''"> and facility_grade = #{facilityGrade}</if>
-            <if test="ratedPower != null  and ratedPower != ''"> and to_number(rated_power,'9999999999') >= to_number(#{ratedPower},'9999999999')</if>
-        </where>
-        order by code
-    </select>
-
-    <select id="selectFacilityArchivesById" parameterType="String" resultMap="FacilityArchivesResult">
-        <include refid="selectFacilityArchivesVo"/>
-        where id = #{id}
-    </select>
-
-    <insert id="insertFacilityArchives" parameterType="FacilityArchives">
-        insert into facility_archives
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="code != null  and code != ''">code,</if>
-            <if test="facilityName != null  and facilityName != ''">facility_name,</if>
-            <if test="facilityType != null  and facilityType != ''">facility_type,</if>
-            <if test="branchFactory != null  and branchFactory != ''">branch_factory,</if>
-            <if test="istallationLocationn != null  and istallationLocationn != ''">installation_location,</if>
-            <if test="facilityGrade != null  and facilityGrade != ''">facility_grade,</if>
-            <if test="ratedPower != null  and ratedPower != ''">rated_power,</if>
-            <if test="productionDate != null ">production_date,</if>
-            <if test="putrunDate != null ">putrun_date,</if>
-            <if test="manufacturer != null  and manufacturer != ''">manufacturer,</if>
-            <if test="personCharge != null  and personCharge != ''">person_charge,</if>
-            <if test="technicalData != null  and technicalData != ''">technical_data,</if>
-            <if test="startTime != null ">start_time,</if>
-            <if test="checkCycle != null ">check_cycle,</if>
-            <if test="reminderCycle != null ">reminder_cycle,</if>
-            <if test="remark != null  and remark != ''">remark,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="updateBy != null  and updateBy != ''">update_by,</if>
-            <if test="pointFlag != null  and pointFlag != ''">point_flag,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="code != null  and code != ''">#{code},</if>
-            <if test="facilityName != null  and facilityName != ''">#{facilityName},</if>
-            <if test="facilityType != null  and facilityType != ''">#{facilityType},</if>
-            <if test="branchFactory != null  and branchFactory != ''">#{branchFactory},</if>
-            <if test="istallationLocationn != null  and istallationLocationn != ''">#{istallationLocationn},</if>
-            <if test="facilityGrade != null  and facilityGrade != ''">#{facilityGrade},</if>
-            <if test="ratedPower != null  and ratedPower != ''">#{ratedPower},</if>
-            <if test="productionDate != null ">#{productionDate},</if>
-            <if test="putrunDate != null ">#{putrunDate},</if>
-            <if test="manufacturer != null  and manufacturer != ''">#{manufacturer},</if>
-            <if test="personCharge != null  and personCharge != ''">#{personCharge},</if>
-            <if test="technicalData != null  and technicalData != ''">#{technicalData},</if>
-            <if test="startTime != null ">#{startTime},</if>
-            <if test="checkCycle != null ">#{checkCycle},</if>
-            <if test="reminderCycle != null ">#{reminderCycle},</if>
-            <if test="remark != null  and remark != ''">#{remark},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
-            <if test="pointFlag != null  and pointFlag != ''">#{pointFlag},</if>
-         </trim>
-    </insert>
-
-    <update id="updateFacilityArchives" parameterType="FacilityArchives">
-        update facility_archives
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="code != null  and code != ''">code = #{code},</if>
-            <if test="facilityName != null  and facilityName != ''">facility_name = #{facilityName},</if>
-            <if test="facilityType != null  and facilityType != ''">facility_type = #{facilityType},</if>
-            <if test="branchFactory != null  and branchFactory != ''">branch_factory = #{branchFactory},</if>
-            <if test="istallationLocationn != null  and istallationLocationn != ''">installation_location = #{istallationLocationn},</if>
-            <if test="facilityGrade != null  and facilityGrade != ''">facility_grade = #{facilityGrade},</if>
-            <if test="ratedPower != null  and ratedPower != ''">rated_power = #{ratedPower},</if>
-            <if test="productionDate != null ">production_date = #{productionDate},</if>
-            <if test="putrunDate != null ">putrun_date = #{putrunDate},</if>
-            <if test="manufacturer != null  and manufacturer != ''">manufacturer = #{manufacturer},</if>
-            <if test="personCharge != null  and personCharge != ''">person_charge = #{personCharge},</if>
-            <if test="technicalData != null  and technicalData != ''">technical_data = #{technicalData},</if>
-            <if test="startTime != null ">start_time = #{startTime},</if>
-            <if test="checkCycle != null ">check_cycle = #{checkCycle},</if>
-            <if test="reminderCycle != null ">reminder_cycle = #{reminderCycle},</if>
-            <if test="remark != null  and remark != ''">remark = #{remark},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="pointFlag != null  and pointFlag != ''">point_flag = #{pointFlag},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteFacilityArchivesById" parameterType="String">
-        delete from facility_archives where id = #{id}
-    </delete>
-
-    <delete id="deleteFacilityArchivesByIds" parameterType="String">
-        delete from facility_archives where id in
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-
-
-    <update id="resetFacilityArchivesByIds" parameterType="String" >
-        update facility_archives
-        set start_time = NOW()
-        where id in
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </update>
-
-    <select id="selectFacilityArchivesByCode" parameterType="FacilityArchives" resultMap="FacilityArchivesResult">
-        <include refid="selectFacilityArchivesVo"/>
-        where code = #{code}
-        <if test="id != null  and id != ''"> and id != #{id} or id is null</if>
-    </select>
-    <select id="excelFacilityArchivesList" parameterType="FacilityArchives" resultMap="FacilityArchivesResult">
-        select id, code, facility_name, fun_getDiceData('facility_type',facility_type) as facility_type,
-        fun_getDiceData('branch_factory',branch_factory) as branch_factory, installation_location,
-        fun_getDiceData('facility_grade',facility_grade) as facility_grade, rated_power, to_char(production_date,'YYYY-MM-DD') as  production_date,
-        to_char(putrun_date,'YYYY-MM-DD') as putrun_date, manufacturer, person_charge,
-          technical_data, start_time, check_cycle, reminder_cycle, remark, create_time, create_by,
-           update_time, update_by
-        from facility_archives
-        <where>
-            <if test="code != null  and code != ''"> and code like concat('%', #{code}, '%')</if>
-            <if test="facilityName != null  and facilityName != ''"> and facility_name like concat('%', #{facilityName}, '%')</if>
-            <if test="manufacturer != null  and manufacturer != ''"> and manufacturer like concat('%', #{manufacturer}, '%')</if>
-            <if test="facilityType != null  and facilityType != ''"> and facility_type = #{facilityType}</if>
-            <if test="branchFactory != null  and branchFactory != ''"> and branch_factory = #{branchFactory}</if>
-            <if test="istallationLocationn != null  and istallationLocationn != ''"> and installation_location like concat('%', #{istallationLocationn}, '%')</if>
-            <if test="facilityGrade != null  and facilityGrade != ''"> and facility_grade = #{facilityGrade}</if>
-            <if test="ratedPower != null  and ratedPower != ''"> and to_number(rated_power,'9999999999') >= #{ratedPower}</if>
-        </where>
-        order by code
-    </select>
-</mapper>
diff --git a/basic-data/src/main/resources/mybatis/meter/MeterAnnexMapper.xml b/basic-data/src/main/resources/mybatis/meter/MeterAnnexMapper.xml
deleted file mode 100644
index a9edc49..0000000
--- a/basic-data/src/main/resources/mybatis/meter/MeterAnnexMapper.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.meter.mapper.MeterAnnexMapper">
-    
-    <resultMap type="MeterAnnex" id="MeterAnnexResult">
-        <result property="id"    column="id"    />
-        <result property="implementId"    column="implement_id"    />
-        <result property="fileName"    column="file_name"    />
-        <result property="fileSuffix"    column="file_suffix"    />
-        <result property="filePath"    column="file_path"    />
-        <result property="delFlage"    column="del_flage"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="updateBy"    column="update_by"    />
-    </resultMap>
-
-    <sql id="selectMeterAnnexVo">
-        select id, implement_id, file_name, file_suffix, file_path, del_flage, create_time, create_by, update_time, update_by from meter_annex
-    </sql>
-
-    <select id="selectMeterAnnexList" parameterType="MeterAnnex" resultMap="MeterAnnexResult">
-        <include refid="selectMeterAnnexVo"/>
-        <where>
-            del_flage='N'
-            <if test="fileName != null  and fileName != ''"> and file_name like concat('%', #{fileName}, '%')</if>
-            <if test="implementId != null  and implementId != ''"> and implement_id=#{implementId}</if>
-        </where>
-    </select>
-    
-    <select id="selectMeterAnnexById" parameterType="String" resultMap="MeterAnnexResult">
-        <include refid="selectMeterAnnexVo"/>
-        where id = #{id}
-    </select>
-        
-    <insert id="insertMeterAnnex" parameterType="MeterAnnex">
-        insert into meter_annex
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="implementId != null  and implementId != ''">implement_id,</if>
-            <if test="fileName != null  and fileName != ''">file_name,</if>
-            <if test="fileSuffix != null  and fileSuffix != ''">file_suffix,</if>
-            <if test="filePath != null  and filePath != ''">file_path,</if>
-            <if test="delFlage != null  and delFlage != ''">del_flage,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="updateBy != null  and updateBy != ''">update_by,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="implementId != null  and implementId != ''">#{implementId},</if>
-            <if test="fileName != null  and fileName != ''">#{fileName},</if>
-            <if test="fileSuffix != null  and fileSuffix != ''">#{fileSuffix},</if>
-            <if test="filePath != null  and filePath != ''">#{filePath},</if>
-            <if test="delFlage != null  and delFlage != ''">#{delFlage},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
-         </trim>
-    </insert>
-
-    <update id="updateMeterAnnex" parameterType="MeterAnnex">
-        update meter_annex
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="implementId != null  and implementId != ''">implement_id = #{implementId},</if>
-            <if test="fileName != null  and fileName != ''">file_name = #{fileName},</if>
-            <if test="fileSuffix != null  and fileSuffix != ''">file_suffix = #{fileSuffix},</if>
-            <if test="filePath != null  and filePath != ''">file_path = #{filePath},</if>
-            <if test="delFlage != null  and delFlage != ''">del_flage = #{delFlage},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteMeterAnnexById" parameterType="String">
-        <!--delete from meter_annex where id = #{id}-->
-        update meter_annex set del_flage='Y' where id = #{id}
-    </delete>
-
-    <delete id="deleteMeterAnnexByIds" parameterType="String">
-        <!--delete from meter_annex where id in -->
-        update meter_annex set del_flage='Y' where id in
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    
-</mapper>
diff --git a/basic-data/src/main/resources/mybatis/meter/MeterImplementCountMapper.xml b/basic-data/src/main/resources/mybatis/meter/MeterImplementCountMapper.xml
deleted file mode 100644
index e76a0a7..0000000
--- a/basic-data/src/main/resources/mybatis/meter/MeterImplementCountMapper.xml
+++ /dev/null
@@ -1,143 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.meter.mapper.MeterImplementCountMapper">
-    
-    <resultMap type="MeterImplementCount" id="MeterImplementCountResult">
-        <result property="code"    column="code"    />
-        <result property="meterName"    column="meter_name"    />
-        <result property="meterType"    column="meter_type"    />
-        <result property="modelNumber"    column="model_number"    />
-        <result property="measureRange"    column="measure_range"    />
-        <result property="id"    column="id"    />
-        <result property="manufacturer"    column="manufacturer"    />
-        <result property="personCharge"    column="person_charge"    />
-        <result property="installactionLocation"    column="installaction_location"    />
-        <result property="startTime"    column="start_time"    />
-        <result property="checkCycle"    column="check_cycle"    />
-        <result property="reminderCycle"    column="reminder_cycle"    />
-        <result property="meterStatus"    column="meter_status"    />
-        <result property="delFlage"    column="del_flage"    />
-        <result property="remark"    column="remark"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="txflage"    column="txflage"    />
-        <result property="putrunTime"    column="putrun_time"    />
-    </resultMap>
-
-    <sql id="selectMeterImplementCountVo">
-         select id, code, meter_name, meter_type, model_number, measure_range, manufacturer, person_charge, installaction_location, start_time, check_cycle, reminder_cycle, meter_status, del_flage, remark, putrun_time, create_time, create_by, update_time, update_by,(start_time+check_cycle-reminder_cycle)&lt;=current_date as txflage from meter_implement
-    </sql>
-
-    <select id="selectMeterImplementCountList" parameterType="MeterImplementCount" resultMap="MeterImplementCountResult">
-        <include refid="selectMeterImplementCountVo"/>
-        <where>  
-            <if test="code != null  and code != ''"> and code like concat('%', #{code}, '%')</if>
-            <if test="meterName != null  and meterName != ''"> and meter_name like concat('%', #{meterName}, '%')</if>
-            <if test="meterType != null  and meterType != ''"> and meter_type = #{meterType}</if>
-            <if test="measureRange != null  and measureRange != ''"> and measure_range like concat('%', #{measureRange}, '%')</if>
-            <if test="manufacturer != null  and manufacturer != ''"> and manufacturer like concat('%', #{manufacturer}, '%')</if>
-            <if test="installactionLocation != null  and installactionLocation != ''"> and installaction_location like concat('%', #{installactionLocation}, '%')</if>
-        </where>
-    </select>
-    
-    <select id="selectMeterImplementCountById" parameterType="String" resultMap="MeterImplementCountResult">
-        <include refid="selectMeterImplementCountVo"/>
-        where code = #{code}
-    </select>
-        
-    <insert id="insertMeterImplementCount" parameterType="MeterImplementCount">
-        insert into meter_implement
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="code != null  and code != ''">code,</if>
-            <if test="meterName != null  and meterName != ''">meter_name,</if>
-            <if test="meterType != null  and meterType != ''">meter_type,</if>
-            <if test="modelNumber != null  and modelNumber != ''">model_number,</if>
-            <if test="measureRange != null  and measureRange != ''">measure_range,</if>
-            <if test="id != null  and id != ''">id,</if>
-            <if test="manufacturer != null  and manufacturer != ''">manufacturer,</if>
-            <if test="personCharge != null  and personCharge != ''">person_charge,</if>
-            <if test="installactionLocation != null  and installactionLocation != ''">installaction_location,</if>
-            <if test="startTime != null ">start_time,</if>
-            <if test="checkCycle != null ">check_cycle,</if>
-            <if test="reminderCycle != null ">reminder_cycle,</if>
-            <if test="meterStatus != null  and meterStatus != ''">meter_status,</if>
-            <if test="delFlage != null  and delFlage != ''">del_flage,</if>
-            <if test="remark != null  and remark != ''">remark,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="updateBy != null  and updateBy != ''">update_by,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="code != null  and code != ''">#{code},</if>
-            <if test="meterName != null  and meterName != ''">#{meterName},</if>
-            <if test="meterType != null  and meterType != ''">#{meterType},</if>
-            <if test="modelNumber != null  and modelNumber != ''">#{modelNumber},</if>
-            <if test="measureRange != null  and measureRange != ''">#{measureRange},</if>
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="manufacturer != null  and manufacturer != ''">#{manufacturer},</if>
-            <if test="personCharge != null  and personCharge != ''">#{personCharge},</if>
-            <if test="installactionLocation != null  and installactionLocation != ''">#{installactionLocation},</if>
-            <if test="startTime != null ">#{startTime},</if>
-            <if test="checkCycle != null ">#{checkCycle},</if>
-            <if test="reminderCycle != null ">#{reminderCycle},</if>
-            <if test="meterStatus != null  and meterStatus != ''">#{meterStatus},</if>
-            <if test="delFlage != null  and delFlage != ''">#{delFlage},</if>
-            <if test="remark != null  and remark != ''">#{remark},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
-         </trim>
-    </insert>
-
-    <update id="updateMeterImplementCount" parameterType="MeterImplementCount">
-        update meter_implement
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="meterName != null  and meterName != ''">meter_name = #{meterName},</if>
-            <if test="meterType != null  and meterType != ''">meter_type = #{meterType},</if>
-            <if test="modelNumber != null  and modelNumber != ''">model_number = #{modelNumber},</if>
-            <if test="measureRange != null  and measureRange != ''">measure_range = #{measureRange},</if>
-            <if test="id != null  and id != ''">id = #{id},</if>
-            <if test="manufacturer != null  and manufacturer != ''">manufacturer = #{manufacturer},</if>
-            <if test="personCharge != null  and personCharge != ''">person_charge = #{personCharge},</if>
-            <if test="installactionLocation != null  and installactionLocation != ''">installaction_location = #{installactionLocation},</if>
-            <if test="startTime != null ">start_time = #{startTime},</if>
-            <if test="checkCycle != null ">check_cycle = #{checkCycle},</if>
-            <if test="reminderCycle != null ">reminder_cycle = #{reminderCycle},</if>
-            <if test="meterStatus != null  and meterStatus != ''">meter_status = #{meterStatus},</if>
-            <if test="delFlage != null  and delFlage != ''">del_flage = #{delFlage},</if>
-            <if test="remark != null  and remark != ''">remark = #{remark},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-        </trim>
-        where code = #{code}
-    </update>
-
-    <delete id="deleteMeterImplementCountById" parameterType="String">
-        delete from meter_implement where code = #{code}
-    </delete>
-
-  <!--  <delete id="deleteMeterImplementCountByIds" parameterType="String">
-        delete from meter_implement where code in 
-        <foreach item="code" collection="array" open="(" separator="," close=")">
-            #{code}
-        </foreach>
-    </delete>-->
-
-    <update id="deleteMeterImplementCountByIds" parameterType="String" >
-        update meter_implement
-        set start_time = NOW()
-        where code in
-        <foreach item="code" collection="array" open="(" separator="," close=")">
-        #{code}
-        </foreach>
-    </update>
-    
-</mapper>
diff --git a/basic-data/src/main/resources/mybatis/meter/MeterImplementMapper.xml b/basic-data/src/main/resources/mybatis/meter/MeterImplementMapper.xml
deleted file mode 100644
index 1fa0a7e..0000000
--- a/basic-data/src/main/resources/mybatis/meter/MeterImplementMapper.xml
+++ /dev/null
@@ -1,201 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.meter.mapper.MeterImplementMapper">
-    
-    <resultMap type="MeterImplement" id="MeterImplementResult">
-        <result property="id"    column="id"    />
-        <result property="code"    column="code"    />
-        <result property="meterName"    column="meter_name"    />
-        <result property="meterType"    column="meter_type"    />
-        <result property="modelNumber"    column="model_number"    />
-        <result property="measureRange"    column="measure_range"    />
-        <result property="manufacturer"    column="manufacturer"    />
-        <result property="personCharge"    column="person_charge"    />
-        <result property="installactionLocation"    column="installaction_location"    />
-        <result property="startTime"    column="start_time"    />
-        <result property="checkCycle"    column="check_cycle"    />
-        <result property="reminderCycle"    column="reminder_cycle"    />
-        <result property="meterStatus"    column="meter_status"    />
-        <result property="delFlage"    column="del_flage"    />
-        <result property="remark"    column="remark"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="txflage"    column="txflage"    />
-        <result property="putrunTime"    column="putrun_time"    />
-    </resultMap>
-    <resultMap type="MeterImplementExcel" id="MeterImplementResultExcel">
-        <result property="id"    column="id"    />
-        <result property="code"    column="code"    />
-        <result property="meterName"    column="meter_name"    />
-        <result property="meterType"    column="meter_type"    />
-        <result property="modelNumber"    column="model_number"    />
-        <result property="measureRange"    column="measure_range"    />
-        <result property="manufacturer"    column="manufacturer"    />
-        <result property="personCharge"    column="person_charge"    />
-        <result property="installactionLocation"    column="installaction_location"    />
-        <result property="startTime"    column="start_time"    />
-        <result property="checkCycle"    column="check_cycle"    />
-        <result property="reminderCycle"    column="reminder_cycle"    />
-        <result property="meterStatus"    column="meter_status"    />
-        <result property="delFlage"    column="del_flage"    />
-        <result property="remark"    column="remark"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="updateBy"    column="update_by"    />
-    </resultMap>
-    <sql id="selectMeterImplementVo">
-        select id, code, meter_name, meter_type, model_number, measure_range, manufacturer, person_charge, installaction_location, start_time, check_cycle, reminder_cycle, meter_status, del_flage, remark, putrun_time,create_time, create_by, update_time, update_by,(start_time+check_cycle-reminder_cycle)&lt;=current_date as txflage from meter_implement
-    </sql>
-
-    <select id="selectMeterImplementList" parameterType="MeterImplement" resultMap="MeterImplementResult">
-        <include refid="selectMeterImplementVo"/>
-        <where>
-            del_flage='N'
-            <if test="code != null  and code != ''"> and code like concat('%', #{code}, '%')</if>
-            <if test="meterName != null  and meterName != ''"> and meter_name like concat('%', #{meterName}, '%')</if>
-            <if test="meterType != null  and meterType != ''"> and meter_type = #{meterType}</if>
-            <if test="measureRange != null  and measureRange != ''"> and measure_range like concat('%', #{measureRange}, '%')</if>
-            <if test="manufacturer != null  and manufacturer != ''"> and manufacturer like concat('%', #{manufacturer}, '%')</if>
-            <if test="installactionLocation != null  and installactionLocation != ''"> and installaction_location like concat('%', #{installactionLocation}, '%')</if>
-        </where>
-        order by code
-    </select>
-
-    <select id="exectMeterImplementList" parameterType="MeterImplement" resultMap="MeterImplementResultExcel">
-        select id, code, meter_name, fun_getDiceData('sys_device_type',meter_status) as meter_type, model_number, measure_range, manufacturer,
-        person_charge, installaction_location, to_char(start_time,'YYYY-MM-DD') start_time, check_cycle, reminder_cycle, fun_getDiceData('meter_status',meter_status) as meter_status,
-        del_flage, remark, create_time, create_by, update_time, update_by
-        from meter_implement
-        <where>
-            del_flage='N'
-            <if test="code != null  and code != ''"> and code like concat('%', #{code}, '%')</if>
-            <if test="meterName != null  and meterName != ''"> and meter_name like concat('%', #{meterName}, '%')</if>
-            <if test="meterType != null  and meterType != ''"> and meter_type = #{meterType}</if>
-            <if test="measureRange != null  and measureRange != ''"> and measure_range like concat('%', #{measureRange}, '%')</if>
-            <if test="manufacturer != null  and manufacturer != ''"> and manufacturer like concat('%', #{manufacturer}, '%')</if>
-            <if test="installactionLocation != null  and installactionLocation != ''"> and installaction_location like concat('%', #{installactionLocation}, '%')</if>
-        </where>
-        order by code
-    </select>
-
-    <select id="selectMeterImplementById" parameterType="String" resultMap="MeterImplementResult">
-        <include refid="selectMeterImplementVo"/>
-        where id = #{id}
-    </select>
-
-    <select id="selectMeterImplementByCode" parameterType="MeterImplement" resultMap="MeterImplementResult">
-        <include refid="selectMeterImplementVo"/>
-        where code = #{code}
-        <if test="id != null  and id != ''"> and id != #{id} or id is null</if>
-    </select>
-
-    <select id="listMeterImplementByIds" resultMap="MeterImplementResult">
-        SELECT
-            "id",
-            code,
-            meter_name,
-            meter_type,
-            meter_status,
-            installaction_location
-        FROM
-            "meter_implement"
-        WHERE
-            id IN
-            <foreach collection="meterIdList" item="id" open="(" separator="," close=")">
-                #{id}
-            </foreach>
-    </select>
-
-    <insert id="insertMeterImplement" parameterType="MeterImplement">
-        insert into meter_implement
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="code != null  and code != ''">code,</if>
-            <if test="meterName != null  and meterName != ''">meter_name,</if>
-            <if test="meterType != null  and meterType != ''">meter_type,</if>
-            <if test="modelNumber != null  and modelNumber != ''">model_number,</if>
-            <if test="measureRange != null  and measureRange != ''">measure_range,</if>
-            <if test="manufacturer != null  and manufacturer != ''">manufacturer,</if>
-            <if test="personCharge != null  and personCharge != ''">person_charge,</if>
-            <if test="installactionLocation != null  and installactionLocation != ''">installaction_location,</if>
-            <if test="startTime != null ">start_time,</if>
-            <if test="putrunTime != null ">putrun_time,</if>
-            <if test="checkCycle != null ">check_cycle,</if>
-            <if test="reminderCycle != null ">reminder_cycle,</if>
-            <if test="meterStatus != null  and meterStatus != ''">meter_status,</if>
-            <if test="delFlage != null  and delFlage != ''">del_flage,</if>
-            <if test="remark != null  and remark != ''">remark,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="updateBy != null  and updateBy != ''">update_by,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="code != null  and code != ''">#{code},</if>
-            <if test="meterName != null  and meterName != ''">#{meterName},</if>
-            <if test="meterType != null  and meterType != ''">#{meterType},</if>
-            <if test="modelNumber != null  and modelNumber != ''">#{modelNumber},</if>
-            <if test="measureRange != null  and measureRange != ''">#{measureRange},</if>
-            <if test="manufacturer != null  and manufacturer != ''">#{manufacturer},</if>
-            <if test="personCharge != null  and personCharge != ''">#{personCharge},</if>
-            <if test="installactionLocation != null  and installactionLocation != ''">#{installactionLocation},</if>
-            <if test="startTime != null ">#{startTime},</if>
-            <if test="putrunTime != null ">#{putrunTime},</if>
-            <if test="checkCycle != null ">#{checkCycle},</if>
-            <if test="reminderCycle != null ">#{reminderCycle},</if>
-            <if test="meterStatus != null  and meterStatus != ''">#{meterStatus},</if>
-            <if test="delFlage != null  and delFlage != ''">#{delFlage},</if>
-            <if test="remark != null  and remark != ''">#{remark},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
-         </trim>
-    </insert>
-
-    <update id="updateMeterImplement" parameterType="MeterImplement">
-        update meter_implement
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="code != null  and code != ''">code = #{code},</if>
-            <if test="meterName != null  and meterName != ''">meter_name = #{meterName},</if>
-            <if test="meterType != null  and meterType != ''">meter_type = #{meterType},</if>
-            <if test="modelNumber != null  and modelNumber != ''">model_number = #{modelNumber},</if>
-            <if test="measureRange != null  and measureRange != ''">measure_range = #{measureRange},</if>
-            <if test="manufacturer != null  and manufacturer != ''">manufacturer = #{manufacturer},</if>
-            <if test="personCharge != null  and personCharge != ''">person_charge = #{personCharge},</if>
-            <if test="installactionLocation != null  and installactionLocation != ''">installaction_location = #{installactionLocation},</if>
-            <if test="startTime != null ">start_time = #{startTime},</if>
-            <if test="putrunTime != null ">putrun_time = #{putrunTime},</if>
-            <if test="checkCycle != null ">check_cycle = #{checkCycle},</if>
-            <if test="reminderCycle != null ">reminder_cycle = #{reminderCycle},</if>
-            <if test="meterStatus != null  and meterStatus != ''">meter_status = #{meterStatus},</if>
-            <if test="delFlage != null  and delFlage != ''">del_flage = #{delFlage},</if>
-            <if test="remark != null  and remark != ''">remark = #{remark},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteMeterImplementById" parameterType="String">
-        <!--update meter_implement set del_flage='Y' where id = #{id} 鍏堢敤鐗╃悊鍒犻櫎锛屽悗鏈熸湁蹇呰鍐嶆墦寮�閫昏緫鍒犻櫎-->
-        delete from meter_implement where id = #{id}
-    </delete>
-
-    <delete id="deleteMeterImplementByIds" parameterType="String">
-        <!--update meter_implement set del_flage='Y' where id in 鍏堢敤鐗╃悊鍒犻櫎锛屽悗鏈熸湁蹇呰鍐嶆墦寮�閫昏緫鍒犻櫎-->
-        delete from meter_implement where id in
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    
-</mapper>
diff --git a/basic-data/src/main/resources/mybatis/policy/PolicyAnnexMapper.xml b/basic-data/src/main/resources/mybatis/policy/PolicyAnnexMapper.xml
deleted file mode 100644
index d169a2f..0000000
--- a/basic-data/src/main/resources/mybatis/policy/PolicyAnnexMapper.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.policy.mapper.PolicyAnnexMapper">
-    
-    <resultMap type="PolicyAnnex" id="PolicyAnnexResult">
-        <result property="filePath"    column="file_path"    />
-        <result property="delFlage"    column="del_flage"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="createOperator"    column="create_operator"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="updateOperator"    column="update_operator"    />
-        <result property="id"    column="id"    />
-        <result property="regulationsId"    column="regulations_id"    />
-        <result property="fileName"    column="file_name"    />
-        <result property="fileSuffix"    column="file_suffix"    />
-    </resultMap>
-
-    <sql id="selectPolicyAnnexVo">
-        select file_path, del_flage, create_time, create_operator, update_time, update_operator, id, regulations_id, file_name, file_suffix from policy_annex
-    </sql>
-
-    <select id="selectPolicyAnnexList" parameterType="PolicyAnnex" resultMap="PolicyAnnexResult">
-        <include refid="selectPolicyAnnexVo"/>
-        <where>  
-            <if test="fileName != null  and fileName != ''"> and file_name like concat('%', #{fileName}, '%')</if>
-        </where>
-    </select>
-    
-    <select id="selectPolicyAnnexById" parameterType="String" resultMap="PolicyAnnexResult">
-        <include refid="selectPolicyAnnexVo"/>
-        where file_path = #{filePath}
-    </select>
-        
-    <insert id="insertPolicyAnnex" parameterType="PolicyAnnex">
-        insert into policy_annex
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="filePath != null  and filePath != ''">file_path,</if>
-            <if test="delFlage != null  and delFlage != ''">del_flage,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="createOperator != null  and createOperator != ''">create_operator,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="updateOperator != null  and updateOperator != ''">update_operator,</if>
-            <if test="id != null  and id != ''">id,</if>
-            <if test="regulationsId != null  and regulationsId != ''">regulations_id,</if>
-            <if test="fileName != null  and fileName != ''">file_name,</if>
-            <if test="fileSuffix != null  and fileSuffix != ''">file_suffix,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="filePath != null  and filePath != ''">#{filePath},</if>
-            <if test="delFlage != null  and delFlage != ''">#{delFlage},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="createOperator != null  and createOperator != ''">#{createOperator},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="updateOperator != null  and updateOperator != ''">#{updateOperator},</if>
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="regulationsId != null  and regulationsId != ''">#{regulationsId},</if>
-            <if test="fileName != null  and fileName != ''">#{fileName},</if>
-            <if test="fileSuffix != null  and fileSuffix != ''">#{fileSuffix},</if>
-         </trim>
-    </insert>
-
-    <update id="updatePolicyAnnex" parameterType="PolicyAnnex">
-        update policy_annex
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="delFlage != null  and delFlage != ''">del_flage = #{delFlage},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="createOperator != null  and createOperator != ''">create_operator = #{createOperator},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="updateOperator != null  and updateOperator != ''">update_operator = #{updateOperator},</if>
-            <if test="id != null  and id != ''">id = #{id},</if>
-            <if test="regulationsId != null  and regulationsId != ''">regulations_id = #{regulationsId},</if>
-            <if test="fileName != null  and fileName != ''">file_name = #{fileName},</if>
-            <if test="fileSuffix != null  and fileSuffix != ''">file_suffix = #{fileSuffix},</if>
-        </trim>
-        where file_path = #{filePath}
-    </update>
-
-    <delete id="deletePolicyAnnexById" parameterType="String">
-        delete from policy_annex where id = #{id}
-    </delete>
-
-    <delete id="deletePolicyAnnexByIds" parameterType="String">
-        delete from policy_annex where id in
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    
-</mapper>
\ No newline at end of file
diff --git a/basic-data/src/main/resources/mybatis/policy/PolicyRegulationsMapper.xml b/basic-data/src/main/resources/mybatis/policy/PolicyRegulationsMapper.xml
deleted file mode 100644
index 594f8f9..0000000
--- a/basic-data/src/main/resources/mybatis/policy/PolicyRegulationsMapper.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.policy.mapper.PolicyRegulationsMapper">
-    <resultMap type="PolicyRegulations" id="PolicyRegulationsResult">
-        <result property="id"    column="id"    />
-        <result property="titleName"    column="title_name"    />
-        <result property="content"    column="content"    />
-        <result property="sort"    column="sort"    />
-        <result property="creationTime"    column="creation_time"    />
-        <result property="operator"    column="operator"    />
-    </resultMap>
-
-    <sql id="selectPolicyRegulationsVo">
-       select id,title_name,content,fun_getDiceData('policy_sort',sort)as sort,to_char(creation_time,'YYYY-MM-DD') creation_time,operator from policy_regulations
-    </sql>
-
-    <select id="selectPolicyRegulationsList" parameterType="PolicyRegulations" resultMap="PolicyRegulationsResult">
-        <include refid="selectPolicyRegulationsVo"/>
-        <where>  
-            <if test="titleName != null  and titleName != ''"> and title_name like concat('%', #{titleName}, '%')</if>
-            <if test="content != null  and content != ''"> and content like concat('%', #{content}, '%')</if>
-            <if test="sort != null  and sort != ''"> and sort like concat('%', #{sort}, '%')</if>
-            <if test="creationTime != null "> and creation_time like concat('%', #{creationTime}, '%')</if>
-            <if test="operator != null  and operator != ''"> and operator like concat('%', #{operator}, '%')</if>
-        </where>
-    </select>
-    
-    <select id="selectPolicyRegulationsById" parameterType="String" resultMap="PolicyRegulationsResult">
-        <include refid="selectPolicyRegulationsVo"/>
-        where id = #{id}
-    </select>
-        
-    <insert id="insertPolicyRegulations" parameterType="PolicyRegulations">
-        insert into policy_regulations
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="titleName != null  and titleName != ''">title_name,</if>
-            <if test="content != null  and content != ''">content,</if>
-            <if test="sort != null  and sort != ''">sort,</if>
-            <if test="creationTime != null ">creation_time,</if>
-            <if test="operator != null  and operator != ''">operator,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="titleName != null  and titleName != ''">#{titleName},</if>
-            <if test="content != null  and content != ''">#{content},</if>
-            <if test="sort != null  and sort != ''">#{sort},</if>
-            <if test="creationTime != null ">#{creationTime},</if>
-            <if test="operator != null  and operator != ''">#{operator},</if>
-         </trim>
-    </insert>
-
-    <update id="updatePolicyRegulations" parameterType="PolicyRegulations">
-        update policy_regulations
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="titleName != null  and titleName != ''">title_name = #{titleName},</if>
-            <if test="content != null  and content != ''">content = #{content},</if>
-            <if test="sort != null  and sort != ''">sort = #{sort},</if>
-            <if test="creationTime != null ">creation_time = #{creationTime},</if>
-            <if test="operator != null  and operator != ''">operator = #{operator},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deletePolicyRegulationsById" parameterType="String">
-        delete from policy_regulations where id = #{id}
-    </delete>
-
-    <delete id="deletePolicyRegulationsByIds" parameterType="String">
-        delete from policy_regulations where id in 
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-
-    
-</mapper>
\ No newline at end of file
diff --git a/basic-data/src/main/resources/mybatis/policy/PolicyRegulationsTranslateMapper.xml b/basic-data/src/main/resources/mybatis/policy/PolicyRegulationsTranslateMapper.xml
deleted file mode 100644
index 3739a35..0000000
--- a/basic-data/src/main/resources/mybatis/policy/PolicyRegulationsTranslateMapper.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.policy.mapper.PolicyRegulationsTranslateMapper">
-    
-    <resultMap type="PolicyRegulationsTranslate" id="PolicyRegulationsTranslateResult">
-        <result property="id"    column="id"    />
-        <result property="titleName"    column="title_name"    />
-        <result property="content"    column="content"    />
-        <result property="sort"    column="sort"    />
-        <result property="creationTime"    column="creation_time"    />
-        <result property="operator"    column="operator"    />
-    </resultMap>
-
-    <sql id="selectPolicyRegulationsTranslateVo">
-         select "id",title_name,"content",fun_getDiceData('policy_sort',sort)as sort,to_char(creation_time,'YYYY-MM-DD') creation_time,"operator" from policy_regulations
-    </sql>
-
-    <select id="selectPolicyRegulationsTranslateList" parameterType="PolicyRegulationsTranslate" resultMap="PolicyRegulationsTranslateResult">
-        <include refid="selectPolicyRegulationsTranslateVo"/>
-        <where>  
-            <if test="titleName != null  and titleName != ''"> and title_name like concat('%', #{titleName}, '%')</if>
-            <if test="content != null  and content != ''"> and content like concat('%', #{content}, '%')</if>
-            <if test="sort != null  and sort != ''"> and sort like concat('%', #{sort}, '%')</if>
-            <if test="creationTime != null "> and creation_time like concat('%', #{creationTime}, '%')</if>
-            <if test="operator != null  and operator != ''"> and operator like concat('%', #{operator}, '%')</if>
-        </where>
-    </select>
-    
-    <select id="selectPolicyRegulationsTranslateById" parameterType="String" resultMap="PolicyRegulationsTranslateResult">
-        <include refid="selectPolicyRegulationsTranslateVo"/>
-        where id = #{id}
-    </select>
-        
-    <insert id="insertPolicyRegulationsTranslate" parameterType="PolicyRegulationsTranslate">
-        insert into policy_regulations
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="titleName != null  and titleName != ''">title_name,</if>
-            <if test="content != null  and content != ''">content,</if>
-            <if test="sort != null  and sort != ''">sort,</if>
-            <if test="creationTime != null ">creation_time,</if>
-            <if test="operator != null  and operator != ''">operator,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="titleName != null  and titleName != ''">#{titleName},</if>
-            <if test="content != null  and content != ''">#{content},</if>
-            <if test="sort != null  and sort != ''">#{sort},</if>
-            <if test="creationTime != null ">#{creationTime},</if>
-            <if test="operator != null  and operator != ''">#{operator},</if>
-         </trim>
-    </insert>
-
-    <update id="updatePolicyRegulationsTranslate" parameterType="PolicyRegulationsTranslate">
-        update policy_regulations
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="titleName != null  and titleName != ''">title_name = #{titleName},</if>
-            <if test="content != null  and content != ''">content = #{content},</if>
-            <if test="sort != null  and sort != ''">sort = #{sort},</if>
-            <if test="creationTime != null ">creation_time = #{creationTime},</if>
-            <if test="operator != null  and operator != ''">operator = #{operator},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deletePolicyRegulationsTranslateById" parameterType="String">
-        delete from policy_regulations where id = #{id}
-    </delete>
-
-    <delete id="deletePolicyRegulationsTranslateByIds" parameterType="String">
-        delete from policy_regulations where id in 
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    
-</mapper>
\ No newline at end of file
diff --git a/basic-data/src/main/resources/mybatis/workforce/RosteringDutyMapper.xml b/basic-data/src/main/resources/mybatis/workforce/RosteringDutyMapper.xml
deleted file mode 100644
index 2466d32..0000000
--- a/basic-data/src/main/resources/mybatis/workforce/RosteringDutyMapper.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.workforce.mapper.RosteringDutyMapper">
-    
-    <resultMap type="RosteringDuty" id="RosteringDutyResult">
-        <result property="id"    column="id"    />
-        <result property="code"    column="code"    />
-        <result property="name"    column="name"    />
-        <result property="deptId"    column="dept_id"    />
-        <result property="orderNo"    column="order_no"    />
-        <result property="description"    column="description"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="updateTime"    column="update_time"    />
-    </resultMap>
-
-    <sql id="selectRosteringDutyVo">
-        select id, code, name, dept_id,(SELECT s.dept_name FROM sys_dept s WHERE  s.dept_id = rostering_duty.dept_id )  deptName, order_no, description, create_by, create_time, update_by, update_time from rostering_duty
-    </sql>
-
-    <select id="selectRosteringDutyList" parameterType="RosteringDuty" resultMap="RosteringDutyResult">
-        <include refid="selectRosteringDutyVo"/>
-        <where>  
-            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
-            <if test="deptId != null  and deptId != ''"> and dept_id like concat('%', #{deptId}, '%')</if>
-            <if test="orderNo != null  and orderNo != ''"> and order_no like concat('%', #{orderNo}, '%')</if>
-            <if test="description != null  and description != ''"> and description like concat('%', #{description}, '%')</if>
-            <if test="createBy != null  and createBy != ''"> and create_by like concat('%', #{createBy}, '%')</if>
-            <if test="createTime != null "> and create_time like concat('%', #{createTime}, '%')</if>
-            <if test="updateBy != null  and updateBy != ''"> and update_by like concat('%', #{updateBy}, '%')</if>
-            <if test="updateTime != null "> and update_time like concat('%', #{updateTime}, '%')</if>
-        </where>
-    </select>
-    
-    <select id="selectRosteringDutyById" parameterType="String" resultMap="RosteringDutyResult">
-        <include refid="selectRosteringDutyVo"/>
-        where id = #{id}
-    </select>
-        
-    <insert id="insertRosteringDuty" parameterType="RosteringDuty">
-        insert into rostering_duty
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="code != null  and code != ''">code,</if>
-            <if test="name != null  and name != ''">name,</if>
-            <if test="deptId != null  and deptId != ''">dept_id,</if>
-            <if test="orderNo != null  and orderNo != ''">order_no,</if>
-            <if test="description != null  and description != ''">description,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="updateBy != null  and updateBy != ''">update_by,</if>
-            <if test="updateTime != null ">update_time,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="code != null  and code != ''">#{code},</if>
-            <if test="name != null  and name != ''">#{name},</if>
-            <if test="deptId != null  and deptId != ''">#{deptId},</if>
-            <if test="orderNo != null  and orderNo != ''">#{orderNo},</if>
-            <if test="description != null  and description != ''">#{description},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-         </trim>
-    </insert>
-
-    <update id="updateRosteringDuty" parameterType="RosteringDuty">
-        update rostering_duty
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="code != null  and code != ''">code = #{code},</if>
-            <if test="name != null  and name != ''">name = #{name},</if>
-            <if test="deptId != null  and deptId != ''">dept_id = #{deptId},</if>
-            <if test="orderNo != null  and orderNo != ''">order_no = #{orderNo},</if>
-            <if test="description != null  and description != ''">description = #{description},</if>
-            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteRosteringDutyById" parameterType="String">
-        delete from rostering_duty where id = #{id}
-    </delete>
-
-    <delete id="deleteRosteringDutyByIds" parameterType="String">
-        delete from rostering_duty where id in 
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    
-</mapper>
\ No newline at end of file
diff --git a/basic-data/src/main/resources/mybatis/workforce/RosteringMapper.xml b/basic-data/src/main/resources/mybatis/workforce/RosteringMapper.xml
deleted file mode 100644
index a4bf7bf..0000000
--- a/basic-data/src/main/resources/mybatis/workforce/RosteringMapper.xml
+++ /dev/null
@@ -1,175 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.workforce.mapper.RosteringMapper">
-    
-    <resultMap type="Rostering" id="RosteringResult">
-        <result property="id"    column="id"    />
-        <result property="code"    column="code"    />
-        <result property="name"    column="name"    />
-        <result property="schemeId"    column="scheme_id"    />
-        <result property="shiftId"    column="shift_id"    />
-        <result property="dutyId"    column="duty_id"    />
-        <result property="description"    column="description"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="departMemberId"    column="depart_member_id"  />
-        <result property="beginTimes"    column="begin_times"    />
-        <result property="endTimes"    column="end_times"  />
-    </resultMap>
-    <resultMap type="RosteringScheme" id="RosteringSchemeResult">
-        <result property="id"    column="id"    />
-        <result property="name"    column="name"    />
-    </resultMap>
-    <resultMap type="RosteringCopy" id="RosteringCopyResult">
-        <result property="code"    column="code"    />
-        <result property="name"    column="name"    />
-        <result property="schemeId"    column="scheme_id"    />
-        <result property="shiftName"    column="name"    />
-        <result property="startTime"    column="start_time"    />
-        <result property="enddTime"    column="endd_time"    />
-        <result property="isCrossDay"    column="is_cross_day"    />
-        <result property="dutyName"    column="name"    />
-        <result property="shiftId"    column="shift_id"    />
-        <result property="dutyId"    column="duty_id"    />
-    </resultMap>
-    <sql id="selectRosteringVo">
-        SELECT r.ID,
-            r.code,
-            r.NAME,
-            r.begin_times,
-            r.end_times,
-            r.scheme_id,
-            (SELECT name from rostering_scheme a where a.id=r.scheme_id) schemeName,
-            r.shift_id,
-           (SELECT name from rostering_shift d where d.id=r.shift_id) shiftName,
-            r.duty_id,
-            (SELECT name from rostering_duty d where d.id=r.duty_id) dutyName,
-            r.depart_member_id,
-            (SELECT s.dept_name FROM sys_dept s WHERE s.dept_id=r.depart_member_id) deptName,
-            r.description
-        FROM
-            rostering r
-
-    </sql>
-
-    <select id="selectRosteringList" parameterType="Rostering" resultMap="RosteringResult">
-        <include refid="selectRosteringVo"/>
-        <where>  
-            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
-            <if test="schemeId != null  and schemeId != ''"> and scheme_id like concat('%', #{schemeId}, '%')</if>
-            <if test="shiftId != null  and shiftId != ''"> and shift_id like concat('%', #{shiftId}, '%')</if>
-            <if test="dutyId != null  and dutyId != ''"> and duty_id like concat('%', #{dutyId}, '%')</if>
-            <if test="description != null  and description != ''"> and description like concat('%', #{description}, '%')</if>
-            <if test="departMemberId != null  and departMemberId != ''"> and depart_member_id like concat('%', #{departMemberId}, '%')</if>
-        </where>
-    </select>
-    <select id="selectSchemeNameList" parameterType="RosteringScheme" resultMap="RosteringSchemeResult">
-         select id,name from rostering_scheme
-    </select>
-
-    <select id="selectRosteringById" parameterType="String" resultMap="RosteringResult">
-        <include refid="selectRosteringVo"/>
-        where id = #{id}
-    </select>
-        
-    <insert id="insertRostering" parameterType="Rostering">
-        insert into rostering
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="code != null  and code != ''">code,</if>
-            <if test="name != null  and name != ''">name,</if>
-            <if test="schemeId != null  and schemeId != ''">scheme_id,</if>
-            <if test="shiftId != null  and shiftId != ''">shift_id,</if>
-            <if test="dutyId != null  and dutyId != ''">duty_id,</if>
-            <if test="description != null  and description != ''">description,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="departMemberId != null  and departMemberId != ''">depart_member_id,</if>
-            <if test="beginTimes != null">begin_times,</if>
-            <if test="endTimes != null">end_times,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="code != null  and code != ''">#{code},</if>
-            <if test="name != null  and name != ''">#{name},</if>
-            <if test="schemeId != null  and schemeId != ''">#{schemeId},</if>
-            <if test="shiftId != null  and shiftId != ''">#{shiftId},</if>
-            <if test="dutyId != null  and dutyId != ''">#{dutyId},</if>
-            <if test="description != null  and description != ''">#{description},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="departMemberId != null  and departMemberId != ''">#{departMemberId},</if>
-            <if test="beginTimes != null">#{beginTimes},</if>
-            <if test="endTimes != null">#{endTimes},</if>
-         </trim>
-    </insert>
-    <insert id="saveRostering1" parameterType="java.util.List">
-        <foreach item="dataItems" collection="dataItemVlues">
-            <if test="dataItems != null">
-                insert into rostering (id,code,name,scheme_id,shift_id,duty_id,description,create_by,create_time,depart_member_id,begin_times,end_times)
-                values (#{dataItems.id},#{dataItems.code},#{dataItems.name},#{dataItems.schemeId},#{dataItems.shiftId},#{dataItems.dutyId},#{dataItems.description},#{dataItems.createBy},#{dataItems.createTime},#{dataItems.departMemberId},#{dataItems.beginTimes},#{dataItems.endTimes});
-            </if>
-        </foreach>
-    </insert>
-    <insert id="saveRostering">
-        insert into rostering (id,code,name,scheme_id,shift_id,duty_id,description,create_by,create_time,depart_member_id,begin_times,end_times)
-        values
-        <foreach collection="list" item="dataItems" index="index" separator=",">
-            (#{dataItems.id},#{dataItems.code},#{dataItems.name},#{dataItems.schemeId},#{dataItems.shiftId},#{dataItems.dutyId},#{dataItems.description},#{dataItems.createBy},#{dataItems.createTime},#{dataItems.departMemberId},#{dataItems.beginTimes},#{dataItems.endTimes})
-        </foreach>
-    </insert>
-    <update id="updateRostering" parameterType="Rostering">
-        update rostering
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="code != null  and code != ''">code = #{code},</if>
-            <if test="name != null  and name != ''">name = #{name},</if>
-            <if test="schemeId != null  and schemeId != ''">scheme_id = #{schemeId},</if>
-            <if test="shiftId != null  and shiftId != ''">shift_id = #{shiftId},</if>
-            <if test="dutyId != null  and dutyId != ''">duty_id = #{dutyId},</if>
-            <if test="description != null  and description != ''">description = #{description},</if>
-            <if test="departMemberId != null  and departMemberId != ''">depart_member_id = #{departMemberId},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="beginTimes != null">begin_times = #{beginTimes},</if>
-            <if test="endTimes != null">end_times = #{endTimes},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteRosteringById" parameterType="String">
-        delete from rostering where id = #{id}
-    </delete>
-
-    <delete id="deleteRosteringByIds" parameterType="String">
-        delete from rostering where id in 
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-
-    <select id="selectList" parameterType="RosteringCopy" resultMap="RosteringCopyResult">
-        SELECT
-            s.code,
-            s.name,
-            s.scheme_id,
-            s.shift_id,
-	        s.duty_id,
-            (rs.name) shiftName,
-            rs.start_time,
-            rs.endd_time,
-            rs.is_cross_day,
-            (d.name) dutyName
-        FROM
-            rostering_scheme_item s
-            LEFT JOIN rostering_shift rs ON rs.id = s.shift_id
-            LEFT JOIN rostering_duty d ON d.id = s.duty_id
-        WHERE
-            scheme_id = #{schemeId}
-            AND rs.dept_id = #{departMemberId}
-
-    </select>
-</mapper>
\ No newline at end of file
diff --git a/basic-data/src/main/resources/mybatis/workforce/RosteringSchemeMapper.xml b/basic-data/src/main/resources/mybatis/workforce/RosteringSchemeMapper.xml
deleted file mode 100644
index 7a5a095..0000000
--- a/basic-data/src/main/resources/mybatis/workforce/RosteringSchemeMapper.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.workforce.mapper.RosteringSchemeMapper">
-    
-    <resultMap type="RosteringScheme" id="RosteringSchemeResult">
-        <result property="id"    column="id"    />
-        <result property="code"    column="code"    />
-        <result property="name"    column="name"    />
-        <result property="departMemberId"    column="departMemberId"    />
-        <result property="rosteringschemekind"    column="rosteringSchemeKind"    />
-        <result property="referencedate"    column="referenceDate"    />
-        <result property="isautorostering"    column="isAutoRostering"    />
-        <result property="description"    column="description"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="updateTime"    column="update_time"    />
-    </resultMap>
-
-    <sql id="selectRosteringSchemeVo">
-        select ID, code, NAME, "rosteringSchemeKind", "referenceDate", "isAutoRostering", description,(SELECT s.dept_name FROM sys_dept s WHERE  s.dept_id = "departMemberId" )  departMember, created_by, created_time, update_by, update_time from rostering_scheme
-    </sql>
-
-    <select id="selectRosteringSchemeList" parameterType="RosteringScheme" resultMap="RosteringSchemeResult">
-        <include refid="selectRosteringSchemeVo"/>
-        <where>  
-            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
-            <if test="departMemberId != null  and departMemberId != ''"> and "departMemberId" like concat('%', #{departMemberId}, '%')</if>
-            <if test="rosteringschemekind != null  and rosteringschemekind != ''"> and "rosteringSchemeKind" like concat('%', #{rosteringschemekind}, '%')</if>
-            <if test="referencedate != null "> and "referenceDate" like concat('%', #{referencedate}, '%')</if>
-            <if test="isautorostering != null "> and "isAutoRostering" like concat('%', #{isautorostering}, '%')</if>
-            <if test="description != null  and description != ''"> and description like concat('%', #{description}, '%')</if>
-        </where>
-    </select>
-    
-    <select id="selectRosteringSchemeById" parameterType="String" resultMap="RosteringSchemeResult">
-        <include refid="selectRosteringSchemeVo"/>
-        where id = #{id}
-    </select>
-        
-    <insert id="insertRosteringScheme" parameterType="RosteringScheme">
-        insert into rostering_scheme
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="code != null  and code != ''">code,</if>
-            <if test="name != null  and name != ''">name,</if>
-            <if test="departMemberId != null  and departMemberId != ''">"departMemberId",</if>
-            <if test="rosteringschemekind != null  and rosteringschemekind != ''">"rosteringSchemeKind",</if>
-            <if test="referencedate != null ">"referenceDate",</if>
-            <if test="isautorostering != null ">"isAutoRostering",</if>
-            <if test="description != null  and description != ''">description,</if>
-            <if test="createBy != null  and createdBy != ''">create_by,</if>
-            <if test="createTime != null ">create_time,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="code != null  and code != ''">#{code},</if>
-            <if test="name != null  and name != ''">#{name},</if>
-            <if test="departMemberId != null  and departMemberId != ''">#{departMemberId},</if>
-            <if test="rosteringschemekind != null  and rosteringschemekind != ''">#{rosteringschemekind},</if>
-            <if test="referencedate != null ">#{referencedate},</if>
-            <if test="isautorostering != null ">#{isautorostering},</if>
-            <if test="description != null  and description != ''">#{description},</if>
-            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-         </trim>
-    </insert>
-
-    <update id="updateRosteringScheme" parameterType="RosteringScheme">
-        update rostering_scheme
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="code != null  and code != ''">code = #{code},</if>
-            <if test="name != null  and name != ''">name = #{name},</if>
-            <if test="departMemberId != null  and departMemberId != ''">"departMemberId" = #{departMemberId},</if>
-            <if test="rosteringschemekind != null  and rosteringschemekind != ''">"rosteringSchemeKind" = #{rosteringschemekind},</if>
-            <if test="referencedate != null ">"referenceDate" = #{referencedate},</if>
-            <if test="isautorostering != null ">"isAutoRostering" = #{isautorostering},</if>
-            <if test="description != null  and description != ''">description = #{description},</if>
-            <if test="createdBy != null  and createdBy != ''">created_by = #{createdBy},</if>
-            <if test="createdTime != null ">created_time = #{createdTime},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteRosteringSchemeById" parameterType="String">
-        delete from rostering_scheme where id = #{id}
-    </delete>
-
-    <delete id="deleteRosteringSchemeByIds" parameterType="String">
-        delete from rostering_scheme where id in 
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    
-</mapper>
\ No newline at end of file
diff --git a/basic-data/src/main/resources/mybatis/workforce/RosteringSchemeitemMapper.xml b/basic-data/src/main/resources/mybatis/workforce/RosteringSchemeitemMapper.xml
deleted file mode 100644
index 9a02f26..0000000
--- a/basic-data/src/main/resources/mybatis/workforce/RosteringSchemeitemMapper.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.workforce.mapper.RosteringSchemeitemMapper">
-    <resultMap type="RosteringSchemeitem" id="RosteringSchemeitemResult">
-        <result property="id"    column="id"    />
-        <result property="code"    column="code"    />
-        <result property="name"    column="name"    />
-        <result property="schemeId"    column="scheme_id"    />
-        <result property="dayofloopdays"    column="dayOfLoopDays"    />
-        <result property="shiftId"    column="shift_id"    />
-        <result property="dutyId"    column="duty_id"    />
-        <result property="description"    column="description"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="updateTime"    column="update_time"    />
-    </resultMap>
-
-    <sql id="selectRosteringSchemeitemVo">
-        select id, code, name, scheme_id,(select name from rostering_scheme where id=scheme_id) schemeName, "dayOfLoopDays", shift_id,(select name from rostering_shift where id=shift_id) shiftName, duty_id,(select name from rostering_duty where id=duty_id) dutyName, description, create_by, create_time, update_by, update_time from rostering_scheme_item
-    </sql>
-
-    <select id="selectRosteringSchemeitemList" parameterType="RosteringSchemeitem" resultMap="RosteringSchemeitemResult">
-        <include refid="selectRosteringSchemeitemVo"/>
-        <where>
-            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
-            <if test="schemeId != null  and schemeId != ''"> and scheme_id like concat('%', #{schemeId}, '%')</if>
-            <if test="dayofloopdays != null  and dayofloopdays != ''"> and dayOfLoopDays like concat('%', #{dayofloopdays}, '%')</if>
-            <if test="shiftId != null  and shiftId != ''"> and shift_id like concat('%', #{shiftId}, '%')</if>
-            <if test="dutyId != null  and dutyId != ''"> and duty_id like concat('%', #{dutyId}, '%')</if>
-            <if test="description != null  and description != ''"> and description like concat('%', #{description}, '%')</if>
-        </where>
-    </select>
-
-    <select id="selectRosteringSchemeitemById" parameterType="String" resultMap="RosteringSchemeitemResult">
-        <include refid="selectRosteringSchemeitemVo"/>
-        where id = #{id}
-    </select>
-
-    <insert id="insertRosteringSchemeitem" parameterType="RosteringSchemeitem">
-        insert into rostering_scheme_item
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="code != null  and code != ''">code,</if>
-            <if test="name != null  and name != ''">name,</if>
-            <if test="schemeId != null  and schemeId != ''">scheme_id,</if>
-            <if test="dayofloopdays != null  and dayofloopdays != ''">"dayOfLoopDays",</if>
-            <if test="shiftId != null  and shiftId != ''">shift_id,</if>
-            <if test="dutyId != null  and dutyId != ''">duty_id,</if>
-            <if test="description != null  and description != ''">description,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="createTime != null ">create_time,</if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="code != null  and code != ''">#{code},</if>
-            <if test="name != null  and name != ''">#{name},</if>
-            <if test="schemeId != null  and schemeId != ''">#{schemeId},</if>
-            <if test="dayofloopdays != null  and dayofloopdays != ''">#{dayofloopdays},</if>
-            <if test="shiftId != null  and shiftId != ''">#{shiftId},</if>
-            <if test="dutyId != null  and dutyId != ''">#{dutyId},</if>
-            <if test="description != null  and description != ''">#{description},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="createTime != null ">#{createTime},</if>
-        </trim>
-    </insert>
-
-    <update id="updateRosteringSchemeitem" parameterType="RosteringSchemeitem">
-        update rostering_scheme_item
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="code != null  and code != ''">code = #{code},</if>
-            <if test="name != null  and name != ''">name = #{name},</if>
-            <if test="schemeId != null  and schemeId != ''">scheme_id = #{schemeId},</if>
-            <if test="dayofloopdays != null  and dayofloopdays != ''">"dayOfLoopDays" = #{dayofloopdays},</if>
-            <if test="shiftId != null  and shiftId != ''">shift_id = #{shiftId},</if>
-            <if test="dutyId != null  and dutyId != ''">duty_id = #{dutyId},</if>
-            <if test="description != null  and description != ''">description = #{description},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteRosteringSchemeitemById" parameterType="String">
-        delete from rostering_scheme_item where id = #{id}
-    </delete>
-
-    <delete id="deleteRosteringSchemeitemByIds" parameterType="String">
-        delete from rostering_scheme_item where id in
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-</mapper>
\ No newline at end of file
diff --git a/basic-data/src/main/resources/mybatis/workforce/RosteringShiftMapper.xml b/basic-data/src/main/resources/mybatis/workforce/RosteringShiftMapper.xml
deleted file mode 100644
index cc6def3..0000000
--- a/basic-data/src/main/resources/mybatis/workforce/RosteringShiftMapper.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.basic.data.workforce.mapper.RosteringShiftMapper">
-    
-    <resultMap type="RosteringShift" id="RosteringShiftResult">
-        <result property="id"    column="id"    />
-        <result property="code"    column="code"    />
-        <result property="name"    column="name"    />
-        <result property="deptId"    column="dept_id"    />
-        <result property="startTime"    column="start_time"    />
-        <result property="enddTime"    column="endd_time"    />
-        <result property="isCrossDay"    column="is_cross_day"    />
-        <result property="orderNo"    column="order_no"    />
-        <result property="description"    column="description"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="updateTime"    column="update_time"    />
-    </resultMap>
-    <resultMap type="SysDept" id="SysDeptResult">
-        <id property="deptId" column="dept_id"/>
-        <result property="parentId" column="parent_id"/>
-        <result property="deptName" column="dept_name"/>
-    </resultMap>
-    <sql id="selectRosteringShiftVo">
-        select id, code, name, dept_id, start_time, endd_time, is_cross_day, order_no, description,(SELECT s.dept_name FROM sys_dept s WHERE  s.dept_id = rostering_shift.dept_id )  deptName, create_by, create_time, update_by, update_time from rostering_shift
-
-    </sql>
-
-    <select id="selectRosteringShiftList" parameterType="RosteringShift" resultMap="RosteringShiftResult">
-        <include refid="selectRosteringShiftVo"/>
-        <where>  
-            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
-            <if test="deptId != null  and deptId != ''"> and dept_id like concat('%', #{deptId}, '%')</if>
-            <if test="startTime != null "> and start_time like concat('%', #{startTime}, '%')</if>
-            <if test="enddTime != null "> and endd_time like concat('%', #{enddTime}, '%')</if>
-            <if test="isCrossDay != null  and isCrossDay != ''"> and is_cross_day like concat('%', #{isCrossDay}, '%')</if>
-            <if test="orderNo != null  and orderNo != ''"> and order_no like concat('%', #{orderNo}, '%')</if>
-            <if test="description != null  and description != ''"> and description like concat('%', #{description}, '%')</if>
-        </where>
-    </select>
-    
-    <select id="selectRosteringShiftById" parameterType="String" resultMap="RosteringShiftResult">
-        <include refid="selectRosteringShiftVo"/>
-        where id = #{id}
-    </select>
-        
-    <insert id="insertRosteringShift" parameterType="RosteringShift">
-        insert into rostering_shift
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="code != null  and code != ''">code,</if>
-            <if test="name != null  and name != ''">name,</if>
-            <if test="deptId != null  and deptId != ''">dept_id,</if>
-            <if test="startTime != null ">start_time,</if>
-            <if test="enddTime != null ">endd_time,</if>
-            <if test="isCrossDay != null  and isCrossDay != ''">is_cross_day,</if>
-            <if test="orderNo != null  and orderNo != ''">order_no,</if>
-            <if test="description != null  and description != ''">description,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="createTime != null ">create_time,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="code != null  and code != ''">#{code},</if>
-            <if test="name != null  and name != ''">#{name},</if>
-            <if test="deptId != null  and deptId != ''">#{deptId},</if>
-            <if test="startTime != null ">#{startTime},</if>
-            <if test="enddTime != null ">#{enddTime},</if>
-            <if test="isCrossDay != null  and isCrossDay != ''">#{isCrossDay},</if>
-            <if test="orderNo != null  and orderNo != ''">#{orderNo},</if>
-            <if test="description != null  and description != ''">#{description},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="createTime != null ">#{createTime},</if>
-         </trim>
-    </insert>
-
-    <update id="updateRosteringShift" parameterType="RosteringShift">
-        update rostering_shift
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="code != null  and code != ''">code = #{code},</if>
-            <if test="name != null  and name != ''">name = #{name},</if>
-            <if test="deptId != null  and deptId != ''">dept_id = #{deptId},</if>
-            <if test="startTime != null ">start_time = #{startTime},</if>
-            <if test="enddTime != null ">endd_time = #{enddTime},</if>
-            <if test="isCrossDay != null  and isCrossDay != ''">is_cross_day = #{isCrossDay},</if>
-            <if test="orderNo != null  and orderNo != ''">order_no = #{orderNo},</if>
-            <if test="description != null  and description != ''">description = #{description},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteRosteringShiftById" parameterType="String">
-        delete from rostering_shift where id = #{id}
-    </delete>
-
-    <delete id="deleteRosteringShiftByIds" parameterType="String">
-        delete from rostering_shift where id in 
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    <select id="treeList" parameterType="SysDept" resultMap="SysDeptResult">
-        SELECT
-            dept_id,
-            parent_id,
-            dept_name
-        FROM
-            sys_dept
-        WHERE
-            status = '0'
-            AND del_flag = '0'
-    </select>
-    
-</mapper>
\ No newline at end of file
diff --git a/basic/pom.xml b/basic/pom.xml
deleted file mode 100644
index a8ace7f..0000000
--- a/basic/pom.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <parent>
-    <artifactId>energy-management</artifactId>
-    <groupId>com.dingzhuo</groupId>
-    <version>1.0.0</version>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-
-  <artifactId>basic</artifactId>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.dingzhuo</groupId>
-      <artifactId>parent</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-
-</project>
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/constant/Constants.java b/basic/src/main/java/com/dingzhuo/energy/common/constant/Constants.java
deleted file mode 100644
index 634e945..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/constant/Constants.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package com.dingzhuo.energy.common.constant;
-
-import io.jsonwebtoken.Claims;
-
-/**
- * 閫氱敤甯搁噺淇℃伅
- * 
- * @author ruoyi
- */
-public class Constants
-{
-    /**
-     * UTF-8 瀛楃闆�
-     */
-    public static final String UTF8 = "UTF-8";
-    
-    /**
-     * 閫氱敤鎴愬姛鏍囪瘑
-     */
-    public static final String SUCCESS = "0";
-
-    /**
-     * 閫氱敤澶辫触鏍囪瘑
-     */
-    public static final String FAIL = "1";
-
-    /**
-     * 鐧诲綍鎴愬姛
-     */
-    public static final String LOGIN_SUCCESS = "Success";
-
-    /**
-     * 娉ㄩ攢
-     */
-    public static final String LOGOUT = "Logout";
-
-    /**
-     * 鐧诲綍澶辫触
-     */
-    public static final String LOGIN_FAIL = "Error";
-
-    /**
-     * 楠岃瘉鐮� redis key
-     */
-    public static final String CAPTCHA_CODE_KEY = "captcha_codes:";
-
-    /**
-     * 鐧诲綍鐢ㄦ埛 redis key
-     */
-    public static final String LOGIN_TOKEN_KEY = "login_tokens:";
-
-    /**
-     * 楠岃瘉鐮佹湁鏁堟湡锛堝垎閽燂級
-     */
-    public static final Integer CAPTCHA_EXPIRATION = 2;
-
-    /**
-     * 浠ょ墝
-     */
-    public static final String TOKEN = "token";
-
-    /**
-     * 浠ょ墝鍓嶇紑
-     */
-    public static final String TOKEN_PREFIX = "Bearer ";
-
-    /**
-     * 浠ょ墝鍓嶇紑
-     */
-    public static final String LOGIN_USER_KEY = "login_user_key";
-
-    /**
-     * 鐢ㄦ埛ID
-     */
-    public static final String JWT_USERID = "userid";
-
-    /**
-     * 鐢ㄦ埛鍚嶇О
-     */
-    public static final String JWT_USERNAME = Claims.SUBJECT;
-
-    /**
-     * 鐢ㄦ埛澶村儚
-     */
-    public static final String JWT_AVATAR = "avatar";
-
-    /**
-     * 鍒涘缓鏃堕棿
-     */
-    public static final String JWT_CREATED = "created";
-
-    /**
-     * 鐢ㄦ埛鏉冮檺
-     */
-    public static final String JWT_AUTHORITIES = "authorities";
-
-    /**
-     * 璧勬簮鏄犲皠璺緞 鍓嶇紑
-     */
-    public static final String RESOURCE_PREFIX = "/profile";
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/constant/GenConstants.java b/basic/src/main/java/com/dingzhuo/energy/common/constant/GenConstants.java
deleted file mode 100644
index ecced41..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/constant/GenConstants.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.dingzhuo.energy.common.constant;
-
-/**
- * 浠g爜鐢熸垚閫氱敤甯搁噺
- * 
- * @author ruoyi
- */
-public class GenConstants
-{
-    /** 鍗曡〃锛堝鍒犳敼鏌ワ級 */
-    public static final String TPL_CRUD = "crud";
-
-    /** 鏍戣〃锛堝鍒犳敼鏌ワ級 */
-    public static final String TPL_TREE = "tree";
-
-    /** 鏍戠紪鐮佸瓧娈� */
-    public static final String TREE_CODE = "treeCode";
-
-    /** 鏍戠埗缂栫爜瀛楁 */
-    public static final String TREE_PARENT_CODE = "treeParentCode";
-
-    /** 鏍戝悕绉板瓧娈� */
-    public static final String TREE_NAME = "treeName";
-
-    /** 鏁版嵁搴撳瓧绗︿覆绫诲瀷 */
-    public static final String[] COLUMNTYPE_STR = { "char", "varchar", "narchar", "varchar2", "tinytext", "text",
-            "mediumtext", "longtext" };
-
-    /** 鏁版嵁搴撴椂闂寸被鍨� */
-    public static final String[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" };
-
-    /** 鏁版嵁搴撴暟瀛楃被鍨� */
-    public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer",
-            "bigint", "float", "float", "double", "decimal" };
-
-    /** 椤甸潰涓嶉渶瑕佺紪杈戝瓧娈� */
-    public static final String[] COLUMNNAME_NOT_EDIT = { "id", "create_by", "create_time", "del_flag" };
-
-    /** 椤甸潰涓嶉渶瑕佹樉绀虹殑鍒楄〃瀛楁 */
-    public static final String[] COLUMNNAME_NOT_LIST = { "id", "create_by", "create_time", "del_flag", "update_by",
-            "update_time" };
-
-    /** 椤甸潰涓嶉渶瑕佹煡璇㈠瓧娈� */
-    public static final String[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "del_flag", "update_by",
-            "update_time", "remark" };
-
-    /** Entity鍩虹被瀛楁 */
-    public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime", "remark" };
-
-    /** Tree鍩虹被瀛楁 */
-    public static final String[] TREE_ENTITY = { "parentName", "parentId", "orderNum", "ancestors" };
-
-    /** 鏂囨湰妗� */
-    public static final String HTML_INPUT = "input";
-
-    /** 鏂囨湰鍩� */
-    public static final String HTML_TEXTAREA = "textarea";
-
-    /** 涓嬫媺妗� */
-    public static final String HTML_SELECT = "select";
-
-    /** 鍗曢�夋 */
-    public static final String HTML_RADIO = "radio";
-
-    /** 澶嶉�夋 */
-    public static final String HTML_CHECKBOX = "checkbox";
-
-    /** 鏃ユ湡鎺т欢 */
-    public static final String HTML_DATETIME = "datetime";
-
-    /** 瀛楃涓茬被鍨� */
-    public static final String TYPE_STRING = "String";
-
-    /** 鏁村瀷 */
-    public static final String TYPE_INTEGER = "Integer";
-
-    /** 闀挎暣鍨� */
-    public static final String TYPE_LONG = "Long";
-
-    /** 娴偣鍨� */
-    public static final String TYPE_DOUBLE = "Double";
-
-    /** 楂樼簿搴﹁绠楃被鍨� */
-    public static final String TYPE_BIGDECIMAL = "BigDecimal";
-
-    /** 鏃堕棿绫诲瀷 */
-    public static final String TYPE_DATE = "Date";
-
-    /** 妯$硦鏌ヨ */
-    public static final String QUERY_LIKE = "LIKE";
-
-    /** 闇�瑕� */
-    public static final String REQUIRE = "1";
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/constant/HttpStatus.java b/basic/src/main/java/com/dingzhuo/energy/common/constant/HttpStatus.java
deleted file mode 100644
index f8c5b7f..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/constant/HttpStatus.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.dingzhuo.energy.common.constant;
-
-/**
- * 杩斿洖鐘舵�佺爜
- * 
- * @author ruoyi
- */
-public interface HttpStatus
-{
-    /**
-     * 鎿嶄綔鎴愬姛
-     */
-    int SUCCESS = 200;
-
-    /**
-     * 瀵硅薄鍒涘缓鎴愬姛
-     */
-    int CREATED = 201;
-
-    /**
-     * 璇锋眰宸茬粡琚帴鍙�
-     */
-    int ACCEPTED = 202;
-
-    /**
-     * 鎿嶄綔宸茬粡鎵ц鎴愬姛锛屼絾鏄病鏈夎繑鍥炴暟鎹�
-     */
-    int NO_CONTENT = 204;
-
-    /**
-     * 璧勬簮宸茶绉婚櫎
-     */
-    int MOVED_PERM = 301;
-
-    /**
-     * 閲嶅畾鍚�
-     */
-    int SEE_OTHER = 303;
-
-    /**
-     * 璧勬簮娌℃湁琚慨鏀�
-     */
-    int NOT_MODIFIED = 304;
-
-    /**
-     * 鍙傛暟鍒楄〃閿欒锛堢己灏戯紝鏍煎紡涓嶅尮閰嶏級
-     */
-    int BAD_REQUEST = 400;
-
-    /**
-     * 鏈巿鏉�
-     */
-    int UNAUTHORIZED = 401;
-
-    /**
-     * 璁块棶鍙楅檺锛屾巿鏉冭繃鏈�
-     */
-    int FORBIDDEN = 403;
-
-    /**
-     * 璧勬簮锛屾湇鍔℃湭鎵惧埌
-     */
-    int NOT_FOUND = 404;
-
-    /**
-     * 涓嶅厑璁哥殑http鏂规硶
-     */
-    int BAD_METHOD = 405;
-
-    /**
-     * 璧勬簮鍐茬獊锛屾垨鑰呰祫婧愯閿�
-     */
-    int CONFLICT = 409;
-
-    /**
-     * 涓嶆敮鎸佺殑鏁版嵁锛屽獟浣撶被鍨�
-     */
-    int UNSUPPORTED_TYPE = 415;
-
-    /**
-     * 绯荤粺鍐呴儴閿欒
-     */
-    int ERROR = 500;
-
-    /**
-     * 鎺ュ彛鏈疄鐜�
-     */
-    int NOT_IMPLEMENTED = 501;
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/constant/UserConstants.java b/basic/src/main/java/com/dingzhuo/energy/common/constant/UserConstants.java
deleted file mode 100644
index 1a6df86..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/constant/UserConstants.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.dingzhuo.energy.common.constant;
-
-/**
- * 鐢ㄦ埛甯搁噺淇℃伅
- * 
- * @author ruoyi
- */
-public class UserConstants
-{
-    /**
-     * 骞冲彴鍐呯郴缁熺敤鎴风殑鍞竴鏍囧織
-     */
-    public static final String SYS_USER = "SYS_USER";
-
-    /** 姝e父鐘舵�� */
-    public static final String NORMAL = "0";
-
-    /** 寮傚父鐘舵�� */
-    public static final String EXCEPTION = "1";
-
-    /** 鐢ㄦ埛灏佺鐘舵�� */
-    public static final String USER_BLOCKED = "1";
-
-    /** 瑙掕壊灏佺鐘舵�� */
-    public static final String ROLE_BLOCKED = "1";
-
-    /** 閮ㄩ棬姝e父鐘舵�� */
-    public static final String DEPT_NORMAL = "0";
-
-    /** 瀛楀吀姝e父鐘舵�� */
-    public static final String DICT_NORMAL = "0";
-
-    /** 鏄惁涓虹郴缁熼粯璁わ紙鏄級 */
-    public static final String YES = "Y";
-
-    /** 鏍¢獙杩斿洖缁撴灉鐮� */
-    public final static String UNIQUE = "0";
-    public final static String NOT_UNIQUE = "1";
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/core/lang/UUID.java b/basic/src/main/java/com/dingzhuo/energy/common/core/lang/UUID.java
deleted file mode 100644
index bf2a31c..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/core/lang/UUID.java
+++ /dev/null
@@ -1,483 +0,0 @@
-package com.dingzhuo.energy.common.core.lang;
-
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.util.Random;
-import java.util.concurrent.ThreadLocalRandom;
-
-import com.dingzhuo.energy.common.exception.UtilException;
-import com.dingzhuo.energy.common.exception.UtilException;
-
-/**
- * 鎻愪緵閫氱敤鍞竴璇嗗埆鐮侊紙universally unique identifier锛夛紙UUID锛夊疄鐜�
- *
- * @author ruoyi
- */
-public final class UUID implements java.io.Serializable, Comparable<UUID>
-{
-    private static final long serialVersionUID = -1185015143654744140L;
-
-    /**
-     * SecureRandom 鐨勫崟渚�
-     *
-     */
-    private static class Holder
-    {
-        static final SecureRandom numberGenerator = getSecureRandom();
-    }
-
-    /** 姝UID鐨勬渶楂�64鏈夋晥浣� */
-    private final long mostSigBits;
-
-    /** 姝UID鐨勬渶浣�64鏈夋晥浣� */
-    private final long leastSigBits;
-
-    /**
-     * 绉佹湁鏋勯��
-     * 
-     * @param data 鏁版嵁
-     */
-    private UUID(byte[] data)
-    {
-        long msb = 0;
-        long lsb = 0;
-        assert data.length == 16 : "data must be 16 bytes in length";
-        for (int i = 0; i < 8; i++)
-        {
-            msb = (msb << 8) | (data[i] & 0xff);
-        }
-        for (int i = 8; i < 16; i++)
-        {
-            lsb = (lsb << 8) | (data[i] & 0xff);
-        }
-        this.mostSigBits = msb;
-        this.leastSigBits = lsb;
-    }
-
-    /**
-     * 浣跨敤鎸囧畾鐨勬暟鎹瀯閫犳柊鐨� UUID銆�
-     *
-     * @param mostSigBits 鐢ㄤ簬 {@code UUID} 鐨勬渶楂樻湁鏁� 64 浣�
-     * @param leastSigBits 鐢ㄤ簬 {@code UUID} 鐨勬渶浣庢湁鏁� 64 浣�
-     */
-    public UUID(long mostSigBits, long leastSigBits)
-    {
-        this.mostSigBits = mostSigBits;
-        this.leastSigBits = leastSigBits;
-    }
-
-    /**
-     * 鑾峰彇绫诲瀷 4锛堜吉闅忔満鐢熸垚鐨勶級UUID 鐨勯潤鎬佸伐鍘傘�� 浣跨敤鍔犲瘑鐨勬湰鍦扮嚎绋嬩吉闅忔満鏁扮敓鎴愬櫒鐢熸垚璇� UUID銆�
-     * 
-     * @return 闅忔満鐢熸垚鐨� {@code UUID}
-     */
-    public static UUID fastUUID()
-    {
-        return randomUUID(false);
-    }
-
-    /**
-     * 鑾峰彇绫诲瀷 4锛堜吉闅忔満鐢熸垚鐨勶級UUID 鐨勯潤鎬佸伐鍘傘�� 浣跨敤鍔犲瘑鐨勫己浼殢鏈烘暟鐢熸垚鍣ㄧ敓鎴愯 UUID銆�
-     * 
-     * @return 闅忔満鐢熸垚鐨� {@code UUID}
-     */
-    public static UUID randomUUID()
-    {
-        return randomUUID(true);
-    }
-
-    /**
-     * 鑾峰彇绫诲瀷 4锛堜吉闅忔満鐢熸垚鐨勶級UUID 鐨勯潤鎬佸伐鍘傘�� 浣跨敤鍔犲瘑鐨勫己浼殢鏈烘暟鐢熸垚鍣ㄧ敓鎴愯 UUID銆�
-     * 
-     * @param isSecure 鏄惁浣跨敤{@link SecureRandom}濡傛灉鏄彲浠ヨ幏寰楁洿瀹夊叏鐨勯殢鏈虹爜锛屽惁鍒欏彲浠ュ緱鍒版洿濂界殑鎬ц兘
-     * @return 闅忔満鐢熸垚鐨� {@code UUID}
-     */
-    public static UUID randomUUID(boolean isSecure)
-    {
-        final Random ng = isSecure ? Holder.numberGenerator : getRandom();
-
-        byte[] randomBytes = new byte[16];
-        ng.nextBytes(randomBytes);
-        randomBytes[6] &= 0x0f; /* clear version */
-        randomBytes[6] |= 0x40; /* set to version 4 */
-        randomBytes[8] &= 0x3f; /* clear variant */
-        randomBytes[8] |= 0x80; /* set to IETF variant */
-        return new UUID(randomBytes);
-    }
-
-    /**
-     * 鏍规嵁鎸囧畾鐨勫瓧鑺傛暟缁勮幏鍙栫被鍨� 3锛堝熀浜庡悕绉扮殑锛塙UID 鐨勯潤鎬佸伐鍘傘��
-     *
-     * @param name 鐢ㄤ簬鏋勯�� UUID 鐨勫瓧鑺傛暟缁勩��
-     *
-     * @return 鏍规嵁鎸囧畾鏁扮粍鐢熸垚鐨� {@code UUID}
-     */
-    public static UUID nameUUIDFromBytes(byte[] name)
-    {
-        MessageDigest md;
-        try
-        {
-            md = MessageDigest.getInstance("MD5");
-        }
-        catch (NoSuchAlgorithmException nsae)
-        {
-            throw new InternalError("MD5 not supported");
-        }
-        byte[] md5Bytes = md.digest(name);
-        md5Bytes[6] &= 0x0f; /* clear version */
-        md5Bytes[6] |= 0x30; /* set to version 3 */
-        md5Bytes[8] &= 0x3f; /* clear variant */
-        md5Bytes[8] |= 0x80; /* set to IETF variant */
-        return new UUID(md5Bytes);
-    }
-
-    /**
-     * 鏍规嵁 {@link #toString()} 鏂规硶涓弿杩扮殑瀛楃涓叉爣鍑嗚〃绀哄舰寮忓垱寤簕@code UUID}銆�
-     *
-     * @param name 鎸囧畾 {@code UUID} 瀛楃涓�
-     * @return 鍏锋湁鎸囧畾鍊肩殑 {@code UUID}
-     * @throws IllegalArgumentException 濡傛灉 name 涓� {@link #toString} 涓弿杩扮殑瀛楃涓茶〃绀哄舰寮忎笉绗︽姏鍑烘寮傚父
-     *
-     */
-    public static UUID fromString(String name)
-    {
-        String[] components = name.split("-");
-        if (components.length != 5)
-        {
-            throw new IllegalArgumentException("Invalid UUID string: " + name);
-        }
-        for (int i = 0; i < 5; i++)
-        {
-            components[i] = "0x" + components[i];
-        }
-
-        long mostSigBits = Long.decode(components[0]).longValue();
-        mostSigBits <<= 16;
-        mostSigBits |= Long.decode(components[1]).longValue();
-        mostSigBits <<= 16;
-        mostSigBits |= Long.decode(components[2]).longValue();
-
-        long leastSigBits = Long.decode(components[3]).longValue();
-        leastSigBits <<= 48;
-        leastSigBits |= Long.decode(components[4]).longValue();
-
-        return new UUID(mostSigBits, leastSigBits);
-    }
-
-    /**
-     * 杩斿洖姝� UUID 鐨� 128 浣嶅�间腑鐨勬渶浣庢湁鏁� 64 浣嶃��
-     *
-     * @return 姝� UUID 鐨� 128 浣嶅�间腑鐨勬渶浣庢湁鏁� 64 浣嶃��
-     */
-    public long getLeastSignificantBits()
-    {
-        return leastSigBits;
-    }
-
-    /**
-     * 杩斿洖姝� UUID 鐨� 128 浣嶅�间腑鐨勬渶楂樻湁鏁� 64 浣嶃��
-     *
-     * @return 姝� UUID 鐨� 128 浣嶅�间腑鏈�楂樻湁鏁� 64 浣嶃��
-     */
-    public long getMostSignificantBits()
-    {
-        return mostSigBits;
-    }
-
-    /**
-     * 涓庢 {@code UUID} 鐩稿叧鑱旂殑鐗堟湰鍙�. 鐗堟湰鍙锋弿杩版 {@code UUID} 鏄浣曠敓鎴愮殑銆�
-     * <p>
-     * 鐗堟湰鍙峰叿鏈変互涓嬪惈鎰�:
-     * <ul>
-     * <li>1 鍩轰簬鏃堕棿鐨� UUID
-     * <li>2 DCE 瀹夊叏 UUID
-     * <li>3 鍩轰簬鍚嶇О鐨� UUID
-     * <li>4 闅忔満鐢熸垚鐨� UUID
-     * </ul>
-     *
-     * @return 姝� {@code UUID} 鐨勭増鏈彿
-     */
-    public int version()
-    {
-        // Version is bits masked by 0x000000000000F000 in MS long
-        return (int) ((mostSigBits >> 12) & 0x0f);
-    }
-
-    /**
-     * 涓庢 {@code UUID} 鐩稿叧鑱旂殑鍙樹綋鍙枫�傚彉浣撳彿鎻忚堪 {@code UUID} 鐨勫竷灞�銆�
-     * <p>
-     * 鍙樹綋鍙峰叿鏈変互涓嬪惈鎰忥細
-     * <ul>
-     * <li>0 涓� NCS 鍚戝悗鍏煎淇濈暀
-     * <li>2 <a href="http://www.ietf.org/rfc/rfc4122.txt">IETF&nbsp;RFC&nbsp;4122</a>(Leach-Salz), 鐢ㄤ簬姝ょ被
-     * <li>6 淇濈暀锛屽井杞悜鍚庡吋瀹�
-     * <li>7 淇濈暀渚涗互鍚庡畾涔変娇鐢�
-     * </ul>
-     *
-     * @return 姝� {@code UUID} 鐩稿叧鑱旂殑鍙樹綋鍙�
-     */
-    public int variant()
-    {
-        // This field is composed of a varying number of bits.
-        // 0 - - Reserved for NCS backward compatibility
-        // 1 0 - The IETF aka Leach-Salz variant (used by this class)
-        // 1 1 0 Reserved, Microsoft backward compatibility
-        // 1 1 1 Reserved for future definition.
-        return (int) ((leastSigBits >>> (64 - (leastSigBits >>> 62))) & (leastSigBits >> 63));
-    }
-
-    /**
-     * 涓庢 UUID 鐩稿叧鑱旂殑鏃堕棿鎴冲�笺��
-     *
-     * <p>
-     * 60 浣嶇殑鏃堕棿鎴冲�兼牴鎹 {@code UUID} 鐨� time_low銆乼ime_mid 鍜� time_hi 瀛楁鏋勯�犮��<br>
-     * 鎵�寰楀埌鐨勬椂闂存埑浠� 100 姣井绉掍负鍗曚綅锛屼粠 UTC锛堥�氱敤鍗忚皟鏃堕棿锛� 1582 骞� 10 鏈� 15 鏃ラ浂鏃跺紑濮嬨��
-     *
-     * <p>
-     * 鏃堕棿鎴冲�间粎鍦ㄥ湪鍩轰簬鏃堕棿鐨� UUID锛堝叾 version 绫诲瀷涓� 1锛変腑鎵嶆湁鎰忎箟銆�<br>
-     * 濡傛灉姝� {@code UUID} 涓嶆槸鍩轰簬鏃堕棿鐨� UUID锛屽垯姝ゆ柟娉曟姏鍑� UnsupportedOperationException銆�
-     *
-     * @throws UnsupportedOperationException 濡傛灉姝� {@code UUID} 涓嶆槸 version 涓� 1 鐨� UUID銆�
-     */
-    public long timestamp() throws UnsupportedOperationException
-    {
-        checkTimeBase();
-        return (mostSigBits & 0x0FFFL) << 48//
-                | ((mostSigBits >> 16) & 0x0FFFFL) << 32//
-                | mostSigBits >>> 32;
-    }
-
-    /**
-     * 涓庢 UUID 鐩稿叧鑱旂殑鏃堕挓搴忓垪鍊笺��
-     *
-     * <p>
-     * 14 浣嶇殑鏃堕挓搴忓垪鍊兼牴鎹 UUID 鐨� clock_seq 瀛楁鏋勯�犮�俢lock_seq 瀛楁鐢ㄤ簬淇濊瘉鍦ㄥ熀浜庢椂闂寸殑 UUID 涓殑鏃堕棿鍞竴鎬с��
-     * <p>
-     * {@code clockSequence} 鍊间粎鍦ㄥ熀浜庢椂闂寸殑 UUID锛堝叾 version 绫诲瀷涓� 1锛変腑鎵嶆湁鎰忎箟銆� 濡傛灉姝� UUID 涓嶆槸鍩轰簬鏃堕棿鐨� UUID锛屽垯姝ゆ柟娉曟姏鍑�
-     * UnsupportedOperationException銆�
-     *
-     * @return 姝� {@code UUID} 鐨勬椂閽熷簭鍒�
-     *
-     * @throws UnsupportedOperationException 濡傛灉姝� UUID 鐨� version 涓嶄负 1
-     */
-    public int clockSequence() throws UnsupportedOperationException
-    {
-        checkTimeBase();
-        return (int) ((leastSigBits & 0x3FFF000000000000L) >>> 48);
-    }
-
-    /**
-     * 涓庢 UUID 鐩稿叧鐨勮妭鐐瑰�笺��
-     *
-     * <p>
-     * 48 浣嶇殑鑺傜偣鍊兼牴鎹 UUID 鐨� node 瀛楁鏋勯�犮�傛瀛楁鏃ㄥ湪鐢ㄤ簬淇濆瓨鏈哄櫒鐨� IEEE 802 鍦板潃锛岃鍦板潃鐢ㄤ簬鐢熸垚姝� UUID 浠ヤ繚璇佺┖闂村敮涓�鎬с��
-     * <p>
-     * 鑺傜偣鍊间粎鍦ㄥ熀浜庢椂闂寸殑 UUID锛堝叾 version 绫诲瀷涓� 1锛変腑鎵嶆湁鎰忎箟銆�<br>
-     * 濡傛灉姝� UUID 涓嶆槸鍩轰簬鏃堕棿鐨� UUID锛屽垯姝ゆ柟娉曟姏鍑� UnsupportedOperationException銆�
-     *
-     * @return 姝� {@code UUID} 鐨勮妭鐐瑰��
-     *
-     * @throws UnsupportedOperationException 濡傛灉姝� UUID 鐨� version 涓嶄负 1
-     */
-    public long node() throws UnsupportedOperationException
-    {
-        checkTimeBase();
-        return leastSigBits & 0x0000FFFFFFFFFFFFL;
-    }
-
-    /**
-     * 杩斿洖姝@code UUID} 鐨勫瓧绗︿覆琛ㄧ幇褰㈠紡銆�
-     *
-     * <p>
-     * UUID 鐨勫瓧绗︿覆琛ㄧず褰㈠紡鐢辨 BNF 鎻忚堪锛�
-     * 
-     * <pre>
-     * {@code
-     * UUID                   = <time_low>-<time_mid>-<time_high_and_version>-<variant_and_sequence>-<node>
-     * time_low               = 4*<hexOctet>
-     * time_mid               = 2*<hexOctet>
-     * time_high_and_version  = 2*<hexOctet>
-     * variant_and_sequence   = 2*<hexOctet>
-     * node                   = 6*<hexOctet>
-     * hexOctet               = <hexDigit><hexDigit>
-     * hexDigit               = [0-9a-fA-F]
-     * }
-     * </pre>
-     * 
-     * </blockquote>
-     *
-     * @return 姝@code UUID} 鐨勫瓧绗︿覆琛ㄧ幇褰㈠紡
-     * @see #toString(boolean)
-     */
-    @Override
-    public String toString()
-    {
-        return toString(false);
-    }
-
-    /**
-     * 杩斿洖姝@code UUID} 鐨勫瓧绗︿覆琛ㄧ幇褰㈠紡銆�
-     *
-     * <p>
-     * UUID 鐨勫瓧绗︿覆琛ㄧず褰㈠紡鐢辨 BNF 鎻忚堪锛�
-     * 
-     * <pre>
-     * {@code
-     * UUID                   = <time_low>-<time_mid>-<time_high_and_version>-<variant_and_sequence>-<node>
-     * time_low               = 4*<hexOctet>
-     * time_mid               = 2*<hexOctet>
-     * time_high_and_version  = 2*<hexOctet>
-     * variant_and_sequence   = 2*<hexOctet>
-     * node                   = 6*<hexOctet>
-     * hexOctet               = <hexDigit><hexDigit>
-     * hexDigit               = [0-9a-fA-F]
-     * }
-     * </pre>
-     * 
-     * </blockquote>
-     *
-     * @param isSimple 鏄惁绠�鍗曟ā寮忥紝绠�鍗曟ā寮忎负涓嶅甫'-'鐨刄UID瀛楃涓�
-     * @return 姝@code UUID} 鐨勫瓧绗︿覆琛ㄧ幇褰㈠紡
-     */
-    public String toString(boolean isSimple)
-    {
-        final StringBuilder builder = new StringBuilder(isSimple ? 32 : 36);
-        // time_low
-        builder.append(digits(mostSigBits >> 32, 8));
-        if (false == isSimple)
-        {
-            builder.append('-');
-        }
-        // time_mid
-        builder.append(digits(mostSigBits >> 16, 4));
-        if (false == isSimple)
-        {
-            builder.append('-');
-        }
-        // time_high_and_version
-        builder.append(digits(mostSigBits, 4));
-        if (false == isSimple)
-        {
-            builder.append('-');
-        }
-        // variant_and_sequence
-        builder.append(digits(leastSigBits >> 48, 4));
-        if (false == isSimple)
-        {
-            builder.append('-');
-        }
-        // node
-        builder.append(digits(leastSigBits, 12));
-
-        return builder.toString();
-    }
-
-    /**
-     * 杩斿洖姝� UUID 鐨勫搱甯岀爜銆�
-     *
-     * @return UUID 鐨勫搱甯岀爜鍊笺��
-     */
-    public int hashCode()
-    {
-        long hilo = mostSigBits ^ leastSigBits;
-        return ((int) (hilo >> 32)) ^ (int) hilo;
-    }
-
-    /**
-     * 灏嗘瀵硅薄涓庢寚瀹氬璞℃瘮杈冦��
-     * <p>
-     * 褰撲笖浠呭綋鍙傛暟涓嶄负 {@code null}銆佽�屾槸涓�涓� UUID 瀵硅薄銆佸叿鏈変笌姝� UUID 鐩稿悓鐨� varriant銆佸寘鍚浉鍚岀殑鍊硷紙姣忎竴浣嶅潎鐩稿悓锛夋椂锛岀粨鏋滄墠涓� {@code true}銆�
-     *
-     * @param obj 瑕佷笌涔嬫瘮杈冪殑瀵硅薄
-     *
-     * @return 濡傛灉瀵硅薄鐩稿悓锛屽垯杩斿洖 {@code true}锛涘惁鍒欒繑鍥� {@code false}
-     */
-    public boolean equals(Object obj)
-    {
-        if ((null == obj) || (obj.getClass() != UUID.class))
-        {
-            return false;
-        }
-        UUID id = (UUID) obj;
-        return (mostSigBits == id.mostSigBits && leastSigBits == id.leastSigBits);
-    }
-
-    // Comparison Operations
-
-    /**
-     * 灏嗘 UUID 涓庢寚瀹氱殑 UUID 姣旇緝銆�
-     *
-     * <p>
-     * 濡傛灉涓や釜 UUID 涓嶅悓锛屼笖绗竴涓� UUID 鐨勬渶楂樻湁鏁堝瓧娈靛ぇ浜庣浜屼釜 UUID 鐨勫搴斿瓧娈碉紝鍒欑涓�涓� UUID 澶т簬绗簩涓� UUID銆�
-     *
-     * @param val 涓庢 UUID 姣旇緝鐨� UUID
-     *
-     * @return 鍦ㄦ UUID 灏忎簬銆佺瓑浜庢垨澶т簬 val 鏃讹紝鍒嗗埆杩斿洖 -1銆�0 鎴� 1銆�
-     *
-     */
-    public int compareTo(UUID val)
-    {
-        // The ordering is intentionally set up so that the UUIDs
-        // can simply be numerically compared as two numbers
-        return (this.mostSigBits < val.mostSigBits ? -1 : //
-                (this.mostSigBits > val.mostSigBits ? 1 : //
-                        (this.leastSigBits < val.leastSigBits ? -1 : //
-                                (this.leastSigBits > val.leastSigBits ? 1 : //
-                                        0))));
-    }
-
-    // -------------------------------------------------------------------------------------------------------------------
-    // Private method start
-    /**
-     * 杩斿洖鎸囧畾鏁板瓧瀵瑰簲鐨刪ex鍊�
-     * 
-     * @param val 鍊�
-     * @param digits 浣�
-     * @return 鍊�
-     */
-    private static String digits(long val, int digits)
-    {
-        long hi = 1L << (digits * 4);
-        return Long.toHexString(hi | (val & (hi - 1))).substring(1);
-    }
-
-    /**
-     * 妫�鏌ユ槸鍚︿负time-based鐗堟湰UUID
-     */
-    private void checkTimeBase()
-    {
-        if (version() != 1)
-        {
-            throw new UnsupportedOperationException("Not a time-based UUID");
-        }
-    }
-
-    /**
-     * 鑾峰彇{@link SecureRandom}锛岀被鎻愪緵鍔犲瘑鐨勫己闅忔満鏁扮敓鎴愬櫒 (RNG)
-     * 
-     * @return {@link SecureRandom}
-     */
-    public static SecureRandom getSecureRandom()
-    {
-        try
-        {
-            return SecureRandom.getInstance("SHA1PRNG");
-        }
-        catch (NoSuchAlgorithmException e)
-        {
-            throw new UtilException(e);
-        }
-    }
-
-    /**
-     * 鑾峰彇闅忔満鏁扮敓鎴愬櫒瀵硅薄<br>
-     * ThreadLocalRandom鏄疛DK 7涔嬪悗鎻愪緵骞跺彂浜х敓闅忔満鏁帮紝鑳藉瑙e喅澶氫釜绾跨▼鍙戠敓鐨勭珵浜変簤澶恒��
-     * 
-     * @return {@link ThreadLocalRandom}
-     */
-    public static ThreadLocalRandom getRandom()
-    {
-        return ThreadLocalRandom.current();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/core/text/CharsetKit.java b/basic/src/main/java/com/dingzhuo/energy/common/core/text/CharsetKit.java
deleted file mode 100644
index d5245ba..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/core/text/CharsetKit.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.dingzhuo.energy.common.core.text;
-
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-
-/**
- * 瀛楃闆嗗伐鍏风被
- * 
- * @author ruoyi
- */
-public class CharsetKit
-{
-    /** ISO-8859-1 */
-    public static final String ISO_8859_1 = "ISO-8859-1";
-    /** UTF-8 */
-    public static final String UTF_8 = "UTF-8";
-    /** GBK */
-    public static final String GBK = "GBK";
-
-    /** ISO-8859-1 */
-    public static final Charset CHARSET_ISO_8859_1 = StandardCharsets.ISO_8859_1;
-    /** UTF-8 */
-    public static final Charset CHARSET_UTF_8 = StandardCharsets.UTF_8;
-    /** GBK */
-    public static final Charset CHARSET_GBK = Charset.forName(GBK);
-
-    /**
-     * 杞崲涓篊harset瀵硅薄
-     * 
-     * @param charset 瀛楃闆嗭紝涓虹┖鍒欒繑鍥為粯璁ゅ瓧绗﹂泦
-     * @return Charset
-     */
-    public static Charset charset(String charset)
-    {
-        return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset);
-    }
-
-    /**
-     * 杞崲瀛楃涓茬殑瀛楃闆嗙紪鐮�
-     * 
-     * @param source 瀛楃涓�
-     * @param srcCharset 婧愬瓧绗﹂泦锛岄粯璁SO-8859-1
-     * @param destCharset 鐩爣瀛楃闆嗭紝榛樿UTF-8
-     * @return 杞崲鍚庣殑瀛楃闆�
-     */
-    public static String convert(String source, String srcCharset, String destCharset)
-    {
-        return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset));
-    }
-
-    /**
-     * 杞崲瀛楃涓茬殑瀛楃闆嗙紪鐮�
-     * 
-     * @param source 瀛楃涓�
-     * @param srcCharset 婧愬瓧绗﹂泦锛岄粯璁SO-8859-1
-     * @param destCharset 鐩爣瀛楃闆嗭紝榛樿UTF-8
-     * @return 杞崲鍚庣殑瀛楃闆�
-     */
-    public static String convert(String source, Charset srcCharset, Charset destCharset)
-    {
-        if (null == srcCharset)
-        {
-            srcCharset = StandardCharsets.ISO_8859_1;
-        }
-
-        if (null == destCharset)
-        {
-            srcCharset = StandardCharsets.UTF_8;
-        }
-
-        if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset))
-        {
-            return source;
-        }
-        return new String(source.getBytes(srcCharset), destCharset);
-    }
-
-    /**
-     * @return 绯荤粺瀛楃闆嗙紪鐮�
-     */
-    public static String systemCharset()
-    {
-        return Charset.defaultCharset().name();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/core/text/Convert.java b/basic/src/main/java/com/dingzhuo/energy/common/core/text/Convert.java
deleted file mode 100644
index 8bab4f7..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/core/text/Convert.java
+++ /dev/null
@@ -1,1001 +0,0 @@
-package com.dingzhuo.energy.common.core.text;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.nio.ByteBuffer;
-import java.nio.charset.Charset;
-import java.text.NumberFormat;
-import java.util.Set;
-
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-
-/**
- * 绫诲瀷杞崲鍣�
- * 
- * @author ruoyi
- */
-public class Convert
-{
-    /**
-     * 杞崲涓哄瓧绗︿覆<br>
-     * 濡傛灉缁欏畾鐨勫�间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static String toStr(Object value, String defaultValue)
-    {
-        if (null == value)
-        {
-            return defaultValue;
-        }
-        if (value instanceof String)
-        {
-            return (String) value;
-        }
-        return value.toString();
-    }
-
-    /**
-     * 杞崲涓哄瓧绗︿覆<br>
-     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static String toStr(Object value)
-    {
-        return toStr(value, null);
-    }
-
-    /**
-     * 杞崲涓哄瓧绗�<br>
-     * 濡傛灉缁欏畾鐨勫�间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static Character toChar(Object value, Character defaultValue)
-    {
-        if (null == value)
-        {
-            return defaultValue;
-        }
-        if (value instanceof Character)
-        {
-            return (Character) value;
-        }
-
-        final String valueStr = toStr(value, null);
-        return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0);
-    }
-
-    /**
-     * 杞崲涓哄瓧绗�<br>
-     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Character toChar(Object value)
-    {
-        return toChar(value, null);
-    }
-
-    /**
-     * 杞崲涓篵yte<br>
-     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static Byte toByte(Object value, Byte defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof Byte)
-        {
-            return (Byte) value;
-        }
-        if (value instanceof Number)
-        {
-            return ((Number) value).byteValue();
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            return Byte.parseByte(valueStr);
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓篵yte<br>
-     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Byte toByte(Object value)
-    {
-        return toByte(value, null);
-    }
-
-    /**
-     * 杞崲涓篠hort<br>
-     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static Short toShort(Object value, Short defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof Short)
-        {
-            return (Short) value;
-        }
-        if (value instanceof Number)
-        {
-            return ((Number) value).shortValue();
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            return Short.parseShort(valueStr.trim());
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓篠hort<br>
-     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Short toShort(Object value)
-    {
-        return toShort(value, null);
-    }
-
-    /**
-     * 杞崲涓篘umber<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static Number toNumber(Object value, Number defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof Number)
-        {
-            return (Number) value;
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            return NumberFormat.getInstance().parse(valueStr);
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓篘umber<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Number toNumber(Object value)
-    {
-        return toNumber(value, null);
-    }
-
-    /**
-     * 杞崲涓篿nt<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static Integer toInt(Object value, Integer defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof Integer)
-        {
-            return (Integer) value;
-        }
-        if (value instanceof Number)
-        {
-            return ((Number) value).intValue();
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            return Integer.parseInt(valueStr.trim());
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓篿nt<br>
-     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Integer toInt(Object value)
-    {
-        return toInt(value, null);
-    }
-
-    /**
-     * 杞崲涓篒nteger鏁扮粍<br>
-     * 
-     * @param str 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Integer[] toIntArray(String str)
-    {
-        return toIntArray(",", str);
-    }
-
-    /**
-     * 杞崲涓篖ong鏁扮粍<br>
-     * 
-     * @param str 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Long[] toLongArray(String str)
-    {
-        return toLongArray(",", str);
-    }
-
-    /**
-     * 杞崲涓篒nteger鏁扮粍<br>
-     * 
-     * @param split 鍒嗛殧绗�
-     * @param split 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Integer[] toIntArray(String split, String str)
-    {
-        if (StringUtils.isEmpty(str))
-        {
-            return new Integer[] {};
-        }
-        String[] arr = str.split(split);
-        final Integer[] ints = new Integer[arr.length];
-        for (int i = 0; i < arr.length; i++)
-        {
-            final Integer v = toInt(arr[i], 0);
-            ints[i] = v;
-        }
-        return ints;
-    }
-
-    /**
-     * 杞崲涓篖ong鏁扮粍<br>
-     * 
-     * @param split 鍒嗛殧绗�
-     * @param str 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Long[] toLongArray(String split, String str)
-    {
-        if (StringUtils.isEmpty(str))
-        {
-            return new Long[] {};
-        }
-        String[] arr = str.split(split);
-        final Long[] longs = new Long[arr.length];
-        for (int i = 0; i < arr.length; i++)
-        {
-            final Long v = toLong(arr[i], null);
-            longs[i] = v;
-        }
-        return longs;
-    }
-
-    /**
-     * 杞崲涓篠tring鏁扮粍<br>
-     * 
-     * @param str 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static String[] toStrArray(String str)
-    {
-        return toStrArray(",", str);
-    }
-
-    /**
-     * 杞崲涓篠tring鏁扮粍<br>
-     * 
-     * @param split 鍒嗛殧绗�
-     * @param split 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static String[] toStrArray(String split, String str)
-    {
-        return str.split(split);
-    }
-
-    /**
-     * 杞崲涓簂ong<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static Long toLong(Object value, Long defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof Long)
-        {
-            return (Long) value;
-        }
-        if (value instanceof Number)
-        {
-            return ((Number) value).longValue();
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            // 鏀寔绉戝璁℃暟娉�
-            return new BigDecimal(valueStr.trim()).longValue();
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓簂ong<br>
-     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Long toLong(Object value)
-    {
-        return toLong(value, null);
-    }
-
-    /**
-     * 杞崲涓篸ouble<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static Double toDouble(Object value, Double defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof Double)
-        {
-            return (Double) value;
-        }
-        if (value instanceof Number)
-        {
-            return ((Number) value).doubleValue();
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            // 鏀寔绉戝璁℃暟娉�
-            return new BigDecimal(valueStr.trim()).doubleValue();
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓篸ouble<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Double toDouble(Object value)
-    {
-        return toDouble(value, null);
-    }
-
-    /**
-     * 杞崲涓篎loat<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static Float toFloat(Object value, Float defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof Float)
-        {
-            return (Float) value;
-        }
-        if (value instanceof Number)
-        {
-            return ((Number) value).floatValue();
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            return Float.parseFloat(valueStr.trim());
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓篎loat<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Float toFloat(Object value)
-    {
-        return toFloat(value, null);
-    }
-
-    /**
-     * 杞崲涓篵oolean<br>
-     * String鏀寔鐨勫�间负锛歵rue銆乫alse銆亂es銆乷k銆乶o锛�1,0 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static Boolean toBool(Object value, Boolean defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof Boolean)
-        {
-            return (Boolean) value;
-        }
-        String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        valueStr = valueStr.trim().toLowerCase();
-        switch (valueStr)
-        {
-            case "true":
-                return true;
-            case "false":
-                return false;
-            case "yes":
-                return true;
-            case "ok":
-                return true;
-            case "no":
-                return false;
-            case "1":
-                return true;
-            case "0":
-                return false;
-            default:
-                return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓篵oolean<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Boolean toBool(Object value)
-    {
-        return toBool(value, null);
-    }
-
-    /**
-     * 杞崲涓篍num瀵硅薄<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 
-     * @param clazz Enum鐨凜lass
-     * @param value 鍊�
-     * @param defaultValue 榛樿鍊�
-     * @return Enum
-     */
-    public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value, E defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (clazz.isAssignableFrom(value.getClass()))
-        {
-            @SuppressWarnings("unchecked")
-            E myE = (E) value;
-            return myE;
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            return Enum.valueOf(clazz, valueStr);
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓篍num瀵硅薄<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 
-     * @param clazz Enum鐨凜lass
-     * @param value 鍊�
-     * @return Enum
-     */
-    public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value)
-    {
-        return toEnum(clazz, value, null);
-    }
-
-    /**
-     * 杞崲涓築igInteger<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static BigInteger toBigInteger(Object value, BigInteger defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof BigInteger)
-        {
-            return (BigInteger) value;
-        }
-        if (value instanceof Long)
-        {
-            return BigInteger.valueOf((Long) value);
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            return new BigInteger(valueStr);
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓築igInteger<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static BigInteger toBigInteger(Object value)
-    {
-        return toBigInteger(value, null);
-    }
-
-    /**
-     * 杞崲涓築igDecimal<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof BigDecimal)
-        {
-            return (BigDecimal) value;
-        }
-        if (value instanceof Long)
-        {
-            return new BigDecimal((Long) value);
-        }
-        if (value instanceof Double)
-        {
-            return new BigDecimal((Double) value);
-        }
-        if (value instanceof Integer)
-        {
-            return new BigDecimal((Integer) value);
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            return new BigDecimal(valueStr);
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓築igDecimal<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static BigDecimal toBigDecimal(Object value)
-    {
-        return toBigDecimal(value, null);
-    }
-
-    /**
-     * 灏嗗璞¤浆涓哄瓧绗︿覆<br>
-     * 1銆丅yte鏁扮粍鍜孊yteBuffer浼氳杞崲涓哄搴斿瓧绗︿覆鐨勬暟缁� 2銆佸璞℃暟缁勪細璋冪敤Arrays.toString鏂规硶
-     * 
-     * @param obj 瀵硅薄
-     * @return 瀛楃涓�
-     */
-    public static String utf8Str(Object obj)
-    {
-        return str(obj, CharsetKit.CHARSET_UTF_8);
-    }
-
-    /**
-     * 灏嗗璞¤浆涓哄瓧绗︿覆<br>
-     * 1銆丅yte鏁扮粍鍜孊yteBuffer浼氳杞崲涓哄搴斿瓧绗︿覆鐨勬暟缁� 2銆佸璞℃暟缁勪細璋冪敤Arrays.toString鏂规硶
-     * 
-     * @param obj 瀵硅薄
-     * @param charsetName 瀛楃闆�
-     * @return 瀛楃涓�
-     */
-    public static String str(Object obj, String charsetName)
-    {
-        return str(obj, Charset.forName(charsetName));
-    }
-
-    /**
-     * 灏嗗璞¤浆涓哄瓧绗︿覆<br>
-     * 1銆丅yte鏁扮粍鍜孊yteBuffer浼氳杞崲涓哄搴斿瓧绗︿覆鐨勬暟缁� 2銆佸璞℃暟缁勪細璋冪敤Arrays.toString鏂规硶
-     * 
-     * @param obj 瀵硅薄
-     * @param charset 瀛楃闆�
-     * @return 瀛楃涓�
-     */
-    public static String str(Object obj, Charset charset)
-    {
-        if (null == obj)
-        {
-            return null;
-        }
-
-        if (obj instanceof String)
-        {
-            return (String) obj;
-        }
-        else if (obj instanceof byte[] || obj instanceof Byte[])
-        {
-            return str(obj, charset);
-        }
-        else if (obj instanceof ByteBuffer)
-        {
-            return str((ByteBuffer) obj, charset);
-        }
-        return obj.toString();
-    }
-
-    /**
-     * 灏哹yte鏁扮粍杞负瀛楃涓�
-     * 
-     * @param bytes byte鏁扮粍
-     * @param charset 瀛楃闆�
-     * @return 瀛楃涓�
-     */
-    public static String str(byte[] bytes, String charset)
-    {
-        return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset));
-    }
-
-    /**
-     * 瑙g爜瀛楄妭鐮�
-     * 
-     * @param data 瀛楃涓�
-     * @param charset 瀛楃闆嗭紝濡傛灉姝ゅ瓧娈典负绌猴紝鍒欒В鐮佺殑缁撴灉鍙栧喅浜庡钩鍙�
-     * @return 瑙g爜鍚庣殑瀛楃涓�
-     */
-    public static String str(byte[] data, Charset charset)
-    {
-        if (data == null)
-        {
-            return null;
-        }
-
-        if (null == charset)
-        {
-            return new String(data);
-        }
-        return new String(data, charset);
-    }
-
-    /**
-     * 灏嗙紪鐮佺殑byteBuffer鏁版嵁杞崲涓哄瓧绗︿覆
-     * 
-     * @param data 鏁版嵁
-     * @param charset 瀛楃闆嗭紝濡傛灉涓虹┖浣跨敤褰撳墠绯荤粺瀛楃闆�
-     * @return 瀛楃涓�
-     */
-    public static String str(ByteBuffer data, String charset)
-    {
-        if (data == null)
-        {
-            return null;
-        }
-
-        return str(data, Charset.forName(charset));
-    }
-
-    /**
-     * 灏嗙紪鐮佺殑byteBuffer鏁版嵁杞崲涓哄瓧绗︿覆
-     * 
-     * @param data 鏁版嵁
-     * @param charset 瀛楃闆嗭紝濡傛灉涓虹┖浣跨敤褰撳墠绯荤粺瀛楃闆�
-     * @return 瀛楃涓�
-     */
-    public static String str(ByteBuffer data, Charset charset)
-    {
-        if (null == charset)
-        {
-            charset = Charset.defaultCharset();
-        }
-        return charset.decode(data).toString();
-    }
-
-    // ----------------------------------------------------------------------- 鍏ㄨ鍗婅杞崲
-    /**
-     * 鍗婅杞叏瑙�
-     * 
-     * @param input String.
-     * @return 鍏ㄨ瀛楃涓�.
-     */
-    public static String toSBC(String input)
-    {
-        return toSBC(input, null);
-    }
-
-    /**
-     * 鍗婅杞叏瑙�
-     * 
-     * @param input String
-     * @param notConvertSet 涓嶆浛鎹㈢殑瀛楃闆嗗悎
-     * @return 鍏ㄨ瀛楃涓�.
-     */
-    public static String toSBC(String input, Set<Character> notConvertSet)
-    {
-        char[] c = input.toCharArray();
-        for (int i = 0; i < c.length; i++)
-        {
-            if (null != notConvertSet && notConvertSet.contains(c[i]))
-            {
-                // 璺宠繃涓嶆浛鎹㈢殑瀛楃
-                continue;
-            }
-
-            if (c[i] == ' ')
-            {
-                c[i] = '\u3000';
-            }
-            else if (c[i] < '\177')
-            {
-                c[i] = (char) (c[i] + 65248);
-
-            }
-        }
-        return new String(c);
-    }
-
-    /**
-     * 鍏ㄨ杞崐瑙�
-     * 
-     * @param input String.
-     * @return 鍗婅瀛楃涓�
-     */
-    public static String toDBC(String input)
-    {
-        return toDBC(input, null);
-    }
-
-    /**
-     * 鏇挎崲鍏ㄨ涓哄崐瑙�
-     * 
-     * @param text 鏂囨湰
-     * @param notConvertSet 涓嶆浛鎹㈢殑瀛楃闆嗗悎
-     * @return 鏇挎崲鍚庣殑瀛楃
-     */
-    public static String toDBC(String text, Set<Character> notConvertSet)
-    {
-        char[] c = text.toCharArray();
-        for (int i = 0; i < c.length; i++)
-        {
-            if (null != notConvertSet && notConvertSet.contains(c[i]))
-            {
-                // 璺宠繃涓嶆浛鎹㈢殑瀛楃
-                continue;
-            }
-
-            if (c[i] == '\u3000')
-            {
-                c[i] = ' ';
-            }
-            else if (c[i] > '\uFF00' && c[i] < '\uFF5F')
-            {
-                c[i] = (char) (c[i] - 65248);
-            }
-        }
-        String returnString = new String(c);
-
-        return returnString;
-    }
-
-    /**
-     * 鏁板瓧閲戦澶у啓杞崲 鍏堝啓涓畬鏁寸殑鐒跺悗灏嗗闆舵嬀鏇挎崲鎴愰浂
-     * 
-     * @param n 鏁板瓧
-     * @return 涓枃澶у啓鏁板瓧
-     */
-    public static String digitUppercase(double n)
-    {
-        String[] fraction = { "瑙�", "鍒�" };
-        String[] digit = { "闆�", "澹�", "璐�", "鍙�", "鑲�", "浼�", "闄�", "鏌�", "鎹�", "鐜�" };
-        String[][] unit = { { "鍏�", "涓�", "浜�" }, { "", "鎷�", "浣�", "浠�" } };
-
-        String head = n < 0 ? "璐�" : "";
-        n = Math.abs(n);
-
-        String s = "";
-        for (int i = 0; i < fraction.length; i++)
-        {
-            s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(闆�.)+", "");
-        }
-        if (s.length() < 1)
-        {
-            s = "鏁�";
-        }
-        int integerPart = (int) Math.floor(n);
-
-        for (int i = 0; i < unit[0].length && integerPart > 0; i++)
-        {
-            String p = "";
-            for (int j = 0; j < unit[1].length && n > 0; j++)
-            {
-                p = digit[integerPart % 10] + unit[1][j] + p;
-                integerPart = integerPart / 10;
-            }
-            s = p.replaceAll("(闆�.)*闆�$", "").replaceAll("^$", "闆�") + unit[0][i] + s;
-        }
-        return head + s.replaceAll("(闆�.)*闆跺厓", "鍏�").replaceFirst("(闆�.)+", "").replaceAll("(闆�.)+", "闆�").replaceAll("^鏁�$", "闆跺厓鏁�");
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/core/text/StrFormatter.java b/basic/src/main/java/com/dingzhuo/energy/common/core/text/StrFormatter.java
deleted file mode 100644
index f000543..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/core/text/StrFormatter.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.dingzhuo.energy.common.core.text;
-
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-
-/**
- * 瀛楃涓叉牸寮忓寲
- * 
- * @author ruoyi
- */
-public class StrFormatter
-{
-    public static final String EMPTY_JSON = "{}";
-    public static final char C_BACKSLASH = '\\';
-    public static final char C_DELIM_START = '{';
-    public static final char C_DELIM_END = '}';
-
-    /**
-     * 鏍煎紡鍖栧瓧绗︿覆<br>
-     * 姝ゆ柟娉曞彧鏄畝鍗曞皢鍗犱綅绗� {} 鎸夌収椤哄簭鏇挎崲涓哄弬鏁�<br>
-     * 濡傛灉鎯宠緭鍑� {} 浣跨敤 \\杞箟 { 鍗冲彲锛屽鏋滄兂杈撳嚭 {} 涔嬪墠鐨� \ 浣跨敤鍙岃浆涔夌 \\\\ 鍗冲彲<br>
-     * 渚嬶細<br>
-     * 閫氬父浣跨敤锛歠ormat("this is {} for {}", "a", "b") -> this is a for b<br>
-     * 杞箟{}锛� format("this is \\{} for {}", "a", "b") -> this is \{} for a<br>
-     * 杞箟\锛� format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br>
-     * 
-     * @param strPattern 瀛楃涓叉ā鏉�
-     * @param argArray 鍙傛暟鍒楄〃
-     * @return 缁撴灉
-     */
-    public static String format(final String strPattern, final Object... argArray)
-    {
-        if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray))
-        {
-            return strPattern;
-        }
-        final int strPatternLength = strPattern.length();
-
-        // 鍒濆鍖栧畾涔夊ソ鐨勯暱搴︿互鑾峰緱鏇村ソ鐨勬�ц兘
-        StringBuilder sbuf = new StringBuilder(strPatternLength + 50);
-
-        int handledPosition = 0;
-        int delimIndex;// 鍗犱綅绗︽墍鍦ㄤ綅缃�
-        for (int argIndex = 0; argIndex < argArray.length; argIndex++)
-        {
-            delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition);
-            if (delimIndex == -1)
-            {
-                if (handledPosition == 0)
-                {
-                    return strPattern;
-                }
-                else
-                { // 瀛楃涓叉ā鏉垮墿浣欓儴鍒嗕笉鍐嶅寘鍚崰浣嶇锛屽姞鍏ュ墿浣欓儴鍒嗗悗杩斿洖缁撴灉
-                    sbuf.append(strPattern, handledPosition, strPatternLength);
-                    return sbuf.toString();
-                }
-            }
-            else
-            {
-                if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH)
-                {
-                    if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH)
-                    {
-                        // 杞箟绗︿箣鍓嶈繕鏈変竴涓浆涔夌锛屽崰浣嶇渚濇棫鏈夋晥
-                        sbuf.append(strPattern, handledPosition, delimIndex - 1);
-                        sbuf.append(Convert.utf8Str(argArray[argIndex]));
-                        handledPosition = delimIndex + 2;
-                    }
-                    else
-                    {
-                        // 鍗犱綅绗﹁杞箟
-                        argIndex--;
-                        sbuf.append(strPattern, handledPosition, delimIndex - 1);
-                        sbuf.append(C_DELIM_START);
-                        handledPosition = delimIndex + 1;
-                    }
-                }
-                else
-                {
-                    // 姝e父鍗犱綅绗�
-                    sbuf.append(strPattern, handledPosition, delimIndex);
-                    sbuf.append(Convert.utf8Str(argArray[argIndex]));
-                    handledPosition = delimIndex + 2;
-                }
-            }
-        }
-        // 鍔犲叆鏈�鍚庝竴涓崰浣嶇鍚庢墍鏈夌殑瀛楃
-        sbuf.append(strPattern, handledPosition, strPattern.length());
-
-        return sbuf.toString();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/enums/HttpMethod.java b/basic/src/main/java/com/dingzhuo/energy/common/enums/HttpMethod.java
deleted file mode 100644
index 63a6c6a..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/enums/HttpMethod.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.dingzhuo.energy.common.enums;
-
-import java.util.HashMap;
-import java.util.Map;
-import org.springframework.lang.Nullable;
-
-/**
- * 璇锋眰鏂瑰紡
- *
- * @author ruoyi
- */
-public enum HttpMethod
-{
-    GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE;
-
-    private static final Map<String, HttpMethod> mappings = new HashMap<>(16);
-
-    static
-    {
-        for (HttpMethod httpMethod : values())
-        {
-            mappings.put(httpMethod.name(), httpMethod);
-        }
-    }
-
-    @Nullable
-    public static HttpMethod resolve(@Nullable String method)
-    {
-        return (method != null ? mappings.get(method) : null);
-    }
-
-    public boolean matches(String method)
-    {
-        return (this == resolve(method));
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/enums/UserStatus.java b/basic/src/main/java/com/dingzhuo/energy/common/enums/UserStatus.java
deleted file mode 100644
index 3d9592c..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/enums/UserStatus.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.dingzhuo.energy.common.enums;
-
-/**
- * 鐢ㄦ埛鐘舵��
- * 
- * @author ruoyi
- */
-public enum UserStatus
-{
-    OK("0", "姝e父"), DISABLE("1", "鍋滅敤"), DELETED("2", "鍒犻櫎");
-
-    private final String code;
-    private final String info;
-
-    UserStatus(String code, String info)
-    {
-        this.code = code;
-        this.info = info;
-    }
-
-    public String getCode()
-    {
-        return code;
-    }
-
-    public String getInfo()
-    {
-        return info;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/exception/BaseException.java b/basic/src/main/java/com/dingzhuo/energy/common/exception/BaseException.java
deleted file mode 100644
index 558a806..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/exception/BaseException.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.dingzhuo.energy.common.exception;
-
-import com.dingzhuo.energy.common.utils.MessageUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-
-/**
- * 鍩虹寮傚父
- * 
- * @author ruoyi
- */
-public class BaseException extends RuntimeException
-{
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 鎵�灞炴ā鍧�
-     */
-    private String module;
-
-    /**
-     * 閿欒鐮�
-     */
-    private String code;
-
-    /**
-     * 閿欒鐮佸搴旂殑鍙傛暟
-     */
-    private Object[] args;
-
-    /**
-     * 閿欒娑堟伅
-     */
-    private String defaultMessage;
-
-    public BaseException(String module, String code, Object[] args, String defaultMessage)
-    {
-        this.module = module;
-        this.code = code;
-        this.args = args;
-        this.defaultMessage = defaultMessage;
-    }
-
-    public BaseException(String module, String code, Object[] args)
-    {
-        this(module, code, args, null);
-    }
-
-    public BaseException(String module, String defaultMessage)
-    {
-        this(module, null, null, defaultMessage);
-    }
-
-    public BaseException(String code, Object[] args)
-    {
-        this(null, code, args, null);
-    }
-
-    public BaseException(String defaultMessage)
-    {
-        this(null, null, null, defaultMessage);
-    }
-
-    @Override
-    public String getMessage()
-    {
-        String message = null;
-        if (!StringUtils.isEmpty(code))
-        {
-            message = MessageUtils.message(code, args);
-        }
-        if (message == null)
-        {
-            message = defaultMessage;
-        }
-        return message;
-    }
-
-    public String getModule()
-    {
-        return module;
-    }
-
-    public String getCode()
-    {
-        return code;
-    }
-
-    public Object[] getArgs()
-    {
-        return args;
-    }
-
-    public String getDefaultMessage()
-    {
-        return defaultMessage;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/exception/CustomException.java b/basic/src/main/java/com/dingzhuo/energy/common/exception/CustomException.java
deleted file mode 100644
index b71891f..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/exception/CustomException.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.dingzhuo.energy.common.exception;
-
-/**
- * 鑷畾涔夊紓甯�
- * 
- * @author ruoyi
- */
-public class CustomException extends RuntimeException
-{
-    private static final long serialVersionUID = 1L;
-
-    private Integer code;
-
-    private String message;
-
-    public CustomException(String message)
-    {
-        this.message = message;
-    }
-
-    public CustomException(String message, Integer code)
-    {
-        this.message = message;
-        this.code = code;
-    }
-
-    public CustomException(String message, Throwable e)
-    {
-        super(message, e);
-        this.message = message;
-    }
-
-    @Override
-    public String getMessage()
-    {
-        return message;
-    }
-
-    public Integer getCode()
-    {
-        return code;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/exception/DemoModeException.java b/basic/src/main/java/com/dingzhuo/energy/common/exception/DemoModeException.java
deleted file mode 100644
index f85c9e2..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/exception/DemoModeException.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.dingzhuo.energy.common.exception;
-
-/**
- * 婕旂ず妯″紡寮傚父
- * 
- * @author ruoyi
- */
-public class DemoModeException extends RuntimeException
-{
-    private static final long serialVersionUID = 1L;
-
-    public DemoModeException()
-    {
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/exception/UtilException.java b/basic/src/main/java/com/dingzhuo/energy/common/exception/UtilException.java
deleted file mode 100644
index f23460c..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/exception/UtilException.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.dingzhuo.energy.common.exception;
-
-/**
- * 宸ュ叿绫诲紓甯�
- * 
- * @author ruoyi
- */
-public class UtilException extends RuntimeException
-{
-    private static final long serialVersionUID = 8247610319171014183L;
-
-    public UtilException(Throwable e)
-    {
-        super(e.getMessage(), e);
-    }
-
-    public UtilException(String message)
-    {
-        super(message);
-    }
-
-    public UtilException(String message, Throwable throwable)
-    {
-        super(message, throwable);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/exception/file/FileException.java b/basic/src/main/java/com/dingzhuo/energy/common/exception/file/FileException.java
deleted file mode 100644
index 36b27a2..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/exception/file/FileException.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.dingzhuo.energy.common.exception.file;
-
-import com.dingzhuo.energy.common.exception.BaseException;
-
-/**
- * 鏂囦欢淇℃伅寮傚父绫�
- * 
- * @author ruoyi
- */
-public class FileException extends BaseException
-{
-    private static final long serialVersionUID = 1L;
-
-    public FileException(String code, Object[] args)
-    {
-        super("file", code, args, null);
-    }
-
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/exception/file/FileNameLengthLimitExceededException.java b/basic/src/main/java/com/dingzhuo/energy/common/exception/file/FileNameLengthLimitExceededException.java
deleted file mode 100644
index 421b9e3..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/exception/file/FileNameLengthLimitExceededException.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.dingzhuo.energy.common.exception.file;
-
-/**
- * 鏂囦欢鍚嶇О瓒呴暱闄愬埗寮傚父绫�
- * 
- * @author ruoyi
- */
-public class FileNameLengthLimitExceededException extends FileException
-{
-    private static final long serialVersionUID = 1L;
-
-    public FileNameLengthLimitExceededException(int defaultFileNameLength)
-    {
-        super("upload.filename.exceed.length", new Object[] { defaultFileNameLength });
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/exception/file/FileSizeLimitExceededException.java b/basic/src/main/java/com/dingzhuo/energy/common/exception/file/FileSizeLimitExceededException.java
deleted file mode 100644
index 1b064d4..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/exception/file/FileSizeLimitExceededException.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.dingzhuo.energy.common.exception.file;
-
-/**
- * 鏂囦欢鍚嶅ぇ灏忛檺鍒跺紓甯哥被
- * 
- * @author ruoyi
- */
-public class FileSizeLimitExceededException extends FileException
-{
-    private static final long serialVersionUID = 1L;
-
-    public FileSizeLimitExceededException(long defaultMaxSize)
-    {
-        super("upload.exceed.maxSize", new Object[] { defaultMaxSize });
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/exception/file/InvalidExtensionException.java b/basic/src/main/java/com/dingzhuo/energy/common/exception/file/InvalidExtensionException.java
deleted file mode 100644
index 978013f..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/exception/file/InvalidExtensionException.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.dingzhuo.energy.common.exception.file;
-
-import java.util.Arrays;
-import org.apache.commons.fileupload.FileUploadException;
-
-/**
- * 鏂囦欢涓婁紶 璇紓甯哥被
- * 
- * @author ruoyi
- */
-public class InvalidExtensionException extends FileUploadException
-{
-    private static final long serialVersionUID = 1L;
-
-    private String[] allowedExtension;
-    private String extension;
-    private String filename;
-
-    public InvalidExtensionException(String[] allowedExtension, String extension, String filename)
-    {
-        super("filename : [" + filename + "], extension : [" + extension + "], allowed extension : [" + Arrays.toString(allowedExtension) + "]");
-        this.allowedExtension = allowedExtension;
-        this.extension = extension;
-        this.filename = filename;
-    }
-
-    public String[] getAllowedExtension()
-    {
-        return allowedExtension;
-    }
-
-    public String getExtension()
-    {
-        return extension;
-    }
-
-    public String getFilename()
-    {
-        return filename;
-    }
-
-    public static class InvalidImageExtensionException extends InvalidExtensionException
-    {
-        private static final long serialVersionUID = 1L;
-
-        public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename)
-        {
-            super(allowedExtension, extension, filename);
-        }
-    }
-
-    public static class InvalidFlashExtensionException extends InvalidExtensionException
-    {
-        private static final long serialVersionUID = 1L;
-
-        public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename)
-        {
-            super(allowedExtension, extension, filename);
-        }
-    }
-
-    public static class InvalidMediaExtensionException extends InvalidExtensionException
-    {
-        private static final long serialVersionUID = 1L;
-
-        public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename)
-        {
-            super(allowedExtension, extension, filename);
-        }
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/exception/user/CaptchaException.java b/basic/src/main/java/com/dingzhuo/energy/common/exception/user/CaptchaException.java
deleted file mode 100644
index 220aedb..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/exception/user/CaptchaException.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.dingzhuo.energy.common.exception.user;
-
-/**
- * 楠岃瘉鐮侀敊璇紓甯哥被
- * 
- * @author ruoyi
- */
-public class CaptchaException extends UserException
-{
-    private static final long serialVersionUID = 1L;
-
-    public CaptchaException()
-    {
-        super("user.jcaptcha.error", null);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/exception/user/CaptchaExpireException.java b/basic/src/main/java/com/dingzhuo/energy/common/exception/user/CaptchaExpireException.java
deleted file mode 100644
index 58eb77c..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/exception/user/CaptchaExpireException.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.dingzhuo.energy.common.exception.user;
-
-/**
- * 楠岃瘉鐮佸け鏁堝紓甯哥被
- * 
- * @author ruoyi
- */
-public class CaptchaExpireException extends UserException
-{
-    private static final long serialVersionUID = 1L;
-
-    public CaptchaExpireException()
-    {
-        super("user.jcaptcha.expire", null);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/exception/user/UserException.java b/basic/src/main/java/com/dingzhuo/energy/common/exception/user/UserException.java
deleted file mode 100644
index db4dc73..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/exception/user/UserException.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.dingzhuo.energy.common.exception.user;
-
-import com.dingzhuo.energy.common.exception.BaseException;
-
-/**
- * 鐢ㄦ埛淇℃伅寮傚父绫�
- * 
- * @author ruoyi
- */
-public class UserException extends BaseException
-{
-    private static final long serialVersionUID = 1L;
-
-    public UserException(String code, Object[] args)
-    {
-        super("user", code, args, null);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/exception/user/UserPasswordNotMatchException.java b/basic/src/main/java/com/dingzhuo/energy/common/exception/user/UserPasswordNotMatchException.java
deleted file mode 100644
index c1e4499..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/exception/user/UserPasswordNotMatchException.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.dingzhuo.energy.common.exception.user;
-
-/**
- * 鐢ㄦ埛瀵嗙爜涓嶆纭垨涓嶇鍚堣鑼冨紓甯哥被
- * 
- * @author ruoyi
- */
-public class UserPasswordNotMatchException extends UserException
-{
-    private static final long serialVersionUID = 1L;
-
-    public UserPasswordNotMatchException()
-    {
-        super("user.password.not.match", null);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/Arith.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/Arith.java
deleted file mode 100644
index a003eb5..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/Arith.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package com.dingzhuo.energy.common.utils;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-
-/**
- * 绮剧‘鐨勬诞鐐规暟杩愮畻
- * 
- * @author ruoyi
- */
-public class Arith
-{
-
-    /** 榛樿闄ゆ硶杩愮畻绮惧害 */
-    private static final int DEF_DIV_SCALE = 10;
-
-    /** 杩欎釜绫讳笉鑳藉疄渚嬪寲 */
-    private Arith()
-    {
-    }
-
-    /**
-     * 鎻愪緵绮剧‘鐨勫姞娉曡繍绠椼��
-     * @param v1 琚姞鏁�
-     * @param v2 鍔犳暟
-     * @return 涓や釜鍙傛暟鐨勫拰
-     */
-    public static double add(double v1, double v2)
-    {
-        BigDecimal b1 = new BigDecimal(Double.toString(v1));
-        BigDecimal b2 = new BigDecimal(Double.toString(v2));
-        return b1.add(b2).doubleValue();
-    }
-
-    /**
-     * 鎻愪緵绮剧‘鐨勫噺娉曡繍绠椼��
-     * @param v1 琚噺鏁�
-     * @param v2 鍑忔暟
-     * @return 涓や釜鍙傛暟鐨勫樊
-     */
-    public static double sub(double v1, double v2)
-    {
-        BigDecimal b1 = new BigDecimal(Double.toString(v1));
-        BigDecimal b2 = new BigDecimal(Double.toString(v2));
-        return b1.subtract(b2).doubleValue();
-    }
-
-    /**
-     * 鎻愪緵绮剧‘鐨勪箻娉曡繍绠椼��
-     * @param v1 琚箻鏁�
-     * @param v2 涔樻暟
-     * @return 涓や釜鍙傛暟鐨勭Н
-     */
-    public static double mul(double v1, double v2)
-    {
-        BigDecimal b1 = new BigDecimal(Double.toString(v1));
-        BigDecimal b2 = new BigDecimal(Double.toString(v2));
-        return b1.multiply(b2).doubleValue();
-    }
-
-    /**
-     * 鎻愪緵锛堢浉瀵癸級绮剧‘鐨勯櫎娉曡繍绠楋紝褰撳彂鐢熼櫎涓嶅敖鐨勬儏鍐垫椂锛岀簿纭埌
-     * 灏忔暟鐐逛互鍚�10浣嶏紝浠ュ悗鐨勬暟瀛楀洓鑸嶄簲鍏ャ��
-     * @param v1 琚櫎鏁�
-     * @param v2 闄ゆ暟
-     * @return 涓や釜鍙傛暟鐨勫晢
-     */
-    public static double div(double v1, double v2)
-    {
-        return div(v1, v2, DEF_DIV_SCALE);
-    }
-
-    /**
-     * 鎻愪緵锛堢浉瀵癸級绮剧‘鐨勯櫎娉曡繍绠椼�傚綋鍙戠敓闄や笉灏界殑鎯呭喌鏃讹紝鐢眘cale鍙傛暟鎸�
-     * 瀹氱簿搴︼紝浠ュ悗鐨勬暟瀛楀洓鑸嶄簲鍏ャ��
-     * @param v1 琚櫎鏁�
-     * @param v2 闄ゆ暟
-     * @param scale 琛ㄧず琛ㄧず闇�瑕佺簿纭埌灏忔暟鐐逛互鍚庡嚑浣嶃��
-     * @return 涓や釜鍙傛暟鐨勫晢
-     */
-    public static double div(double v1, double v2, int scale)
-    {
-        if (scale < 0)
-        {
-            throw new IllegalArgumentException(
-                    "The scale must be a positive integer or zero");
-        }
-        BigDecimal b1 = new BigDecimal(Double.toString(v1));
-        BigDecimal b2 = new BigDecimal(Double.toString(v2));
-        if (b1.compareTo(BigDecimal.ZERO) == 0)
-        {
-            return BigDecimal.ZERO.doubleValue();
-        }
-        return b1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue();
-    }
-
-    /**
-     * 鎻愪緵绮剧‘鐨勫皬鏁颁綅鍥涜垗浜斿叆澶勭悊銆�
-     * @param v 闇�瑕佸洓鑸嶄簲鍏ョ殑鏁板瓧
-     * @param scale 灏忔暟鐐瑰悗淇濈暀鍑犱綅
-     * @return 鍥涜垗浜斿叆鍚庣殑缁撴灉
-     */
-    public static double round(double v, int scale)
-    {
-        if (scale < 0)
-        {
-            throw new IllegalArgumentException(
-                    "The scale must be a positive integer or zero");
-        }
-        BigDecimal b = new BigDecimal(Double.toString(v));
-        BigDecimal one = new BigDecimal("1");
-        return b.divide(one, scale, RoundingMode.HALF_UP).doubleValue();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/DateUtils.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/DateUtils.java
deleted file mode 100644
index f39262e..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/DateUtils.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package com.dingzhuo.energy.common.utils;
-
-import java.lang.management.ManagementFactory;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import org.apache.commons.lang3.time.DateFormatUtils;
-
-/**
- * 鏃堕棿宸ュ叿绫�
- * 
- * @author ruoyi
- */
-public class DateUtils extends org.apache.commons.lang3.time.DateUtils
-{
-    public static String YYYY = "yyyy";
-
-    public static String YYYY_MM = "yyyy-MM";
-
-    public static String YYYY_MM_DD = "yyyy-MM-dd";
-
-    public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
-
-    public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
-    
-    private static String[] parsePatterns = {
-            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", 
-            "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
-            "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
-
-    /**
-     * 鑾峰彇褰撳墠Date鍨嬫棩鏈�
-     * 
-     * @return Date() 褰撳墠鏃ユ湡
-     */
-    public static Date getNowDate()
-    {
-        return new Date();
-    }
-
-    /**
-     * 鑾峰彇褰撳墠鏃ユ湡, 榛樿鏍煎紡涓簓yyy-MM-dd
-     * 
-     * @return String
-     */
-    public static String getDate()
-    {
-        return dateTimeNow(YYYY_MM_DD);
-    }
-
-    public static final String getTime()
-    {
-        return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
-    }
-
-    public static final String dateTimeNow()
-    {
-        return dateTimeNow(YYYYMMDDHHMMSS);
-    }
-
-    public static final String dateTimeNow(final String format)
-    {
-        return parseDateToStr(format, new Date());
-    }
-
-    public static final String dateTime(final Date date)
-    {
-        return parseDateToStr(YYYY_MM_DD, date);
-    }
-
-    public static final String parseDateToStr(final String format, final Date date)
-    {
-        return new SimpleDateFormat(format).format(date);
-    }
-
-    public static final Date dateTime(final String format, final String ts)
-    {
-        try
-        {
-            return new SimpleDateFormat(format).parse(ts);
-        }
-        catch (ParseException e)
-        {
-            throw new RuntimeException(e);
-        }
-    }
-
-    /**
-     * 鏃ユ湡璺緞 鍗冲勾/鏈�/鏃� 濡�2018/08/08
-     */
-    public static final String datePath()
-    {
-        Date now = new Date();
-        return DateFormatUtils.format(now, "yyyy/MM/dd");
-    }
-
-    /**
-     * 鏃ユ湡璺緞 鍗冲勾/鏈�/鏃� 濡�20180808
-     */
-    public static final String dateTime()
-    {
-        Date now = new Date();
-        return DateFormatUtils.format(now, "yyyyMMdd");
-    }
-
-    /**
-     * 鏃ユ湡鍨嬪瓧绗︿覆杞寲涓烘棩鏈� 鏍煎紡
-     */
-    public static Date parseDate(Object str)
-    {
-        if (str == null)
-        {
-            return null;
-        }
-        try
-        {
-            return parseDate(str.toString(), parsePatterns);
-        }
-        catch (ParseException e)
-        {
-            return null;
-        }
-    }
-    
-    /**
-     * 鑾峰彇鏈嶅姟鍣ㄥ惎鍔ㄦ椂闂�
-     */
-    public static Date getServerStartDate()
-    {
-        long time = ManagementFactory.getRuntimeMXBean().getStartTime();
-        return new Date(time);
-    }
-
-    /**
-     * 璁$畻涓や釜鏃堕棿宸�
-     */
-    public static String getDatePoor(Date endDate, Date nowDate)
-    {
-        long nd = 1000 * 24 * 60 * 60;
-        long nh = 1000 * 60 * 60;
-        long nm = 1000 * 60;
-        // long ns = 1000;
-        // 鑾峰緱涓や釜鏃堕棿鐨勬绉掓椂闂村樊寮�
-        long diff = endDate.getTime() - nowDate.getTime();
-        // 璁$畻宸灏戝ぉ
-        long day = diff / nd;
-        // 璁$畻宸灏戝皬鏃�
-        long hour = diff % nd / nh;
-        // 璁$畻宸灏戝垎閽�
-        long min = diff % nd % nh / nm;
-        // 璁$畻宸灏戠//杈撳嚭缁撴灉
-        // long sec = diff % nd % nh % nm / ns;
-        return day + "澶�" + hour + "灏忔椂" + min + "鍒嗛挓";
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/IdUtils.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/IdUtils.java
deleted file mode 100644
index 37c0e72..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/IdUtils.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.dingzhuo.energy.common.utils;
-
-import com.dingzhuo.energy.common.core.lang.UUID;
-
-/**
- * ID鐢熸垚鍣ㄥ伐鍏风被
- * 
- * @author ruoyi
- */
-public class IdUtils
-{
-    /**
-     * 鑾峰彇闅忔満UUID
-     * 
-     * @return 闅忔満UUID
-     */
-    public static String randomUUID()
-    {
-        return UUID.randomUUID().toString();
-    }
-
-    /**
-     * 绠�鍖栫殑UUID锛屽幓鎺変簡妯嚎
-     * 
-     * @return 绠�鍖栫殑UUID锛屽幓鎺変簡妯嚎
-     */
-    public static String simpleUUID()
-    {
-        return UUID.randomUUID().toString(true);
-    }
-
-    /**
-     * 鑾峰彇闅忔満UUID锛屼娇鐢ㄦ�ц兘鏇村ソ鐨凾hreadLocalRandom鐢熸垚UUID
-     * 
-     * @return 闅忔満UUID
-     */
-    public static String fastUUID()
-    {
-        return UUID.fastUUID().toString();
-    }
-
-    /**
-     * 绠�鍖栫殑UUID锛屽幓鎺変簡妯嚎锛屼娇鐢ㄦ�ц兘鏇村ソ鐨凾hreadLocalRandom鐢熸垚UUID
-     * 
-     * @return 绠�鍖栫殑UUID锛屽幓鎺変簡妯嚎
-     */
-    public static String fastSimpleUUID()
-    {
-        return UUID.fastUUID().toString(true);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/LogUtils.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/LogUtils.java
deleted file mode 100644
index 8abe4ec..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/LogUtils.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.dingzhuo.energy.common.utils;
-
-/**
- * 澶勭悊骞惰褰曟棩蹇楁枃浠�
- * 
- * @author ruoyi
- */
-public class LogUtils
-{
-    public static String getBlock(Object msg)
-    {
-        if (msg == null)
-        {
-            msg = "";
-        }
-        return "[" + msg.toString() + "]";
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/MessageUtils.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/MessageUtils.java
deleted file mode 100644
index 91e8c14..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/MessageUtils.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.dingzhuo.energy.common.utils;
-
-import com.dingzhuo.energy.common.utils.spring.SpringUtils;
-import org.springframework.context.MessageSource;
-import org.springframework.context.i18n.LocaleContextHolder;
-import com.dingzhuo.energy.common.utils.spring.SpringUtils;
-
-/**
- * 鑾峰彇i18n璧勬簮鏂囦欢
- * 
- * @author ruoyi
- */
-public class MessageUtils
-{
-    /**
-     * 鏍规嵁娑堟伅閿拰鍙傛暟 鑾峰彇娑堟伅 濮旀墭缁檚pring messageSource
-     *
-     * @param code 娑堟伅閿�
-     * @param args 鍙傛暟
-     * @return 鑾峰彇鍥介檯鍖栫炕璇戝��
-     */
-    public static String message(String code, Object... args)
-    {
-        MessageSource messageSource = SpringUtils.getBean(MessageSource.class);
-        return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/SecurityUtils.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/SecurityUtils.java
deleted file mode 100644
index 54d8f8d..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/SecurityUtils.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.dingzhuo.energy.common.utils;
-
-import com.dingzhuo.energy.common.constant.HttpStatus;
-import com.dingzhuo.energy.common.exception.CustomException;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-
-/**
- * 瀹夊叏鏈嶅姟宸ュ叿绫�
- *
- * @author ruoyi
- */
-public class SecurityUtils {
-
-  /**
-   * 鑾峰彇鐢ㄦ埛璐︽埛
-   **/
-  public static String getUsername() {
-    try {
-      return getLoginUser().getUsername();
-    } catch (Exception e) {
-      throw new CustomException("鑾峰彇鐢ㄦ埛璐︽埛寮傚父", HttpStatus.UNAUTHORIZED);
-    }
-  }
-
-  /**
-   * 鑾峰彇鐢ㄦ埛
-   **/
-  public static Long getUserId() {
-    try {
-      return getLoginUser().getUser().getUserId();
-    } catch (Exception e) {
-      throw new CustomException("鑾峰彇鐢ㄦ埛淇℃伅寮傚父", HttpStatus.UNAUTHORIZED);
-    }
-  }
-
-  /**
-   * 鑾峰彇鐢ㄦ埛
-   **/
-  public static LoginUser getLoginUser() {
-    try {
-      return (LoginUser) getAuthentication().getPrincipal();
-    } catch (Exception e) {
-      throw new CustomException("鑾峰彇鐢ㄦ埛淇℃伅寮傚父", HttpStatus.UNAUTHORIZED);
-    }
-  }
-
-  /**
-   * 鑾峰彇Authentication
-   */
-  public static Authentication getAuthentication() {
-    return SecurityContextHolder.getContext().getAuthentication();
-  }
-
-  /**
-   * 鐢熸垚BCryptPasswordEncoder瀵嗙爜
-   *
-   * @param password 瀵嗙爜
-   * @return 鍔犲瘑瀛楃涓�
-   */
-  public static String encryptPassword(String password) {
-    BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
-    return passwordEncoder.encode(password);
-  }
-
-  /**
-   * 鍒ゆ柇瀵嗙爜鏄惁鐩稿悓
-   *
-   * @param rawPassword     鐪熷疄瀵嗙爜
-   * @param encodedPassword 鍔犲瘑鍚庡瓧绗�
-   * @return 缁撴灉
-   */
-  public static boolean matchesPassword(String rawPassword, String encodedPassword) {
-    BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
-    return passwordEncoder.matches(rawPassword, encodedPassword);
-  }
-
-  /**
-   * 鏄惁涓虹鐞嗗憳
-   *
-   * @param userId 鐢ㄦ埛ID
-   * @return 缁撴灉
-   */
-  public static boolean isAdmin(Long userId) {
-    return userId != null && 1L == userId;
-  }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/ServletUtils.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/ServletUtils.java
deleted file mode 100644
index f42373a..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/ServletUtils.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package com.dingzhuo.energy.common.utils;
-
-import java.io.IOException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import org.springframework.web.context.request.RequestAttributes;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-import com.dingzhuo.energy.common.core.text.Convert;
-
-/**
- * 瀹㈡埛绔伐鍏风被
- * 
- * @author ruoyi
- */
-public class ServletUtils
-{
-    /**
-     * 鑾峰彇String鍙傛暟
-     */
-    public static String getParameter(String name)
-    {
-        return getRequest().getParameter(name);
-    }
-
-    /**
-     * 鑾峰彇String鍙傛暟
-     */
-    public static String getParameter(String name, String defaultValue)
-    {
-        return Convert.toStr(getRequest().getParameter(name), defaultValue);
-    }
-
-    /**
-     * 鑾峰彇Integer鍙傛暟
-     */
-    public static Integer getParameterToInt(String name)
-    {
-        return Convert.toInt(getRequest().getParameter(name));
-    }
-
-    /**
-     * 鑾峰彇Integer鍙傛暟
-     */
-    public static Integer getParameterToInt(String name, Integer defaultValue)
-    {
-        return Convert.toInt(getRequest().getParameter(name), defaultValue);
-    }
-
-    /**
-     * 鑾峰彇request
-     */
-    public static HttpServletRequest getRequest()
-    {
-        return getRequestAttributes().getRequest();
-    }
-
-    /**
-     * 鑾峰彇response
-     */
-    public static HttpServletResponse getResponse()
-    {
-        return getRequestAttributes().getResponse();
-    }
-
-    /**
-     * 鑾峰彇session
-     */
-    public static HttpSession getSession()
-    {
-        return getRequest().getSession();
-    }
-
-    public static ServletRequestAttributes getRequestAttributes()
-    {
-        RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
-        return (ServletRequestAttributes) attributes;
-    }
-
-    /**
-     * 灏嗗瓧绗︿覆娓叉煋鍒板鎴风
-     * 
-     * @param response 娓叉煋瀵硅薄
-     * @param string 寰呮覆鏌撶殑瀛楃涓�
-     * @return null
-     */
-    public static String renderString(HttpServletResponse response, String string)
-    {
-        try
-        {
-            response.setStatus(200);
-            response.setContentType("application/json");
-            response.setCharacterEncoding("utf-8");
-            response.getWriter().print(string);
-        }
-        catch (IOException e)
-        {
-            e.printStackTrace();
-        }
-        return null;
-    }
-
-    /**
-     * 鏄惁鏄疉jax寮傛璇锋眰
-     * 
-     * @param request
-     */
-    public static boolean isAjaxRequest(HttpServletRequest request)
-    {
-        String accept = request.getHeader("accept");
-        if (accept != null && accept.indexOf("application/json") != -1)
-        {
-            return true;
-        }
-
-        String xRequestedWith = request.getHeader("X-Requested-With");
-        if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1)
-        {
-            return true;
-        }
-
-        String uri = request.getRequestURI();
-        if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml"))
-        {
-            return true;
-        }
-
-        String ajax = request.getParameter("__ajax");
-      return StringUtils.inStringIgnoreCase(ajax, "json" , "xml");
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/StringUtils.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/StringUtils.java
deleted file mode 100644
index 6112596..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/StringUtils.java
+++ /dev/null
@@ -1,453 +0,0 @@
-package com.dingzhuo.energy.common.utils;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import com.dingzhuo.energy.common.core.text.StrFormatter;
-
-/**
- * 瀛楃涓插伐鍏风被
- * 
- * @author ruoyi
- */
-public class StringUtils extends org.apache.commons.lang3.StringUtils
-{
-    /** 绌哄瓧绗︿覆 */
-    private static final String NULLSTR = "";
-
-    /** 涓嬪垝绾� */
-    private static final char SEPARATOR = '_';
-
-    /**
-     * 鑾峰彇鍙傛暟涓嶄负绌哄��
-     * 
-     * @param value defaultValue 瑕佸垽鏂殑value
-     * @return value 杩斿洖鍊�
-     */
-    public static <T> T nvl(T value, T defaultValue)
-    {
-        return value != null ? value : defaultValue;
-    }
-
-    /**
-     * * 鍒ゆ柇涓�涓狢ollection鏄惁涓虹┖锛� 鍖呭惈List锛孲et锛孮ueue
-     * 
-     * @param coll 瑕佸垽鏂殑Collection
-     * @return true锛氫负绌� false锛氶潪绌�
-     */
-    public static boolean isEmpty(Collection<?> coll)
-    {
-        return isNull(coll) || coll.isEmpty();
-    }
-
-    /**
-     * * 鍒ゆ柇涓�涓狢ollection鏄惁闈炵┖锛屽寘鍚獿ist锛孲et锛孮ueue
-     * 
-     * @param coll 瑕佸垽鏂殑Collection
-     * @return true锛氶潪绌� false锛氱┖
-     */
-    public static boolean isNotEmpty(Collection<?> coll)
-    {
-        return !isEmpty(coll);
-    }
-
-    /**
-     * * 鍒ゆ柇涓�涓璞℃暟缁勬槸鍚︿负绌�
-     * 
-     * @param objects 瑕佸垽鏂殑瀵硅薄鏁扮粍
-     ** @return true锛氫负绌� false锛氶潪绌�
-     */
-    public static boolean isEmpty(Object[] objects)
-    {
-        return isNull(objects) || (objects.length == 0);
-    }
-
-    /**
-     * * 鍒ゆ柇涓�涓璞℃暟缁勬槸鍚﹂潪绌�
-     * 
-     * @param objects 瑕佸垽鏂殑瀵硅薄鏁扮粍
-     * @return true锛氶潪绌� false锛氱┖
-     */
-    public static boolean isNotEmpty(Object[] objects)
-    {
-        return !isEmpty(objects);
-    }
-
-    /**
-     * * 鍒ゆ柇涓�涓狹ap鏄惁涓虹┖
-     * 
-     * @param map 瑕佸垽鏂殑Map
-     * @return true锛氫负绌� false锛氶潪绌�
-     */
-    public static boolean isEmpty(Map<?, ?> map)
-    {
-        return isNull(map) || map.isEmpty();
-    }
-
-    /**
-     * * 鍒ゆ柇涓�涓狹ap鏄惁涓虹┖
-     * 
-     * @param map 瑕佸垽鏂殑Map
-     * @return true锛氶潪绌� false锛氱┖
-     */
-    public static boolean isNotEmpty(Map<?, ?> map)
-    {
-        return !isEmpty(map);
-    }
-
-    /**
-     * * 鍒ゆ柇涓�涓瓧绗︿覆鏄惁涓虹┖涓�
-     * 
-     * @param str String
-     * @return true锛氫负绌� false锛氶潪绌�
-     */
-    public static boolean isEmpty(String str)
-    {
-        return isNull(str) || NULLSTR.equals(str.trim());
-    }
-
-    /**
-     * * 鍒ゆ柇涓�涓瓧绗︿覆鏄惁涓洪潪绌轰覆
-     * 
-     * @param str String
-     * @return true锛氶潪绌轰覆 false锛氱┖涓�
-     */
-    public static boolean isNotEmpty(String str)
-    {
-        return !isEmpty(str);
-    }
-
-    /**
-     * * 鍒ゆ柇涓�涓璞℃槸鍚︿负绌�
-     * 
-     * @param object Object
-     * @return true锛氫负绌� false锛氶潪绌�
-     */
-    public static boolean isNull(Object object)
-    {
-        return object == null;
-    }
-
-    /**
-     * * 鍒ゆ柇涓�涓璞℃槸鍚﹂潪绌�
-     * 
-     * @param object Object
-     * @return true锛氶潪绌� false锛氱┖
-     */
-    public static boolean isNotNull(Object object)
-    {
-        return !isNull(object);
-    }
-
-    /**
-     * * 鍒ゆ柇涓�涓璞℃槸鍚︽槸鏁扮粍绫诲瀷锛圝ava鍩烘湰鍨嬪埆鐨勬暟缁勶級
-     * 
-     * @param object 瀵硅薄
-     * @return true锛氭槸鏁扮粍 false锛氫笉鏄暟缁�
-     */
-    public static boolean isArray(Object object)
-    {
-        return isNotNull(object) && object.getClass().isArray();
-    }
-
-    /**
-     * 鍘荤┖鏍�
-     */
-    public static String trim(String str)
-    {
-        return (str == null ? "" : str.trim());
-    }
-
-    /**
-     * 鎴彇瀛楃涓�
-     * 
-     * @param str 瀛楃涓�
-     * @param start 寮�濮�
-     * @return 缁撴灉
-     */
-    public static String substring(final String str, int start)
-    {
-        if (str == null)
-        {
-            return NULLSTR;
-        }
-
-        if (start < 0)
-        {
-            start = str.length() + start;
-        }
-
-        if (start < 0)
-        {
-            start = 0;
-        }
-        if (start > str.length())
-        {
-            return NULLSTR;
-        }
-
-        return str.substring(start);
-    }
-
-    /**
-     * 鎴彇瀛楃涓�
-     * 
-     * @param str 瀛楃涓�
-     * @param start 寮�濮�
-     * @param end 缁撴潫
-     * @return 缁撴灉
-     */
-    public static String substring(final String str, int start, int end)
-    {
-        if (str == null)
-        {
-            return NULLSTR;
-        }
-
-        if (end < 0)
-        {
-            end = str.length() + end;
-        }
-        if (start < 0)
-        {
-            start = str.length() + start;
-        }
-
-        if (end > str.length())
-        {
-            end = str.length();
-        }
-
-        if (start > end)
-        {
-            return NULLSTR;
-        }
-
-        if (start < 0)
-        {
-            start = 0;
-        }
-        if (end < 0)
-        {
-            end = 0;
-        }
-
-        return str.substring(start, end);
-    }
-
-    /**
-     * 鏍煎紡鍖栨枃鏈�, {} 琛ㄧず鍗犱綅绗�<br>
-     * 姝ゆ柟娉曞彧鏄畝鍗曞皢鍗犱綅绗� {} 鎸夌収椤哄簭鏇挎崲涓哄弬鏁�<br>
-     * 濡傛灉鎯宠緭鍑� {} 浣跨敤 \\杞箟 { 鍗冲彲锛屽鏋滄兂杈撳嚭 {} 涔嬪墠鐨� \ 浣跨敤鍙岃浆涔夌 \\\\ 鍗冲彲<br>
-     * 渚嬶細<br>
-     * 閫氬父浣跨敤锛歠ormat("this is {} for {}", "a", "b") -> this is a for b<br>
-     * 杞箟{}锛� format("this is \\{} for {}", "a", "b") -> this is \{} for a<br>
-     * 杞箟\锛� format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br>
-     * 
-     * @param template 鏂囨湰妯℃澘锛岃鏇挎崲鐨勯儴鍒嗙敤 {} 琛ㄧず
-     * @param params 鍙傛暟鍊�
-     * @return 鏍煎紡鍖栧悗鐨勬枃鏈�
-     */
-    public static String format(String template, Object... params)
-    {
-        if (isEmpty(params) || isEmpty(template))
-        {
-            return template;
-        }
-        return StrFormatter.format(template, params);
-    }
-
-    /**
-     * 瀛楃涓茶浆set
-     * 
-     * @param str 瀛楃涓�
-     * @param sep 鍒嗛殧绗�
-     * @return set闆嗗悎
-     */
-    public static final Set<String> str2Set(String str, String sep)
-    {
-        return new HashSet<String>(str2List(str, sep, true, false));
-    }
-
-    /**
-     * 瀛楃涓茶浆list
-     * 
-     * @param str 瀛楃涓�
-     * @param sep 鍒嗛殧绗�
-     * @param filterBlank 杩囨护绾┖鐧�
-     * @param trim 鍘绘帀棣栧熬绌虹櫧
-     * @return list闆嗗悎
-     */
-    public static final List<String> str2List(String str, String sep, boolean filterBlank, boolean trim)
-    {
-        List<String> list = new ArrayList<String>();
-        if (StringUtils.isEmpty(str))
-        {
-            return list;
-        }
-
-        // 杩囨护绌虹櫧瀛楃涓�
-        if (filterBlank && StringUtils.isBlank(str))
-        {
-            return list;
-        }
-        String[] split = str.split(sep);
-        for (String string : split)
-        {
-            if (filterBlank && StringUtils.isBlank(string))
-            {
-                continue;
-            }
-            if (trim)
-            {
-                string = string.trim();
-            }
-            list.add(string);
-        }
-
-        return list;
-    }
-
-    /**
-     * 涓嬪垝绾胯浆椹煎嘲鍛藉悕
-     */
-    public static String toUnderScoreCase(String str)
-    {
-        if (str == null)
-        {
-            return null;
-        }
-        StringBuilder sb = new StringBuilder();
-        // 鍓嶇疆瀛楃鏄惁澶у啓
-        boolean preCharIsUpperCase = true;
-        // 褰撳墠瀛楃鏄惁澶у啓
-        boolean curreCharIsUpperCase = true;
-        // 涓嬩竴瀛楃鏄惁澶у啓
-        boolean nexteCharIsUpperCase = true;
-        for (int i = 0; i < str.length(); i++)
-        {
-            char c = str.charAt(i);
-            if (i > 0)
-            {
-                preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1));
-            }
-            else
-            {
-                preCharIsUpperCase = false;
-            }
-
-            curreCharIsUpperCase = Character.isUpperCase(c);
-
-            if (i < (str.length() - 1))
-            {
-                nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1));
-            }
-
-            if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase)
-            {
-                sb.append(SEPARATOR);
-            }
-            else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase)
-            {
-                sb.append(SEPARATOR);
-            }
-            sb.append(Character.toLowerCase(c));
-        }
-
-        return sb.toString();
-    }
-
-    /**
-     * 鏄惁鍖呭惈瀛楃涓�
-     * 
-     * @param str 楠岃瘉瀛楃涓�
-     * @param strs 瀛楃涓茬粍
-     * @return 鍖呭惈杩斿洖true
-     */
-    public static boolean inStringIgnoreCase(String str, String... strs)
-    {
-        if (str != null && strs != null)
-        {
-            for (String s : strs)
-            {
-                if (str.equalsIgnoreCase(trim(s)))
-                {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * 灏嗕笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆杞崲涓洪┘宄板紡銆傚鏋滆浆鎹㈠墠鐨勪笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆涓虹┖锛屽垯杩斿洖绌哄瓧绗︿覆銆� 渚嬪锛欻ELLO_WORLD->HelloWorld
-     * 
-     * @param name 杞崲鍓嶇殑涓嬪垝绾垮ぇ鍐欐柟寮忓懡鍚嶇殑瀛楃涓�
-     * @return 杞崲鍚庣殑椹煎嘲寮忓懡鍚嶇殑瀛楃涓�
-     */
-    public static String convertToCamelCase(String name)
-    {
-        StringBuilder result = new StringBuilder();
-        // 蹇�熸鏌�
-        if (name == null || name.isEmpty())
-        {
-            // 娌″繀瑕佽浆鎹�
-            return "";
-        }
-        else if (!name.contains("_"))
-        {
-            // 涓嶅惈涓嬪垝绾匡紝浠呭皢棣栧瓧姣嶅ぇ鍐�
-            return name.substring(0, 1).toUpperCase() + name.substring(1);
-        }
-        // 鐢ㄤ笅鍒掔嚎灏嗗師濮嬪瓧绗︿覆鍒嗗壊
-        String[] camels = name.split("_");
-        for (String camel : camels)
-        {
-            // 璺宠繃鍘熷瀛楃涓蹭腑寮�澶淬�佺粨灏剧殑涓嬫崲绾挎垨鍙岄噸涓嬪垝绾�
-            if (camel.isEmpty())
-            {
-                continue;
-            }
-            // 棣栧瓧姣嶅ぇ鍐�
-            result.append(camel.substring(0, 1).toUpperCase());
-            result.append(camel.substring(1).toLowerCase());
-        }
-        return result.toString();
-    }
-
-    /**
-     * 椹煎嘲寮忓懡鍚嶆硶 渚嬪锛歶ser_name->userName
-     */
-    public static String toCamelCase(String s)
-    {
-        if (s == null)
-        {
-            return null;
-        }
-        s = s.toLowerCase();
-        StringBuilder sb = new StringBuilder(s.length());
-        boolean upperCase = false;
-        for (int i = 0; i < s.length(); i++)
-        {
-            char c = s.charAt(i);
-
-            if (c == SEPARATOR)
-            {
-                upperCase = true;
-            }
-            else if (upperCase)
-            {
-                sb.append(Character.toUpperCase(c));
-                upperCase = false;
-            }
-            else
-            {
-                sb.append(c);
-            }
-        }
-        return sb.toString();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/Threads.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/Threads.java
deleted file mode 100644
index e9bab18..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/Threads.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.dingzhuo.energy.common.utils;
-
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * 绾跨▼鐩稿叧宸ュ叿绫�.
- * 
- * @author ruoyi
- */
-public class Threads
-{
-    private static final Logger logger = LoggerFactory.getLogger(Threads.class);
-
-    /**
-     * sleep绛夊緟,鍗曚綅涓烘绉�
-     */
-    public static void sleep(long milliseconds)
-    {
-        try
-        {
-            Thread.sleep(milliseconds);
-        }
-        catch (InterruptedException e)
-        {
-            return;
-        }
-    }
-
-    /**
-     * 鍋滄绾跨▼姹�
-     * 鍏堜娇鐢╯hutdown, 鍋滄鎺ユ敹鏂颁换鍔″苟灏濊瘯瀹屾垚鎵�鏈夊凡瀛樺湪浠诲姟.
-     * 濡傛灉瓒呮椂, 鍒欒皟鐢╯hutdownNow, 鍙栨秷鍦╳orkQueue涓璓ending鐨勪换鍔�,骞朵腑鏂墍鏈夐樆濉炲嚱鏁�.
-     * 濡傛灉浠嶄汉瓒呮檪锛屽墖寮峰埗閫�鍑�.
-     * 鍙﹀鍦╯hutdown鏃剁嚎绋嬫湰韬璋冪敤涓柇鍋氫簡澶勭悊.
-     */
-    public static void shutdownAndAwaitTermination(ExecutorService pool)
-    {
-        if (pool != null && !pool.isShutdown())
-        {
-            pool.shutdown();
-            try
-            {
-                if (!pool.awaitTermination(120, TimeUnit.SECONDS))
-                {
-                    pool.shutdownNow();
-                    if (!pool.awaitTermination(120, TimeUnit.SECONDS))
-                    {
-                        logger.info("Pool did not terminate");
-                    }
-                }
-            }
-            catch (InterruptedException ie)
-            {
-                pool.shutdownNow();
-                Thread.currentThread().interrupt();
-            }
-        }
-    }
-
-    /**
-     * 鎵撳嵃绾跨▼寮傚父淇℃伅
-     */
-    public static void printException(Runnable r, Throwable t)
-    {
-        if (t == null && r instanceof Future<?>)
-        {
-            try
-            {
-                Future<?> future = (Future<?>) r;
-                if (future.isDone())
-                {
-                    future.get();
-                }
-            }
-            catch (CancellationException ce)
-            {
-                t = ce;
-            }
-            catch (ExecutionException ee)
-            {
-                t = ee.getCause();
-            }
-            catch (InterruptedException ie)
-            {
-                Thread.currentThread().interrupt();
-            }
-        }
-        if (t != null)
-        {
-            logger.error(t.getMessage(), t);
-        }
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/VerifyCodeUtils.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/VerifyCodeUtils.java
deleted file mode 100644
index e44bdf6..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/VerifyCodeUtils.java
+++ /dev/null
@@ -1,226 +0,0 @@
-package com.dingzhuo.energy.common.utils;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
-import java.awt.geom.AffineTransform;
-import java.awt.image.BufferedImage;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.security.SecureRandom;
-import java.util.Arrays;
-import java.util.Random;
-import javax.imageio.ImageIO;
-
-/**
- * 楠岃瘉鐮佸伐鍏风被
- * 
- * @author ruoyi
- */
-public class VerifyCodeUtils
-{
-    // 浣跨敤鍒癆lgerian瀛椾綋锛岀郴缁熼噷娌℃湁鐨勮瘽闇�瑕佸畨瑁呭瓧浣擄紝瀛椾綋鍙樉绀哄ぇ鍐欙紝鍘绘帀浜�1,0,i,o鍑犱釜瀹规槗娣锋穯鐨勫瓧绗�
-    public static final String VERIFY_CODES = "123456789ABCDEFGHJKLMNPQRSTUVWXYZ";
-
-    private static Random random = new SecureRandom();
-
-    /**
-     * 浣跨敤绯荤粺榛樿瀛楃婧愮敓鎴愰獙璇佺爜
-     * 
-     * @param verifySize 楠岃瘉鐮侀暱搴�
-     * @return
-     */
-    public static String generateVerifyCode(int verifySize)
-    {
-        return generateVerifyCode(verifySize, VERIFY_CODES);
-    }
-
-    /**
-     * 浣跨敤鎸囧畾婧愮敓鎴愰獙璇佺爜
-     * 
-     * @param verifySize 楠岃瘉鐮侀暱搴�
-     * @param sources 楠岃瘉鐮佸瓧绗︽簮
-     * @return
-     */
-    public static String generateVerifyCode(int verifySize, String sources)
-    {
-        if (sources == null || sources.length() == 0)
-        {
-            sources = VERIFY_CODES;
-        }
-        int codesLen = sources.length();
-        Random rand = new Random(System.currentTimeMillis());
-        StringBuilder verifyCode = new StringBuilder(verifySize);
-        for (int i = 0; i < verifySize; i++)
-        {
-            verifyCode.append(sources.charAt(rand.nextInt(codesLen - 1)));
-        }
-        return verifyCode.toString();
-    }
-
-    /**
-     * 杈撳嚭鎸囧畾楠岃瘉鐮佸浘鐗囨祦
-     * 
-     * @param w
-     * @param h
-     * @param os
-     * @param code
-     * @throws IOException
-     */
-    public static void outputImage(int w, int h, OutputStream os, String code) throws IOException
-    {
-        int verifySize = code.length();
-        BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
-        Random rand = new Random();
-        Graphics2D g2 = image.createGraphics();
-        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-        Color[] colors = new Color[5];
-        Color[] colorSpaces = new Color[] { Color.WHITE, Color.CYAN, Color.GRAY, Color.LIGHT_GRAY, Color.MAGENTA,
-                Color.ORANGE, Color.PINK, Color.YELLOW };
-        float[] fractions = new float[colors.length];
-        for (int i = 0; i < colors.length; i++)
-        {
-            colors[i] = colorSpaces[rand.nextInt(colorSpaces.length)];
-            fractions[i] = rand.nextFloat();
-        }
-        Arrays.sort(fractions);
-
-        g2.setColor(Color.GRAY);// 璁剧疆杈规鑹�
-        g2.fillRect(0, 0, w, h);
-
-        Color c = getRandColor(200, 250);
-        g2.setColor(c);// 璁剧疆鑳屾櫙鑹�
-        g2.fillRect(0, 2, w, h - 4);
-
-        // 缁樺埗骞叉壈绾�
-        Random random = new Random();
-        g2.setColor(getRandColor(160, 200));// 璁剧疆绾挎潯鐨勯鑹�
-        for (int i = 0; i < 20; i++)
-        {
-            int x = random.nextInt(w - 1);
-            int y = random.nextInt(h - 1);
-            int xl = random.nextInt(6) + 1;
-            int yl = random.nextInt(12) + 1;
-            g2.drawLine(x, y, x + xl + 40, y + yl + 20);
-        }
-
-        // 娣诲姞鍣偣
-        float yawpRate = 0.05f;// 鍣0鐜�
-        int area = (int) (yawpRate * w * h);
-        for (int i = 0; i < area; i++)
-        {
-            int x = random.nextInt(w);
-            int y = random.nextInt(h);
-            int rgb = getRandomIntColor();
-            image.setRGB(x, y, rgb);
-        }
-
-        shear(g2, w, h, c);// 浣垮浘鐗囨壄鏇�
-
-        g2.setColor(getRandColor(100, 160));
-        int fontSize = h - 4;
-        Font font = new Font("Algerian", Font.ITALIC, fontSize);
-        g2.setFont(font);
-        char[] chars = code.toCharArray();
-        for (int i = 0; i < verifySize; i++)
-        {
-            AffineTransform affine = new AffineTransform();
-            affine.setToRotation(Math.PI / 4 * rand.nextDouble() * (rand.nextBoolean() ? 1 : -1),
-                    (w / verifySize) * i + fontSize / 2, h / 2);
-            g2.setTransform(affine);
-            g2.drawChars(chars, i, 1, ((w - 10) / verifySize) * i + 5, h / 2 + fontSize / 2 - 10);
-        }
-
-        g2.dispose();
-        ImageIO.write(image, "jpg", os);
-    }
-
-    private static Color getRandColor(int fc, int bc)
-    {
-        if (fc > 255)
-            fc = 255;
-        if (bc > 255)
-            bc = 255;
-        int r = fc + random.nextInt(bc - fc);
-        int g = fc + random.nextInt(bc - fc);
-        int b = fc + random.nextInt(bc - fc);
-        return new Color(r, g, b);
-    }
-
-    private static int getRandomIntColor()
-    {
-        int[] rgb = getRandomRgb();
-        int color = 0;
-        for (int c : rgb)
-        {
-            color = color << 8;
-            color = color | c;
-        }
-        return color;
-    }
-
-    private static int[] getRandomRgb()
-    {
-        int[] rgb = new int[3];
-        for (int i = 0; i < 3; i++)
-        {
-            rgb[i] = random.nextInt(255);
-        }
-        return rgb;
-    }
-
-    private static void shear(Graphics g, int w1, int h1, Color color)
-    {
-        shearX(g, w1, h1, color);
-        shearY(g, w1, h1, color);
-    }
-
-    private static void shearX(Graphics g, int w1, int h1, Color color)
-    {
-
-        int period = random.nextInt(2);
-
-        boolean borderGap = true;
-        int frames = 1;
-        int phase = random.nextInt(2);
-
-        for (int i = 0; i < h1; i++)
-        {
-            double d = (double) (period >> 1)
-                    * Math.sin((double) i / (double) period + (6.2831853071795862D * (double) phase) / (double) frames);
-            g.copyArea(0, i, w1, 1, (int) d, 0);
-            if (borderGap)
-            {
-                g.setColor(color);
-                g.drawLine((int) d, i, 0, i);
-                g.drawLine((int) d + w1, i, w1, i);
-            }
-        }
-
-    }
-
-    private static void shearY(Graphics g, int w1, int h1, Color color)
-    {
-
-        int period = random.nextInt(40) + 10; // 50;
-
-        boolean borderGap = true;
-        int frames = 20;
-        int phase = 7;
-        for (int i = 0; i < w1; i++)
-        {
-            double d = (double) (period >> 1)
-                    * Math.sin((double) i / (double) period + (6.2831853071795862D * (double) phase) / (double) frames);
-            g.copyArea(i, 0, 1, h1, 0, (int) d);
-            if (borderGap)
-            {
-                g.setColor(color);
-                g.drawLine(i, (int) d, i, 0);
-                g.drawLine(i, (int) d + h1, i, h1);
-            }
-
-        }
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/file/FileUploadUtils.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/file/FileUploadUtils.java
deleted file mode 100644
index ca30701..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/file/FileUploadUtils.java
+++ /dev/null
@@ -1,296 +0,0 @@
-package com.dingzhuo.energy.common.utils.file;
-
-import java.io.File;
-import java.io.IOException;
-
-import com.dingzhuo.energy.common.constant.Constants;
-import com.dingzhuo.energy.common.exception.file.FileNameLengthLimitExceededException;
-import com.dingzhuo.energy.common.exception.file.FileSizeLimitExceededException;
-import com.dingzhuo.energy.common.exception.file.InvalidExtensionException;
-import com.dingzhuo.energy.common.utils.security.Md5Utils;
-import com.dingzhuo.energy.framework.config.RuoYiConfig;
-import org.apache.commons.io.FilenameUtils;
-import org.springframework.web.multipart.MultipartFile;
-import com.dingzhuo.energy.common.constant.Constants;
-import com.dingzhuo.energy.common.exception.file.FileNameLengthLimitExceededException;
-import com.dingzhuo.energy.common.exception.file.FileSizeLimitExceededException;
-import com.dingzhuo.energy.common.exception.file.InvalidExtensionException;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.security.Md5Utils;
-import com.dingzhuo.energy.framework.config.RuoYiConfig;
-
-/**
- * 鏂囦欢涓婁紶宸ュ叿绫�
- *
- * @author ruoyi
- */
-public class FileUploadUtils {
-
-  /**
-   * 榛樿澶у皬 50M
-   */
-  public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024;
-
-  /**
-   * 榛樿鐨勬枃浠跺悕鏈�澶ч暱搴� 100
-   */
-  public static final int DEFAULT_FILE_NAME_LENGTH = 100;
-
-  /**
-   * 榛樿涓婁紶鐨勫湴鍧�
-   */
-  private static String defaultBaseDir = RuoYiConfig.getProfile();
-
-  private static int counter = 0;
-
-  public static void setDefaultBaseDir(String defaultBaseDir) {
-    FileUploadUtils.defaultBaseDir = defaultBaseDir;
-  }
-
-  public static String getDefaultBaseDir() {
-    return defaultBaseDir;
-  }
-
-  /**
-   * 浠ラ粯璁ら厤缃繘琛屾枃浠朵笂浼�
-   *
-   * @param file 涓婁紶鐨勬枃浠�
-   * @return 鏂囦欢鍚嶇О
-   * @throws Exception
-   */
-  public static final String upload(MultipartFile file) throws IOException {
-    try {
-      return upload(getDefaultBaseDir(), file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
-    } catch (Exception e) {
-      throw new IOException(e.getMessage(), e);
-    }
-  }
-
-  /**
-   * 鏍规嵁鏂囦欢璺緞涓婁紶
-   *
-   * @param baseDir 鐩稿搴旂敤鐨勫熀鐩綍
-   * @param file    涓婁紶鐨勬枃浠�
-   * @return 鏂囦欢鍚嶇О
-   * @throws IOException
-   */
-  public static final String upload(String baseDir, MultipartFile file) throws IOException {
-    try {
-      return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
-    } catch (Exception e) {
-      throw new IOException(e.getMessage(), e);
-    }
-  }
-
-  /**
-   * 鏍规嵁鏂囦欢璺緞涓婁紶浠绘剰鏂囦欢 2020.02.15
-   *
-   * @param baseDir 鐩稿搴旂敤鐨勫熀鐩綍
-   * @param file    涓婁紶鐨勬枃浠�
-   * @return 鏂囦欢鍚嶇О
-   * @throws IOException
-   */
-  public static final String uploadAll(String baseDir, MultipartFile file) throws IOException {
-    try {
-      return uploadAllFile(baseDir, file);
-    } catch (Exception e) {
-      throw new IOException(e.getMessage(), e);
-    }
-  }
-
-  /**
-   * 浠绘剰鏂囦欢涓婁紶 2020.02.15
-   *
-   * @param baseDir 鐩稿搴旂敤鐨勫熀鐩綍
-   * @param file    涓婁紶鐨勬枃浠�
-   * @return 杩斿洖涓婁紶鎴愬姛鐨勬枃浠跺悕
-   * @throws FileSizeLimitExceededException       濡傛灉瓒呭嚭鏈�澶уぇ灏�
-   * @throws FileNameLengthLimitExceededException 鏂囦欢鍚嶅お闀�
-   * @throws IOException                          姣斿璇诲啓鏂囦欢鍑洪敊鏃�
-   * @throws InvalidExtensionException            鏂囦欢鏍¢獙寮傚父
-   */
-  public static final String uploadAllFile(String baseDir, MultipartFile file)
-      throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
-      InvalidExtensionException {
-    int fileNamelength = file.getOriginalFilename().length();
-    if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) {
-      throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
-    }
-    //妫�娴嬩换鎰忔枃浠剁被鍨嬪ぇ灏忥紝涓嶆娴嬫枃浠剁被鍨�
-    assertAllowedNoExtension(file);
-    //鐢熸垚鏃ユ湡璺緞鐨勬枃浠跺強鏂版枃浠跺懡鍚嶇紪鐮侊紝閬垮厤瑕嗙洊
-    String fileName = extractFilename(file);
-    //妫�娴嬫枃浠惰矾寰勫強鏂囦欢骞跺 娌℃湁鐨勮矾寰勫拰鏂囦欢杩涜寤虹珛
-    getAbsoluteFilePath(baseDir + File.separator + fileName);
-    String saveFilePath = baseDir + File.separator + fileName;
-    File desc = new File(saveFilePath);
-    //灏嗕笂浼犳枃浠跺啓鍏ユ柊鏂囦欢
-    file.transferTo(desc);
-    //杩斿洖鍏ㄨ矾寰�
-    return saveFilePath;
-  }
-
-  /**
-   * 鏂囦欢涓婁紶
-   *
-   * @param baseDir          鐩稿搴旂敤鐨勫熀鐩綍
-   * @param file             涓婁紶鐨勬枃浠�
-   * @param allowedExtension 涓婁紶鏂囦欢绫诲瀷
-   * @return 杩斿洖涓婁紶鎴愬姛鐨勬枃浠跺悕
-   * @throws FileSizeLimitExceededException       濡傛灉瓒呭嚭鏈�澶уぇ灏�
-   * @throws FileNameLengthLimitExceededException 鏂囦欢鍚嶅お闀�
-   * @throws IOException                          姣斿璇诲啓鏂囦欢鍑洪敊鏃�
-   * @throws InvalidExtensionException            鏂囦欢鏍¢獙寮傚父
-   */
-  public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension)
-      throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
-      InvalidExtensionException {
-    int fileNamelength = file.getOriginalFilename().length();
-    if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) {
-      throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
-    }
-
-    assertAllowed(file, allowedExtension);
-
-    String fileName = extractFilename(file);
-
-    File desc = getAbsoluteFile(baseDir, fileName);
-    file.transferTo(desc);
-    String pathFileName = getPathFileName(baseDir, fileName);
-    return pathFileName;
-  }
-
-  /**
-   * 缂栫爜鏂囦欢鍚�
-   */
-  public static final String extractFilename(MultipartFile file) {
-    String fileName = file.getOriginalFilename();
-    String extension = getExtension(file);
-    fileName = DateUtils.datePath() + "/" + encodingFilename(fileName) + "." + extension;
-    return fileName;
-  }
-
-  private static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException {
-    File desc = new File(uploadDir + File.separator + fileName);
-
-    if (!desc.getParentFile().exists()) {
-      desc.getParentFile().mkdirs();
-    }
-
-    return desc;
-  }
-
-  /**
-   * 鍒ゆ柇璺緞鏄惁瀛樺湪,涓嶅瓨鍦ㄥ垯鏂板缓
-   *
-   * @param uploadDir
-   * @return
-   * @throws IOException
-   */
-  public static final void getAbsoluteFilePath(String uploadDir) throws IOException {
-    File desc = new File(uploadDir);
-    if (!desc.getParentFile().exists()) {
-      desc.getParentFile().mkdirs();
-    }
-  }
-
-  private static final String getPathFileName(String uploadDir, String fileName)
-      throws IOException {
-    int dirLastIndex = RuoYiConfig.getProfile().length() + 1;
-    String currentDir = StringUtils.substring(uploadDir, dirLastIndex);
-    String pathFileName = Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName;
-    return pathFileName;
-  }
-
-  /**
-   * 缂栫爜鏂囦欢鍚�
-   */
-  private static final String encodingFilename(String fileName) {
-    fileName = fileName.replace("_", " ");
-    fileName = Md5Utils.hash(fileName + System.nanoTime() + counter++);
-    return fileName;
-  }
-
-  /**
-   * 鏂囦欢澶у皬鏍¢獙
-   *
-   * @param file 涓婁紶鐨勬枃浠�
-   * @return
-   * @throws FileSizeLimitExceededException 濡傛灉瓒呭嚭鏈�澶уぇ灏�
-   * @throws InvalidExtensionException
-   */
-  public static final void assertAllowed(MultipartFile file, String[] allowedExtension)
-      throws FileSizeLimitExceededException, InvalidExtensionException {
-    long size = file.getSize();
-    if (DEFAULT_MAX_SIZE != -1 && size > DEFAULT_MAX_SIZE) {
-      throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024);
-    }
-
-    String fileName = file.getOriginalFilename();
-    String extension = getExtension(file);
-    if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) {
-      if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) {
-        throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension,
-            extension,
-            fileName);
-      } else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) {
-        throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension,
-            extension,
-            fileName);
-      } else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) {
-        throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension,
-            extension,
-            fileName);
-      } else {
-        throw new InvalidExtensionException(allowedExtension, extension, fileName);
-      }
-    }
-
-  }
-
-  /**
-   * 鏂囦欢澶у皬鏍¢獙 涓嶆娴嬬被鍨�
-   *
-   * @param file 涓婁紶鐨勬枃浠�
-   * @return
-   * @throws FileSizeLimitExceededException 濡傛灉瓒呭嚭鏈�澶уぇ灏�
-   */
-  public static final void assertAllowedNoExtension(MultipartFile file)
-      throws FileSizeLimitExceededException {
-    long size = file.getSize();
-    if (DEFAULT_MAX_SIZE != -1 && size > DEFAULT_MAX_SIZE) {
-      throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024);
-    }
-  }
-
-  /**
-   * 鍒ゆ柇MIME绫诲瀷鏄惁鏄厑璁哥殑MIME绫诲瀷
-   *
-   * @param extension
-   * @param allowedExtension
-   * @return
-   */
-  public static final boolean isAllowedExtension(String extension, String[] allowedExtension) {
-    for (String str : allowedExtension) {
-      if (str.equalsIgnoreCase(extension)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * 鑾峰彇鏂囦欢鍚嶇殑鍚庣紑
-   *
-   * @param file 琛ㄥ崟鏂囦欢
-   * @return 鍚庣紑鍚�
-   */
-  public static final String getExtension(MultipartFile file) {
-    String extension = FilenameUtils.getExtension(file.getOriginalFilename());
-    if (StringUtils.isEmpty(extension)) {
-      extension = MimeTypeUtils.getExtension(file.getContentType());
-    }
-    return extension;
-  }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/file/FileUtils.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/file/FileUtils.java
deleted file mode 100644
index 00a2ac7..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/file/FileUtils.java
+++ /dev/null
@@ -1,175 +0,0 @@
-package com.dingzhuo.energy.common.utils.file;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import javax.servlet.http.HttpServletRequest;
-import java.io.FileReader;
-import java.io.BufferedReader;
-/**
- * 鏂囦欢澶勭悊宸ュ叿绫�
- * 
- * @author ruoyi
- */
-public class FileUtils
-{
-    public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+";
-
-    /**
-     * 杈撳嚭鎸囧畾鏂囦欢鐨刡yte鏁扮粍
-     * 
-     * @param filePath 鏂囦欢璺緞
-     * @param os 杈撳嚭娴�
-     * @return
-     */
-    public static void writeBytes(String filePath, OutputStream os) throws IOException
-    {
-        FileInputStream fis = null;
-        try
-        {
-            File file = new File(filePath);
-            if (!file.exists())
-            {
-                throw new FileNotFoundException(filePath);
-            }
-            fis = new FileInputStream(file);
-            byte[] b = new byte[1024];
-            int length;
-            while ((length = fis.read(b)) > 0)
-            {
-                os.write(b, 0, length);
-            }
-        }
-        catch (IOException e)
-        {
-            throw e;
-        }
-        finally
-        {
-            if (os != null)
-            {
-                try
-                {
-                    os.close();
-                }
-                catch (IOException e1)
-                {
-                    e1.printStackTrace();
-                }
-            }
-            if (fis != null)
-            {
-                try
-                {
-                    fis.close();
-                }
-                catch (IOException e1)
-                {
-                    e1.printStackTrace();
-                }
-            }
-        }
-    }
-
-    /**
-     * 鍒犻櫎鏂囦欢
-     * 
-     * @param filePath 鏂囦欢
-     * @return
-     */
-    public static boolean deleteFile(String filePath)
-    {
-        boolean flag = false;
-        File file = new File(filePath);
-        // 璺緞涓烘枃浠朵笖涓嶄负绌哄垯杩涜鍒犻櫎
-        if (file.isFile() && file.exists())
-        {
-            file.delete();
-            flag = true;
-        }
-        return flag;
-    }
-
-    /**
-     * 鏂囦欢鍚嶇О楠岃瘉
-     * 
-     * @param filename 鏂囦欢鍚嶇О
-     * @return true 姝e父 false 闈炴硶
-     */
-    public static boolean isValidFilename(String filename)
-    {
-        return filename.matches(FILENAME_PATTERN);
-    }
-
-    /**
-     * 涓嬭浇鏂囦欢鍚嶉噸鏂扮紪鐮�
-     * 
-     * @param request 璇锋眰瀵硅薄
-     * @param fileName 鏂囦欢鍚�
-     * @return 缂栫爜鍚庣殑鏂囦欢鍚�
-     */
-    public static String setFileDownloadHeader(HttpServletRequest request, String fileName)
-            throws UnsupportedEncodingException
-    {
-        final String agent = request.getHeader("USER-AGENT");
-        String filename = fileName;
-        if (agent.contains("MSIE"))
-        {
-            // IE娴忚鍣�
-            filename = URLEncoder.encode(filename, "utf-8");
-            filename = filename.replace("+", " ");
-        }
-        else if (agent.contains("Firefox"))
-        {
-            // 鐏嫄娴忚鍣�
-            filename = new String(fileName.getBytes(), "ISO8859-1");
-        }
-        else if (agent.contains("Chrome"))
-        {
-            // google娴忚鍣�
-            filename = URLEncoder.encode(filename, "utf-8");
-        }
-        else
-        {
-            // 鍏跺畠娴忚鍣�
-            filename = URLEncoder.encode(filename, "utf-8");
-        }
-        return filename;
-    }
-
-    /**
-     * 璇诲彇鏂囦欢鍐呭
-     *
-     * @param fileName 鏂囦欢鍚�
-     * @return 杩斿洖鏂囨湰鍐呭
-     */
-    public static String readFileContent(String fileName) {
-        File file = new File(fileName);
-        BufferedReader reader = null;
-        StringBuffer sbf = new StringBuffer();
-        try {
-            reader = new BufferedReader(new FileReader(file));
-            String tempStr;
-            while ((tempStr = reader.readLine()) != null) {
-                sbf.append(tempStr);
-            }
-            reader.close();
-            return sbf.toString();
-        } catch (IOException e) {
-            e.printStackTrace();
-        } finally {
-            if (reader != null) {
-                try {
-                    reader.close();
-                } catch (IOException e1) {
-                    e1.printStackTrace();
-                }
-            }
-        }
-        return sbf.toString();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/file/MimeTypeUtils.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/file/MimeTypeUtils.java
deleted file mode 100644
index cf93597..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/file/MimeTypeUtils.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.dingzhuo.energy.common.utils.file;
-
-/**
- * 濯掍綋绫诲瀷宸ュ叿绫�
- *
- * @author ruoyi
- */
-public class MimeTypeUtils
-{
-    public static final String IMAGE_PNG = "image/png";
-
-    public static final String IMAGE_JPG = "image/jpg";
-
-    public static final String IMAGE_JPEG = "image/jpeg";
-
-    public static final String IMAGE_BMP = "image/bmp";
-
-    public static final String IMAGE_GIF = "image/gif";
-
-    public static final String[] IMAGE_EXTENSION = { "bmp", "gif", "jpg", "jpeg", "png" };
-
-    public static final String[] FLASH_EXTENSION = { "swf", "flv" };
-
-    public static final String[] MEDIA_EXTENSION = { "swf", "flv", "mp3", "wav", "wma", "wmv", "mid", "avi", "mpg",
-            "asf", "rm", "rmvb" };
-
-    public static final String[] DEFAULT_ALLOWED_EXTENSION = {
-            // 鍥剧墖
-            "bmp", "gif", "jpg", "jpeg", "png","svg",
-            // word excel powerpoint
-            "doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt",
-            // 鍘嬬缉鏂囦欢
-            "rar", "zip", "gz", "bz2",
-            // pdf
-            "pdf" };
-
-    public static String getExtension(String prefix)
-    {
-        switch (prefix)
-        {
-            case IMAGE_PNG:
-                return "png";
-            case IMAGE_JPG:
-                return "jpg";
-            case IMAGE_JPEG:
-                return "jpeg";
-            case IMAGE_BMP:
-                return "bmp";
-            case IMAGE_GIF:
-                return "gif";
-            default:
-                return "";
-        }
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/html/EscapeUtil.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/html/EscapeUtil.java
deleted file mode 100644
index 18c1134..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/html/EscapeUtil.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package com.dingzhuo.energy.common.utils.html;
-
-import com.dingzhuo.energy.common.utils.StringUtils;
-
-/**
- * 杞箟鍜屽弽杞箟宸ュ叿绫�
- * 
- * @author ruoyi
- */
-public class EscapeUtil
-{
-    public static final String RE_HTML_MARK = "(<[^<]*?>)|(<[\\s]*?/[^<]*?>)|(<[^<]*?/[\\s]*?>)";
-
-    private static final char[][] TEXT = new char[64][];
-
-    static
-    {
-        for (int i = 0; i < 64; i++)
-        {
-            TEXT[i] = new char[] { (char) i };
-        }
-
-        // special HTML characters
-        TEXT['\''] = "&#039;".toCharArray(); // 鍗曞紩鍙�
-        TEXT['"'] = "&#34;".toCharArray(); // 鍗曞紩鍙�
-        TEXT['&'] = "&#38;".toCharArray(); // &绗�
-        TEXT['<'] = "&#60;".toCharArray(); // 灏忎簬鍙�
-        TEXT['>'] = "&#62;".toCharArray(); // 澶т簬鍙�
-    }
-
-    /**
-     * 杞箟鏂囨湰涓殑HTML瀛楃涓哄畨鍏ㄧ殑瀛楃
-     * 
-     * @param text 琚浆涔夌殑鏂囨湰
-     * @return 杞箟鍚庣殑鏂囨湰
-     */
-    public static String escape(String text)
-    {
-        return encode(text);
-    }
-
-    /**
-     * 杩樺師琚浆涔夌殑HTML鐗规畩瀛楃
-     * 
-     * @param content 鍖呭惈杞箟绗︾殑HTML鍐呭
-     * @return 杞崲鍚庣殑瀛楃涓�
-     */
-    public static String unescape(String content)
-    {
-        return decode(content);
-    }
-
-    /**
-     * 娓呴櫎鎵�鏈塇TML鏍囩锛屼絾鏄笉鍒犻櫎鏍囩鍐呯殑鍐呭
-     * 
-     * @param content 鏂囨湰
-     * @return 娓呴櫎鏍囩鍚庣殑鏂囨湰
-     */
-    public static String clean(String content)
-    {
-        return new HTMLFilter().filter(content);
-    }
-
-    /**
-     * Escape缂栫爜
-     * 
-     * @param text 琚紪鐮佺殑鏂囨湰
-     * @return 缂栫爜鍚庣殑瀛楃
-     */
-    private static String encode(String text)
-    {
-        int len;
-        if ((text == null) || ((len = text.length()) == 0))
-        {
-            return StringUtils.EMPTY;
-        }
-        StringBuilder buffer = new StringBuilder(len + (len >> 2));
-        char c;
-        for (int i = 0; i < len; i++)
-        {
-            c = text.charAt(i);
-            if (c < 64)
-            {
-                buffer.append(TEXT[c]);
-            }
-            else
-            {
-                buffer.append(c);
-            }
-        }
-        return buffer.toString();
-    }
-
-    /**
-     * Escape瑙g爜
-     * 
-     * @param content 琚浆涔夌殑鍐呭
-     * @return 瑙g爜鍚庣殑瀛楃涓�
-     */
-    public static String decode(String content)
-    {
-        if (StringUtils.isEmpty(content))
-        {
-            return content;
-        }
-
-        StringBuilder tmp = new StringBuilder(content.length());
-        int lastPos = 0, pos = 0;
-        char ch;
-        while (lastPos < content.length())
-        {
-            pos = content.indexOf("%", lastPos);
-            if (pos == lastPos)
-            {
-                if (content.charAt(pos + 1) == 'u')
-                {
-                    ch = (char) Integer.parseInt(content.substring(pos + 2, pos + 6), 16);
-                    tmp.append(ch);
-                    lastPos = pos + 6;
-                }
-                else
-                {
-                    ch = (char) Integer.parseInt(content.substring(pos + 1, pos + 3), 16);
-                    tmp.append(ch);
-                    lastPos = pos + 3;
-                }
-            }
-            else
-            {
-                if (pos == -1)
-                {
-                    tmp.append(content.substring(lastPos));
-                    lastPos = content.length();
-                }
-                else
-                {
-                    tmp.append(content, lastPos, pos);
-                    lastPos = pos;
-                }
-            }
-        }
-        return tmp.toString();
-    }
-
-    public static void main(String[] args)
-    {
-        String html = "<script>alert(1);</script>";
-        System.out.println(EscapeUtil.clean(html));
-        System.out.println(EscapeUtil.escape(html));
-        System.out.println(EscapeUtil.unescape(html));
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/html/HTMLFilter.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/html/HTMLFilter.java
deleted file mode 100644
index aff699a..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/html/HTMLFilter.java
+++ /dev/null
@@ -1,569 +0,0 @@
-package com.dingzhuo.energy.common.utils.html;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * HTML杩囨护鍣紝鐢ㄤ簬鍘婚櫎XSS婕忔礊闅愭偅銆�
- *
- * @author ruoyi
- */
-public final class HTMLFilter
-{
-    /**
-     * regex flag union representing /si modifiers in php
-     **/
-    private static final int REGEX_FLAGS_SI = Pattern.CASE_INSENSITIVE | Pattern.DOTALL;
-    private static final Pattern P_COMMENTS = Pattern.compile("<!--(.*?)-->", Pattern.DOTALL);
-    private static final Pattern P_COMMENT = Pattern.compile("^!--(.*)--$", REGEX_FLAGS_SI);
-    private static final Pattern P_TAGS = Pattern.compile("<(.*?)>", Pattern.DOTALL);
-    private static final Pattern P_END_TAG = Pattern.compile("^/([a-z0-9]+)", REGEX_FLAGS_SI);
-    private static final Pattern P_START_TAG = Pattern.compile("^([a-z0-9]+)(.*?)(/?)$", REGEX_FLAGS_SI);
-    private static final Pattern P_QUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)=([\"'])(.*?)\\2", REGEX_FLAGS_SI);
-    private static final Pattern P_UNQUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)(=)([^\"\\s']+)", REGEX_FLAGS_SI);
-    private static final Pattern P_PROTOCOL = Pattern.compile("^([^:]+):", REGEX_FLAGS_SI);
-    private static final Pattern P_ENTITY = Pattern.compile("&#(\\d+);?");
-    private static final Pattern P_ENTITY_UNICODE = Pattern.compile("&#x([0-9a-f]+);?");
-    private static final Pattern P_ENCODE = Pattern.compile("%([0-9a-f]{2});?");
-    private static final Pattern P_VALID_ENTITIES = Pattern.compile("&([^&;]*)(?=(;|&|$))");
-    private static final Pattern P_VALID_QUOTES = Pattern.compile("(>|^)([^<]+?)(<|$)", Pattern.DOTALL);
-    private static final Pattern P_END_ARROW = Pattern.compile("^>");
-    private static final Pattern P_BODY_TO_END = Pattern.compile("<([^>]*?)(?=<|$)");
-    private static final Pattern P_XML_CONTENT = Pattern.compile("(^|>)([^<]*?)(?=>)");
-    private static final Pattern P_STRAY_LEFT_ARROW = Pattern.compile("<([^>]*?)(?=<|$)");
-    private static final Pattern P_STRAY_RIGHT_ARROW = Pattern.compile("(^|>)([^<]*?)(?=>)");
-    private static final Pattern P_AMP = Pattern.compile("&");
-    private static final Pattern P_QUOTE = Pattern.compile("\"");
-    private static final Pattern P_LEFT_ARROW = Pattern.compile("<");
-    private static final Pattern P_RIGHT_ARROW = Pattern.compile(">");
-    private static final Pattern P_BOTH_ARROWS = Pattern.compile("<>");
-
-    // @xxx could grow large... maybe use sesat's ReferenceMap
-    private static final ConcurrentMap<String, Pattern> P_REMOVE_PAIR_BLANKS = new ConcurrentHashMap<>();
-    private static final ConcurrentMap<String, Pattern> P_REMOVE_SELF_BLANKS = new ConcurrentHashMap<>();
-
-    /**
-     * set of allowed html elements, along with allowed attributes for each element
-     **/
-    private final Map<String, List<String>> vAllowed;
-    /**
-     * counts of open tags for each (allowable) html element
-     **/
-    private final Map<String, Integer> vTagCounts = new HashMap<>();
-
-    /**
-     * html elements which must always be self-closing (e.g. "<img />")
-     **/
-    private final String[] vSelfClosingTags;
-    /**
-     * html elements which must always have separate opening and closing tags (e.g. "<b></b>")
-     **/
-    private final String[] vNeedClosingTags;
-    /**
-     * set of disallowed html elements
-     **/
-    private final String[] vDisallowed;
-    /**
-     * attributes which should be checked for valid protocols
-     **/
-    private final String[] vProtocolAtts;
-    /**
-     * allowed protocols
-     **/
-    private final String[] vAllowedProtocols;
-    /**
-     * tags which should be removed if they contain no content (e.g. "<b></b>" or "<b />")
-     **/
-    private final String[] vRemoveBlanks;
-    /**
-     * entities allowed within html markup
-     **/
-    private final String[] vAllowedEntities;
-    /**
-     * flag determining whether comments are allowed in input String.
-     */
-    private final boolean stripComment;
-    private final boolean encodeQuotes;
-    /**
-     * flag determining whether to try to make tags when presented with "unbalanced" angle brackets (e.g. "<b text </b>"
-     * becomes "<b> text </b>"). If set to false, unbalanced angle brackets will be html escaped.
-     */
-    private final boolean alwaysMakeTags;
-
-    /**
-     * Default constructor.
-     */
-    public HTMLFilter()
-    {
-        vAllowed = new HashMap<>();
-
-        final ArrayList<String> a_atts = new ArrayList<>();
-        a_atts.add("href");
-        a_atts.add("target");
-        vAllowed.put("a", a_atts);
-
-        final ArrayList<String> img_atts = new ArrayList<>();
-        img_atts.add("src");
-        img_atts.add("width");
-        img_atts.add("height");
-        img_atts.add("alt");
-        vAllowed.put("img", img_atts);
-
-        final ArrayList<String> no_atts = new ArrayList<>();
-        vAllowed.put("b", no_atts);
-        vAllowed.put("strong", no_atts);
-        vAllowed.put("i", no_atts);
-        vAllowed.put("em", no_atts);
-
-        vSelfClosingTags = new String[] { "img" };
-        vNeedClosingTags = new String[] { "a", "b", "strong", "i", "em" };
-        vDisallowed = new String[] {};
-        vAllowedProtocols = new String[] { "http", "mailto", "https" }; // no ftp.
-        vProtocolAtts = new String[] { "src", "href" };
-        vRemoveBlanks = new String[] { "a", "b", "strong", "i", "em" };
-        vAllowedEntities = new String[] { "amp", "gt", "lt", "quot" };
-        stripComment = true;
-        encodeQuotes = true;
-        alwaysMakeTags = true;
-    }
-
-    /**
-     * Map-parameter configurable constructor.
-     *
-     * @param conf map containing configuration. keys match field names.
-     */
-    @SuppressWarnings("unchecked")
-    public HTMLFilter(final Map<String, Object> conf)
-    {
-
-        assert conf.containsKey("vAllowed") : "configuration requires vAllowed";
-        assert conf.containsKey("vSelfClosingTags") : "configuration requires vSelfClosingTags";
-        assert conf.containsKey("vNeedClosingTags") : "configuration requires vNeedClosingTags";
-        assert conf.containsKey("vDisallowed") : "configuration requires vDisallowed";
-        assert conf.containsKey("vAllowedProtocols") : "configuration requires vAllowedProtocols";
-        assert conf.containsKey("vProtocolAtts") : "configuration requires vProtocolAtts";
-        assert conf.containsKey("vRemoveBlanks") : "configuration requires vRemoveBlanks";
-        assert conf.containsKey("vAllowedEntities") : "configuration requires vAllowedEntities";
-
-        vAllowed = Collections.unmodifiableMap((HashMap<String, List<String>>) conf.get("vAllowed"));
-        vSelfClosingTags = (String[]) conf.get("vSelfClosingTags");
-        vNeedClosingTags = (String[]) conf.get("vNeedClosingTags");
-        vDisallowed = (String[]) conf.get("vDisallowed");
-        vAllowedProtocols = (String[]) conf.get("vAllowedProtocols");
-        vProtocolAtts = (String[]) conf.get("vProtocolAtts");
-        vRemoveBlanks = (String[]) conf.get("vRemoveBlanks");
-        vAllowedEntities = (String[]) conf.get("vAllowedEntities");
-        stripComment = conf.containsKey("stripComment") ? (Boolean) conf.get("stripComment") : true;
-        encodeQuotes = conf.containsKey("encodeQuotes") ? (Boolean) conf.get("encodeQuotes") : true;
-        alwaysMakeTags = conf.containsKey("alwaysMakeTags") ? (Boolean) conf.get("alwaysMakeTags") : true;
-    }
-
-    private void reset()
-    {
-        vTagCounts.clear();
-    }
-
-    // ---------------------------------------------------------------
-    // my versions of some PHP library functions
-    public static String chr(final int decimal)
-    {
-        return String.valueOf((char) decimal);
-    }
-
-    public static String htmlSpecialChars(final String s)
-    {
-        String result = s;
-        result = regexReplace(P_AMP, "&amp;", result);
-        result = regexReplace(P_QUOTE, "&quot;", result);
-        result = regexReplace(P_LEFT_ARROW, "&lt;", result);
-        result = regexReplace(P_RIGHT_ARROW, "&gt;", result);
-        return result;
-    }
-
-    // ---------------------------------------------------------------
-
-    /**
-     * given a user submitted input String, filter out any invalid or restricted html.
-     *
-     * @param input text (i.e. submitted by a user) than may contain html
-     * @return "clean" version of input, with only valid, whitelisted html elements allowed
-     */
-    public String filter(final String input)
-    {
-        reset();
-        String s = input;
-
-        s = escapeComments(s);
-
-        s = balanceHTML(s);
-
-        s = checkTags(s);
-
-        s = processRemoveBlanks(s);
-
-        s = validateEntities(s);
-
-        return s;
-    }
-
-    public boolean isAlwaysMakeTags()
-    {
-        return alwaysMakeTags;
-    }
-
-    public boolean isStripComments()
-    {
-        return stripComment;
-    }
-
-    private String escapeComments(final String s)
-    {
-        final Matcher m = P_COMMENTS.matcher(s);
-        final StringBuffer buf = new StringBuffer();
-        if (m.find())
-        {
-            final String match = m.group(1); // (.*?)
-            m.appendReplacement(buf, Matcher.quoteReplacement("<!--" + htmlSpecialChars(match) + "-->"));
-        }
-        m.appendTail(buf);
-
-        return buf.toString();
-    }
-
-    private String balanceHTML(String s)
-    {
-        if (alwaysMakeTags)
-        {
-            //
-            // try and form html
-            //
-            s = regexReplace(P_END_ARROW, "", s);
-            s = regexReplace(P_BODY_TO_END, "<$1>", s);
-            s = regexReplace(P_XML_CONTENT, "$1<$2", s);
-
-        }
-        else
-        {
-            //
-            // escape stray brackets
-            //
-            s = regexReplace(P_STRAY_LEFT_ARROW, "&lt;$1", s);
-            s = regexReplace(P_STRAY_RIGHT_ARROW, "$1$2&gt;<", s);
-
-            //
-            // the last regexp causes '<>' entities to appear
-            // (we need to do a lookahead assertion so that the last bracket can
-            // be used in the next pass of the regexp)
-            //
-            s = regexReplace(P_BOTH_ARROWS, "", s);
-        }
-
-        return s;
-    }
-
-    private String checkTags(String s)
-    {
-        Matcher m = P_TAGS.matcher(s);
-
-        final StringBuffer buf = new StringBuffer();
-        while (m.find())
-        {
-            String replaceStr = m.group(1);
-            replaceStr = processTag(replaceStr);
-            m.appendReplacement(buf, Matcher.quoteReplacement(replaceStr));
-        }
-        m.appendTail(buf);
-
-        // these get tallied in processTag
-        // (remember to reset before subsequent calls to filter method)
-        final StringBuilder sBuilder = new StringBuilder(buf.toString());
-        for (String key : vTagCounts.keySet())
-        {
-            for (int ii = 0; ii < vTagCounts.get(key); ii++)
-            {
-                sBuilder.append("</").append(key).append(">");
-            }
-        }
-        s = sBuilder.toString();
-
-        return s;
-    }
-
-    private String processRemoveBlanks(final String s)
-    {
-        String result = s;
-        for (String tag : vRemoveBlanks)
-        {
-            if (!P_REMOVE_PAIR_BLANKS.containsKey(tag))
-            {
-                P_REMOVE_PAIR_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?></" + tag + ">"));
-            }
-            result = regexReplace(P_REMOVE_PAIR_BLANKS.get(tag), "", result);
-            if (!P_REMOVE_SELF_BLANKS.containsKey(tag))
-            {
-                P_REMOVE_SELF_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?/>"));
-            }
-            result = regexReplace(P_REMOVE_SELF_BLANKS.get(tag), "", result);
-        }
-
-        return result;
-    }
-
-    private static String regexReplace(final Pattern regex_pattern, final String replacement, final String s)
-    {
-        Matcher m = regex_pattern.matcher(s);
-        return m.replaceAll(replacement);
-    }
-
-    private String processTag(final String s)
-    {
-        // ending tags
-        Matcher m = P_END_TAG.matcher(s);
-        if (m.find())
-        {
-            final String name = m.group(1).toLowerCase();
-            if (allowed(name))
-            {
-                if (false == inArray(name, vSelfClosingTags))
-                {
-                    if (vTagCounts.containsKey(name))
-                    {
-                        vTagCounts.put(name, vTagCounts.get(name) - 1);
-                        return "</" + name + ">";
-                    }
-                }
-            }
-        }
-
-        // starting tags
-        m = P_START_TAG.matcher(s);
-        if (m.find())
-        {
-            final String name = m.group(1).toLowerCase();
-            final String body = m.group(2);
-            String ending = m.group(3);
-
-            // debug( "in a starting tag, name='" + name + "'; body='" + body + "'; ending='" + ending + "'" );
-            if (allowed(name))
-            {
-                final StringBuilder params = new StringBuilder();
-
-                final Matcher m2 = P_QUOTED_ATTRIBUTES.matcher(body);
-                final Matcher m3 = P_UNQUOTED_ATTRIBUTES.matcher(body);
-                final List<String> paramNames = new ArrayList<>();
-                final List<String> paramValues = new ArrayList<>();
-                while (m2.find())
-                {
-                    paramNames.add(m2.group(1)); // ([a-z0-9]+)
-                    paramValues.add(m2.group(3)); // (.*?)
-                }
-                while (m3.find())
-                {
-                    paramNames.add(m3.group(1)); // ([a-z0-9]+)
-                    paramValues.add(m3.group(3)); // ([^\"\\s']+)
-                }
-
-                String paramName, paramValue;
-                for (int ii = 0; ii < paramNames.size(); ii++)
-                {
-                    paramName = paramNames.get(ii).toLowerCase();
-                    paramValue = paramValues.get(ii);
-
-                    // debug( "paramName='" + paramName + "'" );
-                    // debug( "paramValue='" + paramValue + "'" );
-                    // debug( "allowed? " + vAllowed.get( name ).contains( paramName ) );
-
-                    if (allowedAttribute(name, paramName))
-                    {
-                        if (inArray(paramName, vProtocolAtts))
-                        {
-                            paramValue = processParamProtocol(paramValue);
-                        }
-                        params.append(' ').append(paramName).append("=\"").append(paramValue).append("\"");
-                    }
-                }
-
-                if (inArray(name, vSelfClosingTags))
-                {
-                    ending = " /";
-                }
-
-                if (inArray(name, vNeedClosingTags))
-                {
-                    ending = "";
-                }
-
-                if (ending == null || ending.length() < 1)
-                {
-                    if (vTagCounts.containsKey(name))
-                    {
-                        vTagCounts.put(name, vTagCounts.get(name) + 1);
-                    }
-                    else
-                    {
-                        vTagCounts.put(name, 1);
-                    }
-                }
-                else
-                {
-                    ending = " /";
-                }
-                return "<" + name + params + ending + ">";
-            }
-            else
-            {
-                return "";
-            }
-        }
-
-        // comments
-        m = P_COMMENT.matcher(s);
-        if (!stripComment && m.find())
-        {
-            return "<" + m.group() + ">";
-        }
-
-        return "";
-    }
-
-    private String processParamProtocol(String s)
-    {
-        s = decodeEntities(s);
-        final Matcher m = P_PROTOCOL.matcher(s);
-        if (m.find())
-        {
-            final String protocol = m.group(1);
-            if (!inArray(protocol, vAllowedProtocols))
-            {
-                // bad protocol, turn into local anchor link instead
-                s = "#" + s.substring(protocol.length() + 1);
-                if (s.startsWith("#//"))
-                {
-                    s = "#" + s.substring(3);
-                }
-            }
-        }
-
-        return s;
-    }
-
-    private String decodeEntities(String s)
-    {
-        StringBuffer buf = new StringBuffer();
-
-        Matcher m = P_ENTITY.matcher(s);
-        while (m.find())
-        {
-            final String match = m.group(1);
-            final int decimal = Integer.decode(match).intValue();
-            m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal)));
-        }
-        m.appendTail(buf);
-        s = buf.toString();
-
-        buf = new StringBuffer();
-        m = P_ENTITY_UNICODE.matcher(s);
-        while (m.find())
-        {
-            final String match = m.group(1);
-            final int decimal = Integer.valueOf(match, 16).intValue();
-            m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal)));
-        }
-        m.appendTail(buf);
-        s = buf.toString();
-
-        buf = new StringBuffer();
-        m = P_ENCODE.matcher(s);
-        while (m.find())
-        {
-            final String match = m.group(1);
-            final int decimal = Integer.valueOf(match, 16).intValue();
-            m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal)));
-        }
-        m.appendTail(buf);
-        s = buf.toString();
-
-        s = validateEntities(s);
-        return s;
-    }
-
-    private String validateEntities(final String s)
-    {
-        StringBuffer buf = new StringBuffer();
-
-        // validate entities throughout the string
-        Matcher m = P_VALID_ENTITIES.matcher(s);
-        while (m.find())
-        {
-            final String one = m.group(1); // ([^&;]*)
-            final String two = m.group(2); // (?=(;|&|$))
-            m.appendReplacement(buf, Matcher.quoteReplacement(checkEntity(one, two)));
-        }
-        m.appendTail(buf);
-
-        return encodeQuotes(buf.toString());
-    }
-
-    private String encodeQuotes(final String s)
-    {
-        if (encodeQuotes)
-        {
-            StringBuffer buf = new StringBuffer();
-            Matcher m = P_VALID_QUOTES.matcher(s);
-            while (m.find())
-            {
-                final String one = m.group(1); // (>|^)
-                final String two = m.group(2); // ([^<]+?)
-                final String three = m.group(3); // (<|$)
-                // 涓嶆浛鎹㈠弻寮曞彿涓�&quot;锛岄槻姝son鏍煎紡鏃犳晥 regexReplace(P_QUOTE, "&quot;", two)
-                m.appendReplacement(buf, Matcher.quoteReplacement(one + two + three));
-            }
-            m.appendTail(buf);
-            return buf.toString();
-        }
-        else
-        {
-            return s;
-        }
-    }
-
-    private String checkEntity(final String preamble, final String term)
-    {
-
-        return ";".equals(term) && isValidEntity(preamble) ? '&' + preamble : "&amp;" + preamble;
-    }
-
-    private boolean isValidEntity(final String entity)
-    {
-        return inArray(entity, vAllowedEntities);
-    }
-
-    private static boolean inArray(final String s, final String[] array)
-    {
-        for (String item : array)
-        {
-            if (item != null && item.equals(s))
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean allowed(final String name)
-    {
-        return (vAllowed.isEmpty() || vAllowed.containsKey(name)) && !inArray(name, vDisallowed);
-    }
-
-    private boolean allowedAttribute(final String name, final String paramName)
-    {
-        return allowed(name) && (vAllowed.isEmpty() || vAllowed.get(name).contains(paramName));
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/http/HttpUtils.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/http/HttpUtils.java
deleted file mode 100644
index 4d32110..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/http/HttpUtils.java
+++ /dev/null
@@ -1,249 +0,0 @@
-package com.dingzhuo.energy.common.utils.http;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.net.ConnectException;
-import java.net.SocketTimeoutException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.nio.charset.StandardCharsets;
-import java.security.cert.X509Certificate;
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * 閫氱敤http鍙戦�佹柟娉�
- * 
- * @author ruoyi
- */
-public class HttpUtils
-{
-    private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);
-
-    /**
-     * 鍚戞寚瀹� URL 鍙戦�丟ET鏂规硶鐨勮姹�
-     *
-     * @param url 鍙戦�佽姹傜殑 URL
-     * @param param 璇锋眰鍙傛暟锛岃姹傚弬鏁板簲璇ユ槸 name1=value1&name2=value2 鐨勫舰寮忋��
-     * @return 鎵�浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋�
-     */
-    public static String sendGet(String url, String param)
-    {
-        StringBuilder result = new StringBuilder();
-        BufferedReader in = null;
-        try
-        {
-            String urlNameString = url + "?" + param;
-            log.info("sendGet - {}", urlNameString);
-            URL realUrl = new URL(urlNameString);
-            URLConnection connection = realUrl.openConnection();
-            connection.setRequestProperty("accept", "*/*");
-            connection.setRequestProperty("connection", "Keep-Alive");
-            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            connection.connect();
-            in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
-            String line;
-            while ((line = in.readLine()) != null)
-            {
-                result.append(line);
-            }
-            log.info("recv - {}", result);
-        }
-        catch (ConnectException e)
-        {
-            log.error("璋冪敤HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e);
-        }
-        catch (SocketTimeoutException e)
-        {
-            log.error("璋冪敤HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e);
-        }
-        catch (IOException e)
-        {
-            log.error("璋冪敤HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e);
-        }
-        catch (Exception e)
-        {
-            log.error("璋冪敤HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e);
-        }
-        finally
-        {
-            try
-            {
-                if (in != null)
-                {
-                    in.close();
-                }
-            }
-            catch (Exception ex)
-            {
-                log.error("璋冪敤in.close Exception, url=" + url + ",param=" + param, ex);
-            }
-        }
-        return result.toString();
-    }
-
-    /**
-     * 鍚戞寚瀹� URL 鍙戦�丳OST鏂规硶鐨勮姹�
-     *
-     * @param url 鍙戦�佽姹傜殑 URL
-     * @param param 璇锋眰鍙傛暟锛岃姹傚弬鏁板簲璇ユ槸 name1=value1&name2=value2 鐨勫舰寮忋��
-     * @return 鎵�浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋�
-     */
-    public static String sendPost(String url, String param)
-    {
-        PrintWriter out = null;
-        BufferedReader in = null;
-        StringBuilder result = new StringBuilder();
-        try
-        {
-            String urlNameString = url + "?" + param;
-            log.info("sendPost - {}", urlNameString);
-            URL realUrl = new URL(urlNameString);
-            URLConnection conn = realUrl.openConnection();
-            conn.setRequestProperty("accept", "*/*");
-            conn.setRequestProperty("connection", "Keep-Alive");
-            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            conn.setRequestProperty("Accept-Charset", "utf-8");
-            conn.setRequestProperty("contentType", "utf-8");
-            conn.setDoOutput(true);
-            conn.setDoInput(true);
-            out = new PrintWriter(conn.getOutputStream());
-            out.print(param);
-            out.flush();
-            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
-            String line;
-            while ((line = in.readLine()) != null)
-            {
-                result.append(line);
-            }
-            log.info("recv - {}", result);
-        }
-        catch (ConnectException e)
-        {
-            log.error("璋冪敤HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
-        }
-        catch (SocketTimeoutException e)
-        {
-            log.error("璋冪敤HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
-        }
-        catch (IOException e)
-        {
-            log.error("璋冪敤HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
-        }
-        catch (Exception e)
-        {
-            log.error("璋冪敤HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
-        }
-        finally
-        {
-            try
-            {
-                if (out != null)
-                {
-                    out.close();
-                }
-                if (in != null)
-                {
-                    in.close();
-                }
-            }
-            catch (IOException ex)
-            {
-                log.error("璋冪敤in.close Exception, url=" + url + ",param=" + param, ex);
-            }
-        }
-        return result.toString();
-    }
-
-    public static String sendSSLPost(String url, String param)
-    {
-        StringBuilder result = new StringBuilder();
-        String urlNameString = url + "?" + param;
-        try
-        {
-            log.info("sendSSLPost - {}", urlNameString);
-            SSLContext sc = SSLContext.getInstance("SSL");
-            sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
-            URL console = new URL(urlNameString);
-            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
-            conn.setRequestProperty("accept", "*/*");
-            conn.setRequestProperty("connection", "Keep-Alive");
-            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            conn.setRequestProperty("Accept-Charset", "utf-8");
-            conn.setRequestProperty("contentType", "utf-8");
-            conn.setDoOutput(true);
-            conn.setDoInput(true);
-
-            conn.setSSLSocketFactory(sc.getSocketFactory());
-            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
-            conn.connect();
-            InputStream is = conn.getInputStream();
-            BufferedReader br = new BufferedReader(new InputStreamReader(is));
-            String ret = "";
-            while ((ret = br.readLine()) != null)
-            {
-                if (ret != null && !ret.trim().equals(""))
-                {
-                    result.append(new String(ret.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8));
-                }
-            }
-            log.info("recv - {}", result);
-            conn.disconnect();
-            br.close();
-        }
-        catch (ConnectException e)
-        {
-            log.error("璋冪敤HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
-        }
-        catch (SocketTimeoutException e)
-        {
-            log.error("璋冪敤HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
-        }
-        catch (IOException e)
-        {
-            log.error("璋冪敤HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
-        }
-        catch (Exception e)
-        {
-            log.error("璋冪敤HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
-        }
-        return result.toString();
-    }
-
-    private static class TrustAnyTrustManager implements X509TrustManager
-    {
-        @Override
-        public void checkClientTrusted(X509Certificate[] chain, String authType)
-        {
-        }
-
-        @Override
-        public void checkServerTrusted(X509Certificate[] chain, String authType)
-        {
-        }
-
-        @Override
-        public X509Certificate[] getAcceptedIssuers()
-        {
-            return new X509Certificate[] {};
-        }
-    }
-
-    private static class TrustAnyHostnameVerifier implements HostnameVerifier
-    {
-        @Override
-        public boolean verify(String hostname, SSLSession session)
-        {
-            return true;
-        }
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/ip/AddressUtils.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/ip/AddressUtils.java
deleted file mode 100644
index 7ec7ef8..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/ip/AddressUtils.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.dingzhuo.energy.common.utils.ip;
-
-import com.dingzhuo.energy.common.utils.http.HttpUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import com.alibaba.fastjson.JSONObject;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.http.HttpUtils;
-
-/**
- * 鑾峰彇鍦板潃绫�
- * 
- * @author ruoyi
- */
-public class AddressUtils
-{
-    private static final Logger log = LoggerFactory.getLogger(AddressUtils.class);
-
-    public static final String IP_URL = "http://ip.taobao.com/service/getIpInfo.php";
-
-    public static String getRealAddressByIP(String ip)
-    {
-        String address = "XX XX";
-        // 鍐呯綉涓嶆煡璇�
-        if (IpUtils.internalIp(ip))
-        {
-            return "鍐呯綉IP";
-        }
-        String rspStr = HttpUtils.sendPost(IP_URL, "ip=" + ip);
-        if (StringUtils.isEmpty(rspStr))
-        {
-            log.error("鑾峰彇鍦扮悊浣嶇疆寮傚父 {}", ip);
-            return address;
-        }
-        JSONObject obj = JSONObject.parseObject(rspStr);
-        JSONObject data = obj.getObject("data", JSONObject.class);
-        String region = data.getString("region");
-        String city = data.getString("city");
-        address = region + " " + city;
-        return address;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/ip/IpUtils.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/ip/IpUtils.java
deleted file mode 100644
index e4fd09f..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/ip/IpUtils.java
+++ /dev/null
@@ -1,189 +0,0 @@
-package com.dingzhuo.energy.common.utils.ip;
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import javax.servlet.http.HttpServletRequest;
-import com.dingzhuo.energy.common.utils.StringUtils;
-
-/**
- * 鑾峰彇IP鏂规硶
- * 
- * @author ruoyi
- */
-public class IpUtils
-{
-    public static String getIpAddr(HttpServletRequest request)
-    {
-        if (request == null)
-        {
-            return "unknown";
-        }
-        String ip = request.getHeader("x-forwarded-for");
-        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
-        {
-            ip = request.getHeader("Proxy-Client-IP");
-        }
-        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
-        {
-            ip = request.getHeader("X-Forwarded-For");
-        }
-        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
-        {
-            ip = request.getHeader("WL-Proxy-Client-IP");
-        }
-        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
-        {
-            ip = request.getHeader("X-Real-IP");
-        }
-
-        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
-        {
-            ip = request.getRemoteAddr();
-        }
-
-        return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;
-    }
-
-    public static boolean internalIp(String ip)
-    {
-        byte[] addr = textToNumericFormatV4(ip);
-        return internalIp(addr) || "127.0.0.1".equals(ip);
-    }
-
-    private static boolean internalIp(byte[] addr)
-    {
-        if (StringUtils.isNull(addr) || addr.length < 2)
-        {
-            return true;
-        }
-        final byte b0 = addr[0];
-        final byte b1 = addr[1];
-        // 10.x.x.x/8
-        final byte SECTION_1 = 0x0A;
-        // 172.16.x.x/12
-        final byte SECTION_2 = (byte) 0xAC;
-        final byte SECTION_3 = (byte) 0x10;
-        final byte SECTION_4 = (byte) 0x1F;
-        // 192.168.x.x/16
-        final byte SECTION_5 = (byte) 0xC0;
-        final byte SECTION_6 = (byte) 0xA8;
-        switch (b0)
-        {
-            case SECTION_1:
-                return true;
-            case SECTION_2:
-                if (b1 >= SECTION_3 && b1 <= SECTION_4)
-                {
-                    return true;
-                }
-            case SECTION_5:
-                switch (b1)
-                {
-                    case SECTION_6:
-                        return true;
-                }
-            default:
-                return false;
-        }
-    }
-
-    /**
-     * 灏咺Pv4鍦板潃杞崲鎴愬瓧鑺�
-     * 
-     * @param text IPv4鍦板潃
-     * @return byte 瀛楄妭
-     */
-    public static byte[] textToNumericFormatV4(String text)
-    {
-        if (text.length() == 0)
-        {
-            return null;
-        }
-
-        byte[] bytes = new byte[4];
-        String[] elements = text.split("\\.", -1);
-        try
-        {
-            long l;
-            int i;
-            switch (elements.length)
-            {
-                case 1:
-                    l = Long.parseLong(elements[0]);
-                    if ((l < 0L) || (l > 4294967295L))
-                        return null;
-                    bytes[0] = (byte) (int) (l >> 24 & 0xFF);
-                    bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF);
-                    bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF);
-                    bytes[3] = (byte) (int) (l & 0xFF);
-                    break;
-                case 2:
-                    l = Integer.parseInt(elements[0]);
-                    if ((l < 0L) || (l > 255L))
-                        return null;
-                    bytes[0] = (byte) (int) (l & 0xFF);
-                    l = Integer.parseInt(elements[1]);
-                    if ((l < 0L) || (l > 16777215L))
-                        return null;
-                    bytes[1] = (byte) (int) (l >> 16 & 0xFF);
-                    bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF);
-                    bytes[3] = (byte) (int) (l & 0xFF);
-                    break;
-                case 3:
-                    for (i = 0; i < 2; ++i)
-                    {
-                        l = Integer.parseInt(elements[i]);
-                        if ((l < 0L) || (l > 255L))
-                            return null;
-                        bytes[i] = (byte) (int) (l & 0xFF);
-                    }
-                    l = Integer.parseInt(elements[2]);
-                    if ((l < 0L) || (l > 65535L))
-                        return null;
-                    bytes[2] = (byte) (int) (l >> 8 & 0xFF);
-                    bytes[3] = (byte) (int) (l & 0xFF);
-                    break;
-                case 4:
-                    for (i = 0; i < 4; ++i)
-                    {
-                        l = Integer.parseInt(elements[i]);
-                        if ((l < 0L) || (l > 255L))
-                            return null;
-                        bytes[i] = (byte) (int) (l & 0xFF);
-                    }
-                    break;
-                default:
-                    return null;
-            }
-        }
-        catch (NumberFormatException e)
-        {
-            return null;
-        }
-        return bytes;
-    }
-
-    public static String getHostIp()
-    {
-        try
-        {
-            return InetAddress.getLocalHost().getHostAddress();
-        }
-        catch (UnknownHostException e)
-        {
-        }
-        return "127.0.0.1";
-    }
-
-    public static String getHostName()
-    {
-        try
-        {
-            return InetAddress.getLocalHost().getHostName();
-        }
-        catch (UnknownHostException e)
-        {
-        }
-        return "鏈煡";
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/poi/Comprehensive.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/poi/Comprehensive.java
deleted file mode 100644
index 3643d2c..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/poi/Comprehensive.java
+++ /dev/null
@@ -1,387 +0,0 @@
-package com.dingzhuo.energy.common.utils.poi;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-public class Comprehensive implements Serializable {
-    private static final long serialVersionUID = -2777479013884125925L;
-    private String indexId;
-    @Excel(name = "鎸囨爣鍚嶇О")
-    private String indexName;
-    private String value;
-    private Date dataTime;
-    private String timeType;
-    @Excel(name = "1")
-    private Double value1;
-    @Excel(name = "2")
-    private Double value2;
-    @Excel(name = "3")
-    private Double value3;
-    @Excel(name = "4")
-    private Double value4;
-    @Excel(name = "5")
-    private Double value5;
-    @Excel(name = "6")
-    private Double value6;
-    @Excel(name = "7")
-    private Double value7;
-    @Excel(name = "8")
-    private Double value8;
-    @Excel(name = "9")
-    private Double value9;
-    @Excel(name = "10")
-    private Double value10;
-    @Excel(name = "11")
-    private Double value11;
-    @Excel(name = "12")
-    private Double value12;
-    @Excel(name = "13")
-    private Double value13;
-    @Excel(name = "14")
-    private Double value14;
-    @Excel(name = "15")
-    private Double value15;
-    @Excel(name = "16")
-    private Double value16;
-    @Excel(name = "17")
-    private Double value17;
-    @Excel(name = "18")
-    private Double value18;
-    @Excel(name = "19")
-    private Double value19;
-    @Excel(name = "20")
-    private Double value20;
-    @Excel(name = "21")
-    private Double value21;
-    @Excel(name = "22")
-    private Double value22;
-    @Excel(name = "23")
-    private Double value23;
-    @Excel(name = "24")
-    private Double value24;
-    @Excel(name = "25")
-    private Double value25;
-    @Excel(name = "16")
-    private Double value26;
-    @Excel(name = "27")
-    private Double value27;
-    @Excel(name = "28")
-    private Double value28;
-    @Excel(name = "29")
-    private Double value29;
-    @Excel(name = "30")
-    private Double value30;
-    @Excel(name = "31")
-    private Double value31;
-    private List<Map> tablehead = new ArrayList<>();
-    private List<Comprehensive> tabledata = new ArrayList<>();
-
-    public String getIndexId() {
-        return indexId;
-    }
-
-    public void setIndexId(String indexId) {
-        this.indexId = indexId;
-    }
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getTimeType() {
-        return timeType;
-    }
-
-    public void setTimeType(String timeType) {
-        this.timeType = timeType;
-    }
-
-    public Date getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(Date dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public Double getValue1() {
-        return value1;
-    }
-
-    public void setValue1(Double value1) {
-        this.value1 = value1;
-    }
-
-    public Double getValue2() {
-        return value2;
-    }
-
-    public void setValue2(Double value2) {
-        this.value2 = value2;
-    }
-
-    public Double getValue3() {
-        return value3;
-    }
-
-    public void setValue3(Double value3) {
-        this.value3 = value3;
-    }
-
-    public Double getValue4() {
-        return value4;
-    }
-
-    public void setValue4(Double value4) {
-        this.value4 = value4;
-    }
-
-    public Double getValue5() {
-        return value5;
-    }
-
-    public void setValue5(Double value5) {
-        this.value5 = value5;
-    }
-
-    public Double getValue6() {
-        return value6;
-    }
-
-    public void setValue6(Double value6) {
-        this.value6 = value6;
-    }
-
-    public Double getValue7() {
-        return value7;
-    }
-
-    public void setValue7(Double value7) {
-        this.value7 = value7;
-    }
-
-    public Double getValue8() {
-        return value8;
-    }
-
-    public void setValue8(Double value8) {
-        this.value8 = value8;
-    }
-
-    public Double getValue9() {
-        return value9;
-    }
-
-    public void setValue9(Double value9) {
-        this.value9 = value9;
-    }
-
-    public Double getValue10() {
-        return value10;
-    }
-
-    public void setValue10(Double value10) {
-        this.value10 = value10;
-    }
-
-    public Double getValue11() {
-        return value11;
-    }
-
-    public void setValue11(Double value11) {
-        this.value11 = value11;
-    }
-
-    public Double getValue12() {
-        return value12;
-    }
-
-    public void setValue12(Double value12) {
-        this.value12 = value12;
-    }
-
-    public Double getValue13() {
-        return value13;
-    }
-
-    public void setValue13(Double value13) {
-        this.value13 = value13;
-    }
-
-    public Double getValue14() {
-        return value14;
-    }
-
-    public void setValue14(Double value14) {
-        this.value14 = value14;
-    }
-
-    public Double getValue15() {
-        return value15;
-    }
-
-    public void setValue15(Double value15) {
-        this.value15 = value15;
-    }
-
-    public Double getValue16() {
-        return value16;
-    }
-
-    public void setValue16(Double value16) {
-        this.value16 = value16;
-    }
-
-    public Double getValue17() {
-        return value17;
-    }
-
-    public void setValue17(Double value17) {
-        this.value17 = value17;
-    }
-
-    public Double getValue18() {
-        return value18;
-    }
-
-    public void setValue18(Double value18) {
-        this.value18 = value18;
-    }
-
-    public Double getValue19() {
-        return value19;
-    }
-
-    public void setValue19(Double value19) {
-        this.value19 = value19;
-    }
-
-    public Double getValue20() {
-        return value20;
-    }
-
-    public void setValue20(Double value20) {
-        this.value20 = value20;
-    }
-
-    public Double getValue21() {
-        return value21;
-    }
-
-    public void setValue21(Double value21) {
-        this.value21 = value21;
-    }
-
-    public Double getValue22() {
-        return value22;
-    }
-
-    public void setValue22(Double value22) {
-        this.value22 = value22;
-    }
-
-    public Double getValue23() {
-        return value23;
-    }
-
-    public void setValue23(Double value23) {
-        this.value23 = value23;
-    }
-
-    public Double getValue24() {
-        return value24;
-    }
-
-    public void setValue24(Double value24) {
-        this.value24 = value24;
-    }
-
-    public Double getValue25() {
-        return value25;
-    }
-
-    public void setValue25(Double value25) {
-        this.value25 = value25;
-    }
-
-    public Double getValue26() {
-        return value26;
-    }
-
-    public void setValue26(Double value26) {
-        this.value26 = value26;
-    }
-
-    public Double getValue27() {
-        return value27;
-    }
-
-    public void setValue27(Double value27) {
-        this.value27 = value27;
-    }
-
-    public Double getValue28() {
-        return value28;
-    }
-
-    public void setValue28(Double value28) {
-        this.value28 = value28;
-    }
-
-    public Double getValue29() {
-        return value29;
-    }
-
-    public void setValue29(Double value29) {
-        this.value29 = value29;
-    }
-
-    public Double getValue30() {
-        return value30;
-    }
-
-    public void setValue30(Double value30) {
-        this.value30 = value30;
-    }
-
-    public Double getValue31() {
-        return value31;
-    }
-
-    public void setValue31(Double value31) {
-        this.value31 = value31;
-    }
-
-    public List<Map> getTablehead() {
-        return tablehead;
-    }
-
-    public void setTablehead(List<Map> tablehead) {
-        this.tablehead = tablehead;
-    }
-
-    public List<Comprehensive> getTabledata() {
-        return tabledata;
-    }
-
-    public void setTabledata(List<Comprehensive> tabledata) {
-        this.tabledata = tabledata;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/poi/ExcelUtil.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/poi/ExcelUtil.java
deleted file mode 100644
index 0140757..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/poi/ExcelUtil.java
+++ /dev/null
@@ -1,934 +0,0 @@
-package com.dingzhuo.energy.common.utils.poi;
-
-import com.dingzhuo.energy.common.core.text.Convert;
-import com.dingzhuo.energy.common.exception.CustomException;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.reflect.ReflectUtils;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excels;
-import com.dingzhuo.energy.framework.config.RuoYiConfig;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import org.apache.commons.lang3.ObjectUtils;
-import org.apache.poi.hssf.usermodel.HSSFDateUtil;
-import org.apache.poi.ss.usermodel.*;
-import org.apache.poi.ss.usermodel.charts.*;
-import org.apache.poi.ss.util.CellRangeAddress;
-import org.apache.poi.ss.util.CellRangeAddressList;
-import org.apache.poi.xssf.streaming.SXSSFWorkbook;
-import org.apache.poi.xssf.usermodel.XSSFDataValidation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
-
-import java.io.*;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.text.DecimalFormat;
-import java.util.*;
-
-/**
- * Excel鐩稿叧澶勭悊
- *
- * @author ruoyi
- */
-public class ExcelUtil<T> {
-
-    private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class);
-
-    /**
-     * Excel sheet鏈�澶ц鏁帮紝榛樿65536
-     */
-    public static final int sheetSize = 65536;
-
-    /**
-     * 宸ヤ綔琛ㄥ悕绉�
-     */
-    private String sheetName;
-
-    /**
-     * 瀵煎嚭绫诲瀷锛圗XPORT:瀵煎嚭鏁版嵁锛汭MPORT锛氬鍏ユā鏉匡級
-     */
-    private Excel.Type type;
-
-    /**
-     * 宸ヤ綔钖勫璞�
-     */
-    private Workbook wb;
-
-    /**
-     * 宸ヤ綔琛ㄥ璞�
-     */
-    private Sheet sheet;
-
-    /**
-     * 鏍峰紡鍒楄〃
-     */
-    private Map<String, CellStyle> styles;
-
-    /**
-     * 瀵煎叆瀵煎嚭鏁版嵁鍒楄〃
-     */
-    private List<T> list;
-
-    /**
-     * 娉ㄨВ鍒楄〃
-     */
-    private List<Object[]> fields;
-
-    /**
-     * 瀹炰綋瀵硅薄
-     */
-    public Class<T> clazz;
-
-    public ExcelUtil(Class<T> clazz) {
-        this.clazz = clazz;
-    }
-
-    public void init(List<T> list, String sheetName, Excel.Type type) {
-        if (list == null) {
-            list = new ArrayList<T>();
-        }
-        this.list = list;
-        this.sheetName = sheetName;
-        this.type = type;
-        createExcelField();
-        createWorkbook();
-    }
-
-    /**
-     * 瀵筫xcel琛ㄥ崟榛樿绗竴涓储寮曞悕杞崲鎴恖ist
-     *
-     * @param is 杈撳叆娴�
-     * @return 杞崲鍚庨泦鍚�
-     */
-    public List<T> importExcel(InputStream is) throws Exception {
-        return importExcel(StringUtils.EMPTY, is);
-    }
-
-    /**
-     * 瀵筫xcel琛ㄥ崟鎸囧畾琛ㄦ牸绱㈠紩鍚嶈浆鎹㈡垚list
-     *
-     * @param sheetName 琛ㄦ牸绱㈠紩鍚�
-     * @param is        杈撳叆娴�
-     * @return 杞崲鍚庨泦鍚�
-     */
-    public List<T> importExcel(String sheetName, InputStream is) throws Exception {
-        this.type = Excel.Type.IMPORT;
-        this.wb = WorkbookFactory.create(is);
-        List<T> list = new ArrayList<T>();
-        Sheet sheet = null;
-        if (StringUtils.isNotEmpty(sheetName)) {
-            // 濡傛灉鎸囧畾sheet鍚�,鍒欏彇鎸囧畾sheet涓殑鍐呭.
-            sheet = wb.getSheet(sheetName);
-        } else {
-            // 濡傛灉浼犲叆鐨剆heet鍚嶄笉瀛樺湪鍒欓粯璁ゆ寚鍚戠1涓猻heet.
-            sheet = wb.getSheetAt(0);
-        }
-
-        if (sheet == null) {
-            throw new IOException("鏂囦欢sheet涓嶅瓨鍦�");
-        }
-
-        int rows = sheet.getPhysicalNumberOfRows();
-
-        if (rows > 0) {
-            // 瀹氫箟涓�涓猰ap鐢ㄤ簬瀛樻斁excel鍒楃殑搴忓彿鍜宖ield.
-            Map<String, Integer> cellMap = new HashMap<String, Integer>();
-            // 鑾峰彇琛ㄥご
-            Row heard = sheet.getRow(0);
-            for (int i = 0; i < heard.getPhysicalNumberOfCells(); i++) {
-                Cell cell = heard.getCell(i);
-                if (StringUtils.isNotNull(cell != null)) {
-                    String value = this.getCellValue(heard, i).toString();
-                    cellMap.put(value, i);
-                } else {
-                    cellMap.put(null, i);
-                }
-            }
-            // 鏈夋暟鎹椂鎵嶅鐞� 寰楀埌绫荤殑鎵�鏈塮ield.
-            Field[] allFields = clazz.getDeclaredFields();
-            // 瀹氫箟涓�涓猰ap鐢ㄤ簬瀛樻斁鍒楃殑搴忓彿鍜宖ield.
-            Map<Integer, Field> fieldsMap = new HashMap<Integer, Field>();
-            for (int col = 0; col < allFields.length; col++) {
-                Field field = allFields[col];
-                Excel attr = field.getAnnotation(Excel.class);
-                if (attr != null && (attr.type() == Excel.Type.ALL || attr.type() == type)) {
-                    // 璁剧疆绫荤殑绉佹湁瀛楁灞炴�у彲璁块棶.
-                    field.setAccessible(true);
-                    Integer column = cellMap.get(attr.name());
-                    fieldsMap.put(column, field);
-                }
-            }
-            for (int i = 1; i < rows; i++) {
-                // 浠庣2琛屽紑濮嬪彇鏁版嵁,榛樿绗竴琛屾槸琛ㄥご.
-                Row row = sheet.getRow(i);
-                T entity = null;
-                for (Map.Entry<Integer, Field> entry : fieldsMap.entrySet()) {
-                    Object val = this.getCellValue(row, entry.getKey());
-
-                    // 濡傛灉涓嶅瓨鍦ㄥ疄渚嬪垯鏂板缓.
-                    entity = (entity == null ? clazz.newInstance() : entity);
-                    // 浠巑ap涓緱鍒板搴斿垪鐨刦ield.
-                    Field field = fieldsMap.get(entry.getKey());
-                    // 鍙栧緱绫诲瀷,骞舵牴鎹璞$被鍨嬭缃��.
-                    Class<?> fieldType = field.getType();
-                    if (String.class == fieldType) {
-                        String s = Convert.toStr(val);
-                        if (StringUtils.endsWith(s, ".0")) {
-                            val = StringUtils.substringBefore(s, ".0");
-                        } else {
-                            val = Convert.toStr(val);
-                        }
-                    } else if ((Integer.TYPE == fieldType) || (Integer.class == fieldType)) {
-                        val = Convert.toInt(val);
-                    } else if ((Long.TYPE == fieldType) || (Long.class == fieldType)) {
-                        val = Convert.toLong(val);
-                    } else if ((Double.TYPE == fieldType) || (Double.class == fieldType)) {
-                        val = Convert.toDouble(val);
-                    } else if ((Float.TYPE == fieldType) || (Float.class == fieldType)) {
-                        val = Convert.toFloat(val);
-                    } else if (BigDecimal.class == fieldType) {
-                        val = Convert.toBigDecimal(val);
-                    } else if (Date.class == fieldType) {
-                        if (val instanceof String) {
-                            val = DateUtils.parseDate(val);
-                        } else if (val instanceof Double) {
-                            val = DateUtil.getJavaDate((Double) val);
-                        }
-                    }
-
-                    if (StringUtils.isNotNull(fieldType)) {
-                        Excel attr = field.getAnnotation(Excel.class);
-                        String propertyName = field.getName();
-                        if (StringUtils.isNotEmpty(attr.targetAttr())) {
-                            propertyName = field.getName() + "." + attr.targetAttr();
-                        } else if (StringUtils.isNotEmpty(attr.readConverterExp())) {
-                            val = reverseByExp(String.valueOf(val), attr.readConverterExp());
-                        }
-                        ReflectUtils.invokeSetter(entity, propertyName, val);
-                    }
-                }
-                list.add(entity);
-            }
-        }
-        return list;
-    }
-
-    /**
-     * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟
-     *
-     * @param list      瀵煎嚭鏁版嵁闆嗗悎
-     * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О
-     * @return 缁撴灉
-     */
-    public AjaxResult exportExcel(List<T> list, String sheetName) {
-        this.init(list, sheetName, Excel.Type.EXPORT);
-        return exportRealTimeDataExcelZHZB();
-    }
-
-    public AjaxResult exportRealTimeDataExcel(List<T> list, String sheetName) {
-        this.init(list, sheetName, Excel.Type.EXPORT);
-        return exportRealTimeDataExcel();
-    }
-
-    /**
-     * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟
-     *
-     * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О
-     * @return 缁撴灉
-     */
-    public AjaxResult importTemplateExcel(String sheetName) {
-        this.init(null, sheetName, Excel.Type.IMPORT);
-        return exportRealTimeDataExcelZHZB();
-    }
-
-    /**
-     * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟
-     *
-     * @return 缁撴灉
-     */
-    public AjaxResult exportExcel() {
-        OutputStream out = null;
-        try {
-            // 鍙栧嚭涓�鍏辨湁澶氬皯涓猻heet.
-            double sheetNo = Math.ceil(list.size() / sheetSize);
-            for (int index = 0; index <= sheetNo; index++) {
-                createSheet(sheetNo, index);
-
-                // 浜х敓涓�琛�
-                Row row = sheet.createRow(0);
-                int column = 0;
-                // 鍐欏叆鍚勪釜瀛楁鐨勫垪澶村悕绉�
-                for (Object[] os : fields) {
-                    Excel excel = (Excel) os[1];
-                    this.createCell(excel, row, column++);
-                }
-                if (Excel.Type.EXPORT.equals(type)) {
-                    fillExcelData(index, row);
-                }
-            }
-            String filename = encodingFilename(sheetName);
-            out = new FileOutputStream(getAbsoluteFile(filename));
-            wb.write(out);
-            return AjaxResult.success(filename);
-        } catch (Exception e) {
-            log.error("瀵煎嚭Excel寮傚父{}", e.getMessage());
-            throw new CustomException("瀵煎嚭Excel澶辫触锛岃鑱旂郴缃戠珯绠$悊鍛橈紒");
-        } finally {
-            if (wb != null) {
-                try {
-                    wb.close();
-                } catch (IOException e1) {
-                    e1.printStackTrace();
-                }
-            }
-            if (out != null) {
-                try {
-                    out.close();
-                } catch (IOException e1) {
-                    e1.printStackTrace();
-                }
-            }
-        }
-    }
-
-    /**
-     * 瀹炴椂鏁版嵁瀵煎嚭excel甯︽姌绾垮浘
-     *
-     * @return
-     */
-    public AjaxResult exportRealTimeDataExcelZHZB() {
-        OutputStream out = null;
-        try {
-            // 鍙栧嚭涓�鍏辨湁澶氬皯涓猻heet.
-            double sheetNo = Math.ceil(list.size() / sheetSize);
-            for (int index = 0; index <= sheetNo; index++) {
-                createSheet(sheetNo, index);
-
-                // 浜х敓涓�琛�
-                Row row = sheet.createRow(0);
-                int column = 0;
-                // 鍐欏叆鍚勪釜瀛楁鐨勫垪澶村悕绉�
-                for (Object[] os : fields) {
-                    Excel excel = (Excel) os[1];
-                    this.createCell(excel, row, column++);
-                }
-                if (Excel.Type.EXPORT.equals(type)) {
-                    int startNo = index * sheetSize;
-                    int endNo = Math.min(startNo + sheetSize, list.size());
-                    for (int i = startNo; i < endNo; i++) {
-                        row = sheet.createRow(i + 1 - startNo);
-                        // 寰楀埌瀵煎嚭瀵硅薄.
-                        T vo = list.get(i);
-                        int rowColumn = 0;
-                        for (Object[] os : fields) {
-                            Field field = (Field) os[0];
-                            Excel excel = (Excel) os[1];
-                            // 璁剧疆瀹炰綋绫荤鏈夊睘鎬у彲璁块棶
-                            field.setAccessible(Boolean.TRUE);
-                            this.addRealTimeDataCell(excel, row, vo, field, rowColumn++);
-                        }
-                    }
-                }
-            }
-            // 鍒涘缓鍥捐〃瀵硅薄
-            Drawing<?> drawing = sheet.createDrawingPatriarch();
-            ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, fields.size() + 1, 0, list.size(), list.size());
-            Chart chart = drawing.createChart(anchor);
-            // 鍒涘缓鍥捐〃鏁版嵁闆�
-            CellRangeAddress xRay = new CellRangeAddress(0, 0, 1, fields.size() - 1);
-            ChartDataSource<Number> x = DataSources.fromNumericCellRange(sheet, xRay);
-
-            LineChartData data = chart.getChartDataFactory().createLineChartData();
-            for (int i = 0; i < list.size(); i++) {
-                Comprehensive comprehensive = new Comprehensive();
-                BeanUtils.copyProperties(list.get(i), comprehensive);
-                CellRangeAddress yRay = new CellRangeAddress(i + 1, i + 1, 1, fields.size() - 1);
-                ChartDataSource<Number> y = DataSources.fromNumericCellRange(sheet, yRay);
-                LineChartSeries series = data.addSeries(x, y);
-                series.setTitle(comprehensive.getIndexName());
-            }
-
-            // 璁剧疆鍥捐〃鏍峰紡
-            ChartAxis xAxis = chart.getChartAxisFactory().createCategoryAxis(AxisPosition.BOTTOM);
-            ChartAxis yAxis = chart.getChartAxisFactory().createValueAxis(AxisPosition.RIGHT);
-            yAxis.setCrosses(AxisCrosses.AUTO_ZERO);
-            // 灏嗗浘琛ㄦ坊鍔犲埌宸ヤ綔绨夸腑
-            chart.plot(data, xAxis, yAxis);
-
-            String filename = encodingFilename(sheetName);
-            out = new FileOutputStream(getAbsoluteFile(filename));
-            wb.write(out);
-            return AjaxResult.success(filename);
-        } catch (Exception e) {
-            log.error("瀵煎嚭Excel寮傚父{}", e.getMessage());
-            throw new CustomException("瀵煎嚭Excel澶辫触锛岃鑱旂郴缃戠珯绠$悊鍛橈紒");
-        } finally {
-            if (wb != null) {
-                try {
-                    wb.close();
-                } catch (IOException e1) {
-                    e1.printStackTrace();
-                }
-            }
-            if (out != null) {
-                try {
-                    out.close();
-                } catch (IOException e1) {
-                    e1.printStackTrace();
-                }
-            }
-        }
-    }
-
-    /**
-     * 瀹炴椂鏁版嵁瀵煎嚭excel甯︽姌绾垮浘
-     *
-     * @return
-     */
-    public AjaxResult exportRealTimeDataExcel() {
-        OutputStream out = null;
-        try {
-            // 鍙栧嚭涓�鍏辨湁澶氬皯涓猻heet.
-            double sheetNo = Math.ceil(list.size() / sheetSize);
-            for (int index = 0; index <= sheetNo; index++) {
-                createSheet(sheetNo, index);
-
-                // 浜х敓涓�琛�
-                Row row = sheet.createRow(0);
-                int column = 0;
-                // 鍐欏叆鍚勪釜瀛楁鐨勫垪澶村悕绉�
-                for (Object[] os : fields) {
-                    Excel excel = (Excel) os[1];
-                    this.createCell(excel, row, column++);
-                }
-                if (Excel.Type.EXPORT.equals(type)) {
-                    int startNo = index * sheetSize;
-                    int endNo = Math.min(startNo + sheetSize, list.size());
-                    for (int i = startNo; i < endNo; i++) {
-                        row = sheet.createRow(i + 1 - startNo);
-                        // 寰楀埌瀵煎嚭瀵硅薄.
-                        T vo = list.get(i);
-                        int rowColumn = 0;
-                        for (Object[] os : fields) {
-                            Field field = (Field) os[0];
-                            Excel excel = (Excel) os[1];
-                            // 璁剧疆瀹炰綋绫荤鏈夊睘鎬у彲璁块棶
-                            field.setAccessible(Boolean.TRUE);
-                            this.addRealTimeDataCell(excel, row, vo, field, rowColumn++);
-                        }
-                    }
-                }
-            }
-            // 鍒涘缓鍥捐〃瀵硅薄
-            Drawing<?> drawing = sheet.createDrawingPatriarch();
-            ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, fields.size(), 1, list.size(), 15);
-            Chart chart = drawing.createChart(anchor);
-            // 鍒涘缓鍥捐〃鏁版嵁闆�
-            CellRangeAddress xRay = new CellRangeAddress(1, this.list.size(), 0, 0);
-            CellRangeAddress yRay = new CellRangeAddress(1, this.list.size(), 1, 1);
-            ChartDataSource<Number> x = DataSources.fromNumericCellRange(sheet, xRay);
-            ChartDataSource<Number> y = DataSources.fromNumericCellRange(sheet, yRay);
-            LineChartData data = chart.getChartDataFactory().createLineChartData();
-            LineChartSeries series = data.addSeries(x, y);
-            series.setTitle("Data");
-            // 璁剧疆鍥捐〃鏍峰紡
-            ChartAxis xAxis = chart.getChartAxisFactory().createCategoryAxis(AxisPosition.BOTTOM);
-            ChartAxis yAxis = chart.getChartAxisFactory().createValueAxis(AxisPosition.RIGHT);
-            yAxis.setCrosses(AxisCrosses.AUTO_ZERO);
-            // 灏嗗浘琛ㄦ坊鍔犲埌宸ヤ綔绨夸腑
-            chart.plot(data, xAxis, yAxis);
-
-            String filename = encodingFilename(sheetName);
-            out = new FileOutputStream(getAbsoluteFile(filename));
-            wb.write(out);
-            return AjaxResult.success(filename);
-        } catch (Exception e) {
-            log.error("瀵煎嚭Excel寮傚父{}", e.getMessage());
-            throw new CustomException("瀵煎嚭Excel澶辫触锛岃鑱旂郴缃戠珯绠$悊鍛橈紒");
-        } finally {
-            if (wb != null) {
-                try {
-                    wb.close();
-                } catch (IOException e1) {
-                    e1.printStackTrace();
-                }
-            }
-            if (out != null) {
-                try {
-                    out.close();
-                } catch (IOException e1) {
-                    e1.printStackTrace();
-                }
-            }
-        }
-    }
-
-    /**
-     * 濉厖excel鏁版嵁
-     *
-     * @param index 搴忓彿
-     * @param row   鍗曞厓鏍艰
-     */
-    public void fillExcelData(int index, Row row) {
-        int startNo = index * sheetSize;
-        int endNo = Math.min(startNo + sheetSize, list.size());
-        for (int i = startNo; i < endNo; i++) {
-            row = sheet.createRow(i + 1 - startNo);
-            // 寰楀埌瀵煎嚭瀵硅薄.
-            T vo = list.get(i);
-            int column = 0;
-            for (Object[] os : fields) {
-                Field field = (Field) os[0];
-                Excel excel = (Excel) os[1];
-                // 璁剧疆瀹炰綋绫荤鏈夊睘鎬у彲璁块棶
-                field.setAccessible(true);
-                this.addCell(excel, row, vo, field, column++);
-            }
-        }
-    }
-
-    /**
-     * 鍒涘缓琛ㄦ牸鏍峰紡
-     *
-     * @param wb 宸ヤ綔钖勫璞�
-     * @return 鏍峰紡鍒楄〃
-     */
-    private Map<String, CellStyle> createStyles(Workbook wb) {
-        // 鍐欏叆鍚勬潯璁板綍,姣忔潯璁板綍瀵瑰簲excel琛ㄤ腑鐨勪竴琛�
-        Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
-        CellStyle style = wb.createCellStyle();
-        style.setAlignment(HorizontalAlignment.CENTER);
-        style.setVerticalAlignment(VerticalAlignment.CENTER);
-        style.setBorderRight(BorderStyle.THIN);
-        style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
-        style.setBorderLeft(BorderStyle.THIN);
-        style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
-        style.setBorderTop(BorderStyle.THIN);
-        style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
-        style.setBorderBottom(BorderStyle.THIN);
-        style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
-        Font dataFont = wb.createFont();
-        dataFont.setFontName("Arial");
-        dataFont.setFontHeightInPoints((short) 10);
-        style.setFont(dataFont);
-        styles.put("data", style);
-
-        style = wb.createCellStyle();
-        style.cloneStyleFrom(styles.get("data"));
-        style.setAlignment(HorizontalAlignment.CENTER);
-        style.setVerticalAlignment(VerticalAlignment.CENTER);
-        style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex());
-        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
-        Font headerFont = wb.createFont();
-        headerFont.setFontName("Arial");
-        headerFont.setFontHeightInPoints((short) 10);
-        headerFont.setBold(true);
-        headerFont.setColor(IndexedColors.WHITE.getIndex());
-        style.setFont(headerFont);
-        styles.put("header", style);
-
-        return styles;
-    }
-
-    /**
-     * 鍒涘缓鍗曞厓鏍�
-     */
-    public Cell createCell(Excel attr, Row row, int column) {
-        // 鍒涘缓鍒�
-        Cell cell = row.createCell(column);
-        // 鍐欏叆鍒椾俊鎭�
-        cell.setCellValue(attr.name());
-        setDataValidation(attr, row, column);
-        cell.setCellStyle(styles.get("header"));
-        return cell;
-    }
-
-    /**
-     * 璁剧疆鍗曞厓鏍间俊鎭�
-     *
-     * @param value 鍗曞厓鏍煎��
-     * @param attr  娉ㄨВ鐩稿叧
-     * @param cell  鍗曞厓鏍间俊鎭�
-     */
-    public void setCellVo(Object value, Excel attr, Cell cell) {
-        if (Excel.ColumnType.STRING == attr.cellType()) {
-            cell.setCellType(CellType.NUMERIC);
-            cell.setCellValue(
-                    StringUtils.isNull(value) ? attr.defaultValue() : value + attr.suffix());
-        } else if (Excel.ColumnType.NUMERIC == attr.cellType()) {
-            cell.setCellType(CellType.NUMERIC);
-            cell.setCellValue(Integer.parseInt(value + ""));
-        }
-    }
-
-    /**
-     * 鍒涘缓琛ㄦ牸鏍峰紡
-     */
-    public void setDataValidation(Excel attr, Row row, int column) {
-        if (attr.name().indexOf("娉細") >= 0) {
-            sheet.setColumnWidth(column, 6000);
-        } else {
-            // 璁剧疆鍒楀
-            sheet.setColumnWidth(column, (int) ((attr.width() + 0.72) * 256));
-            row.setHeight((short) (attr.height() * 20));
-        }
-        // 濡傛灉璁剧疆浜嗘彁绀轰俊鎭垯榧犳爣鏀句笂鍘绘彁绀�.
-        if (StringUtils.isNotEmpty(attr.prompt())) {
-            // 杩欓噷榛樿璁句簡2-101鍒楁彁绀�.
-            setXSSFPrompt(sheet, "", attr.prompt(), 1, 100, column, column);
-        }
-        // 濡傛灉璁剧疆浜哻ombo灞炴�у垯鏈垪鍙兘閫夋嫨涓嶈兘杈撳叆
-        if (attr.combo().length > 0) {
-            // 杩欓噷榛樿璁句簡2-101鍒楀彧鑳介�夋嫨涓嶈兘杈撳叆.
-            setXSSFValidation(sheet, attr.combo(), 1, 100, column, column);
-        }
-    }
-
-    /**
-     * 娣诲姞鍗曞厓鏍�
-     */
-    public Cell addCell(Excel attr, Row row, T vo, Field field, int column) {
-        Cell cell = null;
-        try {
-            // 璁剧疆琛岄珮
-            row.setHeight((short) (attr.height() * 20));
-            // 鏍规嵁Excel涓缃儏鍐靛喅瀹氭槸鍚﹀鍑�,鏈変簺鎯呭喌闇�瑕佷繚鎸佷负绌�,甯屾湜鐢ㄦ埛濉啓杩欎竴鍒�.
-            if (attr.isExport()) {
-                // 鍒涘缓cell
-                cell = row.createCell(column);
-                cell.setCellStyle(styles.get("data"));
-
-                // 鐢ㄤ簬璇诲彇瀵硅薄涓殑灞炴��
-                Object value = getTargetValue(vo, field, attr);
-                String dateFormat = attr.dateFormat();
-                String readConverterExp = attr.readConverterExp();
-                if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value)) {
-                    cell.setCellValue(DateUtils.parseDateToStr(dateFormat, (Date) value));
-                } else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils
-                        .isNotNull(value)) {
-                    cell.setCellValue(convertByExp(String.valueOf(value), readConverterExp));
-                } else {
-                    // 璁剧疆鍒楃被鍨�
-                    setCellVo(value, attr, cell);
-                }
-            }
-        } catch (Exception e) {
-            log.error("瀵煎嚭Excel澶辫触{}", e);
-        }
-        return cell;
-    }
-
-    public Cell addRealTimeDataCell(Excel attr, Row row, T vo, Field field, int column) {
-        Cell cell = null;
-        try {
-            // 璁剧疆琛岄珮
-            row.setHeight((short) (attr.height() * 20));
-            // 鏍规嵁Excel涓缃儏鍐靛喅瀹氭槸鍚﹀鍑�,鏈変簺鎯呭喌闇�瑕佷繚鎸佷负绌�,甯屾湜鐢ㄦ埛濉啓杩欎竴鍒�.
-            if (attr.isExport()) {
-                // 鍒涘缓cell
-                cell = row.createCell(column);
-                // 鐢ㄤ簬璇诲彇瀵硅薄涓殑灞炴��
-                Object value = getTargetValue(vo, field, attr);
-                if (ObjectUtils.isNotEmpty(value) && value.toString().matches("^(-?\\d+)(\\.\\d+)?$")) {
-                    DataFormat df = wb.createDataFormat();
-                    CellStyle cellStyle = wb.createCellStyle();
-                    cellStyle.setDataFormat(df.getFormat("0.00_ "));
-                    cell.setCellStyle(cellStyle);
-                } else {
-                    cell.setCellStyle(styles.get("data"));
-                }
-                String dateFormat = attr.dateFormat();
-                String readConverterExp = attr.readConverterExp();
-                if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value)) {
-                    cell.setCellValue(DateUtils.parseDateToStr(dateFormat, (Date) value));
-                } else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils
-                        .isNotNull(value)) {
-                    cell.setCellValue(convertByExp(String.valueOf(value), readConverterExp));
-                } else {
-                    cell.setCellType(CellType.NUMERIC);
-                    // 鍒ゆ柇鏄惁涓哄皬鏁�
-                    if (ObjectUtils.isNotEmpty(value) && value.toString().matches("^(-?\\d+)(\\.\\d+)?$")) {
-                        cell.setCellValue(new BigDecimal(value.toString()).setScale(2, RoundingMode.HALF_UP).doubleValue());
-                        // 鍒ゆ柇鏄惁涓烘暣鏁�
-                    } else if (ObjectUtils.isNotEmpty(value) && value.toString().matches("^[-\\+]?[\\d]*$")) {
-                        cell.setCellValue(Integer.parseInt(value + ""));
-                    } else {
-                        cell.setCellValue(StringUtils.isNull(value) ? attr.defaultValue() : value + attr.suffix());
-                    }
-                }
-            }
-        } catch (Exception e) {
-            log.error("瀵煎嚭Excel澶辫触{}", e);
-        }
-        return cell;
-    }
-
-    /**
-     * 璁剧疆 POI XSSFSheet 鍗曞厓鏍兼彁绀�
-     *
-     * @param sheet         琛ㄥ崟
-     * @param promptTitle   鎻愮ず鏍囬
-     * @param promptContent 鎻愮ず鍐呭
-     * @param firstRow      寮�濮嬭
-     * @param endRow        缁撴潫琛�
-     * @param firstCol      寮�濮嬪垪
-     * @param endCol        缁撴潫鍒�
-     */
-    public void setXSSFPrompt(Sheet sheet, String promptTitle, String promptContent, int firstRow,
-                              int endRow,
-                              int firstCol, int endCol) {
-        DataValidationHelper helper = sheet.getDataValidationHelper();
-        DataValidationConstraint constraint = helper.createCustomConstraint("DD1");
-        CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
-        DataValidation dataValidation = helper.createValidation(constraint, regions);
-        dataValidation.createPromptBox(promptTitle, promptContent);
-        dataValidation.setShowPromptBox(true);
-        sheet.addValidationData(dataValidation);
-    }
-
-    /**
-     * 璁剧疆鏌愪簺鍒楃殑鍊煎彧鑳借緭鍏ラ鍒剁殑鏁版嵁,鏄剧ず涓嬫媺妗�.
-     *
-     * @param sheet    瑕佽缃殑sheet.
-     * @param textlist 涓嬫媺妗嗘樉绀虹殑鍐呭
-     * @param firstRow 寮�濮嬭
-     * @param endRow   缁撴潫琛�
-     * @param firstCol 寮�濮嬪垪
-     * @param endCol   缁撴潫鍒�
-     * @return 璁剧疆濂界殑sheet.
-     */
-    public void setXSSFValidation(Sheet sheet, String[] textlist, int firstRow, int endRow,
-                                  int firstCol, int endCol) {
-        DataValidationHelper helper = sheet.getDataValidationHelper();
-        // 鍔犺浇涓嬫媺鍒楄〃鍐呭
-        DataValidationConstraint constraint = helper.createExplicitListConstraint(textlist);
-        // 璁剧疆鏁版嵁鏈夋晥鎬у姞杞藉湪鍝釜鍗曞厓鏍间笂,鍥涗釜鍙傛暟鍒嗗埆鏄細璧峰琛屻�佺粓姝㈣銆佽捣濮嬪垪銆佺粓姝㈠垪
-        CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
-        // 鏁版嵁鏈夋晥鎬у璞�
-        DataValidation dataValidation = helper.createValidation(constraint, regions);
-        // 澶勭悊Excel鍏煎鎬ч棶棰�
-        if (dataValidation instanceof XSSFDataValidation) {
-            dataValidation.setSuppressDropDownArrow(true);
-            dataValidation.setShowErrorBox(true);
-        } else {
-            dataValidation.setSuppressDropDownArrow(false);
-        }
-
-        sheet.addValidationData(dataValidation);
-    }
-
-    /**
-     * 瑙f瀽瀵煎嚭鍊� 0=鐢�,1=濂�,2=鏈煡
-     *
-     * @param propertyValue 鍙傛暟鍊�
-     * @param converterExp  缈昏瘧娉ㄨВ
-     * @return 瑙f瀽鍚庡��
-     * @throws Exception
-     */
-    public static String convertByExp(String propertyValue, String converterExp) throws Exception {
-        try {
-            String[] convertSource = converterExp.split(",");
-            for (String item : convertSource) {
-                String[] itemArray = item.split("=");
-                if (itemArray[0].equals(propertyValue)) {
-                    return itemArray[1];
-                }
-            }
-        } catch (Exception e) {
-            throw e;
-        }
-        return propertyValue;
-    }
-
-    /**
-     * 鍙嶅悜瑙f瀽鍊� 鐢�=0,濂�=1,鏈煡=2
-     *
-     * @param propertyValue 鍙傛暟鍊�
-     * @param converterExp  缈昏瘧娉ㄨВ
-     * @return 瑙f瀽鍚庡��
-     * @throws Exception
-     */
-    public static String reverseByExp(String propertyValue, String converterExp) throws Exception {
-        try {
-            String[] convertSource = converterExp.split(",");
-            for (String item : convertSource) {
-                String[] itemArray = item.split("=");
-                if (itemArray[1].equals(propertyValue)) {
-                    return itemArray[0];
-                }
-            }
-        } catch (Exception e) {
-            throw e;
-        }
-        return propertyValue;
-    }
-
-    /**
-     * 缂栫爜鏂囦欢鍚�
-     */
-    public String encodingFilename(String filename) {
-        filename = UUID.randomUUID().toString() + "_" + filename + ".xlsx";
-        return filename;
-    }
-
-    /**
-     * 鑾峰彇涓嬭浇璺緞
-     *
-     * @param filename 鏂囦欢鍚嶇О
-     */
-    public String getAbsoluteFile(String filename) {
-        String downloadPath = RuoYiConfig.getDownloadPath() + filename;
-        File desc = new File(downloadPath);
-        if (!desc.getParentFile().exists()) {
-            desc.getParentFile().mkdirs();
-        }
-        return downloadPath;
-    }
-
-    /**
-     * 鑾峰彇bean涓殑灞炴�у��
-     *
-     * @param vo    瀹炰綋瀵硅薄
-     * @param field 瀛楁
-     * @param excel 娉ㄨВ
-     * @return 鏈�缁堢殑灞炴�у��
-     * @throws Exception
-     */
-    private Object getTargetValue(T vo, Field field, Excel excel) throws Exception {
-        Object o = field.get(vo);
-        if (StringUtils.isNotEmpty(excel.targetAttr())) {
-            String target = excel.targetAttr();
-            if (target.indexOf(".") > -1) {
-                String[] targets = target.split("[.]");
-                for (String name : targets) {
-                    o = getValue(o, name);
-                }
-            } else {
-                o = getValue(o, target);
-            }
-        }
-        return o;
-    }
-
-    /**
-     * 浠ョ被鐨勫睘鎬х殑get鏂规硶鏂规硶褰㈠紡鑾峰彇鍊�
-     *
-     * @param o
-     * @param name
-     * @return value
-     * @throws Exception
-     */
-    private Object getValue(Object o, String name) throws Exception {
-        if (StringUtils.isNotEmpty(name)) {
-            Class<?> clazz = o.getClass();
-            String methodName = "get" + name.substring(0, 1).toUpperCase() + name.substring(1);
-            Method method = clazz.getMethod(methodName);
-            o = method.invoke(o);
-        }
-        return o;
-    }
-
-    /**
-     * 寰楀埌鎵�鏈夊畾涔夊瓧娈�
-     */
-    private void createExcelField() {
-        this.fields = new ArrayList<Object[]>();
-        List<Field> tempFields = new ArrayList<>();
-        tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields()));
-        tempFields.addAll(Arrays.asList(clazz.getDeclaredFields()));
-        for (Field field : tempFields) {
-            // 鍗曟敞瑙�
-            if (field.isAnnotationPresent(Excel.class)) {
-                putToField(field, field.getAnnotation(Excel.class));
-            }
-
-            // 澶氭敞瑙�
-            if (field.isAnnotationPresent(Excels.class)) {
-                Excels attrs = field.getAnnotation(Excels.class);
-                Excel[] excels = attrs.value();
-                for (Excel excel : excels) {
-                    putToField(field, excel);
-                }
-            }
-        }
-    }
-
-    /**
-     * 鏀惧埌瀛楁闆嗗悎涓�
-     */
-    private void putToField(Field field, Excel attr) {
-        if (attr != null && (attr.type() == Excel.Type.ALL || attr.type() == type)) {
-            this.fields.add(new Object[]{field, attr});
-        }
-    }
-
-    /**
-     * 鍒涘缓涓�涓伐浣滅翱
-     */
-    public void createWorkbook() {
-        this.wb = new SXSSFWorkbook(500);
-    }
-
-    /**
-     * 鍒涘缓宸ヤ綔琛�
-     *
-     * @param sheetNo sheet鏁伴噺
-     * @param index   搴忓彿
-     */
-    public void createSheet(double sheetNo, int index) {
-        this.sheet = wb.createSheet();
-        this.styles = createStyles(wb);
-        // 璁剧疆宸ヤ綔琛ㄧ殑鍚嶇О.
-        if (sheetNo == 0) {
-            wb.setSheetName(index, sheetName);
-        } else {
-            wb.setSheetName(index, sheetName + index);
-        }
-    }
-
-    /**
-     * 鑾峰彇鍗曞厓鏍煎��
-     *
-     * @param row    鑾峰彇鐨勮
-     * @param column 鑾峰彇鍗曞厓鏍煎垪鍙�
-     * @return 鍗曞厓鏍煎��
-     */
-    public Object getCellValue(Row row, int column) {
-        if (row == null) {
-            return row;
-        }
-        Object val = "";
-        try {
-            Cell cell = row.getCell(column);
-            if (cell != null) {
-                if (cell.getCellTypeEnum() == CellType.NUMERIC
-                        || cell.getCellTypeEnum() == CellType.FORMULA) {
-                    val = cell.getNumericCellValue();
-                    if (HSSFDateUtil.isCellDateFormatted(cell)) {
-                        val = DateUtil.getJavaDate((Double) val); // POI Excel 鏃ユ湡鏍煎紡杞崲
-                    } else {
-                        if ((Double) val % 1 > 0) {
-                            val = new DecimalFormat("0.00").format(val);
-                        } else {
-                            val = new DecimalFormat("0").format(val);
-                        }
-                    }
-                } else if (cell.getCellTypeEnum() == CellType.STRING) {
-                    val = cell.getStringCellValue();
-                } else if (cell.getCellTypeEnum() == CellType.BOOLEAN) {
-                    val = cell.getBooleanCellValue();
-                } else if (cell.getCellTypeEnum() == CellType.ERROR) {
-                    val = cell.getErrorCellValue();
-                }
-
-            }
-        } catch (Exception e) {
-            return val;
-        }
-        return val;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/reflect/ReflectUtils.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/reflect/ReflectUtils.java
deleted file mode 100644
index 7188116..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/reflect/ReflectUtils.java
+++ /dev/null
@@ -1,328 +0,0 @@
-package com.dingzhuo.energy.common.utils.reflect;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.Date;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.Validate;
-import org.apache.poi.ss.usermodel.DateUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import com.dingzhuo.energy.common.core.text.Convert;
-import com.dingzhuo.energy.common.utils.DateUtils;
-
-/**
- * 鍙嶅皠宸ュ叿绫�. 鎻愪緵璋冪敤getter/setter鏂规硶, 璁块棶绉佹湁鍙橀噺, 璋冪敤绉佹湁鏂规硶, 鑾峰彇娉涘瀷绫诲瀷Class, 琚獳OP杩囩殑鐪熷疄绫荤瓑宸ュ叿鍑芥暟.
- *
- * @author ruoyi
- */
-@SuppressWarnings("rawtypes")
-public class ReflectUtils {
-
-  private static final String SETTER_PREFIX = "set";
-
-  private static final String GETTER_PREFIX = "get";
-
-  private static final String CGLIB_CLASS_SEPARATOR = "$$";
-
-  private static Logger logger = LoggerFactory.getLogger(ReflectUtils.class);
-
-  /**
-   * 璋冪敤Getter鏂规硶. 鏀寔澶氱骇锛屽锛氬璞″悕.瀵硅薄鍚�.鏂规硶
-   */
-  @SuppressWarnings("unchecked")
-  public static <E> E invokeGetter(Object obj, String propertyName) {
-    Object object = obj;
-    for (String name : StringUtils.split(propertyName, ".")) {
-      String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(name);
-      object = invokeMethod(object, getterMethodName, new Class[]{}, new Object[]{});
-    }
-    return (E) object;
-  }
-
-  /**
-   * 璋冪敤Setter鏂规硶, 浠呭尮閰嶆柟娉曞悕銆� 鏀寔澶氱骇锛屽锛氬璞″悕.瀵硅薄鍚�.鏂规硶
-   */
-  public static <E> void invokeSetter(Object obj, String propertyName, E value) {
-    Object object = obj;
-    String[] names = StringUtils.split(propertyName, ".");
-    for (int i = 0; i < names.length; i++) {
-      if (i < names.length - 1) {
-        String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(names[i]);
-        object = invokeMethod(object, getterMethodName, new Class[]{}, new Object[]{});
-      } else {
-        String setterMethodName = SETTER_PREFIX + StringUtils.capitalize(names[i]);
-        invokeMethodByName(object, setterMethodName, new Object[]{value});
-      }
-    }
-  }
-
-  /**
-   * 鐩存帴璇诲彇瀵硅薄灞炴�у��, 鏃犺private/protected淇グ绗�, 涓嶇粡杩噂etter鍑芥暟.
-   */
-  @SuppressWarnings("unchecked")
-  public static <E> E getFieldValue(final Object obj, final String fieldName) {
-    Field field = getAccessibleField(obj, fieldName);
-    if (field == null) {
-      logger.debug("鍦� [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + fieldName + "] 瀛楁 ");
-      return null;
-    }
-    E result = null;
-    try {
-      result = (E) field.get(obj);
-    } catch (IllegalAccessException e) {
-      logger.error("涓嶅彲鑳芥姏鍑虹殑寮傚父{}", e.getMessage());
-    }
-    return result;
-  }
-
-  /**
-   * 鐩存帴璁剧疆瀵硅薄灞炴�у��, 鏃犺private/protected淇グ绗�, 涓嶇粡杩噑etter鍑芥暟.
-   */
-  public static <E> void setFieldValue(final Object obj, final String fieldName, final E value) {
-    Field field = getAccessibleField(obj, fieldName);
-    if (field == null) {
-      // throw new IllegalArgumentException("鍦� [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + fieldName + "] 瀛楁 ");
-      logger.debug("鍦� [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + fieldName + "] 瀛楁 ");
-      return;
-    }
-    try {
-      field.set(obj, value);
-    } catch (IllegalAccessException e) {
-      logger.error("涓嶅彲鑳芥姏鍑虹殑寮傚父: {}", e.getMessage());
-    }
-  }
-
-  /**
-   * 鐩存帴璋冪敤瀵硅薄鏂规硶, 鏃犺private/protected淇グ绗�. 鐢ㄤ簬涓�娆℃�ц皟鐢ㄧ殑鎯呭喌锛屽惁鍒欏簲浣跨敤getAccessibleMethod()鍑芥暟鑾峰緱Method鍚庡弽澶嶈皟鐢�.
-   * 鍚屾椂鍖归厤鏂规硶鍚�+鍙傛暟绫诲瀷锛�
-   */
-  @SuppressWarnings("unchecked")
-  public static <E> E invokeMethod(final Object obj, final String methodName,
-      final Class<?>[] parameterTypes,
-      final Object[] args) {
-    if (obj == null || methodName == null) {
-      return null;
-    }
-    Method method = getAccessibleMethod(obj, methodName, parameterTypes);
-    if (method == null) {
-      logger.debug("鍦� [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + methodName + "] 鏂规硶 ");
-      return null;
-    }
-    try {
-      return (E) method.invoke(obj, args);
-    } catch (Exception e) {
-      String msg = "method: " + method + ", obj: " + obj + ", args: " + args + "";
-      throw convertReflectionExceptionToUnchecked(msg, e);
-    }
-  }
-
-  /**
-   * 鐩存帴璋冪敤瀵硅薄鏂规硶, 鏃犺private/protected淇グ绗︼紝 鐢ㄤ簬涓�娆℃�ц皟鐢ㄧ殑鎯呭喌锛屽惁鍒欏簲浣跨敤getAccessibleMethodByName()鍑芥暟鑾峰緱Method鍚庡弽澶嶈皟鐢�.
-   * 鍙尮閰嶅嚱鏁板悕锛屽鏋滄湁澶氫釜鍚屽悕鍑芥暟璋冪敤绗竴涓��
-   */
-  @SuppressWarnings("unchecked")
-  public static <E> E invokeMethodByName(final Object obj, final String methodName,
-      final Object[] args) {
-    Method method = getAccessibleMethodByName(obj, methodName, args.length);
-    if (method == null) {
-      // 濡傛灉涓虹┖涓嶆姤閿欙紝鐩存帴杩斿洖绌恒��
-      logger.debug("鍦� [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + methodName + "] 鏂规硶 ");
-      return null;
-    }
-    try {
-      // 绫诲瀷杞崲锛堝皢鍙傛暟鏁版嵁绫诲瀷杞崲涓虹洰鏍囨柟娉曞弬鏁扮被鍨嬶級
-      Class<?>[] cs = method.getParameterTypes();
-      for (int i = 0; i < cs.length; i++) {
-        if (args[i] != null && !args[i].getClass().equals(cs[i])) {
-          if (cs[i] == String.class) {
-            args[i] = Convert.toStr(args[i]);
-            if (StringUtils.endsWith((String) args[i], ".0")) {
-              args[i] = StringUtils.substringBefore((String) args[i], ".0");
-            }
-          } else if (cs[i] == Integer.class) {
-            args[i] = Convert.toInt(args[i]);
-          } else if (cs[i] == Long.class) {
-            args[i] = Convert.toLong(args[i]);
-          } else if (cs[i] == Double.class) {
-            args[i] = Convert.toDouble(args[i]);
-          } else if (cs[i] == Float.class) {
-            args[i] = Convert.toFloat(args[i]);
-          } else if (cs[i] == Date.class) {
-            if (args[i] instanceof String) {
-              args[i] = DateUtils.parseDate(args[i]);
-            } else {
-              args[i] = DateUtil.getJavaDate((Double) args[i]);
-            }
-          } else if (Enum.class.isAssignableFrom(cs[i])) {
-            args[i] = String.valueOf(args[i]);
-          }
-        }
-      }
-      return (E) method.invoke(obj, args);
-    } catch (Exception e) {
-      String msg = "method: " + method + ", obj: " + obj + ", args: " + args + "";
-      throw convertReflectionExceptionToUnchecked(msg, e);
-    }
-  }
-
-  /**
-   * 寰幆鍚戜笂杞瀷, 鑾峰彇瀵硅薄鐨凞eclaredField, 骞跺己鍒惰缃负鍙闂�. 濡傚悜涓婅浆鍨嬪埌Object浠嶆棤娉曟壘鍒�, 杩斿洖null.
-   */
-  public static Field getAccessibleField(final Object obj, final String fieldName) {
-    // 涓虹┖涓嶆姤閿欍�傜洿鎺ヨ繑鍥� null
-    if (obj == null) {
-      return null;
-    }
-    Validate.notBlank(fieldName, "fieldName can't be blank");
-    for (Class<?> superClass = obj.getClass(); superClass != Object.class;
-        superClass = superClass.getSuperclass()) {
-      try {
-        Field field = superClass.getDeclaredField(fieldName);
-        makeAccessible(field);
-        return field;
-      } catch (NoSuchFieldException e) {
-        continue;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * 寰幆鍚戜笂杞瀷, 鑾峰彇瀵硅薄鐨凞eclaredMethod,骞跺己鍒惰缃负鍙闂�. 濡傚悜涓婅浆鍨嬪埌Object浠嶆棤娉曟壘鍒�, 杩斿洖null. 鍖归厤鍑芥暟鍚�+鍙傛暟绫诲瀷銆� 鐢ㄤ簬鏂规硶闇�瑕佽澶氭璋冪敤鐨勬儏鍐�.
-   * 鍏堜娇鐢ㄦ湰鍑芥暟鍏堝彇寰桵ethod,鐒跺悗璋冪敤Method.invoke(Object obj, Object... args)
-   */
-  public static Method getAccessibleMethod(final Object obj, final String methodName,
-      final Class<?>... parameterTypes) {
-    // 涓虹┖涓嶆姤閿欍�傜洿鎺ヨ繑鍥� null
-    if (obj == null) {
-      return null;
-    }
-    Validate.notBlank(methodName, "methodName can't be blank");
-    for (Class<?> searchType = obj.getClass(); searchType != Object.class;
-        searchType = searchType.getSuperclass()) {
-      try {
-        Method method = searchType.getDeclaredMethod(methodName, parameterTypes);
-        makeAccessible(method);
-        return method;
-      } catch (NoSuchMethodException e) {
-        continue;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * 寰幆鍚戜笂杞瀷, 鑾峰彇瀵硅薄鐨凞eclaredMethod,骞跺己鍒惰缃负鍙闂�. 濡傚悜涓婅浆鍨嬪埌Object浠嶆棤娉曟壘鍒�, 杩斿洖null. 鍙尮閰嶅嚱鏁板悕銆� 鐢ㄤ簬鏂规硶闇�瑕佽澶氭璋冪敤鐨勬儏鍐�.
-   * 鍏堜娇鐢ㄦ湰鍑芥暟鍏堝彇寰桵ethod,鐒跺悗璋冪敤Method.invoke(Object obj, Object... args)
-   */
-  public static Method getAccessibleMethodByName(final Object obj, final String methodName,
-      int argsNum) {
-    // 涓虹┖涓嶆姤閿欍�傜洿鎺ヨ繑鍥� null
-    if (obj == null) {
-      return null;
-    }
-    Validate.notBlank(methodName, "methodName can't be blank");
-    for (Class<?> searchType = obj.getClass(); searchType != Object.class;
-        searchType = searchType.getSuperclass()) {
-      Method[] methods = searchType.getDeclaredMethods();
-      for (Method method : methods) {
-        if (method.getName().equals(methodName) && method.getParameterTypes().length == argsNum) {
-          makeAccessible(method);
-          return method;
-        }
-      }
-    }
-    return null;
-  }
-
-  /**
-   * 鏀瑰彉private/protected鐨勬柟娉曚负public锛屽敖閲忎笉璋冪敤瀹為檯鏀瑰姩鐨勮鍙ワ紝閬垮厤JDK鐨凷ecurityManager鎶辨�ㄣ��
-   */
-  public static void makeAccessible(Method method) {
-    if ((!Modifier.isPublic(method.getModifiers()) || !Modifier
-        .isPublic(method.getDeclaringClass().getModifiers()))
-        && !method.isAccessible()) {
-      method.setAccessible(true);
-    }
-  }
-
-  /**
-   * 鏀瑰彉private/protected鐨勬垚鍛樺彉閲忎负public锛屽敖閲忎笉璋冪敤瀹為檯鏀瑰姩鐨勮鍙ワ紝閬垮厤JDK鐨凷ecurityManager鎶辨�ㄣ��
-   */
-  public static void makeAccessible(Field field) {
-    if ((!Modifier.isPublic(field.getModifiers()) || !Modifier
-        .isPublic(field.getDeclaringClass().getModifiers())
-        || Modifier.isFinal(field.getModifiers())) && !field.isAccessible()) {
-      field.setAccessible(true);
-    }
-  }
-
-  /**
-   * 閫氳繃鍙嶅皠, 鑾峰緱Class瀹氫箟涓0鏄庣殑娉涘瀷鍙傛暟鐨勭被鍨�, 娉ㄦ剰娉涘瀷蹇呴』瀹氫箟鍦ㄧ埗绫诲 濡傛棤娉曟壘鍒�, 杩斿洖Object.class.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> Class<T> getClassGenricType(final Class clazz) {
-    return getClassGenricType(clazz, 0);
-  }
-
-  /**
-   * 閫氳繃鍙嶅皠, 鑾峰緱Class瀹氫箟涓0鏄庣殑鐖剁被鐨勬硾鍨嬪弬鏁扮殑绫诲瀷. 濡傛棤娉曟壘鍒�, 杩斿洖Object.class.
-   */
-  public static Class getClassGenricType(final Class clazz, final int index) {
-    Type genType = clazz.getGenericSuperclass();
-
-    if (!(genType instanceof ParameterizedType)) {
-      logger.debug(clazz.getSimpleName() + "'s superclass not ParameterizedType");
-      return Object.class;
-    }
-
-    Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
-
-    if (index >= params.length || index < 0) {
-      logger.debug(
-          "Index: " + index + ", Size of " + clazz.getSimpleName() + "'s Parameterized Type: "
-              + params.length);
-      return Object.class;
-    }
-    if (!(params[index] instanceof Class)) {
-      logger.debug(
-          clazz.getSimpleName() + " not set the actual class on superclass generic parameter");
-      return Object.class;
-    }
-
-    return (Class) params[index];
-  }
-
-  public static Class<?> getUserClass(Object instance) {
-    if (instance == null) {
-      throw new RuntimeException("Instance must not be null");
-    }
-    Class clazz = instance.getClass();
-    if (clazz != null && clazz.getName().contains(CGLIB_CLASS_SEPARATOR)) {
-      Class<?> superClass = clazz.getSuperclass();
-      if (superClass != null && !Object.class.equals(superClass)) {
-        return superClass;
-      }
-    }
-    return clazz;
-
-  }
-
-  /**
-   * 灏嗗弽灏勬椂鐨刢hecked exception杞崲涓簎nchecked exception.
-   */
-  public static RuntimeException convertReflectionExceptionToUnchecked(String msg, Exception e) {
-    if (e instanceof IllegalAccessException || e instanceof IllegalArgumentException
-        || e instanceof NoSuchMethodException) {
-      return new IllegalArgumentException(msg, e);
-    } else if (e instanceof InvocationTargetException) {
-      return new RuntimeException(msg, ((InvocationTargetException) e).getTargetException());
-    }
-    return new RuntimeException(msg, e);
-  }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/security/Md5Utils.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/security/Md5Utils.java
deleted file mode 100644
index bd5cf73..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/security/Md5Utils.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.dingzhuo.energy.common.utils.security;
-
-import java.nio.charset.StandardCharsets;
-import java.security.MessageDigest;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Md5鍔犲瘑鏂规硶
- * 
- * @author ruoyi
- */
-public class Md5Utils
-{
-    private static final Logger log = LoggerFactory.getLogger(Md5Utils.class);
-
-    private static byte[] md5(String s)
-    {
-        MessageDigest algorithm;
-        try
-        {
-            algorithm = MessageDigest.getInstance("MD5");
-            algorithm.reset();
-            algorithm.update(s.getBytes(StandardCharsets.UTF_8));
-            byte[] messageDigest = algorithm.digest();
-            return messageDigest;
-        }
-        catch (Exception e)
-        {
-            log.error("MD5 Error...", e);
-        }
-        return null;
-    }
-
-    private static final String toHex(byte[] hash)
-    {
-        if (hash == null)
-        {
-            return null;
-        }
-        StringBuffer buf = new StringBuffer(hash.length * 2);
-        int i;
-
-        for (i = 0; i < hash.length; i++)
-        {
-            if ((hash[i] & 0xff) < 0x10)
-            {
-                buf.append("0");
-            }
-            buf.append(Long.toString(hash[i] & 0xff, 16));
-        }
-        return buf.toString();
-    }
-
-    public static String hash(String s)
-    {
-        try
-        {
-            return new String(toHex(md5(s)).getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8);
-        }
-        catch (Exception e)
-        {
-            log.error("not supported charset...{}", e);
-            return s;
-        }
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/sign/Base64.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/sign/Base64.java
deleted file mode 100644
index cc79b66..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/sign/Base64.java
+++ /dev/null
@@ -1,291 +0,0 @@
-package com.dingzhuo.energy.common.utils.sign;
-
-/**
- * Base64宸ュ叿绫�
- * 
- * @author ruoyi
- */
-public final class Base64
-{
-    static private final int     BASELENGTH           = 128;
-    static private final int     LOOKUPLENGTH         = 64;
-    static private final int     TWENTYFOURBITGROUP   = 24;
-    static private final int     EIGHTBIT             = 8;
-    static private final int     SIXTEENBIT           = 16;
-    static private final int     FOURBYTE             = 4;
-    static private final int     SIGN                 = -128;
-    static private final char    PAD                  = '=';
-    static final private byte[]  base64Alphabet       = new byte[BASELENGTH];
-    static final private char[]  lookUpBase64Alphabet = new char[LOOKUPLENGTH];
-
-    static
-    {
-        for (int i = 0; i < BASELENGTH; ++i)
-        {
-            base64Alphabet[i] = -1;
-        }
-        for (int i = 'Z'; i >= 'A'; i--)
-        {
-            base64Alphabet[i] = (byte) (i - 'A');
-        }
-        for (int i = 'z'; i >= 'a'; i--)
-        {
-            base64Alphabet[i] = (byte) (i - 'a' + 26);
-        }
-
-        for (int i = '9'; i >= '0'; i--)
-        {
-            base64Alphabet[i] = (byte) (i - '0' + 52);
-        }
-
-        base64Alphabet['+'] = 62;
-        base64Alphabet['/'] = 63;
-
-        for (int i = 0; i <= 25; i++)
-        {
-            lookUpBase64Alphabet[i] = (char) ('A' + i);
-        }
-
-        for (int i = 26, j = 0; i <= 51; i++, j++)
-        {
-            lookUpBase64Alphabet[i] = (char) ('a' + j);
-        }
-
-        for (int i = 52, j = 0; i <= 61; i++, j++)
-        {
-            lookUpBase64Alphabet[i] = (char) ('0' + j);
-        }
-        lookUpBase64Alphabet[62] = '+';
-        lookUpBase64Alphabet[63] = '/';
-    }
-
-    private static boolean isWhiteSpace(char octect)
-    {
-        return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9);
-    }
-
-    private static boolean isPad(char octect)
-    {
-        return (octect == PAD);
-    }
-
-    private static boolean isData(char octect)
-    {
-        return (octect < BASELENGTH && base64Alphabet[octect] != -1);
-    }
-
-    /**
-     * Encodes hex octects into Base64
-     *
-     * @param binaryData Array containing binaryData
-     * @return Encoded Base64 array
-     */
-    public static String encode(byte[] binaryData)
-    {
-        if (binaryData == null)
-        {
-            return null;
-        }
-
-        int lengthDataBits = binaryData.length * EIGHTBIT;
-        if (lengthDataBits == 0)
-        {
-            return "";
-        }
-
-        int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP;
-        int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP;
-        int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1 : numberTriplets;
-        char[] encodedData = null;
-
-        encodedData = new char[numberQuartet * 4];
-
-        byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0;
-
-        int encodedIndex = 0;
-        int dataIndex = 0;
-
-        for (int i = 0; i < numberTriplets; i++)
-        {
-            b1 = binaryData[dataIndex++];
-            b2 = binaryData[dataIndex++];
-            b3 = binaryData[dataIndex++];
-
-            l = (byte) (b2 & 0x0f);
-            k = (byte) (b1 & 0x03);
-
-            byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0);
-            byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0);
-            byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc);
-
-            encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
-            encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)];
-            encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3];
-            encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f];
-        }
-
-        // form integral number of 6-bit groups
-        if (fewerThan24bits == EIGHTBIT)
-        {
-            b1 = binaryData[dataIndex];
-            k = (byte) (b1 & 0x03);
-            byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0);
-            encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
-            encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4];
-            encodedData[encodedIndex++] = PAD;
-            encodedData[encodedIndex++] = PAD;
-        }
-        else if (fewerThan24bits == SIXTEENBIT)
-        {
-            b1 = binaryData[dataIndex];
-            b2 = binaryData[dataIndex + 1];
-            l = (byte) (b2 & 0x0f);
-            k = (byte) (b1 & 0x03);
-
-            byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0);
-            byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0);
-
-            encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
-            encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)];
-            encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2];
-            encodedData[encodedIndex++] = PAD;
-        }
-        return new String(encodedData);
-    }
-
-    /**
-     * Decodes Base64 data into octects
-     *
-     * @param encoded string containing Base64 data
-     * @return Array containind decoded data.
-     */
-    public static byte[] decode(String encoded)
-    {
-        if (encoded == null)
-        {
-            return null;
-        }
-
-        char[] base64Data = encoded.toCharArray();
-        // remove white spaces
-        int len = removeWhiteSpace(base64Data);
-
-        if (len % FOURBYTE != 0)
-        {
-            return null;// should be divisible by four
-        }
-
-        int numberQuadruple = (len / FOURBYTE);
-
-        if (numberQuadruple == 0)
-        {
-            return new byte[0];
-        }
-
-        byte[] decodedData = null;
-        byte b1 = 0, b2 = 0, b3 = 0, b4 = 0;
-        char d1 = 0, d2 = 0, d3 = 0, d4 = 0;
-
-        int i = 0;
-        int encodedIndex = 0;
-        int dataIndex = 0;
-        decodedData = new byte[(numberQuadruple) * 3];
-
-        for (; i < numberQuadruple - 1; i++)
-        {
-
-            if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++]))
-                    || !isData((d3 = base64Data[dataIndex++])) || !isData((d4 = base64Data[dataIndex++])))
-            {
-                return null;
-            } // if found "no data" just return null
-
-            b1 = base64Alphabet[d1];
-            b2 = base64Alphabet[d2];
-            b3 = base64Alphabet[d3];
-            b4 = base64Alphabet[d4];
-
-            decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
-            decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
-            decodedData[encodedIndex++] = (byte) (b3 << 6 | b4);
-        }
-
-        if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++])))
-        {
-            return null;// if found "no data" just return null
-        }
-
-        b1 = base64Alphabet[d1];
-        b2 = base64Alphabet[d2];
-
-        d3 = base64Data[dataIndex++];
-        d4 = base64Data[dataIndex++];
-        if (!isData((d3)) || !isData((d4)))
-        {// Check if they are PAD characters
-            if (isPad(d3) && isPad(d4))
-            {
-                if ((b2 & 0xf) != 0)// last 4 bits should be zero
-                {
-                    return null;
-                }
-                byte[] tmp = new byte[i * 3 + 1];
-                System.arraycopy(decodedData, 0, tmp, 0, i * 3);
-                tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
-                return tmp;
-            }
-            else if (!isPad(d3) && isPad(d4))
-            {
-                b3 = base64Alphabet[d3];
-                if ((b3 & 0x3) != 0)// last 2 bits should be zero
-                {
-                    return null;
-                }
-                byte[] tmp = new byte[i * 3 + 2];
-                System.arraycopy(decodedData, 0, tmp, 0, i * 3);
-                tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
-                tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
-                return tmp;
-            }
-            else
-            {
-                return null;
-            }
-        }
-        else
-        { // No PAD e.g 3cQl
-            b3 = base64Alphabet[d3];
-            b4 = base64Alphabet[d4];
-            decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
-            decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
-            decodedData[encodedIndex++] = (byte) (b3 << 6 | b4);
-
-        }
-        return decodedData;
-    }
-
-    /**
-     * remove WhiteSpace from MIME containing encoded Base64 data.
-     *
-     * @param data the byte array of base64 data (with WS)
-     * @return the new length
-     */
-    private static int removeWhiteSpace(char[] data)
-    {
-        if (data == null)
-        {
-            return 0;
-        }
-
-        // count characters that's not whitespace
-        int newSize = 0;
-        int len = data.length;
-        for (int i = 0; i < len; i++)
-        {
-            if (!isWhiteSpace(data[i]))
-            {
-                data[newSize++] = data[i];
-            }
-        }
-        return newSize;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/spring/SpringUtils.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/spring/SpringUtils.java
deleted file mode 100644
index 17655c4..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/spring/SpringUtils.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package com.dingzhuo.energy.common.utils.spring;
-
-import org.springframework.aop.framework.AopContext;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.NoSuchBeanDefinitionException;
-import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
-import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.stereotype.Component;
-
-/**
- * spring宸ュ叿绫� 鏂逛究鍦ㄩ潪spring绠$悊鐜涓幏鍙朾ean
- * 
- * @author ruoyi
- */
-@Component
-public final class SpringUtils implements BeanFactoryPostProcessor
-{
-    /** Spring搴旂敤涓婁笅鏂囩幆澧� */
-    private static ConfigurableListableBeanFactory beanFactory;
-
-    @Override
-    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException
-    {
-        SpringUtils.beanFactory = beanFactory;
-    }
-
-    /**
-     * 鑾峰彇瀵硅薄
-     *
-     * @param name
-     * @return Object 涓�涓互鎵�缁欏悕瀛楁敞鍐岀殑bean鐨勫疄渚�
-     * @throws org.springframework.beans.BeansException
-     *
-     */
-    @SuppressWarnings("unchecked")
-    public static <T> T getBean(String name) throws BeansException
-    {
-        return (T) beanFactory.getBean(name);
-    }
-
-    /**
-     * 鑾峰彇绫诲瀷涓簉equiredType鐨勫璞�
-     *
-     * @param clz
-     * @return
-     * @throws org.springframework.beans.BeansException
-     *
-     */
-    public static <T> T getBean(Class<T> clz) throws BeansException
-    {
-        T result = beanFactory.getBean(clz);
-        return result;
-    }
-
-    /**
-     * 濡傛灉BeanFactory鍖呭惈涓�涓笌鎵�缁欏悕绉板尮閰嶇殑bean瀹氫箟锛屽垯杩斿洖true
-     *
-     * @param name
-     * @return boolean
-     */
-    public static boolean containsBean(String name)
-    {
-        return beanFactory.containsBean(name);
-    }
-
-    /**
-     * 鍒ゆ柇浠ョ粰瀹氬悕瀛楁敞鍐岀殑bean瀹氫箟鏄竴涓猻ingleton杩樻槸涓�涓猵rototype銆� 濡傛灉涓庣粰瀹氬悕瀛楃浉搴旂殑bean瀹氫箟娌℃湁琚壘鍒帮紝灏嗕細鎶涘嚭涓�涓紓甯革紙NoSuchBeanDefinitionException锛�
-     *
-     * @param name
-     * @return boolean
-     * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
-     *
-     */
-    public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException
-    {
-        return beanFactory.isSingleton(name);
-    }
-
-    /**
-     * @param name
-     * @return Class 娉ㄥ唽瀵硅薄鐨勭被鍨�
-     * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
-     *
-     */
-    public static Class<?> getType(String name) throws NoSuchBeanDefinitionException
-    {
-        return beanFactory.getType(name);
-    }
-
-    /**
-     * 濡傛灉缁欏畾鐨刡ean鍚嶅瓧鍦╞ean瀹氫箟涓湁鍒悕锛屽垯杩斿洖杩欎簺鍒悕
-     *
-     * @param name
-     * @return
-     * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
-     *
-     */
-    public static String[] getAliases(String name) throws NoSuchBeanDefinitionException
-    {
-        return beanFactory.getAliases(name);
-    }
-
-    /**
-     * 鑾峰彇aop浠g悊瀵硅薄
-     * 
-     * @param invoker
-     * @return
-     */
-    @SuppressWarnings("unchecked")
-    public static <T> T getAopProxy(T invoker)
-    {
-        return (T) AopContext.currentProxy();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/sql/SqlUtil.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/sql/SqlUtil.java
deleted file mode 100644
index 5e492d7..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/sql/SqlUtil.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.dingzhuo.energy.common.utils.sql;
-
-import com.dingzhuo.energy.common.utils.StringUtils;
-
-/**
- * sql鎿嶄綔宸ュ叿绫�
- * 
- * @author ruoyi
- */
-public class SqlUtil
-{
-    /**
-     * 浠呮敮鎸佸瓧姣嶃�佹暟瀛椼�佷笅鍒掔嚎銆佺┖鏍笺�侀�楀彿锛堟敮鎸佸涓瓧娈垫帓搴忥級
-     */
-    public static String SQL_PATTERN = "[a-zA-Z0-9_\\ \\,]+";
-
-    /**
-     * 妫�鏌ュ瓧绗︼紝闃叉娉ㄥ叆缁曡繃
-     */
-    public static String escapeOrderBySql(String value)
-    {
-        if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value))
-        {
-            return StringUtils.EMPTY;
-        }
-        return value;
-    }
-
-    /**
-     * 楠岃瘉 order by 璇硶鏄惁绗﹀悎瑙勮寖
-     */
-    public static boolean isValidOrderBySql(String value)
-    {
-        return value.matches(SQL_PATTERN);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/text/CharsetKit.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/text/CharsetKit.java
deleted file mode 100644
index b7f63fd..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/text/CharsetKit.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package com.dingzhuo.energy.common.utils.text;
-
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import com.dingzhuo.energy.common.utils.StringUtils;
-
-/**
- * 瀛楃闆嗗伐鍏风被
- * 
- * @author ruoyi
- *
- */
-public class CharsetKit
-{
-    /** ISO-8859-1 */
-    public static final String ISO_8859_1 = "ISO-8859-1";
-    /** UTF-8 */
-    public static final String UTF_8 = "UTF-8";
-    /** GBK */
-    public static final String GBK = "GBK";
-
-    /** ISO-8859-1 */
-    public static final Charset CHARSET_ISO_8859_1 = StandardCharsets.ISO_8859_1;
-    /** UTF-8 */
-    public static final Charset CHARSET_UTF_8 = StandardCharsets.UTF_8;
-    /** GBK */
-    public static final Charset CHARSET_GBK = Charset.forName(GBK);
-
-    /**
-     * 杞崲涓篊harset瀵硅薄
-     * 
-     * @param charset 瀛楃闆嗭紝涓虹┖鍒欒繑鍥為粯璁ゅ瓧绗﹂泦
-     * @return Charset
-     */
-    public static Charset charset(String charset)
-    {
-        return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset);
-    }
-
-    /**
-     * 杞崲瀛楃涓茬殑瀛楃闆嗙紪鐮�
-     * 
-     * @param source 瀛楃涓�
-     * @param srcCharset 婧愬瓧绗﹂泦锛岄粯璁SO-8859-1
-     * @param destCharset 鐩爣瀛楃闆嗭紝榛樿UTF-8
-     * @return 杞崲鍚庣殑瀛楃闆�
-     */
-    public static String convert(String source, String srcCharset, String destCharset)
-    {
-        return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset));
-    }
-
-    /**
-     * 杞崲瀛楃涓茬殑瀛楃闆嗙紪鐮�
-     * 
-     * @param source 瀛楃涓�
-     * @param srcCharset 婧愬瓧绗﹂泦锛岄粯璁SO-8859-1
-     * @param destCharset 鐩爣瀛楃闆嗭紝榛樿UTF-8
-     * @return 杞崲鍚庣殑瀛楃闆�
-     */
-    public static String convert(String source, Charset srcCharset, Charset destCharset)
-    {
-        if (null == srcCharset)
-        {
-            srcCharset = StandardCharsets.ISO_8859_1;
-        }
-
-        if (null == destCharset)
-        {
-            srcCharset = StandardCharsets.UTF_8;
-        }
-
-        if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset))
-        {
-            return source;
-        }
-        return new String(source.getBytes(srcCharset), destCharset);
-    }
-
-    /**
-     * @return 绯荤粺瀛楃闆嗙紪鐮�
-     */
-    public static String systemCharset()
-    {
-        return Charset.defaultCharset().name();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/text/Convert.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/text/Convert.java
deleted file mode 100644
index 5de0b36..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/text/Convert.java
+++ /dev/null
@@ -1,999 +0,0 @@
-package com.dingzhuo.energy.common.utils.text;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.nio.ByteBuffer;
-import java.nio.charset.Charset;
-import java.text.NumberFormat;
-import java.util.Set;
-import com.dingzhuo.energy.common.utils.StringUtils;
-
-/**
- * 绫诲瀷杞崲鍣�
- * 
- * @author ruoyi
- */
-public class Convert
-{
-    /**
-     * 杞崲涓哄瓧绗︿覆<br>
-     * 濡傛灉缁欏畾鐨勫�间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static String toStr(Object value, String defaultValue)
-    {
-        if (null == value)
-        {
-            return defaultValue;
-        }
-        if (value instanceof String)
-        {
-            return (String) value;
-        }
-        return value.toString();
-    }
-
-    /**
-     * 杞崲涓哄瓧绗︿覆<br>
-     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static String toStr(Object value)
-    {
-        return toStr(value, null);
-    }
-
-    /**
-     * 杞崲涓哄瓧绗�<br>
-     * 濡傛灉缁欏畾鐨勫�间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static Character toChar(Object value, Character defaultValue)
-    {
-        if (null == value)
-        {
-            return defaultValue;
-        }
-        if (value instanceof Character)
-        {
-            return (Character) value;
-        }
-
-        final String valueStr = toStr(value, null);
-        return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0);
-    }
-
-    /**
-     * 杞崲涓哄瓧绗�<br>
-     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Character toChar(Object value)
-    {
-        return toChar(value, null);
-    }
-
-    /**
-     * 杞崲涓篵yte<br>
-     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static Byte toByte(Object value, Byte defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof Byte)
-        {
-            return (Byte) value;
-        }
-        if (value instanceof Number)
-        {
-            return ((Number) value).byteValue();
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            return Byte.parseByte(valueStr);
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓篵yte<br>
-     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Byte toByte(Object value)
-    {
-        return toByte(value, null);
-    }
-
-    /**
-     * 杞崲涓篠hort<br>
-     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static Short toShort(Object value, Short defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof Short)
-        {
-            return (Short) value;
-        }
-        if (value instanceof Number)
-        {
-            return ((Number) value).shortValue();
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            return Short.parseShort(valueStr.trim());
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓篠hort<br>
-     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Short toShort(Object value)
-    {
-        return toShort(value, null);
-    }
-
-    /**
-     * 杞崲涓篘umber<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static Number toNumber(Object value, Number defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof Number)
-        {
-            return (Number) value;
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            return NumberFormat.getInstance().parse(valueStr);
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓篘umber<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Number toNumber(Object value)
-    {
-        return toNumber(value, null);
-    }
-
-    /**
-     * 杞崲涓篿nt<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static Integer toInt(Object value, Integer defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof Integer)
-        {
-            return (Integer) value;
-        }
-        if (value instanceof Number)
-        {
-            return ((Number) value).intValue();
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            return Integer.parseInt(valueStr.trim());
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓篿nt<br>
-     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Integer toInt(Object value)
-    {
-        return toInt(value, null);
-    }
-
-    /**
-     * 杞崲涓篒nteger鏁扮粍<br>
-     * 
-     * @param str 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Integer[] toIntArray(String str)
-    {
-        return toIntArray(",", str);
-    }
-
-    /**
-     * 杞崲涓篖ong鏁扮粍<br>
-     * 
-     * @param str 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Long[] toLongArray(String str)
-    {
-        return toLongArray(",", str);
-    }
-
-    /**
-     * 杞崲涓篒nteger鏁扮粍<br>
-     * 
-     * @param split 鍒嗛殧绗�
-     * @param split 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Integer[] toIntArray(String split, String str)
-    {
-        if (StringUtils.isEmpty(str))
-        {
-            return new Integer[] {};
-        }
-        String[] arr = str.split(split);
-        final Integer[] ints = new Integer[arr.length];
-        for (int i = 0; i < arr.length; i++)
-        {
-            final Integer v = toInt(arr[i], 0);
-            ints[i] = v;
-        }
-        return ints;
-    }
-
-    /**
-     * 杞崲涓篖ong鏁扮粍<br>
-     * 
-     * @param split 鍒嗛殧绗�
-     * @param str 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Long[] toLongArray(String split, String str)
-    {
-        if (StringUtils.isEmpty(str))
-        {
-            return new Long[] {};
-        }
-        String[] arr = str.split(split);
-        final Long[] longs = new Long[arr.length];
-        for (int i = 0; i < arr.length; i++)
-        {
-            final Long v = toLong(arr[i], null);
-            longs[i] = v;
-        }
-        return longs;
-    }
-
-    /**
-     * 杞崲涓篠tring鏁扮粍<br>
-     * 
-     * @param str 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static String[] toStrArray(String str)
-    {
-        return toStrArray(",", str);
-    }
-
-    /**
-     * 杞崲涓篠tring鏁扮粍<br>
-     * 
-     * @param split 鍒嗛殧绗�
-     * @param split 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static String[] toStrArray(String split, String str)
-    {
-        return str.split(split);
-    }
-
-    /**
-     * 杞崲涓簂ong<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static Long toLong(Object value, Long defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof Long)
-        {
-            return (Long) value;
-        }
-        if (value instanceof Number)
-        {
-            return ((Number) value).longValue();
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            // 鏀寔绉戝璁℃暟娉�
-            return new BigDecimal(valueStr.trim()).longValue();
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓簂ong<br>
-     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Long toLong(Object value)
-    {
-        return toLong(value, null);
-    }
-
-    /**
-     * 杞崲涓篸ouble<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static Double toDouble(Object value, Double defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof Double)
-        {
-            return (Double) value;
-        }
-        if (value instanceof Number)
-        {
-            return ((Number) value).doubleValue();
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            // 鏀寔绉戝璁℃暟娉�
-            return new BigDecimal(valueStr.trim()).doubleValue();
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓篸ouble<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Double toDouble(Object value)
-    {
-        return toDouble(value, null);
-    }
-
-    /**
-     * 杞崲涓篎loat<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static Float toFloat(Object value, Float defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof Float)
-        {
-            return (Float) value;
-        }
-        if (value instanceof Number)
-        {
-            return ((Number) value).floatValue();
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            return Float.parseFloat(valueStr.trim());
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓篎loat<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Float toFloat(Object value)
-    {
-        return toFloat(value, null);
-    }
-
-    /**
-     * 杞崲涓篵oolean<br>
-     * String鏀寔鐨勫�间负锛歵rue銆乫alse銆亂es銆乷k銆乶o锛�1,0 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static Boolean toBool(Object value, Boolean defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof Boolean)
-        {
-            return (Boolean) value;
-        }
-        String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        valueStr = valueStr.trim().toLowerCase();
-        switch (valueStr)
-        {
-            case "true":
-                return true;
-            case "false":
-                return false;
-            case "yes":
-                return true;
-            case "ok":
-                return true;
-            case "no":
-                return false;
-            case "1":
-                return true;
-            case "0":
-                return false;
-            default:
-                return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓篵oolean<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static Boolean toBool(Object value)
-    {
-        return toBool(value, null);
-    }
-
-    /**
-     * 杞崲涓篍num瀵硅薄<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 
-     * @param clazz Enum鐨凜lass
-     * @param value 鍊�
-     * @param defaultValue 榛樿鍊�
-     * @return Enum
-     */
-    public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value, E defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (clazz.isAssignableFrom(value.getClass()))
-        {
-            @SuppressWarnings("unchecked")
-            E myE = (E) value;
-            return myE;
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            return Enum.valueOf(clazz, valueStr);
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓篍num瀵硅薄<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 
-     * @param clazz Enum鐨凜lass
-     * @param value 鍊�
-     * @return Enum
-     */
-    public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value)
-    {
-        return toEnum(clazz, value, null);
-    }
-
-    /**
-     * 杞崲涓築igInteger<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static BigInteger toBigInteger(Object value, BigInteger defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof BigInteger)
-        {
-            return (BigInteger) value;
-        }
-        if (value instanceof Long)
-        {
-            return BigInteger.valueOf((Long) value);
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            return new BigInteger(valueStr);
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓築igInteger<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static BigInteger toBigInteger(Object value)
-    {
-        return toBigInteger(value, null);
-    }
-
-    /**
-     * 杞崲涓築igDecimal<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
-     * @return 缁撴灉
-     */
-    public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue)
-    {
-        if (value == null)
-        {
-            return defaultValue;
-        }
-        if (value instanceof BigDecimal)
-        {
-            return (BigDecimal) value;
-        }
-        if (value instanceof Long)
-        {
-            return new BigDecimal((Long) value);
-        }
-        if (value instanceof Double)
-        {
-            return new BigDecimal((Double) value);
-        }
-        if (value instanceof Integer)
-        {
-            return new BigDecimal((Integer) value);
-        }
-        final String valueStr = toStr(value, null);
-        if (StringUtils.isEmpty(valueStr))
-        {
-            return defaultValue;
-        }
-        try
-        {
-            return new BigDecimal(valueStr);
-        }
-        catch (Exception e)
-        {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * 杞崲涓築igDecimal<br>
-     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
-     * 杞崲澶辫触涓嶄細鎶ラ敊
-     * 
-     * @param value 琚浆鎹㈢殑鍊�
-     * @return 缁撴灉
-     */
-    public static BigDecimal toBigDecimal(Object value)
-    {
-        return toBigDecimal(value, null);
-    }
-
-    /**
-     * 灏嗗璞¤浆涓哄瓧绗︿覆<br>
-     * 1銆丅yte鏁扮粍鍜孊yteBuffer浼氳杞崲涓哄搴斿瓧绗︿覆鐨勬暟缁� 2銆佸璞℃暟缁勪細璋冪敤Arrays.toString鏂规硶
-     * 
-     * @param obj 瀵硅薄
-     * @return 瀛楃涓�
-     */
-    public static String utf8Str(Object obj)
-    {
-        return str(obj, CharsetKit.CHARSET_UTF_8);
-    }
-
-    /**
-     * 灏嗗璞¤浆涓哄瓧绗︿覆<br>
-     * 1銆丅yte鏁扮粍鍜孊yteBuffer浼氳杞崲涓哄搴斿瓧绗︿覆鐨勬暟缁� 2銆佸璞℃暟缁勪細璋冪敤Arrays.toString鏂规硶
-     * 
-     * @param obj 瀵硅薄
-     * @param charsetName 瀛楃闆�
-     * @return 瀛楃涓�
-     */
-    public static String str(Object obj, String charsetName)
-    {
-        return str(obj, Charset.forName(charsetName));
-    }
-
-    /**
-     * 灏嗗璞¤浆涓哄瓧绗︿覆<br>
-     * 1銆丅yte鏁扮粍鍜孊yteBuffer浼氳杞崲涓哄搴斿瓧绗︿覆鐨勬暟缁� 2銆佸璞℃暟缁勪細璋冪敤Arrays.toString鏂规硶
-     * 
-     * @param obj 瀵硅薄
-     * @param charset 瀛楃闆�
-     * @return 瀛楃涓�
-     */
-    public static String str(Object obj, Charset charset)
-    {
-        if (null == obj)
-        {
-            return null;
-        }
-
-        if (obj instanceof String)
-        {
-            return (String) obj;
-        }
-        else if (obj instanceof byte[] || obj instanceof Byte[])
-        {
-            return str(obj, charset);
-        }
-        else if (obj instanceof ByteBuffer)
-        {
-            return str((ByteBuffer) obj, charset);
-        }
-        return obj.toString();
-    }
-
-    /**
-     * 灏哹yte鏁扮粍杞负瀛楃涓�
-     * 
-     * @param bytes byte鏁扮粍
-     * @param charset 瀛楃闆�
-     * @return 瀛楃涓�
-     */
-    public static String str(byte[] bytes, String charset)
-    {
-        return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset));
-    }
-
-    /**
-     * 瑙g爜瀛楄妭鐮�
-     * 
-     * @param data 瀛楃涓�
-     * @param charset 瀛楃闆嗭紝濡傛灉姝ゅ瓧娈典负绌猴紝鍒欒В鐮佺殑缁撴灉鍙栧喅浜庡钩鍙�
-     * @return 瑙g爜鍚庣殑瀛楃涓�
-     */
-    public static String str(byte[] data, Charset charset)
-    {
-        if (data == null)
-        {
-            return null;
-        }
-
-        if (null == charset)
-        {
-            return new String(data);
-        }
-        return new String(data, charset);
-    }
-
-    /**
-     * 灏嗙紪鐮佺殑byteBuffer鏁版嵁杞崲涓哄瓧绗︿覆
-     * 
-     * @param data 鏁版嵁
-     * @param charset 瀛楃闆嗭紝濡傛灉涓虹┖浣跨敤褰撳墠绯荤粺瀛楃闆�
-     * @return 瀛楃涓�
-     */
-    public static String str(ByteBuffer data, String charset)
-    {
-        if (data == null)
-        {
-            return null;
-        }
-
-        return str(data, Charset.forName(charset));
-    }
-
-    /**
-     * 灏嗙紪鐮佺殑byteBuffer鏁版嵁杞崲涓哄瓧绗︿覆
-     * 
-     * @param data 鏁版嵁
-     * @param charset 瀛楃闆嗭紝濡傛灉涓虹┖浣跨敤褰撳墠绯荤粺瀛楃闆�
-     * @return 瀛楃涓�
-     */
-    public static String str(ByteBuffer data, Charset charset)
-    {
-        if (null == charset)
-        {
-            charset = Charset.defaultCharset();
-        }
-        return charset.decode(data).toString();
-    }
-
-    // ----------------------------------------------------------------------- 鍏ㄨ鍗婅杞崲
-    /**
-     * 鍗婅杞叏瑙�
-     * 
-     * @param input String.
-     * @return 鍏ㄨ瀛楃涓�.
-     */
-    public static String toSBC(String input)
-    {
-        return toSBC(input, null);
-    }
-
-    /**
-     * 鍗婅杞叏瑙�
-     * 
-     * @param input String
-     * @param notConvertSet 涓嶆浛鎹㈢殑瀛楃闆嗗悎
-     * @return 鍏ㄨ瀛楃涓�.
-     */
-    public static String toSBC(String input, Set<Character> notConvertSet)
-    {
-        char[] c = input.toCharArray();
-        for (int i = 0; i < c.length; i++)
-        {
-            if (null != notConvertSet && notConvertSet.contains(c[i]))
-            {
-                // 璺宠繃涓嶆浛鎹㈢殑瀛楃
-                continue;
-            }
-
-            if (c[i] == ' ')
-            {
-                c[i] = '\u3000';
-            }
-            else if (c[i] < '\177')
-            {
-                c[i] = (char) (c[i] + 65248);
-
-            }
-        }
-        return new String(c);
-    }
-
-    /**
-     * 鍏ㄨ杞崐瑙�
-     * 
-     * @param input String.
-     * @return 鍗婅瀛楃涓�
-     */
-    public static String toDBC(String input)
-    {
-        return toDBC(input, null);
-    }
-
-    /**
-     * 鏇挎崲鍏ㄨ涓哄崐瑙�
-     * 
-     * @param text 鏂囨湰
-     * @param notConvertSet 涓嶆浛鎹㈢殑瀛楃闆嗗悎
-     * @return 鏇挎崲鍚庣殑瀛楃
-     */
-    public static String toDBC(String text, Set<Character> notConvertSet)
-    {
-        char[] c = text.toCharArray();
-        for (int i = 0; i < c.length; i++)
-        {
-            if (null != notConvertSet && notConvertSet.contains(c[i]))
-            {
-                // 璺宠繃涓嶆浛鎹㈢殑瀛楃
-                continue;
-            }
-
-            if (c[i] == '\u3000')
-            {
-                c[i] = ' ';
-            }
-            else if (c[i] > '\uFF00' && c[i] < '\uFF5F')
-            {
-                c[i] = (char) (c[i] - 65248);
-            }
-        }
-        String returnString = new String(c);
-
-        return returnString;
-    }
-
-    /**
-     * 鏁板瓧閲戦澶у啓杞崲 鍏堝啓涓畬鏁寸殑鐒跺悗灏嗗闆舵嬀鏇挎崲鎴愰浂
-     * 
-     * @param n 鏁板瓧
-     * @return 涓枃澶у啓鏁板瓧
-     */
-    public static String digitUppercase(double n)
-    {
-        String[] fraction = { "瑙�", "鍒�" };
-        String[] digit = { "闆�", "澹�", "璐�", "鍙�", "鑲�", "浼�", "闄�", "鏌�", "鎹�", "鐜�" };
-        String[][] unit = { { "鍏�", "涓�", "浜�" }, { "", "鎷�", "浣�", "浠�" } };
-
-        String head = n < 0 ? "璐�" : "";
-        n = Math.abs(n);
-
-        String s = "";
-        for (int i = 0; i < fraction.length; i++)
-        {
-            s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(闆�.)+", "");
-        }
-        if (s.length() < 1)
-        {
-            s = "鏁�";
-        }
-        int integerPart = (int) Math.floor(n);
-
-        for (int i = 0; i < unit[0].length && integerPart > 0; i++)
-        {
-            String p = "";
-            for (int j = 0; j < unit[1].length && n > 0; j++)
-            {
-                p = digit[integerPart % 10] + unit[1][j] + p;
-                integerPart = integerPart / 10;
-            }
-            s = p.replaceAll("(闆�.)*闆�$", "").replaceAll("^$", "闆�") + unit[0][i] + s;
-        }
-        return head + s.replaceAll("(闆�.)*闆跺厓", "鍏�").replaceFirst("(闆�.)+", "").replaceAll("(闆�.)+", "闆�").replaceAll("^鏁�$", "闆跺厓鏁�");
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/text/StrFormatter.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/text/StrFormatter.java
deleted file mode 100644
index 5524b5b..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/text/StrFormatter.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.dingzhuo.energy.common.utils.text;
-
-import com.dingzhuo.energy.common.utils.StringUtils;
-
-/**
- * 瀛楃涓叉牸寮忓寲
- * 
- * @author ruoyi
- */
-public class StrFormatter
-{
-    public static final String EMPTY_JSON = "{}";
-    public static final char C_BACKSLASH = '\\';
-    public static final char C_DELIM_START = '{';
-    public static final char C_DELIM_END = '}';
-
-    /**
-     * 鏍煎紡鍖栧瓧绗︿覆<br>
-     * 姝ゆ柟娉曞彧鏄畝鍗曞皢鍗犱綅绗� {} 鎸夌収椤哄簭鏇挎崲涓哄弬鏁�<br>
-     * 濡傛灉鎯宠緭鍑� {} 浣跨敤 \\杞箟 { 鍗冲彲锛屽鏋滄兂杈撳嚭 {} 涔嬪墠鐨� \ 浣跨敤鍙岃浆涔夌 \\\\ 鍗冲彲<br>
-     * 渚嬶細<br>
-     * 閫氬父浣跨敤锛歠ormat("this is {} for {}", "a", "b") -> this is a for b<br>
-     * 杞箟{}锛� format("this is \\{} for {}", "a", "b") -> this is \{} for a<br>
-     * 杞箟\锛� format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br>
-     * 
-     * @param strPattern 瀛楃涓叉ā鏉�
-     * @param argArray 鍙傛暟鍒楄〃
-     * @return 缁撴灉
-     */
-    public static String format(final String strPattern, final Object... argArray)
-    {
-        if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray))
-        {
-            return strPattern;
-        }
-        final int strPatternLength = strPattern.length();
-
-        // 鍒濆鍖栧畾涔夊ソ鐨勯暱搴︿互鑾峰緱鏇村ソ鐨勬�ц兘
-        StringBuilder sbuf = new StringBuilder(strPatternLength + 50);
-
-        int handledPosition = 0;
-        int delimIndex;// 鍗犱綅绗︽墍鍦ㄤ綅缃�
-        for (int argIndex = 0; argIndex < argArray.length; argIndex++)
-        {
-            delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition);
-            if (delimIndex == -1)
-            {
-                if (handledPosition == 0)
-                {
-                    return strPattern;
-                }
-                else
-                { // 瀛楃涓叉ā鏉垮墿浣欓儴鍒嗕笉鍐嶅寘鍚崰浣嶇锛屽姞鍏ュ墿浣欓儴鍒嗗悗杩斿洖缁撴灉
-                    sbuf.append(strPattern, handledPosition, strPatternLength);
-                    return sbuf.toString();
-                }
-            }
-            else
-            {
-                if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH)
-                {
-                    if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH)
-                    {
-                        // 杞箟绗︿箣鍓嶈繕鏈変竴涓浆涔夌锛屽崰浣嶇渚濇棫鏈夋晥
-                        sbuf.append(strPattern, handledPosition, delimIndex - 1);
-                        sbuf.append(Convert.utf8Str(argArray[argIndex]));
-                        handledPosition = delimIndex + 2;
-                    }
-                    else
-                    {
-                        // 鍗犱綅绗﹁杞箟
-                        argIndex--;
-                        sbuf.append(strPattern, handledPosition, delimIndex - 1);
-                        sbuf.append(C_DELIM_START);
-                        handledPosition = delimIndex + 1;
-                    }
-                }
-                else
-                {
-                    // 姝e父鍗犱綅绗�
-                    sbuf.append(strPattern, handledPosition, delimIndex);
-                    sbuf.append(Convert.utf8Str(argArray[argIndex]));
-                    handledPosition = delimIndex + 2;
-                }
-            }
-        }
-        // append the characters following the last {} pair.
-        // 鍔犲叆鏈�鍚庝竴涓崰浣嶇鍚庢墍鏈夌殑瀛楃
-        sbuf.append(strPattern, handledPosition, strPattern.length());
-
-        return sbuf.toString();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/time/TimeManager.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/time/TimeManager.java
deleted file mode 100644
index 05d1049..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/time/TimeManager.java
+++ /dev/null
@@ -1,148 +0,0 @@
-package com.dingzhuo.energy.common.utils.time;
-
-import org.joda.time.DateTime;
-import org.joda.time.format.DateTimeFormat;
-import org.joda.time.format.DateTimeFormatter;
-
-import java.util.Date;
-
-public class TimeManager {
-
-  public static final TimeType[] typeArray = {TimeType.LIVE, TimeType.DAY, TimeType.HOUR,
-      TimeType.MONTH, TimeType.SCHEDULING, TimeType.YEAR};
-  private static final DateTimeFormatter pastDataFormat = DateTimeFormat.forPattern
-      ("yyyyMMddHHmmss");
-  private static final DateTimeFormatter hourFormat = DateTimeFormat.forPattern("yyyyMMddHH");
-  private static final DateTimeFormatter dayFormat = DateTimeFormat.forPattern("yyyyMMdd");
-  private static final DateTimeFormatter monthFormat = DateTimeFormat.forPattern("yyyyMM");
-  private static final DateTimeFormatter yearFormat = DateTimeFormat.forPattern("yyyy");
-
-  private static final String livePrefix = "L";
-  private static final String hourPrefix = "H";
-  private static final String dayPrefix = "D";
-  private static final String monthPrefix = "M";
-  private static final String yearPrefix = "Y";
-
-  public static String getExecuteTimeCode(Date time, TimeType type, int delayTime) {
-    DateTime dateTime = new DateTime(time).plusSeconds(-delayTime);
-    return getTimeCode(dateTime.toDate(), type);
-  }
-
-  public static String getTimeCode(Date time, TimeType type) {
-    switch (type) {
-      case LIVE:
-        return livePrefix;
-      case DAY:
-        return dayPrefix + dayFormat.print(new DateTime(time));
-      case HOUR:
-        return hourPrefix + hourFormat.print(new DateTime(time));
-      case MONTH:
-        return monthPrefix + monthFormat.print(new DateTime(time));
-      case YEAR:
-        return yearPrefix + yearFormat.print(new DateTime(time));
-      default:
-        return null;
-    }
-  }
-
-  public static Date getBeginTime(String timeCode) {
-    Date beginTime = getTime(timeCode, 0);
-    if (getTimeType(timeCode) == TimeType.DAY) {
-      beginTime = new DateTime(beginTime).plusHours(9).toDate();
-    }
-
-    return beginTime;
-  }
-
-  public static Date getEndTime(String timeCode) {
-    Date endTime = getTime(timeCode, 1);
-    if (getTimeType(timeCode) == TimeType.DAY) {
-      endTime = new DateTime(endTime).plusHours(9).toDate();
-    }
-
-    return endTime;
-  }
-
-  public static Date getTime(String timeCode) {
-    return getTime(timeCode, 0);
-  }
-
-  public static Date getTime(String timeCode, int offset) {
-    TimeType type = getTimeType(timeCode);
-    String timeStr = timeCode.substring(1);
-    Date result = null;
-    DateTime dateTime;
-
-    try {
-      if (type == null) {
-        result = pastDataFormat.parseDateTime(timeStr).toDate();
-        if (offset != 0) {
-          dateTime = new DateTime(result);
-          dateTime = dateTime.plusSeconds(offset);
-          result = dateTime.toDate();
-        }
-      } else {
-        switch (type) {
-          case LIVE:
-            result = new Date();
-            break;
-          case DAY:
-            result = dayFormat.parseDateTime(timeStr).toDate();
-            if (offset != 0) {
-              dateTime = new DateTime(result);
-              dateTime = dateTime.plusDays(offset);
-              result = dateTime.toDate();
-            }
-            break;
-          case HOUR:
-            result = hourFormat.parseDateTime(timeStr).toDate();
-            if (offset != 0) {
-              dateTime = new DateTime(result);
-              dateTime = dateTime.plusHours(offset);
-              result = dateTime.toDate();
-            }
-            break;
-          case MONTH:
-            result = monthFormat.parseDateTime(timeStr).toDate();
-            if (offset != 0) {
-              dateTime = new DateTime(result);
-              dateTime = dateTime.plusMonths(offset);
-              result = dateTime.toDate();
-            }
-            break;
-          case YEAR:
-            result = yearFormat.parseDateTime(timeStr).toDate();
-            if (offset != 0) {
-              dateTime = new DateTime(result);
-              dateTime = dateTime.plusYears(offset);
-              result = dateTime.toDate();
-            }
-            break;
-          default:
-            break;
-        }
-      }
-    } catch (IllegalArgumentException e) {
-      e.printStackTrace();
-    }
-
-    return result;
-  }
-
-  public static TimeType getTimeType(String timeCode) {
-    switch (timeCode.substring(0, 1).toUpperCase()) {
-      case livePrefix:
-        return TimeType.LIVE;
-      case hourPrefix:
-        return TimeType.HOUR;
-      case dayPrefix:
-        return TimeType.DAY;
-      case monthPrefix:
-        return TimeType.MONTH;
-      case yearPrefix:
-        return TimeType.YEAR;
-      default:
-        return null;
-    }
-  }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/utils/time/TimeType.java b/basic/src/main/java/com/dingzhuo/energy/common/utils/time/TimeType.java
deleted file mode 100644
index 05b443e..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/utils/time/TimeType.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.dingzhuo.energy.common.utils.time;
-
-public enum TimeType {
-
-  /**
-   * 瀹炴椂
-   */
-  LIVE,
-  /**
-   * 灏忔椂
-   */
-  HOUR,
-  /**
-   * 澶�
-   */
-  DAY,
-  /**
-   * 鏈�
-   */
-  MONTH,
-  /**
-   * 骞�
-   */
-  YEAR,
-  /**
-   * 瀛e害
-   */
-  QUARTER,
-  /**
-   * 鎺掔彮
-   */
-  SCHEDULING
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/xss/XssFilter.java b/basic/src/main/java/com/dingzhuo/energy/common/xss/XssFilter.java
deleted file mode 100644
index fad3a68..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/xss/XssFilter.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.dingzhuo.energy.common.xss;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-
-/**
- * 闃叉XSS鏀诲嚮鐨勮繃婊ゅ櫒
- * 
- * @author ruoyi
- */
-public class XssFilter implements Filter
-{
-    /**
-     * 鎺掗櫎閾炬帴
-     */
-    public List<String> excludes = new ArrayList<>();
-
-    /**
-     * xss杩囨护寮�鍏�
-     */
-    public boolean enabled = false;
-
-    @Override
-    public void init(FilterConfig filterConfig) throws ServletException
-    {
-        String tempExcludes = filterConfig.getInitParameter("excludes");
-        String tempEnabled = filterConfig.getInitParameter("enabled");
-        if (StringUtils.isNotEmpty(tempExcludes))
-        {
-            String[] url = tempExcludes.split(",");
-            for (int i = 0; url != null && i < url.length; i++)
-            {
-                excludes.add(url[i]);
-            }
-        }
-        if (StringUtils.isNotEmpty(tempEnabled))
-        {
-            enabled = Boolean.valueOf(tempEnabled);
-        }
-    }
-
-    @Override
-    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
-            throws IOException, ServletException
-    {
-        HttpServletRequest req = (HttpServletRequest) request;
-        HttpServletResponse resp = (HttpServletResponse) response;
-        if (handleExcludeURL(req, resp))
-        {
-            chain.doFilter(request, response);
-            return;
-        }
-        XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest) request);
-        chain.doFilter(xssRequest, response);
-    }
-
-    private boolean handleExcludeURL(HttpServletRequest request, HttpServletResponse response)
-    {
-        if (!enabled)
-        {
-            return true;
-        }
-        if (excludes == null || excludes.isEmpty())
-        {
-            return false;
-        }
-        String url = request.getServletPath();
-        for (String pattern : excludes)
-        {
-            Pattern p = Pattern.compile("^" + pattern);
-            Matcher m = p.matcher(url);
-            if (m.find())
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public void destroy()
-    {
-
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/common/xss/XssHttpServletRequestWrapper.java b/basic/src/main/java/com/dingzhuo/energy/common/xss/XssHttpServletRequestWrapper.java
deleted file mode 100644
index a0a5624..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/common/xss/XssHttpServletRequestWrapper.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package com.dingzhuo.energy.common.xss;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import javax.servlet.ReadListener;
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.html.EscapeUtil;
-import org.apache.commons.io.IOUtils;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.html.EscapeUtil;
-
-/**
- * XSS杩囨护澶勭悊
- * 
- * @author ruoyi
- */
-public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper
-{
-    /**
-     * @param request
-     */
-    public XssHttpServletRequestWrapper(HttpServletRequest request)
-    {
-        super(request);
-    }
-
-    @Override
-    public String[] getParameterValues(String name)
-    {
-        String[] values = super.getParameterValues(name);
-        if (values != null)
-        {
-            int length = values.length;
-            String[] escapseValues = new String[length];
-            for (int i = 0; i < length; i++)
-            {
-                // 闃瞲ss鏀诲嚮鍜岃繃婊ゅ墠鍚庣┖鏍�
-                escapseValues[i] = EscapeUtil.clean(values[i]).trim();
-            }
-            return escapseValues;
-        }
-        return super.getParameterValues(name);
-    }
-
-    @Override
-    public ServletInputStream getInputStream() throws IOException
-    {
-        // 闈瀓son绫诲瀷锛岀洿鎺ヨ繑鍥�
-        if (!isJsonRequest())
-        {
-            return super.getInputStream();
-        }
-
-        // 涓虹┖锛岀洿鎺ヨ繑鍥�
-        String json = IOUtils.toString(super.getInputStream(), StandardCharsets.UTF_8);
-        if (StringUtils.isEmpty(json))
-        {
-            return super.getInputStream();
-        }
-
-        // xss杩囨护
-        json = EscapeUtil.clean(json).trim();
-        final ByteArrayInputStream bis = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8));
-        return new ServletInputStream()
-        {
-            @Override
-            public boolean isFinished()
-            {
-                return true;
-            }
-
-            @Override
-            public boolean isReady()
-            {
-                return true;
-            }
-
-            @Override
-            public void setReadListener(ReadListener readListener)
-            {
-            }
-
-            @Override
-            public int read() throws IOException
-            {
-                return bis.read();
-            }
-        };
-    }
-
-    /**
-     * 鏄惁鏄疛son璇锋眰
-     * 
-     * @param request
-     */
-    public boolean isJsonRequest()
-    {
-        String header = super.getHeader(HttpHeaders.CONTENT_TYPE);
-        return MediaType.APPLICATION_JSON_VALUE.equalsIgnoreCase(header)
-                || MediaType.APPLICATION_JSON_UTF8_VALUE.equalsIgnoreCase(header);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/DataScopeAspect.java b/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/DataScopeAspect.java
deleted file mode 100644
index d245975..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/DataScopeAspect.java
+++ /dev/null
@@ -1,164 +0,0 @@
-package com.dingzhuo.energy.framework.aspectj;
-
-import java.lang.reflect.Method;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.DataScope;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import org.aspectj.lang.JoinPoint;
-import org.aspectj.lang.Signature;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Before;
-import org.aspectj.lang.annotation.Pointcut;
-import org.aspectj.lang.reflect.MethodSignature;
-import org.springframework.stereotype.Component;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.spring.SpringUtils;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.DataScope;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import com.dingzhuo.energy.project.system.domain.SysRole;
-import com.dingzhuo.energy.project.system.domain.SysUser;
-
-/**
- * 鏁版嵁杩囨护澶勭悊
- * 
- * @author ruoyi
- */
-@Aspect
-@Component
-public class DataScopeAspect
-{
-    /**
-     * 鍏ㄩ儴鏁版嵁鏉冮檺
-     */
-    public static final String DATA_SCOPE_ALL = "1";
-
-    /**
-     * 鑷畾鏁版嵁鏉冮檺
-     */
-    public static final String DATA_SCOPE_CUSTOM = "2";
-
-    /**
-     * 閮ㄩ棬鏁版嵁鏉冮檺
-     */
-    public static final String DATA_SCOPE_DEPT = "3";
-
-    /**
-     * 閮ㄩ棬鍙婁互涓嬫暟鎹潈闄�
-     */
-    public static final String DATA_SCOPE_DEPT_AND_CHILD = "4";
-
-    /**
-     * 浠呮湰浜烘暟鎹潈闄�
-     */
-    public static final String DATA_SCOPE_SELF = "5";
-
-    // 閰嶇疆缁囧叆鐐�
-    @Pointcut("@annotation(com.dingzhuo.energy.framework.aspectj.lang.annotation.DataScope)")
-    public void dataScopePointCut()
-    {
-    }
-
-    @Before("dataScopePointCut()")
-    public void doBefore(JoinPoint point) throws Throwable
-    {
-        handleDataScope(point);
-    }
-
-    protected void handleDataScope(final JoinPoint joinPoint)
-    {
-        // 鑾峰緱娉ㄨВ
-        DataScope controllerDataScope = getAnnotationLog(joinPoint);
-        if (controllerDataScope == null)
-        {
-            return;
-        }
-        // 鑾峰彇褰撳墠鐨勭敤鎴�
-        LoginUser loginUser = SpringUtils.getBean(TokenService.class).getLoginUser(ServletUtils.getRequest());
-        SysUser currentUser = loginUser.getUser();
-        if (currentUser != null)
-        {
-            // 濡傛灉鏄秴绾х鐞嗗憳锛屽垯涓嶈繃婊ゆ暟鎹�
-            if (!currentUser.isAdmin())
-            {
-                dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(),
-                        controllerDataScope.userAlias());
-            }
-        }
-    }
-
-    /**
-     * 鏁版嵁鑼冨洿杩囨护
-     * 
-     * @param joinPoint 鍒囩偣
-     * @param user 鐢ㄦ埛
-     * @param alias 鍒悕
-     */
-    public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias)
-    {
-        StringBuilder sqlString = new StringBuilder();
-
-        for (SysRole role : user.getRoles())
-        {
-            String dataScope = role.getDataScope();
-            if (DATA_SCOPE_ALL.equals(dataScope))
-            {
-                sqlString = new StringBuilder();
-                break;
-            }
-            else if (DATA_SCOPE_CUSTOM.equals(dataScope))
-            {
-                sqlString.append(StringUtils.format(
-                        " OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias,
-                        role.getRoleId()));
-            }
-            else if (DATA_SCOPE_DEPT.equals(dataScope))
-            {
-                sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId()));
-            }
-            else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope))
-            {
-                sqlString.append(StringUtils.format(
-                        " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )",
-                        deptAlias, user.getDeptId(), user.getDeptId()));
-            }
-            else if (DATA_SCOPE_SELF.equals(dataScope))
-            {
-                if (StringUtils.isNotBlank(userAlias))
-                {
-                    sqlString.append(StringUtils.format(" OR {}.user_id = {} ", userAlias, user.getUserId()));
-                }
-                else
-                {
-                    // 鏁版嵁鏉冮檺涓轰粎鏈汉涓旀病鏈塽serAlias鍒悕涓嶆煡璇换浣曟暟鎹�
-                    sqlString.append(" OR 1=0 ");
-                }
-            }
-        }
-
-        if (StringUtils.isNotBlank(sqlString.toString()))
-        {
-            BaseEntity baseEntity = (BaseEntity) joinPoint.getArgs()[0];
-            baseEntity.setDataScope(" AND (" + sqlString.substring(4) + ")");
-        }
-    }
-
-    /**
-     * 鏄惁瀛樺湪娉ㄨВ锛屽鏋滃瓨鍦ㄥ氨鑾峰彇
-     */
-    private DataScope getAnnotationLog(JoinPoint joinPoint)
-    {
-        Signature signature = joinPoint.getSignature();
-        MethodSignature methodSignature = (MethodSignature) signature;
-        Method method = methodSignature.getMethod();
-
-        if (method != null)
-        {
-            return method.getAnnotation(DataScope.class);
-        }
-        return null;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/DataSourceAspect.java b/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/DataSourceAspect.java
deleted file mode 100644
index 0a2cedd..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/DataSourceAspect.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.dingzhuo.energy.framework.aspectj;
-
-import java.lang.reflect.Method;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.DataSource;
-import com.dingzhuo.energy.framework.datasource.DynamicDataSourceContextHolder;
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Pointcut;
-import org.aspectj.lang.reflect.MethodSignature;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.DataSource;
-import com.dingzhuo.energy.framework.datasource.DynamicDataSourceContextHolder;
-
-/**
- * 澶氭暟鎹簮澶勭悊
- * 
- * @author ruoyi
- */
-@Aspect
-@Order(1)
-@Component
-public class DataSourceAspect
-{
-    protected Logger logger = LoggerFactory.getLogger(getClass());
-
-    @Pointcut("@annotation(com.dingzhuo.energy.framework.aspectj.lang.annotation.DataSource)"
-            + "|| @within(com.dingzhuo.energy.framework.aspectj.lang.annotation.DataSource)")
-    public void dsPointCut()
-    {
-
-    }
-
-    @Around("dsPointCut()")
-    public Object around(ProceedingJoinPoint point) throws Throwable
-    {
-        DataSource dataSource = getDataSource(point);
-
-        if (StringUtils.isNotNull(dataSource))
-        {
-            DynamicDataSourceContextHolder.setDataSourceType(dataSource.value().name());
-        }
-
-        try
-        {
-            return point.proceed();
-        }
-        finally
-        {
-            // 閿�姣佹暟鎹簮 鍦ㄦ墽琛屾柟娉曚箣鍚�
-            DynamicDataSourceContextHolder.clearDataSourceType();
-        }
-    }
-
-    /**
-     * 鑾峰彇闇�瑕佸垏鎹㈢殑鏁版嵁婧�
-     */
-    public DataSource getDataSource(ProceedingJoinPoint point)
-    {
-        MethodSignature signature = (MethodSignature) point.getSignature();
-        Class<? extends Object> targetClass = point.getTarget().getClass();
-        DataSource targetDataSource = targetClass.getAnnotation(DataSource.class);
-        if (StringUtils.isNotNull(targetDataSource))
-        {
-            return targetDataSource;
-        }
-        else
-        {
-            Method method = signature.getMethod();
-            DataSource dataSource = method.getAnnotation(DataSource.class);
-            return dataSource;
-        }
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/LogAspect.java b/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/LogAspect.java
deleted file mode 100644
index 6bdcae9..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/LogAspect.java
+++ /dev/null
@@ -1,224 +0,0 @@
-package com.dingzhuo.energy.framework.aspectj;
-
-import java.lang.reflect.Method;
-import java.util.Map;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessStatus;
-import com.dingzhuo.energy.framework.manager.AsyncManager;
-import com.dingzhuo.energy.framework.manager.factory.AsyncFactory;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import org.aspectj.lang.JoinPoint;
-import org.aspectj.lang.Signature;
-import org.aspectj.lang.annotation.AfterReturning;
-import org.aspectj.lang.annotation.AfterThrowing;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Pointcut;
-import org.aspectj.lang.reflect.MethodSignature;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.servlet.HandlerMapping;
-import com.alibaba.fastjson.JSON;
-import com.dingzhuo.energy.common.enums.HttpMethod;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.ip.IpUtils;
-import com.dingzhuo.energy.common.utils.spring.SpringUtils;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessStatus;
-import com.dingzhuo.energy.framework.manager.AsyncManager;
-import com.dingzhuo.energy.framework.manager.factory.AsyncFactory;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.project.monitor.domain.SysOperLog;
-
-/**
- * 鎿嶄綔鏃ュ織璁板綍澶勭悊
- * 
- * @author ruoyi
- */
-@Aspect
-@Component
-public class LogAspect
-{
-    private static final Logger log = LoggerFactory.getLogger(LogAspect.class);
-
-    // 閰嶇疆缁囧叆鐐�
-    @Pointcut("@annotation(com.dingzhuo.energy.framework.aspectj.lang.annotation.Log)")
-    public void logPointCut()
-    {
-    }
-
-    /**
-     * 澶勭悊瀹岃姹傚悗鎵ц
-     *
-     * @param joinPoint 鍒囩偣
-     */
-    @AfterReturning(pointcut = "logPointCut()", returning = "jsonResult")
-    public void doAfterReturning(JoinPoint joinPoint, Object jsonResult)
-    {
-        handleLog(joinPoint, null, jsonResult);
-    }
-
-    /**
-     * 鎷︽埅寮傚父鎿嶄綔
-     * 
-     * @param joinPoint 鍒囩偣
-     * @param e 寮傚父
-     */
-    @AfterThrowing(value = "logPointCut()", throwing = "e")
-    public void doAfterThrowing(JoinPoint joinPoint, Exception e)
-    {
-        handleLog(joinPoint, e, null);
-    }
-
-    protected void handleLog(final JoinPoint joinPoint, final Exception e, Object jsonResult)
-    {
-        try
-        {
-            // 鑾峰緱娉ㄨВ
-            Log controllerLog = getAnnotationLog(joinPoint);
-            if (controllerLog == null)
-            {
-                return;
-            }
-
-            // 鑾峰彇褰撳墠鐨勭敤鎴�
-            LoginUser loginUser = SpringUtils.getBean(TokenService.class).getLoginUser(ServletUtils.getRequest());
-
-            // *========鏁版嵁搴撴棩蹇�=========*//
-            SysOperLog operLog = new SysOperLog();
-            operLog.setStatus(BusinessStatus.SUCCESS.ordinal());
-            // 璇锋眰鐨勫湴鍧�
-            String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
-            operLog.setOperIp(ip);
-            // 杩斿洖鍙傛暟
-            operLog.setJsonResult(JSON.toJSONString(jsonResult));
-
-            operLog.setOperUrl(ServletUtils.getRequest().getRequestURI());
-            if (loginUser != null)
-            {
-                operLog.setOperName(loginUser.getUsername());
-            }
-
-            if (e != null)
-            {
-                operLog.setStatus(BusinessStatus.FAIL.ordinal());
-                operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000));
-            }
-            // 璁剧疆鏂规硶鍚嶇О
-            String className = joinPoint.getTarget().getClass().getName();
-            String methodName = joinPoint.getSignature().getName();
-            operLog.setMethod(className + "." + methodName + "()");
-            // 璁剧疆璇锋眰鏂瑰紡
-            operLog.setRequestMethod(ServletUtils.getRequest().getMethod());
-            // 澶勭悊璁剧疆娉ㄨВ涓婄殑鍙傛暟
-            getControllerMethodDescription(joinPoint, controllerLog, operLog);
-            // 淇濆瓨鏁版嵁搴�
-            AsyncManager.me().execute(AsyncFactory.recordOper(operLog));
-        }
-        catch (Exception exp)
-        {
-            // 璁板綍鏈湴寮傚父鏃ュ織
-            log.error("==鍓嶇疆閫氱煡寮傚父==");
-            log.error("寮傚父淇℃伅:{}", exp.getMessage());
-            exp.printStackTrace();
-        }
-    }
-
-    /**
-     * 鑾峰彇娉ㄨВ涓鏂规硶鐨勬弿杩颁俊鎭� 鐢ㄤ簬Controller灞傛敞瑙�
-     * 
-     * @param log 鏃ュ織
-     * @param operLog 鎿嶄綔鏃ュ織
-     * @throws Exception
-     */
-    public void getControllerMethodDescription(JoinPoint joinPoint, Log log, SysOperLog operLog) throws Exception
-    {
-        // 璁剧疆action鍔ㄤ綔
-        operLog.setBusinessType(log.businessType().ordinal());
-        // 璁剧疆鏍囬
-        operLog.setTitle(log.title());
-        // 璁剧疆鎿嶄綔浜虹被鍒�
-        operLog.setOperatorType(log.operatorType().ordinal());
-        // 鏄惁闇�瑕佷繚瀛榬equest锛屽弬鏁板拰鍊�
-        if (log.isSaveRequestData())
-        {
-            // 鑾峰彇鍙傛暟鐨勪俊鎭紝浼犲叆鍒版暟鎹簱涓��
-            setRequestValue(joinPoint, operLog);
-        }
-    }
-
-    /**
-     * 鑾峰彇璇锋眰鐨勫弬鏁帮紝鏀惧埌log涓�
-     * 
-     * @param operLog 鎿嶄綔鏃ュ織
-     * @throws Exception 寮傚父
-     */
-    private void setRequestValue(JoinPoint joinPoint, SysOperLog operLog) throws Exception
-    {
-        String requestMethod = operLog.getRequestMethod();
-        if (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod))
-        {
-            String params = argsArrayToString(joinPoint.getArgs());
-            operLog.setOperParam(StringUtils.substring(params, 0, 2000));
-        }
-        else
-        {
-            Map<?, ?> paramsMap = (Map<?, ?>) ServletUtils.getRequest().getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
-            operLog.setOperParam(StringUtils.substring(paramsMap.toString(), 0, 2000));
-        }
-    }
-
-    /**
-     * 鏄惁瀛樺湪娉ㄨВ锛屽鏋滃瓨鍦ㄥ氨鑾峰彇
-     */
-    private Log getAnnotationLog(JoinPoint joinPoint) throws Exception
-    {
-        Signature signature = joinPoint.getSignature();
-        MethodSignature methodSignature = (MethodSignature) signature;
-        Method method = methodSignature.getMethod();
-
-        if (method != null)
-        {
-            return method.getAnnotation(Log.class);
-        }
-        return null;
-    }
-
-    /**
-     * 鍙傛暟鎷艰
-     */
-    private String argsArrayToString(Object[] paramsArray)
-    {
-        String params = "";
-        if (paramsArray != null && paramsArray.length > 0)
-        {
-            for (int i = 0; i < paramsArray.length; i++)
-            {
-                if (!isFilterObject(paramsArray[i]))
-                {
-                    Object jsonObj = JSON.toJSON(paramsArray[i]);
-                    params += jsonObj.toString() + " ";
-                }
-            }
-        }
-        return params.trim();
-    }
-
-    /**
-     * 鍒ゆ柇鏄惁闇�瑕佽繃婊ょ殑瀵硅薄銆�
-     * 
-     * @param o 瀵硅薄淇℃伅銆�
-     * @return 濡傛灉鏄渶瑕佽繃婊ょ殑瀵硅薄锛屽垯杩斿洖true锛涘惁鍒欒繑鍥瀎alse銆�
-     */
-    public boolean isFilterObject(final Object o)
-    {
-        return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/annotation/DataScope.java b/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/annotation/DataScope.java
deleted file mode 100644
index 95b2a09..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/annotation/DataScope.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.dingzhuo.energy.framework.aspectj.lang.annotation;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 鏁版嵁鏉冮檺杩囨护娉ㄨВ
- * 
- * @author ruoyi
- */
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface DataScope
-{
-    /**
-     * 閮ㄩ棬琛ㄧ殑鍒悕
-     */
-    String deptAlias() default "";
-
-    /**
-     * 鐢ㄦ埛琛ㄧ殑鍒悕
-     */
-    String userAlias() default "";
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/annotation/DataSource.java b/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/annotation/DataSource.java
deleted file mode 100644
index f74bdd2..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/annotation/DataSource.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.dingzhuo.energy.framework.aspectj.lang.annotation;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.DataSourceType;
-
-/**
- * 鑷畾涔夊鏁版嵁婧愬垏鎹㈡敞瑙�
- * 
- * @author ruoyi
- */
-@Target({ ElementType.METHOD, ElementType.TYPE })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-@Inherited
-public @interface DataSource
-{
-    /**
-     * 鍒囨崲鏁版嵁婧愬悕绉�
-     */
-    DataSourceType value() default DataSourceType.MASTER;
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/annotation/Excel.java b/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/annotation/Excel.java
deleted file mode 100644
index 01d3e45..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/annotation/Excel.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package com.dingzhuo.energy.framework.aspectj.lang.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 鑷畾涔夊鍑篍xcel鏁版嵁娉ㄨВ
- * 
- * @author ruoyi
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.FIELD)
-public @interface Excel
-{
-    /**
-     * 瀵煎嚭鍒癊xcel涓殑鍚嶅瓧.
-     */
-    String name() default "";
-
-    /**
-     * 鏃ユ湡鏍煎紡, 濡�: yyyy-MM-dd
-     */
-    String dateFormat() default "";
-
-    /**
-     * 璇诲彇鍐呭杞〃杈惧紡 (濡�: 0=鐢�,1=濂�,2=鏈煡)
-     */
-    String readConverterExp() default "";
-
-    /**
-     * 瀵煎嚭绫诲瀷锛�0鏁板瓧 1瀛楃涓诧級
-     */
-    ColumnType cellType() default ColumnType.STRING;
-
-    /**
-     * 瀵煎嚭鏃跺湪excel涓瘡涓垪鐨勯珮搴� 鍗曚綅涓哄瓧绗�
-     */
-    double height() default 14;
-
-    /**
-     * 瀵煎嚭鏃跺湪excel涓瘡涓垪鐨勫 鍗曚綅涓哄瓧绗�
-     */
-    double width() default 16;
-
-    /**
-     * 鏂囧瓧鍚庣紑,濡�% 90 鍙樻垚90%
-     */
-    String suffix() default "";
-
-    /**
-     * 褰撳�间负绌烘椂,瀛楁鐨勯粯璁ゅ��
-     */
-    String defaultValue() default "";
-
-    /**
-     * 鎻愮ず淇℃伅
-     */
-    String prompt() default "";
-
-    /**
-     * 璁剧疆鍙兘閫夋嫨涓嶈兘杈撳叆鐨勫垪鍐呭.
-     */
-    String[] combo() default {};
-
-    /**
-     * 鏄惁瀵煎嚭鏁版嵁,搴斿闇�姹�:鏈夋椂鎴戜滑闇�瑕佸鍑轰竴浠芥ā鏉�,杩欐槸鏍囬闇�瑕佷絾鍐呭闇�瑕佺敤鎴锋墜宸ュ~鍐�.
-     */
-    boolean isExport() default true;
-
-    /**
-     * 鍙︿竴涓被涓殑灞炴�у悕绉�,鏀寔澶氱骇鑾峰彇,浠ュ皬鏁扮偣闅斿紑
-     */
-    String targetAttr() default "";
-
-    /**
-     * 瀛楁绫诲瀷锛�0锛氬鍑哄鍏ワ紱1锛氫粎瀵煎嚭锛�2锛氫粎瀵煎叆锛�
-     */
-    Type type() default Type.ALL;
-
-    enum Type
-    {
-        ALL(0), EXPORT(1), IMPORT(2);
-        private final int value;
-
-        Type(int value)
-        {
-            this.value = value;
-        }
-
-        public int value()
-        {
-            return this.value;
-        }
-    }
-
-    enum ColumnType
-    {
-        NUMERIC(0), STRING(1);
-        private final int value;
-
-        ColumnType(int value)
-        {
-            this.value = value;
-        }
-
-        public int value()
-        {
-            return this.value;
-        }
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/annotation/Excels.java b/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/annotation/Excels.java
deleted file mode 100644
index b72b952..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/annotation/Excels.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.dingzhuo.energy.framework.aspectj.lang.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Excel娉ㄨВ闆�
- * 
- * @author ruoyi
- */
-@Target(ElementType.FIELD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Excels
-{
-    Excel[] value();
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/annotation/Log.java b/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/annotation/Log.java
deleted file mode 100644
index a71668e..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/annotation/Log.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.dingzhuo.energy.framework.aspectj.lang.annotation;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.OperatorType;
-
-/**
- * 鑷畾涔夋搷浣滄棩蹇楄褰曟敞瑙�
- * 
- * @author ruoyi
- *
- */
-@Target({ ElementType.PARAMETER, ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface Log
-{
-    /**
-     * 妯″潡 
-     */
-    String title() default "";
-
-    /**
-     * 鍔熻兘
-     */
-    BusinessType businessType() default BusinessType.OTHER;
-
-    /**
-     * 鎿嶄綔浜虹被鍒�
-     */
-    OperatorType operatorType() default OperatorType.MANAGE;
-
-    /**
-     * 鏄惁淇濆瓨璇锋眰鐨勫弬鏁�
-     */
-    boolean isSaveRequestData() default true;
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/enums/BusinessStatus.java b/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/enums/BusinessStatus.java
deleted file mode 100644
index 928d2b1..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/enums/BusinessStatus.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.dingzhuo.energy.framework.aspectj.lang.enums;
-
-/**
- * 鎿嶄綔鐘舵��
- * 
- * @author ruoyi
- *
- */
-public enum BusinessStatus
-{
-    /**
-     * 鎴愬姛
-     */
-    SUCCESS,
-
-    /**
-     * 澶辫触
-     */
-    FAIL,
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/enums/BusinessType.java b/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/enums/BusinessType.java
deleted file mode 100644
index 587914e..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/enums/BusinessType.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.dingzhuo.energy.framework.aspectj.lang.enums;
-
-/**
- * 涓氬姟鎿嶄綔绫诲瀷
- * 
- * @author ruoyi
- */
-public enum BusinessType
-{
-    /**
-     * 鍏跺畠
-     */
-    OTHER,
-
-    /**
-     * 鏂板
-     */
-    INSERT,
-
-    /**
-     * 淇敼
-     */
-    UPDATE,
-
-    /**
-     * 鍒犻櫎
-     */
-    DELETE,
-
-    /**
-     * 鎺堟潈
-     */
-    GRANT,
-
-    /**
-     * 瀵煎嚭
-     */
-    EXPORT,
-
-    /**
-     * 瀵煎叆
-     */
-    IMPORT,
-
-    /**
-     * 寮洪��
-     */
-    FORCE,
-
-    /**
-     * 鐢熸垚浠g爜
-     */
-    GENCODE,
-    
-    /**
-     * 娓呯┖鏁版嵁
-     */
-    CLEAN,
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/enums/DataSourceType.java b/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/enums/DataSourceType.java
deleted file mode 100644
index 81ed83e..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/enums/DataSourceType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.dingzhuo.energy.framework.aspectj.lang.enums;
-
-/**
- * 鏁版嵁婧�
- * 
- * @author ruoyi
- */
-public enum DataSourceType
-{
-    /**
-     * 涓诲簱
-     */
-    MASTER,
-
-    /**
-     * 浠庡簱
-     */
-    SLAVE
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/enums/OperatorType.java b/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/enums/OperatorType.java
deleted file mode 100644
index 9241ec0..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/aspectj/lang/enums/OperatorType.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.dingzhuo.energy.framework.aspectj.lang.enums;
-
-/**
- * 鎿嶄綔浜虹被鍒�
- * 
- * @author ruoyi
- */
-public enum OperatorType
-{
-    /**
-     * 鍏跺畠
-     */
-    OTHER,
-
-    /**
-     * 鍚庡彴鐢ㄦ埛
-     */
-    MANAGE,
-
-    /**
-     * 鎵嬫満绔敤鎴�
-     */
-    MOBILE
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/config/ApplicationConfig.java b/basic/src/main/java/com/dingzhuo/energy/framework/config/ApplicationConfig.java
deleted file mode 100644
index 555f6e9..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/config/ApplicationConfig.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.dingzhuo.energy.framework.config;
-
-import java.util.TimeZone;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.EnableAspectJAutoProxy;
-
-/**
- * 绋嬪簭娉ㄨВ閰嶇疆
- *
- * @author ruoyi
- */
-@Configuration
-// 琛ㄧず閫氳繃aop妗嗘灦鏆撮湶璇ヤ唬鐞嗗璞�,AopContext鑳藉璁块棶
-@EnableAspectJAutoProxy(exposeProxy = true)
-// 鎸囧畾瑕佹壂鎻忕殑Mapper绫荤殑鍖呯殑璺緞
-@MapperScan("com.dingzhuo.energy.**.mapper")
-public class ApplicationConfig
-{
-    /**
-     * 鏃跺尯閰嶇疆
-     */
-    @Bean
-    public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization()
-    {
-        return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault());
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/config/DruidConfig.java b/basic/src/main/java/com/dingzhuo/energy/framework/config/DruidConfig.java
deleted file mode 100644
index cdd0709..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/config/DruidConfig.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package com.dingzhuo.energy.framework.config;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.sql.DataSource;
-
-import com.dingzhuo.energy.framework.aspectj.lang.enums.DataSourceType;
-import com.dingzhuo.energy.framework.config.properties.DruidProperties;
-import com.dingzhuo.energy.framework.datasource.DynamicDataSource;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.boot.web.servlet.FilterRegistrationBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Primary;
-import com.alibaba.druid.pool.DruidDataSource;
-import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
-import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
-import com.alibaba.druid.util.Utils;
-import com.dingzhuo.energy.common.utils.spring.SpringUtils;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.DataSourceType;
-import com.dingzhuo.energy.framework.config.properties.DruidProperties;
-import com.dingzhuo.energy.framework.datasource.DynamicDataSource;
-
-/**
- * druid 閰嶇疆澶氭暟鎹簮
- * 
- * @author ruoyi
- */
-@Configuration
-public class DruidConfig
-{
-    @Bean
-    @ConfigurationProperties("spring.datasource.druid.master")
-    public DataSource masterDataSource(DruidProperties druidProperties)
-    {
-        DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
-        return druidProperties.dataSource(dataSource);
-    }
-
-    @Bean
-    @ConfigurationProperties("spring.datasource.druid.slave")
-    @ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true")
-    public DataSource slaveDataSource(DruidProperties druidProperties)
-    {
-        DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
-        return druidProperties.dataSource(dataSource);
-    }
-
-    @Bean(name = "dynamicDataSource")
-    @Primary
-    public DynamicDataSource dataSource(DataSource masterDataSource)
-    {
-        Map<Object, Object> targetDataSources = new HashMap<>();
-        targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource);
-        setDataSource(targetDataSources, DataSourceType.SLAVE.name(), "slaveDataSource");
-        return new DynamicDataSource(masterDataSource, targetDataSources);
-    }
-    
-    /**
-     * 璁剧疆鏁版嵁婧�
-     * 
-     * @param targetDataSources 澶囬�夋暟鎹簮闆嗗悎
-     * @param sourceName 鏁版嵁婧愬悕绉�
-     * @param beanName bean鍚嶇О
-     */
-    public void setDataSource(Map<Object, Object> targetDataSources, String sourceName, String beanName)
-    {
-        try
-        {
-            DataSource dataSource = SpringUtils.getBean(beanName);
-            targetDataSources.put(sourceName, dataSource);
-        }
-        catch (Exception e)
-        {
-        }
-    }
-
-    /**
-     * 鍘婚櫎鐩戞帶椤甸潰搴曢儴鐨勫箍鍛�
-     */
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    @Bean
-    @ConditionalOnProperty(name = "spring.datasource.druid.statViewServlet.enabled", havingValue = "true")
-    public FilterRegistrationBean removeDruidFilterRegistrationBean(DruidStatProperties properties)
-    {
-        // 鑾峰彇web鐩戞帶椤甸潰鐨勫弬鏁�
-        DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
-        // 鎻愬彇common.js鐨勯厤缃矾寰�
-        String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*";
-        String commonJsPattern = pattern.replaceAll("\\*", "js/common.js");
-        final String filePath = "support/http/resources/js/common.js";
-        // 鍒涘缓filter杩涜杩囨护
-        Filter filter = new Filter()
-        {
-            @Override
-            public void init(javax.servlet.FilterConfig filterConfig) throws ServletException
-            {
-            }
-            @Override
-            public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
-                    throws IOException, ServletException
-            {
-                chain.doFilter(request, response);
-                // 閲嶇疆缂撳啿鍖猴紝鍝嶅簲澶翠笉浼氳閲嶇疆
-                response.resetBuffer();
-                // 鑾峰彇common.js
-                String text = Utils.readFromResource(filePath);
-                // 姝e垯鏇挎崲banner, 闄ゅ幓搴曢儴鐨勫箍鍛婁俊鎭�
-                text = text.replaceAll("<a.*?banner\"></a><br/>", "");
-                text = text.replaceAll("powered.*?shrek.wang</a>", "");
-                response.getWriter().write(text);
-            }
-            @Override
-            public void destroy()
-            {
-            }
-        };
-        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
-        registrationBean.setFilter(filter);
-        registrationBean.addUrlPatterns(commonJsPattern);
-        return registrationBean;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/config/FastJson2JsonRedisSerializer.java b/basic/src/main/java/com/dingzhuo/energy/framework/config/FastJson2JsonRedisSerializer.java
deleted file mode 100644
index 9ca43eb..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/config/FastJson2JsonRedisSerializer.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.dingzhuo.energy.framework.config;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.serializer.SerializerFeature;
-import com.fasterxml.jackson.databind.JavaType;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.type.TypeFactory;
-import org.springframework.data.redis.serializer.RedisSerializer;
-import org.springframework.data.redis.serializer.SerializationException;
-import com.alibaba.fastjson.parser.ParserConfig;
-import org.springframework.util.Assert;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-
-/**
- * Redis浣跨敤FastJson搴忓垪鍖�
- * 
- * @author ruoyi
- */
-public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T>
-{
-    @SuppressWarnings("unused")
-    private ObjectMapper objectMapper = new ObjectMapper();
-
-    public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
-
-    private Class<T> clazz;
-
-    static
-    {
-        ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
-    }
-
-    public FastJson2JsonRedisSerializer(Class<T> clazz)
-    {
-        super();
-        this.clazz = clazz;
-    }
-
-    public byte[] serialize(T t) throws SerializationException
-    {
-        if (t == null)
-        {
-            return new byte[0];
-        }
-        return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
-    }
-
-    public T deserialize(byte[] bytes) throws SerializationException
-    {
-        if (bytes == null || bytes.length <= 0)
-        {
-            return null;
-        }
-        String str = new String(bytes, DEFAULT_CHARSET);
-
-        return JSON.parseObject(str, clazz);
-    }
-
-    public void setObjectMapper(ObjectMapper objectMapper)
-    {
-        Assert.notNull(objectMapper, "'objectMapper' must not be null");
-        this.objectMapper = objectMapper;
-    }
-
-    protected JavaType getJavaType(Class<?> clazz)
-    {
-        return TypeFactory.defaultInstance().constructType(clazz);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/config/FilterConfig.java b/basic/src/main/java/com/dingzhuo/energy/framework/config/FilterConfig.java
deleted file mode 100644
index a3bbb5e..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/config/FilterConfig.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.dingzhuo.energy.framework.config;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.servlet.DispatcherType;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.web.servlet.FilterRegistrationBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.xss.XssFilter;
-
-/**
- * Filter閰嶇疆
- *
- * @author ruoyi
- */
-@Configuration
-public class FilterConfig
-{
-    @Value("${xss.enabled}")
-    private String enabled;
-
-    @Value("${xss.excludes}")
-    private String excludes;
-
-    @Value("${xss.urlPatterns}")
-    private String urlPatterns;
-
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    @Bean
-    public FilterRegistrationBean xssFilterRegistration()
-    {
-        FilterRegistrationBean registration = new FilterRegistrationBean();
-        registration.setDispatcherTypes(DispatcherType.REQUEST);
-        registration.setFilter(new XssFilter());
-        registration.addUrlPatterns(StringUtils.split(urlPatterns, ","));
-        registration.setName("xssFilter");
-        registration.setOrder(Integer.MAX_VALUE);
-        Map<String, String> initParameters = new HashMap<String, String>();
-        initParameters.put("excludes", excludes);
-        initParameters.put("enabled", enabled);
-        registration.setInitParameters(initParameters);
-        return registration;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/config/GenConfig.java b/basic/src/main/java/com/dingzhuo/energy/framework/config/GenConfig.java
deleted file mode 100644
index ab399eb..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/config/GenConfig.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.dingzhuo.energy.framework.config;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-/**
- * 璇诲彇浠g爜鐢熸垚鐩稿叧閰嶇疆
- * 
- * @author ruoyi
- */
-@Component
-@ConfigurationProperties(prefix = "gen")
-public class GenConfig
-{
-    /** 浣滆�� */
-    public static String author;
-
-    /** 鐢熸垚鍖呰矾寰� */
-    public static String packageName;
-
-    /** 鑷姩鍘婚櫎琛ㄥ墠缂�锛岄粯璁ゆ槸true */
-    public static boolean autoRemovePre;
-
-    /** 琛ㄥ墠缂�(绫诲悕涓嶄細鍖呭惈琛ㄥ墠缂�) */
-    public static String tablePrefix;
-
-    public static String getAuthor()
-    {
-        return author;
-    }
-
-    public void setAuthor(String author)
-    {
-        GenConfig.author = author;
-    }
-
-    public static String getPackageName()
-    {
-        return packageName;
-    }
-
-    public void setPackageName(String packageName)
-    {
-        GenConfig.packageName = packageName;
-    }
-
-    public static boolean getAutoRemovePre()
-    {
-        return autoRemovePre;
-    }
-
-    public void setAutoRemovePre(boolean autoRemovePre)
-    {
-        GenConfig.autoRemovePre = autoRemovePre;
-    }
-
-    public static String getTablePrefix()
-    {
-        return tablePrefix;
-    }
-
-    public void setTablePrefix(String tablePrefix)
-    {
-        GenConfig.tablePrefix = tablePrefix;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/config/MyBatisConfig.java b/basic/src/main/java/com/dingzhuo/energy/framework/config/MyBatisConfig.java
deleted file mode 100644
index a843fc9..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/config/MyBatisConfig.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package com.dingzhuo.energy.framework.config;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import javax.sql.DataSource;
-import org.apache.ibatis.io.VFS;
-import org.apache.ibatis.session.SqlSessionFactory;
-import org.mybatis.spring.SqlSessionFactoryBean;
-import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.env.Environment;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
-import org.springframework.core.io.support.ResourcePatternResolver;
-import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
-import org.springframework.core.type.classreading.MetadataReader;
-import org.springframework.core.type.classreading.MetadataReaderFactory;
-import org.springframework.util.ClassUtils;
-
-/**
- * Mybatis鏀寔*鍖归厤鎵弿鍖�
- * 
- * @author ruoyi
- */
-@Configuration
-public class MyBatisConfig
-{
-    @Autowired
-    private Environment env;
-
-    static final String DEFAULT_RESOURCE_PATTERN = "**/*.class";
-
-    public static String setTypeAliasesPackage(String typeAliasesPackage)
-    {
-        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
-        MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver);
-        List<String> allResult = new ArrayList<String>();
-        try
-        {
-            for (String aliasesPackage : typeAliasesPackage.split(","))
-            {
-                List<String> result = new ArrayList<String>();
-                aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
-                        + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN;
-                Resource[] resources = resolver.getResources(aliasesPackage);
-                if (resources != null && resources.length > 0)
-                {
-                    MetadataReader metadataReader = null;
-                    for (Resource resource : resources)
-                    {
-                        if (resource.isReadable())
-                        {
-                            metadataReader = metadataReaderFactory.getMetadataReader(resource);
-                            try
-                            {
-                                result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName());
-                            }
-                            catch (ClassNotFoundException e)
-                            {
-                                e.printStackTrace();
-                            }
-                        }
-                    }
-                }
-                if (result.size() > 0)
-                {
-                    HashSet<String> hashResult = new HashSet<String>(result);
-                    allResult.addAll(hashResult);
-                }
-            }
-            if (allResult.size() > 0)
-            {
-                typeAliasesPackage = String.join(",", allResult.toArray(new String[0]));
-            }
-            else
-            {
-                throw new RuntimeException("mybatis typeAliasesPackage 璺緞鎵弿閿欒,鍙傛暟typeAliasesPackage:" + typeAliasesPackage + "鏈壘鍒颁换浣曞寘");
-            }
-        }
-        catch (IOException e)
-        {
-            e.printStackTrace();
-        }
-        return typeAliasesPackage;
-    }
-
-    @Bean
-    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception
-    {
-        String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage");
-        String mapperLocations = env.getProperty("mybatis.mapperLocations");
-        typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
-        VFS.addImplClass(SpringBootVFS.class);
-
-        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
-        sessionFactory.setDataSource(dataSource);
-        sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
-        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
-        return sessionFactory.getObject();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/config/RedisConfig.java b/basic/src/main/java/com/dingzhuo/energy/framework/config/RedisConfig.java
deleted file mode 100644
index 2319a89..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/config/RedisConfig.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.dingzhuo.energy.framework.config;
-
-import org.springframework.cache.annotation.CachingConfigurerSupport;
-import org.springframework.cache.annotation.EnableCaching;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.connection.RedisConnectionFactory;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
-import com.fasterxml.jackson.annotation.JsonAutoDetect;
-import com.fasterxml.jackson.annotation.PropertyAccessor;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-/**
- * redis閰嶇疆
- * 
- * @author ruoyi
- */
-@Configuration
-@EnableCaching
-public class RedisConfig extends CachingConfigurerSupport
-{
-    @Bean
-    @SuppressWarnings(value = { "unchecked", "rawtypes" })
-    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory)
-    {
-        RedisTemplate<Object, Object> template = new RedisTemplate<>();
-        template.setConnectionFactory(connectionFactory);
-
-        FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
-
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
-        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
-        serializer.setObjectMapper(mapper);
-
-        template.setValueSerializer(serializer);
-        // 浣跨敤StringRedisSerializer鏉ュ簭鍒楀寲鍜屽弽搴忓垪鍖杛edis鐨刱ey鍊�
-        template.setKeySerializer(new StringRedisSerializer());
-        template.afterPropertiesSet();
-        return template;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/config/ResourcesConfig.java b/basic/src/main/java/com/dingzhuo/energy/framework/config/ResourcesConfig.java
deleted file mode 100644
index b45950a..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/config/ResourcesConfig.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.dingzhuo.energy.framework.config;
-
-import com.dingzhuo.energy.framework.interceptor.RepeatSubmitInterceptor;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-import com.dingzhuo.energy.common.constant.Constants;
-import com.dingzhuo.energy.framework.interceptor.RepeatSubmitInterceptor;
-
-/**
- * 閫氱敤閰嶇疆
- * 
- * @author ruoyi
- */
-@Configuration
-public class ResourcesConfig implements WebMvcConfigurer
-{
-    @Autowired
-    private RepeatSubmitInterceptor repeatSubmitInterceptor;
-
-    @Override
-    public void addResourceHandlers(ResourceHandlerRegistry registry)
-    {
-        /** 鏈湴鏂囦欢涓婁紶璺緞 */
-        registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**").addResourceLocations("file:" + RuoYiConfig.getProfile() + "/");
-
-        /** swagger閰嶇疆 */
-        registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
-        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
-    }
-
-    /**
-     * 鑷畾涔夋嫤鎴鍒�
-     */
-    @Override
-    public void addInterceptors(InterceptorRegistry registry)
-    {
-        registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**");
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/config/RtdbConfig.java b/basic/src/main/java/com/dingzhuo/energy/framework/config/RtdbConfig.java
deleted file mode 100644
index c654235..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/config/RtdbConfig.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.dingzhuo.energy.framework.config;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-/**
- * @author fanxinfu
- */
-@Component
-@ConfigurationProperties(prefix = "rtdb")
-public class RtdbConfig {
-  public String host;
-  public Integer port;
-  public String user;
-  public String password;
-
-  public String getHost() {
-    return host;
-  }
-
-  public void setHost(String host) {
-    this.host = host;
-  }
-
-  public Integer getPort() {
-    return port;
-  }
-
-  public void setPort(Integer port) {
-    this.port = port;
-  }
-
-  public String getUser() {
-    return user;
-  }
-
-  public void setUser(String user) {
-    this.user = user;
-  }
-
-  public String getPassword() {
-    return password;
-  }
-
-  public void setPassword(String password) {
-    this.password = password;
-  }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/config/RuoYiConfig.java b/basic/src/main/java/com/dingzhuo/energy/framework/config/RuoYiConfig.java
deleted file mode 100644
index 191b0a3..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/config/RuoYiConfig.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package com.dingzhuo.energy.framework.config;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-/**
- * 璇诲彇椤圭洰鐩稿叧閰嶇疆
- *
- * @author ruoyi
- */
-@Component
-@ConfigurationProperties(prefix = "ruoyi")
-public class RuoYiConfig {
-
-  /**
-   * 椤圭洰鍚嶇О
-   */
-  private String name;
-
-  /**
-   * 鐗堟湰
-   */
-  private String version;
-
-  /**
-   * 鐗堟潈骞翠唤
-   */
-  private String copyrightYear;
-
-  /**
-   * 瀹炰緥婕旂ず寮�鍏�
-   */
-  private boolean demoEnabled;
-
-  /**
-   * 涓婁紶璺緞
-   */
-  private static String profile;
-
-  /**
-   * 鑾峰彇鍦板潃寮�鍏�
-   */
-  private static boolean addressEnabled;
-
-  public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public String getVersion() {
-    return version;
-  }
-
-  public void setVersion(String version) {
-    this.version = version;
-  }
-
-  public String getCopyrightYear() {
-    return copyrightYear;
-  }
-
-  public void setCopyrightYear(String copyrightYear) {
-    this.copyrightYear = copyrightYear;
-  }
-
-  public boolean isDemoEnabled() {
-    return demoEnabled;
-  }
-
-  public void setDemoEnabled(boolean demoEnabled) {
-    this.demoEnabled = demoEnabled;
-  }
-
-  public static String getProfile() {
-    return profile;
-  }
-
-  public void setProfile(String profile) {
-    RuoYiConfig.profile = profile;
-  }
-
-  public static boolean isAddressEnabled() {
-    return addressEnabled;
-  }
-
-  public void setAddressEnabled(boolean addressEnabled) {
-    RuoYiConfig.addressEnabled = addressEnabled;
-  }
-
-  /**
-   * 鑾峰彇澶村儚涓婁紶璺緞
-   */
-  public static String getAvatarPath() {
-    return getProfile() + "/avatar";
-  }
-
-  /**
-   * 鑾峰彇涓嬭浇璺緞
-   */
-  public static String getDownloadPath() {
-    return getProfile() + "/download/";
-  }
-
-  /**
-   * 鑾峰彇涓婁紶璺緞
-   */
-  public static String getUploadPath() {
-    return getProfile() + "/upload";
-  }
-
-  public static String getConfigurePath() {
-    return getProfile() + "/configure";
-  }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/config/SecurityConfig.java b/basic/src/main/java/com/dingzhuo/energy/framework/config/SecurityConfig.java
deleted file mode 100644
index 1f70102..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/config/SecurityConfig.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.dingzhuo.energy.framework.config;
-
-import com.dingzhuo.energy.framework.security.filter.JwtAuthenticationTokenFilter;
-import com.dingzhuo.energy.framework.security.handle.AuthenticationEntryPointImpl;
-import com.dingzhuo.energy.framework.security.handle.LogoutSuccessHandlerImpl;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.http.HttpMethod;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
-import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
-import org.springframework.security.config.http.SessionCreationPolicy;
-import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
-
-/**
- * spring security閰嶇疆
- *
- * @author ruoyi
- */
-@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
-public class SecurityConfig extends WebSecurityConfigurerAdapter {
-
-  /**
-   * 鑷畾涔夌敤鎴疯璇侀�昏緫
-   */
-  @Autowired
-  private UserDetailsService userDetailsService;
-
-  /**
-   * 璁よ瘉澶辫触澶勭悊绫�
-   */
-  @Autowired
-  private AuthenticationEntryPointImpl unauthorizedHandler;
-
-  /**
-   * 閫�鍑哄鐞嗙被
-   */
-  @Autowired
-  private LogoutSuccessHandlerImpl logoutSuccessHandler;
-
-  /**
-   * token璁よ瘉杩囨护鍣�
-   */
-  @Autowired
-  private JwtAuthenticationTokenFilter authenticationTokenFilter;
-
-  /**
-   * 瑙e喅 鏃犳硶鐩存帴娉ㄥ叆 AuthenticationManager
-   *
-   * @return
-   * @throws Exception
-   */
-  @Bean
-  @Override
-  public AuthenticationManager authenticationManagerBean() throws Exception {
-    return super.authenticationManagerBean();
-  }
-
-  /**
-   * anyRequest          |   鍖归厤鎵�鏈夎姹傝矾寰� access              |   SpringEl琛ㄨ揪寮忕粨鏋滀负true鏃跺彲浠ヨ闂� anonymous |
-   * 鍖垮悕鍙互璁块棶 denyAll             |   鐢ㄦ埛涓嶈兘璁块棶 fullyAuthenticated  | 鐢ㄦ埛瀹屽叏璁よ瘉鍙互璁块棶锛堥潪remember-me涓嬭嚜鍔ㄧ櫥褰曪級
-   * hasAnyAuthority     |   濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧず鏉冮檺锛屽垯鍏朵腑浠讳綍涓�涓潈闄愬彲浠ヨ闂� hasAnyRole |   濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧず瑙掕壊锛屽垯鍏朵腑浠讳綍涓�涓鑹插彲浠ヨ闂�
-   * hasAuthority        |   濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧず鏉冮檺锛屽垯鍏舵潈闄愬彲浠ヨ闂� hasIpAddress |   濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧずIP鍦板潃锛屽鏋滅敤鎴稩P鍜屽弬鏁板尮閰嶏紝鍒欏彲浠ヨ闂�
-   * hasRole             |   濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧず瑙掕壊锛屽垯鍏惰鑹插彲浠ヨ闂� permitAll           |   鐢ㄦ埛鍙互浠绘剰璁块棶 rememberMe
-   * |   鍏佽閫氳繃remember-me鐧诲綍鐨勭敤鎴疯闂� authenticated |   鐢ㄦ埛鐧诲綍鍚庡彲璁块棶
-   */
-  @Override
-  protected void configure(HttpSecurity httpSecurity) throws Exception {
-    httpSecurity
-        // CRSF绂佺敤锛屽洜涓轰笉浣跨敤session
-        .csrf().disable()
-        // 璁よ瘉澶辫触澶勭悊绫�
-        .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
-        // 鍩轰簬token锛屾墍浠ヤ笉闇�瑕乻ession
-        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
-        // 杩囨护璇锋眰
-        .authorizeRequests()
-        // 瀵逛簬鐧诲綍login 楠岃瘉鐮乧aptchaImage 鍏佽鍖垮悕璁块棶
-        .antMatchers("/login", "/captchaImage").anonymous()
-        .antMatchers(
-            HttpMethod.GET,
-            "/*.html",
-            "/**/*.html",
-            "/**/*.css",
-            "/**/*.js"
-        ).permitAll()
-        .antMatchers("/profile/**").anonymous()
-        .antMatchers("/common/download**").anonymous()
-        .antMatchers("/swagger-ui.html").anonymous()
-        .antMatchers("/swagger-resources/**").anonymous()
-        .antMatchers("/webjars/**").anonymous()
-        .antMatchers("/*/api-docs").anonymous()
-        .antMatchers("/druid/**").anonymous()
-//                .antMatchers("/energyAlarm/**").anonymous()
-        // 闄や笂闈㈠鐨勬墍鏈夎姹傚叏閮ㄩ渶瑕侀壌鏉冭璇�
-        .anyRequest().authenticated()
-//        .anyRequest().anonymous()
-        .and()
-        .headers().frameOptions().disable();
-    httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
-    // 娣诲姞JWT filter
-    httpSecurity
-        .addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
-  }
-
-
-  /**
-   * 寮烘暎鍒楀搱甯屽姞瀵嗗疄鐜�
-   */
-  @Bean
-  public BCryptPasswordEncoder bCryptPasswordEncoder() {
-    return new BCryptPasswordEncoder();
-  }
-
-  /**
-   * 韬唤璁よ瘉鎺ュ彛
-   */
-  @Override
-  protected void configure(AuthenticationManagerBuilder auth) throws Exception {
-    auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
-  }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/config/ServerConfig.java b/basic/src/main/java/com/dingzhuo/energy/framework/config/ServerConfig.java
deleted file mode 100644
index 030a339..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/config/ServerConfig.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.dingzhuo.energy.framework.config;
-
-import javax.servlet.http.HttpServletRequest;
-import org.springframework.stereotype.Component;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-
-/**
- * 鏈嶅姟鐩稿叧閰嶇疆
- * 
- * @author ruoyi
- */
-@Component
-public class ServerConfig
-{
-    /**
-     * 鑾峰彇瀹屾暣鐨勮姹傝矾寰勶紝鍖呮嫭锛氬煙鍚嶏紝绔彛锛屼笂涓嬫枃璁块棶璺緞
-     * 
-     * @return 鏈嶅姟鍦板潃
-     */
-    public String getUrl()
-    {
-        HttpServletRequest request = ServletUtils.getRequest();
-        return getDomain(request);
-    }
-
-    public static String getDomain(HttpServletRequest request)
-    {
-        StringBuffer url = request.getRequestURL();
-        String contextPath = request.getServletContext().getContextPath();
-        return url.delete(url.length() - request.getRequestURI().length(), url.length()).append(contextPath).toString();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/config/SwaggerConfig.java b/basic/src/main/java/com/dingzhuo/energy/framework/config/SwaggerConfig.java
deleted file mode 100644
index 147b3c8..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/config/SwaggerConfig.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package com.dingzhuo.energy.framework.config;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import io.swagger.annotations.ApiOperation;
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.service.ApiKey;
-import springfox.documentation.service.AuthorizationScope;
-import springfox.documentation.service.Contact;
-import springfox.documentation.service.SecurityReference;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spi.service.contexts.SecurityContext;
-import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
-
-/**
- * Swagger2鐨勬帴鍙i厤缃�
- *
- * @author ruoyi
- */
-@Configuration
-@EnableSwagger2
-public class SwaggerConfig
-{
-    /** 绯荤粺鍩虹閰嶇疆 */
-    @Autowired
-    private RuoYiConfig ruoyiConfig;
-
-    /**
-     * 鍒涘缓API
-     */
-    @Bean
-    public Docket createRestApi()
-    {
-        return new Docket(DocumentationType.SWAGGER_2)
-                .pathMapping("/dev-api")
-                // 鐢ㄦ潵鍒涘缓璇PI鐨勫熀鏈俊鎭紝灞曠ず鍦ㄦ枃妗g殑椤甸潰涓紙鑷畾涔夊睍绀虹殑淇℃伅锛�
-                .apiInfo(apiInfo())
-                // 璁剧疆鍝簺鎺ュ彛鏆撮湶缁橲wagger灞曠ず
-                .select()
-                // 鎵弿鎵�鏈夋湁娉ㄨВ鐨刟pi锛岀敤杩欑鏂瑰紡鏇寸伒娲�
-                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
-                // 鎵弿鎸囧畾鍖呬腑鐨剆wagger娉ㄨВ
-                //.apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger"))
-                // 鎵弿鎵�鏈� .apis(RequestHandlerSelectors.any())
-                .paths(PathSelectors.any())
-                .build()
-                /* 璁剧疆瀹夊叏妯″紡锛宻wagger鍙互璁剧疆璁块棶token */
-                .securitySchemes(securitySchemes())
-                .securityContexts(securityContexts());
-    }
-
-    /**
-     * 瀹夊叏妯″紡锛岃繖閲屾寚瀹歵oken閫氳繃Authorization澶磋姹傚ご浼犻��
-     */
-    private List<ApiKey> securitySchemes()
-    {
-        List<ApiKey> apiKeyList = new ArrayList<ApiKey>();
-        apiKeyList.add(new ApiKey("Authorization", "Authorization", "header"));
-        return apiKeyList;
-    }
-
-    /**
-     * 瀹夊叏涓婁笅鏂�
-     */
-    private List<SecurityContext> securityContexts()
-    {
-        List<SecurityContext> securityContexts = new ArrayList<>();
-        securityContexts.add(
-                SecurityContext.builder()
-                        .securityReferences(defaultAuth())
-                        .forPaths(PathSelectors.regex("^(?!auth).*$"))
-                        .build());
-        return securityContexts;
-    }
-
-    /**
-     * 榛樿鐨勫畨鍏ㄤ笂寮曠敤
-     */
-    private List<SecurityReference> defaultAuth()
-    {
-        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
-        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
-        authorizationScopes[0] = authorizationScope;
-        List<SecurityReference> securityReferences = new ArrayList<>();
-        securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
-        return securityReferences;
-    }
-
-    /**
-     * 娣诲姞鎽樿淇℃伅
-     */
-    private ApiInfo apiInfo()
-    {
-        // 鐢ˋpiInfoBuilder杩涜瀹氬埗
-        return new ApiInfoBuilder()
-                // 璁剧疆鏍囬
-                .title("鑳芥簮绠$悊绯荤粺_鎺ュ彛鏂囨。")
-                // 鎻忚堪
-                .description("")
-                // 浣滆�呬俊鎭�
-                .contact(new Contact(ruoyiConfig.getName(), null, null))
-                // 鐗堟湰
-                .version("鐗堟湰鍙�:" + ruoyiConfig.getVersion())
-                .build();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/config/SystemConfig.java b/basic/src/main/java/com/dingzhuo/energy/framework/config/SystemConfig.java
deleted file mode 100644
index 1428af5..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/config/SystemConfig.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.dingzhuo.energy.framework.config;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-/**
- * @author zhaow
- * 搴炲反杩郴缁熼厤缃�
- */
-@Component
-@ConfigurationProperties(prefix = "sysconfig")
-public class SystemConfig {
-  /**  棣栭〉IFrame鍔犺浇鍦板潃 **/
-  public static String indexUrl;
-
-  public static String getIndexUrl() {
-    return indexUrl;
-  }
-
-  public void setIndexUrl(String indexUrl) {
-    SystemConfig.indexUrl = indexUrl;
-  }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/config/ThreadPoolConfig.java b/basic/src/main/java/com/dingzhuo/energy/framework/config/ThreadPoolConfig.java
deleted file mode 100644
index 211f856..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/config/ThreadPoolConfig.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.dingzhuo.energy.framework.config;
-
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.ThreadPoolExecutor;
-import org.apache.commons.lang3.concurrent.BasicThreadFactory;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-import com.dingzhuo.energy.common.utils.Threads;
-
-/**
- * 绾跨▼姹犻厤缃�
- *
- * @author ruoyi
- **/
-@Configuration
-public class ThreadPoolConfig
-{
-    // 鏍稿績绾跨▼姹犲ぇ灏�
-    private int corePoolSize = 50;
-
-    // 鏈�澶у彲鍒涘缓鐨勭嚎绋嬫暟
-    private int maxPoolSize = 200;
-
-    // 闃熷垪鏈�澶ч暱搴�
-    private int queueCapacity = 1000;
-
-    // 绾跨▼姹犵淮鎶ょ嚎绋嬫墍鍏佽鐨勭┖闂叉椂闂�
-    private int keepAliveSeconds = 300;
-
-    @Bean(name = "threadPoolTaskExecutor")
-    public ThreadPoolTaskExecutor threadPoolTaskExecutor()
-    {
-        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
-        executor.setMaxPoolSize(maxPoolSize);
-        executor.setCorePoolSize(corePoolSize);
-        executor.setQueueCapacity(queueCapacity);
-        executor.setKeepAliveSeconds(keepAliveSeconds);
-        // 绾跨▼姹犲鎷掔粷浠诲姟(鏃犵嚎绋嬪彲鐢�)鐨勫鐞嗙瓥鐣�
-        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
-        return executor;
-    }
-
-    /**
-     * 鎵ц鍛ㄦ湡鎬ф垨瀹氭椂浠诲姟
-     */
-    @Bean(name = "scheduledExecutorService")
-    protected ScheduledExecutorService scheduledExecutorService()
-    {
-        return new ScheduledThreadPoolExecutor(corePoolSize,
-                new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build())
-        {
-            @Override
-            protected void afterExecute(Runnable r, Throwable t)
-            {
-                super.afterExecute(r, t);
-                Threads.printException(r, t);
-            }
-        };
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/config/properties/DruidProperties.java b/basic/src/main/java/com/dingzhuo/energy/framework/config/properties/DruidProperties.java
deleted file mode 100644
index 74f1c47..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/config/properties/DruidProperties.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.dingzhuo.energy.framework.config.properties;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Configuration;
-import com.alibaba.druid.pool.DruidDataSource;
-
-/**
- * druid 閰嶇疆灞炴��
- * 
- * @author ruoyi
- */
-@Configuration
-public class DruidProperties
-{
-    @Value("${spring.datasource.druid.initialSize}")
-    private int initialSize;
-
-    @Value("${spring.datasource.druid.minIdle}")
-    private int minIdle;
-
-    @Value("${spring.datasource.druid.maxActive}")
-    private int maxActive;
-
-    @Value("${spring.datasource.druid.maxWait}")
-    private int maxWait;
-
-    @Value("${spring.datasource.druid.timeBetweenEvictionRunsMillis}")
-    private int timeBetweenEvictionRunsMillis;
-
-    @Value("${spring.datasource.druid.minEvictableIdleTimeMillis}")
-    private int minEvictableIdleTimeMillis;
-
-    @Value("${spring.datasource.druid.maxEvictableIdleTimeMillis}")
-    private int maxEvictableIdleTimeMillis;
-
-    @Value("${spring.datasource.druid.validationQuery}")
-    private String validationQuery;
-
-    @Value("${spring.datasource.druid.testWhileIdle}")
-    private boolean testWhileIdle;
-
-    @Value("${spring.datasource.druid.testOnBorrow}")
-    private boolean testOnBorrow;
-
-    @Value("${spring.datasource.druid.testOnReturn}")
-    private boolean testOnReturn;
-
-    public DruidDataSource dataSource(DruidDataSource datasource)
-    {
-        /** 閰嶇疆鍒濆鍖栧ぇ灏忋�佹渶灏忋�佹渶澶� */
-        datasource.setInitialSize(initialSize);
-        datasource.setMaxActive(maxActive);
-        datasource.setMinIdle(minIdle);
-
-        /** 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂� */
-        datasource.setMaxWait(maxWait);
-
-        /** 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣 */
-        datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
-
-        /** 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忋�佹渶澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 */
-        datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
-        datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis);
-
-        /**
-         * 鐢ㄦ潵妫�娴嬭繛鎺ユ槸鍚︽湁鏁堢殑sql锛岃姹傛槸涓�涓煡璇㈣鍙ワ紝甯哥敤select 'x'銆傚鏋渧alidationQuery涓簄ull锛宼estOnBorrow銆乼estOnReturn銆乼estWhileIdle閮戒笉浼氳捣浣滅敤銆�
-         */
-        datasource.setValidationQuery(validationQuery);
-        /** 寤鸿閰嶇疆涓簍rue锛屼笉褰卞搷鎬ц兘锛屽苟涓斾繚璇佸畨鍏ㄦ�с�傜敵璇疯繛鎺ョ殑鏃跺�欐娴嬶紝濡傛灉绌洪棽鏃堕棿澶т簬timeBetweenEvictionRunsMillis锛屾墽琛寁alidationQuery妫�娴嬭繛鎺ユ槸鍚︽湁鏁堛�� */
-        datasource.setTestWhileIdle(testWhileIdle);
-        /** 鐢宠杩炴帴鏃舵墽琛寁alidationQuery妫�娴嬭繛鎺ユ槸鍚︽湁鏁堬紝鍋氫簡杩欎釜閰嶇疆浼氶檷浣庢�ц兘銆� */
-        datasource.setTestOnBorrow(testOnBorrow);
-        /** 褰掕繕杩炴帴鏃舵墽琛寁alidationQuery妫�娴嬭繛鎺ユ槸鍚︽湁鏁堬紝鍋氫簡杩欎釜閰嶇疆浼氶檷浣庢�ц兘銆� */
-        datasource.setTestOnReturn(testOnReturn);
-        return datasource;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/datasource/DynamicDataSource.java b/basic/src/main/java/com/dingzhuo/energy/framework/datasource/DynamicDataSource.java
deleted file mode 100644
index d8b789e..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/datasource/DynamicDataSource.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.dingzhuo.energy.framework.datasource;
-
-import java.util.Map;
-import javax.sql.DataSource;
-import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
-
-/**
- * 鍔ㄦ�佹暟鎹簮
- * 
- * @author ruoyi
- */
-public class DynamicDataSource extends AbstractRoutingDataSource
-{
-    public DynamicDataSource(DataSource defaultTargetDataSource, Map<Object, Object> targetDataSources)
-    {
-        super.setDefaultTargetDataSource(defaultTargetDataSource);
-        super.setTargetDataSources(targetDataSources);
-        super.afterPropertiesSet();
-    }
-
-    @Override
-    protected Object determineCurrentLookupKey()
-    {
-        return DynamicDataSourceContextHolder.getDataSourceType();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/datasource/DynamicDataSourceContextHolder.java b/basic/src/main/java/com/dingzhuo/energy/framework/datasource/DynamicDataSourceContextHolder.java
deleted file mode 100644
index 853067b..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/datasource/DynamicDataSourceContextHolder.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.dingzhuo.energy.framework.datasource;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * 鏁版嵁婧愬垏鎹㈠鐞�
- * 
- * @author ruoyi
- */
-public class DynamicDataSourceContextHolder
-{
-    public static final Logger log = LoggerFactory.getLogger(DynamicDataSourceContextHolder.class);
-
-    /**
-     * 浣跨敤ThreadLocal缁存姢鍙橀噺锛孴hreadLocal涓烘瘡涓娇鐢ㄨ鍙橀噺鐨勭嚎绋嬫彁渚涚嫭绔嬬殑鍙橀噺鍓湰锛�
-     *  鎵�浠ユ瘡涓�涓嚎绋嬮兘鍙互鐙珛鍦版敼鍙樿嚜宸辩殑鍓湰锛岃�屼笉浼氬奖鍝嶅叾瀹冪嚎绋嬫墍瀵瑰簲鐨勫壇鏈��
-     */
-    private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();
-
-    /**
-     * 璁剧疆鏁版嵁婧愮殑鍙橀噺
-     */
-    public static void setDataSourceType(String dsType)
-    {
-        log.info("鍒囨崲鍒皗}鏁版嵁婧�", dsType);
-        CONTEXT_HOLDER.set(dsType);
-    }
-
-    /**
-     * 鑾峰緱鏁版嵁婧愮殑鍙橀噺
-     */
-    public static String getDataSourceType()
-    {
-        return CONTEXT_HOLDER.get();
-    }
-
-    /**
-     * 娓呯┖鏁版嵁婧愬彉閲�
-     */
-    public static void clearDataSourceType()
-    {
-        CONTEXT_HOLDER.remove();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/interceptor/RepeatSubmitInterceptor.java b/basic/src/main/java/com/dingzhuo/energy/framework/interceptor/RepeatSubmitInterceptor.java
deleted file mode 100644
index 6121fef..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/interceptor/RepeatSubmitInterceptor.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.dingzhuo.energy.framework.interceptor;
-
-import java.lang.reflect.Method;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.dingzhuo.energy.framework.interceptor.annotation.RepeatSubmit;
-import org.springframework.stereotype.Component;
-import org.springframework.web.method.HandlerMethod;
-import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
-import com.alibaba.fastjson.JSONObject;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.framework.interceptor.annotation.RepeatSubmit;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-
-/**
- * 闃叉閲嶅鎻愪氦鎷︽埅鍣�
- * 
- * @author ruoyi
- */
-@Component
-public abstract class RepeatSubmitInterceptor extends HandlerInterceptorAdapter
-{
-    @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
-    {
-        if (handler instanceof HandlerMethod)
-        {
-            HandlerMethod handlerMethod = (HandlerMethod) handler;
-            Method method = handlerMethod.getMethod();
-            RepeatSubmit annotation = method.getAnnotation(RepeatSubmit.class);
-            if (annotation != null)
-            {
-                if (this.isRepeatSubmit(request))
-                {
-                    AjaxResult ajaxResult = AjaxResult.error("涓嶅厑璁搁噸澶嶆彁浜わ紝璇风◢鍚庡啀璇�");
-                    ServletUtils.renderString(response, JSONObject.toJSONString(ajaxResult));
-                    return false;
-                }
-            }
-            return true;
-        }
-        else
-        {
-            return super.preHandle(request, response, handler);
-        }
-    }
-
-    /**
-     * 楠岃瘉鏄惁閲嶅鎻愪氦鐢卞瓙绫诲疄鐜板叿浣撶殑闃查噸澶嶆彁浜ょ殑瑙勫垯
-     * 
-     * @param httpServletRequest
-     * @return
-     * @throws Exception
-     */
-    public abstract boolean isRepeatSubmit(HttpServletRequest request);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/interceptor/annotation/RepeatSubmit.java b/basic/src/main/java/com/dingzhuo/energy/framework/interceptor/annotation/RepeatSubmit.java
deleted file mode 100644
index b762154..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/interceptor/annotation/RepeatSubmit.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.dingzhuo.energy.framework.interceptor.annotation;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 鑷畾涔夋敞瑙i槻姝㈣〃鍗曢噸澶嶆彁浜�
- * 
- * @author ruoyi
- *
- */
-@Inherited
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface RepeatSubmit
-{
-
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/interceptor/impl/SameUrlDataInterceptor.java b/basic/src/main/java/com/dingzhuo/energy/framework/interceptor/impl/SameUrlDataInterceptor.java
deleted file mode 100644
index ad79f39..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/interceptor/impl/SameUrlDataInterceptor.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.dingzhuo.energy.framework.interceptor.impl;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import org.springframework.stereotype.Component;
-import com.alibaba.fastjson.JSONObject;
-import com.dingzhuo.energy.framework.interceptor.RepeatSubmitInterceptor;
-
-/**
- * 鍒ゆ柇璇锋眰url鍜屾暟鎹槸鍚﹀拰涓婁竴娆$浉鍚岋紝 
- * 濡傛灉鍜屼笂娆$浉鍚岋紝鍒欐槸閲嶅鎻愪氦琛ㄥ崟銆� 鏈夋晥鏃堕棿涓�10绉掑唴銆�
- * 
- * @author ruoyi
- */
-@Component
-public class SameUrlDataInterceptor extends RepeatSubmitInterceptor
-{
-    public final String REPEAT_PARAMS = "repeatParams";
-
-    public final String REPEAT_TIME = "repeatTime";
-
-    public final String SESSION_REPEAT_KEY = "repeatData";
-
-    /**
-     * 闂撮殧鏃堕棿锛屽崟浣�:绉� 榛樿10绉�
-     * 
-     * 涓ゆ鐩稿悓鍙傛暟鐨勮姹傦紝濡傛灉闂撮殧鏃堕棿澶т簬璇ュ弬鏁帮紝绯荤粺涓嶄細璁ゅ畾涓洪噸澶嶆彁浜ょ殑鏁版嵁
-     */
-    private int intervalTime = 10;
-
-    public void setIntervalTime(int intervalTime)
-    {
-        this.intervalTime = intervalTime;
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    public boolean isRepeatSubmit(HttpServletRequest request)
-    {
-        // 鏈鍙傛暟鍙婄郴缁熸椂闂�
-        String nowParams = JSONObject.toJSONString(request.getParameterMap());
-        Map<String, Object> nowDataMap = new HashMap<String, Object>();
-        nowDataMap.put(REPEAT_PARAMS, nowParams);
-        nowDataMap.put(REPEAT_TIME, System.currentTimeMillis());
-
-        // 璇锋眰鍦板潃锛堜綔涓哄瓨鏀緎ession鐨刱ey鍊硷級
-        String url = request.getRequestURI();
-
-        HttpSession session = request.getSession();
-        Object sessionObj = session.getAttribute(SESSION_REPEAT_KEY);
-        if (sessionObj != null)
-        {
-            Map<String, Object> sessionMap = (Map<String, Object>) sessionObj;
-            if (sessionMap.containsKey(url))
-            {
-                Map<String, Object> preDataMap = (Map<String, Object>) sessionMap.get(url);
-                if (compareParams(nowDataMap, preDataMap) && compareTime(nowDataMap, preDataMap))
-                {
-                    return true;
-                }
-            }
-        }
-        Map<String, Object> sessionMap = new HashMap<String, Object>();
-        sessionMap.put(url, nowDataMap);
-        session.setAttribute(SESSION_REPEAT_KEY, sessionMap);
-        return false;
-    }
-
-    /**
-     * 鍒ゆ柇鍙傛暟鏄惁鐩稿悓
-     */
-    private boolean compareParams(Map<String, Object> nowMap, Map<String, Object> preMap)
-    {
-        String nowParams = (String) nowMap.get(REPEAT_PARAMS);
-        String preParams = (String) preMap.get(REPEAT_PARAMS);
-        return nowParams.equals(preParams);
-    }
-
-    /**
-     * 鍒ゆ柇涓ゆ闂撮殧鏃堕棿
-     */
-    private boolean compareTime(Map<String, Object> nowMap, Map<String, Object> preMap)
-    {
-        long time1 = (Long) nowMap.get(REPEAT_TIME);
-        long time2 = (Long) preMap.get(REPEAT_TIME);
-      return (time1 - time2) < (this.intervalTime * 1000);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/manager/AsyncManager.java b/basic/src/main/java/com/dingzhuo/energy/framework/manager/AsyncManager.java
deleted file mode 100644
index 90f3b06..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/manager/AsyncManager.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.dingzhuo.energy.framework.manager;
-
-import java.util.TimerTask;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-import com.dingzhuo.energy.common.utils.Threads;
-import com.dingzhuo.energy.common.utils.spring.SpringUtils;
-
-/**
- * 寮傛浠诲姟绠$悊鍣�
- * 
- * @author ruoyi
- */
-public class AsyncManager
-{
-    /**
-     * 鎿嶄綔寤惰繜10姣
-     */
-    private final int OPERATE_DELAY_TIME = 10;
-
-    /**
-     * 寮傛鎿嶄綔浠诲姟璋冨害绾跨▼姹�
-     */
-    private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService");
-
-    /**
-     * 鍗曚緥妯″紡
-     */
-    private AsyncManager(){}
-
-    private static AsyncManager me = new AsyncManager();
-
-    public static AsyncManager me()
-    {
-        return me;
-    }
-
-    /**
-     * 鎵ц浠诲姟
-     * 
-     * @param task 浠诲姟
-     */
-    public void execute(TimerTask task)
-    {
-        executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS);
-    }
-
-    /**
-     * 鍋滄浠诲姟绾跨▼姹�
-     */
-    public void shutdown()
-    {
-        Threads.shutdownAndAwaitTermination(executor);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/manager/ShutdownManager.java b/basic/src/main/java/com/dingzhuo/energy/framework/manager/ShutdownManager.java
deleted file mode 100644
index b2465cb..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/manager/ShutdownManager.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.dingzhuo.energy.framework.manager;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-import javax.annotation.PreDestroy;
-
-/**
- * 纭繚搴旂敤閫�鍑烘椂鑳藉叧闂悗鍙扮嚎绋�
- *
- * @author ruoyi
- */
-@Component
-public class ShutdownManager
-{
-    private static final Logger logger = LoggerFactory.getLogger("sys-user");
-
-    @PreDestroy
-    public void destroy()
-    {
-        shutdownAsyncManager();
-    }
-
-    /**
-     * 鍋滄寮傛鎵ц浠诲姟
-     */
-    private void shutdownAsyncManager()
-    {
-        try
-        {
-            logger.info("====鍏抽棴鍚庡彴浠诲姟浠诲姟绾跨▼姹�====");
-            AsyncManager.me().shutdown();
-        }
-        catch (Exception e)
-        {
-            logger.error(e.getMessage(), e);
-        }
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/manager/factory/AsyncFactory.java b/basic/src/main/java/com/dingzhuo/energy/framework/manager/factory/AsyncFactory.java
deleted file mode 100644
index cff2a46..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/manager/factory/AsyncFactory.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package com.dingzhuo.energy.framework.manager.factory;
-
-import java.util.TimerTask;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import com.dingzhuo.energy.common.constant.Constants;
-import com.dingzhuo.energy.common.utils.LogUtils;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.common.utils.ip.AddressUtils;
-import com.dingzhuo.energy.common.utils.ip.IpUtils;
-import com.dingzhuo.energy.common.utils.spring.SpringUtils;
-import com.dingzhuo.energy.project.monitor.domain.SysLogininfor;
-import com.dingzhuo.energy.project.monitor.domain.SysOperLog;
-import com.dingzhuo.energy.project.monitor.service.ISysLogininforService;
-import com.dingzhuo.energy.project.monitor.service.ISysOperLogService;
-import eu.bitwalker.useragentutils.UserAgent;
-
-/**
- * 寮傛宸ュ巶锛堜骇鐢熶换鍔$敤锛�
- * 
- * @author ruoyi
- */
-public class AsyncFactory
-{
-    private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user");
-
-    /**
-     * 璁板綍鐧婚檰淇℃伅
-     * 
-     * @param username 鐢ㄦ埛鍚�
-     * @param status 鐘舵��
-     * @param message 娑堟伅
-     * @param args 鍒楄〃
-     * @return 浠诲姟task
-     */
-    public static TimerTask recordLogininfor(final String username, final String status, final String message,
-            final Object... args)
-    {
-        final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
-        final String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
-        return new TimerTask()
-        {
-            @Override
-            public void run()
-            {
-                String address = AddressUtils.getRealAddressByIP(ip);
-                StringBuilder s = new StringBuilder();
-                s.append(LogUtils.getBlock(ip));
-                s.append(address);
-                s.append(LogUtils.getBlock(username));
-                s.append(LogUtils.getBlock(status));
-                s.append(LogUtils.getBlock(message));
-                // 鎵撳嵃淇℃伅鍒版棩蹇�
-                sys_user_logger.info(s.toString(), args);
-                // 鑾峰彇瀹㈡埛绔搷浣滅郴缁�
-                String os = userAgent.getOperatingSystem().getName();
-                // 鑾峰彇瀹㈡埛绔祻瑙堝櫒
-                String browser = userAgent.getBrowser().getName();
-                // 灏佽瀵硅薄
-                SysLogininfor logininfor = new SysLogininfor();
-                logininfor.setUserName(username);
-                logininfor.setIpaddr(ip);
-                logininfor.setLoginLocation(address);
-                logininfor.setBrowser(browser);
-                logininfor.setOs(os);
-                logininfor.setMsg(message);
-                // 鏃ュ織鐘舵��
-                if (Constants.LOGIN_SUCCESS.equals(status) || Constants.LOGOUT.equals(status))
-                {
-                    logininfor.setStatus(Constants.SUCCESS);
-                }
-                else if (Constants.LOGIN_FAIL.equals(status))
-                {
-                    logininfor.setStatus(Constants.FAIL);
-                }
-                // 鎻掑叆鏁版嵁
-                SpringUtils.getBean(ISysLogininforService.class).insertLogininfor(logininfor);
-            }
-        };
-    }
-
-    /**
-     * 鎿嶄綔鏃ュ織璁板綍
-     * 
-     * @param operLog 鎿嶄綔鏃ュ織淇℃伅
-     * @return 浠诲姟task
-     */
-    public static TimerTask recordOper(final SysOperLog operLog)
-    {
-        return new TimerTask()
-        {
-            @Override
-            public void run()
-            {
-                // 杩滅▼鏌ヨ鎿嶄綔鍦扮偣
-                operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp()));
-                SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog);
-            }
-        };
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/redis/RedisCache.java b/basic/src/main/java/com/dingzhuo/energy/framework/redis/RedisCache.java
deleted file mode 100644
index f9c8d79..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/redis/RedisCache.java
+++ /dev/null
@@ -1,207 +0,0 @@
-package com.dingzhuo.energy.framework.redis;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.BoundSetOperations;
-import org.springframework.data.redis.core.HashOperations;
-import org.springframework.data.redis.core.ListOperations;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.core.ValueOperations;
-import org.springframework.stereotype.Component;
-
-/**
- * spring redis 宸ュ叿绫�
- * 
- * @author ruoyi
- **/
-@SuppressWarnings(value = { "unchecked", "rawtypes" })
-@Component
-public class RedisCache
-{
-    @Autowired
-    public RedisTemplate redisTemplate;
-
-    /**
-     * 缂撳瓨鍩烘湰鐨勫璞★紝Integer銆丼tring銆佸疄浣撶被绛�
-     *
-     * @param key 缂撳瓨鐨勯敭鍊�
-     * @param value 缂撳瓨鐨勫��
-     * @return 缂撳瓨鐨勫璞�
-     */
-    public <T> ValueOperations<String, T> setCacheObject(String key, T value)
-    {
-        ValueOperations<String, T> operation = redisTemplate.opsForValue();
-        operation.set(key, value);
-        return operation;
-    }
-
-    /**
-     * 缂撳瓨鍩烘湰鐨勫璞★紝Integer銆丼tring銆佸疄浣撶被绛�
-     *
-     * @param key 缂撳瓨鐨勯敭鍊�
-     * @param value 缂撳瓨鐨勫��
-     * @param timeout 鏃堕棿
-     * @param timeUnit 鏃堕棿棰楃矑搴�
-     * @return 缂撳瓨鐨勫璞�
-     */
-    public <T> ValueOperations<String, T> setCacheObject(String key, T value, Integer timeout, TimeUnit timeUnit)
-    {
-        ValueOperations<String, T> operation = redisTemplate.opsForValue();
-        operation.set(key, value, timeout, timeUnit);
-        return operation;
-    }
-
-    /**
-     * 鑾峰緱缂撳瓨鐨勫熀鏈璞°��
-     *
-     * @param key 缂撳瓨閿��
-     * @return 缂撳瓨閿�煎搴旂殑鏁版嵁
-     */
-    public <T> T getCacheObject(String key)
-    {
-        ValueOperations<String, T> operation = redisTemplate.opsForValue();
-        return operation.get(key);
-    }
-
-    /**
-     * 鍒犻櫎鍗曚釜瀵硅薄
-     *
-     * @param key
-     */
-    public void deleteObject(String key)
-    {
-        redisTemplate.delete(key);
-    }
-
-    /**
-     * 鍒犻櫎闆嗗悎瀵硅薄
-     *
-     * @param collection
-     */
-    public void deleteObject(Collection collection)
-    {
-        redisTemplate.delete(collection);
-    }
-
-    /**
-     * 缂撳瓨List鏁版嵁
-     *
-     * @param key 缂撳瓨鐨勯敭鍊�
-     * @param dataList 寰呯紦瀛樼殑List鏁版嵁
-     * @return 缂撳瓨鐨勫璞�
-     */
-    public <T> ListOperations<String, T> setCacheList(String key, List<T> dataList)
-    {
-        ListOperations listOperation = redisTemplate.opsForList();
-        if (null != dataList)
-        {
-            int size = dataList.size();
-            for (int i = 0; i < size; i++)
-            {
-                listOperation.leftPush(key, dataList.get(i));
-            }
-        }
-        return listOperation;
-    }
-
-    /**
-     * 鑾峰緱缂撳瓨鐨刲ist瀵硅薄
-     *
-     * @param key 缂撳瓨鐨勯敭鍊�
-     * @return 缂撳瓨閿�煎搴旂殑鏁版嵁
-     */
-    public <T> List<T> getCacheList(String key)
-    {
-        List<T> dataList = new ArrayList<T>();
-        ListOperations<String, T> listOperation = redisTemplate.opsForList();
-        Long size = listOperation.size(key);
-
-        for (int i = 0; i < size; i++)
-        {
-            dataList.add(listOperation.index(key, i));
-        }
-        return dataList;
-    }
-
-    /**
-     * 缂撳瓨Set
-     *
-     * @param key 缂撳瓨閿��
-     * @param dataSet 缂撳瓨鐨勬暟鎹�
-     * @return 缂撳瓨鏁版嵁鐨勫璞�
-     */
-    public <T> BoundSetOperations<String, T> setCacheSet(String key, Set<T> dataSet)
-    {
-        BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
-        Iterator<T> it = dataSet.iterator();
-        while (it.hasNext())
-        {
-            setOperation.add(it.next());
-        }
-        return setOperation;
-    }
-
-    /**
-     * 鑾峰緱缂撳瓨鐨剆et
-     *
-     * @param key
-     * @return
-     */
-    public <T> Set<T> getCacheSet(String key)
-    {
-        Set<T> dataSet = new HashSet<T>();
-        BoundSetOperations<String, T> operation = redisTemplate.boundSetOps(key);
-        dataSet = operation.members();
-        return dataSet;
-    }
-
-    /**
-     * 缂撳瓨Map
-     *
-     * @param key
-     * @param dataMap
-     * @return
-     */
-    public <T> HashOperations<String, String, T> setCacheMap(String key, Map<String, T> dataMap)
-    {
-        HashOperations hashOperations = redisTemplate.opsForHash();
-        if (null != dataMap)
-        {
-            for (Map.Entry<String, T> entry : dataMap.entrySet())
-            {
-                hashOperations.put(key, entry.getKey(), entry.getValue());
-            }
-        }
-        return hashOperations;
-    }
-
-    /**
-     * 鑾峰緱缂撳瓨鐨凪ap
-     *
-     * @param key
-     * @return
-     */
-    public <T> Map<String, T> getCacheMap(String key)
-    {
-        Map<String, T> map = redisTemplate.opsForHash().entries(key);
-        return map;
-    }
-
-    /**
-     * 鑾峰緱缂撳瓨鐨勫熀鏈璞″垪琛�
-     * 
-     * @param pattern 瀛楃涓插墠缂�
-     * @return 瀵硅薄鍒楄〃
-     */
-    public Collection<String> keys(String pattern)
-    {
-        return redisTemplate.keys(pattern);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/security/LoginUser.java b/basic/src/main/java/com/dingzhuo/energy/framework/security/LoginUser.java
deleted file mode 100644
index e7e9b0c..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/security/LoginUser.java
+++ /dev/null
@@ -1,228 +0,0 @@
-package com.dingzhuo.energy.framework.security;
-
-import java.util.Collection;
-import java.util.Set;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.userdetails.UserDetails;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.dingzhuo.energy.project.system.domain.SysUser;
-
-/**
- * 鐧诲綍鐢ㄦ埛韬唤鏉冮檺
- * 
- * @author ruoyi
- */
-public class LoginUser implements UserDetails
-{
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 鐢ㄦ埛鍞竴鏍囪瘑
-     */
-    private String token;
-
-    /**
-     * 鐧婚檰鏃堕棿
-     */
-    private Long loginTime;
-
-    /**
-     * 杩囨湡鏃堕棿
-     */
-    private Long expireTime;
-
-    /**
-     * 鐧诲綍IP鍦板潃
-     */
-    private String ipaddr;
-
-    /**
-     * 鐧诲綍鍦扮偣
-     */
-    private String loginLocation;
-
-    /**
-     * 娴忚鍣ㄧ被鍨�
-     */
-    private String browser;
-
-    /**
-     * 鎿嶄綔绯荤粺
-     */
-    private String os;
-
-    /**
-     * 鏉冮檺鍒楄〃
-     */
-    private Set<String> permissions;
-
-    /**
-     * 鐢ㄦ埛淇℃伅
-     */
-    private SysUser user;
-
-    public String getToken()
-    {
-        return token;
-    }
-
-    public void setToken(String token)
-    {
-        this.token = token;
-    }
-
-    public LoginUser()
-    {
-    }
-
-    public LoginUser(SysUser user, Set<String> permissions)
-    {
-        this.user = user;
-        this.permissions = permissions;
-    }
-
-    @JsonIgnore
-    @Override
-    public String getPassword()
-    {
-        return user.getPassword();
-    }
-
-    @Override
-    public String getUsername()
-    {
-        return user.getUserName();
-    }
-
-    /**
-     * 璐︽埛鏄惁鏈繃鏈�,杩囨湡鏃犳硶楠岃瘉
-     */
-    @JsonIgnore
-    @Override
-    public boolean isAccountNonExpired()
-    {
-        return true;
-    }
-
-    /**
-     * 鎸囧畾鐢ㄦ埛鏄惁瑙i攣,閿佸畾鐨勭敤鎴锋棤娉曡繘琛岃韩浠介獙璇�
-     * 
-     * @return
-     */
-    @JsonIgnore
-    @Override
-    public boolean isAccountNonLocked()
-    {
-        return true;
-    }
-
-    /**
-     * 鎸囩ず鏄惁宸茶繃鏈熺殑鐢ㄦ埛鐨勫嚟鎹�(瀵嗙爜),杩囨湡鐨勫嚟鎹槻姝㈣璇�
-     * 
-     * @return
-     */
-    @JsonIgnore
-    @Override
-    public boolean isCredentialsNonExpired()
-    {
-        return true;
-    }
-
-    /**
-     * 鏄惁鍙敤 ,绂佺敤鐨勭敤鎴蜂笉鑳借韩浠介獙璇�
-     * 
-     * @return
-     */
-    @JsonIgnore
-    @Override
-    public boolean isEnabled()
-    {
-        return true;
-    }
-
-    public Long getLoginTime()
-    {
-        return loginTime;
-    }
-
-    public void setLoginTime(Long loginTime)
-    {
-        this.loginTime = loginTime;
-    }
-
-    public String getIpaddr()
-    {
-        return ipaddr;
-    }
-
-    public void setIpaddr(String ipaddr)
-    {
-        this.ipaddr = ipaddr;
-    }
-
-    public String getLoginLocation()
-    {
-        return loginLocation;
-    }
-
-    public void setLoginLocation(String loginLocation)
-    {
-        this.loginLocation = loginLocation;
-    }
-
-    public String getBrowser()
-    {
-        return browser;
-    }
-
-    public void setBrowser(String browser)
-    {
-        this.browser = browser;
-    }
-
-    public String getOs()
-    {
-        return os;
-    }
-
-    public void setOs(String os)
-    {
-        this.os = os;
-    }
-
-    public Long getExpireTime()
-    {
-        return expireTime;
-    }
-
-    public void setExpireTime(Long expireTime)
-    {
-        this.expireTime = expireTime;
-    }
-
-    public Set<String> getPermissions()
-    {
-        return permissions;
-    }
-
-    public void setPermissions(Set<String> permissions)
-    {
-        this.permissions = permissions;
-    }
-
-    public SysUser getUser()
-    {
-        return user;
-    }
-
-    public void setUser(SysUser user)
-    {
-        this.user = user;
-    }
-
-    @Override
-    public Collection<? extends GrantedAuthority> getAuthorities()
-    {
-        return null;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/security/filter/JwtAuthenticationTokenFilter.java b/basic/src/main/java/com/dingzhuo/energy/framework/security/filter/JwtAuthenticationTokenFilter.java
deleted file mode 100644
index 6a157ee..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/security/filter/JwtAuthenticationTokenFilter.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.dingzhuo.energy.framework.security.filter;
-
-import java.io.IOException;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
-import org.springframework.stereotype.Component;
-import org.springframework.web.filter.OncePerRequestFilter;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-
-/**
- * token杩囨护鍣� 楠岃瘉token鏈夋晥鎬�
- * 
- * @author ruoyi
- */
-@Component
-public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
-{
-    @Autowired
-    private TokenService tokenService;
-
-    @Override
-    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
-            throws ServletException, IOException
-    {
-        LoginUser loginUser = tokenService.getLoginUser(request);
-        if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication()))
-        {
-            tokenService.verifyToken(loginUser);
-            UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());
-            authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
-            SecurityContextHolder.getContext().setAuthentication(authenticationToken);
-        }
-        chain.doFilter(request, response);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/security/handle/AuthenticationEntryPointImpl.java b/basic/src/main/java/com/dingzhuo/energy/framework/security/handle/AuthenticationEntryPointImpl.java
deleted file mode 100644
index 7a0bb3a..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/security/handle/AuthenticationEntryPointImpl.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.dingzhuo.energy.framework.security.handle;
-
-import java.io.IOException;
-import java.io.Serializable;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.web.AuthenticationEntryPoint;
-import org.springframework.stereotype.Component;
-import com.alibaba.fastjson.JSON;
-import com.dingzhuo.energy.common.constant.HttpStatus;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-
-/**
- * 璁よ瘉澶辫触澶勭悊绫� 杩斿洖鏈巿鏉�
- * 
- * @author ruoyi
- */
-@Component
-public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, Serializable
-{
-    private static final long serialVersionUID = -8970718410437077606L;
-
-    @Override
-    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e)
-            throws IOException
-    {
-        int code = HttpStatus.UNAUTHORIZED;
-        String msg = StringUtils.format("璇锋眰璁块棶锛歿}锛岃璇佸け璐ワ紝鏃犳硶璁块棶绯荤粺璧勬簮", request.getRequestURI());
-        ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(code, msg)));
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/security/handle/LogoutSuccessHandlerImpl.java b/basic/src/main/java/com/dingzhuo/energy/framework/security/handle/LogoutSuccessHandlerImpl.java
deleted file mode 100644
index 027f6aa..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/security/handle/LogoutSuccessHandlerImpl.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.dingzhuo.energy.framework.security.handle;
-
-import java.io.IOException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
-import com.alibaba.fastjson.JSON;
-import com.dingzhuo.energy.common.constant.Constants;
-import com.dingzhuo.energy.common.constant.HttpStatus;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.manager.AsyncManager;
-import com.dingzhuo.energy.framework.manager.factory.AsyncFactory;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-
-/**
- * 鑷畾涔夐��鍑哄鐞嗙被 杩斿洖鎴愬姛
- * 
- * @author ruoyi
- */
-@Configuration
-public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler
-{
-    @Autowired
-    private TokenService tokenService;
-
-    /**
-     * 閫�鍑哄鐞�
-     * 
-     * @return
-     */
-    @Override
-    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
-            throws IOException, ServletException
-    {
-        LoginUser loginUser = tokenService.getLoginUser(request);
-        if (StringUtils.isNotNull(loginUser))
-        {
-            String userName = loginUser.getUsername();
-            // 鍒犻櫎鐢ㄦ埛缂撳瓨璁板綍
-            tokenService.delLoginUser(loginUser.getToken());
-            // 璁板綍鐢ㄦ埛閫�鍑烘棩蹇�
-            AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "閫�鍑烘垚鍔�"));
-        }
-        ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(HttpStatus.SUCCESS, "閫�鍑烘垚鍔�")));
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/security/service/PermissionService.java b/basic/src/main/java/com/dingzhuo/energy/framework/security/service/PermissionService.java
deleted file mode 100644
index 04f8f80..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/security/service/PermissionService.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package com.dingzhuo.energy.framework.security.service;
-
-import java.util.Set;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.project.system.domain.SysRole;
-
-/**
- * RuoYi棣栧垱 鑷畾涔夋潈闄愬疄鐜帮紝ss鍙栬嚜SpringSecurity棣栧瓧姣�
- * 
- * @author ruoyi
- */
-@Service("ss")
-public class PermissionService
-{
-    /** 鎵�鏈夋潈闄愭爣璇� */
-    private static final String ALL_PERMISSION = "*:*:*";
-
-    /** 绠$悊鍛樿鑹叉潈闄愭爣璇� */
-    private static final String SUPER_ADMIN = "admin";
-
-    private static final String ROLE_DELIMETER = ",";
-
-    private static final String PERMISSION_DELIMETER = ",";
-
-    @Autowired
-    private TokenService tokenService;
-
-    /**
-     * 楠岃瘉鐢ㄦ埛鏄惁鍏峰鏌愭潈闄�
-     * 
-     * @param permission 鏉冮檺瀛楃涓�
-     * @return 鐢ㄦ埛鏄惁鍏峰鏌愭潈闄�
-     */
-    public boolean hasPermi(String permission)
-    {
-        if (StringUtils.isEmpty(permission))
-        {
-            return false;
-        }
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getPermissions()))
-        {
-            return false;
-        }
-        return hasPermissions(loginUser.getPermissions(), permission);
-    }
-
-    /**
-     * 楠岃瘉鐢ㄦ埛鏄惁涓嶅叿澶囨煇鏉冮檺锛屼笌 hasPermi閫昏緫鐩稿弽
-     *
-     * @param permission 鏉冮檺瀛楃涓�
-     * @return 鐢ㄦ埛鏄惁涓嶅叿澶囨煇鏉冮檺
-     */
-    public boolean lacksPermi(String permission)
-    {
-        return hasPermi(permission) != true;
-    }
-
-    /**
-     * 楠岃瘉鐢ㄦ埛鏄惁鍏锋湁浠ヤ笅浠绘剰涓�涓潈闄�
-     *
-     * @param permissions 浠� PERMISSION_NAMES_DELIMETER 涓哄垎闅旂鐨勬潈闄愬垪琛�
-     * @return 鐢ㄦ埛鏄惁鍏锋湁浠ヤ笅浠绘剰涓�涓潈闄�
-     */
-    public boolean hasAnyPermi(String permissions)
-    {
-        if (StringUtils.isEmpty(permissions))
-        {
-            return false;
-        }
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getPermissions()))
-        {
-            return false;
-        }
-        Set<String> authorities = loginUser.getPermissions();
-        for (String permission : permissions.split(PERMISSION_DELIMETER))
-        {
-            if (permission != null && hasPermissions(authorities, permission))
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * 鍒ゆ柇鐢ㄦ埛鏄惁鎷ユ湁鏌愪釜瑙掕壊
-     * 
-     * @param role 瑙掕壊瀛楃涓�
-     * @return 鐢ㄦ埛鏄惁鍏峰鏌愯鑹�
-     */
-    public boolean hasRole(String role)
-    {
-        if (StringUtils.isEmpty(role))
-        {
-            return false;
-        }
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getUser().getRoles()))
-        {
-            return false;
-        }
-        for (SysRole sysRole : loginUser.getUser().getRoles())
-        {
-            String roleKey = sysRole.getRoleKey();
-            if (SUPER_ADMIN.contains(roleKey) || roleKey.contains(StringUtils.trim(role)))
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * 楠岃瘉鐢ㄦ埛鏄惁涓嶅叿澶囨煇瑙掕壊锛屼笌 isRole閫昏緫鐩稿弽銆�
-     *
-     * @param role 瑙掕壊鍚嶇О
-     * @return 鐢ㄦ埛鏄惁涓嶅叿澶囨煇瑙掕壊
-     */
-    public boolean lacksRole(String role)
-    {
-        return hasRole(role) != true;
-    }
-
-    /**
-     * 楠岃瘉鐢ㄦ埛鏄惁鍏锋湁浠ヤ笅浠绘剰涓�涓鑹�
-     *
-     * @param roles 浠� ROLE_NAMES_DELIMETER 涓哄垎闅旂鐨勮鑹插垪琛�
-     * @return 鐢ㄦ埛鏄惁鍏锋湁浠ヤ笅浠绘剰涓�涓鑹�
-     */
-    public boolean hasAnyRoles(String roles)
-    {
-        if (StringUtils.isEmpty(roles))
-        {
-            return false;
-        }
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getUser().getRoles()))
-        {
-            return false;
-        }
-        for (String role : roles.split(ROLE_DELIMETER))
-        {
-            if (hasRole(role))
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * 鍒ゆ柇鏄惁鍖呭惈鏉冮檺
-     * 
-     * @param permissions 鏉冮檺鍒楄〃
-     * @param permission 鏉冮檺瀛楃涓�
-     * @return 鐢ㄦ埛鏄惁鍏峰鏌愭潈闄�
-     */
-    private boolean hasPermissions(Set<String> permissions, String permission)
-    {
-        //return permissions.contains(ALL_PERMISSION) || permissions.contains(StringUtils.trim(permission));
-        return true;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/security/service/SysLoginService.java b/basic/src/main/java/com/dingzhuo/energy/framework/security/service/SysLoginService.java
deleted file mode 100644
index 2d1333d..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/security/service/SysLoginService.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.dingzhuo.energy.framework.security.service;
-
-import javax.annotation.Resource;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.authentication.BadCredentialsException;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.stereotype.Component;
-import com.dingzhuo.energy.common.constant.Constants;
-import com.dingzhuo.energy.common.exception.CustomException;
-import com.dingzhuo.energy.common.exception.user.CaptchaException;
-import com.dingzhuo.energy.common.exception.user.CaptchaExpireException;
-import com.dingzhuo.energy.common.exception.user.UserPasswordNotMatchException;
-import com.dingzhuo.energy.common.utils.MessageUtils;
-import com.dingzhuo.energy.framework.manager.AsyncManager;
-import com.dingzhuo.energy.framework.manager.factory.AsyncFactory;
-import com.dingzhuo.energy.framework.redis.RedisCache;
-import com.dingzhuo.energy.framework.security.LoginUser;
-
-/**
- * 鐧诲綍鏍¢獙鏂规硶
- * 
- * @author ruoyi
- */
-@Component
-public class SysLoginService
-{
-    @Autowired
-    private TokenService tokenService;
-
-    @Resource
-    private AuthenticationManager authenticationManager;
-
-    @Autowired
-    private RedisCache redisCache;
-
-    /**
-     * 鐧诲綍楠岃瘉
-     * 
-     * @param username 鐢ㄦ埛鍚�
-     * @param password 瀵嗙爜
-     * @param captcha 楠岃瘉鐮�
-     * @param uuid 鍞竴鏍囪瘑
-     * @return 缁撴灉
-     */
-    public String login(String username, String password, String code, String uuid)
-    {
-        String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
-        String captcha = redisCache.getCacheObject(verifyKey);
-        redisCache.deleteObject(verifyKey);
-//        if (captcha == null)
-//        {
-//            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
-//            throw new CaptchaExpireException();
-//        }
-//        if (!code.equalsIgnoreCase(captcha))
-//        {
-//            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
-//            throw new CaptchaException();
-//        }
-        // 鐢ㄦ埛楠岃瘉
-        Authentication authentication = null;
-        try
-        {
-            // 璇ユ柟娉曚細鍘昏皟鐢║serDetailsServiceImpl.loadUserByUsername
-            authentication = authenticationManager
-                    .authenticate(new UsernamePasswordAuthenticationToken(username, password));
-        }
-        catch (Exception e)
-        {
-            if (e instanceof BadCredentialsException)
-            {
-                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
-                throw new UserPasswordNotMatchException();
-            }
-            else
-            {
-                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
-                throw new CustomException(e.getMessage());
-            }
-        }
-        AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
-        LoginUser loginUser = (LoginUser) authentication.getPrincipal();
-        // 鐢熸垚token
-        return tokenService.createToken(loginUser);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/security/service/SysPermissionService.java b/basic/src/main/java/com/dingzhuo/energy/framework/security/service/SysPermissionService.java
deleted file mode 100644
index 184af97..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/security/service/SysPermissionService.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.dingzhuo.energy.framework.security.service;
-
-import java.util.HashSet;
-import java.util.Set;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import com.dingzhuo.energy.project.system.domain.SysUser;
-import com.dingzhuo.energy.project.system.service.ISysMenuService;
-import com.dingzhuo.energy.project.system.service.ISysRoleService;
-
-/**
- * 鐢ㄦ埛鏉冮檺澶勭悊
- * 
- * @author ruoyi
- */
-@Component
-public class SysPermissionService
-{
-    @Autowired
-    private ISysRoleService roleService;
-
-    @Autowired
-    private ISysMenuService menuService;
-
-    /**
-     * 鑾峰彇瑙掕壊鏁版嵁鏉冮檺
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 瑙掕壊鏉冮檺淇℃伅
-     */
-    public Set<String> getRolePermission(SysUser user)
-    {
-        Set<String> roles = new HashSet<String>();
-        // 绠$悊鍛樻嫢鏈夋墍鏈夋潈闄�
-        if (user.isAdmin())
-        {
-            roles.add("admin");
-        }
-        else
-        {
-            roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId()));
-        }
-        return roles;
-    }
-
-    /**
-     * 鑾峰彇鑿滃崟鏁版嵁鏉冮檺
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 鑿滃崟鏉冮檺淇℃伅
-     */
-    public Set<String> getMenuPermission(SysUser user)
-    {
-        Set<String> roles = new HashSet<String>();
-        // 绠$悊鍛樻嫢鏈夋墍鏈夋潈闄�
-        if (user.isAdmin())
-        {
-            roles.add("*:*:*");
-        }
-        else
-        {
-            roles.addAll(menuService.selectMenuPermsByUserId(user.getUserId()));
-        }
-        return roles;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/security/service/TokenService.java b/basic/src/main/java/com/dingzhuo/energy/framework/security/service/TokenService.java
deleted file mode 100644
index 6f45655..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/security/service/TokenService.java
+++ /dev/null
@@ -1,220 +0,0 @@
-package com.dingzhuo.energy.framework.security.service;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-import javax.servlet.http.HttpServletRequest;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-import com.dingzhuo.energy.common.constant.Constants;
-import com.dingzhuo.energy.common.utils.IdUtils;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.ip.AddressUtils;
-import com.dingzhuo.energy.common.utils.ip.IpUtils;
-import com.dingzhuo.energy.framework.redis.RedisCache;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import eu.bitwalker.useragentutils.UserAgent;
-import io.jsonwebtoken.Claims;
-import io.jsonwebtoken.Jwts;
-import io.jsonwebtoken.SignatureAlgorithm;
-
-/**
- * token楠岃瘉澶勭悊
- * 
- * @author ruoyi
- */
-@Component
-public class TokenService
-{
-    // 浠ょ墝鑷畾涔夋爣璇�
-    @Value("${token.header}")
-    private String header;
-
-    // 浠ょ墝绉橀挜
-    @Value("${token.secret}")
-    private String secret;
-
-    // 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛�
-    @Value("${token.expireTime}")
-    private int expireTime;
-
-    protected static final long MILLIS_SECOND = 1000;
-
-    protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND;
-
-    private static final Long MILLIS_MINUTE_TEN = 20 * 60 * 1000L;
-
-    @Autowired
-    private RedisCache redisCache;
-
-    /**
-     * 鑾峰彇鐢ㄦ埛韬唤淇℃伅
-     * 
-     * @return 鐢ㄦ埛淇℃伅
-     */
-    public LoginUser getLoginUser(HttpServletRequest request)
-    {
-        // 鑾峰彇璇锋眰鎼哄甫鐨勪护鐗�
-        String token = getToken(request);
-        if (StringUtils.isNotEmpty(token))
-        {
-            Claims claims = parseToken(token);
-            // 瑙f瀽瀵瑰簲鐨勬潈闄愪互鍙婄敤鎴蜂俊鎭�
-            String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
-            String userKey = getTokenKey(uuid);
-            LoginUser user = redisCache.getCacheObject(userKey);
-            return user;
-        }
-        return null;
-    }
-
-    /**
-     * 璁剧疆鐢ㄦ埛韬唤淇℃伅
-     */
-    public void setLoginUser(LoginUser loginUser)
-    {
-        if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken()))
-        {
-            String userKey = getTokenKey(loginUser.getToken());
-            redisCache.setCacheObject(userKey, loginUser);
-        }
-    }
-
-    /**
-     * 鍒犻櫎鐢ㄦ埛韬唤淇℃伅
-     */
-    public void delLoginUser(String token)
-    {
-        if (StringUtils.isNotEmpty(token))
-        {
-            String userKey = getTokenKey(token);
-            redisCache.deleteObject(userKey);
-        }
-    }
-
-    /**
-     * 鍒涘缓浠ょ墝
-     * 
-     * @param loginUser 鐢ㄦ埛淇℃伅
-     * @return 浠ょ墝
-     */
-    public String createToken(LoginUser loginUser)
-    {
-        String token = IdUtils.fastUUID();
-        loginUser.setToken(token);
-        setUserAgent(loginUser);
-        refreshToken(loginUser);
-
-        Map<String, Object> claims = new HashMap<>();
-        claims.put(Constants.LOGIN_USER_KEY, token);
-        return createToken(claims);
-    }
-
-    /**
-     * 楠岃瘉浠ょ墝鏈夋晥鏈燂紝鐩稿樊涓嶈冻20鍒嗛挓锛岃嚜鍔ㄥ埛鏂扮紦瀛�
-     * 
-     * @param token 浠ょ墝
-     * @return 浠ょ墝
-     */
-    public void verifyToken(LoginUser loginUser)
-    {
-        long expireTime = loginUser.getExpireTime();
-        long currentTime = System.currentTimeMillis();
-        if (expireTime - currentTime <= MILLIS_MINUTE_TEN)
-        {
-            refreshToken(loginUser);
-        }
-    }
-
-    /**
-     * 鍒锋柊浠ょ墝鏈夋晥鏈�
-     * 
-     * @param loginUser 鐧诲綍淇℃伅
-     */
-    public void refreshToken(LoginUser loginUser)
-    {
-        loginUser.setLoginTime(System.currentTimeMillis());
-        loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
-        // 鏍规嵁uuid灏唋oginUser缂撳瓨
-        String userKey = getTokenKey(loginUser.getToken());
-        redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
-    }
-    
-    /**
-     * 璁剧疆鐢ㄦ埛浠g悊淇℃伅
-     * 
-     * @param loginUser 鐧诲綍淇℃伅
-     */
-    public void setUserAgent(LoginUser loginUser)
-    {
-        UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
-        String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
-        loginUser.setIpaddr(ip);
-        loginUser.setLoginLocation(AddressUtils.getRealAddressByIP(ip));
-        loginUser.setBrowser(userAgent.getBrowser().getName());
-        loginUser.setOs(userAgent.getOperatingSystem().getName());
-    }
-    
-    /**
-     * 浠庢暟鎹0鏄庣敓鎴愪护鐗�
-     *
-     * @param claims 鏁版嵁澹版槑
-     * @return 浠ょ墝
-     */
-    private String createToken(Map<String, Object> claims)
-    {
-        String token = Jwts.builder()
-                .setClaims(claims)
-                .signWith(SignatureAlgorithm.HS512, secret).compact();
-        return token;
-    }
-
-    /**
-     * 浠庝护鐗屼腑鑾峰彇鏁版嵁澹版槑
-     *
-     * @param token 浠ょ墝
-     * @return 鏁版嵁澹版槑
-     */
-    private Claims parseToken(String token)
-    {
-        return Jwts.parser()
-                .setSigningKey(secret)
-                .parseClaimsJws(token)
-                .getBody();
-    }
-
-    /**
-     * 浠庝护鐗屼腑鑾峰彇鐢ㄦ埛鍚�
-     *
-     * @param token 浠ょ墝
-     * @return 鐢ㄦ埛鍚�
-     */
-    public String getUsernameFromToken(String token)
-    {
-        Claims claims = parseToken(token);
-        return claims.getSubject();
-    }
-
-    /**
-     * 鑾峰彇璇锋眰token
-     *
-     * @param request
-     * @return token
-     */
-    private String getToken(HttpServletRequest request)
-    {
-        String token = request.getHeader(header);
-        if (StringUtils.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX))
-        {
-            token = token.replace(Constants.TOKEN_PREFIX, "");
-        }
-        return token;
-    }
-
-    private String getTokenKey(String uuid)
-    {
-        return Constants.LOGIN_TOKEN_KEY + uuid;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/security/service/UserDetailsServiceImpl.java b/basic/src/main/java/com/dingzhuo/energy/framework/security/service/UserDetailsServiceImpl.java
deleted file mode 100644
index 0bf5a54..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/security/service/UserDetailsServiceImpl.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.dingzhuo.energy.framework.security.service;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.common.enums.UserStatus;
-import com.dingzhuo.energy.common.exception.BaseException;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.project.system.domain.SysUser;
-import com.dingzhuo.energy.project.system.service.ISysUserService;
-
-/**
- * 鐢ㄦ埛楠岃瘉澶勭悊
- *
- * @author ruoyi
- */
-@Service
-public class UserDetailsServiceImpl implements UserDetailsService
-{
-    private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class);
-
-    @Autowired
-    private ISysUserService userService;
-
-    @Autowired
-    private SysPermissionService permissionService;
-
-    @Override
-    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
-    {
-        SysUser user = userService.selectUserByUserName(username);
-        if (StringUtils.isNull(user))
-        {
-            log.info("鐧诲綍鐢ㄦ埛锛歿} 涓嶅瓨鍦�.", username);
-            throw new UsernameNotFoundException("鐧诲綍鐢ㄦ埛锛�" + username + " 涓嶅瓨鍦�");
-        }
-        else if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
-        {
-            log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍒犻櫎.", username);
-            throw new BaseException("瀵逛笉璧凤紝鎮ㄧ殑璐﹀彿锛�" + username + " 宸茶鍒犻櫎");
-        }
-        else if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
-        {
-            log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍋滅敤.", username);
-            throw new BaseException("瀵逛笉璧凤紝鎮ㄧ殑璐﹀彿锛�" + username + " 宸插仠鐢�");
-        }
-
-        return createLoginUser(user);
-    }
-
-    public UserDetails createLoginUser(SysUser user)
-    {
-        return new LoginUser(user, permissionService.getMenuPermission(user));
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/web/controller/BaseController.java b/basic/src/main/java/com/dingzhuo/energy/framework/web/controller/BaseController.java
deleted file mode 100644
index 687a435..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/web/controller/BaseController.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.dingzhuo.energy.framework.web.controller;
-
-import java.beans.PropertyEditorSupport;
-import java.util.Date;
-import java.util.List;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.web.bind.WebDataBinder;
-import org.springframework.web.bind.annotation.InitBinder;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import com.dingzhuo.energy.common.constant.HttpStatus;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.sql.SqlUtil;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.PageDomain;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.framework.web.page.TableSupport;
-
-/**
- * web灞傞�氱敤鏁版嵁澶勭悊
- * 
- * @author ruoyi
- */
-public class BaseController
-{
-    protected final Logger logger = LoggerFactory.getLogger(BaseController.class);
-
-    /**
-     * 灏嗗墠鍙颁紶閫掕繃鏉ョ殑鏃ユ湡鏍煎紡鐨勫瓧绗︿覆锛岃嚜鍔ㄨ浆鍖栦负Date绫诲瀷
-     */
-    @InitBinder
-    public void initBinder(WebDataBinder binder)
-    {
-        // Date 绫诲瀷杞崲
-        binder.registerCustomEditor(Date.class, new PropertyEditorSupport()
-        {
-            @Override
-            public void setAsText(String text)
-            {
-                setValue(DateUtils.parseDate(text));
-            }
-        });
-    }
-
-    /**
-     * 璁剧疆璇锋眰鍒嗛〉鏁版嵁
-     */
-    protected void startPage()
-    {
-        PageDomain pageDomain = TableSupport.buildPageRequest();
-        Integer pageNum = pageDomain.getPageNum();
-        Integer pageSize = pageDomain.getPageSize();
-        if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize))
-        {
-            String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
-            PageHelper.startPage(pageNum, pageSize, orderBy);
-        }
-    }
-
-    /**
-     * 鍝嶅簲璇锋眰鍒嗛〉鏁版嵁
-     */
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    protected TableDataInfo getDataTable(List<?> list)
-    {
-        TableDataInfo rspData = new TableDataInfo();
-        rspData.setCode(HttpStatus.SUCCESS);
-        rspData.setRows(list);
-        rspData.setTotal(new PageInfo(list).getTotal());
-        return rspData;
-    }
-
-    /**
-     * 鍝嶅簲杩斿洖缁撴灉
-     * 
-     * @param rows 褰卞搷琛屾暟
-     * @return 鎿嶄綔缁撴灉
-     */
-    protected AjaxResult toAjax(int rows)
-    {
-        return rows > 0 ? AjaxResult.success() : AjaxResult.error();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/AjaxResult.java b/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/AjaxResult.java
deleted file mode 100644
index ba9f73c..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/AjaxResult.java
+++ /dev/null
@@ -1,148 +0,0 @@
-package com.dingzhuo.energy.framework.web.domain;
-
-import java.util.HashMap;
-import com.dingzhuo.energy.common.constant.HttpStatus;
-import com.dingzhuo.energy.common.utils.StringUtils;
-
-/**
- * 鎿嶄綔娑堟伅鎻愰啋
- * 
- * @author ruoyi
- */
-public class AjaxResult extends HashMap<String, Object>
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 鐘舵�佺爜 */
-    public static final String CODE_TAG = "code";
-
-    /** 杩斿洖鍐呭 */
-    public static final String MSG_TAG = "msg";
-
-    /** 鏁版嵁瀵硅薄 */
-    public static final String DATA_TAG = "data";
-
-    /**
-     * 鍒濆鍖栦竴涓柊鍒涘缓鐨� AjaxResult 瀵硅薄锛屼娇鍏惰〃绀轰竴涓┖娑堟伅銆�
-     */
-    public AjaxResult()
-    {
-    }
-
-    /**
-     * 鍒濆鍖栦竴涓柊鍒涘缓鐨� AjaxResult 瀵硅薄
-     * 
-     * @param code 鐘舵�佺爜
-     * @param msg 杩斿洖鍐呭
-     */
-    public AjaxResult(int code, String msg)
-    {
-        super.put(CODE_TAG, code);
-        super.put(MSG_TAG, msg);
-    }
-
-    /**
-     * 鍒濆鍖栦竴涓柊鍒涘缓鐨� AjaxResult 瀵硅薄
-     * 
-     * @param code 鐘舵�佺爜
-     * @param msg 杩斿洖鍐呭
-     * @param data 鏁版嵁瀵硅薄
-     */
-    public AjaxResult(int code, String msg, Object data)
-    {
-        super.put(CODE_TAG, code);
-        super.put(MSG_TAG, msg);
-        if (StringUtils.isNotNull(data))
-        {
-            super.put(DATA_TAG, data);
-        }
-    }
-
-    /**
-     * 杩斿洖鎴愬姛娑堟伅
-     * 
-     * @return 鎴愬姛娑堟伅
-     */
-    public static AjaxResult success()
-    {
-        return AjaxResult.success("鎿嶄綔鎴愬姛");
-    }
-
-    /**
-     * 杩斿洖鎴愬姛鏁版嵁
-     * 
-     * @return 鎴愬姛娑堟伅
-     */
-    public static AjaxResult success(Object data)
-    {
-        return AjaxResult.success("鎿嶄綔鎴愬姛", data);
-    }
-
-    /**
-     * 杩斿洖鎴愬姛娑堟伅
-     * 
-     * @param msg 杩斿洖鍐呭
-     * @return 鎴愬姛娑堟伅
-     */
-    public static AjaxResult success(String msg)
-    {
-        return AjaxResult.success(msg, null);
-    }
-
-    /**
-     * 杩斿洖鎴愬姛娑堟伅
-     * 
-     * @param msg 杩斿洖鍐呭
-     * @param data 鏁版嵁瀵硅薄
-     * @return 鎴愬姛娑堟伅
-     */
-    public static AjaxResult success(String msg, Object data)
-    {
-        return new AjaxResult(HttpStatus.SUCCESS, msg, data);
-    }
-
-    /**
-     * 杩斿洖閿欒娑堟伅
-     * 
-     * @return
-     */
-    public static AjaxResult error()
-    {
-        return AjaxResult.error("鎿嶄綔澶辫触");
-    }
-
-    /**
-     * 杩斿洖閿欒娑堟伅
-     * 
-     * @param msg 杩斿洖鍐呭
-     * @return 璀﹀憡娑堟伅
-     */
-    public static AjaxResult error(String msg)
-    {
-        return AjaxResult.error(msg, null);
-    }
-
-    /**
-     * 杩斿洖閿欒娑堟伅
-     * 
-     * @param msg 杩斿洖鍐呭
-     * @param data 鏁版嵁瀵硅薄
-     * @return 璀﹀憡娑堟伅
-     */
-    public static AjaxResult error(String msg, Object data)
-    {
-        return new AjaxResult(HttpStatus.ERROR, msg, data);
-    }
-
-    /**
-     * 杩斿洖閿欒娑堟伅
-     * 
-     * @param code 鐘舵�佺爜
-     * @param msg 杩斿洖鍐呭
-     * @return 璀﹀憡娑堟伅
-     */
-    public static AjaxResult error(int code, String msg)
-    {
-        return new AjaxResult(code, msg, null);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/BaseEntity.java b/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/BaseEntity.java
deleted file mode 100644
index b074aa1..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/BaseEntity.java
+++ /dev/null
@@ -1,168 +0,0 @@
-package com.dingzhuo.energy.framework.web.domain;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import io.swagger.annotations.ApiModelProperty;
-import io.swagger.annotations.ApiOperation;
-
-/**
- * Entity鍩虹被
- *
- * @author ruoyi
- */
-public class BaseEntity implements Serializable
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 鎼滅储鍊� */
-    @ApiModelProperty(value = "鎼滅储鍊�")
-    private String searchValue;
-
-    /** 鍒涘缓鑰� */
-    @ApiModelProperty(value = "鍒涘缓鑰�")
-    private String createBy;
-
-    /** 鍒涘缓鏃堕棿 */
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
-
-    /** 鏇存柊鑰� */
-    @ApiModelProperty(value = "鏇存柊鑰�")
-    private String updateBy;
-
-    /** 鏇存柊鏃堕棿 */
-    @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date updateTime;
-
-    /** 澶囨敞 */
-    @ApiModelProperty(value = "澶囨敞")
-    private String remark;
-
-    /** 鏁版嵁鏉冮檺 */
-    @ApiModelProperty(value = "鏁版嵁鏉冮檺")
-    private String dataScope;
-
-    /** 寮�濮嬫椂闂� */
-    @ApiModelProperty(value = "寮�濮嬫椂闂�")
-    @JsonIgnore
-    private String beginTime;
-
-    /** 缁撴潫鏃堕棿 */
-    @ApiModelProperty(value = "缁撴潫鏃堕棿")
-    @JsonIgnore
-    private String endTime;
-
-    /** 璇锋眰鍙傛暟 */
-    @ApiModelProperty(value = "璇锋眰鍙傛暟")
-    private Map<String, Object> params;
-
-    public String getSearchValue()
-    {
-        return searchValue;
-    }
-
-    public void setSearchValue(String searchValue)
-    {
-        this.searchValue = searchValue;
-    }
-
-    public String getCreateBy()
-    {
-        return createBy;
-    }
-
-    public void setCreateBy(String createBy)
-    {
-        this.createBy = createBy;
-    }
-
-    public Date getCreateTime()
-    {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime)
-    {
-        this.createTime = createTime;
-    }
-
-    public String getUpdateBy()
-    {
-        return updateBy;
-    }
-
-    public void setUpdateBy(String updateBy)
-    {
-        this.updateBy = updateBy;
-    }
-
-    public Date getUpdateTime()
-    {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Date updateTime)
-    {
-        this.updateTime = updateTime;
-    }
-
-    public String getRemark()
-    {
-        return remark;
-    }
-
-    public void setRemark(String remark)
-    {
-        this.remark = remark;
-    }
-
-    public String getDataScope()
-    {
-        return dataScope;
-    }
-
-    public void setDataScope(String dataScope)
-    {
-        this.dataScope = dataScope;
-    }
-
-    public String getBeginTime()
-    {
-        return beginTime;
-    }
-
-    public void setBeginTime(String beginTime)
-    {
-        this.beginTime = beginTime;
-    }
-
-    public String getEndTime()
-    {
-        return endTime;
-    }
-
-    public void setEndTime(String endTime)
-    {
-        this.endTime = endTime;
-    }
-
-    public Map<String, Object> getParams()
-    {
-        if (params == null)
-        {
-            params = new HashMap<>();
-        }
-        return params;
-    }
-
-    public void setParams(Map<String, Object> params)
-    {
-        this.params = params;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/Server.java b/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/Server.java
deleted file mode 100644
index 11c8048..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/Server.java
+++ /dev/null
@@ -1,245 +0,0 @@
-package com.dingzhuo.energy.framework.web.domain;
-
-import java.net.UnknownHostException;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Properties;
-
-import com.dingzhuo.energy.framework.web.domain.server.Cpu;
-import com.dingzhuo.energy.framework.web.domain.server.Jvm;
-import com.dingzhuo.energy.framework.web.domain.server.SysFile;
-import com.dingzhuo.energy.common.utils.Arith;
-import com.dingzhuo.energy.common.utils.ip.IpUtils;
-import com.dingzhuo.energy.framework.web.domain.server.Cpu;
-import com.dingzhuo.energy.framework.web.domain.server.Jvm;
-import com.dingzhuo.energy.framework.web.domain.server.Mem;
-import com.dingzhuo.energy.framework.web.domain.server.Sys;
-import com.dingzhuo.energy.framework.web.domain.server.SysFile;
-import oshi.SystemInfo;
-import oshi.hardware.CentralProcessor;
-import oshi.hardware.CentralProcessor.TickType;
-import oshi.hardware.GlobalMemory;
-import oshi.hardware.HardwareAbstractionLayer;
-import oshi.software.os.FileSystem;
-import oshi.software.os.OSFileStore;
-import oshi.software.os.OperatingSystem;
-import oshi.util.Util;
-
-/**
- * 鏈嶅姟鍣ㄧ浉鍏充俊鎭�
- * 
- * @author ruoyi
- */
-public class Server
-{
-    
-    private static final int OSHI_WAIT_SECOND = 1000;
-    
-    /**
-     * CPU鐩稿叧淇℃伅
-     */
-    private Cpu cpu = new Cpu();
-
-    /**
-     * 鍏у瓨鐩稿叧淇℃伅
-     */
-    private Mem mem = new Mem();
-
-    /**
-     * JVM鐩稿叧淇℃伅
-     */
-    private Jvm jvm = new Jvm();
-
-    /**
-     * 鏈嶅姟鍣ㄧ浉鍏充俊鎭�
-     */
-    private Sys sys = new Sys();
-
-    /**
-     * 纾佺洏鐩稿叧淇℃伅
-     */
-    private List<SysFile> sysFiles = new LinkedList<SysFile>();
-
-    public Cpu getCpu()
-    {
-        return cpu;
-    }
-
-    public void setCpu(Cpu cpu)
-    {
-        this.cpu = cpu;
-    }
-
-    public Mem getMem()
-    {
-        return mem;
-    }
-
-    public void setMem(Mem mem)
-    {
-        this.mem = mem;
-    }
-
-    public Jvm getJvm()
-    {
-        return jvm;
-    }
-
-    public void setJvm(Jvm jvm)
-    {
-        this.jvm = jvm;
-    }
-
-    public Sys getSys()
-    {
-        return sys;
-    }
-
-    public void setSys(Sys sys)
-    {
-        this.sys = sys;
-    }
-
-    public List<SysFile> getSysFiles()
-    {
-        return sysFiles;
-    }
-
-    public void setSysFiles(List<SysFile> sysFiles)
-    {
-        this.sysFiles = sysFiles;
-    }
-
-    public void copyTo() throws Exception
-    {
-        SystemInfo si = new SystemInfo();
-        HardwareAbstractionLayer hal = si.getHardware();
-
-        setCpuInfo(hal.getProcessor());
-
-        setMemInfo(hal.getMemory());
-
-        setSysInfo();
-
-        setJvmInfo();
-
-        setSysFiles(si.getOperatingSystem());
-    }
-
-    /**
-     * 璁剧疆CPU淇℃伅
-     */
-    private void setCpuInfo(CentralProcessor processor)
-    {
-        // CPU淇℃伅
-        long[] prevTicks = processor.getSystemCpuLoadTicks();
-        Util.sleep(OSHI_WAIT_SECOND);
-        long[] ticks = processor.getSystemCpuLoadTicks();
-        long nice = ticks[TickType.NICE.getIndex()] - prevTicks[TickType.NICE.getIndex()];
-        long irq = ticks[TickType.IRQ.getIndex()] - prevTicks[TickType.IRQ.getIndex()];
-        long softirq = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()];
-        long steal = ticks[TickType.STEAL.getIndex()] - prevTicks[TickType.STEAL.getIndex()];
-        long cSys = ticks[TickType.SYSTEM.getIndex()] - prevTicks[TickType.SYSTEM.getIndex()];
-        long user = ticks[TickType.USER.getIndex()] - prevTicks[TickType.USER.getIndex()];
-        long iowait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()];
-        long idle = ticks[TickType.IDLE.getIndex()] - prevTicks[TickType.IDLE.getIndex()];
-        long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;
-        cpu.setCpuNum(processor.getLogicalProcessorCount());
-        cpu.setTotal(totalCpu);
-        cpu.setSys(cSys);
-        cpu.setUsed(user);
-        cpu.setWait(iowait);
-        cpu.setFree(idle);
-    }
-
-    /**
-     * 璁剧疆鍐呭瓨淇℃伅
-     */
-    private void setMemInfo(GlobalMemory memory)
-    {
-        mem.setTotal(memory.getTotal());
-        mem.setUsed(memory.getTotal() - memory.getAvailable());
-        mem.setFree(memory.getAvailable());
-    }
-
-    /**
-     * 璁剧疆鏈嶅姟鍣ㄤ俊鎭�
-     */
-    private void setSysInfo()
-    {
-        Properties props = System.getProperties();
-        sys.setComputerName(IpUtils.getHostName());
-        sys.setComputerIp(IpUtils.getHostIp());
-        sys.setOsName(props.getProperty("os.name"));
-        sys.setOsArch(props.getProperty("os.arch"));
-        sys.setUserDir(props.getProperty("user.dir"));
-    }
-
-    /**
-     * 璁剧疆Java铏氭嫙鏈�
-     */
-    private void setJvmInfo() throws UnknownHostException
-    {
-        Properties props = System.getProperties();
-        jvm.setTotal(Runtime.getRuntime().totalMemory());
-        jvm.setMax(Runtime.getRuntime().maxMemory());
-        jvm.setFree(Runtime.getRuntime().freeMemory());
-        jvm.setVersion(props.getProperty("java.version"));
-        jvm.setHome(props.getProperty("java.home"));
-    }
-
-    /**
-     * 璁剧疆纾佺洏淇℃伅
-     */
-    private void setSysFiles(OperatingSystem os)
-    {
-        FileSystem fileSystem = os.getFileSystem();
-        OSFileStore[] fsArray = fileSystem.getFileStores();
-        for (OSFileStore fs : fsArray)
-        {
-            long free = fs.getUsableSpace();
-            long total = fs.getTotalSpace();
-            long used = total - free;
-            SysFile sysFile = new SysFile();
-            sysFile.setDirName(fs.getMount());
-            sysFile.setSysTypeName(fs.getType());
-            sysFile.setTypeName(fs.getName());
-            sysFile.setTotal(convertFileSize(total));
-            sysFile.setFree(convertFileSize(free));
-            sysFile.setUsed(convertFileSize(used));
-            sysFile.setUsage(Arith.mul(Arith.div(used, total, 4), 100));
-            sysFiles.add(sysFile);
-        }
-    }
-
-    /**
-     * 瀛楄妭杞崲
-     * 
-     * @param size 瀛楄妭澶у皬
-     * @return 杞崲鍚庡��
-     */
-    public String convertFileSize(long size)
-    {
-        long kb = 1024;
-        long mb = kb * 1024;
-        long gb = mb * 1024;
-        if (size >= gb)
-        {
-            return String.format("%.1f GB", (float) size / gb);
-        }
-        else if (size >= mb)
-        {
-            float f = (float) size / mb;
-            return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f);
-        }
-        else if (size >= kb)
-        {
-            float f = (float) size / kb;
-            return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f);
-        }
-        else
-        {
-            return String.format("%d B", size);
-        }
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/TreeSelect.java b/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/TreeSelect.java
deleted file mode 100644
index c5fb615..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/TreeSelect.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.dingzhuo.energy.framework.web.domain;
-
-import com.dingzhuo.energy.project.system.domain.SysDept;
-import com.dingzhuo.energy.project.system.domain.SysMenu;
-import com.fasterxml.jackson.annotation.JsonInclude;
-
-import java.io.Serializable;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * Treeselect鏍戠粨鏋勫疄浣撶被
- * 
- * @author ruoyi
- */
-public class TreeSelect implements Serializable
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 鑺傜偣ID */
-    private Long id;
-
-    /** 鑺傜偣鍚嶇О */
-    private String label;
-
-    /** 瀛愯妭鐐� */
-    @JsonInclude(JsonInclude.Include.NON_EMPTY)
-    private List<TreeSelect> children;
-
-    public TreeSelect()
-    {
-
-    }
-
-    public TreeSelect(SysDept dept)
-    {
-        this.id = dept.getDeptId();
-        this.label = dept.getDeptName();
-        this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
-    }
-
-    public TreeSelect(SysMenu menu)
-    {
-        this.id = menu.getMenuId();
-        this.label = menu.getMenuName();
-        this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
-    }
-
-    public Long getId()
-    {
-        return id;
-    }
-
-    public void setId(Long id)
-    {
-        this.id = id;
-    }
-
-    public String getLabel()
-    {
-        return label;
-    }
-
-    public void setLabel(String label)
-    {
-        this.label = label;
-    }
-
-    public List<TreeSelect> getChildren()
-    {
-        return children;
-    }
-
-    public void setChildren(List<TreeSelect> children)
-    {
-        this.children = children;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/server/Cpu.java b/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/server/Cpu.java
deleted file mode 100644
index 6db7f3a..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/server/Cpu.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package com.dingzhuo.energy.framework.web.domain.server;
-
-import com.dingzhuo.energy.common.utils.Arith;
-
-/**
- * CPU鐩稿叧淇℃伅
- * 
- * @author ruoyi
- */
-public class Cpu
-{
-    /**
-     * 鏍稿績鏁�
-     */
-    private int cpuNum;
-
-    /**
-     * CPU鎬荤殑浣跨敤鐜�
-     */
-    private double total;
-
-    /**
-     * CPU绯荤粺浣跨敤鐜�
-     */
-    private double sys;
-
-    /**
-     * CPU鐢ㄦ埛浣跨敤鐜�
-     */
-    private double used;
-
-    /**
-     * CPU褰撳墠绛夊緟鐜�
-     */
-    private double wait;
-
-    /**
-     * CPU褰撳墠绌洪棽鐜�
-     */
-    private double free;
-
-    public int getCpuNum()
-    {
-        return cpuNum;
-    }
-
-    public void setCpuNum(int cpuNum)
-    {
-        this.cpuNum = cpuNum;
-    }
-
-    public double getTotal()
-    {
-        return Arith.round(Arith.mul(total, 100), 2);
-    }
-
-    public void setTotal(double total)
-    {
-        this.total = total;
-    }
-
-    public double getSys()
-    {
-        return Arith.round(Arith.mul(sys / total, 100), 2);
-    }
-
-    public void setSys(double sys)
-    {
-        this.sys = sys;
-    }
-
-    public double getUsed()
-    {
-        return Arith.round(Arith.mul(used / total, 100), 2);
-    }
-
-    public void setUsed(double used)
-    {
-        this.used = used;
-    }
-
-    public double getWait()
-    {
-        return Arith.round(Arith.mul(wait / total, 100), 2);
-    }
-
-    public void setWait(double wait)
-    {
-        this.wait = wait;
-    }
-
-    public double getFree()
-    {
-        return Arith.round(Arith.mul(free / total, 100), 2);
-    }
-
-    public void setFree(double free)
-    {
-        this.free = free;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/server/Jvm.java b/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/server/Jvm.java
deleted file mode 100644
index d553685..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/server/Jvm.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package com.dingzhuo.energy.framework.web.domain.server;
-
-import java.lang.management.ManagementFactory;
-import com.dingzhuo.energy.common.utils.Arith;
-import com.dingzhuo.energy.common.utils.DateUtils;
-
-/**
- * JVM鐩稿叧淇℃伅
- * 
- * @author ruoyi
- */
-public class Jvm
-{
-    /**
-     * 褰撳墠JVM鍗犵敤鐨勫唴瀛樻�绘暟(M)
-     */
-    private double total;
-
-    /**
-     * JVM鏈�澶у彲鐢ㄥ唴瀛樻�绘暟(M)
-     */
-    private double max;
-
-    /**
-     * JVM绌洪棽鍐呭瓨(M)
-     */
-    private double free;
-
-    /**
-     * JDK鐗堟湰
-     */
-    private String version;
-
-    /**
-     * JDK璺緞
-     */
-    private String home;
-
-    public double getTotal()
-    {
-        return Arith.div(total, (1024 * 1024), 2);
-    }
-
-    public void setTotal(double total)
-    {
-        this.total = total;
-    }
-
-    public double getMax()
-    {
-        return Arith.div(max, (1024 * 1024), 2);
-    }
-
-    public void setMax(double max)
-    {
-        this.max = max;
-    }
-
-    public double getFree()
-    {
-        return Arith.div(free, (1024 * 1024), 2);
-    }
-
-    public void setFree(double free)
-    {
-        this.free = free;
-    }
-
-    public double getUsed()
-    {
-        return Arith.div(total - free, (1024 * 1024), 2);
-    }
-
-    public double getUsage()
-    {
-        return Arith.mul(Arith.div(total - free, total, 4), 100);
-    }
-
-    /**
-     * 鑾峰彇JDK鍚嶇О
-     */
-    public String getName()
-    {
-        return ManagementFactory.getRuntimeMXBean().getVmName();
-    }
-
-    public String getVersion()
-    {
-        return version;
-    }
-
-    public void setVersion(String version)
-    {
-        this.version = version;
-    }
-
-    public String getHome()
-    {
-        return home;
-    }
-
-    public void setHome(String home)
-    {
-        this.home = home;
-    }
-
-    /**
-     * JDK鍚姩鏃堕棿
-     */
-    public String getStartTime()
-    {
-        return DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.getServerStartDate());
-    }
-
-    /**
-     * JDK杩愯鏃堕棿
-     */
-    public String getRunTime()
-    {
-        return DateUtils.getDatePoor(DateUtils.getNowDate(), DateUtils.getServerStartDate());
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/server/Mem.java b/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/server/Mem.java
deleted file mode 100644
index 2393e09..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/server/Mem.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.framework.web.domain.server;
-
-import com.dingzhuo.energy.common.utils.Arith;
-
-/**
- * 鍏у瓨鐩稿叧淇℃伅
- * 
- * @author ruoyi
- */
-public class Mem
-{
-    /**
-     * 鍐呭瓨鎬婚噺
-     */
-    private double total;
-
-    /**
-     * 宸茬敤鍐呭瓨
-     */
-    private double used;
-
-    /**
-     * 鍓╀綑鍐呭瓨
-     */
-    private double free;
-
-    public double getTotal()
-    {
-        return Arith.div(total, (1024 * 1024 * 1024), 2);
-    }
-
-    public void setTotal(long total)
-    {
-        this.total = total;
-    }
-
-    public double getUsed()
-    {
-        return Arith.div(used, (1024 * 1024 * 1024), 2);
-    }
-
-    public void setUsed(long used)
-    {
-        this.used = used;
-    }
-
-    public double getFree()
-    {
-        return Arith.div(free, (1024 * 1024 * 1024), 2);
-    }
-
-    public void setFree(long free)
-    {
-        this.free = free;
-    }
-
-    public double getUsage()
-    {
-        return Arith.mul(Arith.div(used, total, 4), 100);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/server/Sys.java b/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/server/Sys.java
deleted file mode 100644
index e6d92ed..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/server/Sys.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.dingzhuo.energy.framework.web.domain.server;
-
-/**
- * 绯荤粺鐩稿叧淇℃伅
- * 
- * @author ruoyi
- */
-public class Sys
-{
-    /**
-     * 鏈嶅姟鍣ㄥ悕绉�
-     */
-    private String computerName;
-
-    /**
-     * 鏈嶅姟鍣↖p
-     */
-    private String computerIp;
-
-    /**
-     * 椤圭洰璺緞
-     */
-    private String userDir;
-
-    /**
-     * 鎿嶄綔绯荤粺
-     */
-    private String osName;
-
-    /**
-     * 绯荤粺鏋舵瀯
-     */
-    private String osArch;
-
-    public String getComputerName()
-    {
-        return computerName;
-    }
-
-    public void setComputerName(String computerName)
-    {
-        this.computerName = computerName;
-    }
-
-    public String getComputerIp()
-    {
-        return computerIp;
-    }
-
-    public void setComputerIp(String computerIp)
-    {
-        this.computerIp = computerIp;
-    }
-
-    public String getUserDir()
-    {
-        return userDir;
-    }
-
-    public void setUserDir(String userDir)
-    {
-        this.userDir = userDir;
-    }
-
-    public String getOsName()
-    {
-        return osName;
-    }
-
-    public void setOsName(String osName)
-    {
-        this.osName = osName;
-    }
-
-    public String getOsArch()
-    {
-        return osArch;
-    }
-
-    public void setOsArch(String osArch)
-    {
-        this.osArch = osArch;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/server/SysFile.java b/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/server/SysFile.java
deleted file mode 100644
index eb38323..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/web/domain/server/SysFile.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package com.dingzhuo.energy.framework.web.domain.server;
-
-/**
- * 绯荤粺鏂囦欢鐩稿叧淇℃伅
- * 
- * @author ruoyi
- */
-public class SysFile
-{
-    /**
-     * 鐩樼璺緞
-     */
-    private String dirName;
-
-    /**
-     * 鐩樼绫诲瀷
-     */
-    private String sysTypeName;
-
-    /**
-     * 鏂囦欢绫诲瀷
-     */
-    private String typeName;
-
-    /**
-     * 鎬诲ぇ灏�
-     */
-    private String total;
-
-    /**
-     * 鍓╀綑澶у皬
-     */
-    private String free;
-
-    /**
-     * 宸茬粡浣跨敤閲�
-     */
-    private String used;
-
-    /**
-     * 璧勬簮鐨勪娇鐢ㄧ巼
-     */
-    private double usage;
-
-    public String getDirName()
-    {
-        return dirName;
-    }
-
-    public void setDirName(String dirName)
-    {
-        this.dirName = dirName;
-    }
-
-    public String getSysTypeName()
-    {
-        return sysTypeName;
-    }
-
-    public void setSysTypeName(String sysTypeName)
-    {
-        this.sysTypeName = sysTypeName;
-    }
-
-    public String getTypeName()
-    {
-        return typeName;
-    }
-
-    public void setTypeName(String typeName)
-    {
-        this.typeName = typeName;
-    }
-
-    public String getTotal()
-    {
-        return total;
-    }
-
-    public void setTotal(String total)
-    {
-        this.total = total;
-    }
-
-    public String getFree()
-    {
-        return free;
-    }
-
-    public void setFree(String free)
-    {
-        this.free = free;
-    }
-
-    public String getUsed()
-    {
-        return used;
-    }
-
-    public void setUsed(String used)
-    {
-        this.used = used;
-    }
-
-    public double getUsage()
-    {
-        return usage;
-    }
-
-    public void setUsage(double usage)
-    {
-        this.usage = usage;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/web/exception/GlobalExceptionHandler.java b/basic/src/main/java/com/dingzhuo/energy/framework/web/exception/GlobalExceptionHandler.java
deleted file mode 100644
index d3fa37f..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/web/exception/GlobalExceptionHandler.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package com.dingzhuo.energy.framework.web.exception;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.security.access.AccessDeniedException;
-import org.springframework.security.authentication.AccountExpiredException;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-import org.springframework.validation.BindException;
-import org.springframework.web.bind.MethodArgumentNotValidException;
-import org.springframework.web.bind.annotation.ExceptionHandler;
-import org.springframework.web.bind.annotation.RestControllerAdvice;
-import org.springframework.web.servlet.NoHandlerFoundException;
-import com.dingzhuo.energy.common.constant.HttpStatus;
-import com.dingzhuo.energy.common.exception.BaseException;
-import com.dingzhuo.energy.common.exception.CustomException;
-import com.dingzhuo.energy.common.exception.DemoModeException;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-
-/**
- * 鍏ㄥ眬寮傚父澶勭悊鍣�
- * 
- * @author ruoyi
- */
-@RestControllerAdvice
-public class GlobalExceptionHandler
-{
-    private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
-
-    /**
-     * 鍩虹寮傚父
-     */
-    @ExceptionHandler(BaseException.class)
-    public AjaxResult baseException(BaseException e)
-    {
-        return AjaxResult.error(e.getMessage());
-    }
-
-    /**
-     * 涓氬姟寮傚父
-     */
-    @ExceptionHandler(CustomException.class)
-    public AjaxResult businessException(CustomException e)
-    {
-        if (StringUtils.isNull(e.getCode()))
-        {
-            return AjaxResult.error(e.getMessage());
-        }
-        return AjaxResult.error(e.getCode(), e.getMessage());
-    }
-
-    @ExceptionHandler(NoHandlerFoundException.class)
-    public AjaxResult handlerNoFoundException(Exception e)
-    {
-        log.error(e.getMessage(), e);
-        return AjaxResult.error(HttpStatus.NOT_FOUND, "璺緞涓嶅瓨鍦紝璇锋鏌ヨ矾寰勬槸鍚︽纭�");
-    }
-
-    @ExceptionHandler(AccessDeniedException.class)
-    public AjaxResult handleAuthorizationException(AccessDeniedException e)
-    {
-        log.error(e.getMessage());
-        return AjaxResult.error(HttpStatus.FORBIDDEN, "娌℃湁鏉冮檺锛岃鑱旂郴绠$悊鍛樻巿鏉�");
-    }
-
-    @ExceptionHandler(AccountExpiredException.class)
-    public AjaxResult handleAccountExpiredException(AccountExpiredException e)
-    {
-        log.error(e.getMessage(), e);
-        return AjaxResult.error(e.getMessage());
-    }
-
-    @ExceptionHandler(UsernameNotFoundException.class)
-    public AjaxResult handleUsernameNotFoundException(UsernameNotFoundException e)
-    {
-        log.error(e.getMessage(), e);
-        return AjaxResult.error(e.getMessage());
-    }
-
-    @ExceptionHandler(Exception.class)
-    public AjaxResult handleException(Exception e)
-    {
-        log.error(e.getMessage(), e);
-        return AjaxResult.error(e.getMessage());
-    }
-
-    /**
-     * 鑷畾涔夐獙璇佸紓甯�
-     */
-    @ExceptionHandler(BindException.class)
-    public AjaxResult validatedBindException(BindException e)
-    {
-        log.error(e.getMessage(), e);
-        String message = e.getAllErrors().get(0).getDefaultMessage();
-        return AjaxResult.error(message);
-    }
-
-    /**
-     * 鑷畾涔夐獙璇佸紓甯�
-     */
-    @ExceptionHandler(MethodArgumentNotValidException.class)
-    public Object validExceptionHandler(MethodArgumentNotValidException e)
-    {
-        log.error(e.getMessage(), e);
-        String message = e.getBindingResult().getFieldError().getDefaultMessage();
-        return AjaxResult.error(message);
-    }
-
-    /**
-     * 婕旂ず妯″紡寮傚父
-     */
-    @ExceptionHandler(DemoModeException.class)
-    public AjaxResult demoModeException(DemoModeException e)
-    {
-        return AjaxResult.error("婕旂ず妯″紡锛屼笉鍏佽鎿嶄綔");
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/web/page/PageDomain.java b/basic/src/main/java/com/dingzhuo/energy/framework/web/page/PageDomain.java
deleted file mode 100644
index 0a92873..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/web/page/PageDomain.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.dingzhuo.energy.framework.web.page;
-
-import com.dingzhuo.energy.common.utils.StringUtils;
-
-/**
- * 鍒嗛〉鏁版嵁
- * 
- * @author ruoyi
- */
-public class PageDomain
-{
-    /** 褰撳墠璁板綍璧峰绱㈠紩 */
-    private Integer pageNum;
-    /** 姣忛〉鏄剧ず璁板綍鏁� */
-    private Integer pageSize;
-    /** 鎺掑簭鍒� */
-    private String orderByColumn;
-    /** 鎺掑簭鐨勬柟鍚� "desc" 鎴栬�� "asc". */
-    private String isAsc;
-
-    public String getOrderBy()
-    {
-        if (StringUtils.isEmpty(orderByColumn))
-        {
-            return "";
-        }
-        return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc;
-    }
-
-    public Integer getPageNum()
-    {
-        return pageNum;
-    }
-
-    public void setPageNum(Integer pageNum)
-    {
-        this.pageNum = pageNum;
-    }
-
-    public Integer getPageSize()
-    {
-        return pageSize;
-    }
-
-    public void setPageSize(Integer pageSize)
-    {
-        this.pageSize = pageSize;
-    }
-
-    public String getOrderByColumn()
-    {
-        return orderByColumn;
-    }
-
-    public void setOrderByColumn(String orderByColumn)
-    {
-        this.orderByColumn = orderByColumn;
-    }
-
-    public String getIsAsc()
-    {
-        return isAsc;
-    }
-
-    public void setIsAsc(String isAsc)
-    {
-        this.isAsc = isAsc;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/web/page/TableDataInfo.java b/basic/src/main/java/com/dingzhuo/energy/framework/web/page/TableDataInfo.java
deleted file mode 100644
index b141dc3..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/web/page/TableDataInfo.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.dingzhuo.energy.framework.web.page;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * 琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄
- * 
- * @author ruoyi
- */
-public class TableDataInfo implements Serializable
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 鎬昏褰曟暟 */
-    private long total;
-
-    /** 鍒楄〃鏁版嵁 */
-    private List<?> rows;
-
-    /** 娑堟伅鐘舵�佺爜 */
-    private int code;
-
-    /** 娑堟伅鍐呭 */
-    private int msg;
-
-    /**
-     * 琛ㄦ牸鏁版嵁瀵硅薄
-     */
-    public TableDataInfo()
-    {
-    }
-
-    /**
-     * 鍒嗛〉
-     * 
-     * @param list 鍒楄〃鏁版嵁
-     * @param total 鎬昏褰曟暟
-     */
-    public TableDataInfo(List<?> list, int total)
-    {
-        this.rows = list;
-        this.total = total;
-    }
-
-    public long getTotal()
-    {
-        return total;
-    }
-
-    public void setTotal(long total)
-    {
-        this.total = total;
-    }
-
-    public List<?> getRows()
-    {
-        return rows;
-    }
-
-    public void setRows(List<?> rows)
-    {
-        this.rows = rows;
-    }
-
-    public int getCode()
-    {
-        return code;
-    }
-
-    public void setCode(int code)
-    {
-        this.code = code;
-    }
-
-    public int getMsg()
-    {
-        return msg;
-    }
-
-    public void setMsg(int msg)
-    {
-        this.msg = msg;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/framework/web/page/TableSupport.java b/basic/src/main/java/com/dingzhuo/energy/framework/web/page/TableSupport.java
deleted file mode 100644
index f3ad0e1..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/framework/web/page/TableSupport.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.dingzhuo.energy.framework.web.page;
-
-import com.dingzhuo.energy.common.utils.ServletUtils;
-
-/**
- * 琛ㄦ牸鏁版嵁澶勭悊
- * 
- * @author ruoyi
- */
-public class TableSupport
-{
-    /**
-     * 褰撳墠璁板綍璧峰绱㈠紩
-     */
-    public static final String PAGE_NUM = "pageNum";
-
-    /**
-     * 姣忛〉鏄剧ず璁板綍鏁�
-     */
-    public static final String PAGE_SIZE = "pageSize";
-
-    /**
-     * 鎺掑簭鍒�
-     */
-    public static final String ORDER_BY_COLUMN = "orderByColumn";
-
-    /**
-     * 鎺掑簭鐨勬柟鍚� "desc" 鎴栬�� "asc".
-     */
-    public static final String IS_ASC = "isAsc";
-
-    /**
-     * 灏佽鍒嗛〉瀵硅薄
-     */
-    public static PageDomain getPageDomain()
-    {
-        PageDomain pageDomain = new PageDomain();
-        pageDomain.setPageNum(ServletUtils.getParameterToInt(PAGE_NUM));
-        pageDomain.setPageSize(ServletUtils.getParameterToInt(PAGE_SIZE));
-        pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN));
-        pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));
-        return pageDomain;
-    }
-
-    public static PageDomain buildPageRequest()
-    {
-        return getPageDomain();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/common/CaptchaController.java b/basic/src/main/java/com/dingzhuo/energy/project/common/CaptchaController.java
deleted file mode 100644
index 2bf11d0..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/common/CaptchaController.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.dingzhuo.energy.project.common;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.concurrent.TimeUnit;
-import javax.servlet.http.HttpServletResponse;
-
-import com.dingzhuo.energy.framework.redis.RedisCache;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.common.constant.Constants;
-import com.dingzhuo.energy.common.utils.IdUtils;
-import com.dingzhuo.energy.common.utils.VerifyCodeUtils;
-import com.dingzhuo.energy.common.utils.sign.Base64;
-import com.dingzhuo.energy.framework.redis.RedisCache;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-
-/**
- * 楠岃瘉鐮佹搷浣滃鐞�
- * 
- * @author ruoyi
- */
-@RestController
-public class CaptchaController
-{
-    @Autowired
-    private RedisCache redisCache;
-
-    /**
-     * 鐢熸垚楠岃瘉鐮�
-     */
-    @GetMapping("/captchaImage")
-    public AjaxResult getCode(HttpServletResponse response) throws IOException
-    {
-        // 鐢熸垚闅忔満瀛椾覆
-        String verifyCode = VerifyCodeUtils.generateVerifyCode(4);
-        // 鍞竴鏍囪瘑
-        String uuid = IdUtils.simpleUUID();
-        String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
-
-        redisCache.setCacheObject(verifyKey, verifyCode, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
-        // 鐢熸垚鍥剧墖
-        int w = 111, h = 36;
-        ByteArrayOutputStream stream = new ByteArrayOutputStream();
-        VerifyCodeUtils.outputImage(w, h, stream, verifyCode);
-        try
-        {
-            AjaxResult ajax = AjaxResult.success();
-            ajax.put("uuid", uuid);
-            ajax.put("img", Base64.encode(stream.toByteArray()));
-            return ajax;
-        }
-        catch (Exception e)
-        {
-            e.printStackTrace();
-            return AjaxResult.error(e.getMessage());
-        }
-        finally
-        {
-            stream.close();
-        }
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/common/CommonController.java b/basic/src/main/java/com/dingzhuo/energy/project/common/CommonController.java
deleted file mode 100644
index 0ab7642..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/common/CommonController.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package com.dingzhuo.energy.project.common;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.dingzhuo.energy.framework.config.RuoYiConfig;
-import com.dingzhuo.energy.framework.config.ServerConfig;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.file.FileUploadUtils;
-import com.dingzhuo.energy.common.utils.file.FileUtils;
-import com.dingzhuo.energy.framework.config.RuoYiConfig;
-import com.dingzhuo.energy.framework.config.ServerConfig;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-
-/**
- * 閫氱敤璇锋眰澶勭悊
- * 
- * @author ruoyi
- */
-@RestController
-public class CommonController
-{
-    private static final Logger log = LoggerFactory.getLogger(CommonController.class);
-
-    @Autowired
-    private ServerConfig serverConfig;
-
-    /**
-     * 閫氱敤涓嬭浇璇锋眰
-     * 
-     * @param fileName 鏂囦欢鍚嶇О
-     * @param delete 鏄惁鍒犻櫎
-     */
-    @GetMapping("common/download")
-    public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
-    {
-        try
-        {
-            if (!FileUtils.isValidFilename(fileName))
-            {
-                throw new Exception(StringUtils.format("鏂囦欢鍚嶇О({})闈炴硶锛屼笉鍏佽涓嬭浇銆� ", fileName));
-            }
-            String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
-            String filePath = RuoYiConfig.getDownloadPath() + fileName;
-
-            response.setCharacterEncoding("utf-8");
-            response.setContentType("multipart/form-data");
-            response.setHeader("Content-Disposition",
-                    "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, realFileName));
-            FileUtils.writeBytes(filePath, response.getOutputStream());
-            if (delete)
-            {
-                FileUtils.deleteFile(filePath);
-            }
-        }
-        catch (Exception e)
-        {
-            log.error("涓嬭浇鏂囦欢澶辫触", e);
-        }
-    }
-
-    /**
-     * 閫氱敤涓婁紶璇锋眰
-     */
-    @PostMapping("/common/upload")
-    public AjaxResult uploadFile(MultipartFile file) throws Exception
-    {
-        try
-        {
-            // 涓婁紶鏂囦欢璺緞
-            String filePath = RuoYiConfig.getUploadPath();
-            // 涓婁紶骞惰繑鍥炴柊鏂囦欢鍚嶇О
-            String fileName = FileUploadUtils.upload(filePath, file);
-            String url = serverConfig.getUrl() + fileName;
-            AjaxResult ajax = AjaxResult.success();
-            ajax.put("fileName", fileName);
-            ajax.put("url", url);
-            return ajax;
-        }
-        catch (Exception e)
-        {
-            return AjaxResult.error(e.getMessage());
-        }
-    }
-
-    /**
-     * 閫氱敤鎸囧畾鏂囦欢涓嬭浇璇锋眰
-     *
-     * @param showFileName 涓嬭浇灞曠ず鏂囦欢鍚嶇О
-     * @param filePath 涓嬭浇鏂囦欢缁濆璺緞 甯� 鏂囦欢鐪熷疄鍚嶅瓧鍙婅矾寰�
-     * @param delete 鏄惁鍒犻櫎/
-     */
-    @GetMapping("common/downloadAssign")
-    public void fileAssignDownload(String showFileName, String filePath,Boolean delete, HttpServletResponse response, HttpServletRequest request)
-    {
-        try
-        {
-            response.setCharacterEncoding("utf-8");
-            response.setContentType("multipart/form-data");
-            response.setHeader("Content-Disposition",
-                    "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, showFileName));
-            FileUtils.writeBytes(filePath, response.getOutputStream());
-//            if (delete)
-//            {
-//                FileUtils.deleteFile(filePath);
-//            }
-            log.error("涓嬭浇鎴愬姛", "aa");
-        }
-        catch (Exception e)
-        {
-            log.error("涓嬭浇鏂囦欢澶辫触", e);
-        }
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/monitor/controller/ServerController.java b/basic/src/main/java/com/dingzhuo/energy/project/monitor/controller/ServerController.java
deleted file mode 100644
index 14c356e..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/monitor/controller/ServerController.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.dingzhuo.energy.project.monitor.controller;
-
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.domain.Server;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.domain.Server;
-
-/**
- * 鏈嶅姟鍣ㄧ洃鎺�
- * 
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/monitor/server")
-public class ServerController extends BaseController
-{
-    @PreAuthorize("@ss.hasPermi('monitor:server:list')")
-    @GetMapping()
-    public AjaxResult getInfo() throws Exception
-    {
-        Server server = new Server();
-        server.copyTo();
-        return AjaxResult.success(server);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/monitor/controller/SysLogininforController.java b/basic/src/main/java/com/dingzhuo/energy/project/monitor/controller/SysLogininforController.java
deleted file mode 100644
index 31f4b04..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/monitor/controller/SysLogininforController.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.dingzhuo.energy.project.monitor.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.monitor.domain.SysLogininfor;
-import com.dingzhuo.energy.project.monitor.service.ISysLogininforService;
-
-/**
- * 绯荤粺璁块棶璁板綍
- * 
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/monitor/logininfor")
-public class SysLogininforController extends BaseController
-{
-    @Autowired
-    private ISysLogininforService logininforService;
-
-    @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(SysLogininfor logininfor)
-    {
-        startPage();
-        List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
-        return getDataTable(list);
-    }
-
-    @Log(title = "鐧婚檰鏃ュ織", businessType = BusinessType.EXPORT)
-    @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')")
-    @GetMapping("/export")
-    public AjaxResult export(SysLogininfor logininfor)
-    {
-        List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
-        ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class);
-        return util.exportExcel(list, "鐧婚檰鏃ュ織");
-    }
-
-    @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
-    @Log(title = "鐧婚檰鏃ュ織", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{infoIds}")
-    public AjaxResult remove(@PathVariable Long[] infoIds)
-    {
-        return toAjax(logininforService.deleteLogininforByIds(infoIds));
-    }
-
-    @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
-    @Log(title = "鐧婚檰鏃ュ織", businessType = BusinessType.CLEAN)
-    @DeleteMapping("/clean")
-    public AjaxResult clean()
-    {
-        logininforService.cleanLogininfor();
-        return AjaxResult.success();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/monitor/controller/SysOperlogController.java b/basic/src/main/java/com/dingzhuo/energy/project/monitor/controller/SysOperlogController.java
deleted file mode 100644
index b7e47f7..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/monitor/controller/SysOperlogController.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.dingzhuo.energy.project.monitor.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.monitor.domain.SysOperLog;
-import com.dingzhuo.energy.project.monitor.service.ISysOperLogService;
-
-/**
- * 鎿嶄綔鏃ュ織璁板綍
- * 
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/monitor/operlog")
-public class SysOperlogController extends BaseController
-{
-    @Autowired
-    private ISysOperLogService operLogService;
-
-    @PreAuthorize("@ss.hasPermi('monitor:operlog:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(SysOperLog operLog)
-    {
-        startPage();
-        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
-        return getDataTable(list);
-    }
-
-    @Log(title = "鎿嶄綔鏃ュ織", businessType = BusinessType.EXPORT)
-    @PreAuthorize("@ss.hasPermi('monitor:operlog:export')")
-    @GetMapping("/export")
-    public AjaxResult export(SysOperLog operLog)
-    {
-        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
-        ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class);
-        return util.exportExcel(list, "鎿嶄綔鏃ュ織");
-    }
-
-    @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
-    @DeleteMapping("/{operIds}")
-    public AjaxResult remove(@PathVariable Long[] operIds)
-    {
-        return toAjax(operLogService.deleteOperLogByIds(operIds));
-    }
-
-    @Log(title = "鎿嶄綔鏃ュ織", businessType = BusinessType.CLEAN)
-    @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
-    @DeleteMapping("/clean")
-    public AjaxResult clean()
-    {
-        operLogService.cleanOperLog();
-        return AjaxResult.success();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/monitor/controller/SysUserOnlineController.java b/basic/src/main/java/com/dingzhuo/energy/project/monitor/controller/SysUserOnlineController.java
deleted file mode 100644
index bf1df7d..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/monitor/controller/SysUserOnlineController.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package com.dingzhuo.energy.project.monitor.controller;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.redis.RedisCache;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.common.constant.Constants;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.redis.RedisCache;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.monitor.domain.SysUserOnline;
-import com.dingzhuo.energy.project.system.service.ISysUserOnlineService;
-
-/**
- * 鍦ㄧ嚎鐢ㄦ埛鐩戞帶
- * 
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/monitor/online")
-public class SysUserOnlineController extends BaseController
-{
-    @Autowired
-    private ISysUserOnlineService userOnlineService;
-
-    @Autowired
-    private RedisCache redisCache;
-
-    @PreAuthorize("@ss.hasPermi('monitor:online:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(String ipaddr, String userName)
-    {
-        Collection<String> keys = redisCache.keys(Constants.LOGIN_TOKEN_KEY + "*");
-        List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
-        for (String key : keys)
-        {
-            LoginUser user = redisCache.getCacheObject(key);
-            if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName))
-            {
-                if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername()))
-                {
-                    userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
-                }
-            }
-            else if (StringUtils.isNotEmpty(ipaddr))
-            {
-                if (StringUtils.equals(ipaddr, user.getIpaddr()))
-                {
-                    userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
-                }
-            }
-            else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser()))
-            {
-                if (StringUtils.equals(userName, user.getUsername()))
-                {
-                    userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
-                }
-            }
-            else
-            {
-                userOnlineList.add(userOnlineService.loginUserToUserOnline(user));
-            }
-        }
-        Collections.reverse(userOnlineList);
-        userOnlineList.removeAll(Collections.singleton(null));
-        return getDataTable(userOnlineList);
-    }
-
-    /**
-     * 寮洪��鐢ㄦ埛
-     */
-    @PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')")
-    @Log(title = "鍦ㄧ嚎鐢ㄦ埛", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{tokenId}")
-    public AjaxResult forceLogout(@PathVariable String tokenId)
-    {
-        redisCache.deleteObject(Constants.LOGIN_TOKEN_KEY + tokenId);
-        return AjaxResult.success();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/monitor/domain/SysLogininfor.java b/basic/src/main/java/com/dingzhuo/energy/project/monitor/domain/SysLogininfor.java
deleted file mode 100644
index 78f1004..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/monitor/domain/SysLogininfor.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package com.dingzhuo.energy.project.monitor.domain;
-
-import java.util.Date;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel.ColumnType;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 绯荤粺璁块棶璁板綍琛� sys_logininfor
- * 
- * @author ruoyi
- */
-public class SysLogininfor extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** ID */
-    @Excel(name = "搴忓彿", cellType = Excel.ColumnType.NUMERIC)
-    private Long infoId;
-
-    /** 鐢ㄦ埛璐﹀彿 */
-    @Excel(name = "鐢ㄦ埛璐﹀彿")
-    private String userName;
-
-    /** 鐧诲綍鐘舵�� 0鎴愬姛 1澶辫触 */
-    @Excel(name = "鐧诲綍鐘舵��", readConverterExp = "0=鎴愬姛,1=澶辫触")
-    private String status;
-
-    /** 鐧诲綍IP鍦板潃 */
-    @Excel(name = "鐧诲綍鍦板潃")
-    private String ipaddr;
-
-    /** 鐧诲綍鍦扮偣 */
-    @Excel(name = "鐧诲綍鍦扮偣")
-    private String loginLocation;
-
-    /** 娴忚鍣ㄧ被鍨� */
-    @Excel(name = "娴忚鍣�")
-    private String browser;
-
-    /** 鎿嶄綔绯荤粺 */
-    @Excel(name = "鎿嶄綔绯荤粺")
-    private String os;
-
-    /** 鎻愮ず娑堟伅 */
-    @Excel(name = "鎻愮ず娑堟伅")
-    private String msg;
-
-    /** 璁块棶鏃堕棿 */
-    @Excel(name = "璁块棶鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
-    private Date loginTime;
-
-    public Long getInfoId()
-    {
-        return infoId;
-    }
-
-    public void setInfoId(Long infoId)
-    {
-        this.infoId = infoId;
-    }
-
-    public String getUserName()
-    {
-        return userName;
-    }
-
-    public void setUserName(String userName)
-    {
-        this.userName = userName;
-    }
-
-    public String getStatus()
-    {
-        return status;
-    }
-
-    public void setStatus(String status)
-    {
-        this.status = status;
-    }
-
-    public String getIpaddr()
-    {
-        return ipaddr;
-    }
-
-    public void setIpaddr(String ipaddr)
-    {
-        this.ipaddr = ipaddr;
-    }
-
-    public String getLoginLocation()
-    {
-        return loginLocation;
-    }
-
-    public void setLoginLocation(String loginLocation)
-    {
-        this.loginLocation = loginLocation;
-    }
-
-    public String getBrowser()
-    {
-        return browser;
-    }
-
-    public void setBrowser(String browser)
-    {
-        this.browser = browser;
-    }
-
-    public String getOs()
-    {
-        return os;
-    }
-
-    public void setOs(String os)
-    {
-        this.os = os;
-    }
-
-    public String getMsg()
-    {
-        return msg;
-    }
-
-    public void setMsg(String msg)
-    {
-        this.msg = msg;
-    }
-
-    public Date getLoginTime()
-    {
-        return loginTime;
-    }
-
-    public void setLoginTime(Date loginTime)
-    {
-        this.loginTime = loginTime;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/monitor/domain/SysOperLog.java b/basic/src/main/java/com/dingzhuo/energy/project/monitor/domain/SysOperLog.java
deleted file mode 100644
index df41daa..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/monitor/domain/SysOperLog.java
+++ /dev/null
@@ -1,256 +0,0 @@
-package com.dingzhuo.energy.project.monitor.domain;
-
-import java.util.Date;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel.ColumnType;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 鎿嶄綔鏃ュ織璁板綍琛� oper_log
- * 
- * @author ruoyi
- */
-public class SysOperLog extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 鏃ュ織涓婚敭 */
-    @Excel(name = "鎿嶄綔搴忓彿", cellType = Excel.ColumnType.NUMERIC)
-    private Long operId;
-
-    /** 鎿嶄綔妯″潡 */
-    @Excel(name = "鎿嶄綔妯″潡")
-    private String title;
-
-    /** 涓氬姟绫诲瀷锛�0鍏跺畠 1鏂板 2淇敼 3鍒犻櫎锛� */
-    @Excel(name = "涓氬姟绫诲瀷", readConverterExp = "0=鍏跺畠,1=鏂板,2=淇敼,3=鍒犻櫎,4=鎺堟潈,5=瀵煎嚭,6=瀵煎叆,7=寮洪��,8=鐢熸垚浠g爜,9=娓呯┖鏁版嵁")
-    private Integer businessType;
-
-    /** 涓氬姟绫诲瀷鏁扮粍 */
-    private Integer[] businessTypes;
-
-    /** 璇锋眰鏂规硶 */
-    @Excel(name = "璇锋眰鏂规硶")
-    private String method;
-
-    /** 璇锋眰鏂瑰紡 */
-    @Excel(name = "璇锋眰鏂瑰紡")
-    private String requestMethod;
-
-    /** 鎿嶄綔绫诲埆锛�0鍏跺畠 1鍚庡彴鐢ㄦ埛 2鎵嬫満绔敤鎴凤級 */
-    @Excel(name = "鎿嶄綔绫诲埆", readConverterExp = "0=鍏跺畠,1=鍚庡彴鐢ㄦ埛,2=鎵嬫満绔敤鎴�")
-    private Integer operatorType;
-
-    /** 鎿嶄綔浜哄憳 */
-    @Excel(name = "鎿嶄綔浜哄憳")
-    private String operName;
-
-    /** 閮ㄩ棬鍚嶇О */
-    @Excel(name = "閮ㄩ棬鍚嶇О")
-    private String deptName;
-
-    /** 璇锋眰url */
-    @Excel(name = "璇锋眰鍦板潃")
-    private String operUrl;
-
-    /** 鎿嶄綔鍦板潃 */
-    @Excel(name = "鎿嶄綔鍦板潃")
-    private String operIp;
-
-    /** 鎿嶄綔鍦扮偣 */
-    @Excel(name = "鎿嶄綔鍦扮偣")
-    private String operLocation;
-
-    /** 璇锋眰鍙傛暟 */
-    @Excel(name = "璇锋眰鍙傛暟")
-    private String operParam;
-
-    /** 杩斿洖鍙傛暟 */
-    @Excel(name = "杩斿洖鍙傛暟")
-    private String jsonResult;
-
-    /** 鎿嶄綔鐘舵�侊紙0姝e父 1寮傚父锛� */
-    @Excel(name = "鐘舵��", readConverterExp = "0=姝e父,1=寮傚父")
-    private Integer status;
-
-    /** 閿欒娑堟伅 */
-    @Excel(name = "閿欒娑堟伅")
-    private String errorMsg;
-
-    /** 鎿嶄綔鏃堕棿 */
-    @Excel(name = "鎿嶄綔鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
-    private Date operTime;
-
-    public Long getOperId()
-    {
-        return operId;
-    }
-
-    public void setOperId(Long operId)
-    {
-        this.operId = operId;
-    }
-
-    public String getTitle()
-    {
-        return title;
-    }
-
-    public void setTitle(String title)
-    {
-        this.title = title;
-    }
-
-    public Integer getBusinessType()
-    {
-        return businessType;
-    }
-
-    public void setBusinessType(Integer businessType)
-    {
-        this.businessType = businessType;
-    }
-
-    public Integer[] getBusinessTypes()
-    {
-        return businessTypes;
-    }
-
-    public void setBusinessTypes(Integer[] businessTypes)
-    {
-        this.businessTypes = businessTypes;
-    }
-
-    public String getMethod()
-    {
-        return method;
-    }
-
-    public void setMethod(String method)
-    {
-        this.method = method;
-    }
-
-    public String getRequestMethod()
-    {
-        return requestMethod;
-    }
-
-    public void setRequestMethod(String requestMethod)
-    {
-        this.requestMethod = requestMethod;
-    }
-
-    public Integer getOperatorType()
-    {
-        return operatorType;
-    }
-
-    public void setOperatorType(Integer operatorType)
-    {
-        this.operatorType = operatorType;
-    }
-
-    public String getOperName()
-    {
-        return operName;
-    }
-
-    public void setOperName(String operName)
-    {
-        this.operName = operName;
-    }
-
-    public String getDeptName()
-    {
-        return deptName;
-    }
-
-    public void setDeptName(String deptName)
-    {
-        this.deptName = deptName;
-    }
-
-    public String getOperUrl()
-    {
-        return operUrl;
-    }
-
-    public void setOperUrl(String operUrl)
-    {
-        this.operUrl = operUrl;
-    }
-
-    public String getOperIp()
-    {
-        return operIp;
-    }
-
-    public void setOperIp(String operIp)
-    {
-        this.operIp = operIp;
-    }
-
-    public String getOperLocation()
-    {
-        return operLocation;
-    }
-
-    public void setOperLocation(String operLocation)
-    {
-        this.operLocation = operLocation;
-    }
-
-    public String getOperParam()
-    {
-        return operParam;
-    }
-
-    public void setOperParam(String operParam)
-    {
-        this.operParam = operParam;
-    }
-
-    public String getJsonResult()
-    {
-        return jsonResult;
-    }
-
-    public void setJsonResult(String jsonResult)
-    {
-        this.jsonResult = jsonResult;
-    }
-
-    public Integer getStatus()
-    {
-        return status;
-    }
-
-    public void setStatus(Integer status)
-    {
-        this.status = status;
-    }
-
-    public String getErrorMsg()
-    {
-        return errorMsg;
-    }
-
-    public void setErrorMsg(String errorMsg)
-    {
-        this.errorMsg = errorMsg;
-    }
-
-    public Date getOperTime()
-    {
-        return operTime;
-    }
-
-    public void setOperTime(Date operTime)
-    {
-        this.operTime = operTime;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/monitor/domain/SysUserOnline.java b/basic/src/main/java/com/dingzhuo/energy/project/monitor/domain/SysUserOnline.java
deleted file mode 100644
index 96fb66a..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/monitor/domain/SysUserOnline.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package com.dingzhuo.energy.project.monitor.domain;
-
-/**
- * 褰撳墠鍦ㄧ嚎浼氳瘽
- * 
- * @author ruoyi
- */
-public class SysUserOnline
-{
-    /** 浼氳瘽缂栧彿 */
-    private String tokenId;
-
-    /** 閮ㄩ棬鍚嶇О */
-    private String deptName;
-
-    /** 鐢ㄦ埛鍚嶇О */
-    private String userName;
-
-    /** 鐧诲綍IP鍦板潃 */
-    private String ipaddr;
-
-    /** 鐧诲綍鍦板潃 */
-    private String loginLocation;
-
-    /** 娴忚鍣ㄧ被鍨� */
-    private String browser;
-
-    /** 鎿嶄綔绯荤粺 */
-    private String os;
-
-    /** 鐧诲綍鏃堕棿 */
-    private Long loginTime;
-
-    public String getTokenId()
-    {
-        return tokenId;
-    }
-
-    public void setTokenId(String tokenId)
-    {
-        this.tokenId = tokenId;
-    }
-
-    public String getDeptName()
-    {
-        return deptName;
-    }
-
-    public void setDeptName(String deptName)
-    {
-        this.deptName = deptName;
-    }
-
-    public String getUserName()
-    {
-        return userName;
-    }
-
-    public void setUserName(String userName)
-    {
-        this.userName = userName;
-    }
-
-    public String getIpaddr()
-    {
-        return ipaddr;
-    }
-
-    public void setIpaddr(String ipaddr)
-    {
-        this.ipaddr = ipaddr;
-    }
-
-    public String getLoginLocation()
-    {
-        return loginLocation;
-    }
-
-    public void setLoginLocation(String loginLocation)
-    {
-        this.loginLocation = loginLocation;
-    }
-
-    public String getBrowser()
-    {
-        return browser;
-    }
-
-    public void setBrowser(String browser)
-    {
-        this.browser = browser;
-    }
-
-    public String getOs()
-    {
-        return os;
-    }
-
-    public void setOs(String os)
-    {
-        this.os = os;
-    }
-
-    public Long getLoginTime()
-    {
-        return loginTime;
-    }
-
-    public void setLoginTime(Long loginTime)
-    {
-        this.loginTime = loginTime;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/monitor/mapper/SysLogininforMapper.java b/basic/src/main/java/com/dingzhuo/energy/project/monitor/mapper/SysLogininforMapper.java
deleted file mode 100644
index 67129be..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/monitor/mapper/SysLogininforMapper.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.dingzhuo.energy.project.monitor.mapper;
-
-import java.util.List;
-import com.dingzhuo.energy.project.monitor.domain.SysLogininfor;
-
-/**
- * 绯荤粺璁块棶鏃ュ織鎯呭喌淇℃伅 鏁版嵁灞�
- * 
- * @author ruoyi
- */
-public interface SysLogininforMapper
-{
-    /**
-     * 鏂板绯荤粺鐧诲綍鏃ュ織
-     * 
-     * @param logininfor 璁块棶鏃ュ織瀵硅薄
-     */
-    void insertLogininfor(SysLogininfor logininfor);
-
-    /**
-     * 鏌ヨ绯荤粺鐧诲綍鏃ュ織闆嗗悎
-     * 
-     * @param logininfor 璁块棶鏃ュ織瀵硅薄
-     * @return 鐧诲綍璁板綍闆嗗悎
-     */
-    List<SysLogininfor> selectLogininforList(SysLogininfor logininfor);
-
-    /**
-     * 鎵归噺鍒犻櫎绯荤粺鐧诲綍鏃ュ織
-     * 
-     * @param infoIds 闇�瑕佸垹闄ょ殑鐧诲綍鏃ュ織ID
-     * @return 缁撴灉
-     */
-    int deleteLogininforByIds(Long[] infoIds);
-
-    /**
-     * 娓呯┖绯荤粺鐧诲綍鏃ュ織
-     * 
-     * @return 缁撴灉
-     */
-    int cleanLogininfor();
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/monitor/mapper/SysOperLogMapper.java b/basic/src/main/java/com/dingzhuo/energy/project/monitor/mapper/SysOperLogMapper.java
deleted file mode 100644
index a9032af..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/monitor/mapper/SysOperLogMapper.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.dingzhuo.energy.project.monitor.mapper;
-
-import java.util.List;
-
-import com.dingzhuo.energy.project.monitor.domain.SysOperLog;
-import com.dingzhuo.energy.project.monitor.domain.SysOperLog;
-
-/**
- * 鎿嶄綔鏃ュ織 鏁版嵁灞�
- * 
- * @author ruoyi
- */
-public interface SysOperLogMapper
-{
-    /**
-     * 鏂板鎿嶄綔鏃ュ織
-     * 
-     * @param operLog 鎿嶄綔鏃ュ織瀵硅薄
-     */
-    void insertOperlog(SysOperLog operLog);
-
-    /**
-     * 鏌ヨ绯荤粺鎿嶄綔鏃ュ織闆嗗悎
-     * 
-     * @param operLog 鎿嶄綔鏃ュ織瀵硅薄
-     * @return 鎿嶄綔鏃ュ織闆嗗悎
-     */
-    List<SysOperLog> selectOperLogList(SysOperLog operLog);
-
-    /**
-     * 鎵归噺鍒犻櫎绯荤粺鎿嶄綔鏃ュ織
-     * 
-     * @param operIds 闇�瑕佸垹闄ょ殑鎿嶄綔鏃ュ織ID
-     * @return 缁撴灉
-     */
-    int deleteOperLogByIds(Long[] operIds);
-
-    /**
-     * 鏌ヨ鎿嶄綔鏃ュ織璇︾粏
-     * 
-     * @param operId 鎿嶄綔ID
-     * @return 鎿嶄綔鏃ュ織瀵硅薄
-     */
-    SysOperLog selectOperLogById(Long operId);
-
-    /**
-     * 娓呯┖鎿嶄綔鏃ュ織
-     */
-    void cleanOperLog();
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/monitor/service/ISysLogininforService.java b/basic/src/main/java/com/dingzhuo/energy/project/monitor/service/ISysLogininforService.java
deleted file mode 100644
index 53a7504..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/monitor/service/ISysLogininforService.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.dingzhuo.energy.project.monitor.service;
-
-import java.util.List;
-import com.dingzhuo.energy.project.monitor.domain.SysLogininfor;
-
-/**
- * 绯荤粺璁块棶鏃ュ織鎯呭喌淇℃伅 鏈嶅姟灞�
- * 
- * @author ruoyi
- */
-public interface ISysLogininforService
-{
-    /**
-     * 鏂板绯荤粺鐧诲綍鏃ュ織
-     * 
-     * @param logininfor 璁块棶鏃ュ織瀵硅薄
-     */
-    void insertLogininfor(SysLogininfor logininfor);
-
-    /**
-     * 鏌ヨ绯荤粺鐧诲綍鏃ュ織闆嗗悎
-     * 
-     * @param logininfor 璁块棶鏃ュ織瀵硅薄
-     * @return 鐧诲綍璁板綍闆嗗悎
-     */
-    List<SysLogininfor> selectLogininforList(SysLogininfor logininfor);
-
-    /**
-     * 鎵归噺鍒犻櫎绯荤粺鐧诲綍鏃ュ織
-     * 
-     * @param infoIds 闇�瑕佸垹闄ょ殑鐧诲綍鏃ュ織ID
-     * @return
-     */
-    int deleteLogininforByIds(Long[] infoIds);
-
-    /**
-     * 娓呯┖绯荤粺鐧诲綍鏃ュ織
-     */
-    void cleanLogininfor();
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/monitor/service/ISysOperLogService.java b/basic/src/main/java/com/dingzhuo/energy/project/monitor/service/ISysOperLogService.java
deleted file mode 100644
index fc3be4a..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/monitor/service/ISysOperLogService.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.dingzhuo.energy.project.monitor.service;
-
-import java.util.List;
-import com.dingzhuo.energy.project.monitor.domain.SysOperLog;
-
-/**
- * 鎿嶄綔鏃ュ織 鏈嶅姟灞�
- * 
- * @author ruoyi
- */
-public interface ISysOperLogService
-{
-    /**
-     * 鏂板鎿嶄綔鏃ュ織
-     * 
-     * @param operLog 鎿嶄綔鏃ュ織瀵硅薄
-     */
-    void insertOperlog(SysOperLog operLog);
-
-    /**
-     * 鏌ヨ绯荤粺鎿嶄綔鏃ュ織闆嗗悎
-     * 
-     * @param operLog 鎿嶄綔鏃ュ織瀵硅薄
-     * @return 鎿嶄綔鏃ュ織闆嗗悎
-     */
-    List<SysOperLog> selectOperLogList(SysOperLog operLog);
-
-    /**
-     * 鎵归噺鍒犻櫎绯荤粺鎿嶄綔鏃ュ織
-     * 
-     * @param operIds 闇�瑕佸垹闄ょ殑鎿嶄綔鏃ュ織ID
-     * @return 缁撴灉
-     */
-    int deleteOperLogByIds(Long[] operIds);
-
-    /**
-     * 鏌ヨ鎿嶄綔鏃ュ織璇︾粏
-     * 
-     * @param operId 鎿嶄綔ID
-     * @return 鎿嶄綔鏃ュ織瀵硅薄
-     */
-    SysOperLog selectOperLogById(Long operId);
-
-    /**
-     * 娓呯┖鎿嶄綔鏃ュ織
-     */
-    void cleanOperLog();
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/monitor/service/impl/SysLogininforServiceImpl.java b/basic/src/main/java/com/dingzhuo/energy/project/monitor/service/impl/SysLogininforServiceImpl.java
deleted file mode 100644
index 8ebf6ae..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/monitor/service/impl/SysLogininforServiceImpl.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.dingzhuo.energy.project.monitor.service.impl;
-
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.project.monitor.domain.SysLogininfor;
-import com.dingzhuo.energy.project.monitor.mapper.SysLogininforMapper;
-import com.dingzhuo.energy.project.monitor.service.ISysLogininforService;
-
-/**
- * 绯荤粺璁块棶鏃ュ織鎯呭喌淇℃伅 鏈嶅姟灞傚鐞�
- * 
- * @author ruoyi
- */
-@Service
-public class SysLogininforServiceImpl implements ISysLogininforService
-{
-
-    @Autowired
-    private SysLogininforMapper logininforMapper;
-
-    /**
-     * 鏂板绯荤粺鐧诲綍鏃ュ織
-     * 
-     * @param logininfor 璁块棶鏃ュ織瀵硅薄
-     */
-    @Override
-    public void insertLogininfor(SysLogininfor logininfor)
-    {
-        logininforMapper.insertLogininfor(logininfor);
-    }
-
-    /**
-     * 鏌ヨ绯荤粺鐧诲綍鏃ュ織闆嗗悎
-     * 
-     * @param logininfor 璁块棶鏃ュ織瀵硅薄
-     * @return 鐧诲綍璁板綍闆嗗悎
-     */
-    @Override
-    public List<SysLogininfor> selectLogininforList(SysLogininfor logininfor)
-    {
-        return logininforMapper.selectLogininforList(logininfor);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎绯荤粺鐧诲綍鏃ュ織
-     * 
-     * @param infoIds 闇�瑕佸垹闄ょ殑鐧诲綍鏃ュ織ID
-     * @return
-     */
-    @Override
-    public int deleteLogininforByIds(Long[] infoIds)
-    {
-        return logininforMapper.deleteLogininforByIds(infoIds);
-    }
-
-    /**
-     * 娓呯┖绯荤粺鐧诲綍鏃ュ織
-     */
-    @Override
-    public void cleanLogininfor()
-    {
-        logininforMapper.cleanLogininfor();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/monitor/service/impl/SysOperLogServiceImpl.java b/basic/src/main/java/com/dingzhuo/energy/project/monitor/service/impl/SysOperLogServiceImpl.java
deleted file mode 100644
index 8365dd4..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/monitor/service/impl/SysOperLogServiceImpl.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.dingzhuo.energy.project.monitor.service.impl;
-
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.project.monitor.domain.SysOperLog;
-import com.dingzhuo.energy.project.monitor.mapper.SysOperLogMapper;
-import com.dingzhuo.energy.project.monitor.service.ISysOperLogService;
-
-/**
- * 鎿嶄綔鏃ュ織 鏈嶅姟灞傚鐞�
- * 
- * @author ruoyi
- */
-@Service
-public class SysOperLogServiceImpl implements ISysOperLogService
-{
-    @Autowired
-    private SysOperLogMapper operLogMapper;
-
-    /**
-     * 鏂板鎿嶄綔鏃ュ織
-     * 
-     * @param operLog 鎿嶄綔鏃ュ織瀵硅薄
-     */
-    @Override
-    public void insertOperlog(SysOperLog operLog)
-    {
-        operLogMapper.insertOperlog(operLog);
-    }
-
-    /**
-     * 鏌ヨ绯荤粺鎿嶄綔鏃ュ織闆嗗悎
-     * 
-     * @param operLog 鎿嶄綔鏃ュ織瀵硅薄
-     * @return 鎿嶄綔鏃ュ織闆嗗悎
-     */
-    @Override
-    public List<SysOperLog> selectOperLogList(SysOperLog operLog)
-    {
-        return operLogMapper.selectOperLogList(operLog);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎绯荤粺鎿嶄綔鏃ュ織
-     * 
-     * @param operIds 闇�瑕佸垹闄ょ殑鎿嶄綔鏃ュ織ID
-     * @return 缁撴灉
-     */
-    public int deleteOperLogByIds(Long[] operIds)
-    {
-        return operLogMapper.deleteOperLogByIds(operIds);
-    }
-
-    /**
-     * 鏌ヨ鎿嶄綔鏃ュ織璇︾粏
-     * 
-     * @param operId 鎿嶄綔ID
-     * @return 鎿嶄綔鏃ュ織瀵硅薄
-     */
-    @Override
-    public SysOperLog selectOperLogById(Long operId)
-    {
-        return operLogMapper.selectOperLogById(operId);
-    }
-
-    /**
-     * 娓呯┖鎿嶄綔鏃ュ織
-     */
-    @Override
-    public void cleanOperLog()
-    {
-        operLogMapper.cleanOperLog();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysConfigController.java b/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysConfigController.java
deleted file mode 100644
index acc02a9..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysConfigController.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package com.dingzhuo.energy.project.system.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.common.constant.UserConstants;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.system.domain.SysConfig;
-import com.dingzhuo.energy.project.system.service.ISysConfigService;
-
-/**
- * 鍙傛暟閰嶇疆 淇℃伅鎿嶄綔澶勭悊
- * 
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/system/config")
-public class SysConfigController extends BaseController
-{
-    @Autowired
-    private ISysConfigService configService;
-
-    /**
-     * 鑾峰彇鍙傛暟閰嶇疆鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('system:config:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(SysConfig config)
-    {
-        startPage();
-        List<SysConfig> list = configService.selectConfigList(config);
-        return getDataTable(list);
-    }
-
-    @Log(title = "鍙傛暟绠$悊", businessType = BusinessType.EXPORT)
-    @PreAuthorize("@ss.hasPermi('system:config:export')")
-    @GetMapping("/export")
-    public AjaxResult export(SysConfig config)
-    {
-        List<SysConfig> list = configService.selectConfigList(config);
-        ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class);
-        return util.exportExcel(list, "鍙傛暟鏁版嵁");
-    }
-
-    /**
-     * 鏍规嵁鍙傛暟缂栧彿鑾峰彇璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('system:config:query')")
-    @GetMapping(value = "/{configId}")
-    public AjaxResult getInfo(@PathVariable Long configId)
-    {
-        return AjaxResult.success(configService.selectConfigById(configId));
-    }
-
-    /**
-     * 鏍规嵁鍙傛暟閿悕鏌ヨ鍙傛暟鍊�
-     */
-    @GetMapping(value = "/configKey/{configKey}")
-    public AjaxResult getConfigKey(@PathVariable String configKey)
-    {
-        return AjaxResult.success(configService.selectConfigByKey(configKey));
-    }
-
-    /**
-     * 鏂板鍙傛暟閰嶇疆
-     */
-    @PreAuthorize("@ss.hasPermi('system:config:add')")
-    @Log(title = "鍙傛暟绠$悊", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@Validated @RequestBody SysConfig config)
-    {
-        if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config)))
-        {
-            return AjaxResult.error("鏂板鍙傛暟'" + config.getConfigName() + "'澶辫触锛屽弬鏁伴敭鍚嶅凡瀛樺湪");
-        }
-        config.setCreateBy(SecurityUtils.getUsername());
-        return toAjax(configService.insertConfig(config));
-    }
-
-    /**
-     * 淇敼鍙傛暟閰嶇疆
-     */
-    @PreAuthorize("@ss.hasPermi('system:config:edit')")
-    @Log(title = "鍙傛暟绠$悊", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@Validated @RequestBody SysConfig config)
-    {
-        if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config)))
-        {
-            return AjaxResult.error("淇敼鍙傛暟'" + config.getConfigName() + "'澶辫触锛屽弬鏁伴敭鍚嶅凡瀛樺湪");
-        }
-        config.setUpdateBy(SecurityUtils.getUsername());
-        return toAjax(configService.updateConfig(config));
-    }
-
-    /**
-     * 鍒犻櫎鍙傛暟閰嶇疆
-     */
-    @PreAuthorize("@ss.hasPermi('system:config:remove')")
-    @Log(title = "鍙傛暟绠$悊", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{configIds}")
-    public AjaxResult remove(@PathVariable Long[] configIds)
-    {
-        return toAjax(configService.deleteConfigByIds(configIds));
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysDeptController.java b/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysDeptController.java
deleted file mode 100644
index da65418..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysDeptController.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package com.dingzhuo.energy.project.system.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.common.constant.UserConstants;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.system.domain.SysDept;
-import com.dingzhuo.energy.project.system.service.ISysDeptService;
-
-/**
- * 閮ㄩ棬淇℃伅
- * 
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/system/dept")
-public class SysDeptController extends BaseController
-{
-    @Autowired
-    private ISysDeptService deptService;
-
-    /**
-     * 鑾峰彇閮ㄩ棬鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('system:dept:list')")
-    @GetMapping("/list")
-    public AjaxResult list(SysDept dept)
-    {
-        List<SysDept> depts = deptService.selectDeptList(dept);
-        return AjaxResult.success(deptService.buildDeptTree(depts));
-    }
-
-    /**
-     * 鏍规嵁閮ㄩ棬缂栧彿鑾峰彇璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('system:dept:query')")
-    @GetMapping(value = "/{deptId}")
-    public AjaxResult getInfo(@PathVariable Long deptId)
-    {
-        return AjaxResult.success(deptService.selectDeptById(deptId));
-    }
-
-    /**
-     * 鑾峰彇閮ㄩ棬涓嬫媺鏍戝垪琛�
-     */
-    @GetMapping("/treeselect")
-    public AjaxResult treeselect(SysDept dept)
-    {
-        List<SysDept> depts = deptService.selectDeptList(dept);
-        return AjaxResult.success(deptService.buildDeptTreeSelect(depts));
-    }
-
-    /**
-     * 鍔犺浇瀵瑰簲瑙掕壊閮ㄩ棬鍒楄〃鏍�
-     */
-    @GetMapping(value = "/roleDeptTreeselect/{roleId}")
-    public AjaxResult roleDeptTreeselect(@PathVariable("roleId") Long roleId)
-    {
-        return AjaxResult.success(deptService.selectDeptListByRoleId(roleId));
-    }
-
-    /**
-     * 鏂板閮ㄩ棬
-     */
-    @PreAuthorize("@ss.hasPermi('system:dept:add')")
-    @Log(title = "閮ㄩ棬绠$悊", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@Validated @RequestBody SysDept dept)
-    {
-        if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
-        {
-            return AjaxResult.error("鏂板閮ㄩ棬'" + dept.getDeptName() + "'澶辫触锛岄儴闂ㄥ悕绉板凡瀛樺湪");
-        }
-        dept.setCreateBy(SecurityUtils.getUsername());
-        return toAjax(deptService.insertDept(dept));
-    }
-
-    /**
-     * 淇敼閮ㄩ棬
-     */
-    @PreAuthorize("@ss.hasPermi('system:dept:edit')")
-    @Log(title = "閮ㄩ棬绠$悊", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@Validated @RequestBody SysDept dept)
-    {
-        if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
-        {
-            return AjaxResult.error("淇敼閮ㄩ棬'" + dept.getDeptName() + "'澶辫触锛岄儴闂ㄥ悕绉板凡瀛樺湪");
-        }
-        else if (dept.getParentId().equals(dept.getDeptId()))
-        {
-            return AjaxResult.error("淇敼閮ㄩ棬'" + dept.getDeptName() + "'澶辫触锛屼笂绾ч儴闂ㄤ笉鑳芥槸鑷繁");
-        }
-        dept.setUpdateBy(SecurityUtils.getUsername());
-        return toAjax(deptService.updateDept(dept));
-    }
-
-    /**
-     * 鍒犻櫎閮ㄩ棬
-     */
-    @PreAuthorize("@ss.hasPermi('system:dept:remove')")
-    @Log(title = "閮ㄩ棬绠$悊", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{deptId}")
-    public AjaxResult remove(@PathVariable Long deptId)
-    {
-        if (deptService.hasChildByDeptId(deptId))
-        {
-            return AjaxResult.error("瀛樺湪涓嬬骇閮ㄩ棬,涓嶅厑璁稿垹闄�");
-        }
-        if (deptService.checkDeptExistUser(deptId))
-        {
-            return AjaxResult.error("閮ㄩ棬瀛樺湪鐢ㄦ埛,涓嶅厑璁稿垹闄�");
-        }
-        return toAjax(deptService.deleteDeptById(deptId));
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysDictDataController.java b/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysDictDataController.java
deleted file mode 100644
index 692995e..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysDictDataController.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package com.dingzhuo.energy.project.system.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.system.domain.SysDictData;
-import com.dingzhuo.energy.project.system.service.ISysDictDataService;
-
-/**
- * 鏁版嵁瀛楀吀淇℃伅
- * 
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/system/dict/data")
-public class SysDictDataController extends BaseController
-{
-    @Autowired
-    private ISysDictDataService dictDataService;
-
-    @PreAuthorize("@ss.hasPermi('system:dict:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(SysDictData dictData)
-    {
-        startPage();
-        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
-        return getDataTable(list);
-    }
-
-    @Log(title = "瀛楀吀鏁版嵁", businessType = BusinessType.EXPORT)
-    @PreAuthorize("@ss.hasPermi('system:dict:export')")
-    @GetMapping("/export")
-    public AjaxResult export(SysDictData dictData)
-    {
-        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
-        ExcelUtil<SysDictData> util = new ExcelUtil<SysDictData>(SysDictData.class);
-        return util.exportExcel(list, "瀛楀吀鏁版嵁");
-    }
-
-    /**
-     * 鏌ヨ瀛楀吀鏁版嵁璇︾粏
-     */
-    @PreAuthorize("@ss.hasPermi('system:dict:query')")
-    @GetMapping(value = "/{dictCode}")
-    public AjaxResult getInfo(@PathVariable Long dictCode)
-    {
-        return AjaxResult.success(dictDataService.selectDictDataById(dictCode));
-    }
-
-    /**
-     * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁淇℃伅
-     */
-    @GetMapping(value = "/dictType/{dictType}")
-    public AjaxResult dictType(@PathVariable String dictType)
-    {
-        return AjaxResult.success(dictDataService.selectDictDataByType(dictType));
-    }
-
-    /**
-     * 鏂板瀛楀吀绫诲瀷
-     */
-    @PreAuthorize("@ss.hasPermi('system:dict:add')")
-    @Log(title = "瀛楀吀鏁版嵁", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@Validated @RequestBody SysDictData dict)
-    {
-        dict.setCreateBy(SecurityUtils.getUsername());
-        return toAjax(dictDataService.insertDictData(dict));
-    }
-
-    /**
-     * 淇敼淇濆瓨瀛楀吀绫诲瀷
-     */
-    @PreAuthorize("@ss.hasPermi('system:dict:edit')")
-    @Log(title = "瀛楀吀鏁版嵁", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@Validated @RequestBody SysDictData dict)
-    {
-        dict.setUpdateBy(SecurityUtils.getUsername());
-        return toAjax(dictDataService.updateDictData(dict));
-    }
-
-    /**
-     * 鍒犻櫎瀛楀吀绫诲瀷
-     */
-    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
-    @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{dictCodes}")
-    public AjaxResult remove(@PathVariable Long[] dictCodes)
-    {
-        return toAjax(dictDataService.deleteDictDataByIds(dictCodes));
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysDictTypeController.java b/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysDictTypeController.java
deleted file mode 100644
index 3179bc0..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysDictTypeController.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package com.dingzhuo.energy.project.system.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.common.constant.UserConstants;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.system.domain.SysDictType;
-import com.dingzhuo.energy.project.system.service.ISysDictTypeService;
-
-/**
- * 鏁版嵁瀛楀吀淇℃伅
- * 
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/system/dict/type")
-public class SysDictTypeController extends BaseController
-{
-    @Autowired
-    private ISysDictTypeService dictTypeService;
-
-    @PreAuthorize("@ss.hasPermi('system:dict:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(SysDictType dictType)
-    {
-        startPage();
-        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
-        return getDataTable(list);
-    }
-
-    @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.EXPORT)
-    @PreAuthorize("@ss.hasPermi('system:dict:export')")
-    @GetMapping("/export")
-    public AjaxResult export(SysDictType dictType)
-    {
-        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
-        ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class);
-        return util.exportExcel(list, "瀛楀吀绫诲瀷");
-    }
-
-    /**
-     * 鏌ヨ瀛楀吀绫诲瀷璇︾粏
-     */
-    @PreAuthorize("@ss.hasPermi('system:dict:query')")
-    @GetMapping(value = "/{dictId}")
-    public AjaxResult getInfo(@PathVariable Long dictId)
-    {
-        return AjaxResult.success(dictTypeService.selectDictTypeById(dictId));
-    }
-
-    /**
-     * 鏂板瀛楀吀绫诲瀷
-     */
-    @PreAuthorize("@ss.hasPermi('system:dict:add')")
-    @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@Validated @RequestBody SysDictType dict)
-    {
-        if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict)))
-        {
-            return AjaxResult.error("鏂板瀛楀吀'" + dict.getDictName() + "'澶辫触锛屽瓧鍏哥被鍨嬪凡瀛樺湪");
-        }
-        dict.setCreateBy(SecurityUtils.getUsername());
-        return toAjax(dictTypeService.insertDictType(dict));
-    }
-
-    /**
-     * 淇敼瀛楀吀绫诲瀷
-     */
-    @PreAuthorize("@ss.hasPermi('system:dict:edit')")
-    @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@Validated @RequestBody SysDictType dict)
-    {
-        if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict)))
-        {
-            return AjaxResult.error("淇敼瀛楀吀'" + dict.getDictName() + "'澶辫触锛屽瓧鍏哥被鍨嬪凡瀛樺湪");
-        }
-        dict.setUpdateBy(SecurityUtils.getUsername());
-        return toAjax(dictTypeService.updateDictType(dict));
-    }
-
-    /**
-     * 鍒犻櫎瀛楀吀绫诲瀷
-     */
-    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
-    @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{dictIds}")
-    public AjaxResult remove(@PathVariable Long[] dictIds)
-    {
-        return toAjax(dictTypeService.deleteDictTypeByIds(dictIds));
-    }
-
-    /**
-     * 鑾峰彇瀛楀吀閫夋嫨妗嗗垪琛�
-     */
-    @GetMapping("/optionselect")
-    public AjaxResult optionselect()
-    {
-        List<SysDictType> dictTypes = dictTypeService.selectDictTypeAll();
-        return AjaxResult.success(dictTypes);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysLoginController.java b/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysLoginController.java
deleted file mode 100644
index 3c8029c..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysLoginController.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package com.dingzhuo.energy.project.system.controller;
-
-import java.util.List;
-import java.util.Set;
-
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.SysLoginService;
-import com.dingzhuo.energy.framework.security.service.SysPermissionService;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.common.constant.Constants;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.SysLoginService;
-import com.dingzhuo.energy.framework.security.service.SysPermissionService;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.system.domain.SysMenu;
-import com.dingzhuo.energy.project.system.domain.SysUser;
-import com.dingzhuo.energy.project.system.service.ISysMenuService;
-
-/**
- * 鐧诲綍楠岃瘉
- * 
- * @author ruoyi
- */
-@RestController
-public class SysLoginController
-{
-    @Autowired
-    private SysLoginService loginService;
-
-    @Autowired
-    private ISysMenuService menuService;
-
-    @Autowired
-    private SysPermissionService permissionService;
-
-    @Autowired
-    private TokenService tokenService;
-
-    /**
-     * 鐧诲綍鏂规硶
-     * 
-     * @param username 鐢ㄦ埛鍚�
-     * @param password 瀵嗙爜
-     * @param captcha 楠岃瘉鐮�
-     * @param uuid 鍞竴鏍囪瘑
-     * @return 缁撴灉
-     */
-    @PostMapping("/login")
-    public AjaxResult login(String username, String password, String code, String uuid)
-    {
-        AjaxResult ajax = AjaxResult.success();
-        // 鐢熸垚浠ょ墝
-        String token = loginService.login(username, password, code, uuid);
-        ajax.put(Constants.TOKEN, token);
-        return ajax;
-    }
-
-    /**
-     * 鑾峰彇鐢ㄦ埛淇℃伅
-     * 
-     * @return 鐢ㄦ埛淇℃伅
-     */
-    @GetMapping("getInfo")
-    public AjaxResult getInfo()
-    {
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        SysUser user = loginUser.getUser();
-        // 瑙掕壊闆嗗悎
-        Set<String> roles = permissionService.getRolePermission(user);
-        // 鏉冮檺闆嗗悎
-        Set<String> permissions = permissionService.getMenuPermission(user);
-        AjaxResult ajax = AjaxResult.success();
-        ajax.put("user", user);
-        ajax.put("roles", roles);
-        ajax.put("permissions", permissions);
-        return ajax;
-    }
-
-    /**
-     * 鑾峰彇璺敱淇℃伅
-     * 
-     * @return 璺敱淇℃伅
-     */
-    @GetMapping("getRouters")
-    public AjaxResult getRouters()
-    {
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        // 鐢ㄦ埛淇℃伅
-        SysUser user = loginUser.getUser();
-        List<SysMenu> menus = menuService.selectMenuTreeByUserId(user.getUserId());
-        return AjaxResult.success(menuService.buildMenus(menus));
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysMenuController.java b/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysMenuController.java
deleted file mode 100644
index 806e2c2..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysMenuController.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package com.dingzhuo.energy.project.system.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.common.constant.UserConstants;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.system.domain.SysMenu;
-import com.dingzhuo.energy.project.system.service.ISysMenuService;
-
-/**
- * 鑿滃崟淇℃伅
- * 
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/system/menu")
-public class SysMenuController extends BaseController
-{
-    @Autowired
-    private ISysMenuService menuService;
-
-    /**
-     * 鑾峰彇鑿滃崟鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('system:menu:list')")
-    @GetMapping("/list")
-    public AjaxResult list(SysMenu menu)
-    {
-        List<SysMenu> menus = menuService.selectMenuList(menu);
-        return AjaxResult.success(menuService.buildMenuTree(menus));
-    }
-
-    /**
-     * 鏍规嵁鑿滃崟缂栧彿鑾峰彇璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('system:menu:query')")
-    @GetMapping(value = "/{menuId}")
-    public AjaxResult getInfo(@PathVariable Long menuId)
-    {
-        return AjaxResult.success(menuService.selectMenuById(menuId));
-    }
-
-    /**
-     * 鑾峰彇鑿滃崟涓嬫媺鏍戝垪琛�
-     */
-    @GetMapping("/treeselect")
-    public AjaxResult treeselect(SysMenu dept)
-    {
-        List<SysMenu> menus = menuService.selectMenuList(dept);
-        return AjaxResult.success(menuService.buildMenuTreeSelect(menus));
-    }
-
-    /**
-     * 鍔犺浇瀵瑰簲瑙掕壊鑿滃崟鍒楄〃鏍�
-     */
-    @GetMapping(value = "/roleMenuTreeselect/{roleId}")
-    public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
-    {
-        return AjaxResult.success(menuService.selectMenuListByRoleId(roleId));
-    }
-
-    /**
-     * 鏂板鑿滃崟
-     */
-    @PreAuthorize("@ss.hasPermi('system:menu:add')")
-    @Log(title = "鑿滃崟绠$悊", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@Validated @RequestBody SysMenu menu)
-    {
-        if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu)))
-        {
-            return AjaxResult.error("鏂板鑿滃崟'" + menu.getMenuName() + "'澶辫触锛岃彍鍗曞悕绉板凡瀛樺湪");
-        }
-        menu.setCreateBy(SecurityUtils.getUsername());
-        return toAjax(menuService.insertMenu(menu));
-    }
-
-    /**
-     * 淇敼鑿滃崟
-     */
-    @PreAuthorize("@ss.hasPermi('system:menu:edit')")
-    @Log(title = "鑿滃崟绠$悊", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@Validated @RequestBody SysMenu menu)
-    {
-        if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu)))
-        {
-            return AjaxResult.error("淇敼鑿滃崟'" + menu.getMenuName() + "'澶辫触锛岃彍鍗曞悕绉板凡瀛樺湪");
-        }
-        menu.setUpdateBy(SecurityUtils.getUsername());
-        return toAjax(menuService.updateMenu(menu));
-    }
-
-    /**
-     * 鍒犻櫎鑿滃崟
-     */
-    @PreAuthorize("@ss.hasPermi('system:menu:remove')")
-    @Log(title = "鑿滃崟绠$悊", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{menuId}")
-    public AjaxResult remove(@PathVariable("menuId") Long menuId)
-    {
-        if (menuService.hasChildByMenuId(menuId))
-        {
-            return AjaxResult.error("瀛樺湪瀛愯彍鍗�,涓嶅厑璁稿垹闄�");
-        }
-        if (menuService.checkMenuExistRole(menuId))
-        {
-            return AjaxResult.error("鑿滃崟宸插垎閰�,涓嶅厑璁稿垹闄�");
-        }
-        return toAjax(menuService.deleteMenuById(menuId));
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysNoticeController.java b/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysNoticeController.java
deleted file mode 100644
index 85a7a94..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysNoticeController.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package com.dingzhuo.energy.project.system.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.system.domain.SysNotice;
-import com.dingzhuo.energy.project.system.service.ISysNoticeService;
-
-/**
- * 鍏憡 淇℃伅鎿嶄綔澶勭悊
- * 
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/system/notice")
-public class SysNoticeController extends BaseController
-{
-    @Autowired
-    private ISysNoticeService noticeService;
-
-    /**
-     * 鑾峰彇閫氱煡鍏憡鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('system:notice:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(SysNotice notice)
-    {
-        startPage();
-        List<SysNotice> list = noticeService.selectNoticeList(notice);
-        return getDataTable(list);
-    }
-
-    /**
-     * 鏍规嵁閫氱煡鍏憡缂栧彿鑾峰彇璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('system:notice:query')")
-    @GetMapping(value = "/{noticeId}")
-    public AjaxResult getInfo(@PathVariable Long noticeId)
-    {
-        return AjaxResult.success(noticeService.selectNoticeById(noticeId));
-    }
-
-    /**
-     * 鏂板閫氱煡鍏憡
-     */
-    @PreAuthorize("@ss.hasPermi('system:notice:add')")
-    @Log(title = "閫氱煡鍏憡", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@Validated @RequestBody SysNotice notice)
-    {
-        notice.setCreateBy(SecurityUtils.getUsername());
-        return toAjax(noticeService.insertNotice(notice));
-    }
-
-    /**
-     * 淇敼閫氱煡鍏憡
-     */
-    @PreAuthorize("@ss.hasPermi('system:notice:edit')")
-    @Log(title = "閫氱煡鍏憡", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@Validated @RequestBody SysNotice notice)
-    {
-        notice.setUpdateBy(SecurityUtils.getUsername());
-        return toAjax(noticeService.updateNotice(notice));
-    }
-
-    /**
-     * 鍒犻櫎閫氱煡鍏憡
-     */
-    @PreAuthorize("@ss.hasPermi('system:notice:remove')")
-    @Log(title = "閫氱煡鍏憡", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{noticeId}")
-    public AjaxResult remove(@PathVariable Long noticeId)
-    {
-        return toAjax(noticeService.deleteNoticeById(noticeId));
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysPostController.java b/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysPostController.java
deleted file mode 100644
index 75d8b80..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysPostController.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package com.dingzhuo.energy.project.system.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.common.constant.UserConstants;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.system.domain.SysPost;
-import com.dingzhuo.energy.project.system.service.ISysPostService;
-
-/**
- * 宀椾綅淇℃伅鎿嶄綔澶勭悊
- * 
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/system/post")
-public class SysPostController extends BaseController
-{
-    @Autowired
-    private ISysPostService postService;
-
-    /**
-     * 鑾峰彇宀椾綅鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('system:post:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(SysPost post)
-    {
-        startPage();
-        List<SysPost> list = postService.selectPostList(post);
-        return getDataTable(list);
-    }
-    
-    @Log(title = "宀椾綅绠$悊", businessType = BusinessType.EXPORT)
-    @PreAuthorize("@ss.hasPermi('system:config:export')")
-    @GetMapping("/export")
-    public AjaxResult export(SysPost post)
-    {
-        List<SysPost> list = postService.selectPostList(post);
-        ExcelUtil<SysPost> util = new ExcelUtil<SysPost>(SysPost.class);
-        return util.exportExcel(list, "宀椾綅鏁版嵁");
-    }
-
-    /**
-     * 鏍规嵁宀椾綅缂栧彿鑾峰彇璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('system:post:query')")
-    @GetMapping(value = "/{postId}")
-    public AjaxResult getInfo(@PathVariable Long postId)
-    {
-        return AjaxResult.success(postService.selectPostById(postId));
-    }
-
-    /**
-     * 鏂板宀椾綅
-     */
-    @PreAuthorize("@ss.hasPermi('system:post:add')")
-    @Log(title = "宀椾綅绠$悊", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@Validated @RequestBody SysPost post)
-    {
-        if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post)))
-        {
-            return AjaxResult.error("鏂板宀椾綅'" + post.getPostName() + "'澶辫触锛屽矖浣嶅悕绉板凡瀛樺湪");
-        }
-        else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post)))
-        {
-            return AjaxResult.error("鏂板宀椾綅'" + post.getPostName() + "'澶辫触锛屽矖浣嶇紪鐮佸凡瀛樺湪");
-        }
-        post.setCreateBy(SecurityUtils.getUsername());
-        return toAjax(postService.insertPost(post));
-    }
-
-    /**
-     * 淇敼宀椾綅
-     */
-    @PreAuthorize("@ss.hasPermi('system:post:edit')")
-    @Log(title = "宀椾綅绠$悊", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@Validated @RequestBody SysPost post)
-    {
-        if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post)))
-        {
-            return AjaxResult.error("淇敼宀椾綅'" + post.getPostName() + "'澶辫触锛屽矖浣嶅悕绉板凡瀛樺湪");
-        }
-        else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post)))
-        {
-            return AjaxResult.error("淇敼宀椾綅'" + post.getPostName() + "'澶辫触锛屽矖浣嶇紪鐮佸凡瀛樺湪");
-        }
-        post.setUpdateBy(SecurityUtils.getUsername());
-        return toAjax(postService.updatePost(post));
-    }
-
-    /**
-     * 鍒犻櫎宀椾綅
-     */
-    @PreAuthorize("@ss.hasPermi('system:post:remove')")
-    @Log(title = "宀椾綅绠$悊", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{postIds}")
-    public AjaxResult remove(@PathVariable Long[] postIds)
-    {
-        return toAjax(postService.deletePostByIds(postIds));
-    }
-
-    /**
-     * 鑾峰彇宀椾綅閫夋嫨妗嗗垪琛�
-     */
-    @GetMapping("/optionselect")
-    public AjaxResult optionselect()
-    {
-        List<SysPost> posts = postService.selectPostAll();
-        return AjaxResult.success(posts);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysProfileController.java b/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysProfileController.java
deleted file mode 100644
index 5ad6922..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysProfileController.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package com.dingzhuo.energy.project.system.controller;
-
-import java.io.IOException;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.config.RuoYiConfig;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.common.utils.file.FileUploadUtils;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.config.RuoYiConfig;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.system.domain.SysUser;
-import com.dingzhuo.energy.project.system.service.ISysUserService;
-
-/**
- * 涓汉淇℃伅 涓氬姟澶勭悊
- * 
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/system/user/profile")
-public class SysProfileController extends BaseController
-{
-    @Autowired
-    private ISysUserService userService;
-
-    @Autowired
-    private TokenService tokenService;
-
-    /**
-     * 涓汉淇℃伅
-     */
-    @GetMapping
-    public AjaxResult profile()
-    {
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        SysUser user = loginUser.getUser();
-        AjaxResult ajax = AjaxResult.success(user);
-        ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername()));
-        ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername()));
-        return ajax;
-    }
-
-    /**
-     * 淇敼鐢ㄦ埛
-     */
-    @Log(title = "涓汉淇℃伅", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult updateProfile(@RequestBody SysUser user)
-    {
-        return toAjax(userService.updateUserProfile(user));
-    }
-
-    /**
-     * 閲嶇疆瀵嗙爜
-     */
-    @Log(title = "涓汉淇℃伅", businessType = BusinessType.UPDATE)
-    @PutMapping("/updatePwd")
-    public AjaxResult updatePwd(String oldPassword, String newPassword)
-    {
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        String userName = loginUser.getUsername();
-        String password = loginUser.getPassword();
-        if (!SecurityUtils.matchesPassword(oldPassword, password))
-        {
-            return AjaxResult.error("淇敼瀵嗙爜澶辫触锛屾棫瀵嗙爜閿欒");
-        }
-        if (SecurityUtils.matchesPassword(newPassword, password))
-        {
-            return AjaxResult.error("鏂板瘑鐮佷笉鑳戒笌鏃у瘑鐮佺浉鍚�");
-        }
-        return toAjax(userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)));
-    }
-
-    /**
-     * 澶村儚涓婁紶
-     */
-    @Log(title = "鐢ㄦ埛澶村儚", businessType = BusinessType.UPDATE)
-    @PostMapping("/avatar")
-    public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws IOException
-    {
-        if (!file.isEmpty())
-        {
-            LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-            String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file);
-            if (userService.updateUserAvatar(loginUser.getUsername(), avatar))
-            {
-                AjaxResult ajax = AjaxResult.success();
-                ajax.put("imgUrl", avatar);
-                loginUser.getUser().setAvatar(avatar);
-                tokenService.setLoginUser(loginUser);
-                return ajax;
-            }
-        }
-        return AjaxResult.error("涓婁紶鍥剧墖寮傚父锛岃鑱旂郴绠$悊鍛�");
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysRoleController.java b/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysRoleController.java
deleted file mode 100644
index 70f95db..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysRoleController.java
+++ /dev/null
@@ -1,160 +0,0 @@
-package com.dingzhuo.energy.project.system.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.common.constant.UserConstants;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.system.domain.SysRole;
-import com.dingzhuo.energy.project.system.service.ISysRoleService;
-
-/**
- * 瑙掕壊淇℃伅
- * 
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/system/role")
-public class SysRoleController extends BaseController
-{
-    @Autowired
-    private ISysRoleService roleService;
-
-    @PreAuthorize("@ss.hasPermi('system:role:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(SysRole role)
-    {
-        startPage();
-        List<SysRole> list = roleService.selectRoleList(role);
-        return getDataTable(list);
-    }
-
-    @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.EXPORT)
-    @PreAuthorize("@ss.hasPermi('system:role:export')")
-    @GetMapping("/export")
-    public AjaxResult export(SysRole role)
-    {
-        List<SysRole> list = roleService.selectRoleList(role);
-        ExcelUtil<SysRole> util = new ExcelUtil<SysRole>(SysRole.class);
-        return util.exportExcel(list, "瑙掕壊鏁版嵁");
-    }
-
-    /**
-     * 鏍规嵁瑙掕壊缂栧彿鑾峰彇璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('system:role:query')")
-    @GetMapping(value = "/{roleId}")
-    public AjaxResult getInfo(@PathVariable Long roleId)
-    {
-        return AjaxResult.success(roleService.selectRoleById(roleId));
-    }
-
-    /**
-     * 鏂板瑙掕壊
-     */
-    @PreAuthorize("@ss.hasPermi('system:role:add')")
-    @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@Validated @RequestBody SysRole role)
-    {
-        if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
-        {
-            return AjaxResult.error("鏂板瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑹插悕绉板凡瀛樺湪");
-        }
-        else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role)))
-        {
-            return AjaxResult.error("鏂板瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑹叉潈闄愬凡瀛樺湪");
-        }
-        role.setCreateBy(SecurityUtils.getUsername());
-        return toAjax(roleService.insertRole(role));
-
-    }
-
-    /**
-     * 淇敼淇濆瓨瑙掕壊
-     */
-    @PreAuthorize("@ss.hasPermi('system:role:edit')")
-    @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@Validated @RequestBody SysRole role)
-    {
-        roleService.checkRoleAllowed(role);
-        if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
-        {
-            return AjaxResult.error("淇敼瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑹插悕绉板凡瀛樺湪");
-        }
-        else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role)))
-        {
-            return AjaxResult.error("淇敼瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑹叉潈闄愬凡瀛樺湪");
-        }
-        role.setUpdateBy(SecurityUtils.getUsername());
-        return toAjax(roleService.updateRole(role));
-    }
-
-    /**
-     * 淇敼淇濆瓨鏁版嵁鏉冮檺
-     */
-    @PreAuthorize("@ss.hasPermi('system:role:edit')")
-    @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.UPDATE)
-    @PutMapping("/dataScope")
-    public AjaxResult dataScope(@RequestBody SysRole role)
-    {
-        roleService.checkRoleAllowed(role);
-        return toAjax(roleService.authDataScope(role));
-    }
-
-    /**
-     * 鐘舵�佷慨鏀�
-     */
-    @PreAuthorize("@ss.hasPermi('system:role:edit')")
-    @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.UPDATE)
-    @PutMapping("/changeStatus")
-    public AjaxResult changeStatus(@RequestBody SysRole role)
-    {
-        roleService.checkRoleAllowed(role);
-        role.setUpdateBy(SecurityUtils.getUsername());
-        return toAjax(roleService.updateRoleStatus(role));
-    }
-
-    /**
-     * 鍒犻櫎瑙掕壊
-     */
-    @PreAuthorize("@ss.hasPermi('system:role:remove')")
-    @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{roleIds}")
-    public AjaxResult remove(@PathVariable Long[] roleIds)
-    {
-        return toAjax(roleService.deleteRoleByIds(roleIds));
-    }
-
-    /**
-     * 鑾峰彇瑙掕壊閫夋嫨妗嗗垪琛�
-     */
-    @PreAuthorize("@ss.hasPermi('system:role:query')")
-    @GetMapping("/optionselect")
-    public AjaxResult optionselect()
-    {
-        return AjaxResult.success(roleService.selectRoleAll());
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysUserController.java b/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysUserController.java
deleted file mode 100644
index e83c4f3..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/controller/SysUserController.java
+++ /dev/null
@@ -1,206 +0,0 @@
-package com.dingzhuo.energy.project.system.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
-import com.dingzhuo.energy.common.constant.UserConstants;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.system.domain.SysUser;
-import com.dingzhuo.energy.project.system.service.ISysPostService;
-import com.dingzhuo.energy.project.system.service.ISysRoleService;
-import com.dingzhuo.energy.project.system.service.ISysUserService;
-
-/**
- * 鐢ㄦ埛淇℃伅
- * 
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/system/user")
-public class SysUserController extends BaseController
-{
-    @Autowired
-    private ISysUserService userService;
-
-    @Autowired
-    private ISysRoleService roleService;
-
-    @Autowired
-    private ISysPostService postService;
-
-    @Autowired
-    private TokenService tokenService;
-
-    /**
-     * 鑾峰彇鐢ㄦ埛鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('system:user:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(SysUser user)
-    {
-        startPage();
-        List<SysUser> list = userService.selectUserList(user);
-        return getDataTable(list);
-    }
-
-    @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.EXPORT)
-    @PreAuthorize("@ss.hasPermi('system:user:export')")
-    @GetMapping("/export")
-    public AjaxResult export(SysUser user)
-    {
-        List<SysUser> list = userService.selectUserList(user);
-        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
-        return util.exportExcel(list, "鐢ㄦ埛鏁版嵁");
-    }
-
-    @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.IMPORT)
-    @PreAuthorize("@ss.hasPermi('system:user:import')")
-    @PostMapping("/importData")
-    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
-    {
-        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
-        List<SysUser> userList = util.importExcel(file.getInputStream());
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        String operName = loginUser.getUsername();
-        String message = userService.importUser(userList, updateSupport, operName);
-        return AjaxResult.success(message);
-    }
-
-    @GetMapping("/importTemplate")
-    public AjaxResult importTemplate()
-    {
-        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
-        return util.importTemplateExcel("鐢ㄦ埛鏁版嵁");
-    }
-
-    /**
-     * 鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('system:user:query')")
-    @GetMapping(value = { "/", "/{userId}" })
-    public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
-    {
-        AjaxResult ajax = AjaxResult.success();
-        ajax.put("roles", roleService.selectRoleAll());
-        ajax.put("posts", postService.selectPostAll());
-        if (StringUtils.isNotNull(userId))
-        {
-            ajax.put(AjaxResult.DATA_TAG, userService.selectUserById(userId));
-            ajax.put("postIds", postService.selectPostListByUserId(userId));
-            ajax.put("roleIds", roleService.selectRoleListByUserId(userId));
-        }
-        return ajax;
-    }
-
-    /**
-     * 鏂板鐢ㄦ埛
-     */
-    @PreAuthorize("@ss.hasPermi('system:user:add')")
-    @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@Validated @RequestBody SysUser user)
-    {
-        if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user.getUserName())))
-        {
-            return AjaxResult.error("鏂板鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛岀櫥褰曡处鍙峰凡瀛樺湪");
-        }
-        else if (UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
-        {
-            return AjaxResult.error("鏂板鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛屾墜鏈哄彿鐮佸凡瀛樺湪");
-        }
-        else if (UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
-        {
-            return AjaxResult.error("鏂板鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛岄偖绠辫处鍙峰凡瀛樺湪");
-        }
-        user.setCreateBy(SecurityUtils.getUsername());
-        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
-        return toAjax(userService.insertUser(user));
-    }
-
-    /**
-     * 淇敼鐢ㄦ埛
-     */
-    @PreAuthorize("@ss.hasPermi('system:user:edit')")
-    @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@Validated @RequestBody SysUser user)
-    {
-        userService.checkUserAllowed(user);
-        if (UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
-        {
-            return AjaxResult.error("淇敼鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛屾墜鏈哄彿鐮佸凡瀛樺湪");
-        }
-        else if (UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
-        {
-            return AjaxResult.error("淇敼鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛岄偖绠辫处鍙峰凡瀛樺湪");
-        }
-        user.setUpdateBy(SecurityUtils.getUsername());
-        return toAjax(userService.updateUser(user));
-    }
-
-    /**
-     * 鍒犻櫎鐢ㄦ埛
-     */
-    @PreAuthorize("@ss.hasPermi('system:user:remove')")
-    @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{userIds}")
-    public AjaxResult remove(@PathVariable Long[] userIds)
-    {
-        return toAjax(userService.deleteUserByIds(userIds));
-    }
-
-    /**
-     * 閲嶇疆瀵嗙爜
-     */
-    @PreAuthorize("@ss.hasPermi('system:user:edit')")
-    @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.UPDATE)
-    @PutMapping("/resetPwd")
-    public AjaxResult resetPwd(@RequestBody SysUser user)
-    {
-        userService.checkUserAllowed(user);
-        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
-        user.setUpdateBy(SecurityUtils.getUsername());
-        return toAjax(userService.resetPwd(user));
-    }
-
-    /**
-     * 鐘舵�佷慨鏀�
-     */
-    @PreAuthorize("@ss.hasPermi('system:user:edit')")
-    @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.UPDATE)
-    @PutMapping("/changeStatus")
-    public AjaxResult changeStatus(@RequestBody SysUser user)
-    {
-        userService.checkUserAllowed(user);
-        user.setUpdateBy(SecurityUtils.getUsername());
-        return toAjax(userService.updateUserStatus(user));
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysConfig.java b/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysConfig.java
deleted file mode 100644
index a6ec5c5..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysConfig.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package com.dingzhuo.energy.project.system.domain;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel.ColumnType;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 鍙傛暟閰嶇疆琛� sys_config
- * 
- * @author ruoyi
- */
-public class SysConfig extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 鍙傛暟涓婚敭 */
-    @Excel(name = "鍙傛暟涓婚敭", cellType = Excel.ColumnType.NUMERIC)
-    private Long configId;
-
-    /** 鍙傛暟鍚嶇О */
-    @Excel(name = "鍙傛暟鍚嶇О")
-    private String configName;
-
-    /** 鍙傛暟閿悕 */
-    @Excel(name = "鍙傛暟閿悕")
-    private String configKey;
-
-    /** 鍙傛暟閿�� */
-    @Excel(name = "鍙傛暟閿��")
-    private String configValue;
-
-    /** 绯荤粺鍐呯疆锛圷鏄� N鍚︼級 */
-    @Excel(name = "绯荤粺鍐呯疆", readConverterExp = "Y=鏄�,N=鍚�")
-    private String configType;
-
-    public Long getConfigId()
-    {
-        return configId;
-    }
-
-    public void setConfigId(Long configId)
-    {
-        this.configId = configId;
-    }
-
-    @NotBlank(message = "鍙傛暟鍚嶇О涓嶈兘涓虹┖")
-    @Size(min = 0, max = 100, message = "鍙傛暟鍚嶇О涓嶈兘瓒呰繃100涓瓧绗�")
-    public String getConfigName()
-    {
-        return configName;
-    }
-
-    public void setConfigName(String configName)
-    {
-        this.configName = configName;
-    }
-
-    @NotBlank(message = "鍙傛暟閿悕闀垮害涓嶈兘涓虹┖")
-    @Size(min = 0, max = 100, message = "鍙傛暟閿悕闀垮害涓嶈兘瓒呰繃100涓瓧绗�")
-    public String getConfigKey()
-    {
-        return configKey;
-    }
-
-    public void setConfigKey(String configKey)
-    {
-        this.configKey = configKey;
-    }
-
-    @NotBlank(message = "鍙傛暟閿�间笉鑳戒负绌�")
-    @Size(min = 0, max = 500, message = "鍙傛暟閿�奸暱搴︿笉鑳借秴杩�500涓瓧绗�")
-    public String getConfigValue()
-    {
-        return configValue;
-    }
-
-    public void setConfigValue(String configValue)
-    {
-        this.configValue = configValue;
-    }
-
-    public String getConfigType()
-    {
-        return configType;
-    }
-
-    public void setConfigType(String configType)
-    {
-        this.configType = configType;
-    }
-    
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("configId", getConfigId())
-            .append("configName", getConfigName())
-            .append("configKey", getConfigKey())
-            .append("configValue", getConfigValue())
-            .append("configType", getConfigType())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .append("remark", getRemark())
-            .toString();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysDept.java b/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysDept.java
deleted file mode 100644
index 0c828c8..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysDept.java
+++ /dev/null
@@ -1,205 +0,0 @@
-package com.dingzhuo.energy.project.system.domain;
-
-import java.util.ArrayList;
-import java.util.List;
-import javax.validation.constraints.Email;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 閮ㄩ棬琛� sys_dept
- * 
- * @author ruoyi
- */
-public class SysDept extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 閮ㄩ棬ID */
-    private Long deptId;
-
-    /** 鐖堕儴闂↖D */
-    private Long parentId;
-
-    /** 绁栫骇鍒楄〃 */
-    private String ancestors;
-
-    /** 閮ㄩ棬鍚嶇О */
-    private String deptName;
-
-    /** 鏄剧ず椤哄簭 */
-    private Integer orderNum;
-
-    /** 璐熻矗浜� */
-    private String leader;
-
-    /** 鑱旂郴鐢佃瘽 */
-    private String phone;
-
-    /** 閭 */
-    private String email;
-
-    /** 閮ㄩ棬鐘舵��:0姝e父,1鍋滅敤 */
-    private String status;
-
-    /** 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛� */
-    private String delFlag;
-
-    /** 鐖堕儴闂ㄥ悕绉� */
-    private String parentName;
-    
-    /** 瀛愰儴闂� */
-    private List<SysDept> children = new ArrayList<SysDept>();
-
-    public Long getDeptId()
-    {
-        return deptId;
-    }
-
-    public void setDeptId(Long deptId)
-    {
-        this.deptId = deptId;
-    }
-
-    public Long getParentId()
-    {
-        return parentId;
-    }
-
-    public void setParentId(Long parentId)
-    {
-        this.parentId = parentId;
-    }
-
-    public String getAncestors()
-    {
-        return ancestors;
-    }
-
-    public void setAncestors(String ancestors)
-    {
-        this.ancestors = ancestors;
-    }
-
-    @NotBlank(message = "閮ㄩ棬鍚嶇О涓嶈兘涓虹┖")
-    @Size(min = 0, max = 30, message = "閮ㄩ棬鍚嶇О闀垮害涓嶈兘瓒呰繃30涓瓧绗�")
-    public String getDeptName()
-    {
-        return deptName;
-    }
-
-    public void setDeptName(String deptName)
-    {
-        this.deptName = deptName;
-    }
-
-    @NotNull(message = "鏄剧ず椤哄簭涓嶈兘涓虹┖")
-    public Integer getOrderNum()
-    {
-        return orderNum;
-    }
-
-    public void setOrderNum(Integer orderNum)
-    {
-        this.orderNum = orderNum;
-    }
-
-    public String getLeader()
-    {
-        return leader;
-    }
-
-    public void setLeader(String leader)
-    {
-        this.leader = leader;
-    }
-
-    @Size(min = 0, max = 11, message = "鑱旂郴鐢佃瘽闀垮害涓嶈兘瓒呰繃11涓瓧绗�")
-    public String getPhone()
-    {
-        return phone;
-    }
-
-    public void setPhone(String phone)
-    {
-        this.phone = phone;
-    }
-
-    @Email(message = "閭鏍煎紡涓嶆纭�")
-    @Size(min = 0, max = 50, message = "閭闀垮害涓嶈兘瓒呰繃50涓瓧绗�")
-    public String getEmail()
-    {
-        return email;
-    }
-
-    public void setEmail(String email)
-    {
-        this.email = email;
-    }
-
-    public String getStatus()
-    {
-        return status;
-    }
-
-    public void setStatus(String status)
-    {
-        this.status = status;
-    }
-
-    public String getDelFlag()
-    {
-        return delFlag;
-    }
-
-    public void setDelFlag(String delFlag)
-    {
-        this.delFlag = delFlag;
-    }
-
-    public String getParentName()
-    {
-        return parentName;
-    }
-
-    public void setParentName(String parentName)
-    {
-        this.parentName = parentName;
-    }
-
-    public List<SysDept> getChildren()
-    {
-        return children;
-    }
-
-    public void setChildren(List<SysDept> children)
-    {
-        this.children = children;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("deptId", getDeptId())
-            .append("parentId", getParentId())
-            .append("ancestors", getAncestors())
-            .append("deptName", getDeptName())
-            .append("orderNum", getOrderNum())
-            .append("leader", getLeader())
-            .append("phone", getPhone())
-            .append("email", getEmail())
-            .append("status", getStatus())
-            .append("delFlag", getDelFlag())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .toString();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysDictData.java b/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysDictData.java
deleted file mode 100644
index d5efb55..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysDictData.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package com.dingzhuo.energy.project.system.domain;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.common.constant.UserConstants;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel.ColumnType;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 瀛楀吀鏁版嵁琛� sys_dict_data
- * 
- * @author ruoyi
- */
-public class SysDictData extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 瀛楀吀缂栫爜 */
-    @Excel(name = "瀛楀吀缂栫爜", cellType = Excel.ColumnType.NUMERIC)
-    private Long dictCode;
-
-    /** 瀛楀吀鎺掑簭 */
-    @Excel(name = "瀛楀吀鎺掑簭", cellType = Excel.ColumnType.NUMERIC)
-    private Long dictSort;
-
-    /** 瀛楀吀鏍囩 */
-    @Excel(name = "瀛楀吀鏍囩")
-    private String dictLabel;
-
-    /** 瀛楀吀閿�� */
-    @Excel(name = "瀛楀吀閿��")
-    private String dictValue;
-
-    /** 瀛楀吀绫诲瀷 */
-    @Excel(name = "瀛楀吀绫诲瀷")
-    private String dictType;
-
-    /** 鏍峰紡灞炴�э紙鍏朵粬鏍峰紡鎵╁睍锛� */
-    private String cssClass;
-
-    /** 琛ㄦ牸瀛楀吀鏍峰紡 */
-    private String listClass;
-
-    /** 鏄惁榛樿锛圷鏄� N鍚︼級 */
-    @Excel(name = "鏄惁榛樿", readConverterExp = "Y=鏄�,N=鍚�")
-    private String isDefault;
-
-    /** 鐘舵�侊紙0姝e父 1鍋滅敤锛� */
-    @Excel(name = "鐘舵��", readConverterExp = "0=姝e父,1=鍋滅敤")
-    private String status;
-
-    public Long getDictCode()
-    {
-        return dictCode;
-    }
-
-    public void setDictCode(Long dictCode)
-    {
-        this.dictCode = dictCode;
-    }
-
-    public Long getDictSort()
-    {
-        return dictSort;
-    }
-
-    public void setDictSort(Long dictSort)
-    {
-        this.dictSort = dictSort;
-    }
-
-    @NotBlank(message = "瀛楀吀鏍囩涓嶈兘涓虹┖")
-    @Size(min = 0, max = 100, message = "瀛楀吀鏍囩闀垮害涓嶈兘瓒呰繃100涓瓧绗�")
-    public String getDictLabel()
-    {
-        return dictLabel;
-    }
-
-    public void setDictLabel(String dictLabel)
-    {
-        this.dictLabel = dictLabel;
-    }
-
-    @NotBlank(message = "瀛楀吀閿�间笉鑳戒负绌�")
-    @Size(min = 0, max = 100, message = "瀛楀吀閿�奸暱搴︿笉鑳借秴杩�100涓瓧绗�")
-    public String getDictValue()
-    {
-        return dictValue;
-    }
-
-    public void setDictValue(String dictValue)
-    {
-        this.dictValue = dictValue;
-    }
-
-    @NotBlank(message = "瀛楀吀绫诲瀷涓嶈兘涓虹┖")
-    @Size(min = 0, max = 100, message = "瀛楀吀绫诲瀷闀垮害涓嶈兘瓒呰繃100涓瓧绗�")
-    public String getDictType()
-    {
-        return dictType;
-    }
-
-    public void setDictType(String dictType)
-    {
-        this.dictType = dictType;
-    }
-
-    @Size(min = 0, max = 100, message = "鏍峰紡灞炴�ч暱搴︿笉鑳借秴杩�100涓瓧绗�")
-    public String getCssClass()
-    {
-        return cssClass;
-    }
-
-    public void setCssClass(String cssClass)
-    {
-        this.cssClass = cssClass;
-    }
-
-    public String getListClass()
-    {
-        return listClass;
-    }
-
-    public void setListClass(String listClass)
-    {
-        this.listClass = listClass;
-    }
-
-    public boolean getDefault()
-    {
-        return UserConstants.YES.equals(this.isDefault);
-    }
-
-    public String getIsDefault()
-    {
-        return isDefault;
-    }
-
-    public void setIsDefault(String isDefault)
-    {
-        this.isDefault = isDefault;
-    }
-
-    public String getStatus()
-    {
-        return status;
-    }
-
-    public void setStatus(String status)
-    {
-        this.status = status;
-    }
-    
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("dictCode", getDictCode())
-            .append("dictSort", getDictSort())
-            .append("dictLabel", getDictLabel())
-            .append("dictValue", getDictValue())
-            .append("dictType", getDictType())
-            .append("cssClass", getCssClass())
-            .append("listClass", getListClass())
-            .append("isDefault", getIsDefault())
-            .append("status", getStatus())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .append("remark", getRemark())
-            .toString();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysDictType.java b/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysDictType.java
deleted file mode 100644
index 4ab7392..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysDictType.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.dingzhuo.energy.project.system.domain;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel.ColumnType;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 瀛楀吀绫诲瀷琛� sys_dict_type
- * 
- * @author ruoyi
- */
-public class SysDictType extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 瀛楀吀涓婚敭 */
-    @Excel(name = "瀛楀吀涓婚敭", cellType = Excel.ColumnType.NUMERIC)
-    private Long dictId;
-
-    /** 瀛楀吀鍚嶇О */
-    @Excel(name = "瀛楀吀鍚嶇О")
-    private String dictName;
-
-    /** 瀛楀吀绫诲瀷 */
-    @Excel(name = "瀛楀吀绫诲瀷")
-    private String dictType;
-
-    /** 鐘舵�侊紙0姝e父 1鍋滅敤锛� */
-    @Excel(name = "鐘舵��", readConverterExp = "0=姝e父,1=鍋滅敤")
-    private String status;
-
-    public Long getDictId()
-    {
-        return dictId;
-    }
-
-    public void setDictId(Long dictId)
-    {
-        this.dictId = dictId;
-    }
-
-    @NotBlank(message = "瀛楀吀鍚嶇О涓嶈兘涓虹┖")
-    @Size(min = 0, max = 100, message = "瀛楀吀绫诲瀷鍚嶇О闀垮害涓嶈兘瓒呰繃100涓瓧绗�")
-    public String getDictName()
-    {
-        return dictName;
-    }
-
-    public void setDictName(String dictName)
-    {
-        this.dictName = dictName;
-    }
-
-    @NotBlank(message = "瀛楀吀绫诲瀷涓嶈兘涓虹┖")
-    @Size(min = 0, max = 100, message = "瀛楀吀绫诲瀷绫诲瀷闀垮害涓嶈兘瓒呰繃100涓瓧绗�")
-    public String getDictType()
-    {
-        return dictType;
-    }
-
-    public void setDictType(String dictType)
-    {
-        this.dictType = dictType;
-    }
-
-    public String getStatus()
-    {
-        return status;
-    }
-
-    public void setStatus(String status)
-    {
-        this.status = status;
-    }
-    
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("dictId", getDictId())
-            .append("dictName", getDictName())
-            .append("dictType", getDictType())
-            .append("status", getStatus())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .append("remark", getRemark())
-            .toString();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysMenu.java b/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysMenu.java
deleted file mode 100644
index b27063d..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysMenu.java
+++ /dev/null
@@ -1,231 +0,0 @@
-package com.dingzhuo.energy.project.system.domain;
-
-import java.util.ArrayList;
-import java.util.List;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 鑿滃崟鏉冮檺琛� sys_menu
- * 
- * @author ruoyi
- */
-public class SysMenu extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 鑿滃崟ID */
-    private Long menuId;
-
-    /** 鑿滃崟鍚嶇О */
-    private String menuName;
-
-    /** 鐖惰彍鍗曞悕绉� */
-    private String parentName;
-
-    /** 鐖惰彍鍗旾D */
-    private Long parentId;
-
-    /** 鏄剧ず椤哄簭 */
-    private Integer orderNum;
-
-    /** 璺敱鍦板潃 */
-    private String path;
-
-    /** 缁勪欢璺緞 */
-    private String component;
-
-    /** 鏄惁涓哄閾撅紙0鏄� 1鍚︼級 */
-    private String isFrame;
-
-    /** 绫诲瀷锛圡鐩綍 C鑿滃崟 F鎸夐挳锛� */
-    private String menuType;
-
-    /** 鑿滃崟鐘舵��:0鏄剧ず,1闅愯棌 */
-    private String visible;
-
-    /** 鏉冮檺瀛楃涓� */
-    private String perms;
-
-    /** 鑿滃崟鍥炬爣 */
-    private String icon;
-
-    /** 椤甸潰鍙傛暟 */
-    private String parameter;
-
-
-    /** 瀛愯彍鍗� */
-    private List<SysMenu> children = new ArrayList<SysMenu>();
-
-    public Long getMenuId()
-    {
-        return menuId;
-    }
-
-    public void setMenuId(Long menuId)
-    {
-        this.menuId = menuId;
-    }
-
-    @NotBlank(message = "鑿滃崟鍚嶇О涓嶈兘涓虹┖")
-    @Size(min = 0, max = 50, message = "鑿滃崟鍚嶇О闀垮害涓嶈兘瓒呰繃50涓瓧绗�")
-    public String getMenuName()
-    {
-        return menuName;
-    }
-
-    public void setMenuName(String menuName)
-    {
-        this.menuName = menuName;
-    }
-
-    public String getParentName()
-    {
-        return parentName;
-    }
-
-    public void setParentName(String parentName)
-    {
-        this.parentName = parentName;
-    }
-
-    public Long getParentId()
-    {
-        return parentId;
-    }
-
-    public void setParentId(Long parentId)
-    {
-        this.parentId = parentId;
-    }
-
-    @NotNull(message = "鏄剧ず椤哄簭涓嶈兘涓虹┖")
-    public Integer getOrderNum()
-    {
-        return orderNum;
-    }
-
-    public void setOrderNum(Integer orderNum)
-    {
-        this.orderNum = orderNum;
-    }
-
-    @Size(min = 0, max = 200, message = "璺敱鍦板潃涓嶈兘瓒呰繃200涓瓧绗�")
-    public String getPath()
-    {
-        return path;
-    }
-
-    public void setPath(String path)
-    {
-        this.path = path;
-    }
-
-    @Size(min = 0, max = 200, message = "缁勪欢璺緞涓嶈兘瓒呰繃255涓瓧绗�")
-    public String getComponent()
-    {
-        return component;
-    }
-
-    public void setComponent(String component)
-    {
-        this.component = component;
-    }
-
-    public String getIsFrame()
-    {
-        return isFrame;
-    }
-
-    public void setIsFrame(String isFrame)
-    {
-        this.isFrame = isFrame;
-    }
-
-    @NotBlank(message = "鑿滃崟绫诲瀷涓嶈兘涓虹┖")
-    public String getMenuType()
-    {
-        return menuType;
-    }
-
-    public void setMenuType(String menuType)
-    {
-        this.menuType = menuType;
-    }
-
-    public String getVisible()
-    {
-        return visible;
-    }
-
-    public void setVisible(String visible)
-    {
-        this.visible = visible;
-    }
-
-    @Size(min = 0, max = 100, message = "鏉冮檺鏍囪瘑闀垮害涓嶈兘瓒呰繃100涓瓧绗�")
-    public String getPerms()
-    {
-        return perms;
-    }
-
-    public void setPerms(String perms)
-    {
-        this.perms = perms;
-    }
-
-    public String getIcon()
-    {
-        return icon;
-    }
-
-    public void setIcon(String icon)
-    {
-        this.icon = icon;
-    }
-
-    public List<SysMenu> getChildren()
-    {
-        return children;
-    }
-
-    public void setChildren(List<SysMenu> children)
-    {
-        this.children = children;
-    }
-
-    public String getParameter(){
-        return parameter;
-    }
-
-    public void setParameter(String parameter){
-        this.parameter = parameter;
-    }
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("menuId", getMenuId())
-            .append("menuName", getMenuName())
-            .append("parentId", getParentId())
-            .append("orderNum", getOrderNum())
-            .append("path", getPath())
-            .append("component", getComponent())
-            .append("isFrame", getIsFrame())
-            .append("menuType", getMenuType())
-            .append("visible", getVisible())
-            .append("perms", getPerms())
-            .append("icon", getIcon())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .append("remark", getRemark())
-            .toString();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysNotice.java b/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysNotice.java
deleted file mode 100644
index 1bf0a4c..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysNotice.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.dingzhuo.energy.project.system.domain;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
-
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 閫氱煡鍏憡琛� sys_notice
- * 
- * @author ruoyi
- */
-public class SysNotice extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 鍏憡ID */
-    private Long noticeId;
-
-    /** 鍏憡鏍囬 */
-    private String noticeTitle;
-
-    /** 鍏憡绫诲瀷锛�1閫氱煡 2鍏憡锛� */
-    private String noticeType;
-
-    /** 鍏憡鍐呭 */
-    private String noticeContent;
-
-    /** 鍏憡鐘舵�侊紙0姝e父 1鍏抽棴锛� */
-    private String status;
-
-    public Long getNoticeId()
-    {
-        return noticeId;
-    }
-
-    public void setNoticeId(Long noticeId)
-    {
-        this.noticeId = noticeId;
-    }
-
-    public void setNoticeTitle(String noticeTitle)
-    {
-        this.noticeTitle = noticeTitle;
-    }
-
-    @NotBlank(message = "鍏憡鏍囬涓嶈兘涓虹┖")
-    @Size(min = 0, max = 50, message = "鍏憡鏍囬涓嶈兘瓒呰繃50涓瓧绗�")
-    public String getNoticeTitle()
-    {
-        return noticeTitle;
-    }
-
-    public void setNoticeType(String noticeType)
-    {
-        this.noticeType = noticeType;
-    }
-
-    public String getNoticeType()
-    {
-        return noticeType;
-    }
-
-    public void setNoticeContent(String noticeContent)
-    {
-        this.noticeContent = noticeContent;
-    }
-
-    public String getNoticeContent()
-    {
-        return noticeContent;
-    }
-
-    public void setStatus(String status)
-    {
-        this.status = status;
-    }
-
-    public String getStatus()
-    {
-        return status;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("noticeId", getNoticeId())
-            .append("noticeTitle", getNoticeTitle())
-            .append("noticeType", getNoticeType())
-            .append("noticeContent", getNoticeContent())
-            .append("status", getStatus())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .append("remark", getRemark())
-            .toString();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysPost.java b/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysPost.java
deleted file mode 100644
index b3367ba..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysPost.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package com.dingzhuo.energy.project.system.domain;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel.ColumnType;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 宀椾綅琛� sys_post
- * 
- * @author ruoyi
- */
-public class SysPost extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 宀椾綅搴忓彿 */
-    @Excel(name = "宀椾綅搴忓彿", cellType = Excel.ColumnType.NUMERIC)
-    private Long postId;
-
-    /** 宀椾綅缂栫爜 */
-    @Excel(name = "宀椾綅缂栫爜")
-    private String postCode;
-
-    /** 宀椾綅鍚嶇О */
-    @Excel(name = "宀椾綅鍚嶇О")
-    private String postName;
-
-    /** 宀椾綅鎺掑簭 */
-    @Excel(name = "宀椾綅鎺掑簭")
-    private Integer postSort;
-
-    /** 鐘舵�侊紙0姝e父 1鍋滅敤锛� */
-    @Excel(name = "鐘舵��", readConverterExp = "0=姝e父,1=鍋滅敤")
-    private String status;
-
-    /** 鐢ㄦ埛鏄惁瀛樺湪姝ゅ矖浣嶆爣璇� 榛樿涓嶅瓨鍦� */
-    private boolean flag = false;
-
-    public Long getPostId()
-    {
-        return postId;
-    }
-
-    public void setPostId(Long postId)
-    {
-        this.postId = postId;
-    }
-
-    @NotBlank(message = "宀椾綅缂栫爜涓嶈兘涓虹┖")
-    @Size(min = 0, max = 64, message = "宀椾綅缂栫爜闀垮害涓嶈兘瓒呰繃64涓瓧绗�")
-    public String getPostCode()
-    {
-        return postCode;
-    }
-
-    public void setPostCode(String postCode)
-    {
-        this.postCode = postCode;
-    }
-
-    @NotBlank(message = "宀椾綅鍚嶇О涓嶈兘涓虹┖")
-    @Size(min = 0, max = 50, message = "宀椾綅鍚嶇О闀垮害涓嶈兘瓒呰繃50涓瓧绗�")
-    public String getPostName()
-    {
-        return postName;
-    }
-
-    public void setPostName(String postName)
-    {
-        this.postName = postName;
-    }
-
-    @NotNull(message = "鏄剧ず椤哄簭涓嶈兘涓虹┖")
-    public Integer getPostSort()
-    {
-        return postSort;
-    }
-
-    public void setPostSort(Integer postSort)
-    {
-        this.postSort = postSort;
-    }
-
-    public String getStatus()
-    {
-        return status;
-    }
-
-    public void setStatus(String status)
-    {
-        this.status = status;
-    }
-
-    public boolean isFlag()
-    {
-        return flag;
-    }
-
-    public void setFlag(boolean flag)
-    {
-        this.flag = flag;
-    }
-    
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("postId", getPostId())
-            .append("postCode", getPostCode())
-            .append("postName", getPostName())
-            .append("postSort", getPostSort())
-            .append("status", getStatus())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .append("remark", getRemark())
-            .toString();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysRole.java b/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysRole.java
deleted file mode 100644
index 89f00fe..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysRole.java
+++ /dev/null
@@ -1,201 +0,0 @@
-package com.dingzhuo.energy.project.system.domain;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel.ColumnType;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 瑙掕壊琛� sys_role
- * 
- * @author ruoyi
- */
-public class SysRole extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 瑙掕壊ID */
-    @Excel(name = "瑙掕壊搴忓彿", cellType = Excel.ColumnType.NUMERIC)
-    private Long roleId;
-
-    /** 瑙掕壊鍚嶇О */
-    @Excel(name = "瑙掕壊鍚嶇О")
-    private String roleName;
-
-    /** 瑙掕壊鏉冮檺 */
-    @Excel(name = "瑙掕壊鏉冮檺")
-    private String roleKey;
-
-    /** 瑙掕壊鎺掑簭 */
-    @Excel(name = "瑙掕壊鎺掑簭")
-    private Integer roleSort;
-
-    /** 鏁版嵁鑼冨洿锛�1锛氭墍鏈夋暟鎹潈闄愶紱2锛氳嚜瀹氫箟鏁版嵁鏉冮檺锛�3锛氭湰閮ㄩ棬鏁版嵁鏉冮檺锛�4锛氭湰閮ㄩ棬鍙婁互涓嬫暟鎹潈闄愶級 */
-    @Excel(name = "鏁版嵁鑼冨洿", readConverterExp = "1=鎵�鏈夋暟鎹潈闄�,2=鑷畾涔夋暟鎹潈闄�,3=鏈儴闂ㄦ暟鎹潈闄�,4=鏈儴闂ㄥ強浠ヤ笅鏁版嵁鏉冮檺")
-    private String dataScope;
-
-    /** 瑙掕壊鐘舵�侊紙0姝e父 1鍋滅敤锛� */
-    @Excel(name = "瑙掕壊鐘舵��", readConverterExp = "0=姝e父,1=鍋滅敤")
-    private String status;
-
-    /** 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛� */
-    private String delFlag;
-
-    /** 鐢ㄦ埛鏄惁瀛樺湪姝よ鑹叉爣璇� 榛樿涓嶅瓨鍦� */
-    private boolean flag = false;
-
-    /** 鑿滃崟缁� */
-    private Long[] menuIds;
-
-    /** 閮ㄩ棬缁勶紙鏁版嵁鏉冮檺锛� */
-    private Long[] deptIds;
-
-    public SysRole()
-    {
-
-    }
-
-    public SysRole(Long roleId)
-    {
-        this.roleId = roleId;
-    }
-
-    public Long getRoleId()
-    {
-        return roleId;
-    }
-
-    public void setRoleId(Long roleId)
-    {
-        this.roleId = roleId;
-    }
-
-    public boolean isAdmin()
-    {
-        return isAdmin(this.roleId);
-    }
-
-    public static boolean isAdmin(Long roleId)
-    {
-        return roleId != null && 1L == roleId;
-    }
-
-    @NotBlank(message = "瑙掕壊鍚嶇О涓嶈兘涓虹┖")
-    @Size(min = 0, max = 30, message = "瑙掕壊鍚嶇О闀垮害涓嶈兘瓒呰繃30涓瓧绗�")
-    public String getRoleName()
-    {
-        return roleName;
-    }
-
-    public void setRoleName(String roleName)
-    {
-        this.roleName = roleName;
-    }
-
-    @NotBlank(message = "鏉冮檺瀛楃涓嶈兘涓虹┖")
-    @Size(min = 0, max = 100, message = "鏉冮檺瀛楃闀垮害涓嶈兘瓒呰繃100涓瓧绗�")
-    public String getRoleKey()
-    {
-        return roleKey;
-    }
-
-    public void setRoleKey(String roleKey)
-    {
-        this.roleKey = roleKey;
-    }
-
-    @NotNull(message = "鏄剧ず椤哄簭涓嶈兘涓虹┖")
-    public Integer getRoleSort()
-    {
-        return roleSort;
-    }
-
-    public void setRoleSort(Integer roleSort)
-    {
-        this.roleSort = roleSort;
-    }
-
-    public String getDataScope()
-    {
-        return dataScope;
-    }
-
-    public void setDataScope(String dataScope)
-    {
-        this.dataScope = dataScope;
-    }
-
-    public String getStatus()
-    {
-        return status;
-    }
-
-    public void setStatus(String status)
-    {
-        this.status = status;
-    }
-
-    public String getDelFlag()
-    {
-        return delFlag;
-    }
-
-    public void setDelFlag(String delFlag)
-    {
-        this.delFlag = delFlag;
-    }
-
-    public boolean isFlag()
-    {
-        return flag;
-    }
-
-    public void setFlag(boolean flag)
-    {
-        this.flag = flag;
-    }
-
-    public Long[] getMenuIds()
-    {
-        return menuIds;
-    }
-
-    public void setMenuIds(Long[] menuIds)
-    {
-        this.menuIds = menuIds;
-    }
-
-    public Long[] getDeptIds()
-    {
-        return deptIds;
-    }
-
-    public void setDeptIds(Long[] deptIds)
-    {
-        this.deptIds = deptIds;
-    }
-    
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("roleId", getRoleId())
-            .append("roleName", getRoleName())
-            .append("roleKey", getRoleKey())
-            .append("roleSort", getRoleSort())
-            .append("dataScope", getDataScope())
-            .append("status", getStatus())
-            .append("delFlag", getDelFlag())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .append("remark", getRemark())
-            .toString();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysRoleDept.java b/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysRoleDept.java
deleted file mode 100644
index 69cfc47..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysRoleDept.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.dingzhuo.energy.project.system.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-
-/**
- * 瑙掕壊鍜岄儴闂ㄥ叧鑱� sys_role_dept
- * 
- * @author ruoyi
- */
-public class SysRoleDept
-{
-    /** 瑙掕壊ID */
-    private Long roleId;
-    
-    /** 閮ㄩ棬ID */
-    private Long deptId;
-
-    public Long getRoleId()
-    {
-        return roleId;
-    }
-
-    public void setRoleId(Long roleId)
-    {
-        this.roleId = roleId;
-    }
-
-    public Long getDeptId()
-    {
-        return deptId;
-    }
-
-    public void setDeptId(Long deptId)
-    {
-        this.deptId = deptId;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("roleId", getRoleId())
-            .append("deptId", getDeptId())
-            .toString();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysRoleMenu.java b/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysRoleMenu.java
deleted file mode 100644
index 2d10e73..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysRoleMenu.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.dingzhuo.energy.project.system.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-
-/**
- * 瑙掕壊鍜岃彍鍗曞叧鑱� sys_role_menu
- * 
- * @author ruoyi
- */
-public class SysRoleMenu
-{
-    /** 瑙掕壊ID */
-    private Long roleId;
-    
-    /** 鑿滃崟ID */
-    private Long menuId;
-
-    public Long getRoleId()
-    {
-        return roleId;
-    }
-
-    public void setRoleId(Long roleId)
-    {
-        this.roleId = roleId;
-    }
-
-    public Long getMenuId()
-    {
-        return menuId;
-    }
-
-    public void setMenuId(Long menuId)
-    {
-        this.menuId = menuId;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("roleId", getRoleId())
-            .append("menuId", getMenuId())
-            .toString();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysUser.java b/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysUser.java
deleted file mode 100644
index cfd911f..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysUser.java
+++ /dev/null
@@ -1,328 +0,0 @@
-package com.dingzhuo.energy.project.system.domain;
-
-import java.util.Date;
-import java.util.List;
-import javax.validation.constraints.Email;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excels;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel.ColumnType;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel.Type;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excels;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 鐢ㄦ埛瀵硅薄 sys_user
- * 
- * @author ruoyi
- */
-public class SysUser extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 鐢ㄦ埛ID */
-    @Excel(name = "鐢ㄦ埛搴忓彿", cellType = Excel.ColumnType.NUMERIC, prompt = "鐢ㄦ埛缂栧彿")
-    private Long userId;
-
-    /** 閮ㄩ棬ID */
-    @Excel(name = "閮ㄩ棬缂栧彿", type = Excel.Type.IMPORT)
-    private Long deptId;
-
-    /** 鐢ㄦ埛璐﹀彿 */
-    @Excel(name = "鐧诲綍鍚嶇О")
-    private String userName;
-
-    /** 鐢ㄦ埛鏄电О */
-    @Excel(name = "鐢ㄦ埛鍚嶇О")
-    private String nickName;
-
-    /** 鐢ㄦ埛閭 */
-    @Excel(name = "鐢ㄦ埛閭")
-    private String email;
-
-    /** 鎵嬫満鍙风爜 */
-    @Excel(name = "鎵嬫満鍙风爜")
-    private String phonenumber;
-
-    /** 鐢ㄦ埛鎬у埆 */
-    @Excel(name = "鐢ㄦ埛鎬у埆", readConverterExp = "0=鐢�,1=濂�,2=鏈煡")
-    private String sex;
-
-    /** 鐢ㄦ埛澶村儚 */
-    private String avatar;
-
-    /** 瀵嗙爜 */
-    private String password;
-
-    /** 鐩愬姞瀵� */
-    private String salt;
-
-    /** 甯愬彿鐘舵�侊紙0姝e父 1鍋滅敤锛� */
-    @Excel(name = "甯愬彿鐘舵��", readConverterExp = "0=姝e父,1=鍋滅敤")
-    private String status;
-
-    /** 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛� */
-    private String delFlag;
-
-    /** 鏈�鍚庣櫥闄咺P */
-    @Excel(name = "鏈�鍚庣櫥闄咺P", type = Excel.Type.EXPORT)
-    private String loginIp;
-
-    /** 鏈�鍚庣櫥闄嗘椂闂� */
-    @Excel(name = "鏈�鍚庣櫥闄嗘椂闂�", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Excel.Type.EXPORT)
-    private Date loginDate;
-
-    /** 閮ㄩ棬瀵硅薄 */
-    @Excels({
-        @Excel(name = "閮ㄩ棬鍚嶇О", targetAttr = "deptName", type = Excel.Type.EXPORT),
-        @Excel(name = "閮ㄩ棬璐熻矗浜�", targetAttr = "leader", type = Excel.Type.EXPORT)
-    })
-    private SysDept dept;
-
-    /** 瑙掕壊瀵硅薄 */
-    private List<SysRole> roles;
-
-    /** 瑙掕壊缁� */
-    private Long[] roleIds;
-
-    /** 宀椾綅缁� */
-    private Long[] postIds;
-
-    public SysUser()
-    {
-
-    }
-
-    public SysUser(Long userId)
-    {
-        this.userId = userId;
-    }
-
-    public Long getUserId()
-    {
-        return userId;
-    }
-
-    public void setUserId(Long userId)
-    {
-        this.userId = userId;
-    }
-
-    public boolean isAdmin()
-    {
-        return isAdmin(this.userId);
-    }
-
-    public static boolean isAdmin(Long userId)
-    {
-        return userId != null && 1L == userId;
-    }
-
-    public Long getDeptId()
-    {
-        return deptId;
-    }
-
-    public void setDeptId(Long deptId)
-    {
-        this.deptId = deptId;
-    }
-
-    @Size(min = 0, max = 30, message = "鐢ㄦ埛鏄电О闀垮害涓嶈兘瓒呰繃30涓瓧绗�")
-    public String getNickName()
-    {
-        return nickName;
-    }
-
-    public void setNickName(String nickName)
-    {
-        this.nickName = nickName;
-    }
-
-    @NotBlank(message = "鐢ㄦ埛璐﹀彿涓嶈兘涓虹┖")
-    @Size(min = 0, max = 30, message = "鐢ㄦ埛璐﹀彿闀垮害涓嶈兘瓒呰繃30涓瓧绗�")
-    public String getUserName()
-    {
-        return userName;
-    }
-
-    public void setUserName(String userName)
-    {
-        this.userName = userName;
-    }
-
-    @Email(message = "閭鏍煎紡涓嶆纭�")
-    @Size(min = 0, max = 50, message = "閭闀垮害涓嶈兘瓒呰繃50涓瓧绗�")
-    public String getEmail()
-    {
-        return email;
-    }
-
-    public void setEmail(String email)
-    {
-        this.email = email;
-    }
-
-    @Size(min = 0, max = 11, message = "鎵嬫満鍙风爜闀垮害涓嶈兘瓒呰繃11涓瓧绗�")
-    public String getPhonenumber()
-    {
-        return phonenumber;
-    }
-
-    public void setPhonenumber(String phonenumber)
-    {
-        this.phonenumber = phonenumber;
-    }
-
-    public String getSex()
-    {
-        return sex;
-    }
-
-    public void setSex(String sex)
-    {
-        this.sex = sex;
-    }
-
-    public String getAvatar()
-    {
-        return avatar;
-    }
-
-    public void setAvatar(String avatar)
-    {
-        this.avatar = avatar;
-    }
-
-    public String getPassword()
-    {
-        return password;
-    }
-
-    public void setPassword(String password)
-    {
-        this.password = password;
-    }
-
-    public String getSalt()
-    {
-        return salt;
-    }
-
-    public void setSalt(String salt)
-    {
-        this.salt = salt;
-    }
-
-    public String getStatus()
-    {
-        return status;
-    }
-
-    public void setStatus(String status)
-    {
-        this.status = status;
-    }
-
-    public String getDelFlag()
-    {
-        return delFlag;
-    }
-
-    public void setDelFlag(String delFlag)
-    {
-        this.delFlag = delFlag;
-    }
-
-    public String getLoginIp()
-    {
-        return loginIp;
-    }
-
-    public void setLoginIp(String loginIp)
-    {
-        this.loginIp = loginIp;
-    }
-
-    public Date getLoginDate()
-    {
-        return loginDate;
-    }
-
-    public void setLoginDate(Date loginDate)
-    {
-        this.loginDate = loginDate;
-    }
-
-    public SysDept getDept()
-    {
-        return dept;
-    }
-
-    public void setDept(SysDept dept)
-    {
-        this.dept = dept;
-    }
-
-    public List<SysRole> getRoles()
-    {
-        return roles;
-    }
-
-    public void setRoles(List<SysRole> roles)
-    {
-        this.roles = roles;
-    }
-
-    public Long[] getRoleIds()
-    {
-        return roleIds;
-    }
-
-    public void setRoleIds(Long[] roleIds)
-    {
-        this.roleIds = roleIds;
-    }
-
-    public Long[] getPostIds()
-    {
-        return postIds;
-    }
-
-    public void setPostIds(Long[] postIds)
-    {
-        this.postIds = postIds;
-    }
-    
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("userId", getUserId())
-            .append("deptId", getDeptId())
-            .append("userName", getUserName())
-            .append("nickName", getNickName())
-            .append("email", getEmail())
-            .append("phonenumber", getPhonenumber())
-            .append("sex", getSex())
-            .append("avatar", getAvatar())
-            .append("password", getPassword())
-            .append("salt", getSalt())
-            .append("status", getStatus())
-            .append("delFlag", getDelFlag())
-            .append("loginIp", getLoginIp())
-            .append("loginDate", getLoginDate())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .append("remark", getRemark())
-            .append("dept", getDept())
-            .toString();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysUserPost.java b/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysUserPost.java
deleted file mode 100644
index 8ab6292..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysUserPost.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.dingzhuo.energy.project.system.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-
-/**
- * 鐢ㄦ埛鍜屽矖浣嶅叧鑱� sys_user_post
- * 
- * @author ruoyi
- */
-public class SysUserPost
-{
-    /** 鐢ㄦ埛ID */
-    private Long userId;
-    
-    /** 宀椾綅ID */
-    private Long postId;
-
-    public Long getUserId()
-    {
-        return userId;
-    }
-
-    public void setUserId(Long userId)
-    {
-        this.userId = userId;
-    }
-
-    public Long getPostId()
-    {
-        return postId;
-    }
-
-    public void setPostId(Long postId)
-    {
-        this.postId = postId;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("userId", getUserId())
-            .append("postId", getPostId())
-            .toString();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysUserRole.java b/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysUserRole.java
deleted file mode 100644
index 33bbf77..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/SysUserRole.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.dingzhuo.energy.project.system.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-
-/**
- * 鐢ㄦ埛鍜岃鑹插叧鑱� sys_user_role
- * 
- * @author ruoyi
- */
-public class SysUserRole
-{
-    /** 鐢ㄦ埛ID */
-    private Long userId;
-    
-    /** 瑙掕壊ID */
-    private Long roleId;
-
-    public Long getUserId()
-    {
-        return userId;
-    }
-
-    public void setUserId(Long userId)
-    {
-        this.userId = userId;
-    }
-
-    public Long getRoleId()
-    {
-        return roleId;
-    }
-
-    public void setRoleId(Long roleId)
-    {
-        this.roleId = roleId;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("userId", getUserId())
-            .append("roleId", getRoleId())
-            .toString();
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/vo/MetaVo.java b/basic/src/main/java/com/dingzhuo/energy/project/system/domain/vo/MetaVo.java
deleted file mode 100644
index a05e0cd..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/vo/MetaVo.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.dingzhuo.energy.project.system.domain.vo;
-
-/**
- * 璺敱鏄剧ず淇℃伅
- * 
- * @author ruoyi
- */
-public class MetaVo
-{
-    /**
-     * 璁剧疆璇ヨ矾鐢卞湪渚ц竟鏍忓拰闈㈠寘灞戜腑灞曠ず鐨勫悕瀛�
-     */
-    private String title;
-
-    /**
-     * 璁剧疆璇ヨ矾鐢辩殑鍥炬爣锛屽搴旇矾寰剆rc/icons/svg
-     */
-    private String icon;
-
-    public MetaVo()
-    {
-    }
-
-    public MetaVo(String title, String icon)
-    {
-        this.title = title;
-        this.icon = icon;
-    }
-
-    public String getTitle()
-    {
-        return title;
-    }
-
-    public void setTitle(String title)
-    {
-        this.title = title;
-    }
-
-    public String getIcon()
-    {
-        return icon;
-    }
-
-    public void setIcon(String icon)
-    {
-        this.icon = icon;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/vo/RouterVo.java b/basic/src/main/java/com/dingzhuo/energy/project/system/domain/vo/RouterVo.java
deleted file mode 100644
index b5496c6..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/domain/vo/RouterVo.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package com.dingzhuo.energy.project.system.domain.vo;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import java.util.List;
-
-/**
- * 璺敱閰嶇疆淇℃伅
- * 
- * @author ruoyi
- */
-@JsonInclude(JsonInclude.Include.NON_EMPTY)
-public class RouterVo
-{
-    /**
-     * 璺敱鍚嶅瓧
-     */
-    private String name;
-
-    /**
-     * 璺敱鍦板潃
-     */
-    private String path;
-
-    /**
-     * 鏄惁闅愯棌璺敱锛屽綋璁剧疆 true 鐨勬椂鍊欒璺敱涓嶄細鍐嶄晶杈规爮鍑虹幇
-     */
-    private String hidden;
-
-    /**
-     * 閲嶅畾鍚戝湴鍧�锛屽綋璁剧疆 noRedirect 鐨勬椂鍊欒璺敱鍦ㄩ潰鍖呭睉瀵艰埅涓笉鍙鐐瑰嚮
-     */
-    private String redirect;
-
-    /**
-     * 缁勪欢鍦板潃
-     */
-    private String component;
-
-    /**
-     * 褰撲綘涓�涓矾鐢变笅闈㈢殑 children 澹版槑鐨勮矾鐢卞ぇ浜�1涓椂锛岃嚜鍔ㄤ細鍙樻垚宓屽鐨勬ā寮�--濡傜粍浠堕〉闈�
-     */
-    private Boolean alwaysShow;
-
-    /**
-     * 鍏朵粬鍏冪礌
-     */
-    private MetaVo meta;
-
-    public String getPageQueryParameter() {
-        return pageQueryParameter;
-    }
-
-    public void setPageQueryParameter(String pageQueryParameter) {
-        this.pageQueryParameter = pageQueryParameter;
-    }
-
-    /**
-     * 鑿滃崟璺敱鍙傛暟query褰㈠紡
-     */
-    private String pageQueryParameter;
-    /**
-     * 瀛愯矾鐢�
-     */
-    private List<RouterVo> children;
-
-    public String getName()
-    {
-        return name;
-    }
-
-    public void setName(String name)
-    {
-        this.name = name;
-    }
-
-    public String getPath()
-    {
-        return path;
-    }
-
-    public void setPath(String path)
-    {
-        this.path = path;
-    }
-
-    public String getHidden()
-    {
-        return hidden;
-    }
-
-    public void setHidden(String hidden)
-    {
-        this.hidden = hidden;
-    }
-
-    public String getRedirect()
-    {
-        return redirect;
-    }
-
-    public void setRedirect(String redirect)
-    {
-        this.redirect = redirect;
-    }
-
-    public String getComponent()
-    {
-        return component;
-    }
-
-    public void setComponent(String component)
-    {
-        this.component = component;
-    }
-
-    public Boolean getAlwaysShow()
-    {
-        return alwaysShow;
-    }
-
-    public void setAlwaysShow(Boolean alwaysShow)
-    {
-        this.alwaysShow = alwaysShow;
-    }
-
-    public MetaVo getMeta()
-    {
-        return meta;
-    }
-
-    public void setMeta(MetaVo meta)
-    {
-        this.meta = meta;
-    }
-
-    public List<RouterVo> getChildren()
-    {
-        return children;
-    }
-
-    public void setChildren(List<RouterVo> children)
-    {
-        this.children = children;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysConfigMapper.java b/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysConfigMapper.java
deleted file mode 100644
index d3cdc11..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysConfigMapper.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.dingzhuo.energy.project.system.mapper;
-
-import java.util.List;
-import com.dingzhuo.energy.project.system.domain.SysConfig;
-
-/**
- * 鍙傛暟閰嶇疆 鏁版嵁灞�
- * 
- * @author ruoyi
- */
-public interface SysConfigMapper
-{
-    /**
-     * 鏌ヨ鍙傛暟閰嶇疆淇℃伅
-     * 
-     * @param config 鍙傛暟閰嶇疆淇℃伅
-     * @return 鍙傛暟閰嶇疆淇℃伅
-     */
-    SysConfig selectConfig(SysConfig config);
-
-    /**
-     * 鏌ヨ鍙傛暟閰嶇疆鍒楄〃
-     * 
-     * @param config 鍙傛暟閰嶇疆淇℃伅
-     * @return 鍙傛暟閰嶇疆闆嗗悎
-     */
-    List<SysConfig> selectConfigList(SysConfig config);
-
-    /**
-     * 鏍规嵁閿悕鏌ヨ鍙傛暟閰嶇疆淇℃伅
-     * 
-     * @param configKey 鍙傛暟閿悕
-     * @return 鍙傛暟閰嶇疆淇℃伅
-     */
-    SysConfig checkConfigKeyUnique(String configKey);
-
-    /**
-     * 鏂板鍙傛暟閰嶇疆
-     * 
-     * @param config 鍙傛暟閰嶇疆淇℃伅
-     * @return 缁撴灉
-     */
-    int insertConfig(SysConfig config);
-
-    /**
-     * 淇敼鍙傛暟閰嶇疆
-     * 
-     * @param config 鍙傛暟閰嶇疆淇℃伅
-     * @return 缁撴灉
-     */
-    int updateConfig(SysConfig config);
-
-    /**
-     * 鍒犻櫎鍙傛暟閰嶇疆
-     * 
-     * @param configId 鍙傛暟ID
-     * @return 缁撴灉
-     */
-    int deleteConfigById(Long configId);
-
-    /**
-     * 鎵归噺鍒犻櫎鍙傛暟淇℃伅
-     * 
-     * @param configIds 闇�瑕佸垹闄ょ殑鍙傛暟ID
-     * @return 缁撴灉
-     */
-    int deleteConfigByIds(Long[] configIds);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysDeptMapper.java b/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysDeptMapper.java
deleted file mode 100644
index cd9f5b8..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysDeptMapper.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package com.dingzhuo.energy.project.system.mapper;
-
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
-import com.dingzhuo.energy.project.system.domain.SysDept;
-
-/**
- * 閮ㄩ棬绠$悊 鏁版嵁灞�
- * 
- * @author ruoyi
- */
-public interface SysDeptMapper
-{
-    /**
-     * 鏌ヨ閮ㄩ棬绠$悊鏁版嵁
-     * 
-     * @param dept 閮ㄩ棬淇℃伅
-     * @return 閮ㄩ棬淇℃伅闆嗗悎
-     */
-    List<SysDept> selectDeptList(SysDept dept);
-
-    /**
-     * 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戜俊鎭�
-     * 
-     * @param roleId 瑙掕壊ID
-     * @return 閫変腑閮ㄩ棬鍒楄〃
-     */
-    List<Integer> selectDeptListByRoleId(Long roleId);
-
-    /**
-     * 鏍规嵁閮ㄩ棬ID鏌ヨ淇℃伅
-     * 
-     * @param deptId 閮ㄩ棬ID
-     * @return 閮ㄩ棬淇℃伅
-     */
-    SysDept selectDeptById(Long deptId);
-
-    /**
-     * 鏍规嵁ID鏌ヨ鎵�鏈夊瓙閮ㄩ棬
-     * 
-     * @param deptId 閮ㄩ棬ID
-     * @return 閮ㄩ棬鍒楄〃
-     */
-    List<SysDept> selectChildrenDeptById(Long deptId);
-
-    /**
-     * 鏄惁瀛樺湪瀛愯妭鐐�
-     * 
-     * @param deptId 閮ㄩ棬ID
-     * @return 缁撴灉
-     */
-    int hasChildByDeptId(Long deptId);
-
-    /**
-     * 鏌ヨ閮ㄩ棬鏄惁瀛樺湪鐢ㄦ埛
-     * 
-     * @param deptId 閮ㄩ棬ID
-     * @return 缁撴灉
-     */
-    int checkDeptExistUser(Long deptId);
-
-    /**
-     * 鏍¢獙閮ㄩ棬鍚嶇О鏄惁鍞竴
-     * 
-     * @param deptName 閮ㄩ棬鍚嶇О
-     * @param parentId 鐖堕儴闂↖D
-     * @return 缁撴灉
-     */
-    SysDept checkDeptNameUnique(@Param("deptName") String deptName, @Param("parentId") Long parentId);
-
-    /**
-     * 鏂板閮ㄩ棬淇℃伅
-     * 
-     * @param dept 閮ㄩ棬淇℃伅
-     * @return 缁撴灉
-     */
-    int insertDept(SysDept dept);
-
-    /**
-     * 淇敼閮ㄩ棬淇℃伅
-     * 
-     * @param dept 閮ㄩ棬淇℃伅
-     * @return 缁撴灉
-     */
-    int updateDept(SysDept dept);
-
-    /**
-     * 淇敼鎵�鍦ㄩ儴闂ㄧ殑鐖剁骇閮ㄩ棬鐘舵��
-     * 
-     * @param dept 閮ㄩ棬
-     */
-    void updateDeptStatus(SysDept dept);
-
-    /**
-     * 淇敼瀛愬厓绱犲叧绯�
-     * 
-     * @param depts 瀛愬厓绱�
-     * @return 缁撴灉
-     */
-    int updateDeptChildren(@Param("depts") List<SysDept> depts);
-
-    /**
-     * 鍒犻櫎閮ㄩ棬绠$悊淇℃伅
-     * 
-     * @param deptId 閮ㄩ棬ID
-     * @return 缁撴灉
-     */
-    int deleteDeptById(Long deptId);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysDictDataMapper.java b/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysDictDataMapper.java
deleted file mode 100644
index fe4142d..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysDictDataMapper.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.dingzhuo.energy.project.system.mapper;
-
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
-import com.dingzhuo.energy.project.system.domain.SysDictData;
-
-/**
- * 瀛楀吀琛� 鏁版嵁灞�
- * 
- * @author ruoyi
- */
-public interface SysDictDataMapper
-{
-    /**
-     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀鏁版嵁
-     * 
-     * @param dictData 瀛楀吀鏁版嵁淇℃伅
-     * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅
-     */
-    List<SysDictData> selectDictDataList(SysDictData dictData);
-
-    /**
-     * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁
-     * 
-     * @param dictType 瀛楀吀绫诲瀷
-     * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅
-     */
-    List<SysDictData> selectDictDataByType(String dictType);
-
-    /**
-     * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏搁敭鍊兼煡璇㈠瓧鍏告暟鎹俊鎭�
-     * 
-     * @param dictType 瀛楀吀绫诲瀷
-     * @param dictValue 瀛楀吀閿��
-     * @return 瀛楀吀鏍囩
-     */
-    String selectDictLabel(@Param("dictType") String dictType, @Param("dictValue") String dictValue);
-
-    /**
-     * 鏍规嵁瀛楀吀鏁版嵁ID鏌ヨ淇℃伅
-     * 
-     * @param dictCode 瀛楀吀鏁版嵁ID
-     * @return 瀛楀吀鏁版嵁
-     */
-    SysDictData selectDictDataById(Long dictCode);
-
-    /**
-     * 鏌ヨ瀛楀吀鏁版嵁
-     * 
-     * @param dictType 瀛楀吀绫诲瀷
-     * @return 瀛楀吀鏁版嵁
-     */
-    int countDictDataByType(String dictType);
-
-    /**
-     * 閫氳繃瀛楀吀ID鍒犻櫎瀛楀吀鏁版嵁淇℃伅
-     * 
-     * @param dictCode 瀛楀吀鏁版嵁ID
-     * @return 缁撴灉
-     */
-    int deleteDictDataById(Long dictCode);
-
-    /**
-     * 鎵归噺鍒犻櫎瀛楀吀鏁版嵁淇℃伅
-     * 
-     * @param dictCodes 闇�瑕佸垹闄ょ殑瀛楀吀鏁版嵁ID
-     * @return 缁撴灉
-     */
-    int deleteDictDataByIds(Long[] dictCodes);
-
-    /**
-     * 鏂板瀛楀吀鏁版嵁淇℃伅
-     * 
-     * @param dictData 瀛楀吀鏁版嵁淇℃伅
-     * @return 缁撴灉
-     */
-    int insertDictData(SysDictData dictData);
-
-    /**
-     * 淇敼瀛楀吀鏁版嵁淇℃伅
-     * 
-     * @param dictData 瀛楀吀鏁版嵁淇℃伅
-     * @return 缁撴灉
-     */
-    int updateDictData(SysDictData dictData);
-
-    /**
-     * 鍚屾淇敼瀛楀吀绫诲瀷
-     * 
-     * @param oldDictType 鏃у瓧鍏哥被鍨�
-     * @param newDictType 鏂版棫瀛楀吀绫诲瀷
-     * @return 缁撴灉
-     */
-    int updateDictDataType(@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysDictTypeMapper.java b/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysDictTypeMapper.java
deleted file mode 100644
index 7610745..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysDictTypeMapper.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.dingzhuo.energy.project.system.mapper;
-
-import java.util.List;
-import org.apache.ibatis.annotations.Mapper;
-import com.dingzhuo.energy.project.system.domain.SysDictType;
-
-/**
- * 瀛楀吀琛� 鏁版嵁灞�
- * 
- * @author ruoyi
- */
-@Mapper
-public interface SysDictTypeMapper
-{
-    /**
-     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀绫诲瀷
-     * 
-     * @param dictType 瀛楀吀绫诲瀷淇℃伅
-     * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅
-     */
-    List<SysDictType> selectDictTypeList(SysDictType dictType);
-
-    /**
-     * 鏍规嵁鎵�鏈夊瓧鍏哥被鍨�
-     * 
-     * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅
-     */
-    List<SysDictType> selectDictTypeAll();
-
-    /**
-     * 鏍规嵁瀛楀吀绫诲瀷ID鏌ヨ淇℃伅
-     * 
-     * @param dictId 瀛楀吀绫诲瀷ID
-     * @return 瀛楀吀绫诲瀷
-     */
-    SysDictType selectDictTypeById(Long dictId);
-
-    /**
-     * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ淇℃伅
-     * 
-     * @param dictType 瀛楀吀绫诲瀷
-     * @return 瀛楀吀绫诲瀷
-     */
-    SysDictType selectDictTypeByType(String dictType);
-
-    /**
-     * 閫氳繃瀛楀吀ID鍒犻櫎瀛楀吀淇℃伅
-     * 
-     * @param dictId 瀛楀吀ID
-     * @return 缁撴灉
-     */
-    int deleteDictTypeById(Long dictId);
-
-    /**
-     * 鎵归噺鍒犻櫎瀛楀吀绫诲瀷淇℃伅
-     * 
-     * @param dictIds 闇�瑕佸垹闄ょ殑瀛楀吀ID
-     * @return 缁撴灉
-     */
-    int deleteDictTypeByIds(Long[] dictIds);
-
-    /**
-     * 鏂板瀛楀吀绫诲瀷淇℃伅
-     * 
-     * @param dictType 瀛楀吀绫诲瀷淇℃伅
-     * @return 缁撴灉
-     */
-    int insertDictType(SysDictType dictType);
-
-    /**
-     * 淇敼瀛楀吀绫诲瀷淇℃伅
-     * 
-     * @param dictType 瀛楀吀绫诲瀷淇℃伅
-     * @return 缁撴灉
-     */
-    int updateDictType(SysDictType dictType);
-
-    /**
-     * 鏍¢獙瀛楀吀绫诲瀷绉版槸鍚﹀敮涓�
-     * 
-     * @param dictType 瀛楀吀绫诲瀷
-     * @return 缁撴灉
-     */
-    SysDictType checkDictTypeUnique(String dictType);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysMenuMapper.java b/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysMenuMapper.java
deleted file mode 100644
index fb2c154..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysMenuMapper.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.dingzhuo.energy.project.system.mapper;
-
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
-import com.dingzhuo.energy.project.system.domain.SysMenu;
-
-/**
- * 鑿滃崟琛� 鏁版嵁灞�
- * 
- * @author ruoyi
- */
-public interface SysMenuMapper
-{
-    /**
-     * 鏌ヨ绯荤粺鑿滃崟鍒楄〃
-     * 
-     * @param menu 鑿滃崟淇℃伅
-     * @return 鑿滃崟鍒楄〃
-     */
-    List<SysMenu> selectMenuList(SysMenu menu);
-
-    /**
-     * 鏍规嵁鐢ㄦ埛鎵�鏈夋潈闄�
-     * 
-     * @return 鏉冮檺鍒楄〃
-     */
-    List<String> selectMenuPerms();
-
-    /**
-     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鏉冮檺
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 鏉冮檺鍒楄〃
-     */
-    List<String> selectMenuPermsByUserId(Long userId);
-
-    /**
-     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鑿滃崟
-     * 
-     * @return 鑿滃崟鍒楄〃
-     */
-    List<SysMenu> selectMenuTreeAll();
-
-    /**
-     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鑿滃崟
-     * 
-     * @param username 鐢ㄦ埛ID
-     * @return 鑿滃崟鍒楄〃
-     */
-    List<SysMenu> selectMenuTreeByUserId(Long userId);
-
-    /**
-     * 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟鏍戜俊鎭�
-     * 
-     * @param roleId 瑙掕壊ID
-     * @return 閫変腑鑿滃崟鍒楄〃
-     */
-    List<Integer> selectMenuListByRoleId(Long roleId);
-
-    /**
-     * 鏍规嵁鑿滃崟ID鏌ヨ淇℃伅
-     * 
-     * @param menuId 鑿滃崟ID
-     * @return 鑿滃崟淇℃伅
-     */
-    SysMenu selectMenuById(Long menuId);
-
-    /**
-     * 鏄惁瀛樺湪鑿滃崟瀛愯妭鐐�
-     * 
-     * @param menuId 鑿滃崟ID
-     * @return 缁撴灉
-     */
-    int hasChildByMenuId(Long menuId);
-
-    /**
-     * 鏂板鑿滃崟淇℃伅
-     * 
-     * @param menu 鑿滃崟淇℃伅
-     * @return 缁撴灉
-     */
-    int insertMenu(SysMenu menu);
-
-    /**
-     * 淇敼鑿滃崟淇℃伅
-     * 
-     * @param menu 鑿滃崟淇℃伅
-     * @return 缁撴灉
-     */
-    int updateMenu(SysMenu menu);
-
-    /**
-     * 鍒犻櫎鑿滃崟绠$悊淇℃伅
-     * 
-     * @param menuId 鑿滃崟ID
-     * @return 缁撴灉
-     */
-    int deleteMenuById(Long menuId);
-
-    /**
-     * 鏍¢獙鑿滃崟鍚嶇О鏄惁鍞竴
-     * 
-     * @param menuName 鑿滃崟鍚嶇О
-     * @param parentId 鐖惰彍鍗旾D
-     * @return 缁撴灉
-     */
-    SysMenu checkMenuNameUnique(@Param("menuName") String menuName, @Param("parentId") Long parentId);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysNoticeMapper.java b/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysNoticeMapper.java
deleted file mode 100644
index e865037..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysNoticeMapper.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.dingzhuo.energy.project.system.mapper;
-
-import java.util.List;
-import com.dingzhuo.energy.project.system.domain.SysNotice;
-
-/**
- * 閫氱煡鍏憡琛� 鏁版嵁灞�
- * 
- * @author ruoyi
- */
-public interface SysNoticeMapper
-{
-    /**
-     * 鏌ヨ鍏憡淇℃伅
-     * 
-     * @param noticeId 鍏憡ID
-     * @return 鍏憡淇℃伅
-     */
-    SysNotice selectNoticeById(Long noticeId);
-
-    /**
-     * 鏌ヨ鍏憡鍒楄〃
-     * 
-     * @param notice 鍏憡淇℃伅
-     * @return 鍏憡闆嗗悎
-     */
-    List<SysNotice> selectNoticeList(SysNotice notice);
-
-    /**
-     * 鏂板鍏憡
-     * 
-     * @param notice 鍏憡淇℃伅
-     * @return 缁撴灉
-     */
-    int insertNotice(SysNotice notice);
-
-    /**
-     * 淇敼鍏憡
-     * 
-     * @param notice 鍏憡淇℃伅
-     * @return 缁撴灉
-     */
-    int updateNotice(SysNotice notice);
-
-    /**
-     * 鎵归噺鍒犻櫎鍏憡
-     * 
-     * @param noticeId 鍏憡ID
-     * @return 缁撴灉
-     */
-    int deleteNoticeById(Long noticeId);
-
-    /**
-     * 鎵归噺鍒犻櫎鍏憡淇℃伅
-     * 
-     * @param noticeIds 闇�瑕佸垹闄ょ殑鍏憡ID
-     * @return 缁撴灉
-     */
-    int deleteNoticeByIds(Long noticeIds);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysPostMapper.java b/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysPostMapper.java
deleted file mode 100644
index 1851223..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysPostMapper.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.dingzhuo.energy.project.system.mapper;
-
-import java.util.List;
-import com.dingzhuo.energy.project.system.domain.SysPost;
-
-/**
- * 宀椾綅淇℃伅 鏁版嵁灞�
- * 
- * @author ruoyi
- */
-public interface SysPostMapper
-{
-    /**
-     * 鏌ヨ宀椾綅鏁版嵁闆嗗悎
-     * 
-     * @param post 宀椾綅淇℃伅
-     * @return 宀椾綅鏁版嵁闆嗗悎
-     */
-    List<SysPost> selectPostList(SysPost post);
-
-    /**
-     * 鏌ヨ鎵�鏈夊矖浣�
-     * 
-     * @return 宀椾綅鍒楄〃
-     */
-    List<SysPost> selectPostAll();
-
-    /**
-     * 閫氳繃宀椾綅ID鏌ヨ宀椾綅淇℃伅
-     * 
-     * @param postId 宀椾綅ID
-     * @return 瑙掕壊瀵硅薄淇℃伅
-     */
-    SysPost selectPostById(Long postId);
-
-    /**
-     * 鏍规嵁鐢ㄦ埛ID鑾峰彇宀椾綅閫夋嫨妗嗗垪琛�
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 閫変腑宀椾綅ID鍒楄〃
-     */
-    List<Integer> selectPostListByUserId(Long userId);
-
-    /**
-     * 鏌ヨ鐢ㄦ埛鎵�灞炲矖浣嶇粍
-     * 
-     * @param userName 鐢ㄦ埛鍚�
-     * @return 缁撴灉
-     */
-    List<SysPost> selectPostsByUserName(String userName);
-
-    /**
-     * 鍒犻櫎宀椾綅淇℃伅
-     * 
-     * @param postId 宀椾綅ID
-     * @return 缁撴灉
-     */
-    int deletePostById(Long postId);
-
-    /**
-     * 鎵归噺鍒犻櫎宀椾綅淇℃伅
-     * 
-     * @param postIds 闇�瑕佸垹闄ょ殑宀椾綅ID
-     * @return 缁撴灉
-     */
-    int deletePostByIds(Long[] postIds);
-
-    /**
-     * 淇敼宀椾綅淇℃伅
-     * 
-     * @param post 宀椾綅淇℃伅
-     * @return 缁撴灉
-     */
-    int updatePost(SysPost post);
-
-    /**
-     * 鏂板宀椾綅淇℃伅
-     * 
-     * @param post 宀椾綅淇℃伅
-     * @return 缁撴灉
-     */
-    int insertPost(SysPost post);
-
-    /**
-     * 鏍¢獙宀椾綅鍚嶇О
-     * 
-     * @param postName 宀椾綅鍚嶇О
-     * @return 缁撴灉
-     */
-    SysPost checkPostNameUnique(String postName);
-
-    /**
-     * 鏍¢獙宀椾綅缂栫爜
-     * 
-     * @param postCode 宀椾綅缂栫爜
-     * @return 缁撴灉
-     */
-    SysPost checkPostCodeUnique(String postCode);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysRoleDeptMapper.java b/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysRoleDeptMapper.java
deleted file mode 100644
index 6633fa4..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysRoleDeptMapper.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.dingzhuo.energy.project.system.mapper;
-
-import java.util.List;
-import com.dingzhuo.energy.project.system.domain.SysRoleDept;
-
-/**
- * 瑙掕壊涓庨儴闂ㄥ叧鑱旇〃 鏁版嵁灞�
- * 
- * @author ruoyi
- */
-public interface SysRoleDeptMapper
-{
-    /**
-     * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊鍜岄儴闂ㄥ叧鑱�
-     * 
-     * @param roleId 瑙掕壊ID
-     * @return 缁撴灉
-     */
-    int deleteRoleDeptByRoleId(Long roleId);
-
-    /**
-     * 鎵归噺鍒犻櫎瑙掕壊閮ㄩ棬鍏宠仈淇℃伅
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    int deleteRoleDept(Long[] ids);
-
-    /**
-     * 鏌ヨ閮ㄩ棬浣跨敤鏁伴噺
-     * 
-     * @param deptId 閮ㄩ棬ID
-     * @return 缁撴灉
-     */
-    int selectCountRoleDeptByDeptId(Long deptId);
-
-    /**
-     * 鎵归噺鏂板瑙掕壊閮ㄩ棬淇℃伅
-     * 
-     * @param roleDeptList 瑙掕壊閮ㄩ棬鍒楄〃
-     * @return 缁撴灉
-     */
-    int batchRoleDept(List<SysRoleDept> roleDeptList);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysRoleMapper.java b/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysRoleMapper.java
deleted file mode 100644
index 6f9910e..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysRoleMapper.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package com.dingzhuo.energy.project.system.mapper;
-
-import java.util.List;
-import com.dingzhuo.energy.project.system.domain.SysRole;
-
-/**
- * 瑙掕壊琛� 鏁版嵁灞�
- * 
- * @author ruoyi
- */
-public interface SysRoleMapper
-{
-    /**
-     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瑙掕壊鏁版嵁
-     * 
-     * @param role 瑙掕壊淇℃伅
-     * @return 瑙掕壊鏁版嵁闆嗗悎淇℃伅
-     */
-    List<SysRole> selectRoleList(SysRole role);
-
-    /**
-     * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 瑙掕壊鍒楄〃
-     */
-    List<SysRole> selectRolePermissionByUserId(Long userId);
-
-    /**
-     * 鏌ヨ鎵�鏈夎鑹�
-     * 
-     * @return 瑙掕壊鍒楄〃
-     */
-    List<SysRole> selectRoleAll();
-
-    /**
-     * 鏍规嵁鐢ㄦ埛ID鑾峰彇瑙掕壊閫夋嫨妗嗗垪琛�
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 閫変腑瑙掕壊ID鍒楄〃
-     */
-    List<Integer> selectRoleListByUserId(Long userId);
-
-    /**
-     * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊
-     * 
-     * @param roleId 瑙掕壊ID
-     * @return 瑙掕壊瀵硅薄淇℃伅
-     */
-    SysRole selectRoleById(Long roleId);
-
-    /**
-     * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊
-     * 
-     * @param userName 鐢ㄦ埛鍚�
-     * @return 瑙掕壊鍒楄〃
-     */
-    List<SysRole> selectRolesByUserName(String userName);
-
-    /**
-     * 鏍¢獙瑙掕壊鍚嶇О鏄惁鍞竴
-     * 
-     * @param roleName 瑙掕壊鍚嶇О
-     * @return 瑙掕壊淇℃伅
-     */
-    SysRole checkRoleNameUnique(String roleName);
-
-    /**
-     * 鏍¢獙瑙掕壊鏉冮檺鏄惁鍞竴
-     * 
-     * @param roleKey 瑙掕壊鏉冮檺
-     * @return 瑙掕壊淇℃伅
-     */
-    SysRole checkRoleKeyUnique(String roleKey);
-
-    /**
-     * 淇敼瑙掕壊淇℃伅
-     * 
-     * @param role 瑙掕壊淇℃伅
-     * @return 缁撴灉
-     */
-    int updateRole(SysRole role);
-
-    /**
-     * 鏂板瑙掕壊淇℃伅
-     * 
-     * @param role 瑙掕壊淇℃伅
-     * @return 缁撴灉
-     */
-    int insertRole(SysRole role);
-
-    /**
-     * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊
-     * 
-     * @param roleId 瑙掕壊ID
-     * @return 缁撴灉
-     */
-    int deleteRoleById(Long roleId);
-
-    /**
-     * 鎵归噺鍒犻櫎瑙掕壊淇℃伅
-     * 
-     * @param roleIds 闇�瑕佸垹闄ょ殑瑙掕壊ID
-     * @return 缁撴灉
-     */
-    int deleteRoleByIds(Long[] roleIds);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysRoleMenuMapper.java b/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysRoleMenuMapper.java
deleted file mode 100644
index 83200f8..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysRoleMenuMapper.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.dingzhuo.energy.project.system.mapper;
-
-import java.util.List;
-import com.dingzhuo.energy.project.system.domain.SysRoleMenu;
-
-/**
- * 瑙掕壊涓庤彍鍗曞叧鑱旇〃 鏁版嵁灞�
- * 
- * @author ruoyi
- */
-public interface SysRoleMenuMapper
-{
-    /**
-     * 鏌ヨ鑿滃崟浣跨敤鏁伴噺
-     * 
-     * @param menuId 鑿滃崟ID
-     * @return 缁撴灉
-     */
-    int checkMenuExistRole(Long menuId);
-
-    /**
-     * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊鍜岃彍鍗曞叧鑱�
-     * 
-     * @param roleId 瑙掕壊ID
-     * @return 缁撴灉
-     */
-    int deleteRoleMenuByRoleId(Long roleId);
-
-    /**
-     * 鎵归噺鏂板瑙掕壊鑿滃崟淇℃伅
-     * 
-     * @param roleMenuList 瑙掕壊鑿滃崟鍒楄〃
-     * @return 缁撴灉
-     */
-    int batchRoleMenu(List<SysRoleMenu> roleMenuList);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysUserMapper.java b/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysUserMapper.java
deleted file mode 100644
index 7b4584a..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysUserMapper.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package com.dingzhuo.energy.project.system.mapper;
-
-import java.util.List;
-
-import org.apache.ibatis.annotations.Param;
-
-import com.dingzhuo.energy.project.system.domain.SysUser;
-
-/**
- * 鐢ㄦ埛琛� 鏁版嵁灞�
- * 
- * @author ruoyi
- */
-public interface SysUserMapper
-{
-    /**
-     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鐢ㄦ埛鍒楄〃
-     * 
-     * @param sysUser 鐢ㄦ埛淇℃伅
-     * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
-     */
-    List<SysUser> selectUserList(SysUser sysUser);
-
-    /**
-     * 閫氳繃鐢ㄦ埛鍚嶆煡璇㈢敤鎴�
-     * 
-     * @param userName 鐢ㄦ埛鍚�
-     * @return 鐢ㄦ埛瀵硅薄淇℃伅
-     */
-    SysUser selectUserByUserName(String userName);
-
-    /**
-     * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 鐢ㄦ埛瀵硅薄淇℃伅
-     */
-    SysUser selectUserById(Long userId);
-
-    /**
-     * 鏂板鐢ㄦ埛淇℃伅
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 缁撴灉
-     */
-    int insertUser(SysUser user);
-
-    /**
-     * 淇敼鐢ㄦ埛淇℃伅
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 缁撴灉
-     */
-    int updateUser(SysUser user);
-
-    /**
-     * 淇敼鐢ㄦ埛澶村儚
-     * 
-     * @param userName 鐢ㄦ埛鍚�
-     * @param avatar 澶村儚鍦板潃
-     * @return 缁撴灉
-     */
-    int updateUserAvatar(@Param("userName") String userName, @Param("avatar") String avatar);
-
-    /**
-     * 閲嶇疆鐢ㄦ埛瀵嗙爜
-     * 
-     * @param userName 鐢ㄦ埛鍚�
-     * @param password 瀵嗙爜
-     * @return 缁撴灉
-     */
-    int resetUserPwd(@Param("userName") String userName, @Param("password") String password);
-
-    /**
-     * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 缁撴灉
-     */
-    int deleteUserById(Long userId);
-
-    /**
-     * 鎵归噺鍒犻櫎鐢ㄦ埛淇℃伅
-     * 
-     * @param userIds 闇�瑕佸垹闄ょ殑鐢ㄦ埛ID
-     * @return 缁撴灉
-     */
-    int deleteUserByIds(Long[] userIds);
-
-    /**
-     * 鏍¢獙鐢ㄦ埛鍚嶇О鏄惁鍞竴
-     * 
-     * @param userName 鐢ㄦ埛鍚嶇О
-     * @return 缁撴灉
-     */
-    int checkUserNameUnique(String userName);
-
-    /**
-     * 鏍¢獙鎵嬫満鍙风爜鏄惁鍞竴
-     *
-     * @param phonenumber 鎵嬫満鍙风爜
-     * @return 缁撴灉
-     */
-    SysUser checkPhoneUnique(String phonenumber);
-
-    /**
-     * 鏍¢獙email鏄惁鍞竴
-     *
-     * @param email 鐢ㄦ埛閭
-     * @return 缁撴灉
-     */
-    SysUser checkEmailUnique(String email);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysUserPostMapper.java b/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysUserPostMapper.java
deleted file mode 100644
index a3de5de..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysUserPostMapper.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.dingzhuo.energy.project.system.mapper;
-
-import java.util.List;
-import com.dingzhuo.energy.project.system.domain.SysUserPost;
-
-/**
- * 鐢ㄦ埛涓庡矖浣嶅叧鑱旇〃 鏁版嵁灞�
- * 
- * @author ruoyi
- */
-public interface SysUserPostMapper
-{
-    /**
-     * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛鍜屽矖浣嶅叧鑱�
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 缁撴灉
-     */
-    int deleteUserPostByUserId(Long userId);
-
-    /**
-     * 閫氳繃宀椾綅ID鏌ヨ宀椾綅浣跨敤鏁伴噺
-     * 
-     * @param postId 宀椾綅ID
-     * @return 缁撴灉
-     */
-    int countUserPostById(Long postId);
-
-    /**
-     * 鎵归噺鍒犻櫎鐢ㄦ埛鍜屽矖浣嶅叧鑱�
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    int deleteUserPost(Long[] ids);
-
-    /**
-     * 鎵归噺鏂板鐢ㄦ埛宀椾綅淇℃伅
-     * 
-     * @param userPostList 鐢ㄦ埛瑙掕壊鍒楄〃
-     * @return 缁撴灉
-     */
-    int batchUserPost(List<SysUserPost> userPostList);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysUserRoleMapper.java b/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysUserRoleMapper.java
deleted file mode 100644
index 1b1eac8..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/mapper/SysUserRoleMapper.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.dingzhuo.energy.project.system.mapper;
-
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
-import com.dingzhuo.energy.project.system.domain.SysUserRole;
-
-/**
- * 鐢ㄦ埛涓庤鑹插叧鑱旇〃 鏁版嵁灞�
- * 
- * @author ruoyi
- */
-public interface SysUserRoleMapper
-{
-    /**
-     * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛鍜岃鑹插叧鑱�
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 缁撴灉
-     */
-    int deleteUserRoleByUserId(Long userId);
-
-    /**
-     * 鎵归噺鍒犻櫎鐢ㄦ埛鍜岃鑹插叧鑱�
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    int deleteUserRole(Long[] ids);
-
-    /**
-     * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊浣跨敤鏁伴噺
-     * 
-     * @param roleId 瑙掕壊ID
-     * @return 缁撴灉
-     */
-    int countUserRoleByRoleId(Long roleId);
-
-    /**
-     * 鎵归噺鏂板鐢ㄦ埛瑙掕壊淇℃伅
-     * 
-     * @param userRoleList 鐢ㄦ埛瑙掕壊鍒楄〃
-     * @return 缁撴灉
-     */
-    int batchUserRole(List<SysUserRole> userRoleList);
-
-    /**
-     * 鍒犻櫎鐢ㄦ埛鍜岃鑹插叧鑱斾俊鎭�
-     * 
-     * @param userRole 鐢ㄦ埛鍜岃鑹插叧鑱斾俊鎭�
-     * @return 缁撴灉
-     */
-    int deleteUserRoleInfo(SysUserRole userRole);
-
-    /**
-     * 鎵归噺鍙栨秷鎺堟潈鐢ㄦ埛瑙掕壊
-     * 
-     * @param roleId 瑙掕壊ID
-     * @param userIds 闇�瑕佸垹闄ょ殑鐢ㄦ埛鏁版嵁ID
-     * @return 缁撴灉
-     */
-    int deleteUserRoleInfos(@Param("roleId") Long roleId, @Param("userIds") Long[] userIds);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysConfigService.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysConfigService.java
deleted file mode 100644
index 7d6f805..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysConfigService.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.dingzhuo.energy.project.system.service;
-
-import java.util.List;
-import com.dingzhuo.energy.project.system.domain.SysConfig;
-
-/**
- * 鍙傛暟閰嶇疆 鏈嶅姟灞�
- * 
- * @author ruoyi
- */
-public interface ISysConfigService
-{
-    /**
-     * 鏌ヨ鍙傛暟閰嶇疆淇℃伅
-     * 
-     * @param configId 鍙傛暟閰嶇疆ID
-     * @return 鍙傛暟閰嶇疆淇℃伅
-     */
-    SysConfig selectConfigById(Long configId);
-
-    /**
-     * 鏍规嵁閿悕鏌ヨ鍙傛暟閰嶇疆淇℃伅
-     * 
-     * @param configKey 鍙傛暟閿悕
-     * @return 鍙傛暟閿��
-     */
-    String selectConfigByKey(String configKey);
-
-    /**
-     * 鏌ヨ鍙傛暟閰嶇疆鍒楄〃
-     * 
-     * @param config 鍙傛暟閰嶇疆淇℃伅
-     * @return 鍙傛暟閰嶇疆闆嗗悎
-     */
-    List<SysConfig> selectConfigList(SysConfig config);
-
-    /**
-     * 鏂板鍙傛暟閰嶇疆
-     * 
-     * @param config 鍙傛暟閰嶇疆淇℃伅
-     * @return 缁撴灉
-     */
-    int insertConfig(SysConfig config);
-
-    /**
-     * 淇敼鍙傛暟閰嶇疆
-     * 
-     * @param config 鍙傛暟閰嶇疆淇℃伅
-     * @return 缁撴灉
-     */
-    int updateConfig(SysConfig config);
-
-    /**
-     * 鍒犻櫎鍙傛暟閰嶇疆淇℃伅
-     * 
-     * @param configId 鍙傛暟ID
-     * @return 缁撴灉
-     */
-    int deleteConfigById(Long configId);
-
-    /**
-     * 鎵归噺鍒犻櫎鍙傛暟淇℃伅
-     * 
-     * @param configIds 闇�瑕佸垹闄ょ殑鍙傛暟ID
-     * @return 缁撴灉
-     */
-    int deleteConfigByIds(Long[] configIds);
-
-    /**
-     * 鏍¢獙鍙傛暟閿悕鏄惁鍞竴
-     * 
-     * @param config 鍙傛暟淇℃伅
-     * @return 缁撴灉
-     */
-    String checkConfigKeyUnique(SysConfig config);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysDeptService.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysDeptService.java
deleted file mode 100644
index 626f651..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysDeptService.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.dingzhuo.energy.project.system.service;
-
-import java.util.List;
-
-import com.dingzhuo.energy.framework.web.domain.TreeSelect;
-import com.dingzhuo.energy.framework.web.domain.TreeSelect;
-import com.dingzhuo.energy.project.system.domain.SysDept;
-
-/**
- * 閮ㄩ棬绠$悊 鏈嶅姟灞�
- * 
- * @author ruoyi
- */
-public interface ISysDeptService
-{
-    /**
-     * 鏌ヨ閮ㄩ棬绠$悊鏁版嵁
-     * 
-     * @param dept 閮ㄩ棬淇℃伅
-     * @return 閮ㄩ棬淇℃伅闆嗗悎
-     */
-    List<SysDept> selectDeptList(SysDept dept);
-
-    /**
-     * 鏋勫缓鍓嶇鎵�闇�瑕佹爲缁撴瀯
-     * 
-     * @param depts 閮ㄩ棬鍒楄〃
-     * @return 鏍戠粨鏋勫垪琛�
-     */
-    List<SysDept> buildDeptTree(List<SysDept> depts);
-
-    /**
-     * 鏋勫缓鍓嶇鎵�闇�瑕佷笅鎷夋爲缁撴瀯
-     * 
-     * @param depts 閮ㄩ棬鍒楄〃
-     * @return 涓嬫媺鏍戠粨鏋勫垪琛�
-     */
-    List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts);
-
-    /**
-     * 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戜俊鎭�
-     * 
-     * @param roleId 瑙掕壊ID
-     * @return 閫変腑閮ㄩ棬鍒楄〃
-     */
-    List<Integer> selectDeptListByRoleId(Long roleId);
-
-    /**
-     * 鏍规嵁閮ㄩ棬ID鏌ヨ淇℃伅
-     * 
-     * @param deptId 閮ㄩ棬ID
-     * @return 閮ㄩ棬淇℃伅
-     */
-    SysDept selectDeptById(Long deptId);
-
-    /**
-     * 鏄惁瀛樺湪閮ㄩ棬瀛愯妭鐐�
-     * 
-     * @param deptId 閮ㄩ棬ID
-     * @return 缁撴灉
-     */
-    boolean hasChildByDeptId(Long deptId);
-
-    /**
-     * 鏌ヨ閮ㄩ棬鏄惁瀛樺湪鐢ㄦ埛
-     * 
-     * @param deptId 閮ㄩ棬ID
-     * @return 缁撴灉 true 瀛樺湪 false 涓嶅瓨鍦�
-     */
-    boolean checkDeptExistUser(Long deptId);
-
-    /**
-     * 鏍¢獙閮ㄩ棬鍚嶇О鏄惁鍞竴
-     * 
-     * @param dept 閮ㄩ棬淇℃伅
-     * @return 缁撴灉
-     */
-    String checkDeptNameUnique(SysDept dept);
-
-    /**
-     * 鏂板淇濆瓨閮ㄩ棬淇℃伅
-     * 
-     * @param dept 閮ㄩ棬淇℃伅
-     * @return 缁撴灉
-     */
-    int insertDept(SysDept dept);
-
-    /**
-     * 淇敼淇濆瓨閮ㄩ棬淇℃伅
-     * 
-     * @param dept 閮ㄩ棬淇℃伅
-     * @return 缁撴灉
-     */
-    int updateDept(SysDept dept);
-
-    /**
-     * 鍒犻櫎閮ㄩ棬绠$悊淇℃伅
-     * 
-     * @param deptId 閮ㄩ棬ID
-     * @return 缁撴灉
-     */
-    int deleteDeptById(Long deptId);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysDictDataService.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysDictDataService.java
deleted file mode 100644
index ca28aff..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysDictDataService.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.dingzhuo.energy.project.system.service;
-
-import java.util.List;
-import com.dingzhuo.energy.project.system.domain.SysDictData;
-
-/**
- * 瀛楀吀 涓氬姟灞�
- * 
- * @author ruoyi
- */
-public interface ISysDictDataService
-{
-    /**
-     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀鏁版嵁
-     * 
-     * @param dictData 瀛楀吀鏁版嵁淇℃伅
-     * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅
-     */
-    List<SysDictData> selectDictDataList(SysDictData dictData);
-
-    /**
-     * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁
-     * 
-     * @param dictType 瀛楀吀绫诲瀷
-     * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅
-     */
-    List<SysDictData> selectDictDataByType(String dictType);
-
-    /**
-     * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏搁敭鍊兼煡璇㈠瓧鍏告暟鎹俊鎭�
-     * 
-     * @param dictType 瀛楀吀绫诲瀷
-     * @param dictValue 瀛楀吀閿��
-     * @return 瀛楀吀鏍囩
-     */
-    String selectDictLabel(String dictType, String dictValue);
-
-    /**
-     * 鏍规嵁瀛楀吀鏁版嵁ID鏌ヨ淇℃伅
-     * 
-     * @param dictCode 瀛楀吀鏁版嵁ID
-     * @return 瀛楀吀鏁版嵁
-     */
-    SysDictData selectDictDataById(Long dictCode);
-
-    /**
-     * 閫氳繃瀛楀吀ID鍒犻櫎瀛楀吀鏁版嵁淇℃伅
-     * 
-     * @param dictCode 瀛楀吀鏁版嵁ID
-     * @return 缁撴灉
-     */
-    int deleteDictDataById(Long dictCode);
-
-    /**
-     * 鎵归噺鍒犻櫎瀛楀吀鏁版嵁淇℃伅
-     * 
-     * @param dictCodes 闇�瑕佸垹闄ょ殑瀛楀吀鏁版嵁ID
-     * @return 缁撴灉
-     */
-    int deleteDictDataByIds(Long[] dictCodes);
-
-    /**
-     * 鏂板淇濆瓨瀛楀吀鏁版嵁淇℃伅
-     * 
-     * @param dictData 瀛楀吀鏁版嵁淇℃伅
-     * @return 缁撴灉
-     */
-    int insertDictData(SysDictData dictData);
-
-    /**
-     * 淇敼淇濆瓨瀛楀吀鏁版嵁淇℃伅
-     * 
-     * @param dictData 瀛楀吀鏁版嵁淇℃伅
-     * @return 缁撴灉
-     */
-    int updateDictData(SysDictData dictData);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysDictTypeService.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysDictTypeService.java
deleted file mode 100644
index cc3c0cf..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysDictTypeService.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.dingzhuo.energy.project.system.service;
-
-import java.util.List;
-import com.dingzhuo.energy.project.system.domain.SysDictType;
-
-/**
- * 瀛楀吀 涓氬姟灞�
- * 
- * @author ruoyi
- */
-public interface ISysDictTypeService
-{
-    /**
-     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀绫诲瀷
-     * 
-     * @param dictType 瀛楀吀绫诲瀷淇℃伅
-     * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅
-     */
-    List<SysDictType> selectDictTypeList(SysDictType dictType);
-
-    /**
-     * 鏍规嵁鎵�鏈夊瓧鍏哥被鍨�
-     * 
-     * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅
-     */
-    List<SysDictType> selectDictTypeAll();
-
-    /**
-     * 鏍规嵁瀛楀吀绫诲瀷ID鏌ヨ淇℃伅
-     * 
-     * @param dictId 瀛楀吀绫诲瀷ID
-     * @return 瀛楀吀绫诲瀷
-     */
-    SysDictType selectDictTypeById(Long dictId);
-
-    /**
-     * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ淇℃伅
-     * 
-     * @param dictType 瀛楀吀绫诲瀷
-     * @return 瀛楀吀绫诲瀷
-     */
-    SysDictType selectDictTypeByType(String dictType);
-
-    /**
-     * 閫氳繃瀛楀吀ID鍒犻櫎瀛楀吀淇℃伅
-     * 
-     * @param dictId 瀛楀吀ID
-     * @return 缁撴灉
-     */
-    int deleteDictTypeById(Long dictId);
-
-    /**
-     * 鎵归噺鍒犻櫎瀛楀吀淇℃伅
-     * 
-     * @param dictIds 闇�瑕佸垹闄ょ殑瀛楀吀ID
-     * @return 缁撴灉
-     */
-    int deleteDictTypeByIds(Long[] dictIds);
-
-    /**
-     * 鏂板淇濆瓨瀛楀吀绫诲瀷淇℃伅
-     * 
-     * @param dictType 瀛楀吀绫诲瀷淇℃伅
-     * @return 缁撴灉
-     */
-    int insertDictType(SysDictType dictType);
-
-    /**
-     * 淇敼淇濆瓨瀛楀吀绫诲瀷淇℃伅
-     * 
-     * @param dictType 瀛楀吀绫诲瀷淇℃伅
-     * @return 缁撴灉
-     */
-    int updateDictType(SysDictType dictType);
-
-    /**
-     * 鏍¢獙瀛楀吀绫诲瀷绉版槸鍚﹀敮涓�
-     * 
-     * @param dictType 瀛楀吀绫诲瀷
-     * @return 缁撴灉
-     */
-    String checkDictTypeUnique(SysDictType dictType);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysMenuService.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysMenuService.java
deleted file mode 100644
index 8aa7aa5..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysMenuService.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package com.dingzhuo.energy.project.system.service;
-
-import java.util.List;
-import java.util.Set;
-
-import com.dingzhuo.energy.framework.web.domain.TreeSelect;
-import com.dingzhuo.energy.framework.web.domain.TreeSelect;
-import com.dingzhuo.energy.project.system.domain.SysMenu;
-import com.dingzhuo.energy.project.system.domain.vo.RouterVo;
-
-/**
- * 鑿滃崟 涓氬姟灞�
- * 
- * @author ruoyi
- */
-public interface ISysMenuService
-{
-    /**
-     * 鏌ヨ绯荤粺鑿滃崟鍒楄〃
-     * 
-     * @param menu 鑿滃崟淇℃伅
-     * @return 鑿滃崟鍒楄〃
-     */
-    List<SysMenu> selectMenuList(SysMenu menu);
-
-    /**
-     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鏉冮檺
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 鏉冮檺鍒楄〃
-     */
-    Set<String> selectMenuPermsByUserId(Long userId);
-
-    /**
-     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鑿滃崟鏍戜俊鎭�
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 鑿滃崟鍒楄〃
-     */
-    List<SysMenu> selectMenuTreeByUserId(Long userId);
-
-    /**
-     * 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟鏍戜俊鎭�
-     * 
-     * @param roleId 瑙掕壊ID
-     * @return 閫変腑鑿滃崟鍒楄〃
-     */
-    List<Integer> selectMenuListByRoleId(Long roleId);
-
-    /**
-     * 鏋勫缓鍓嶇璺敱鎵�闇�瑕佺殑鑿滃崟
-     * 
-     * @param menus 鑿滃崟鍒楄〃
-     * @return 璺敱鍒楄〃
-     */
-    List<RouterVo> buildMenus(List<SysMenu> menus);
-
-    /**
-     * 鏋勫缓鍓嶇鎵�闇�瑕佹爲缁撴瀯
-     * 
-     * @param menus 鑿滃崟鍒楄〃
-     * @return 鏍戠粨鏋勫垪琛�
-     */
-    List<SysMenu> buildMenuTree(List<SysMenu> menus);
-
-    /**
-     * 鏋勫缓鍓嶇鎵�闇�瑕佷笅鎷夋爲缁撴瀯
-     * 
-     * @param menus 鑿滃崟鍒楄〃
-     * @return 涓嬫媺鏍戠粨鏋勫垪琛�
-     */
-    List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus);
-
-    /**
-     * 鏍规嵁鑿滃崟ID鏌ヨ淇℃伅
-     * 
-     * @param menuId 鑿滃崟ID
-     * @return 鑿滃崟淇℃伅
-     */
-    SysMenu selectMenuById(Long menuId);
-
-    /**
-     * 鏄惁瀛樺湪鑿滃崟瀛愯妭鐐�
-     * 
-     * @param menuId 鑿滃崟ID
-     * @return 缁撴灉 true 瀛樺湪 false 涓嶅瓨鍦�
-     */
-    boolean hasChildByMenuId(Long menuId);
-
-    /**
-     * 鏌ヨ鑿滃崟鏄惁瀛樺湪瑙掕壊
-     * 
-     * @param menuId 鑿滃崟ID
-     * @return 缁撴灉 true 瀛樺湪 false 涓嶅瓨鍦�
-     */
-    boolean checkMenuExistRole(Long menuId);
-
-    /**
-     * 鏂板淇濆瓨鑿滃崟淇℃伅
-     * 
-     * @param menu 鑿滃崟淇℃伅
-     * @return 缁撴灉
-     */
-    int insertMenu(SysMenu menu);
-
-    /**
-     * 淇敼淇濆瓨鑿滃崟淇℃伅
-     * 
-     * @param menu 鑿滃崟淇℃伅
-     * @return 缁撴灉
-     */
-    int updateMenu(SysMenu menu);
-
-    /**
-     * 鍒犻櫎鑿滃崟绠$悊淇℃伅
-     * 
-     * @param menuId 鑿滃崟ID
-     * @return 缁撴灉
-     */
-    int deleteMenuById(Long menuId);
-
-    /**
-     * 鏍¢獙鑿滃崟鍚嶇О鏄惁鍞竴
-     * 
-     * @param menu 鑿滃崟淇℃伅
-     * @return 缁撴灉
-     */
-    String checkMenuNameUnique(SysMenu menu);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysNoticeService.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysNoticeService.java
deleted file mode 100644
index 7458ea7..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysNoticeService.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.dingzhuo.energy.project.system.service;
-
-import java.util.List;
-import com.dingzhuo.energy.project.system.domain.SysNotice;
-
-/**
- * 鍏憡 鏈嶅姟灞�
- * 
- * @author ruoyi
- */
-public interface ISysNoticeService
-{
-    /**
-     * 鏌ヨ鍏憡淇℃伅
-     * 
-     * @param noticeId 鍏憡ID
-     * @return 鍏憡淇℃伅
-     */
-    SysNotice selectNoticeById(Long noticeId);
-
-    /**
-     * 鏌ヨ鍏憡鍒楄〃
-     * 
-     * @param notice 鍏憡淇℃伅
-     * @return 鍏憡闆嗗悎
-     */
-    List<SysNotice> selectNoticeList(SysNotice notice);
-
-    /**
-     * 鏂板鍏憡
-     * 
-     * @param notice 鍏憡淇℃伅
-     * @return 缁撴灉
-     */
-    int insertNotice(SysNotice notice);
-
-    /**
-     * 淇敼鍏憡
-     * 
-     * @param notice 鍏憡淇℃伅
-     * @return 缁撴灉
-     */
-    int updateNotice(SysNotice notice);
-
-    /**
-     * 鍒犻櫎鍏憡淇℃伅
-     * 
-     * @param noticeId 鍏憡ID
-     * @return 缁撴灉
-     */
-    int deleteNoticeById(Long noticeId);
-    
-    /**
-     * 鎵归噺鍒犻櫎鍏憡淇℃伅
-     * 
-     * @param noticeIds 闇�瑕佸垹闄ょ殑鍏憡ID
-     * @return 缁撴灉
-     */
-    int deleteNoticeByIds(Long noticeIds);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysPostService.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysPostService.java
deleted file mode 100644
index cad7150..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysPostService.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package com.dingzhuo.energy.project.system.service;
-
-import java.util.List;
-import com.dingzhuo.energy.project.system.domain.SysPost;
-
-/**
- * 宀椾綅淇℃伅 鏈嶅姟灞�
- * 
- * @author ruoyi
- */
-public interface ISysPostService
-{
-    /**
-     * 鏌ヨ宀椾綅淇℃伅闆嗗悎
-     * 
-     * @param post 宀椾綅淇℃伅
-     * @return 宀椾綅鍒楄〃
-     */
-    List<SysPost> selectPostList(SysPost post);
-
-    /**
-     * 鏌ヨ鎵�鏈夊矖浣�
-     * 
-     * @return 宀椾綅鍒楄〃
-     */
-    List<SysPost> selectPostAll();
-
-    /**
-     * 閫氳繃宀椾綅ID鏌ヨ宀椾綅淇℃伅
-     * 
-     * @param postId 宀椾綅ID
-     * @return 瑙掕壊瀵硅薄淇℃伅
-     */
-    SysPost selectPostById(Long postId);
-
-    /**
-     * 鏍规嵁鐢ㄦ埛ID鑾峰彇宀椾綅閫夋嫨妗嗗垪琛�
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 閫変腑宀椾綅ID鍒楄〃
-     */
-    List<Integer> selectPostListByUserId(Long userId);
-
-    /**
-     * 鏍¢獙宀椾綅鍚嶇О
-     * 
-     * @param post 宀椾綅淇℃伅
-     * @return 缁撴灉
-     */
-    String checkPostNameUnique(SysPost post);
-
-    /**
-     * 鏍¢獙宀椾綅缂栫爜
-     * 
-     * @param post 宀椾綅淇℃伅
-     * @return 缁撴灉
-     */
-    String checkPostCodeUnique(SysPost post);
-
-    /**
-     * 閫氳繃宀椾綅ID鏌ヨ宀椾綅浣跨敤鏁伴噺
-     * 
-     * @param postId 宀椾綅ID
-     * @return 缁撴灉
-     */
-    int countUserPostById(Long postId);
-
-    /**
-     * 鍒犻櫎宀椾綅淇℃伅
-     * 
-     * @param postId 宀椾綅ID
-     * @return 缁撴灉
-     */
-    int deletePostById(Long postId);
-
-    /**
-     * 鎵归噺鍒犻櫎宀椾綅淇℃伅
-     * 
-     * @param postIds 闇�瑕佸垹闄ょ殑宀椾綅ID
-     * @return 缁撴灉
-     * @throws Exception 寮傚父
-     */
-    int deletePostByIds(Long[] postIds);
-
-    /**
-     * 鏂板淇濆瓨宀椾綅淇℃伅
-     * 
-     * @param post 宀椾綅淇℃伅
-     * @return 缁撴灉
-     */
-    int insertPost(SysPost post);
-
-    /**
-     * 淇敼淇濆瓨宀椾綅淇℃伅
-     * 
-     * @param post 宀椾綅淇℃伅
-     * @return 缁撴灉
-     */
-    int updatePost(SysPost post);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysRoleService.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysRoleService.java
deleted file mode 100644
index aecbfbc..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysRoleService.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package com.dingzhuo.energy.project.system.service;
-
-import java.util.List;
-import java.util.Set;
-import com.dingzhuo.energy.project.system.domain.SysRole;
-
-/**
- * 瑙掕壊涓氬姟灞�
- * 
- * @author ruoyi
- */
-public interface ISysRoleService
-{
-    /**
-     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瑙掕壊鏁版嵁
-     * 
-     * @param role 瑙掕壊淇℃伅
-     * @return 瑙掕壊鏁版嵁闆嗗悎淇℃伅
-     */
-    List<SysRole> selectRoleList(SysRole role);
-
-    /**
-     * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 鏉冮檺鍒楄〃
-     */
-    Set<String> selectRolePermissionByUserId(Long userId);
-
-    /**
-     * 鏌ヨ鎵�鏈夎鑹�
-     * 
-     * @return 瑙掕壊鍒楄〃
-     */
-    List<SysRole> selectRoleAll();
-
-    /**
-     * 鏍规嵁鐢ㄦ埛ID鑾峰彇瑙掕壊閫夋嫨妗嗗垪琛�
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 閫変腑瑙掕壊ID鍒楄〃
-     */
-    List<Integer> selectRoleListByUserId(Long userId);
-
-    /**
-     * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊
-     * 
-     * @param roleId 瑙掕壊ID
-     * @return 瑙掕壊瀵硅薄淇℃伅
-     */
-    SysRole selectRoleById(Long roleId);
-
-    /**
-     * 鏍¢獙瑙掕壊鍚嶇О鏄惁鍞竴
-     * 
-     * @param role 瑙掕壊淇℃伅
-     * @return 缁撴灉
-     */
-    String checkRoleNameUnique(SysRole role);
-
-    /**
-     * 鏍¢獙瑙掕壊鏉冮檺鏄惁鍞竴
-     * 
-     * @param role 瑙掕壊淇℃伅
-     * @return 缁撴灉
-     */
-    String checkRoleKeyUnique(SysRole role);
-
-    /**
-     * 鏍¢獙瑙掕壊鏄惁鍏佽鎿嶄綔
-     * 
-     * @param role 瑙掕壊淇℃伅
-     */
-    void checkRoleAllowed(SysRole role);
-
-    /**
-     * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊浣跨敤鏁伴噺
-     * 
-     * @param roleId 瑙掕壊ID
-     * @return 缁撴灉
-     */
-    int countUserRoleByRoleId(Long roleId);
-
-    /**
-     * 鏂板淇濆瓨瑙掕壊淇℃伅
-     * 
-     * @param role 瑙掕壊淇℃伅
-     * @return 缁撴灉
-     */
-    int insertRole(SysRole role);
-
-    /**
-     * 淇敼淇濆瓨瑙掕壊淇℃伅
-     * 
-     * @param role 瑙掕壊淇℃伅
-     * @return 缁撴灉
-     */
-    int updateRole(SysRole role);
-
-    /**
-     * 淇敼瑙掕壊鐘舵��
-     * 
-     * @param role 瑙掕壊淇℃伅
-     * @return 缁撴灉
-     */
-    int updateRoleStatus(SysRole role);
-
-    /**
-     * 淇敼鏁版嵁鏉冮檺淇℃伅
-     * 
-     * @param role 瑙掕壊淇℃伅
-     * @return 缁撴灉
-     */
-    int authDataScope(SysRole role);
-
-    /**
-     * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊
-     * 
-     * @param roleId 瑙掕壊ID
-     * @return 缁撴灉
-     */
-    int deleteRoleById(Long roleId);
-
-    /**
-     * 鎵归噺鍒犻櫎瑙掕壊淇℃伅
-     * 
-     * @param roleIds 闇�瑕佸垹闄ょ殑瑙掕壊ID
-     * @return 缁撴灉
-     */
-    int deleteRoleByIds(Long[] roleIds);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysUserOnlineService.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysUserOnlineService.java
deleted file mode 100644
index cccf41d..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysUserOnlineService.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.dingzhuo.energy.project.system.service;
-
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.project.monitor.domain.SysUserOnline;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.project.monitor.domain.SysUserOnline;
-
-/**
- * 鍦ㄧ嚎鐢ㄦ埛 鏈嶅姟灞�
- * 
- * @author ruoyi
- */
-public interface ISysUserOnlineService
-{
-    /**
-     * 閫氳繃鐧诲綍鍦板潃鏌ヨ淇℃伅
-     * 
-     * @param ipaddr 鐧诲綍鍦板潃
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅
-     */
-    SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user);
-
-    /**
-     * 閫氳繃鐢ㄦ埛鍚嶇О鏌ヨ淇℃伅
-     * 
-     * @param userName 鐢ㄦ埛鍚嶇О
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅
-     */
-    SysUserOnline selectOnlineByUserName(String userName, LoginUser user);
-
-    /**
-     * 閫氳繃鐧诲綍鍦板潃/鐢ㄦ埛鍚嶇О鏌ヨ淇℃伅
-     * 
-     * @param ipaddr 鐧诲綍鍦板潃
-     * @param userName 鐢ㄦ埛鍚嶇О
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅
-     */
-    SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user);
-
-    /**
-     * 璁剧疆鍦ㄧ嚎鐢ㄦ埛淇℃伅
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 鍦ㄧ嚎鐢ㄦ埛
-     */
-    SysUserOnline loginUserToUserOnline(LoginUser user);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysUserService.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysUserService.java
deleted file mode 100644
index a2c1538..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/ISysUserService.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package com.dingzhuo.energy.project.system.service;
-
-import java.util.List;
-import com.dingzhuo.energy.project.system.domain.SysUser;
-
-/**
- * 鐢ㄦ埛 涓氬姟灞�
- * 
- * @author ruoyi
- */
-public interface ISysUserService
-{
-    /**
-     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鐢ㄦ埛鍒楄〃
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
-     */
-    List<SysUser> selectUserList(SysUser user);
-
-    /**
-     * 閫氳繃鐢ㄦ埛鍚嶆煡璇㈢敤鎴�
-     * 
-     * @param userName 鐢ㄦ埛鍚�
-     * @return 鐢ㄦ埛瀵硅薄淇℃伅
-     */
-    SysUser selectUserByUserName(String userName);
-
-    /**
-     * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 鐢ㄦ埛瀵硅薄淇℃伅
-     */
-    SysUser selectUserById(Long userId);
-
-    /**
-     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鐢ㄦ埛鎵�灞炶鑹茬粍
-     * 
-     * @param userName 鐢ㄦ埛鍚�
-     * @return 缁撴灉
-     */
-    String selectUserRoleGroup(String userName);
-
-    /**
-     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鐢ㄦ埛鎵�灞炲矖浣嶇粍
-     * 
-     * @param userName 鐢ㄦ埛鍚�
-     * @return 缁撴灉
-     */
-    String selectUserPostGroup(String userName);
-
-    /**
-     * 鏍¢獙鐢ㄦ埛鍚嶇О鏄惁鍞竴
-     * 
-     * @param userName 鐢ㄦ埛鍚嶇О
-     * @return 缁撴灉
-     */
-    String checkUserNameUnique(String userName);
-
-    /**
-     * 鏍¢獙鎵嬫満鍙风爜鏄惁鍞竴
-     *
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 缁撴灉
-     */
-    String checkPhoneUnique(SysUser user);
-
-    /**
-     * 鏍¢獙email鏄惁鍞竴
-     *
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 缁撴灉
-     */
-    String checkEmailUnique(SysUser user);
-
-    /**
-     * 鏍¢獙鐢ㄦ埛鏄惁鍏佽鎿嶄綔
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     */
-    void checkUserAllowed(SysUser user);
-
-    /**
-     * 鏂板鐢ㄦ埛淇℃伅
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 缁撴灉
-     */
-    int insertUser(SysUser user);
-
-    /**
-     * 淇敼鐢ㄦ埛淇℃伅
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 缁撴灉
-     */
-    int updateUser(SysUser user);
-
-    /**
-     * 淇敼鐢ㄦ埛鐘舵��
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 缁撴灉
-     */
-    int updateUserStatus(SysUser user);
-
-    /**
-     * 淇敼鐢ㄦ埛鍩烘湰淇℃伅
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 缁撴灉
-     */
-    int updateUserProfile(SysUser user);
-
-    /**
-     * 淇敼鐢ㄦ埛澶村儚
-     * 
-     * @param userName 鐢ㄦ埛鍚�
-     * @param avatar 澶村儚鍦板潃
-     * @return 缁撴灉
-     */
-    boolean updateUserAvatar(String userName, String avatar);
-
-    /**
-     * 閲嶇疆鐢ㄦ埛瀵嗙爜
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 缁撴灉
-     */
-    int resetPwd(SysUser user);
-
-    /**
-     * 閲嶇疆鐢ㄦ埛瀵嗙爜
-     * 
-     * @param userName 鐢ㄦ埛鍚�
-     * @param password 瀵嗙爜
-     * @return 缁撴灉
-     */
-    int resetUserPwd(String userName, String password);
-
-    /**
-     * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 缁撴灉
-     */
-    int deleteUserById(Long userId);
-
-    /**
-     * 鎵归噺鍒犻櫎鐢ㄦ埛淇℃伅
-     * 
-     * @param userIds 闇�瑕佸垹闄ょ殑鐢ㄦ埛ID
-     * @return 缁撴灉
-     */
-    int deleteUserByIds(Long[] userIds);
-
-    /**
-     * 瀵煎叆鐢ㄦ埛鏁版嵁
-     * 
-     * @param userList 鐢ㄦ埛鏁版嵁鍒楄〃
-     * @param isUpdateSupport 鏄惁鏇存柊鏀寔锛屽鏋滃凡瀛樺湪锛屽垯杩涜鏇存柊鏁版嵁
-     * @param operName 鎿嶄綔鐢ㄦ埛
-     * @return 缁撴灉
-     */
-    String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysConfigServiceImpl.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysConfigServiceImpl.java
deleted file mode 100644
index ac7ba86..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysConfigServiceImpl.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package com.dingzhuo.energy.project.system.service.impl;
-
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.common.constant.UserConstants;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.project.system.domain.SysConfig;
-import com.dingzhuo.energy.project.system.mapper.SysConfigMapper;
-import com.dingzhuo.energy.project.system.service.ISysConfigService;
-
-/**
- * 鍙傛暟閰嶇疆 鏈嶅姟灞傚疄鐜�
- * 
- * @author ruoyi
- */
-@Service
-public class SysConfigServiceImpl implements ISysConfigService
-{
-    @Autowired
-    private SysConfigMapper configMapper;
-
-    /**
-     * 鏌ヨ鍙傛暟閰嶇疆淇℃伅
-     * 
-     * @param configId 鍙傛暟閰嶇疆ID
-     * @return 鍙傛暟閰嶇疆淇℃伅
-     */
-    @Override
-    public SysConfig selectConfigById(Long configId)
-    {
-        SysConfig config = new SysConfig();
-        config.setConfigId(configId);
-        return configMapper.selectConfig(config);
-    }
-
-    /**
-     * 鏍规嵁閿悕鏌ヨ鍙傛暟閰嶇疆淇℃伅
-     * 
-     * @param configKey 鍙傛暟key
-     * @return 鍙傛暟閿��
-     */
-    @Override
-    public String selectConfigByKey(String configKey)
-    {
-        SysConfig config = new SysConfig();
-        config.setConfigKey(configKey);
-        SysConfig retConfig = configMapper.selectConfig(config);
-        return StringUtils.isNotNull(retConfig) ? retConfig.getConfigValue() : "";
-    }
-
-    /**
-     * 鏌ヨ鍙傛暟閰嶇疆鍒楄〃
-     * 
-     * @param config 鍙傛暟閰嶇疆淇℃伅
-     * @return 鍙傛暟閰嶇疆闆嗗悎
-     */
-    @Override
-    public List<SysConfig> selectConfigList(SysConfig config)
-    {
-        return configMapper.selectConfigList(config);
-    }
-
-    /**
-     * 鏂板鍙傛暟閰嶇疆
-     * 
-     * @param config 鍙傛暟閰嶇疆淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertConfig(SysConfig config)
-    {
-        return configMapper.insertConfig(config);
-    }
-
-    /**
-     * 淇敼鍙傛暟閰嶇疆
-     * 
-     * @param config 鍙傛暟閰嶇疆淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateConfig(SysConfig config)
-    {
-        return configMapper.updateConfig(config);
-    }
-
-    /**
-     * 鍒犻櫎鍙傛暟閰嶇疆淇℃伅
-     * 
-     * @param configId 鍙傛暟ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteConfigById(Long configId)
-    {
-        return configMapper.deleteConfigById(configId);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鍙傛暟淇℃伅
-     * 
-     * @param configIds 闇�瑕佸垹闄ょ殑鍙傛暟ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteConfigByIds(Long[] configIds)
-    {
-        return configMapper.deleteConfigByIds(configIds);
-    }
-
-    /**
-     * 鏍¢獙鍙傛暟閿悕鏄惁鍞竴
-     * 
-     * @param config 鍙傛暟閰嶇疆淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public String checkConfigKeyUnique(SysConfig config)
-    {
-        Long configId = StringUtils.isNull(config.getConfigId()) ? -1L : config.getConfigId();
-        SysConfig info = configMapper.checkConfigKeyUnique(config.getConfigKey());
-        if (StringUtils.isNotNull(info) && info.getConfigId().longValue() != configId.longValue())
-        {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysDeptServiceImpl.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysDeptServiceImpl.java
deleted file mode 100644
index 62b14a3..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysDeptServiceImpl.java
+++ /dev/null
@@ -1,297 +0,0 @@
-package com.dingzhuo.energy.project.system.service.impl;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.DataScope;
-import com.dingzhuo.energy.framework.web.domain.TreeSelect;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.common.constant.UserConstants;
-import com.dingzhuo.energy.common.exception.CustomException;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.DataScope;
-import com.dingzhuo.energy.framework.web.domain.TreeSelect;
-import com.dingzhuo.energy.project.system.domain.SysDept;
-import com.dingzhuo.energy.project.system.mapper.SysDeptMapper;
-import com.dingzhuo.energy.project.system.service.ISysDeptService;
-
-/**
- * 閮ㄩ棬绠$悊 鏈嶅姟瀹炵幇
- * 
- * @author ruoyi
- */
-@Service
-public class SysDeptServiceImpl implements ISysDeptService
-{
-    @Autowired
-    private SysDeptMapper deptMapper;
-
-    /**
-     * 鏌ヨ閮ㄩ棬绠$悊鏁版嵁
-     * 
-     * @param dept 閮ㄩ棬淇℃伅
-     * @return 閮ㄩ棬淇℃伅闆嗗悎
-     */
-    @Override
-    @DataScope(deptAlias = "d")
-    public List<SysDept> selectDeptList(SysDept dept)
-    {
-        return deptMapper.selectDeptList(dept);
-    }
-
-    /**
-     * 鏋勫缓鍓嶇鎵�闇�瑕佹爲缁撴瀯
-     * 
-     * @param depts 閮ㄩ棬鍒楄〃
-     * @return 鏍戠粨鏋勫垪琛�
-     */
-    @Override
-    public List<SysDept> buildDeptTree(List<SysDept> depts)
-    {
-        List<SysDept> returnList = new ArrayList<SysDept>();
-        List<Long> tempList = new ArrayList<Long>();
-        for (SysDept dept : depts)
-        {
-            tempList.add(dept.getDeptId());
-        }
-        for (Iterator<SysDept> iterator = depts.iterator(); iterator.hasNext();)
-        {
-            SysDept dept = iterator.next();
-            // 濡傛灉鏄《绾ц妭鐐�, 閬嶅巻璇ョ埗鑺傜偣鐨勬墍鏈夊瓙鑺傜偣
-            if (!tempList.contains(dept.getParentId()))
-            {
-                recursionFn(depts, dept);
-                returnList.add(dept);
-            }
-        }
-        if (returnList.isEmpty())
-        {
-            returnList = depts;
-        }
-        return returnList;
-    }
-
-    /**
-     * 鏋勫缓鍓嶇鎵�闇�瑕佷笅鎷夋爲缁撴瀯
-     * 
-     * @param depts 閮ㄩ棬鍒楄〃
-     * @return 涓嬫媺鏍戠粨鏋勫垪琛�
-     */
-    @Override
-    public List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts)
-    {
-        List<SysDept> deptTrees = buildDeptTree(depts);
-        return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
-    }
-
-    /**
-     * 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戜俊鎭�
-     * 
-     * @param roleId 瑙掕壊ID
-     * @return 閫変腑閮ㄩ棬鍒楄〃
-     */
-    @Override
-    public List<Integer> selectDeptListByRoleId(Long roleId)
-    {
-        return deptMapper.selectDeptListByRoleId(roleId);
-    }
-
-    /**
-     * 鏍规嵁閮ㄩ棬ID鏌ヨ淇℃伅
-     * 
-     * @param deptId 閮ㄩ棬ID
-     * @return 閮ㄩ棬淇℃伅
-     */
-    @Override
-    public SysDept selectDeptById(Long deptId)
-    {
-        return deptMapper.selectDeptById(deptId);
-    }
-
-    /**
-     * 鏄惁瀛樺湪瀛愯妭鐐�
-     * 
-     * @param deptId 閮ㄩ棬ID
-     * @return 缁撴灉
-     */
-    @Override
-    public boolean hasChildByDeptId(Long deptId)
-    {
-        int result = deptMapper.hasChildByDeptId(deptId);
-        return result > 0;
-    }
-
-    /**
-     * 鏌ヨ閮ㄩ棬鏄惁瀛樺湪鐢ㄦ埛
-     * 
-     * @param deptId 閮ㄩ棬ID
-     * @return 缁撴灉 true 瀛樺湪 false 涓嶅瓨鍦�
-     */
-    @Override
-    public boolean checkDeptExistUser(Long deptId)
-    {
-        int result = deptMapper.checkDeptExistUser(deptId);
-        return result > 0;
-    }
-
-    /**
-     * 鏍¢獙閮ㄩ棬鍚嶇О鏄惁鍞竴
-     * 
-     * @param dept 閮ㄩ棬淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public String checkDeptNameUnique(SysDept dept)
-    {
-        Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId();
-        SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId());
-        if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue())
-        {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-
-    /**
-     * 鏂板淇濆瓨閮ㄩ棬淇℃伅
-     * 
-     * @param dept 閮ㄩ棬淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertDept(SysDept dept)
-    {
-        SysDept info = deptMapper.selectDeptById(dept.getParentId());
-        // 濡傛灉鐖惰妭鐐逛笉涓烘甯哥姸鎬�,鍒欎笉鍏佽鏂板瀛愯妭鐐�
-        if (!UserConstants.DEPT_NORMAL.equals(info.getStatus()))
-        {
-            throw new CustomException("閮ㄩ棬鍋滅敤锛屼笉鍏佽鏂板");
-        }
-        dept.setAncestors(info.getAncestors() + "," + dept.getParentId());
-        return deptMapper.insertDept(dept);
-    }
-
-    /**
-     * 淇敼淇濆瓨閮ㄩ棬淇℃伅
-     * 
-     * @param dept 閮ㄩ棬淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateDept(SysDept dept)
-    {
-        SysDept newParentDept = deptMapper.selectDeptById(dept.getParentId());
-        SysDept oldDept = deptMapper.selectDeptById(dept.getDeptId());
-        if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept))
-        {
-            String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId();
-            String oldAncestors = oldDept.getAncestors();
-            dept.setAncestors(newAncestors);
-            updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors);
-        }
-        int result = deptMapper.updateDept(dept);
-        if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()))
-        {
-            // 濡傛灉璇ラ儴闂ㄦ槸鍚敤鐘舵�侊紝鍒欏惎鐢ㄨ閮ㄩ棬鐨勬墍鏈変笂绾ч儴闂�
-            updateParentDeptStatus(dept);
-        }
-        return result;
-    }
-
-    /**
-     * 淇敼璇ラ儴闂ㄧ殑鐖剁骇閮ㄩ棬鐘舵��
-     * 
-     * @param dept 褰撳墠閮ㄩ棬
-     */
-    private void updateParentDeptStatus(SysDept dept)
-    {
-        String updateBy = dept.getUpdateBy();
-        dept = deptMapper.selectDeptById(dept.getDeptId());
-        dept.setUpdateBy(updateBy);
-        deptMapper.updateDeptStatus(dept);
-    }
-
-    /**
-     * 淇敼瀛愬厓绱犲叧绯�
-     * 
-     * @param deptId 琚慨鏀圭殑閮ㄩ棬ID
-     * @param newAncestors 鏂扮殑鐖禝D闆嗗悎
-     * @param oldAncestors 鏃х殑鐖禝D闆嗗悎
-     */
-    public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors)
-    {
-        List<SysDept> children = deptMapper.selectChildrenDeptById(deptId);
-        for (SysDept child : children)
-        {
-            child.setAncestors(child.getAncestors().replace(oldAncestors, newAncestors));
-        }
-        if (children.size() > 0)
-        {
-            deptMapper.updateDeptChildren(children);
-        }
-    }
-
-    /**
-     * 鍒犻櫎閮ㄩ棬绠$悊淇℃伅
-     * 
-     * @param deptId 閮ㄩ棬ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteDeptById(Long deptId)
-    {
-        return deptMapper.deleteDeptById(deptId);
-    }
-
-    /**
-     * 閫掑綊鍒楄〃
-     */
-    private void recursionFn(List<SysDept> list, SysDept t)
-    {
-        // 寰楀埌瀛愯妭鐐瑰垪琛�
-        List<SysDept> childList = getChildList(list, t);
-        t.setChildren(childList);
-        for (SysDept tChild : childList)
-        {
-            if (hasChild(list, tChild))
-            {
-                // 鍒ゆ柇鏄惁鏈夊瓙鑺傜偣
-                Iterator<SysDept> it = childList.iterator();
-                while (it.hasNext())
-                {
-                    SysDept n = it.next();
-                    recursionFn(list, n);
-                }
-            }
-        }
-    }
-
-    /**
-     * 寰楀埌瀛愯妭鐐瑰垪琛�
-     */
-    private List<SysDept> getChildList(List<SysDept> list, SysDept t)
-    {
-        List<SysDept> tlist = new ArrayList<SysDept>();
-        Iterator<SysDept> it = list.iterator();
-        while (it.hasNext())
-        {
-            SysDept n = it.next();
-            if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue())
-            {
-                tlist.add(n);
-            }
-        }
-        return tlist;
-    }
-
-    /**
-     * 鍒ゆ柇鏄惁鏈夊瓙鑺傜偣
-     */
-    private boolean hasChild(List<SysDept> list, SysDept t)
-    {
-        return getChildList(list, t).size() > 0;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysDictDataServiceImpl.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysDictDataServiceImpl.java
deleted file mode 100644
index e3cbeac..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysDictDataServiceImpl.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package com.dingzhuo.energy.project.system.service.impl;
-
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.project.system.domain.SysDictData;
-import com.dingzhuo.energy.project.system.mapper.SysDictDataMapper;
-import com.dingzhuo.energy.project.system.service.ISysDictDataService;
-
-/**
- * 瀛楀吀 涓氬姟灞傚鐞�
- * 
- * @author ruoyi
- */
-@Service
-public class SysDictDataServiceImpl implements ISysDictDataService
-{
-    @Autowired
-    private SysDictDataMapper dictDataMapper;
-
-    /**
-     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀鏁版嵁
-     * 
-     * @param dictData 瀛楀吀鏁版嵁淇℃伅
-     * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅
-     */
-    @Override
-    public List<SysDictData> selectDictDataList(SysDictData dictData)
-    {
-        return dictDataMapper.selectDictDataList(dictData);
-    }
-
-    /**
-     * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁
-     * 
-     * @param dictType 瀛楀吀绫诲瀷
-     * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅
-     */
-    @Override
-    public List<SysDictData> selectDictDataByType(String dictType)
-    {
-        return dictDataMapper.selectDictDataByType(dictType);
-    }
-
-    /**
-     * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏搁敭鍊兼煡璇㈠瓧鍏告暟鎹俊鎭�
-     * 
-     * @param dictType 瀛楀吀绫诲瀷
-     * @param dictValue 瀛楀吀閿��
-     * @return 瀛楀吀鏍囩
-     */
-    @Override
-    public String selectDictLabel(String dictType, String dictValue)
-    {
-        return dictDataMapper.selectDictLabel(dictType, dictValue);
-    }
-
-    /**
-     * 鏍规嵁瀛楀吀鏁版嵁ID鏌ヨ淇℃伅
-     * 
-     * @param dictCode 瀛楀吀鏁版嵁ID
-     * @return 瀛楀吀鏁版嵁
-     */
-    @Override
-    public SysDictData selectDictDataById(Long dictCode)
-    {
-        return dictDataMapper.selectDictDataById(dictCode);
-    }
-
-    /**
-     * 閫氳繃瀛楀吀ID鍒犻櫎瀛楀吀鏁版嵁淇℃伅
-     * 
-     * @param dictCode 瀛楀吀鏁版嵁ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteDictDataById(Long dictCode)
-    {
-        return dictDataMapper.deleteDictDataById(dictCode);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎瀛楀吀鏁版嵁淇℃伅
-     * 
-     * @param dictCodes 闇�瑕佸垹闄ょ殑瀛楀吀鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteDictDataByIds(Long[] dictCodes)
-    {
-        return dictDataMapper.deleteDictDataByIds(dictCodes);
-    }
-
-    /**
-     * 鏂板淇濆瓨瀛楀吀鏁版嵁淇℃伅
-     * 
-     * @param dictData 瀛楀吀鏁版嵁淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertDictData(SysDictData dictData)
-    {
-        return dictDataMapper.insertDictData(dictData);
-    }
-
-    /**
-     * 淇敼淇濆瓨瀛楀吀鏁版嵁淇℃伅
-     * 
-     * @param dictData 瀛楀吀鏁版嵁淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateDictData(SysDictData dictData)
-    {
-        return dictDataMapper.updateDictData(dictData);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysDictTypeServiceImpl.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysDictTypeServiceImpl.java
deleted file mode 100644
index ddd3944..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysDictTypeServiceImpl.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package com.dingzhuo.energy.project.system.service.impl;
-
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import com.dingzhuo.energy.common.constant.UserConstants;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.project.system.domain.SysDictType;
-import com.dingzhuo.energy.project.system.mapper.SysDictDataMapper;
-import com.dingzhuo.energy.project.system.mapper.SysDictTypeMapper;
-import com.dingzhuo.energy.project.system.service.ISysDictTypeService;
-
-/**
- * 瀛楀吀 涓氬姟灞傚鐞�
- * 
- * @author ruoyi
- */
-@Service
-public class SysDictTypeServiceImpl implements ISysDictTypeService
-{
-    @Autowired
-    private SysDictTypeMapper dictTypeMapper;
-
-    @Autowired
-    private SysDictDataMapper dictDataMapper;
-
-    /**
-     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀绫诲瀷
-     * 
-     * @param dictType 瀛楀吀绫诲瀷淇℃伅
-     * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅
-     */
-    @Override
-    public List<SysDictType> selectDictTypeList(SysDictType dictType)
-    {
-        return dictTypeMapper.selectDictTypeList(dictType);
-    }
-
-    /**
-     * 鏍规嵁鎵�鏈夊瓧鍏哥被鍨�
-     * 
-     * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅
-     */
-    @Override
-    public List<SysDictType> selectDictTypeAll()
-    {
-        return dictTypeMapper.selectDictTypeAll();
-    }
-
-    /**
-     * 鏍规嵁瀛楀吀绫诲瀷ID鏌ヨ淇℃伅
-     * 
-     * @param dictId 瀛楀吀绫诲瀷ID
-     * @return 瀛楀吀绫诲瀷
-     */
-    @Override
-    public SysDictType selectDictTypeById(Long dictId)
-    {
-        return dictTypeMapper.selectDictTypeById(dictId);
-    }
-
-    /**
-     * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ淇℃伅
-     * 
-     * @param dictType 瀛楀吀绫诲瀷
-     * @return 瀛楀吀绫诲瀷
-     */
-    public SysDictType selectDictTypeByType(String dictType)
-    {
-        return dictTypeMapper.selectDictTypeByType(dictType);
-    }
-
-    /**
-     * 閫氳繃瀛楀吀ID鍒犻櫎瀛楀吀淇℃伅
-     * 
-     * @param dictId 瀛楀吀ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteDictTypeById(Long dictId)
-    {
-        return dictTypeMapper.deleteDictTypeById(dictId);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎瀛楀吀绫诲瀷淇℃伅
-     * 
-     * @param dictIds 闇�瑕佸垹闄ょ殑瀛楀吀ID
-     * @return 缁撴灉
-     */
-    public int deleteDictTypeByIds(Long[] dictIds)
-    {
-        return dictTypeMapper.deleteDictTypeByIds(dictIds);
-    }
-
-    /**
-     * 鏂板淇濆瓨瀛楀吀绫诲瀷淇℃伅
-     * 
-     * @param dictType 瀛楀吀绫诲瀷淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertDictType(SysDictType dictType)
-    {
-        return dictTypeMapper.insertDictType(dictType);
-    }
-
-    /**
-     * 淇敼淇濆瓨瀛楀吀绫诲瀷淇℃伅
-     * 
-     * @param dictType 瀛楀吀绫诲瀷淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    @Transactional
-    public int updateDictType(SysDictType dictType)
-    {
-        SysDictType oldDict = dictTypeMapper.selectDictTypeById(dictType.getDictId());
-        dictDataMapper.updateDictDataType(oldDict.getDictType(), dictType.getDictType());
-        return dictTypeMapper.updateDictType(dictType);
-    }
-
-    /**
-     * 鏍¢獙瀛楀吀绫诲瀷绉版槸鍚﹀敮涓�
-     * 
-     * @param dict 瀛楀吀绫诲瀷
-     * @return 缁撴灉
-     */
-    @Override
-    public String checkDictTypeUnique(SysDictType dict)
-    {
-        Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId();
-        SysDictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType());
-        if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue())
-        {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysMenuServiceImpl.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysMenuServiceImpl.java
deleted file mode 100644
index 6dad65d..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysMenuServiceImpl.java
+++ /dev/null
@@ -1,361 +0,0 @@
-package com.dingzhuo.energy.project.system.service.impl;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import com.dingzhuo.energy.framework.web.domain.TreeSelect;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.common.constant.UserConstants;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.web.domain.TreeSelect;
-import com.dingzhuo.energy.project.system.domain.SysMenu;
-import com.dingzhuo.energy.project.system.domain.vo.MetaVo;
-import com.dingzhuo.energy.project.system.domain.vo.RouterVo;
-import com.dingzhuo.energy.project.system.mapper.SysMenuMapper;
-import com.dingzhuo.energy.project.system.mapper.SysRoleMenuMapper;
-import com.dingzhuo.energy.project.system.service.ISysMenuService;
-
-/**
- * 鑿滃崟 涓氬姟灞傚鐞�
- * 
- * @author ruoyi
- */
-@Service
-public class SysMenuServiceImpl implements ISysMenuService
-{
-    public static final String PREMISSION_STRING = "perms[\"{0}\"]";
-
-    @Autowired
-    private SysMenuMapper menuMapper;
-
-    @Autowired
-    private SysRoleMenuMapper roleMenuMapper;
-
-    /**
-     * 鏌ヨ绯荤粺鑿滃崟鍒楄〃
-     * 
-     * @param menu 鑿滃崟淇℃伅
-     * @return 鑿滃崟鍒楄〃
-     */
-    @Override
-    public List<SysMenu> selectMenuList(SysMenu menu)
-    {
-        List<SysMenu> menuList = menuMapper.selectMenuList(menu);
-        return menuList;
-    }
-
-    /**
-     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鏉冮檺
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 鏉冮檺鍒楄〃
-     */
-    @Override
-    public Set<String> selectMenuPermsByUserId(Long userId)
-    {
-        List<String> perms = menuMapper.selectMenuPermsByUserId(userId);
-        Set<String> permsSet = new HashSet<>();
-        for (String perm : perms)
-        {
-            if (StringUtils.isNotEmpty(perm))
-            {
-                permsSet.addAll(Arrays.asList(perm.trim().split(",")));
-            }
-        }
-        return permsSet;
-    }
-
-    /**
-     * 鏍规嵁鐢ㄦ埛鍚嶇О鏌ヨ鑿滃崟
-     * 
-     * @param username 鐢ㄦ埛鍚嶇О
-     * @return 鑿滃崟鍒楄〃
-     */
-    @Override
-    public List<SysMenu> selectMenuTreeByUserId(Long userId)
-    {
-        List<SysMenu> menus = null;
-        if (SecurityUtils.isAdmin(userId))
-        {
-            menus = menuMapper.selectMenuTreeAll();
-        }
-        else
-        {
-            menus = menuMapper.selectMenuTreeByUserId(userId);
-        }
-        return getChildPerms(menus, 0);
-    }
-
-    /**
-     * 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟鏍戜俊鎭�
-     * 
-     * @param roleId 瑙掕壊ID
-     * @return 閫変腑鑿滃崟鍒楄〃
-     */
-    public List<Integer> selectMenuListByRoleId(Long roleId)
-    {
-        return menuMapper.selectMenuListByRoleId(roleId);
-    }
-
-    /**
-     * 鏋勫缓鍓嶇璺敱鎵�闇�瑕佺殑鑿滃崟
-     * 
-     * @param menus 鑿滃崟鍒楄〃
-     * @return 璺敱鍒楄〃
-     */
-    @Override
-    public List<RouterVo> buildMenus(List<SysMenu> menus)
-    {
-        List<RouterVo> routers = new LinkedList<RouterVo>();
-        for (SysMenu menu : menus)
-        {
-            RouterVo router = new RouterVo();
-            router.setName(StringUtils.capitalize(menu.getPath()));
-            router.setPath(getRouterPath(menu));
-            router.setComponent(StringUtils.isEmpty(menu.getComponent()) ? "Layout" : menu.getComponent());
-            router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon()));
-            router.setPageQueryParameter(menu.getParameter());
-            List<SysMenu> cMenus = menu.getChildren();
-            if (!cMenus.isEmpty() && cMenus.size() > 0 && "M".equals(menu.getMenuType()))
-            {
-                router.setAlwaysShow(true);
-                router.setRedirect("noRedirect");
-                router.setChildren(buildMenus(cMenus));
-            }
-            routers.add(router);
-        }
-        return routers;
-    }
-
-    /**
-     * 鏋勫缓鍓嶇鎵�闇�瑕佹爲缁撴瀯
-     * 
-     * @param menus 鑿滃崟鍒楄〃
-     * @return 鏍戠粨鏋勫垪琛�
-     */
-    @Override
-    public List<SysMenu> buildMenuTree(List<SysMenu> menus)
-    {
-        List<SysMenu> returnList = new ArrayList<SysMenu>();
-        for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext();)
-        {
-            SysMenu t = iterator.next();
-            // 鏍规嵁浼犲叆鐨勬煇涓埗鑺傜偣ID,閬嶅巻璇ョ埗鑺傜偣鐨勬墍鏈夊瓙鑺傜偣
-            if (t.getParentId() == 0)
-            {
-                recursionFn(menus, t);
-                returnList.add(t);
-            }
-        }
-        if (returnList.isEmpty())
-        {
-            returnList = menus;
-        }
-        return returnList;
-    }
-
-    /**
-     * 鏋勫缓鍓嶇鎵�闇�瑕佷笅鎷夋爲缁撴瀯
-     * 
-     * @param menus 鑿滃崟鍒楄〃
-     * @return 涓嬫媺鏍戠粨鏋勫垪琛�
-     */
-    @Override
-    public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus)
-    {
-        List<SysMenu> menuTrees = buildMenuTree(menus);
-        return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
-    }
-
-    /**
-     * 鏍规嵁鑿滃崟ID鏌ヨ淇℃伅
-     * 
-     * @param menuId 鑿滃崟ID
-     * @return 鑿滃崟淇℃伅
-     */
-    @Override
-    public SysMenu selectMenuById(Long menuId)
-    {
-        return menuMapper.selectMenuById(menuId);
-    }
-
-    /**
-     * 鏄惁瀛樺湪鑿滃崟瀛愯妭鐐�
-     * 
-     * @param menuId 鑿滃崟ID
-     * @return 缁撴灉
-     */
-    @Override
-    public boolean hasChildByMenuId(Long menuId)
-    {
-        int result = menuMapper.hasChildByMenuId(menuId);
-        return result > 0;
-    }
-
-    /**
-     * 鏌ヨ鑿滃崟浣跨敤鏁伴噺
-     * 
-     * @param menuId 鑿滃崟ID
-     * @return 缁撴灉
-     */
-    @Override
-    public boolean checkMenuExistRole(Long menuId)
-    {
-        int result = roleMenuMapper.checkMenuExistRole(menuId);
-        return result > 0;
-    }
-
-    /**
-     * 鏂板淇濆瓨鑿滃崟淇℃伅
-     * 
-     * @param menu 鑿滃崟淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertMenu(SysMenu menu)
-    {
-        return menuMapper.insertMenu(menu);
-    }
-
-    /**
-     * 淇敼淇濆瓨鑿滃崟淇℃伅
-     * 
-     * @param menu 鑿滃崟淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateMenu(SysMenu menu)
-    {
-        return menuMapper.updateMenu(menu);
-    }
-
-    /**
-     * 鍒犻櫎鑿滃崟绠$悊淇℃伅
-     * 
-     * @param menuId 鑿滃崟ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteMenuById(Long menuId)
-    {
-        return menuMapper.deleteMenuById(menuId);
-    }
-
-    /**
-     * 鏍¢獙鑿滃崟鍚嶇О鏄惁鍞竴
-     * 
-     * @param menu 鑿滃崟淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public String checkMenuNameUnique(SysMenu menu)
-    {
-        Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId();
-        SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId());
-        if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue())
-        {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-
-    /**
-     * 鑾峰彇璺敱鍦板潃
-     * 
-     * @param menu 鑿滃崟淇℃伅
-     * @return 璺敱鍦板潃
-     */
-    public String getRouterPath(SysMenu menu)
-    {
-        String routerPath = menu.getPath();
-        // 闈炲閾惧苟涓旀槸涓�绾х洰褰�
-        if (0 == menu.getParentId() && "1".equals(menu.getIsFrame()))
-        {
-            routerPath = "/" + menu.getPath();
-        }
-        return routerPath;
-    }
-
-    /**
-     * 鏍规嵁鐖惰妭鐐圭殑ID鑾峰彇鎵�鏈夊瓙鑺傜偣
-     * 
-     * @param list 鍒嗙被琛�
-     * @param parentId 浼犲叆鐨勭埗鑺傜偣ID
-     * @return String
-     */
-    public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId)
-    {
-        List<SysMenu> returnList = new ArrayList<SysMenu>();
-        for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext();)
-        {
-            SysMenu t = iterator.next();
-            // 涓�銆佹牴鎹紶鍏ョ殑鏌愪釜鐖惰妭鐐笽D,閬嶅巻璇ョ埗鑺傜偣鐨勬墍鏈夊瓙鑺傜偣
-            if (t.getParentId() == parentId)
-            {
-                recursionFn(list, t);
-                returnList.add(t);
-            }
-        }
-        return returnList;
-    }
-
-    /**
-     * 閫掑綊鍒楄〃
-     * 
-     * @param list
-     * @param t
-     */
-    private void recursionFn(List<SysMenu> list, SysMenu t)
-    {
-        // 寰楀埌瀛愯妭鐐瑰垪琛�
-        List<SysMenu> childList = getChildList(list, t);
-        t.setChildren(childList);
-        for (SysMenu tChild : childList)
-        {
-            if (hasChild(list, tChild))
-            {
-                // 鍒ゆ柇鏄惁鏈夊瓙鑺傜偣
-                Iterator<SysMenu> it = childList.iterator();
-                while (it.hasNext())
-                {
-                    SysMenu n = it.next();
-                    recursionFn(list, n);
-                }
-            }
-        }
-    }
-
-    /**
-     * 寰楀埌瀛愯妭鐐瑰垪琛�
-     */
-    private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t)
-    {
-        List<SysMenu> tlist = new ArrayList<SysMenu>();
-        Iterator<SysMenu> it = list.iterator();
-        while (it.hasNext())
-        {
-            SysMenu n = it.next();
-            if (n.getParentId().longValue() == t.getMenuId().longValue())
-            {
-                tlist.add(n);
-            }
-        }
-        return tlist;
-    }
-
-    /**
-     * 鍒ゆ柇鏄惁鏈夊瓙鑺傜偣
-     */
-    private boolean hasChild(List<SysMenu> list, SysMenu t)
-    {
-        return getChildList(list, t).size() > 0;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysNoticeServiceImpl.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysNoticeServiceImpl.java
deleted file mode 100644
index 39f1a7e..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysNoticeServiceImpl.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package com.dingzhuo.energy.project.system.service.impl;
-
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.project.system.domain.SysNotice;
-import com.dingzhuo.energy.project.system.mapper.SysNoticeMapper;
-import com.dingzhuo.energy.project.system.service.ISysNoticeService;
-
-/**
- * 鍏憡 鏈嶅姟灞傚疄鐜�
- * 
- * @author ruoyi
- */
-@Service
-public class SysNoticeServiceImpl implements ISysNoticeService
-{
-    @Autowired
-    private SysNoticeMapper noticeMapper;
-
-    /**
-     * 鏌ヨ鍏憡淇℃伅
-     * 
-     * @param noticeId 鍏憡ID
-     * @return 鍏憡淇℃伅
-     */
-    @Override
-    public SysNotice selectNoticeById(Long noticeId)
-    {
-        return noticeMapper.selectNoticeById(noticeId);
-    }
-
-    /**
-     * 鏌ヨ鍏憡鍒楄〃
-     * 
-     * @param notice 鍏憡淇℃伅
-     * @return 鍏憡闆嗗悎
-     */
-    @Override
-    public List<SysNotice> selectNoticeList(SysNotice notice)
-    {
-        return noticeMapper.selectNoticeList(notice);
-    }
-
-    /**
-     * 鏂板鍏憡
-     * 
-     * @param notice 鍏憡淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertNotice(SysNotice notice)
-    {
-        return noticeMapper.insertNotice(notice);
-    }
-
-    /**
-     * 淇敼鍏憡
-     * 
-     * @param notice 鍏憡淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateNotice(SysNotice notice)
-    {
-        return noticeMapper.updateNotice(notice);
-    }
-
-    /**
-     * 鍒犻櫎鍏憡瀵硅薄
-     * 
-     * @param noticeId 鍏憡ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteNoticeById(Long noticeId)
-    {
-        return noticeMapper.deleteNoticeById(noticeId);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鍏憡淇℃伅
-     * 
-     * @param noticeIds 闇�瑕佸垹闄ょ殑鍏憡ID
-     * @return 缁撴灉
-     */
-    public int deleteNoticeByIds(Long noticeIds)
-    {
-        return noticeMapper.deleteNoticeByIds(noticeIds);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysPostServiceImpl.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysPostServiceImpl.java
deleted file mode 100644
index f6b3bfb..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysPostServiceImpl.java
+++ /dev/null
@@ -1,177 +0,0 @@
-package com.dingzhuo.energy.project.system.service.impl;
-
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.common.constant.UserConstants;
-import com.dingzhuo.energy.common.exception.CustomException;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.project.system.domain.SysPost;
-import com.dingzhuo.energy.project.system.mapper.SysPostMapper;
-import com.dingzhuo.energy.project.system.mapper.SysUserPostMapper;
-import com.dingzhuo.energy.project.system.service.ISysPostService;
-
-/**
- * 宀椾綅淇℃伅 鏈嶅姟灞傚鐞�
- * 
- * @author ruoyi
- */
-@Service
-public class SysPostServiceImpl implements ISysPostService
-{
-    @Autowired
-    private SysPostMapper postMapper;
-
-    @Autowired
-    private SysUserPostMapper userPostMapper;
-
-    /**
-     * 鏌ヨ宀椾綅淇℃伅闆嗗悎
-     * 
-     * @param post 宀椾綅淇℃伅
-     * @return 宀椾綅淇℃伅闆嗗悎
-     */
-    @Override
-    public List<SysPost> selectPostList(SysPost post)
-    {
-        return postMapper.selectPostList(post);
-    }
-
-    /**
-     * 鏌ヨ鎵�鏈夊矖浣�
-     * 
-     * @return 宀椾綅鍒楄〃
-     */
-    @Override
-    public List<SysPost> selectPostAll()
-    {
-        return postMapper.selectPostAll();
-    }
-
-    /**
-     * 閫氳繃宀椾綅ID鏌ヨ宀椾綅淇℃伅
-     * 
-     * @param postId 宀椾綅ID
-     * @return 瑙掕壊瀵硅薄淇℃伅
-     */
-    @Override
-    public SysPost selectPostById(Long postId)
-    {
-        return postMapper.selectPostById(postId);
-    }
-
-    /**
-     * 鏍规嵁鐢ㄦ埛ID鑾峰彇宀椾綅閫夋嫨妗嗗垪琛�
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 閫変腑宀椾綅ID鍒楄〃
-     */
-    public List<Integer> selectPostListByUserId(Long userId)
-    {
-        return postMapper.selectPostListByUserId(userId);
-    }
-
-    /**
-     * 鏍¢獙宀椾綅鍚嶇О鏄惁鍞竴
-     * 
-     * @param post 宀椾綅淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public String checkPostNameUnique(SysPost post)
-    {
-        Long postId = StringUtils.isNull(post.getPostId()) ? -1L : post.getPostId();
-        SysPost info = postMapper.checkPostNameUnique(post.getPostName());
-        if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue())
-        {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-
-    /**
-     * 鏍¢獙宀椾綅缂栫爜鏄惁鍞竴
-     * 
-     * @param post 宀椾綅淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public String checkPostCodeUnique(SysPost post)
-    {
-        Long postId = StringUtils.isNull(post.getPostId()) ? -1L : post.getPostId();
-        SysPost info = postMapper.checkPostCodeUnique(post.getPostCode());
-        if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue())
-        {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-
-    /**
-     * 閫氳繃宀椾綅ID鏌ヨ宀椾綅浣跨敤鏁伴噺
-     * 
-     * @param postId 宀椾綅ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int countUserPostById(Long postId)
-    {
-        return userPostMapper.countUserPostById(postId);
-    }
-
-    /**
-     * 鍒犻櫎宀椾綅淇℃伅
-     * 
-     * @param postId 宀椾綅ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deletePostById(Long postId)
-    {
-        return postMapper.deletePostById(postId);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎宀椾綅淇℃伅
-     * 
-     * @param postIds 闇�瑕佸垹闄ょ殑宀椾綅ID
-     * @return 缁撴灉
-     * @throws Exception 寮傚父
-     */
-    public int deletePostByIds(Long[] postIds)
-    {
-        for (Long postId : postIds)
-        {
-            SysPost post = selectPostById(postId);
-            if (countUserPostById(postId) > 0)
-            {
-                throw new CustomException(String.format("%1$s宸插垎閰�,涓嶈兘鍒犻櫎", post.getPostName()));
-            }
-        }
-        return postMapper.deletePostByIds(postIds);
-    }
-
-    /**
-     * 鏂板淇濆瓨宀椾綅淇℃伅
-     * 
-     * @param post 宀椾綅淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertPost(SysPost post)
-    {
-        return postMapper.insertPost(post);
-    }
-
-    /**
-     * 淇敼淇濆瓨宀椾綅淇℃伅
-     * 
-     * @param post 宀椾綅淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int updatePost(SysPost post)
-    {
-        return postMapper.updatePost(post);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysRoleServiceImpl.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysRoleServiceImpl.java
deleted file mode 100644
index 0ce6f61..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysRoleServiceImpl.java
+++ /dev/null
@@ -1,313 +0,0 @@
-package com.dingzhuo.energy.project.system.service.impl;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.DataScope;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import com.dingzhuo.energy.common.constant.UserConstants;
-import com.dingzhuo.energy.common.exception.CustomException;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.DataScope;
-import com.dingzhuo.energy.project.system.domain.SysRole;
-import com.dingzhuo.energy.project.system.domain.SysRoleDept;
-import com.dingzhuo.energy.project.system.domain.SysRoleMenu;
-import com.dingzhuo.energy.project.system.mapper.SysRoleDeptMapper;
-import com.dingzhuo.energy.project.system.mapper.SysRoleMapper;
-import com.dingzhuo.energy.project.system.mapper.SysRoleMenuMapper;
-import com.dingzhuo.energy.project.system.mapper.SysUserRoleMapper;
-import com.dingzhuo.energy.project.system.service.ISysRoleService;
-
-/**
- * 瑙掕壊 涓氬姟灞傚鐞�
- * 
- * @author ruoyi
- */
-@Service
-public class SysRoleServiceImpl implements ISysRoleService
-{
-    @Autowired
-    private SysRoleMapper roleMapper;
-
-    @Autowired
-    private SysRoleMenuMapper roleMenuMapper;
-
-    @Autowired
-    private SysUserRoleMapper userRoleMapper;
-
-    @Autowired
-    private SysRoleDeptMapper roleDeptMapper;
-
-    /**
-     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瑙掕壊鏁版嵁
-     * 
-     * @param role 瑙掕壊淇℃伅
-     * @return 瑙掕壊鏁版嵁闆嗗悎淇℃伅
-     */
-    @Override
-    @DataScope(deptAlias = "d")
-    public List<SysRole> selectRoleList(SysRole role)
-    {
-        return roleMapper.selectRoleList(role);
-    }
-
-    /**
-     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鏉冮檺
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 鏉冮檺鍒楄〃
-     */
-    @Override
-    public Set<String> selectRolePermissionByUserId(Long userId)
-    {
-        List<SysRole> perms = roleMapper.selectRolePermissionByUserId(userId);
-        Set<String> permsSet = new HashSet<>();
-        for (SysRole perm : perms)
-        {
-            if (StringUtils.isNotNull(perm))
-            {
-                permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(",")));
-            }
-        }
-        return permsSet;
-    }
-
-    /**
-     * 鏌ヨ鎵�鏈夎鑹�
-     * 
-     * @return 瑙掕壊鍒楄〃
-     */
-    public List<SysRole> selectRoleAll()
-    {
-        return roleMapper.selectRoleAll();
-    }
-
-    /**
-     * 鏍规嵁鐢ㄦ埛ID鑾峰彇瑙掕壊閫夋嫨妗嗗垪琛�
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 閫変腑瑙掕壊ID鍒楄〃
-     */
-    public List<Integer> selectRoleListByUserId(Long userId)
-    {
-        return roleMapper.selectRoleListByUserId(userId);
-    }
-
-    /**
-     * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊
-     * 
-     * @param roleId 瑙掕壊ID
-     * @return 瑙掕壊瀵硅薄淇℃伅
-     */
-    public SysRole selectRoleById(Long roleId)
-    {
-        return roleMapper.selectRoleById(roleId);
-    }
-
-    /**
-     * 鏍¢獙瑙掕壊鍚嶇О鏄惁鍞竴
-     * 
-     * @param role 瑙掕壊淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public String checkRoleNameUnique(SysRole role)
-    {
-        Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId();
-        SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName());
-        if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue())
-        {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-
-    /**
-     * 鏍¢獙瑙掕壊鏉冮檺鏄惁鍞竴
-     * 
-     * @param role 瑙掕壊淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public String checkRoleKeyUnique(SysRole role)
-    {
-        Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId();
-        SysRole info = roleMapper.checkRoleKeyUnique(role.getRoleKey());
-        if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue())
-        {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-
-    /**
-     * 鏍¢獙瑙掕壊鏄惁鍏佽鎿嶄綔
-     * 
-     * @param role 瑙掕壊淇℃伅
-     */
-    public void checkRoleAllowed(SysRole role)
-    {
-        if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin())
-        {
-            throw new CustomException("涓嶅厑璁告搷浣滆秴绾х鐞嗗憳瑙掕壊");
-        }
-    }
-
-    /**
-     * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊浣跨敤鏁伴噺
-     * 
-     * @param roleId 瑙掕壊ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int countUserRoleByRoleId(Long roleId)
-    {
-        return userRoleMapper.countUserRoleByRoleId(roleId);
-    }
-
-    /**
-     * 鏂板淇濆瓨瑙掕壊淇℃伅
-     * 
-     * @param role 瑙掕壊淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    @Transactional
-    public int insertRole(SysRole role)
-    {
-        // 鏂板瑙掕壊淇℃伅
-        roleMapper.insertRole(role);
-        return insertRoleMenu(role);
-    }
-
-    /**
-     * 淇敼淇濆瓨瑙掕壊淇℃伅
-     * 
-     * @param role 瑙掕壊淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    @Transactional
-    public int updateRole(SysRole role)
-    {
-        // 淇敼瑙掕壊淇℃伅
-        roleMapper.updateRole(role);
-        // 鍒犻櫎瑙掕壊涓庤彍鍗曞叧鑱�
-        roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId());
-        return insertRoleMenu(role);
-    }
-
-    /**
-     * 淇敼瑙掕壊鐘舵��
-     * 
-     * @param role 瑙掕壊淇℃伅
-     * @return 缁撴灉
-     */
-    public int updateRoleStatus(SysRole role)
-    {
-        return roleMapper.updateRole(role);
-    }
-
-    /**
-     * 淇敼鏁版嵁鏉冮檺淇℃伅
-     * 
-     * @param role 瑙掕壊淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    @Transactional
-    public int authDataScope(SysRole role)
-    {
-        // 淇敼瑙掕壊淇℃伅
-        roleMapper.updateRole(role);
-        // 鍒犻櫎瑙掕壊涓庨儴闂ㄥ叧鑱�
-        roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId());
-        // 鏂板瑙掕壊鍜岄儴闂ㄤ俊鎭紙鏁版嵁鏉冮檺锛�
-        return insertRoleDept(role);
-    }
-
-    /**
-     * 鏂板瑙掕壊鑿滃崟淇℃伅
-     * 
-     * @param role 瑙掕壊瀵硅薄
-     */
-    public int insertRoleMenu(SysRole role)
-    {
-        int rows = 1;
-        // 鏂板鐢ㄦ埛涓庤鑹茬鐞�
-        List<SysRoleMenu> list = new ArrayList<SysRoleMenu>();
-        for (Long menuId : role.getMenuIds())
-        {
-            SysRoleMenu rm = new SysRoleMenu();
-            rm.setRoleId(role.getRoleId());
-            rm.setMenuId(menuId);
-            list.add(rm);
-        }
-        if (list.size() > 0)
-        {
-            rows = roleMenuMapper.batchRoleMenu(list);
-        }
-        return rows;
-    }
-
-    /**
-     * 鏂板瑙掕壊閮ㄩ棬淇℃伅(鏁版嵁鏉冮檺)
-     *
-     * @param role 瑙掕壊瀵硅薄
-     */
-    public int insertRoleDept(SysRole role)
-    {
-        int rows = 1;
-        // 鏂板瑙掕壊涓庨儴闂紙鏁版嵁鏉冮檺锛夌鐞�
-        List<SysRoleDept> list = new ArrayList<SysRoleDept>();
-        for (Long deptId : role.getDeptIds())
-        {
-            SysRoleDept rd = new SysRoleDept();
-            rd.setRoleId(role.getRoleId());
-            rd.setDeptId(deptId);
-            list.add(rd);
-        }
-        if (list.size() > 0)
-        {
-            rows = roleDeptMapper.batchRoleDept(list);
-        }
-        return rows;
-    }
-
-    /**
-     * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊
-     * 
-     * @param roleId 瑙掕壊ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteRoleById(Long roleId)
-    {
-        return roleMapper.deleteRoleById(roleId);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎瑙掕壊淇℃伅
-     * 
-     * @param roleIds 闇�瑕佸垹闄ょ殑瑙掕壊ID
-     * @return 缁撴灉
-     */
-    public int deleteRoleByIds(Long[] roleIds)
-    {
-        for (Long roleId : roleIds)
-        {
-            checkRoleAllowed(new SysRole(roleId));
-            SysRole role = selectRoleById(roleId);
-            if (countUserRoleByRoleId(roleId) > 0)
-            {
-                throw new CustomException(String.format("%1$s宸插垎閰�,涓嶈兘鍒犻櫎", role.getRoleName()));
-            }
-        }
-        return roleMapper.deleteRoleByIds(roleIds);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysUserOnlineServiceImpl.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysUserOnlineServiceImpl.java
deleted file mode 100644
index 5881231..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysUserOnlineServiceImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.dingzhuo.energy.project.system.service.impl;
-
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.project.monitor.domain.SysUserOnline;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.project.monitor.domain.SysUserOnline;
-import com.dingzhuo.energy.project.system.service.ISysUserOnlineService;
-
-/**
- * 鍦ㄧ嚎鐢ㄦ埛 鏈嶅姟灞傚鐞�
- * 
- * @author ruoyi
- */
-@Service
-public class SysUserOnlineServiceImpl implements ISysUserOnlineService
-{
-    /**
-     * 閫氳繃鐧诲綍鍦板潃鏌ヨ淇℃伅
-     * 
-     * @param ipaddr 鐧诲綍鍦板潃
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅
-     */
-    @Override
-    public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user)
-    {
-        if (StringUtils.equals(ipaddr, user.getIpaddr()))
-        {
-            return loginUserToUserOnline(user);
-        }
-        return null;
-    }
-
-    /**
-     * 閫氳繃鐢ㄦ埛鍚嶇О鏌ヨ淇℃伅
-     * 
-     * @param userName 鐢ㄦ埛鍚嶇О
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅
-     */
-    @Override
-    public SysUserOnline selectOnlineByUserName(String userName, LoginUser user)
-    {
-        if (StringUtils.equals(userName, user.getUsername()))
-        {
-            return loginUserToUserOnline(user);
-        }
-        return null;
-    }
-
-    /**
-     * 閫氳繃鐧诲綍鍦板潃/鐢ㄦ埛鍚嶇О鏌ヨ淇℃伅
-     * 
-     * @param ipaddr 鐧诲綍鍦板潃
-     * @param userName 鐢ㄦ埛鍚嶇О
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅
-     */
-    @Override
-    public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user)
-    {
-        if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername()))
-        {
-            return loginUserToUserOnline(user);
-        }
-        return null;
-    }
-
-    /**
-     * 璁剧疆鍦ㄧ嚎鐢ㄦ埛淇℃伅
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 鍦ㄧ嚎鐢ㄦ埛
-     */
-    public SysUserOnline loginUserToUserOnline(LoginUser user)
-    {
-        if (StringUtils.isNull(user) && StringUtils.isNull(user.getUser()))
-        {
-            return null;
-        }
-        SysUserOnline sysUserOnline = new SysUserOnline();
-        sysUserOnline.setTokenId(user.getToken());
-        sysUserOnline.setUserName(user.getUsername());
-        sysUserOnline.setIpaddr(user.getIpaddr());
-        sysUserOnline.setLoginLocation(user.getLoginLocation());
-        sysUserOnline.setBrowser(user.getBrowser());
-        sysUserOnline.setOs(user.getOs());
-        sysUserOnline.setLoginTime(user.getLoginTime());
-        if (StringUtils.isNotNull(user.getUser().getDept()))
-        {
-            sysUserOnline.setDeptName(user.getUser().getDept().getDeptName());
-        }
-        return sysUserOnline;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysUserServiceImpl.java b/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysUserServiceImpl.java
deleted file mode 100644
index 0a6acbb..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/system/service/impl/SysUserServiceImpl.java
+++ /dev/null
@@ -1,457 +0,0 @@
-package com.dingzhuo.energy.project.system.service.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.DataScope;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import com.dingzhuo.energy.common.constant.UserConstants;
-import com.dingzhuo.energy.common.exception.CustomException;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.DataScope;
-import com.dingzhuo.energy.project.system.domain.SysPost;
-import com.dingzhuo.energy.project.system.domain.SysRole;
-import com.dingzhuo.energy.project.system.domain.SysUser;
-import com.dingzhuo.energy.project.system.domain.SysUserPost;
-import com.dingzhuo.energy.project.system.domain.SysUserRole;
-import com.dingzhuo.energy.project.system.mapper.SysPostMapper;
-import com.dingzhuo.energy.project.system.mapper.SysRoleMapper;
-import com.dingzhuo.energy.project.system.mapper.SysUserMapper;
-import com.dingzhuo.energy.project.system.mapper.SysUserPostMapper;
-import com.dingzhuo.energy.project.system.mapper.SysUserRoleMapper;
-import com.dingzhuo.energy.project.system.service.ISysConfigService;
-import com.dingzhuo.energy.project.system.service.ISysUserService;
-
-/**
- * 鐢ㄦ埛 涓氬姟灞傚鐞�
- * 
- * @author ruoyi
- */
-@Service
-public class SysUserServiceImpl implements ISysUserService
-{
-    private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
-
-    @Autowired
-    private SysUserMapper userMapper;
-
-    @Autowired
-    private SysRoleMapper roleMapper;
-
-    @Autowired
-    private SysPostMapper postMapper;
-
-    @Autowired
-    private SysUserRoleMapper userRoleMapper;
-
-    @Autowired
-    private SysUserPostMapper userPostMapper;
-
-    @Autowired
-    private ISysConfigService configService;
-
-    /**
-     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鐢ㄦ埛鍒楄〃
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
-     */
-    @Override
-    @DataScope(deptAlias = "d", userAlias = "u")
-    public List<SysUser> selectUserList(SysUser user)
-    {
-        return userMapper.selectUserList(user);
-    }
-
-    /**
-     * 閫氳繃鐢ㄦ埛鍚嶆煡璇㈢敤鎴�
-     * 
-     * @param userName 鐢ㄦ埛鍚�
-     * @return 鐢ㄦ埛瀵硅薄淇℃伅
-     */
-    @Override
-    public SysUser selectUserByUserName(String userName)
-    {
-        return userMapper.selectUserByUserName(userName);
-    }
-
-    /**
-     * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 鐢ㄦ埛瀵硅薄淇℃伅
-     */
-    @Override
-    public SysUser selectUserById(Long userId)
-    {
-        return userMapper.selectUserById(userId);
-    }
-
-    /**
-     * 鏌ヨ鐢ㄦ埛鎵�灞炶鑹茬粍
-     * 
-     * @param userName 鐢ㄦ埛鍚�
-     * @return 缁撴灉
-     */
-    @Override
-    public String selectUserRoleGroup(String userName)
-    {
-        List<SysRole> list = roleMapper.selectRolesByUserName(userName);
-        StringBuffer idsStr = new StringBuffer();
-        for (SysRole role : list)
-        {
-            idsStr.append(role.getRoleName()).append(",");
-        }
-        if (StringUtils.isNotEmpty(idsStr.toString()))
-        {
-            return idsStr.substring(0, idsStr.length() - 1);
-        }
-        return idsStr.toString();
-    }
-
-    /**
-     * 鏌ヨ鐢ㄦ埛鎵�灞炲矖浣嶇粍
-     * 
-     * @param userName 鐢ㄦ埛鍚�
-     * @return 缁撴灉
-     */
-    @Override
-    public String selectUserPostGroup(String userName)
-    {
-        List<SysPost> list = postMapper.selectPostsByUserName(userName);
-        StringBuffer idsStr = new StringBuffer();
-        for (SysPost post : list)
-        {
-            idsStr.append(post.getPostName()).append(",");
-        }
-        if (StringUtils.isNotEmpty(idsStr.toString()))
-        {
-            return idsStr.substring(0, idsStr.length() - 1);
-        }
-        return idsStr.toString();
-    }
-
-    /**
-     * 鏍¢獙鐢ㄦ埛鍚嶇О鏄惁鍞竴
-     * 
-     * @param userName 鐢ㄦ埛鍚嶇О
-     * @return 缁撴灉
-     */
-    @Override
-    public String checkUserNameUnique(String userName)
-    {
-        int count = userMapper.checkUserNameUnique(userName);
-        if (count > 0)
-        {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-
-    /**
-     * 鏍¢獙鐢ㄦ埛鍚嶇О鏄惁鍞竴
-     *
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return
-     */
-    @Override
-    public String checkPhoneUnique(SysUser user)
-    {
-        Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
-        SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber());
-        if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
-        {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-
-    /**
-     * 鏍¢獙email鏄惁鍞竴
-     *
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return
-     */
-    @Override
-    public String checkEmailUnique(SysUser user)
-    {
-        Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
-        SysUser info = userMapper.checkEmailUnique(user.getEmail());
-        if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
-        {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-
-    /**
-     * 鏍¢獙鐢ㄦ埛鏄惁鍏佽鎿嶄綔
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     */
-    public void checkUserAllowed(SysUser user)
-    {
-        if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin())
-        {
-            throw new CustomException("涓嶅厑璁告搷浣滆秴绾х鐞嗗憳鐢ㄦ埛");
-        }
-    }
-
-    /**
-     * 鏂板淇濆瓨鐢ㄦ埛淇℃伅
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    @Transactional
-    public int insertUser(SysUser user)
-    {
-        // 鏂板鐢ㄦ埛淇℃伅
-        int rows = userMapper.insertUser(user);
-        // 鏂板鐢ㄦ埛宀椾綅鍏宠仈
-        insertUserPost(user);
-        // 鏂板鐢ㄦ埛涓庤鑹茬鐞�
-        insertUserRole(user);
-        return rows;
-    }
-
-    /**
-     * 淇敼淇濆瓨鐢ㄦ埛淇℃伅
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    @Transactional
-    public int updateUser(SysUser user)
-    {
-        Long userId = user.getUserId();
-        // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱�
-        userRoleMapper.deleteUserRoleByUserId(userId);
-        // 鏂板鐢ㄦ埛涓庤鑹茬鐞�
-        insertUserRole(user);
-        // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶅叧鑱�
-        userPostMapper.deleteUserPostByUserId(userId);
-        // 鏂板鐢ㄦ埛涓庡矖浣嶇鐞�
-        insertUserPost(user);
-        return userMapper.updateUser(user);
-    }
-
-    /**
-     * 淇敼鐢ㄦ埛鐘舵��
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateUserStatus(SysUser user)
-    {
-        return userMapper.updateUser(user);
-    }
-
-    /**
-     * 淇敼鐢ㄦ埛鍩烘湰淇℃伅
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateUserProfile(SysUser user)
-    {
-        return userMapper.updateUser(user);
-    }
-
-    /**
-     * 淇敼鐢ㄦ埛澶村儚
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @param avatar 澶村儚鍦板潃
-     * @return 缁撴灉
-     */
-    public boolean updateUserAvatar(String userName, String avatar)
-    {
-        return userMapper.updateUserAvatar(userName, avatar) > 0;
-    }
-
-    /**
-     * 閲嶇疆鐢ㄦ埛瀵嗙爜
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int resetPwd(SysUser user)
-    {
-        return userMapper.updateUser(user);
-    }
-
-    /**
-     * 閲嶇疆鐢ㄦ埛瀵嗙爜
-     * 
-     * @param userName 鐢ㄦ埛鍚�
-     * @param password 瀵嗙爜
-     * @return 缁撴灉
-     */
-    @Override
-    public int resetUserPwd(String userName, String password)
-    {
-        return userMapper.resetUserPwd(userName, password);
-    }
-
-    /**
-     * 鏂板鐢ㄦ埛瑙掕壊淇℃伅
-     * 
-     * @param user 鐢ㄦ埛瀵硅薄
-     */
-    public void insertUserRole(SysUser user)
-    {
-        Long[] roles = user.getRoleIds();
-        if (StringUtils.isNotNull(roles))
-        {
-            // 鏂板鐢ㄦ埛涓庤鑹茬鐞�
-            List<SysUserRole> list = new ArrayList<SysUserRole>();
-            for (Long roleId : roles)
-            {
-                SysUserRole ur = new SysUserRole();
-                ur.setUserId(user.getUserId());
-                ur.setRoleId(roleId);
-                list.add(ur);
-            }
-            if (list.size() > 0)
-            {
-                userRoleMapper.batchUserRole(list);
-            }
-        }
-    }
-
-    /**
-     * 鏂板鐢ㄦ埛宀椾綅淇℃伅
-     * 
-     * @param user 鐢ㄦ埛瀵硅薄
-     */
-    public void insertUserPost(SysUser user)
-    {
-        Long[] posts = user.getPostIds();
-        if (StringUtils.isNotNull(posts))
-        {
-            // 鏂板鐢ㄦ埛涓庡矖浣嶇鐞�
-            List<SysUserPost> list = new ArrayList<SysUserPost>();
-            for (Long postId : posts)
-            {
-                SysUserPost up = new SysUserPost();
-                up.setUserId(user.getUserId());
-                up.setPostId(postId);
-                list.add(up);
-            }
-            if (list.size() > 0)
-            {
-                userPostMapper.batchUserPost(list);
-            }
-        }
-    }
-
-    /**
-     * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteUserById(Long userId)
-    {
-        // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱�
-        userRoleMapper.deleteUserRoleByUserId(userId);
-        // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶈〃
-        userPostMapper.deleteUserPostByUserId(userId);
-        return userMapper.deleteUserById(userId);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鐢ㄦ埛淇℃伅
-     * 
-     * @param userIds 闇�瑕佸垹闄ょ殑鐢ㄦ埛ID
-     * @return 缁撴灉
-     */
-    public int deleteUserByIds(Long[] userIds)
-    {
-        for (Long userId : userIds)
-        {
-            checkUserAllowed(new SysUser(userId));
-        }
-        return userMapper.deleteUserByIds(userIds);
-    }
-
-    /**
-     * 瀵煎叆鐢ㄦ埛鏁版嵁
-     * 
-     * @param userList 鐢ㄦ埛鏁版嵁鍒楄〃
-     * @param isUpdateSupport 鏄惁鏇存柊鏀寔锛屽鏋滃凡瀛樺湪锛屽垯杩涜鏇存柊鏁版嵁
-     * @param operName 鎿嶄綔鐢ㄦ埛
-     * @return 缁撴灉
-     */
-    @Override
-    public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName)
-    {
-        if (StringUtils.isNull(userList) || userList.size() == 0)
-        {
-            throw new CustomException("瀵煎叆鐢ㄦ埛鏁版嵁涓嶈兘涓虹┖锛�");
-        }
-        int successNum = 0;
-        int failureNum = 0;
-        StringBuilder successMsg = new StringBuilder();
-        StringBuilder failureMsg = new StringBuilder();
-        String password = configService.selectConfigByKey("sys.user.initPassword");
-        for (SysUser user : userList)
-        {
-            try
-            {
-                // 楠岃瘉鏄惁瀛樺湪杩欎釜鐢ㄦ埛
-                SysUser u = userMapper.selectUserByUserName(user.getUserName());
-                if (StringUtils.isNull(u))
-                {
-                    user.setPassword(SecurityUtils.encryptPassword(password));
-                    user.setCreateBy(operName);
-                    this.insertUser(user);
-                    successNum++;
-                    successMsg.append("<br/>" + successNum + "銆佽处鍙� " + user.getUserName() + " 瀵煎叆鎴愬姛");
-                }
-                else if (isUpdateSupport)
-                {
-                    user.setUpdateBy(operName);
-                    this.updateUser(user);
-                    successNum++;
-                    successMsg.append("<br/>" + successNum + "銆佽处鍙� " + user.getUserName() + " 鏇存柊鎴愬姛");
-                }
-                else
-                {
-                    failureNum++;
-                    failureMsg.append("<br/>" + failureNum + "銆佽处鍙� " + user.getUserName() + " 宸插瓨鍦�");
-                }
-            }
-            catch (Exception e)
-            {
-                failureNum++;
-                String msg = "<br/>" + failureNum + "銆佽处鍙� " + user.getUserName() + " 瀵煎叆澶辫触锛�";
-                failureMsg.append(msg + e.getMessage());
-                log.error(msg, e);
-            }
-        }
-        if (failureNum > 0)
-        {
-            failureMsg.insert(0, "寰堟姳姝夛紝瀵煎叆澶辫触锛佸叡 " + failureNum + " 鏉℃暟鎹牸寮忎笉姝g‘锛岄敊璇涓嬶細");
-            throw new CustomException(failureMsg.toString());
-        }
-        else
-        {
-            successMsg.insert(0, "鎭枩鎮紝鏁版嵁宸插叏閮ㄥ鍏ユ垚鍔燂紒鍏� " + successNum + " 鏉★紝鏁版嵁濡備笅锛�");
-        }
-        return successMsg.toString();
-    }
-
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/controller/GenController.java b/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/controller/GenController.java
deleted file mode 100644
index 776cc57..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/controller/GenController.java
+++ /dev/null
@@ -1,192 +0,0 @@
-package com.dingzhuo.energy.project.tool.gen.controller;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.servlet.http.HttpServletResponse;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.tool.gen.service.IGenTableColumnService;
-import org.apache.commons.io.IOUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.common.utils.text.Convert;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.tool.gen.domain.GenTable;
-import com.dingzhuo.energy.project.tool.gen.domain.GenTableColumn;
-import com.dingzhuo.energy.project.tool.gen.service.IGenTableColumnService;
-import com.dingzhuo.energy.project.tool.gen.service.IGenTableService;
-
-/**
- * 浠g爜鐢熸垚 鎿嶄綔澶勭悊
- * 
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/tool/gen")
-public class GenController extends BaseController
-{
-
-    @Autowired
-    private IGenTableService genTableService;
-
-    @Autowired
-    private IGenTableColumnService genTableColumnService;
-
-    /**
-     * 鏌ヨ浠g爜鐢熸垚鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('tool:gen:list')")
-    @GetMapping("/list")
-    public TableDataInfo genList(GenTable genTable)
-    {
-        startPage();
-        List<GenTable> list = genTableService.selectGenTableList(genTable);
-        return getDataTable(list);
-    }
-
-    /**
-     * 淇敼浠g爜鐢熸垚涓氬姟
-     */
-    @PreAuthorize("@ss.hasPermi('tool:gen:query')")
-    @GetMapping(value = "/{talbleId}")
-    public AjaxResult getInfo(@PathVariable Long talbleId)
-    {
-        GenTable table = genTableService.selectGenTableById(talbleId);
-        List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(talbleId);
-        Map<String, Object> map = new HashMap<String, Object>();
-        map.put("info", table);
-        map.put("rows", list);
-        return AjaxResult.success(map);
-    }
-
-    /**
-     * 鏌ヨ鏁版嵁搴撳垪琛�
-     */
-    @PreAuthorize("@ss.hasPermi('tool:gen:list')")
-    @GetMapping("/db/list")
-    public TableDataInfo dataList(GenTable genTable)
-    {
-        startPage();
-        List<GenTable> list = genTableService.selectDbTableList(genTable);
-        return getDataTable(list);
-    }
-
-    /**
-     * 鏌ヨ鏁版嵁琛ㄥ瓧娈靛垪琛�
-     */
-    @PreAuthorize("@ss.hasPermi('tool:gen:list')")
-    @GetMapping(value = "/column/{talbleId}")
-    public TableDataInfo columnList(Long tableId)
-    {
-        TableDataInfo dataInfo = new TableDataInfo();
-        List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(tableId);
-        dataInfo.setRows(list);
-        dataInfo.setTotal(list.size());
-        return dataInfo;
-    }
-
-    /**
-     * 瀵煎叆琛ㄧ粨鏋勶紙淇濆瓨锛�
-     */
-    @PreAuthorize("@ss.hasPermi('tool:gen:list')")
-    @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.IMPORT)
-    @PostMapping("/importTable")
-    public AjaxResult importTableSave(String tables)
-    {
-        String[] tableNames = Convert.toStrArray(tables);
-        // 鏌ヨ琛ㄤ俊鎭�
-        List<GenTable> tableList = genTableService.selectDbTableListByNames(tableNames);
-        genTableService.importGenTable(tableList);
-        return AjaxResult.success();
-    }
-
-    /**
-     * 淇敼淇濆瓨浠g爜鐢熸垚涓氬姟
-     */
-    @PreAuthorize("@ss.hasPermi('tool:gen:edit')")
-    @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult editSave(@Validated @RequestBody GenTable genTable)
-    {
-        System.out.println(genTable.getParams().size());
-        genTableService.validateEdit(genTable);
-        genTableService.updateGenTable(genTable);
-        return AjaxResult.success();
-    }
-
-    @PreAuthorize("@ss.hasPermi('tool:gen:remove')")
-    @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{tableIds}")
-    public AjaxResult remove(@PathVariable Long[] tableIds)
-    {
-        genTableService.deleteGenTableByIds(tableIds);
-        return AjaxResult.success();
-    }
-
-    /**
-     * 棰勮浠g爜
-     */
-    @PreAuthorize("@ss.hasPermi('tool:gen:preview')")
-    @GetMapping("/preview/{tableId}")
-    public AjaxResult preview(@PathVariable("tableId") Long tableId) throws IOException
-    {
-        Map<String, String> dataMap = genTableService.previewCode(tableId);
-        return AjaxResult.success(dataMap);
-    }
-
-    /**
-     * 鐢熸垚浠g爜
-     */
-    @PreAuthorize("@ss.hasPermi('tool:gen:code')")
-    @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.GENCODE)
-    @GetMapping("/genCode/{tableName}")
-    public void genCode(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException
-    {
-        byte[] data = genTableService.generatorCode(tableName);
-        genCode(response, data);
-    }
-
-    /**
-     * 鎵归噺鐢熸垚浠g爜
-     */
-    @PreAuthorize("@ss.hasPermi('tool:gen:code')")
-    @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.GENCODE)
-    @GetMapping("/batchGenCode")
-    public void batchGenCode(HttpServletResponse response, String tables) throws IOException
-    {
-        String[] tableNames = Convert.toStrArray(tables);
-        byte[] data = genTableService.generatorCode(tableNames);
-        genCode(response, data);
-    }
-
-    /**
-     * 鐢熸垚zip鏂囦欢
-     */
-    private void genCode(HttpServletResponse response, byte[] data) throws IOException
-    {
-        response.reset();
-        response.setHeader("Content-Disposition", "attachment; filename=\"ruoyi.zip\"");
-        response.addHeader("Content-Length", "" + data.length);
-        response.setContentType("application/octet-stream; charset=UTF-8");
-        IOUtils.write(data, response.getOutputStream());
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/domain/GenTable.java b/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/domain/GenTable.java
deleted file mode 100644
index 179d342..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/domain/GenTable.java
+++ /dev/null
@@ -1,271 +0,0 @@
-package com.dingzhuo.energy.project.tool.gen.domain;
-
-import java.util.List;
-import javax.validation.Valid;
-import javax.validation.constraints.NotBlank;
-
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import com.dingzhuo.energy.common.constant.GenConstants;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 涓氬姟琛� gen_table
- * 
- * @author ruoyi
- */
-public class GenTable extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 缂栧彿 */
-    private Long tableId;
-
-    /** 琛ㄥ悕绉� */
-    @NotBlank(message = "琛ㄥ悕绉颁笉鑳戒负绌�")
-    private String tableName;
-
-    /** 琛ㄦ弿杩� */
-    @NotBlank(message = "琛ㄦ弿杩颁笉鑳戒负绌�")
-    private String tableComment;
-
-    /** 瀹炰綋绫诲悕绉�(棣栧瓧姣嶅ぇ鍐�) */
-    @NotBlank(message = "瀹炰綋绫诲悕绉颁笉鑳戒负绌�")
-    private String className;
-
-    /** 浣跨敤鐨勬ā鏉匡紙crud鍗曡〃鎿嶄綔 tree鏍戣〃鎿嶄綔锛� */
-    private String tplCategory;
-
-    /** 鐢熸垚鍖呰矾寰� */
-    @NotBlank(message = "鐢熸垚鍖呰矾寰勪笉鑳戒负绌�")
-    private String packageName;
-
-    /** 鐢熸垚妯″潡鍚� */
-    @NotBlank(message = "鐢熸垚妯″潡鍚嶄笉鑳戒负绌�")
-    private String moduleName;
-
-    /** 鐢熸垚涓氬姟鍚� */
-    @NotBlank(message = "鐢熸垚涓氬姟鍚嶄笉鑳戒负绌�")
-    private String businessName;
-
-    /** 鐢熸垚鍔熻兘鍚� */
-    @NotBlank(message = "鐢熸垚鍔熻兘鍚嶄笉鑳戒负绌�")
-    private String functionName;
-
-    /** 鐢熸垚浣滆�� */
-    @NotBlank(message = "浣滆�呬笉鑳戒负绌�")
-    private String functionAuthor;
-
-    /** 涓婚敭淇℃伅 */
-    private GenTableColumn pkColumn;
-
-    /** 琛ㄥ垪淇℃伅 */
-    @Valid
-    private List<GenTableColumn> columns;
-
-    /** 鍏跺畠鐢熸垚閫夐」 */
-    private String options;
-
-    /** 鏍戠紪鐮佸瓧娈� */
-    private String treeCode;
-
-    /** 鏍戠埗缂栫爜瀛楁 */
-    private String treeParentCode;
-
-    /** 鏍戝悕绉板瓧娈� */
-    private String treeName;
-
-    public Long getTableId()
-    {
-        return tableId;
-    }
-
-    public void setTableId(Long tableId)
-    {
-        this.tableId = tableId;
-    }
-
-    public String getTableName()
-    {
-        return tableName;
-    }
-
-    public void setTableName(String tableName)
-    {
-        this.tableName = tableName;
-    }
-
-    public String getTableComment()
-    {
-        return tableComment;
-    }
-
-    public void setTableComment(String tableComment)
-    {
-        this.tableComment = tableComment;
-    }
-
-    public String getClassName()
-    {
-        return className;
-    }
-
-    public void setClassName(String className)
-    {
-        this.className = className;
-    }
-
-    public String getTplCategory()
-    {
-        return tplCategory;
-    }
-
-    public void setTplCategory(String tplCategory)
-    {
-        this.tplCategory = tplCategory;
-    }
-
-    public String getPackageName()
-    {
-        return packageName;
-    }
-
-    public void setPackageName(String packageName)
-    {
-        this.packageName = packageName;
-    }
-
-    public String getModuleName()
-    {
-        return moduleName;
-    }
-
-    public void setModuleName(String moduleName)
-    {
-        this.moduleName = moduleName;
-    }
-
-    public String getBusinessName()
-    {
-        return businessName;
-    }
-
-    public void setBusinessName(String businessName)
-    {
-        this.businessName = businessName;
-    }
-
-    public String getFunctionName()
-    {
-        return functionName;
-    }
-
-    public void setFunctionName(String functionName)
-    {
-        this.functionName = functionName;
-    }
-
-    public String getFunctionAuthor()
-    {
-        return functionAuthor;
-    }
-
-    public void setFunctionAuthor(String functionAuthor)
-    {
-        this.functionAuthor = functionAuthor;
-    }
-
-    public GenTableColumn getPkColumn()
-    {
-        return pkColumn;
-    }
-
-    public void setPkColumn(GenTableColumn pkColumn)
-    {
-        this.pkColumn = pkColumn;
-    }
-
-    public List<GenTableColumn> getColumns()
-    {
-        return columns;
-    }
-
-    public void setColumns(List<GenTableColumn> columns)
-    {
-        this.columns = columns;
-    }
-
-    public String getOptions()
-    {
-        return options;
-    }
-
-    public void setOptions(String options)
-    {
-        this.options = options;
-    }
-
-    public String getTreeCode()
-    {
-        return treeCode;
-    }
-
-    public void setTreeCode(String treeCode)
-    {
-        this.treeCode = treeCode;
-    }
-
-    public String getTreeParentCode()
-    {
-        return treeParentCode;
-    }
-
-    public void setTreeParentCode(String treeParentCode)
-    {
-        this.treeParentCode = treeParentCode;
-    }
-
-    public String getTreeName()
-    {
-        return treeName;
-    }
-
-    public void setTreeName(String treeName)
-    {
-        this.treeName = treeName;
-    }
-
-    public boolean isTree()
-    {
-        return isTree(this.tplCategory);
-    }
-
-    public static boolean isTree(String tplCategory)
-    {
-        return tplCategory != null && StringUtils.equals(GenConstants.TPL_TREE, tplCategory);
-    }
-
-    public boolean isCrud()
-    {
-        return isCrud(this.tplCategory);
-    }
-
-    public static boolean isCrud(String tplCategory)
-    {
-        return tplCategory != null && StringUtils.equals(GenConstants.TPL_CRUD, tplCategory);
-    }
-
-    public boolean isSuperColumn(String javaField)
-    {
-        return isSuperColumn(this.tplCategory, javaField);
-    }
-
-    public static boolean isSuperColumn(String tplCategory, String javaField)
-    {
-        if (isTree(tplCategory))
-        {
-            StringUtils.equalsAnyIgnoreCase(javaField, GenConstants.TREE_ENTITY);
-        }
-        return StringUtils.equalsAnyIgnoreCase(javaField, GenConstants.BASE_ENTITY);
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/domain/GenTableColumn.java b/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/domain/GenTableColumn.java
deleted file mode 100644
index bd4d8d8..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/domain/GenTableColumn.java
+++ /dev/null
@@ -1,370 +0,0 @@
-package com.dingzhuo.energy.project.tool.gen.domain;
-
-import javax.validation.constraints.NotBlank;
-
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 浠g爜鐢熸垚涓氬姟瀛楁琛� gen_table_column
- * 
- * @author ruoyi
- */
-public class GenTableColumn extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 缂栧彿 */
-    private Long columnId;
-
-    /** 褰掑睘琛ㄧ紪鍙� */
-    private Long tableId;
-
-    /** 鍒楀悕绉� */
-    private String columnName;
-
-    /** 鍒楁弿杩� */
-    private String columnComment;
-
-    /** 鍒楃被鍨� */
-    private String columnType;
-
-    /** JAVA绫诲瀷 */
-    private String javaType;
-
-    /** JAVA瀛楁鍚� */
-    @NotBlank(message = "Java灞炴�т笉鑳戒负绌�")
-    private String javaField;
-
-    /** 鏄惁涓婚敭锛�1鏄級 */
-    private String isPk;
-
-    /** 鏄惁鑷锛�1鏄級 */
-    private String isIncrement;
-
-    /** 鏄惁蹇呭~锛�1鏄級 */
-    private String isRequired;
-
-    /** 鏄惁涓烘彃鍏ュ瓧娈碉紙1鏄級 */
-    private String isInsert;
-
-    /** 鏄惁缂栬緫瀛楁锛�1鏄級 */
-    private String isEdit;
-
-    /** 鏄惁鍒楄〃瀛楁锛�1鏄級 */
-    private String isList;
-
-    /** 鏄惁鏌ヨ瀛楁锛�1鏄級 */
-    private String isQuery;
-
-    /** 鏌ヨ鏂瑰紡锛圗Q绛変簬銆丯E涓嶇瓑浜庛�丟T澶т簬銆丩T灏忎簬銆丩IKE妯$硦銆丅ETWEEN鑼冨洿锛� */
-    private String queryType;
-
-    /** 鏄剧ず绫诲瀷锛坕nput鏂囨湰妗嗐�乼extarea鏂囨湰鍩熴�乻elect涓嬫媺妗嗐�乧heckbox澶嶉�夋銆乺adio鍗曢�夋銆乨atetime鏃ユ湡鎺т欢锛� */
-    private String htmlType;
-
-    /** 瀛楀吀绫诲瀷 */
-    private String dictType;
-
-    /** 鎺掑簭 */
-    private Integer sort;
-
-    public void setColumnId(Long columnId)
-    {
-        this.columnId = columnId;
-    }
-
-    public Long getColumnId()
-    {
-        return columnId;
-    }
-
-    public void setTableId(Long tableId)
-    {
-        this.tableId = tableId;
-    }
-
-    public Long getTableId()
-    {
-        return tableId;
-    }
-
-    public void setColumnName(String columnName)
-    {
-        this.columnName = columnName;
-    }
-
-    public String getColumnName()
-    {
-        return columnName;
-    }
-
-    public void setColumnComment(String columnComment)
-    {
-        this.columnComment = columnComment;
-    }
-
-    public String getColumnComment()
-    {
-        return columnComment;
-    }
-
-    public void setColumnType(String columnType)
-    {
-        this.columnType = columnType;
-    }
-
-    public String getColumnType()
-    {
-        return columnType;
-    }
-
-    public void setJavaType(String javaType)
-    {
-        this.javaType = javaType;
-    }
-
-    public String getJavaType()
-    {
-        return javaType;
-    }
-
-    public void setJavaField(String javaField)
-    {
-        this.javaField = javaField;
-    }
-
-    public String getJavaField()
-    {
-        return javaField;
-    }
-
-    public void setIsPk(String isPk)
-    {
-        this.isPk = isPk;
-    }
-
-    public String getIsPk()
-    {
-        return isPk;
-    }
-
-    public boolean isPk()
-    {
-        return isPk(this.isPk);
-    }
-
-    public boolean isPk(String isPk)
-    {
-        return isPk != null && StringUtils.equals("1", isPk);
-    }
-
-    public String getIsIncrement()
-    {
-        return isIncrement;
-    }
-
-    public void setIsIncrement(String isIncrement)
-    {
-        this.isIncrement = isIncrement;
-    }
-
-    public boolean isIncrement()
-    {
-        return isIncrement(this.isIncrement);
-    }
-
-    public boolean isIncrement(String isIncrement)
-    {
-        return isIncrement != null && StringUtils.equals("1", isIncrement);
-    }
-
-    public void setIsRequired(String isRequired)
-    {
-        this.isRequired = isRequired;
-    }
-
-    public String getIsRequired()
-    {
-        return isRequired;
-    }
-
-    public boolean isRequired()
-    {
-        return isRequired(this.isRequired);
-    }
-
-    public boolean isRequired(String isRequired)
-    {
-        return isRequired != null && StringUtils.equals("1", isRequired);
-    }
-
-    public void setIsInsert(String isInsert)
-    {
-        this.isInsert = isInsert;
-    }
-
-    public String getIsInsert()
-    {
-        return isInsert;
-    }
-
-    public boolean isInsert()
-    {
-        return isInsert(this.isInsert);
-    }
-
-    public boolean isInsert(String isInsert)
-    {
-        return isInsert != null && StringUtils.equals("1", isInsert);
-    }
-
-    public void setIsEdit(String isEdit)
-    {
-        this.isEdit = isEdit;
-    }
-
-    public String getIsEdit()
-    {
-        return isEdit;
-    }
-
-    public boolean isEdit()
-    {
-        return isInsert(this.isEdit);
-    }
-
-    public boolean isEdit(String isEdit)
-    {
-        return isEdit != null && StringUtils.equals("1", isEdit);
-    }
-
-    public void setIsList(String isList)
-    {
-        this.isList = isList;
-    }
-
-    public String getIsList()
-    {
-        return isList;
-    }
-
-    public boolean isList()
-    {
-        return isList(this.isList);
-    }
-
-    public boolean isList(String isList)
-    {
-        return isList != null && StringUtils.equals("1", isList);
-    }
-
-    public void setIsQuery(String isQuery)
-    {
-        this.isQuery = isQuery;
-    }
-
-    public String getIsQuery()
-    {
-        return isQuery;
-    }
-
-    public boolean isQuery()
-    {
-        return isQuery(this.isQuery);
-    }
-
-    public boolean isQuery(String isQuery)
-    {
-        return isQuery != null && StringUtils.equals("1", isQuery);
-    }
-
-    public void setQueryType(String queryType)
-    {
-        this.queryType = queryType;
-    }
-
-    public String getQueryType()
-    {
-        return queryType;
-    }
-
-    public String getHtmlType()
-    {
-        return htmlType;
-    }
-
-    public void setHtmlType(String htmlType)
-    {
-        this.htmlType = htmlType;
-    }
-
-    public void setDictType(String dictType)
-    {
-        this.dictType = dictType;
-    }
-
-    public String getDictType()
-    {
-        return dictType;
-    }
-
-    public void setSort(Integer sort)
-    {
-        this.sort = sort;
-    }
-
-    public Integer getSort()
-    {
-        return sort;
-    }
-
-    public boolean isSuperColumn()
-    {
-        return isSuperColumn(this.javaField);
-    }
-
-    public static boolean isSuperColumn(String javaField)
-    {
-        return StringUtils.equalsAnyIgnoreCase(javaField,
-                // BaseEntity
-                "createBy", "createTime", "updateBy", "updateTime", "remark",
-                // TreeEntity
-                "parentName", "parentId", "orderNum", "ancestors");
-    }
-
-    public boolean isUsableColumn()
-    {
-        return isUsableColumn(javaField);
-    }
-
-    public static boolean isUsableColumn(String javaField)
-    {
-        // isSuperColumn()涓殑鍚嶅崟鐢ㄤ簬閬垮厤鐢熸垚澶氫綑Domain灞炴�э紝鑻ユ煇浜涘睘鎬у湪鐢熸垚椤甸潰鏃堕渶瑕佺敤鍒颁笉鑳藉拷鐣ワ紝鍒欐斁鍦ㄦ澶勭櫧鍚嶅崟
-        return StringUtils.equalsAnyIgnoreCase(javaField, "parentId", "orderNum");
-    }
-
-    public String readConverterExp()
-    {
-        String remarks = StringUtils.substringBetween(this.columnComment, "锛�", "锛�");
-        StringBuffer sb = new StringBuffer();
-        if (StringUtils.isNotEmpty(remarks))
-        {
-            for (String value : remarks.split(" "))
-            {
-                if (StringUtils.isNotEmpty(value))
-                {
-                    Object startStr = value.subSequence(0, 1);
-                    String endStr = value.substring(1);
-                    sb.append(startStr).append("=").append(endStr).append(",");
-                }
-            }
-            return sb.deleteCharAt(sb.length() - 1).toString();
-        }
-        else
-        {
-            return this.columnComment;
-        }
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/mapper/GenTableColumnMapper.java b/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/mapper/GenTableColumnMapper.java
deleted file mode 100644
index 92c86b9..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/mapper/GenTableColumnMapper.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.dingzhuo.energy.project.tool.gen.mapper;
-
-import java.util.List;
-import com.dingzhuo.energy.project.tool.gen.domain.GenTableColumn;
-
-/**
- * 涓氬姟瀛楁 鏁版嵁灞�
- * 
- * @author ruoyi
- */
-public interface GenTableColumnMapper
-{
-    /**
-     * 鏍规嵁琛ㄥ悕绉版煡璇㈠垪淇℃伅
-     * 
-     * @param tableName 琛ㄥ悕绉�
-     * @return 鍒椾俊鎭�
-     */
-    List<GenTableColumn> selectDbTableColumnsByName(String tableName);
-    
-    /**
-     * 鏌ヨ涓氬姟瀛楁鍒楄〃
-     * 
-     * @param tableId 涓氬姟瀛楁缂栧彿
-     * @return 涓氬姟瀛楁闆嗗悎
-     */
-    List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId);
-
-    /**
-     * 鏂板涓氬姟瀛楁
-     * 
-     * @param genTableColumn 涓氬姟瀛楁淇℃伅
-     * @return 缁撴灉
-     */
-    int insertGenTableColumn(GenTableColumn genTableColumn);
-
-    /**
-     * 淇敼涓氬姟瀛楁
-     * 
-     * @param genTableColumn 涓氬姟瀛楁淇℃伅
-     * @return 缁撴灉
-     */
-    int updateGenTableColumn(GenTableColumn genTableColumn);
-
-    /**
-     * 鎵归噺鍒犻櫎涓氬姟瀛楁
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    int deleteGenTableColumnByIds(Long[] ids);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/mapper/GenTableMapper.java b/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/mapper/GenTableMapper.java
deleted file mode 100644
index 7c9a600..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/mapper/GenTableMapper.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.dingzhuo.energy.project.tool.gen.mapper;
-
-import java.util.List;
-
-import com.dingzhuo.energy.project.tool.gen.domain.GenTable;
-import com.dingzhuo.energy.project.tool.gen.domain.GenTable;
-
-/**
- * 涓氬姟 鏁版嵁灞�
- * 
- * @author ruoyi
- */
-public interface GenTableMapper
-{
-    /**
-     * 鏌ヨ涓氬姟鍒楄〃
-     * 
-     * @param genTable 涓氬姟淇℃伅
-     * @return 涓氬姟闆嗗悎
-     */
-    List<GenTable> selectGenTableList(GenTable genTable);
-
-    /**
-     * 鏌ヨ鎹簱鍒楄〃
-     * 
-     * @param genTable 涓氬姟淇℃伅
-     * @return 鏁版嵁搴撹〃闆嗗悎
-     */
-    List<GenTable> selectDbTableList(GenTable genTable);
-
-    /**
-     * 鏌ヨ鎹簱鍒楄〃
-     * 
-     * @param tableNames 琛ㄥ悕绉扮粍
-     * @return 鏁版嵁搴撹〃闆嗗悎
-     */
-    List<GenTable> selectDbTableListByNames(String[] tableNames);
-
-    /**
-     * 鏌ヨ琛↖D涓氬姟淇℃伅
-     * 
-     * @param tableId 涓氬姟ID
-     * @return 涓氬姟淇℃伅
-     */
-    GenTable selectGenTableById(Long tableId);
-
-    /**
-     * 鏌ヨ琛ㄥ悕绉颁笟鍔′俊鎭�
-     * 
-     * @param tableName 琛ㄥ悕绉�
-     * @return 涓氬姟淇℃伅
-     */
-    GenTable selectGenTableByName(String tableName);
-
-    /**
-     * 鏂板涓氬姟
-     * 
-     * @param genTable 涓氬姟淇℃伅
-     * @return 缁撴灉
-     */
-    int insertGenTable(GenTable genTable);
-
-    /**
-     * 淇敼涓氬姟
-     * 
-     * @param genTable 涓氬姟淇℃伅
-     * @return 缁撴灉
-     */
-    int updateGenTable(GenTable genTable);
-
-    /**
-     * 鎵归噺鍒犻櫎涓氬姟
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    int deleteGenTableByIds(Long[] ids);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/service/GenTableColumnServiceImpl.java b/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/service/GenTableColumnServiceImpl.java
deleted file mode 100644
index 6a85dd7..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/service/GenTableColumnServiceImpl.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.dingzhuo.energy.project.tool.gen.service;
-
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.common.utils.text.Convert;
-import com.dingzhuo.energy.project.tool.gen.domain.GenTableColumn;
-import com.dingzhuo.energy.project.tool.gen.mapper.GenTableColumnMapper;
-
-/**
- * 涓氬姟瀛楁 鏈嶅姟灞傚疄鐜�
- * 
- * @author ruoyi
- */
-@Service
-public class GenTableColumnServiceImpl implements IGenTableColumnService 
-{
-	@Autowired
-	private GenTableColumnMapper genTableColumnMapper;
-
-	/**
-     * 鏌ヨ涓氬姟瀛楁鍒楄〃
-     * 
-     * @param genTableColumn 涓氬姟瀛楁缂栧彿
-     * @return 涓氬姟瀛楁闆嗗悎
-     */
-	@Override
-	public List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId)
-	{
-	    return genTableColumnMapper.selectGenTableColumnListByTableId(tableId);
-	}
-	
-    /**
-     * 鏂板涓氬姟瀛楁
-     * 
-     * @param genTableColumn 涓氬姟瀛楁淇℃伅
-     * @return 缁撴灉
-     */
-	@Override
-	public int insertGenTableColumn(GenTableColumn genTableColumn)
-	{
-	    return genTableColumnMapper.insertGenTableColumn(genTableColumn);
-	}
-	
-	/**
-     * 淇敼涓氬姟瀛楁
-     * 
-     * @param genTableColumn 涓氬姟瀛楁淇℃伅
-     * @return 缁撴灉
-     */
-	@Override
-	public int updateGenTableColumn(GenTableColumn genTableColumn)
-	{
-	    return genTableColumnMapper.updateGenTableColumn(genTableColumn);
-	}
-
-	/**
-     * 鍒犻櫎涓氬姟瀛楁瀵硅薄
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-	@Override
-	public int deleteGenTableColumnByIds(String ids)
-	{
-		return genTableColumnMapper.deleteGenTableColumnByIds(Convert.toLongArray(ids));
-	}
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/service/GenTableServiceImpl.java b/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/service/GenTableServiceImpl.java
deleted file mode 100644
index 722c873..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/service/GenTableServiceImpl.java
+++ /dev/null
@@ -1,341 +0,0 @@
-package com.dingzhuo.energy.project.tool.gen.service;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-import org.apache.commons.io.IOUtils;
-import org.apache.velocity.Template;
-import org.apache.velocity.VelocityContext;
-import org.apache.velocity.app.Velocity;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.dingzhuo.energy.common.constant.Constants;
-import com.dingzhuo.energy.common.constant.GenConstants;
-import com.dingzhuo.energy.common.exception.CustomException;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.project.tool.gen.domain.GenTable;
-import com.dingzhuo.energy.project.tool.gen.domain.GenTableColumn;
-import com.dingzhuo.energy.project.tool.gen.mapper.GenTableColumnMapper;
-import com.dingzhuo.energy.project.tool.gen.mapper.GenTableMapper;
-import com.dingzhuo.energy.project.tool.gen.util.GenUtils;
-import com.dingzhuo.energy.project.tool.gen.util.VelocityInitializer;
-import com.dingzhuo.energy.project.tool.gen.util.VelocityUtils;
-
-/**
- * 涓氬姟 鏈嶅姟灞傚疄鐜�
- * 
- * @author ruoyi
- */
-@Service
-public class GenTableServiceImpl implements IGenTableService
-{
-    private static final Logger log = LoggerFactory.getLogger(GenTableServiceImpl.class);
-
-    @Autowired
-    private GenTableMapper genTableMapper;
-
-    @Autowired
-    private GenTableColumnMapper genTableColumnMapper;
-
-    /**
-     * 鏌ヨ涓氬姟淇℃伅
-     * 
-     * @param id 涓氬姟ID
-     * @return 涓氬姟淇℃伅
-     */
-    @Override
-    public GenTable selectGenTableById(Long id)
-    {
-        GenTable genTable = genTableMapper.selectGenTableById(id);
-        setTableFromOptions(genTable);
-        return genTable;
-    }
-
-    /**
-     * 鏌ヨ涓氬姟鍒楄〃
-     * 
-     * @param genTable 涓氬姟淇℃伅
-     * @return 涓氬姟闆嗗悎
-     */
-    @Override
-    public List<GenTable> selectGenTableList(GenTable genTable)
-    {
-        return genTableMapper.selectGenTableList(genTable);
-    }
-
-    /**
-     * 鏌ヨ鎹簱鍒楄〃
-     * 
-     * @param genTable 涓氬姟淇℃伅
-     * @return 鏁版嵁搴撹〃闆嗗悎
-     */
-    public List<GenTable> selectDbTableList(GenTable genTable)
-    {
-        return genTableMapper.selectDbTableList(genTable);
-    }
-
-    /**
-     * 鏌ヨ鎹簱鍒楄〃
-     * 
-     * @param tableNames 琛ㄥ悕绉扮粍
-     * @return 鏁版嵁搴撹〃闆嗗悎
-     */
-    public List<GenTable> selectDbTableListByNames(String[] tableNames)
-    {
-        return genTableMapper.selectDbTableListByNames(tableNames);
-    }
-
-    /**
-     * 淇敼涓氬姟
-     * 
-     * @param genTable 涓氬姟淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    @Transactional
-    public void updateGenTable(GenTable genTable)
-    {
-        String options = JSON.toJSONString(genTable.getParams());
-        genTable.setOptions(options);
-        int row = genTableMapper.updateGenTable(genTable);
-        if (row > 0)
-        {
-            for (GenTableColumn cenTableColumn : genTable.getColumns())
-            {
-                genTableColumnMapper.updateGenTableColumn(cenTableColumn);
-            }
-        }
-    }
-
-    /**
-     * 鍒犻櫎涓氬姟瀵硅薄
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    @Override
-    @Transactional
-    public void deleteGenTableByIds(Long[] tableIds)
-    {
-        genTableMapper.deleteGenTableByIds(tableIds);
-        genTableColumnMapper.deleteGenTableColumnByIds(tableIds);
-    }
-
-    /**
-     * 瀵煎叆琛ㄧ粨鏋�
-     * 
-     * @param tableList 瀵煎叆琛ㄥ垪琛�
-     */
-    @Override
-    @Transactional
-    public void importGenTable(List<GenTable> tableList)
-    {
-        String operName = SecurityUtils.getUsername();
-        for (GenTable table : tableList)
-        {
-            try
-            {
-                String tableName = table.getTableName();
-                GenUtils.initTable(table, operName);
-                int row = genTableMapper.insertGenTable(table);
-                if (row > 0)
-                {
-                    // 淇濆瓨鍒椾俊鎭�
-                    List<GenTableColumn> genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName);
-                    for (GenTableColumn column : genTableColumns)
-                    {
-                        GenUtils.initColumnField(column, table);
-                        genTableColumnMapper.insertGenTableColumn(column);
-                    }
-                }
-            }
-            catch (Exception e)
-            {
-                log.error("琛ㄥ悕 " + table.getTableName() + " 瀵煎叆澶辫触锛�", e);
-            }
-        }
-    }
-
-    /**
-     * 棰勮浠g爜
-     * 
-     * @param tableId 琛ㄧ紪鍙�
-     * @return 棰勮鏁版嵁鍒楄〃
-     */
-    public Map<String, String> previewCode(Long tableId)
-    {
-        Map<String, String> dataMap = new LinkedHashMap<>();
-        // 鏌ヨ琛ㄤ俊鎭�
-        GenTable table = genTableMapper.selectGenTableById(tableId);
-        // 鏌ヨ鍒椾俊鎭�
-        List<GenTableColumn> columns = table.getColumns();
-        setPkColumn(table, columns);
-        VelocityInitializer.initVelocity();
-
-        VelocityContext context = VelocityUtils.prepareContext(table);
-
-        // 鑾峰彇妯℃澘鍒楄〃
-        List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory());
-        for (String template : templates)
-        {
-            // 娓叉煋妯℃澘
-            StringWriter sw = new StringWriter();
-            Template tpl = Velocity.getTemplate(template, Constants.UTF8);
-            tpl.merge(context, sw);
-            dataMap.put(template, sw.toString());
-        }
-        return dataMap;
-    }
-
-    /**
-     * 鐢熸垚浠g爜
-     * 
-     * @param tableName 琛ㄥ悕绉�
-     * @return 鏁版嵁
-     */
-    @Override
-    public byte[] generatorCode(String tableName)
-    {
-        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-        ZipOutputStream zip = new ZipOutputStream(outputStream);
-        generatorCode(tableName, zip);
-        IOUtils.closeQuietly(zip);
-        return outputStream.toByteArray();
-    }
-
-    /**
-     * 鎵归噺鐢熸垚浠g爜
-     * 
-     * @param tableNames 琛ㄦ暟缁�
-     * @return 鏁版嵁
-     */
-    @Override
-    public byte[] generatorCode(String[] tableNames)
-    {
-        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-        ZipOutputStream zip = new ZipOutputStream(outputStream);
-        for (String tableName : tableNames)
-        {
-            generatorCode(tableName, zip);
-        }
-        IOUtils.closeQuietly(zip);
-        return outputStream.toByteArray();
-    }
-
-    /**
-     * 鏌ヨ琛ㄤ俊鎭苟鐢熸垚浠g爜
-     */
-    private void generatorCode(String tableName, ZipOutputStream zip)
-    {
-        // 鏌ヨ琛ㄤ俊鎭�
-        GenTable table = genTableMapper.selectGenTableByName(tableName);
-        // 鏌ヨ鍒椾俊鎭�
-        List<GenTableColumn> columns = table.getColumns();
-        setPkColumn(table, columns);
-
-        VelocityInitializer.initVelocity();
-
-        VelocityContext context = VelocityUtils.prepareContext(table);
-
-        // 鑾峰彇妯℃澘鍒楄〃
-        List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory());
-        for (String template : templates)
-        {
-            // 娓叉煋妯℃澘
-            StringWriter sw = new StringWriter();
-            Template tpl = Velocity.getTemplate(template, Constants.UTF8);
-            tpl.merge(context, sw);
-            try
-            {
-                // 娣诲姞鍒皕ip
-                zip.putNextEntry(new ZipEntry(VelocityUtils.getFileName(template, table)));
-                IOUtils.write(sw.toString(), zip, Constants.UTF8);
-                IOUtils.closeQuietly(sw);
-				zip.flush();
-                zip.closeEntry();
-            }
-            catch (IOException e)
-            {
-                log.error("娓叉煋妯℃澘澶辫触锛岃〃鍚嶏細" + table.getTableName(), e);
-            }
-        }
-    }
-
-    /**
-     * 淇敼淇濆瓨鍙傛暟鏍¢獙
-     * 
-     * @param genTable 涓氬姟淇℃伅
-     */
-    public void validateEdit(GenTable genTable)
-    {
-        if (GenConstants.TPL_TREE.equals(genTable.getTplCategory()))
-        {
-            String options = JSON.toJSONString(genTable.getParams());
-            JSONObject paramsObj = JSONObject.parseObject(options);
-            if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_CODE)))
-            {
-                throw new CustomException("鏍戠紪鐮佸瓧娈典笉鑳戒负绌�");
-            }
-            else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_PARENT_CODE)))
-            {
-                throw new CustomException("鏍戠埗缂栫爜瀛楁涓嶈兘涓虹┖");
-            }
-            else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_NAME)))
-            {
-                throw new CustomException("鏍戝悕绉板瓧娈典笉鑳戒负绌�");
-            }
-        }
-    }
-
-    /**
-     * 璁剧疆涓婚敭鍒椾俊鎭�
-     * 
-     * @param genTable 涓氬姟琛ㄤ俊鎭�
-     * @param columns 涓氬姟瀛楁鍒楄〃
-     */
-    public void setPkColumn(GenTable table, List<GenTableColumn> columns)
-    {
-        for (GenTableColumn column : columns)
-        {
-            if (column.isPk())
-            {
-                table.setPkColumn(column);
-                break;
-            }
-        }
-        if (StringUtils.isNull(table.getPkColumn()))
-        {
-            table.setPkColumn(columns.get(0));
-        }
-    }
-
-    /**
-     * 璁剧疆浠g爜鐢熸垚鍏朵粬閫夐」鍊�
-     * 
-     * @param genTable 璁剧疆鍚庣殑鐢熸垚瀵硅薄
-     */
-    public void setTableFromOptions(GenTable genTable)
-    {
-        JSONObject paramsObj = JSONObject.parseObject(genTable.getOptions());
-        if (StringUtils.isNotNull(paramsObj))
-        {
-            String treeCode = paramsObj.getString(GenConstants.TREE_CODE);
-            String treeParentCode = paramsObj.getString(GenConstants.TREE_PARENT_CODE);
-            String treeName = paramsObj.getString(GenConstants.TREE_NAME);
-            genTable.setTreeCode(treeCode);
-            genTable.setTreeParentCode(treeParentCode);
-            genTable.setTreeName(treeName);
-        }
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/service/IGenTableColumnService.java b/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/service/IGenTableColumnService.java
deleted file mode 100644
index 4c2d9d5..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/service/IGenTableColumnService.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.dingzhuo.energy.project.tool.gen.service;
-
-import java.util.List;
-import com.dingzhuo.energy.project.tool.gen.domain.GenTableColumn;
-
-/**
- * 涓氬姟瀛楁 鏈嶅姟灞�
- * 
- * @author ruoyi
- */
-public interface IGenTableColumnService
-{
-    /**
-     * 鏌ヨ涓氬姟瀛楁鍒楄〃
-     * 
-     * @param genTableColumn 涓氬姟瀛楁缂栧彿
-     * @return 涓氬姟瀛楁闆嗗悎
-     */
-    List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId);
-
-    /**
-     * 鏂板涓氬姟瀛楁
-     * 
-     * @param genTableColumn 涓氬姟瀛楁淇℃伅
-     * @return 缁撴灉
-     */
-    int insertGenTableColumn(GenTableColumn genTableColumn);
-
-    /**
-     * 淇敼涓氬姟瀛楁
-     * 
-     * @param genTableColumn 涓氬姟瀛楁淇℃伅
-     * @return 缁撴灉
-     */
-    int updateGenTableColumn(GenTableColumn genTableColumn);
-
-    /**
-     * 鍒犻櫎涓氬姟瀛楁淇℃伅
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    int deleteGenTableColumnByIds(String ids);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/service/IGenTableService.java b/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/service/IGenTableService.java
deleted file mode 100644
index 0c8a963..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/service/IGenTableService.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package com.dingzhuo.energy.project.tool.gen.service;
-
-import java.util.List;
-import java.util.Map;
-
-import com.dingzhuo.energy.project.tool.gen.domain.GenTable;
-import com.dingzhuo.energy.project.tool.gen.domain.GenTable;
-
-/**
- * 涓氬姟 鏈嶅姟灞�
- * 
- * @author ruoyi
- */
-public interface IGenTableService
-{
-    /**
-     * 鏌ヨ涓氬姟鍒楄〃
-     * 
-     * @param genTable 涓氬姟淇℃伅
-     * @return 涓氬姟闆嗗悎
-     */
-    List<GenTable> selectGenTableList(GenTable genTable);
-
-    /**
-     * 鏌ヨ鎹簱鍒楄〃
-     * 
-     * @param genTable 涓氬姟淇℃伅
-     * @return 鏁版嵁搴撹〃闆嗗悎
-     */
-    List<GenTable> selectDbTableList(GenTable genTable);
-
-    /**
-     * 鏌ヨ鎹簱鍒楄〃
-     * 
-     * @param tableNames 琛ㄥ悕绉扮粍
-     * @return 鏁版嵁搴撹〃闆嗗悎
-     */
-    List<GenTable> selectDbTableListByNames(String[] tableNames);
-
-    /**
-     * 鏌ヨ涓氬姟淇℃伅
-     * 
-     * @param id 涓氬姟ID
-     * @return 涓氬姟淇℃伅
-     */
-    GenTable selectGenTableById(Long id);
-
-    /**
-     * 淇敼涓氬姟
-     * 
-     * @param genTable 涓氬姟淇℃伅
-     * @return 缁撴灉
-     */
-    void updateGenTable(GenTable genTable);
-
-    /**
-     * 鍒犻櫎涓氬姟淇℃伅
-     * 
-     * @param tableIds 闇�瑕佸垹闄ょ殑琛ㄦ暟鎹甀D
-     * @return 缁撴灉
-     */
-    void deleteGenTableByIds(Long[] tableIds);
-
-    /**
-     * 瀵煎叆琛ㄧ粨鏋�
-     * 
-     * @param tableList 瀵煎叆琛ㄥ垪琛�
-     */
-    void importGenTable(List<GenTable> tableList);
-
-    /**
-     * 棰勮浠g爜
-     * 
-     * @param tableId 琛ㄧ紪鍙�
-     * @return 棰勮鏁版嵁鍒楄〃
-     */
-    Map<String, String> previewCode(Long tableId);
-
-    /**
-     * 鐢熸垚浠g爜
-     * 
-     * @param tableName 琛ㄥ悕绉�
-     * @return 鏁版嵁
-     */
-    byte[] generatorCode(String tableName);
-
-    /**
-     * 鎵归噺鐢熸垚浠g爜
-     * 
-     * @param tableNames 琛ㄦ暟缁�
-     * @return 鏁版嵁
-     */
-    byte[] generatorCode(String[] tableNames);
-
-    /**
-     * 淇敼淇濆瓨鍙傛暟鏍¢獙
-     * 
-     * @param genTable 涓氬姟淇℃伅
-     */
-    void validateEdit(GenTable genTable);
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/util/GenUtils.java b/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/util/GenUtils.java
deleted file mode 100644
index 750a46c..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/util/GenUtils.java
+++ /dev/null
@@ -1,241 +0,0 @@
-package com.dingzhuo.energy.project.tool.gen.util;
-
-import java.util.Arrays;
-
-import com.dingzhuo.energy.framework.config.GenConfig;
-import com.dingzhuo.energy.project.tool.gen.domain.GenTable;
-import org.apache.commons.lang3.RegExUtils;
-import com.dingzhuo.energy.common.constant.GenConstants;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.config.GenConfig;
-import com.dingzhuo.energy.project.tool.gen.domain.GenTable;
-import com.dingzhuo.energy.project.tool.gen.domain.GenTableColumn;
-
-/**
- * 浠g爜鐢熸垚鍣� 宸ュ叿绫�
- * 
- * @author ruoyi
- */
-public class GenUtils
-{
-    /**
-     * 鍒濆鍖栬〃淇℃伅
-     */
-    public static void initTable(GenTable genTable, String operName)
-    {
-        genTable.setClassName(convertClassName(genTable.getTableName()));
-        genTable.setPackageName(GenConfig.getPackageName());
-        genTable.setModuleName(getModuleName(GenConfig.getPackageName()));
-        genTable.setBusinessName(getBusinessName(genTable.getTableName()));
-        genTable.setFunctionName(replaceText(genTable.getTableComment()));
-        genTable.setFunctionAuthor(GenConfig.getAuthor());
-        genTable.setCreateBy(operName);
-    }
-
-    /**
-     * 鍒濆鍖栧垪灞炴�у瓧娈�
-     */
-    public static void initColumnField(GenTableColumn column, GenTable table)
-    {
-        String dataType = getDbType(column.getColumnType());
-        String columnName = column.getColumnName();
-        column.setTableId(table.getTableId());
-        column.setCreateBy(table.getCreateBy());
-        // 璁剧疆java瀛楁鍚�
-        column.setJavaField(StringUtils.toCamelCase(columnName));
-
-        if (arraysContains(GenConstants.COLUMNTYPE_STR, dataType))
-        {
-            column.setJavaType(GenConstants.TYPE_STRING);
-            // 瀛楃涓查暱搴﹁秴杩�500璁剧疆涓烘枃鏈煙
-            Integer columnLength = getColumnLength(column.getColumnType());
-            String htmlType = columnLength >= 500 ? GenConstants.HTML_TEXTAREA : GenConstants.HTML_INPUT;
-            column.setHtmlType(htmlType);
-        }
-        else if (arraysContains(GenConstants.COLUMNTYPE_TIME, dataType))
-        {
-            column.setJavaType(GenConstants.TYPE_DATE);
-            column.setHtmlType(GenConstants.HTML_DATETIME);
-        }
-        else if (arraysContains(GenConstants.COLUMNTYPE_NUMBER, dataType))
-        {
-            column.setHtmlType(GenConstants.HTML_INPUT);
-
-            // 濡傛灉鏄诞鐐瑰瀷
-            String[] str = StringUtils.split(StringUtils.substringBetween(column.getColumnType(), "(", ")"), ",");
-            if (str != null && str.length == 2 && Integer.parseInt(str[1]) > 0)
-            {
-                column.setJavaType(GenConstants.TYPE_DOUBLE);
-            }
-            // 濡傛灉鏄暣褰�
-            else if (str != null && str.length == 1 && Integer.parseInt(str[0]) <= 10)
-            {
-                column.setJavaType(GenConstants.TYPE_INTEGER);
-            }
-            // 闀挎暣褰�
-            else
-            {
-                column.setJavaType(GenConstants.TYPE_LONG);
-            }
-        }
-
-        // 鎻掑叆瀛楁锛堥粯璁ゆ墍鏈夊瓧娈甸兘闇�瑕佹彃鍏ワ級
-        column.setIsInsert(GenConstants.REQUIRE);
-
-        // 缂栬緫瀛楁
-        if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName) && !column.isPk())
-        {
-            column.setIsEdit(GenConstants.REQUIRE);
-        }
-        // 鍒楄〃瀛楁
-        if (!arraysContains(GenConstants.COLUMNNAME_NOT_LIST, columnName) && !column.isPk())
-        {
-            column.setIsList(GenConstants.REQUIRE);
-        }
-        // 鏌ヨ瀛楁
-        if (!arraysContains(GenConstants.COLUMNNAME_NOT_QUERY, columnName) && !column.isPk())
-        {
-            column.setIsQuery(GenConstants.REQUIRE);
-        }
-
-        // 鏌ヨ瀛楁绫诲瀷
-        if (StringUtils.endsWithIgnoreCase(columnName, "name"))
-        {
-            column.setQueryType(GenConstants.QUERY_LIKE);
-        }
-        // 鐘舵�佸瓧娈佃缃崟閫夋
-        if (StringUtils.endsWithIgnoreCase(columnName, "status"))
-        {
-            column.setHtmlType(GenConstants.HTML_RADIO);
-        }
-        // 绫诲瀷&鎬у埆瀛楁璁剧疆涓嬫媺妗�
-        else if (StringUtils.endsWithIgnoreCase(columnName, "type")
-                || StringUtils.endsWithIgnoreCase(columnName, "sex"))
-        {
-            column.setHtmlType(GenConstants.HTML_SELECT);
-        }
-    }
-
-    /**
-     * 鏍¢獙鏁扮粍鏄惁鍖呭惈鎸囧畾鍊�
-     * 
-     * @param arr 鏁扮粍
-     * @param targetValue 鍊�
-     * @return 鏄惁鍖呭惈
-     */
-    public static boolean arraysContains(String[] arr, String targetValue)
-    {
-        return Arrays.asList(arr).contains(targetValue);
-    }
-
-    /**
-     * 鑾峰彇妯″潡鍚�
-     * 
-     * @param packageName 鍖呭悕
-     * @return 妯″潡鍚�
-     */
-    public static String getModuleName(String packageName)
-    {
-        int lastIndex = packageName.lastIndexOf(".");
-        int nameLength = packageName.length();
-        String moduleName = StringUtils.substring(packageName, lastIndex + 1, nameLength);
-        return moduleName;
-    }
-
-    /**
-     * 鑾峰彇涓氬姟鍚�
-     * 
-     * @param tableName 琛ㄥ悕
-     * @return 涓氬姟鍚�
-     */
-    public static String getBusinessName(String tableName)
-    {
-        int lastIndex = tableName.lastIndexOf("_");
-        int nameLength = tableName.length();
-        String businessName = StringUtils.substring(tableName, lastIndex + 1, nameLength);
-        return businessName;
-    }
-
-    /**
-     * 琛ㄥ悕杞崲鎴怞ava绫诲悕
-     * 
-     * @param tableName 琛ㄥ悕绉�
-     * @return 绫诲悕
-     */
-    public static String convertClassName(String tableName)
-    {
-        boolean autoRemovePre = GenConfig.getAutoRemovePre();
-        String tablePrefix = GenConfig.getTablePrefix();
-        if (autoRemovePre && StringUtils.isNotEmpty(tablePrefix))
-        {
-            String[] searchList = StringUtils.split(tablePrefix, ",");
-            String[] replacementList = emptyList(searchList.length);
-            tableName = StringUtils.replaceEach(tableName, searchList, replacementList);
-        }
-        return StringUtils.convertToCamelCase(tableName);
-    }
-
-    /**
-     * 鍏抽敭瀛楁浛鎹�
-     * 
-     * @param name 闇�瑕佽鏇挎崲鐨勫悕瀛�
-     * @return 鏇挎崲鍚庣殑鍚嶅瓧
-     */
-    public static String replaceText(String text)
-    {
-        return RegExUtils.replaceAll(text, "(?:琛▅鑻ヤ緷)", "");
-    }
-
-    /**
-     * 鑾峰彇鏁版嵁搴撶被鍨嬪瓧娈�
-     * 
-     * @param columnType 鍒楃被鍨�
-     * @return 鎴彇鍚庣殑鍒楃被鍨�
-     */
-    public static String getDbType(String columnType)
-    {
-        if (StringUtils.indexOf(columnType, "(") > 0)
-        {
-            return StringUtils.substringBefore(columnType, "(");
-        }
-        else
-        {
-            return columnType;
-        }
-    }
-
-    /**
-     * 鑾峰彇瀛楁闀垮害
-     * 
-     * @param columnType 鍒楃被鍨�
-     * @return 鎴彇鍚庣殑鍒楃被鍨�
-     */
-    public static Integer getColumnLength(String columnType)
-    {
-        if (StringUtils.indexOf(columnType, "(") > 0)
-        {
-            String length = StringUtils.substringBetween(columnType, "(", ")");
-            return Integer.valueOf(length);
-        }
-        else
-        {
-            return 0;
-        }
-    }
-
-    /**
-     * 鑾峰彇绌烘暟缁勫垪琛�
-     * 
-     * @param length 闀垮害
-     * @return 鏁扮粍淇℃伅
-     */
-    public static String[] emptyList(int length)
-    {
-        String[] values = new String[length];
-        for (int i = 0; i < length; i++)
-        {
-            values[i] = StringUtils.EMPTY;
-        }
-        return values;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/util/VelocityInitializer.java b/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/util/VelocityInitializer.java
deleted file mode 100644
index ac0ada6..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/util/VelocityInitializer.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.dingzhuo.energy.project.tool.gen.util;
-
-import java.util.Properties;
-import org.apache.velocity.app.Velocity;
-import com.dingzhuo.energy.common.constant.Constants;
-
-/**
- * VelocityEngine宸ュ巶
- * 
- * @author RuoYi
- */
-public class VelocityInitializer
-{
-    /**
-     * 鍒濆鍖杤m鏂规硶
-     */
-    public static void initVelocity()
-    {
-        Properties p = new Properties();
-        try
-        {
-            // 鍔犺浇classpath鐩綍涓嬬殑vm鏂囦欢
-            p.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
-            // 瀹氫箟瀛楃闆�
-            p.setProperty(Velocity.ENCODING_DEFAULT, Constants.UTF8);
-            p.setProperty(Velocity.OUTPUT_ENCODING, Constants.UTF8);
-            // 鍒濆鍖朧elocity寮曟搸锛屾寚瀹氶厤缃甈roperties
-            Velocity.init(p);
-        }
-        catch (Exception e)
-        {
-            throw new RuntimeException(e);
-        }
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/util/VelocityUtils.java b/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/util/VelocityUtils.java
deleted file mode 100644
index dc18206..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/tool/gen/util/VelocityUtils.java
+++ /dev/null
@@ -1,283 +0,0 @@
-package com.dingzhuo.energy.project.tool.gen.util;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-
-import com.dingzhuo.energy.project.tool.gen.domain.GenTable;
-import org.apache.velocity.VelocityContext;
-import com.alibaba.fastjson.JSONObject;
-import com.dingzhuo.energy.common.constant.GenConstants;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.project.tool.gen.domain.GenTable;
-import com.dingzhuo.energy.project.tool.gen.domain.GenTableColumn;
-
-public class VelocityUtils
-{
-    /** 椤圭洰绌洪棿璺緞 */
-    private static final String PROJECT_PATH = "main/java";
-
-    /** mybatis绌洪棿璺緞 */
-    private static final String MYBATIS_PATH = "main/resources/mybatis";
-
-    /**
-     * 璁剧疆妯℃澘鍙橀噺淇℃伅
-     * 
-     * @return 妯℃澘鍒楄〃
-     */
-    public static VelocityContext prepareContext(GenTable genTable)
-    {
-        String moduleName = genTable.getModuleName();
-        String businessName = genTable.getBusinessName();
-        String packageName = genTable.getPackageName();
-        String tplCategory = genTable.getTplCategory();
-        String functionName = genTable.getFunctionName();
-
-        VelocityContext velocityContext = new VelocityContext();
-        velocityContext.put("tplCategory", genTable.getTplCategory());
-        velocityContext.put("tableName", genTable.getTableName());
-        velocityContext.put("functionName", StringUtils.isNotEmpty(functionName) ? functionName : "銆愯濉啓鍔熻兘鍚嶇О銆�");
-        velocityContext.put("ClassName", genTable.getClassName());
-        velocityContext.put("className", StringUtils.uncapitalize(genTable.getClassName()));
-        velocityContext.put("moduleName", genTable.getModuleName());
-        velocityContext.put("BusinessName", StringUtils.capitalize(genTable.getBusinessName()));
-        velocityContext.put("businessName", genTable.getBusinessName());
-        velocityContext.put("basePackage", getPackagePrefix(packageName));
-        velocityContext.put("packageName", packageName);
-        velocityContext.put("author", genTable.getFunctionAuthor());
-        velocityContext.put("datetime", DateUtils.getDate());
-        velocityContext.put("pkColumn", genTable.getPkColumn());
-        velocityContext.put("importList", getImportList(genTable.getColumns()));
-        velocityContext.put("permissionPrefix", getPermissionPrefix(moduleName, businessName));
-        velocityContext.put("columns", genTable.getColumns());
-        velocityContext.put("table", genTable);
-        if (GenConstants.TPL_TREE.equals(tplCategory))
-        {
-            setTreeVelocityContext(velocityContext, genTable);
-        }
-        return velocityContext;
-    }
-
-    public static void setTreeVelocityContext(VelocityContext context, GenTable genTable)
-    {
-        String options = genTable.getOptions();
-        JSONObject paramsObj = JSONObject.parseObject(options);
-        String treeCode = getTreecode(paramsObj);
-        String treeParentCode = getTreeParentCode(paramsObj);
-        String treeName = getTreeName(paramsObj);
-
-        context.put("treeCode", treeCode);
-        context.put("treeParentCode", treeParentCode);
-        context.put("treeName", treeName);
-        context.put("expandColumn", getExpandColumn(genTable));
-        if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE))
-        {
-            context.put("tree_parent_code", paramsObj.getString(GenConstants.TREE_PARENT_CODE));
-        }
-        if (paramsObj.containsKey(GenConstants.TREE_NAME))
-        {
-            context.put("tree_name", paramsObj.getString(GenConstants.TREE_NAME));
-        }
-    }
-
-    /**
-     * 鑾峰彇妯℃澘淇℃伅
-     * 
-     * @return 妯℃澘鍒楄〃
-     */
-    public static List<String> getTemplateList(String tplCategory)
-    {
-        List<String> templates = new ArrayList<String>();
-        templates.add("vm/java/domain.java.vm");
-        templates.add("vm/java/mapper.java.vm");
-        templates.add("vm/java/service.java.vm");
-        templates.add("vm/java/serviceImpl.java.vm");
-        templates.add("vm/java/controller.java.vm");
-        templates.add("vm/xml/mapper.xml.vm");
-        templates.add("vm/sql/sql.vm");
-        templates.add("vm/js/api.js.vm");
-        templates.add("vm/vue/index.vue.vm");
-        return templates;
-    }
-
-    /**
-     * 鑾峰彇鏂囦欢鍚�
-     */
-    public static String getFileName(String template, GenTable genTable)
-    {
-        // 鏂囦欢鍚嶇О
-        String fileName = "";
-        // 鍖呰矾寰�
-        String packageName = genTable.getPackageName();
-        // 妯″潡鍚�
-        String moduleName = genTable.getModuleName();
-        // 澶у啓绫诲悕
-        String className = genTable.getClassName();
-        // 涓氬姟鍚嶇О
-        String businessName = genTable.getBusinessName();
-
-        String javaPath = PROJECT_PATH + "/" + StringUtils.replace(packageName, ".", "/");
-        String mybatisPath = MYBATIS_PATH + "/" + moduleName;
-        String vuePath = "vue";
-
-        if (template.contains("domain.java.vm"))
-        {
-            fileName = StringUtils.format("{}/domain/{}.java", javaPath, className);
-        }
-        else if (template.contains("mapper.java.vm"))
-        {
-            fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className);
-        }
-        else if (template.contains("service.java.vm"))
-        {
-            fileName = StringUtils.format("{}/service/I{}Service.java", javaPath, className);
-        }
-        else if (template.contains("serviceImpl.java.vm"))
-        {
-            fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className);
-        }
-        else if (template.contains("controller.java.vm"))
-        {
-            fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className);
-        }
-        else if (template.contains("mapper.xml.vm"))
-        {
-            fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, className);
-        }
-        else if (template.contains("sql.vm"))
-        {
-            fileName = businessName + "Menu.sql";
-        }
-        else if (template.contains("js.vm"))
-        {
-            fileName = StringUtils.format("{}/api/{}/{}.js", vuePath, moduleName, businessName);
-        }
-        else if (template.contains("vue.vm"))
-        {
-            fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName);
-        }
-        return fileName;
-    }
-
-    /**
-     * 鑾峰彇鍖呭墠缂�
-     * 
-     * @param packageName 鍖呭悕绉�
-     * @return 鍖呭墠缂�鍚嶇О
-     */
-    public static String getPackagePrefix(String packageName)
-    {
-        int lastIndex = packageName.lastIndexOf(".");
-        String basePackage = StringUtils.substring(packageName, 0, lastIndex);
-        return basePackage;
-    }
-
-    /**
-     * 鏍规嵁鍒楃被鍨嬭幏鍙栧鍏ュ寘
-     * 
-     * @param column 鍒楅泦鍚�
-     * @return 杩斿洖闇�瑕佸鍏ョ殑鍖呭垪琛�
-     */
-    public static HashSet<String> getImportList(List<GenTableColumn> columns)
-    {
-        HashSet<String> importList = new HashSet<String>();
-        for (GenTableColumn column : columns)
-        {
-            if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType()))
-            {
-                importList.add("java.util.Date");
-            }
-            else if (!column.isSuperColumn() && GenConstants.TYPE_BIGDECIMAL.equals(column.getJavaType()))
-            {
-                importList.add("java.math.BigDecimal");
-            }
-        }
-        return importList;
-    }
-
-    /**
-     * 鑾峰彇鏉冮檺鍓嶇紑
-     * 
-     * @param moduleName 妯″潡鍚嶇О
-     * @param businessName 涓氬姟鍚嶇О
-     * @return 杩斿洖鏉冮檺鍓嶇紑
-     */
-    public static String getPermissionPrefix(String moduleName, String businessName)
-    {
-        return StringUtils.format("{}:{}", moduleName, businessName);
-
-    }
-
-    /**
-     * 鑾峰彇鏍戠紪鐮�
-     * 
-     * @param options 鐢熸垚鍏朵粬閫夐」
-     * @return 鏍戠紪鐮�
-     */
-    public static String getTreecode(JSONObject paramsObj)
-    {
-        if (paramsObj.containsKey(GenConstants.TREE_CODE))
-        {
-            return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_CODE));
-        }
-        return "";
-    }
-
-    /**
-     * 鑾峰彇鏍戠埗缂栫爜
-     * 
-     * @param options 鐢熸垚鍏朵粬閫夐」
-     * @return 鏍戠埗缂栫爜
-     */
-    public static String getTreeParentCode(JSONObject paramsObj)
-    {
-        if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE))
-        {
-            return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_PARENT_CODE));
-        }
-        return "";
-    }
-
-    /**
-     * 鑾峰彇鏍戝悕绉�
-     * 
-     * @param options 鐢熸垚鍏朵粬閫夐」
-     * @return 鏍戝悕绉�
-     */
-    public static String getTreeName(JSONObject paramsObj)
-    {
-        if (paramsObj.containsKey(GenConstants.TREE_NAME))
-        {
-            return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_NAME));
-        }
-        return "";
-    }
-
-    /**
-     * 鑾峰彇闇�瑕佸湪鍝竴鍒椾笂闈㈡樉绀哄睍寮�鎸夐挳
-     * 
-     * @param genTable 涓氬姟琛ㄥ璞�
-     * @return 灞曞紑鎸夐挳鍒楀簭鍙�
-     */
-    public static int getExpandColumn(GenTable genTable)
-    {
-        String options = genTable.getOptions();
-        JSONObject paramsObj = JSONObject.parseObject(options);
-        String treeName = paramsObj.getString(GenConstants.TREE_NAME);
-        int num = 0;
-        for (GenTableColumn column : genTable.getColumns())
-        {
-            if (column.isList())
-            {
-                num++;
-                String columnName = column.getColumnName();
-                if (columnName.equals(treeName))
-                {
-                    break;
-                }
-            }
-        }
-        return num;
-    }
-}
diff --git a/basic/src/main/java/com/dingzhuo/energy/project/tool/swagger/TestController.java b/basic/src/main/java/com/dingzhuo/energy/project/tool/swagger/TestController.java
deleted file mode 100644
index 3350a58..0000000
--- a/basic/src/main/java/com/dingzhuo/energy/project/tool/swagger/TestController.java
+++ /dev/null
@@ -1,178 +0,0 @@
-package com.dingzhuo.energy.project.tool.swagger;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import io.swagger.annotations.ApiOperation;
-
-/**
- * swagger 鐢ㄦ埛娴嬭瘯鏂规硶
- *
- * @author ruoyi
- */
-@Api(value = "鐢ㄦ埛淇℃伅绠$悊",tags = {"鐢ㄦ埛淇℃伅绠$悊"})
-@RestController
-@RequestMapping("/test/user")
-public class TestController extends BaseController
-{
-    private final static Map<Integer, UserEntity> users = new LinkedHashMap<Integer, UserEntity>();
-    {
-        users.put(1, new UserEntity(1, "admin", "admin123", "15888888888"));
-        users.put(2, new UserEntity(2, "ry", "admin123", "15666666666"));
-    }
-
-    @ApiOperation("鑾峰彇鐢ㄦ埛鍒楄〃")
-    @GetMapping("/list")
-    public AjaxResult userList()
-    {
-        List<UserEntity> userList = new ArrayList<UserEntity>(users.values());
-        return AjaxResult.success(userList);
-    }
-
-    @ApiOperation("鑾峰彇鐢ㄦ埛璇︾粏")
-    @ApiImplicitParam(name = "userId", value = "鐢ㄦ埛ID", required = true, dataType = "int", paramType = "path")
-    @GetMapping("/{userId}")
-    public AjaxResult getUser(@PathVariable Integer userId)
-    {
-        if (!users.isEmpty() && users.containsKey(userId))
-        {
-            return AjaxResult.success(users.get(userId));
-        }
-        else
-        {
-            return AjaxResult.error("鐢ㄦ埛涓嶅瓨鍦�");
-        }
-    }
-
-    @ApiOperation("鏂板鐢ㄦ埛")
-    @ApiImplicitParam(name = "userEntity", value = "鏂板鐢ㄦ埛淇℃伅", dataType = "UserEntity")
-    @PostMapping("/save")
-    public AjaxResult save(UserEntity user)
-    {
-        if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
-        {
-            return AjaxResult.error("鐢ㄦ埛ID涓嶈兘涓虹┖");
-        }
-        return AjaxResult.success(users.put(user.getUserId(), user));
-    }
-
-    @ApiOperation("鏇存柊鐢ㄦ埛")
-    @ApiImplicitParam(name = "userEntity", value = "鏂板鐢ㄦ埛淇℃伅", dataType = "UserEntity")
-    @PutMapping("/update")
-    public AjaxResult update(UserEntity user)
-    {
-        if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
-        {
-            return AjaxResult.error("鐢ㄦ埛ID涓嶈兘涓虹┖");
-        }
-        if (users.isEmpty() || !users.containsKey(user.getUserId()))
-        {
-            return AjaxResult.error("鐢ㄦ埛涓嶅瓨鍦�");
-        }
-        users.remove(user.getUserId());
-        return AjaxResult.success(users.put(user.getUserId(), user));
-    }
-
-    @ApiOperation("鍒犻櫎鐢ㄦ埛淇℃伅")
-    @ApiImplicitParam(name = "userId", value = "鐢ㄦ埛ID", required = true, dataType = "int", paramType = "path")
-    @DeleteMapping("/{userId}")
-    public AjaxResult delete(@PathVariable Integer userId)
-    {
-        if (!users.isEmpty() && users.containsKey(userId))
-        {
-            users.remove(userId);
-            return AjaxResult.success();
-        }
-        else
-        {
-            return AjaxResult.error("鐢ㄦ埛涓嶅瓨鍦�");
-        }
-    }
-}
-
-@ApiModel("鐢ㄦ埛瀹炰綋")
-class UserEntity
-{
-    @ApiModelProperty("鐢ㄦ埛ID")
-    private Integer userId;
-
-    @ApiModelProperty("鐢ㄦ埛鍚嶇О")
-    private String username;
-
-    @ApiModelProperty("鐢ㄦ埛瀵嗙爜")
-    private String password;
-
-    @ApiModelProperty("鐢ㄦ埛鎵嬫満")
-    private String mobile;
-
-    public UserEntity()
-    {
-
-    }
-
-    public UserEntity(Integer userId, String username, String password, String mobile)
-    {
-        this.userId = userId;
-        this.username = username;
-        this.password = password;
-        this.mobile = mobile;
-    }
-
-    public Integer getUserId()
-    {
-        return userId;
-    }
-
-    public void setUserId(Integer userId)
-    {
-        this.userId = userId;
-    }
-
-    public String getUsername()
-    {
-        return username;
-    }
-
-    public void setUsername(String username)
-    {
-        this.username = username;
-    }
-
-    public String getPassword()
-    {
-        return password;
-    }
-
-    public void setPassword(String password)
-    {
-        this.password = password;
-    }
-
-    public String getMobile()
-    {
-        return mobile;
-    }
-
-    public void setMobile(String mobile)
-    {
-        this.mobile = mobile;
-    }
-}
diff --git a/basic/src/main/resources/mybatis/monitor/SysLogininforMapper.xml b/basic/src/main/resources/mybatis/monitor/SysLogininforMapper.xml
deleted file mode 100644
index 7614bd7..0000000
--- a/basic/src/main/resources/mybatis/monitor/SysLogininforMapper.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.monitor.mapper.SysLogininforMapper">
-
-	<resultMap type="SysLogininfor" id="SysLogininforResult">
-		<id     property="infoId"        column="info_id"           />
-		<result property="userName"      column="user_name"         />
-		<result property="status"        column="status"            />
-		<result property="ipaddr"        column="ipaddr"            />
-		<result property="loginLocation" column="login_location"    />
-		<result property="browser"       column="browser"           />
-		<result property="os"            column="os"                />
-		<result property="msg"           column="msg"               />
-		<result property="loginTime"     column="login_time"        />
-	</resultMap>
-
-	<insert id="insertLogininfor" parameterType="SysLogininfor">
-		insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time)
-		values (#{userName}, #{status}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{msg}, now())
-	</insert>
-	
-	<select id="selectLogininforList" parameterType="SysLogininfor" resultMap="SysLogininforResult">
-		select info_id, user_name, ipaddr, login_location, browser, os, status, msg, login_time from sys_logininfor
-		<where>
-			<if test="ipaddr != null and ipaddr != ''">
-				AND ipaddr like concat('%', #{ipaddr}, '%')
-			</if>
-			<if test="status != null and status != ''">
-				AND status = #{status}
-			</if>
-			<if test="userName != null and userName != ''">
-				AND user_name like concat('%', #{userName}, '%')
-			</if>
-			<if test="beginTime != null and beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
-				and login_time &gt;= to_date(#{beginTime},'yyyy-mm-dd hh24:mi:ss')
-			</if>
-			<if test="endTime != null and endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
-				and login_time &lt;= to_date(#{endTime},'yyyy-mm-dd hh24:mi:ss')
-			</if>
-		</where>
-	</select>
-	
-	<delete id="deleteLogininforByIds" parameterType="Long">
- 		delete from sys_logininfor where info_id in
- 		<foreach collection="array" item="infoId" open="(" separator="," close=")">
- 			#{infoId}
-        </foreach> 
- 	</delete>
-    
-    <update id="cleanLogininfor">
-        truncate table sys_logininfor
-    </update>
-    
-</mapper> 
diff --git a/basic/src/main/resources/mybatis/monitor/SysOperLogMapper.xml b/basic/src/main/resources/mybatis/monitor/SysOperLogMapper.xml
deleted file mode 100644
index eca509f..0000000
--- a/basic/src/main/resources/mybatis/monitor/SysOperLogMapper.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.monitor.mapper.SysOperLogMapper">
-
-	<resultMap type="SysOperLog" id="SysOperLogResult">
-		<id     property="operId"         column="oper_id"        />
-		<result property="title"          column="title"          />
-		<result property="businessType"   column="business_type"  />
-		<result property="method"         column="method"         />
-		<result property="requestMethod"  column="request_method" />
-		<result property="operatorType"   column="operator_type"  />
-		<result property="operName"       column="oper_name"      />
-		<result property="deptName"       column="dept_name"      />
-		<result property="operUrl"        column="oper_url"       />
-		<result property="operIp"         column="oper_ip"        />
-		<result property="operLocation"   column="oper_location"  />
-		<result property="operParam"      column="oper_param"     />
-		<result property="jsonResult"     column="json_result"    />
-		<result property="status"         column="status"         />
-		<result property="errorMsg"       column="error_msg"      />
-		<result property="operTime"       column="oper_time"      />
-	</resultMap>
-
-	<sql id="selectOperLogVo">
-        select oper_id, title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, oper_time
-        from sys_oper_log
-    </sql>
-    
-	<insert id="insertOperlog" parameterType="SysOperLog">
-		insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, oper_time)
-        values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, now())
-	</insert>
-	
-	<select id="selectOperLogList" parameterType="SysOperLog" resultMap="SysOperLogResult">
-		<include refid="selectOperLogVo"/>
-		<where>
-			<if test="title != null and title != ''">
-				AND title like concat('%', #{title}, '%')
-			</if>
-			<if test="businessType != null">
-				AND business_type = #{businessType}
-			</if>
-			<if test="businessTypes != null and businessTypes.length > 0">
-			    AND business_type in
-			    <foreach collection="businessTypes" item="businessType" open="(" separator="," close=")">
-		 			#{businessType}
-		        </foreach> 
-			</if>
-			<if test="status != null">
-				AND status = #{status}
-			</if>
-			<if test="operName != null and operName != ''">
-				AND oper_name like concat('%', #{operName}, '%')
-			</if>
-			<if test="beginTime != null and beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
-				and oper_time &gt;= to_date(#{beginTime},'yyyy-mm-dd hh24:mi:ss')
-			</if>
-			<if test="endTime != null and endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
-				and oper_time &lt;= to_date(#{endTime},'yyyy-mm-dd hh24:mi:ss')
-			</if>
-		</where>
-	</select>
-	
-	<delete id="deleteOperLogByIds" parameterType="Long">
- 		delete from sys_oper_log where oper_id in
- 		<foreach collection="array" item="operId" open="(" separator="," close=")">
- 			#{operId}
-        </foreach> 
- 	</delete>
- 	
- 	<select id="selectOperLogById" parameterType="Long" resultMap="SysOperLogResult">
-		<include refid="selectOperLogVo"/>
-		where oper_id = #{operId}
-	</select>
-	
-	<update id="cleanOperLog">
-        truncate table sys_oper_log
-    </update>
-
-</mapper> 
diff --git a/basic/src/main/resources/mybatis/system/SysConfigMapper.xml b/basic/src/main/resources/mybatis/system/SysConfigMapper.xml
deleted file mode 100644
index 71ead9a..0000000
--- a/basic/src/main/resources/mybatis/system/SysConfigMapper.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.system.mapper.SysConfigMapper">
-    
-    <resultMap type="SysConfig" id="SysConfigResult">
-    	<id     property="configId"      column="config_id"      />
-        <result property="configName"    column="config_name"    />
-        <result property="configKey"     column="config_key"     />
-        <result property="configValue"   column="config_value"   />
-        <result property="configType"    column="config_type"    />
-        <result property="createBy"      column="create_by"      />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateBy"      column="update_by"      />
-        <result property="updateTime"    column="update_time"    />
-    </resultMap>
-    
-    <sql id="selectConfigVo">
-        select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark 
-		from sys_config
-    </sql>
-    
-    <!-- 鏌ヨ鏉′欢 -->
-	<sql id="sqlwhereSearch">
-		<where>
-			<if test="configId !=null">
-				and config_id = #{configId}
-			</if>
-			<if test="configKey !=null and configKey != ''">
-				and config_key = #{configKey}
-			</if>
-		</where>
-	</sql>
-    
-    <select id="selectConfig" parameterType="SysConfig" resultMap="SysConfigResult">
-        <include refid="selectConfigVo"/>
-        <include refid="sqlwhereSearch"/>
-    </select>
-    
-    <select id="selectConfigList" parameterType="SysConfig" resultMap="SysConfigResult">
-        <include refid="selectConfigVo"/>
-        <where>
-			<if test="configName != null and configName != ''">
-				AND config_name like concat('%', #{configName}, '%')
-			</if>
-			<if test="configType != null and configType != ''">
-				AND config_type = #{configType}
-			</if>
-			<if test="configKey != null and configKey != ''">
-				AND config_key like concat('%', #{configKey}, '%')
-			</if>
-			<if test="beginTime != null and beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
-				and create_time &gt;= to_date(#{beginTime},'yyyy-mm-dd hh24:mi:ss')
-			</if>
-			<if test="endTime != null and endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
-				and create_time &lt;= to_date(#{endTime},'yyyy-mm-dd hh24:mi:ss')
-			</if>
-		</where>
-    </select>
-    
-    <select id="checkConfigKeyUnique" parameterType="String" resultMap="SysConfigResult">
-        <include refid="selectConfigVo"/>
-        where config_key = #{configKey}
-    </select>
-    
-    <insert id="insertConfig" parameterType="SysConfig">
-        insert into sys_config (
-			<if test="configName != null and configName != '' ">config_name,</if>
-			<if test="configKey != null and configKey != '' ">config_key,</if>
-			<if test="configValue != null and configValue != '' ">config_value,</if>
-			<if test="configType != null and configType != '' ">config_type,</if>
-			<if test="createBy != null and createBy != ''">create_by,</if>
-			<if test="remark != null and remark != ''">remark,</if>
- 			create_time
-        )values(
-			<if test="configName != null and configName != ''">#{configName},</if>
-			<if test="configKey != null and configKey != ''">#{configKey},</if>
-			<if test="configValue != null and configValue != ''">#{configValue},</if>
-			<if test="configType != null and configType != ''">#{configType},</if>
-			<if test="createBy != null and createBy != ''">#{createBy},</if>
-			<if test="remark != null and remark != ''">#{remark},</if>
-        now()
-		)
-    </insert>
-	 
-    <update id="updateConfig" parameterType="SysConfig">
-        update sys_config 
-        <set>
-            <if test="configName != null and configName != ''">config_name = #{configName},</if>
-            <if test="configKey != null and configKey != ''">config_key = #{configKey},</if>
-            <if test="configValue != null and configValue != ''">config_value = #{configValue},</if>
-            <if test="configType != null and configType != ''">config_type = #{configType},</if>
-            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="remark != null">remark = #{remark},</if>
- 			update_time = now()
-        </set>
-        where config_id = #{configId}
-    </update>
-	
-    <delete id="deleteConfigById" parameterType="Long">
-        delete from sys_config where config_id = #{configId}
-    </delete>
-    
-    <delete id="deleteConfigByIds" parameterType="Long">
-        delete from sys_config where config_id in 
-        <foreach item="configId" collection="array" open="(" separator="," close=")">
-        	#{configId}
-        </foreach>
-    </delete>
-    
-</mapper>
diff --git a/basic/src/main/resources/mybatis/system/SysDeptMapper.xml b/basic/src/main/resources/mybatis/system/SysDeptMapper.xml
deleted file mode 100644
index 9b5b8e2..0000000
--- a/basic/src/main/resources/mybatis/system/SysDeptMapper.xml
+++ /dev/null
@@ -1,173 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.system.mapper.SysDeptMapper">
-
-    <resultMap type="SysDept" id="SysDeptResult">
-        <id property="deptId" column="dept_id"/>
-        <result property="parentId" column="parent_id"/>
-        <result property="ancestors" column="ancestors"/>
-        <result property="deptName" column="dept_name"/>
-        <result property="orderNum" column="order_num"/>
-        <result property="leader" column="leader"/>
-        <result property="phone" column="phone"/>
-        <result property="email" column="email"/>
-        <result property="status" column="status"/>
-        <result property="delFlag" column="del_flag"/>
-        <result property="parentName" column="parent_name"/>
-        <result property="createBy" column="create_by"/>
-        <result property="createTime" column="create_time"/>
-        <result property="updateBy" column="update_by"/>
-        <result property="updateTime" column="update_time"/>
-    </resultMap>
-
-    <sql id="selectDeptVo">
-        select d.dept_id,
-               d.parent_id,
-               d.ancestors,
-               d.dept_name,
-               d.order_num,
-               d.leader,
-               d.phone,
-               d.email,
-               d.status,
-               d.del_flag,
-               d.create_by,
-               d.create_time
-        from sys_dept d
-    </sql>
-
-    <select id="selectDeptList" parameterType="SysDept" resultMap="SysDeptResult">
-        <include refid="selectDeptVo"/>
-        where d.del_flag = '0'
-        <if test="parentId != null and parentId != 0">
-            AND parent_id = #{parentId}
-        </if>
-        <if test="deptName != null and deptName != ''">
-            AND dept_name like concat('%', #{deptName}, '%')
-        </if>
-        <if test="status != null and status != ''">
-            AND status = #{status}
-        </if>
-        <!-- 鏁版嵁鑼冨洿杩囨护 -->
-        ${dataScope}
-        order by d.parent_id, d.order_num
-    </select>
-
-    <select id="selectDeptListByRoleId" parameterType="Long" resultType="Integer">
-        select d.dept_id, d.parent_id
-        from sys_dept d
-                 left join sys_role_dept rd on d.dept_id = rd.dept_id
-        where rd.role_id = #{roleId}
-          and d.dept_id not in (select d.parent_id
-                                from sys_dept d
-                                         inner join sys_role_dept rd on d.dept_id = rd.dept_id and rd.role_id = #{roleId})
-        order by d.parent_id, d.order_num
-    </select>
-
-    <select id="selectDeptById" parameterType="Long" resultMap="SysDeptResult">
-        <include refid="selectDeptVo"/>
-        where dept_id = #{deptId}
-    </select>
-
-    <select id="checkDeptExistUser" parameterType="Long" resultType="int">
-        select count(1)
-        from sys_user
-        where dept_id = #{deptId}
-          and del_flag = '0'
-    </select>
-
-    <select id="hasChildByDeptId" parameterType="Long" resultType="int">
-        select count(1)
-        from sys_dept
-        where del_flag = '0'
-          and parent_id = #{deptId}
-    </select>
-
-    <select id="selectChildrenDeptById" parameterType="Long" resultMap="SysDeptResult">
-        select *
-        from sys_dept
-        where ancestors = (select ancestors from sys_dept where dept_id = #{deptId}) || #{deptId}
-    </select>
-
-    <select id="checkDeptNameUnique" resultMap="SysDeptResult">
-        <include refid="selectDeptVo"/>
-        where dept_name=#{deptName} and parent_id = #{parentId}
-    </select>
-
-    <insert id="insertDept" parameterType="SysDept">
-        insert into sys_dept(
-        <if test="deptId != null and deptId != 0">dept_id,</if>
-        <if test="parentId != null and parentId != 0">parent_id,</if>
-        <if test="deptName != null and deptName != ''">dept_name,</if>
-        <if test="ancestors != null and ancestors != ''">ancestors,</if>
-        <if test="orderNum != null and orderNum != ''">order_num,</if>
-        <if test="leader != null and leader != ''">leader,</if>
-        <if test="phone != null and phone != ''">phone,</if>
-        <if test="email != null and email != ''">email,</if>
-        <if test="status != null">status,</if>
-        <if test="createBy != null and createBy != ''">create_by,</if>
-        create_time
-        )values(
-        <if test="deptId != null and deptId != 0">#{deptId},</if>
-        <if test="parentId != null and parentId != 0">#{parentId},</if>
-        <if test="deptName != null and deptName != ''">#{deptName},</if>
-        <if test="ancestors != null and ancestors != ''">#{ancestors},</if>
-        <if test="orderNum != null and orderNum != ''">#{orderNum},</if>
-        <if test="leader != null and leader != ''">#{leader},</if>
-        <if test="phone != null and phone != ''">#{phone},</if>
-        <if test="email != null and email != ''">#{email},</if>
-        <if test="status != null">#{status},</if>
-        <if test="createBy != null and createBy != ''">#{createBy},</if>
-        now()
-        )
-    </insert>
-
-    <update id="updateDept" parameterType="SysDept">
-        update sys_dept
-        <set>
-            <if test="parentId != null and parentId != 0">parent_id = #{parentId},</if>
-            <if test="deptName != null and deptName != ''">dept_name = #{deptName},</if>
-            <if test="ancestors != null and ancestors != ''">ancestors = #{ancestors},</if>
-            <if test="orderNum != null and orderNum != ''">order_num = #{orderNum},</if>
-            <if test="leader != null">leader = #{leader},</if>
-            <if test="phone != null">phone = #{phone},</if>
-            <if test="email != null">email = #{email},</if>
-            <if test="status != null and status != ''">status = #{status},</if>
-            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
-            update_time = now()
-        </set>
-        where dept_id = #{deptId}
-    </update>
-
-    <update id="updateDeptChildren" parameterType="java.util.List">
-        update sys_dept set ancestors =
-        <foreach collection="depts" item="item" index="index"
-                 separator=" " open="case dept_id" close="end">
-            when #{item.deptId} then #{item.ancestors}
-        </foreach>
-        where dept_id in
-        <foreach collection="depts" item="item" index="index"
-                 separator="," open="(" close=")">
-            #{item.deptId}
-        </foreach>
-    </update>
-
-    <update id="updateDeptStatus" parameterType="SysDept">
-        update sys_dept
-        <set>
-            <if test="status != null and status != ''">status = #{status},</if>
-            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
-            update_time = now()
-        </set>
-        where dept_id in (${ancestors})
-    </update>
-
-    <delete id="deleteDeptById" parameterType="Long">
-        update sys_dept
-        set del_flag = '2'
-        where dept_id = #{deptId}
-    </delete>
-
-</mapper> 
diff --git a/basic/src/main/resources/mybatis/system/SysDictDataMapper.xml b/basic/src/main/resources/mybatis/system/SysDictDataMapper.xml
deleted file mode 100644
index 188dfc0..0000000
--- a/basic/src/main/resources/mybatis/system/SysDictDataMapper.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.system.mapper.SysDictDataMapper">
-	
-	<resultMap type="SysDictData" id="SysDictDataResult">
-		<id     property="dictCode"   column="dict_code"   />
-		<result property="dictSort"   column="dict_sort"   />
-		<result property="dictLabel"  column="dict_label"  />
-		<result property="dictValue"  column="dict_value"  />
-		<result property="dictType"   column="dict_type"   />
-		<result property="cssClass"   column="css_class"   />
-		<result property="listClass"  column="list_class"  />
-		<result property="isDefault"  column="is_default"  />
-		<result property="status"     column="status"      />
-		<result property="createBy"   column="create_by"   />
-		<result property="createTime" column="create_time" />
-		<result property="updateBy"   column="update_by"   />
-		<result property="updateTime" column="update_time" />
-	</resultMap>
-	
-	<sql id="selectDictDataVo">
-        select dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark 
-		from sys_dict_data
-    </sql>
-
-	<select id="selectDictDataList" parameterType="SysDictData" resultMap="SysDictDataResult">
-	    <include refid="selectDictDataVo"/>
-		<where>
-		    <if test="dictType != null and dictType != ''">
-				AND dict_type = #{dictType}
-			</if>
-			<if test="dictLabel != null and dictLabel != ''">
-				AND dict_label like concat('%', #{dictLabel}, '%')
-			</if>
-			<if test="status != null and status != ''">
-				AND status = #{status}
-			</if>
-			order by dict_sort
-		</where>
-	</select>
-	
-	<select id="selectDictDataByType" parameterType="SysDictData" resultMap="SysDictDataResult">
-		<include refid="selectDictDataVo"/>
-		where status = '0' and dict_type = #{dictType} order by dict_sort asc
-	</select>
-
-	<select id="selectDictLabel" resultType="String">
-		select dict_label from sys_dict_data
-		where dict_type = #{dictType} and dict_value = #{dictValue}
-	</select>
-	
-	<select id="selectDictDataById" parameterType="Long" resultMap="SysDictDataResult">
-		<include refid="selectDictDataVo"/>
-		where dict_code = #{dictCode}
-	</select>
-	
-	<select id="countDictDataByType" resultType="Integer">
-	    select count(1) from sys_dict_data where dict_type=#{dictType}  
-	</select>
-	
-	<delete id="deleteDictDataById" parameterType="Long">
- 		delete from sys_dict_data where dict_code = #{dictCode}
- 	</delete>
- 	
- 	<delete id="deleteDictDataByIds" parameterType="Long">
- 		delete from sys_dict_data where dict_code in
- 		<foreach collection="array" item="dictCode" open="(" separator="," close=")">
- 			#{dictCode}
-        </foreach> 
- 	</delete>
-	
-	<update id="updateDictData" parameterType="SysDictData">
- 		update sys_dict_data
- 		<set>
- 			<if test="dictSort != null and dictSort != ''">dict_sort = #{dictSort},</if>
- 			<if test="dictLabel != null and dictLabel != ''">dict_label = #{dictLabel},</if>
- 			<if test="dictValue != null and dictValue != ''">dict_value = #{dictValue},</if>
- 			<if test="dictType != null and dictType != ''">dict_type = #{dictType},</if>
- 			<if test="cssClass != null">css_class = #{cssClass},</if>
- 			<if test="listClass != null">list_class = #{listClass},</if>
- 			<if test="isDefault != null and isDefault != ''">is_default = #{isDefault},</if>
- 			<if test="status != null">status = #{status},</if>
- 			<if test="remark != null">remark = #{remark},</if>
- 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
- 			update_time = now()
- 		</set>
- 		where dict_code = #{dictCode}
-	</update>
-	
-	<update id="updateDictDataType" parameterType="String">
- 		update sys_dict_data set dict_type = #{newDictType} where dict_type = #{oldDictType}
-	</update>
- 	
- 	<insert id="insertDictData" parameterType="SysDictData">
- 		insert into sys_dict_data(
- 			<if test="dictSort != null and dictSort != ''">dict_sort,</if>
- 			<if test="dictLabel != null and dictLabel != ''">dict_label,</if>
- 			<if test="dictValue != null and dictValue != ''">dict_value,</if>
- 			<if test="dictType != null and dictType != ''">dict_type,</if>
- 			<if test="cssClass != null and cssClass != ''">css_class,</if>
- 			<if test="listClass != null and listClass != ''">list_class,</if>
- 			<if test="isDefault != null and isDefault != ''">is_default,</if>
- 			<if test="status != null">status,</if>
- 			<if test="remark != null and remark != ''">remark,</if>
- 			<if test="createBy != null and createBy != ''">create_by,</if>
- 			create_time
- 		)values(
- 		    <if test="dictSort != null and dictSort != ''">#{dictSort},</if>
- 		    <if test="dictLabel != null and dictLabel != ''">#{dictLabel},</if>
- 			<if test="dictValue != null and dictValue != ''">#{dictValue},</if>
- 			<if test="dictType != null and dictType != ''">#{dictType},</if>
- 			<if test="cssClass != null and cssClass != ''">#{cssClass},</if>
- 			<if test="listClass != null and listClass != ''">#{listClass},</if>
- 			<if test="isDefault != null and isDefault != ''">#{isDefault},</if>
- 			<if test="status != null">#{status},</if>
- 			<if test="remark != null and remark != ''">#{remark},</if>
- 			<if test="createBy != null and createBy != ''">#{createBy},</if>
- 			now()
- 		)
-	</insert>
-	
-</mapper> 
diff --git a/basic/src/main/resources/mybatis/system/SysDictTypeMapper.xml b/basic/src/main/resources/mybatis/system/SysDictTypeMapper.xml
deleted file mode 100644
index 97fd786..0000000
--- a/basic/src/main/resources/mybatis/system/SysDictTypeMapper.xml
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.system.mapper.SysDictTypeMapper">
-
-	<resultMap type="SysDictType" id="SysDictTypeResult">
-		<id     property="dictId"     column="dict_id"     />
-		<result property="dictName"   column="dict_name"   />
-		<result property="dictType"   column="dict_type"   />
-		<result property="status"     column="status"      />
-		<result property="createBy"   column="create_by"   />
-		<result property="createTime" column="create_time" />
-		<result property="updateBy"   column="update_by"   />
-		<result property="updateTime" column="update_time" />
-	</resultMap>
-	
-	<sql id="selectDictTypeVo">
-        select dict_id, dict_name, dict_type, status, create_by, create_time, remark 
-		from sys_dict_type
-    </sql>
-
-	<select id="selectDictTypeList" parameterType="SysDictType" resultMap="SysDictTypeResult">
-	    <include refid="selectDictTypeVo"/>
-		<where>
-		    <if test="dictName != null and dictName != ''">
-				AND dict_name like concat('%', #{dictName}, '%')
-			</if>
-			<if test="status != null and status != ''">
-				AND status = #{status}
-			</if>
-			<if test="dictType != null and dictType != ''">
-				AND dict_type like concat('%', #{dictType}, '%')
-			</if>
-			<if test="beginTime != null and beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
-				and to_char(create_time,'yyyymmdd') &gt;= to_char(to_date(#{beginTime}, 'yyyy-mm-dd'),'yyyymmdd')
-			</if>
-			<if test="endTime != null and endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
-				and to_char(create_time,'yyyymmdd') &lt;= to_char(to_date(#{endTime}, 'yyyy-mm-dd'),'yyyymmdd')
-			</if>
-	    </where>
-	</select>
-	
-	<select id="selectDictTypeAll" resultMap="SysDictTypeResult">
-		<include refid="selectDictTypeVo"/>
-	</select>
-	
-	<select id="selectDictTypeById" parameterType="Long" resultMap="SysDictTypeResult">
-		<include refid="selectDictTypeVo"/>
-		where dict_id = #{dictId}
-	</select>
-	
-	<select id="selectDictTypeByType" parameterType="String" resultMap="SysDictTypeResult">
-		<include refid="selectDictTypeVo"/>
-		where dict_type = #{dictType}
-	</select>
-	
-	<select id="checkDictTypeUnique" parameterType="String" resultMap="SysDictTypeResult">
-		<include refid="selectDictTypeVo"/>
-		where dict_type = #{dictType}
-	</select>
-	
-	<delete id="deleteDictTypeById" parameterType="Long">
- 		delete from sys_dict_type where dict_id = #{dictId}
- 	</delete>
- 	
- 	<delete id="deleteDictTypeByIds" parameterType="Long">
- 		delete from sys_dict_type where dict_id in
- 		<foreach collection="array" item="dictId" open="(" separator="," close=")">
- 			#{dictId}
-        </foreach> 
- 	</delete>
-
- 	<update id="updateDictType" parameterType="SysDictType">
- 		update sys_dict_type
- 		<set>
- 			<if test="dictName != null and dictName != ''">dict_name = #{dictName},</if>
- 			<if test="dictType != null and dictType != ''">dict_type = #{dictType},</if>
- 			<if test="status != null">status = #{status},</if>
- 			<if test="remark != null">remark = #{remark},</if>
- 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
- 			update_time = now()
- 		</set>
- 		where dict_id = #{dictId}
-	</update>
- 	
- 	<insert id="insertDictType" parameterType="SysDictType">
- 		insert into sys_dict_type(
- 			<if test="dictName != null and dictName != ''">dict_name,</if>
- 			<if test="dictType != null and dictType != ''">dict_type,</if>
- 			<if test="status != null">status,</if>
- 			<if test="remark != null and remark != ''">remark,</if>
- 			<if test="createBy != null and createBy != ''">create_by,</if>
- 			create_time
- 		)values(
- 			<if test="dictName != null and dictName != ''">#{dictName},</if>
- 			<if test="dictType != null and dictType != ''">#{dictType},</if>
- 			<if test="status != null">#{status},</if>
- 			<if test="remark != null and remark != ''">#{remark},</if>
- 			<if test="createBy != null and createBy != ''">#{createBy},</if>
-			now()
- 		)
-	</insert>
-	
-</mapper> 
diff --git a/basic/src/main/resources/mybatis/system/SysMenuMapper.xml b/basic/src/main/resources/mybatis/system/SysMenuMapper.xml
deleted file mode 100644
index 6488063..0000000
--- a/basic/src/main/resources/mybatis/system/SysMenuMapper.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-		PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-		"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.system.mapper.SysMenuMapper">
-
-	<resultMap type="SysMenu" id="SysMenuResult">
-		<id     property="menuId"         column="menu_id"        />
-		<result property="menuName"       column="menu_name"      />
-		<result property="parentName"     column="parent_name"    />
-		<result property="parentId"       column="parent_id"      />
-		<result property="orderNum"       column="order_num"      />
-		<result property="path"           column="path"           />
-		<result property="component"      column="component"      />
-		<result property="isFrame"        column="is_frame"       />
-		<result property="menuType"       column="menu_type"      />
-		<result property="visible"        column="visible"        />
-		<result property="perms"          column="perms"          />
-		<result property="icon"           column="icon"           />
-		<result property="createBy"       column="create_by"      />
-		<result property="createTime"     column="create_time"    />
-		<result property="updateTime"     column="update_time"    />
-		<result property="updateBy"       column="update_by"      />
-		<result property="remark"         column="remark"         />
-		<result property="parameter"         column="page_parameter"         />
-	</resultMap>
-
-	<sql id="selectMenuVo">
-        select menu_id, menu_name, parent_id, order_num, path, component, is_frame, menu_type, visible, COALESCE(perms,'') as perms, icon, create_time,page_parameter
-		from sys_menu
-    </sql>
-    
-    <select id="selectMenuList" parameterType="SysMenu" resultMap="SysMenuResult">
-		<include refid="selectMenuVo"/>
-		<where>
-			<if test="menuName != null and menuName != ''">
-				AND menu_name like concat('%', #{menuName}, '%')
-			</if>
-			<if test="visible != null and visible != ''">
-				AND visible = #{visible}
-			</if>
-		</where>
-		order by parent_id, order_num
-	</select>
-	
-	<select id="selectMenuTreeAll" resultMap="SysMenuResult">
-		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.visible, COALESCE(m.perms,'') as perms, m.is_frame, m.menu_type, m.icon, m.order_num, m.create_time,m.page_parameter
-		from sys_menu m where m.menu_type in ('M', 'C') and m.visible = '0'
-		order by m.parent_id, m.order_num
-	</select>
-    
-    <select id="selectMenuTreeByUserId" parameterType="Long" resultMap="SysMenuResult">
-		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.visible, COALESCE(m.perms,'') as perms, m.is_frame, m.menu_type, m.icon, m.order_num, m.create_time,m.page_parameter
-		from sys_menu m
-			 left join sys_role_menu rm on m.menu_id = rm.menu_id
-			 left join sys_user_role ur on rm.role_id = ur.role_id
-			 left join sys_role ro on ur.role_id = ro.role_id
-			 left join sys_user u on ur.user_id = u.user_id
-		where u.user_id = #{userId} and m.menu_type in ('M', 'C') and m.visible = '0'  AND ro.status = '0'
-		order by m.parent_id, m.order_num
-	</select>
-	
-	<select id="selectMenuListByRoleId" parameterType="Long" resultType="Integer">
-		select m.menu_id, m.parent_id
-		from sys_menu m
-            left join sys_role_menu rm on m.menu_id = rm.menu_id
-        where rm.role_id = #{roleId}
-        	and m.menu_id not in (select m.parent_id from sys_menu m inner join sys_role_menu rm on m.menu_id = rm.menu_id and rm.role_id = #{roleId})
-		order by m.parent_id, m.order_num
-	</select>
-	
-	<select id="selectMenuPerms" resultType="String">
-		select distinct m.perms
-		from sys_menu m
-			 left join sys_role_menu rm on m.menu_id = rm.menu_id
-			 left join sys_user_role ur on rm.role_id = ur.role_id
-	</select>
-
-	<select id="selectMenuPermsByUserId" parameterType="Long" resultType="String">
-		select distinct m.perms
-		from sys_menu m
-			 left join sys_role_menu rm on m.menu_id = rm.menu_id
-			 left join sys_user_role ur on rm.role_id = ur.role_id
-		where ur.user_id = #{userId}
-	</select>
-	
-	<select id="selectMenuById" parameterType="Long" resultMap="SysMenuResult">
-		<include refid="selectMenuVo"/>
-		where menu_id = #{menuId}
-	</select>
-	
-	<select id="hasChildByMenuId" resultType="Integer">
-	    select count(1) from sys_menu where parent_id = #{menuId}  
-	</select>
-	
-	<select id="checkMenuNameUnique" parameterType="SysMenu" resultMap="SysMenuResult">
-		<include refid="selectMenuVo"/>
-		where menu_name=#{menuName} and parent_id = #{parentId}
-	</select>
-	
-	<update id="updateMenu" parameterType="SysMenu">
-		update sys_menu
-		<set>
-			<if test="menuName != null and menuName != ''">menu_name = #{menuName},</if>
-			<if test="parentId != null and parentId != 0">parent_id = #{parentId},</if>
-			<if test="orderNum != null and orderNum != ''">order_num = #{orderNum},</if>
-			<if test="path != null and path != ''">path = #{path},</if>
-			<if test="component != null and component != ''">component = #{component},</if>
-			<if test="isFrame != null and isFrame != ''">is_frame = #{isFrame},</if>
-			<if test="menuType != null and menuType != ''">menu_type = #{menuType},</if>
-			<if test="visible != null">visible = #{visible},</if>
-			<if test="perms !=null">perms = #{perms},</if>
-			<if test="icon !=null and icon != ''">icon = #{icon},</if>
-			<if test="remark != null and remark != ''">remark = #{remark},</if>
-			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
-			<if test="parameter != null and parameter != ''">page_parameter = #{parameter},</if>
-			update_time = now()
-		</set>
-		where menu_id = #{menuId}
-	</update>
-
-	<insert id="insertMenu" parameterType="SysMenu">
-		insert into sys_menu(
-		<if test="menuId != null and menuId != 0">menu_id,</if>
-		<if test="parentId != null and parentId != 0">parent_id,</if>
-		<if test="menuName != null and menuName != ''">menu_name,</if>
-		<if test="orderNum != null and orderNum != ''">order_num,</if>
-		<if test="path != null and path != ''">path,</if>
-		<if test="component != null and component != ''">component,</if>
-		<if test="isFrame != null and isFrame != ''">is_frame,</if>
-		<if test="menuType != null and menuType != ''">menu_type,</if>
-		<if test="visible != null">visible,</if>
-		<if test="perms !=null and perms != ''">perms,</if>
-		<if test="icon != null and icon != ''">icon,</if>
-		<if test="remark != null and remark != ''">remark,</if>
-		<if test="createBy != null and createBy != ''">create_by,</if>
-		<if test="parameter != null and parameter != ''">page_parameter,</if>
-		create_time
-		)values(
-		<if test="menuId != null and menuId != 0">#{menuId},</if>
-		<if test="parentId != null and parentId != 0">#{parentId},</if>
-		<if test="menuName != null and menuName != ''">#{menuName},</if>
-		<if test="orderNum != null and orderNum != ''">#{orderNum},</if>
-		<if test="path != null and path != ''">#{path},</if>
-		<if test="component != null and component != ''">#{component},</if>
-		<if test="isFrame != null and isFrame != ''">#{isFrame},</if>
-		<if test="menuType != null and menuType != ''">#{menuType},</if>
-		<if test="visible != null">#{visible},</if>
-		<if test="perms !=null and perms != ''">#{perms},</if>
-		<if test="icon != null and icon != ''">#{icon},</if>
-		<if test="remark != null and remark != ''">#{remark},</if>
-		<if test="createBy != null and createBy != ''">#{createBy},</if>
-		<if test="parameter != null and parameter != ''">#{parameter},</if>
-		now()
-		)
-	</insert>
-	
-	<delete id="deleteMenuById" parameterType="Long">
-	    delete from sys_menu where menu_id = #{menuId}
-	</delete>
-
-</mapper> 
diff --git a/basic/src/main/resources/mybatis/system/SysNoticeMapper.xml b/basic/src/main/resources/mybatis/system/SysNoticeMapper.xml
deleted file mode 100644
index ffb93b8..0000000
--- a/basic/src/main/resources/mybatis/system/SysNoticeMapper.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.system.mapper.SysNoticeMapper">
-    
-    <resultMap type="SysNotice" id="SysNoticeResult">
-        <result property="noticeId"       column="notice_id"       />
-        <result property="noticeTitle"    column="notice_title"    />
-        <result property="noticeType"     column="notice_type"     />
-        <result property="noticeContent"  column="notice_content"  />
-        <result property="status"         column="status"          />
-        <result property="createBy"       column="create_by"       />
-        <result property="createTime"     column="create_time"     />
-        <result property="updateBy"       column="update_by"       />
-        <result property="updateTime"     column="update_time"     />
-        <result property="remark"         column="remark"          />
-    </resultMap>
-    
-    <sql id="selectNoticeVo">
-        select notice_id, notice_title, notice_type, notice_content, status, create_by, create_time, update_by, update_time, remark 
-		from sys_notice
-    </sql>
-    
-    <select id="selectNoticeById" parameterType="Long" resultMap="SysNoticeResult">
-        <include refid="selectNoticeVo"/>
-        where notice_id = #{noticeId}
-    </select>
-    
-    <select id="selectNoticeList" parameterType="SysNotice" resultMap="SysNoticeResult">
-        <include refid="selectNoticeVo"/>
-        <where>
-			<if test="noticeTitle != null and noticeTitle != ''">
-				AND notice_title like concat('%', #{noticeTitle}, '%')
-			</if>
-			<if test="noticeType != null and noticeType != ''">
-				AND notice_type = #{noticeType}
-			</if>
-			<if test="createBy != null and createBy != ''">
-				AND create_by like concat('%', #{createBy}, '%')
-			</if>
-		</where>
-    </select>
-    
-    <insert id="insertNotice" parameterType="SysNotice">
-        insert into sys_notice (
-			<if test="noticeTitle != null and noticeTitle != '' ">notice_title, </if>
-			<if test="noticeType != null and noticeType != '' ">notice_type, </if>
-			<if test="noticeContent != null and noticeContent != '' ">notice_content, </if>
-			<if test="status != null and status != '' ">status, </if>
-			<if test="remark != null and remark != ''">remark,</if>
- 			<if test="createBy != null and createBy != ''">create_by,</if>
- 			create_time
- 		)values(
-			<if test="noticeTitle != null and noticeTitle != ''">#{noticeTitle}, </if>
-			<if test="noticeType != null and noticeType != ''">#{noticeType}, </if>
-			<if test="noticeContent != null and noticeContent != ''">#{noticeContent}, </if>
-			<if test="status != null and status != ''">#{status}, </if>
-			<if test="remark != null and remark != ''">#{remark},</if>
- 			<if test="createBy != null and createBy != ''">#{createBy},</if>
-            now()
-		)
-    </insert>
-	 
-    <update id="updateNotice" parameterType="SysNotice">
-        update sys_notice 
-        <set>
-            <if test="noticeTitle != null and noticeTitle != ''">notice_title = #{noticeTitle}, </if>
-            <if test="noticeType != null and noticeType != ''">notice_type = #{noticeType}, </if>
-            <if test="noticeContent != null">notice_content = #{noticeContent}, </if>
-            <if test="status != null and status != ''">status = #{status}, </if>
-            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
- 			update_time = now()
-        </set>
-        where notice_id = #{noticeId}
-    </update>
-	
-    <delete id="deleteNoticeById" parameterType="Long">
-        delete from sys_notice where notice_id = #{noticeId}
-    </delete>
-    
-    <delete id="deleteNoticeByIds" parameterType="Long">
-        delete from sys_notice where notice_id in 
-        <foreach item="noticeId" collection="array" open="(" separator="," close=")">
-            #{noticeId}
-        </foreach>
-    </delete>
-    
-</mapper>
diff --git a/basic/src/main/resources/mybatis/system/SysPostMapper.xml b/basic/src/main/resources/mybatis/system/SysPostMapper.xml
deleted file mode 100644
index 694375a..0000000
--- a/basic/src/main/resources/mybatis/system/SysPostMapper.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.system.mapper.SysPostMapper">
-
-	<resultMap type="SysPost" id="SysPostResult">
-		<id     property="postId"        column="post_id"       />
-		<result property="postCode"      column="post_code"     />
-		<result property="postName"      column="post_name"     />
-		<result property="postSort"      column="post_sort"     />
-		<result property="status"        column="status"        />
-		<result property="createBy"      column="create_by"     />
-		<result property="createTime"    column="create_time"   />
-		<result property="updateBy"      column="update_by"     />
-		<result property="updateTime"    column="update_time"   />
-		<result property="remark"        column="remark"        />
-	</resultMap>
-	
-	<sql id="selectPostVo">
-        select post_id, post_code, post_name, post_sort, status, create_by, create_time, remark
-		from sys_post
-    </sql>
-	
-	<select id="selectPostList" parameterType="SysPost" resultMap="SysPostResult">
-	    <include refid="selectPostVo"/>
-		<where>
-			<if test="postCode != null and postCode != ''">
-				AND post_code like concat('%', #{postCode}, '%')
-			</if>
-			<if test="status != null and status != ''">
-				AND status = #{status}
-			</if>
-			<if test="postName != null and postName != ''">
-				AND post_name like concat('%', #{postName}, '%')
-			</if>
-		</where>
-		order by post_sort
-	</select>
-	
-	<select id="selectPostAll" resultMap="SysPostResult">
-		<include refid="selectPostVo"/>
-	</select>
-	
-	<select id="selectPostById" parameterType="Long" resultMap="SysPostResult">
-		<include refid="selectPostVo"/>
-		where post_id = #{postId}
-	</select>
-	
-	<select id="selectPostListByUserId" parameterType="Long" resultType="Integer">
-		select p.post_id
-        from sys_post p
-	        left join sys_user_post up on up.post_id = p.post_id
-	        left join sys_user u on u.user_id = up.user_id
-	    where u.user_id = #{userId}
-	</select>
-	
-	<select id="selectPostsByUserName" parameterType="String" resultMap="SysPostResult">
-		select p.post_id, p.post_name, p.post_code
-		from sys_post p
-			 left join sys_user_post up on up.post_id = p.post_id
-			 left join sys_user u on u.user_id = up.user_id
-		where u.user_name = #{userName}
-	</select>
-	
-	<select id="checkPostNameUnique" parameterType="String" resultMap="SysPostResult">
-		<include refid="selectPostVo"/>
-		 where post_name=#{postName}
-	</select>
-	
-	<select id="checkPostCodeUnique" parameterType="String" resultMap="SysPostResult">
-		<include refid="selectPostVo"/>
-		 where post_code=#{postCode}
-	</select>
-	
-	<update id="updatePost" parameterType="SysPost">
- 		update sys_post
- 		<set>
- 			<if test="postCode != null and postCode != ''">post_code = #{postCode},</if>
- 			<if test="postName != null and postName != ''">post_name = #{postName},</if>
- 			<if test="postSort != null and postSort != ''">post_sort = #{postSort},</if>
- 			<if test="status != null and status != ''">status = #{status},</if>
- 			<if test="remark != null">remark = #{remark},</if>
- 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
- 			update_time = now()
- 		</set>
- 		where post_id = #{postId}
-	</update>
- 	
- 	<insert id="insertPost" parameterType="SysPost" useGeneratedKeys="true" keyProperty="postId">
- 		insert into sys_post(
- 			<if test="postId != null and postId != 0">post_id,</if>
- 			<if test="postCode != null and postCode != ''">post_code,</if>
- 			<if test="postName != null and postName != ''">post_name,</if>
- 			<if test="postSort != null and postSort != ''">post_sort,</if>
- 			<if test="status != null and status != ''">status,</if>
- 			<if test="remark != null and remark != ''">remark,</if>
- 			<if test="createBy != null and createBy != ''">create_by,</if>
- 			create_time
- 		)values(
- 			<if test="postId != null and postId != 0">#{postId},</if>
- 			<if test="postCode != null and postCode != ''">#{postCode},</if>
- 			<if test="postName != null and postName != ''">#{postName},</if>
- 			<if test="postSort != null and postSort != ''">#{postSort},</if>
- 			<if test="status != null and status != ''">#{status},</if>
- 			<if test="remark != null and remark != ''">#{remark},</if>
- 			<if test="createBy != null and createBy != ''">#{createBy},</if>
-			now()
- 		)
-	</insert>
-	
-	<delete id="deletePostById" parameterType="Long">
-		delete from sys_post where post_id = #{postId}
-	</delete>
-	
-	<delete id="deletePostByIds" parameterType="Long">
- 		delete from sys_post where post_id in
- 		<foreach collection="array" item="postId" open="(" separator="," close=")">
- 			#{postId}
-        </foreach> 
- 	</delete>
-
-</mapper> 
diff --git a/basic/src/main/resources/mybatis/system/SysRoleDeptMapper.xml b/basic/src/main/resources/mybatis/system/SysRoleDeptMapper.xml
deleted file mode 100644
index 04d54a8..0000000
--- a/basic/src/main/resources/mybatis/system/SysRoleDeptMapper.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.system.mapper.SysRoleDeptMapper">
-
-	<resultMap type="SysRoleDept" id="SysRoleDeptResult">
-		<result property="roleId"     column="role_id"      />
-		<result property="deptId"     column="dept_id"      />
-	</resultMap>
-
-	<delete id="deleteRoleDeptByRoleId" parameterType="Long">
-		delete from sys_role_dept where role_id=#{roleId}
-	</delete>
-	
-	<select id="selectCountRoleDeptByDeptId" resultType="Integer">
-	    select count(1) from sys_role_dept where dept_id=#{deptId}
-	</select>
-	
-	<delete id="deleteRoleDept" parameterType="Long">
- 		delete from sys_role_dept where role_id in
- 		<foreach collection="array" item="roleId" open="(" separator="," close=")">
- 			#{roleId}
-        </foreach> 
- 	</delete>
-	
-	<insert id="batchRoleDept">
-		insert into sys_role_dept(role_id, dept_id) values
-		<foreach item="item" index="index" collection="list" separator=",">
-			(#{item.roleId},#{item.deptId})
-		</foreach>
-	</insert>
-	
-</mapper> 
diff --git a/basic/src/main/resources/mybatis/system/SysRoleMapper.xml b/basic/src/main/resources/mybatis/system/SysRoleMapper.xml
deleted file mode 100644
index 5b9bb33..0000000
--- a/basic/src/main/resources/mybatis/system/SysRoleMapper.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.system.mapper.SysRoleMapper">
-
-	<resultMap type="SysRole" id="SysRoleResult">
-		<id     property="roleId"       column="role_id"        />
-		<result property="roleName"     column="role_name"      />
-		<result property="roleKey"      column="role_key"       />
-		<result property="roleSort"     column="role_sort"      />
-		<result property="dataScope"    column="data_scope"     />
-		<result property="status"       column="status"         />
-		<result property="delFlag"      column="del_flag"       />
-		<result property="createBy"     column="create_by"      />
-		<result property="createTime"   column="create_time"    />
-		<result property="updateBy"     column="update_by"      />
-		<result property="updateTime"   column="update_time"    />
-		<result property="remark"       column="remark"         />
-	</resultMap>
-	
-	<sql id="selectRoleVo">
-	    select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope,
-            r.status, r.del_flag, r.create_time, r.remark 
-        from sys_role r
-	        left join sys_user_role ur on ur.role_id = r.role_id
-	        left join sys_user u on u.user_id = ur.user_id
-	        left join sys_dept d on u.dept_id = d.dept_id
-    </sql>
-    
-    <select id="selectRoleList" parameterType="SysRole" resultMap="SysRoleResult">
-		<include refid="selectRoleVo"/>
-		where r.del_flag = '0'
-		<if test="roleName != null and roleName != ''">
-			AND r.role_name like concat('%', #{roleName}, '%')
-		</if>
-		<if test="status != null and status != ''">
-			AND r.status = #{status}
-		</if>
-		<if test="roleKey != null and roleKey != ''">
-			AND r.role_key like concat('%', #{roleKey}, '%')
-		</if>
-		<if test="beginTime != null and beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
-			and to_char(r.create_time,'yyyymmdd') &gt;= to_char(to_date(#{beginTime}, 'yyyy-mm-dd'),'yyyymmdd')
-		</if>
-		<if test="endTime != null and endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
-			and to_char(r.create_time,'yyyymmdd') &lt;= to_char(to_date(#{endTime}, 'yyyy-mm-dd'),'yyyymmdd')
-		</if>
-		<!-- 鏁版嵁鑼冨洿杩囨护 -->
-		${dataScope}
-		order by r.role_sort
-	</select>
-    
-	<select id="selectRolePermissionByUserId" parameterType="Long" resultMap="SysRoleResult">
-		<include refid="selectRoleVo"/>
-		WHERE r.del_flag = '0' and ur.user_id = #{userId}
-	</select>
-	
-	<select id="selectRoleAll" resultMap="SysRoleResult">
-		<include refid="selectRoleVo"/>
-		order by r.role_sort
-	</select>
-	
-	<select id="selectRoleListByUserId" parameterType="Long" resultType="Integer">
-		select r.role_id
-        from sys_role r
-	        left join sys_user_role ur on ur.role_id = r.role_id
-	        left join sys_user u on u.user_id = ur.user_id
-	    where u.user_id = #{userId}
-	</select>
-	
-	<select id="selectRoleById" parameterType="Long" resultMap="SysRoleResult">
-		<include refid="selectRoleVo"/>
-		where r.role_id = #{roleId}
-	</select>
-	
-	<select id="selectRolesByUserName" parameterType="String" resultMap="SysRoleResult">
-		<include refid="selectRoleVo"/>
-		WHERE r.del_flag = '0' and u.user_name = #{userName}
-	</select>
-	
-	<select id="checkRoleNameUnique" parameterType="String" resultMap="SysRoleResult">
-		<include refid="selectRoleVo"/>
-		 where r.role_name=#{roleName}
-	</select>
-	
-	<select id="checkRoleKeyUnique" parameterType="String" resultMap="SysRoleResult">
-		<include refid="selectRoleVo"/>
-		 where r.role_key=#{roleKey}
-	</select>
-	
- 	<insert id="insertRole" parameterType="SysRole" useGeneratedKeys="true" keyProperty="roleId">
- 		insert into sys_role(
- 			<if test="roleId != null and roleId != 0">role_id,</if>
- 			<if test="roleName != null and roleName != ''">role_name,</if>
- 			<if test="roleKey != null and roleKey != ''">role_key,</if>
- 			<if test="roleSort != null and roleSort != ''">role_sort,</if>
- 			<if test="dataScope != null and dataScope != ''">data_scope,</if>
- 			<if test="status != null and status != ''">status,</if>
- 			<if test="remark != null and remark != ''">remark,</if>
- 			<if test="createBy != null and createBy != ''">create_by,</if>
- 			create_time
- 		)values(
- 			<if test="roleId != null and roleId != 0">#{roleId},</if>
- 			<if test="roleName != null and roleName != ''">#{roleName},</if>
- 			<if test="roleKey != null and roleKey != ''">#{roleKey},</if>
- 			<if test="roleSort != null and roleSort != ''">#{roleSort},</if>
- 			<if test="dataScope != null and dataScope != ''">#{dataScope},</if>
- 			<if test="status != null and status != ''">#{status},</if>
- 			<if test="remark != null and remark != ''">#{remark},</if>
- 			<if test="createBy != null and createBy != ''">#{createBy},</if>
-			now()
- 		)
-	</insert>
-	
-	<update id="updateRole" parameterType="SysRole">
- 		update sys_role
- 		<set>
- 			<if test="roleName != null and roleName != ''">role_name = #{roleName},</if>
- 			<if test="roleKey != null and roleKey != ''">role_key = #{roleKey},</if>
- 			<if test="roleSort != null and roleSort != ''">role_sort = #{roleSort},</if>
- 			<if test="dataScope != null and dataScope != ''">data_scope = #{dataScope},</if>
- 			<if test="status != null and status != ''">status = #{status},</if>
- 			<if test="remark != null">remark = #{remark},</if>
- 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
- 			update_time = now()
- 		</set>
- 		where role_id = #{roleId}
-	</update>
-	
-	<update id="updateRoleStatus" parameterType="SysRole">
- 		update sys_user set status = #{status} where user_id = #{userId}
-	</update>
-	
-	<delete id="deleteRoleById" parameterType="Long">
- 		delete from sys_role where role_id = #{roleId}
- 	</delete>
- 	
- 	<delete id="deleteRoleByIds" parameterType="Long">
- 	    update sys_role set del_flag = '2' where role_id in
- 		<foreach collection="array" item="roleId" open="(" separator="," close=")">
- 			#{roleId}
-        </foreach> 
- 	</delete>
- 	
-</mapper> 
diff --git a/basic/src/main/resources/mybatis/system/SysRoleMenuMapper.xml b/basic/src/main/resources/mybatis/system/SysRoleMenuMapper.xml
deleted file mode 100644
index 7f8af09..0000000
--- a/basic/src/main/resources/mybatis/system/SysRoleMenuMapper.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.system.mapper.SysRoleMenuMapper">
-
-	<resultMap type="SysRoleMenu" id="SysRoleMenuResult">
-		<result property="roleId"     column="role_id"      />
-		<result property="menuId"     column="menu_id"      />
-	</resultMap>
-	
-	<select id="checkMenuExistRole" resultType="Integer">
-	    select count(1) from sys_role_menu where menu_id = #{menuId}  
-	</select>
-
-	<delete id="deleteRoleMenuByRoleId" parameterType="Long">
-		delete from sys_role_menu where role_id=#{roleId}
-	</delete>
-	
-	<insert id="batchRoleMenu">
-		insert into sys_role_menu(role_id, menu_id) values
-		<foreach item="item" index="index" collection="list" separator=",">
-			(#{item.roleId},#{item.menuId})
-		</foreach>
-	</insert>
-	
-</mapper> 
diff --git a/basic/src/main/resources/mybatis/system/SysUserMapper.xml b/basic/src/main/resources/mybatis/system/SysUserMapper.xml
deleted file mode 100644
index 7e4e59a..0000000
--- a/basic/src/main/resources/mybatis/system/SysUserMapper.xml
+++ /dev/null
@@ -1,226 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.system.mapper.SysUserMapper">
-
-    <resultMap type="SysUser" id="SysUserResult">
-        <id property="userId" column="user_id"/>
-        <result property="deptId" column="dept_id"/>
-        <result property="userName" column="user_name"/>
-        <result property="nickName" column="nick_name"/>
-        <result property="email" column="email"/>
-        <result property="phonenumber" column="phonenumber"/>
-        <result property="sex" column="sex"/>
-        <result property="avatar" column="avatar"/>
-        <result property="password" column="password"/>
-        <result property="status" column="status"/>
-        <result property="delFlag" column="del_flag"/>
-        <result property="loginIp" column="login_ip"/>
-        <result property="loginDate" column="login_date"/>
-        <result property="createBy" column="create_by"/>
-        <result property="createTime" column="create_time"/>
-        <result property="updateBy" column="update_by"/>
-        <result property="updateTime" column="update_time"/>
-        <result property="remark" column="remark"/>
-        <association property="dept" column="dept_id" javaType="SysDept" resultMap="deptResult"/>
-        <collection property="roles" javaType="java.util.List" resultMap="RoleResult"/>
-    </resultMap>
-
-    <resultMap id="deptResult" type="SysDept">
-        <id property="deptId" column="dept_id"/>
-        <result property="parentId" column="parent_id"/>
-        <result property="deptName" column="dept_name"/>
-        <result property="orderNum" column="order_num"/>
-        <result property="leader" column="leader"/>
-        <result property="status" column="dept_status"/>
-    </resultMap>
-
-    <resultMap id="RoleResult" type="SysRole">
-        <id property="roleId" column="role_id"/>
-        <result property="roleName" column="role_name"/>
-        <result property="roleKey" column="role_key"/>
-        <result property="roleSort" column="role_sort"/>
-        <result property="dataScope" column="data_scope"/>
-        <result property="status" column="role_status"/>
-    </resultMap>
-
-    <sql id="selectUserVo">
-        select u.user_id,
-               u.dept_id,
-               u.user_name,
-               u.nick_name,
-               u.email,
-               u.avatar,
-               u.phonenumber,
-               u.password,
-               u.sex,
-               u.status,
-               u.del_flag,
-               u.login_ip,
-               u.login_date,
-               u.create_by,
-               u.create_time,
-               u.remark,
-               d.dept_id,
-               d.parent_id,
-               d.dept_name,
-               d.order_num,
-               d.leader,
-               d.status as dept_status,
-               r.role_id,
-               r.role_name,
-               r.role_key,
-               r.role_sort,
-               r.data_scope,
-               r.status as role_status
-        from sys_user u
-                 left join sys_dept d on u.dept_id = d.dept_id
-                 left join sys_user_role ur on u.user_id = ur.user_id
-                 left join sys_role r on r.role_id = ur.role_id
-    </sql>
-
-    <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
-        select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex,
-        u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from
-        sys_user u
-        left join sys_dept d on u.dept_id = d.dept_id
-        where u.del_flag = '0'
-        <if test="userName != null and userName != ''">
-            AND u.user_name like concat('%', #{userName}, '%')
-        </if>
-        <if test="status != null and status != ''">
-            AND u.status = #{status}
-        </if>
-        <if test="phonenumber != null and phonenumber != ''">
-            AND u.phonenumber like concat('%', #{phonenumber}, '%')
-        </if>
-        <if test="beginTime != null and beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
-            AND to_char(u.create_time,'yyyymmdd') &gt;= to_char(to_date(#{beginTime}, 'yyyy-mm-dd'),'yyyymmdd')
-        </if>
-        <if test="endTime != null and endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
-            AND to_char(u.create_time,'yyyymmdd') &lt;= to_char(to_date(#{endTime}, 'yyyy-mm-dd'),'yyyymmdd')
-        </if>
-        <if test="deptId != null and deptId != 0">
-            AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE ancestors = (select
-            ancestors from sys_dept where dept_id = #{deptId}) || #{deptId} ))
-        </if>
-        <!-- 鏁版嵁鑼冨洿杩囨护 -->
-        ${dataScope}
-    </select>
-
-    <select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
-        <include refid="selectUserVo"/>
-        where u.user_name = #{userName}
-    </select>
-
-    <select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
-        <include refid="selectUserVo"/>
-        where u.user_id = #{userId}
-    </select>
-
-    <select id="checkUserNameUnique" parameterType="String" resultType="int">
-        select count(1)
-        from sys_user
-        where user_name = #{userName}
-    </select>
-
-    <select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
-        select user_id, phonenumber
-        from sys_user
-        where phonenumber = #{phonenumber}
-    </select>
-
-    <select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
-        select user_id, email
-        from sys_user
-        where email = #{email}
-    </select>
-
-    <insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
-        insert into sys_user(
-        <if test="userId != null and userId != 0">user_id,</if>
-        <if test="deptId != null and deptId != 0">dept_id,</if>
-        <if test="userName != null and userName != ''">user_name,</if>
-        <if test="nickName != null and nickName != ''">nick_name,</if>
-        <if test="email != null and email != ''">email,</if>
-        <if test="avatar != null and avatar != ''">avatar,</if>
-        <if test="phonenumber != null and phonenumber != ''">phonenumber,</if>
-        <if test="sex != null and sex != ''">sex,</if>
-        <if test="password != null and password != ''">password,</if>
-        <if test="status != null and status != ''">status,</if>
-        <if test="createBy != null and createBy != ''">create_by,</if>
-        <if test="remark != null and remark != ''">remark,</if>
-        create_time
-        )values(
-        <if test="userId != null and userId != ''">#{userId},</if>
-        <if test="deptId != null and deptId != ''">#{deptId},</if>
-        <if test="userName != null and userName != ''">#{userName},</if>
-        <if test="nickName != null and nickName != ''">#{nickName},</if>
-        <if test="email != null and email != ''">#{email},</if>
-        <if test="avatar != null and avatar != ''">#{avatar},</if>
-        <if test="phonenumber != null and phonenumber != ''">#{phonenumber},</if>
-        <if test="sex != null and sex != ''">#{sex},</if>
-        <if test="password != null and password != ''">#{password},</if>
-        <if test="status != null and status != ''">#{status},</if>
-        <if test="createBy != null and createBy != ''">#{createBy},</if>
-        <if test="remark != null and remark != ''">#{remark},</if>
-        now()
-        )
-    </insert>
-
-    <update id="updateUser" parameterType="SysUser">
-        update sys_user
-        <set>
-            <if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
-            <if test="userName != null and userName != ''">user_name = #{userName},</if>
-            <if test="nickName != null and nickName != ''">nick_name = #{nickName},</if>
-            <if test="email != null and email != ''">email = #{email},</if>
-            <if test="phonenumber != null and phonenumber != ''">phonenumber = #{phonenumber},</if>
-            <if test="sex != null and sex != ''">sex = #{sex},</if>
-            <if test="avatar != null and avatar != ''">avatar = #{avatar},</if>
-            <if test="password != null and password != ''">password = #{password},</if>
-            <if test="status != null and status != ''">status = #{status},</if>
-            <if test="loginIp != null and loginIp != ''">login_ip = #{loginIp},</if>
-            <if test="loginDate != null">login_date = #{loginDate},</if>
-            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="remark != null">remark = #{remark},</if>
-            update_time = now()
-        </set>
-        where user_id = #{userId}
-    </update>
-
-    <update id="updateUserStatus" parameterType="SysUser">
-        update sys_user
-        set status = #{status}
-        where user_id = #{userId}
-    </update>
-
-    <update id="updateUserAvatar" parameterType="SysUser">
-        update sys_user
-        set avatar = #{avatar}
-        where user_name = #{userName}
-    </update>
-
-    <update id="resetUserPwd" parameterType="SysUser">
-        update sys_user
-        set password = #{password}
-        where user_name = #{userName}
-    </update>
-
-    <delete id="deleteUserById" parameterType="Long">
-        delete
-        from sys_user
-        where user_id = #{userId}
-    </delete>
-
-    <delete id="deleteUserByIds" parameterType="Long">
-        delete
-        from sys_user
-        where user_id in
-        <foreach collection="array" item="userId" open="(" separator="," close=")">
-            #{userId}
-        </foreach>
-    </delete>
-
-</mapper> 
diff --git a/basic/src/main/resources/mybatis/system/SysUserPostMapper.xml b/basic/src/main/resources/mybatis/system/SysUserPostMapper.xml
deleted file mode 100644
index 0701d87..0000000
--- a/basic/src/main/resources/mybatis/system/SysUserPostMapper.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.system.mapper.SysUserPostMapper">
-
-	<resultMap type="SysUserPost" id="SysUserPostResult">
-		<result property="userId"     column="user_id"      />
-		<result property="postId"     column="post_id"      />
-	</resultMap>
-
-	<delete id="deleteUserPostByUserId" parameterType="Long">
-		delete from sys_user_post where user_id=#{userId}
-	</delete>
-	
-	<select id="countUserPostById" resultType="Integer">
-	    select count(1) from sys_user_post where post_id=#{postId}  
-	</select>
-	
-	<delete id="deleteUserPost" parameterType="Long">
- 		delete from sys_user_post where user_id in
- 		<foreach collection="array" item="userId" open="(" separator="," close=")">
- 			#{userId}
-        </foreach> 
- 	</delete>
-	
-	<insert id="batchUserPost">
-		insert into sys_user_post(user_id, post_id) values
-		<foreach item="item" index="index" collection="list" separator=",">
-			(#{item.userId},#{item.postId})
-		</foreach>
-	</insert>
-	
-</mapper> 
diff --git a/basic/src/main/resources/mybatis/system/SysUserRoleMapper.xml b/basic/src/main/resources/mybatis/system/SysUserRoleMapper.xml
deleted file mode 100644
index ffe8206..0000000
--- a/basic/src/main/resources/mybatis/system/SysUserRoleMapper.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.system.mapper.SysUserRoleMapper">
-
-	<resultMap type="SysUserRole" id="SysUserRoleResult">
-		<result property="userId"     column="user_id"      />
-		<result property="roleId"     column="role_id"      />
-	</resultMap>
-
-	<delete id="deleteUserRoleByUserId" parameterType="Long">
-		delete from sys_user_role where user_id=#{userId}
-	</delete>
-	
-	<select id="countUserRoleByRoleId" resultType="Integer">
-	    select count(1) from sys_user_role where role_id=#{roleId}  
-	</select>
-	
-	<delete id="deleteUserRole" parameterType="Long">
- 		delete from sys_user_role where user_id in
- 		<foreach collection="array" item="userId" open="(" separator="," close=")">
- 			#{userId}
-        </foreach> 
- 	</delete>
-	
-	<insert id="batchUserRole">
-		insert into sys_user_role(user_id, role_id) values
-		<foreach item="item" index="index" collection="list" separator=",">
-			(#{item.userId},#{item.roleId})
-		</foreach>
-	</insert>
-	
-	<delete id="deleteUserRoleInfo" parameterType="SysUserRole">
-		delete from sys_user_role where user_id=#{userId} and role_id=#{roleId}
-	</delete>
-	
-	<delete id="deleteUserRoleInfos">
-	    delete from sys_user_role where role_id=#{roleId} and user_id in
- 	    <foreach collection="userIds" item="userId" open="(" separator="," close=")">
- 	        #{userId}
-            </foreach> 
-	</delete>
-</mapper> 
diff --git a/basic/src/main/resources/mybatis/tool/GenTableColumnMapper.xml b/basic/src/main/resources/mybatis/tool/GenTableColumnMapper.xml
deleted file mode 100644
index 7ccdb94..0000000
--- a/basic/src/main/resources/mybatis/tool/GenTableColumnMapper.xml
+++ /dev/null
@@ -1,154 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.tool.gen.mapper.GenTableColumnMapper">
-
-    <resultMap type="GenTableColumn" id="GenTableColumnResult">
-        <id property="columnId" column="column_id"/>
-        <result property="tableId" column="table_id"/>
-        <result property="columnName" column="column_name"/>
-        <result property="columnComment" column="column_comment"/>
-        <result property="columnType" column="column_type"/>
-        <result property="javaType" column="java_type"/>
-        <result property="javaField" column="java_field"/>
-        <result property="isPk" column="is_pk"/>
-        <result property="isIncrement" column="is_increment"/>
-        <result property="isRequired" column="is_required"/>
-        <result property="isInsert" column="is_insert"/>
-        <result property="isEdit" column="is_edit"/>
-        <result property="isList" column="is_list"/>
-        <result property="isQuery" column="is_query"/>
-        <result property="queryType" column="query_type"/>
-        <result property="htmlType" column="html_type"/>
-        <result property="dictType" column="dict_type"/>
-        <result property="sort" column="sort"/>
-        <result property="createBy" column="create_by"/>
-        <result property="createTime" column="create_time"/>
-        <result property="updateBy" column="update_by"/>
-        <result property="updateTime" column="update_time"/>
-    </resultMap>
-
-    <sql id="selectGenTableColumnVo">
-        select column_id,
-               table_id,
-               column_name,
-               column_comment,
-               column_type,
-               java_type,
-               java_field,
-               is_pk,
-               is_increment,
-               is_required,
-               is_insert,
-               is_edit,
-               is_list,
-               is_query,
-               query_type,
-               html_type,
-               dict_type,
-               sort,
-               create_by,
-               create_time,
-               update_by,
-               update_time
-        from gen_table_column
-    </sql>
-
-    <select id="selectGenTableColumnListByTableId" parameterType="Long" resultMap="GenTableColumnResult">
-        <include refid="selectGenTableColumnVo"/>
-        where table_id = #{tableId}
-        order by sort
-    </select>
-
-    <select id="selectDbTableColumnsByName" parameterType="String" resultMap="GenTableColumnResult">
-        SELECT A.attname                                 AS COLUMN_NAME,
-               col_description(A.attrelid, A.attnum)     AS column_comment,
-               T.typname                                 AS column_type,
-               CASE col.is_nullable WHEN 'NO' THEN 1 END AS is_required,
-               CASE col.is_identity WHEN 'NO' THEN 0 END AS is_pk,
-               col.ordinal_position                      AS sort,
-               '0'                                       AS is_increment
-        FROM pg_class C
-                 LEFT JOIN pg_attribute A ON A.attrelid = C.oid
-                 LEFT JOIN pg_type T ON A.atttypid = T.oid
-                 LEFT JOIN information_schema.COLUMNS col ON col.COLUMN_NAME = A.attname
-        WHERE C.relname = #{tableName}
-          AND col.TABLE_NAME = #{tableName}
-          AND A.attnum > 0
-        order by col.ordinal_position asc
-    </select>
-
-    <insert id="insertGenTableColumn" parameterType="GenTableColumn" useGeneratedKeys="true" keyProperty="columnId">
-        insert into gen_table_column (
-        <if test="tableId != null and tableId != ''">table_id,</if>
-        <if test="columnName != null and columnName != ''">column_name,</if>
-        <if test="columnComment != null and columnComment != ''">column_comment,</if>
-        <if test="columnType != null and columnType != ''">column_type,</if>
-        <if test="javaType != null and javaType != ''">java_type,</if>
-        <if test="javaField != null  and javaField != ''">java_field,</if>
-        <if test="isPk != null and isPk != ''">is_pk,</if>
-        <if test="isIncrement != null and isIncrement != ''">is_increment,</if>
-        <if test="isRequired != null and isRequired != ''">is_required,</if>
-        <if test="isInsert != null and isInsert != ''">is_insert,</if>
-        <if test="isEdit != null and isEdit != ''">is_edit,</if>
-        <if test="isList != null and isList != ''">is_list,</if>
-        <if test="isQuery != null and isQuery != ''">is_query,</if>
-        <if test="queryType != null and queryType != ''">query_type,</if>
-        <if test="htmlType != null and htmlType != ''">html_type,</if>
-        <if test="dictType != null and dictType != ''">dict_type,</if>
-        <if test="sort != null">sort,</if>
-        <if test="createBy != null and createBy != ''">create_by,</if>
-        create_time
-        )values(
-        <if test="tableId != null and tableId != ''">#{tableId},</if>
-        <if test="columnName != null and columnName != ''">#{columnName},</if>
-        <if test="columnComment != null and columnComment != ''">#{columnComment},</if>
-        <if test="columnType != null and columnType != ''">#{columnType},</if>
-        <if test="javaType != null and javaType != ''">#{javaType},</if>
-        <if test="javaField != null and javaField != ''">#{javaField},</if>
-        <if test="isPk != null and isPk != ''">#{isPk},</if>
-        <if test="isIncrement != null and isIncrement != ''">#{isIncrement},</if>
-        <if test="isRequired != null and isRequired != ''">#{isRequired},</if>
-        <if test="isInsert != null and isInsert != ''">#{isInsert},</if>
-        <if test="isEdit != null and isEdit != ''">#{isEdit},</if>
-        <if test="isList != null and isList != ''">#{isList},</if>
-        <if test="isQuery != null and isQuery != ''">#{isQuery},</if>
-        <if test="queryType != null and queryType != ''">#{queryType},</if>
-        <if test="htmlType != null and htmlType != ''">#{htmlType},</if>
-        <if test="dictType != null and dictType != ''">#{dictType},</if>
-        <if test="sort != null">#{sort},</if>
-        <if test="createBy != null and createBy != ''">#{createBy},</if>
-        now()
-        )
-    </insert>
-
-    <update id="updateGenTableColumn" parameterType="GenTableColumn">
-        update gen_table_column
-        <set>
-            column_comment = #{columnComment},
-            java_type = #{javaType},
-            java_field = #{javaField},
-            is_insert = #{isInsert},
-            is_edit = #{isEdit},
-            is_list = #{isList},
-            is_query = #{isQuery},
-            is_required = #{isRequired},
-            query_type = #{queryType},
-            html_type = #{htmlType},
-            dict_type = #{dictType},
-            sort = #{sort},
-            update_by = #{updateBy},
-            update_time = now()
-        </set>
-        where column_id = #{columnId}
-    </update>
-
-    <delete id="deleteGenTableColumnByIds" parameterType="Long">
-        delete from gen_table_column where table_id in
-        <foreach collection="array" item="tableId" open="(" separator="," close=")">
-            #{tableId}
-        </foreach>
-    </delete>
-
-</mapper>
diff --git a/basic/src/main/resources/mybatis/tool/GenTableMapper.xml b/basic/src/main/resources/mybatis/tool/GenTableMapper.xml
deleted file mode 100644
index 100302c..0000000
--- a/basic/src/main/resources/mybatis/tool/GenTableMapper.xml
+++ /dev/null
@@ -1,172 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.tool.gen.mapper.GenTableMapper">
-
-    <resultMap type="com.dingzhuo.energy.project.tool.gen.domain.GenTable" id="GenTableResult">
-        <id property="tableId" column="table_id"/>
-        <result property="tableName" column="table_name"/>
-        <result property="tableComment" column="table_comment"/>
-        <result property="className" column="class_name"/>
-        <result property="tplCategory" column="tpl_category"/>
-        <result property="packageName" column="package_name"/>
-        <result property="moduleName" column="module_name"/>
-        <result property="businessName" column="business_name"/>
-        <result property="functionName" column="function_name"/>
-        <result property="functionAuthor" column="function_author"/>
-        <result property="options" column="options"/>
-        <result property="createBy" column="create_by"/>
-        <result property="createTime" column="create_time"/>
-        <result property="updateBy" column="update_by"/>
-        <result property="updateTime" column="update_time"/>
-        <result property="remark" column="remark"/>
-        <collection property="columns" javaType="java.util.List" resultMap="GenTableColumnResult"/>
-    </resultMap>
-
-    <resultMap type="com.dingzhuo.energy.project.tool.gen.domain.GenTableColumn" id="GenTableColumnResult">
-        <id property="columnId" column="column_id"/>
-        <result property="tableId" column="table_id"/>
-        <result property="columnName" column="column_name"/>
-        <result property="columnComment" column="column_comment"/>
-        <result property="columnType" column="column_type"/>
-        <result property="javaType" column="java_type"/>
-        <result property="javaField" column="java_field"/>
-        <result property="isPk" column="is_pk"/>
-        <result property="isIncrement" column="is_increment"/>
-        <result property="isRequired" column="is_required"/>
-        <result property="isInsert" column="is_insert"/>
-        <result property="isEdit" column="is_edit"/>
-        <result property="isList" column="is_list"/>
-        <result property="isQuery" column="is_query"/>
-        <result property="queryType" column="query_type"/>
-        <result property="htmlType" column="html_type"/>
-        <result property="dictType" column="dict_type"/>
-        <result property="sort" column="sort"/>
-        <result property="createBy" column="create_by"/>
-        <result property="createTime" column="create_time"/>
-        <result property="updateBy" column="update_by"/>
-        <result property="updateTime" column="update_time"/>
-    </resultMap>
-
-    <sql id="selectGenTableVo">
-        select table_id, table_name, table_comment, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, options, create_by, create_time, update_by, update_time, remark from gen_table
-    </sql>
-
-    <select id="selectGenTableList" parameterType="com.dingzhuo.energy.project.tool.gen.domain.GenTable"
-            resultMap="GenTableResult">
-        <include refid="selectGenTableVo"/>
-        <where>
-            <if test="tableName != null and tableName != ''">
-                AND lower(table_name) like lower(concat('%', #{tableName}, '%'))
-            </if>
-            <if test="tableComment != null and tableComment != ''">
-                AND lower(table_comment) like lower(concat('%', #{tableComment}, '%'))
-            </if>
-            <!-- 			<if test="beginTime != null and beginTime != ''">寮�濮嬫椂闂存绱� -->
-            <!-- 				AND date_format(create_time,'%y%m%d') &gt;= date_format(#{beginTime},'%y%m%d') -->
-            <!-- 			</if> -->
-            <!-- 			<if test="endTime != null and endTime != ''">缁撴潫鏃堕棿妫�绱� -->
-            <!-- 				AND date_format(create_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d') -->
-            <!-- 			</if> -->
-        </where>
-        order by table_id
-    </select>
-
-    <select id="selectDbTableList" parameterType="com.dingzhuo.energy.project.tool.gen.domain.GenTable"
-            resultMap="GenTableResult">
-        SELECT tablename AS table_name FROM pg_tables WHERE schemaname='public'
-        AND tablename NOT LIKE 'qrtz_%' AND tablename NOT LIKE 'gen_%'
-        AND tablename NOT IN (select table_name from gen_table)
-        <if test="tableName != null and tableName != ''">
-            AND lower(tablename) like lower(concat('%', #{tableName}, '%'))
-        </if>
-    </select>
-
-    <select id="selectDbTableListByNames" resultMap="GenTableResult">
-        SELECT C.relname AS table_name,CAST (obj_description (relfilenode,'pg_class') AS VARCHAR) AS table_comment,null
-        AS create_time,null AS update_time FROM pg_class C WHERE
-        C.relname IN (SELECT tablename FROM pg_tables WHERE schemaname='public' AND POSITION ('_2' IN tablename)=0)
-        and C.relname NOT LIKE 'qrtz_%' and C.relname NOT LIKE 'gen_%'
-        and C.relname in
-        <foreach collection="array" item="name" open="(" separator="," close=")">
-            #{name}
-        </foreach>
-        ORDER BY C.relname
-    </select>
-
-    <select id="selectGenTableById" parameterType="Long" resultMap="GenTableResult">
-	    SELECT t.table_id, t.table_name, t.table_comment, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.options, t.remark,
-			   c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
-		FROM gen_table t
-			 LEFT JOIN gen_table_column c ON t.table_id = c.table_id
-		where t.table_id = #{tableId}
-	</select>
-
-    <select id="selectGenTableByName" parameterType="String" resultMap="GenTableResult">
-	    SELECT t.table_id, t.table_name, t.table_comment, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.options, t.remark,
-			   c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
-		FROM gen_table t
-			 LEFT JOIN gen_table_column c ON t.table_id = c.table_id
-		where t.table_name = #{tableName}
-	</select>
-
-    <insert id="insertGenTable" parameterType="com.dingzhuo.energy.project.tool.gen.domain.GenTable"
-            useGeneratedKeys="true" keyProperty="tableId">
-        insert into gen_table (
-        <if test="tableName != null">table_name,</if>
-        <if test="tableComment != null and tableComment != ''">table_comment,</if>
-        <if test="className != null and className != ''">class_name,</if>
-        <if test="tplCategory != null and tplCategory != ''">tpl_category,</if>
-        <if test="packageName != null and packageName != ''">package_name,</if>
-        <if test="moduleName != null and moduleName != ''">module_name,</if>
-        <if test="businessName != null and businessName != ''">business_name,</if>
-        <if test="functionName != null and functionName != ''">function_name,</if>
-        <if test="functionAuthor != null and functionAuthor != ''">function_author,</if>
-        <if test="remark != null and remark != ''">remark,</if>
-        <if test="createBy != null and createBy != ''">create_by,</if>
-        create_time
-        )values(
-        <if test="tableName != null">#{tableName},</if>
-        <if test="tableComment != null and tableComment != ''">#{tableComment},</if>
-        <if test="className != null and className != ''">#{className},</if>
-        <if test="tplCategory != null and tplCategory != ''">#{tplCategory},</if>
-        <if test="packageName != null and packageName != ''">#{packageName},</if>
-        <if test="moduleName != null and moduleName != ''">#{moduleName},</if>
-        <if test="businessName != null and businessName != ''">#{businessName},</if>
-        <if test="functionName != null and functionName != ''">#{functionName},</if>
-        <if test="functionAuthor != null and functionAuthor != ''">#{functionAuthor},</if>
-        <if test="remark != null and remark != ''">#{remark},</if>
-        <if test="createBy != null and createBy != ''">#{createBy},</if>
-        now()
-        )
-    </insert>
-
-    <update id="updateGenTable" parameterType="com.dingzhuo.energy.project.tool.gen.domain.GenTable">
-        update gen_table
-        <set>
-            <if test="tableName != null">table_name = #{tableName},</if>
-            <if test="tableComment != null and tableComment != ''">table_comment = #{tableComment},</if>
-            <if test="className != null and className != ''">class_name = #{className},</if>
-            <if test="functionAuthor != null and functionAuthor != ''">function_author = #{functionAuthor},</if>
-            <if test="tplCategory != null and tplCategory != ''">tpl_category = #{tplCategory},</if>
-            <if test="packageName != null and packageName != ''">package_name = #{packageName},</if>
-            <if test="moduleName != null and moduleName != ''">module_name = #{moduleName},</if>
-            <if test="businessName != null and businessName != ''">business_name = #{businessName},</if>
-            <if test="functionName != null and functionName != ''">function_name = #{functionName},</if>
-            <if test="options != null and options != ''">options = #{options},</if>
-            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="remark != null">remark = #{remark},</if>
-            update_time = now()
-        </set>
-        where table_id = #{tableId}
-    </update>
-
-    <delete id="deleteGenTableByIds" parameterType="Long">
-        delete from gen_table where table_id in
-        <foreach collection="array" item="tableId" open="(" separator="," close=")">
-            #{tableId}
-        </foreach>
-    </delete>
-
-</mapper> 
diff --git a/bin/clean.bat b/bin/clean.bat
new file mode 100644
index 0000000..24c0974
--- /dev/null
+++ b/bin/clean.bat
@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [信息] 清理工程target生成路径。
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+call mvn clean
+
+pause
\ No newline at end of file
diff --git a/bin/package.bat b/bin/package.bat
new file mode 100644
index 0000000..c693ec0
--- /dev/null
+++ b/bin/package.bat
@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [信息] 打包Web工程,生成war/jar包文件。
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+call mvn clean package -Dmaven.test.skip=true
+
+pause
\ No newline at end of file
diff --git a/bin/run.bat b/bin/run.bat
new file mode 100644
index 0000000..a325f37
--- /dev/null
+++ b/bin/run.bat
@@ -0,0 +1,14 @@
+@echo off
+echo.
+echo [锟斤拷息] 使锟斤拷Jar锟斤拷锟斤拷锟斤拷锟斤拷Web锟斤拷锟教★拷
+echo.
+
+cd %~dp0
+cd ../admin-admin/target
+
+set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
+
+java -jar %JAVA_OPTS% admin-admin.jar
+
+cd bin
+pause
\ No newline at end of file
diff --git a/compute-engine/.gitignore b/compute-engine/.gitignore
deleted file mode 100644
index a2a3040..0000000
--- a/compute-engine/.gitignore
+++ /dev/null
@@ -1,31 +0,0 @@
-HELP.md
-target/
-!.mvn/wrapper/maven-wrapper.jar
-!**/src/main/**
-!**/src/test/**
-
-### STS ###
-.apt_generated
-.classpath
-.factorypath
-.project
-.settings
-.springBeans
-.sts4-cache
-
-### IntelliJ IDEA ###
-.idea
-*.iws
-*.iml
-*.ipr
-
-### NetBeans ###
-/nbproject/private/
-/nbbuild/
-/dist/
-/nbdist/
-/.nb-gradle/
-build/
-
-### VS Code ###
-.vscode/
diff --git a/compute-engine/.mvn/wrapper/MavenWrapperDownloader.java b/compute-engine/.mvn/wrapper/MavenWrapperDownloader.java
deleted file mode 100644
index 753a5e2..0000000
--- a/compute-engine/.mvn/wrapper/MavenWrapperDownloader.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright 2007-present the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.net.*;
-import java.io.*;
-import java.nio.channels.*;
-import java.util.Properties;
-
-public class MavenWrapperDownloader {
-
-  private static final String WRAPPER_VERSION = "0.5.6";
-  /**
-   * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
-   */
-  private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
-      + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
-
-  /**
-   * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
-   * use instead of the default one.
-   */
-  private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
-      ".mvn/wrapper/maven-wrapper.properties";
-
-  /**
-   * Path where the maven-wrapper.jar will be saved to.
-   */
-  private static final String MAVEN_WRAPPER_JAR_PATH =
-      ".mvn/wrapper/maven-wrapper.jar";
-
-  /**
-   * Name of the property which should be used to override the default download url for the wrapper.
-   */
-  private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
-
-  public static void main(String args[]) {
-    System.out.println("- Downloader started");
-    File baseDirectory = new File(args[0]);
-    System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
-
-    // If the maven-wrapper.properties exists, read it and check if it contains a custom
-    // wrapperUrl parameter.
-    File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
-    String url = DEFAULT_DOWNLOAD_URL;
-    if (mavenWrapperPropertyFile.exists()) {
-      FileInputStream mavenWrapperPropertyFileInputStream = null;
-      try {
-        mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
-        Properties mavenWrapperProperties = new Properties();
-        mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
-        url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
-      } catch (IOException e) {
-        System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
-      } finally {
-        try {
-          if (mavenWrapperPropertyFileInputStream != null) {
-            mavenWrapperPropertyFileInputStream.close();
-          }
-        } catch (IOException e) {
-          // Ignore ...
-        }
-      }
-    }
-    System.out.println("- Downloading from: " + url);
-
-    File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
-    if (!outputFile.getParentFile().exists()) {
-      if (!outputFile.getParentFile().mkdirs()) {
-        System.out.println(
-            "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
-      }
-    }
-    System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
-    try {
-      downloadFileFromURL(url, outputFile);
-      System.out.println("Done");
-      System.exit(0);
-    } catch (Throwable e) {
-      System.out.println("- Error downloading");
-      e.printStackTrace();
-      System.exit(1);
-    }
-  }
-
-  private static void downloadFileFromURL(String urlString, File destination) throws Exception {
-    if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
-      String username = System.getenv("MVNW_USERNAME");
-      char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
-      Authenticator.setDefault(new Authenticator() {
-        @Override
-        protected PasswordAuthentication getPasswordAuthentication() {
-          return new PasswordAuthentication(username, password);
-        }
-      });
-    }
-    URL website = new URL(urlString);
-    ReadableByteChannel rbc;
-    rbc = Channels.newChannel(website.openStream());
-    FileOutputStream fos = new FileOutputStream(destination);
-    fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
-    fos.close();
-    rbc.close();
-  }
-
-}
diff --git a/compute-engine/.mvn/wrapper/maven-wrapper.jar b/compute-engine/.mvn/wrapper/maven-wrapper.jar
deleted file mode 100644
index 2cc7d4a..0000000
--- a/compute-engine/.mvn/wrapper/maven-wrapper.jar
+++ /dev/null
Binary files differ
diff --git a/compute-engine/.mvn/wrapper/maven-wrapper.properties b/compute-engine/.mvn/wrapper/maven-wrapper.properties
deleted file mode 100644
index 642d572..0000000
--- a/compute-engine/.mvn/wrapper/maven-wrapper.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
-wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
diff --git a/compute-engine/mvnw b/compute-engine/mvnw
deleted file mode 100644
index a16b543..0000000
--- a/compute-engine/mvnw
+++ /dev/null
@@ -1,310 +0,0 @@
-#!/bin/sh
-# ----------------------------------------------------------------------------
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#    https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-# ----------------------------------------------------------------------------
-
-# ----------------------------------------------------------------------------
-# Maven Start Up Batch script
-#
-# Required ENV vars:
-# ------------------
-#   JAVA_HOME - location of a JDK home dir
-#
-# Optional ENV vars
-# -----------------
-#   M2_HOME - location of maven2's installed home dir
-#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
-#     e.g. to debug Maven itself, use
-#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-# ----------------------------------------------------------------------------
-
-if [ -z "$MAVEN_SKIP_RC" ] ; then
-
-  if [ -f /etc/mavenrc ] ; then
-    . /etc/mavenrc
-  fi
-
-  if [ -f "$HOME/.mavenrc" ] ; then
-    . "$HOME/.mavenrc"
-  fi
-
-fi
-
-# OS specific support.  $var _must_ be set to either true or false.
-cygwin=false;
-darwin=false;
-mingw=false
-case "`uname`" in
-  CYGWIN*) cygwin=true ;;
-  MINGW*) mingw=true;;
-  Darwin*) darwin=true
-    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
-    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
-    if [ -z "$JAVA_HOME" ]; then
-      if [ -x "/usr/libexec/java_home" ]; then
-        export JAVA_HOME="`/usr/libexec/java_home`"
-      else
-        export JAVA_HOME="/Library/Java/Home"
-      fi
-    fi
-    ;;
-esac
-
-if [ -z "$JAVA_HOME" ] ; then
-  if [ -r /etc/gentoo-release ] ; then
-    JAVA_HOME=`java-config --jre-home`
-  fi
-fi
-
-if [ -z "$M2_HOME" ] ; then
-  ## resolve links - $0 may be a link to maven's home
-  PRG="$0"
-
-  # need this for relative symlinks
-  while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-      PRG="$link"
-    else
-      PRG="`dirname "$PRG"`/$link"
-    fi
-  done
-
-  saveddir=`pwd`
-
-  M2_HOME=`dirname "$PRG"`/..
-
-  # make it fully qualified
-  M2_HOME=`cd "$M2_HOME" && pwd`
-
-  cd "$saveddir"
-  # echo Using m2 at $M2_HOME
-fi
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched
-if $cygwin ; then
-  [ -n "$M2_HOME" ] &&
-    M2_HOME=`cygpath --unix "$M2_HOME"`
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-  [ -n "$CLASSPATH" ] &&
-    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
-fi
-
-# For Mingw, ensure paths are in UNIX format before anything is touched
-if $mingw ; then
-  [ -n "$M2_HOME" ] &&
-    M2_HOME="`(cd "$M2_HOME"; pwd)`"
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
-fi
-
-if [ -z "$JAVA_HOME" ]; then
-  javaExecutable="`which javac`"
-  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
-    # readlink(1) is not available as standard on Solaris 10.
-    readLink=`which readlink`
-    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
-      if $darwin ; then
-        javaHome="`dirname \"$javaExecutable\"`"
-        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
-      else
-        javaExecutable="`readlink -f \"$javaExecutable\"`"
-      fi
-      javaHome="`dirname \"$javaExecutable\"`"
-      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
-      JAVA_HOME="$javaHome"
-      export JAVA_HOME
-    fi
-  fi
-fi
-
-if [ -z "$JAVACMD" ] ; then
-  if [ -n "$JAVA_HOME"  ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-      # IBM's JDK on AIX uses strange locations for the executables
-      JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-      JAVACMD="$JAVA_HOME/bin/java"
-    fi
-  else
-    JAVACMD="`which java`"
-  fi
-fi
-
-if [ ! -x "$JAVACMD" ] ; then
-  echo "Error: JAVA_HOME is not defined correctly." >&2
-  echo "  We cannot execute $JAVACMD" >&2
-  exit 1
-fi
-
-if [ -z "$JAVA_HOME" ] ; then
-  echo "Warning: JAVA_HOME environment variable is not set."
-fi
-
-CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
-
-# traverses directory structure from process work directory to filesystem root
-# first directory with .mvn subdirectory is considered project base directory
-find_maven_basedir() {
-
-  if [ -z "$1" ]
-  then
-    echo "Path not specified to find_maven_basedir"
-    return 1
-  fi
-
-  basedir="$1"
-  wdir="$1"
-  while [ "$wdir" != '/' ] ; do
-    if [ -d "$wdir"/.mvn ] ; then
-      basedir=$wdir
-      break
-    fi
-    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
-    if [ -d "${wdir}" ]; then
-      wdir=`cd "$wdir/.."; pwd`
-    fi
-    # end of workaround
-  done
-  echo "${basedir}"
-}
-
-# concatenates all lines of a file
-concat_lines() {
-  if [ -f "$1" ]; then
-    echo "$(tr -s '\n' ' ' < "$1")"
-  fi
-}
-
-BASE_DIR=`find_maven_basedir "$(pwd)"`
-if [ -z "$BASE_DIR" ]; then
-  exit 1;
-fi
-
-##########################################################################################
-# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
-# This allows using the maven wrapper in projects that prohibit checking in binary data.
-##########################################################################################
-if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
-    if [ "$MVNW_VERBOSE" = true ]; then
-      echo "Found .mvn/wrapper/maven-wrapper.jar"
-    fi
-else
-    if [ "$MVNW_VERBOSE" = true ]; then
-      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
-    fi
-    if [ -n "$MVNW_REPOURL" ]; then
-      jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
-    else
-      jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
-    fi
-    while IFS="=" read key value; do
-      case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
-      esac
-    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
-    if [ "$MVNW_VERBOSE" = true ]; then
-      echo "Downloading from: $jarUrl"
-    fi
-    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
-    if $cygwin; then
-      wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
-    fi
-
-    if command -v wget > /dev/null; then
-        if [ "$MVNW_VERBOSE" = true ]; then
-          echo "Found wget ... using wget"
-        fi
-        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
-            wget "$jarUrl" -O "$wrapperJarPath"
-        else
-            wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
-        fi
-    elif command -v curl > /dev/null; then
-        if [ "$MVNW_VERBOSE" = true ]; then
-          echo "Found curl ... using curl"
-        fi
-        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
-            curl -o "$wrapperJarPath" "$jarUrl" -f
-        else
-            curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
-        fi
-
-    else
-        if [ "$MVNW_VERBOSE" = true ]; then
-          echo "Falling back to using Java to download"
-        fi
-        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
-        # For Cygwin, switch paths to Windows format before running javac
-        if $cygwin; then
-          javaClass=`cygpath --path --windows "$javaClass"`
-        fi
-        if [ -e "$javaClass" ]; then
-            if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
-                if [ "$MVNW_VERBOSE" = true ]; then
-                  echo " - Compiling MavenWrapperDownloader.java ..."
-                fi
-                # Compiling the Java class
-                ("$JAVA_HOME/bin/javac" "$javaClass")
-            fi
-            if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
-                # Running the downloader
-                if [ "$MVNW_VERBOSE" = true ]; then
-                  echo " - Running MavenWrapperDownloader.java ..."
-                fi
-                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
-            fi
-        fi
-    fi
-fi
-##########################################################################################
-# End of extension
-##########################################################################################
-
-export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
-if [ "$MVNW_VERBOSE" = true ]; then
-  echo $MAVEN_PROJECTBASEDIR
-fi
-MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin; then
-  [ -n "$M2_HOME" ] &&
-    M2_HOME=`cygpath --path --windows "$M2_HOME"`
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
-  [ -n "$CLASSPATH" ] &&
-    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
-  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
-    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
-fi
-
-# Provide a "standardized" way to retrieve the CLI args that will
-# work with both Windows and non-Windows executions.
-MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
-export MAVEN_CMD_LINE_ARGS
-
-WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
-exec "$JAVACMD" \
-  $MAVEN_OPTS \
-  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
-  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
-  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/compute-engine/mvnw.cmd b/compute-engine/mvnw.cmd
deleted file mode 100644
index c8d4337..0000000
--- a/compute-engine/mvnw.cmd
+++ /dev/null
@@ -1,182 +0,0 @@
-@REM ----------------------------------------------------------------------------
-@REM Licensed to the Apache Software Foundation (ASF) under one
-@REM or more contributor license agreements.  See the NOTICE file
-@REM distributed with this work for additional information
-@REM regarding copyright ownership.  The ASF licenses this file
-@REM to you under the Apache License, Version 2.0 (the
-@REM "License"); you may not use this file except in compliance
-@REM with the License.  You may obtain a copy of the License at
-@REM
-@REM    https://www.apache.org/licenses/LICENSE-2.0
-@REM
-@REM Unless required by applicable law or agreed to in writing,
-@REM software distributed under the License is distributed on an
-@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-@REM KIND, either express or implied.  See the License for the
-@REM specific language governing permissions and limitations
-@REM under the License.
-@REM ----------------------------------------------------------------------------
-
-@REM ----------------------------------------------------------------------------
-@REM Maven Start Up Batch script
-@REM
-@REM Required ENV vars:
-@REM JAVA_HOME - location of a JDK home dir
-@REM
-@REM Optional ENV vars
-@REM M2_HOME - location of maven2's installed home dir
-@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
-@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
-@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
-@REM     e.g. to debug Maven itself, use
-@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-@REM ----------------------------------------------------------------------------
-
-@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
-@echo off
-@REM set title of command window
-title %0
-@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
-@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
-
-@REM set %HOME% to equivalent of $HOME
-if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
-
-@REM Execute a user defined script before this one
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
-@REM check for pre script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
-if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
-:skipRcPre
-
-@setlocal
-
-set ERROR_CODE=0
-
-@REM To isolate internal variables from possible post scripts, we use another setlocal
-@setlocal
-
-@REM ==== START VALIDATION ====
-if not "%JAVA_HOME%" == "" goto OkJHome
-
-echo.
-echo Error: JAVA_HOME not found in your environment. >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-:OkJHome
-if exist "%JAVA_HOME%\bin\java.exe" goto init
-
-echo.
-echo Error: JAVA_HOME is set to an invalid directory. >&2
-echo JAVA_HOME = "%JAVA_HOME%" >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-@REM ==== END VALIDATION ====
-
-:init
-
-@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
-@REM Fallback to current working directory if not found.
-
-set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
-IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
-
-set EXEC_DIR=%CD%
-set WDIR=%EXEC_DIR%
-:findBaseDir
-IF EXIST "%WDIR%"\.mvn goto baseDirFound
-cd ..
-IF "%WDIR%"=="%CD%" goto baseDirNotFound
-set WDIR=%CD%
-goto findBaseDir
-
-:baseDirFound
-set MAVEN_PROJECTBASEDIR=%WDIR%
-cd "%EXEC_DIR%"
-goto endDetectBaseDir
-
-:baseDirNotFound
-set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
-cd "%EXEC_DIR%"
-
-:endDetectBaseDir
-
-IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
-
-@setlocal EnableExtensions EnableDelayedExpansion
-for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
-@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
-
-:endReadAdditionalConfig
-
-SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
-set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
-set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
-set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
-
-FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
-    IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
-)
-
-@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
-@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
-if exist %WRAPPER_JAR% (
-    if "%MVNW_VERBOSE%" == "true" (
-        echo Found %WRAPPER_JAR%
-    )
-) else (
-    if not "%MVNW_REPOURL%" == "" (
-        SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
-    )
-    if "%MVNW_VERBOSE%" == "true" (
-        echo Couldn't find %WRAPPER_JAR%, downloading it ...
-        echo Downloading from: %DOWNLOAD_URL%
-    )
-
-    powershell -Command "&{"^
-		"$webclient = new-object System.Net.WebClient;"^
-		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
-		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
-		"}"^
-		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
-		"}"
-    if "%MVNW_VERBOSE%" == "true" (
-        echo Finished downloading %WRAPPER_JAR%
-    )
-)
-@REM End of extension
-
-@REM Provide a "standardized" way to retrieve the CLI args that will
-@REM work with both Windows and non-Windows executions.
-set MAVEN_CMD_LINE_ARGS=%*
-
-%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
-if ERRORLEVEL 1 goto error
-goto end
-
-:error
-set ERROR_CODE=1
-
-:end
-@endlocal & set ERROR_CODE=%ERROR_CODE%
-
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
-@REM check for post script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
-if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
-:skipRcPost
-
-@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
-if "%MAVEN_BATCH_PAUSE%" == "on" pause
-
-if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
-
-exit /B %ERROR_CODE%
diff --git a/compute-engine/pom.xml b/compute-engine/pom.xml
deleted file mode 100644
index 507ffb3..0000000
--- a/compute-engine/pom.xml
+++ /dev/null
@@ -1,155 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <parent>
-    <artifactId>energy-management</artifactId>
-    <groupId>com.dingzhuo</groupId>
-    <version>1.0.0</version>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>compute-engine</artifactId>
-
-  <properties>
-    <java.version>1.8</java.version>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.typesafe.akka</groupId>
-      <artifactId>akka-actor_2.13</artifactId>
-      <version>2.6.4</version>
-    </dependency>
-    <dependency>
-      <groupId>com.typesafe.akka</groupId>
-      <artifactId>akka-cluster_2.13</artifactId>
-      <version>2.6.4</version>
-    </dependency>
-    <dependency>
-      <groupId>com.typesafe.akka</groupId>
-      <artifactId>akka-cluster-sharding-typed_2.13</artifactId>
-      <version>2.6.4</version>
-    </dependency>
-    <dependency>
-      <groupId>com.typesafe.akka</groupId>
-      <artifactId>akka-slf4j_2.13</artifactId>
-      <version>2.6.4</version>
-    </dependency>
-    <dependency>
-      <groupId>args4j</groupId>
-      <artifactId>args4j</artifactId>
-      <version>2.33</version>
-    </dependency>
-
-    <dependency>
-      <groupId>com.dingzhuo</groupId>
-      <artifactId>parent</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.dingzhuo</groupId>
-      <artifactId>data-model</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.dingzhuo</groupId>
-      <artifactId>data-service</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.dingzhuo</groupId>
-      <artifactId>data-monitoring</artifactId>
-      <version>1.0.0</version>
-      <scope>compile</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <!--      绗笁鏂瑰寘鎵撹繘jar鏂囦欢涓�-->
-      <plugin>
-        <groupId>org.springframework.boot</groupId>
-        <artifactId>spring-boot-maven-plugin</artifactId>
-        <version>2.0.5.RELEASE</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>repackage</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <includeSystemScope>true</includeSystemScope>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <configuration>
-          <archive>
-            <manifest>
-              <addClasspath>true</addClasspath>
-              <classpathPrefix>lib/</classpathPrefix>
-              <mainClass>com.dingzhuo.compute.engine.ComputeEngineApplication</mainClass>
-              <useUniqueVersions>false</useUniqueVersions>
-            </manifest>
-            <manifestEntries>
-              <Class-Path>lib/fel-0.10.jar</Class-Path>
-            </manifestEntries>
-          </archive>
-          <excludes>
-            <exclude>application-prod.yml</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>copy-lib</id>
-            <phase>package</phase>
-            <goals>
-              <goal>copy-dependencies</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${project.build.directory}/lib</outputDirectory>
-              <excludeTransitive>false</excludeTransitive>
-              <stripVersion>false</stripVersion>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-resources-plugin</artifactId>
-        <version>2.7</version>
-        <configuration>
-          <encoding>UTF-8</encoding>
-        </configuration>
-        <executions>
-          <execution>
-            <id>copy-resources</id>
-            <phase>validate</phase>
-            <goals>
-              <goal>copy-resources</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${basedir}/target/config</outputDirectory>
-              <resources>
-                <resource>
-                  <directory>src/main/resources</directory>
-                  <filtering>true</filtering>
-                  <includes>
-                    <include>application-prod.yml</include>
-                  </includes>
-                </resource>
-              </resources>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/ApplicationConfiguration.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/ApplicationConfiguration.java
deleted file mode 100644
index 3dd99a8..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/ApplicationConfiguration.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.dingzhuo.compute.engine;
-
-import akka.actor.ActorSystem;
-import com.dingzhuo.compute.engine.utils.ActorUtil;
-import com.dingzhuo.compute.engine.utils.SpringAkkaExtension;
-import com.typesafe.config.Config;
-import com.typesafe.config.ConfigFactory;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * @author fanxinfu
- */
-@Configuration
-public class ApplicationConfiguration {
-
-  private final ApplicationContext applicationContext;
-  private final SpringAkkaExtension springAkkaExtension;
-
-  public ApplicationConfiguration(
-      ApplicationContext applicationContext, SpringAkkaExtension springAkkaExtension) {
-    this.applicationContext = applicationContext;
-    this.springAkkaExtension = springAkkaExtension;
-  }
-
-  @Bean
-  public ActorSystem actorSystem() {
-    ActorSystem system = ActorSystem.create(ActorUtil.ACTOR_SYSTEM, akkaConfiguration());
-    springAkkaExtension.initialize(applicationContext);
-    system.dispatchers().lookup("computeDispatcher");
-    return system;
-  }
-
-  @Bean
-  public Config akkaConfiguration() {
-    return ConfigFactory.load("akka");
-  }
-
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/ComputeEngineApplication.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/ComputeEngineApplication.java
deleted file mode 100644
index 24afa23..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/ComputeEngineApplication.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.dingzhuo.compute.engine;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
-
-/**
- * @author fanxinfu
- */
-@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class},
-    scanBasePackages = "com.dingzhuo.*")
-public class ComputeEngineApplication {
-
-  public static void main(String[] args) {
-    SpringApplication.run(ComputeEngineApplication.class, args);
-  }
-
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/ComputeEngineRunner.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/ComputeEngineRunner.java
deleted file mode 100644
index a51198b..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/ComputeEngineRunner.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.dingzhuo.compute.engine;
-
-import akka.actor.ActorSystem;
-import akka.cluster.sharding.ClusterSharding;
-import akka.cluster.sharding.ClusterShardingSettings;
-import com.dingzhuo.compute.engine.actor.alarm.AlarmTimerActor;
-import com.dingzhuo.compute.engine.actor.alarm.LoadAlarmActor;
-import com.dingzhuo.compute.engine.actor.alarm.PeriodAlarmActor;
-import com.dingzhuo.compute.engine.actor.alarm.RealtimeAlarmActor;
-import com.dingzhuo.compute.engine.actor.device.DeviceStatusActor;
-import com.dingzhuo.compute.engine.actor.device.DeviceStatusTimerActor;
-import com.dingzhuo.compute.engine.actor.device.LoadDeviceStatusActor;
-import com.dingzhuo.compute.engine.actor.indexcalc.CalculationIndexActor;
-import com.dingzhuo.compute.engine.actor.indexcalc.LoadIndexActor;
-import com.dingzhuo.compute.engine.actor.indexcalc.SavePeriodActor;
-import com.dingzhuo.compute.engine.actor.indexcalc.TimerActor;
-import com.dingzhuo.compute.engine.actor.monitor.RecastDataActor;
-import com.dingzhuo.compute.engine.config.CalcMessageExtractor;
-import com.dingzhuo.compute.engine.config.EngineArgOption;
-import com.dingzhuo.compute.engine.utils.SpringAkkaExtension;
-import org.kohsuke.args4j.CmdLineException;
-import org.kohsuke.args4j.CmdLineParser;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.stereotype.Component;
-
-/**
- * @author fanxinfu
- */
-@Component
-public class ComputeEngineRunner implements CommandLineRunner {
-
-  private final Logger logger = LoggerFactory.getLogger(this.getClass());
-  private final ActorSystem actorSystem;
-  private final SpringAkkaExtension akkaExt;
-
-  public ComputeEngineRunner(
-      ActorSystem actorSystem, SpringAkkaExtension springAkkaExtension) {
-    this.actorSystem = actorSystem;
-    this.akkaExt = springAkkaExtension;
-  }
-
-  @Override
-  public void run(String... args) {
-    EngineArgOption argOption = new EngineArgOption();
-    CmdLineParser cmdLineParser = new CmdLineParser(argOption);
-    if (args.length == 0) {
-      showHelp(cmdLineParser);
-      return;
-    }
-
-    try {
-      cmdLineParser.parseArgument(args);
-    } catch (CmdLineException e) {
-      logger.error(e.getLocalizedMessage());
-    }
-
-    if (argOption.isCalc()) {
-      actorSystem
-          .actorOf(akkaExt.props(CalculationIndexActor.ACTOR_NAME),
-              CalculationIndexActor.ACTOR_NAME);
-      actorSystem.actorOf(akkaExt.props(TimerActor.ACTOR_NAME), TimerActor.ACTOR_NAME);
-      actorSystem.actorOf(akkaExt.props(LoadIndexActor.ACTOR_NAME), LoadIndexActor.ACTOR_NAME);
-      actorSystem.actorOf(akkaExt.props(SavePeriodActor.ACTOR_NAME), SavePeriodActor.ACTOR_NAME);
-    }
-
-    if (argOption.isAlarm()) {
-      actorSystem.actorOf(akkaExt.props(LoadAlarmActor.ACTOR_NAME), LoadAlarmActor.ACTOR_NAME);
-      actorSystem
-          .actorOf(akkaExt.props(RealtimeAlarmActor.ACTOR_NAME), RealtimeAlarmActor.ACTOR_NAME);
-      actorSystem.actorOf(akkaExt.props(PeriodAlarmActor.ACTOR_NAME), PeriodAlarmActor.ACTOR_NAME);
-      actorSystem.actorOf(akkaExt.props(AlarmTimerActor.ACTOR_NAME), AlarmTimerActor.ACTOR_NAME);
-    }
-
-    if (argOption.isDevice()) {
-      actorSystem.actorOf(akkaExt.props(LoadDeviceStatusActor.ACTOR_NAME),
-          LoadDeviceStatusActor.ACTOR_NAME);
-      actorSystem.actorOf(akkaExt.props(DeviceStatusTimerActor.ACTOR_NAME),
-          DeviceStatusTimerActor.ACTOR_NAME);
-      actorSystem
-          .actorOf(akkaExt.props(DeviceStatusActor.ACTOR_NAME), DeviceStatusActor.ACTOR_NAME);
-    }
-
-    if (argOption.isRecast()) {
-      actorSystem.actorOf(akkaExt.props(RecastDataActor.ACTOR_NAME), RecastDataActor.ACTOR_NAME);
-    }
-  }
-
-  private void showHelp(CmdLineParser cmdLineParser) {
-    System.out.println("鍙傛暟璇存槑锛�");
-    cmdLineParser.printUsage(System.out);
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/alarm/AlarmTimerActor.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/alarm/AlarmTimerActor.java
deleted file mode 100644
index 6de4b61..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/alarm/AlarmTimerActor.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package com.dingzhuo.compute.engine.actor.alarm;
-
-import akka.actor.ActorSelection;
-import akka.actor.ActorSystem;
-import akka.actor.Cancellable;
-import akka.actor.UntypedAbstractActor;
-import com.dingzhuo.compute.engine.message.alarm.AlarmJudgeMessage;
-import com.dingzhuo.compute.engine.message.alarm.AlarmRegisterMessage;
-import com.dingzhuo.compute.engine.message.alarm.AlarmType;
-import com.dingzhuo.compute.engine.message.timer.RegisterType;
-import com.dingzhuo.compute.engine.utils.ActorUtil;
-import com.dingzhuo.compute.engine.utils.CacheService;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import com.dingzhuo.energy.dataservice.service.RealtimeDatabaseService;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-import scala.concurrent.duration.Duration;
-import scala.concurrent.duration.FiniteDuration;
-
-@Component("alarmTimerActor")
-@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class AlarmTimerActor extends UntypedAbstractActor {
-
-  public static final String ACTOR_NAME = "alarmTimerActor";
-  private final ActorSystem actorSystem;
-  private Cancellable timer;
-  private Map<AlarmType, List<String>> actorIds = new HashMap<>();
-  private List<String> realtimeTags = new ArrayList<>();
-  private ActorSelection realtimeAlarmActor;
-  private ActorSelection periodAlarmActor;
-  private final RealtimeDatabaseService realtimeDatabaseService;
-  private CacheService cacheService;
-
-  public AlarmTimerActor(ActorSystem actorSystem, RealtimeDatabaseService realtimeDatabaseService,
-      CacheService cacheService) {
-    this.actorSystem = actorSystem;
-    this.realtimeDatabaseService = realtimeDatabaseService;
-    this.cacheService = cacheService;
-  }
-
-  @Override
-  public void preStart() {
-    realtimeAlarmActor = getContext()
-        .actorSelection(ActorUtil.getActorAddress(RealtimeAlarmActor.ACTOR_NAME));
-    periodAlarmActor = getContext()
-        .actorSelection(ActorUtil.getActorAddress(PeriodAlarmActor.ACTOR_NAME));
-    FiniteDuration interval = Duration.create(30, TimeUnit.SECONDS);
-    FiniteDuration delay = Duration.Zero();
-    timer = actorSystem.scheduler()
-        .scheduleAtFixedRate(delay, interval, self(), Message.TIMER, actorSystem.dispatcher(),
-            self());
-  }
-
-  @Override
-  public void postStop() throws Exception {
-    super.postStop();
-    if (timer != null) {
-      timer.cancel();
-    }
-  }
-
-  @Override
-  public void onReceive(Object message) {
-    if (message == Message.TIMER) {
-      timer();
-    } else if (message instanceof AlarmRegisterMessage) {
-      registerAlarm((AlarmRegisterMessage) message);
-    }
-  }
-
-  private void registerAlarm(AlarmRegisterMessage registerMessage) {
-    AlarmType alarmType = registerMessage.getAlarmType();
-    if (!actorIds.containsKey(alarmType)) {
-      actorIds.put(alarmType, new ArrayList<>());
-    }
-
-    if (registerMessage.getRegisterType() == RegisterType.REGISTER) {
-      actorIds.get(alarmType).add(registerMessage.getActorId());
-      if (alarmType == AlarmType.LIVE) {
-        realtimeTags.add(registerMessage.getAlarmItem().getIndexCode());
-      }
-    } else if (registerMessage.getRegisterType() == RegisterType.UNREGISTER) {
-      actorIds.get(alarmType).remove(registerMessage.getActorId());
-      if (alarmType == AlarmType.LIVE) {
-        realtimeTags.remove(registerMessage.getAlarmItem().getIndexCode());
-      }
-    }
-  }
-
-  private void timer() {
-    if (!actorIds.isEmpty()) {
-      List<String> realtimeAlarmIds = actorIds.get(AlarmType.LIVE);
-      List<String> periodAlarmIds = actorIds.get(AlarmType.PERIOD);
-      if (!realtimeTags.isEmpty()) {
-        List<TagValue> tagValues = realtimeDatabaseService.retrieve(realtimeTags);
-        cacheService.cacheTagValues(tagValues);
-      }
-
-      if (realtimeAlarmIds != null && !realtimeAlarmIds.isEmpty()) {
-        realtimeAlarmIds
-            .forEach(id -> realtimeAlarmActor.tell(new AlarmJudgeMessage(id), getSender()));
-      }
-
-      if (periodAlarmIds != null && !periodAlarmIds.isEmpty()) {
-        periodAlarmIds.forEach(id -> periodAlarmActor.tell(new AlarmJudgeMessage(id), getSender()));
-      }
-    }
-  }
-
-  private enum Message {
-    /**
-     * 鏃堕棿瑙﹀彂
-     */
-    TIMER
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/alarm/BaseAlarmActor.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/alarm/BaseAlarmActor.java
deleted file mode 100644
index 9e086f4..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/alarm/BaseAlarmActor.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package com.dingzhuo.compute.engine.actor.alarm;
-
-import static org.apache.commons.lang3.StringUtils.equalsAnyIgnoreCase;
-
-import akka.actor.ActorSelection;
-import akka.actor.UntypedAbstractActor;
-import com.dingzhuo.compute.engine.message.alarm.AlarmJudgeMessage;
-import com.dingzhuo.compute.engine.message.alarm.AlarmRegisterMessage;
-import com.dingzhuo.compute.engine.message.alarm.AlarmType;
-import com.dingzhuo.compute.engine.message.alarm.LoadAlarmMessage;
-import com.dingzhuo.compute.engine.message.alarm.UnloadAlarmMessage;
-import com.dingzhuo.compute.engine.message.timer.RegisterType;
-import com.dingzhuo.compute.engine.utils.ActorUtil;
-import com.dingzhuo.compute.engine.utils.CacheService;
-import com.dingzhuo.energy.common.core.lang.UUID;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.HistoryAlarm;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.RealTimeAlarm;
-import com.dingzhuo.energy.data.monitoring.alarm.service.IHistoryAlarmService;
-import com.dingzhuo.energy.data.monitoring.alarm.service.IRealtimeAlarmService;
-import com.dingzhuo.energy.dataservice.domain.Quality;
-import org.jetbrains.annotations.NotNull;
-import org.joda.time.DateTime;
-import org.joda.time.Seconds;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * @author fanxinfu
- */
-public abstract class BaseAlarmActor extends UntypedAbstractActor {
-
-  @Autowired
-  protected CacheService cacheService;
-  @Autowired
-  protected IRealtimeAlarmService realtimeAlarmService;
-  @Autowired
-  private IHistoryAlarmService historyAlarmService;
-
-  private ActorSelection timerActor;
-
-  @Override
-  public void preStart() throws Exception {
-    super.preStart();
-    timerActor = getContext().actorSelection(ActorUtil.getActorAddress(AlarmTimerActor.ACTOR_NAME));
-  }
-
-  @Override
-  public void onReceive(Object message) {
-    if (message instanceof LoadAlarmMessage) {
-      loadAlarm((LoadAlarmMessage) message);
-    } else if (message instanceof UnloadAlarmMessage) {
-      unloadAlarm((UnloadAlarmMessage) message);
-    } else if (message instanceof AlarmJudgeMessage) {
-      judge((AlarmJudgeMessage) message);
-    }
-  }
-
-  private void unloadAlarm(UnloadAlarmMessage message) {
-    cacheService.removeAlarmCache(message.getActorId());
-    AlarmItem alarmItem = message.getAlarmItem();
-    AlarmType alarmType = getAlarmType(alarmItem);
-    timerActor
-        .tell(new AlarmRegisterMessage(message.getActorId(), alarmType, RegisterType.UNREGISTER,
-                alarmItem),
-            self());
-  }
-
-  private void loadAlarm(LoadAlarmMessage message) {
-    AlarmItem alarmItem = message.getAlarmItem();
-    AlarmType alarmType = getAlarmType(alarmItem);
-    cacheService.cacheAlarmItem(alarmItem);
-    timerActor.tell(new AlarmRegisterMessage(message.getActorId(), alarmType, RegisterType.REGISTER,
-        alarmItem), self());
-  }
-
-  @NotNull
-  private AlarmType getAlarmType(AlarmItem alarmItem) {
-    AlarmType alarmType;
-    if (equalsAnyIgnoreCase(alarmItem.getTimeSlot(), TimeType.LIVE.name())) {
-      alarmType = AlarmType.LIVE;
-    } else {
-      alarmType = AlarmType.PERIOD;
-    }
-    return alarmType;
-  }
-
-  protected void insertPeriodHistoryAlarm(AlarmItem item, DateTime now, String timeCode,
-      RealTimeAlarm realTimeAlarm) {
-    HistoryAlarm historyAlarm = new HistoryAlarm();
-    if (realTimeAlarm == null) {
-      realTimeAlarm = realtimeAlarmService.getAlarmByItemIdAndTimeCode(item.getId(), timeCode);
-    }
-
-    historyAlarm.setId(UUID.fastUUID().toString());
-    historyAlarm.setBeginTime(realTimeAlarm.getBeginTime());
-    historyAlarm.setIndexId(realTimeAlarm.getIndexId());
-    historyAlarm.setLimitingValue(realTimeAlarm.getLimitingValue());
-    historyAlarm.setItemId(item.getId());
-    historyAlarm.setAlarmValue(realTimeAlarm.getAlarmValue());
-    historyAlarm.setAlarmValueQuality(realTimeAlarm.getAlarmValueQuality());
-    historyAlarm.setEndTime(now.toDate());
-    historyAlarm.setTimeCode(realTimeAlarm.getTimeCode());
-    int durationSecond = Seconds.secondsBetween(new DateTime(historyAlarm.getBeginTime()),
-        new DateTime(historyAlarm.getEndTime())).getSeconds();
-    historyAlarm.setDuration(durationSecond);
-    historyAlarmService.updateHistoryAlarm(historyAlarm.getItemId(), historyAlarm);
-  }
-
-  protected void insertHistoryAlarm(AlarmItem item, DateTime now) {
-    HistoryAlarm historyAlarm = new HistoryAlarm();
-    RealTimeAlarm realTimeAlarm = realtimeAlarmService.getRealTimeAlarmByAlarmCode(
-        item.getAlarmCode());
-    if (realTimeAlarm == null) {
-      return;
-    }
-
-    historyAlarm.setId(UUID.fastUUID().toString());
-    historyAlarm.setBeginTime(realTimeAlarm.getBeginTime());
-    historyAlarm.setIndexId(realTimeAlarm.getIndexId());
-    historyAlarm.setLimitingValue(realTimeAlarm.getLimitingValue());
-
-    historyAlarm.setItemId(item.getId());
-    historyAlarm.setAlarmCode(item.getAlarmCode());
-    historyAlarm.setAlarmValue(realTimeAlarm.getAlarmValue());
-    historyAlarm.setAlarmValueQuality(realTimeAlarm.getAlarmValueQuality());
-    historyAlarm.setEndTime(now.toDate());
-    historyAlarm.setTimeCode(realTimeAlarm.getTimeCode());
-    int durationSecond = Seconds.secondsBetween(new DateTime(historyAlarm.getBeginTime()),
-        new DateTime(historyAlarm.getEndTime())).getSeconds();
-    historyAlarm.setDuration(durationSecond);
-    historyAlarmService.updateHistoryAlarm(historyAlarm.getAlarmCode(), historyAlarm);
-  }
-
-  protected void insertRealtimeAlarm(AlarmItem item, DateTime now, Double value, Quality quality,
-      String timeCode) {
-    RealTimeAlarm realTimeAlarm = realtimeAlarmService.getRealTimeAlarmByAlarmCode(
-        item.getAlarmCode());
-    if (realTimeAlarm != null) {
-      return;
-    }
-
-    realTimeAlarm = new RealTimeAlarm();
-    realTimeAlarm.setId(UUID.fastUUID().toString());
-    realTimeAlarm.setBeginTime(now.toDate());
-    realTimeAlarm.setIndexId(item.getDwid());
-    realTimeAlarm.setLimitingValue(Double.parseDouble(item.getLimitVal()));
-
-    realTimeAlarm.setItemId(item.getId());
-    realTimeAlarm.setAlarmCode(item.getAlarmCode());
-    realTimeAlarm.setAlarmValue(value);
-    realTimeAlarm.setAlarmValueQuality(quality);
-    realTimeAlarm.setTimeCode(timeCode);
-    realtimeAlarmService.insert(realTimeAlarm);
-  }
-
-  abstract void judge(AlarmJudgeMessage message);
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/alarm/LoadAlarmActor.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/alarm/LoadAlarmActor.java
deleted file mode 100644
index 766cb7f..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/alarm/LoadAlarmActor.java
+++ /dev/null
@@ -1,161 +0,0 @@
-package com.dingzhuo.compute.engine.actor.alarm;
-
-import static org.apache.commons.lang3.StringUtils.equalsAnyIgnoreCase;
-
-import akka.actor.ActorSelection;
-import akka.actor.UntypedAbstractActor;
-import akka.event.Logging;
-import akka.event.LoggingAdapter;
-import com.dingzhuo.compute.engine.message.alarm.AlarmStatus;
-import com.dingzhuo.compute.engine.message.alarm.LoadAlarmMessage;
-import com.dingzhuo.compute.engine.message.alarm.UnloadAlarmMessage;
-import com.dingzhuo.compute.engine.utils.ActorUtil;
-import com.dingzhuo.compute.engine.utils.CacheService;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.model.domain.LimitType;
-import com.dingzhuo.energy.data.model.service.ILimitTypeService;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.RealTimeAlarm;
-import com.dingzhuo.energy.data.monitoring.alarm.service.IAlarmItemService;
-import com.dingzhuo.energy.data.monitoring.alarm.service.IRealtimeAlarmService;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-import scala.concurrent.duration.Duration;
-
-/**
- * @author fanxinfu
- */
-@Component("loadAlarmActor")
-@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class LoadAlarmActor extends UntypedAbstractActor {
-
-  public static final String ACTOR_NAME = "loadAlarmActor";
-  LoggingAdapter log = Logging.getLogger(getContext().getSystem(), this);
-  private final IAlarmItemService alarmItemService;
-  private final ILimitTypeService limitTypeService;
-  private ActorSelection realtimeAlarm;
-  private ActorSelection periodAlarm;
-  private CacheService cacheService;
-  private IRealtimeAlarmService realtimeAlarmService;
-  Map<String, AlarmItem> loadedAlarmItem = new HashMap<>();
-
-  public LoadAlarmActor(
-      IAlarmItemService alarmItemService,
-      ILimitTypeService limitTypeService,
-      IRealtimeAlarmService realtimeAlarmService,
-      CacheService cacheService) {
-    this.alarmItemService = alarmItemService;
-    this.limitTypeService = limitTypeService;
-    this.cacheService = cacheService;
-    this.realtimeAlarmService = realtimeAlarmService;
-  }
-
-  @Override
-  public void preStart() throws Exception {
-    super.preStart();
-    realtimeAlarm = getContext()
-        .actorSelection(ActorUtil.getActorAddress(RealtimeAlarmActor.ACTOR_NAME));
-    periodAlarm = getContext()
-        .actorSelection(ActorUtil.getActorAddress(PeriodAlarmActor.ACTOR_NAME));
-    this.context().system().scheduler()
-        .scheduleAtFixedRate(Duration.Zero(), Duration.create(1, TimeUnit.MINUTES), this.self(),
-            Message.REFRESH, this.context().system().dispatcher(), null);
-    cacheLimitType();
-    initAlarm();
-  }
-
-  private void cacheLimitType() {
-    List<LimitType> limitTypes = limitTypeService.selectLimitTypeList(new LimitType());
-    limitTypes.forEach(type -> cacheService.cacheLimitType(type.getLimitCode(), type));
-  }
-
-  private void initAlarm() {
-    List<RealTimeAlarm> alarms = realtimeAlarmService.getRealTimeAlarm();
-    if (!alarms.isEmpty()) {
-      alarms.forEach(alarm -> {
-        AlarmStatus status = new AlarmStatus();
-        status.setAlarm(true);
-        status.setBeginTime(alarm.getBeginTime());
-        cacheService.cacheAlarmStatus(alarm.getItemId(), status);
-      });
-    }
-  }
-
-  @Override
-  public void onReceive(Object message) {
-    if (message instanceof Message) {
-      if (message == Message.REFRESH) {
-        refreshAlarmItem();
-      } else {
-        this.unhandled(message);
-      }
-    }
-  }
-
-  private void refreshAlarmItem() {
-    List<AlarmItem> alarmItemList = alarmItemService.getAllAlarmItem();
-    Map<String, AlarmItem> newAlarmItem = alarmItemList.stream()
-        .collect(Collectors.toMap(ActorUtil::buildAlarmActorId, item -> item));
-
-    Set<String> needInstall = new HashSet<>();
-    Set<String> needUninstall = new HashSet<>();
-
-    loadedAlarmItem.forEach((id, alarmItem) -> {
-      if (!newAlarmItem.containsKey(id)) {
-        needUninstall.add(id);
-      } else {
-        Date nowUpdate = newAlarmItem.get(id).getUpdateTime();
-        Date lastUpdate = alarmItem.getUpdateTime();
-        if (lastUpdate != null && nowUpdate != null && lastUpdate.after(nowUpdate)) {
-          needUninstall.add(id);
-          needInstall.add(id);
-        }
-      }
-    });
-
-    newAlarmItem.forEach((id, alarmItem) -> {
-      if (!loadedAlarmItem.containsKey(id)) {
-        needInstall.add(id);
-      }
-    });
-
-    needUninstall.forEach(id -> {
-      AlarmItem alarmItem = loadedAlarmItem.get(id);
-      loadedAlarmItem.remove(id);
-      if (equalsAnyIgnoreCase(alarmItem.getTimeSlot(), TimeType.LIVE.name())) {
-        realtimeAlarm.tell(new UnloadAlarmMessage(alarmItem), getSelf());
-      } else {
-        periodAlarm.tell(new UnloadAlarmMessage(alarmItem), getSelf());
-      }
-    });
-
-    needInstall.forEach(id -> {
-      AlarmItem alarmItem = newAlarmItem.get(id);
-      if (equalsAnyIgnoreCase(alarmItem.getTimeSlot(), TimeType.LIVE.name())) {
-        alarmItem.setCalcText("limitRealtimeAlarm('" + id + "')");
-        realtimeAlarm.tell(new LoadAlarmMessage(alarmItem), getSelf());
-      } else {
-        alarmItem.setCalcText("limitPeriodAlarm('" + id + "')");
-        periodAlarm.tell(new LoadAlarmMessage(alarmItem), getSelf());
-      }
-
-      loadedAlarmItem.put(id, alarmItem);
-    });
-  }
-
-  public enum Message {
-    /**
-     * 妫�娴嬫姤璀﹂厤缃�
-     */
-    REFRESH
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/alarm/PeriodAlarmActor.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/alarm/PeriodAlarmActor.java
deleted file mode 100644
index 073b1e8..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/alarm/PeriodAlarmActor.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.dingzhuo.compute.engine.actor.alarm;
-
-import com.dingzhuo.compute.engine.function.FunctionEngine;
-import com.dingzhuo.compute.engine.message.alarm.AlarmJudgeMessage;
-import com.dingzhuo.compute.engine.message.alarm.AlarmStatus;
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.RealTimeAlarm;
-import com.greenpineyu.fel.context.FelContext;
-import org.joda.time.DateTime;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-
-/**
- * @author fanxinfu
- */
-@Component("periodAlarmActor")
-@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class PeriodAlarmActor extends BaseAlarmActor {
-
-  public static final String ACTOR_NAME = "periodAlarmActor";
-  private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
-  @Override
-  void judge(AlarmJudgeMessage message) {
-    try {
-      String actorId = message.getActorId();
-      AlarmItem item = cacheService.getAlarmItem(actorId);
-      TimeType timeType = TimeType.valueOf(item.getTimeSlot());
-      String timeCode = TimeManager.getTimeCode(DateTime.now().toDate(), timeType);
-      String lastTimeCode = TimeManager.getTimeCode(TimeManager.getTime(timeCode, -1), timeType);
-      RealTimeAlarm alarm = realtimeAlarmService
-          .getAlarmByItemIdAndTimeCode(item.getId(), lastTimeCode);
-      if (alarm != null) {
-        insertPeriodHistoryAlarm(item, new DateTime(TimeManager.getEndTime(lastTimeCode)),
-            lastTimeCode, alarm);
-      }
-
-      AlarmStatus lastStatus = cacheService.getAlarmStatus(item.getDwid(), item.getTimeSlot(), item.getLimitType());
-      DateTime now = DateTime.now();
-      if (lastStatus == null) {
-        lastStatus = new AlarmStatus();
-        lastStatus.setAlarm(false);
-        lastStatus.setBeginTime(now.toDate());
-      }
-
-      FelContext context = FunctionEngine.getInstance().getContext();
-      context.set("timeCode", timeCode);
-      Object value = FunctionEngine.getInstance().eval(item.getCalcText(), context);
-      boolean isAlarm = (Boolean) value;
-      if (isAlarm != lastStatus.isAlarm()) {
-        lastStatus.setAlarm(isAlarm);
-        cacheService.cacheAlarmStatus(item.getDwid(), item.getTimeSlot(), item.getLimitType(), lastStatus);
-        if (isAlarm) {
-          insertRealtimeAlarm(item, now, null, null, timeCode);
-        } else {
-          insertPeriodHistoryAlarm(item, now, timeCode, null);
-        }
-      }
-    } catch (Exception ex) {
-      logger.error(ex.getMessage());
-    }
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/alarm/RealtimeAlarmActor.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/alarm/RealtimeAlarmActor.java
deleted file mode 100644
index c05c511..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/alarm/RealtimeAlarmActor.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.dingzhuo.compute.engine.actor.alarm;
-
-import com.dingzhuo.compute.engine.function.FunctionEngine;
-import com.dingzhuo.compute.engine.message.alarm.AlarmJudgeMessage;
-import com.dingzhuo.compute.engine.message.alarm.AlarmStatus;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import org.joda.time.DateTime;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-
-/**
- * @author fanxinfu
- */
-@Component("realtimeAlarmActor")
-@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class RealtimeAlarmActor extends BaseAlarmActor {
-
-  public static final String ACTOR_NAME = "realtimeAlarmActor";
-  private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
-  @Override
-  void judge(AlarmJudgeMessage message) {
-    try {
-      String actorId = message.getActorId();
-      AlarmItem item = cacheService.getAlarmItem(actorId);
-      AlarmStatus lastStatus = cacheService
-          .getAlarmStatus(item.getDwid(), item.getTimeSlot(), item.getLimitType());
-      DateTime now = DateTime.now();
-      if (lastStatus == null) {
-        lastStatus = new AlarmStatus();
-        lastStatus.setAlarm(false);
-        lastStatus.setBeginTime(now.toDate());
-      }
-
-      Object value = FunctionEngine.getInstance().eval(item.getCalcText());
-      boolean isAlarm = (Boolean) value;
-      if (isAlarm != lastStatus.isAlarm()) {
-        try {
-          if (isAlarm) {
-            TagValue tagValue = cacheService.getTagValue(item.getIndexCode());
-            insertRealtimeAlarm(item, now, tagValue.getValue(), tagValue.getQuality(), "L");
-          } else {
-            insertHistoryAlarm(item, now);
-          }
-
-          lastStatus.setAlarm(isAlarm);
-          cacheService
-              .cacheAlarmStatus(item.getDwid(), item.getTimeSlot(), item.getLimitType(),
-                  lastStatus);
-        } catch (Exception ex) {
-          logger.error(ex.getMessage(), ex);
-        }
-      }
-    } catch (Exception ex) {
-      logger.error(ex.getMessage(), ex);
-    }
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/alarm/SaveAlarmActor.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/alarm/SaveAlarmActor.java
deleted file mode 100644
index d41208c..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/alarm/SaveAlarmActor.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.dingzhuo.compute.engine.actor.alarm;
-
-import akka.actor.ActorSystem;
-import akka.actor.Cancellable;
-import akka.actor.UntypedAbstractActor;
-import java.util.concurrent.TimeUnit;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-import scala.concurrent.duration.Duration;
-import scala.concurrent.duration.FiniteDuration;
-
-/**
- * @author fanxinfu
- */
-@Component("saveAlarmActor")
-@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class SaveAlarmActor extends UntypedAbstractActor {
-
-  private Cancellable timer;
-  private final ActorSystem actorSystem;
-
-  public SaveAlarmActor(ActorSystem actorSystem) {
-    this.actorSystem = actorSystem;
-  }
-
-  @Override
-  public void preStart() throws Exception {
-    super.preStart();
-    FiniteDuration interval = Duration.create(1, TimeUnit.SECONDS);
-    FiniteDuration delay = Duration.Zero();
-    timer = actorSystem.scheduler()
-        .scheduleAtFixedRate(delay, interval, self(), Message.TIMER, actorSystem.dispatcher(),
-            self());
-  }
-
-  @Override
-  public void postStop() throws Exception {
-    super.postStop();
-    if (timer != null) {
-      timer.cancel();
-    }
-  }
-
-  @Override
-  public void onReceive(Object message) throws Throwable {
-
-  }
-
-  private enum Message {
-    /**
-     * 鏃堕棿瑙﹀彂
-     */
-    TIMER
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/device/DeviceStatusActor.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/device/DeviceStatusActor.java
deleted file mode 100644
index 6d69e01..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/device/DeviceStatusActor.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.dingzhuo.compute.engine.actor.device;
-
-import akka.actor.UntypedAbstractActor;
-import com.dingzhuo.compute.engine.function.FunctionEngine;
-import com.dingzhuo.compute.engine.message.device.DeviceStatus;
-import com.dingzhuo.compute.engine.message.device.DeviceStatusJudgeMessage;
-import com.dingzhuo.compute.engine.utils.CacheService;
-import com.dingzhuo.energy.common.core.lang.UUID;
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceFormula;
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceStatusHistory;
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceStatusLive;
-import com.dingzhuo.energy.data.monitoring.device.service.IDeviceStatusHistoryService;
-import com.dingzhuo.energy.data.monitoring.device.service.IDeviceStatusLiveService;
-import org.joda.time.DateTime;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-
-@Component("deviceStatusActor")
-@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class DeviceStatusActor extends UntypedAbstractActor {
-
-  public static final String ACTOR_NAME = "deviceStatusActor";
-  private final CacheService cacheService;
-  private final IDeviceStatusLiveService liveService;
-  private final IDeviceStatusHistoryService historyService;
-  private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
-  public DeviceStatusActor(CacheService cacheService,
-      IDeviceStatusLiveService liveService,
-      IDeviceStatusHistoryService historyService) {
-    this.cacheService = cacheService;
-    this.liveService = liveService;
-    this.historyService = historyService;
-  }
-
-  @Override
-  public void onReceive(Object message) {
-    if (message instanceof DeviceStatusJudgeMessage) {
-      judge((DeviceStatusJudgeMessage) message);
-    }
-  }
-
-  private void judge(DeviceStatusJudgeMessage message) {
-    try {
-      String actorId = message.getActorId();
-      DeviceFormula formula = cacheService.getDeviceFormula(actorId);
-      if (formula == null) {
-        return;
-      }
-
-      DeviceStatus lastStatus = cacheService.getDeviceStatus(actorId);
-      DateTime now = DateTime.now();
-      if (lastStatus == null) {
-        lastStatus = new DeviceStatus();
-        lastStatus.setAlarm(false);
-        lastStatus.setBeginTime(now.toDate());
-      }
-
-      Object value = FunctionEngine.getInstance().eval(formula.getCalcText());
-      boolean isAlarm = (Boolean) value;
-      if (isAlarm != lastStatus.isAlarm()) {
-        lastStatus.setAlarm(isAlarm);
-        cacheService.cacheDeviceStatus(actorId, lastStatus);
-        if (isAlarm) {
-          DeviceStatusLive live = new DeviceStatusLive();
-          live.setId(UUID.fastUUID().toString());
-          live.setDeviceId(formula.getDeviceId());
-          live.setStatusId(formula.getStateId());
-          live.setBeginTime(now.toString("yyyy-MM-dd HH:mm:ss"));
-          liveService.insertDeviceStatusLive(live);
-        } else {
-          DeviceStatusHistory history = new DeviceStatusHistory();
-          DeviceStatusLive live = liveService
-              .getDeviceStatus(formula.getDeviceId(), formula.getStateId());
-          history.setId(UUID.fastUUID().toString());
-          history.setDeviceId(formula.getDeviceId());
-          history.setStatusId(formula.getStateId());
-          history.setBeginTime(live.getBeginTime());
-          history.setEndTime(now.toString("yyyy-MM-dd HH:mm:ss"));
-          historyService.saveHistoryStatus(history);
-        }
-      }
-    } catch (Exception ex) {
-      logger.error(ex.getMessage());
-    }
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/device/DeviceStatusTimerActor.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/device/DeviceStatusTimerActor.java
deleted file mode 100644
index 795de1c..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/device/DeviceStatusTimerActor.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.dingzhuo.compute.engine.actor.device;
-
-import akka.actor.ActorSelection;
-import akka.actor.ActorSystem;
-import akka.actor.UntypedAbstractActor;
-import com.dingzhuo.compute.engine.actor.alarm.PeriodAlarmActor;
-import com.dingzhuo.compute.engine.message.device.DeviceStatusJudgeMessage;
-import com.dingzhuo.compute.engine.message.device.LoadDeviceStatusMessage;
-import com.dingzhuo.compute.engine.message.device.UnloadDeviceStatusMessage;
-import com.dingzhuo.compute.engine.utils.ActorUtil;
-import com.dingzhuo.compute.engine.utils.CacheService;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-import scala.concurrent.duration.Duration;
-import scala.concurrent.duration.FiniteDuration;
-
-@Component("deviceStatusTimerActor")
-@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class DeviceStatusTimerActor extends UntypedAbstractActor {
-
-  public static final String ACTOR_NAME = "deviceStatusTimerActor";
-  private List<String> actorIds = new ArrayList<>();
-  private final ActorSystem actorSystem;
-  private final CacheService cacheService;
-  private ActorSelection deviceStatusActor;
-
-  public DeviceStatusTimerActor(ActorSystem actorSystem, CacheService cacheService) {
-    this.actorSystem = actorSystem;
-    this.cacheService = cacheService;
-  }
-
-  @Override
-  public void preStart() throws Exception {
-    super.preStart();
-
-    deviceStatusActor = getContext()
-        .actorSelection(ActorUtil.getActorAddress(DeviceStatusActor.ACTOR_NAME));
-    FiniteDuration interval = Duration.create(30, TimeUnit.SECONDS);
-    FiniteDuration delay = Duration.Zero();
-    actorSystem.scheduler()
-        .scheduleAtFixedRate(delay, interval, self(), Message.TIMER, actorSystem.dispatcher(),
-            self());
-  }
-
-  @Override
-  public void onReceive(Object message) {
-    if (message instanceof LoadDeviceStatusMessage) {
-      LoadDeviceStatusMessage loadMessage = (LoadDeviceStatusMessage) message;
-      actorIds.add(loadMessage.getActorId());
-      cacheService.cacheDeviceStatusSetting(loadMessage.getDeviceFormula());
-    } else if (message instanceof UnloadDeviceStatusMessage) {
-      UnloadDeviceStatusMessage unloadMessage = (UnloadDeviceStatusMessage) message;
-      actorIds.remove(unloadMessage.getActorId());
-      cacheService.removeDeviceStatusSetting(unloadMessage.getActorId());
-    } else if (message == Message.TIMER) {
-      doTimer();
-    }
-  }
-
-  private void doTimer() {
-    if (!actorIds.isEmpty()) {
-      actorIds.forEach(id -> deviceStatusActor.tell(new DeviceStatusJudgeMessage(id), getSelf()));
-    }
-  }
-
-  enum Message {
-    /**
-     * 鍒扮偣瑙﹀彂
-     */
-    TIMER
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/device/LoadDeviceStatusActor.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/device/LoadDeviceStatusActor.java
deleted file mode 100644
index 0c28928..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/device/LoadDeviceStatusActor.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package com.dingzhuo.compute.engine.actor.device;
-
-import akka.actor.ActorSelection;
-import akka.actor.UntypedAbstractActor;
-import com.dingzhuo.compute.engine.message.device.LoadDeviceStatusMessage;
-import com.dingzhuo.compute.engine.message.device.UnloadDeviceStatusMessage;
-import com.dingzhuo.compute.engine.utils.ActorUtil;
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceFormula;
-import com.dingzhuo.energy.data.monitoring.device.service.IDeviceFormulaService;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-import scala.concurrent.duration.Duration;
-
-@Component("loadDeviceStatusActor")
-@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class LoadDeviceStatusActor extends UntypedAbstractActor {
-
-  public static final String ACTOR_NAME = "loadDeviceStatusActor";
-  private final IDeviceFormulaService deviceFormulaService;
-  Map<String, DeviceFormula> loadedDeviceFormula = new HashMap<>();
-  private ActorSelection deviceStatusTimerActor;
-
-  public LoadDeviceStatusActor(
-      IDeviceFormulaService deviceFormulaService) {
-    this.deviceFormulaService = deviceFormulaService;
-  }
-
-  @Override
-  public void preStart() throws Exception {
-    super.preStart();
-
-    deviceStatusTimerActor = getContext()
-        .actorSelection(ActorUtil.getActorAddress(DeviceStatusTimerActor.ACTOR_NAME));
-    this.context().system().scheduler()
-        .scheduleAtFixedRate(Duration.Zero(), Duration.create(5, TimeUnit.MINUTES), this.self(),
-            Message.REFRESH, this.context().system().dispatcher(), null);
-    initDeviceStatus();
-    refreshDeviceStatusSetting();
-  }
-
-  private void initDeviceStatus() {
-  }
-
-  @Override
-  public void onReceive(Object message) {
-    if (message instanceof Message) {
-      if (message == Message.REFRESH) {
-        refreshDeviceStatusSetting();
-      } else {
-        this.unhandled(message);
-      }
-    }
-  }
-
-  private void refreshDeviceStatusSetting() {
-    List<DeviceFormula> formulas = deviceFormulaService.getAllDeviceFormula();
-    Map<String, DeviceFormula> newFormulas = formulas.stream()
-        .collect(Collectors.toMap(DeviceFormula::getId, item -> item));
-
-    Set<String> needInstall = new HashSet<>();
-    Set<String> needUninstall = new HashSet<>();
-
-    loadedDeviceFormula.forEach((id, alarmItem) -> {
-      if (!newFormulas.containsKey(id)) {
-        needUninstall.add(id);
-      } else {
-        Date nowUpdate = newFormulas.get(id).getUpdateTime();
-        Date lastUpdate = alarmItem.getUpdateTime();
-        if (lastUpdate != null && nowUpdate != null && lastUpdate.after(nowUpdate)) {
-          needUninstall.add(id);
-          needInstall.add(id);
-        }
-      }
-    });
-
-    newFormulas.forEach((id, formula) -> {
-      if (!loadedDeviceFormula.containsKey(id)) {
-        needInstall.add(id);
-      }
-    });
-
-    needUninstall.forEach(id -> {
-      DeviceFormula deviceFormula = loadedDeviceFormula.get(id);
-      loadedDeviceFormula.remove(id);
-      deviceStatusTimerActor.tell(new UnloadDeviceStatusMessage(deviceFormula), getSelf());
-    });
-
-    needInstall.forEach(id -> {
-      DeviceFormula deviceFormula = newFormulas.get(id);
-      deviceStatusTimerActor.tell(new LoadDeviceStatusMessage(deviceFormula), getSelf());
-      loadedDeviceFormula.put(id, deviceFormula);
-    });
-  }
-
-  public enum Message {
-    /**
-     * 妫�娴嬮厤缃�
-     */
-    REFRESH
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/indexcalc/CalculationIndexActor.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/indexcalc/CalculationIndexActor.java
deleted file mode 100644
index 2bd93c6..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/indexcalc/CalculationIndexActor.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package com.dingzhuo.compute.engine.actor.indexcalc;
-
-import akka.actor.ActorRef;
-import akka.actor.ActorSelection;
-import akka.actor.ActorSystem;
-import akka.actor.UntypedAbstractActor;
-import akka.cluster.sharding.ClusterSharding;
-import com.dingzhuo.compute.engine.function.FunctionEngine;
-import com.dingzhuo.compute.engine.message.calculation.CalculateMessage;
-import com.dingzhuo.compute.engine.message.calculation.LinkMessage;
-import com.dingzhuo.compute.engine.message.calculation.LoadCalcIndexMessage;
-import com.dingzhuo.compute.engine.message.calculation.UnlinkMessage;
-import com.dingzhuo.compute.engine.message.calculation.UnloadCalcIndexMessage;
-import com.dingzhuo.compute.engine.message.save.SaveMessage;
-import com.dingzhuo.compute.engine.message.timer.RegisterTimeMessage;
-import com.dingzhuo.compute.engine.message.timer.RegisterType;
-import com.dingzhuo.compute.engine.utils.ActorUtil;
-import com.dingzhuo.compute.engine.utils.CacheService;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.data.model.domain.IndexStorage;
-import com.greenpineyu.fel.context.FelContext;
-import java.util.List;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-
-/**
- * @author fanxinfu
- */
-@Component("indexCalcActor")
-@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class CalculationIndexActor extends UntypedAbstractActor {
-
-  public static final String ACTOR_NAME = "indexCalcActor";
-  private final Logger logger = LoggerFactory.getLogger(this.getClass());
-  private final CacheService cacheService;
-  private ActorSelection calculateActor;
-  private ActorSelection timerActor;
-  private ActorSelection saveActor;
-
-  public CalculationIndexActor(CacheService cacheService) {
-    this.cacheService = cacheService;
-  }
-
-  @Override
-  public void preStart() throws Exception {
-    super.preStart();
-    calculateActor = getContext()
-        .actorSelection(ActorUtil.getActorAddress(CalculationIndexActor.ACTOR_NAME));
-    timerActor = getContext().actorSelection(ActorUtil.getActorAddress(TimerActor.ACTOR_NAME));
-    saveActor = getContext().actorSelection(ActorUtil.getActorAddress(SavePeriodActor.ACTOR_NAME));
-  }
-
-  @Override
-  public void onReceive(Object message) {
-    if (message instanceof LoadCalcIndexMessage) {
-      IndexStorage storage = ((LoadCalcIndexMessage) message).getIndexStorage();
-      loadIndex(storage);
-    } else if (message instanceof UnloadCalcIndexMessage) {
-      String actorId = ((UnloadCalcIndexMessage) message).getActorId();
-      unloadIndex(actorId);
-    } else if (message instanceof LinkMessage) {
-      LinkMessage linkMessage = (LinkMessage) message;
-      cacheService.cachePostIndex(linkMessage.getActorId(), linkMessage.getPostActorId());
-    } else if (message instanceof UnlinkMessage) {
-      UnlinkMessage unlinkMessage = (UnlinkMessage) message;
-      cacheService.removePostIndexCache(unlinkMessage.getActorId(), unlinkMessage.getPostActorId());
-    } else if (message instanceof CalculateMessage) {
-      calculate((CalculateMessage) message);
-    }
-  }
-
-  private void calculate(CalculateMessage message) {
-    try {
-      IndexStorage indexStorage = cacheService.getIndexStorageCache(message.getActorId());
-      if (StringUtils.isBlank(indexStorage.getCalcText())) {
-        return;
-      }
-
-      List<String> postActorIds = cacheService.getPostActorIds(message.getActorId());
-      FelContext calcContext = FunctionEngine.getInstance().getContext();
-      calcContext.set("timeType", message.getTimeType().name());
-      calcContext.set("timeCode", message.getTimeCode());
-      Object value = FunctionEngine.getInstance().eval(indexStorage.getCalcText(), calcContext);
-      SaveMessage saveMessage = new SaveMessage();
-      saveMessage.setIndexId(indexStorage.getIndexId());
-      saveMessage.setTimeType(message.getTimeType());
-      saveMessage.setTimeCode(message.getTimeCode());
-      if (value != null) {
-        saveMessage.setValue(Double.parseDouble(String.valueOf(value)));
-      } else {
-        saveMessage.setValue(0d);
-      }
-      saveMessage.getPostActorIds().addAll(postActorIds);
-
-      saveActor.tell(saveMessage, getSelf());
-    } catch (Exception ex) {
-      logger.error(ex.getMessage(), ex);
-    }
-  }
-
-  private void unloadIndex(String actorId) {
-    IndexStorage indexStorage = cacheService.getIndexStorageCache(actorId);
-    RegisterTimeMessage message =
-        new RegisterTimeMessage(actorId, indexStorage.getTimeType(), RegisterType.UNREGISTER);
-    timerActor.tell(message, getSelf());
-    indexStorage.getParamIndex().forEach(param -> {
-      String preActorId = ActorUtil.buildActorId(param, indexStorage.getTimeType());
-      calculateActor.tell(new UnlinkMessage(preActorId, actorId), getSelf());
-    });
-    cacheService.removeIndexCache(actorId);
-  }
-
-  private void loadIndex(IndexStorage storage) {
-    cacheService.cacheIndexStorage(storage);
-    String actorId = ActorUtil.buildActorId(storage);
-    storage.getParamIndex().forEach(param -> {
-      String preActorId = ActorUtil.buildActorId(param, storage.getTimeType());
-      calculateActor.tell(new LinkMessage(preActorId, actorId), getSelf());
-    });
-
-    RegisterTimeMessage message =
-        new RegisterTimeMessage(actorId, storage.getTimeType(), RegisterType.REGISTER);
-    timerActor.tell(message, getSelf());
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/indexcalc/LoadIndexActor.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/indexcalc/LoadIndexActor.java
deleted file mode 100644
index 8f7421f..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/indexcalc/LoadIndexActor.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package com.dingzhuo.compute.engine.actor.indexcalc;
-
-import akka.actor.ActorRef;
-import akka.actor.ActorSelection;
-import akka.actor.ActorSystem;
-import akka.actor.UntypedAbstractActor;
-import akka.cluster.sharding.ClusterSharding;
-import akka.event.Logging;
-import akka.event.LoggingAdapter;
-import com.dingzhuo.compute.engine.function.FunctionEngine;
-import com.dingzhuo.compute.engine.message.calculation.LoadCalcIndexMessage;
-import com.dingzhuo.compute.engine.message.calculation.UnloadCalcIndexMessage;
-import com.dingzhuo.compute.engine.utils.ActorUtil;
-import com.dingzhuo.energy.data.model.domain.IndexStorage;
-import com.dingzhuo.energy.data.model.service.IIndexStorageService;
-import com.greenpineyu.fel.parser.FelNode;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-import scala.concurrent.duration.Duration;
-
-/**
- * @author fanxinfu
- */
-@Component("loadIndexActor")
-@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class LoadIndexActor extends UntypedAbstractActor {
-
-  LoggingAdapter log = Logging.getLogger(getContext().getSystem(), this);
-  private final IIndexStorageService indexStorageService;
-  public static final String ACTOR_NAME = "loadIndexActor";
-  private Map<String, IndexStorage> loadedCalcIndex = new HashMap<>();
-  private ActorSelection calculateActor;
-
-  public LoadIndexActor(IIndexStorageService indexStorageService) {
-    this.indexStorageService = indexStorageService;
-  }
-
-  @Override
-  public void preStart() {
-    calculateActor = getContext()
-        .actorSelection(ActorUtil.getActorAddress(CalculationIndexActor.ACTOR_NAME));
-    this.context().system().scheduler()
-        .scheduleAtFixedRate(Duration.Zero(), Duration.create(5, TimeUnit.MINUTES), this.self(),
-            Message.REFRESH, this.context().system().dispatcher(), null);
-  }
-
-  @Override
-  public void onReceive(Object message) {
-    if (message instanceof Message) {
-      if (message == Message.REFRESH) {
-        refreshIndex();
-      } else {
-        this.unhandled(message);
-      }
-    }
-  }
-
-  private void refreshIndex() {
-    List<IndexStorage> indexStorages = indexStorageService.getAllCalcIndexStorage();
-    List<IndexStorage> filterIndexStorageList = new ArrayList<>();
-    indexStorages.forEach(indexStorage -> {
-      try {
-        if (StringUtils.isNotBlank(indexStorage.getCalcText())) {
-          FelNode node = FunctionEngine.getInstance().parse(indexStorage.getCalcText());
-          if (node != null && !node.getChildren().isEmpty()) {
-            filterIndexStorageList.add(indexStorage);
-          } else {
-            log.error("ErrorIndex:" + indexStorage.getId() + ";" + indexStorage.getCalcText());
-          }
-        }
-      } catch (Exception ex) {
-        log.error("ErrorIndex:" + indexStorage.getId() + ";" + indexStorage.getCalcText());
-      }
-    });
-
-    if (filterIndexStorageList.isEmpty()) {
-      return;
-    }
-
-    Map<String, IndexStorage> newCalcIndex = filterIndexStorageList.stream()
-        .collect(Collectors.toMap(IndexStorage::getId, indexStorage -> indexStorage));
-    Set<String> needInstall = new HashSet<>();
-    Set<String> needUninstall = new HashSet<>();
-
-    loadedCalcIndex.forEach((id, indexStorage) -> {
-      if (!newCalcIndex.containsKey(id)) {
-        needUninstall.add(id);
-      } else {
-        Date nowUpdate = newCalcIndex.get(id).getUpdateTime();
-        Date lastUpdate = indexStorage.getUpdateTime();
-        if (lastUpdate != null && nowUpdate != null && lastUpdate.after(nowUpdate)) {
-          needUninstall.add(id);
-          needInstall.add(id);
-        }
-      }
-    });
-
-    newCalcIndex.forEach((id, indexStorage) -> {
-      if (!loadedCalcIndex.containsKey(id)) {
-        needInstall.add(id);
-      }
-    });
-
-    needUninstall.forEach(id -> {
-      IndexStorage indexStorage = loadedCalcIndex.get(id);
-      loadedCalcIndex.remove(id);
-      calculateActor
-          .tell(new UnloadCalcIndexMessage(ActorUtil.buildActorId(indexStorage)), getSelf());
-    });
-
-    needInstall.forEach(id -> {
-      IndexStorage indexStorage = newCalcIndex.get(id);
-      loadedCalcIndex.put(id, indexStorage);
-      calculateActor.tell(new LoadCalcIndexMessage(indexStorage), getSelf());
-    });
-  }
-
-  public enum Message {
-    /**
-     * 妫�娴嬫寚鏍�
-     */
-    REFRESH
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/indexcalc/SavePeriodActor.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/indexcalc/SavePeriodActor.java
deleted file mode 100644
index 2b4db9d..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/indexcalc/SavePeriodActor.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package com.dingzhuo.compute.engine.actor.indexcalc;
-
-import static org.apache.commons.lang3.StringUtils.equalsIgnoreCase;
-
-import akka.actor.ActorSelection;
-import akka.actor.ActorSystem;
-import akka.actor.Cancellable;
-import akka.actor.UntypedAbstractActor;
-import akka.event.Logging;
-import akka.event.LoggingAdapter;
-import com.dingzhuo.compute.engine.message.ExecuteType;
-import com.dingzhuo.compute.engine.message.calculation.CalculateMessage;
-import com.dingzhuo.compute.engine.message.save.SaveMessage;
-import com.dingzhuo.compute.engine.utils.ActorUtil;
-import com.dingzhuo.compute.engine.utils.ServiceProvicer;
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.TimeUnit;
-import org.joda.time.DateTime;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-import scala.concurrent.duration.Duration;
-import scala.concurrent.duration.FiniteDuration;
-
-@Component("savePeriodActor")
-@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class SavePeriodActor extends UntypedAbstractActor {
-
-  public static final String ACTOR_NAME = "savePeriodActor";
-  LoggingAdapter log = Logging.getLogger(getContext().getSystem(), this);
-  private final ActorSystem actorSystem;
-  private Cancellable timer;
-  private ActorSelection calculateActor;
-  private ConcurrentHashMap<String, SaveMessage> cacheData = new ConcurrentHashMap<>();
-
-  public SavePeriodActor(ActorSystem actorSystem) {
-    this.actorSystem = actorSystem;
-  }
-
-  @Override
-  public void preStart() throws Exception {
-    super.preStart();
-    calculateActor = getContext()
-        .actorSelection(ActorUtil.getActorAddress(CalculationIndexActor.ACTOR_NAME));
-    FiniteDuration interval = Duration.create(10, TimeUnit.SECONDS);
-    FiniteDuration delay = Duration.Zero();
-    timer = actorSystem.scheduler()
-        .scheduleAtFixedRate(delay, interval, self(), Message.TIMER, actorSystem.dispatcher(),
-            self());
-  }
-
-  @Override
-  public void postStop() throws Exception {
-    super.postStop();
-    if (timer != null) {
-      timer.cancel();
-    }
-  }
-
-  @Override
-  public void onReceive(Object message) {
-    if (message instanceof Message) {
-      if (message == Message.TIMER) {
-        doSave();
-      }
-    } else if (message instanceof SaveMessage) {
-      SaveMessage saveMessage = (SaveMessage) message;
-      String key = String.format("%s:%s", saveMessage.getIndexId(), saveMessage.getTimeCode());
-      cacheData.put(key, saveMessage);
-    }
-  }
-
-  private void doSave() {
-    if (!cacheData.isEmpty()) {
-      List<SaveMessage> saveData = new ArrayList<>();
-      List<String> needRemoveKeys = new ArrayList<>();
-      List<CalculateMessage> postIndexMessage = new ArrayList<>();
-      cacheData.forEach((key, value) -> {
-        needRemoveKeys.add(key);
-        saveData.add(value);
-        value.getPostActorIds().forEach(actorId -> {
-          if (!equalsIgnoreCase(actorId,
-              ActorUtil.buildActorId(value.getIndexId(), value.getTimeType()))) {
-            CalculateMessage message =
-                new CalculateMessage(actorId, value.getTimeCode(),
-                    value.getTimeType(),
-                    ExecuteType.TIMER);
-            postIndexMessage.add(message);
-          }
-        });
-      });
-
-      for (String key : needRemoveKeys) {
-        cacheData.remove(key);
-      }
-
-      savePeriodData(saveData);
-      postIndexMessage.forEach(message -> calculateActor.tell(message, getSelf()));
-    }
-  }
-
-  private void savePeriodData(List<SaveMessage> saveData) {
-    List<DataItem> dataItems = new ArrayList<>();
-    saveData.forEach(data -> {
-      String timeCode = data.getTimeCode();
-      DataItem dataItem = new DataItem();
-      dataItem.setIndexId(data.getIndexId());
-      dataItem.setTimeCode(timeCode);
-      dataItem.setTimeType(data.getTimeType());
-      dataItem.setBeginTime(TimeManager.getBeginTime(timeCode));
-      dataItem.setEndTime(TimeManager.getEndTime(timeCode));
-      dataItem.setDataTime(TimeManager.getTime(timeCode));
-      dataItem.setValue(data.getValue());
-      dataItems.add(dataItem);
-    });
-
-    try {
-      ServiceProvicer.getPeriodDataService().save(dataItems);
-    } catch (Exception ex) {
-      log.error("鎵归噺淇濆瓨澶辫触锛�" + ex.getMessage());
-      dataItems.forEach(item -> {
-        try {
-          if (item != null) {
-            ServiceProvicer.getPeriodDataService().save(item);
-          }
-        } catch (Exception singleEx) {
-          log.error("鍗曚釜淇濆瓨澶辫触锛�" + singleEx.getMessage());
-        }
-      });
-    }
-
-    log.error(DateTime.now().toString("yyyy-MM-dd HH:mm:ss.SSS"));
-  }
-
-  private enum Message {
-    /**
-     * 鏃堕棿瑙﹀彂
-     */
-    TIMER
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/indexcalc/TimerActor.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/indexcalc/TimerActor.java
deleted file mode 100644
index 17a6628..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/indexcalc/TimerActor.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package com.dingzhuo.compute.engine.actor.indexcalc;
-
-import akka.actor.ActorSelection;
-import akka.actor.ActorSystem;
-import akka.actor.Cancellable;
-import akka.actor.UntypedAbstractActor;
-import akka.event.Logging;
-import akka.event.LoggingAdapter;
-import com.dingzhuo.compute.engine.message.ExecuteType;
-import com.dingzhuo.compute.engine.message.calculation.CalculateMessage;
-import com.dingzhuo.compute.engine.message.timer.RegisterTimeMessage;
-import com.dingzhuo.compute.engine.message.timer.RegisterType;
-import com.dingzhuo.compute.engine.utils.ActorUtil;
-import com.dingzhuo.compute.engine.utils.CacheService;
-import com.dingzhuo.compute.engine.utils.ServiceProvicer;
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import org.apache.commons.lang3.StringUtils;
-import org.joda.time.DateTime;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-import scala.concurrent.duration.Duration;
-import scala.concurrent.duration.FiniteDuration;
-
-/**
- * @author fanxinfu
- */
-@Component("timerActor")
-@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class TimerActor extends UntypedAbstractActor {
-
-  public static final String ACTOR_NAME = "timerActor";
-  private final CacheService cacheService;
-  LoggingAdapter log = Logging.getLogger(getContext().getSystem(), this);
-  private final ActorSystem actorSystem;
-  private Cancellable timerCancelable;
-  private ActorSelection calculationActor;
-
-  public TimerActor(ActorSystem actorSystem, CacheService cacheService) {
-    this.actorSystem = actorSystem;
-    this.cacheService = cacheService;
-  }
-
-  @Override
-  public void preStart() throws Exception {
-    super.preStart();
-    calculationActor = getContext()
-        .actorSelection(ActorUtil.getActorAddress(CalculationIndexActor.ACTOR_NAME));
-    FiniteDuration interval = Duration
-        .create(ServiceProvicer.getCalculationConfig().getInterval(), TimeUnit.SECONDS);
-    FiniteDuration delay = Duration.Zero();
-    this.timerCancelable = actorSystem.scheduler()
-        .scheduleAtFixedRate(delay, interval, self(), Message.TIMER, actorSystem.dispatcher(),
-            self());
-  }
-
-  @Override
-  public void postStop() throws Exception {
-    super.postStop();
-    if (this.timerCancelable != null) {
-      this.timerCancelable.cancel();
-    }
-  }
-
-  @Override
-  public void onReceive(Object message) {
-    if (message instanceof Message) {
-      if (message == Message.TIMER) {
-        doTimer();
-      }
-    } else if (message instanceof RegisterTimeMessage) {
-      register((RegisterTimeMessage) message);
-    }
-  }
-
-  private void register(RegisterTimeMessage message) {
-    if (!cacheService.getRegisters().containsKey(message.getTimeType())) {
-      cacheService.getRegisters().put(message.getTimeType(), new HashSet<>());
-    }
-
-    if (message.getRegisterType() == RegisterType.REGISTER) {
-      cacheService.getRegisters().get(message.getTimeType()).add(message.getActorId());
-    } else if (message.getRegisterType() == RegisterType.UNREGISTER) {
-      cacheService.getRegisters().get(message.getTimeType()).remove(message.getActorId());
-    }
-  }
-
-  private void doTimer() {
-    Date now = DateTime.now().toDate();
-    TimeType[] timeTypes = TimeManager.typeArray;
-    int delayTime = ServiceProvicer.getCalculationConfig().getInterval() * 3;
-    for (TimeType timeType : timeTypes) {
-      String timeCode = TimeManager.getExecuteTimeCode(now, timeType, delayTime);
-      if (StringUtils.isEmpty(timeCode)) {
-        continue;
-      }
-
-      Set<String> actorIds = cacheService.getRegisters().get(timeType);
-      if (actorIds == null || actorIds.isEmpty()) {
-        continue;
-      }
-
-      for (String actorId : actorIds) {
-        calculationActor
-            .tell(new CalculateMessage(actorId, timeCode, timeType, ExecuteType.TIMER), getSelf());
-      }
-    }
-  }
-
-  public enum Message {
-    /**
-     * 鏃堕棿瑙﹀彂
-     */
-    TIMER
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/monitor/RecastDataActor.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/monitor/RecastDataActor.java
deleted file mode 100644
index e06d7f4..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/actor/monitor/RecastDataActor.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package com.dingzhuo.compute.engine.actor.monitor;
-
-import akka.actor.ActorSelection;
-import akka.actor.ActorSystem;
-import akka.actor.Cancellable;
-import akka.actor.UntypedAbstractActor;
-import com.alibaba.fastjson.JSONArray;
-import com.dingzhuo.compute.engine.actor.indexcalc.CalculationIndexActor;
-import com.dingzhuo.compute.engine.message.ExecuteType;
-import com.dingzhuo.compute.engine.message.calculation.CalculateMessage;
-import com.dingzhuo.compute.engine.utils.ActorUtil;
-import com.dingzhuo.compute.engine.utils.CacheService;
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import java.io.File;
-import java.nio.charset.Charset;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import org.apache.commons.io.FileUtils;
-import org.joda.time.DateTime;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-import scala.concurrent.duration.Duration;
-import scala.concurrent.duration.FiniteDuration;
-
-/**
- * @author fanxinfu
- */
-@Component("recastDataActor")
-@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class RecastDataActor extends UntypedAbstractActor {
-
-  public static final String ACTOR_NAME = "recastDataActor";
-  private final CacheService cacheService;
-  private Cancellable timerCancelable;
-  private final ActorSystem actorSystem;
-  private ActorSelection calculationActor;
-  Logger logger = LoggerFactory.getLogger(RecastDataActor.class.getName());
-
-  public RecastDataActor(ActorSystem actorSystem, CacheService cacheService) {
-    this.actorSystem = actorSystem;
-    this.cacheService = cacheService;
-  }
-
-  @Override
-  public void preStart() {
-    calculationActor = getContext()
-        .actorSelection(ActorUtil.getActorAddress(CalculationIndexActor.ACTOR_NAME));
-    FiniteDuration interval = Duration.create(10, TimeUnit.SECONDS);
-    FiniteDuration delay = Duration.Zero();
-    this.timerCancelable = actorSystem.scheduler().scheduleAtFixedRate(delay,
-        interval,
-        self(),
-        Message.TIMER,
-        actorSystem.dispatcher(),
-        self());
-  }
-
-  @Override
-  public void postStop() throws Exception {
-    super.postStop();
-    if (this.timerCancelable != null) {
-      this.timerCancelable.cancel();
-    }
-  }
-
-  @Override
-  public void onReceive(Object message) {
-    if (message instanceof Message) {
-      if (message == Message.TIMER) {
-        verifyRecastData();
-      }
-    }
-  }
-
-  private void verifyRecastData() {
-    String pathname = "recast.json";
-    try {
-      File jsonFile = new File(pathname);
-      if (jsonFile.exists()) {
-        sendRecastData(jsonFile);
-      }
-    } catch (Exception e) {
-      logger.error("", e);
-    }
-
-  }
-
-  private void sendRecastData(File jsonFile) {
-    try {
-      String jsonString = FileUtils.readFileToString(jsonFile, Charset.defaultCharset());
-      List<RecastConfig> configs = JSONArray.parseArray(jsonString, RecastConfig.class);
-      configs.forEach(config -> {
-        DateTime time = config.getBeginTime();
-        TimeType timeType = config.getTimeType();
-        Set<String> actorIds = cacheService.getRegisters().get(timeType);
-        if (actorIds != null && actorIds.size() > 0) {
-          while (time.isBefore(config.getEndTime())) {
-            String timeCode = TimeManager.getTimeCode(time.toDate(), timeType);
-            for (String actorId : actorIds) {
-              CalculateMessage msg =
-                  new CalculateMessage(actorId, timeCode, timeType, ExecuteType.TIMER);
-              calculationActor.tell(msg, getSelf());
-            }
-
-            if (timeType == TimeType.HOUR) {
-              time = time.plusHours(1);
-            } else if (timeType == TimeType.DAY) {
-              time = time.plusDays(1);
-            } else if (timeType == TimeType.MONTH) {
-              time = time.plusMonths(1);
-            } else if (timeType == TimeType.YEAR) {
-              time = time.plusYears(1);
-            }
-
-            try {
-              Thread.sleep(0);
-            } catch (InterruptedException e) {
-              logger.error("", e);
-            }
-          }
-        }
-      });
-
-      jsonFile.delete();
-    } catch (Exception ex) {
-      logger.error("", ex);
-    }
-  }
-
-  private static class RecastConfig {
-
-    private DateTime beginTime;
-    private DateTime endTime;
-    private TimeType timeType;
-
-    public DateTime getBeginTime() {
-      return beginTime;
-    }
-
-    public void setBeginTime(DateTime beginTime) {
-      this.beginTime = beginTime;
-    }
-
-    public DateTime getEndTime() {
-      return endTime;
-    }
-
-    public void setEndTime(DateTime endTime) {
-      this.endTime = endTime;
-    }
-
-    public TimeType getTimeType() {
-      return timeType;
-    }
-
-    public void setTimeType(TimeType timeType) {
-      this.timeType = timeType;
-    }
-  }
-
-  public enum Message {
-    /**
-     * 鏃堕棿瑙﹀彂
-     */
-    TIMER
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/config/CalcMessageExtractor.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/config/CalcMessageExtractor.java
deleted file mode 100644
index dc8a0f7..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/config/CalcMessageExtractor.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.dingzhuo.compute.engine.config;
-
-import akka.cluster.sharding.ShardRegion.MessageExtractor;
-import com.dingzhuo.compute.engine.message.BaseActorMessage;
-
-/**
- * @author fanxinfu
- */
-public class CalcMessageExtractor implements MessageExtractor {
-
-  @Override
-  public String entityId(Object message) {
-    if (message instanceof BaseActorMessage) {
-      return ((BaseActorMessage) message).getActorId();
-    }
-
-    return null;
-  }
-
-  @Override
-  public Object entityMessage(Object message) {
-    return message;
-  }
-
-  @Override
-  public String shardId(Object message) {
-    if (message instanceof BaseActorMessage) {
-      return String.valueOf(((BaseActorMessage) message).getActorId().hashCode() % 10);
-    }
-
-    return null;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/config/CalculationConfig.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/config/CalculationConfig.java
deleted file mode 100644
index c191a2f..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/config/CalculationConfig.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.dingzhuo.compute.engine.config;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-/**
- * @author fanxinfu
- */
-@Component
-@ConfigurationProperties(prefix = "calc")
-public class CalculationConfig {
-
-  private int interval;
-
-  public int getInterval() {
-    return interval;
-  }
-
-  public void setInterval(int interval) {
-    this.interval = interval;
-  }
-}
\ No newline at end of file
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/config/EngineArgOption.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/config/EngineArgOption.java
deleted file mode 100644
index d2eda07..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/config/EngineArgOption.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.dingzhuo.compute.engine.config;
-
-import org.kohsuke.args4j.Option;
-
-public class EngineArgOption {
-
-  @Option(name = "-c", usage = "鎸囨爣璁$畻寮曟搸")
-  private boolean calc;
-  @Option(name = "-a", usage = "鎸囨爣鎶ヨ寮曟搸")
-  private boolean alarm;
-  @Option(name = "-d", usage = "璁惧妫�娴嬪紩鎿�")
-  private boolean device;
-  @Option(name = "-r", usage = "閲嶇畻寮曟搸")
-  private boolean recast;
-
-  public boolean isCalc() {
-    return calc;
-  }
-
-  public void setCalc(boolean calc) {
-    this.calc = calc;
-  }
-
-  public boolean isAlarm() {
-    return alarm;
-  }
-
-  public void setAlarm(boolean alarm) {
-    this.alarm = alarm;
-  }
-
-  public boolean isDevice() {
-    return device;
-  }
-
-  public void setDevice(boolean device) {
-    this.device = device;
-  }
-
-  public void setRecast(boolean recast) {
-    this.recast = recast;
-  }
-
-  public boolean isRecast() {
-    return recast;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/config/ExecutePrioMailBox.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/config/ExecutePrioMailBox.java
deleted file mode 100644
index 0772589..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/config/ExecutePrioMailBox.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.dingzhuo.compute.engine.config;
-
-import akka.dispatch.Envelope;
-import akka.dispatch.UnboundedStablePriorityMailbox;
-import java.util.Comparator;
-
-public class ExecutePrioMailBox extends UnboundedStablePriorityMailbox {
-
-  public ExecutePrioMailBox(Comparator<Envelope> cmp, int initialCapacity) {
-    super(cmp, initialCapacity);
-  }
-
-  public ExecutePrioMailBox(Comparator<Envelope> cmp) {
-    super(cmp);
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/controller/CalculationController.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/controller/CalculationController.java
deleted file mode 100644
index 61c9ec0..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/controller/CalculationController.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.dingzhuo.compute.engine.controller;
-
-import akka.actor.ActorRef;
-import akka.actor.ActorSelection;
-import akka.actor.ActorSystem;
-import com.dingzhuo.compute.engine.actor.indexcalc.CalculationIndexActor;
-import com.dingzhuo.compute.engine.message.ExecuteType;
-import com.dingzhuo.compute.engine.message.calculation.CalculateMessage;
-import com.dingzhuo.compute.engine.utils.ActorUtil;
-import com.dingzhuo.compute.engine.utils.SpringAkkaExtension;
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.data.model.domain.IndexStorage;
-import com.dingzhuo.energy.data.model.service.IIndexStorageService;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import java.util.List;
-import org.joda.time.DateTime;
-import org.joda.time.format.DateTimeFormat;
-import org.joda.time.format.DateTimeFormatter;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("/computing")
-public class CalculationController {
-
-  private final ActorSystem actorSystem;
-  private final SpringAkkaExtension akkaExt;
-  private final IIndexStorageService storageService;
-  private ActorSelection calculateActor;
-
-  public CalculationController(ActorSystem actorSystem, SpringAkkaExtension akkaExt,
-      IIndexStorageService storageService) {
-    this.actorSystem = actorSystem;
-    this.akkaExt = akkaExt;
-    this.storageService = storageService;
-  }
-
-  @GetMapping("/recalc")
-  public AjaxResult reCalc(@RequestBody List<Recalc> recalcList) {
-    calculateActor = actorSystem.actorSelection(
-        ActorUtil.getActorAddress(CalculationIndexActor.ACTOR_NAME));
-    DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
-    recalcList.forEach(recalc -> {
-      IndexStorage indexStorage = storageService.getIndexStorage(recalc.getIndexId(),
-          recalc.getTimeType());
-      if (indexStorage != null) {
-        String actorId = ActorUtil.buildActorId(indexStorage);
-        String timeCode = TimeManager.getTimeCode(
-            DateTime.parse(recalc.getDataTime(), fmt).toDate(),
-            recalc.getTimeType());
-        calculateActor.tell(
-            new CalculateMessage(actorId, timeCode, recalc.getTimeType(), ExecuteType.TIMER),
-            ActorRef.noSender());
-      }
-    });
-    return AjaxResult.success();
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/controller/Recalc.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/controller/Recalc.java
deleted file mode 100644
index 4bc168c..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/controller/Recalc.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.dingzhuo.compute.engine.controller;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-
-public class Recalc {
-
-  private String indexId;
-  private String dataTime;
-  private TimeType timeType;
-
-  public String getDataTime() {
-    return dataTime;
-  }
-
-  public void setDataTime(String dataTime) {
-    this.dataTime = dataTime;
-  }
-
-  public TimeType getTimeType() {
-    return timeType;
-  }
-
-  public void setTimeType(TimeType timeType) {
-    this.timeType = timeType;
-  }
-
-  public String getIndexId() {
-    return indexId;
-  }
-
-  public void setIndexId(String indexId) {
-    this.indexId = indexId;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/function/CustomFunction.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/function/CustomFunction.java
deleted file mode 100644
index c89f8f5..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/function/CustomFunction.java
+++ /dev/null
@@ -1,201 +0,0 @@
-package com.dingzhuo.compute.engine.function;
-
-import com.dingzhuo.compute.engine.message.alarm.AlarmStatus;
-import com.dingzhuo.compute.engine.utils.ServiceProvicer;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.data.model.domain.LimitType;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmJudgeDirection;
-import com.dingzhuo.energy.dataservice.domain.CollectionModes;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import com.dingzhuo.energy.dataservice.service.PeriodDataService;
-import com.dingzhuo.energy.dataservice.service.RealtimeDatabaseService;
-import com.greenpineyu.fel.context.FelContext;
-import com.greenpineyu.fel.function.CommonFunction;
-import com.greenpineyu.fel.function.Function;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-import org.joda.time.Instant;
-
-/**
- * 鑷畾涔夊嚱鏁�
- *
- * @author fanxinfu
- */
-public class CustomFunction {
-
-    static Function accumulate = new CommonFunction() {
-        @Override
-        public Object call(Object[] arguments, FelContext felContext) {
-            if (arguments == null || arguments.length == 0) {
-                return 0;
-            }
-
-            String indexCode = String.valueOf(arguments[0]);
-            String timeCode = String.valueOf(felContext.get("timeCode"));
-            Date beginTime = TimeManager.getBeginTime(timeCode);
-            Date endTime = TimeManager.getEndTime(timeCode);
-            if (timeCode.startsWith("M") && endTime.after(Instant.now().toDate())) {
-                endTime = Instant.now().toDate();
-            }
-            RealtimeDatabaseService service = ServiceProvicer.getRealtimeDatabaseService();
-            TagValue beginValue = service.retrieve(indexCode, beginTime, timeCode);
-            TagValue endValue = service.retrieve(indexCode, endTime, timeCode);
-            if (beginValue == null || beginValue.getValue() == null) {
-                return 0;
-            }
-            if (endValue == null || endValue.getValue() == null) {
-                return 0;
-            }
-
-            if (beginValue.getValue() > endValue.getValue()) {
-                TagValue maxValue = service
-                        .statistics(indexCode, beginTime, endTime, CollectionModes.Maximum);
-                TagValue minValue = service
-                        .statistics(indexCode, beginTime, endTime, CollectionModes.Minimum);
-                if (maxValue == null || maxValue.getValue() == null) {
-                    return 0;
-                }
-                if (minValue == null || minValue.getValue() == null) {
-                    return 0;
-                }
-
-                BigDecimal value = BigDecimal.valueOf(maxValue.getValue())
-                        .subtract(BigDecimal.valueOf(beginValue.getValue()))
-                        .add(BigDecimal.valueOf(endValue.getValue()))
-                        .subtract(BigDecimal.valueOf(minValue.getValue()));
-                return value.doubleValue();
-            }
-
-            BigDecimal value = BigDecimal.valueOf(endValue.getValue())
-                    .subtract(BigDecimal.valueOf(beginValue.getValue()));
-            return value.doubleValue();
-        }
-
-        @Override
-        public String getName() {
-            return "accumulate";
-        }
-    };
-
-    static Function get = new CommonFunction() {
-        @Override
-        public Object call(Object[] arguments, FelContext felContext) {
-            if (arguments == null || arguments.length == 0) {
-                return 0;
-            }
-
-            String indexCode = String.valueOf(arguments[0]);
-            String timeCode = String.valueOf(felContext.get("timeCode"));
-            PeriodDataService service = ServiceProvicer.getPeriodDataService();
-            DataItem item = service.getDataByIndexCode(indexCode, timeCode);
-            return item == null ? 0 : item.getValue();
-        }
-
-        @Override
-        public String getName() {
-            return "get";
-        }
-    };
-
-    static Function limitRealtimeAlarm = new CommonFunction() {
-        @Override
-        public Object call(Object[] arguments, FelContext felContext) {
-            if (arguments == null || arguments.length == 0) {
-                return 0;
-            }
-
-            String actorId = String.valueOf(arguments[0]);
-            AlarmItem item = ServiceProvicer.getCacheService().getAlarmItem(actorId);
-            if (item == null) {
-                return false;
-            }
-
-            boolean isAlarm = false;
-            TagValue tagValue = ServiceProvicer.getCacheService().getTagValue(item.getIndexCode());
-            if (tagValue == null) {
-                tagValue = ServiceProvicer.getRealtimeDatabaseService().retrieve(item.getIndexCode());
-            }
-
-            if (tagValue == null || tagValue.getValue() == null) {
-                // 鍙栦笉鍒版暟鏃朵繚鎸佷笂娆$姸鎬�
-                AlarmStatus lastStatus = ServiceProvicer.getCacheService()
-                        .getAlarmStatus(item.getDwid(), item.getTimeSlot(), item.getLimitType());
-                isAlarm = lastStatus != null && lastStatus.isAlarm();
-            } else {
-                LimitType limitType = ServiceProvicer.getCacheService().getLimitType(item.getLimitType());
-                AlarmJudgeDirection judge = AlarmJudgeDirection.value(limitType.getComparatorOperator());
-                Double limitValue = Double.parseDouble(item.getLimitVal());
-                if (judge == AlarmJudgeDirection.G) {
-                    isAlarm = tagValue.getValue() > limitValue;
-                } else if (judge == AlarmJudgeDirection.GE) {
-                    isAlarm = tagValue.getValue() >= limitValue;
-                } else if (judge == AlarmJudgeDirection.L) {
-                    isAlarm = tagValue.getValue() < limitValue;
-                } else if (judge == AlarmJudgeDirection.LE) {
-                    isAlarm = tagValue.getValue() <= limitValue;
-                } else if (judge == AlarmJudgeDirection.E) {
-                    isAlarm = Math.abs(tagValue.getValue() - limitValue) < 0.000000001;
-                }
-            }
-
-            ServiceProvicer.getCacheService().cacheTagValue(tagValue);
-            return isAlarm;
-        }
-
-        @Override
-        public String getName() {
-            return "limitRealtimeAlarm";
-        }
-    };
-
-    static Function limitPeriodAlarm = new CommonFunction() {
-        @Override
-        public Object call(Object[] arguments, FelContext felContext) {
-            if (arguments == null || arguments.length == 0) {
-                return 0;
-            }
-
-            String actorId = String.valueOf(arguments[0]);
-            AlarmItem item = ServiceProvicer.getCacheService().getAlarmItem(actorId);
-            boolean isAlarm = false;
-            String timeCode = felContext.get("timeCode").toString();
-            DataItem dataItem = ServiceProvicer.getPeriodDataService()
-                    .getDataByIndex(item.getDwid(), timeCode);
-
-            if (dataItem == null || dataItem.getValue() == null) {
-                // 鍙栦笉鍒版暟鏃朵繚鎸佷笂娆$姸鎬�
-                AlarmStatus lastStatus = ServiceProvicer.getCacheService()
-                        .getAlarmStatus(item.getDwid(), item.getTimeSlot(), item.getLimitType());
-                isAlarm = lastStatus != null && lastStatus.isAlarm();
-            } else {
-                LimitType limitType = ServiceProvicer.getCacheService().getLimitType(item.getLimitType());
-                AlarmJudgeDirection judge = AlarmJudgeDirection.value(limitType.getComparatorOperator());
-                Double limitValue = Double.parseDouble(item.getLimitVal());
-                if (judge == AlarmJudgeDirection.G) {
-                    isAlarm = dataItem.getValue() > limitValue;
-                } else if (judge == AlarmJudgeDirection.GE) {
-                    isAlarm = dataItem.getValue() >= limitValue;
-                } else if (judge == AlarmJudgeDirection.L) {
-                    isAlarm = dataItem.getValue() < limitValue;
-                } else if (judge == AlarmJudgeDirection.LE) {
-                    isAlarm = dataItem.getValue() <= limitValue;
-                } else if (judge == AlarmJudgeDirection.E) {
-                    isAlarm = Math.abs(dataItem.getValue() - limitValue) < 0.000000001;
-                }
-            }
-
-            return isAlarm;
-        }
-
-        @Override
-        public String getName() {
-            return "limitPeriodAlarm";
-        }
-    };
-
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/function/FunctionEngine.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/function/FunctionEngine.java
deleted file mode 100644
index dbe5ee2..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/function/FunctionEngine.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.dingzhuo.compute.engine.function;
-
-
-import com.greenpineyu.fel.FelEngine;
-import com.greenpineyu.fel.FelEngineImpl;
-
-/**
- * @author fanxinfu
- */
-public class FunctionEngine {
-
-  private static ThreadLocal<FunctionEngine> function = ThreadLocal
-      .withInitial(FunctionEngine::new);
-  private FelEngine felEngine;
-
-  private FunctionEngine() {
-    felEngine = new FelEngineImpl();
-    felEngine.addFun(CustomFunction.accumulate);
-    felEngine.addFun(CustomFunction.get);
-    felEngine.addFun(CustomFunction.limitPeriodAlarm);
-    felEngine.addFun(CustomFunction.limitRealtimeAlarm);
-  }
-
-  public static FelEngine getInstance() {
-    return function.get().felEngine;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/BaseActorMessage.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/BaseActorMessage.java
deleted file mode 100644
index 3072350..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/BaseActorMessage.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.dingzhuo.compute.engine.message;
-
-/**
- * @author fanxinfu
- */
-public class BaseActorMessage {
-
-  private String actorId;
-
-  public BaseActorMessage(String actorId) {
-    this.actorId = actorId;
-  }
-
-  public String getActorId() {
-    return actorId;
-  }
-
-  public void setActorId(String actorId) {
-    this.actorId = actorId;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/ExecuteType.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/ExecuteType.java
deleted file mode 100644
index c59e8ce..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/ExecuteType.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.dingzhuo.compute.engine.message;
-
-public enum ExecuteType {
-  /**
-   * 鍒扮偣瑙﹀彂
-   */
-  TIMER,
-  /**
-   * 寮哄埗璁$畻
-   */
-  DEMAND
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/AlarmJudgeMessage.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/AlarmJudgeMessage.java
deleted file mode 100644
index 1a743bd..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/AlarmJudgeMessage.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.dingzhuo.compute.engine.message.alarm;
-
-import com.dingzhuo.compute.engine.message.BaseActorMessage;
-
-public class AlarmJudgeMessage extends BaseActorMessage {
-
-  public AlarmJudgeMessage(String actorId) {
-    super(actorId);
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/AlarmRegisterMessage.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/AlarmRegisterMessage.java
deleted file mode 100644
index 22426c4..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/AlarmRegisterMessage.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.dingzhuo.compute.engine.message.alarm;
-
-import com.dingzhuo.compute.engine.message.BaseActorMessage;
-import com.dingzhuo.compute.engine.message.timer.RegisterType;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem;
-
-/**
- * @author fanxinfu
- */
-public class AlarmRegisterMessage extends BaseActorMessage {
-
-  private RegisterType registerType;
-  private AlarmType alarmType;
-  private AlarmItem alarmItem;
-
-  public AlarmRegisterMessage(String actorId, AlarmType alarmType,
-      RegisterType registerType,
-      AlarmItem alarmItem) {
-    super(actorId);
-    this.alarmType = alarmType;
-    this.registerType = registerType;
-    this.alarmItem = alarmItem;
-  }
-
-  public RegisterType getRegisterType() {
-    return registerType;
-  }
-
-  public void setRegisterType(RegisterType registerType) {
-    this.registerType = registerType;
-  }
-
-  public AlarmType getAlarmType() {
-    return alarmType;
-  }
-
-  public void setAlarmType(AlarmType alarmType) {
-    this.alarmType = alarmType;
-  }
-
-  public AlarmItem getAlarmItem() {
-    return alarmItem;
-  }
-
-  public void setAlarmItem(AlarmItem alarmItem) {
-    this.alarmItem = alarmItem;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/AlarmSaveMessage.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/AlarmSaveMessage.java
deleted file mode 100644
index 907846f..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/AlarmSaveMessage.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.dingzhuo.compute.engine.message.alarm;
-
-import com.dingzhuo.compute.engine.message.BaseActorMessage;
-
-/**
- * @author fanxinfu
- */
-public class AlarmSaveMessage extends BaseActorMessage {
-
-  public AlarmSaveMessage(String actorId) {
-    super(actorId);
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/AlarmStatus.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/AlarmStatus.java
deleted file mode 100644
index 0104888..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/AlarmStatus.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.dingzhuo.compute.engine.message.alarm;
-
-import java.util.Date;
-
-public class AlarmStatus {
-
-  private boolean isAlarm;
-  private Date beginTime;
-
-  public boolean isAlarm() {
-    return isAlarm;
-  }
-
-  public void setAlarm(boolean alarm) {
-    isAlarm = alarm;
-  }
-
-  public Date getBeginTime() {
-    return beginTime;
-  }
-
-  public void setBeginTime(Date beginTime) {
-    this.beginTime = beginTime;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/AlarmType.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/AlarmType.java
deleted file mode 100644
index 3656a53..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/AlarmType.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.dingzhuo.compute.engine.message.alarm;
-
-public enum AlarmType {
-  /**
-   * 瀹炴椂鎶ヨ
-   */
-  LIVE,
-  /**
-   * 闃舵鎶ヨ
-   */
-  PERIOD
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/LoadAlarmMessage.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/LoadAlarmMessage.java
deleted file mode 100644
index 7a5d39a..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/LoadAlarmMessage.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.dingzhuo.compute.engine.message.alarm;
-
-import com.dingzhuo.compute.engine.message.BaseActorMessage;
-import com.dingzhuo.compute.engine.utils.ActorUtil;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem;
-
-/**
- * @author fanxinfu
- */
-public class LoadAlarmMessage extends BaseActorMessage {
-
-  private AlarmItem alarmItem;
-
-  public LoadAlarmMessage(AlarmItem alarmItem) {
-    super(ActorUtil.buildAlarmActorId(alarmItem));
-    this.alarmItem = alarmItem;
-  }
-
-  public AlarmItem getAlarmItem() {
-    return alarmItem;
-  }
-
-  public void setAlarmItem(AlarmItem alarmItem) {
-    this.alarmItem = alarmItem;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/UnloadAlarmMessage.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/UnloadAlarmMessage.java
deleted file mode 100644
index 7d475e1..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/alarm/UnloadAlarmMessage.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.dingzhuo.compute.engine.message.alarm;
-
-import com.dingzhuo.compute.engine.message.BaseActorMessage;
-import com.dingzhuo.compute.engine.utils.ActorUtil;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem;
-
-/**
- * @author fanxinfu
- */
-public class UnloadAlarmMessage extends BaseActorMessage {
-
-  private AlarmItem alarmItem;
-
-  public UnloadAlarmMessage(AlarmItem alarmItem) {
-    super(ActorUtil.buildAlarmActorId(alarmItem));
-    this.alarmItem = alarmItem;
-  }
-
-  public AlarmItem getAlarmItem() {
-    return alarmItem;
-  }
-
-  public void setAlarmItem(AlarmItem alarmItem) {
-    this.alarmItem = alarmItem;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/calculation/CalculateMessage.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/calculation/CalculateMessage.java
deleted file mode 100644
index 758b4f1..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/calculation/CalculateMessage.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.dingzhuo.compute.engine.message.calculation;
-
-import com.dingzhuo.compute.engine.message.ExecuteType;
-import com.dingzhuo.compute.engine.message.BaseActorMessage;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-
-/**
- * @author fanxinfu
- */
-public class CalculateMessage extends BaseActorMessage {
-
-  private String timeCode;
-  private TimeType timeType;
-  private ExecuteType executeType;
-
-  public CalculateMessage(String actorId, String timeCode, TimeType timeType,
-      ExecuteType executeType) {
-    super(actorId);
-    this.timeCode = timeCode;
-    this.timeType = timeType;
-    this.executeType = executeType;
-  }
-
-  public String getTimeCode() {
-    return timeCode;
-  }
-
-  public void setTimeCode(String timeCode) {
-    this.timeCode = timeCode;
-  }
-
-  public TimeType getTimeType() {
-    return timeType;
-  }
-
-  public void setTimeType(TimeType timeType) {
-    this.timeType = timeType;
-  }
-
-  public ExecuteType getExecuteType() {
-    return executeType;
-  }
-
-  public void setExecuteType(ExecuteType executeType) {
-    this.executeType = executeType;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/calculation/LinkMessage.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/calculation/LinkMessage.java
deleted file mode 100644
index 9eb90ad..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/calculation/LinkMessage.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.dingzhuo.compute.engine.message.calculation;
-
-import com.dingzhuo.compute.engine.message.BaseActorMessage;
-
-public class LinkMessage extends BaseActorMessage {
-
-  private String postActorId;
-
-  public LinkMessage(String actorId, String postActorId) {
-    super(actorId);
-    this.postActorId = postActorId;
-  }
-
-  public String getPostActorId() {
-    return postActorId;
-  }
-
-  public void setPostActorId(String postActorId) {
-    this.postActorId = postActorId;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/calculation/LoadCalcIndexMessage.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/calculation/LoadCalcIndexMessage.java
deleted file mode 100644
index 663237f..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/calculation/LoadCalcIndexMessage.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.dingzhuo.compute.engine.message.calculation;
-
-import com.dingzhuo.compute.engine.message.BaseActorMessage;
-import com.dingzhuo.compute.engine.utils.ActorUtil;
-import com.dingzhuo.energy.data.model.domain.IndexStorage;
-
-/**
- * @author fanxinfu
- */
-public class LoadCalcIndexMessage extends BaseActorMessage {
-
-  private IndexStorage indexStorage;
-
-  public LoadCalcIndexMessage(IndexStorage indexStorage) {
-    super(ActorUtil.buildActorId(indexStorage));
-    this.indexStorage = indexStorage;
-  }
-
-  public IndexStorage getIndexStorage() {
-    return indexStorage;
-  }
-
-  public void setIndexStorage(IndexStorage indexStorage) {
-    this.indexStorage = indexStorage;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/calculation/UnlinkMessage.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/calculation/UnlinkMessage.java
deleted file mode 100644
index dcc8e82..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/calculation/UnlinkMessage.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.dingzhuo.compute.engine.message.calculation;
-
-import com.dingzhuo.compute.engine.message.BaseActorMessage;
-
-public class UnlinkMessage extends BaseActorMessage {
-
-  private String postActorId;
-
-  public UnlinkMessage(String actorId, String postActorId) {
-    super(actorId);
-    this.postActorId = postActorId;
-  }
-
-  public String getPostActorId() {
-    return postActorId;
-  }
-
-  public void setPostActorId(String postActorId) {
-    this.postActorId = postActorId;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/calculation/UnloadCalcIndexMessage.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/calculation/UnloadCalcIndexMessage.java
deleted file mode 100644
index 99c368a..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/calculation/UnloadCalcIndexMessage.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.dingzhuo.compute.engine.message.calculation;
-
-import com.dingzhuo.compute.engine.message.BaseActorMessage;
-
-public class UnloadCalcIndexMessage extends BaseActorMessage {
-
-  public UnloadCalcIndexMessage(String actorId) {
-    super(actorId);
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/device/DeviceStatus.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/device/DeviceStatus.java
deleted file mode 100644
index d8c0706..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/device/DeviceStatus.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.dingzhuo.compute.engine.message.device;
-
-import java.util.Date;
-
-public class DeviceStatus {
-
-  private boolean alarm;
-  private Date beginTime;
-
-  public boolean isAlarm() {
-    return alarm;
-  }
-
-  public void setAlarm(boolean alarm) {
-    this.alarm = alarm;
-  }
-
-  public Date getBeginTime() {
-    return beginTime;
-  }
-
-  public void setBeginTime(Date beginTime) {
-    this.beginTime = beginTime;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/device/DeviceStatusJudgeMessage.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/device/DeviceStatusJudgeMessage.java
deleted file mode 100644
index 7afd615..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/device/DeviceStatusJudgeMessage.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.dingzhuo.compute.engine.message.device;
-
-import com.dingzhuo.compute.engine.message.BaseActorMessage;
-
-public class DeviceStatusJudgeMessage  extends BaseActorMessage {
-
-  public DeviceStatusJudgeMessage(String actorId) {
-    super(actorId);
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/device/LoadDeviceStatusMessage.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/device/LoadDeviceStatusMessage.java
deleted file mode 100644
index 8e76dc0..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/device/LoadDeviceStatusMessage.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.dingzhuo.compute.engine.message.device;
-
-import com.dingzhuo.compute.engine.message.BaseActorMessage;
-import com.dingzhuo.compute.engine.utils.ActorUtil;
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceFormula;
-
-public class LoadDeviceStatusMessage extends BaseActorMessage {
-
-  private DeviceFormula deviceFormula;
-
-  public LoadDeviceStatusMessage(DeviceFormula deviceFormula) {
-    super(ActorUtil.buildActorId(deviceFormula));
-  }
-
-  public DeviceFormula getDeviceFormula() {
-    return deviceFormula;
-  }
-
-  public void setDeviceFormula(
-      DeviceFormula deviceFormula) {
-    this.deviceFormula = deviceFormula;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/device/UnloadDeviceStatusMessage.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/device/UnloadDeviceStatusMessage.java
deleted file mode 100644
index 4c5ba47..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/device/UnloadDeviceStatusMessage.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.dingzhuo.compute.engine.message.device;
-
-import com.dingzhuo.compute.engine.message.BaseActorMessage;
-import com.dingzhuo.compute.engine.utils.ActorUtil;
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceFormula;
-
-public class UnloadDeviceStatusMessage extends BaseActorMessage {
-
-  private DeviceFormula deviceFormula;
-
-  public UnloadDeviceStatusMessage(DeviceFormula deviceFormula) {
-    super(ActorUtil.buildActorId(deviceFormula));
-  }
-
-  public DeviceFormula getDeviceFormula() {
-    return deviceFormula;
-  }
-
-  public void setDeviceFormula(
-      DeviceFormula deviceFormula) {
-    this.deviceFormula = deviceFormula;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/save/SaveMessage.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/save/SaveMessage.java
deleted file mode 100644
index 8bd463a..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/save/SaveMessage.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.dingzhuo.compute.engine.message.save;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author fanxinfu
- */
-public class SaveMessage {
-
-  private String indexId;
-  private String timeCode;
-  private TimeType timeType;
-  private double value;
-  private List<String> postActorIds = new ArrayList<>();
-
-  public String getTimeCode() {
-    return timeCode;
-  }
-
-  public void setTimeCode(String timeCode) {
-    this.timeCode = timeCode;
-  }
-
-  public double getValue() {
-    return value;
-  }
-
-  public void setValue(double value) {
-    this.value = value;
-  }
-
-  public List<String> getPostActorIds() {
-    return postActorIds;
-  }
-
-  public String getIndexId() {
-    return indexId;
-  }
-
-  public void setIndexId(String indexId) {
-    this.indexId = indexId;
-  }
-
-  public TimeType getTimeType() {
-    return timeType;
-  }
-
-  public void setTimeType(TimeType timeType) {
-    this.timeType = timeType;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/timer/RegisterTimeMessage.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/timer/RegisterTimeMessage.java
deleted file mode 100644
index ccbae21..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/timer/RegisterTimeMessage.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.dingzhuo.compute.engine.message.timer;
-
-import com.dingzhuo.compute.engine.message.BaseActorMessage;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-
-public class RegisterTimeMessage extends BaseActorMessage {
-
-  private TimeType timeType;
-  private RegisterType registerType;
-
-  public RegisterTimeMessage(String actorId,
-      TimeType timeType,
-      RegisterType registerType) {
-    super(actorId);
-    this.timeType = timeType;
-    this.registerType = registerType;
-  }
-
-  public TimeType getTimeType() {
-    return timeType;
-  }
-
-  public void setTimeType(TimeType timeType) {
-    this.timeType = timeType;
-  }
-
-  public RegisterType getRegisterType() {
-    return registerType;
-  }
-
-  public void setRegisterType(RegisterType registerType) {
-    this.registerType = registerType;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/timer/RegisterType.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/timer/RegisterType.java
deleted file mode 100644
index 5458468..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/message/timer/RegisterType.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.dingzhuo.compute.engine.message.timer;
-
-public enum RegisterType {
-  /**
-   * 娉ㄥ唽
-   */
-  REGISTER,
-  /**
-   * 鍗歌浇
-   */
-  UNREGISTER
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/utils/ActorUtil.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/utils/ActorUtil.java
deleted file mode 100644
index adc10d3..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/utils/ActorUtil.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.dingzhuo.compute.engine.utils;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.model.domain.IndexStorage;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem;
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceFormula;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author fanxinfu
- */
-public class ActorUtil {
-
-  public static String ACTOR_SYSTEM = "CsieComputeEngine";
-
-  public static String buildActorId(IndexStorage indexStorage) {
-    return String
-        .format("Index:%s:%s", indexStorage.getTimeType().name(), indexStorage.getIndexId());
-  }
-
-  public static String buildAlarmActorId(AlarmItem alarmItem) {
-    return String.format("Alarm:%s:%s:%s", alarmItem.getDwid(), alarmItem.getTimeSlot(),
-        alarmItem.getLimitType());
-  }
-
-  public static String buildActorId(String indexId, TimeType timeType) {
-    return String.format("Index:%s:%s", timeType, indexId);
-  }
-
-  public static String buildAlarmStatusId(String indexId, String timeType, String limitType) {
-    return String.format("Status:%s:%s:%s", indexId, timeType, limitType);
-  }
-
-  public static String getActorAddress(String actorName) {
-    return String.format("akka://%s/user/%s", ACTOR_SYSTEM, actorName);
-  }
-
-  public static <E> List<List<E>> splitList(List<E> targetList, Integer splitSize) {
-    if (targetList == null) {
-      return new ArrayList<>();
-    }
-
-    int size = targetList.size();
-    List<List<E>> resultList = new ArrayList<>();
-    if (size <= splitSize) {
-      resultList.add(targetList);
-    } else {
-      for (int i = 0; i < size; i += splitSize) {
-        //鐢ㄤ簬闄愬埗鏈�鍚庝竴閮ㄥ垎size灏忎簬splitSize鐨刲ist
-        int limit = i + splitSize;
-        if (limit > size) {
-          limit = size;
-        }
-        resultList.add(targetList.subList(i, limit));
-      }
-    }
-    return resultList;
-  }
-
-  public static String buildActorId(DeviceFormula deviceFormula) {
-    return String.format("Device:%s", deviceFormula.getId());
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/utils/CacheService.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/utils/CacheService.java
deleted file mode 100644
index 95974d1..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/utils/CacheService.java
+++ /dev/null
@@ -1,182 +0,0 @@
-package com.dingzhuo.compute.engine.utils;
-
-import com.dingzhuo.compute.engine.message.alarm.AlarmStatus;
-import com.dingzhuo.compute.engine.message.device.DeviceStatus;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.model.domain.IndexStorage;
-import com.dingzhuo.energy.data.model.domain.LimitType;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem;
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceFormula;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-
-@Component
-@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
-public class CacheService {
-
-  private final Logger logger = LoggerFactory.getLogger(this.getClass());
-  private ConcurrentHashMap<String, IndexStorage> indexStorageCache = new ConcurrentHashMap<>();
-  private ConcurrentHashMap<String, List<String>> postIndexIdsCache = new ConcurrentHashMap<>();
-  private ConcurrentHashMap<String, AlarmItem> alarmItemCache = new ConcurrentHashMap<>();
-  private ConcurrentHashMap<String, AlarmStatus> alarmCache = new ConcurrentHashMap<>();
-  private ConcurrentHashMap<String, LimitType> limitTypeCache = new ConcurrentHashMap<>();
-  private ConcurrentHashMap<String, TagValue> tagValueCache = new ConcurrentHashMap<>();
-  private ConcurrentHashMap<String, DeviceFormula> deviceFormulaCache = new ConcurrentHashMap<>();
-  private ConcurrentHashMap<String, DeviceStatus> deviceStatusCache = new ConcurrentHashMap<>();
-
-  private ConcurrentHashMap<TimeType, Set<String>> registers = new ConcurrentHashMap<>();
-
-  /**
-   * 缂撳瓨鎸囨爣瀛樺偍淇℃伅.
-   *
-   * @param indexStorage 鎸囨爣瀛樺偍
-   */
-  public void cacheIndexStorage(IndexStorage indexStorage) {
-    String actorId = ActorUtil.buildActorId(indexStorage);
-    indexStorageCache.put(actorId, indexStorage);
-  }
-
-  /**
-   * 鏍规嵁 actorId 鑾峰彇鎸囨爣瀛樺偍.
-   *
-   * @param actorId
-   * @return
-   */
-  public IndexStorage getIndexStorageCache(String actorId) {
-    return indexStorageCache.getOrDefault(actorId, null);
-  }
-
-  /**
-   * 缂撳瓨璁$畻鎸囨爣鐨勫悗缃寚鏍�.
-   *
-   * @param actorId
-   * @param postId
-   */
-  public void cachePostIndex(String actorId, String postId) {
-    if (!postIndexIdsCache.containsKey(actorId)) {
-      postIndexIdsCache.put(actorId, new ArrayList<>());
-    }
-
-    postIndexIdsCache.get(actorId).add(postId);
-  }
-
-  /**
-   * 绉婚櫎鍚庣疆鎸囨爣.
-   *
-   * @param actorId
-   * @param postActorId
-   */
-  public void removePostIndexCache(String actorId, String postActorId) {
-    if (!postIndexIdsCache.containsKey(actorId)) {
-      postIndexIdsCache.put(actorId, new ArrayList<>());
-    }
-
-    postIndexIdsCache.get(actorId).remove(postActorId);
-  }
-
-  /**
-   * 鑾峰彇鍚庣疆鎸囨爣actorId.
-   *
-   * @param actorId
-   * @return
-   */
-  public List<String> getPostActorIds(String actorId) {
-    return postIndexIdsCache.getOrDefault(actorId, new ArrayList<>());
-  }
-
-  public void cacheAlarmItem(AlarmItem alarmItem) {
-    String actorId = ActorUtil.buildAlarmActorId(alarmItem);
-    alarmItemCache.put(actorId, alarmItem);
-  }
-
-  public void removeAlarmCache(String actorId) {
-    alarmItemCache.remove(actorId);
-  }
-
-  public void removeIndexCache(String actorId) {
-    indexStorageCache.remove(actorId);
-  }
-
-  public AlarmItem getAlarmItem(String actorId) {
-    return alarmItemCache.getOrDefault(actorId, null);
-  }
-
-  public void cacheAlarmStatus(String indexId, String timeType, String limitType,
-      AlarmStatus status) {
-    String statusId = ActorUtil.buildAlarmStatusId(indexId, timeType, limitType);
-    alarmCache.put(statusId, status);
-  }
-
-  public void cacheAlarmStatus(String statusId, AlarmStatus status) {
-    alarmCache.put(statusId, status);
-  }
-
-  public AlarmStatus getAlarmStatus(String indexId, String timeType, String limitType) {
-    String statusId = ActorUtil.buildAlarmStatusId(indexId, timeType, limitType);
-    return alarmCache.getOrDefault(statusId, null);
-  }
-
-  public void cacheTagValues(List<TagValue> tagValues) {
-    tagValues.forEach(tagValue -> tagValueCache.put(tagValue.getTagCode(), tagValue));
-  }
-
-  public void cacheLimitType(String limitCode, LimitType type) {
-    limitTypeCache.put(limitCode, type);
-  }
-
-  public LimitType getLimitType(String limitType) {
-    return limitTypeCache.getOrDefault(limitType, null);
-  }
-
-  public void cacheTagValue(TagValue tagValue) {
-    if (tagValue == null) {
-      return;
-    }
-
-    tagValueCache.put(tagValue.getTagCode(), tagValue);
-  }
-
-  public TagValue getTagValue(String indexCode) {
-    if (StringUtils.isBlank(indexCode)) {
-      return null;
-    }
-
-    return tagValueCache.getOrDefault(indexCode, null);
-  }
-
-  public void cacheDeviceStatusSetting(DeviceFormula deviceFormula) {
-    if (deviceFormula != null) {
-      String actorId = ActorUtil.buildActorId(deviceFormula);
-      deviceFormulaCache.put(actorId, deviceFormula);
-    }
-  }
-
-  public void removeDeviceStatusSetting(String actorId) {
-    deviceFormulaCache.remove(actorId);
-  }
-
-  public DeviceFormula getDeviceFormula(String actorId) {
-    return deviceFormulaCache.getOrDefault(actorId, null);
-  }
-
-  public DeviceStatus getDeviceStatus(String actorId) {
-    return deviceStatusCache.getOrDefault(actorId, null);
-  }
-
-  public void cacheDeviceStatus(String actorId, DeviceStatus lastStatus) {
-    deviceStatusCache.put(actorId, lastStatus);
-  }
-
-  public ConcurrentHashMap<TimeType, Set<String>> getRegisters() {
-    return registers;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/utils/ServiceProvicer.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/utils/ServiceProvicer.java
deleted file mode 100644
index 5395472..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/utils/ServiceProvicer.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.dingzhuo.compute.engine.utils;
-
-import com.dingzhuo.compute.engine.config.CalculationConfig;
-import com.dingzhuo.energy.dataservice.service.PeriodDataService;
-import com.dingzhuo.energy.dataservice.service.RealtimeDatabaseService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-@Component
-public class ServiceProvicer {
-
-  private static RealtimeDatabaseService realtimeDatabaseService;
-  private static PeriodDataService periodDataService;
-  private static CacheService cacheService;
-  private static CalculationConfig calculationConfig;
-
-  public static RealtimeDatabaseService getRealtimeDatabaseService() {
-    return realtimeDatabaseService;
-  }
-
-  public static PeriodDataService getPeriodDataService() {
-    return periodDataService;
-  }
-
-  public static CacheService getCacheService() {
-    return cacheService;
-  }
-
-  public static CalculationConfig getCalculationConfig() {
-    return calculationConfig;
-  }
-
-  @Autowired
-  public void setCalculationConfig(
-      CalculationConfig calculationConfig) {
-    ServiceProvicer.calculationConfig = calculationConfig;
-  }
-
-  @Autowired
-  public void setCacheService(CacheService cacheService) {
-    ServiceProvicer.cacheService = cacheService;
-  }
-
-  @Autowired
-  public void setPeriodDataService(
-      PeriodDataService periodDataService) {
-    ServiceProvicer.periodDataService = periodDataService;
-  }
-
-  @Autowired
-  public void setRealtimeDatabaseService(
-      RealtimeDatabaseService realtimeDatabaseService) {
-    ServiceProvicer.realtimeDatabaseService = realtimeDatabaseService;
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/utils/SpringActorProducer.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/utils/SpringActorProducer.java
deleted file mode 100644
index aa930c9..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/utils/SpringActorProducer.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.dingzhuo.compute.engine.utils;
-
-import akka.actor.Actor;
-import akka.actor.IndirectActorProducer;
-import org.springframework.context.ApplicationContext;
-
-/**
- * @author fanxinfu
- */
-public class SpringActorProducer implements IndirectActorProducer {
-
-  final private ApplicationContext applicationContext;
-  final private String actorBeanName;
-
-  public SpringActorProducer(ApplicationContext applicationContext, String actorBeanName) {
-    this.applicationContext = applicationContext;
-    this.actorBeanName = actorBeanName;
-  }
-
-  @Override
-  public Actor produce() {
-    return (Actor) applicationContext.getBean(actorBeanName);
-  }
-
-  @Override
-  public Class<? extends Actor> actorClass() {
-    return (Class<? extends Actor>) applicationContext.getType(actorBeanName);
-  }
-}
diff --git a/compute-engine/src/main/java/com/dingzhuo/compute/engine/utils/SpringAkkaExtension.java b/compute-engine/src/main/java/com/dingzhuo/compute/engine/utils/SpringAkkaExtension.java
deleted file mode 100644
index 56b5db2..0000000
--- a/compute-engine/src/main/java/com/dingzhuo/compute/engine/utils/SpringAkkaExtension.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.dingzhuo.compute.engine.utils;
-
-import akka.actor.Extension;
-import akka.actor.Props;
-import org.springframework.context.ApplicationContext;
-import org.springframework.stereotype.Component;
-
-/**
- * @author fanxinfu
- */
-@Component
-public class SpringAkkaExtension implements Extension {
-
-  private ApplicationContext applicationContext;
-
-  public void initialize(ApplicationContext applicationContext) {
-    this.applicationContext = applicationContext;
-  }
-
-  public Props props(String actorBeanName) {
-    return Props.create(SpringActorProducer.class, applicationContext, actorBeanName);
-  }
-}
diff --git a/compute-engine/src/main/resources/akka.conf b/compute-engine/src/main/resources/akka.conf
deleted file mode 100644
index b7d499b..0000000
--- a/compute-engine/src/main/resources/akka.conf
+++ /dev/null
@@ -1,37 +0,0 @@
-akka {
-  loglevel = "WARNING"
-  stdout-loglevel = "WARNING"
-
-  actor {
-    provider = "cluster"
-  }
-  remote.artery {
-    canonical {
-      hostname = "127.0.0.1"
-      port = 1026
-    }
-  }
-
-  cluster {
-    seed-nodes = ["akka://CsieComputeEngine@127.0.0.1:1026"]
-  }
-}
-
-computeDispatcher {
-  type = Dispatcher
-  executor = "thread-pool-executor"
-  thread-pool-executor {
-    # 绾跨▼缁存寔鏃堕棿
-    keep-alive-time = 4000s
-    # 鎬荤嚎绋嬫渶灏忔暟閲�
-    core-pool-size-min = 8
-    # 鎬荤嚎绋嬫渶澶ф暟閲�
-    core-pool-size-max = 24
-    # 姣忎釜CPU鏍镐腑鏈�澶х殑绾跨▼鏁伴噺
-    core-pool-size-factor = 3.0
-  }
-  # 鍚炲悙閲弤
-  throughput = 100
-  # 娑堟伅浼樺厛绾у畾涔�
-  mailbox-type = "com.xinhai.compute.ExecutePrioMailBox"
-}
\ No newline at end of file
diff --git a/compute-engine/src/main/resources/application-prod.yml b/compute-engine/src/main/resources/application-prod.yml
deleted file mode 100644
index e072e99..0000000
--- a/compute-engine/src/main/resources/application-prod.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-# 鏁版嵁婧愰厤缃�
-spring:
-  datasource:
-    url: jdbc:postgresql://localhost:5432/energy_dongli
-    username: 
-    password: 
-  redis:
-    host: l
-    port: 6379
-server:
-  port: 8081
-
-rtdb:
-  host: localhost
-  port: 8086
-
-calc:
-  interval: 120
diff --git a/compute-engine/src/main/resources/application.yml b/compute-engine/src/main/resources/application.yml
deleted file mode 100644
index 0c2f89b..0000000
--- a/compute-engine/src/main/resources/application.yml
+++ /dev/null
@@ -1,182 +0,0 @@
-# 椤圭洰鐩稿叧閰嶇疆
-ruoyi:
-  # 鍚嶇О
-  name: RuoYi
-  # 鐗堟湰
-  version: 2.0.0
-  # 鐗堟潈骞翠唤
-  copyrightYear: 2019
-  # 瀹炰緥婕旂ず寮�鍏�
-  demoEnabled: true
-  # 鏂囦欢璺緞 绀轰緥锛� Windows閰嶇疆D:/ruoyi/uploadPath锛孡inux閰嶇疆 /home/ruoyi/uploadPath锛�
-  profile: D:/ruoyi/uploadPath
-  # 鑾峰彇ip鍦板潃寮�鍏�
-  addressEnabled: true
-
-# 寮�鍙戠幆澧冮厤缃�
-server:
-  # 鏈嶅姟鍣ㄧ殑HTTP绔彛锛岄粯璁や负8080
-  port: 8080
-  servlet:
-    # 搴旂敤鐨勮闂矾寰�
-    context-path: /
-  undertow:
-    # 璁剧疆IO绾跨▼鏁�, 瀹冧富瑕佹墽琛岄潪闃诲鐨勪换鍔�,瀹冧滑浼氳礋璐e涓繛鎺�, 榛樿璁剧疆姣忎釜CPU鏍稿績涓�涓嚎绋�
-    io-threads: 4
-    # 闃诲浠诲姟绾跨▼姹�, 褰撴墽琛岀被浼約ervlet璇锋眰闃诲IO鎿嶄綔, undertow浼氫粠杩欎釜绾跨▼姹犱腑鍙栧緱绾跨▼
-    # 瀹冪殑鍊艰缃彇鍐充簬绯荤粺绾跨▼鎵ц浠诲姟鐨勯樆濉炵郴鏁帮紝榛樿鍊兼槸IO绾跨▼鏁�*8
-    worker-threads: 32
-    # 浠ヤ笅鐨勯厤缃細褰卞搷buffer,杩欎簺buffer浼氱敤浜庢湇鍔″櫒杩炴帴鐨処O鎿嶄綔,鏈夌偣绫讳技netty鐨勬睜鍖栧唴瀛樼鐞�
-    # 姣忓潡buffer鐨勭┖闂村ぇ灏�,瓒婂皬鐨勭┖闂磋鍒╃敤瓒婂厖鍒嗭紝涓嶈璁剧疆澶ぇ锛屼互鍏嶅奖鍝嶅叾浠栧簲鐢紝鍚堥�傚嵆鍙�
-    buffer-size: 1024
-    # 鏄惁鍒嗛厤鐨勭洿鎺ュ唴瀛�(NIO鐩存帴鍒嗛厤鐨勫爢澶栧唴瀛�)
-    direct-buffers: true
-
-# 鏃ュ織閰嶇疆
-logging:
-  level:
-    com.ruoyi: debug
-    org.springframework: info
-
-# Spring閰嶇疆
-spring:
-  # 璧勬簮淇℃伅
-  messages:
-    # 鍥介檯鍖栬祫婧愭枃浠惰矾寰�
-    basename: i18n/messages
-  datasource:
-    type: com.alibaba.druid.pool.DruidDataSource
-    driverClassName: org.postgresql.Driver
-    druid:
-      # 涓诲簱鏁版嵁婧�
-      master:
-        url: ${spring.datasource.url}
-        username: ${spring.datasource.username}
-        password: ${spring.datasource.password}
-      # 浠庡簱鏁版嵁婧�
-      slave:
-        # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴
-        enabled: false
-        url:
-        username:
-        password:
-      # 鍒濆杩炴帴鏁�
-      initialSize: 5
-      # 鏈�灏忚繛鎺ユ睜鏁伴噺
-      minIdle: 10
-      # 鏈�澶ц繛鎺ユ睜鏁伴噺
-      maxActive: 20
-      # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
-      maxWait: 60000
-      # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
-      timeBetweenEvictionRunsMillis: 60000
-      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
-      minEvictableIdleTimeMillis: 300000
-      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
-      maxEvictableIdleTimeMillis: 900000
-      # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁�
-      validationQuery: SELECT 1
-      testWhileIdle: true
-      testOnBorrow: false
-      testOnReturn: false
-      webStatFilter:
-        enabled: true
-      statViewServlet:
-        enabled: true
-        # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂�
-        allow:
-        url-pattern: /druid/*
-        # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮�
-        login-username:
-        login-password:
-      filter:
-        stat:
-          enabled: true
-          # 鎱QL璁板綍
-          log-slow-sql: true
-          slow-sql-millis: 70000
-          merge-sql: true
-        wall:
-          config:
-            multi-statement-allow: true
-  profiles:
-    active: prod
-  # 鏂囦欢涓婁紶
-  servlet:
-     multipart:
-       # 鍗曚釜鏂囦欢澶у皬
-       max-file-size:  10MB
-       # 璁剧疆鎬讳笂浼犵殑鏂囦欢澶у皬
-       max-request-size:  20MB
-  # 鏈嶅姟妯″潡
-  devtools:
-    restart:
-      # 鐑儴缃插紑鍏�
-      enabled: true
-  # redis 閰嶇疆
-  redis:
-    # 鍦板潃
-    host: ${spring.redis.host}
-    # 绔彛锛岄粯璁や负6379
-    port: ${spring.redis.port}
-    # 杩炴帴瓒呮椂鏃堕棿
-    timeout: 10s
-    lettuce:
-      pool:
-        # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
-        min-idle: 0
-        # 杩炴帴姹犱腑鐨勬渶澶х┖闂茶繛鎺�
-        max-idle: 8
-        # 杩炴帴姹犵殑鏈�澶ф暟鎹簱杩炴帴鏁�
-        max-active: 8
-        # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
-        max-wait: -1ms
-
-# token閰嶇疆
-token:
-    # 浠ょ墝鑷畾涔夋爣璇�
-    header: Authorization
-    # 浠ょ墝绉橀挜
-    secret: abcdefghijklmnopqrstuvwxyz
-    # 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛�
-    expireTime: 525600
-
-# MyBatis閰嶇疆
-mybatis:
-    # 鎼滅储鎸囧畾鍖呭埆鍚�
-    typeAliasesPackage: com.dingzhuo.energy.**.domain
-    # 閰嶇疆mapper鐨勬壂鎻忥紝鎵惧埌鎵�鏈夌殑mapper.xml鏄犲皠鏂囦欢
-    mapperLocations: classpath*:mybatis/**/*Mapper.xml
-    # 鍔犺浇鍏ㄥ眬鐨勯厤缃枃浠�
-    configLocation: classpath:mybatis/mybatis-config.xml
-
-# PageHelper鍒嗛〉鎻掍欢
-pagehelper:
-  helperDialect: PostgreSQL
-  reasonable: true
-  supportMethodsArguments: true
-  params: count=countSql
-
-# 闃叉XSS鏀诲嚮
-xss:
-  # 杩囨护寮�鍏�
-  enabled: true
-  # 鎺掗櫎閾炬帴锛堝涓敤閫楀彿鍒嗛殧锛�
-  excludes: /system/notice/*
-  # 鍖归厤閾炬帴
-  urlPatterns: /system/*,/monitor/*,/tool/*,/meter/*,/facility/*
-
-# 浠g爜鐢熸垚
-gen:
-  # 浣滆��
-  author: sys
-  # 榛樿鐢熸垚鍖呰矾寰� system 闇�鏀规垚鑷繁鐨勬ā鍧楀悕绉� 濡� system monitor tool
-  packageName: com.dingzhuo.energy.project.system
-  # 鑷姩鍘婚櫎琛ㄥ墠缂�锛岄粯璁ゆ槸true
-  autoRemovePre: false
-  # 琛ㄥ墠缂�锛堢敓鎴愮被鍚嶄笉浼氬寘鍚〃鍓嶇紑锛屽涓敤閫楀彿鍒嗛殧锛�
-  tablePrefix: sys_
-
-rtdb:
-  host: ${rtdb.host}
-  port: ${rtdb.port}
diff --git a/compute-engine/src/main/resources/logback.xml b/compute-engine/src/main/resources/logback.xml
deleted file mode 100644
index 661e2ec..0000000
--- a/compute-engine/src/main/resources/logback.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-  <!-- 鏃ュ織瀛樻斁璺緞 -->
-  <property name="log.path" value="logs" />
-  <!-- 鏃ュ織杈撳嚭鏍煎紡 -->
-  <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
-
-  <!-- 鎺у埗鍙拌緭鍑� -->
-  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-    <encoder>
-      <pattern>${log.pattern}</pattern>
-    </encoder>
-  </appender>
-
-  <!-- 绯荤粺鏃ュ織杈撳嚭 -->
-  <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
-    <file>${log.path}/sys-info.log</file>
-    <!-- 寰幆鏀跨瓥锛氬熀浜庢椂闂村垱寤烘棩蹇楁枃浠� -->
-    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-      <!-- 鏃ュ織鏂囦欢鍚嶆牸寮� -->
-      <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
-      <!-- 鏃ュ織鏈�澶х殑鍘嗗彶 60澶� -->
-      <maxHistory>60</maxHistory>
-    </rollingPolicy>
-    <encoder>
-      <pattern>${log.pattern}</pattern>
-    </encoder>
-    <filter class="ch.qos.logback.classic.filter.LevelFilter">
-      <!-- 杩囨护鐨勭骇鍒� -->
-      <level>ERROR</level>
-      <!-- 鍖归厤鏃剁殑鎿嶄綔锛氭帴鏀讹紙璁板綍锛� -->
-      <onMatch>ACCEPT</onMatch>
-      <!-- 涓嶅尮閰嶆椂鐨勬搷浣滐細鎷掔粷锛堜笉璁板綍锛� -->
-      <onMismatch>DENY</onMismatch>
-    </filter>
-  </appender>
-
-  <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
-    <file>${log.path}/sys-error.log</file>
-    <!-- 寰幆鏀跨瓥锛氬熀浜庢椂闂村垱寤烘棩蹇楁枃浠� -->
-    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-      <!-- 鏃ュ織鏂囦欢鍚嶆牸寮� -->
-      <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
-      <!-- 鏃ュ織鏈�澶х殑鍘嗗彶 60澶� -->
-      <maxHistory>60</maxHistory>
-    </rollingPolicy>
-    <encoder>
-      <pattern>${log.pattern}</pattern>
-    </encoder>
-    <filter class="ch.qos.logback.classic.filter.LevelFilter">
-      <!-- 杩囨护鐨勭骇鍒� -->
-      <level>ERROR</level>
-      <!-- 鍖归厤鏃剁殑鎿嶄綔锛氭帴鏀讹紙璁板綍锛� -->
-      <onMatch>ACCEPT</onMatch>
-      <!-- 涓嶅尮閰嶆椂鐨勬搷浣滐細鎷掔粷锛堜笉璁板綍锛� -->
-      <onMismatch>DENY</onMismatch>
-    </filter>
-  </appender>
-
-  <!-- 绯荤粺妯″潡鏃ュ織绾у埆鎺у埗  -->
-  <logger name="com.dingzhuo" level="error" />
-  <!-- Spring鏃ュ織绾у埆鎺у埗  -->
-  <logger name="org.springframework" level="error" />
-
-  <root level="error">
-    <appender-ref ref="console" />
-  </root>
-
-  <!--绯荤粺鎿嶄綔鏃ュ織-->
-  <root level="error">
-    <appender-ref ref="file_error" />
-  </root>
-</configuration>
diff --git a/data-model/pom.xml b/data-model/pom.xml
deleted file mode 100644
index 453c39f..0000000
--- a/data-model/pom.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <parent>
-    <artifactId>energy-management</artifactId>
-    <groupId>com.dingzhuo</groupId>
-    <version>1.0.0</version>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-
-  <artifactId>data-model</artifactId>
-  <dependencies>
-    <dependency>
-      <groupId>com.dingzhuo</groupId>
-      <artifactId>basic</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.dingzhuo</groupId>
-      <artifactId>basic-data</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-
-
-</project>
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/CalcFunctionController.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/CalcFunctionController.java
deleted file mode 100644
index c0942e9..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/CalcFunctionController.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package com.dingzhuo.energy.data.model.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.common.core.lang.UUID;
-import com.dingzhuo.energy.data.model.domain.CalcFunction;
-import com.dingzhuo.energy.data.model.service.ICalcFunctionService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * 璁$畻鍑芥暟Controller
- *
- * @author fanxinfu
- * @date 2020-03-10
- */
-@RestController
-@RequestMapping("/basicsetting/function")
-@Api(value = "璁$畻鍏紡绠$悊",tags = {"璁$畻鍏紡绠$悊"})
-public class CalcFunctionController extends BaseController
-{
-    @Autowired
-    private ICalcFunctionService calcFunctionService;
-
-    /**
-     * 鏌ヨ璁$畻鍑芥暟鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('basicsetting:function:list')")
-    @GetMapping("/list")
-    @ApiOperation(value = "璁$畻鍑芥暟鍒楄〃")
-    public TableDataInfo list(CalcFunction calcFunction)
-    {
-        startPage();
-        List<CalcFunction> list = calcFunctionService.selectCalcFunctionList(calcFunction);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭璁$畻鍑芥暟鍒楄〃
-     */
-    @ApiOperation(value = "璁$畻鍑芥暟鍒楄〃瀵煎嚭")
-    @PreAuthorize("@ss.hasPermi('basicsetting:function:export')")
-    @Log(title = "璁$畻鍑芥暟", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(CalcFunction calcFunction)
-    {
-        List<CalcFunction> list = calcFunctionService.selectCalcFunctionList(calcFunction);
-        ExcelUtil<CalcFunction> util = new ExcelUtil<CalcFunction>(CalcFunction.class);
-        return util.exportExcel(list, "function");
-    }
-
-    /**
-     * 鑾峰彇璁$畻鍑芥暟璇︾粏淇℃伅
-     */
-    @ApiOperation(value = "鑾峰彇璁$畻鍑芥暟璇︾粏淇℃伅")
-    @PreAuthorize("@ss.hasPermi('basicsetting:function:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(calcFunctionService.selectCalcFunctionById(id));
-    }
-
-    /**
-     * 鏂板璁$畻鍑芥暟
-     */
-    @PreAuthorize("@ss.hasPermi('basicsetting:function:add')")
-    @Log(title = "璁$畻鍑芥暟", businessType = BusinessType.INSERT)
-    @PostMapping
-    @ApiOperation(value = "鏂板璁$畻鍑芥暟")
-    public AjaxResult add(@RequestBody CalcFunction calcFunction)
-    {
-        calcFunction.setId(UUID.fastUUID().toString());
-        return toAjax(calcFunctionService.insertCalcFunction(calcFunction));
-    }
-
-    /**
-     * 淇敼璁$畻鍑芥暟
-     */
-    @PreAuthorize("@ss.hasPermi('basicsetting:function:edit')")
-    @Log(title = "璁$畻鍑芥暟", businessType = BusinessType.UPDATE)
-    @PutMapping
-    @ApiOperation(value = "缂栬緫璁$畻鍑芥暟")
-    public AjaxResult edit(@RequestBody CalcFunction calcFunction)
-    {
-        return toAjax(calcFunctionService.updateCalcFunction(calcFunction));
-    }
-
-    /**
-     * 鍒犻櫎璁$畻鍑芥暟
-     */
-    @PreAuthorize("@ss.hasPermi('basicsetting:function:remove')")
-    @Log(title = "璁$畻鍑芥暟", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    @ApiOperation(value = "鍒犻櫎璁$畻鍑芥暟")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(calcFunctionService.deleteCalcFunctionByIds(ids));
-    }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/DaqTemplateController.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/DaqTemplateController.java
deleted file mode 100644
index f08f1b2..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/DaqTemplateController.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package com.dingzhuo.energy.data.model.controller;
-
-import java.util.List;
-import java.util.UUID;
-
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.data.model.domain.DaqTemplate;
-import com.dingzhuo.energy.data.model.service.IDaqTemplateService;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * 閲囬泦鍙傛暟妯℃澘Controller
- *
- * @author ruoyi
- * @date 2020-02-08
- */
-@RestController
-@RequestMapping("/system/template")
-public class DaqTemplateController extends BaseController {
-  @Autowired
-  private IDaqTemplateService daqTemplateService;
-
-  /**
-   * 鏌ヨ閲囬泦鍙傛暟妯℃澘鍒楄〃
-   */
-  @PreAuthorize("@ss.hasPermi('basicsetting:template:query')")
-  @GetMapping("/list")
-  public TableDataInfo list(DaqTemplate daqTemplate) {
-    startPage();
-    List<DaqTemplate> list = daqTemplateService.selectDaqTemplateList(daqTemplate);
-    return getDataTable(list);
-  }
-
-  /**
-   * 瀵煎嚭閲囬泦鍙傛暟妯℃澘鍒楄〃
-   */
-  @PreAuthorize("@ss.hasPermi('basicsetting:template:query')")
-  @Log(title = "閲囬泦鍙傛暟妯℃澘" , businessType = BusinessType.EXPORT)
-  @GetMapping("/export")
-  public AjaxResult export(DaqTemplate daqTemplate) {
-    List<DaqTemplate> list = daqTemplateService.selectDaqTemplateList(daqTemplate);
-    ExcelUtil<DaqTemplate> util = new ExcelUtil<DaqTemplate>(DaqTemplate.class);
-    return util.exportExcel(list, "template");
-  }
-
-  /**
-   * 鑾峰彇閲囬泦鍙傛暟妯℃澘璇︾粏淇℃伅
-   */
-  @PreAuthorize("@ss.hasPermi('basicsetting:template:query')")
-  @GetMapping(value = "/{id}")
-  public AjaxResult getInfo(@PathVariable("id") String id) {
-    return AjaxResult.success(daqTemplateService.selectDaqTemplateById(id));
-  }
-
-  /**
-   * 鏂板閲囬泦鍙傛暟妯℃澘
-   */
-  @PreAuthorize("@ss.hasPermi('basicsetting:template:add')")
-  @Log(title = "閲囬泦鍙傛暟妯℃澘" , businessType = BusinessType.INSERT)
-  @PostMapping
-  public AjaxResult add(@RequestBody DaqTemplate daqTemplate) {
-    daqTemplate.setId(UUID.randomUUID().toString());
-    boolean isExist = daqTemplateService.dapHasExist(daqTemplate.getCode(), daqTemplate.getDeviceType());
-    if (isExist) {
-      return AjaxResult.error("鐩稿悓璁惧绫诲瀷涓嬬殑鍙傛暟缂栫爜涓嶈兘閲嶅锛�");
-    } else {
-      return toAjax(daqTemplateService.insertDaqTemplate(daqTemplate));
-    }
-  }
-
-  /**
-   * 淇敼閲囬泦鍙傛暟妯℃澘
-   */
-  @PreAuthorize("@ss.hasPermi('basicsetting:template:edit')")
-  @Log(title = "閲囬泦鍙傛暟妯℃澘" , businessType = BusinessType.UPDATE)
-  @PutMapping
-  public AjaxResult edit(@RequestBody DaqTemplate daqTemplate) {
-    boolean isExist = daqTemplateService.dapHasExist(daqTemplate);
-    if (isExist) {
-      return AjaxResult.error("鐩稿悓璁惧绫诲瀷涓嬬殑鍙傛暟缂栫爜涓嶈兘閲嶅锛�");
-    } else {
-      return toAjax(daqTemplateService.updateDaqTemplate(daqTemplate));
-    }
-  }
-
-  /**
-   * 鍒犻櫎閲囬泦鍙傛暟妯℃澘
-   */
-  @PreAuthorize("@ss.hasPermi('basicsetting:template:remove')")
-  @Log(title = "閲囬泦鍙傛暟妯℃澘" , businessType = BusinessType.DELETE)
-  @DeleteMapping("/{ids}")
-  public AjaxResult remove(@PathVariable String[] ids) {
-    return toAjax(daqTemplateService.deleteDaqTemplateByIds(ids));
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/DataAuthController.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/DataAuthController.java
deleted file mode 100644
index e3d498a..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/DataAuthController.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.dingzhuo.energy.data.model.controller;
-
-import com.dingzhuo.energy.data.model.domain.AuthType;
-import com.dingzhuo.energy.data.model.service.DataAuthService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("/data/auth")
-public class DataAuthController extends BaseController {
-
-  @Autowired
-  private DataAuthService dataAuthService;
-
-  @GetMapping("/{authType}/{modelCode}/{userOrRoleId}")
-  public AjaxResult selectDataAuth(
-      @PathVariable("authType") String authType,
-      @PathVariable("modelCode") String modelCode,
-      @PathVariable("userOrRoleId") String userOrRoleId) {
-    List<String> authIds;
-    if (AuthType.valueOf(authType.toUpperCase()) == AuthType.USER) {
-      authIds = dataAuthService.getUserDataAuth(modelCode, userOrRoleId);
-    } else {
-      authIds = dataAuthService.getRoleDataAuth(modelCode, userOrRoleId);
-    }
-
-    return AjaxResult.success(authIds);
-  }
-
-  @PostMapping("/{authType}/{modelCode}/{userOrRoleId}")
-  public AjaxResult setDataAuth(
-      @PathVariable("authType") String authType,
-      @PathVariable("modelCode") String modelCode,
-      @PathVariable("userOrRoleId") String userOrRoleId,
-      @RequestBody List<String> ids) {
-    if (AuthType.valueOf(authType.toUpperCase()) == AuthType.USER) {
-      dataAuthService.setUserDataAuth(userOrRoleId, modelCode, ids);
-    } else {
-      dataAuthService.setRoleDataAuth(userOrRoleId, modelCode, ids);
-    }
-
-    return AjaxResult.success();
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/EnergyIndexController.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/EnergyIndexController.java
deleted file mode 100644
index 013cc7e..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/EnergyIndexController.java
+++ /dev/null
@@ -1,203 +0,0 @@
-package com.dingzhuo.energy.data.model.controller;
-
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.IndexType;
-import com.dingzhuo.energy.data.model.service.IEnergyIndexService;
-import com.dingzhuo.energy.data.model.domain.EnergyIndexQuery;
-import com.dingzhuo.energy.project.system.domain.SysUser;
-import java.util.Arrays;
-import java.util.stream.Collectors;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-import java.util.UUID;
-import org.springframework.web.multipart.MultipartFile;
-
-/**
- * 鎸囨爣淇℃伅Controller
- *
- * @author fanxinfu
- * @date 2020-02-14
- */
-@RestController
-@RequestMapping("/basicsetting/energyindex")
-public class EnergyIndexController extends BaseController {
-
-  @Autowired
-  private IEnergyIndexService energyIndexService;
-
-  /**
-   * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
-   */
-  @PreAuthorize("@ss.hasPermi('energyindex:energyindex:query')")
-  @GetMapping("/list")
-  public TableDataInfo list(EnergyIndex energyIndex) {
-    startPage();
-    EnergyIndexQuery query = new EnergyIndexQuery(energyIndex.getNodeId(), energyIndex.getName(),
-        energyIndex.getIndexCategory(), energyIndex.getIndexType());
-    List<EnergyIndex> list = energyIndexService.selectEnergyIndexList(query);
-    return getDataTable(list);
-  }
-
-  /**
-   * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
-   */
-  @GetMapping("/filter")
-  public AjaxResult filter(EnergyIndexQuery query) {
-    List<EnergyIndex> list = energyIndexService.selectEnergyIndexList(query);
-    return AjaxResult.success(list);
-  }
-
-  /**
-   * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
-   */
-  @PreAuthorize("@ss.hasPermi('energyindex:energyindex:query')")
-  @GetMapping("/collectIndex")
-  public TableDataInfo listCollectIndex(String deviceId) {
-    startPage();
-    List<EnergyIndex> list = energyIndexService.selectCollectIndex(deviceId);
-    return getDataTable(list);
-  }
-
-  /**
-   * 瀵煎嚭鎸囨爣淇℃伅鍒楄〃
-   */
-  @PreAuthorize("@ss.hasPermi('energyindex:energyindex:export')")
-  @Log(title = "鎸囨爣淇℃伅", businessType = BusinessType.EXPORT)
-  @GetMapping("/export")
-  public AjaxResult export(EnergyIndex energyIndex) {
-    List<EnergyIndex> list = energyIndexService.selectEnergyIndexList(energyIndex);
-    ExcelUtil<EnergyIndex> util = new ExcelUtil<>(EnergyIndex.class);
-    return util.exportExcel(list, "energyindex");
-  }
-
-  /**
-   * 鑾峰彇鎸囨爣淇℃伅璇︾粏淇℃伅
-   */
-  @PreAuthorize("@ss.hasPermi('energyindex:energyindex:query')")
-  @GetMapping(value = "/{indexId}")
-  public AjaxResult getInfo(@PathVariable("indexId") String indexId) {
-    return AjaxResult.success(energyIndexService.selectEnergyIndexById(indexId));
-  }
-
-  /**
-   * 鏂板鎸囨爣淇℃伅
-   */
-  @PreAuthorize("@ss.hasPermi('energyindex:energyindex:add')")
-  @Log(title = "鎸囨爣淇℃伅", businessType = BusinessType.INSERT)
-  @PostMapping(value = "/{nodeId}")
-  public AjaxResult add(@PathVariable("nodeId") String nodeId,
-      @RequestBody EnergyIndex energyIndex) {
-    boolean isExist = energyIndexService.energyIndexHasExist(energyIndex.getCode());
-    if (isExist) {
-      return AjaxResult.error("鎸囨爣缂栫爜涓嶈兘閲嶅锛�");
-    } else {
-      energyIndex.setIndexId(UUID.randomUUID().toString());
-      return toAjax(energyIndexService.insertEnergyIndex(nodeId, energyIndex));
-    }
-  }
-
-  /**
-   * 淇敼鎸囨爣淇℃伅
-   */
-  @PreAuthorize("@ss.hasPermi('energyindex:energyindex:edit')")
-  @Log(title = "鎸囨爣淇℃伅", businessType = BusinessType.UPDATE)
-  @PutMapping
-  public AjaxResult edit(@RequestBody EnergyIndex energyIndex) {
-    boolean isExist = energyIndexService
-        .energyIndexHasExist(energyIndex.getIndexId(), energyIndex.getCode());
-    if (isExist) {
-      return AjaxResult.error("鎸囨爣缂栫爜涓嶈兘閲嶅锛�");
-    } else {
-      return toAjax(energyIndexService.updateEnergyIndex(energyIndex));
-    }
-  }
-
-  /**
-   * 鍒犻櫎鎸囨爣淇℃伅
-   */
-  @PreAuthorize("@ss.hasPermi('energyindex:energyindex:remove')")
-  @Log(title = "鎸囨爣淇℃伅", businessType = BusinessType.DELETE)
-  @DeleteMapping("/{nodeId}/{indexIds}")
-  public AjaxResult remove(@PathVariable String nodeId, @PathVariable String[] indexIds) {
-    List<EnergyIndex> energyIndexList = energyIndexService.getEnergyIndexByIds(
-        Arrays.asList(indexIds));
-    List<String> deleteIds = energyIndexList.stream()
-        .filter(f -> StringUtils.isBlank(f.getMeterId()))
-        .map(EnergyIndex::getIndexId)
-        .collect(Collectors.toList());
-    List<String> removeLink = energyIndexList.stream()
-        .filter(f -> StringUtils.isNotBlank(f.getMeterId()))
-        .map(EnergyIndex::getIndexId)
-        .collect(Collectors.toList());
-    if (!removeLink.isEmpty()) {
-      energyIndexService.removeNodeIndex(nodeId, removeLink);
-    }
-
-    if (!deleteIds.isEmpty()) {
-      energyIndexService.deleteEnergyIndexByIds(nodeId, deleteIds.toArray(new String[0]));
-    }
-    return AjaxResult.success();
-  }
-
-  @Log(title = "澧炲姞璁¢噺鍣ㄥ叿閲囬泦鐐�", businessType = BusinessType.INSERT)
-  @PostMapping("/meterIndex/{meterId}")
-  public AjaxResult addCollectIndex(@PathVariable("meterId") String meterId) {
-    try {
-      return energyIndexService.addMeterIndex(meterId);
-    } catch (Exception ex) {
-      logger.error("鍒涘缓璁¢噺鍣ㄥ叿閲囬泦鐐瑰け璐ワ紒", ex);
-      return AjaxResult.error();
-    }
-  }
-
-  @GetMapping("/meterIndex/{meterId}")
-  public AjaxResult getDeviceCollectIndex(@PathVariable("meterId") String meterId) {
-    return AjaxResult.success(energyIndexService.getMeterIndex(meterId));
-  }
-
-  @GetMapping("/includeChildrenNode/{nodeId}")
-  public AjaxResult getIndexByNodeAndChildrenNode(@PathVariable("nodeId") String nodeId) {
-    try {
-      return AjaxResult.success(energyIndexService.getIndexByNodeAndChildrenNode(nodeId));
-    } catch (Exception ex) {
-      logger.error("鑾峰彇鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
-      return AjaxResult.error("鑾峰彇鍏宠仈鎸囨爣鍑洪敊!");
-    }
-  }
-
-  @GetMapping("/includeChildrenNode/search")
-  public AjaxResult searchIndexByNodeAndChildrenNode(String nodeId, String filter) {
-    try {
-      return AjaxResult
-          .success(energyIndexService.searchIndexByNodeAndChildrenNode(nodeId, filter));
-    } catch (Exception ex) {
-      logger.error("鑾峰彇鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
-      return AjaxResult.error("鑾峰彇鍏宠仈鎸囨爣鍑洪敊!");
-    }
-  }
-
-  @GetMapping("/importTemplate")
-  public AjaxResult importTemplate() {
-    ExcelUtil<EnergyIndex> util = new ExcelUtil<>(EnergyIndex.class);
-    return util.importTemplateExcel("鎸囨爣鏁版嵁");
-  }
-
-  @PostMapping("/importData")
-  public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception {
-    ExcelUtil<EnergyIndex> util = new ExcelUtil<>(EnergyIndex.class);
-    List<EnergyIndex> energyIndexList = util.importExcel(file.getInputStream());
-    return energyIndexService.importEnergyIndex(energyIndexList, updateSupport);
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/IndexStorageController.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/IndexStorageController.java
deleted file mode 100644
index bfd5473..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/IndexStorageController.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package com.dingzhuo.energy.data.model.controller;
-
-import com.alibaba.fastjson.JSONObject;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.data.model.domain.CalcType;
-import com.dingzhuo.energy.data.model.domain.IndexFormula;
-import com.dingzhuo.energy.data.model.domain.IndexStorage;
-import com.dingzhuo.energy.data.model.service.IIndexStorageService;
-import com.dingzhuo.energy.data.model.service.IndexFormulaService;
-import com.greenpineyu.fel.FelEngine;
-import com.greenpineyu.fel.FelEngineImpl;
-import com.greenpineyu.fel.parser.FelNode;
-import com.greenpineyu.fel.parser.VarAstNode;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-import org.jetbrains.annotations.NotNull;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author fanxinfu
- */
-@RestController
-@RequestMapping("/basicsetting/indexStorage")
-public class IndexStorageController extends BaseController {
-
-  private final IIndexStorageService indexStorageService;
-
-  private final IndexFormulaService indexFormulaService;
-
-  @Autowired
-  public IndexStorageController(
-      IIndexStorageService indexStorageService, IndexFormulaService indexFormulaService) {
-    this.indexStorageService = indexStorageService;
-    this.indexFormulaService = indexFormulaService;
-  }
-
-  @GetMapping("/{indexId}")
-  public AjaxResult getIndexStorage(@PathVariable String indexId) {
-    JSONObject result = new JSONObject();
-    IndexFormula indexFormula = indexFormulaService.getIndexFormula(indexId);
-    List<IndexStorage> indexStorageList = indexStorageService.getIndexStorage(indexId);
-    List<IndexStorage> defaultStorageList = getDefaultIndexStorage();
-    Map<TimeType, IndexStorage> map = indexStorageList.stream()
-        .collect(Collectors.toMap(IndexStorage::getTimeType, storage -> storage));
-    List<IndexStorage> storageList;
-    if (!indexStorageList.isEmpty()) {
-      storageList = new ArrayList<>();
-      defaultStorageList.forEach(storage -> {
-        storageList.add(map.get(storage.getTimeType()));
-      });
-    } else {
-      storageList = defaultStorageList;
-    }
-
-    result.put("indexFormula", indexFormula);
-    result.put("indexStorage", storageList);
-    return AjaxResult.success(result);
-  }
-
-  @PostMapping("/{indexId}")
-  public AjaxResult saveIndexStorage(@RequestBody JSONObject param, @PathVariable String indexId) {
-    try {
-      IndexFormula indexFormula = param.getObject("indexFormula", IndexFormula.class);
-      List<IndexStorage> indexStorage =
-          param.getJSONArray("indexStorage").toJavaList(IndexStorage.class);
-      indexFormula.setIndexId(indexId);
-      indexStorageService.saveFormulaAndStorage(indexFormula, indexStorage, indexId);
-    } catch (Exception ex) {
-      logger.error("", ex);
-      return AjaxResult.error();
-    }
-
-    return AjaxResult.success();
-  }
-
-
-  @PostMapping("/parseFormula")
-  public AjaxResult parseFormula(@RequestBody JSONObject formulaText) {
-    String calcText = formulaText.getString("calcText");
-    FelEngine e = new FelEngineImpl();
-    Set<String> params = new HashSet<>();
-    try {
-      FelNode felNode = e.parse(calcText);
-      buildParam(felNode, params);
-    } catch (Exception ex) {
-      logger.error("鍏紡瑙f瀽鍑洪敊锛�");
-    }
-    return AjaxResult.success(params);
-  }
-
-  @GetMapping("/calcPeriod")
-  public AjaxResult getIndexStorage() {
-    List<IndexStorage> calcPeriods = getDefaultIndexStorage();
-    return AjaxResult.success(calcPeriods);
-  }
-
-  @NotNull
-  private List<IndexStorage> getDefaultIndexStorage() {
-    List<IndexStorage> calcPeriods = new ArrayList<>();
-    getPeriod(calcPeriods, TimeType.HOUR);
-    getPeriod(calcPeriods, TimeType.SCHEDULING);
-    getPeriod(calcPeriods, TimeType.DAY);
-    getPeriod(calcPeriods, TimeType.MONTH);
-    getPeriod(calcPeriods, TimeType.YEAR);
-    return calcPeriods;
-  }
-
-  private void getPeriod(List<IndexStorage> calcPeriods, TimeType timeType) {
-    IndexStorage hour = new IndexStorage();
-    hour.setTimeType(timeType);
-    hour.setCalcType(CalcType.CALC);
-    calcPeriods.add(hour);
-  }
-
-  private void buildParam(FelNode felNode, Set<String> params) {
-    if (felNode.getChildren() == null) {
-      if (isConfigParam(felNode.getText())) {
-        params.add(felNode.getText());
-      }
-    } else {
-      for (FelNode node : felNode.getChildren()) {
-        if (node.getChildren() == null) {
-          if (node instanceof VarAstNode && isConfigParam(node.getText())) {
-            params.add(node.getText());
-          }
-        } else {
-          buildParam(node, params);
-        }
-      }
-    }
-  }
-
-  private boolean isConfigParam(String param) {
-    if (param.startsWith("'") && param.endsWith("'")) {
-      return false;
-    }
-
-    if (param.startsWith("$")) {
-      return true;
-    }
-
-    return true;
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/LimitTypeController.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/LimitTypeController.java
deleted file mode 100644
index 48496eb..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/LimitTypeController.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.dingzhuo.energy.data.model.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.common.utils.IdUtils;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.data.model.domain.LimitType;
-import com.dingzhuo.energy.data.model.service.ILimitTypeService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * 鎶ヨ闄愬�肩被鍨嬬淮鎶ontroller
- *
- * @author zw
- * @date 2020-03-07
- */
-@RestController
-@RequestMapping("/basicsetting/limitType")
-@Api(value = "棰勬姤璀︾鐞�",tags = {"棰勬姤璀︾鐞�"})
-public class LimitTypeController extends BaseController
-{
-    @Autowired
-    private ILimitTypeService limitTypeService;
-
-    @Autowired
-    private TokenService tokenService;
-
-    /**
-     * 鏌ヨ鎶ヨ闄愬�肩被鍨嬬淮鎶ゅ垪琛�
-     */
-    //@PreAuthorize("@ss.hasPermi('basicsetting:limitType:list')")
-    @GetMapping("/list")
-    @ApiOperation(value = "鎶ヨ闄愬�煎垪琛�")
-    public TableDataInfo list(LimitType limitType)
-    {
-        startPage();
-        List<LimitType> list = limitTypeService.selectLimitTypeList(limitType);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭鎶ヨ闄愬�肩被鍨嬬淮鎶ゅ垪琛�
-     */
-    @PreAuthorize("@ss.hasPermi('basicsetting:limitType:export')")
-    @Log(title = "鎶ヨ闄愬�肩被鍨嬬淮鎶�", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    @ApiOperation(value = "鎶ヨ闄愬�煎垪琛ㄥ鍑�")
-    public AjaxResult export(LimitType limitType)
-    {
-        List<LimitType> list = limitTypeService.selectLimitTypeList(limitType);
-        ExcelUtil<LimitType> util = new ExcelUtil<LimitType>(LimitType.class);
-        return util.exportExcel(list, "limitType");
-    }
-
-    /**
-     * 鑾峰彇鎶ヨ闄愬�肩被鍨嬬淮鎶よ缁嗕俊鎭�
-     */
-    @PreAuthorize("@ss.hasPermi('basicsetting:limitType:query')")
-    @GetMapping(value = "/{id}")
-    @ApiOperation(value = "鑾峰彇鎶ヨ闄愬�肩被鍨嬬淮鎶よ缁嗕俊鎭�")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(limitTypeService.selectLimitTypeById(id));
-    }
-
-    /**
-     * 鏂板鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     */
-    @PreAuthorize("@ss.hasPermi('basicsetting:limitType:add')")
-    @Log(title = "鎶ヨ闄愬�肩被鍨嬬淮鎶�", businessType = BusinessType.INSERT)
-    @PostMapping
-    @ApiOperation(value = "鏂板鎶ヨ闄愬��")
-    public AjaxResult add(@RequestBody LimitType limitType)
-    {
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        limitType.setId(IdUtils.fastUUID());
-        limitType.setCreateBy(loginUser.getUsername());
-        return toAjax(limitTypeService.insertLimitType(limitType));
-    }
-
-    /**
-     * 淇敼鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     */
-    @PreAuthorize("@ss.hasPermi('basicsetting:limitType:edit')")
-    @Log(title = "鎶ヨ闄愬�肩被鍨嬬淮鎶�", businessType = BusinessType.UPDATE)
-    @PutMapping
-    @ApiOperation(value = "淇敼鎶ヨ闄愬��")
-    public AjaxResult edit(@RequestBody LimitType limitType)
-    {
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        limitType.setUpdateBy(loginUser.getUsername());
-        return toAjax(limitTypeService.updateLimitType(limitType));
-    }
-
-    /**
-     * 鍒犻櫎鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     */
-    @PreAuthorize("@ss.hasPermi('basicsetting:limitType:remove')")
-    @Log(title = "鎶ヨ闄愬�肩被鍨嬬淮鎶�", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    @ApiOperation(value = "鍒犻櫎鎶ヨ闄愬��")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(limitTypeService.deleteLimitTypeByIds(ids));
-    }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/ModelInfoController.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/ModelInfoController.java
deleted file mode 100644
index a37c7b2..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/ModelInfoController.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package com.dingzhuo.energy.data.model.controller;
-
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.data.model.domain.ModelInfo;
-import com.dingzhuo.energy.data.model.domain.vo.PointDataVO;
-import com.dingzhuo.energy.data.model.service.IEnergyIndexService;
-import com.dingzhuo.energy.data.model.service.IModelInfoService;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * 妯″瀷Controller
- *
- * @author fanxinfu
- * @date 2020-02-17
- */
-@RestController
-@RequestMapping("/basicsetting/model")
-public class ModelInfoController extends BaseController {
-  @Autowired
-  private IModelInfoService modelInfoService;
-
-  @Autowired
-  private IEnergyIndexService energyIndexService;
-
-  /**
-   * 鏌ヨ妯″瀷鍒楄〃
-   */
-  @PreAuthorize("@ss.hasPermi('basicsetting:model:list')")
-  @GetMapping("/list")
-  public AjaxResult list(ModelInfo modelInfo) {
-    List<ModelInfo> list = modelInfoService.selectModelInfoList(modelInfo);
-    return AjaxResult.success(list);
-  }
-
-  /**
-   * 瀵煎嚭妯″瀷鍒楄〃
-   */
-  @PreAuthorize("@ss.hasPermi('basicsetting:model:export')")
-  @Log(title = "妯″瀷", businessType = BusinessType.EXPORT)
-  @GetMapping("/export")
-  public AjaxResult export(ModelInfo modelInfo) {
-    List<ModelInfo> list = modelInfoService.selectModelInfoList(modelInfo);
-    ExcelUtil<ModelInfo> util = new ExcelUtil<ModelInfo>(ModelInfo.class);
-    return util.exportExcel(list, "model");
-  }
-
-  /**
-   * 鑾峰彇妯″瀷璇︾粏淇℃伅
-   */
-  @PreAuthorize("@ss.hasPermi('basicsetting:model:query')")
-  @GetMapping(value = "/{modelCode}")
-  public AjaxResult getInfo(@PathVariable("modelCode") String modelCode) {
-    return AjaxResult.success(modelInfoService.selectModelInfoById(modelCode));
-  }
-
-  /**
-   * 鏂板妯″瀷
-   */
-  @PreAuthorize("@ss.hasPermi('basicsetting:model:add')")
-  @Log(title = "妯″瀷", businessType = BusinessType.INSERT)
-  @PostMapping
-  public AjaxResult add(@RequestBody ModelInfo modelInfo) {
-    return toAjax(modelInfoService.insertModelInfo(modelInfo));
-  }
-
-  /**
-   * 淇敼妯″瀷
-   */
-  @PreAuthorize("@ss.hasPermi('basicsetting:model:edit')")
-  @Log(title = "妯″瀷", businessType = BusinessType.UPDATE)
-  @PutMapping
-  public AjaxResult edit(@RequestBody ModelInfo modelInfo) {
-    return toAjax(modelInfoService.updateModelInfo(modelInfo));
-  }
-
-  /**
-   * 鍒犻櫎妯″瀷
-   */
-  @PreAuthorize("@ss.hasPermi('basicsetting:model:remove')")
-  @Log(title = "妯″瀷", businessType = BusinessType.DELETE)
-  @DeleteMapping("/{modelCode}")
-  public AjaxResult remove(@PathVariable String modelCode) {
-    boolean hasConfig = energyIndexService.modelHasConfig(modelCode);
-    if (hasConfig) {
-      return AjaxResult.error("璇ユā鍨嬪凡缁忛厤缃妭鐐规垨鎸囨爣锛屼笉鑳藉垹闄わ紒");
-    }
-
-    return toAjax(modelInfoService.deleteModelInfoByCode(modelCode));
-  }
-
-  /**
-   * 鏍规嵁妯″瀷id鏌ヨ瀵瑰簲鐐逛綅淇℃伅
-   *
-   * @param modelId 鏌ヨ妯″瀷id
-   * @return
-   */
-  @ApiOperation("鏍规嵁妯″瀷id鏌ヨ瀵瑰簲鐐逛綅淇℃伅")
-  @GetMapping("/getEnergyIndexByModelId")
-  public AjaxResult listEnergyIndexByModelId(String modelId) {
-    if (StringUtils.isEmpty(modelId)) {
-      return AjaxResult.error("鏈壘鍒版煡璇㈡ā鍨嬩俊鎭�");
-    }
-    List<PointDataVO> voList = modelInfoService.listEnergyIndexByModelId(modelId);
-    return AjaxResult.success(voList);
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/ModelNodeController.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/ModelNodeController.java
deleted file mode 100644
index 773eba9..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/ModelNodeController.java
+++ /dev/null
@@ -1,370 +0,0 @@
-package com.dingzhuo.energy.data.model.controller;
-
-import com.alibaba.fastjson.JSONObject;
-import com.dingzhuo.energy.common.core.lang.UUID;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.service.IEnergyIndexService;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.system.service.ISysRoleService;
-import com.dingzhuo.energy.project.system.service.ISysUserService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * 妯″瀷鑺傜偣Controller
- *
- * @author fanxinfu
- * @date 2020-02-10
- */
-@RestController
-@RequestMapping("/basicsetting/modelnode")
-@Api(value = "妯″瀷鑺傜偣",tags = {"妯″瀷鑺傜偣"})
-public class ModelNodeController extends BaseController {
-
-  private final IModelNodeService modelNodeService;
-
-
-  @Autowired
-  public ModelNodeController(
-      IModelNodeService modelNodeService, IEnergyIndexService energyIndexService,
-      ISysUserService sysUserService,
-      ISysRoleService roleService) {
-    this.modelNodeService = modelNodeService;
-  }
-
-  /**
-   * 鏌ヨ妯″瀷鑺傜偣鍒楄〃
-   */
-  @ApiOperation(value = "鏌ヨ妯″瀷鑺傜偣鍒楄〃")
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:query')")
-  @GetMapping("/list")
-  public TableDataInfo list(ModelNode modelNode) {
-    startPage();
-    List<ModelNode> list = modelNodeService.selectModelNodeList(modelNode);
-    return getDataTable(list);
-  }
-
-  /**
-   * 鏌ヨ妯″瀷鑺傜偣鍒楄〃
-   */
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:list')")
-  @GetMapping("/treelist")
-  @ApiOperation(value = "鏌ヨ妯″瀷鑺傜偣鏍戠姸鍒楄〃")
-  public AjaxResult treeList(String modelCode) {
-    List<ModelNode> list = modelNodeService.getModelNodeByModelCode(modelCode);
-    return AjaxResult.success(modelNodeService.buildModelNodeTree(list));
-  }
-
-  /**
-   * 鏌ヨ妯″瀷鑺傜偣鍒楄〃
-   */
-  @GetMapping("/treelist/withAuth")
-  @ApiOperation(value = "鏌ヨ妯″瀷鑺傜偣鍒楄〃")
-  public AjaxResult treeListWithAuth(String modelCode) {
-    Long userId = SecurityUtils.getUserId();
-    List<ModelNode> list = modelNodeService.getModelNodeByModelCodeWithAuth(modelCode, userId);
-    return AjaxResult.success(modelNodeService.buildModelNodeTree(list));
-  }
-
-  /**
-   * 瀵煎嚭妯″瀷鑺傜偣鍒楄〃
-   */
-  @ApiOperation(value = "瀵煎嚭妯″瀷鑺傜偣鍒楄〃")
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:export')")
-  @Log(title = "妯″瀷鑺傜偣", businessType = BusinessType.EXPORT)
-  @GetMapping("/export")
-  public AjaxResult export(ModelNode modelNode) {
-    List<ModelNode> list = modelNodeService.selectModelNodeList(modelNode);
-    ExcelUtil<ModelNode> util = new ExcelUtil<ModelNode>(ModelNode.class);
-    return util.exportExcel(list, "modelNode");
-  }
-
-  /**
-   * 鑾峰彇妯″瀷鑺傜偣璇︾粏淇℃伅
-   */
-  @ApiOperation(value = "鑾峰彇妯″瀷鑺傜偣璇︾粏淇℃伅")
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:query')")
-  @GetMapping(value = "/{nodeId}")
-  public AjaxResult getInfo(@PathVariable("nodeId") String nodeId) {
-    return AjaxResult.success(modelNodeService.selectModelNodeById(nodeId));
-  }
-
-  @GetMapping(value = "/hasEnergyIndex")
-  @ApiOperation(value = "鑾峰彇妯″瀷鑺傜偣璇︾粏淇℃伅")
-  public AjaxResult hasEnergyIndex(String nodeId) {
-    return AjaxResult.success(modelNodeService.hasEnergyIndex(nodeId));
-  }
-
-  /**
-   * 鏂板妯″瀷鑺傜偣
-   */
-  @ApiOperation(value = "鏂板妯″瀷鑺傜偣")
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:add')")
-  @Log(title = "妯″瀷鑺傜偣", businessType = BusinessType.INSERT)
-  @PostMapping
-  public AjaxResult add(@RequestBody ModelNode modelNode) {
-    boolean isExist = modelNodeService
-        .modelNodeHasExist(modelNode.getCode(), modelNode.getModelCode());
-    if (isExist) {
-      return AjaxResult.error("妯″瀷鑺傜偣缂栫爜涓嶈兘閲嶅锛�");
-    } else {
-      modelNode.setNodeId(UUID.randomUUID().toString());
-      modelNodeService.insertModelNode(modelNode);
-      return AjaxResult.success(modelNode);
-    }
-  }
-
-  /**
-   * 淇敼妯″瀷鑺傜偣
-   */
-  @ApiOperation(value = "淇敼妯″瀷鑺傜偣")
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
-  @Log(title = "妯″瀷鑺傜偣", businessType = BusinessType.UPDATE)
-  @PutMapping
-  public AjaxResult edit(@RequestBody ModelNode modelNode) {
-    boolean isExist = modelNodeService.modelNodeHasExist(modelNode);
-    if (isExist) {
-      return AjaxResult.error("妯″瀷鑺傜偣缂栫爜涓嶈兘閲嶅锛�");
-    } else {
-      return toAjax(modelNodeService.updateModelNode(modelNode));
-    }
-  }
-
-  /**
-   * 淇敼妯″瀷鑺傜偣
-   */
-  @ApiOperation(value = "妯″瀷鑺傜偣鎺掑簭")
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
-  @Log(title = "妯″瀷鑺傜偣", businessType = BusinessType.UPDATE)
-  @PutMapping("/order")
-  public AjaxResult order(@RequestBody JSONObject param) {
-    String nodeId = param.getString("nodeId");
-    String parentId = param.getString("parentId");
-    String[] children = param.getJSONArray("children").toArray(new String[0]);
-    modelNodeService.updateOrder(nodeId, parentId, children);
-    return AjaxResult.success();
-  }
-
-  /**
-   * 鍒犻櫎妯″瀷鑺傜偣
-   */
-  @ApiOperation(value = "鍒犻櫎妯″瀷鑺傜偣")
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:remove')")
-  @Log(title = "妯″瀷鑺傜偣", businessType = BusinessType.DELETE)
-  @DeleteMapping("/{nodeIds}")
-  public AjaxResult remove(@PathVariable String[] nodeIds) {
-    return toAjax(modelNodeService.deleteModelNodeByIds(nodeIds));
-  }
-
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
-  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈璁惧", businessType = BusinessType.UPDATE)
-  @GetMapping("/device/{nodeId}")
-  @ApiOperation(value = "璁剧疆妯″瀷鑺傜偣鍏宠仈璁惧")
-  public AjaxResult getSettingDevice(@PathVariable("nodeId") String nodeId) {
-    try {
-      return AjaxResult.success(modelNodeService.getSettingDevice(nodeId));
-    } catch (Exception ex) {
-      logger.error("鑾峰彇鍏宠仈璁惧鍑洪敊锛�", ex);
-      return AjaxResult.error("鑾峰彇鍏宠仈璁惧鍑洪敊!");
-    }
-  }
-
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
-  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈璁惧", businessType = BusinessType.UPDATE)
-  @PostMapping("/device/{nodeId}")
-  @ApiOperation(value = "璁剧疆妯″瀷鑺傜偣鍏宠仈璁惧")
-  public AjaxResult setDevice(@PathVariable("nodeId") String nodeId,
-      @RequestBody String[] deviceIds) {
-    try {
-      modelNodeService.setDevice(nodeId, deviceIds);
-      return AjaxResult.success();
-    } catch (Exception ex) {
-      logger.error("璁剧疆鍏宠仈璁惧鍑洪敊锛�", ex);
-      return AjaxResult.error();
-    }
-  }
-
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
-  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈璁惧", businessType = BusinessType.UPDATE)
-  @DeleteMapping("/device/{nodeId}")
-  @ApiOperation(value = "鍒犻櫎妯″瀷鑺傜偣鍏宠仈璁惧")
-  public AjaxResult delDevice(@PathVariable("nodeId") String nodeId,
-      @RequestBody String[] deviceIds) {
-    try {
-      modelNodeService.delDevice(nodeId, deviceIds);
-      return AjaxResult.success();
-    } catch (Exception ex) {
-      logger.error("鍒犻櫎鍏宠仈璁惧鍑洪敊锛�", ex);
-      return AjaxResult.error();
-    }
-  }
-
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
-  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈鑳芥簮", businessType = BusinessType.UPDATE)
-  @GetMapping("/energy/{nodeId}")
-  @ApiOperation(value = "鑾峰彇妯″瀷鑺傜偣鍏宠仈鑳芥簮")
-  public AjaxResult getSettingEnergy(@PathVariable("nodeId") String nodeId) {
-    try {
-      return AjaxResult.success(modelNodeService.getSettingEnergy(nodeId));
-    } catch (Exception ex) {
-      logger.error("鑾峰彇鍏宠仈鑳芥簮鍑洪敊锛�", ex);
-      return AjaxResult.error("鑾峰彇鍏宠仈鑳芥簮鍑洪敊!");
-    }
-  }
-
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
-  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈鑳芥簮", businessType = BusinessType.UPDATE)
-  @PostMapping("/energy/{nodeId}")
-  @ApiOperation(value = "璁剧疆妯″瀷鑺傜偣鍏宠仈鑳芥簮")
-  public AjaxResult setEnergy(@PathVariable("nodeId") String nodeId,
-      @RequestBody Integer[] energyIds) {
-    try {
-      modelNodeService.setEnergy(nodeId, energyIds);
-      return AjaxResult.success();
-    } catch (Exception ex) {
-      logger.error("璁剧疆鍏宠仈鑳芥簮鍑洪敊锛�", ex);
-      return AjaxResult.error();
-    }
-  }
-
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
-  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈鑳芥簮", businessType = BusinessType.UPDATE)
-  @DeleteMapping("/energy/{nodeId}")
-  @ApiOperation(value = "鍒犻櫎妯″瀷鑺傜偣鍏宠仈鑳芥簮")
-  public AjaxResult delEnergy(@PathVariable("nodeId") String nodeId,
-      @RequestBody Integer[] energyIds) {
-    try {
-      modelNodeService.delEnergy(nodeId, energyIds);
-      return AjaxResult.success();
-    } catch (Exception ex) {
-      logger.error("鍒犻櫎鍏宠仈鑳芥簮鍑洪敊锛�", ex);
-      return AjaxResult.error();
-    }
-  }
-
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
-  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈浜у搧", businessType = BusinessType.UPDATE)
-  @GetMapping("/product/{nodeId}")
-  @ApiOperation(value = "鑾峰彇妯″瀷鑺傜偣鍏宠仈浜у搧")
-  public AjaxResult getSettingProduct(@PathVariable("nodeId") String nodeId) {
-    try {
-      return AjaxResult.success(modelNodeService.getSettingProduct(nodeId));
-    } catch (Exception ex) {
-      logger.error("鑾峰彇鍏宠仈浜у搧鍑洪敊锛�", ex);
-      return AjaxResult.error("鑾峰彇鍏宠仈浜у搧鍑洪敊!");
-    }
-  }
-
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
-  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈浜у搧", businessType = BusinessType.UPDATE)
-  @PostMapping("/product/{nodeId}")
-  @ApiOperation(value = "璁剧疆妯″瀷鑺傜偣鍏宠仈浜у搧")
-  public AjaxResult setProduct(@PathVariable("nodeId") String nodeId,
-      @RequestBody Integer[] productIds) {
-    try {
-      modelNodeService.setProduct(nodeId, productIds);
-      return AjaxResult.success();
-    } catch (Exception ex) {
-      logger.error("璁剧疆鍏宠仈浜у搧鍑洪敊锛�", ex);
-      return AjaxResult.error();
-    }
-  }
-
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
-  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈浜у搧", businessType = BusinessType.UPDATE)
-  @DeleteMapping("/product/{nodeId}")
-  @ApiOperation(value = "鍒犻櫎妯″瀷鑺傜偣鍏宠仈浜у搧")
-  public AjaxResult delProduct(@PathVariable("nodeId") String nodeId,
-      @RequestBody Integer[] productIds) {
-    try {
-      modelNodeService.delProduct(nodeId, productIds);
-      return AjaxResult.success();
-    } catch (Exception ex) {
-      logger.error("鍒犻櫎鍏宠仈浜у搧鍑洪敊锛�", ex);
-      return AjaxResult.error();
-    }
-  }
-
-  @GetMapping("/energyIndex/{nodeId}")
-  @ApiOperation(value = "鑾峰彇妯″瀷鑺傜偣鍏宠仈鎸囨爣")
-  public AjaxResult getSettingIndex(@PathVariable("nodeId") String nodeId) {
-    try {
-      return AjaxResult.success(modelNodeService.getSettingIndex(nodeId));
-    } catch (Exception ex) {
-      logger.error("鑾峰彇鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
-      return AjaxResult.error("鑾峰彇鍏宠仈鎸囨爣鍑洪敊!");
-    }
-  }
-
-  @GetMapping("/energyIndex/{indexType}/{nodeId}")
-  @ApiOperation(value = "鑾峰彇妯″瀷鑺傜偣鍏宠仈鎸囨爣")
-  public AjaxResult getSettingIndex(@PathVariable("indexType") String indexType,
-      @PathVariable("nodeId") String nodeId) {
-    try {
-      return AjaxResult.success(modelNodeService.getSettingIndex(indexType, nodeId));
-    } catch (Exception ex) {
-      logger.error("鑾峰彇鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
-      return AjaxResult.error("鑾峰彇鍏宠仈鎸囨爣鍑洪敊!");
-    }
-  }
-
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
-  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈閲囬泦鎸囨爣", businessType = BusinessType.UPDATE)
-  @PostMapping("/energyIndex/{nodeId}/{indexType}")
-  @ApiOperation(value = "璁剧疆妯″瀷鑺傜偣鍏宠仈鎸囨爣")
-  public AjaxResult setSettingIndex(@PathVariable("nodeId") String nodeId,
-      @PathVariable("indexType") String indexType,
-      @RequestBody String[] indexIds) {
-    try {
-      modelNodeService.setIndex(nodeId, indexType, indexIds);
-      return AjaxResult.success();
-    } catch (Exception ex) {
-      logger.error("璁剧疆鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
-      return AjaxResult.error();
-    }
-  }
-
-  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
-  @Log(title = "鍒犻櫎妯″瀷鑺傜偣鍏宠仈閲囬泦鎸囨爣", businessType = BusinessType.UPDATE)
-  @DeleteMapping("/energyIndex/{nodeId}")
-  @ApiOperation(value = "鍒犻櫎妯″瀷鑺傜偣鍏宠仈鎸囨爣")
-  public AjaxResult delSettingIndex(@PathVariable("nodeId") String nodeId,
-                                    @RequestBody String[] indexIds) {
-    try {
-      modelNodeService.delIndex(nodeId, indexIds);
-      return AjaxResult.success();
-    } catch (Exception ex) {
-      logger.error("鍒犻櫎鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
-      return AjaxResult.error();
-    }
-  }
-
-  @Log(title = "鏍规嵁nodeId鏌ヨ鐐逛綅淇℃伅", businessType = BusinessType.UPDATE)
-  @GetMapping("/getIndexInforByNodeId")
-  @ApiOperation(value = "鏍规嵁nodeId鏌ヨ鐐逛綅淇℃伅")
-  public AjaxResult getIndexInforByNodeId(String nodeId) {
-    try {
-      List<EnergyIndex> settingIndex = modelNodeService.getSettingIndex(nodeId);
-
-
-      return AjaxResult.success();
-    } catch (Exception ex) {
-      logger.error("鍒犻櫎鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
-      return AjaxResult.error();
-    }
-  }
-
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/StateTypeController.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/StateTypeController.java
deleted file mode 100644
index 31f3fa1..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/controller/StateTypeController.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.dingzhuo.energy.data.model.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.common.utils.IdUtils;
-import com.dingzhuo.energy.data.model.domain.StateType;
-import com.dingzhuo.energy.data.model.service.IStateTypeService;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * 绯荤粺鐘舵�佺淮鎶ontroller
- * 
- * @author sys
- * @date 2020-03-18
- */
-@RestController
-@RequestMapping("/basicsetting/statetype")
-public class StateTypeController extends BaseController
-{
-    @Autowired
-    private IStateTypeService stateTypeService;
-
-    /**
-     * 鏌ヨ绯荤粺鐘舵�佺淮鎶ゅ垪琛�
-     */
-    @PreAuthorize("@ss.hasPermi('basicsetting:statetype:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(StateType stateType)
-    {
-        startPage();
-        List<StateType> list = stateTypeService.selectStateTypeList(stateType);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭绯荤粺鐘舵�佺淮鎶ゅ垪琛�
-     */
-    @PreAuthorize("@ss.hasPermi('basicsetting:statetype:export')")
-    @Log(title = "绯荤粺鐘舵�佺淮鎶�", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(StateType stateType)
-    {
-        List<StateType> list = stateTypeService.selectStateTypeList(stateType);
-        ExcelUtil<StateType> util = new ExcelUtil<StateType>(StateType.class);
-        return util.exportExcel(list, "statetype");
-    }
-
-    /**
-     * 鑾峰彇绯荤粺鐘舵�佺淮鎶よ缁嗕俊鎭�
-     */
-    @PreAuthorize("@ss.hasPermi('basicsetting:statetype:query')")
-    @GetMapping(value = "/{stateId}")
-    public AjaxResult getInfo(@PathVariable("stateId") String stateId)
-    {
-        return AjaxResult.success(stateTypeService.selectStateTypeById(stateId));
-    }
-
-    /**
-     * 鏂板绯荤粺鐘舵�佺淮鎶�
-     */
-    @PreAuthorize("@ss.hasPermi('basicsetting:statetype:add')")
-    @Log(title = "绯荤粺鐘舵�佺淮鎶�", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody StateType stateType)
-    {
-        stateType.setStateId(IdUtils.fastUUID());
-        return toAjax(stateTypeService.insertStateType(stateType));
-    }
-
-    /**
-     * 淇敼绯荤粺鐘舵�佺淮鎶�
-     */
-    @PreAuthorize("@ss.hasPermi('basicsetting:statetype:edit')")
-    @Log(title = "绯荤粺鐘舵�佺淮鎶�", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody StateType stateType)
-    {
-        return toAjax(stateTypeService.updateStateType(stateType));
-    }
-
-    /**
-     * 鍒犻櫎绯荤粺鐘舵�佺淮鎶�
-     */
-    @PreAuthorize("@ss.hasPermi('basicsetting:statetype:remove')")
-    @Log(title = "绯荤粺鐘舵�佺淮鎶�", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{stateIds}")
-    public AjaxResult remove(@PathVariable String[] stateIds)
-    {
-        return toAjax(stateTypeService.deleteStateTypeByIds(stateIds));
-    }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/AuthType.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/AuthType.java
deleted file mode 100644
index cc785cd..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/AuthType.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.dingzhuo.energy.data.model.domain;
-
-public enum AuthType {
-  USER,
-  ROLE
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/CalcFunction.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/CalcFunction.java
deleted file mode 100644
index ec15050..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/CalcFunction.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package com.dingzhuo.energy.data.model.domain;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.xmlbeans.impl.common.ValidatorListener;
-
-/**
- * 璁$畻鍑芥暟瀵硅薄 calc_function
- *
- * @author fanxinfu
- * @date 2020-03-10
- */
-@ApiModel(value = "璁$畻鍑芥暟")
-public class CalcFunction extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 涓婚敭 */
-    @ApiModelProperty(value = "涓婚敭")
-    private String id;
-
-    /** 鍑芥暟鍚� */
-    @Excel(name = "鍑芥暟鍚�")
-    @ApiModelProperty(value = "鍑芥暟鍚�")
-    private String funcName;
-
-    /** 鍑芥暟鏂囨湰 */
-    @Excel(name = "鍑芥暟鏂囨湰")
-    @ApiModelProperty(value = "鍑芥暟鏂囨湰")
-    private String funcText;
-
-    /** 浠嬬粛 */
-    @Excel(name = "浠嬬粛")
-    @ApiModelProperty(value = "浠嬬粛")
-    private String info;
-
-    public void setInfo(String info)
-    {
-        this.info = info;
-    }
-
-    public String getInfo()
-    {
-        return info;
-    }
-    public void setId(String id)
-    {
-        this.id = id;
-    }
-
-    public String getId()
-    {
-        return id;
-    }
-    public void setFuncName(String funcName)
-    {
-        this.funcName = funcName;
-    }
-
-    public String getFuncName()
-    {
-        return funcName;
-    }
-    public void setFuncText(String funcText)
-    {
-        this.funcText = funcText;
-    }
-
-    public String getFuncText()
-    {
-        return funcText;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("info", getInfo())
-            .append("id", getId())
-            .append("funcName", getFuncName())
-            .append("funcText", getFuncText())
-            .toString();
-    }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/CalcPeriod.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/CalcPeriod.java
deleted file mode 100644
index 411e986..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/CalcPeriod.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.dingzhuo.energy.data.model.domain;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-
-public class CalcPeriod {
-
-  private String name;
-  private TimeType timeType;
-  private CalcType calcType;
-
-  public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public TimeType getTimeType() {
-    return timeType;
-  }
-
-  public void setTimeType(TimeType timeType) {
-    this.timeType = timeType;
-  }
-
-  public CalcType getCalcType() {
-    return calcType;
-  }
-
-  public void setCalcType(CalcType calcType) {
-    this.calcType = calcType;
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/CalcType.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/CalcType.java
deleted file mode 100644
index 6cd6cb3..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/CalcType.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.dingzhuo.energy.data.model.domain;
-
-public enum CalcType {
-  /**
-   * 涓嶈绠�
-   */
-  NONE,
-  /**
-   * 鑷姩璁$畻
-   */
-  CALC,
-  /**
-   * 鎵嬪伐褰曞叆
-   */
-  INPUT
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/DaqTemplate.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/DaqTemplate.java
deleted file mode 100644
index da35b84..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/DaqTemplate.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.dingzhuo.energy.data.model.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-
-/**
- * 閲囬泦鍙傛暟妯℃澘瀵硅薄 daq_template
- *
- * @author ruoyi
- * @date 2020-02-08
- */
-public class DaqTemplate extends BaseEntity {
-  private static final long serialVersionUID = 1L;
-
-  /**
-   * 涓婚敭
-   */
-  private String id;
-
-  /**
-   * 鍙傛暟缂栫爜
-   */
-  @Excel(name = "鍙傛暟缂栫爜")
-  private String code;
-
-  /**
-   * 鍙傛暟鍚嶇О
-   */
-  @Excel(name = "鍙傛暟鍚嶇О")
-  private String name;
-
-  /**
-   * 鍙傛暟鎵�灞炵被鍨�
-   */
-  @Excel(name = "鍙傛暟鎵�灞炵被鍨�")
-  private String deviceType;
-
-  @Excel(name = "鍗曚綅")
-  private String unit;
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public String getId() {
-    return id;
-  }
-
-  public void setCode(String code) {
-    this.code = code;
-  }
-
-  public String getCode() {
-    return code;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public String getName() {
-    return name;
-  }
-
-  public void setDeviceType(String deviceType) {
-    this.deviceType = deviceType;
-  }
-
-  public String getDeviceType() {
-    return deviceType;
-  }
-
-  @Override
-  public String toString() {
-    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
-        .append("id", getId())
-        .append("code", getCode())
-        .append("name", getName())
-        .append("deviceType", getDeviceType())
-        .append("unit", getUnit())
-        .toString();
-  }
-
-  public String getUnit() {
-    return unit;
-  }
-
-  public void setUnit(String unit) {
-    this.unit = unit;
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/EnergyIndex.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/EnergyIndex.java
deleted file mode 100644
index 3e33c94..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/EnergyIndex.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package com.dingzhuo.energy.data.model.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import org.springframework.data.annotation.Transient;
-
-
-/**
- * 鎸囨爣淇℃伅瀵硅薄 energy_index
- *
- * @author fanxinfu
- * @date 2020-02-14
- */
-@ApiModel(value = "鎸囨爣淇℃伅")
-public class EnergyIndex extends BaseEntity {
-
-  private static final long serialVersionUID = 1L;
-
-  /**
-   * 涓婚敭
-   */
-  @ApiModelProperty(value = "涓婚敭")
-  private String indexId;
-
-  /**
-   * 鎸囨爣鍚嶇О
-   */
-  @ApiModelProperty(value = "鎸囨爣鍚嶇О")
-  @Excel(name = "鎸囨爣鍚嶇О", prompt = "蹇呭~")
-  private String name;
-
-  /**
-   * 鎸囨爣缂栫爜
-   */
-  @ApiModelProperty(value = "鎸囨爣缂栫爜")
-  @Excel(name = "鎸囨爣缂栫爜", prompt = "蹇呭~")
-  private String code;
-
-  /**
-   * 绯荤粺鎸囨爣绫诲瀷
-   */
-  @ApiModelProperty(value = "绯荤粺鎸囨爣绫诲瀷")
-  private IndexType indexType;
-
-  @Excel(name = "鎸囨爣绫诲瀷", combo = "COLLECT,STATISTIC")
-  @ApiModelProperty(value = "")
-  private String indexTypeCode;
-
-  /**
-   * 鎸囨爣鍒嗙被
-   */
-  @Excel(name = "鎸囨爣鍒嗙被")
-  @ApiModelProperty(value = "鎸囨爣鍒嗙被")
-  private String indexCategory;
-
-  /**
-   * 鍗曚綅涓婚敭
-   */
-  @Excel(name = "鍗曚綅涓婚敭")
-  @ApiModelProperty(value = "鍗曚綅涓婚敭")
-  private String unitId;
-
-  @Excel(name = "鎵�灞炶妭鐐�", prompt = "蹇呭~")
-  @ApiModelProperty(value = "鎵�灞炶妭鐐�")
-  private String nodeId;
-
-  @ApiModelProperty(value = "琛ㄨid")
-  private String meterId;
-  @ApiModelProperty(value = "椤哄簭鍙�")
-  @Excel(name = "椤哄簭鍙�")
-  private int orderNum;
-
-  @ApiModelProperty(value = "")
-  private String equipment;
-  @ApiModelProperty(value = "id")
-  private String energyId;
-
-  @Transient
-  private  String meterName;
-  public void setIndexId(String indexId) {
-    this.indexId = indexId;
-  }
-
-  public String getIndexId() {
-    return indexId;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public String getName() {
-    return name;
-  }
-
-  public void setCode(String code) {
-    this.code = code;
-  }
-
-  public String getCode() {
-    return code;
-  }
-
-  public void setIndexType(IndexType indexType) {
-    this.indexType = indexType;
-    if (StringUtils.isBlank(this.indexTypeCode)) {
-      this.indexTypeCode = indexType.name();
-    }
-  }
-
-  public IndexType getIndexType() {
-    if (indexType == null && StringUtils.isNotBlank(this.indexTypeCode)) {
-      return IndexType.valueOf(indexTypeCode);
-    }
-
-    return indexType;
-  }
-
-  public void setUnitId(String unitId) {
-    this.unitId = unitId;
-  }
-
-  public String getUnitId() {
-    return unitId;
-  }
-
-  @Override
-  public String toString() {
-    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
-        .append("indexId", getIndexId())
-        .append("name", getName())
-        .append("code", getCode())
-        .append("indexType", getIndexType())
-        .append("remark", getRemark())
-        .append("unitId", getUnitId())
-        .toString();
-  }
-
-  public String getNodeId() {
-    return nodeId;
-  }
-
-  public void setNodeId(String nodeId) {
-    this.nodeId = nodeId;
-  }
-
-  public String getMeterId() {
-    return meterId;
-  }
-
-  public void setMeterId(String meterId) {
-    this.meterId = meterId;
-  }
-
-  public String getIndexCategory() {
-    return indexCategory;
-  }
-
-  public void setIndexCategory(String indexCategory) {
-    this.indexCategory = indexCategory;
-  }
-
-  public String getIndexTypeCode() {
-    if (StringUtils.isBlank(indexTypeCode) && this.indexType != null) {
-      return this.indexType.name();
-    }
-    return indexTypeCode;
-  }
-
-  public void setIndexTypeCode(String indexTypeCode) {
-    this.indexTypeCode = indexTypeCode;
-    if (this.indexType == null) {
-      this.indexType = IndexType.valueOf(indexTypeCode);
-    }
-  }
-
-  public int getOrderNum() {
-    return orderNum;
-  }
-
-  public void setOrderNum(int orderNum) {
-    this.orderNum = orderNum;
-  }
-
-  public String getEquipment() {
-    return equipment;
-  }
-
-  public void setEquipment(String equipment) {
-    this.equipment = equipment;
-  }
-
-  public String getEnergyId() {
-    return energyId;
-  }
-
-  public void setEnergyId(String energyId) {
-    this.energyId = energyId;
-  }
-
-  public String getMeterName() {
-    return meterName;
-  }
-
-  public void setMeterName(String meterName) {
-    this.meterName = meterName;
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/EnergyIndexQuery.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/EnergyIndexQuery.java
deleted file mode 100644
index f9f7fe4..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/EnergyIndexQuery.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.dingzhuo.energy.data.model.domain;
-
-public class EnergyIndexQuery {
-
-  private String nodeId;
-  private String codeOrName;
-  private String indexCategory;
-  private IndexType indexType;
-
-  public EnergyIndexQuery() {
-  }
-
-  public EnergyIndexQuery(String nodeId, String codeOrName, String indexCategory,
-      IndexType energyType) {
-    this.nodeId = nodeId;
-    this.codeOrName = codeOrName;
-    this.indexCategory = indexCategory;
-    this.indexType = energyType;
-  }
-
-  public String getNodeId() {
-    return nodeId;
-  }
-
-  public void setNodeId(String nodeId) {
-    this.nodeId = nodeId;
-  }
-
-  public String getCodeOrName() {
-    return codeOrName;
-  }
-
-  public void setCodeOrName(String codeOrName) {
-    this.codeOrName = codeOrName;
-  }
-
-  public String getIndexCategory() {
-    return indexCategory;
-  }
-
-  public void setIndexCategory(String indexCategory) {
-    this.indexCategory = indexCategory;
-  }
-
-  public IndexType getIndexType() {
-    return indexType;
-  }
-
-  public void setIndexType(IndexType indexType) {
-    this.indexType = indexType;
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/IndexFormula.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/IndexFormula.java
deleted file mode 100644
index 7ed932a..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/IndexFormula.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.dingzhuo.energy.data.model.domain;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class IndexFormula {
-
-  private String id;
-  private String formulaText;
-  private String indexId;
-  private List<IndexFormulaParam> indexFormulaParams = new ArrayList<>();
-
-  public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public String getFormulaText() {
-    return formulaText;
-  }
-
-  public void setFormulaText(String formulaText) {
-    this.formulaText = formulaText;
-  }
-
-  public String getIndexId() {
-    return indexId;
-  }
-
-  public void setIndexId(String indexId) {
-    this.indexId = indexId;
-  }
-
-  public List<IndexFormulaParam> getIndexFormulaParams() {
-    return indexFormulaParams;
-  }
-
-  public void setIndexFormulaParams(
-      List<IndexFormulaParam> indexFormulaParams) {
-    this.indexFormulaParams = indexFormulaParams;
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/IndexFormulaParam.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/IndexFormulaParam.java
deleted file mode 100644
index d088ad5..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/IndexFormulaParam.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.dingzhuo.energy.data.model.domain;
-
-public class IndexFormulaParam {
-
-  private String id;
-  private String indexId;
-  private String formulaId;
-  private String paramName;
-  private String paramValue;
-
-  public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public String getIndexId() {
-    return indexId;
-  }
-
-  public void setIndexId(String indexId) {
-    this.indexId = indexId;
-  }
-
-  public String getFormulaId() {
-    return formulaId;
-  }
-
-  public void setFormulaId(String formulaId) {
-    this.formulaId = formulaId;
-  }
-
-  public String getParamName() {
-    return paramName;
-  }
-
-  public void setParamName(String paramName) {
-    this.paramName = paramName;
-  }
-
-  public String getParamValue() {
-    return paramValue;
-  }
-
-  public void setParamValue(String paramValue) {
-    this.paramValue = paramValue;
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/IndexStorage.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/IndexStorage.java
deleted file mode 100644
index 1b4130d..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/IndexStorage.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package com.dingzhuo.energy.data.model.domain;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-/**
- * @author fanxinfu
- */
-public class IndexStorage implements Serializable {
-
-  private String id;
-  private String indexId;
-  private TimeType timeType;
-  private CalcType calcType;
-  private String calcText;
-  private Date createTime;
-  private Date updateTime;
-  private List<String> paramIndex = new ArrayList<>();
-
-  public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public String getIndexId() {
-    return indexId;
-  }
-
-  public void setIndexId(String indexId) {
-    this.indexId = indexId;
-  }
-
-  public TimeType getTimeType() {
-    return timeType;
-  }
-
-  public void setTimeType(TimeType timeType) {
-    this.timeType = timeType;
-  }
-
-  public CalcType getCalcType() {
-    return calcType;
-  }
-
-  public void setCalcType(CalcType calcType) {
-    this.calcType = calcType;
-  }
-
-  public String getCalcText() {
-    return calcText;
-  }
-
-  public void setCalcText(String calcText) {
-    this.calcText = calcText;
-  }
-
-  public Date getCreateTime() {
-    return createTime;
-  }
-
-  public void setCreateTime(Date createTime) {
-    this.createTime = createTime;
-  }
-
-  public Date getUpdateTime() {
-    return updateTime;
-  }
-
-  public void setUpdateTime(Date updateTime) {
-    this.updateTime = updateTime;
-  }
-
-  public List<String> getParamIndex() {
-    return paramIndex;
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/IndexStorageParam.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/IndexStorageParam.java
deleted file mode 100644
index 964310c..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/IndexStorageParam.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.dingzhuo.energy.data.model.domain;
-
-public class IndexStorageParam {
-
-  private String storageId;
-  private String indexId;
-
-  public String getStorageId() {
-    return storageId;
-  }
-
-  public void setStorageId(String storageId) {
-    this.storageId = storageId;
-  }
-
-  public String getIndexId() {
-    return indexId;
-  }
-
-  public void setIndexId(String indexId) {
-    this.indexId = indexId;
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/IndexType.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/IndexType.java
deleted file mode 100644
index 8f141b6..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/IndexType.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.dingzhuo.energy.data.model.domain;
-
-public enum IndexType {
-  /**
-   * 閲囬泦鎸囨爣
-   */
-  COLLECT,
-  /**
-   * 缁熻鎸囨爣
-   */
-  STATISTIC
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/LimitType.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/LimitType.java
deleted file mode 100644
index 59559b9..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/LimitType.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package com.dingzhuo.energy.data.model.domain;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 鎶ヨ闄愬�肩被鍨嬬淮鎶ゅ璞� limit_type
- *
- * @author zw
- * @date 2020-03-07
- */
-@ApiModel(value = "鎶ヨ闄愬��")
-public class LimitType extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** $column.columnComment */
-    @ApiModelProperty(value = "涓婚敭id")
-    private String id;
-
-    /** $column.columnComment */
-    @Excel(name = "闄愬�肩被鍨嬪悕绉�")
-    @ApiModelProperty(value = "闄愬�肩被鍨嬪悕绉�")
-    private String limitName;
-
-    /** $column.columnComment */
-    @Excel(name = "闄愬�肩被鍨嬬紪鐮�")
-    @ApiModelProperty(value = "闄愬�肩被鍨嬬紪鐮�")
-    private String limitCode;
-
-    /** $column.columnComment */
-    @Excel(name = "鑹插彿")
-    @ApiModelProperty(value = "鑹插彿")
-    private String colorNumber;
-
-    /** $column.columnComment */
-    @Excel(name = "姣旇緝杩愮畻绗�")
-    @ApiModelProperty(value = "姣旇緝杩愮畻绗�")
-    private String comparatorOperator;
-
-    /** $column.columnComment */
-    @Excel(name = "璀︽垝绫诲瀷")
-    @ApiModelProperty(value = "璀︽垝绫诲瀷")
-    private String alarmType;
-
-    public String getComparatorOperator() {
-        return comparatorOperator;
-    }
-
-    public void setComparatorOperator(String comparatorOperator) {
-        this.comparatorOperator = comparatorOperator;
-    }
-
-    public void setId(String id)
-    {
-        this.id = id;
-    }
-
-    public String getId()
-    {
-        return id;
-    }
-    public void setLimitName(String limitName)
-    {
-        this.limitName = limitName;
-    }
-
-    public String getLimitName()
-    {
-        return limitName;
-    }
-    public void setLimitCode(String limitCode)
-    {
-        this.limitCode = limitCode;
-    }
-
-    public String getLimitCode()
-    {
-        return limitCode;
-    }
-    public void setColorNumber(String colorNumber)
-    {
-        this.colorNumber = colorNumber;
-    }
-
-    public String getColorNumber()
-    {
-        return colorNumber;
-    }
-
-    public void setAlarmType(String alarmType)
-    {
-        this.alarmType = alarmType;
-    }
-
-    public String getAlarmType()
-    {
-        return alarmType;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("limitName", getLimitName())
-            .append("limitCode", getLimitCode())
-            .append("colorNumber", getColorNumber())
-            .append("alarmType", getAlarmType())
-            .append("createTime", getCreateTime())
-            .append("createBy", getCreateBy())
-            .append("updateTime", getUpdateTime())
-            .append("updateBy", getUpdateBy())
-            .toString();
-    }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/ModelInfo.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/ModelInfo.java
deleted file mode 100644
index 2c88616..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/ModelInfo.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.dingzhuo.energy.data.model.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 妯″瀷瀵硅薄 model_info
- * 
- * @author fanxinfu
- * @date 2020-02-17
- */
-public class ModelInfo extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 妯″瀷缂栫爜 */
-    @Excel(name = "妯″瀷缂栫爜")
-    private String modelCode;
-
-    /** 妯″瀷鍚嶇О */
-    @Excel(name = "妯″瀷鍚嶇О")
-    private String modelName;
-
-    /** 鏄惁鏄剧ず */
-    private Integer isShow;
-
-    private String modelType;
-
-    public void setModelCode(String modelCode) 
-    {
-        this.modelCode = modelCode;
-    }
-
-    public String getModelCode() 
-    {
-        return modelCode;
-    }
-    public void setModelName(String modelName) 
-    {
-        this.modelName = modelName;
-    }
-
-    public String getModelName() 
-    {
-        return modelName;
-    }
-    public void setIsShow(Integer isShow) 
-    {
-        this.isShow = isShow;
-    }
-
-    public Integer getIsShow() 
-    {
-        return isShow;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("modelCode", getModelCode())
-            .append("modelName", getModelName())
-            .append("isShow", getIsShow())
-            .toString();
-    }
-
-    public String getModelType() {
-        return modelType;
-    }
-
-    public void setModelType(String modelType) {
-        this.modelType = modelType;
-    }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/ModelNode.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/ModelNode.java
deleted file mode 100644
index 23e583c..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/ModelNode.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package com.dingzhuo.energy.data.model.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 妯″瀷鑺傜偣瀵硅薄 model_node
- *
- * @author fanxinfu
- * @date 2020-02-10
- */
-public class ModelNode extends BaseEntity {
-  private static final long serialVersionUID = 1L;
-
-  /**
-   * 涓婚敭
-   */
-  private String nodeId;
-
-  /**
-   * 缂栫爜
-   */
-  @Excel(name = "缂栫爜")
-  private String code;
-
-  /**
-   * 鍚嶇О
-   */
-  @Excel(name = "鍚嶇О")
-  private String name;
-
-  /**
-   * 鐖惰妭鐐� id
-   */
-  private String parentId;
-
-  /**
-   * 鍦板潃
-   */
-  private String address;
-
-  /**
-   * 妯″瀷 id
-   */
-  private String modelCode;
-
-  private String nodeCategory;
-
-  private int orderNum;
-
-  private List<ModelNode> children = new ArrayList<>();
-
-  public void setNodeId(String nodeId) {
-    this.nodeId = nodeId;
-  }
-
-  public String getNodeId() {
-    return nodeId;
-  }
-
-  public void setCode(String code) {
-    this.code = code;
-  }
-
-  public String getCode() {
-    return code;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public String getName() {
-    return name;
-  }
-
-  public void setParentId(String parentId) {
-    this.parentId = parentId;
-  }
-
-  public String getParentId() {
-    return parentId;
-  }
-
-  public void setAddress(String address) {
-    this.address = address;
-  }
-
-  public String getAddress() {
-    return address;
-  }
-
-  @Override
-  public String toString() {
-    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
-        .append("nodeId", getNodeId())
-        .append("code", getCode())
-        .append("name", getName())
-        .append("parentId", getParentId())
-        .append("address", getAddress())
-        .append("modelCode", getModelCode())
-        .append("orderNum", getOrderNum())
-        .toString();
-  }
-
-  public List<ModelNode> getChildren() {
-    return children;
-  }
-
-  public void setChildren(List<ModelNode> children) {
-    this.children = children;
-  }
-
-  public String getModelCode() {
-    return modelCode;
-  }
-
-  public void setModelCode(String modelCode) {
-    this.modelCode = modelCode;
-  }
-
-  public int getOrderNum() {
-    return orderNum;
-  }
-
-  public void setOrderNum(int orderNum) {
-    this.orderNum = orderNum;
-  }
-
-  public String getNodeCategory() {
-    return nodeCategory;
-  }
-
-  public void setNodeCategory(String nodeCategory) {
-    this.nodeCategory = nodeCategory;
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/StateType.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/StateType.java
deleted file mode 100644
index 2bc679c..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/StateType.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.dingzhuo.energy.data.model.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 绯荤粺鐘舵�佺淮鎶ゅ璞� state_type
- * 
- * @author sys
- * @date 2020-03-18
- */
-public class StateType extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 鐘舵�佷富閿甶d */
-    @Excel(name = "鐘舵�佷富閿甶d")
-    private String stateId;
-
-    /** 鐘舵�佸悕绉� */
-    @Excel(name = "鐘舵�佸悕绉�")
-    private String stateName;
-
-    /** 鐘舵�佺紪鐮� */
-    @Excel(name = "鐘舵�佺紪鐮�")
-    private String stateCode;
-
-    /** 鑹插彿 */
-    @Excel(name = "鑹插彿")
-    private String colorNumber;
-
-    public void setStateId(String stateId) 
-    {
-        this.stateId = stateId;
-    }
-
-    public String getStateId() 
-    {
-        return stateId;
-    }
-    public void setStateName(String stateName) 
-    {
-        this.stateName = stateName;
-    }
-
-    public String getStateName() 
-    {
-        return stateName;
-    }
-    public void setStateCode(String stateCode) 
-    {
-        this.stateCode = stateCode;
-    }
-
-    public String getStateCode() 
-    {
-        return stateCode;
-    }
-    public void setColorNumber(String colorNumber) 
-    {
-        this.colorNumber = colorNumber;
-    }
-
-    public String getColorNumber() 
-    {
-        return colorNumber;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("stateId", getStateId())
-            .append("stateName", getStateName())
-            .append("stateCode", getStateCode())
-            .append("colorNumber", getColorNumber())
-            .append("createTime", getCreateTime())
-            .append("createBy", getCreateBy())
-            .append("updateTime", getUpdateTime())
-            .append("updateBy", getUpdateBy())
-            .toString();
-    }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/TreeObject.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/TreeObject.java
deleted file mode 100644
index 93b78e3..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/TreeObject.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.dingzhuo.energy.data.model.domain;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-
-import java.io.Serializable;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * Treeselect鏍戠粨鏋勫疄浣撶被
- *
- * @author ruoyi
- */
-public class TreeObject implements Serializable {
-  private static final long serialVersionUID = 1L;
-
-  /**
-   * 鑺傜偣ID
-   */
-  private String id;
-
-  /**
-   * 鑺傜偣鍚嶇О
-   */
-  private String label;
-
-  /**
-   * 瀛愯妭鐐�
-   */
-  @JsonInclude(JsonInclude.Include.NON_EMPTY)
-  private List<TreeObject> children;
-
-  public TreeObject() {
-
-  }
-
-  public TreeObject(ModelNode modelNode) {
-    this.id = modelNode.getNodeId();
-    this.label = modelNode.getName();
-    this.children = modelNode.getChildren().stream().map(TreeObject::new).collect(Collectors.toList());
-  }
-
-  public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public String getLabel() {
-    return label;
-  }
-
-  public void setLabel(String label) {
-    this.label = label;
-  }
-
-  public List<TreeObject> getChildren() {
-    return children;
-  }
-
-  public void setChildren(List<TreeObject> children) {
-    this.children = children;
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/dto/EnergyIndexMonitorDTO.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/dto/EnergyIndexMonitorDTO.java
deleted file mode 100644
index dc425c9..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/dto/EnergyIndexMonitorDTO.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.dingzhuo.energy.data.model.domain.dto;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-import javax.validation.constraints.NotBlank;
-
-
-/**
- * 鑳芥簮鐐逛綅鐩戞祴璇锋眰 DTO
- *
- * @Author: Zhujw
- * @Date: 2023/3/6
- */
-@ApiModel(value = "鎸囨爣淇℃伅")
-public class EnergyIndexMonitorDTO {
-
-  /**
-   * 鐐逛綅绫诲瀷
-   */
-  @ApiModelProperty(value = "鐐逛綅绫诲瀷")
-  private String indexType;
-
-  /**
-   * 妯″瀷id
-   */
-  @NotBlank(message = "鏈壘鍒版ā鍨嬩俊鎭�")
-  @ApiModelProperty(value = "妯″瀷id")
-  private String nodeId;
-
-
-  public String getIndexType() {
-    return indexType;
-  }
-
-  public void setIndexType(String indexType) {
-    this.indexType = indexType;
-  }
-
-  public String getNodeId() {
-    return nodeId;
-  }
-
-  public void setNodeId(String nodeId) {
-    this.nodeId = nodeId;
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/vo/ModelNodeIndexInfor.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/vo/ModelNodeIndexInfor.java
deleted file mode 100644
index 18e8edc..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/vo/ModelNodeIndexInfor.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.dingzhuo.energy.data.model.domain.vo;
-
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-
-/**
- * 妯″瀷鑺傜偣涓庣偣浣嶅叧绯诲璞�
- *
- * @Author: Zhujw
- * @Date: 2023/3/2
- */
-public class ModelNodeIndexInfor extends BaseEntity {
-  private static final long serialVersionUID = 1L;
-
-  /**
-   * 涓婚敭
-   */
-  private String nodeId;
-
-  /**
-   * 鍚嶇О
-   */
-  private String name;
-
-  /**
-   * 鐐逛綅id
-   */
-  private String indexId;
-
-  public String getNodeId() {
-    return nodeId;
-  }
-
-  public void setNodeId(String nodeId) {
-    this.nodeId = nodeId;
-  }
-
-  public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public String getIndexId() {
-    return indexId;
-  }
-
-  public void setIndexId(String indexId) {
-    this.indexId = indexId;
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/vo/PointDataVO.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/vo/PointDataVO.java
deleted file mode 100644
index cea0c1b..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/domain/vo/PointDataVO.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.dingzhuo.energy.data.model.domain.vo;
-
-/**
- * 妯″瀷鐐逛綅id涓庡悕绉�
- *
- * @Author: Zhujw
- * @Date: 2023/3/6
- */
-public class PointDataVO {
-
-  /**
-   * 鐐逛綅id
-   */
-  private String indexId;
-
-  /**
-   * 鐐逛綅鍚嶇О
-   */
-  private String indexName;
-
-  public String getIndexId() {
-    return indexId;
-  }
-
-  public void setIndexId(String indexId) {
-    this.indexId = indexId;
-  }
-
-  public String getIndexName() {
-    return indexName;
-  }
-
-  public void setIndexName(String indexName) {
-    this.indexName = indexName;
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/CalcFunctionMapper.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/CalcFunctionMapper.java
deleted file mode 100644
index c96566e..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/CalcFunctionMapper.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.dingzhuo.energy.data.model.mapper;
-
-import com.dingzhuo.energy.data.model.domain.CalcFunction;
-
-import java.util.List;
-
-/**
- * 璁$畻鍑芥暟Mapper鎺ュ彛
- * 
- * @author fanxinfu
- * @date 2020-03-10
- */
-public interface CalcFunctionMapper 
-{
-    /**
-     * 鏌ヨ璁$畻鍑芥暟
-     * 
-     * @param id 璁$畻鍑芥暟ID
-     * @return 璁$畻鍑芥暟
-     */
-    public CalcFunction selectCalcFunctionById(String id);
-
-    /**
-     * 鏌ヨ璁$畻鍑芥暟鍒楄〃
-     * 
-     * @param calcFunction 璁$畻鍑芥暟
-     * @return 璁$畻鍑芥暟闆嗗悎
-     */
-    public List<CalcFunction> selectCalcFunctionList(CalcFunction calcFunction);
-
-    /**
-     * 鏂板璁$畻鍑芥暟
-     * 
-     * @param calcFunction 璁$畻鍑芥暟
-     * @return 缁撴灉
-     */
-    public int insertCalcFunction(CalcFunction calcFunction);
-
-    /**
-     * 淇敼璁$畻鍑芥暟
-     * 
-     * @param calcFunction 璁$畻鍑芥暟
-     * @return 缁撴灉
-     */
-    public int updateCalcFunction(CalcFunction calcFunction);
-
-    /**
-     * 鍒犻櫎璁$畻鍑芥暟
-     * 
-     * @param id 璁$畻鍑芥暟ID
-     * @return 缁撴灉
-     */
-    public int deleteCalcFunctionById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎璁$畻鍑芥暟
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteCalcFunctionByIds(String[] ids);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/DaqTemplateMapper.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/DaqTemplateMapper.java
deleted file mode 100644
index c9a1dfc..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/DaqTemplateMapper.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.dingzhuo.energy.data.model.mapper;
-
-import com.dingzhuo.energy.data.model.domain.DaqTemplate;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * 閲囬泦鍙傛暟妯℃澘Mapper鎺ュ彛
- *
- * @author ruoyi
- * @date 2020-02-08
- */
-public interface DaqTemplateMapper {
-  /**
-   * 鏌ヨ閲囬泦鍙傛暟妯℃澘
-   *
-   * @param id 閲囬泦鍙傛暟妯℃澘ID
-   * @return 閲囬泦鍙傛暟妯℃澘
-   */
-  DaqTemplate selectDaqTemplateById(String id);
-
-  /**
-   * 鏌ヨ閲囬泦鍙傛暟妯℃澘鍒楄〃
-   *
-   * @param daqTemplate 閲囬泦鍙傛暟妯℃澘
-   * @return 閲囬泦鍙傛暟妯℃澘闆嗗悎
-   */
-  List<DaqTemplate> selectDaqTemplateList(DaqTemplate daqTemplate);
-
-  /**
-   * 鏂板閲囬泦鍙傛暟妯℃澘
-   *
-   * @param daqTemplate 閲囬泦鍙傛暟妯℃澘
-   * @return 缁撴灉
-   */
-  int insertDaqTemplate(DaqTemplate daqTemplate);
-
-  /**
-   * 淇敼閲囬泦鍙傛暟妯℃澘
-   *
-   * @param daqTemplate 閲囬泦鍙傛暟妯℃澘
-   * @return 缁撴灉
-   */
-  int updateDaqTemplate(DaqTemplate daqTemplate);
-
-  /**
-   * 鍒犻櫎閲囬泦鍙傛暟妯℃澘
-   *
-   * @param id 閲囬泦鍙傛暟妯℃澘ID
-   * @return 缁撴灉
-   */
-  int deleteDaqTemplateById(String id);
-
-  /**
-   * 鎵归噺鍒犻櫎閲囬泦鍙傛暟妯℃澘
-   *
-   * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-   * @return 缁撴灉
-   */
-  int deleteDaqTemplateByIds(String[] ids);
-
-  int dapHasExist(@Param("code") String code, @Param("deviceType") String deviceType);
-
-  int dapHasExistWhenUpdate(@Param("id") String id, @Param("code") String code, @Param("deviceType") String deviceType);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/DataAuthMapper.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/DataAuthMapper.java
deleted file mode 100644
index 8ed050f..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/DataAuthMapper.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.dingzhuo.energy.data.model.mapper;
-
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
-
-public interface DataAuthMapper {
-
-  List<String> getUserDataAuth(@Param("modelCode") String modelCode, @Param("id") String id);
-
-  List<String> getRoleDataAuth(@Param("modelCode") String modelCode, @Param("id") String id);
-
-  void setUserDataAuth(@Param("id") String id, @Param("modelCode") String modelCode,
-      @Param("ids") List<String> ids);
-
-  void setRoleDataAuth(@Param("id") String id, @Param("modelCode") String modelCode,
-      @Param("ids") List<String> ids);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/EnergyIndexMapper.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/EnergyIndexMapper.java
deleted file mode 100644
index 5b9f384..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/EnergyIndexMapper.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package com.dingzhuo.energy.data.model.mapper;
-
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.EnergyIndexQuery;
-import io.lettuce.core.dynamic.annotation.Param;
-
-import java.util.List;
-
-/**
- * 鎸囨爣淇℃伅Mapper鎺ュ彛
- *
- * @author fanxinfu
- * @date 2020-02-14
- */
-public interface EnergyIndexMapper {
-  /**
-   * 鏌ヨ鎸囨爣淇℃伅
-   *
-   * @param indexId 鎸囨爣淇℃伅ID
-   * @return 鎸囨爣淇℃伅
-   */
-  EnergyIndex selectEnergyIndexById(String indexId);
-
-  List<EnergyIndex> selectEnergyIndexByIds(@Param("indexIds") List<String> indexIds);
-
-  /**
-   * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
-   *
-   * @param energyIndex 鎸囨爣淇℃伅
-   * @return 鎸囨爣淇℃伅闆嗗悎
-   */
-  List<EnergyIndex> selectEnergyIndexList(EnergyIndex energyIndex);
-
-  /**
-   * 鏂板鎸囨爣淇℃伅
-   *
-   * @param nodeId
-   * @param energyIndex 鎸囨爣淇℃伅
-   * @return 缁撴灉
-   */
-  int insertEnergyIndex(@Param("nodeId") String nodeId, @Param("energyIndex") EnergyIndex energyIndex);
-
-  /**
-   * 淇敼鎸囨爣淇℃伅
-   *
-   * @param energyIndex 鎸囨爣淇℃伅
-   * @return 缁撴灉
-   */
-  int updateEnergyIndex(EnergyIndex energyIndex);
-
-  /**
-   * 鎵归噺鍒犻櫎鎸囨爣淇℃伅
-   *
-   *
-   * @param nodeId
-   * @param indexIds 闇�瑕佸垹闄ょ殑鏁版嵁ID
-   * @return 缁撴灉
-   */
-  int deleteEnergyIndexByIds(String nodeId, String[] indexIds);
-
-  int energyIndexHasExist(String code);
-
-  int energyIndexHasExistWhenUpdate(@Param("indexId") String indexId, @Param("code") String code);
-
-  void insertEnergyIndices(@Param("energyIndices") List<EnergyIndex> energyIndices);
-
-  List<EnergyIndex> getMeterIndex(String meterId);
-
-  void deleteIndexByMeterId(String meterId);
-
-  int modelHasConfig(String modelCode);
-
-  List<EnergyIndex> selectCollectIndex(String deviceId);
-
-  List<EnergyIndex> getEnergyIndexByIds(List<String> indexIds);
-
-  List<EnergyIndex> getEnergyIndexByCodes(List<String> indexCodes);
-
-  List<EnergyIndex> getIndexByNodeAndChildrenNode(String nodeId);
-
-  List<EnergyIndex> searchIndexByNodeAndChildrenNode(String nodeId, String filter);
-
-  List<EnergyIndex> selectEnergyIndex(EnergyIndexQuery query);
-
-  void removeNodeIndex(String nodeId, List<String> indexIds);
-
-  void saveEnergyIndex(List<EnergyIndex> insertData);
-
-  List<EnergyIndex> getEnergyIndexMeterByCodes(List<String> indexCodes);
-
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/IndexFormulaMapper.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/IndexFormulaMapper.java
deleted file mode 100644
index 10790f5..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/IndexFormulaMapper.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.dingzhuo.energy.data.model.mapper;
-
-import com.dingzhuo.energy.data.model.domain.IndexFormula;
-import com.dingzhuo.energy.data.model.domain.IndexFormulaParam;
-import java.util.List;
-
-public interface IndexFormulaMapper {
-
-  void insertIndexFormula(IndexFormula indexFormula);
-
-  void updateIndexFormula(IndexFormula indexFormula);
-
-  void saveIndexFormulaParam(String indexId, List<IndexFormulaParam> indexFormulaParams);
-
-  IndexFormula getFormula(String indexId);
-
-  List<IndexFormulaParam> getFormulaParam(String indexId);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/IndexStorageMapper.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/IndexStorageMapper.java
deleted file mode 100644
index 823b03b..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/IndexStorageMapper.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.dingzhuo.energy.data.model.mapper;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.model.domain.CalcType;
-import com.dingzhuo.energy.data.model.domain.IndexStorage;
-import com.dingzhuo.energy.data.model.domain.IndexStorageParam;
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
-
-public interface IndexStorageMapper {
-
-  void insertIndexStorage(IndexStorage storage);
-
-  void updateIndexStorage(IndexStorage storage);
-
-  List<IndexStorage> getIndexStorage(String indexId);
-
-  void saveParams(String storageId, List<String> parameterIds);
-
-  List<IndexStorageParam> getAllParameter();
-
-  List<IndexStorage> getAllCalcIndexStorage(CalcType calc);
-
-  IndexStorage getWithTimetype(@Param("indexId") String indexId, @Param("timeType") TimeType timeType);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/LimitTypeMapper.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/LimitTypeMapper.java
deleted file mode 100644
index eaa3e05..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/LimitTypeMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.data.model.mapper;
-
-import com.dingzhuo.energy.data.model.domain.LimitType;
-import java.util.List;
-
-/**
- * 鎶ヨ闄愬�肩被鍨嬬淮鎶apper鎺ュ彛
- * 
- * @author zw
- * @date 2020-03-07
- */
-public interface LimitTypeMapper 
-{
-    /**
-     * 鏌ヨ鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * 
-     * @param id 鎶ヨ闄愬�肩被鍨嬬淮鎶D
-     * @return 鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     */
-    public LimitType selectLimitTypeById(String id);
-
-    /**
-     * 鏌ヨ鎶ヨ闄愬�肩被鍨嬬淮鎶ゅ垪琛�
-     * 
-     * @param limitType 鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * @return 鎶ヨ闄愬�肩被鍨嬬淮鎶ら泦鍚�
-     */
-    public List<LimitType> selectLimitTypeList(LimitType limitType);
-
-    /**
-     * 鏂板鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * 
-     * @param limitType 鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * @return 缁撴灉
-     */
-    public int insertLimitType(LimitType limitType);
-
-    /**
-     * 淇敼鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * 
-     * @param limitType 鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * @return 缁撴灉
-     */
-    public int updateLimitType(LimitType limitType);
-
-    /**
-     * 鍒犻櫎鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * 
-     * @param id 鎶ヨ闄愬�肩被鍨嬬淮鎶D
-     * @return 缁撴灉
-     */
-    public int deleteLimitTypeById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteLimitTypeByIds(String[] ids);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/ModelInfoMapper.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/ModelInfoMapper.java
deleted file mode 100644
index dce0ab5..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/ModelInfoMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.data.model.mapper;
-
-import com.dingzhuo.energy.data.model.domain.ModelInfo;
-import java.util.List;
-
-/**
- * 妯″瀷Mapper鎺ュ彛
- * 
- * @author fanxinfu
- * @date 2020-02-17
- */
-public interface ModelInfoMapper 
-{
-    /**
-     * 鏌ヨ妯″瀷
-     * 
-     * @param modelCode 妯″瀷ID
-     * @return 妯″瀷
-     */
-    ModelInfo selectModelInfoById(String modelCode);
-
-    /**
-     * 鏌ヨ妯″瀷鍒楄〃
-     * 
-     * @param modelInfo 妯″瀷
-     * @return 妯″瀷闆嗗悎
-     */
-    List<ModelInfo> selectModelInfoList(ModelInfo modelInfo);
-
-    /**
-     * 鏂板妯″瀷
-     * 
-     * @param modelInfo 妯″瀷
-     * @return 缁撴灉
-     */
-    int insertModelInfo(ModelInfo modelInfo);
-
-    /**
-     * 淇敼妯″瀷
-     * 
-     * @param modelInfo 妯″瀷
-     * @return 缁撴灉
-     */
-    int updateModelInfo(ModelInfo modelInfo);
-
-    /**
-     * 鍒犻櫎妯″瀷
-     * 
-     * @param modelCode 妯″瀷ID
-     * @return 缁撴灉
-     */
-    int deleteModelInfoById(String modelCode);
-
-    /**
-     * 鎵归噺鍒犻櫎妯″瀷
-     * 
-     * @param modelCodes 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    int deleteModelInfoByCode(String modelCodes);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/ModelNodeMapper.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/ModelNodeMapper.java
deleted file mode 100644
index 0b82cab..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/ModelNodeMapper.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package com.dingzhuo.energy.data.model.mapper;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysEnergy;
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysProduct;
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplement;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.domain.vo.ModelNodeIndexInfor;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 妯″瀷鑺傜偣Mapper鎺ュ彛
- *
- * @author fanxinfu
- * @date 2020-02-10
- */
-public interface ModelNodeMapper {
-
-  /**
-   * 鏌ヨ妯″瀷鑺傜偣
-   *
-   * @param nodeId 妯″瀷鑺傜偣ID
-   * @return 妯″瀷鑺傜偣
-   */
-  ModelNode selectModelNodeById(String nodeId);
-
-  /**
-   * 鏌ヨ妯″瀷鑺傜偣鍒楄〃
-   *
-   * @param modelNode 妯″瀷鑺傜偣
-   * @return 妯″瀷鑺傜偣闆嗗悎
-   */
-  List<ModelNode> selectModelNodeList(ModelNode modelNode);
-
-  /**
-   * 鏂板妯″瀷鑺傜偣
-   *
-   * @param modelNode 妯″瀷鑺傜偣
-   * @return 缁撴灉
-   */
-  int insertModelNode(ModelNode modelNode);
-
-  /**
-   * 淇敼妯″瀷鑺傜偣
-   *
-   * @param modelNode 妯″瀷鑺傜偣
-   * @return 缁撴灉
-   */
-  int updateModelNode(ModelNode modelNode);
-
-  /**
-   * 鍒犻櫎妯″瀷鑺傜偣
-   *
-   * @param nodeId 妯″瀷鑺傜偣ID
-   * @return 缁撴灉
-   */
-  int deleteModelNodeById(String nodeId);
-
-  /**
-   * 鎵归噺鍒犻櫎妯″瀷鑺傜偣
-   *
-   * @param nodeIds 闇�瑕佸垹闄ょ殑鏁版嵁ID
-   * @return 缁撴灉
-   */
-  int deleteModelNodeByIds(String[] nodeIds);
-
-  List<ModelNode> getModelNodeByModelCode(String modelCode);
-
-  int getMaxOrder(String parentId);
-
-  void updateModelNodeParent(@Param("nodeId") String nodeId, @Param("parentId") String parentId);
-
-  void updateModelNodeOrder(@Param("orders") Map<String, Integer> orders);
-
-  int modelNodeHasExist(@Param("code") String code, @Param("modelCode") String modelCode);
-
-  int modelNodeHasExistWhenUpdate(@Param("nodeId") String nodeId, @Param("code") String code,
-      @Param("modelCode") String modelCode);
-
-  void setDevice(@Param("nodeId") String nodeId, @Param("deviceIds") String[] deviceIds);
-
-  List<MeterImplement> getSettingDevice(String nodeId);
-
-  List<EnergyIndex> getSettingIndex(String nodeId);
-
-
-  void delDevice(@Param("nodeId") String nodeId, @Param("deviceIds") String[] deviceIds);
-
-  List<SysEnergy> getSettingEnergy(String nodeId);
-
-  void setEnergy(@Param("nodeId") String nodeId, @Param("energyIds") Integer[] energyIds);
-
-  void delEnergy(@Param("nodeId") String nodeId, @Param("energyIds") Integer[] energyIds);
-
-  List<SysProduct> getSettingProduct(String nodeId);
-
-  void setProduct(@Param("nodeId") String nodeId, @Param("productIds") Integer[] productIds);
-
-  void delProduct(@Param("nodeId") String nodeId, @Param("productIds") Integer[] productIds);
-
-  void setIndex(@Param("nodeId") String nodeId, @Param("indexType") String indexType,
-      @Param("indexIds") String[] indexIds);
-
-  void delIndex(@Param("nodeId") String nodeId, @Param("indexIds") String[] indexIds);
-
-  List<EnergyIndex> getSettingIndexByType(@Param("indexType") String indexType,
-                                          @Param("nodeId") String nodeId);
-
-  List<ModelNode> getModelNodeByNodeCodes(List<String> nodeCodes);
-
-  List<ModelNode> getModelNodeByModelCodeWithAuth(@Param("modelCode") String modelCode,
-                                                  @Param("userId") String userId);
-
-  List<EnergyIndex> getSettingIndexByWhere(@Param("nodeId") String nodeId, @Param("indexName") String indexName);
-
-  /**
-   * 鏍规嵁nodeIds鑾峰彇idexId淇℃伅
-   *
-   * @param nodeIds
-   * @return
-   */
-  List<String> listIndesxByCodeList(@Param("nodeIds") List<String> nodeIds);
-
-  /**
-   * 鏍规嵁nodeCode鏌ヨ妯″瀷鑺傜偣涓庣偣浣峣d涔嬮棿鐨勫叧绯讳俊鎭�
-   *
-   * @param code
-   * @return
-   */
-  List<ModelNodeIndexInfor> getModelNodeIndexIdRelationInforByCode(@Param("code") String code);
-
-  /**
-   * 鏍规嵁nodeId鏌ヨ瀵瑰簲璇︾粏淇℃伅
-   *
-   * @param nodeId
-   * @return
-   */
-  List<ModelNodeIndexInfor> getModelNodeIndexIdRelationInforByNodeId(@Param("nodeId") String nodeId);
-
-  /**
-   * 鏍规嵁鐖秈d鏌ヨ璇︾粏淇℃伅
-   *
-   * @param parentId
-   * @return
-   */
-  List<ModelNodeIndexInfor> listModelNodeIndexIdRelationInforByParentId(@Param("parentId") String parentId);
-
-  /**
-   * 鏍规嵁code鏌ヨ鐖剁骇淇℃伅
-   *
-   * @param indexCode
-   * @return
-   */
-  ModelNode getModelNodeByModelCodeByIndexCode(@Param("indexCode") String indexCode);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/StateTypeMapper.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/StateTypeMapper.java
deleted file mode 100644
index 44fdc7c..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/mapper/StateTypeMapper.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.dingzhuo.energy.data.model.mapper;
-
-import com.dingzhuo.energy.data.model.domain.StateType;
-
-import java.util.List;
-
-/**
- * 绯荤粺鐘舵�佺淮鎶apper鎺ュ彛
- * 
- * @author sys
- * @date 2020-03-18
- */
-public interface StateTypeMapper 
-{
-    /**
-     * 鏌ヨ绯荤粺鐘舵�佺淮鎶�
-     * 
-     * @param stateId 绯荤粺鐘舵�佺淮鎶D
-     * @return 绯荤粺鐘舵�佺淮鎶�
-     */
-    public StateType selectStateTypeById(String stateId);
-
-    /**
-     * 鏌ヨ绯荤粺鐘舵�佺淮鎶ゅ垪琛�
-     * 
-     * @param stateType 绯荤粺鐘舵�佺淮鎶�
-     * @return 绯荤粺鐘舵�佺淮鎶ら泦鍚�
-     */
-    public List<StateType> selectStateTypeList(StateType stateType);
-
-    /**
-     * 鏂板绯荤粺鐘舵�佺淮鎶�
-     * 
-     * @param stateType 绯荤粺鐘舵�佺淮鎶�
-     * @return 缁撴灉
-     */
-    public int insertStateType(StateType stateType);
-
-    /**
-     * 淇敼绯荤粺鐘舵�佺淮鎶�
-     * 
-     * @param stateType 绯荤粺鐘舵�佺淮鎶�
-     * @return 缁撴灉
-     */
-    public int updateStateType(StateType stateType);
-
-    /**
-     * 鍒犻櫎绯荤粺鐘舵�佺淮鎶�
-     * 
-     * @param stateId 绯荤粺鐘舵�佺淮鎶D
-     * @return 缁撴灉
-     */
-    public int deleteStateTypeById(String stateId);
-
-    /**
-     * 鎵归噺鍒犻櫎绯荤粺鐘舵�佺淮鎶�
-     * 
-     * @param stateIds 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteStateTypeByIds(String[] stateIds);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/DataAuthService.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/DataAuthService.java
deleted file mode 100644
index e615a40..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/DataAuthService.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.dingzhuo.energy.data.model.service;
-
-import java.util.List;
-
-public interface DataAuthService {
-
-  List<String> getUserDataAuth(String modelCode, String id);
-
-  List<String> getRoleDataAuth(String modelCode, String id);
-
-  void setUserDataAuth(String userOrRoleId, String modelCode, List<String> ids);
-
-  void setRoleDataAuth(String userOrRoleId, String modelCode, List<String> ids);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/ICalcFunctionService.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/ICalcFunctionService.java
deleted file mode 100644
index 8baca28..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/ICalcFunctionService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.data.model.service;
-
-import com.dingzhuo.energy.data.model.domain.CalcFunction;
-import java.util.List;
-
-/**
- * 璁$畻鍑芥暟Service鎺ュ彛
- * 
- * @author fanxinfu
- * @date 2020-03-10
- */
-public interface ICalcFunctionService 
-{
-    /**
-     * 鏌ヨ璁$畻鍑芥暟
-     * 
-     * @param id 璁$畻鍑芥暟ID
-     * @return 璁$畻鍑芥暟
-     */
-    public CalcFunction selectCalcFunctionById(String id);
-
-    /**
-     * 鏌ヨ璁$畻鍑芥暟鍒楄〃
-     * 
-     * @param calcFunction 璁$畻鍑芥暟
-     * @return 璁$畻鍑芥暟闆嗗悎
-     */
-    public List<CalcFunction> selectCalcFunctionList(CalcFunction calcFunction);
-
-    /**
-     * 鏂板璁$畻鍑芥暟
-     * 
-     * @param calcFunction 璁$畻鍑芥暟
-     * @return 缁撴灉
-     */
-    public int insertCalcFunction(CalcFunction calcFunction);
-
-    /**
-     * 淇敼璁$畻鍑芥暟
-     * 
-     * @param calcFunction 璁$畻鍑芥暟
-     * @return 缁撴灉
-     */
-    public int updateCalcFunction(CalcFunction calcFunction);
-
-    /**
-     * 鎵归噺鍒犻櫎璁$畻鍑芥暟
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑璁$畻鍑芥暟ID
-     * @return 缁撴灉
-     */
-    public int deleteCalcFunctionByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎璁$畻鍑芥暟淇℃伅
-     * 
-     * @param id 璁$畻鍑芥暟ID
-     * @return 缁撴灉
-     */
-    public int deleteCalcFunctionById(String id);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IDaqTemplateService.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IDaqTemplateService.java
deleted file mode 100644
index 4b6cde1..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IDaqTemplateService.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.dingzhuo.energy.data.model.service;
-
-import com.dingzhuo.energy.data.model.domain.DaqTemplate;
-
-import java.util.List;
-
-/**
- * 閲囬泦鍙傛暟妯℃澘Service鎺ュ彛
- *
- * @author ruoyi
- * @date 2020-02-08
- */
-public interface IDaqTemplateService {
-  /**
-   * 鏌ヨ閲囬泦鍙傛暟妯℃澘
-   *
-   * @param id 閲囬泦鍙傛暟妯℃澘ID
-   * @return 閲囬泦鍙傛暟妯℃澘
-   */
-  DaqTemplate selectDaqTemplateById(String id);
-
-  /**
-   * 鏌ヨ閲囬泦鍙傛暟妯℃澘鍒楄〃
-   *
-   * @param daqTemplate 閲囬泦鍙傛暟妯℃澘
-   * @return 閲囬泦鍙傛暟妯℃澘闆嗗悎
-   */
-  List<DaqTemplate> selectDaqTemplateList(DaqTemplate daqTemplate);
-
-  /**
-   * 鏂板閲囬泦鍙傛暟妯℃澘
-   *
-   * @param daqTemplate 閲囬泦鍙傛暟妯℃澘
-   * @return 缁撴灉
-   */
-  int insertDaqTemplate(DaqTemplate daqTemplate);
-
-  /**
-   * 淇敼閲囬泦鍙傛暟妯℃澘
-   *
-   * @param daqTemplate 閲囬泦鍙傛暟妯℃澘
-   * @return 缁撴灉
-   */
-  int updateDaqTemplate(DaqTemplate daqTemplate);
-
-  /**
-   * 鎵归噺鍒犻櫎閲囬泦鍙傛暟妯℃澘
-   *
-   * @param ids 闇�瑕佸垹闄ょ殑閲囬泦鍙傛暟妯℃澘ID
-   * @return 缁撴灉
-   */
-  int deleteDaqTemplateByIds(String[] ids);
-
-  /**
-   * 鍒犻櫎閲囬泦鍙傛暟妯℃澘淇℃伅
-   *
-   * @param id 閲囬泦鍙傛暟妯℃澘ID
-   * @return 缁撴灉
-   */
-  int deleteDaqTemplateById(String id);
-
-  /**
-   * 鏌ヨ鐩稿悓璁惧绫诲瀷涓嬫槸鍚︽湁閲嶅鐨勭紪鐮�
-   *
-   * @param code       鍙傛暟缂栫爜
-   * @param deviceType 璁惧绫诲瀷
-   * @return 鏄惁瀛樺湪
-   */
-  boolean dapHasExist(String code, String deviceType);
-
-  boolean dapHasExist(DaqTemplate daqTemplate);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IEnergyIndexService.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IEnergyIndexService.java
deleted file mode 100644
index ad8eaef..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IEnergyIndexService.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package com.dingzhuo.energy.data.model.service;
-
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-
-import com.dingzhuo.energy.data.model.domain.EnergyIndexQuery;
-import java.util.List;
-
-/**
- * 鎸囨爣淇℃伅Service鎺ュ彛
- *
- * @author fanxinfu
- * @date 2020-02-14
- */
-public interface IEnergyIndexService {
-
-  /**
-   * 鏌ヨ鎸囨爣淇℃伅
-   *
-   * @param indexId 鎸囨爣淇℃伅ID
-   * @return 鎸囨爣淇℃伅
-   */
-  EnergyIndex selectEnergyIndexById(String indexId);
-
-  /**
-   * 鏌ヨ鎸囨爣淇℃伅
-   *
-   * @param indexId 鎸囨爣淇℃伅ID
-   * @return 鎸囨爣淇℃伅
-   */
-  List<EnergyIndex> selectEnergyIndexByIds(List<String> indexId);
-
-  /**
-   * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
-   *
-   * @param energyIndex 鎸囨爣淇℃伅
-   * @return 鎸囨爣淇℃伅闆嗗悎
-   */
-  List<EnergyIndex> selectEnergyIndexList(EnergyIndex energyIndex);
-
-  /**
-   * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
-   *
-   * @param query 鎸囨爣淇℃伅
-   * @return 鎸囨爣淇℃伅闆嗗悎
-   */
-  List<EnergyIndex> selectEnergyIndexList(EnergyIndexQuery query);
-
-  /**
-   * 鏂板鎸囨爣淇℃伅
-   *
-   * @param nodeId
-   * @param energyIndex 鎸囨爣淇℃伅
-   * @return 缁撴灉
-   */
-  int insertEnergyIndex(String nodeId, EnergyIndex energyIndex);
-
-  /**
-   * 淇敼鎸囨爣淇℃伅
-   *
-   * @param energyIndex 鎸囨爣淇℃伅
-   * @return 缁撴灉
-   */
-  int updateEnergyIndex(EnergyIndex energyIndex);
-
-  /**
-   * 鎵归噺鍒犻櫎鎸囨爣淇℃伅
-   *
-   *
-   * @param nodeId
-   * @param indexIds 闇�瑕佸垹闄ょ殑鎸囨爣淇℃伅ID
-   * @return 缁撴灉
-   */
-  int deleteEnergyIndexByIds(String nodeId, String[] indexIds);
-
-  boolean energyIndexHasExist(String code);
-
-  boolean energyIndexHasExist(String indexId, String code);
-
-  AjaxResult addMeterIndex(String meterId);
-
-  List<EnergyIndex> getMeterIndex(String meterId);
-
-  boolean modelHasConfig(String modelCode);
-
-  List<EnergyIndex> selectCollectIndex(String deviceId);
-
-  List<EnergyIndex> getEnergyIndexByIds(List<String> indexIds);
-
-  List<EnergyIndex> getEnergyIndexByCodes(List<String> indexCodes);
-
-  List<EnergyIndex> getIndexByNodeAndChildrenNode(String nodeId);
-
-  List<EnergyIndex> searchIndexByNodeAndChildrenNode(String nodeId, String filter);
-
-  void removeNodeIndex(String nodeId, List<String> removeLink);
-
-  AjaxResult importEnergyIndex(List<EnergyIndex> energyIndexList, boolean updateSupport);
-
-  List<EnergyIndex> getEnergyIndexMeterByCodes(List<String> indexCodes);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IIndexStorageService.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IIndexStorageService.java
deleted file mode 100644
index b4a6e98..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IIndexStorageService.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.dingzhuo.energy.data.model.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.model.domain.IndexFormula;
-import com.dingzhuo.energy.data.model.domain.IndexStorage;
-import java.util.List;
-
-/**
- * @author fanxinfu
- */
-public interface IIndexStorageService {
-
-  void saveIndexStorage(String indexId, List<IndexStorage> indexStorage);
-
-  void saveFormulaAndStorage(IndexFormula indexFormula, List<IndexStorage> indexStorage,
-      String indexId);
-
-  List<IndexStorage> getIndexStorage(String indexId);
-
-  List<IndexStorage> getAllCalcIndexStorage();
-
-  IndexStorage getIndexStorage(String indexId, TimeType timeType);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/ILimitTypeService.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/ILimitTypeService.java
deleted file mode 100644
index 06a3ae8..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/ILimitTypeService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.data.model.service;
-
-import com.dingzhuo.energy.data.model.domain.LimitType;
-import java.util.List;
-
-/**
- * 鎶ヨ闄愬�肩被鍨嬬淮鎶ervice鎺ュ彛
- * 
- * @author zw
- * @date 2020-03-07
- */
-public interface ILimitTypeService 
-{
-    /**
-     * 鏌ヨ鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * 
-     * @param id 鎶ヨ闄愬�肩被鍨嬬淮鎶D
-     * @return 鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     */
-    public LimitType selectLimitTypeById(String id);
-
-    /**
-     * 鏌ヨ鎶ヨ闄愬�肩被鍨嬬淮鎶ゅ垪琛�
-     * 
-     * @param limitType 鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * @return 鎶ヨ闄愬�肩被鍨嬬淮鎶ら泦鍚�
-     */
-    public List<LimitType> selectLimitTypeList(LimitType limitType);
-
-    /**
-     * 鏂板鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * 
-     * @param limitType 鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * @return 缁撴灉
-     */
-    public int insertLimitType(LimitType limitType);
-
-    /**
-     * 淇敼鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * 
-     * @param limitType 鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * @return 缁撴灉
-     */
-    public int updateLimitType(LimitType limitType);
-
-    /**
-     * 鎵归噺鍒犻櫎鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鎶ヨ闄愬�肩被鍨嬬淮鎶D
-     * @return 缁撴灉
-     */
-    public int deleteLimitTypeByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎鎶ヨ闄愬�肩被鍨嬬淮鎶や俊鎭�
-     * 
-     * @param id 鎶ヨ闄愬�肩被鍨嬬淮鎶D
-     * @return 缁撴灉
-     */
-    public int deleteLimitTypeById(String id);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IModelInfoService.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IModelInfoService.java
deleted file mode 100644
index cf54399..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IModelInfoService.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.dingzhuo.energy.data.model.service;
-
-import com.dingzhuo.energy.data.model.domain.ModelInfo;
-import com.dingzhuo.energy.data.model.domain.vo.PointDataVO;
-
-import java.util.List;
-
-/**
- * 妯″瀷Service鎺ュ彛
- * 
- * @author fanxinfu
- * @date 2020-02-17
- */
-public interface IModelInfoService 
-{
-    /**
-     * 鏌ヨ妯″瀷
-     * 
-     * @param modelCode 妯″瀷ID
-     * @return 妯″瀷
-     */
-    public ModelInfo selectModelInfoById(String modelCode);
-
-    /**
-     * 鏌ヨ妯″瀷鍒楄〃
-     * 
-     * @param modelInfo 妯″瀷
-     * @return 妯″瀷闆嗗悎
-     */
-    public List<ModelInfo> selectModelInfoList(ModelInfo modelInfo);
-
-    /**
-     * 鏂板妯″瀷
-     * 
-     * @param modelInfo 妯″瀷
-     * @return 缁撴灉
-     */
-    public int insertModelInfo(ModelInfo modelInfo);
-
-    /**
-     * 淇敼妯″瀷
-     * 
-     * @param modelInfo 妯″瀷
-     * @return 缁撴灉
-     */
-    public int updateModelInfo(ModelInfo modelInfo);
-
-    /**
-     * 鎵归噺鍒犻櫎妯″瀷
-     * 
-     * @param modelCode 闇�瑕佸垹闄ょ殑妯″瀷ID
-     * @return 缁撴灉
-     */
-    public int deleteModelInfoByCode(String modelCode);
-
-    /**
-     * 鍒犻櫎妯″瀷淇℃伅
-     * 
-     * @param modelCode 妯″瀷ID
-     * @return 缁撴灉
-     */
-    public int deleteModelInfoById(String modelCode);
-
-    /**
-     * 鏍规嵁妯″瀷id鏌ヨ瀵瑰簲鐐逛綅淇℃伅
-     *
-     * @param modelId 鏌ヨ妯″瀷id
-     * @return
-     */
-    List<PointDataVO> listEnergyIndexByModelId(String modelId);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IModelNodeService.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IModelNodeService.java
deleted file mode 100644
index 18e32d7..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IModelNodeService.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package com.dingzhuo.energy.data.model.service;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysEnergy;
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysProduct;
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplement;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.domain.TreeObject;
-import com.dingzhuo.energy.data.model.domain.vo.ModelNodeIndexInfor;
-
-import java.util.List;
-
-/**
- * 妯″瀷鑺傜偣Service鎺ュ彛
- *
- * @author fanxinfu
- * @date 2020-02-10
- */
-public interface IModelNodeService {
-  /**
-   * 鏌ヨ妯″瀷鑺傜偣
-   *
-   * @param nodeId 妯″瀷鑺傜偣ID
-   * @return 妯″瀷鑺傜偣
-   */
-  ModelNode selectModelNodeById(String nodeId);
-
-  /**
-   * 鏌ヨ妯″瀷鑺傜偣鍒楄〃
-   *
-   * @param modelNode 妯″瀷鑺傜偣
-   * @return 妯″瀷鑺傜偣闆嗗悎
-   */
-  List<ModelNode> selectModelNodeList(ModelNode modelNode);
-
-  /**
-   * 鏂板妯″瀷鑺傜偣
-   *
-   * @param modelNode 妯″瀷鑺傜偣
-   * @return 缁撴灉
-   */
-  int insertModelNode(ModelNode modelNode);
-
-  /**
-   * 淇敼妯″瀷鑺傜偣
-   *
-   * @param modelNode 妯″瀷鑺傜偣
-   * @return 缁撴灉
-   */
-  int updateModelNode(ModelNode modelNode);
-
-  /**
-   * 鎵归噺鍒犻櫎妯″瀷鑺傜偣
-   *
-   * @param nodeIds 闇�瑕佸垹闄ょ殑妯″瀷鑺傜偣ID
-   * @return 缁撴灉
-   */
-  int deleteModelNodeByIds(String[] nodeIds);
-
-  /**
-   * 鍒犻櫎妯″瀷鑺傜偣淇℃伅
-   *
-   * @param nodeId 妯″瀷鑺傜偣ID
-   * @return 缁撴灉
-   */
-  int deleteModelNodeById(String nodeId);
-
-  List<ModelNode> getModelNodeByModelCode(String modelCode);
-
-  List<TreeObject> buildModelNodeTree(List<ModelNode> list);
-
-  void updateOrder(String nodeId, String parentId, String[] children);
-
-  boolean modelNodeHasExist(String code, String modelCode);
-
-  boolean modelNodeHasExist(ModelNode modelNode);
-
-  boolean hasEnergyIndex(String nodeId);
-
-  void setDevice(String nodeId, String[] deviceIds);
-
-  List<MeterImplement> getSettingDevice(String nodeId);
-
-  List<EnergyIndex> getSettingIndex(String nodeId);
-
-  List<EnergyIndex> getSettingIndexByWhere(String nodeId,String indexName);
-
-  void delDevice(String nodeId, String[] deviceIds);
-
-  List<SysEnergy> getSettingEnergy(String nodeId);
-
-  void setEnergy(String nodeId, Integer[] energyIds);
-
-  void delEnergy(String nodeId, Integer[] energyIds);
-
-  List<SysProduct> getSettingProduct(String nodeId);
-
-  void setProduct(String nodeId, Integer[] productIds);
-
-  void delProduct(String nodeId, Integer[] productIds);
-
-  void setIndex(String nodeId, String indexType, String[] indexIds);
-
-  void delIndex(String nodeId, String[] indexIds);
-
-  List<EnergyIndex> getSettingIndex(String indexType, String nodeId);
-
-  List<ModelNode> getModelNodeByNodeCodes(List<String> nodeCodes);
-
-  List<ModelNode> getModelNodeByModelCodeWithAuth(String modelCode, Long userId);
-
-  /**
-   * 鏍规嵁nodeCode鑾峰彇瀵瑰簲鐐逛綅淇℃伅
-   *
-   * @param nodeCode
-   * @return
-   */
-  List<String> listIndexIdsByModelCode(String nodeCode);
-
-  /**
-   * 鏍规嵁nodeCode鏌ヨ妯″瀷鑺傜偣涓庡瓙鐐逛綅id涔嬮棿鐨勫叧绯讳俊鎭�
-   *
-   * @param code
-   * @return
-   */
-  List<ModelNodeIndexInfor> getModelNodeIndexIdRelationInforByCode(String code);
-
-  /**
-   * 鏍规嵁nodeId鏌ヨ瀵瑰簲璇︾粏淇℃伅
-   *
-   * @param nodeId
-   * @return
-   */
-  List<ModelNodeIndexInfor> getModelNodeIndexIdRelationInforByNodeId(String nodeId);
-
-  /**
-   * 鏍规嵁鐖秈d鏌ヨ璇︾粏淇℃伅
-   *
-   * @param parentId
-   * @return
-   */
-  List<ModelNodeIndexInfor> listModelNodeIndexIdRelationInforByParentId(String parentId);
-
-  /**
-   * 鏍规嵁code鏌ヨ鐖剁骇淇℃伅
-   *
-   * @param indexCode
-   * @return
-   */
-  ModelNode getModelNodeByModelCodeByIndexCode(String indexCode);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IStateTypeService.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IStateTypeService.java
deleted file mode 100644
index e353703..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IStateTypeService.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.dingzhuo.energy.data.model.service;
-
-import com.dingzhuo.energy.data.model.domain.StateType;
-
-import java.util.List;
-
-/**
- * 绯荤粺鐘舵�佺淮鎶ervice鎺ュ彛
- * 
- * @author sys
- * @date 2020-03-18
- */
-public interface IStateTypeService 
-{
-    /**
-     * 鏌ヨ绯荤粺鐘舵�佺淮鎶�
-     * 
-     * @param stateId 绯荤粺鐘舵�佺淮鎶D
-     * @return 绯荤粺鐘舵�佺淮鎶�
-     */
-    public StateType selectStateTypeById(String stateId);
-
-    /**
-     * 鏌ヨ绯荤粺鐘舵�佺淮鎶ゅ垪琛�
-     * 
-     * @param stateType 绯荤粺鐘舵�佺淮鎶�
-     * @return 绯荤粺鐘舵�佺淮鎶ら泦鍚�
-     */
-    public List<StateType> selectStateTypeList(StateType stateType);
-
-    /**
-     * 鏂板绯荤粺鐘舵�佺淮鎶�
-     * 
-     * @param stateType 绯荤粺鐘舵�佺淮鎶�
-     * @return 缁撴灉
-     */
-    public int insertStateType(StateType stateType);
-
-    /**
-     * 淇敼绯荤粺鐘舵�佺淮鎶�
-     * 
-     * @param stateType 绯荤粺鐘舵�佺淮鎶�
-     * @return 缁撴灉
-     */
-    public int updateStateType(StateType stateType);
-
-    /**
-     * 鎵归噺鍒犻櫎绯荤粺鐘舵�佺淮鎶�
-     * 
-     * @param stateIds 闇�瑕佸垹闄ょ殑绯荤粺鐘舵�佺淮鎶D
-     * @return 缁撴灉
-     */
-    public int deleteStateTypeByIds(String[] stateIds);
-
-    /**
-     * 鍒犻櫎绯荤粺鐘舵�佺淮鎶や俊鎭�
-     * 
-     * @param stateId 绯荤粺鐘舵�佺淮鎶D
-     * @return 缁撴灉
-     */
-    public int deleteStateTypeById(String stateId);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IndexFormulaService.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IndexFormulaService.java
deleted file mode 100644
index 3bb8e05..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/IndexFormulaService.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.dingzhuo.energy.data.model.service;
-
-import com.dingzhuo.energy.data.model.domain.IndexFormula;
-
-public interface IndexFormulaService {
-
-  void saveIndexFormula(IndexFormula indexFormula);
-
-  IndexFormula getIndexFormula(String indexId);
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/CalcFunctionServiceImpl.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/CalcFunctionServiceImpl.java
deleted file mode 100644
index f4c5273..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/CalcFunctionServiceImpl.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.dingzhuo.energy.data.model.service.impl;
-
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.data.model.mapper.CalcFunctionMapper;
-import com.dingzhuo.energy.data.model.domain.CalcFunction;
-import com.dingzhuo.energy.data.model.service.ICalcFunctionService;
-
-/**
- * 璁$畻鍑芥暟Service涓氬姟灞傚鐞�
- * 
- * @author fanxinfu
- * @date 2020-03-10
- */
-@Service
-public class CalcFunctionServiceImpl implements ICalcFunctionService 
-{
-    @Autowired
-    private CalcFunctionMapper calcFunctionMapper;
-
-    /**
-     * 鏌ヨ璁$畻鍑芥暟
-     * 
-     * @param id 璁$畻鍑芥暟ID
-     * @return 璁$畻鍑芥暟
-     */
-    @Override
-    public CalcFunction selectCalcFunctionById(String id)
-    {
-        return calcFunctionMapper.selectCalcFunctionById(id);
-    }
-
-    /**
-     * 鏌ヨ璁$畻鍑芥暟鍒楄〃
-     * 
-     * @param calcFunction 璁$畻鍑芥暟
-     * @return 璁$畻鍑芥暟
-     */
-    @Override
-    public List<CalcFunction> selectCalcFunctionList(CalcFunction calcFunction)
-    {
-        return calcFunctionMapper.selectCalcFunctionList(calcFunction);
-    }
-
-    /**
-     * 鏂板璁$畻鍑芥暟
-     * 
-     * @param calcFunction 璁$畻鍑芥暟
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertCalcFunction(CalcFunction calcFunction)
-    {
-        return calcFunctionMapper.insertCalcFunction(calcFunction);
-    }
-
-    /**
-     * 淇敼璁$畻鍑芥暟
-     * 
-     * @param calcFunction 璁$畻鍑芥暟
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateCalcFunction(CalcFunction calcFunction)
-    {
-        return calcFunctionMapper.updateCalcFunction(calcFunction);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎璁$畻鍑芥暟
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑璁$畻鍑芥暟ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteCalcFunctionByIds(String[] ids)
-    {
-        return calcFunctionMapper.deleteCalcFunctionByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎璁$畻鍑芥暟淇℃伅
-     * 
-     * @param id 璁$畻鍑芥暟ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteCalcFunctionById(String id)
-    {
-        return calcFunctionMapper.deleteCalcFunctionById(id);
-    }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/DaqTemplateServiceImpl.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/DaqTemplateServiceImpl.java
deleted file mode 100644
index 4ce4f91..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/DaqTemplateServiceImpl.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.dingzhuo.energy.data.model.service.impl;
-
-import java.util.List;
-
-import com.dingzhuo.energy.data.model.domain.DaqTemplate;
-import com.dingzhuo.energy.data.model.mapper.DaqTemplateMapper;
-import com.dingzhuo.energy.data.model.service.IDaqTemplateService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-/**
- * 閲囬泦鍙傛暟妯℃澘Service涓氬姟灞傚鐞�
- *
- * @author ruoyi
- * @date 2020-02-08
- */
-@Service
-public class DaqTemplateServiceImpl implements IDaqTemplateService {
-  @Autowired
-  private DaqTemplateMapper daqTemplateMapper;
-
-  /**
-   * 鏌ヨ閲囬泦鍙傛暟妯℃澘
-   *
-   * @param id 閲囬泦鍙傛暟妯℃澘ID
-   * @return 閲囬泦鍙傛暟妯℃澘
-   */
-  @Override
-  public DaqTemplate selectDaqTemplateById(String id) {
-    return daqTemplateMapper.selectDaqTemplateById(id);
-  }
-
-  /**
-   * 鏌ヨ閲囬泦鍙傛暟妯℃澘鍒楄〃
-   *
-   * @param daqTemplate 閲囬泦鍙傛暟妯℃澘
-   * @return 閲囬泦鍙傛暟妯℃澘
-   */
-  @Override
-  public List<DaqTemplate> selectDaqTemplateList(DaqTemplate daqTemplate) {
-    return daqTemplateMapper.selectDaqTemplateList(daqTemplate);
-  }
-
-  /**
-   * 鏂板閲囬泦鍙傛暟妯℃澘
-   *
-   * @param daqTemplate 閲囬泦鍙傛暟妯℃澘
-   * @return 缁撴灉
-   */
-  @Override
-  public int insertDaqTemplate(DaqTemplate daqTemplate) {
-    return daqTemplateMapper.insertDaqTemplate(daqTemplate);
-  }
-
-  /**
-   * 淇敼閲囬泦鍙傛暟妯℃澘
-   *
-   * @param daqTemplate 閲囬泦鍙傛暟妯℃澘
-   * @return 缁撴灉
-   */
-  @Override
-  public int updateDaqTemplate(DaqTemplate daqTemplate) {
-    return daqTemplateMapper.updateDaqTemplate(daqTemplate);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎閲囬泦鍙傛暟妯℃澘
-   *
-   * @param ids 闇�瑕佸垹闄ょ殑閲囬泦鍙傛暟妯℃澘ID
-   * @return 缁撴灉
-   */
-  @Override
-  public int deleteDaqTemplateByIds(String[] ids) {
-    return daqTemplateMapper.deleteDaqTemplateByIds(ids);
-  }
-
-  /**
-   * 鍒犻櫎閲囬泦鍙傛暟妯℃澘淇℃伅
-   *
-   * @param id 閲囬泦鍙傛暟妯℃澘ID
-   * @return 缁撴灉
-   */
-  @Override
-  public int deleteDaqTemplateById(String id) {
-    return daqTemplateMapper.deleteDaqTemplateById(id);
-  }
-
-  @Override
-  public boolean dapHasExist(String code, String deviceType) {
-    int count = daqTemplateMapper.dapHasExist(code, deviceType);
-    return count > 0;
-  }
-
-  @Override
-  public boolean dapHasExist(DaqTemplate daqTemplate) {
-    int count = daqTemplateMapper.dapHasExistWhenUpdate(daqTemplate.getId(), daqTemplate.getCode(), daqTemplate.getDeviceType());
-    return count > 0;
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/DataAuthServiceImpl.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/DataAuthServiceImpl.java
deleted file mode 100644
index 5a62525..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/DataAuthServiceImpl.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.dingzhuo.energy.data.model.service.impl;
-
-import com.dingzhuo.energy.data.model.mapper.DataAuthMapper;
-import com.dingzhuo.energy.data.model.service.DataAuthService;
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class DataAuthServiceImpl implements DataAuthService {
-
-  @Autowired
-  private DataAuthMapper dataAuthMapper;
-
-  @Override
-  public List<String> getUserDataAuth(String modelCode, String id) {
-    return dataAuthMapper.getUserDataAuth(modelCode, id);
-  }
-
-  @Override
-  public List<String> getRoleDataAuth(String modelCode, String id) {
-    return dataAuthMapper.getRoleDataAuth(modelCode, id);
-  }
-
-  @Override
-  public void setUserDataAuth(String userOrRoleId, String modelCode, List<String> ids) {
-    dataAuthMapper.setUserDataAuth(userOrRoleId, modelCode, ids);
-  }
-
-  @Override
-  public void setRoleDataAuth(String userOrRoleId, String modelCode, List<String> ids) {
-    dataAuthMapper.setRoleDataAuth(userOrRoleId, modelCode, ids);
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/EnergyIndexServiceImpl.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/EnergyIndexServiceImpl.java
deleted file mode 100644
index 3ed8a49..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/EnergyIndexServiceImpl.java
+++ /dev/null
@@ -1,271 +0,0 @@
-package com.dingzhuo.energy.data.model.service.impl;
-
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplement;
-import com.dingzhuo.energy.basic.data.meter.service.IMeterImplementService;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.data.model.domain.DaqTemplate;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.EnergyIndexQuery;
-import com.dingzhuo.energy.data.model.domain.IndexType;
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.mapper.EnergyIndexMapper;
-import com.dingzhuo.energy.data.model.service.IDaqTemplateService;
-import com.dingzhuo.energy.data.model.service.IEnergyIndexService;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-
-import java.util.*;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.stream.Collectors;
-
-import org.apache.commons.collections4.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-/**
- * 鎸囨爣淇℃伅Service涓氬姟灞傚鐞�
- *
- * @author fanxinfu
- * @date 2020-02-14
- */
-@Service
-public class EnergyIndexServiceImpl implements IEnergyIndexService {
-
-  @Autowired
-  private EnergyIndexMapper energyIndexMapper;
-  @Autowired
-  private IDaqTemplateService daqTemplateService;
-  @Autowired
-  private IMeterImplementService meterImplementService;
-  @Autowired
-  private IModelNodeService modelNodeService;
-
-  /**
-   * 鏌ヨ鎸囨爣淇℃伅
-   *
-   * @param indexId 鎸囨爣淇℃伅ID
-   * @return 鎸囨爣淇℃伅
-   */
-  @Override
-  public EnergyIndex selectEnergyIndexById(String indexId) {
-    return energyIndexMapper.selectEnergyIndexById(indexId);
-  }
-
-  @Override
-  public List<EnergyIndex> selectEnergyIndexByIds(List<String> indexId) {
-    if (CollectionUtils.isEmpty(indexId)) {
-      return Collections.emptyList();
-    }
-    return energyIndexMapper.selectEnergyIndexByIds(indexId);
-  }
-
-  @Override
-  public List<EnergyIndex> selectEnergyIndexList(EnergyIndex energyIndex) {
-    return energyIndexMapper.selectEnergyIndexList(energyIndex);
-  }
-
-  /**
-   * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
-   *
-   * @param energyIndex 鎸囨爣淇℃伅
-   * @return 鎸囨爣淇℃伅
-   */
-  @Override
-  public List<EnergyIndex> selectEnergyIndexList(EnergyIndexQuery query) {
-    return energyIndexMapper.selectEnergyIndex(query);
-  }
-
-  /**
-   * 鏂板鎸囨爣淇℃伅
-   *
-   * @param nodeId
-   * @param energyIndex 鎸囨爣淇℃伅
-   * @return 缁撴灉
-   */
-  @Override
-  public int insertEnergyIndex(String nodeId, EnergyIndex energyIndex) {
-    return energyIndexMapper.insertEnergyIndex(nodeId, energyIndex);
-  }
-
-  /**
-   * 淇敼鎸囨爣淇℃伅
-   *
-   * @param energyIndex 鎸囨爣淇℃伅
-   * @return 缁撴灉
-   */
-  @Override
-  public int updateEnergyIndex(EnergyIndex energyIndex) {
-    return energyIndexMapper.updateEnergyIndex(energyIndex);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎鎸囨爣淇℃伅
-   *
-   * @param nodeId
-   * @param indexIds 闇�瑕佸垹闄ょ殑鎸囨爣淇℃伅ID
-   * @return 缁撴灉
-   */
-  @Override
-  public int deleteEnergyIndexByIds(String nodeId, String[] indexIds) {
-    return energyIndexMapper.deleteEnergyIndexByIds(nodeId, indexIds);
-  }
-
-  @Override
-  public boolean energyIndexHasExist(String code) {
-    int count = energyIndexMapper.energyIndexHasExist(code);
-    return count > 0;
-  }
-
-  @Override
-  public boolean energyIndexHasExist(String indexId, String code) {
-    int count = energyIndexMapper.energyIndexHasExistWhenUpdate(indexId, code);
-    return count > 0;
-  }
-
-  @Override
-  public AjaxResult addMeterIndex(String meterId) {
-    MeterImplement meterImplement = meterImplementService.selectMeterImplementById(meterId);
-    if (meterImplement == null) {
-      return AjaxResult.error("鎵句笉鍒板搴旂殑璁¢噺鍣ㄥ叿锛�");
-    }
-
-    DaqTemplate query = new DaqTemplate();
-    query.setDeviceType(meterImplement.getMeterType());
-    List<DaqTemplate> daqTemplates = daqTemplateService.selectDaqTemplateList(query);
-    if (daqTemplates.isEmpty()) {
-      return AjaxResult.error("璁¢噺鍣ㄥ叿鎵�灞炵殑绫诲瀷娌℃湁鎵惧埌瀵瑰簲鐨勬ā鏉匡紒");
-    }
-
-    List<EnergyIndex> energyIndices = new ArrayList<>();
-    daqTemplates.forEach(daqTemplate -> {
-      EnergyIndex energyIndex = new EnergyIndex();
-      energyIndex.setIndexId(UUID.randomUUID().toString());
-      energyIndex.setCode(meterImplement.getCode() + "_" + daqTemplate.getCode());
-      energyIndex.setName(daqTemplate.getName());
-      energyIndex.setUnitId(daqTemplate.getUnit());
-      energyIndex.setIndexType(IndexType.COLLECT);
-      energyIndex.setMeterId(meterId);
-      energyIndices.add(energyIndex);
-    });
-
-    energyIndexMapper.deleteIndexByMeterId(meterId);
-    energyIndexMapper.insertEnergyIndices(energyIndices);
-    return AjaxResult.success();
-  }
-
-  @Override
-  public List<EnergyIndex> getMeterIndex(String meterId) {
-    return energyIndexMapper.getMeterIndex(meterId);
-  }
-
-  @Override
-  public boolean modelHasConfig(String modelCode) {
-    int count = energyIndexMapper.modelHasConfig(modelCode);
-    return count > 0;
-  }
-
-  @Override
-  public List<EnergyIndex> selectCollectIndex(String deviceId) {
-    return energyIndexMapper.selectCollectIndex(deviceId);
-  }
-
-  @Override
-  public List<EnergyIndex> getEnergyIndexByIds(List<String> indexIds) {
-    return energyIndexMapper.getEnergyIndexByIds(indexIds);
-  }
-
-  @Override
-  public List<EnergyIndex> getEnergyIndexByCodes(List<String> indexCodes) {
-    if (indexCodes.isEmpty()) {
-      return new ArrayList<>();
-    }
-
-    return energyIndexMapper.getEnergyIndexByCodes(indexCodes);
-  }
-
-  @Override
-  public List<EnergyIndex> getIndexByNodeAndChildrenNode(String nodeId) {
-    return energyIndexMapper.getIndexByNodeAndChildrenNode(nodeId);
-  }
-
-  @Override
-  public List<EnergyIndex> searchIndexByNodeAndChildrenNode(String nodeId, String filter) {
-    return energyIndexMapper.searchIndexByNodeAndChildrenNode(nodeId, filter);
-  }
-
-  @Override
-  public void removeNodeIndex(String nodeId, List<String> removeLink) {
-    energyIndexMapper.removeNodeIndex(nodeId, removeLink);
-  }
-
-  @Override
-  public AjaxResult importEnergyIndex(List<EnergyIndex> energyIndexList, boolean updateSupport) {
-    List<String> codes = energyIndexList.stream().map(EnergyIndex::getCode)
-        .collect(Collectors.toList());
-    List<String> nodeCodes = energyIndexList.stream().map(EnergyIndex::getNodeId)
-        .collect(Collectors.toList());
-    List<EnergyIndex> indexList = energyIndexMapper.getEnergyIndexByCodes(codes);
-    List<ModelNode> modelNodes = modelNodeService.getModelNodeByNodeCodes(nodeCodes);
-    Map<String, String> nodeCodeToId = modelNodes.stream()
-        .collect(Collectors.toMap(ModelNode::getCode, ModelNode::getNodeId));
-    Set<String> cacheIndexCodes = indexList.stream().map(EnergyIndex::getCode)
-        .collect(Collectors.toSet());
-
-    List<EnergyIndex> insertData = new ArrayList<>();
-    List<EnergyIndex> updateData = new ArrayList<>();
-    List<String> errorNodeCode = new ArrayList<>();
-    List<String> insertIndexCode = new ArrayList<>();
-    AtomicBoolean existDuplicateCode = new AtomicBoolean(false);
-    energyIndexList.forEach(energyIndex -> {
-      if (cacheIndexCodes.contains(energyIndex.getCode())) {
-        updateData.add(energyIndex);
-      } else {
-        String nodeCode = energyIndex.getNodeId();
-        if (nodeCodeToId.containsKey(nodeCode)) {
-          if (!insertIndexCode.contains(energyIndex.getCode())) {
-            insertIndexCode.add(energyIndex.getCode());
-            energyIndex.setIndexId(UUID.randomUUID().toString());
-            energyIndex.setNodeId(nodeCodeToId.get(nodeCode));
-            insertData.add(energyIndex);
-          } else {
-            existDuplicateCode.set(true);
-          }
-        } else if (!errorNodeCode.contains(nodeCode)) {
-          errorNodeCode.add(nodeCode);
-        }
-      }
-    });
-
-    if (updateSupport && !updateData.isEmpty()) {
-      updateData.forEach(energyIndexMapper::updateEnergyIndex);
-    }
-
-    if (!insertData.isEmpty()) {
-      energyIndexMapper.saveEnergyIndex(insertData);
-    }
-
-    String errMsg = "";
-    if (existDuplicateCode.get()) {
-      errMsg += "瀛樺湪閲嶅鐨勬寚鏍囩紪鐮侊紝宸茶嚜鍔ㄨ繃婊わ紒";
-    }
-
-    if (!errorNodeCode.isEmpty()) {
-      errMsg += String.join(",", errorNodeCode) + "娌℃湁鎵惧埌瀵瑰簲鐨勮妭鐐规暟鎹紝鍥犳鍏朵笅鐨勬墍鏈夋寚鏍囧鍏ュけ璐ワ紒";
-    }
-
-    if (StringUtils.isNotBlank(errMsg)) {
-      return AjaxResult.error(errMsg);
-    }
-    return AjaxResult.success("瀵煎叆鎴愬姛锛�");
-  }
-
-  @Override
-  public List<EnergyIndex> getEnergyIndexMeterByCodes(List<String> indexCodes) {
-    if (indexCodes.isEmpty()) {
-      return new ArrayList<>();
-    }
-
-    return energyIndexMapper.getEnergyIndexMeterByCodes(indexCodes);
-  }
-
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/IndexFormulaServiceImpl.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/IndexFormulaServiceImpl.java
deleted file mode 100644
index d71608b..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/IndexFormulaServiceImpl.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.dingzhuo.energy.data.model.service.impl;
-
-import com.dingzhuo.energy.common.core.lang.UUID;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.data.model.domain.IndexFormula;
-import com.dingzhuo.energy.data.model.domain.IndexFormulaParam;
-import com.dingzhuo.energy.data.model.mapper.IndexFormulaMapper;
-import com.dingzhuo.energy.data.model.service.IndexFormulaService;
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-/**
- * @author fanxinfu
- */
-@Service
-public class IndexFormulaServiceImpl implements IndexFormulaService {
-
-  @Autowired
-  private IndexFormulaMapper indexFormulaMapper;
-
-  @Override
-  public void saveIndexFormula(IndexFormula indexFormula) {
-    if (StringUtils.isEmpty(indexFormula.getId())) {
-      indexFormula.setId(UUID.fastUUID().toString());
-      indexFormulaMapper.insertIndexFormula(indexFormula);
-    } else {
-      indexFormulaMapper.updateIndexFormula(indexFormula);
-    }
-
-    indexFormula.getIndexFormulaParams().forEach(param -> {
-      param.setId(UUID.fastUUID().toString());
-      param.setFormulaId(indexFormula.getId());
-      param.setIndexId(indexFormula.getIndexId());
-    });
-    indexFormulaMapper
-        .saveIndexFormulaParam(indexFormula.getIndexId(), indexFormula.getIndexFormulaParams());
-  }
-
-  @Override
-  public IndexFormula getIndexFormula(String indexId) {
-    IndexFormula indexFormula = indexFormulaMapper.getFormula(indexId);
-    if (indexFormula != null) {
-      List<IndexFormulaParam> indexFormulaParams = indexFormulaMapper.getFormulaParam(indexId);
-      if (!indexFormulaParams.isEmpty()) {
-        indexFormula.setIndexFormulaParams(indexFormulaParams);
-      }
-    } else {
-      indexFormula = new IndexFormula();
-    }
-
-    return indexFormula;
-  }
-
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/IndexStorageServiceImpl.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/IndexStorageServiceImpl.java
deleted file mode 100644
index a874ebb..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/IndexStorageServiceImpl.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package com.dingzhuo.energy.data.model.service.impl;
-
-import static org.apache.commons.lang3.StringUtils.equalsIgnoreCase;
-
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.model.domain.CalcType;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.IndexFormula;
-import com.dingzhuo.energy.data.model.domain.IndexFormulaParam;
-import com.dingzhuo.energy.data.model.domain.IndexStorage;
-import com.dingzhuo.energy.data.model.domain.IndexStorageParam;
-import com.dingzhuo.energy.data.model.mapper.IndexStorageMapper;
-import com.dingzhuo.energy.data.model.service.IEnergyIndexService;
-import com.dingzhuo.energy.data.model.service.IIndexStorageService;
-import com.dingzhuo.energy.data.model.service.IndexFormulaService;
-import org.joda.time.DateTime;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-import java.util.stream.Collectors;
-
-@Service
-public class IndexStorageServiceImpl implements IIndexStorageService {
-
-  @Autowired
-  private IndexStorageMapper indexStorageMapper;
-  @Autowired
-  private IndexFormulaService indexFormulaService;
-  @Autowired
-  private IEnergyIndexService energyIndexService;
-
-  @Override
-  public void saveIndexStorage(String indexId, List<IndexStorage> indexStorage) {
-    indexStorage.forEach(storage -> {
-      storage.setIndexId(indexId);
-      if (StringUtils.isEmpty(storage.getId())) {
-        storage.setId(UUID.randomUUID().toString());
-        indexStorageMapper.insertIndexStorage(storage);
-      } else {
-        indexStorageMapper.updateIndexStorage(storage);
-      }
-
-      indexStorageMapper.saveParams(storage.getId(), storage.getParamIndex());
-    });
-  }
-
-  @Override
-  @Transactional(rollbackFor = Exception.class)
-  public void saveFormulaAndStorage(IndexFormula indexFormula, List<IndexStorage> indexStorage,
-      String indexId) {
-    indexFormulaService.saveIndexFormula(indexFormula);
-    String calcText = indexFormula.getFormulaText();
-    List<String> paramNames = new ArrayList<>();
-    for (IndexFormulaParam param : indexFormula.getIndexFormulaParams()) {
-      calcText = calcText
-              .replace("("+param.getParamName()+")", "("+String.format("'%s'", param.getParamValue())+")");
-      paramNames.add(param.getParamValue());
-    }
-
-    List<EnergyIndex> energyIndexList = energyIndexService.getEnergyIndexByCodes(paramNames);
-    List<String> paramIndex = energyIndexList.stream()
-        .map(EnergyIndex::getIndexId)
-        .collect(Collectors.toList());
-    for (IndexStorage storage : indexStorage) {
-      storage.setCalcText(calcText);
-      storage.getParamIndex().addAll(paramIndex);
-    }
-
-    saveIndexStorage(indexId, indexStorage);
-  }
-
-  @Override
-  public List<IndexStorage> getIndexStorage(String indexId) {
-    return indexStorageMapper.getIndexStorage(indexId);
-  }
-
-  @Override
-  public List<IndexStorage> getAllCalcIndexStorage() {
-    List<IndexStorage> indexStorageList = indexStorageMapper.getAllCalcIndexStorage(CalcType.CALC);
-    List<IndexStorageParam> params = indexStorageMapper.getAllParameter();
-    indexStorageList.forEach(storage -> {
-      List<String> indexIds = params.stream()
-          .filter(f -> equalsIgnoreCase(f.getStorageId(), storage.getId()))
-          .map(IndexStorageParam::getIndexId)
-          .collect(Collectors.toList());
-      if (!indexIds.isEmpty()) {
-        storage.getParamIndex().addAll(indexIds);
-      }
-    });
-
-    return indexStorageList;
-  }
-
-  @Override
-  public IndexStorage getIndexStorage(String indexId, TimeType timeType) {
-    return indexStorageMapper.getWithTimetype(indexId, timeType);
-  }
-
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/LimitTypeServiceImpl.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/LimitTypeServiceImpl.java
deleted file mode 100644
index ecf0597..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/LimitTypeServiceImpl.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.dingzhuo.energy.data.model.service.impl;
-
-import java.util.List;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.data.model.mapper.LimitTypeMapper;
-import com.dingzhuo.energy.data.model.domain.LimitType;
-import com.dingzhuo.energy.data.model.service.ILimitTypeService;
-
-/**
- * 鎶ヨ闄愬�肩被鍨嬬淮鎶ervice涓氬姟灞傚鐞�
- * 
- * @author zw
- * @date 2020-03-07
- */
-@Service
-public class LimitTypeServiceImpl implements ILimitTypeService 
-{
-    @Autowired
-    private LimitTypeMapper limitTypeMapper;
-
-    /**
-     * 鏌ヨ鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * 
-     * @param id 鎶ヨ闄愬�肩被鍨嬬淮鎶D
-     * @return 鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     */
-    @Override
-    public LimitType selectLimitTypeById(String id)
-    {
-        return limitTypeMapper.selectLimitTypeById(id);
-    }
-
-    /**
-     * 鏌ヨ鎶ヨ闄愬�肩被鍨嬬淮鎶ゅ垪琛�
-     * 
-     * @param limitType 鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * @return 鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     */
-    @Override
-    public List<LimitType> selectLimitTypeList(LimitType limitType)
-    {
-        return limitTypeMapper.selectLimitTypeList(limitType);
-    }
-
-    /**
-     * 鏂板鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * 
-     * @param limitType 鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertLimitType(LimitType limitType)
-    {
-        limitType.setCreateTime(DateUtils.getNowDate());
-        return limitTypeMapper.insertLimitType(limitType);
-    }
-
-    /**
-     * 淇敼鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * 
-     * @param limitType 鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateLimitType(LimitType limitType)
-    {
-        limitType.setUpdateTime(DateUtils.getNowDate());
-        return limitTypeMapper.updateLimitType(limitType);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鎶ヨ闄愬�肩被鍨嬬淮鎶�
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鎶ヨ闄愬�肩被鍨嬬淮鎶D
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteLimitTypeByIds(String[] ids)
-    {
-        return limitTypeMapper.deleteLimitTypeByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎鎶ヨ闄愬�肩被鍨嬬淮鎶や俊鎭�
-     * 
-     * @param id 鎶ヨ闄愬�肩被鍨嬬淮鎶D
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteLimitTypeById(String id)
-    {
-        return limitTypeMapper.deleteLimitTypeById(id);
-    }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/ModelInfoServiceImpl.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/ModelInfoServiceImpl.java
deleted file mode 100644
index af13fa8..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/ModelInfoServiceImpl.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package com.dingzhuo.energy.data.model.service.impl;
-
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplement;
-import com.dingzhuo.energy.basic.data.meter.service.IMeterImplementService;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.ModelInfo;
-import com.dingzhuo.energy.data.model.domain.vo.ModelNodeIndexInfor;
-import com.dingzhuo.energy.data.model.domain.vo.PointDataVO;
-import com.dingzhuo.energy.data.model.mapper.ModelInfoMapper;
-import com.dingzhuo.energy.data.model.service.IEnergyIndexService;
-import com.dingzhuo.energy.data.model.service.IModelInfoService;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-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.stream.Collectors;
-
-/**
- * 妯″瀷Service涓氬姟灞傚鐞�
- *
- * @author fanxinfu
- * @date 2020-02-17
- */
-@Service
-public class ModelInfoServiceImpl implements IModelInfoService {
-  @Autowired
-  private ModelInfoMapper modelInfoMapper;
-
-  @Autowired
-  private final IModelNodeService modelNodeService;
-
-  @Autowired
-  private final IEnergyIndexService energyIndexService;
-
-  @Autowired
-  private final IMeterImplementService meterImplementService;
-
-  public ModelInfoServiceImpl(IModelNodeService modelNodeService,
-                              IEnergyIndexService energyIndexService,
-                              IMeterImplementService meterImplementService) {
-    this.modelNodeService = modelNodeService;
-    this.energyIndexService = energyIndexService;
-    this.meterImplementService = meterImplementService;
-  }
-
-  /**
-   * 鏌ヨ妯″瀷
-   *
-   * @param modelCode 妯″瀷ID
-   * @return 妯″瀷
-   */
-  @Override
-  public ModelInfo selectModelInfoById(String modelCode) {
-    return modelInfoMapper.selectModelInfoById(modelCode);
-  }
-
-  /**
-   * 鏌ヨ妯″瀷鍒楄〃
-   *
-   * @param modelInfo 妯″瀷
-   * @return 妯″瀷
-   */
-  @Override
-  public List<ModelInfo> selectModelInfoList(ModelInfo modelInfo) {
-    return modelInfoMapper.selectModelInfoList(modelInfo);
-  }
-
-  /**
-   * 鏂板妯″瀷
-   *
-   * @param modelInfo 妯″瀷
-   * @return 缁撴灉
-   */
-  @Override
-  public int insertModelInfo(ModelInfo modelInfo) {
-    return modelInfoMapper.insertModelInfo(modelInfo);
-  }
-
-  /**
-   * 淇敼妯″瀷
-   *
-   * @param modelInfo 妯″瀷
-   * @return 缁撴灉
-   */
-  @Override
-  public int updateModelInfo(ModelInfo modelInfo) {
-    return modelInfoMapper.updateModelInfo(modelInfo);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎妯″瀷
-   *
-   * @param modelCode 闇�瑕佸垹闄ょ殑妯″瀷ID
-   * @return 缁撴灉
-   */
-  @Override
-  public int deleteModelInfoByCode(String modelCode) {
-    return modelInfoMapper.deleteModelInfoByCode(modelCode);
-  }
-
-  /**
-   * 鍒犻櫎妯″瀷淇℃伅
-   *
-   * @param modelCode 妯″瀷ID
-   * @return 缁撴灉
-   */
-  @Override
-  public int deleteModelInfoById(String modelCode) {
-    return modelInfoMapper.deleteModelInfoById(modelCode);
-  }
-
-  /**
-   * 鏍规嵁妯″瀷id鏌ヨ瀵瑰簲鐐逛綅淇℃伅
-   *
-   * @param modelId 鏌ヨ妯″瀷id
-   * @return
-   */
-  @Override
-  public List<PointDataVO> listEnergyIndexByModelId(String modelId) {
-    List<PointDataVO> voList = new ArrayList<>();
-    // 鏍规嵁id鏌ヨ涓嬬骇id涓巌ndexId
-    List<ModelNodeIndexInfor> inforList = modelNodeService.listModelNodeIndexIdRelationInforByParentId(modelId);
-    if (CollectionUtils.isEmpty(inforList)) {
-      List<ModelNodeIndexInfor> indexInforList = modelNodeService.getModelNodeIndexIdRelationInforByNodeId(modelId);
-      if (CollectionUtils.isEmpty(indexInforList)) {
-        return voList;
-      }
-      inforList.addAll(indexInforList);
-    }
-    // 鍘婚櫎鎵�鏈夌偣浣峣d淇℃伅
-    List<String> indexIds = inforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-    List<EnergyIndex> energyIndexList = energyIndexService.getEnergyIndexByIds(indexIds);
-    // 鏍规嵁indexid鏌ヨ瀵瑰簲璁¢噺鍣ㄥ叿淇℃伅
-    List<String> meterIds = energyIndexList.stream().map(EnergyIndex::getMeterId).collect(Collectors.toList());
-    Map<String, List<MeterImplement>> meterImplementMap = meterImplementService.listMeterImplementByIds(meterIds).stream()
-            .filter(li -> StringUtils.isNotEmpty(li.getInstallactionLocation()))
-            .collect(Collectors.groupingBy(MeterImplement::getId));
-    for (EnergyIndex indexInfo : energyIndexList) {
-
-      PointDataVO pointData = new PointDataVO();
-      String indexName = indexInfo.getName();
-      List<MeterImplement> meterImplements = meterImplementMap.get(indexInfo.getMeterId());
-      if (CollectionUtils.isNotEmpty(meterImplements)) {
-        MeterImplement infor = meterImplements.get(0);
-        indexName = infor.getInstallactionLocation() + "_" + infor.getMeterName() + "_" + indexName;
-      }
-      pointData.setIndexName(indexName);
-      pointData.setIndexId(indexInfo.getIndexId());
-      voList.add(pointData);
-    }
-    return voList;
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/ModelNodeServiceImpl.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/ModelNodeServiceImpl.java
deleted file mode 100644
index a925711..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/ModelNodeServiceImpl.java
+++ /dev/null
@@ -1,331 +0,0 @@
-package com.dingzhuo.energy.data.model.service.impl;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysEnergy;
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysProduct;
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplement;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.domain.TreeObject;
-import com.dingzhuo.energy.data.model.domain.vo.ModelNodeIndexInfor;
-import com.dingzhuo.energy.data.model.mapper.ModelNodeMapper;
-import com.dingzhuo.energy.data.model.service.IEnergyIndexService;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import org.apache.commons.collections4.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import static org.apache.commons.lang3.StringUtils.equalsAnyIgnoreCase;
-import static org.apache.commons.lang3.StringUtils.isBlank;
-
-/**
- * 妯″瀷鑺傜偣Service涓氬姟灞傚鐞�
- *
- * @author fanxinfu
- * @date 2020-02-10
- */
-@Service
-public class ModelNodeServiceImpl implements IModelNodeService {
-
-  @Autowired
-  private ModelNodeMapper modelNodeMapper;
-
-  @Autowired
-  private IEnergyIndexService energyIndexService;
-
-  /**
-   * 鏌ヨ妯″瀷鑺傜偣
-   *
-   * @param nodeId 妯″瀷鑺傜偣ID
-   * @return 妯″瀷鑺傜偣
-   */
-  @Override
-  public ModelNode selectModelNodeById(String nodeId) {
-    return modelNodeMapper.selectModelNodeById(nodeId);
-  }
-
-  /**
-   * 鏌ヨ妯″瀷鑺傜偣鍒楄〃
-   *
-   * @param modelNode 妯″瀷鑺傜偣
-   * @return 妯″瀷鑺傜偣
-   */
-  @Override
-  public List<ModelNode> selectModelNodeList(ModelNode modelNode) {
-    return modelNodeMapper.selectModelNodeList(modelNode);
-  }
-
-  /**
-   * 鏂板妯″瀷鑺傜偣
-   *
-   * @param modelNode 妯″瀷鑺傜偣
-   * @return 缁撴灉
-   */
-  @Override
-  public int insertModelNode(ModelNode modelNode) {
-    int maxOrder = modelNodeMapper.getMaxOrder(modelNode.getParentId());
-    modelNode.setOrderNum(maxOrder + 1);
-    return modelNodeMapper.insertModelNode(modelNode);
-  }
-
-  /**
-   * 淇敼妯″瀷鑺傜偣
-   *
-   * @param modelNode 妯″瀷鑺傜偣
-   * @return 缁撴灉
-   */
-  @Override
-  public int updateModelNode(ModelNode modelNode) {
-    return modelNodeMapper.updateModelNode(modelNode);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎妯″瀷鑺傜偣
-   *
-   * @param nodeIds 闇�瑕佸垹闄ょ殑妯″瀷鑺傜偣ID
-   * @return 缁撴灉
-   */
-  @Override
-  public int deleteModelNodeByIds(String[] nodeIds) {
-    return modelNodeMapper.deleteModelNodeByIds(nodeIds);
-  }
-
-  /**
-   * 鍒犻櫎妯″瀷鑺傜偣淇℃伅
-   *
-   * @param nodeId 妯″瀷鑺傜偣ID
-   * @return 缁撴灉
-   */
-  @Override
-  public int deleteModelNodeById(String nodeId) {
-    return modelNodeMapper.deleteModelNodeById(nodeId);
-  }
-
-  @Override
-  public List<ModelNode> getModelNodeByModelCode(String modelCode) {
-    return modelNodeMapper.getModelNodeByModelCode(modelCode);
-  }
-
-  @Override
-  public List<TreeObject> buildModelNodeTree(List<ModelNode> modelNodes) {
-    List<ModelNode> modelNodeTree = modelNodes.stream()
-        .filter(f -> isBlank(f.getParentId()))
-        .collect(Collectors.toList());
-    for (ModelNode modelNode : modelNodeTree) {
-      List<ModelNode> children = modelNodes.stream()
-          .filter(f -> equalsAnyIgnoreCase(f.getParentId(), modelNode.getNodeId()))
-          .collect(Collectors.toList());
-      buildTree(modelNode, children, modelNodes);
-    }
-
-    return modelNodeTree.stream().map(TreeObject::new).collect(Collectors.toList());
-  }
-
-  @Override
-  public void updateOrder(String nodeId, String parentId, String[] children) {
-    modelNodeMapper.updateModelNodeParent(nodeId, parentId);
-    Map<String, Integer> orders = new HashMap<>();
-    for (int i = 0; i < children.length; i++) {
-      orders.put(children[i], i);
-    }
-    modelNodeMapper.updateModelNodeOrder(orders);
-  }
-
-  @Override
-  public boolean modelNodeHasExist(String code, String modelCode) {
-    int count = modelNodeMapper.modelNodeHasExist(code, modelCode);
-    return count > 0;
-  }
-
-  @Override
-  public boolean modelNodeHasExist(ModelNode modelNode) {
-    int count = modelNodeMapper
-        .modelNodeHasExistWhenUpdate(modelNode.getNodeId(), modelNode.getCode(),
-            modelNode.getModelCode());
-    return count > 0;
-  }
-
-  @Override
-  public boolean hasEnergyIndex(String nodeId) {
-    EnergyIndex energyIndex = new EnergyIndex();
-    energyIndex.setNodeId(nodeId);
-    List<EnergyIndex> energyIndices = energyIndexService.selectEnergyIndexList(energyIndex);
-    return energyIndices.size() > 0;
-  }
-
-  @Override
-  public void setDevice(String nodeId, String[] deviceIds) {
-    modelNodeMapper.setDevice(nodeId, deviceIds);
-  }
-
-  @Override
-  public List<MeterImplement> getSettingDevice(String nodeId) {
-    return modelNodeMapper.getSettingDevice(nodeId);
-  }
-
-  @Override
-  public List<EnergyIndex> getSettingIndex(String nodeId) {
-    return modelNodeMapper.getSettingIndex(nodeId);
-  }
-
-  @Override
-  public List<EnergyIndex> getSettingIndexByWhere(String nodeId,String indexName) {
-    return modelNodeMapper.getSettingIndexByWhere(nodeId,indexName);
-  }
-
-  @Override
-  public void delDevice(String nodeId, String[] deviceIds) {
-    if (deviceIds.length == 0) {
-      return;
-    }
-
-    modelNodeMapper.delDevice(nodeId, deviceIds);
-  }
-
-  @Override
-  public List<SysEnergy> getSettingEnergy(String nodeId) {
-    return modelNodeMapper.getSettingEnergy(nodeId);
-  }
-
-  @Override
-  public void setEnergy(String nodeId, Integer[] energyIds) {
-    modelNodeMapper.setEnergy(nodeId, energyIds);
-  }
-
-  @Override
-  public void delEnergy(String nodeId, Integer[] energyIds) {
-    if (energyIds.length == 0) {
-      return;
-    }
-
-    modelNodeMapper.delEnergy(nodeId, energyIds);
-  }
-
-  @Override
-  public List<SysProduct> getSettingProduct(String nodeId) {
-    return modelNodeMapper.getSettingProduct(nodeId);
-  }
-
-  @Override
-  public void setProduct(String nodeId, Integer[] productIds) {
-    modelNodeMapper.setProduct(nodeId, productIds);
-  }
-
-  @Override
-  public void delProduct(String nodeId, Integer[] productIds) {
-    if (productIds.length == 0) {
-      return;
-    }
-
-    modelNodeMapper.delProduct(nodeId, productIds);
-  }
-
-  @Override
-  public void setIndex(String nodeId, String indexType, String[] indexIds) {
-    modelNodeMapper.setIndex(nodeId, indexType, indexIds);
-  }
-
-  @Override
-  public void delIndex(String nodeId, String[] indexIds) {
-    if (indexIds.length == 0) {
-      return;
-    }
-
-    modelNodeMapper.delIndex(nodeId, indexIds);
-  }
-
-  @Override
-  public List<EnergyIndex> getSettingIndex(String indexType, String nodeId) {
-    return modelNodeMapper.getSettingIndexByType(indexType, nodeId);
-  }
-
-  @Override
-  public List<ModelNode> getModelNodeByNodeCodes(List<String> nodeCodes) {
-    return modelNodeMapper.getModelNodeByNodeCodes(nodeCodes);
-  }
-
-  @Override
-  public List<ModelNode> getModelNodeByModelCodeWithAuth(String modelCode, Long userId) {
-    return modelNodeMapper.getModelNodeByModelCodeWithAuth(modelCode, String.valueOf(userId));
-  }
-
-  /**
-   * 鏍规嵁nodeCode鑾峰彇瀵瑰簲鐐逛綅淇℃伅
-   *
-   * @param nodeCode
-   * @return
-   */
-  @Override
-  public List<String> listIndexIdsByModelCode(String nodeCode) {
-    // 鏍规嵁code鑾峰彇modelNode淇℃伅
-    List<ModelNode> modelNodeList = getModelNodeByModelCode(nodeCode);
-    if (CollectionUtils.isEmpty(modelNodeList)) {
-      return Collections.emptyList();
-    }
-    List<String> nodeIds = modelNodeList.stream().map(ModelNode::getNodeId).collect(Collectors.toList());
-
-    return modelNodeMapper.listIndesxByCodeList(nodeIds);
-  }
-
-  /**
-   * 鏍规嵁nodeCode鏌ヨ妯″瀷鑺傜偣涓庣偣浣峣d涔嬮棿鐨勫叧绯讳俊鎭�
-   *
-   * @param code
-   * @return
-   */
-  @Override
-  public List<ModelNodeIndexInfor> getModelNodeIndexIdRelationInforByCode(String code) {
-    return modelNodeMapper.getModelNodeIndexIdRelationInforByCode(code);
-  }
-
-  /**
-   * 鏍规嵁nodeId鏌ヨ瀵瑰簲璇︾粏淇℃伅
-   *
-   * @param nodeId
-   * @return
-   */
-  @Override
-  public List<ModelNodeIndexInfor> getModelNodeIndexIdRelationInforByNodeId(String nodeId) {
-    return modelNodeMapper.getModelNodeIndexIdRelationInforByNodeId(nodeId);
-  }
-
-  /**
-   * 鏍规嵁鐖秈d鏌ヨ璇︾粏淇℃伅
-   *
-   * @param parentId
-   * @return
-   */
-  @Override
-  public List<ModelNodeIndexInfor> listModelNodeIndexIdRelationInforByParentId(String parentId) {
-    return modelNodeMapper.listModelNodeIndexIdRelationInforByParentId(parentId);
-  }
-
-  /**
-   * 鏍规嵁code鏌ヨ鐖剁骇淇℃伅
-   *
-   * @param indexCode
-   * @return
-   */
-  @Override
-  public ModelNode getModelNodeByModelCodeByIndexCode(String indexCode) {
-    return modelNodeMapper.getModelNodeByModelCodeByIndexCode(indexCode);
-  }
-
-  private void buildTree(ModelNode parent, List<ModelNode> children, List<ModelNode> modelNodes) {
-    parent.setChildren(children);
-
-    for (ModelNode modelNode : children) {
-      List<ModelNode> tmp = modelNodes.stream()
-              .filter(f -> equalsAnyIgnoreCase(f.getParentId(), modelNode.getNodeId()))
-              .collect(Collectors.toList());
-      if (!tmp.isEmpty()) {
-        buildTree(modelNode, tmp, modelNodes);
-      }
-    }
-  }
-}
diff --git a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/StateTypeServiceImpl.java b/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/StateTypeServiceImpl.java
deleted file mode 100644
index 509b40a..0000000
--- a/data-model/src/main/java/com/dingzhuo/energy/data/model/service/impl/StateTypeServiceImpl.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.dingzhuo.energy.data.model.service.impl;
-
-import java.util.List;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.data.model.domain.StateType;
-import com.dingzhuo.energy.data.model.mapper.StateTypeMapper;
-import com.dingzhuo.energy.data.model.service.IStateTypeService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-/**
- * 绯荤粺鐘舵�佺淮鎶ervice涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-03-18
- */
-@Service
-public class StateTypeServiceImpl implements IStateTypeService
-{
-    @Autowired
-    private StateTypeMapper stateTypeMapper;
-
-    /**
-     * 鏌ヨ绯荤粺鐘舵�佺淮鎶�
-     * 
-     * @param stateId 绯荤粺鐘舵�佺淮鎶D
-     * @return 绯荤粺鐘舵�佺淮鎶�
-     */
-    @Override
-    public StateType selectStateTypeById(String stateId)
-    {
-        return stateTypeMapper.selectStateTypeById(stateId);
-    }
-
-    /**
-     * 鏌ヨ绯荤粺鐘舵�佺淮鎶ゅ垪琛�
-     * 
-     * @param stateType 绯荤粺鐘舵�佺淮鎶�
-     * @return 绯荤粺鐘舵�佺淮鎶�
-     */
-    @Override
-    public List<StateType> selectStateTypeList(StateType stateType)
-    {
-        return stateTypeMapper.selectStateTypeList(stateType);
-    }
-
-    /**
-     * 鏂板绯荤粺鐘舵�佺淮鎶�
-     * 
-     * @param stateType 绯荤粺鐘舵�佺淮鎶�
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertStateType(StateType stateType)
-    {
-        stateType.setCreateTime(DateUtils.getNowDate());
-        return stateTypeMapper.insertStateType(stateType);
-    }
-
-    /**
-     * 淇敼绯荤粺鐘舵�佺淮鎶�
-     * 
-     * @param stateType 绯荤粺鐘舵�佺淮鎶�
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateStateType(StateType stateType)
-    {
-        stateType.setUpdateTime(DateUtils.getNowDate());
-        return stateTypeMapper.updateStateType(stateType);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎绯荤粺鐘舵�佺淮鎶�
-     * 
-     * @param stateIds 闇�瑕佸垹闄ょ殑绯荤粺鐘舵�佺淮鎶D
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteStateTypeByIds(String[] stateIds)
-    {
-        return stateTypeMapper.deleteStateTypeByIds(stateIds);
-    }
-
-    /**
-     * 鍒犻櫎绯荤粺鐘舵�佺淮鎶や俊鎭�
-     * 
-     * @param stateId 绯荤粺鐘舵�佺淮鎶D
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteStateTypeById(String stateId)
-    {
-        return stateTypeMapper.deleteStateTypeById(stateId);
-    }
-}
diff --git a/data-model/src/main/resources/mybatis/basicsetting/CalcFunctionMapper.xml b/data-model/src/main/resources/mybatis/basicsetting/CalcFunctionMapper.xml
deleted file mode 100644
index b953e48..0000000
--- a/data-model/src/main/resources/mybatis/basicsetting/CalcFunctionMapper.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.data.model.mapper.CalcFunctionMapper">
-
-    <resultMap type="com.dingzhuo.energy.data.model.domain.CalcFunction" id="CalcFunctionResult">
-        <result property="id" column="id"/>
-        <result property="info" column="info"/>
-        <result property="funcName" column="func_name"/>
-        <result property="funcText" column="func_text"/>
-    </resultMap>
-
-    <sql id="selectCalcFunctionVo">
-        select id, func_name, func_text, info
-        from calc_function
-    </sql>
-
-    <select id="selectCalcFunctionList" parameterType="com.dingzhuo.energy.data.model.domain.CalcFunction" resultMap="CalcFunctionResult">
-        <include refid="selectCalcFunctionVo"/>
-        <where>
-            <if test="funcName != null  and funcName != ''">and func_name like concat('%', #{funcName}, '%')</if>
-        </where>
-    </select>
-
-    <select id="selectCalcFunctionById" parameterType="String" resultMap="CalcFunctionResult">
-        <include refid="selectCalcFunctionVo"/>
-        where id = #{id}
-    </select>
-
-    <insert id="insertCalcFunction" parameterType="com.dingzhuo.energy.data.model.domain.CalcFunction">
-        insert into calc_function
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="funcName != null  and funcName != ''">func_name,</if>
-            <if test="funcText != null  and funcText != ''">func_text,</if>
-            <if test="info != null  and info != ''">info,</if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="funcName != null  and funcName != ''">#{funcName},</if>
-            <if test="funcText != null  and funcText != ''">#{funcText},</if>
-            <if test="info != null  and info != ''">#{info},</if>
-        </trim>
-    </insert>
-
-    <update id="updateCalcFunction" parameterType="com.dingzhuo.energy.data.model.domain.CalcFunction">
-        update calc_function
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="info != null  and info != ''">info = #{info},</if>
-            <if test="funcName != null  and funcName != ''">func_name = #{funcName},</if>
-            <if test="funcText != null  and funcText != ''">func_text = #{funcText},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteCalcFunctionById" parameterType="String">
-        delete
-        from calc_function
-        where id = #{id}
-    </delete>
-
-    <delete id="deleteCalcFunctionByIds" parameterType="String">
-        delete from calc_function where id in
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-
-</mapper>
diff --git a/data-model/src/main/resources/mybatis/basicsetting/DaqTemplateMapper.xml b/data-model/src/main/resources/mybatis/basicsetting/DaqTemplateMapper.xml
deleted file mode 100644
index 0dce4c0..0000000
--- a/data-model/src/main/resources/mybatis/basicsetting/DaqTemplateMapper.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.data.model.mapper.DaqTemplateMapper">
-
-    <resultMap type="DaqTemplate" id="DaqTemplateResult">
-        <result property="id" column="id"/>
-        <result property="code" column="code"/>
-        <result property="name" column="name"/>
-        <result property="deviceType" column="device_type"/>
-        <result property="unit" column="unit"/>
-    </resultMap>
-
-    <sql id="selectDaqTemplateVo">
-        select id, code, name, device_type, unit
-        from daq_template
-    </sql>
-
-    <select id="selectDaqTemplateList" parameterType="DaqTemplate" resultMap="DaqTemplateResult">
-        <include refid="selectDaqTemplateVo"/>
-        <where>
-            <if test="code != null  and code != ''">and code = #{code}</if>
-            <if test="name != null  and name != ''">and name like concat('%', #{name}, '%')</if>
-            <if test="deviceType != null  and deviceType != ''">and device_type = #{deviceType}</if>
-        </where>
-        order by device_type, code
-    </select>
-
-    <select id="selectDaqTemplateById" parameterType="String" resultMap="DaqTemplateResult">
-        <include refid="selectDaqTemplateVo"/>
-        where id = #{id}
-    </select>
-    <select id="dapHasExist" resultType="java.lang.Integer">
-        SELECT COUNT(*)
-        FROM daq_template
-        WHERE code = #{code}
-          AND device_type = #{deviceType}
-    </select>
-    <select id="dapHasExistWhenUpdate" resultType="java.lang.Integer">
-        SELECT COUNT(*)
-        FROM daq_template
-        WHERE code = #{code}
-          AND device_type = #{deviceType}
-          AND id != #{id}
-    </select>
-
-    <insert id="insertDaqTemplate" parameterType="DaqTemplate">
-        insert into daq_template
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="code != null  and code != ''">code,</if>
-            <if test="name != null  and name != ''">name,</if>
-            <if test="deviceType != null  and deviceType != ''">device_type,</if>
-            <if test="unit != null  and unit != ''">unit,</if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="code != null  and code != ''">#{code},</if>
-            <if test="name != null  and name != ''">#{name},</if>
-            <if test="deviceType != null  and deviceType != ''">#{deviceType},</if>
-            <if test="unit != null  and unit != ''">#{unit},</if>
-        </trim>
-    </insert>
-
-    <update id="updateDaqTemplate" parameterType="DaqTemplate">
-        update daq_template
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="code != null  and code != ''">code = #{code},</if>
-            <if test="name != null  and name != ''">name = #{name},</if>
-            <if test="deviceType != null  and deviceType != ''">device_type = #{deviceType},</if>
-            <if test="unit != null  and unit != ''">unit = #{unit},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteDaqTemplateById" parameterType="String">
-        delete
-        from daq_template
-        where id = #{id}
-    </delete>
-
-    <delete id="deleteDaqTemplateByIds" parameterType="String">
-        delete from daq_template where id in
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-
-</mapper>
diff --git a/data-model/src/main/resources/mybatis/basicsetting/IndexFormulaMapper.xml b/data-model/src/main/resources/mybatis/basicsetting/IndexFormulaMapper.xml
deleted file mode 100644
index 81140f1..0000000
--- a/data-model/src/main/resources/mybatis/basicsetting/IndexFormulaMapper.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.data.model.mapper.IndexFormulaMapper">
-  <resultMap id="formulaMap" type="com.dingzhuo.energy.data.model.domain.IndexFormula">
-    <result property="id" column="id"/>
-    <result property="indexId" column="index_id"/>
-    <result property="formulaText" column="formula_text"/>
-  </resultMap>
-  <resultMap id="formulaParamMap" type="com.dingzhuo.energy.data.model.domain.IndexFormulaParam">
-    <result property="formulaId" column="formula_id"/>
-    <result property="paramName" column="param_name"/>
-    <result property="paramValue" column="param_value"/>
-  </resultMap>
-  <insert id="insertIndexFormula">
-    insert into index_formula (id, index_id, formula_text)
-    values (#{id}, #{indexId}, #{formulaText});
-  </insert>
-  <insert id="saveIndexFormulaParam">
-    delete
-    from index_formula_param
-    where index_id = #{indexId};
-    <foreach collection="indexFormulaParams" item="formulaParam" separator=";">
-      insert into index_formula_param (id, formula_id,index_id, param_name, param_value) values
-      (#{formulaParam.id}, #{formulaParam.formulaId}, #{formulaParam.indexId},
-      #{formulaParam.paramName},
-      #{formulaParam.paramValue})
-    </foreach>
-  </insert>
-  <update id="updateIndexFormula">
-    update index_formula
-    set formula_text = #{formulaText}
-    where id = #{id}
-  </update>
-  <select id="getFormula" resultMap="formulaMap">
-    select *
-    from index_formula
-    where index_id = #{indexId}
-  </select>
-  <select id="getFormulaParam" resultMap="formulaParamMap">
-    select *
-    from index_formula_param
-    where index_id = #{indexId}
-  </select>
-</mapper>
diff --git a/data-model/src/main/resources/mybatis/basicsetting/IndexStorageMapper.xml b/data-model/src/main/resources/mybatis/basicsetting/IndexStorageMapper.xml
deleted file mode 100644
index 6eaaef5..0000000
--- a/data-model/src/main/resources/mybatis/basicsetting/IndexStorageMapper.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.data.model.mapper.IndexStorageMapper">
-  <resultMap id="indexStorageMap" type="com.dingzhuo.energy.data.model.domain.IndexStorage">
-    <result property="id" column="id"/>
-    <result property="indexId" column="index_id"/>
-    <result property="timeType" column="time_type"/>
-    <result property="calcType" column="calc_type"/>
-    <result property="calcText" column="calc_text"/>
-    <result property="updateTime" column="update_time"/>
-    <result property="createTime" column="create_time"/>
-  </resultMap>
-  <insert id="insertIndexStorage">
-    insert into index_storage (id, index_id, time_type, calc_type, calc_text, create_time,
-                               update_time)
-    values (#{id}, #{indexId}, #{timeType}, #{calcType}, #{calcText}, now(), now());
-  </insert>
-  <insert id="saveParams">
-    delete from storage_parameter where storage_id = #{storageId};
-    <foreach collection="parameterIds" item="paramId" separator=";">
-      insert into storage_parameter (storage_id, index_id)
-      values (#{storageId}, #{paramId});
-    </foreach>
-  </insert>
-  <update id="updateIndexStorage">
-    update index_storage
-    set index_id    = #{indexId},
-        calc_type   = #{calcType},
-        calc_text   = #{calcText},
-        update_time = now()
-    where id = #{id};
-  </update>
-  <select id="getIndexStorage" resultMap="indexStorageMap">
-    select *
-    from index_storage
-    where index_id = #{indexId};
-  </select>
-  <select id="getAllCalcIndexStorage" resultMap="indexStorageMap">
-    select *
-    from index_storage
-    where calc_type = #{calcType}
-  </select>
-  <select id="getAllParameter"
-    resultType="com.dingzhuo.energy.data.model.domain.IndexStorageParam">
-    select storage_id as storageId, index_id as indexId
-    from storage_parameter
-  </select>
-  <select id="getWithTimetype" resultMap="indexStorageMap">
-    select *
-    from index_storage
-    where index_id = #{indexId}
-      AND time_type = #{timeType};
-  </select>
-</mapper>
diff --git a/data-model/src/main/resources/mybatis/basicsetting/LimitTypeMapper.xml b/data-model/src/main/resources/mybatis/basicsetting/LimitTypeMapper.xml
deleted file mode 100644
index 9132299..0000000
--- a/data-model/src/main/resources/mybatis/basicsetting/LimitTypeMapper.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.data.model.mapper.LimitTypeMapper">
-    
-    <resultMap type="LimitType" id="LimitTypeResult">
-        <result property="id"    column="id"    />
-        <result property="limitName"    column="limit_name"    />
-        <result property="limitCode"    column="limit_code"    />
-        <result property="colorNumber"    column="color_number"    />
-        <result property="comparatorOperator"    column="comparator_operator"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="alarmType"    column="alarm_type"    />
-    </resultMap>
-
-    <sql id="selectLimitTypeVo">
-        select id, limit_name, limit_code, color_number,comparator_operator,alarm_type,create_time, create_by, update_time, update_by from limit_type
-    </sql>
-
-    <select id="selectLimitTypeList" parameterType="LimitType" resultMap="LimitTypeResult">
-        <include refid="selectLimitTypeVo"/>
-        <where>  
-            <if test="limitName != null  and limitName != ''"> and limit_name like concat('%', #{limitName}, '%')</if>
-        </where>
-        order by limit_code
-    </select>
-    
-    <select id="selectLimitTypeById" parameterType="String" resultMap="LimitTypeResult">
-        <include refid="selectLimitTypeVo"/>
-        where id = #{id}
-    </select>
-        
-    <insert id="insertLimitType" parameterType="LimitType">
-        insert into limit_type
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="limitName != null  and limitName != ''">limit_name,</if>
-            <if test="limitCode != null  and limitCode != ''">limit_code,</if>
-            <if test="colorNumber != null  and colorNumber != ''">color_number,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="updateBy != null  and updateBy != ''">update_by,</if>
-            <if test="comparatorOperator != null  and comparatorOperator != ''">comparator_operator,</if>
-            <if test="alarmType != null  and alarmType != ''">alarm_type,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="limitName != null  and limitName != ''">#{limitName},</if>
-            <if test="limitCode != null  and limitCode != ''">#{limitCode},</if>
-            <if test="colorNumber != null  and colorNumber != ''">#{colorNumber},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
-            <if test="comparatorOperator != null  and comparatorOperator != ''">#{comparatorOperator},</if>
-            <if test="alarmType != null  and alarmType != ''">#{alarmType},</if>
-         </trim>
-    </insert>
-
-    <update id="updateLimitType" parameterType="LimitType">
-        update limit_type
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="limitName != null  and limitName != ''">limit_name = #{limitName},</if>
-            <if test="limitCode != null  and limitCode != ''">limit_code = #{limitCode},</if>
-            <if test="colorNumber != null  and colorNumber != ''">color_number = #{colorNumber},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="comparatorOperator != null  and comparatorOperator != ''">comparator_operator = #{comparatorOperator},</if>
-            <if test="alarmType != null  and alarmType != ''">alarm_type = #{alarmType},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteLimitTypeById" parameterType="String">
-        delete from limit_type where id = #{id}
-    </delete>
-
-    <delete id="deleteLimitTypeByIds" parameterType="String">
-        delete from limit_type where id in 
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    
-</mapper>
diff --git a/data-model/src/main/resources/mybatis/basicsetting/ModelInfoMapper.xml b/data-model/src/main/resources/mybatis/basicsetting/ModelInfoMapper.xml
deleted file mode 100644
index aa4c3fe..0000000
--- a/data-model/src/main/resources/mybatis/basicsetting/ModelInfoMapper.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.data.model.mapper.ModelInfoMapper">
-
-    <resultMap type="com.dingzhuo.energy.data.model.domain.ModelInfo" id="ModelInfoResult">
-        <result property="modelCode" column="model_code"/>
-        <result property="modelName" column="model_name"/>
-        <result property="isShow" column="is_show"/>
-        <result property="modelType" column="model_type"/>
-    </resultMap>
-
-    <sql id="selectModelInfoVo">
-        select model_code, model_name, is_show, model_type
-        from model_info
-    </sql>
-
-    <select id="selectModelInfoList" parameterType="com.dingzhuo.energy.data.model.domain.ModelInfo"
-            resultMap="ModelInfoResult">
-        <include refid="selectModelInfoVo"/>
-        <where>
-            <if test="modelCode != null  and modelCode != ''">and model_code like concat('%', #{modelCode}, '%')</if>
-            <if test="modelName != null  and modelName != ''">and model_name like concat('%', #{modelName}, '%')</if>
-            <if test="isShow != null">and is_show = #{isShow}</if>
-        </where>
-        order by model_code;
-    </select>
-
-    <select id="selectModelInfoById" parameterType="String" resultMap="ModelInfoResult">
-        <include refid="selectModelInfoVo"/>
-        where model_code = #{modelCode}
-    </select>
-
-    <insert id="insertModelInfo" parameterType="ModelInfo">
-        insert into model_info
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="modelCode != null  and modelCode != ''">model_code,</if>
-            <if test="modelName != null  and modelName != ''">model_name,</if>
-            <if test="modelType != null  and modelType != ''">model_type,</if>
-            is_show,
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="modelCode != null  and modelCode != ''">#{modelCode},</if>
-            <if test="modelName != null  and modelName != ''">#{modelName},</if>
-            <if test="modelType != null  and modelType != ''">#{modelType},</if>
-            1,
-        </trim>
-    </insert>
-
-    <update id="updateModelInfo" parameterType="ModelInfo">
-        update model_info
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="modelName != null  and modelName != ''">model_name = #{modelName},</if>
-            <if test="isShow != null ">is_show = #{isShow},</if>
-        </trim>
-        where model_code = #{modelCode}
-    </update>
-
-    <delete id="deleteModelInfoById" parameterType="String">
-        delete
-        from model_info
-        where model_code = #{modelCode}
-    </delete>
-
-    <delete id="deleteModelInfoByCode" parameterType="String">
-        delete
-        from model_info
-        where model_code = #{modelCode};
-    </delete>
-
-</mapper>
diff --git a/data-model/src/main/resources/mybatis/basicsetting/ModelNodeMapper.xml b/data-model/src/main/resources/mybatis/basicsetting/ModelNodeMapper.xml
deleted file mode 100644
index b3204b3..0000000
--- a/data-model/src/main/resources/mybatis/basicsetting/ModelNodeMapper.xml
+++ /dev/null
@@ -1,342 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.data.model.mapper.ModelNodeMapper">
-
-    <resultMap type="com.dingzhuo.energy.data.model.domain.ModelNode" id="ModelNodeResult">
-        <result property="nodeId" column="node_id"/>
-        <result property="code" column="code"/>
-        <result property="name" column="name"/>
-        <result property="parentId" column="parent_id"/>
-        <result property="address" column="address"/>
-        <result property="modelCode" column="model_code"/>
-        <result property="nodeCategory" column="node_category"/>
-    </resultMap>
-
-    <sql id="selectModelNodeVo">
-        select node_id, code, name, parent_id, address, model_code, node_category
-        from model_node
-    </sql>
-
-    <select id="selectModelNodeList"
-            parameterType="com.dingzhuo.energy.data.model.domain.ModelNode"
-            resultMap="ModelNodeResult">
-        <include refid="selectModelNodeVo"/>
-        <where>
-            <if test="code != null  and code != ''">and code like concat('%', #{code}, '%')</if>
-            <if test="name != null  and name != ''">and name like concat('%', #{name}, '%')</if>
-        </where>
-        order by order_num
-    </select>
-
-    <select id="selectModelNodeById" parameterType="String" resultMap="ModelNodeResult">
-        <include refid="selectModelNodeVo"/>
-        where node_id = #{nodeId}
-    </select>
-    <select id="getModelNodeByModelCode" resultMap="ModelNodeResult">
-        <include refid="selectModelNodeVo"/>
-        where model_code = #{modelCode}
-        order by order_num
-    </select>
-    <select id="getMaxOrder" resultType="java.lang.Integer">
-        select COALESCE(max(order_num), 0)
-        from model_node
-        where parent_id = #{parentId}
-    </select>
-    <select id="modelNodeHasExist" resultType="java.lang.Integer">
-        select count(*)
-        from model_node
-        where code = #{code}
-          and model_code = #{modelCode};
-    </select>
-    <select id="modelNodeHasExistWhenUpdate" resultType="java.lang.Integer">
-        select count(*)
-        from model_node
-        where code = #{code}
-          and model_code = #{modelCode}
-          AND node_id != #{nodeId};
-    </select>
-    <select id="getSettingDevice"
-            resultType="com.dingzhuo.energy.basic.data.meter.domain.MeterImplement">
-        select id, code, meter_name as meterName
-        from meter_implement m
-                 left join node_device nd on m.id = nd.device_id
-        where nd.node_id = #{nodeId};
-    </select>
-    <select id="getSettingIndex"
-            resultType="com.dingzhuo.energy.data.model.domain.EnergyIndex">
-        select ei.index_id as indexId, code, name, index_type as indexType
-        from energy_index ei
-                 left join node_index ni on ei.index_id = ni.index_id
-        where ni.node_id = #{nodeId}
-    </select>
-    <select id="getSettingEnergy"
-            resultType="com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysEnergy">
-        select enerid, enersno, enername
-        from sys_energy e
-                 left join node_energy ne on e.enerid = ne.energy_id
-        where ne.node_id = #{nodeId};
-    </select>
-    <select id="getSettingProduct"
-            resultType="com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysProduct">
-        select productid, productsno, productname
-        from sys_product p
-                 left join node_product np on p.productid = np.product_id
-        where np.node_id = #{nodeId};
-    </select>
-    <select id="getSettingIndexByType"
-            resultType="com.dingzhuo.energy.data.model.domain.EnergyIndex">
-        select ei.index_id as indexId, code, name, index_type as indexType
-        from energy_index ei
-                 left join node_index ni on ei.index_id = ni.index_id
-        where ni.node_id = #{nodeId}
-          and ei.index_type = #{indexType}
-    </select>
-    <select id="getModelNodeByNodeCodes" resultMap="ModelNodeResult">
-        <include refid="selectModelNodeVo"/>
-        where code in
-        <foreach item="nodeCode" collection="list" open="(" separator="," close=")">
-            #{nodeCode}
-        </foreach>
-        order by order_num
-    </select>
-    <select id="getModelNodeByModelCodeWithAuth" resultMap="ModelNodeResult">
-        <include refid="selectModelNodeVo"/>
-        where model_code = #{modelCode}
-        and (
-        node_id in (
-        select node_id from data_auth_user where user_id = #{userId} and model_code = #{modelCode}
-        )
-        or node_id in (
-        select node_id from data_auth_role where role_id in (
-        select cast(r.role_id as varchar) from sys_role r
-        left join sys_user_role ur on ur.role_id = r.role_id
-        left join sys_user u on u.user_id = ur.user_id
-        where cast(u.user_id as VARCHAR) = #{userId}
-        ) and model_code = #{modelCode}
-        )
-        )
-        order by order_num
-    </select>
-
-    <insert id="insertModelNode"
-            parameterType="com.dingzhuo.energy.data.model.domain.ModelNode">
-        insert into model_node
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="nodeId != null  and nodeId != ''">node_id,</if>
-            <if test="code != null  and code != ''">code,</if>
-            <if test="name != null  and name != ''">name,</if>
-            <if test="parentId != null  and parentId != ''">parent_id,</if>
-            <if test="address != null  and address != ''">address,</if>
-            <if test="modelCode != null  and modelCode != ''">model_code,</if>
-            <if test="nodeCategory != null  and nodeCategory != ''">node_category,</if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="nodeId != null  and nodeId != ''">#{nodeId},</if>
-            <if test="code != null  and code != ''">#{code},</if>
-            <if test="name != null  and name != ''">#{name},</if>
-            <if test="parentId != null  and parentId != ''">#{parentId},</if>
-            <if test="address != null  and address != ''">#{address},</if>
-            <if test="modelCode != null  and modelCode != ''">#{modelCode},</if>
-            <if test="nodeCategory != null  and nodeCategory != ''">#{nodeCategory},</if>
-        </trim>
-    </insert>
-    <insert id="setDevice">
-        delete
-        from node_device
-        where node_id = #{nodeId};
-        <foreach collection="deviceIds" item="deviceId" separator=";">
-            insert into node_device (node_id, device_id)
-            values (#{nodeId}, #{deviceId})
-        </foreach>
-    </insert>
-    <insert id="setEnergy">
-        delete
-        from node_energy
-        where node_id = #{nodeId};
-        <foreach collection="energyIds" item="energyId" separator=";">
-            insert into node_energy (node_id, energy_id)
-            values (#{nodeId}, #{energyId})
-        </foreach>
-    </insert>
-    <insert id="setProduct">
-        delete
-        from node_product
-        where node_id = #{nodeId};
-        <foreach collection="productIds" item="productId" separator=";">
-            insert into node_product (node_id, product_id)
-            values (#{nodeId}, #{productId})
-        </foreach>
-    </insert>
-
-    <update id="updateModelNode"
-            parameterType="com.dingzhuo.energy.data.model.domain.ModelNode">
-        update model_node
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="code != null  and code != ''">code = #{code},</if>
-            <if test="name != null  and name != ''">name = #{name},</if>
-            <if test="parentId != null  and parentId != ''">parent_id = #{parentId},</if>
-            <if test="address != null  and address != ''">address = #{address},</if>
-            <if test="modelCode != null  and modelCode != ''">model_code = #{modelCode},</if>
-            <if test="nodeCategory != null and nodeCategory != ''">node_category = #{nodeCategory},</if>
-        </trim>
-        where node_id = #{nodeId}
-    </update>
-    <update id="updateModelNodeParent">
-        update model_node
-        set parent_id = #{parentId}
-        where node_id = #{nodeId};
-
-        update model_node
-        set address = replace(address, (select address from model_node where node_id = #{nodeId}),
-                              (select address ||
-                                      (select code from model_node where node_id = #{nodeId}) ||
-                                      ','
-                               from model_node
-                               where node_id = #{parentId}))
-        where parent_id = #{nodeId}
-           or node_id = #{nodeId};
-    </update>
-    <update id="updateModelNodeOrder">
-        <foreach collection="orders" index="id" item="order" separator=";">
-            update model_node
-            set order_num = #{order}
-            where node_id = #{id}
-        </foreach>
-    </update>
-    <update id="setIndex">
-        delete
-        from node_index
-        where node_id = #{nodeId} and index_id in (select ni.index_id
-        from node_index ni left join energy_index ei on ni.index_id = ei.index_id
-        where node_id = #{nodeId} and ei.index_type = #{indexType});
-        <foreach collection="indexIds" item="indexId" separator=";">
-            insert into node_index (node_id, index_id)
-            values (#{nodeId}, #{indexId})
-        </foreach>
-    </update>
-
-    <delete id="deleteModelNodeById" parameterType="String">
-        delete
-        from model_node
-        where node_id = #{nodeId}
-    </delete>
-
-    <delete id="deleteModelNodeByIds" parameterType="String">
-        delete from model_node where node_id in
-        <foreach item="nodeId" collection="array" open="(" separator="," close=")">
-            #{nodeId}
-        </foreach>
-    </delete>
-    <delete id="delDevice">
-        delete
-        from node_device
-        where node_id = #{nodeId} and device_id in
-        <foreach item="deviceId" collection="deviceIds" open="(" separator="," close=")">
-            #{deviceId}
-        </foreach>
-    </delete>
-    <delete id="delEnergy">
-        delete
-        from node_energy
-        where node_id = #{nodeId} and energy_id in
-        <foreach item="energyId" collection="energyIds" open="(" separator="," close=")">
-            #{energyId}
-        </foreach>
-    </delete>
-    <delete id="delProduct">
-        delete
-        from node_product
-        where node_id = #{nodeId} and product_id in
-        <foreach item="productId" collection="productIds" open="(" separator="," close=")">
-            #{productId}
-        </foreach>
-    </delete>
-    <delete id="delIndex">
-        delete
-        from node_index
-        where node_id = #{nodeId} and index_id in
-        <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
-            #{indexId}
-        </foreach>
-    </delete>
-
-    <select id="getSettingIndexByWhere"
-            resultType="com.dingzhuo.energy.data.model.domain.EnergyIndex">
-        select ei.index_id as indexId, code, name, index_type as indexType
-        from energy_index ei
-        left join node_index ni on ei.index_id = ni.index_id
-        where ni.node_id = #{nodeId}
-        <if test="indexName!=null and indexName!=''">
-            and ei.name like concat('%', #{indexName}, '%')
-        </if>
-    </select>
-
-    <select id="listIndesxByCodeList" resultType="java.lang.String">
-        SELECT
-        index_id
-        FROM
-        "node_index"
-        WHERE
-        node_id IN
-        <foreach item="nodeId" collection="nodeIds" open="(" separator="," close=")">
-            #{nodeId}
-        </foreach>
-    </select>
-
-    <select id="getModelNodeIndexIdRelationInforByCode"
-            resultType="com.dingzhuo.energy.data.model.domain.vo.ModelNodeIndexInfor">
-        SELECT mn.node_id  nodeId,
-               mn."name"   name,
-               ni.index_id indexId
-        FROM "model_node" mn
-                 LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
-        WHERE mn.model_code = #{code}
-          AND mn.parent_id IS NOT NULL
-    </select>
-
-    <select id="listModelNodeIndexIdRelationInforByParentId"
-            resultType="com.dingzhuo.energy.data.model.domain.vo.ModelNodeIndexInfor">
-        SELECT mn.node_id  nodeId,
-               mn."name"   name,
-               ni.index_id indexId
-        FROM "model_node" mn
-                 LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
-        WHERE mn.parent_id = #{parentId}
-    </select>
-
-    <select id="getModelNodeIndexIdRelationInforByNodeId"
-            resultType="com.dingzhuo.energy.data.model.domain.vo.ModelNodeIndexInfor">
-        SELECT mn.node_id  nodeId,
-               mn."name"   name,
-               ni.index_id indexId
-        FROM "model_node" mn
-                 LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
-        WHERE mn.node_id = #{nodeId}
-    </select>
-
-    <select id="getModelNodeByModelCodeByIndexCode" resultType="com.dingzhuo.energy.data.model.domain.ModelNode">
-        SELECT node_id       nodeId,
-               code,
-               "name",
-               parent_id     parentId,
-               address,
-               model_code    modelCode,
-               node_category nodeCategory
-        FROM "model_node"
-        WHERE model_code = #{indexCode}
-          AND parent_id IS NULL LIMIT 1;
-    </select>
-    <select id="selectIndexByModelCodeAndNodeId"
-            resultType="com.dingzhuo.energy.data.model.domain.vo.ModelNodeIndexInfor">
-        SELECT mn.node_id nodeId,
-               mn."name",
-               ni.index_id indexId
-        FROM model_node mn
-                 LEFT JOIN node_index ni ON ni.node_id = mn.node_id
-        WHERE mn.model_code = #{modelCode}
-          AND mn.node_id = #{nodeId}
-    </select>
-
-</mapper>
diff --git a/data-model/src/main/resources/mybatis/basicsetting/StateTypeMapper.xml b/data-model/src/main/resources/mybatis/basicsetting/StateTypeMapper.xml
deleted file mode 100644
index 1e9ee6f..0000000
--- a/data-model/src/main/resources/mybatis/basicsetting/StateTypeMapper.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.data.model.mapper.StateTypeMapper">
-    
-    <resultMap type="StateType" id="StateTypeResult">
-        <result property="stateId"    column="state_id"    />
-        <result property="stateName"    column="state_name"    />
-        <result property="stateCode"    column="state_code"    />
-        <result property="colorNumber"    column="color_number"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="updateBy"    column="update_by"    />
-    </resultMap>
-
-    <sql id="selectStateTypeVo">
-        select state_id, state_name, state_code, color_number, create_time, create_by, update_time, update_by from state_type
-    </sql>
-
-    <select id="selectStateTypeList" parameterType="StateType" resultMap="StateTypeResult">
-        <include refid="selectStateTypeVo"/>
-        <where>  
-            <if test="stateName != null  and stateName != ''"> and state_name like concat('%', #{stateName}, '%')</if>
-        </where>
-    </select>
-    
-    <select id="selectStateTypeById" parameterType="String" resultMap="StateTypeResult">
-        <include refid="selectStateTypeVo"/>
-        where state_id = #{stateId}
-    </select>
-        
-    <insert id="insertStateType" parameterType="StateType">
-        insert into state_type
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="stateId != null  and stateId != ''">state_id,</if>
-            <if test="stateName != null  and stateName != ''">state_name,</if>
-            <if test="stateCode != null  and stateCode != ''">state_code,</if>
-            <if test="colorNumber != null  and colorNumber != ''">color_number,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="updateBy != null  and updateBy != ''">update_by,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="stateId != null  and stateId != ''">#{stateId},</if>
-            <if test="stateName != null  and stateName != ''">#{stateName},</if>
-            <if test="stateCode != null  and stateCode != ''">#{stateCode},</if>
-            <if test="colorNumber != null  and colorNumber != ''">#{colorNumber},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
-         </trim>
-    </insert>
-
-    <update id="updateStateType" parameterType="StateType">
-        update state_type
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="stateName != null  and stateName != ''">state_name = #{stateName},</if>
-            <if test="stateCode != null  and stateCode != ''">state_code = #{stateCode},</if>
-            <if test="colorNumber != null  and colorNumber != ''">color_number = #{colorNumber},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-        </trim>
-        where state_id = #{stateId}
-    </update>
-
-    <delete id="deleteStateTypeById" parameterType="String">
-        delete from state_type where state_id = #{stateId}
-    </delete>
-
-    <delete id="deleteStateTypeByIds" parameterType="String">
-        delete from state_type where state_id in 
-        <foreach item="stateId" collection="array" open="(" separator="," close=")">
-            #{stateId}
-        </foreach>
-    </delete>
-    
-</mapper>
\ No newline at end of file
diff --git a/data-model/src/main/resources/mybatis/dataAuth/DataAuthMapper.xml b/data-model/src/main/resources/mybatis/dataAuth/DataAuthMapper.xml
deleted file mode 100644
index 0c052f7..0000000
--- a/data-model/src/main/resources/mybatis/dataAuth/DataAuthMapper.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.data.model.mapper.DataAuthMapper">
-  <update id="setUserDataAuth">
-    delete
-    from data_auth_user
-    where user_id = #{id}
-    and model_code = #{modelCode};
-    <foreach collection="ids" item="authId" separator=";">
-      insert into data_auth_user (user_id, node_id, model_code)
-      values (#{id},#{authId},#{modelCode})
-    </foreach>
-  </update>
-  <update id="setRoleDataAuth">
-    delete
-    from data_auth_role
-    where role_id = #{id}
-    and model_code = #{modelCode};
-    <foreach collection="ids" item="authId" separator=";">
-      insert into data_auth_role (role_id, node_id, model_code)
-      values (#{id},#{authId},#{modelCode})
-    </foreach>
-  </update>
-  <select id="getUserDataAuth" resultType="java.lang.String">
-    select node_id
-    from data_auth_user
-    where user_id = #{id}
-      and model_code = #{modelCode};
-  </select>
-  <select id="getRoleDataAuth" resultType="java.lang.String">
-    select node_id
-    from data_auth_role
-    where role_id = #{id}
-      and model_code = #{modelCode};
-  </select>
-</mapper>
diff --git a/data-model/src/main/resources/mybatis/energyindex/EnergyIndexMapper.xml b/data-model/src/main/resources/mybatis/energyindex/EnergyIndexMapper.xml
deleted file mode 100644
index 31c260e..0000000
--- a/data-model/src/main/resources/mybatis/energyindex/EnergyIndexMapper.xml
+++ /dev/null
@@ -1,332 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.data.model.mapper.EnergyIndexMapper">
-
-  <resultMap type="EnergyIndex" id="EnergyIndexResult">
-    <result property="indexId" column="index_id"/>
-    <result property="name" column="name"/>
-    <result property="code" column="code"/>
-    <result property="indexType" column="index_type"/>
-    <result property="indexCategory" column="index_category"/>
-    <result property="remark" column="remark"/>
-    <result property="unitId" column="unit_id"/>
-    <result property="meterId" column="meter_id"/>
-    <result property="orderNum" column="order_num"/>
-    <result property="equipment" column="equipment"/>
-    <result property="energyId" column="energy_id"/>
-    <result property="meterName" column="meter_name"/>
-  </resultMap>
-
-  <sql id="selectEnergyIndexVo">
-    select index_id,
-           name,
-           code,
-           index_type,
-           index_category,
-           remark,
-           unit_id,
-           meter_id,
-           order_num,
-           equipment,
-           energy_id
-    from energy_index
-  </sql>
-
-  <select id="selectEnergyIndexList" parameterType="EnergyIndex" resultMap="EnergyIndexResult">
-    select ni.index_id, name, code, index_type, remark, unit_id, index_category
-    from energy_index ei left join node_index ni on ei.index_id = ni.index_id
-    <where>
-      <if test="name != null  and name != ''">and name like concat('%', #{name}, '%')</if>
-      <if test="code != null  and code != ''">and code like concat('%', #{code}, '%')</if>
-      <if test="indexType != null">and index_type = #{indexType}</if>
-      <if test="nodeId != null  and nodeId != ''">and node_id = #{nodeId}</if>
-      <if test="indexCategory != null  and indexCategory != ''">and index_category =
-        #{indexCategory}
-      </if>
-    </where>
-    order by ei.order_num
-  </select>
-
-  <select id="selectEnergyIndexById" parameterType="String" resultMap="EnergyIndexResult">
-    <include refid="selectEnergyIndexVo"/>
-    where index_id = #{indexId}
-    order by order_num
-  </select>
-
-  <select id="selectEnergyIndexByIds" resultType="com.dingzhuo.energy.data.model.domain.EnergyIndex">
-    <include refid="selectEnergyIndexVo"/>
-    where
-        index_id IN
-        <foreach collection="list" item="indexId" open="(" separator="," close=")">
-          #{indexId}
-        </foreach>
-  </select>
-
-  <select id="energyIndexHasExist" resultType="java.lang.Integer">
-    select count(*)
-    from energy_index
-    where code = #{code};
-  </select>
-  <select id="energyIndexHasExistWhenUpdate" resultType="java.lang.Integer">
-    select count(*)
-    from energy_index
-    where code = #{code}
-      AND index_id != #{indexId};
-  </select>
-  <select id="getMeterIndex" resultMap="EnergyIndexResult">
-    <include refid="selectEnergyIndexVo"/>
-    where meter_id = #{meterId}
-    order by order_num
-  </select>
-  <select id="modelHasConfig" resultType="java.lang.Integer">
-    select count(*)
-    from model_node
-    where model_code = #{modelCode};
-  </select>
-  <select id="selectCollectIndex" resultMap="EnergyIndexResult">
-    <include refid="selectEnergyIndexVo"/>
-    where meter_id = #{deviceId}
-    order by order_num
-  </select>
-  <select id="getEnergyIndexByIds" resultMap="EnergyIndexResult">
-    <include refid="selectEnergyIndexVo"/>
-    where index_id in
-    <foreach item="indexId" collection="list" open="(" separator="," close=")">
-      #{indexId}
-    </foreach>
-    order by order_num
-  </select>
-  <select id="getEnergyIndexByCodes" resultMap="EnergyIndexResult">
-    <include refid="selectEnergyIndexVo"/>
-    where code in
-    <foreach item="indexCode" collection="list" open="(" separator="," close=")">
-      #{indexCode}
-    </foreach>
-    order by order_num
-  </select>
-  <select id="getIndexByNodeAndChildrenNode" resultMap="EnergyIndexResult">
-    select ei.*
-    from energy_index ei
-           left join node_index ni on ei.index_id = ni.index_id
-    where ni.node_id in (select node_id
-                         from model_node
-                         where address like (select address
-                                             from model_node
-                                             where node_id = #{nodeId}) || '%')
-    order by ei.order_num
-  </select>
-  <select id="searchIndexByNodeAndChildrenNode" resultMap="EnergyIndexResult">
-    select ei.*
-    from energy_index ei
-           left join node_index ni on ei.index_id = ni.index_id
-    where ni.node_id in (select node_id
-                         from model_node
-                         where address like (select address
-                                             from model_node
-                                             where node_id = #{nodeId}) || '%')
-      and (ei.code like concat('%', #{filter}, '%') or ei.name like concat('%', #{filter}, '%'))
-    order by ei.order_num
-  </select>
-  <select id="selectEnergyIndex" resultMap="EnergyIndexResult">
-    select ni.index_id, name, code, index_type, remark, unit_id, index_category
-    from energy_index ei left join node_index ni on ei.index_id = ni.index_id
-    <where>
-      <if test="codeOrName != null  and codeOrName != ''">and (name like concat('%', #{codeOrName},
-        '%') or code like concat('%', #{codeOrName}, '%'))
-      </if>
-      <if test="nodeId != null  and nodeId != ''">and node_id = #{nodeId}</if>
-      <if test="indexType != null">and index_type = #{indexType}</if>
-      <if test="indexCategory != null  and indexCategory != ''">and index_category =
-        #{indexCategory}
-      </if>
-    </where>
-    order by ei.order_num
-  </select>
-
-  <insert id="insertEnergyIndex" parameterType="EnergyIndex">
-    insert into energy_index
-    <trim prefix="(" suffix=")" suffixOverrides=",">
-      <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">index_id,</if>
-      <if test="energyIndex.name != null  and energyIndex.name != ''">name,</if>
-      <if test="energyIndex.code != null  and energyIndex.code != ''">code,</if>
-      <if test="energyIndex.indexType != null">index_type,</if>
-      <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
-        index_category,
-      </if>
-      <if test="energyIndex.remark != null  and energyIndex.remark != ''">remark,</if>
-      <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">unit_id,</if>
-      <if test="energyIndex.orderNum != null">order_num,</if>
-      <if test="energyIndex.equipment != null">equipment,</if>
-      <if test="energyIndex.energyId != null">energy_id,</if>
-    </trim>
-    <trim prefix="values (" suffix=");" suffixOverrides=",">
-      <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">
-        #{energyIndex.indexId},
-      </if>
-      <if test="energyIndex.name != null  and energyIndex.name != ''">#{energyIndex.name},</if>
-      <if test="energyIndex.code != null  and energyIndex.code != ''">#{energyIndex.code},</if>
-      <if test="energyIndex.indexType != null">
-        #{energyIndex.indexType},
-      </if>
-      <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
-        #{energyIndex.indexCategory},
-      </if>
-      <if test="energyIndex.remark != null  and energyIndex.remark != ''">#{energyIndex.remark},
-      </if>
-      <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">#{energyIndex.unitId},
-      </if>
-      <if test="energyIndex.orderNum != null">#{energyIndex.orderNum},
-      </if>
-      <if test="energyIndex.equipment != null">#{energyIndex.equipment},
-      </if>
-      <if test="energyIndex.energyId != null">#{energyIndex.energyId},
-      </if>
-    </trim>
-    insert into node_index (node_id, index_id) values (#{nodeId}, #{energyIndex.indexId});
-  </insert>
-  <insert id="insertEnergyIndices">
-    <foreach collection="list" item="energyIndex" separator=";">
-      insert into energy_index
-      <trim prefix="(" suffix=")" suffixOverrides=",">
-        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">index_id,</if>
-        <if test="energyIndex.name != null  and energyIndex.name != ''">name,</if>
-        <if test="energyIndex.code != null  and energyIndex.code != ''">code,</if>
-        <if test="energyIndex.indexType != null">index_type,</if>
-        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
-          index_category,
-        </if>
-        <if test="energyIndex.remark != null  and energyIndex.remark != ''">remark,</if>
-        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">unit_id,</if>
-        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">meter_id,</if>
-        <if test="energyIndex.orderNum != null">order_num,</if>
-      </trim>
-      <trim prefix="values (" suffix=")" suffixOverrides=",">
-        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">
-          #{energyIndex.indexId},
-        </if>
-        <if test="energyIndex.name != null  and energyIndex.name != ''">#{energyIndex.name},</if>
-        <if test="energyIndex.code != null  and energyIndex.code != ''">#{energyIndex.code},</if>
-        <if test="energyIndex.indexType != null">
-          #{energyIndex.indexType},
-        </if>
-        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
-          #{energyIndex.indexCategory},
-        </if>
-        <if test="energyIndex.remark != null  and energyIndex.remark != ''">#{energyIndex.remark},
-        </if>
-        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">#{energyIndex.unitId},
-        </if>
-        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">
-          #{energyIndex.meterId},
-        </if>
-        <if test="energyIndex.orderNum != null">#{energyIndex.orderNum},</if>
-      </trim>
-    </foreach>
-  </insert>
-  <insert id="saveEnergyIndex">
-    <foreach collection="list" item="energyIndex" separator=";">
-      insert into energy_index
-      <trim prefix="(" suffix=")" suffixOverrides=",">
-        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">index_id,</if>
-        <if test="energyIndex.name != null  and energyIndex.name != ''">name,</if>
-        <if test="energyIndex.code != null  and energyIndex.code != ''">code,</if>
-        <if test="energyIndex.indexType != null">index_type,</if>
-        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
-          index_category,
-        </if>
-        <if test="energyIndex.remark != null  and energyIndex.remark != ''">remark,</if>
-        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">unit_id,</if>
-        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">meter_id,</if>
-        <if test="energyIndex.orderNum != null">order_num,</if>
-      </trim>
-      <trim prefix="values (" suffix=")" suffixOverrides=",">
-        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">
-          #{energyIndex.indexId},
-        </if>
-        <if test="energyIndex.name != null  and energyIndex.name != ''">#{energyIndex.name},</if>
-        <if test="energyIndex.code != null  and energyIndex.code != ''">#{energyIndex.code},</if>
-        <if test="energyIndex.indexType != null">
-          #{energyIndex.indexType},
-        </if>
-        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
-          #{energyIndex.indexCategory},
-        </if>
-        <if test="energyIndex.remark != null  and energyIndex.remark != ''">#{energyIndex.remark},
-        </if>
-        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">#{energyIndex.unitId},
-        </if>
-        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">
-          #{energyIndex.meterId},
-        </if>
-        <if test="energyIndex.orderNum != null">#{energyIndex.orderNum},</if>
-      </trim>
-      ;
-      insert into node_index (node_id, index_id) values (#{energyIndex.nodeId},
-      #{energyIndex.indexId});
-    </foreach>
-  </insert>
-
-  <update id="updateEnergyIndex" parameterType="EnergyIndex">
-    update energy_index
-    <trim prefix="SET" suffixOverrides=",">
-      <if test="name != null  and name != ''">name = #{name},</if>
-      <if test="code != null  and code != ''">code = #{code},</if>
-      <if test="indexType != null">index_type = #{indexType},</if>
-      <if test="indexCategory != null  and indexCategory != ''">index_category = #{indexCategory},
-      </if>
-      <if test="remark != null  and remark != ''">remark = #{remark},</if>
-      <if test="unitId != null  and unitId != ''">unit_id = #{unitId},</if>
-      <if test="orderNum != null">order_num = #{orderNum},</if>
-      <if test="equipment != null">equipment = #{equipment},</if>
-      <if test="energyId != null">energy_id=#{energyId},</if>
-    </trim>
-    where index_id = #{indexId}
-  </update>
-
-  <delete id="deleteEnergyIndexByIds" parameterType="String">
-    delete from energy_index where index_id in
-    <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
-      #{indexId}
-    </foreach>;
-    delete from node_index where node_id = #{nodeId} and index_id in
-    <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
-      #{indexId}
-    </foreach>;
-  </delete>
-  <delete id="deleteIndexByMeterId">
-    delete
-    from energy_index
-    where meter_id = #{meterId}
-  </delete>
-  <delete id="removeNodeIndex">
-    delete from node_index where node_id = #{nodeId} and index_id in
-    <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
-      #{indexId}
-    </foreach>;
-  </delete>
-
-  <select id="getEnergyIndexMeterByCodes" resultMap="EnergyIndexResult">
-    select ei.index_id,
-        ei.name,
-        ei.code,
-        ei.index_type,
-        ei.index_category,
-        ei.remark,
-        ei.unit_id,
-        ei.meter_id,
-        ei.order_num,
-        ei.equipment,
-        ei.energy_id,
-        meter_name
-        from energy_index as ei,meter_implement as me
-    where ei.code in
-    <foreach item="indexCode" collection="list" open="(" separator="," close=")">
-      #{indexCode}
-    </foreach>
-    and ei.meter_id = me.id
-    order by ei.order_num
-  </select>
-
-</mapper>
diff --git a/data-monitoring/pom.xml b/data-monitoring/pom.xml
deleted file mode 100644
index e622472..0000000
--- a/data-monitoring/pom.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <parent>
-    <artifactId>energy-management</artifactId>
-    <groupId>com.dingzhuo</groupId>
-    <version>1.0.0</version>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-
-  <artifactId>data-monitoring</artifactId>
-  <dependencies>
-      <dependency>
-          <groupId>com.dingzhuo</groupId>
-          <artifactId>basic</artifactId>
-          <version>${project.version}</version>
-      </dependency>
-      <dependency>
-          <groupId>cn.hutool</groupId>
-          <artifactId>hutool-core</artifactId>
-          <version>5.3.8</version>
-      </dependency>
-      <dependency>
-          <groupId>com.dingzhuo</groupId>
-          <artifactId>data-model</artifactId>
-          <version>1.0.0</version>
-          <scope>compile</scope>
-      </dependency>
-      <dependency>
-          <groupId>com.dingzhuo</groupId>
-          <artifactId>data-service</artifactId>
-          <version>1.0.0</version>
-          <scope>compile</scope>
-      </dependency>
-  </dependencies>
-</project>
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/controller/AlarmItemController.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/controller/AlarmItemController.java
deleted file mode 100644
index f5f379b..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/controller/AlarmItemController.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.controller;
-
-import java.util.List;
-import java.util.Map;
-
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem;
-import com.dingzhuo.energy.data.monitoring.alarm.service.IAlarmItemService;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * 棰勬姤璀﹁缃瓹ontroller
- *
- * @author sys
- * @date 2020-03-02
- */
-@RestController
-@RequestMapping("/system/alarmitem")
-public class AlarmItemController extends BaseController {
-
-    @Autowired
-    private IAlarmItemService alarmItemService;
-
-    @Autowired
-    private TokenService tokenService;
-
-    /**
-     * 鏌ヨ棰勬姤璀﹁缃垪琛�
-     */
-    @PreAuthorize("@ss.hasPermi('system:alarmitem:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(AlarmItem alarmItem) {
-        startPage();
-        List<AlarmItem> list = alarmItemService.selectAlarmItemList(alarmItem);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭棰勬姤璀﹁缃垪琛�
-     */
-    @PreAuthorize("@ss.hasPermi('system:alarmitem:export')")
-    @Log(title = "棰勬姤璀﹁缃�", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(AlarmItem alarmItem) {
-        List<AlarmItem> list = alarmItemService.selectAlarmItemList(alarmItem);
-        ExcelUtil<AlarmItem> util = new ExcelUtil<AlarmItem>(AlarmItem.class);
-        return util.exportExcel(list, "set");
-    }
-
-    /**
-     * 鑾峰彇棰勬姤璀﹁缃缁嗕俊鎭�
-     */
-    @PreAuthorize("@ss.hasPermi('system:alarmitem:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id) {
-        return AjaxResult.success(alarmItemService.selectAlarmItemById(id));
-    }
-
-    /**
-     * 鏂板棰勬姤璀﹁缃�
-     */
-    @PreAuthorize("@ss.hasPermi('system:alarmitem:add')")
-    @Log(title = "棰勬姤璀﹁缃�", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody AlarmItem alarmItem) {
-        return toAjax(alarmItemService.insertAlarmItem(alarmItem));
-    }
-
-    /**
-     * 淇敼棰勬姤璀﹁缃惎鍋滅姸鎬�
-     */
-    @PreAuthorize("@ss.hasPermi('system:alarmitem:edit')")
-    @Log(title = "棰勬姤璀﹁缃�", businessType = BusinessType.UPDATE)
-    @PostMapping(value = "/startstop/{flag}")
-    public AjaxResult edit(@PathVariable String flag, @RequestBody String[] ids) {
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        String username = loginUser.getUsername();
-        return toAjax(alarmItemService.updateStartStop(ids, flag, username));
-    }
-
-    /**
-     * 鍒犻櫎棰勬姤璀﹁缃�
-     */
-    @PreAuthorize("@ss.hasPermi('system:alarmitem:remove')")
-    @Log(title = "棰勬姤璀﹁缃�", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids) {
-        return toAjax(alarmItemService.deleteAlarmItemByIds(ids));
-    }
-
-    /**
-     * 鑾峰彇棰勬姤璀﹁缃缁嗕俊鎭�
-     */
-    @PreAuthorize("@ss.hasPermi('system:alarmitem:query1')")
-    @GetMapping(value = "/getSettingInfo/{id}")
-    public AjaxResult getSettingInfo(@PathVariable("id") String id) {
-        return AjaxResult.success(alarmItemService.selectAlarmItemtingById(id));
-    }
-
-    /**
-     * 鑾峰彇涓昏〃姣忚鍚仠鐘舵�佸��
-     */
-    @PreAuthorize("@ss.hasPermi('system:alarmitem:query1')")
-    @GetMapping(value = "/getStartStop/{indexid}")
-    public AjaxResult getStartStop(@PathVariable("indexid") String indexid) {
-        return AjaxResult.success(alarmItemService.getStartStop(indexid));
-    }
-
-    /**
-     * 淇敼寮瑰嚭妗嗛檺鍊�
-     */
-    @PreAuthorize("@ss.hasPermi('system:alarmitem:edit')")
-    @Log(title = "淇敼寮瑰嚭妗嗛檺鍊�", businessType = BusinessType.UPDATE)
-    @PutMapping(value = "/editLimitVal")
-    public AjaxResult editLimitVal(@RequestBody List<Map<String, Object>> listMap) {
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        String username = loginUser.getUsername();
-        return toAjax(alarmItemService.updateLimitVal(listMap, username));
-    }
-
-    /**
-     * 鏌ヨ棰刬d涓嬭缃檺鍊肩殑鏁伴噺
-     */
-    @PreAuthorize("@ss.hasPermi('system:alarmitem:query1')")
-    @GetMapping(value = "/getSettingCount/{id}")
-    public AjaxResult getSettingCount(@PathVariable("id") String[] id) {
-        return AjaxResult.success(alarmItemService.getSettingCount(id));
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/controller/HistoryAlarmController.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/controller/HistoryAlarmController.java
deleted file mode 100644
index 4fd4b2b..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/controller/HistoryAlarmController.java
+++ /dev/null
@@ -1,178 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.controller;
-
-
-import com.alibaba.fastjson.JSONObject;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.data.model.domain.DaqTemplate;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.HistoryTable;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.JkHistoryAlarm;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.JkRealTimeAlarmList;
-import com.dingzhuo.energy.dataservice.domain.RetrievalModes;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import com.dingzhuo.energy.dataservice.service.RealtimeDatabaseService;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.HistoryAlarm;
-import com.dingzhuo.energy.data.monitoring.alarm.service.IHistoryAlarmService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.commons.lang3.ObjectUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.math.BigDecimal;
-import java.text.DecimalFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-/**
- * 鎶ヨ鐩戞祴 涓�  鍘嗗彶鎶ヨ鐩戞祴 Controller
- *
- * @author zhaowei
- * @date 2020-02-12
- */
-@Api(value = "鎶ヨ妫�娴嬧�斿巻鍙叉姤璀︽娴�",tags = {"鎶ヨ妫�娴�"})
-@RestController
-@RequestMapping("/energyAlarm/historicalAlarm")
-public class HistoryAlarmController extends BaseController
-{
-    @Autowired
-    private IHistoryAlarmService iHistoryAlarmService;
-
-    @Autowired
-    private TokenService tokenService;
-
-    @Autowired
-    private RealtimeDatabaseService realtimeDatabaseService;
-
-    /**
-     * 鍘嗗彶鎶ヨ 椤甸潰 鏍规嵁 鑺傜偣鐩綍鍜� 鏉′欢鏌ヨ
-     */
-    @ApiOperation("鍘嗗彶鎶ヨ鏌ヨ")
-//    @PreAuthorize("@ss.hasPermi('energyAlarm:historicalAlarm:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(JkHistoryAlarm jkHistoryAlarm)
-    {
-        startPage();
-        List<JkHistoryAlarm> list = iHistoryAlarmService.selectJkHistoryAlarmList(jkHistoryAlarm);
-        return getDataTable(list);
-    }
-    /**
-     * 瀵煎嚭鍘嗗彶鎶ヨ鐩戞帶鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('energyAlarm:historicalAlarm:export')")
-    @Log(title = "鍘嗗彶鎶ヨ", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(JkHistoryAlarm jkHistoryAlarm)
-    {
-        List<JkHistoryAlarm> list = iHistoryAlarmService.selectJkHistoryAlarmListExcel(jkHistoryAlarm);
-        ExcelUtil<JkHistoryAlarm> util = new ExcelUtil<JkHistoryAlarm>(JkHistoryAlarm.class);
-        return util.exportExcel(list, "alarm");
-    }
-
-    /**
-     * 鍘嗗彶鎶ヨ 缁勪欢 鍘嗗彶鏁版嵁鑾峰彇
-     */
-    @ApiOperation("鍘嗗彶鎶ヨ鏁版嵁鏌ヨ")
-    @PreAuthorize("@ss.hasPermi('energyAlarm:realTimeAlarm:list')")
-    @GetMapping("/historyData/{code}/{start}/{end}/{pointCount}")
-    public AjaxResult historyDataList(@PathVariable("code") String code, @PathVariable("start") String start, @PathVariable("end") String end, @PathVariable("pointCount") String pointCount)
-    {
-        int count = Integer.parseInt(pointCount);
-        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        Date sdate = null;
-        Date edate = null;
-        try {
-            sdate = formatter.parse(start);
-            edate = formatter.parse(end);
-            List<TagValue> TagValuelist = realtimeDatabaseService.retrieve(code,sdate,edate, RetrievalModes.BestFit,count);
-            System.out.println("TagValuelist>>>>>>>>>"+TagValuelist);
-            System.out.println("TagValuelist size>>>>>>>>>"+TagValuelist.size());
-            for(TagValue tagVal:TagValuelist){
-                System.out.println("TagValue>>>>>>>>>"+tagVal);
-                if(ObjectUtils.isEmpty(tagVal)){
-                    tagVal = new TagValue();
-                }
-                tagVal.setShowDataTime("yyyy-MM-dd HH:mm:ss");
-                if(ObjectUtils.isEmpty(tagVal.getValue())){
-                    tagVal.setValue(0.00);
-                }else{
-                    BigDecimal b   =   new   BigDecimal(tagVal.getValue());
-                    tagVal.setValue( b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue());
-                }
-
-            }
-            return AjaxResult.success(TagValuelist);
-        } catch (ParseException e) {
-            e.printStackTrace();
-            return AjaxResult.success("鏁版嵁鏌ヨ澶辫触");
-        }
-//        Collections.reverse(TagValuelist);
-
-    }
-
-    /**
-     * 鍘嗗彶鎶ヨ 缁勪欢 鍘嗗彶鎶ヨ琛ㄦ牸瀵煎嚭
-     */
-    @ApiOperation("鍘嗗彶鎶ヨ琛ㄦ牸瀵煎嚭")
-    @PreAuthorize("@ss.hasPermi('energyAlarm:realTimeAlarm:list')")
-    @GetMapping("/historyDataExcel/{code}/{start}/{end}/{pointCount}/{indexName}/{indexUnit}")
-    public AjaxResult historyDataExcel(@PathVariable("code") String code,
-                                       @PathVariable("start") String start,
-                                       @PathVariable("end") String end,
-                                       @PathVariable("pointCount") String pointCount,
-                                       @PathVariable("indexName") String indexName,
-                                       @PathVariable("indexUnit") String indexUnit)
-    {
-        int count = Integer.parseInt(pointCount);
-        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        Date sdate = null;
-        Date edate = null;
-        try {
-            sdate = formatter.parse(start);
-            edate = formatter.parse(end);
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-        List<TagValue> tagValuelist = realtimeDatabaseService.retrieve(code,sdate,edate, RetrievalModes.BestFit,count);
-        List<HistoryTable> historyTableList = new ArrayList<>();
-        for(TagValue tagVal:tagValuelist)
-        {
-            tagVal.setShowDataTime("yyyy-MM-dd HH:mm:ss");
-            HistoryTable hh = new HistoryTable();
-            hh.setCode(tagVal.getTagCode());
-            hh.setAlarmTime(tagVal.getShowDataTime());
-            BigDecimal b   =   new   BigDecimal(tagVal.getValue());
-            hh.setEarlyWarningValue(b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue());
-            hh.setIndexName(indexName);
-            hh.setUnitName(indexUnit);
-            historyTableList.add(hh);
-        }
-        ExcelUtil<HistoryTable> util = new ExcelUtil<HistoryTable>(HistoryTable.class);
-        return util.exportExcel(historyTableList, "template");
-    }
-
-    /**
-     * 瀹炴椂妫�娴� 鍔熻兘 鐨勫 sheet椤�  灞曠ず 缁勬�佸浘  娴嬬偣 鎶ヨ淇℃伅
-     */
-    @ApiOperation("瀹炴椂妫�娴嬫姤璀︿俊鎭煡璇�")
-    @GetMapping("/listNote")
-    public TableDataInfo listNote(JkHistoryAlarm jkHistoryAlarm)
-    {
-        startPage();
-        List<JkHistoryAlarm> list = iHistoryAlarmService.selectHistoryAlarmNoteList(jkHistoryAlarm);
-        return getDataTable(list);
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/controller/RealTimeAlarmController.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/controller/RealTimeAlarmController.java
deleted file mode 100644
index 4562f83..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/controller/RealTimeAlarmController.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.controller;
-
-
-import com.dingzhuo.energy.data.monitoring.alarm.domain.JkRealTimeAlarmList;
-import com.dingzhuo.energy.dataservice.domain.RetrievalModes;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import com.dingzhuo.energy.dataservice.service.RealtimeDatabaseService;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.data.monitoring.alarm.service.IRealtimeAlarmService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.commons.lang3.ObjectUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-
-import java.math.BigDecimal;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * 鎶ヨ鐩戞祴 涓� 瀹炴椂鎶ヨ鐩戞祴 Controller
- *
- * @author zhaowei
- * @date 2020-02-12
- */
-@Api("鎶ヨ妫�娴嬧�斺�斿疄鏃舵姤璀︽娴�")
-@RestController
-@RequestMapping("/energyAlarm/realTimeAlarm")
-public class RealTimeAlarmController extends BaseController
-{
-    @Autowired
-    private IRealtimeAlarmService iRealtimeAlarmService;
-
-    @Autowired
-    private RealtimeDatabaseService realtimeDatabaseService;
-
-    @Autowired
-    private TokenService tokenService;
-
-
-    /**
-     * 瀹炴椂鎶ヨ 椤甸潰 鏍规嵁 鑺傜偣鐩綍鍜� 鏉′欢鏌ヨ
-     */
-//    @ApiOperation("瀹炴椂鎶ヨ鏌ヨ")
-    @PreAuthorize("@ss.hasPermi('energyAlarm:realTimeAlarm:list')")
-    @GetMapping("/list")
-    public AjaxResult list(JkRealTimeAlarmList jkRealTimeAlarmList)
-    {
-        //startPage();
-        List<JkRealTimeAlarmList> list = iRealtimeAlarmService.selectRealtimeAlarmJkList(jkRealTimeAlarmList);
-        //return getDataTable(list);
-        return AjaxResult.success(list);
-    }
-
-    /**
-     * 瀹炴椂鎶ヨ 缁勪欢 瀹炴椂鏁版嵁鑾峰彇
-     */
-//    @ApiOperation("瀹炴椂鎶ヨ鏌ヨ")
-    @PreAuthorize("@ss.hasPermi('energyAlarm:realTimeAlarm:list')")
-    @GetMapping("/liveHistoryData/{code}/{minute}/{pointCount}")
-    public AjaxResult liveList(@PathVariable("code") String code,@PathVariable("minute") String minute,@PathVariable("pointCount") String pointCount)
-    {
-        int time = Integer.parseInt(minute);
-        int count = Integer.parseInt(pointCount);
-        Calendar c = Calendar.getInstance();
-        Date  endTime= c.getTime();
-        c.add(Calendar.MINUTE, -time);
-        Date startTime = c.getTime();
-        List<TagValue> TagValuelist = realtimeDatabaseService.retrieve(code,startTime,endTime,RetrievalModes.BestFit,count);
-        for(TagValue tagVal:TagValuelist)
-        {
-            if(ObjectUtils.isEmpty(tagVal)){
-                tagVal = new TagValue();
-            }
-            tagVal.setShowDataTime("HH:mm:ss");
-            if(ObjectUtils.isEmpty(tagVal.getValue())){
-                tagVal.setValue(0.00);
-            }else{
-                BigDecimal b   =   new   BigDecimal(tagVal.getValue());
-                tagVal.setValue( b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue());
-            }
-
-        }
-//        Collections.reverse(TagValuelist);
-        return AjaxResult.success(TagValuelist);
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/AlarmItem.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/AlarmItem.java
deleted file mode 100644
index ad0e34b..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/AlarmItem.java
+++ /dev/null
@@ -1,182 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 棰勬姤璀﹁缃璞� warn_set
- *
- * @author sys
- * @date 2020-03-02
- */
-public class AlarmItem extends BaseEntity {
-
-  private static final long serialVersionUID = 1L;
-
-  /**
-   * 涓婚敭id
-   */
-  private String id;
-
-  /**
-   * 鎸囨爣鐨勪富閿甶d
-   */
-  @Excel(name = "鎸囨爣鐨勪富閿甶d")
-  private String dwid;
-
-  /**
-   * 鎸囨爣缂栫爜
-   */
-  private String indexCode;
-
-  /**
-   * 鍚仠鐘舵�� 1鍚姩2鍋滄
-   */
-  @Excel(name = "鍚仠鐘舵�� 1鍚姩2鍋滄")
-  private String startStop;
-
-  /**
-   * 鏃舵
-   */
-  @Excel(name = "鏃舵")
-  private String timeSlot;
-
-  /**
-   * 闄�   1涓婇檺2涓嬮檺
-   */
-  @Excel(name = "闄�   1涓婇檺2涓嬮檺")
-  private String limitType;
-
-  /**
-   * 闄愬��
-   */
-  @Excel(name = "闄愬��")
-  private String limitVal;
-
-  /**
-   * 鎶ヨ绾у埆
-   */
-  @Excel(name = "鎶ヨ绾у埆")
-  private String alarmLevel;
-
-  public String getAlarmCode() {
-    return alarmCode;
-  }
-
-  public void setAlarmCode(String alarmCode) {
-    this.alarmCode = alarmCode;
-  }
-
-  /**
-   * 鎶ヨ缂栫爜鎷兼帴锛宨ndexid:time_slot:limit_type
-   */
-  private String alarmCode;
-
-  /**
-   * nodeid
-   */
-  @Excel(name = "鑺傜偣ID")
-  private String nodeId;
-
-  private String calcText;
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public String getId() {
-    return id;
-  }
-
-  public void setDwid(String dwid) {
-    this.dwid = dwid;
-  }
-
-  public String getDwid() {
-    return dwid;
-  }
-
-  public void setStartStop(String startStop) {
-    this.startStop = startStop;
-  }
-
-  public String getStartStop() {
-    return startStop;
-  }
-
-  public void setTimeSlot(String timeSlot) {
-    this.timeSlot = timeSlot;
-  }
-
-  public String getTimeSlot() {
-    return timeSlot;
-  }
-
-  public void setLimitType(String limitType) {
-    this.limitType = limitType;
-  }
-
-  public String getLimitType() {
-    return limitType;
-  }
-
-  public void setLimitVal(String limitVal) {
-    this.limitVal = limitVal;
-  }
-
-  public String getLimitVal() {
-    return limitVal;
-  }
-
-  public void setAlarmLevel(String alarmLevel) {
-    this.alarmLevel = alarmLevel;
-  }
-
-  public String getAlarmLevel() {
-    return alarmLevel;
-  }
-
-  public void setNodeId(String nodeId) {
-    this.nodeId = nodeId;
-  }
-
-  public String getNodeId() {
-    return nodeId;
-  }
-
-  @Override
-  public String toString() {
-    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
-        .append("id", getId())
-        .append("createTime", getCreateTime())
-        .append("createBy", getCreateBy())
-        .append("updateTime", getUpdateTime())
-        .append("updateBy", getUpdateBy())
-        .append("dwid", getDwid())
-        .append("startStop", getStartStop())
-        .append("timeSlot", getTimeSlot())
-        .append("limitType", getLimitType())
-        .append("limitVal", getLimitVal())
-        .append("alarmLevel", getAlarmLevel())
-        .append("nodeId", getNodeId())
-        .toString();
-  }
-
-    public String getCalcText() {
-        return calcText;
-    }
-
-    public void setCalcText(String calcText) {
-        this.calcText = calcText;
-    }
-
-  public String getIndexCode() {
-    return indexCode;
-  }
-
-  public void setIndexCode(String indexCode) {
-    this.indexCode = indexCode;
-  }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/AlarmJudgeDirection.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/AlarmJudgeDirection.java
deleted file mode 100644
index 098ed3e..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/AlarmJudgeDirection.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.domain;
-
-public enum AlarmJudgeDirection {
-  /**
-   * 澶т簬
-   */
-  G(">"),
-  /**
-   * 澶т簬绛変簬
-   */
-  GE(">="),
-  /**
-   * 灏忎簬
-   */
-  L("<"),
-  /**
-   * 灏忎簬绛変簬
-   */
-  LE("<="),
-  /**
-   * 绛変簬
-   */
-  E("=");
-
-  private String code;
-
-  AlarmJudgeDirection(String code) {
-    this.code = code;
-  }
-
-  public static AlarmJudgeDirection value(String code) {
-    switch (code) {
-      case ">":
-        return AlarmJudgeDirection.G;
-      case ">=":
-        return AlarmJudgeDirection.GE;
-      case "<":
-        return AlarmJudgeDirection.L;
-      case "<=":
-        return AlarmJudgeDirection.LE;
-      case "=":
-        return AlarmJudgeDirection.E;
-      default:
-        return AlarmJudgeDirection.E;
-    }
-  }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/HistoryAlarm.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/HistoryAlarm.java
deleted file mode 100644
index 9375a94..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/HistoryAlarm.java
+++ /dev/null
@@ -1,171 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.domain;
-
-import com.dingzhuo.energy.dataservice.domain.Quality;
-import java.util.Date;
-
-public class HistoryAlarm {
-
-  /**
-   * 涓婚敭
-   */
-  private String id;
-  /**
-   * 鎸囨爣涓婚敭
-   */
-  private String indexId;
-  /**
-   * 鎸囨爣鍚嶇О
-   */
-  private String indexName;
-  private String itemId;
-  /**
-   * 鎶ヨ閰嶇疆椤�
-   */
-  private AlarmItem alarmItem;
-  /**
-   * 闄愬��
-   */
-  private double limitingValue;
-  /**
-   * 鎶ヨ鏃剁殑鍊�
-   */
-  private double alarmValue;
-  /**
-   * 鎶ヨ鏄暟鎹川閲�
-   */
-  private Quality alarmValueQuality;
-  /**
-   * 鎶ヨ浜嬩欢
-   */
-  private Date beginTime;
-  /**
-   * 鎶ヨ缁撴潫鏃堕棿
-   */
-  private Date endTime;
-  private String timeCode;
-  /**
-   * 鎶ヨ鎸佺画鏃堕棿
-   */
-  private double duration;
-  /**
-   * 鎶ヨ鎻忚堪
-   */
-  private String content;
-
-  public String getAlarmCode() {
-    return alarmCode;
-  }
-
-  public void setAlarmCode(String alarmCode) {
-    this.alarmCode = alarmCode;
-  }
-
-  /**
-   * 鎶ヨ缂栫爜鎷兼帴锛宨ndexid:time_slot:limit_type
-   */
-  private String alarmCode;
-
-  public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public String getIndexId() {
-    return indexId;
-  }
-
-  public void setIndexId(String indexId) {
-    this.indexId = indexId;
-  }
-
-  public String getIndexName() {
-    return indexName;
-  }
-
-  public void setIndexName(String indexName) {
-    this.indexName = indexName;
-  }
-
-  public AlarmItem getAlarmItem() {
-    return alarmItem;
-  }
-
-  public void setAlarmItem(AlarmItem alarmItem) {
-    this.alarmItem = alarmItem;
-  }
-
-  public double getLimitingValue() {
-    return limitingValue;
-  }
-
-  public void setLimitingValue(double limitingValue) {
-    this.limitingValue = limitingValue;
-  }
-
-  public double getAlarmValue() {
-    return alarmValue;
-  }
-
-  public void setAlarmValue(double alarmValue) {
-    this.alarmValue = alarmValue;
-  }
-
-  public Quality getAlarmValueQuality() {
-    return alarmValueQuality;
-  }
-
-  public void setAlarmValueQuality(Quality alarmValueQuality) {
-    this.alarmValueQuality = alarmValueQuality;
-  }
-
-  public Date getBeginTime() {
-    return beginTime;
-  }
-
-  public void setBeginTime(Date beginTime) {
-    this.beginTime = beginTime;
-  }
-
-  public Date getEndTime() {
-    return endTime;
-  }
-
-  public void setEndTime(Date endTime) {
-    this.endTime = endTime;
-  }
-
-  public double getDuration() {
-    return duration;
-  }
-
-  public void setDuration(double duration) {
-    this.duration = duration;
-  }
-
-  public String getContent() {
-    return content;
-  }
-
-  public void setContent(String content) {
-    this.content = content;
-  }
-
-  public String getItemId() {
-    return itemId;
-  }
-
-  public void setItemId(String itemId) {
-    this.itemId = itemId;
-  }
-
-  public String getTimeCode() {
-    return timeCode;
-  }
-
-  public void setTimeCode(String timeCode) {
-    this.timeCode = timeCode;
-  }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/HistoryTable.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/HistoryTable.java
deleted file mode 100644
index f1885ea..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/HistoryTable.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.domain;
-
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-
-/**
- * 鍘嗗彶琛ㄦ牸瀵煎嚭
- *
- * @author
- * @date 2020-03-20
- */
-public class HistoryTable {
-
-    /**
-     * 鎶ヨ鏃堕棿
-     */
-    @Excel(name = "鎶ヨ鏃堕棿",width = 30)
-    private String alarmTime;
-
-    /**
-     * 鎸囨爣缂栫爜
-     */
-   @Excel(name = "鎸囨爣缂栫爜")
-   private String code;
-
-    /**
-     * 鎸囨爣鍚嶇О
-     */
-    @Excel(name = "鎸囨爣鍚嶇О")
-    private String indexName;
-
-    /**
-     * 鍗曚綅鍚嶇О
-     */
-    @Excel(name = "鍗曚綅鍚嶇О")
-    private String unitName;
-
-    /**
-     * 瀹炴椂鍊�
-     */
-    @Excel(name = "瀹炴椂鍊�")
-    private Double earlyWarningValue;
-
-
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getAlarmTime() {
-        return alarmTime;
-    }
-
-    public void setAlarmTime(String alarmTime) {
-        this.alarmTime = alarmTime;
-    }
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-
-    public String getUnitName() {
-        return unitName;
-    }
-
-    public void setUnitName(String unitName) {
-        this.unitName = unitName;
-    }
-
-    public Double getEarlyWarningValue() {
-        return earlyWarningValue;
-    }
-
-    public void setEarlyWarningValue(Double earlyWarningValue) {
-        this.earlyWarningValue = earlyWarningValue;
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/JkHistoryAlarm.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/JkHistoryAlarm.java
deleted file mode 100644
index cde701a..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/JkHistoryAlarm.java
+++ /dev/null
@@ -1,248 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.domain;
-
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import com.fasterxml.jackson.annotation.JsonFormat;
-
-import java.util.Date;
-
-
-public class JkHistoryAlarm extends BaseEntity {
-  private static final long serialVersionUID = 1L;
-
-  /**
-   * 妯″瀷鑺傜偣鍚嶇О
-   * */
-  @Excel(name = "鍗曚綅鍚嶇О")
-  private String modelName;
-  /**
-   * 鎸囨爣缂栧彿
-   * */
-  @Excel(name = "鎸囨爣缂栫爜")
-  private String code;
-  /**
-   * 鎸囨爣鍚嶇О*/
-  @Excel(name = "鎸囨爣鍚嶇О")
-  private String indexName;
-  /**
-   * 鎸囨爣鍗曚綅绫诲瀷ID*/
-  @Excel(name = "鎸囨爣鍗曚綅")
-  private String unitId;
-  /**
-   * 鎶ヨ绾у埆*/
-  @Excel(name = "鎶ヨ绾у埆")
-  private String alarmLevel;
-  /**
-   * 闄愬�肩被鍨�
-   * */
-  @Excel(name = "闄愬�肩被鍨�")
-  private String limitType;
-  /**
-   * 闄愬��
-   * */
-  @Excel(name = "闄愬��")
-  private double limitingValue;
-  /**
-   * 鎶ヨ鍊�
-   * */
-  @Excel(name = "鎶ヨ鍊�")
-  private double alarmValue;
-  /**
-   * 鎸囨爣涓婚敭id
-   * */
-  private String indexId;
-  /**
-   * 妯″瀷鑺傜偣涓婚敭id
-   * */
-  private String nodeId;
-  /**
-   * 妯″瀷鏌ヨ灞傜骇鏍囧織 B鏈骇  ALL鍖呭惈涓嬬骇
-   * */
-  private String eierarchyFlag;
-  /**
-   * 鎸囨爣绫诲瀷 COLLECT閲囬泦鐐�  STATISTIC鎸囨爣
-   * */
-  private String indexType;
-
-  /** 鎶ヨ鏃堕暱 */
-  @Excel(name = "鎸佺画鏃堕暱(鍒嗛挓)")
-  private Double duration;
-
-  /**
-   * 鎶ヨ寮�濮嬫椂闂�
-   */
-  @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
-  @Excel(name = "鎶ヨ寮�濮嬫椂闂�", dateFormat = "yyyy-MM-dd HH:mm:ss")
-  private Date alarmBeginTime;
-
-  /**
-   * 鎶ヨ缁撴潫鏃堕棿
-   */
-  @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
-  @Excel(name = "鎶ヨ缁撴潫鏃堕棿", dateFormat = "yyyy-MM-dd HH:mm:ss")
-  private Date alarmEndTime;
-  /**
-   * SVG鏂囦欢鐨処D
-   */
-  private Integer svgId;
-  /** 鎶ヨ鍐呭 */
-  private String content;
-  private String id;
-  private String alarmValueQuality;
-
-  public Double getDuration() {
-    return duration;
-  }
-
-  public void setDuration(Double duration) {
-    this.duration = duration;
-  }
-
-  public Date getAlarmBeginTime() {
-    return alarmBeginTime;
-  }
-
-  public void setAlarmBeginTime(Date alarmBeginTime) {
-    this.alarmBeginTime = alarmBeginTime;
-  }
-
-  public Date getAlarmEndTime() {
-    return alarmEndTime;
-  }
-
-  public void setAlarmEndTime(Date alarmEndTime) {
-    this.alarmEndTime = alarmEndTime;
-  }
-
-  public String getIndexType() {
-    return indexType;
-  }
-
-  public void setIndexType(String indexType) {
-    this.indexType = indexType;
-  }
-
-  public String getEierarchyFlag() {
-    return eierarchyFlag;
-  }
-
-  public void setEierarchyFlag(String eierarchyFlag) {
-    this.eierarchyFlag = eierarchyFlag;
-  }
-
-  public String getModelName() {
-    return modelName;
-  }
-
-  public void setModelName(String modelName) {
-    this.modelName = modelName;
-  }
-
-  public String getCode() {
-    return code;
-  }
-
-  public void setCode(String code) {
-    this.code = code;
-  }
-
-  public String getUnitId() {
-    return unitId;
-  }
-
-  public void setUnitId(String unitId) {
-    this.unitId = unitId;
-  }
-
-  public String getAlarmLevel() {
-    return alarmLevel;
-  }
-
-  public void setAlarmLevel(String alarmLevel) {
-    this.alarmLevel = alarmLevel;
-  }
-
-  public String getLimitType() {
-    return limitType;
-  }
-
-  public void setLimitType(String limitType) {
-    this.limitType = limitType;
-  }
-
-  public String getNodeId() {
-    return nodeId;
-  }
-
-  public void setNodeId(String nodeId) {
-    this.nodeId = nodeId;
-  }
-
-
-  public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public String getIndexId() {
-    return indexId;
-  }
-
-  public void setIndexId(String indexId) {
-    this.indexId = indexId;
-  }
-
-  public String getIndexName() {
-    return indexName;
-  }
-
-  public void setIndexName(String indexName) {
-    this.indexName = indexName;
-  }
-
-
-  public double getLimitingValue() {
-    return limitingValue;
-  }
-
-  public void setLimitingValue(double limitingValue) {
-    this.limitingValue = limitingValue;
-  }
-
-  public double getAlarmValue() {
-    return alarmValue;
-  }
-
-  public void setAlarmValue(double alarmValue) {
-    this.alarmValue = alarmValue;
-  }
-
-  public String getAlarmValueQuality() {
-    return alarmValueQuality;
-  }
-
-  public void setAlarmValueQuality(String alarmValueQuality) {
-    this.alarmValueQuality = alarmValueQuality;
-  }
-
-
-  public String getContent() {
-    return content;
-  }
-
-  public void setContent(String content) {
-    this.content = content;
-  }
-
-  public Integer getSvgId() {
-    return svgId;
-  }
-
-  public void setSvgId(Integer svgId) {
-    this.svgId = svgId;
-  }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/JkRealTimeAlarmList.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/JkRealTimeAlarmList.java
deleted file mode 100644
index 19732e4..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/JkRealTimeAlarmList.java
+++ /dev/null
@@ -1,208 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.domain;
-
-
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import com.fasterxml.jackson.annotation.JsonFormat;
-
-import java.util.Date;
-
-
-public class JkRealTimeAlarmList extends BaseEntity {
-  private static final long serialVersionUID = 1L;
-
-  /**
-   * 妯″瀷鑺傜偣鍚嶇О
-   * */
-  private String modelName;
-  /**
-   * 鎸囨爣缂栧彿
-   * */
-  private String code;
-  /**
-   * 鎸囨爣鍚嶇О*/
-  private String indexName;
-  /**
-   * 鎸囨爣鍗曚綅绫诲瀷ID*/
-  private String unitId;
-  /**
-   * 鎶ヨ绾у埆*/
-  private String alarmLevel;
-  /**
-   * 闄愬�肩被鍨�
-   * */
-  private String limitType;
-  /**
-   * 闄愬��
-   * */
-  private double limitingValue;
-  /**
-   * 鎶ヨ鍊�
-   * */
-  private double alarmValue;
-  /**
-   * 鎸囨爣涓婚敭id
-   * */
-  private String indexId;
-  /**
-   * 妯″瀷鑺傜偣涓婚敭id
-   * */
-  private String nodeId;
-  /**
-   * 妯″瀷鏌ヨ灞傜骇鏍囧織 B鏈骇  ALL鍖呭惈涓嬬骇
-   * */
-  private String eierarchyFlag;
-  /**
-   * 鎸囨爣绫诲瀷 COLLECT閲囬泦鐐�  STATISTIC鎸囨爣
-   * */
-  private String indexType;
-
-  /**
-   * 鎶ヨ寮�濮嬫椂闂�
-   */
-  @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
-  private Date alarmBeginTime;
-
-
-  private String id;
-  private String alarmValueQuality;
-  private String content;
-
-  public Date getAlarmBeginTime() {
-    return alarmBeginTime;
-  }
-
-  public void setAlarmBeginTime(Date alarmBeginTime) {
-    this.alarmBeginTime = alarmBeginTime;
-  }
-
-  public String getIndexType() {
-    return indexType;
-  }
-
-  public void setIndexType(String indexType) {
-    this.indexType = indexType;
-  }
-
-  public String getEierarchyFlag() {
-    return eierarchyFlag;
-  }
-
-  public void setEierarchyFlag(String eierarchyFlag) {
-    this.eierarchyFlag = eierarchyFlag;
-  }
-
-  public String getModelName() {
-    return modelName;
-  }
-
-  public void setModelName(String modelName) {
-    this.modelName = modelName;
-  }
-
-  public String getCode() {
-    return code;
-  }
-
-  public void setCode(String code) {
-    this.code = code;
-  }
-
-  public String getUnitId() {
-    return unitId;
-  }
-
-  public void setUnitId(String unitId) {
-    this.unitId = unitId;
-  }
-
-  public String getAlarmLevel() {
-    return alarmLevel;
-  }
-
-  public void setAlarmLevel(String alarmLevel) {
-    this.alarmLevel = alarmLevel;
-  }
-
-  public String getLimitType() {
-    return limitType;
-  }
-
-  public void setLimitType(String limitType) {
-    this.limitType = limitType;
-  }
-
-  public String getNodeId() {
-    return nodeId;
-  }
-
-  public void setNodeId(String nodeId) {
-    this.nodeId = nodeId;
-  }
-
-
-  public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public String getIndexId() {
-    return indexId;
-  }
-
-  public void setIndexId(String indexId) {
-    this.indexId = indexId;
-  }
-
-  public String getIndexName() {
-    return indexName;
-  }
-
-  public void setIndexName(String indexName) {
-    this.indexName = indexName;
-  }
-
-//  public AlarmItem getAlarmItem() {
-//    return alarmItem;
-//  }
-//
-//  public void setAlarmItem(AlarmItem alarmItem) {
-//    this.alarmItem = alarmItem;
-//  }
-
-  public double getLimitingValue() {
-    return limitingValue;
-  }
-
-  public void setLimitingValue(double limitingValue) {
-    this.limitingValue = limitingValue;
-  }
-
-  public double getAlarmValue() {
-    return alarmValue;
-  }
-
-  public void setAlarmValue(double alarmValue) {
-    this.alarmValue = alarmValue;
-  }
-
-  public String getAlarmValueQuality() {
-    return alarmValueQuality;
-  }
-
-  public void setAlarmValueQuality(String alarmValueQuality) {
-    this.alarmValueQuality = alarmValueQuality;
-  }
-
-
-  public String getContent() {
-    return content;
-  }
-
-  public void setContent(String content) {
-    this.content = content;
-  }
-
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/RealTimeAlarm.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/RealTimeAlarm.java
deleted file mode 100644
index d07b52f..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/domain/RealTimeAlarm.java
+++ /dev/null
@@ -1,177 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.domain;
-
-import com.dingzhuo.energy.dataservice.domain.Quality;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import java.util.Date;
-
-public class RealTimeAlarm  {
-  private static final long serialVersionUID = 1L;
-
-  /** 涓婚敭id */
-  private String id;
-
-  /** 鎸囨爣id */
-  @Excel(name = "鎸囨爣id")
-  private String indexId;
-
-  /** 鎸囨爣鍚嶇О */
-  @Excel(name = "鎸囨爣鍚嶇О")
-  private String indexName;
-
-  /** 鎶ヨ椤筰d */
-  @Excel(name = "鎶ヨ椤筰d")
-  private String itemId;
-
-  /** 鎶ヨ闄愬�� */
-  @Excel(name = "鎶ヨ闄愬��")
-  private Double limitingValue;
-
-  /** 鎶ヨ鍊� */
-  @Excel(name = "鎶ヨ鍊�")
-  private Double alarmValue;
-
-  /** 鎶ヨ鍊艰川閲� */
-  @Excel(name = "鎶ヨ鍊艰川閲�")
-  private Quality alarmValueQuality;
-
-  private String timeCode;
-
-  /** 鎶ヨ鏃堕棿 */
-  @Excel(name = "鎶ヨ鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
-  private Date beginTime;
-
-  /** 鍐呭 */
-  @Excel(name = "鍐呭")
-  private String content;
-
-  private AlarmItem alarmItem;
-
-  public String getAlarmCode() {
-    return alarmCode;
-  }
-
-  public void setAlarmCode(String alarmCode) {
-    this.alarmCode = alarmCode;
-  }
-
-  /**
-   * 鎶ヨ缂栫爜鎷兼帴锛宨ndexid:time_slot:limit_type
-   */
-  private String alarmCode;
-
-  public void setId(String id)
-  {
-    this.id = id;
-  }
-
-  public String getId()
-  {
-    return id;
-  }
-  public void setIndexId(String indexId)
-  {
-    this.indexId = indexId;
-  }
-
-  public String getIndexId()
-  {
-    return indexId;
-  }
-  public void setIndexName(String indexName)
-  {
-    this.indexName = indexName;
-  }
-
-  public String getIndexName()
-  {
-    return indexName;
-  }
-  public void setItemId(String itemId)
-  {
-    this.itemId = itemId;
-  }
-
-  public String getItemId()
-  {
-    return itemId;
-  }
-  public void setLimitingValue(Double limitingValue)
-  {
-    this.limitingValue = limitingValue;
-  }
-
-  public Double getLimitingValue()
-  {
-    return limitingValue;
-  }
-  public void setAlarmValue(Double alarmValue)
-  {
-    this.alarmValue = alarmValue;
-  }
-
-  public Double getAlarmValue()
-  {
-    return alarmValue;
-  }
-  public void setAlarmValueQuality(Quality alarmValueQuality)
-  {
-    this.alarmValueQuality = alarmValueQuality;
-  }
-
-  public Quality getAlarmValueQuality()
-  {
-    return alarmValueQuality;
-  }
-  public void setBeginTime(Date beginTime)
-  {
-    this.beginTime = beginTime;
-  }
-
-  public Date getBeginTime()
-  {
-    return beginTime;
-  }
-  public void setContent(String content)
-  {
-    this.content = content;
-  }
-
-  public String getContent()
-  {
-    return content;
-  }
-
-  @Override
-  public String toString() {
-    return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("indexId", getIndexId())
-            .append("indexName", getIndexName())
-            .append("itemId", getItemId())
-            .append("limitingValue", getLimitingValue())
-            .append("alarmValue", getAlarmValue())
-            .append("alarmValueQuality", getAlarmValueQuality())
-            .append("beginTime", getBeginTime())
-            .append("content", getContent())
-            .toString();
-  }
-
-  public String getTimeCode() {
-    return timeCode;
-  }
-
-  public void setTimeCode(String timeCode) {
-    this.timeCode = timeCode;
-  }
-
-  public AlarmItem getAlarmItem() {
-    return alarmItem;
-  }
-
-  public void setAlarmItem(AlarmItem alarmItem) {
-    this.alarmItem = alarmItem;
-  }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/mapper/AlarmItemMapper.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/mapper/AlarmItemMapper.java
deleted file mode 100644
index e177eea..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/mapper/AlarmItemMapper.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.mapper;
-
-
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * 棰勬姤璀﹁缃甅apper鎺ュ彛
- *
- * @author sys
- * @date 2020-03-02
- */
-public interface AlarmItemMapper {
-
-  /**
-   * 鏌ヨ棰勬姤璀﹁缃�
-   *
-   * @param id 棰勬姤璀﹁缃甀D
-   * @return 棰勬姤璀﹁缃�
-   */
-  AlarmItem selectAlarmItemById(String id);
-
-  /**
-   * 鏌ヨ棰勬姤璀﹁缃垪琛�
-   *
-   * @param alarmItem 棰勬姤璀﹁缃�
-   * @return 棰勬姤璀﹁缃泦鍚�
-   */
-  List<AlarmItem> selectAlarmItemList(AlarmItem alarmItem);
-
-  /**
-   * 鏂板棰勬姤璀﹁缃�
-   *
-   * @param alarmItem 棰勬姤璀﹁缃�
-   * @return 缁撴灉
-   */
-  int insertAlarmItem(AlarmItem alarmItem);
-
-  /**
-   * 淇敼棰勬姤璀﹁缃�
-   *
-   * @param alarmItem 棰勬姤璀﹁缃�
-   * @return 缁撴灉
-   */
-  int updateAlarmItem(AlarmItem alarmItem);
-
-  /**
-   * 鍒犻櫎棰勬姤璀﹁缃�
-   *
-   * @param id 棰勬姤璀﹁缃甀D
-   * @return 缁撴灉
-   */
-  int deleteAlarmItemById(String id);
-
-  /**
-   * 鎵归噺鍒犻櫎棰勬姤璀﹁缃�
-   *
-   * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-   * @return 缁撴灉
-   */
-  int deleteAlarmItemByIds(String[] ids);
-
-  /**
-   * 鏌ヨ棰勬姤璀﹁缃�
-   *
-   * @param id 棰勬姤璀﹁缃甀D
-   * @return 棰勬姤璀﹁缃�
-   */
-  List<AlarmItem> selectAlarmItemtingById(String id);
-
-  /**
-   * 淇敼棰勬姤璀﹁缃�
-   *
-   * @param ids       棰勬姤璀﹁缃�
-   * @param update_by 棰勬姤璀﹁缃�
-   * @param flag      棰勬姤璀﹁缃�
-   * @return 缁撴灉
-   */
-  int updateStartStop(String[] ids, String flag, String update_by);
-
-  /**
-   * @return 缁撴灉
-   */
-  String getStartStop(String indexid);
-
-  /**
-   * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆�
-   *
-   * @param data 銆愯濉啓鍔熻兘鍚嶇О銆�
-   * @param username 褰撳墠鐧诲綍浜虹敤鎴峰悕
-   * @return 缁撴灉
-   */
-  int updateLimitVal(@Param("data") List data, @Param("id") String id, String username);
-
-  /**
-   * 淇敼銆愭煡璇㈡槸鍚﹀瓨鍦ㄦ祴鐐硅缃��
-   *
-   * @return 缁撴灉
-   */
-  int selectCountById(String id);
-
-  /**
-   * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆�
-   *
-   * @param data 銆愯濉啓鍔熻兘鍚嶇О銆�
-   * @return 缁撴灉
-   */
-  int updateLimitValNoDel(@Param("data") List data, @Param("id") String id, String username);
-
-  /**
-   * 淇敼銆愭煡璇㈡槸鍚﹀瓨鍦ㄦ祴鐐硅缃��
-   *
-   * @return 缁撴灉
-   */
-  int deleteAllLimitVal(String id);
-
-  /**
-   * 鏌ヨ棰勬姤璀﹁缃�
-   *
-   * @param id 棰勬姤璀﹁缃甀D
-   * @return 棰勬姤璀﹁缃�
-   */
-  int getSettingCount(String id);
-
-  List<AlarmItem> getAllAlarmItem();
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/mapper/HistoryAlarmMapper.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/mapper/HistoryAlarmMapper.java
deleted file mode 100644
index 39395fe..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/mapper/HistoryAlarmMapper.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.mapper;
-
-
-import com.dingzhuo.energy.data.monitoring.alarm.domain.HistoryAlarm;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.JkHistoryAlarm;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.JkRealTimeAlarmList;
-
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
-
-/**
- * 瀹炴椂鎶ヨ鑾峰彇Mapper鎺ュ彛
- *
- * @author sys
- * @date 2020-03-02
- */
-public interface HistoryAlarmMapper {
-
-  /**
-   * 鑾峰彇鍘嗗彶鎶ヨ闆嗗悎
-   *
-   * @param jkHistoryAlarm 鎶ヨ鍙傛暟
-   * @return 棰勬姤璀﹁缃泦鍚�
-   */
-  List<JkHistoryAlarm> selectJkHistoryAlarmList(JkHistoryAlarm jkHistoryAlarm);
-
-  List<JkHistoryAlarm> selectJkHistoryAlarmListExcel(JkHistoryAlarm jkHistoryAlarm);
-
-  /**
-   * 瀹炴椂妫�娴� 鍔熻兘 鐨勫 sheet椤�  灞曠ず 缁勬�佸浘  娴嬬偣 鎶ヨ淇℃伅
-   *
-   * @param jkHistoryAlarm
-   * @return
-   */
-  List<JkHistoryAlarm> selectHistoryAlarmNoteList(JkHistoryAlarm jkHistoryAlarm);
-
-  void updateHistoryAlarm(@Param("alarmCode") String alarmCode,
-      @Param("historyAlarm") HistoryAlarm historyAlarm);
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/mapper/RealtimeAlarmMapper.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/mapper/RealtimeAlarmMapper.java
deleted file mode 100644
index 8ba66e8..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/mapper/RealtimeAlarmMapper.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.mapper;
-
-
-import com.dingzhuo.energy.data.monitoring.alarm.domain.RealTimeAlarm;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.JkRealTimeAlarmList;
-
-import java.util.List;
-
-/**
- * 瀹炴椂鎶ヨ鐩戞帶Mapper鎺ュ彛
- *
- * @author sys
- * @date 2020-03-18
- */
-public interface RealtimeAlarmMapper {
-
-  /**
-   * 鏌ヨ瀹炴椂鎶ヨ鐩戞帶
-   *
-   * @param id 瀹炴椂鎶ヨ鐩戞帶ID
-   * @return 瀹炴椂鎶ヨ鐩戞帶
-   */
-  public RealTimeAlarm selectRealtimeAlarmById(String id);
-
-  /**
-   * 鏌ヨ瀹炴椂鎶ヨ鐩戞帶鍒楄〃
-   *
-   * @param realtimeAlarm 瀹炴椂鎶ヨ鐩戞帶
-   * @return 瀹炴椂鎶ヨ鐩戞帶闆嗗悎
-   */
-  public List<RealTimeAlarm> selectRealtimeAlarmList(RealTimeAlarm realtimeAlarm);
-
-  /**
-   * 鏂板瀹炴椂鎶ヨ鐩戞帶
-   *
-   * @param realtimeAlarm 瀹炴椂鎶ヨ鐩戞帶
-   * @return 缁撴灉
-   */
-  public int insertRealtimeAlarm(RealTimeAlarm realtimeAlarm);
-
-  /**
-   * 淇敼瀹炴椂鎶ヨ鐩戞帶
-   *
-   * @param realtimeAlarm 瀹炴椂鎶ヨ鐩戞帶
-   * @return 缁撴灉
-   */
-  public int updateRealtimeAlarm(RealTimeAlarm realtimeAlarm);
-
-  /**
-   * 鍒犻櫎瀹炴椂鎶ヨ鐩戞帶
-   *
-   * @param id 瀹炴椂鎶ヨ鐩戞帶ID
-   * @return 缁撴灉
-   */
-  public int deleteRealtimeAlarmById(String id);
-
-  /**
-   * 鎵归噺鍒犻櫎瀹炴椂鎶ヨ鐩戞帶
-   *
-   * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-   * @return 缁撴灉
-   */
-  public int deleteRealtimeAlarmByIds(String[] ids);
-
-  /**
-   * 瀹炴椂鎶ヨ鐩戞帶鐢ㄥ垪琛�
-   *
-   * @param jkRealTimeAlarmList 瀹炴椂鎶ヨ鐩戞帶
-   * @return 瀹炴椂鎶ヨ鐩戞帶闆嗗悎
-   */
-  public List<JkRealTimeAlarmList> selectRealtimeAlarmJkList(
-      JkRealTimeAlarmList jkRealTimeAlarmList);
-
-  RealTimeAlarm getRealTimeAlarmByAlarmCode(String alarmCode);
-
-  List<RealTimeAlarm> getRealTimeAlarm();
-
-  RealTimeAlarm getAlarmByItemIdAndTimeCode(String itemId, String timeCode);
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/service/IAlarmItemService.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/service/IAlarmItemService.java
deleted file mode 100644
index 0bfa1e1..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/service/IAlarmItemService.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.service;
-
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 棰勬姤璀﹁缃甋ervice鎺ュ彛
- *
- * @author sys
- * @date 2020-03-02
- */
-public interface IAlarmItemService {
-
-  /**
-   * 鏌ヨ棰勬姤璀﹁缃�
-   *
-   * @param id 棰勬姤璀﹁缃甀D
-   * @return 棰勬姤璀﹁缃�
-   */
-  AlarmItem selectAlarmItemById(String id);
-
-  /**
-   * 鏌ヨ棰勬姤璀﹁缃垪琛�
-   *
-   * @param alarmItem 棰勬姤璀﹁缃�
-   * @return 棰勬姤璀﹁缃泦鍚�
-   */
-  List<AlarmItem> selectAlarmItemList(AlarmItem alarmItem);
-
-  /**
-   * 鏂板棰勬姤璀﹁缃�
-   *
-   * @param alarmItem 棰勬姤璀﹁缃�
-   * @return 缁撴灉
-   */
-  int insertAlarmItem(AlarmItem alarmItem);
-
-  /**
-   * 淇敼棰勬姤璀﹁缃�
-   *
-   * @param alarmItem 棰勬姤璀﹁缃�
-   * @return 缁撴灉
-   */
-  int updateAlarmItem(AlarmItem alarmItem);
-
-  /**
-   * 淇敼棰勬姤璀﹁缃�
-   *
-   * @param ids,flag 棰勬姤璀﹁缃�
-   * @return 缁撴灉
-   */
-  int updateStartStop(String[] ids, String flag, String username);
-
-  /**
-   * 鎵归噺鍒犻櫎棰勬姤璀﹁缃�
-   *
-   * @param ids 闇�瑕佸垹闄ょ殑棰勬姤璀﹁缃甀D
-   * @return 缁撴灉
-   */
-  int deleteAlarmItemByIds(String[] ids);
-
-  /**
-   * 鍒犻櫎棰勬姤璀﹁缃俊鎭�
-   *
-   * @param id 棰勬姤璀﹁缃甀D
-   * @return 缁撴灉
-   */
-  int deleteAlarmItemById(String id);
-
-  /**
-   * 鏌ヨ棰勬姤璀﹁缃垪琛�
-   *
-   * @param id 棰勬姤璀﹁缃�
-   * @return 棰勬姤璀﹁缃泦鍚�
-   */
-  List<AlarmItem> selectAlarmItemtingById(String id);
-
-  /**
-   * 鏌ヨ棰勬姤璀﹀垪琛ㄨ鍚仠鍊�
-   *
-   * @param indexid 棰勬姤璀﹁缃�
-   * @return 棰勬姤璀﹁缃泦鍚�
-   */
-  String getStartStop(String indexid);
-
-  /**
-   * 淇敼寮瑰嚭妗嗛檺鍊�
-   *
-   * @param data 銆愪慨鏀瑰脊鍑烘闄愬�笺��
-   * @return 缁撴灉
-   */
-  int updateLimitVal(List data, String username);
-
-  /**
-   * 鏌ヨ棰刬d涓嬭缃檺鍊肩殑鏁伴噺
-   *
-   * @param id 棰勬姤璀﹁缃�
-   * @return 鏁�
-   */
-  ArrayList getSettingCount(String[] id);
-
-  List<AlarmItem> getAllAlarmItem();
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/service/IHistoryAlarmService.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/service/IHistoryAlarmService.java
deleted file mode 100644
index 36c0209..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/service/IHistoryAlarmService.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.HistoryAlarm;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.JkHistoryAlarm;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.JkRealTimeAlarmList;
-
-import java.util.Date;
-import java.util.List;
-
-public interface IHistoryAlarmService {
-
-  List<HistoryAlarm> getHistoryAlarm(Date beginTime, Date endTime);
-
-  List<HistoryAlarm> getHistoryAlarm(Date beginTime, Date endTime, TimeType timeType);
-
-  List<HistoryAlarm> getHistoryAlarm(Date beginTime, Date endTime, String alarmType);
-  /**
-   * @param jkHistoryAlarm 鏍规嵁鍘嗗彶鎶ヨ瀵硅薄鍙栧��
-   * @return
-   */
-  List<JkHistoryAlarm> selectJkHistoryAlarmList(JkHistoryAlarm jkHistoryAlarm);
-  List<JkHistoryAlarm> selectJkHistoryAlarmListExcel(JkHistoryAlarm jkHistoryAlarm);
-
-  /**
-   * 瀹炴椂妫�娴� 鍔熻兘 鐨勫 sheet椤�  灞曠ず 缁勬�佸浘  娴嬬偣 鎶ヨ淇℃伅
-   * @param jkHistoryAlarm
-   * @return
-   */
-  List<JkHistoryAlarm> selectHistoryAlarmNoteList(JkHistoryAlarm jkHistoryAlarm);
-
-  void updateHistoryAlarm(String alarmCode, HistoryAlarm historyAlarm);
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/service/IRealtimeAlarmService.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/service/IRealtimeAlarmService.java
deleted file mode 100644
index 230e605..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/service/IRealtimeAlarmService.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.HistoryAlarm;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.RealTimeAlarm;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.JkRealTimeAlarmList;
-
-import java.util.List;
-
-public interface IRealtimeAlarmService {
-  /**
-   * 鑾峰彇褰撳墠鎵�鏈夊疄鏃舵姤璀﹁褰�
-   *
-   * @return 瀹炴椂鎶ヨ
-   */
-  List<RealTimeAlarm> getRealTimeAlarm();
-
-  /**
-   * @param timeType 鎶ヨ浜嬩欢绫诲瀷
-   * @return
-   */
-  List<RealTimeAlarm> getRealTimeAlarm(TimeType timeType);
-
-  /**
-   * @param alarmLevel 鎶ヨ绾у埆涓婇檺銆佷笂涓婇檺銆佷笅闄愪笅涓嬮檺
-   * @return
-   */
-  List<RealTimeAlarm> getRealTimeAlarm(String alarmLevel);
-
-  /**
-   * @param jkRealTimeAlarmList 瀹炴椂鎶ヨ鐩戞帶鐢ㄥ垪琛�
-   * @return
-   */
-  List<JkRealTimeAlarmList> selectRealtimeAlarmJkList(JkRealTimeAlarmList jkRealTimeAlarmList);
-
-
-  void insert(RealTimeAlarm realTimeAlarm);
-
-  RealTimeAlarm getRealTimeAlarmByAlarmCode(String alarmCode);
-
-  RealTimeAlarm getAlarmByItemIdAndTimeCode(String itemId, String timeCode);
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/service/impl/AlarmItemServiceImpl.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/service/impl/AlarmItemServiceImpl.java
deleted file mode 100644
index 305ce65..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/service/impl/AlarmItemServiceImpl.java
+++ /dev/null
@@ -1,198 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.service.impl;
-
-import java.util.*;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.IdUtils;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem;
-import com.dingzhuo.energy.data.monitoring.alarm.mapper.AlarmItemMapper;
-import com.dingzhuo.energy.data.monitoring.alarm.service.IAlarmItemService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-
-/**
- * 棰勬姤璀﹁缃甋ervice涓氬姟灞傚鐞�
- *
- * @author sys
- * @date 2020-03-02
- */
-@Service
-public class AlarmItemServiceImpl implements IAlarmItemService {
-    @Autowired
-    private AlarmItemMapper alarmItemMapper;
-
-    /**
-     * 鏌ヨ棰勬姤璀﹁缃�
-     *
-     * @param id 棰勬姤璀﹁缃甀D
-     * @return 棰勬姤璀﹁缃�
-     */
-    @Override
-    public AlarmItem selectAlarmItemById(String id) {
-        return alarmItemMapper.selectAlarmItemById(id);
-    }
-
-    /**
-     * 鏌ヨ棰勬姤璀﹁缃垪琛�
-     *
-     * @param alarmItem 棰勬姤璀﹁缃�
-     * @return 棰勬姤璀﹁缃�
-     */
-    @Override
-    public List<AlarmItem> selectAlarmItemList(AlarmItem alarmItem) {
-        return alarmItemMapper.selectAlarmItemList(alarmItem);
-    }
-
-    /**
-     * 鏂板棰勬姤璀﹁缃�
-     *
-     * @param alarmItem 棰勬姤璀﹁缃�
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertAlarmItem(AlarmItem alarmItem) {
-        alarmItem.setCreateTime(DateUtils.getNowDate());
-        return alarmItemMapper.insertAlarmItem(alarmItem);
-    }
-
-    /**
-     * 淇敼棰勬姤璀﹁缃�
-     *
-     * @param alarmItem 棰勬姤璀﹁缃�
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateAlarmItem(AlarmItem alarmItem) {
-        alarmItem.setUpdateTime(DateUtils.getNowDate());
-        return alarmItemMapper.updateAlarmItem(alarmItem);
-    }
-
-    /**
-     * 淇敼棰勬姤璀﹁缃�
-     *
-     * @param ids,flag 棰勬姤璀﹁缃�
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateStartStop(String[] ids, String flag, String username) {
-
-        return alarmItemMapper.updateStartStop(ids, flag, username);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎棰勬姤璀﹁缃�
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑棰勬姤璀﹁缃甀D
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteAlarmItemByIds(String[] ids) {
-        return alarmItemMapper.deleteAlarmItemByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎棰勬姤璀﹁缃俊鎭�
-     *
-     * @param id 棰勬姤璀﹁缃甀D
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteAlarmItemById(String id) {
-        return alarmItemMapper.deleteAlarmItemById(id);
-    }
-
-    /**
-     * 鏌ヨ棰勬姤璀﹁缃�
-     *
-     * @param id 棰勬姤璀﹁缃甀D
-     * @return 棰勬姤璀﹁缃�
-     */
-    @Override
-    public List<AlarmItem> selectAlarmItemtingById(String id) {
-        return alarmItemMapper.selectAlarmItemtingById(id);
-    }
-
-    /**
-     * 鏌ヨ棰勬姤璀﹁缃�
-     *
-     * @return 棰勬姤璀﹁缃�
-     */
-    @Override
-    public String getStartStop(String indexid) {
-        return alarmItemMapper.getStartStop(indexid);
-    }
-
-    /**
-     * 淇敼寮瑰嚭妗嗛檺鍊�
-     *
-     * @param data 銆愪慨鏀瑰脊鍑烘闄愬�笺��
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateLimitVal(List data, String username) {
-        String id = "";
-        int num = 0;
-        int dataNum = data.size();
-        Map<String, Object> map = (Map<String, Object>) data.get(0);
-        id = map.get("indexId").toString();
-        for (int i = 0; i < data.size(); i++) {
-            Map<String, Object> map1 = (Map<String, Object>) data.get(i);
-            String val = map1.get("limitVal").toString().trim();
-            if ("".equals(val) || null == val) {
-                data.remove(i);
-                i--;
-                num++;
-            }
-            map1.put("id", IdUtils.fastUUID());
-            map1.put("alarmCode", map1.get("indexId").toString() + ":" + map1.get("timeSlotVal").toString() + ":" + map1.get("limitTypeVal").toString());
-        }
-        //鏌ヨ鏉℃暟
-        int count = alarmItemMapper.selectCountById(id);
-        if (num == dataNum) {//瀵规瘮鍏ㄧ┖鏁版嵁闇�瑕佹妸鏁版嵁搴撻噷id涓�鑷寸殑鍏ㄥ垹闄�
-            if (count > 0) {
-                return alarmItemMapper.deleteAllLimitVal(id);
-            } else {
-                return 1;
-            }
-        } else {
-            if (count > 0) {
-                return alarmItemMapper.updateLimitVal(data, id, username);
-            } else {
-                return alarmItemMapper.updateLimitValNoDel(data, id, username);
-            }
-        }
-    }
-
-    /**
-     * 鏌ヨ棰勬姤璀﹁缃�
-     *
-     * @param id 棰勬姤璀﹁缃甀D
-     * @return 棰勬姤璀﹁缃�
-     */
-    @Override
-    public ArrayList getSettingCount(String[] id) {
-        ArrayList list = new ArrayList();
-        for (int i = 0; i < id.length; i++) {
-            int count = alarmItemMapper.getSettingCount(id[i]);
-            if (count > 0) {
-                list.add(count);
-            } else {
-                list.add(0);
-            }
-        }
-
-        return list;
-    }
-
-    @Override
-    public List<AlarmItem> getAllAlarmItem() {
-        return alarmItemMapper.getAllAlarmItem();
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/service/impl/HistoryAlarmServiceImpl.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/service/impl/HistoryAlarmServiceImpl.java
deleted file mode 100644
index a60fe34..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/service/impl/HistoryAlarmServiceImpl.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.service.impl;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.HistoryAlarm;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.JkHistoryAlarm;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.JkRealTimeAlarmList;
-import com.dingzhuo.energy.data.monitoring.alarm.mapper.HistoryAlarmMapper;
-import com.dingzhuo.energy.data.monitoring.alarm.service.IHistoryAlarmService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Date;
-import java.util.List;
-
-@Service
-public class HistoryAlarmServiceImpl implements IHistoryAlarmService {
-
-  @Autowired
-  private HistoryAlarmMapper historyAlarmMapper;
-
-  @Override
-  public List<HistoryAlarm> getHistoryAlarm(Date beginTime, Date endTime) {
-    return null;
-  }
-
-  @Override
-  public List<HistoryAlarm> getHistoryAlarm(Date beginTime, Date endTime, TimeType timeType) {
-    return null;
-  }
-
-  @Override
-  public List<HistoryAlarm> getHistoryAlarm(Date beginTime, Date endTime, String alarmType) {
-    return null;
-  }
-
-  @Override
-  public List<JkHistoryAlarm> selectJkHistoryAlarmList(JkHistoryAlarm jkHistoryAlarm) {
-    return historyAlarmMapper.selectJkHistoryAlarmList(jkHistoryAlarm);
-  }
-
-  @Override
-  public List<JkHistoryAlarm> selectJkHistoryAlarmListExcel(JkHistoryAlarm jkHistoryAlarm) {
-    return historyAlarmMapper.selectJkHistoryAlarmListExcel(jkHistoryAlarm);
-  }
-
-  /**
-   * 瀹炴椂妫�娴� 鍔熻兘 鐨勫 sheet椤�  灞曠ず 缁勬�佸浘  娴嬬偣 鎶ヨ淇℃伅
-   *
-   * @param jkHistoryAlarm
-   * @return
-   */
-  @Override
-  public List<JkHistoryAlarm> selectHistoryAlarmNoteList(JkHistoryAlarm jkHistoryAlarm) {
-    return historyAlarmMapper.selectHistoryAlarmNoteList(jkHistoryAlarm);
-  }
-
-  @Override
-  public void updateHistoryAlarm(String alarmCode, HistoryAlarm historyAlarm) {
-    historyAlarmMapper.updateHistoryAlarm(alarmCode, historyAlarm);
-  }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/service/impl/RealtimeAlarmServiceImpl.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/service/impl/RealtimeAlarmServiceImpl.java
deleted file mode 100644
index 4ccad3b..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/alarm/service/impl/RealtimeAlarmServiceImpl.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.alarm.service.impl;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.JkRealTimeAlarmList;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.RealTimeAlarm;
-import com.dingzhuo.energy.data.monitoring.alarm.mapper.AlarmItemMapper;
-import com.dingzhuo.energy.data.monitoring.alarm.mapper.RealtimeAlarmMapper;
-import com.dingzhuo.energy.data.monitoring.alarm.service.IAlarmItemService;
-import com.dingzhuo.energy.data.monitoring.alarm.service.IRealtimeAlarmService;
-import java.util.List;
-import java.util.stream.Collectors;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class RealtimeAlarmServiceImpl implements IRealtimeAlarmService {
-
-  @Autowired
-  private RealtimeAlarmMapper realtimeAlarmMapper;
-
-  @Override
-  public List<RealTimeAlarm> getRealTimeAlarm() {
-    return realtimeAlarmMapper.getRealTimeAlarm();
-  }
-
-  @Override
-  public List<RealTimeAlarm> getRealTimeAlarm(TimeType timeType) {
-    return null;
-  }
-
-  @Override
-  public List<RealTimeAlarm> getRealTimeAlarm(String alarmLevel) {
-    return null;
-  }
-
-  /**
-   * @param jkRealTimeAlarmList 瀹炴椂鎶ヨ鐩戞帶鐢ㄥ垪琛�
-   * @return
-   */
-  @Override
-  public List<JkRealTimeAlarmList> selectRealtimeAlarmJkList(
-      JkRealTimeAlarmList jkRealTimeAlarmList) {
-    return realtimeAlarmMapper.selectRealtimeAlarmJkList(jkRealTimeAlarmList);
-  }
-
-  @Override
-  public void insert(RealTimeAlarm realTimeAlarm) {
-    realtimeAlarmMapper.insertRealtimeAlarm(realTimeAlarm);
-  }
-
-  @Override
-  public RealTimeAlarm getRealTimeAlarmByAlarmCode(String alarmCode) {
-    return realtimeAlarmMapper.getRealTimeAlarmByAlarmCode(alarmCode);
-  }
-
-  @Override
-  public RealTimeAlarm getAlarmByItemIdAndTimeCode(String itemId, String timeCode) {
-    return realtimeAlarmMapper.getAlarmByItemIdAndTimeCode(itemId, timeCode);
-  }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/controller/DeviceStatusHistoryController.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/controller/DeviceStatusHistoryController.java
deleted file mode 100644
index 27ca779..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/controller/DeviceStatusHistoryController.java
+++ /dev/null
@@ -1,143 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.controller;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.service.IEnergyIndexService;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceStatusHistory;
-import com.dingzhuo.energy.data.monitoring.device.service.IDeviceStatusHistoryService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * 璁惧鍚仠鍘嗗彶鐩戞祴Controller
- * 
- * @author sys
- * @date 2020-03-25
- */
-@RestController
-@RequestMapping("/historyMonitoring/historyMonitoring")
-public class DeviceStatusHistoryController extends BaseController
-{
-    private final IEnergyIndexService energyIndexService;
-    private final IModelNodeService modelNodeService;
-
-    @Autowired
-    private IDeviceStatusHistoryService deviceStatusHistoryService;
-
-    @Autowired
-    public DeviceStatusHistoryController(
-            IModelNodeService modelNodeService, IEnergyIndexService energyIndexService) {
-        this.modelNodeService = modelNodeService;
-        this.energyIndexService = energyIndexService;
-    }
-
-    /**
-     * 鏌ヨ璁惧鍚仠鍘嗗彶鐩戞祴鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('historyMonitoring:historyMonitoring:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(DeviceStatusHistory deviceStatusHistory)
-    {
-        startPage();
-        List<DeviceStatusHistory> list = deviceStatusHistoryService.selectDeviceStatusHistoryList(deviceStatusHistory);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭璁惧鍚仠鍘嗗彶鐩戞祴鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('historyMonitoring:historyMonitoring:export')")
-    @Log(title = "璁惧鍚仠鍘嗗彶鐩戞祴", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(DeviceStatusHistory deviceStatusHistory)
-    {
-        List<DeviceStatusHistory> list = deviceStatusHistoryService.selectDeviceStatusHistoryList(deviceStatusHistory);
-        ExcelUtil<DeviceStatusHistory> util = new ExcelUtil<DeviceStatusHistory>(DeviceStatusHistory.class);
-        return util.exportExcel(list, "historyMonitoring");
-    }
-
-    /**
-     * 鑾峰彇璁惧鍚仠鍘嗗彶鐩戞祴璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('historyMonitoring:historyMonitoring:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(deviceStatusHistoryService.selectDeviceStatusHistoryById(id));
-    }
-
-    /**
-     * 鏂板璁惧鍚仠鍘嗗彶鐩戞祴
-     */
-    @PreAuthorize("@ss.hasPermi('historyMonitoring:historyMonitoring:add')")
-    @Log(title = "璁惧鍚仠鍘嗗彶鐩戞祴", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody DeviceStatusHistory deviceStatusHistory)
-    {
-        return toAjax(deviceStatusHistoryService.insertDeviceStatusHistory(deviceStatusHistory));
-    }
-
-    /**
-     * 淇敼璁惧鍚仠鍘嗗彶鐩戞祴
-     */
-    @PreAuthorize("@ss.hasPermi('historyMonitoring:historyMonitoring:edit')")
-    @Log(title = "璁惧鍚仠鍘嗗彶鐩戞祴", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody DeviceStatusHistory deviceStatusHistory)
-    {
-        return toAjax(deviceStatusHistoryService.updateDeviceStatusHistory(deviceStatusHistory));
-    }
-
-    /**
-     * 鍒犻櫎璁惧鍚仠鍘嗗彶鐩戞祴
-     */
-    @PreAuthorize("@ss.hasPermi('historyMonitoring:historyMonitoring:remove')")
-    @Log(title = "璁惧鍚仠鍘嗗彶鐩戞祴", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(deviceStatusHistoryService.deleteDeviceStatusHistoryByIds(ids));
-    }
-
-    /**
-     * 鏌ヨ璁惧鍚仠鍘嗗彶鐩戞祴鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('historyMonitoring:historyMonitoring:list')")
-    @GetMapping("/history/list")
-    public TableDataInfo listTable(DeviceStatusHistory deviceStatusHistory)
-    {
-        startPage();
-        List<DeviceStatusHistory> historyList = deviceStatusHistoryService.selectDeviceStatusHistoryListNew(deviceStatusHistory);
-        return getDataTable(historyList);
-    }
-
-    /**
-     * 瀵煎嚭璁惧鍚仠鍘嗗彶鐩戞祴鍒楄〃(鏂�)
-     */
-    @PreAuthorize("@ss.hasPermi('historyMonitoring:historyMonitoring:export')")
-    @Log(title = "璁惧鍚仠鍘嗗彶鐩戞祴", businessType = BusinessType.EXPORT)
-    @GetMapping("/export/tableList")
-    public AjaxResult exportNew(DeviceStatusHistory deviceStatusHistory)
-    {
-        List<DeviceStatusHistory> historyList = deviceStatusHistoryService.selectDeviceStatusHistoryListNew(deviceStatusHistory);
-        ExcelUtil<DeviceStatusHistory> util = new ExcelUtil<DeviceStatusHistory>(DeviceStatusHistory.class);
-        return util.exportExcel(historyList, "historyMonitoring");
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/controller/DeviceStatusLiveController.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/controller/DeviceStatusLiveController.java
deleted file mode 100644
index a7fa779..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/controller/DeviceStatusLiveController.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.controller;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.service.IEnergyIndexService;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.data.model.service.IStateTypeService;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem;
-import com.dingzhuo.energy.data.monitoring.device.domain.EquipmentMeasuringPointParameters;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import com.dingzhuo.energy.dataservice.service.RealtimeDatabaseService;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceStatusLive;
-import com.dingzhuo.energy.data.monitoring.device.service.IDeviceStatusLiveService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * 璁惧鍚仠瀹炴椂鐩戞祴Controller
- * 
- * @author sys
- * @date 2020-03-23
- */
-@RestController
-@RequestMapping("/realTimeMonitoring/realTimeMonitoring")
-public class DeviceStatusLiveController extends BaseController
-{
-    private final IModelNodeService modelNodeService;
-    private final IEnergyIndexService energyIndexService;
-    @Autowired
-    private IDeviceStatusLiveService deviceStatusLiveService;
-    @Autowired
-    private RealtimeDatabaseService realtimeDatabaseService;
-    @Autowired
-    private IStateTypeService iStateTypeService;
-
-
-    @Autowired
-    public DeviceStatusLiveController(
-            IModelNodeService modelNodeService, IEnergyIndexService energyIndexService) {
-        this.modelNodeService = modelNodeService;
-        this.energyIndexService = energyIndexService;
-    }
-
-    /**
-     * 鏌ヨ璁惧鍚仠瀹炴椂鐩戞祴鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('realTimeMonitoring:realTimeMonitoring:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(DeviceStatusLive deviceStatusLive)
-    {
-        startPage();
-        List<DeviceStatusLive> list = deviceStatusLiveService.selectDeviceStatusLiveList(deviceStatusLive);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭璁惧鍚仠瀹炴椂鐩戞祴鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('realTimeMonitoring:realTimeMonitoring:export')")
-    @Log(title = "璁惧鍚仠瀹炴椂鐩戞祴", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(DeviceStatusLive deviceStatusLive)
-    {
-        List<DeviceStatusLive> list = deviceStatusLiveService.selectDeviceStatusLiveList(deviceStatusLive);
-        ExcelUtil<DeviceStatusLive> util = new ExcelUtil<DeviceStatusLive>(DeviceStatusLive.class);
-        return util.exportExcel(list, "realTimeMonitoring");
-    }
-
-    /**
-     * 鑾峰彇璁惧鍚仠瀹炴椂鐩戞祴璇︾粏淇℃伅
-     */
-//    @PreAuthorize("@ss.hasPermi('realTimeMonitoring:realTimeMonitoring:query')")
-    @GetMapping(value = "/{id}")
-    public TableDataInfo getInfo(@PathVariable("id") String id)
-    {
-        List<DeviceStatusLive> list = new ArrayList<>();
-        list.add(deviceStatusLiveService.selectDeviceStatusLiveById(id));
-        list.stream().forEach(x->{
-            if(x!=null)
-            x.setStateType(iStateTypeService.selectStateTypeById(x.getStatusId()));
-        });
-        return getDataTable(list);
-    }
-
-    /**
-     * 鏂板璁惧鍚仠瀹炴椂鐩戞祴
-     */
-    @PreAuthorize("@ss.hasPermi('realTimeMonitoring:realTimeMonitoring:add')")
-    @Log(title = "璁惧鍚仠瀹炴椂鐩戞祴", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody DeviceStatusLive deviceStatusLive)
-    {
-        return toAjax(deviceStatusLiveService.insertDeviceStatusLive(deviceStatusLive));
-    }
-
-    /**
-     * 淇敼璁惧鍚仠瀹炴椂鐩戞祴
-     */
-    @PreAuthorize("@ss.hasPermi('realTimeMonitoring:realTimeMonitoring:edit')")
-    @Log(title = "璁惧鍚仠瀹炴椂鐩戞祴", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody DeviceStatusLive deviceStatusLive)
-    {
-        return toAjax(deviceStatusLiveService.updateDeviceStatusLive(deviceStatusLive));
-    }
-
-    /**
-     * 鍒犻櫎璁惧鍚仠瀹炴椂鐩戞祴
-     */
-    @PreAuthorize("@ss.hasPermi('realTimeMonitoring:realTimeMonitoring:remove')")
-    @Log(title = "璁惧鍚仠瀹炴椂鐩戞祴", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(deviceStatusLiveService.deleteDeviceStatusLiveByIds(ids));
-    }
-
-    @Log(title = "鑾峰彇妯″瀷鑺傜偣鍏宠仈閲囬泦鎸囨爣", businessType = BusinessType.UPDATE)
-    @GetMapping("/energyIndex/list")
-    public AjaxResult getSettingIndex(EnergyIndex energyIndex) {
-        try {
-            List<EnergyIndex> infoList = energyIndexService.selectEnergyIndexList(energyIndex);
-            List<String> codeList= infoList.stream().map(EnergyIndex::getCode).collect(Collectors.toList());
-            List<TagValue> valList = realtimeDatabaseService.retrieve(codeList);
-            List resultList = new ArrayList();
-            for(int i = 0;i<infoList.size();i++){
-                EquipmentMeasuringPointParameters item = new EquipmentMeasuringPointParameters();
-                item.setCode(infoList.get(i).getCode());
-                item.setIndexName(infoList.get(i).getName());
-                item.setIndexUnit(infoList.get(i).getUnitId());
-
-                valList.forEach(x->{
-                    if(x.getTagCode().equals(item.getCode()))
-                    {
-                        item.setValue(new   BigDecimal(x.getValue()).setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue());
-                    }
-                });
-                resultList.add(item);
-            }
-            return AjaxResult.success(resultList);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍏宠仈鎸囨爣鍑洪敊!");
-        }
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/controller/DeviceStorageController.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/controller/DeviceStorageController.java
deleted file mode 100644
index 4b978a0..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/controller/DeviceStorageController.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.controller;
-
-import com.alibaba.fastjson.JSONObject;
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.data.model.domain.StateType;
-import com.dingzhuo.energy.data.model.service.IStateTypeService;
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceFormula;
-import com.dingzhuo.energy.data.monitoring.device.service.IDeviceFormulaParamService;
-import com.dingzhuo.energy.data.monitoring.device.service.IDeviceFormulaService;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * 璁惧鐘舵�侀厤缃瓹ontroller
- * 
- * @author zhaow
- * @date 2020-03-02
- */
-@RestController
-@RequestMapping("/basicsetting/deviceStorage")
-public class DeviceStorageController extends BaseController
-{
-
-    @Autowired
-    private  IDeviceFormulaService deviceFormulaService;
-
-    @Autowired
-    private IDeviceFormulaParamService deviceFormulaParamService;
-
-    @Autowired
-    private IStateTypeService stateTypeService;
-    /**
-     * 璁惧鐘舵�佺鐞嗙偣鍑荤姸鎬佽繘琛岄厤缃椂鐨� 鍒濆鍖栭〉闈㈡暟鎹�
-     * @param deviceFormula
-     * @return
-     */
-    @GetMapping("/getDeviceStateByNodeIds")
-    public TableDataInfo getDeviceStateByNodeIds(DeviceFormula deviceFormula) {
-
-        startPage();
-        //鑺傜偣璁惧宸茶缃殑 鐘舵�佷俊鎭泦鍚�
-        List<DeviceFormula> deviceFormulas = new ArrayList<>();
-        //鍙栫郴缁熼粯璁よ缃墍鏈夌殑璁惧鐘舵��
-        List<StateType> list = stateTypeService.selectStateTypeList(new StateType());
-        //杩唬绯荤粺鍙傛暟鏁伴噺濉厖 宸茶缃殑鐘舵��
-        list.forEach(param ->{
-            DeviceFormula tempDev = deviceFormulaService.getDeviceFormula(deviceFormula.getDeviceId(),param.getStateId());
-            if(tempDev.getIsEnable()==null || tempDev.getIsEnable().isEmpty())
-            {
-                tempDev.setIsEnable("N");
-            }
-            tempDev.setStateType(param);
-            deviceFormulas.add(tempDev);
-        });
-        return getDataTable(deviceFormulas);
-    }
-
-    /**
-     * 璁惧鐘舵�佺鐞嗙偣鍑荤姸鎬佽繘琛岄厤缃椂鐨� 鍒濆鍖栭〉闈㈡暟鎹�
-     * @param nodeId
-     * @return
-     */
-    @GetMapping("/{nodeId}/{stateId}")
-    public AjaxResult getDeviceStorage(@PathVariable String nodeId,@PathVariable String stateId) {
-        JSONObject result = new JSONObject();
-        //1銆佸彇鏍规嵁 璁惧妯″瀷 鑺傜偣ID  鍜�  璁惧鐘舵�佷富閿� ID  鍙�  璁惧鍏紡淇℃伅
-        DeviceFormula deviceFormula = deviceFormulaService.getDeviceFormula(nodeId,stateId);
-
-        result.put("deviceFormula", deviceFormula);
-        return AjaxResult.success(result);
-    }
-
-    /**
-     * 璁惧鐘舵�� 閰嶇疆 鍏紡淇濆瓨
-     * @param param
-     * @param nodeId
-     * @param stateId
-     * @return
-     */
-    @PostMapping("/{nodeId}/{stateId}")
-    public AjaxResult saveDeviceStorage(@RequestBody JSONObject param, @PathVariable String nodeId, @PathVariable String stateId) {
-        try {
-            DeviceFormula deviceFormula = param.getObject("deviceFormula", DeviceFormula.class);
-            deviceFormula.setDeviceId(nodeId);
-            deviceFormula.setStateId(stateId);
-            deviceFormulaService.saveDeviceFormula(deviceFormula);
-        } catch (Exception ex) {
-            logger.error("", ex);
-            return AjaxResult.error();
-        }
-
-        return AjaxResult.success();
-    }
-
-    /**
-     * 璁惧鐘舵�� 鍏紡 鍚敤璁剧疆
-     */
-    @Log(title = "澶囩姸鎬佸叕寮忓惎鐢ㄨ缃�", businessType = BusinessType.UPDATE)
-    @PostMapping(value="/setIsEnable/{nodeId}/{isEnable}")
-    public AjaxResult editDeviceFormulaIsEnable(@PathVariable String nodeId,@PathVariable String isEnable,@RequestBody String[] ids)
-    {
-        return toAjax(deviceFormulaService.editDeviceFormulaIsEnable(nodeId,isEnable,ids));
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/DeviceFormula.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/DeviceFormula.java
deleted file mode 100644
index b6e9cff..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/DeviceFormula.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.domain;
-
-import com.dingzhuo.energy.data.model.domain.StateType;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 璁惧璁$畻鍏紡瀵硅薄 device_formula
- * 
- * @author zhaow
- * @date 2020-03-20
- */
-public class DeviceFormula extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 涓婚敭id */
-    private String id;
-
-    /** 璁惧妯″瀷鏍戠殑nodeid */
-    private String deviceId;
-
-    /** 璁惧鐘舵�佽〃鐨刬d */
-    private String stateId;
-
-    /** 璁惧鐘舵�佽缃殑璁$畻鍏紡 */
-    private String formulaText;
-
-    /** 寮曟搸鐢ㄨ绠楁枃鏈� */
-    private String calcText;
-    /**
-     * 鏄惁鍚敤
-     */
-    private String isEnable;
-
-    /**
-     * 璁惧鎸囧畾鐨勭郴缁熺姸鎬佷俊鎭�
-     */
-    private StateType stateType;
-    /**
-     * 璁惧鐘舵�佽绠楀叕寮忎笅鐨� 鍙傛暟闆嗗悎瀵硅薄
-     */
-    private List<DeviceFormulaParam> deviceFormulaParams = new ArrayList<>();
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setDeviceId(String deviceId) 
-    {
-        this.deviceId = deviceId;
-    }
-
-    public String getDeviceId() 
-    {
-        return deviceId;
-    }
-    public void setStateId(String stateId) 
-    {
-        this.stateId = stateId;
-    }
-
-    public String getStateId() 
-    {
-        return stateId;
-    }
-    public void setFormulaText(String formulaText) 
-    {
-        this.formulaText = formulaText;
-    }
-
-    public String getFormulaText() 
-    {
-        return formulaText;
-    }
-    public void setCalcText(String calcText) 
-    {
-        this.calcText = calcText;
-    }
-
-    public String getCalcText() 
-    {
-        return calcText;
-    }
-
-    public List<DeviceFormulaParam> getDeviceFormulaParams() {
-        return deviceFormulaParams;
-    }
-
-    public void setDeviceFormulaParams(List<DeviceFormulaParam> deviceFormulaParams) {
-        this.deviceFormulaParams = deviceFormulaParams;
-    }
-
-    public String getIsEnable() {
-        return isEnable;
-    }
-
-    public void setIsEnable(String isEnable) {
-        this.isEnable = isEnable;
-    }
-
-    public StateType getStateType() {
-        return stateType;
-    }
-
-    public void setStateType(StateType stateType) {
-        this.stateType = stateType;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("deviceId", getDeviceId())
-            .append("stateId", getStateId())
-            .append("formulaText", getFormulaText())
-            .append("calcText", getCalcText())
-            .toString();
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/DeviceFormulaParam.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/DeviceFormulaParam.java
deleted file mode 100644
index 43ea6c3..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/DeviceFormulaParam.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 璁惧鐘舵�佸弬鏁板璞� device_formula_param
- * 
- * @author zhaow
- * @date 2020-03-20
- */
-public class DeviceFormulaParam extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 涓婚敭id */
-    private String id;
-
-    /** device_formula琛ㄧ殑涓婚敭Id */
-    private String devFormulaId;
-
-    /** 璁$畻鍏紡涓弬鏁板悕绉� */
-    private String paramName;
-
-    /** 璁$畻鍏紡涓弬鏁板�� */
-    private String paramValue;
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setDevFormulaId(String devFormulaId) 
-    {
-        this.devFormulaId = devFormulaId;
-    }
-
-    public String getDevFormulaId() 
-    {
-        return devFormulaId;
-    }
-    public void setParamName(String paramName) 
-    {
-        this.paramName = paramName;
-    }
-
-    public String getParamName() 
-    {
-        return paramName;
-    }
-    public void setParamValue(String paramValue) 
-    {
-        this.paramValue = paramValue;
-    }
-
-    public String getParamValue() 
-    {
-        return paramValue;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("devFormulaId", getDevFormulaId())
-            .append("paramName", getParamName())
-            .append("paramValue", getParamValue())
-            .toString();
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/DeviceStatusHistory.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/DeviceStatusHistory.java
deleted file mode 100644
index 355dfe0..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/DeviceStatusHistory.java
+++ /dev/null
@@ -1,177 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * 璁惧鍚仠鍘嗗彶鐩戞祴瀵硅薄 device_status_history
- * 
- * @author sys
- * @date 2020-03-25
- */
-public class DeviceStatusHistory extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 涓婚敭 */
-    private String id;
-
-    /**
-     * 鍚嶇О
-     * */
-    @Excel(name = "璁惧鍚嶇О")
-    private String indexName;
-
-    /** 璁惧涓婚敭 */
-//    @Excel(name = "璁惧涓婚敭")
-    private String deviceId;
-
-    /** 鍏宠仈鐘舵�侀厤缃� */
-//    @Excel(name = "鍏宠仈鐘舵�侀厤缃�")
-    private String statusId;
-
-    /** 璁惧鐘舵�佸悕绉� */
-    @Excel(name = "璁惧鐘舵��")
-    private String statusName;
-
-    /** 璁惧鐘舵�佺爜 */
-//    @Excel(name = "璁惧鐘舵�佺爜")
-    private String statusCode;
-
-    /** 鐘舵�佸紑濮嬫椂闂� */
-    @Excel(name = "寮�濮嬫椂闂�", width = 30)
-    private String devBeginTime;
-
-    /** 鐘舵�佺粨鏉熸椂闂� */
-    @Excel(name = "缁撴潫鏃堕棿", width = 30)
-    private String devEndTime;
-
-    /** 鐘舵�佹寔缁椂闂� */
-    @Excel(name = "鎸佺画鏃堕棿")
-    private String duration;
-
-    /**
-     * 妯″瀷鏌ヨ灞傜骇鏍囧織 B鏈骇  ALL鍖呭惈涓嬬骇
-     * */
-    private String eierarchyFlag;
-    /**
-     * 鎸囨爣绫诲瀷 COLLECT閲囬泦鐐�  STATISTIC鎸囨爣
-     * */
-    private String indexType;
-
-
-
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setDeviceId(String deviceId) 
-    {
-        this.deviceId = deviceId;
-    }
-
-    public String getDeviceId() 
-    {
-        return deviceId;
-    }
-    public void setStatusId(String statusId) 
-    {
-        this.statusId = statusId;
-    }
-
-    public String getStatusId() 
-    {
-        return statusId;
-    }
-    public void setStatusName(String statusName) 
-    {
-        this.statusName = statusName;
-    }
-
-    public String getStatusName() 
-    {
-        return statusName;
-    }
-    public void setStatusCode(String statusCode) 
-    {
-        this.statusCode = statusCode;
-    }
-
-    public String getStatusCode() 
-    {
-        return statusCode;
-    }
-
-    public String getDevBeginTime() {
-        return devBeginTime;
-    }
-
-    public void setDevBeginTime(String devBeginTime) {
-        this.devBeginTime = devBeginTime;
-    }
-
-    public String getDevEndTime() {
-        return devEndTime;
-    }
-
-    public void setDevEndTime(String devEndTime) {
-        this.devEndTime = devEndTime;
-    }
-
-    public void setDuration(String duration)
-    {
-        this.duration = duration;
-    }
-
-    public String getDuration()
-    {
-        return duration;
-    }
-
-    public String getEierarchyFlag() {
-        return eierarchyFlag;
-    }
-
-    public void setEierarchyFlag(String eierarchyFlag) {
-        this.eierarchyFlag = eierarchyFlag;
-    }
-
-    public String getIndexType() {
-        return indexType;
-    }
-
-    public void setIndexType(String indexType) {
-        this.indexType = indexType;
-    }
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("deviceId", getDeviceId())
-            .append("statusId", getStatusId())
-            .append("statusName", getStatusName())
-            .append("statusCode", getStatusCode())
-            .append("beginTime", getBeginTime())
-            .append("endTime", getEndTime())
-            .append("duration", getDuration())
-            .toString();
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/DeviceStatusLive.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/DeviceStatusLive.java
deleted file mode 100644
index d36d02e..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/DeviceStatusLive.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.domain;
-
-import com.dingzhuo.energy.data.model.domain.StateType;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * 璁惧鍚仠瀹炴椂鐩戞祴瀵硅薄 device_status_live
- * 
- * @author sys
- * @date 2020-03-23
- */
-public class DeviceStatusLive extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 涓婚敭 */
-    private String id;
-
-    /** 璁惧涓婚敭鍏宠仈妯″瀷鐨勮妭鐐笽D */
-    @Excel(name = "璁惧涓婚敭鍏宠仈妯″瀷鐨勮妭鐐笽D")
-    private String deviceId;
-
-    /** 鍏宠仈鐘舵�侀厤缃紝鍏宠仈state_type.id */
-    @Excel(name = "鍏宠仈鐘舵�侀厤缃紝鍏宠仈state_type.id")
-    private String statusId;
-
-    /** 璁惧鐘舵�佸悕绉� */
-    @Excel(name = "璁惧鐘舵�佸悕绉�")
-    private String statusName;
-
-    /** 璁惧鐘舵�佺爜 */
-    @Excel(name = "璁惧鐘舵�佺爜")
-    private String statusCode;
-
-    /** 鐘舵�佸紑濮嬫椂闂� */
-    @Excel(name = "鐘舵�佸紑濮嬫椂闂�", width = 30, dateFormat = "yyyy-MM-dd")
-    private String beginTime;
-    /**
-     * 妯″瀷涓枃鍚嶇О
-     */
-    private String modelNodeName;
-    /**
-     * 鐘舵�佺被鍨�
-     */
-    private StateType stateType;
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setDeviceId(String deviceId) 
-    {
-        this.deviceId = deviceId;
-    }
-
-    public String getDeviceId() 
-    {
-        return deviceId;
-    }
-    public void setStatusId(String statusId) 
-    {
-        this.statusId = statusId;
-    }
-
-    public String getStatusId() 
-    {
-        return statusId;
-    }
-    public void setStatusName(String statusName) 
-    {
-        this.statusName = statusName;
-    }
-
-    public String getStatusName() 
-    {
-        return statusName;
-    }
-    public void setStatusCode(String statusCode) 
-    {
-        this.statusCode = statusCode;
-    }
-
-    public String getStatusCode() 
-    {
-        return statusCode;
-    }
-    public void setBeginTime(String beginTime)
-    {
-        this.beginTime = beginTime;
-    }
-
-    public String getBeginTime()
-    {
-        return beginTime;
-    }
-
-    public StateType getStateType() {
-        return stateType;
-    }
-
-    public void setStateType(StateType stateType) {
-        this.stateType = stateType;
-    }
-
-    public String getModelNodeName() {
-        return modelNodeName;
-    }
-
-    public void setModelNodeName(String modelNodeName) {
-        this.modelNodeName = modelNodeName;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("deviceId", getDeviceId())
-            .append("statusId", getStatusId())
-            .append("statusName", getStatusName())
-            .append("statusCode", getStatusCode())
-            .append("beginTime", getBeginTime())
-            .toString();
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/EquipmentMeasuringPointParameters.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/EquipmentMeasuringPointParameters.java
deleted file mode 100644
index 400fea7..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/EquipmentMeasuringPointParameters.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.domain;
-
-
-/**
- * 璁惧鐩戞祴鍙傛暟鍒楄〃瀵硅薄
- *
- * @author
- * @date 2020-03-24
- */
-public class EquipmentMeasuringPointParameters {
-
-
-    private String code;
-
-    private String indexName;
-
-    private String indexUnit;
-
-    private Double value;
-
-    private String yValue;
-
-    private String meteName;
-
-    public String getyValue() {
-        return yValue;
-    }
-
-    public void setyValue(String yValue) {
-        this.yValue = yValue;
-    }
-
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-
-    public String getIndexUnit() {
-        return indexUnit;
-    }
-
-    public void setIndexUnit(String indexUnit) {
-        this.indexUnit = indexUnit;
-    }
-
-    public Double getValue() {
-        return value;
-    }
-
-    public void setValue(Double value) {
-        this.value = value;
-    }
-
-    public String getMeteName() {
-        return meteName;
-    }
-
-    public void setMeteName(String meteName) {
-        this.meteName = meteName;
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/HistoryDeviceStatus.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/HistoryDeviceStatus.java
deleted file mode 100644
index aab2f27..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/HistoryDeviceStatus.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.domain;
-
-import java.util.Date;
-
-public class HistoryDeviceStatus {
-  private String id;
-  private String deviceId;
-  private Date beginTime;
-  private Date endTime;
-  private String status;
-  private double duration;
-
-  public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public String getDeviceId() {
-    return deviceId;
-  }
-
-  public void setDeviceId(String deviceId) {
-    this.deviceId = deviceId;
-  }
-
-  public Date getBeginTime() {
-    return beginTime;
-  }
-
-  public void setBeginTime(Date beginTime) {
-    this.beginTime = beginTime;
-  }
-
-  public Date getEndTime() {
-    return endTime;
-  }
-
-  public void setEndTime(Date endTime) {
-    this.endTime = endTime;
-  }
-
-  public String getStatus() {
-    return status;
-  }
-
-  public void setStatus(String status) {
-    this.status = status;
-  }
-
-  public double getDuration() {
-    return duration;
-  }
-
-  public void setDuration(double duration) {
-    this.duration = duration;
-  }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/RealtimeDeviceStatus.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/RealtimeDeviceStatus.java
deleted file mode 100644
index 24ac7c4..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/RealtimeDeviceStatus.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.domain;
-
-import java.util.Date;
-
-public class RealtimeDeviceStatus {
-  private String id;
-  private String deviceId;
-  private Date beginTime;
-  private String status;
-
-  public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public String getDeviceId() {
-    return deviceId;
-  }
-
-  public void setDeviceId(String deviceId) {
-    this.deviceId = deviceId;
-  }
-
-  public Date getBeginTime() {
-    return beginTime;
-  }
-
-  public void setBeginTime(Date beginTime) {
-    this.beginTime = beginTime;
-  }
-
-  public String getStatus() {
-    return status;
-  }
-
-  public void setStatus(String status) {
-    this.status = status;
-  }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/vo/EquipmentPointParametersExcel.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/vo/EquipmentPointParametersExcel.java
deleted file mode 100644
index 80af8e1..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/vo/EquipmentPointParametersExcel.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.domain.vo;
-
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-
-/**
- * 璁惧鐐逛綅瀹炴椂鏁版嵁杩斿洖 Excel
- *
- * @Author: Zhujw
- * @Date: 2023/3/6
- */
-public class EquipmentPointParametersExcel {
-
-    /**
-     * 鐐逛綅鍚嶇О
-     */
-    @Excel(name = "鐐逛綅鍚嶇О")
-    private String indexName;
-
-    /**
-     * 鍊�
-     */
-    @Excel(name = "褰撳墠鍊�")
-    private String value;
-
-    /**
-     * 鍗曚綅
-     */
-    @Excel(name = "鍗曚綅")
-    private String indexUnit;
-
-    /**
-     * 鏃堕棿瀛楃涓�
-     */
-    @Excel(name = "鏃堕棿")
-    private String timeString;
-
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-
-    public String getIndexUnit() {
-        return indexUnit;
-    }
-
-    public void setIndexUnit(String indexUnit) {
-        this.indexUnit = indexUnit;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getTimeString() {
-        return timeString;
-    }
-
-    public void setTimeString(String timeString) {
-        this.timeString = timeString;
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/vo/EquipmentPointParametersVO.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/vo/EquipmentPointParametersVO.java
deleted file mode 100644
index 1895342..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/domain/vo/EquipmentPointParametersVO.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.domain.vo;
-
-
-/**
- * 璁惧鐐逛綅瀹炴椂鏁版嵁杩斿洖 vo
- *
- * @Author: Zhujw
- * @Date: 2023/3/6
- */
-public class EquipmentPointParametersVO {
-
-    /**
-     * 鐐逛綅缂栫爜
-     */
-    private String code;
-
-    /**
-     * 鐐逛綅鍚嶇О
-     */
-    private String indexName;
-
-    /**
-     * 鏃堕棿瀛楃涓�
-     */
-    private String timeString;
-
-    /**
-     * 鐐逛綅鍗曚綅
-     */
-    private String indexUnit;
-
-    /**
-     * 鍊�
-     */
-    private String value;
-
-
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-
-    public String getIndexUnit() {
-        return indexUnit;
-    }
-
-    public void setIndexUnit(String indexUnit) {
-        this.indexUnit = indexUnit;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getTimeString() {
-        return timeString;
-    }
-
-    public void setTimeString(String timeString) {
-        this.timeString = timeString;
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/mapper/DeviceFormulaMapper.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/mapper/DeviceFormulaMapper.java
deleted file mode 100644
index 9037114..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/mapper/DeviceFormulaMapper.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.mapper;
-
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceFormula;
-import java.util.List;
-
-/**
- * 璁惧璁$畻鍏紡Mapper鎺ュ彛
- * 
- * @author zhaow
- * @date 2020-03-20
- */
-public interface DeviceFormulaMapper 
-{
-    /**
-     * 鏌ヨ璁惧璁$畻鍏紡
-     * 
-     * @param id 璁惧璁$畻鍏紡ID
-     * @return 璁惧璁$畻鍏紡
-     */
-    DeviceFormula selectDeviceFormulaById(String id);
-
-    /**
-     * 鏌ヨ璁惧璁$畻鍏紡鍒楄〃
-     * 
-     * @param deviceFormula 璁惧璁$畻鍏紡
-     * @return 璁惧璁$畻鍏紡闆嗗悎
-     */
-    List<DeviceFormula> selectDeviceFormulaList(DeviceFormula deviceFormula);
-
-    /**
-     * 鏂板璁惧璁$畻鍏紡
-     * 
-     * @param deviceFormula 璁惧璁$畻鍏紡
-     * @return 缁撴灉
-     */
-    int insertDeviceFormula(DeviceFormula deviceFormula);
-
-    /**
-     * 淇敼璁惧璁$畻鍏紡
-     * 
-     * @param deviceFormula 璁惧璁$畻鍏紡
-     * @return 缁撴灉
-     */
-    int updateDeviceFormula(DeviceFormula deviceFormula);
-
-    /**
-     * 鍒犻櫎璁惧璁$畻鍏紡
-     * 
-     * @param id 璁惧璁$畻鍏紡ID
-     * @return 缁撴灉
-     */
-    int deleteDeviceFormulaById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎璁惧璁$畻鍏紡
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    int deleteDeviceFormulaByIds(String[] ids);
-
-    /**
-     * 鍙栨牴鎹� 璁惧妯″瀷 鑺傜偣ID  鍜�  璁惧鐘舵�佷富閿� ID  鍙�  璁惧鍏紡淇℃伅
-     * @param nodeId
-     * @param stateId
-     * @return
-     */
-    DeviceFormula getDeviceFormula(String nodeId, String stateId) ;
-
-    /**
-     * 璁惧鐘舵�� 鍏紡 鍚敤璁剧疆
-     */
-    int editDeviceFormulaIsEnable(String nodeId, String isEnable, String[] ids);
-
-    List<DeviceFormula> getAllDeviceFormula();
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/mapper/DeviceFormulaParamMapper.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/mapper/DeviceFormulaParamMapper.java
deleted file mode 100644
index c03363d..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/mapper/DeviceFormulaParamMapper.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.mapper;
-
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceFormulaParam;
-import java.util.List;
-
-/**
- * 璁惧鐘舵�佸弬鏁癕apper鎺ュ彛
- * 
- * @author zhaow
- * @date 2020-03-20
- */
-public interface DeviceFormulaParamMapper 
-{
-    /**
-     * 鏌ヨ璁惧鐘舵�佸弬鏁�
-     * 
-     * @param id 璁惧鐘舵�佸弬鏁癐D
-     * @return 璁惧鐘舵�佸弬鏁�
-     */
-    public DeviceFormulaParam selectDeviceFormulaParamById(String id);
-
-    /**
-     * 鏌ヨ璁惧鐘舵�佸弬鏁板垪琛�
-     * 
-     * @param deviceFormulaParam 璁惧鐘舵�佸弬鏁�
-     * @return 璁惧鐘舵�佸弬鏁伴泦鍚�
-     */
-    public List<DeviceFormulaParam> selectDeviceFormulaParamList(DeviceFormulaParam deviceFormulaParam);
-
-    /**
-     * 鏂板璁惧鐘舵�佸弬鏁�
-     * 
-     * @param deviceFormulaParam 璁惧鐘舵�佸弬鏁�
-     * @return 缁撴灉
-     */
-    public int insertDeviceFormulaParam(DeviceFormulaParam deviceFormulaParam);
-
-    /**
-     * 淇敼璁惧鐘舵�佸弬鏁�
-     * 
-     * @param deviceFormulaParam 璁惧鐘舵�佸弬鏁�
-     * @return 缁撴灉
-     */
-    public int updateDeviceFormulaParam(DeviceFormulaParam deviceFormulaParam);
-
-    /**
-     * 鍒犻櫎璁惧鐘舵�佸弬鏁�
-     * 
-     * @param id 璁惧鐘舵�佸弬鏁癐D
-     * @return 缁撴灉
-     */
-    public int deleteDeviceFormulaParamById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎璁惧鐘舵�佸弬鏁�
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteDeviceFormulaParamByIds(String[] ids);
-
-    /**
-     * 鏍规嵁 璁惧鍏紡琛ㄤ富閿甀D鏌ヨ璁惧鐘舵�佸弬鏁板垪琛�
-     *
-     * @param devFormulaId 璁惧鍏紡琛ㄤ富閿甀D
-     * @return 璁惧鐘舵�佸弬鏁伴泦鍚�
-     */
-    public List<DeviceFormulaParam> getFormulaParam(String devFormulaId);
-
-    /**
-     * 淇濆瓨璁惧閰嶇疆鐨勭姸鎬佺殑鍏紡鍙傛暟 鏍规嵁鍏紡涓婚敭鍜屽弬鏁伴泦鍚�
-     * @param devFormulaId
-     * @param deviceFormulaParams
-     */
-    void saveDeviceFormulaParam(String devFormulaId, List<DeviceFormulaParam> deviceFormulaParams);
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/mapper/DeviceStatusHistoryMapper.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/mapper/DeviceStatusHistoryMapper.java
deleted file mode 100644
index fec7060..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/mapper/DeviceStatusHistoryMapper.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.mapper;
-
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceStatusHistory;
-import java.util.List;
-
-/**
- * 璁惧鍚仠鍘嗗彶鐩戞祴Mapper鎺ュ彛
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface DeviceStatusHistoryMapper 
-{
-    /**
-     * 鏌ヨ璁惧鍚仠鍘嗗彶鐩戞祴
-     * 
-     * @param id 璁惧鍚仠鍘嗗彶鐩戞祴ID
-     * @return 璁惧鍚仠鍘嗗彶鐩戞祴
-     */
-    DeviceStatusHistory selectDeviceStatusHistoryById(String id);
-
-    /**
-     * 鏌ヨ璁惧鍚仠鍘嗗彶鐩戞祴鍒楄〃
-     * 
-     * @param deviceStatusHistory 璁惧鍚仠鍘嗗彶鐩戞祴
-     * @return 璁惧鍚仠鍘嗗彶鐩戞祴闆嗗悎
-     */
-    List<DeviceStatusHistory> selectDeviceStatusHistoryList(DeviceStatusHistory deviceStatusHistory);
-
-    /**
-     * 鏂板璁惧鍚仠鍘嗗彶鐩戞祴
-     * 
-     * @param deviceStatusHistory 璁惧鍚仠鍘嗗彶鐩戞祴
-     * @return 缁撴灉
-     */
-    int insertDeviceStatusHistory(DeviceStatusHistory deviceStatusHistory);
-
-    /**
-     * 淇敼璁惧鍚仠鍘嗗彶鐩戞祴
-     * 
-     * @param deviceStatusHistory 璁惧鍚仠鍘嗗彶鐩戞祴
-     * @return 缁撴灉
-     */
-    int updateDeviceStatusHistory(DeviceStatusHistory deviceStatusHistory);
-
-    /**
-     * 鍒犻櫎璁惧鍚仠鍘嗗彶鐩戞祴
-     * 
-     * @param id 璁惧鍚仠鍘嗗彶鐩戞祴ID
-     * @return 缁撴灉
-     */
-    int deleteDeviceStatusHistoryById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎璁惧鍚仠鍘嗗彶鐩戞祴
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    int deleteDeviceStatusHistoryByIds(String[] ids);
-
-    /**
-     * 鏌ヨ璁惧鍚仠鍘嗗彶鐩戞祴鍒楄〃锛堟柊鍔狅級
-     *
-     * @param deviceStatusHistory 璁惧鍚仠鍘嗗彶鐩戞祴
-     * @return 璁惧鍚仠鍘嗗彶鐩戞祴闆嗗悎
-     */
-    List<DeviceStatusHistory> selectDeviceStatusHistoryListNew(DeviceStatusHistory deviceStatusHistory);
-
-  void saveHistoryStatus(DeviceStatusHistory history);
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/mapper/DeviceStatusLiveMapper.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/mapper/DeviceStatusLiveMapper.java
deleted file mode 100644
index 8bc5614..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/mapper/DeviceStatusLiveMapper.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.mapper;
-
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceStatusLive;
-import java.util.List;
-
-/**
- * 璁惧鍚仠瀹炴椂鐩戞祴Mapper鎺ュ彛
- * 
- * @author sys
- * @date 2020-03-23
- */
-public interface DeviceStatusLiveMapper 
-{
-    /**
-     * 鏌ヨ璁惧鍚仠瀹炴椂鐩戞祴
-     * 
-     * @param id 璁惧鍚仠瀹炴椂鐩戞祴ID
-     * @return 璁惧鍚仠瀹炴椂鐩戞祴
-     */
-    DeviceStatusLive selectDeviceStatusLiveById(String id);
-
-    /**
-     * 鏌ヨ璁惧鍚仠瀹炴椂鐩戞祴鍒楄〃
-     * 
-     * @param deviceStatusLive 璁惧鍚仠瀹炴椂鐩戞祴
-     * @return 璁惧鍚仠瀹炴椂鐩戞祴闆嗗悎
-     */
-    List<DeviceStatusLive> selectDeviceStatusLiveList(DeviceStatusLive deviceStatusLive);
-
-    /**
-     * 鏂板璁惧鍚仠瀹炴椂鐩戞祴
-     * 
-     * @param deviceStatusLive 璁惧鍚仠瀹炴椂鐩戞祴
-     * @return 缁撴灉
-     */
-    int insertDeviceStatusLive(DeviceStatusLive deviceStatusLive);
-
-    /**
-     * 淇敼璁惧鍚仠瀹炴椂鐩戞祴
-     * 
-     * @param deviceStatusLive 璁惧鍚仠瀹炴椂鐩戞祴
-     * @return 缁撴灉
-     */
-    int updateDeviceStatusLive(DeviceStatusLive deviceStatusLive);
-
-    /**
-     * 鍒犻櫎璁惧鍚仠瀹炴椂鐩戞祴
-     * 
-     * @param id 璁惧鍚仠瀹炴椂鐩戞祴ID
-     * @return 缁撴灉
-     */
-    int deleteDeviceStatusLiveById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎璁惧鍚仠瀹炴椂鐩戞祴
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    int deleteDeviceStatusLiveByIds(String[] ids);
-
-    DeviceStatusLive getDeviceStatus(String deviceId, String statusId);
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/IDeviceFormulaParamService.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/IDeviceFormulaParamService.java
deleted file mode 100644
index 9acaf13..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/IDeviceFormulaParamService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.service;
-
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceFormulaParam;
-import java.util.List;
-
-/**
- * 璁惧鐘舵�佸弬鏁癝ervice鎺ュ彛
- * 
- * @author zhaow
- * @date 2020-03-20
- */
-public interface IDeviceFormulaParamService 
-{
-    /**
-     * 鏌ヨ璁惧鐘舵�佸弬鏁�
-     * 
-     * @param id 璁惧鐘舵�佸弬鏁癐D
-     * @return 璁惧鐘舵�佸弬鏁�
-     */
-    public DeviceFormulaParam selectDeviceFormulaParamById(String id);
-
-    /**
-     * 鏌ヨ璁惧鐘舵�佸弬鏁板垪琛�
-     * 
-     * @param deviceFormulaParam 璁惧鐘舵�佸弬鏁�
-     * @return 璁惧鐘舵�佸弬鏁伴泦鍚�
-     */
-    public List<DeviceFormulaParam> selectDeviceFormulaParamList(DeviceFormulaParam deviceFormulaParam);
-
-    /**
-     * 鏂板璁惧鐘舵�佸弬鏁�
-     * 
-     * @param deviceFormulaParam 璁惧鐘舵�佸弬鏁�
-     * @return 缁撴灉
-     */
-    public int insertDeviceFormulaParam(DeviceFormulaParam deviceFormulaParam);
-
-    /**
-     * 淇敼璁惧鐘舵�佸弬鏁�
-     * 
-     * @param deviceFormulaParam 璁惧鐘舵�佸弬鏁�
-     * @return 缁撴灉
-     */
-    public int updateDeviceFormulaParam(DeviceFormulaParam deviceFormulaParam);
-
-    /**
-     * 鎵归噺鍒犻櫎璁惧鐘舵�佸弬鏁�
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑璁惧鐘舵�佸弬鏁癐D
-     * @return 缁撴灉
-     */
-    public int deleteDeviceFormulaParamByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎璁惧鐘舵�佸弬鏁颁俊鎭�
-     * 
-     * @param id 璁惧鐘舵�佸弬鏁癐D
-     * @return 缁撴灉
-     */
-    public int deleteDeviceFormulaParamById(String id);
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/IDeviceFormulaService.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/IDeviceFormulaService.java
deleted file mode 100644
index 4d153ba..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/IDeviceFormulaService.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.service;
-
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceFormula;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-
-import java.util.List;
-
-/**
- * 璁惧璁$畻鍏紡Service鎺ュ彛
- *
- * @author zhaow
- * @date 2020-03-20
- */
-public interface IDeviceFormulaService {
-
-  /**
-   * 鏌ヨ璁惧璁$畻鍏紡
-   *
-   * @param id 璁惧璁$畻鍏紡ID
-   * @return 璁惧璁$畻鍏紡
-   */
-  DeviceFormula selectDeviceFormulaById(String id);
-
-  /**
-   * 鏌ヨ璁惧璁$畻鍏紡鍒楄〃
-   *
-   * @param deviceFormula 璁惧璁$畻鍏紡
-   * @return 璁惧璁$畻鍏紡闆嗗悎
-   */
-  List<DeviceFormula> selectDeviceFormulaList(DeviceFormula deviceFormula);
-
-  /**
-   * 鏂板璁惧璁$畻鍏紡
-   *
-   * @param deviceFormula 璁惧璁$畻鍏紡
-   * @return 缁撴灉
-   */
-  int insertDeviceFormula(DeviceFormula deviceFormula);
-
-  /**
-   * 淇敼璁惧璁$畻鍏紡
-   *
-   * @param deviceFormula 璁惧璁$畻鍏紡
-   * @return 缁撴灉
-   */
-  int updateDeviceFormula(DeviceFormula deviceFormula);
-
-  /**
-   * 鎵归噺鍒犻櫎璁惧璁$畻鍏紡
-   *
-   * @param ids 闇�瑕佸垹闄ょ殑璁惧璁$畻鍏紡ID
-   * @return 缁撴灉
-   */
-  int deleteDeviceFormulaByIds(String[] ids);
-
-  /**
-   * 鍒犻櫎璁惧璁$畻鍏紡淇℃伅
-   *
-   * @param id 璁惧璁$畻鍏紡ID
-   * @return 缁撴灉
-   */
-  int deleteDeviceFormulaById(String id);
-
-  /**
-   * 鍙栨牴鎹� 璁惧妯″瀷 鑺傜偣ID  鍜�  璁惧鐘舵�佷富閿� ID  鍙�  璁惧鍏紡淇℃伅
-   *
-   * @param nodeId
-   * @param stateId
-   * @return
-   */
-  DeviceFormula getDeviceFormula(String nodeId, String stateId);
-
-  /**
-   * 璁惧鐘舵�� 閰嶇疆 鍏紡淇濆瓨
-   *
-   * @param deviceFormula
-   * @return
-   */
-  void saveDeviceFormula(DeviceFormula deviceFormula);
-
-  /**
-   * 璁惧鐘舵�� 鍏紡 鍚敤璁剧疆
-   */
-  int editDeviceFormulaIsEnable(String nodeId, String isEnable, String[] ids);
-
-  List<DeviceFormula> getAllDeviceFormula();
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/IDeviceStatusHistoryService.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/IDeviceStatusHistoryService.java
deleted file mode 100644
index 7e70c14..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/IDeviceStatusHistoryService.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.service;
-
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceStatusHistory;
-import java.util.List;
-
-/**
- * 璁惧鍚仠鍘嗗彶鐩戞祴Service鎺ュ彛
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface IDeviceStatusHistoryService 
-{
-    /**
-     * 鏌ヨ璁惧鍚仠鍘嗗彶鐩戞祴
-     * 
-     * @param id 璁惧鍚仠鍘嗗彶鐩戞祴ID
-     * @return 璁惧鍚仠鍘嗗彶鐩戞祴
-     */
-    DeviceStatusHistory selectDeviceStatusHistoryById(String id);
-
-    /**
-     * 鏌ヨ璁惧鍚仠鍘嗗彶鐩戞祴鍒楄〃
-     * 
-     * @param deviceStatusHistory 璁惧鍚仠鍘嗗彶鐩戞祴
-     * @return 璁惧鍚仠鍘嗗彶鐩戞祴闆嗗悎
-     */
-    List<DeviceStatusHistory> selectDeviceStatusHistoryList(DeviceStatusHistory deviceStatusHistory);
-
-    /**
-     * 鏂板璁惧鍚仠鍘嗗彶鐩戞祴
-     * 
-     * @param deviceStatusHistory 璁惧鍚仠鍘嗗彶鐩戞祴
-     * @return 缁撴灉
-     */
-    int insertDeviceStatusHistory(DeviceStatusHistory deviceStatusHistory);
-
-    /**
-     * 淇敼璁惧鍚仠鍘嗗彶鐩戞祴
-     * 
-     * @param deviceStatusHistory 璁惧鍚仠鍘嗗彶鐩戞祴
-     * @return 缁撴灉
-     */
-    int updateDeviceStatusHistory(DeviceStatusHistory deviceStatusHistory);
-
-    /**
-     * 鎵归噺鍒犻櫎璁惧鍚仠鍘嗗彶鐩戞祴
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑璁惧鍚仠鍘嗗彶鐩戞祴ID
-     * @return 缁撴灉
-     */
-    int deleteDeviceStatusHistoryByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎璁惧鍚仠鍘嗗彶鐩戞祴淇℃伅
-     * 
-     * @param id 璁惧鍚仠鍘嗗彶鐩戞祴ID
-     * @return 缁撴灉
-     */
-    int deleteDeviceStatusHistoryById(String id);
-
-
-    /**
-     * 鏌ヨ璁惧鍚仠鍘嗗彶鐩戞祴鍒楄〃锛堟柊鍔狅級
-     *
-     * @param deviceStatusHistory 璁惧鍚仠鍘嗗彶鐩戞祴
-     * @return 璁惧鍚仠鍘嗗彶鐩戞祴闆嗗悎
-     */
-    List<DeviceStatusHistory> selectDeviceStatusHistoryListNew(DeviceStatusHistory deviceStatusHistory);
-
-    void saveHistoryStatus(DeviceStatusHistory history);
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/IDeviceStatusLiveService.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/IDeviceStatusLiveService.java
deleted file mode 100644
index e9a3300..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/IDeviceStatusLiveService.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.service;
-
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceStatusLive;
-import java.util.List;
-
-/**
- * 璁惧鍚仠瀹炴椂鐩戞祴Service鎺ュ彛
- * 
- * @author sys
- * @date 2020-03-23
- */
-public interface IDeviceStatusLiveService 
-{
-    /**
-     * 鏌ヨ璁惧鍚仠瀹炴椂鐩戞祴
-     * 
-     * @param id 璁惧鍚仠瀹炴椂鐩戞祴ID
-     * @return 璁惧鍚仠瀹炴椂鐩戞祴
-     */
-    DeviceStatusLive selectDeviceStatusLiveById(String id);
-
-    /**
-     * 鏌ヨ璁惧鍚仠瀹炴椂鐩戞祴鍒楄〃
-     * 
-     * @param deviceStatusLive 璁惧鍚仠瀹炴椂鐩戞祴
-     * @return 璁惧鍚仠瀹炴椂鐩戞祴闆嗗悎
-     */
-    List<DeviceStatusLive> selectDeviceStatusLiveList(DeviceStatusLive deviceStatusLive);
-
-    /**
-     * 鏂板璁惧鍚仠瀹炴椂鐩戞祴
-     * 
-     * @param deviceStatusLive 璁惧鍚仠瀹炴椂鐩戞祴
-     * @return 缁撴灉
-     */
-    int insertDeviceStatusLive(DeviceStatusLive deviceStatusLive);
-
-    /**
-     * 淇敼璁惧鍚仠瀹炴椂鐩戞祴
-     * 
-     * @param deviceStatusLive 璁惧鍚仠瀹炴椂鐩戞祴
-     * @return 缁撴灉
-     */
-    int updateDeviceStatusLive(DeviceStatusLive deviceStatusLive);
-
-    /**
-     * 鎵归噺鍒犻櫎璁惧鍚仠瀹炴椂鐩戞祴
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑璁惧鍚仠瀹炴椂鐩戞祴ID
-     * @return 缁撴灉
-     */
-    int deleteDeviceStatusLiveByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎璁惧鍚仠瀹炴椂鐩戞祴淇℃伅
-     * 
-     * @param id 璁惧鍚仠瀹炴椂鐩戞祴ID
-     * @return 缁撴灉
-     */
-    int deleteDeviceStatusLiveById(String id);
-
-    DeviceStatusLive getDeviceStatus(String deviceId, String stateId);
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/IHistoryDeviceStatus.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/IHistoryDeviceStatus.java
deleted file mode 100644
index fbf9620..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/IHistoryDeviceStatus.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.service;
-
-import com.dingzhuo.energy.data.monitoring.device.domain.HistoryDeviceStatus;
-
-import java.util.Date;
-import java.util.List;
-
-public interface IHistoryDeviceStatus {
-  List<HistoryDeviceStatus> getHistoryDeviceStatus(Date beginTime, Date endTime);
-
-  List<HistoryDeviceStatus> getHistoryDeviceStatus(Date beginTime, Date endTime, String status);
-
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/IRealtimeDeviceStatus.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/IRealtimeDeviceStatus.java
deleted file mode 100644
index efabfa1..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/IRealtimeDeviceStatus.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.service;
-
-import com.dingzhuo.energy.data.monitoring.device.domain.RealtimeDeviceStatus;
-
-import java.util.List;
-
-public interface IRealtimeDeviceStatus {
-  List<RealtimeDeviceStatus> getRealtimeDeviceStatus();
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/impl/DeviceFormulaParamServiceImpl.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/impl/DeviceFormulaParamServiceImpl.java
deleted file mode 100644
index ff3bfce..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/impl/DeviceFormulaParamServiceImpl.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.service.impl;
-
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.data.monitoring.device.mapper.DeviceFormulaParamMapper;
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceFormulaParam;
-import com.dingzhuo.energy.data.monitoring.device.service.IDeviceFormulaParamService;
-
-/**
- * 璁惧鐘舵�佸弬鏁癝ervice涓氬姟灞傚鐞�
- * 
- * @author zhaow
- * @date 2020-03-20
- */
-@Service
-public class DeviceFormulaParamServiceImpl implements IDeviceFormulaParamService 
-{
-    @Autowired
-    private DeviceFormulaParamMapper deviceFormulaParamMapper;
-
-    /**
-     * 鏌ヨ璁惧鐘舵�佸弬鏁�
-     * 
-     * @param id 璁惧鐘舵�佸弬鏁癐D
-     * @return 璁惧鐘舵�佸弬鏁�
-     */
-    @Override
-    public DeviceFormulaParam selectDeviceFormulaParamById(String id)
-    {
-        return deviceFormulaParamMapper.selectDeviceFormulaParamById(id);
-    }
-
-    /**
-     * 鏌ヨ璁惧鐘舵�佸弬鏁板垪琛�
-     * 
-     * @param deviceFormulaParam 璁惧鐘舵�佸弬鏁�
-     * @return 璁惧鐘舵�佸弬鏁�
-     */
-    @Override
-    public List<DeviceFormulaParam> selectDeviceFormulaParamList(DeviceFormulaParam deviceFormulaParam)
-    {
-        return deviceFormulaParamMapper.selectDeviceFormulaParamList(deviceFormulaParam);
-    }
-
-    /**
-     * 鏂板璁惧鐘舵�佸弬鏁�
-     * 
-     * @param deviceFormulaParam 璁惧鐘舵�佸弬鏁�
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertDeviceFormulaParam(DeviceFormulaParam deviceFormulaParam)
-    {
-        return deviceFormulaParamMapper.insertDeviceFormulaParam(deviceFormulaParam);
-    }
-
-    /**
-     * 淇敼璁惧鐘舵�佸弬鏁�
-     * 
-     * @param deviceFormulaParam 璁惧鐘舵�佸弬鏁�
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateDeviceFormulaParam(DeviceFormulaParam deviceFormulaParam)
-    {
-        return deviceFormulaParamMapper.updateDeviceFormulaParam(deviceFormulaParam);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎璁惧鐘舵�佸弬鏁�
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑璁惧鐘舵�佸弬鏁癐D
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteDeviceFormulaParamByIds(String[] ids)
-    {
-        return deviceFormulaParamMapper.deleteDeviceFormulaParamByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎璁惧鐘舵�佸弬鏁颁俊鎭�
-     * 
-     * @param id 璁惧鐘舵�佸弬鏁癐D
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteDeviceFormulaParamById(String id)
-    {
-        return deviceFormulaParamMapper.deleteDeviceFormulaParamById(id);
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/impl/DeviceFormulaServiceImpl.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/impl/DeviceFormulaServiceImpl.java
deleted file mode 100644
index 12fe709..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/impl/DeviceFormulaServiceImpl.java
+++ /dev/null
@@ -1,171 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.service.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-import com.dingzhuo.energy.common.core.lang.UUID;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceFormulaParam;
-import com.dingzhuo.energy.data.monitoring.device.mapper.DeviceFormulaParamMapper;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.data.monitoring.device.mapper.DeviceFormulaMapper;
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceFormula;
-import com.dingzhuo.energy.data.monitoring.device.service.IDeviceFormulaService;
-
-
-/**
- * 璁惧璁$畻鍏紡Service涓氬姟灞傚鐞�
- * 
- * @author zhaow
- * @date 2020-03-20
- */
-@Service
-public class DeviceFormulaServiceImpl implements IDeviceFormulaService 
-{
-    @Autowired
-    private DeviceFormulaMapper deviceFormulaMapper;
-
-    @Autowired
-    private DeviceFormulaParamMapper deviceFormulaParamMapper;
-
-    /**
-     * 鏌ヨ璁惧璁$畻鍏紡
-     * 
-     * @param id 璁惧璁$畻鍏紡ID
-     * @return 璁惧璁$畻鍏紡
-     */
-    @Override
-    public DeviceFormula selectDeviceFormulaById(String id)
-    {
-        return deviceFormulaMapper.selectDeviceFormulaById(id);
-    }
-
-    /**
-     * 鏌ヨ璁惧璁$畻鍏紡鍒楄〃
-     * 
-     * @param deviceFormula 璁惧璁$畻鍏紡
-     * @return 璁惧璁$畻鍏紡
-     */
-    @Override
-    public List<DeviceFormula> selectDeviceFormulaList(DeviceFormula deviceFormula)
-    {
-        return deviceFormulaMapper.selectDeviceFormulaList(deviceFormula);
-    }
-
-    /**
-     * 鏂板璁惧璁$畻鍏紡
-     * 
-     * @param deviceFormula 璁惧璁$畻鍏紡
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertDeviceFormula(DeviceFormula deviceFormula)
-    {
-        return deviceFormulaMapper.insertDeviceFormula(deviceFormula);
-    }
-
-    /**
-     * 淇敼璁惧璁$畻鍏紡
-     * 
-     * @param deviceFormula 璁惧璁$畻鍏紡
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateDeviceFormula(DeviceFormula deviceFormula)
-    {
-        return deviceFormulaMapper.updateDeviceFormula(deviceFormula);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎璁惧璁$畻鍏紡
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑璁惧璁$畻鍏紡ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteDeviceFormulaByIds(String[] ids)
-    {
-        return deviceFormulaMapper.deleteDeviceFormulaByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎璁惧璁$畻鍏紡淇℃伅
-     * 
-     * @param id 璁惧璁$畻鍏紡ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteDeviceFormulaById(String id)
-    {
-        return deviceFormulaMapper.deleteDeviceFormulaById(id);
-    }
-
-    /**
-     * 鍙栨牴鎹� 璁惧妯″瀷 鑺傜偣ID  鍜�  璁惧鐘舵�佷富閿� ID  鍙�  璁惧鍏紡淇℃伅
-     * @param nodeId
-     * @param stateId
-     * @return
-     */
-    @Override
-    public DeviceFormula getDeviceFormula(String nodeId,String stateId) {
-        //鏍规嵁 妯″瀷鑺傜偣ID 鍜� 璁惧鐘舵�佷富閿甀D鑾峰彇 璁惧鍏紡淇℃伅
-        DeviceFormula deviceFormula = deviceFormulaMapper.getDeviceFormula(nodeId,stateId);
-        if (deviceFormula != null) {
-            //鏍规嵁璁惧 璁惧鍏紡琛ㄤ富閿甀D鑾峰彇 璁惧瀵瑰簲鐨勫弬鏁伴泦鍚�
-            List<DeviceFormulaParam> deviceFormulaParams = deviceFormulaParamMapper.getFormulaParam(deviceFormula.getId());
-            if (!deviceFormulaParams.isEmpty()) {
-                deviceFormula.setDeviceFormulaParams(deviceFormulaParams);
-            }
-        } else {
-            deviceFormula = new DeviceFormula();
-        }
-
-        return deviceFormula;
-    }
-
-    /**
-     * 璁惧鐘舵�� 閰嶇疆 鍏紡淇濆瓨
-     * @param deviceFormula
-     * @return
-     */
-    @Override
-    public void saveDeviceFormula(DeviceFormula deviceFormula) {
-
-        String calcText = deviceFormula.getFormulaText();
-        List<String> paramNames = new ArrayList<>();
-        for (DeviceFormulaParam param : deviceFormula.getDeviceFormulaParams()) {
-            calcText = calcText.replace(param.getParamName(), String.format("'%s'", param.getParamValue()));
-        }
-            deviceFormula.setCalcText(calcText);
-        //1銆佷繚瀛� 鐘舵�佺殑閰嶇疆鍏紡
-        if (StringUtils.isEmpty(deviceFormula.getId())) {
-            deviceFormula.setId(UUID.fastUUID().toString());
-            deviceFormulaMapper.insertDeviceFormula(deviceFormula);
-        } else {
-            deviceFormulaMapper.updateDeviceFormula(deviceFormula);
-        }
-
-        //2銆佸鐞� 鍏紡瀵瑰簲鐨勫弬鏁� 骞惰繘琛屼繚瀛�
-        deviceFormula.getDeviceFormulaParams().forEach(param -> {
-            param.setId(UUID.fastUUID().toString());
-            param.setDevFormulaId(deviceFormula.getId());
-        });
-        deviceFormulaParamMapper
-                .saveDeviceFormulaParam(deviceFormula.getId(), deviceFormula.getDeviceFormulaParams());
-    }
-
-    /**
-     * 璁惧鐘舵�� 鍏紡 鍚敤璁剧疆
-     */
-    @Override
-    public int editDeviceFormulaIsEnable(String nodeId,String isEnable, String[] ids)
-    {
-        return deviceFormulaMapper.editDeviceFormulaIsEnable(nodeId,isEnable, ids);
-    }
-
-    @Override
-    public List<DeviceFormula> getAllDeviceFormula() {
-        return deviceFormulaMapper.getAllDeviceFormula();
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/impl/DeviceStatusHistoryServiceImpl.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/impl/DeviceStatusHistoryServiceImpl.java
deleted file mode 100644
index 9e4f6d1..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/impl/DeviceStatusHistoryServiceImpl.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.service.impl;
-
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.data.monitoring.device.mapper.DeviceStatusHistoryMapper;
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceStatusHistory;
-import com.dingzhuo.energy.data.monitoring.device.service.IDeviceStatusHistoryService;
-
-/**
- * 璁惧鍚仠鍘嗗彶鐩戞祴Service涓氬姟灞傚鐞�
- *
- * @author sys
- * @date 2020-03-25
- */
-@Service
-public class DeviceStatusHistoryServiceImpl implements IDeviceStatusHistoryService {
-
-  @Autowired
-  private DeviceStatusHistoryMapper deviceStatusHistoryMapper;
-
-  /**
-   * 鏌ヨ璁惧鍚仠鍘嗗彶鐩戞祴
-   *
-   * @param id 璁惧鍚仠鍘嗗彶鐩戞祴ID
-   * @return 璁惧鍚仠鍘嗗彶鐩戞祴
-   */
-  @Override
-  public DeviceStatusHistory selectDeviceStatusHistoryById(String id) {
-    return deviceStatusHistoryMapper.selectDeviceStatusHistoryById(id);
-  }
-
-  /**
-   * 鏌ヨ璁惧鍚仠鍘嗗彶鐩戞祴鍒楄〃
-   *
-   * @param deviceStatusHistory 璁惧鍚仠鍘嗗彶鐩戞祴
-   * @return 璁惧鍚仠鍘嗗彶鐩戞祴
-   */
-  @Override
-  public List<DeviceStatusHistory> selectDeviceStatusHistoryList(
-      DeviceStatusHistory deviceStatusHistory) {
-    return deviceStatusHistoryMapper.selectDeviceStatusHistoryList(deviceStatusHistory);
-  }
-
-  /**
-   * 鏂板璁惧鍚仠鍘嗗彶鐩戞祴
-   *
-   * @param deviceStatusHistory 璁惧鍚仠鍘嗗彶鐩戞祴
-   * @return 缁撴灉
-   */
-  @Override
-  public int insertDeviceStatusHistory(DeviceStatusHistory deviceStatusHistory) {
-    return deviceStatusHistoryMapper.insertDeviceStatusHistory(deviceStatusHistory);
-  }
-
-  /**
-   * 淇敼璁惧鍚仠鍘嗗彶鐩戞祴
-   *
-   * @param deviceStatusHistory 璁惧鍚仠鍘嗗彶鐩戞祴
-   * @return 缁撴灉
-   */
-  @Override
-  public int updateDeviceStatusHistory(DeviceStatusHistory deviceStatusHistory) {
-    return deviceStatusHistoryMapper.updateDeviceStatusHistory(deviceStatusHistory);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎璁惧鍚仠鍘嗗彶鐩戞祴
-   *
-   * @param ids 闇�瑕佸垹闄ょ殑璁惧鍚仠鍘嗗彶鐩戞祴ID
-   * @return 缁撴灉
-   */
-  @Override
-  public int deleteDeviceStatusHistoryByIds(String[] ids) {
-    return deviceStatusHistoryMapper.deleteDeviceStatusHistoryByIds(ids);
-  }
-
-  /**
-   * 鍒犻櫎璁惧鍚仠鍘嗗彶鐩戞祴淇℃伅
-   *
-   * @param id 璁惧鍚仠鍘嗗彶鐩戞祴ID
-   * @return 缁撴灉
-   */
-  @Override
-  public int deleteDeviceStatusHistoryById(String id) {
-    return deviceStatusHistoryMapper.deleteDeviceStatusHistoryById(id);
-  }
-
-  /**
-   * 鏌ヨ璁惧鍚仠鍘嗗彶鐩戞祴鍒楄〃
-   *
-   * @param deviceStatusHistory 璁惧鍚仠鍘嗗彶鐩戞祴
-   * @return 璁惧鍚仠鍘嗗彶鐩戞祴
-   */
-  @Override
-  public List<DeviceStatusHistory> selectDeviceStatusHistoryListNew(
-      DeviceStatusHistory deviceStatusHistory) {
-    return deviceStatusHistoryMapper.selectDeviceStatusHistoryListNew(deviceStatusHistory);
-  }
-
-  @Override
-  public void saveHistoryStatus(DeviceStatusHistory history) {
-    deviceStatusHistoryMapper.saveHistoryStatus(history);
-  }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/impl/DeviceStatusLiveServiceImpl.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/impl/DeviceStatusLiveServiceImpl.java
deleted file mode 100644
index 3b2d695..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/impl/DeviceStatusLiveServiceImpl.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.service.impl;
-
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.data.monitoring.device.mapper.DeviceStatusLiveMapper;
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceStatusLive;
-import com.dingzhuo.energy.data.monitoring.device.service.IDeviceStatusLiveService;
-
-/**
- * 璁惧鍚仠瀹炴椂鐩戞祴Service涓氬姟灞傚鐞�
- *
- * @author sys
- * @date 2020-03-23
- */
-@Service
-public class DeviceStatusLiveServiceImpl implements IDeviceStatusLiveService {
-
-  @Autowired
-  private DeviceStatusLiveMapper deviceStatusLiveMapper;
-
-  /**
-   * 鏌ヨ璁惧鍚仠瀹炴椂鐩戞祴
-   *
-   * @param id 璁惧鍚仠瀹炴椂鐩戞祴ID
-   * @return 璁惧鍚仠瀹炴椂鐩戞祴
-   */
-  @Override
-  public DeviceStatusLive selectDeviceStatusLiveById(String id) {
-    return deviceStatusLiveMapper.selectDeviceStatusLiveById(id);
-  }
-
-  /**
-   * 鏌ヨ璁惧鍚仠瀹炴椂鐩戞祴鍒楄〃
-   *
-   * @param deviceStatusLive 璁惧鍚仠瀹炴椂鐩戞祴
-   * @return 璁惧鍚仠瀹炴椂鐩戞祴
-   */
-  @Override
-  public List<DeviceStatusLive> selectDeviceStatusLiveList(DeviceStatusLive deviceStatusLive) {
-    return deviceStatusLiveMapper.selectDeviceStatusLiveList(deviceStatusLive);
-  }
-
-  /**
-   * 鏂板璁惧鍚仠瀹炴椂鐩戞祴
-   *
-   * @param deviceStatusLive 璁惧鍚仠瀹炴椂鐩戞祴
-   * @return 缁撴灉
-   */
-  @Override
-  public int insertDeviceStatusLive(DeviceStatusLive deviceStatusLive) {
-    return deviceStatusLiveMapper.insertDeviceStatusLive(deviceStatusLive);
-  }
-
-  /**
-   * 淇敼璁惧鍚仠瀹炴椂鐩戞祴
-   *
-   * @param deviceStatusLive 璁惧鍚仠瀹炴椂鐩戞祴
-   * @return 缁撴灉
-   */
-  @Override
-  public int updateDeviceStatusLive(DeviceStatusLive deviceStatusLive) {
-    return deviceStatusLiveMapper.updateDeviceStatusLive(deviceStatusLive);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎璁惧鍚仠瀹炴椂鐩戞祴
-   *
-   * @param ids 闇�瑕佸垹闄ょ殑璁惧鍚仠瀹炴椂鐩戞祴ID
-   * @return 缁撴灉
-   */
-  @Override
-  public int deleteDeviceStatusLiveByIds(String[] ids) {
-    return deviceStatusLiveMapper.deleteDeviceStatusLiveByIds(ids);
-  }
-
-  /**
-   * 鍒犻櫎璁惧鍚仠瀹炴椂鐩戞祴淇℃伅
-   *
-   * @param id 璁惧鍚仠瀹炴椂鐩戞祴ID
-   * @return 缁撴灉
-   */
-  @Override
-  public int deleteDeviceStatusLiveById(String id) {
-    return deviceStatusLiveMapper.deleteDeviceStatusLiveById(id);
-  }
-
-  @Override
-  public DeviceStatusLive getDeviceStatus(String deviceId, String stateId) {
-    return deviceStatusLiveMapper.getDeviceStatus(deviceId, stateId);
-  }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/impl/HistoryDeviceStatusImpl.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/impl/HistoryDeviceStatusImpl.java
deleted file mode 100644
index fc29179..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/impl/HistoryDeviceStatusImpl.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.service.impl;
-
-import com.dingzhuo.energy.data.monitoring.device.domain.HistoryDeviceStatus;
-import com.dingzhuo.energy.data.monitoring.device.service.IHistoryDeviceStatus;
-
-import java.util.Date;
-import java.util.List;
-import org.springframework.stereotype.Service;
-
-@Service
-public class HistoryDeviceStatusImpl implements IHistoryDeviceStatus {
-  @Override
-  public List<HistoryDeviceStatus> getHistoryDeviceStatus(Date beginTime, Date endTime) {
-    return null;
-  }
-
-  @Override
-  public List<HistoryDeviceStatus> getHistoryDeviceStatus(Date beginTime, Date endTime, String status) {
-    return null;
-  }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/impl/RealtimeDeviceStatusImpl.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/impl/RealtimeDeviceStatusImpl.java
deleted file mode 100644
index 5a77653..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/device/service/impl/RealtimeDeviceStatusImpl.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.device.service.impl;
-
-import com.dingzhuo.energy.data.monitoring.device.domain.RealtimeDeviceStatus;
-import com.dingzhuo.energy.data.monitoring.device.service.IRealtimeDeviceStatus;
-
-import java.util.List;
-
-public class RealtimeDeviceStatusImpl implements IRealtimeDeviceStatus {
-  @Override
-  public List<RealtimeDeviceStatus> getRealtimeDeviceStatus() {
-    return null;
-  }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/historical/controller/HistoryDataController.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/historical/controller/HistoryDataController.java
deleted file mode 100644
index 4045795..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/historical/controller/HistoryDataController.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.historical.controller;
-
-
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.data.monitoring.historical.service.IHistoryDataService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import io.swagger.annotations.Api;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-
-/**
- * 鍘嗗彶鏁版嵁缁熻  鎺у埗灞�
- *
- * @Author: Zhujw
- * @Date: 2023/3/6
- */
-@Api(value = "鎶ヨ妫�娴嬧�斿巻鍙叉姤璀︽娴�", tags = {"鎶ヨ妫�娴�"})
-@RestController
-@RequestMapping("/historical")
-public class HistoryDataController extends BaseController {
-
-    @Autowired
-    private IHistoryDataService dataService;
-
-    @Autowired
-    private IModelNodeService modelNodeService;
-
-
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/historical/service/IHistoryDataService.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/historical/service/IHistoryDataService.java
deleted file mode 100644
index ea33c22..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/historical/service/IHistoryDataService.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.historical.service;
-
-
-/**
- * 鍘嗗彶鏁版嵁缁熻       鎺ュ彛灞�
- *
- * @Author: Zhujw
- * @Date: 2023/3/6
- */
-public interface IHistoryDataService {
-
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/historical/service/impl/HistoryDataServiceImpl.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/historical/service/impl/HistoryDataServiceImpl.java
deleted file mode 100644
index b8bafe9..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/historical/service/impl/HistoryDataServiceImpl.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.historical.service.impl;
-
-
-import com.dingzhuo.energy.data.monitoring.historical.service.IHistoryDataService;
-import org.springframework.stereotype.Service;
-
-/**
- * 鍘嗗彶鏁版嵁缁熻  鎺ュ彛瀹炵幇灞�
- *
- * @Author: Zhujw
- * @Date: 2023/3/6
- */
-@Service
-public class HistoryDataServiceImpl implements IHistoryDataService {
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/history/controller/HistoryDataTrend.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/history/controller/HistoryDataTrend.java
deleted file mode 100644
index 53abd84..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/history/controller/HistoryDataTrend.java
+++ /dev/null
@@ -1,225 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.trend.history.controller;
-
-import cn.hutool.core.date.DateUtil;
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplement;
-import com.dingzhuo.energy.basic.data.meter.service.IMeterImplementService;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.service.IEnergyIndexService;
-import com.dingzhuo.energy.data.model.service.IStateTypeService;
-import com.dingzhuo.energy.data.monitoring.trend.history.domain.dto.HistoricalDataDTO;
-import com.dingzhuo.energy.data.monitoring.trend.history.domain.vo.HistoricalDataExcel;
-import com.dingzhuo.energy.data.monitoring.trend.history.domain.vo.HistoricalDataVO;
-import com.dingzhuo.energy.dataservice.domain.RetrievalModes;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import com.dingzhuo.energy.dataservice.service.RealtimeDatabaseService;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import org.apache.commons.lang3.ObjectUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-/**
- * 璁惧鍚仠瀹炴椂鐩戞祴Controller
- *
- * @author sys
- * @date 2020-03-30
- */
-@RestController
-@RequestMapping("/dataMonitoring/historyDataTrend")
-public class HistoryDataTrend extends BaseController {
-    @Autowired
-    private final IEnergyIndexService energyIndexService;
-
-    @Autowired
-    private final IMeterImplementService meterImplementService;
-
-    @Autowired
-    private final RealtimeDatabaseService realtimeDatabaseService;
-
-
-    public HistoryDataTrend(IEnergyIndexService energyIndexService,
-                            IMeterImplementService meterImplementService,
-                            RealtimeDatabaseService realtimeDatabaseService,
-                            IStateTypeService iStateTypeService) {
-        this.energyIndexService = energyIndexService;
-        this.meterImplementService = meterImplementService;
-        this.realtimeDatabaseService = realtimeDatabaseService;
-    }
-
-
-    @Log(title = "鑾峰彇妯″瀷鑺傜偣鍏宠仈閲囬泦鎸囨爣", businessType = BusinessType.UPDATE)
-    @GetMapping("/energyIndex/list")
-    public AjaxResult getSettingIndex(EnergyIndex energyIndex) {
-        try {
-            List<EnergyIndex> infoList = energyIndexService.selectEnergyIndexList(energyIndex);
-//            List<String> codeList= infoList.stream().map(EnergyIndex::getCode).collect(Collectors.toList());
-//            List<TagValue> valList = realtimeDatabaseService.retrieve(codeList);
-//            List resultList = new ArrayList();
-            return AjaxResult.success(infoList);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍏宠仈鎸囨爣鍑洪敊!");
-        }
-    }
-
-    @Log(title = "鏍规嵁鏃堕棿涓庣偣浣嶆煡璇㈠巻鍙茬洃娴嬫暟鎹�", businessType = BusinessType.UPDATE)
-    @GetMapping("/getHistoricalDataByIndexId")
-    public AjaxResult getHistoricalDataByIndexId(HistoricalDataDTO dto) {
-        try {
-            // 鑾峰彇鐐逛綅淇℃伅
-            EnergyIndex energyIndex = energyIndexService.selectEnergyIndexById(dto.getIndexId());
-            if (ObjectUtils.isEmpty(energyIndex)) {
-                return AjaxResult.error("鏈壘鍒扮偣浣嶄俊鎭�");
-            }
-            Date beginTime = dto.getDataTime();
-            Date endTime;
-            // 鏌ヨ鏉℃暟
-            int count = 23;
-            if ("DAY".equals(dto.getTimeType())) {
-                endTime = DateUtil.endOfDay(beginTime);
-            } else {
-                count = 19;
-                endTime = DateUtil.offsetSecond(DateUtil.offsetHour(beginTime, 1), -1);
-            }
-            // 鏌ヨ璁¢噺鍣ㄥ叿
-            MeterImplement infor = meterImplementService.selectMeterImplementById(energyIndex.getMeterId());
-            List<TagValue> tagValueList = realtimeDatabaseService.retrieve(energyIndex.getCode(), beginTime, endTime,
-                    RetrievalModes.BestFit, count);
-            List<HistoricalDataVO> voList = new ArrayList<>();
-            Date date = DateUtil.date();
-            for (int i = 0; i < count + 1; i++) {
-                HistoricalDataVO vo = new HistoricalDataVO();
-                vo.setIndexId(energyIndex.getIndexId());
-                String indexName = energyIndex.getName();
-                if (ObjectUtils.isNotEmpty(infor)) {
-                    indexName = infor.getInstallactionLocation() + "_" + infor.getMeterName() + "_" + indexName;
-                }
-                vo.setIndexName(indexName);
-                // 鍙栧��
-                String value = "--";
-                String usedValue = "--";
-                if (beginTime.getTime() <= date.getTime()) {
-                    try {
-                        TagValue tagValue = tagValueList.get(i);
-                        BigDecimal cumulative = BigDecimal.valueOf(tagValue.getValue());
-
-                        if ("SWWSDJ_SD".equals(energyIndex.getCode()) || "SWWSDJ_WD".equals(energyIndex.getCode())) {
-                            cumulative = cumulative.multiply(BigDecimal.valueOf(0.1));
-                        }
-                        if (i > 0) {
-                            TagValue previousTagValue = tagValueList.get(i - 1);
-                            BigDecimal previousValue = BigDecimal.ZERO;
-                            if (ObjectUtils.isNotEmpty(previousTagValue.getValue())) {
-                                previousValue = BigDecimal.valueOf(previousTagValue.getValue());
-                            }
-                            if ("SWWSDJ_SD".equals(energyIndex.getCode()) || "SWWSDJ_WD".equals(energyIndex.getCode())) {
-                                previousValue = previousValue.multiply(BigDecimal.valueOf(0.1));
-
-                            }
-                            usedValue = String.valueOf(cumulative.subtract(previousValue).setScale(2, RoundingMode.HALF_UP));
-                        }
-
-                        value = String.valueOf(cumulative.setScale(2, RoundingMode.HALF_UP));
-                    } catch (Exception ignored) {
-                    }
-                }
-                // 鏃堕棿
-                String timeName = DateUtil.formatDateTime(beginTime);
-                vo.setDataTime(timeName);
-                if ("DAY".equals(dto.getTimeType())) {
-                    beginTime = DateUtil.offsetHour(beginTime, 1);
-                } else {
-                    beginTime = DateUtil.offsetMinute(beginTime, 3);
-                }
-                vo.setUsedValue(String.valueOf(usedValue));
-                vo.setValue(String.valueOf(value));
-                voList.add(vo);
-            }
-            return AjaxResult.success(voList);
-        } catch (Exception ex) {
-            logger.error("鏌ヨ鍘嗗彶鐩戞祴鏁版嵁鍑洪敊锛�", ex);
-            return AjaxResult.error("鏌ヨ鍘嗗彶鐩戞祴鏁版嵁鍑洪敊!");
-        }
-    }
-
-    @Log(title = "瀵煎嚭Excel", businessType = BusinessType.UPDATE)
-    @GetMapping("/export")
-    public AjaxResult export(HistoricalDataDTO dto) {
-        try {
-            // 鑾峰彇鐐逛綅淇℃伅
-            EnergyIndex energyIndex = energyIndexService.selectEnergyIndexById(dto.getIndexId());
-            if (ObjectUtils.isEmpty(energyIndex)) {
-                return AjaxResult.success("鏈壘鍒扮偣浣嶄俊鎭�");
-            }
-            Date beginTime = dto.getDataTime();
-            Date endTime;
-            // 鏌ヨ鏉℃暟
-            int count = 23;
-            if ("DAY".equals(dto.getTimeType())) {
-                endTime = DateUtil.endOfDay(beginTime);
-            } else {
-                count = 19;
-                endTime = DateUtil.offsetSecond(DateUtil.offsetHour(beginTime, 1), -1);
-            }
-            // 鏌ヨ璁¢噺鍣ㄥ叿
-            MeterImplement infor = meterImplementService.selectMeterImplementById(energyIndex.getMeterId());
-            List<TagValue> tagValueList = realtimeDatabaseService.retrieve(energyIndex.getCode(), beginTime, endTime,
-                    RetrievalModes.BestFit, count);
-            List<HistoricalDataExcel> excelList = new ArrayList<>();
-            Date date = DateUtil.date();
-            for (int i = 0; i < count + 1; i++) {
-                HistoricalDataExcel vo = new HistoricalDataExcel();
-                String indexName = energyIndex.getName();
-                if (ObjectUtils.isNotEmpty(infor)) {
-                    indexName = infor.getInstallactionLocation() + "_" + infor.getMeterName() + "_" + indexName;
-                }
-                vo.setIndexName(indexName);
-                // 鍙栧��
-                String value = "--";
-                String usedValue = "--";
-                if (beginTime.getTime() <= date.getTime()) {
-                    try {
-                        TagValue tagValue = tagValueList.get(i);
-                        BigDecimal cumulative = BigDecimal.valueOf(tagValue.getValue());
-                        if (i > 0) {
-                            TagValue previousTagValue = tagValueList.get(i - 1);
-                            BigDecimal previousValue = BigDecimal.valueOf(previousTagValue.getValue());
-                            usedValue = String.valueOf(cumulative.subtract(previousValue).setScale(2, RoundingMode.HALF_UP));
-                        }
-                        value = String.valueOf(cumulative.setScale(2, RoundingMode.HALF_UP));
-                    } catch (Exception ignored) {
-                    }
-                }
-                // 鏃堕棿
-                String timeName = DateUtil.formatDateTime(beginTime);
-                vo.setDataTime(timeName);
-                if ("DAY".equals(dto.getTimeType())) {
-                    beginTime = DateUtil.offsetHour(beginTime, 1);
-                } else {
-                    beginTime = DateUtil.offsetMinute(beginTime, 3);
-                }
-                vo.setValue(String.valueOf(value));
-                vo.setUsedValue(String.valueOf(usedValue));
-                excelList.add(vo);
-            }
-            ExcelUtil<HistoricalDataExcel> util = new ExcelUtil<>(HistoricalDataExcel.class);
-            String sheetName = "鍘嗗彶鏁版嵁缁熻" + DateUtil.formatDate(dto.getDataTime());
-            return util.exportRealTimeDataExcel(excelList, sheetName);
-        } catch (Exception ex) {
-            logger.error("瀵煎嚭Excel鏁版嵁鍑洪敊锛�", ex);
-            return AjaxResult.error("瀵煎嚭Excel鏁版嵁鍑洪敊!");
-        }
-    }
-
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/history/domain/dto/HistoricalDataDTO.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/history/domain/dto/HistoricalDataDTO.java
deleted file mode 100644
index ea9e8ad..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/history/domain/dto/HistoricalDataDTO.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.trend.history.domain.dto;
-
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.util.Date;
-
-/**
- * 鍘嗗彶鐩戞祴鏁版嵁璇锋眰 DTO
- *
- * @Author: Zhujw
- * @Date: 2023/3/7
- */
-public class HistoricalDataDTO {
-
-    /**
-     * 鐐逛綅id
-     */
-    @NotBlank(message = "鏈壘鍒扮偣浣嶄俊鎭�")
-    private String indexId;
-
-    /**
-     * 鏃堕棿绫诲瀷
-     */
-    @NotBlank(message = "鏈壘鍒版椂闂寸被鍨�")
-    private String timeType;
-
-    /**
-     * 鏌ヨ鏃堕棿
-     */
-    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-    @NotNull(message = "鏈壘鍒版椂闂翠俊鎭�")
-    private Date dataTime;
-
-    public String getIndexId() {
-        return indexId;
-    }
-
-    public void setIndexId(String indexId) {
-        this.indexId = indexId;
-    }
-
-    public String getTimeType() {
-        return timeType;
-    }
-
-    public void setTimeType(String timeType) {
-        this.timeType = timeType;
-    }
-
-    public Date getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(Date dataTime) {
-        this.dataTime = dataTime;
-    }
-
-}
\ No newline at end of file
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/history/domain/vo/HistoricalDataExcel.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/history/domain/vo/HistoricalDataExcel.java
deleted file mode 100644
index c0a1e76..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/history/domain/vo/HistoricalDataExcel.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.trend.history.domain.vo;
-
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-
-/**
- * 鍘嗗彶鐩戞祴鏁版嵁杩斿洖 Excel
- *
- * @Author: Zhujw
- * @Date: 2023/3/7
- */
-public class HistoricalDataExcel {
-
-    /**
-     * 鐐逛綅鍚嶇О
-     */
-    @Excel(name = "鐐逛綅鍚嶇О")
-    private String indexName;
-
-    /**
-     * 鍊�
-     */
-    @Excel(name = "鍊�")
-    private String value;
-
-    /**
-     * 浣跨敤閲�
-     */
-    @Excel(name = "浣跨敤閲�")
-    private String usedValue;
-
-    /**
-     * 鏃堕棿
-     */
-    @Excel(name = "鏃堕棿")
-    private String dataTime;
-
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-
-    public String getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(String dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getUsedValue() {
-        return usedValue;
-    }
-
-    public void setUsedValue(String usedValue) {
-        this.usedValue = usedValue;
-    }
-}
\ No newline at end of file
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/history/domain/vo/HistoricalDataVO.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/history/domain/vo/HistoricalDataVO.java
deleted file mode 100644
index bb9a2ce..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/history/domain/vo/HistoricalDataVO.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.trend.history.domain.vo;
-
-
-/**
- * 鍘嗗彶鐩戞祴鏁版嵁杩斿洖 VO
- *
- * @Author: Zhujw
- * @Date: 2023/3/7
- */
-public class HistoricalDataVO {
-
-    /**
-     * 鐐逛綅id
-     */
-    private String indexId;
-
-    /**
-     * 鐐逛綅鍚嶇О
-     */
-    private String indexName;
-
-    /**
-     * 鏃堕棿
-     */
-    private String dataTime;
-
-    /**
-     * 鍊�
-     */
-    private String value;
-
-    /**
-     * 浣跨敤閲�
-     */
-    private String usedValue;
-
-
-    public String getIndexId() {
-        return indexId;
-    }
-
-    public void setIndexId(String indexId) {
-        this.indexId = indexId;
-    }
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-
-    public String getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(String dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getUsedValue() {
-        return usedValue;
-    }
-
-    public void setUsedValue(String usedValue) {
-        this.usedValue = usedValue;
-    }
-}
\ No newline at end of file
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/realtime/controller/RealTimeTrend.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/realtime/controller/RealTimeTrend.java
deleted file mode 100644
index aa3d8b0..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/realtime/controller/RealTimeTrend.java
+++ /dev/null
@@ -1,335 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.trend.realtime.controller;
-
-import cn.hutool.core.date.DateUtil;
-import com.dingzhuo.energy.basic.data.meter.domain.MeterImplement;
-import com.dingzhuo.energy.basic.data.meter.service.IMeterImplementService;
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.dto.EnergyIndexMonitorDTO;
-import com.dingzhuo.energy.data.model.domain.vo.ModelNodeIndexInfor;
-import com.dingzhuo.energy.data.model.service.IEnergyIndexService;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.data.model.service.IStateTypeService;
-import com.dingzhuo.energy.data.monitoring.device.domain.EquipmentMeasuringPointParameters;
-import com.dingzhuo.energy.data.monitoring.device.domain.vo.EquipmentPointParametersExcel;
-import com.dingzhuo.energy.data.monitoring.device.domain.vo.EquipmentPointParametersVO;
-import com.dingzhuo.energy.data.monitoring.device.service.IDeviceStatusLiveService;
-import com.dingzhuo.energy.data.monitoring.trend.realtime.domain.CollectHistory;
-import com.dingzhuo.energy.data.monitoring.trend.svg.service.ISvgTrendService;
-import com.dingzhuo.energy.dataservice.domain.RetrievalModes;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import com.dingzhuo.energy.dataservice.service.RealtimeDatabaseService;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.time.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * 璁惧鍚仠瀹炴椂鐩戞祴Controller
- *
- * @author sys
- * @date 2020-03-30
- */
-@RestController
-@RequestMapping("/dataMonitoring/realTimeTrend")
-@Api(value = "瀹炴椂妫�娴�", tags = {"瀹炴椂鐩戞祴"})
-public class RealTimeTrend extends BaseController {
-
-    @Autowired
-    private ISvgTrendService iSvgTrendService;
-
-    @Autowired
-    private IStateTypeService iStateTypeService;
-
-    @Autowired
-    private final IModelNodeService modelNodeService;
-
-    @Autowired
-    private final IEnergyIndexService energyIndexService;
-
-    @Autowired
-    private IMeterImplementService meterImplementService;
-
-    @Autowired
-    private IDeviceStatusLiveService deviceStatusLiveService;
-
-    @Autowired
-    private RealtimeDatabaseService realtimeDatabaseService;
-
-
-    @Autowired
-    public RealTimeTrend(
-            IModelNodeService modelNodeService, IEnergyIndexService energyIndexService) {
-        this.modelNodeService = modelNodeService;
-        this.energyIndexService = energyIndexService;
-    }
-
-    @Log(title = "鑾峰彇妯″瀷鑺傜偣鍏宠仈閲囬泦鎸囨爣", businessType = BusinessType.UPDATE)
-    @GetMapping("/energyIndex/list")
-    @ApiOperation(value = "鑾峰彇妯″瀷鑺傜偣鍏宠仈閲囬泦鎸囨爣")
-    public AjaxResult getSettingIndex(@Validated EnergyIndexMonitorDTO dto) {
-        try {
-            List<EquipmentPointParametersVO> resultList = new ArrayList<>();
-            // 妯″瀷id
-            String nodeId = dto.getNodeId();
-            // 鏌ヨ浼犲叆鐨刵odeId
-            List<ModelNodeIndexInfor> nodeInforList = modelNodeService.listModelNodeIndexIdRelationInforByParentId(nodeId);
-            // 濡傛灉鏄┖瀛樺湪涓ょ鎯呭喌锛�1锛歩d鏈夐棶棰橈紝2锛氭渶搴曞眰
-            if (CollectionUtils.isEmpty(nodeInforList)) {
-                List<ModelNodeIndexInfor> inforList = modelNodeService.getModelNodeIndexIdRelationInforByNodeId(nodeId);
-                if (CollectionUtils.isNotEmpty(inforList)) {
-                    nodeInforList.addAll(inforList);
-                }
-            }
-            if (CollectionUtils.isEmpty(nodeInforList)) {
-                return AjaxResult.success(resultList);
-            }
-            // 鎵惧嚭鎵�鏈夌偣浣峣d淇℃伅
-            List<String> indexIds = nodeInforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-            // 鎺掑簭
-            List<EnergyIndex> infoList = energyIndexService.getEnergyIndexByIds(indexIds).stream()
-                    .sorted(Comparator.comparing(EnergyIndex::getCode)).collect(Collectors.toList());
-            // 鑾峰彇鎵�鏈夎〃id
-            List<String> codeList = new ArrayList<>();
-            List<String> meterIdList = new ArrayList<>();
-            infoList.forEach(li -> {
-                codeList.add(li.getCode());
-                meterIdList.add(li.getMeterId());
-            });
-            // 褰撳墠鏃堕棿
-            String timeString = DateUtil.formatDateTime(DateUtil.date());
-            Map<String, List<MeterImplement>> meterImplementMap = meterImplementService.listMeterImplementByIds(meterIdList).stream()
-                    .collect(Collectors.groupingBy(MeterImplement::getId));
-            List<TagValue> valList = realtimeDatabaseService.retrieve(codeList);
-            for (EnergyIndex energyIndex : infoList) {
-                // 鑾峰彇鐐逛綅鍚嶇О
-                String modelNodeName = "";
-                List<MeterImplement> meterImplementList = meterImplementMap.get(energyIndex.getMeterId());
-                if (CollectionUtils.isNotEmpty(meterImplementList)) {
-                    MeterImplement infor = meterImplementList.get(0);
-                    modelNodeName = infor.getInstallactionLocation() + "_" + infor.getMeterName();
-                }
-                String indexName = modelNodeName + "_" + energyIndex.getName();
-                EquipmentPointParametersVO item = new EquipmentPointParametersVO();
-                item.setCode(energyIndex.getCode());
-                item.setIndexName(indexName);
-                item.setIndexUnit(energyIndex.getUnitId());
-                item.setTimeString(timeString);
-                String value = "--";
-                if (CollectionUtils.isNotEmpty(valList)) {
-                    double sum = valList.stream().filter(x -> item.getCode().equals(x.getTagCode())).mapToDouble(TagValue::getValue).sum();
-                    if ("SWWSDJ_SD".equals(energyIndex.getCode()) || "SWWSDJ_WD".equals(energyIndex.getCode())) {
-                        sum = sum * 0.1;
-                    }
-                    value = String.valueOf(BigDecimal.valueOf(sum).setScale(2, RoundingMode.HALF_UP));
-                }
-                item.setValue(value);
-                resultList.add(item);
-            }
-            return AjaxResult.success(resultList);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍏宠仈鎸囨爣鍑洪敊!");
-        }
-    }
-
-    //    @Log(title = "鑾峰彇鎶樼嚎鍥炬暟鎹�", businessType = BusinessType.UPDATE)
-    @GetMapping("/energyIndex/lineList/{codes}/{minute}/{count}")
-    @ApiOperation(value = "鑾峰彇鎶樼嚎鍥炬暟鎹�")
-    public AjaxResult getSettingIndexLine(@PathVariable String[] codes, @PathVariable Integer minute, @PathVariable Integer count) {
-        try {
-            List<String> codesList = new ArrayList<>(Arrays.asList(codes));
-            Date endDate = DateUtil.date();
-            long time = minute * 60 * 1000;//鍒嗛挓
-            Date startDate = new Date(endDate.getTime() - time);
-            List<List<TagValue>> resultList = new ArrayList<>();
-            for (int i = 0; i < codesList.size(); i++) {
-                List<TagValue> valList = realtimeDatabaseService.retrieve(codesList.get(i), startDate, endDate, RetrievalModes.Full, count);
-                for (TagValue tagVal : valList) {
-                    if (tagVal.getValue() != null) {
-                        double value = BigDecimal.valueOf(tagVal.getValue()).setScale(2, RoundingMode.HALF_UP).doubleValue();
-
-                        if ("SWWSDJ_SD".equals(tagVal.getTagCode()) || "SWWSDJ_WD".equals(tagVal.getTagCode())) {
-                            value = value * 0.1;
-                        }
-
-                        tagVal.setValue(BigDecimal.valueOf(value).setScale(2, RoundingMode.HALF_UP).doubleValue());
-                    }
-                    tagVal.setDataTime(tagVal.getDataTime());
-                    tagVal.setShowDataTime("yyyy-MM-dd HH:mm:ss");
-                }
-                resultList.add(valList);
-            }
-            return AjaxResult.success(resultList);
-        } catch (Exception ex) {
-            ex.printStackTrace();
-            return AjaxResult.error("鑾峰彇鍏宠仈鎸囨爣鍑洪敊!");
-        }
-    }
-
-    @Log(title = "鑾峰彇妯″瀷鑺傜偣鍏宠仈閲囬泦鎸囨爣", businessType = BusinessType.UPDATE)
-    @GetMapping("/svgTrendView/energyIndex/list")
-    @ApiOperation(value = "鑾峰彇妯″瀷鑺傜偣鍏宠仈閲囬泦鎸囨爣")
-    public AjaxResult getSvgTrendViewSettingIndex(EnergyIndex energyIndex) {
-        try {
-            List<EnergyIndex> infoList = iSvgTrendService.selectSvgList(energyIndex);
-            List<String> codeList = infoList.stream().map(EnergyIndex::getCode).collect(Collectors.toList());
-            List<TagValue> valList = realtimeDatabaseService.retrieve(codeList);
-            List resultList = new ArrayList();
-            if (valList != null && valList.size() > 0) {
-                for (int i = 0; i < infoList.size(); i++) {
-                    EquipmentMeasuringPointParameters item = new EquipmentMeasuringPointParameters();
-                    item.setCode(infoList.get(i).getCode());
-                    item.setIndexName(infoList.get(i).getName());
-                    item.setIndexUnit(infoList.get(i).getUnitId());
-                    item.setMeteName(infoList.get(i).getMeterName());
-                    valList.forEach(x -> {
-                        if (x.getTagCode().equals(item.getCode())) {
-                            item.setValue(new BigDecimal(x.getValue()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
-                        }
-                    });
-                    item.setyValue("y0");
-                    resultList.add(item);
-                }
-            }
-            return AjaxResult.success(resultList);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍏宠仈鎸囨爣鍑洪敊!");
-        }
-    }
-
-    @Log(title = "鑾峰彇鎸囧畾閲囬泦鐐逛綅鐨勫皬鏃跺疄鏃舵暟鎹�", businessType = BusinessType.UPDATE)
-    @GetMapping("/svgTrendView/energyIndex/history/{code}/{dataTime}")
-    @ApiOperation(value = "鑾峰彇鎸囧畾閲囬泦鐐逛綅鐨勫皬鏃跺疄鏃舵暟鎹�")
-    public AjaxResult getIndexHistoryValueList(@PathVariable("code") String code, @PathVariable("dataTime") String dataTime) {
-        try {
-            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            Date sdate = null;
-            Date edate = null;
-            try {
-                if (StringUtils.isEmpty(dataTime)) {
-                    dataTime = formatter.format(new Date());
-                }
-                if (dataTime.length() < 18) {
-                    dataTime = dataTime + ":00:00";
-                }
-                sdate = formatter.parse(dataTime);
-                edate = formatter.parse(dataTime);
-                //杩欓噷瑕佸姞涓�灏忔椂
-                edate = DateUtils.addHours(edate, 1);
-            } catch (ParseException e) {
-                e.printStackTrace();
-            }
-            List<String> codes = new ArrayList<>();
-            codes.add(code);
-            List<EnergyIndex> infoList = energyIndexService.getEnergyIndexByCodes(codes);
-            EnergyIndex ei = infoList.get(0);
-            if (CollectionUtils.isEmpty(infoList)) {
-                ei = new EnergyIndex();
-            }
-
-            List<TagValue> tagValuelist = realtimeDatabaseService.retrieve(code, sdate, edate, RetrievalModes.Full, 0);
-            List resultList = new ArrayList();
-            for (TagValue tagVal : tagValuelist) {
-                tagVal.setShowDataTime("yyyy-MM-dd HH:mm:ss");
-                CollectHistory hh = new CollectHistory();
-                hh.setTagCode(tagVal.getTagCode());
-                hh.setDataTime(tagVal.getShowDataTime());
-                BigDecimal b = new BigDecimal(tagVal.getValue());
-                hh.setValue(b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
-                hh.setUnitId(ei.getUnitId());
-                resultList.add(hh);
-            }
-
-            return AjaxResult.success(resultList);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇閲囬泦鐐瑰巻鍙插皬鏃堕敊璇紒", ex);
-            return AjaxResult.error("鑾峰彇閲囬泦鐐瑰巻鍙插皬鏃堕敊璇�!");
-        }
-    }
-
-    @Log(title = "瀵煎嚭瀹炴椂鐩戞祴Excel淇℃伅", businessType = BusinessType.UPDATE)
-    @GetMapping("/export")
-    @ApiOperation(value = "瀵煎嚭瀹炴椂鐩戞祴Excel淇℃伅")
-    public AjaxResult export(@Validated EnergyIndexMonitorDTO dto) {
-        try {
-            List<EquipmentPointParametersExcel> excelList = new ArrayList<>();
-            // 妯″瀷id
-            String nodeId = dto.getNodeId();
-            // 鏌ヨ浼犲叆鐨刵odeId
-            List<ModelNodeIndexInfor> nodeInforList = modelNodeService.listModelNodeIndexIdRelationInforByParentId(nodeId);
-            // 濡傛灉鏄┖瀛樺湪涓ょ鎯呭喌锛�1锛歩d鏈夐棶棰橈紝2锛氭渶搴曞眰
-            if (CollectionUtils.isEmpty(nodeInforList)) {
-                List<ModelNodeIndexInfor> inforList = modelNodeService.getModelNodeIndexIdRelationInforByNodeId(nodeId);
-                if (CollectionUtils.isNotEmpty(inforList)) {
-                    nodeInforList.addAll(inforList);
-                }
-            }
-            if (CollectionUtils.isEmpty(nodeInforList)) {
-                return AjaxResult.success("鏆傛棤鏁版嵁");
-            }
-            // 鎵惧嚭鎵�鏈夌偣浣峣d淇℃伅
-            List<String> indexIds = nodeInforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-            List<EnergyIndex> infoList = energyIndexService.getEnergyIndexByIds(indexIds);
-            // 鑾峰彇鎵�鏈夎〃id
-            List<String> codeList = new ArrayList<>();
-            List<String> meterIdList = new ArrayList<>();
-            infoList.forEach(li -> {
-                codeList.add(li.getCode());
-                meterIdList.add(li.getMeterId());
-            });
-            // 褰撳墠鏃堕棿
-            String timeString = DateUtil.formatDateTime(DateUtil.date());
-            Map<String, List<MeterImplement>> meterImplementMap = meterImplementService.listMeterImplementByIds(meterIdList)
-                    .stream().collect(Collectors.groupingBy(MeterImplement::getId));
-            List<TagValue> valList = realtimeDatabaseService.retrieve(codeList);
-            for (EnergyIndex energyIndex : infoList) {
-                // 鑾峰彇鐐逛綅鍚嶇О
-                String modelNodeName = "";
-                List<MeterImplement> meterImplementList = meterImplementMap.get(energyIndex.getMeterId());
-                if (CollectionUtils.isNotEmpty(meterImplementList)) {
-                    MeterImplement infor = meterImplementList.get(0);
-                    modelNodeName = infor.getInstallactionLocation() + "_" + infor.getMeterName();
-                }
-                String indexName = modelNodeName + "_" + energyIndex.getName();
-                EquipmentPointParametersExcel item = new EquipmentPointParametersExcel();
-                item.setIndexName(indexName);
-                item.setIndexUnit(energyIndex.getUnitId());
-                item.setTimeString(timeString);
-                String value = "--";
-                if (CollectionUtils.isNotEmpty(valList)) {
-                    double sum = valList.stream().filter(x -> energyIndex.getCode().equals(x.getTagCode())).mapToDouble(TagValue::getValue).sum();
-                    value = String.valueOf(BigDecimal.valueOf(sum).setScale(2, RoundingMode.HALF_UP));
-                }
-                item.setValue(value);
-                excelList.add(item);
-            }
-
-            ExcelUtil<EquipmentPointParametersExcel> util = new ExcelUtil<>(EquipmentPointParametersExcel.class);
-            return util.exportExcel(excelList, "瀹炴椂鐩戞祴");
-        } catch (Exception ex) {
-            logger.error("瀵煎嚭鏁版嵁鍑洪敊锛�", ex);
-            return AjaxResult.error("瀵煎嚭鏁版嵁鍑洪敊!");
-        }
-    }
-
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/realtime/domain/CollectHistory.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/realtime/domain/CollectHistory.java
deleted file mode 100644
index aa05243..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/realtime/domain/CollectHistory.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.trend.realtime.domain;
-
-/**
- * 缁勬�佸浘灞曠ず鐨勮秼鍔块�夐」鍗′笅 鏁版嵁琛ㄦ牸瀵硅薄
- */
-public class CollectHistory {
-
-    private String tagCode;
-    private String tagName;
-    private String unitId;
-    private String dataTime;
-    private Double value;
-    private int quality;
-    private String meteName;
-
-    public String getTagCode() {
-        return tagCode;
-    }
-
-    public void setTagCode(String tagCode) {
-        this.tagCode = tagCode;
-    }
-
-    public String getTagName() {
-        return tagName;
-    }
-
-    public void setTagName(String tagName) {
-        this.tagName = tagName;
-    }
-
-    public String getUnitId() {
-        return unitId;
-    }
-
-    public void setUnitId(String unitId) {
-        this.unitId = unitId;
-    }
-
-    public String getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(String dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public Double getValue() {
-        return value;
-    }
-
-    public void setValue(Double value) {
-        this.value = value;
-    }
-
-    public int getQuality() {
-        return quality;
-    }
-
-    public void setQuality(int quality) {
-        this.quality = quality;
-    }
-
-    public String getMeteName() {
-        return meteName;
-    }
-
-    public void setMeteName(String meteName) {
-        this.meteName = meteName;
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/realtime/domain/RealTimeTrend.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/realtime/domain/RealTimeTrend.java
deleted file mode 100644
index da122c6..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/realtime/domain/RealTimeTrend.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.trend.realtime.domain;
-
-import com.dingzhuo.energy.data.model.domain.IndexType;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-public class RealTimeTrend  extends BaseEntity {
-
-    private String nodeId;
-
-    /**
-     * 绯荤粺鎸囨爣绫诲瀷
-     */
-    private IndexType indexType;
-
-    private int minute;
-
-    private int count;
-
-    public String getNodeId() {
-        return nodeId;
-    }
-
-    public void setNodeId(String nodeId) {
-        this.nodeId = nodeId;
-    }
-
-    public IndexType getIndexType() {
-        return indexType;
-    }
-
-    public void setIndexType(IndexType indexType) {
-        this.indexType = indexType;
-    }
-
-    public int getMinute() {
-        return minute;
-    }
-
-    public void setMinute(int minute) {
-        this.minute = minute;
-    }
-
-    public int getCount() {
-        return count;
-    }
-
-    public void setCount(int count) {
-        this.count = count;
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/svg/controller/SvgTrendView.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/svg/controller/SvgTrendView.java
deleted file mode 100644
index 82c4dc6..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/svg/controller/SvgTrendView.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.trend.svg.controller;
-
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import com.alibaba.fastjson.JSONObject;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.service.IEnergyIndexService;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.data.model.service.IStateTypeService;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem;
-import com.dingzhuo.energy.data.monitoring.device.domain.EquipmentMeasuringPointParameters;
-import com.dingzhuo.energy.dataservice.domain.RetrievalModes;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import com.dingzhuo.energy.dataservice.service.RealtimeDatabaseService;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.data.monitoring.device.domain.DeviceStatusLive;
-import com.dingzhuo.energy.data.monitoring.device.service.IDeviceStatusLiveService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * 璁惧鍚仠瀹炴椂鐩戞祴Controller
- * 
- * @author sys
- * @date 2020-03-30
- */
-@RestController
-@RequestMapping("/dataMonitoring/svgTrendView")
-public class SvgTrendView extends BaseController
-{
-    private final IModelNodeService modelNodeService;
-    private final IEnergyIndexService energyIndexService;
-    @Autowired
-    private IDeviceStatusLiveService deviceStatusLiveService;
-    @Autowired
-    private RealtimeDatabaseService realtimeDatabaseService;
-    @Autowired
-    private IStateTypeService iStateTypeService;
-
-
-    @Autowired
-    public SvgTrendView(
-            IModelNodeService modelNodeService, IEnergyIndexService energyIndexService) {
-        this.modelNodeService = modelNodeService;
-        this.energyIndexService = energyIndexService;
-    }
-
-    @Log(title = "鑾峰彇妯″瀷鑺傜偣鍏宠仈閲囬泦鎸囨爣", businessType = BusinessType.UPDATE)
-    @GetMapping("/energyIndex/list")
-    public AjaxResult getSettingIndex(EnergyIndex energyIndex) {
-        try {
-            List<EnergyIndex> infoList = energyIndexService.selectEnergyIndexList(energyIndex);
-            return AjaxResult.success(infoList);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍏宠仈鎸囨爣鍑洪敊!");
-        }
-    }
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/svg/mapper/SvgTrendMapper.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/svg/mapper/SvgTrendMapper.java
deleted file mode 100644
index 97384c6..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/svg/mapper/SvgTrendMapper.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.trend.svg.mapper;
-
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-
-import java.util.List;
-
-public interface SvgTrendMapper {
-    /**
-     * 瀹炴椂妫�娴� 鍔熻兘 鐨勫 sheet椤�  灞曠ず 缁勬�佸浘  娴嬬偣 鎶ヨ淇℃伅
-     *
-     * @param energyIndex
-     * @return
-     */
-    List<EnergyIndex> selectSvgTrendList(EnergyIndex energyIndex);
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/svg/service/ISvgTrendService.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/svg/service/ISvgTrendService.java
deleted file mode 100644
index 55552d2..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/svg/service/ISvgTrendService.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.trend.svg.service;
-
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-
-import java.util.List;
-
-public interface ISvgTrendService {
-
-    /**
-     * 瀹炴椂妫�娴� 鍔熻兘 鐨勫 sheet椤�  灞曠ず瓒嬪娍鍥�
-     * @param energyIndex
-     * @return
-     */
-    List<EnergyIndex> selectSvgList(EnergyIndex energyIndex);
-}
diff --git a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/svg/service/impl/SvgTrendServicelmpl.java b/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/svg/service/impl/SvgTrendServicelmpl.java
deleted file mode 100644
index 66a7b5c..0000000
--- a/data-monitoring/src/main/java/com/dingzhuo/energy/data/monitoring/trend/svg/service/impl/SvgTrendServicelmpl.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.dingzhuo.energy.data.monitoring.trend.svg.service.impl;
-
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.monitoring.trend.svg.mapper.SvgTrendMapper;
-import com.dingzhuo.energy.data.monitoring.trend.svg.service.ISvgTrendService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Service
-public class SvgTrendServicelmpl implements ISvgTrendService {
-
-    @Autowired
-    private SvgTrendMapper svgTrendMapper;
-    /**
-     * 鏌ヨ鎸囨爣淇℃伅
-     *
-     * @param energyIndex 鎸囨爣淇℃伅ID
-     * @return 鎸囨爣淇℃伅
-     */
-    @Override
-    public List<EnergyIndex> selectSvgList(EnergyIndex energyIndex) {
-        return svgTrendMapper.selectSvgTrendList(energyIndex);
-    }
-}
diff --git a/data-monitoring/src/main/resources/mybatis/alarm/AlarmItemMapper.xml b/data-monitoring/src/main/resources/mybatis/alarm/AlarmItemMapper.xml
deleted file mode 100644
index 431b88b..0000000
--- a/data-monitoring/src/main/resources/mybatis/alarm/AlarmItemMapper.xml
+++ /dev/null
@@ -1,217 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.data.monitoring.alarm.mapper.AlarmItemMapper">
-
-  <resultMap type="AlarmItem" id="AlarmItemResult">
-    <result property="id" column="id"/>
-    <result property="createTime" column="create_time"/>
-    <result property="createBy" column="create_by"/>
-    <result property="updateTime" column="update_time"/>
-    <result property="updateBy" column="update_by"/>
-    <result property="dwid" column="dwid"/>
-    <result property="startStop" column="start_stop"/>
-    <result property="timeSlot" column="time_slot"/>
-    <result property="limitType" column="limit_type"/>
-    <result property="limitVal" column="limit_val"/>
-    <result property="alarmLevel" column="alarm_level"/>
-    <result property="nodeId" column="node_id"/>
-    <result property="indexCode" column="index_code"/>
-    <result property="alarmCode" column="alarm_code"/>
-  </resultMap>
-
-  <sql id="selectAlarmItemVo">
-    select id,
-           create_time,
-           create_by,
-           update_time,
-           update_by,
-           dwid,
-           start_stop,
-           time_slot,
-           limit_type,
-           limit_val,
-           alarm_level,
-           node_id
-    from alarm_item
-  </sql>
-
-  <select id="selectAlarmItemList" parameterType="AlarmItem" resultMap="AlarmItemResult">
-    <include refid="selectAlarmItemVo"/>
-    <where>
-    </where>
-  </select>
-
-  <select id="selectAlarmItemById" parameterType="String" resultMap="AlarmItemResult">
-    <include refid="selectAlarmItemVo"/>
-    where id = #{id}
-  </select>
-
-  <insert id="insertAlarmItem" parameterType="AlarmItem">
-    insert into alarm_item
-    <trim prefix="(" suffix=")" suffixOverrides=",">
-      <if test="id != null  and id != ''">id,</if>
-      <if test="createTime != null ">create_time,</if>
-      <if test="createBy != null  and createBy != ''">create_by,</if>
-      <if test="updateTime != null ">update_time,</if>
-      <if test="updateBy != null  and updateBy != ''">update_by,</if>
-      <if test="dwid != null  and dwid != ''">dwid,</if>
-      <if test="startStop != null  and startStop != ''">start_stop,</if>
-      <if test="timeSlot != null  and timeSlot != ''">time_slot,</if>
-      <if test="limit_type != null  and limit_type != ''">limit_type,</if>
-      <if test="limitVal != null  and limitVal != ''">limit_val,</if>
-    </trim>
-    <trim prefix="values (" suffix=")" suffixOverrides=",">
-      <if test="id != null  and id != ''">#{id},</if>
-      <if test="createTime != null ">#{createTime},</if>
-      <if test="createBy != null  and createBy != ''">#{createBy},</if>
-      <if test="updateTime != null ">#{updateTime},</if>
-      <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
-      <if test="dwid != null  and dwid != ''">#{dwid},</if>
-      <if test="startStop != null  and startStop != ''">#{startStop},</if>
-      <if test="timeSlot != null  and timeSlot != ''">#{timeSlot},</if>
-      <if test="limitType != null  and limitType != ''">#{limitType},</if>
-      <if test="limitVal != null  and limitVal != ''">#{limitVal},</if>
-    </trim>
-  </insert>
-
-  <update id="updateAlarmItem" parameterType="AlarmItem">
-    update alarm_item
-    <trim prefix="SET" suffixOverrides=",">
-      <if test="createTime != null ">create_time = #{createTime},</if>
-      <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
-      <if test="updateTime != null ">update_time = #{updateTime},</if>
-      <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-      <if test="dwid != null  and dwid != ''">dwid = #{dwid},</if>
-      <if test="startStop != null  and startStop != ''">start_stop = #{startStop},</if>
-      <if test="timeSlot != null  and timeSlot != ''">time_slot = #{timeSlot},</if>
-      <if test="limitType != null  and limitType != ''">limit = #{limitType},</if>
-      <if test="limitVal != null  and limitVal != ''">limit_val = #{limitVal},</if>
-    </trim>
-    where id = #{id}
-  </update>
-
-  <delete id="deleteAlarmItemById" parameterType="String">
-    delete
-    from alarm_item
-    where id = #{id}
-  </delete>
-
-  <delete id="deleteAlarmItemByIds" parameterType="String">
-    delete from alarm_item where id in
-    <foreach item="id" collection="array" open="(" separator="," close=")">
-      #{id}
-    </foreach>
-  </delete>
-
-  <select id="selectAlarmItemtingById" parameterType="String" resultMap="AlarmItemResult">
-    <include refid="selectAlarmItemVo"/>
-    where dwid = #{id}
-  </select>
-
-  <update id="updateStartStop">
-    update alarm_item SET start_stop=#{flag},update_time=now(),update_by=#{update_by} where dwid in
-    <foreach item="id" collection="ids" open="(" separator="," close=")">
-      #{id}
-    </foreach>
-  </update>
-  <select id="getStartStop" resultType="String">
-    select DISTINCT start_stop
-    from alarm_item
-    where dwid = #{indexid};
-  </select>
-
-  <update id="updateLimitVal">
-    delete from alarm_item where dwid = #{id};
-    <foreach collection="data" item="item" index="index" separator=";">
-      insert into alarm_item
-      <trim prefix="(" suffix=")" suffixOverrides=",">
-        <if test="id != null  and id != ''">id,</if>
-        <if test="item.indexId != null  and item.indexId != ''">dwid,</if>
-        <if test="item.state != null  and item.state != ''">start_stop,</if>
-        <if test="item.timeSlotVal != null  and item.timeSlotVal != ''">time_slot,</if>
-        <if test="item.limitTypeVal != null  and item.limitTypeVal != ''">limit_type,</if>
-        <if test="item.limitVal != null  and item.limitVal != ''">limit_val,</if>
-        <if test="item.alarmLevel != null  and item.alarmLevel != ''">alarm_level,</if>
-        <if test="item.nodeId != null  and item.nodeId != ''">node_id,</if>
-        <if test="id != null  and id != ''">update_time,</if>
-        <if test="id != null  and id != ''">create_time,</if>
-        <if test="id != null  and id != ''">update_by,</if>
-        <if test="id != null  and id != ''">create_by,</if>
-        <if test="id != null  and id != ''">alarm_code,</if>
-      </trim>
-      <trim prefix="values (" suffix=")" suffixOverrides=",">
-        <if test="id != null  and id != ''">#{item.id},</if>
-        <if test="item.indexId != null  and item.indexId != ''">#{item.indexId},</if>
-        <if test="item.state != null  and item.state != ''">#{item.state},</if>
-        <if test="item.timeSlotVal != null  and item.timeSlotVal != ''">#{item.timeSlotVal},</if>
-        <if test="item.limitTypeVal != null  and item.limitTypeVal != ''">#{item.limitTypeVal},</if>
-        <if test="item.limitVal != null  and item.limitVal != ''">#{item.limitVal},</if>
-        <if test="item.alarmLevel != null  and item.alarmLevel != ''">#{item.alarmLevel},</if>
-        <if test="item.nodeId != null  and item.nodeId != ''">#{item.nodeId},</if>
-        <if test="id != null  and id != ''">now(),</if>
-        <if test="id != null  and id != ''">now(),</if>
-        <if test="id != null  and id != ''">#{username},</if>
-        <if test="id != null  and id != ''">#{username},</if>
-        <if test="id != null  and id != ''">#{item.alarmCode},</if>
-      </trim>
-    </foreach>
-  </update>
-  <update id="updateLimitValNoDel">
-    <foreach collection="data" item="item" index="index" separator=";">
-      insert into alarm_item
-      <trim prefix="(" suffix=")" suffixOverrides=",">
-        <if test="id != null  and id != ''">id,</if>
-        <if test="item.indexId != null  and item.indexId != ''">dwid,</if>
-        <if test="item.state != null  and item.state != ''">start_stop,</if>
-        <if test="item.timeSlotVal != null  and item.timeSlotVal != ''">time_slot,</if>
-        <if test="item.limitTypeVal != null  and item.limitTypeVal != ''">limit_type,</if>
-        <if test="item.limitVal != null  and item.limitVal != ''">limit_val,</if>
-        <if test="item.alarmLevel != null  and item.alarmLevel != ''">alarm_level,</if>
-        <if test="item.nodeId != null  and item.nodeId != ''">node_id,</if>
-        <if test="id != null  and id != ''">update_time,</if>
-        <if test="id != null  and id != ''">create_time,</if>
-        <if test="id != null  and id != ''">update_by,</if>
-        <if test="id != null  and id != ''">create_by,</if>
-        <if test="id != null  and id != ''">alarm_code,</if>
-      </trim>
-      <trim prefix="values (" suffix=")" suffixOverrides=",">
-        <if test="id != null  and id != ''">#{item.id},</if>
-        <if test="item.indexId != null  and item.indexId != ''">#{item.indexId},</if>
-        <if test="item.state != null  and item.state != ''">#{item.state},</if>
-        <if test="item.timeSlotVal != null  and item.timeSlotVal != ''">#{item.timeSlotVal},</if>
-        <if test="item.limitTypeVal != null  and item.limitTypeVal != ''">#{item.limitTypeVal},</if>
-        <if test="item.limitVal != null  and item.limitVal != ''">#{item.limitVal},</if>
-        <if test="item.alarmLevel != null  and item.alarmLevel != ''">#{item.alarmLevel},</if>
-        <if test="item.nodeId != null  and item.nodeId != ''">#{item.nodeId},</if>
-        <if test="id != null  and id != ''">now(),</if>
-        <if test="id != null  and id != ''">now(),</if>
-        <if test="id != null  and id != ''">#{username},</if>
-        <if test="id != null  and id != ''">#{username},</if>
-        <if test="id != null  and id != ''">#{item.alarm_code},</if>
-      </trim>
-    </foreach>
-  </update>
-  <select id="selectCountById" resultType="int">
-    select count(id)
-    from alarm_item
-    where dwid = #{id};
-  </select>
-  <delete id="deleteAllLimitVal">
-    delete
-    from alarm_item
-    where dwid = #{id};
-  </delete>
-  <select id="getSettingCount" resultType="int">
-    select count(id)
-    from alarm_item
-    where dwid = #{id};
-  </select>
-  <select id="getAllAlarmItem" resultMap="AlarmItemResult">
-    select ai.*, ei.code as index_code
-    from alarm_item ai
-           left join energy_index ei on ai.dwid = ei.index_id
-    where start_stop = '1';
-  </select>
-</mapper>
diff --git a/data-monitoring/src/main/resources/mybatis/alarm/HistoryAlarmMapper.xml b/data-monitoring/src/main/resources/mybatis/alarm/HistoryAlarmMapper.xml
deleted file mode 100644
index d0d5a56..0000000
--- a/data-monitoring/src/main/resources/mybatis/alarm/HistoryAlarmMapper.xml
+++ /dev/null
@@ -1,274 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.data.monitoring.alarm.mapper.HistoryAlarmMapper">
-
-  <resultMap type="HistoryAlarm" id="HistoryAlarmResult">
-    <result property="id" column="id"/>
-    <result property="indexId" column="index_id"/>
-    <result property="indexName" column="index_name"/>
-    <result property="itemId" column="item_id"/>
-    <result property="limitingValue" column="limiting_value"/>
-    <result property="alarmValue" column="alarm_value"/>
-    <result property="alarmValueQuality" column="alarm_value_quality"/>
-    <result property="beginTime" column="begin_time"/>
-    <result property="endTime" column="end_time"/>
-    <result property="duration" column="duration"/>
-    <result property="content" column="content"/>
-  </resultMap>
-
-  <resultMap type="JkHistoryAlarm" id="JkHistoryAlarmResult">
-    <result property="modelName" column="modelname"/>
-    <result property="code" column="code"/>
-    <result property="indexName" column="indexname"/>
-    <result property="unitId" column="unit_id"/>
-    <result property="alarmLevel" column="alarm_level"/>
-    <result property="limitType" column="limit_type"/>
-    <result property="limitingValue" column="limiting_value"/>
-    <result property="alarmBeginTime" column="begin_time"/>
-    <result property="alarmValue" column="alarm_value"/>
-    <result property="indexId" column="index_id"/>
-    <result property="nodeId" column="node_id"/>
-    <result property="duration" column="duration"/>
-    <result property="alarmBeginTime" column="begin_time"/>
-    <result property="alarmEndTime" column="end_time"/>
-  </resultMap>
-
-  <sql id="selectHistoryAlarmVo">
-    select id,
-           index_id,
-           index_name,
-           item_id,
-           limiting_value,
-           alarm_value,
-           alarm_value_quality,
-           begin_time,
-           end_time,
-           duration,
-           content
-    from history_alarm
-  </sql>
-
-  <select id="selectHistoryAlarmList" parameterType="HistoryAlarm" resultMap="HistoryAlarmResult">
-    <include refid="selectHistoryAlarmVo"/>
-    <where>
-      <if test="indexName != null  and indexName != ''">and index_name like concat('%',
-        #{indexName}, '%')
-      </if>
-      <if test="itemId != null  and itemId != ''">and item_id like concat('%', #{itemId}, '%')</if>
-      <if test="limitingValue != null ">and limiting_value like concat('%', #{limitingValue}, '%')
-      </if>
-      <if test="alarmValue != null ">and alarm_value like concat('%', #{alarmValue}, '%')</if>
-      <if test="alarmValueQuality != null  and alarmValueQuality != ''">and alarm_value_quality like
-        concat('%', #{alarmValueQuality}, '%')
-      </if>
-      <if test="beginTime != null ">and begin_time like concat('%', #{beginTime}, '%')</if>
-      <if test="endTime != null ">and end_time like concat('%', #{endTime}, '%')</if>
-      <if test="duration != null ">and duration like concat('%', #{duration}, '%')</if>
-      <if test="content != null  and content != ''">and content like concat('%', #{content}, '%')
-      </if>
-    </where>
-  </select>
-
-  <select id="selectHistoryAlarmById" parameterType="String" resultMap="HistoryAlarmResult">
-    <include refid="selectHistoryAlarmVo"/>
-    where id = #{id}
-  </select>
-
-
-  <update id="updateHistoryAlarm" parameterType="HistoryAlarm">
-    delete from realtime_alarm where alarm_code = #{alarmCode};
-    insert into history_alarm
-    <trim prefix="(" suffix=")" suffixOverrides=",">
-      <if test="historyAlarm.id != null  and historyAlarm.id != ''">id,</if>
-      <if test="historyAlarm.indexId != null  and historyAlarm.indexId != ''">index_id,</if>
-      <if test="historyAlarm.indexName != null  and historyAlarm.indexName != ''">index_name,</if>
-      <if test="historyAlarm.itemId != null  and historyAlarm.itemId != ''">item_id,</if>
-      <if test="historyAlarm.limitingValue != null ">limiting_value,</if>
-      <if test="historyAlarm.alarmValue != null ">alarm_value,</if>
-      <if test="historyAlarm.alarmValueQuality != null">alarm_value_quality,</if>
-      <if test="historyAlarm.beginTime != null ">begin_time,</if>
-      <if test="historyAlarm.endTime != null ">end_time,</if>
-      <if test="historyAlarm.duration != null ">duration,</if>
-      <if test="historyAlarm.content != null  and historyAlarm.content != ''">content,</if>
-      <if test="historyAlarm.timeCode != null and historyAlarm.timeCode != ''">time_code,</if>
-      <if test="historyAlarm.alarmCode != null and historyAlarm.alarmCode != ''">alarm_code,</if>
-    </trim>
-    <trim prefix="values (" suffix=")" suffixOverrides=",">
-      <if test="historyAlarm.id != null  and historyAlarm.id != ''">#{historyAlarm.id},</if>
-      <if test="historyAlarm.indexId != null  and historyAlarm.indexId != ''">#{historyAlarm.indexId},</if>
-      <if test="historyAlarm.indexName != null  and historyAlarm.indexName != ''">#{historyAlarm.indexName},</if>
-      <if test="historyAlarm.itemId != null  and historyAlarm.itemId != ''">#{historyAlarm.itemId},</if>
-      <if test="historyAlarm.limitingValue != null ">#{historyAlarm.limitingValue},</if>
-      <if test="historyAlarm.alarmValue != null ">#{historyAlarm.alarmValue},</if>
-      <if test="historyAlarm.alarmValueQuality != null">#{historyAlarm.alarmValueQuality},</if>
-      <if test="historyAlarm.beginTime != null ">#{historyAlarm.beginTime},</if>
-      <if test="historyAlarm.endTime != null ">#{historyAlarm.endTime},</if>
-      <if test="historyAlarm.duration != null ">#{historyAlarm.duration},</if>
-      <if test="historyAlarm.content != null  and historyAlarm.content != ''">#{historyAlarm.content},</if>
-      <if test="historyAlarm.timeCode != null and historyAlarm.timeCode != ''">#{historyAlarm.timeCode},</if>
-      <if test="historyAlarm.alarmCode != null and historyAlarm.alarmCode != ''">#{historyAlarm.alarmCode},</if>
-    </trim>
-    ;
-  </update>
-
-  <delete id="deleteHistoryAlarmById" parameterType="String">
-    delete
-    from history_alarm
-    where id = #{id}
-  </delete>
-
-  <delete id="deleteHistoryAlarmByIds" parameterType="String">
-    delete from history_alarm where id in
-    <foreach item="id" collection="array" open="(" separator="," close=")">
-      #{id}
-    </foreach>
-  </delete>
-
-  <!--鍘嗗彶 鎶ヨ鍒楄〃椤甸潰 閲囬泦鐐� 涓婚〉闈㈠垪琛ㄦ煡璇�-->
-  <select id="selectJkHistoryAlarmList" parameterType="JkHistoryAlarm"
-    resultMap="JkHistoryAlarmResult">
-    SELECT
-    mo."name" AS modelname,
-    ei.code,
-    ei.NAME AS indexname,
-    ei.unit_id,
-    alit.alarm_level,
-    alit.limit_type,
-    bj.limiting_value,
-    bj.begin_time,
-    bj.end_time,
-    bj.alarm_value,
-    bj.duration,
-    ei.index_id,
-    mo.node_id
-    FROM
-    energy_index ei,
-    node_index ni,
-    model_node mo,
-    history_alarm bj ,
-    alarm_item alit
-    WHERE
-    ni.node_id IN (
-    SELECT node_id FROM model_node WHERE address LIKE (
-    SELECT address FROM model_node WHERE node_id = #{nodeId} )
-    <if test='eierarchyFlag=="ALL"'>
-      || '%'
-    </if>
-    )
-    AND ei.index_id = ni.index_id
-    AND mo.node_id = ni.node_id
-    AND bj.index_id = ei.index_id
-    AND alit.alarm_code = bj.alarm_code
-    AND alit.time_slot='LIVE'
-    AND ei.index_type=#{indexType}
-    <if test="indexName != null  and indexName != ''">and ei.name like concat('%', #{indexName},
-      '%')
-    </if>
-    <if test="limitType != null  and limitType != ''">and alit.limit_type=#{limitType}</if>
-    <if test="alarmLevel != null  and alarmLevel != ''">and alit.alarm_level=#{alarmLevel}</if>
-    <if test="beginTime != null and beginTime != ''">and begin_time &gt;=
-      to_timestamp(#{beginTime},'yyyy-mm-dd hh24:mi:ss')
-    </if>
-    <if test="endTime != null and endTime != ''">and begin_time &lt;=
-      to_timestamp(#{endTime},'yyyy-mm-dd hh24:mi:ss')
-    </if>
-    order by alarm_level,mo.node_id,limit_type asc
-  </select>
-
-  <select id="selectJkHistoryAlarmListExcel" parameterType="JkHistoryAlarm"
-    resultMap="JkHistoryAlarmResult">
-    SELECT
-    mo."name" AS modelname,
-    ei.code,
-    ei.NAME AS indexname,
-    fun_getdicedata('sys_unit',ei.unit_id) as unit_id,
-    fun_getdicedata('alarm_level',alit.alarm_level) as alarm_level,
-    lt.limit_name as limit_type,
-    bj.limiting_value,
-    bj.begin_time,
-    bj.end_time,
-    bj.alarm_value,
-    bj.duration,
-    ei.index_id,
-    mo.node_id
-    FROM
-    energy_index ei,
-    node_index ni,
-    model_node mo,
-    history_alarm bj ,
-    alarm_item alit,
-    limit_type lt
-    WHERE
-    ni.node_id IN (
-    SELECT node_id FROM model_node WHERE address LIKE (
-    SELECT address FROM model_node WHERE node_id = #{nodeId} )
-    <if test='eierarchyFlag=="ALL"'>
-      || '%'
-    </if>
-    )
-    AND ei.index_id = ni.index_id
-    AND mo.node_id = ni.node_id
-    AND bj.index_id = ei.index_id
-    AND alit.alarm_code = bj.alarm_code
-    AND alit.time_slot='LIVE'
-    AND ei.index_type=#{indexType}
-    AND lt.limit_code=alit.limit_type
-    <if test="indexName != null  and indexName != ''">and ei.name like concat('%', #{indexName},
-      '%')
-    </if>
-    <if test="limitType != null  and limitType != ''">and alit.limit_type=#{limitType}</if>
-    <if test="alarmLevel != null  and alarmLevel != ''">and alit.alarm_level=#{alarmLevel}</if>
-    <if test="beginTime != null and beginTime != '' ">and begin_time &gt;=
-      to_timestamp(#{beginTime},'yyyy-mm-dd hh24:mi:ss')
-    </if>
-    <if test="endTime != null and endTime != ''">and begin_time &lt;=
-      to_timestamp(#{endTime},'yyyy-mm-dd hh24:mi:ss')
-    </if>
-    order by alarm_level,mo.node_id,limit_type asc
-  </select>
-
-  <select id="selectHistoryAlarmNoteList" parameterType="JkHistoryAlarm"
-    resultMap="JkHistoryAlarmResult">
-    SELECT
-    ei.code,
-    ei.NAME AS indexname,
-    fun_getdicedata('sys_unit',ei.unit_id) as unit_id,
-    fun_getdicedata('alarm_level',alit.alarm_level) as alarm_level,
-    lt.limit_name as limit_type,
-    bj.limiting_value,
-    bj.begin_time,
-    bj.end_time,
-    bj.alarm_value,
-    bj.duration,
-    ei.index_id
-    FROM
-    energy_index ei,
-    history_alarm bj ,
-    sys_svg_info svg,
-    alarm_item alit,
-    limit_type lt
-    WHERE
-    svg.node_id=#{nodeId}
-    AND ei.code = svg.tag
-    AND bj.index_id = ei.index_id
-    AND alit.alarm_code = bj.alarm_code
-    AND alit.time_slot='LIVE'
-    AND ei.index_type=#{indexType}
-    AND lt.limit_code=alit.limit_type
-    <if test="indexName != null  and indexName != ''">and ei.name like concat('%', #{indexName},
-      '%')
-    </if>
-    <if test="limitType != null  and limitType != ''">and alit.limit_type=#{limitType}</if>
-    <if test="alarmLevel != null  and alarmLevel != ''">and alit.alarm_level=#{alarmLevel}</if>
-    <if test="beginTime != null and beginTime != '' ">and begin_time &gt;=
-      to_timestamp(#{beginTime},'yyyy-mm-dd hh24:mi:ss')
-    </if>
-    <if test="endTime != null and endTime != ''">and begin_time &lt;=
-      to_timestamp(#{endTime},'yyyy-mm-dd hh24:mi:ss')
-    </if>
-    order by alarm_level,limit_type asc
-  </select>
-
-</mapper>
diff --git a/data-monitoring/src/main/resources/mybatis/alarm/RealtimeAlarmMapper.xml b/data-monitoring/src/main/resources/mybatis/alarm/RealtimeAlarmMapper.xml
deleted file mode 100644
index 82aee9b..0000000
--- a/data-monitoring/src/main/resources/mybatis/alarm/RealtimeAlarmMapper.xml
+++ /dev/null
@@ -1,198 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.data.monitoring.alarm.mapper.RealtimeAlarmMapper">
-
-
-  <resultMap type="com.dingzhuo.energy.data.monitoring.alarm.domain.RealTimeAlarm"
-    id="RealTimeAlarmResult">
-    <result property="id" column="id"/>
-    <result property="indexId" column="index_id"/>
-    <result property="indexName" column="index_name"/>
-    <result property="itemId" column="item_id"/>
-    <result property="limitingValue" column="limiting_value"/>
-    <result property="alarmValue" column="alarm_value"/>
-    <result property="alarmValueQuality" column="alarm_value_quality"/>
-    <result property="beginTime" column="begin_time"/>
-    <result property="content" column="content"/>
-    <result property="timeCode" column="time_code"/>
-    <result property="alarmCode" column="alarm_code"/>
-    <association property="alarmItem"
-      javaType="com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem">
-      <result property="id" column="itemId"/>
-      <result property="timeSlot" column="time_slot"/>
-      <result property="limitType" column="limit_type"/>
-      <result property="alarmLevel" column="alarm_level"/>
-    </association>
-  </resultMap>
-
-  <resultMap type="JkRealTimeAlarmList" id="JkRealTimeAlarmListResult">
-    <result property="modelName" column="modelname"/>
-    <result property="code" column="code"/>
-    <result property="indexName" column="indexname"/>
-    <result property="unitId" column="unit_id"/>
-    <result property="alarmLevel" column="alarm_level"/>
-    <result property="limitType" column="limit_type"/>
-    <result property="limitingValue" column="limiting_value"/>
-    <result property="alarmBeginTime" column="begin_time"/>
-    <result property="alarmValue" column="alarm_value"/>
-    <result property="indexId" column="index_id"/>
-    <result property="nodeId" column="node_id"/>
-  </resultMap>
-
-
-  <select id="selectRealtimeAlarmList" parameterType="RealTimeAlarm"
-    resultMap="RealTimeAlarmResult">
-    select id, index_id, index_name, item_id, limiting_value, alarm_value, alarm_value_quality,
-    begin_time, content from realtime_alarm
-    <where>
-      <if test="indexName != null  and indexName != ''">and index_name like concat('%',
-        #{indexName}, '%')
-      </if>
-      <if test="itemId != null  and itemId != ''">and item_id like concat('%', #{itemId}, '%')</if>
-      <if test="limitingValue != null ">and limiting_value like concat('%', #{limitingValue}, '%')
-      </if>
-      <if test="alarmValue != null ">and alarm_value like concat('%', #{alarmValue}, '%')</if>
-      <if test="alarmValueQuality != null">and alarm_value_quality like
-        concat('%', #{alarmValueQuality}, '%')
-      </if>
-      <if test="beginTime != null ">and begin_time like concat('%', #{beginTime}, '%')</if>
-      <if test="content != null  and content != ''">and content like concat('%', #{content}, '%')
-      </if>
-    </where>
-  </select>
-
-  <select id="selectRealtimeAlarmById" parameterType="String" resultMap="RealTimeAlarmResult">
-    select id,
-           index_id,
-           index_name,
-           item_id,
-           limiting_value,
-           alarm_value,
-           alarm_value_quality,
-           begin_time,
-           content
-    from realtime_alarm
-    where id = #{id}
-  </select>
-
-  <insert id="insertRealtimeAlarm" parameterType="RealTimeAlarm">
-    insert into realtime_alarm
-    <trim prefix="(" suffix=")" suffixOverrides=",">
-      <if test="id != null  and id != ''">id,</if>
-      <if test="indexId != null  and indexId != ''">index_id,</if>
-      <if test="indexName != null  and indexName != ''">index_name,</if>
-      <if test="itemId != null  and itemId != ''">item_id,</if>
-      <if test="limitingValue != null ">limiting_value,</if>
-      <if test="alarmValue != null ">alarm_value,</if>
-      <if test="alarmValueQuality != null">alarm_value_quality,</if>
-      <if test="beginTime != null ">begin_time,</if>
-      <if test="content != null  and content != ''">content,</if>
-      <if test="timeCode != null  and timeCode != ''">time_code,</if>
-      <if test="alarmCode != null  and alarmCode != ''">alarm_code,</if>
-    </trim>
-    <trim prefix="values (" suffix=")" suffixOverrides=",">
-      <if test="id != null  and id != ''">#{id},</if>
-      <if test="indexId != null  and indexId != ''">#{indexId},</if>
-      <if test="indexName != null  and indexName != ''">#{indexName},</if>
-      <if test="itemId != null  and itemId != ''">#{itemId},</if>
-      <if test="limitingValue != null ">#{limitingValue},</if>
-      <if test="alarmValue != null ">#{alarmValue},</if>
-      <if test="alarmValueQuality != null">#{alarmValueQuality},</if>
-      <if test="beginTime != null ">#{beginTime},</if>
-      <if test="content != null  and content != ''">#{content},</if>
-      <if test="timeCode != null  and timeCode != ''">#{timeCode},</if>
-      <if test="alarmCode != null  and alarmCode != ''">#{alarmCode},</if>
-    </trim>
-  </insert>
-
-  <update id="updateRealtimeAlarm" parameterType="RealTimeAlarm">
-    update realtime_alarm
-    <trim prefix="SET" suffixOverrides=",">
-      <if test="indexId != null  and indexId != ''">index_id = #{indexId},</if>
-      <if test="indexName != null  and indexName != ''">index_name = #{indexName},</if>
-      <if test="itemId != null  and itemId != ''">item_id = #{itemId},</if>
-      <if test="limitingValue != null ">limiting_value = #{limitingValue},</if>
-      <if test="alarmValue != null ">alarm_value = #{alarmValue},</if>
-      <if test="alarmValueQuality != null">alarm_value_quality =
-        #{alarmValueQuality},
-      </if>
-      <if test="beginTime != null ">begin_time = #{beginTime},</if>
-      <if test="content != null  and content != ''">content = #{content},</if>
-    </trim>
-    where id = #{id}
-  </update>
-
-  <delete id="deleteRealtimeAlarmById" parameterType="String">
-    delete
-    from realtime_alarm
-    where id = #{id}
-  </delete>
-
-  <delete id="deleteRealtimeAlarmByIds" parameterType="String">
-    delete from realtime_alarm where id in
-    <foreach item="id" collection="array" open="(" separator="," close=")">
-      #{id}
-    </foreach>
-  </delete>
-
-  <!--瀹炴椂鎶ヨ鍒楄〃椤甸潰 閲囬泦鐐� 涓婚〉闈㈠垪琛ㄦ煡璇�-->
-  <select id="selectRealtimeAlarmJkList" parameterType="JkRealTimeAlarmList"
-    resultMap="JkRealTimeAlarmListResult">
-    SELECT
-    mo."name" AS modelname,
-    ei.code,
-    ei.NAME AS indexname,
-    ei.unit_id,
-    alit.alarm_level,
-    alit.limit_type,
-    bj.limiting_value,
-    bj.begin_time,
-    round(cast(bj.alarm_value as numeric ),2) as alarm_value,
-    ei.index_id,
-    mo.node_id
-    FROM
-    energy_index ei,
-    node_index ni,
-    model_node mo,
-    realtime_alarm bj ,
-    alarm_item alit
-    WHERE
-    ni.node_id IN (
-    SELECT node_id FROM model_node WHERE address LIKE (
-    SELECT address FROM model_node WHERE node_id = #{nodeId} )
-    <if test='eierarchyFlag=="ALL"'>
-      || '%'
-    </if>
-    )
-    AND ei.index_id = ni.index_id
-    AND mo.node_id = ni.node_id
-    AND bj.index_id = ei.index_id
-    AND alit.alarm_code = bj.alarm_code
-    AND alit.time_slot='LIVE'
-    AND ei.index_type=#{indexType}
-    <if test="indexName != null  and indexName != ''">and ei.name like concat('%', #{indexName},
-      '%')
-    </if>
-    <if test="limitType != null  and limitType != ''">and alit.limit_type=#{limitType}</if>
-    <if test="alarmLevel != null  and alarmLevel != ''">and alit.alarm_level=#{alarmLevel}</if>
-    order by alarm_level,mo.node_id,limit_type asc
-  </select>
-  <select id="getRealTimeAlarmByAlarmCode" resultMap="RealTimeAlarmResult">
-    select *
-    from realtime_alarm
-    where alarm_code = #{itemId}
-  </select>
-  <select id="getRealTimeAlarm" resultMap="RealTimeAlarmResult">
-    select *
-    from realtime_alarm ra
-  </select>
-  <select id="getAlarmByItemIdAndTimeCode" resultMap="RealTimeAlarmResult">
-    select *
-    from realtime_alarm
-    where item_id = #{itemId}
-      and time_code = #{timeCode}
-  </select>
-
-</mapper>
diff --git a/data-monitoring/src/main/resources/mybatis/device/DeviceFormulaMapper.xml b/data-monitoring/src/main/resources/mybatis/device/DeviceFormulaMapper.xml
deleted file mode 100644
index 7e19247..0000000
--- a/data-monitoring/src/main/resources/mybatis/device/DeviceFormulaMapper.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.data.monitoring.device.mapper.DeviceFormulaMapper">
-
-  <resultMap type="DeviceFormula" id="DeviceFormulaResult">
-    <result property="id" column="id"/>
-    <result property="deviceId" column="device_id"/>
-    <result property="stateId" column="state_id"/>
-    <result property="formulaText" column="formula_text"/>
-    <result property="calcText" column="calc_text"/>
-    <result property="isEnable" column="is_enable"/>
-  </resultMap>
-
-  <sql id="selectDeviceFormulaVo">
-    select id, device_id, state_id, formula_text, calc_text, is_enable
-    from device_formula
-  </sql>
-
-  <select id="selectDeviceFormulaList" parameterType="DeviceFormula"
-    resultMap="DeviceFormulaResult">
-    <include refid="selectDeviceFormulaVo"/>
-    <where>
-    </where>
-  </select>
-
-  <select id="selectDeviceFormulaById" parameterType="String" resultMap="DeviceFormulaResult">
-    <include refid="selectDeviceFormulaVo"/>
-    where id = #{id}
-  </select>
-
-  <insert id="insertDeviceFormula" parameterType="DeviceFormula">
-    insert into device_formula
-    <trim prefix="(" suffix=")" suffixOverrides=",">
-      <if test="id != null  and id != ''">id,</if>
-      <if test="deviceId != null  and deviceId != ''">device_id,</if>
-      <if test="stateId != null  and stateId != ''">state_id,</if>
-      <if test="formulaText != null  and formulaText != ''">formula_text,</if>
-      <if test="calcText != null  and calcText != ''">calc_text,</if>
-      <if test="isEnable != null  and isEnable != ''">is_enable,</if>
-    </trim>
-    <trim prefix="values (" suffix=")" suffixOverrides=",">
-      <if test="id != null  and id != ''">#{id},</if>
-      <if test="deviceId != null  and deviceId != ''">#{deviceId},</if>
-      <if test="stateId != null  and stateId != ''">#{stateId},</if>
-      <if test="formulaText != null  and formulaText != ''">#{formulaText},</if>
-      <if test="calcText != null  and calcText != ''">#{calcText},</if>
-      <if test="isEnable != null  and isEnable != ''">#{isEnable},</if>
-    </trim>
-  </insert>
-
-  <update id="updateDeviceFormula" parameterType="DeviceFormula">
-    update device_formula
-    <trim prefix="SET" suffixOverrides=",">
-      <if test="deviceId != null  and deviceId != ''">device_id = #{deviceId},</if>
-      <if test="stateId != null  and stateId != ''">state_id = #{stateId},</if>
-      <if test="formulaText != null  and formulaText != ''">formula_text = #{formulaText},</if>
-      <if test="calcText != null  and calcText != ''">calc_text = #{calcText},</if>
-      <if test="isEnable != null  and isEnable != ''">is_enable = #{isEnable},</if>
-    </trim>
-    where id = #{id}
-  </update>
-
-  <delete id="deleteDeviceFormulaById" parameterType="String">
-    delete
-    from device_formula
-    where id = #{id}
-  </delete>
-
-  <delete id="deleteDeviceFormulaByIds" parameterType="String">
-    delete from device_formula where id in
-    <foreach item="id" collection="array" open="(" separator="," close=")">
-      #{id}
-    </foreach>
-  </delete>
-  <select id="getDeviceFormula" parameterType="String" resultMap="DeviceFormulaResult">
-    <include refid="selectDeviceFormulaVo"/>
-    where device_id = #{nodeId} and state_id = #{stateId}
-  </select>
-  <select id="getAllDeviceFormula" resultMap="DeviceFormulaResult">
-    select *
-    from device_formula
-    where is_enable = 'Y';
-  </select>
-
-  <update id="editDeviceFormulaIsEnable">
-    update device_formula SET is_enable=#{isEnable} where device_id= #{nodeId} and state_id in
-    <foreach item="id" collection="ids" open="(" separator="," close=")">
-      #{id}
-    </foreach>
-  </update>
-</mapper>
\ No newline at end of file
diff --git a/data-monitoring/src/main/resources/mybatis/device/DeviceFormulaParamMapper.xml b/data-monitoring/src/main/resources/mybatis/device/DeviceFormulaParamMapper.xml
deleted file mode 100644
index e659bca..0000000
--- a/data-monitoring/src/main/resources/mybatis/device/DeviceFormulaParamMapper.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.data.monitoring.device.mapper.DeviceFormulaParamMapper">
-    
-    <resultMap type="DeviceFormulaParam" id="DeviceFormulaParamResult">
-        <result property="id"    column="id"    />
-        <result property="devFormulaId"    column="dev_formula_id"    />
-        <result property="paramName"    column="param_name"    />
-        <result property="paramValue"    column="param_value"    />
-    </resultMap>
-
-    <sql id="selectDeviceFormulaParamVo">
-        select id, dev_formula_id, param_name, param_value from device_formula_param
-    </sql>
-
-    <select id="selectDeviceFormulaParamList" parameterType="DeviceFormulaParam" resultMap="DeviceFormulaParamResult">
-        <include refid="selectDeviceFormulaParamVo"/>
-        <where>  
-            <if test="paramName != null  and paramName != ''"> and param_name like concat('%', #{paramName}, '%')</if>
-            <if test="paramValue != null  and paramValue != ''"> and param_value like concat('%', #{paramValue}, '%')</if>
-        </where>
-    </select>
-    
-    <select id="selectDeviceFormulaParamById" parameterType="String" resultMap="DeviceFormulaParamResult">
-        <include refid="selectDeviceFormulaParamVo"/>
-        where id = #{id}
-    </select>
-        
-    <insert id="insertDeviceFormulaParam" parameterType="DeviceFormulaParam">
-        insert into device_formula_param
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="devFormulaId != null  and devFormulaId != ''">dev_formula_id,</if>
-            <if test="paramName != null  and paramName != ''">param_name,</if>
-            <if test="paramValue != null  and paramValue != ''">param_value,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="devFormulaId != null  and devFormulaId != ''">#{devFormulaId},</if>
-            <if test="paramName != null  and paramName != ''">#{paramName},</if>
-            <if test="paramValue != null  and paramValue != ''">#{paramValue},</if>
-         </trim>
-    </insert>
-
-    <update id="updateDeviceFormulaParam" parameterType="DeviceFormulaParam">
-        update device_formula_param
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="devFormulaId != null  and devFormulaId != ''">dev_formula_id = #{devFormulaId},</if>
-            <if test="paramName != null  and paramName != ''">param_name = #{paramName},</if>
-            <if test="paramValue != null  and paramValue != ''">param_value = #{paramValue},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteDeviceFormulaParamById" parameterType="String">
-        delete from device_formula_param where id = #{id}
-    </delete>
-
-    <delete id="deleteDeviceFormulaParamByIds" parameterType="String">
-        delete from device_formula_param where id in 
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-
-    <select id="getFormulaParam" resultMap="DeviceFormulaParamResult">
-        select *
-        from device_formula_param
-        where dev_formula_id = #{devFormulaId}
-  </select>
-
-    <insert id="saveDeviceFormulaParam">
-        delete
-        from device_formula_param
-        where dev_formula_id = #{devFormulaId};
-        <foreach collection="deviceFormulaParams" item="formulaParam" separator=";">
-            insert into device_formula_param (id, dev_formula_id, param_name, param_value) values
-            (#{formulaParam.id}, #{formulaParam.devFormulaId},
-            #{formulaParam.paramName},
-            #{formulaParam.paramValue})
-        </foreach>
-    </insert>
-</mapper>
\ No newline at end of file
diff --git a/data-monitoring/src/main/resources/mybatis/device/DeviceStatusHistoryMapper.xml b/data-monitoring/src/main/resources/mybatis/device/DeviceStatusHistoryMapper.xml
deleted file mode 100644
index f308070..0000000
--- a/data-monitoring/src/main/resources/mybatis/device/DeviceStatusHistoryMapper.xml
+++ /dev/null
@@ -1,177 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.data.monitoring.device.mapper.DeviceStatusHistoryMapper">
-
-  <resultMap type="DeviceStatusHistory" id="DeviceStatusHistoryResult">
-    <result property="id" column="id"/>
-    <result property="deviceId" column="device_id"/>
-    <result property="statusId" column="status_id"/>
-    <result property="statusName" column="status_name"/>
-    <result property="statusCode" column="status_code"/>
-    <result property="beginTime" column="begin_time"/>
-    <result property="endTime" column="end_time"/>
-    <result property="devBeginTime" column="begin_time"/>
-    <result property="devEndTime" column="end_time"/>
-    <result property="duration" column="duration"/>
-  </resultMap>
-
-  <sql id="selectDeviceStatusHistoryVo">
-    select id,
-           device_id,
-           status_id,
-           status_name,
-           status_code,
-           begin_time,
-           end_time,
-           duration
-    from device_status_history
-  </sql>
-
-  <select id="selectDeviceStatusHistoryList" parameterType="DeviceStatusHistory"
-    resultMap="DeviceStatusHistoryResult">
-    <include refid="selectDeviceStatusHistoryVo"/>
-    <where>
-      <if test="statusName != null  and statusName != ''">and status_name like concat('%',
-        #{statusName}, '%')
-      </if>
-      <if test="statusCode != null  and statusCode != ''">and status_code like concat('%',
-        #{statusCode}, '%')
-      </if>
-      <if test="beginTime != null and beginTime != ''">and begin_time &gt;=
-        to_timestamp(#{beginTime},'yyyy-mm-dd hh24:mi:ss')
-      </if>
-      <if test="endTime != null and endTime != ''">and begin_time &lt;=
-        to_timestamp(#{endTime},'yyyy-mm-dd hh24:mi:ss')
-      </if>
-      <if test="duration != null ">and duration like concat('%', #{duration}, '%')</if>
-    </where>
-  </select>
-
-  <select id="selectDeviceStatusHistoryById" parameterType="String"
-    resultMap="DeviceStatusHistoryResult">
-    <include refid="selectDeviceStatusHistoryVo"/>
-    where id = #{id}
-  </select>
-
-  <insert id="insertDeviceStatusHistory" parameterType="DeviceStatusHistory">
-    insert into device_status_history
-    <trim prefix="(" suffix=")" suffixOverrides=",">
-      <if test="id != null  and id != ''">id,</if>
-      <if test="deviceId != null  and deviceId != ''">device_id,</if>
-      <if test="statusId != null  and statusId != ''">status_id,</if>
-      <if test="statusName != null  and statusName != ''">status_name,</if>
-      <if test="statusCode != null  and statusCode != ''">status_code,</if>
-      <if test="beginTime != null ">begin_time,</if>
-      <if test="endTime != null ">end_time,</if>
-      <if test="duration != null ">duration,</if>
-    </trim>
-    <trim prefix="values (" suffix=")" suffixOverrides=",">
-      <if test="id != null  and id != ''">#{id},</if>
-      <if test="deviceId != null  and deviceId != ''">#{deviceId},</if>
-      <if test="statusId != null  and statusId != ''">#{statusId},</if>
-      <if test="statusName != null  and statusName != ''">#{statusName},</if>
-      <if test="statusCode != null  and statusCode != ''">#{statusCode},</if>
-      <if test="beginTime != null ">#{beginTime},</if>
-      <if test="endTime != null ">#{endTime},</if>
-      <if test="duration != null ">#{duration},</if>
-    </trim>
-  </insert>
-  <insert id="saveHistoryStatus">
-    delete from device_status_live where device_id = #{deviceId} and status_id = #{statusId};
-    insert into device_status_history
-    <trim prefix="(" suffix=")" suffixOverrides=",">
-      <if test="id != null  and id != ''">id,</if>
-      <if test="deviceId != null  and deviceId != ''">device_id,</if>
-      <if test="statusId != null  and statusId != ''">status_id,</if>
-      <if test="statusName != null  and statusName != ''">status_name,</if>
-      <if test="statusCode != null  and statusCode != ''">status_code,</if>
-      <if test="beginTime != null ">begin_time,</if>
-      <if test="endTime != null ">end_time,</if>
-      <if test="duration != null ">duration,</if>
-    </trim>
-    <trim prefix="values (" suffix=")" suffixOverrides=",">
-      <if test="id != null  and id != ''">#{id},</if>
-      <if test="deviceId != null  and deviceId != ''">#{deviceId},</if>
-      <if test="statusId != null  and statusId != ''">#{statusId},</if>
-      <if test="statusName != null  and statusName != ''">#{statusName},</if>
-      <if test="statusCode != null  and statusCode != ''">#{statusCode},</if>
-      <if test="beginTime != null ">#{beginTime},</if>
-      <if test="endTime != null ">#{endTime},</if>
-      <if test="duration != null ">#{duration},</if>
-    </trim>
-  </insert>
-
-  <update id="updateDeviceStatusHistory" parameterType="DeviceStatusHistory">
-    update device_status_history
-    <trim prefix="SET" suffixOverrides=",">
-      <if test="deviceId != null  and deviceId != ''">device_id = #{deviceId},</if>
-      <if test="statusId != null  and statusId != ''">status_id = #{statusId},</if>
-      <if test="statusName != null  and statusName != ''">status_name = #{statusName},</if>
-      <if test="statusCode != null  and statusCode != ''">status_code = #{statusCode},</if>
-      <if test="beginTime != null ">begin_time = #{beginTime},</if>
-      <if test="endTime != null ">end_time = #{endTime},</if>
-      <if test="duration != null ">duration = #{duration},</if>
-    </trim>
-    where id = #{id}
-  </update>
-
-  <delete id="deleteDeviceStatusHistoryById" parameterType="String">
-    delete
-    from device_status_history
-    where id = #{id}
-  </delete>
-
-  <delete id="deleteDeviceStatusHistoryByIds" parameterType="String">
-    delete from device_status_history where id in
-    <foreach item="id" collection="array" open="(" separator="," close=")">
-      #{id}
-    </foreach>
-  </delete>
-
-  <select id="selectDeviceStatusHistoryListNew" parameterType="DeviceStatusHistory"
-    resultMap="DeviceStatusHistoryResult">
-    select
-    dsh.id,
-    dsh.device_id,
-    status_id,
-    status_name,
-    status_code,
-    begin_time,
-    end_time,
-    duration,
-    mo."name" as indexName
-    FROM
-    device_status_history dsh,
-    energy_index ei,
-    node_index ni,
-    model_node mo
-    <where>
-      ni.node_id IN ( SELECT node_id FROM model_node WHERE address LIKE ( SELECT address FROM
-      model_node WHERE node_id = #{deviceId})
-      <if test='eierarchyFlag=="ALL"'>
-        || '%'
-      </if>
-      )
-      AND ei.index_id = ni.index_id
-      AND mo.node_id = ni.node_id
-      AND dsh.device_id = mo.node_id
-      <if test="indexType != null  and indexType != ''">AND ei.index_type = #{indexType}</if>
-      <if test="statusName != null  and statusName != ''">and status_name like concat('%',
-        #{statusName}, '%')
-      </if>
-      <if test="statusCode != null  and statusCode != ''">and status_code like concat('%',
-        #{statusCode}, '%')
-      </if>
-      <if test="beginTime != null and beginTime != ''">and begin_time &gt;=
-        to_timestamp(#{beginTime},'yyyy-mm-dd hh24:mi:ss')
-      </if>
-      <if test="endTime != null and endTime != ''">and begin_time &lt;=
-        to_timestamp(#{endTime},'yyyy-mm-dd hh24:mi:ss')
-      </if>
-      <if test="duration != null ">and duration like concat('%', #{duration}, '%')</if>
-    </where>
-    order by begin_time asc
-  </select>
-</mapper>
\ No newline at end of file
diff --git a/data-monitoring/src/main/resources/mybatis/device/DeviceStatusLiveMapper.xml b/data-monitoring/src/main/resources/mybatis/device/DeviceStatusLiveMapper.xml
deleted file mode 100644
index e16f6c8..0000000
--- a/data-monitoring/src/main/resources/mybatis/device/DeviceStatusLiveMapper.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.data.monitoring.device.mapper.DeviceStatusLiveMapper">
-    
-    <resultMap type="DeviceStatusLive" id="DeviceStatusLiveResult">
-        <result property="id"    column="id"    />
-        <result property="deviceId"    column="device_id"    />
-        <result property="statusId"    column="status_id"    />
-        <result property="statusName"    column="status_name"    />
-        <result property="statusCode"    column="status_code"    />
-        <result property="beginTime"    column="begin_time"    />
-    </resultMap>
-
-    <sql id="selectDeviceStatusLiveVo">
-        select id, device_id, status_id, status_name, status_code, begin_time from device_status_live
-    </sql>
-
-    <select id="selectDeviceStatusLiveList" parameterType="DeviceStatusLive" resultMap="DeviceStatusLiveResult">
-        <include refid="selectDeviceStatusLiveVo"/>
-        <where>  
-            <if test="statusName != null  and statusName != ''"> and status_name like concat('%', #{statusName}, '%')</if>
-            <if test="statusCode != null  and statusCode != ''"> and status_code like concat('%', #{statusCode}, '%')</if>
-            <if test="beginTime != null "> and begin_time like concat('%', #{beginTime}, '%')</if>
-        </where>
-    </select>
-    
-    <select id="selectDeviceStatusLiveById" parameterType="String" resultMap="DeviceStatusLiveResult">
-        <include refid="selectDeviceStatusLiveVo"/>
-        where device_id = #{id}
-    </select>
-    <select id="getDeviceStatus" resultMap="DeviceStatusLiveResult">
-        <include refid="selectDeviceStatusLiveVo"/>
-        where device_id = #{deviceId} and status_id = #{statusId}
-    </select>
-
-    <insert id="insertDeviceStatusLive" parameterType="DeviceStatusLive">
-        insert into device_status_live
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="deviceId != null  and deviceId != ''">device_id,</if>
-            <if test="statusId != null  and statusId != ''">status_id,</if>
-            <if test="statusName != null  and statusName != ''">status_name,</if>
-            <if test="statusCode != null  and statusCode != ''">status_code,</if>
-            <if test="beginTime != null ">begin_time,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="deviceId != null  and deviceId != ''">#{deviceId},</if>
-            <if test="statusId != null  and statusId != ''">#{statusId},</if>
-            <if test="statusName != null  and statusName != ''">#{statusName},</if>
-            <if test="statusCode != null  and statusCode != ''">#{statusCode},</if>
-            <if test="beginTime != null ">#{beginTime},</if>
-         </trim>
-    </insert>
-
-    <update id="updateDeviceStatusLive" parameterType="DeviceStatusLive">
-        update device_status_live
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="deviceId != null  and deviceId != ''">device_id = #{deviceId},</if>
-            <if test="statusId != null  and statusId != ''">status_id = #{statusId},</if>
-            <if test="statusName != null  and statusName != ''">status_name = #{statusName},</if>
-            <if test="statusCode != null  and statusCode != ''">status_code = #{statusCode},</if>
-            <if test="beginTime != null ">begin_time = #{beginTime},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteDeviceStatusLiveById" parameterType="String">
-        delete from device_status_live where id = #{id}
-    </delete>
-
-    <delete id="deleteDeviceStatusLiveByIds" parameterType="String">
-        delete from device_status_live where id in 
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    
-</mapper>
\ No newline at end of file
diff --git a/data-monitoring/src/main/resources/mybatis/trend/SvgTrendMapper.xml b/data-monitoring/src/main/resources/mybatis/trend/SvgTrendMapper.xml
deleted file mode 100644
index a0abc0f..0000000
--- a/data-monitoring/src/main/resources/mybatis/trend/SvgTrendMapper.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.data.monitoring.trend.svg.mapper.SvgTrendMapper">
-    <resultMap type="EnergyIndex" id="EnergyIndexResult">
-        <result property="indexId" column="index_id"/>
-        <result property="name" column="name"/>
-        <result property="code" column="code"/>
-        <result property="indexType" column="index_type"/>
-        <result property="indexCategory" column="index_category"/>
-        <result property="remark" column="remark"/>
-        <result property="unitId" column="unit_id"/>
-        <result property="meterId" column="meter_id"/>
-        <result property="meterName" column="meter_name"/>
-    </resultMap>
-    <select id="selectSvgTrendList" parameterType="EnergyIndex" resultMap="EnergyIndexResult">
-        select ei.index_id, name, ei.code, index_type, ei.remark, ei.unit_id, index_category,meter_name
-        from
-        energy_index ei,
-        sys_svg_info svg,
-        meter_implement as me
-        <where>
-            ei.code = svg.tag
-            and ei.meter_id = me.id
-            <if test="name != null  and name != ''">and name like concat('%', #{name}, '%')</if>
-            <if test="code != null  and code != ''">and ei.code like concat('%', #{code}, '%')</if>
-            <if test="indexType != null">and index_type = #{indexType}</if>
-            <if test="nodeId != null  and nodeId != ''">and svg.node_id = #{nodeId}</if>
-            <if test="indexCategory != null  and indexCategory != ''">and index_category =
-                #{indexCategory}
-            </if>
-        </where>
-    </select>
-
-</mapper>
diff --git a/data-service/pom.xml b/data-service/pom.xml
deleted file mode 100644
index b987a3b..0000000
--- a/data-service/pom.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <parent>
-    <artifactId>energy-management</artifactId>
-    <groupId>com.dingzhuo</groupId>
-    <version>1.0.0</version>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-
-  <artifactId>data-service</artifactId>
-  <dependencies>
-    <dependency>
-      <groupId>com.dingzhuo</groupId>
-      <artifactId>basic</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.dingzhuo</groupId>
-      <artifactId>data-model</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-
-
-</project>
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/controller/PeriodDataController.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/controller/PeriodDataController.java
deleted file mode 100644
index e03fde2..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/controller/PeriodDataController.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.dingzhuo.energy.dataservice.controller;
-
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.dataservice.domain.RetrievalModes;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import com.dingzhuo.energy.dataservice.service.PeriodDataService;
-import com.dingzhuo.energy.dataservice.service.RealtimeDatabaseService;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import java.util.List;
-import org.joda.time.DateTime;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-@Controller
-@RequestMapping("/dataService")
-public class PeriodDataController {
-
-  @Autowired
-  private PeriodDataService periodDataService;
-
-  @GetMapping
-  @ResponseBody
-  public AjaxResult test() {
-    DataItem item = periodDataService.getDataByIndex("b2f4b0b7-19e3-4dc2-9e4c-ce7a8ba1710e", "ddd");
-    return AjaxResult.success(item);
-  }
-
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/controller/RealtimeDataController.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/controller/RealtimeDataController.java
deleted file mode 100644
index 43b4019..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/controller/RealtimeDataController.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.dingzhuo.energy.dataservice.controller;
-
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.service.IEnergyIndexService;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import com.dingzhuo.energy.dataservice.domain.TagValueResult;
-import com.dingzhuo.energy.dataservice.service.RealtimeDatabaseService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-@Controller
-@RequestMapping("/rtdb")
-public class RealtimeDataController extends BaseController {
-
-  @Autowired
-  private RealtimeDatabaseService realtimeDatabaseService;
-
-  @Autowired
-  private IEnergyIndexService energyIndexService;
-
-  @GetMapping("/retrieve/{tagCodes}")
-  @ResponseBody
-  public AjaxResult getLiveData(@PathVariable("tagCodes") String[] tagCodes) {
-    List<String> codes = new ArrayList<>(Arrays.asList(tagCodes));
-    List<TagValue> tagValues = realtimeDatabaseService.retrieve(codes);
-    List<EnergyIndex> energyIndices = energyIndexService.getEnergyIndexMeterByCodes(codes);
-    Map<String, EnergyIndex> mapValue = energyIndices.stream()
-        .collect(Collectors.toMap(EnergyIndex::getCode, m -> m));
-    List<TagValueResult> results = new ArrayList<>();
-    if (!tagValues.isEmpty()) {
-      tagValues.forEach(value -> {
-        TagValueResult result = new TagValueResult();
-        if (mapValue.containsKey(value.getTagCode())) {
-          EnergyIndex energyIndex = mapValue.get(value.getTagCode());
-          result.setTagName(energyIndex.getName());
-          result.setUnitId(energyIndex.getUnitId());
-          result.setMeteName(energyIndex.getMeterName());
-        }
-
-        result.setTagCode(value.getTagCode());
-        result.setValue(value.getValue());
-        result.setDataTime(value.getDataTime());
-        result.setQuality(value.getQuality());
-        results.add(result);
-      });
-    }
-    return AjaxResult.success(results);
-  }
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/InfluxDb.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/InfluxDb.java
deleted file mode 100644
index b205142..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/InfluxDb.java
+++ /dev/null
@@ -1,201 +0,0 @@
-package com.dingzhuo.energy.dataservice.data;
-
-import com.dingzhuo.energy.dataservice.data.influxdb.FastDB;
-import com.dingzhuo.energy.dataservice.data.influxdb.QueryType;
-import com.dingzhuo.energy.dataservice.data.influxdb.RtdbResult;
-import com.dingzhuo.energy.dataservice.domain.CollectionModes;
-import com.dingzhuo.energy.dataservice.domain.Quality;
-import com.dingzhuo.energy.dataservice.domain.RetrievalModes;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import com.dingzhuo.energy.dataservice.service.RealtimeDatabase;
-import com.google.common.base.Function;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.joda.time.DateTime;
-
-import java.time.ZoneOffset;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-/**
- * @author fanxinfu
- */
-public class InfluxDb implements RealtimeDatabase {
-    private Logger logger = LogManager.getLogger(InfluxDb.class);
-
-    private FastDB fastDB;
-    private static final String DB_NAME = "daq";
-
-    /**
-     * 鍏抽棴杩炴帴
-     */
-    @Override
-    public void close() {
-        if (!Objects.isNull(fastDB)) {
-            fastDB.close();
-        }
-    }
-
-    /**
-     * 鏍规嵁鐐逛綅鍙疯幏鍙栧疄鏃舵暟鎹�
-     *
-     * @param tagCodes 鐐逛綅鍙峰垪琛�
-     * @return
-     */
-    @Override
-    public List<TagValue> retrieve(List<String> tagCodes) throws Exception {
-        List<RtdbResult> results = fastDB.snapShot(tagCodes);
-        return convertTagValue(results);
-    }
-
-    /**
-     * 鏍规嵁鐐逛綅鍙疯幏鍙栨煇涓�鏃跺埢鐨勫巻鍙叉暟鎹�
-     *
-     * @param tagCodes 鐐逛綅鍙烽泦鍚�
-     * @param dataTime 鍘嗗彶鏃跺埢
-     * @param timeCode 鍖哄垎鏃堕棿绫诲瀷鐨則ime code
-     * @return
-     */
-    @Override
-    public List<TagValue> retrieve(List<String> tagCodes, Date dataTime, String timeCode) throws Exception {
-        List<RtdbResult> results = fastDB.getDataByTime(tagCodes, dataTime, timeCode);
-        return convertTagValue(results);
-    }
-
-    /**
-     * 鏍规嵁鏌ヨ鏂瑰紡鑾峰彇涓�娈垫椂闂村唴鐨勫巻鍙叉暟鎹�
-     *
-     * @param tagCodes       鐐逛綅鍙烽泦鍚�
-     * @param beginTime      寮�濮嬫椂闂�
-     * @param endTime        缁撴潫鏃堕棿
-     * @param retrievalModes 鏌ヨ鏂瑰紡锛堝惊鐜�佹嫙鍚堛�佸叏閮級
-     * @param pointCount     瑕佹煡璇㈢殑鏁版嵁涓暟
-     * @return
-     */
-    @Override
-    public List<TagValue> retrieve(List<String> tagCodes, Date beginTime, Date endTime, RetrievalModes retrievalModes, int pointCount) throws Exception {
-        QueryType queryType = null;
-        switch (retrievalModes) {
-            case BestFit:
-                queryType = QueryType.FIRST;
-                break;
-            default:
-                queryType = QueryType.FULL;
-                break;
-        }
-        List<RtdbResult> results = fastDB.getHistoryData(tagCodes, beginTime, endTime, queryType, pointCount);
-        return convertTagValue(results);
-    }
-
-    /**
-     * 姹囨�诲疄鏃舵暟鎹�
-     *
-     * @param tagCodes        鐐逛綅鍙烽泦鍚�
-     * @param beginTime       寮�濮嬫椂闂�
-     * @param endTime         缁撴潫鏃堕棿
-     * @param collectionModes 姹囨�绘柟寮忥紙鏈�澶у�笺�佹渶灏忓�笺�佸钩鍧囧�笺�佹眰鍜岀瓑锛�
-     * @return
-     */
-    @Override
-    public List<TagValue> statistics(List<String> tagCodes, Date beginTime, Date endTime, CollectionModes collectionModes) throws Exception {
-        DateTime begin = new DateTime(beginTime).withMillisOfSecond(0);
-        DateTime end = new DateTime(endTime).withMillisOfSecond(0);
-        QueryType queryType = null;
-        switch (collectionModes) {
-            case Sum:
-                queryType = QueryType.SUM;
-                break;
-            case Maximum:
-                queryType = QueryType.MAX;
-                break;
-            case Minimum:
-                queryType = QueryType.MIN;
-                break;
-            case Mean:
-                queryType = QueryType.MEAN;
-                break;
-            case Integral:
-                queryType = QueryType.INTEGRAL;
-                break;
-            default:
-                return new ArrayList<>();
-        }
-        List<RtdbResult> results = fastDB.statistics(tagCodes, begin.toDate(), end.toDate(), queryType);
-        return convertTagValue(results);
-    }
-
-    /**
-     * 鎻掑叆瀹炴椂鏁版嵁
-     *
-     * @param tagValues 瀹炴椂鏁版嵁闆嗗悎
-     * @return
-     */
-    @Override
-    public Boolean storeData(List<TagValue> tagValues) throws Exception {
-        List<RtdbResult> results = convertToRtdbResult(tagValues);
-        return fastDB.storeData(results);
-    }
-
-    /**
-     * 鎻掑叆鍘嗗彶鏁版嵁
-     *
-     * @param tagValues 鍘嗗彶鏁版嵁闆嗗悎
-     * @return
-     */
-    @Override
-    public Boolean insertData(List<TagValue> tagValues) throws Exception {
-        List<RtdbResult> results = convertToRtdbResult(tagValues);
-        return fastDB.insertData(results);
-    }
-
-    /**
-     * 鎵撳紑杩炴帴
-     *
-     * @param host     瀹炴椂鏁版嵁搴撳湴鍧�
-     * @param port     绔彛鍙�
-     * @param userName 鐧诲綍鐢ㄦ埛鍚�
-     * @param pwd      鐧诲綍瀵嗙爜
-     * @return 鏄惁杩炴帴鎴愬姛
-     */
-    @Override
-    public boolean open(String host, int port, String userName, String pwd) {
-        try {
-            fastDB = new FastDB(host, port, DB_NAME);
-        } catch (Throwable ex) {
-            ex.printStackTrace();
-        }
-        return true;
-    }
-
-
-    private List<TagValue> convertTagValue(List<RtdbResult> results) {
-        Function<RtdbResult, TagValue> convertFun = input -> {
-            TagValue tagValue = new TagValue();
-            tagValue.setDataTime(Date.from(input.getTime().atZone(ZoneOffset.ofHours(8)).toInstant()));
-            tagValue.setQuality(input.getQuality() > 0 ? Quality.GOOD : Quality.BAD);
-            tagValue.setTagCode(input.getTagCode());
-            tagValue.setValue(input.getValue());
-            if (tagValue.getQuality().equals(Quality.BAD)) {
-                logger.info(input.toString());
-                logger.info(tagValue.toString());
-            }
-            return tagValue;
-        };
-        return results.stream().map(convertFun).collect(Collectors.toList());
-    }
-
-    private List<RtdbResult> convertToRtdbResult(List<TagValue> results) {
-        Function<TagValue, RtdbResult> convertFun = input -> {
-            RtdbResult rtdbResult = new RtdbResult();
-            rtdbResult.setTime(input.getDataTime().toInstant());
-            rtdbResult.setQuality(input.getQuality() == Quality.GOOD ? 1 : 0);
-            rtdbResult.setTagCode(input.getTagCode());
-            rtdbResult.setValue(input.getValue());
-            return rtdbResult;
-        };
-        return results.stream().map(convertFun).collect(Collectors.toList());
-    }
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/RealtimeDatabaseManager.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/RealtimeDatabaseManager.java
deleted file mode 100644
index 4204990..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/RealtimeDatabaseManager.java
+++ /dev/null
@@ -1,153 +0,0 @@
-package com.dingzhuo.energy.dataservice.data;
-
-import com.dingzhuo.energy.framework.config.RtdbConfig;
-import com.dingzhuo.energy.dataservice.domain.CollectionModes;
-import com.dingzhuo.energy.dataservice.domain.RetrievalModes;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import com.dingzhuo.energy.dataservice.service.RealtimeDatabase;
-import org.apache.commons.lang.StringUtils;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
-
-/**
- * @author 鏅虹⒊鏈潵 瀹炴椂鏁版嵁搴撹闂鐞�.
- */
-@Component
-public class RealtimeDatabaseManager {
-    private RealtimeDatabase connection;
-    private Logger logger = LogManager.getLogger(RealtimeDatabaseManager.class);
-
-    public RealtimeDatabaseManager(RtdbConfig rtdbConfig) {
-        connection = new InfluxDb();
-//    connection = new VirtualRtdb();
-        try {
-            connection.open(rtdbConfig.getHost(), rtdbConfig.getPort(), rtdbConfig.getUser(), rtdbConfig.getPassword());
-        } catch (Exception e) {
-            logger.error(e);
-        }
-    }
-
-    public TagValue retrieve(String tagCode) {
-        List<String> tagCodes = new ArrayList<>();
-        tagCodes.add(tagCode);
-        List<TagValue> tagValues = retrieve(tagCodes);
-        if (!tagValues.isEmpty()) {
-            return tagValues.get(0);
-        }
-
-        return null;
-    }
-
-    public List<TagValue> retrieve(List<String> tagCodes) {
-        List<TagValue> tagValues = new ArrayList<>();
-        try {
-            tagValues = connection.retrieve(tagCodes);
-        } catch (Exception e) {
-            logger.error(e);
-        }
-
-        return tagValues;
-    }
-
-    public TagValue retrieve(String tagCode, Date dataTime, String timeCode) {
-        List<String> tagCodes = new ArrayList<>();
-        tagCodes.add(tagCode);
-        List<TagValue> tagValues = retrieve(tagCodes, dataTime, timeCode);
-        if (!tagValues.isEmpty()) {
-            return tagValues.get(0);
-        }
-
-        return null;
-    }
-
-    public List<TagValue> retrieve(List<String> tagCodes, Date dataTime, String timeCode) {
-        List<TagValue> tagValues = new ArrayList<>();
-        try {
-            List<TagValue> tmp = connection.retrieve(tagCodes, dataTime, timeCode);
-            for (String tagCode : tagCodes) {
-                Optional<TagValue> tagValue = tmp.stream()
-                        .filter(f -> StringUtils.equalsIgnoreCase(f.getTagCode(), tagCode)).findAny();
-                TagValue value;
-                if (!tagValue.isPresent()) {
-                    value = new TagValue();
-                    value.setTagCode(tagCode);
-                    value.setDataTime(dataTime);
-                } else {
-                    value = tagValue.get();
-                }
-
-                tagValues.add(value);
-            }
-        } catch (Exception e1) {
-            logger.error(e1);
-        }
-
-        return tagValues;
-    }
-
-    public List<TagValue> retrieve(String tagCode, Date beginTime, Date endTime,
-                                   RetrievalModes retrievalModes, int pointCount) {
-        List<String> tagCodes = new ArrayList<>();
-        tagCodes.add(tagCode);
-        return retrieve(tagCodes, beginTime, endTime, retrievalModes, pointCount);
-    }
-
-    public List<TagValue> retrieve(List<String> tagCodes, Date beginTime, Date endTime,
-                                   RetrievalModes retrievalModes, int pointCount) {
-        List<TagValue> tagValues = new ArrayList<>();
-        try {
-            tagValues = connection.retrieve(tagCodes, beginTime, endTime, retrievalModes, pointCount);
-        } catch (Exception e1) {
-            logger.error(e1);
-        }
-
-        return tagValues;
-    }
-
-    public TagValue statistics(String tagCode, Date beginTime, Date endTime,
-                               CollectionModes collectionModes) {
-        List<String> tagCodes = new ArrayList<>();
-        tagCodes.add(tagCode);
-        List<TagValue> tagValues = statistics(tagCodes, beginTime, endTime, collectionModes);
-        if (!tagValues.isEmpty()) {
-            return tagValues.get(0);
-        }
-
-        return null;
-    }
-
-    public List<TagValue> statistics(List<String> tagCodes, Date beginTime, Date endTime,
-                                     CollectionModes collectionModes) {
-        List<TagValue> tagValues = new ArrayList<>();
-        try {
-            tagValues = connection.statistics(tagCodes, beginTime, endTime, collectionModes);
-        } catch (Exception e1) {
-            logger.error(e1);
-        }
-
-        return tagValues;
-    }
-
-    public void storeData(List<TagValue> tagValues) {
-        try {
-            connection.storeData(tagValues);
-        } catch (Exception e1) {
-            logger.error(e1);
-        }
-    }
-
-    public void insertData(List<TagValue> tagValues) {
-        try {
-            connection.insertData(tagValues);
-        } catch (Exception e1) {
-            logger.error(e1);
-        }
-    }
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/VirtualRtdb.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/VirtualRtdb.java
deleted file mode 100644
index 88f9065..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/VirtualRtdb.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package com.dingzhuo.energy.dataservice.data;
-
-import com.dingzhuo.energy.dataservice.domain.CollectionModes;
-import com.dingzhuo.energy.dataservice.domain.Quality;
-import com.dingzhuo.energy.dataservice.domain.RetrievalModes;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import com.dingzhuo.energy.dataservice.service.RealtimeDatabase;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Random;
-import org.joda.time.DateTime;
-import org.joda.time.Seconds;
-
-public class VirtualRtdb implements RealtimeDatabase {
-
-  /**
-   * 鍏抽棴杩炴帴
-   */
-  @Override
-  public void close() {
-
-  }
-
-  /**
-   * 鏍规嵁鐐逛綅鍙疯幏鍙栧疄鏃舵暟鎹�
-   *
-   * @param tagCodes 鐐逛綅鍙峰垪琛�
-   * @return
-   */
-  @Override
-  public List<TagValue> retrieve(List<String> tagCodes) throws Exception {
-    List<TagValue> tagValues = new ArrayList<>();
-    Random random = new Random();
-    tagCodes.forEach(tagCode -> {
-      TagValue value = new TagValue();
-      value.setTagCode(tagCode);
-      value.setDataTime(DateTime.now().toDate());
-      value.setQuality(Quality.GOOD);
-      value.setValue(random.nextDouble() * 100);
-      tagValues.add(value);
-    });
-
-    return tagValues;
-  }
-
-  /**
-   * 鏍规嵁鐐逛綅鍙疯幏鍙栨煇涓�鏃跺埢鐨勫巻鍙叉暟鎹�
-   *
-   * @param tagCodes 鐐逛綅鍙烽泦鍚�
-   * @param dataTime 鍘嗗彶鏃跺埢
-   * @param timeCode 鍖哄垎鏃堕棿绫诲瀷鐨則ime code
-   * @return
-   */
-  @Override
-  public List<TagValue> retrieve(List<String> tagCodes, Date dataTime,String timeCode) throws Exception {
-    List<TagValue> tagValues = new ArrayList<>();
-    Random random = new Random();
-    tagCodes.forEach(tagCode -> {
-      TagValue value = new TagValue();
-      value.setTagCode(tagCode);
-      value.setDataTime(dataTime);
-      value.setQuality(Quality.GOOD);
-      value.setValue(random.nextDouble() * 100);
-      tagValues.add(value);
-    });
-
-    return tagValues;
-  }
-
-  /**
-   * 鏍规嵁鏌ヨ鏂瑰紡鑾峰彇涓�娈垫椂闂村唴鐨勫巻鍙叉暟鎹�
-   *
-   * @param tagCodes       鐐逛綅鍙烽泦鍚�
-   * @param beginTime      寮�濮嬫椂闂�
-   * @param endTime        缁撴潫鏃堕棿
-   * @param retrievalModes 鏌ヨ鏂瑰紡锛堝惊鐜�佹嫙鍚堛�佸叏閮級
-   * @param pointCount     瑕佹煡璇㈢殑鏁版嵁涓暟
-   * @return
-   */
-  @Override
-  public List<TagValue> retrieve(List<String> tagCodes, Date beginTime, Date endTime,
-      RetrievalModes retrievalModes, int pointCount) throws Exception {
-    List<TagValue> tagValues = new ArrayList<>();
-    Random random = new Random();
-    pointCount = retrievalModes == RetrievalModes.Full ? 200 : pointCount;
-    int finalPointCount = pointCount;
-    int span =
-        Seconds.secondsBetween(new DateTime(beginTime), new DateTime(endTime)).getSeconds();
-    int interval = span / finalPointCount;
-    tagCodes.forEach(tagCode -> {
-      for (int i = 1; i <= finalPointCount; i++) {
-        TagValue value = new TagValue();
-        value.setTagCode(tagCode);
-        value.setDataTime(new DateTime(beginTime).plusSeconds(interval * i).toDate());
-        value.setQuality(Quality.GOOD);
-        value.setValue(random.nextDouble() * 100);
-        tagValues.add(value);
-      }
-    });
-
-    return tagValues;
-  }
-
-  /**
-   * 姹囨�诲疄鏃舵暟鎹�
-   *
-   * @param tagCodes        鐐逛綅鍙烽泦鍚�
-   * @param beginTime       寮�濮嬫椂闂�
-   * @param endTime         缁撴潫鏃堕棿
-   * @param collectionModes 姹囨�绘柟寮忥紙鏈�澶у�笺�佹渶灏忓�笺�佸钩鍧囧�笺�佹眰鍜岀瓑锛�
-   * @return
-   */
-  @Override
-  public List<TagValue> statistics(List<String> tagCodes, Date beginTime, Date endTime,
-      CollectionModes collectionModes) throws Exception {
-    List<TagValue> tagValues = new ArrayList<>();
-    Random random = new Random();
-    tagCodes.forEach(tagCode -> {
-      TagValue value = new TagValue();
-      value.setTagCode(tagCode);
-      value.setDataTime(beginTime);
-      value.setQuality(Quality.GOOD);
-      value.setValue(random.nextDouble() * 1000);
-      tagValues.add(value);
-    });
-
-    return tagValues;
-  }
-
-  /**
-   * 鎻掑叆瀹炴椂鏁版嵁
-   *
-   * @param tagValues 瀹炴椂鏁版嵁闆嗗悎
-   * @return
-   */
-  @Override
-  public Boolean storeData(List<TagValue> tagValues) throws Exception {
-    return true;
-  }
-
-  /**
-   * 鎻掑叆鍘嗗彶鏁版嵁
-   *
-   * @param tagValues 鍘嗗彶鏁版嵁闆嗗悎
-   * @return
-   */
-  @Override
-  public Boolean insertData(List<TagValue> tagValues) throws Exception {
-    return true;
-  }
-
-  /**
-   * 鎵撳紑杩炴帴
-   *
-   * @param host     瀹炴椂鏁版嵁搴撳湴鍧�
-   * @param port     绔彛鍙�
-   * @param userName 鐧诲綍鐢ㄦ埛鍚�
-   * @param pwd      鐧诲綍瀵嗙爜
-   * @return 鏄惁杩炴帴鎴愬姛
-   */
-  @Override
-  public boolean open(String host, int port, String userName, String pwd) throws Exception {
-    return true;
-  }
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/influxdb/DecodeInstant.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/influxdb/DecodeInstant.java
deleted file mode 100644
index 95df866..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/influxdb/DecodeInstant.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.dingzhuo.energy.dataservice.data.influxdb;
-
-import com.jsoniter.JsonIterator;
-import com.jsoniter.spi.Decoder;
-
-import java.io.IOException;
-import java.time.Instant;
-
-public class DecodeInstant implements Decoder {
-
-  @Override
-  public Object decode(JsonIterator jsonIterator) throws IOException {
-    return Instant.ofEpochMilli(jsonIterator.readLong());
-  }
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/influxdb/FastDB.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/influxdb/FastDB.java
deleted file mode 100644
index eaf7c5e..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/influxdb/FastDB.java
+++ /dev/null
@@ -1,340 +0,0 @@
-package com.dingzhuo.energy.dataservice.data.influxdb;
-
-import com.google.common.collect.Lists;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
-import com.google.common.util.concurrent.MoreExecutors;
-import com.google.common.util.concurrent.ThreadFactoryBuilder;
-
-import java.time.Instant;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-import okhttp3.OkHttpClient;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.influxdb.BatchOptions;
-import org.influxdb.InfluxDB;
-import org.influxdb.InfluxDBFactory;
-import org.influxdb.dto.BatchPoints;
-import org.influxdb.dto.Point;
-import org.influxdb.dto.Query;
-import org.influxdb.dto.QueryResult;
-import org.influxdb.impl.InfluxDBMapper;
-import org.joda.time.DateTime;
-import org.joda.time.Duration;
-
-public class FastDB {
-
-    private Logger logger = LogManager.getLogger(FastDB.class);
-    private InfluxDB influxDB;
-    private static final String TABLE_NAME = "daq";
-
-    private String dataBaseName;
-    private String host;
-    private int port;
-
-    public FastDB(String host, int port, String dataBaseName) {
-        this.dataBaseName = dataBaseName;
-        this.host = host;
-        this.port = port;
-        try {
-            this.open();
-        } catch (Exception e) {
-            logger.fatal(e);
-        }
-    }
-
-    private static InfluxDBMapper resultMapper;
-
-    /**
-     * 鎵撳紑杩炴帴
-     */
-    private void open() {
-        try {
-            OkHttpClient.Builder builder = new OkHttpClient.Builder()
-                    .connectTimeout(30, TimeUnit.SECONDS)
-                    .readTimeout(60, TimeUnit.SECONDS)
-                    .retryOnConnectionFailure(true);
-            influxDB = InfluxDBFactory.connect("http://" + this.host + ":" + this.port, builder);
-            influxDB
-                    .enableBatch(BatchOptions.DEFAULTS.jitterDuration(500).actions(2000).flushDuration(100));
-            influxDB.enableGzip();
-            influxDB.ping();
-            resultMapper = new InfluxDBMapper(influxDB);
-            logger.info("瀹炴椂搴撹繛鎺ユ垚鍔燂紒");
-        } catch (Exception ex) {
-            logger.fatal("瀹炴椂搴撹繛鎺ュけ璐ワ紒" + ex);
-        }
-    }
-
-    /**
-     * 鍏抽棴杩炴帴
-     */
-    public void close() {
-        influxDB.close();
-    }
-
-    /**
-     * 鏍规嵁鐐逛綅鍙疯幏鍙栧疄鏃舵暟鎹�
-     *
-     * @param tagCodes 鐐逛綅鍙峰垪琛�
-     * @returnS
-     */
-    public List<RtdbResult> snapShot(List<String> tagCodes) {
-        final String sql = "SELECT LAST(value) as value, quality FROM %s WHERE %s and " +
-                "time<=(now()) and time>=(now()-20m) GROUP BY code";
-        List<List<String>> newList = Lists.partition(tagCodes, 10);
-        List<ListenableFuture<QueryResult>> taskList = new ArrayList<>();
-        ListeningExecutorService service =
-                MoreExecutors.listeningDecorator(customerThreadPool());
-        for (List<String> tags : newList) {
-            ListenableFuture<QueryResult> futureTask = service.submit(() -> {
-                StringBuilder sb = new StringBuilder();
-                String codes = formatCode(tags);
-                sb.append(String.format(sql,
-                        TABLE_NAME, codes));
-                return builderResultValue(sb.toString());
-            });
-            taskList.add(futureTask);
-        }
-        List<RtdbResult> results = buildResult(taskList);
-        service.shutdown();
-        return results;
-    }
-
-    private ExecutorService customerThreadPool() {
-        ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
-                .setNameFormat("fast-db-thread-pool-%d").build();
-        return new ThreadPoolExecutor(10, 50,
-                30, TimeUnit.SECONDS,
-                new LinkedBlockingQueue<>(1024), namedThreadFactory,
-                new ThreadPoolExecutor.AbortPolicy());
-    }
-
-    /**
-     * 鏍规嵁鐐逛綅鍙疯幏鍙栨煇涓�鏃跺埢鐨勫巻鍙叉暟鎹�
-     *
-     * @param tagCodes 鐐逛綅鍙烽泦鍚�
-     * @param dataTime 鍘嗗彶鏃跺埢
-     * @param timeCode 鍖哄垎鏃堕棿绫诲瀷鐨則ime code
-     * @return List<RtdbResult>
-     */
-    public List<RtdbResult> getDataByTime(List<String> tagCodes, Date dataTime, String timeCode) {
-        DateTime begin = new DateTime(dataTime).plusDays(-1);;
-//        if (timeCode.startsWith("M")) {
-//            begin = new DateTime(dataTime).plusMonths(-1);
-//        } else if (timeCode.startsWith("Y")) {
-//            begin = new DateTime(dataTime).plusYears(-1);
-//        } else {
-//            begin = new DateTime(dataTime).plusDays(-1);
-//        }
-        DateTime end = new DateTime(dataTime);
-//        logger.error("寮�濮嬭绠楁暟鎹紝timeCode=" + timeCode + "寮�濮嬫椂闂�=" + begin.toString("yyyy-MM-dd HH:mm:ss") + "缁撴潫鏃堕棿=" + end.toString("yyyy-MM-dd HH:mm:ss"));
-        final String sql =
-                "SELECT LAST(value) as value, quality FROM %s WHERE %s AND time >=%dms AND " +
-                        "time<=%dms GROUP BY code";
-
-        List<List<String>> newList = Lists.partition(tagCodes, 10);
-        List<ListenableFuture<QueryResult>> taskList = new ArrayList<>();
-        ListeningExecutorService service =
-                MoreExecutors.listeningDecorator(customerThreadPool());
-        for (List<String> tags : newList) {
-            ListenableFuture<QueryResult> futureTask = service.submit(() -> {
-                StringBuilder sb = new StringBuilder();
-                String codes = formatCode(tags);
-                sb.append(String.format(sql,
-                        TABLE_NAME, codes, begin.toDate().getTime(), end.toDate().getTime() + 999));
-                return builderResultValue(sb.toString());
-            });
-            taskList.add(futureTask);
-        }
-        List<RtdbResult> results = buildResult(taskList);
-        service.shutdown();
-        return results;
-    }
-
-    /**
-     * 鏍规嵁鏌ヨ鏂瑰紡鑾峰彇涓�娈垫椂闂村唴鐨勫巻鍙叉暟鎹�
-     *
-     * @param tagCodes   鐐逛綅鍙烽泦鍚�
-     * @param beginTime  寮�濮嬫椂闂�
-     * @param endTime    缁撴潫鏃堕棿
-     * @param queryType  鏌ヨ鏂瑰紡锛堝惊鐜�佹嫙鍚堛�佸叏閮級
-     * @param pointCount 瑕佹煡璇㈢殑鏁版嵁涓暟
-     * @return
-     */
-    public List<RtdbResult> getHistoryData(List<String> tagCodes, Date beginTime, Date endTime,
-                                           QueryType queryType, int pointCount) {
-        DateTime begin = new DateTime(beginTime);
-        DateTime end = new DateTime(endTime);
-        long millis = new Duration(begin, end).getMillis();
-        List<List<String>> newList = Lists.partition(tagCodes, 10);
-        List<ListenableFuture<QueryResult>> taskList = new ArrayList<>();
-
-        ListeningExecutorService service =
-                MoreExecutors.listeningDecorator(customerThreadPool());
-
-        final String sqlFull =
-                "select value,quality FROM %s WHERE %s AND time >=%dms AND time <=%dms " +
-                        "GROUP BY code";
-        final String sql = "select %s(value) as value, quality FROM %s WHERE %s AND time >=%dms " +
-                "AND" +
-                " time <=%dms GROUP BY code,time(%dms) fill(previous)";
-        for (List<String> tags : newList) {
-            ListenableFuture<QueryResult> futureTask = service.submit(() -> {
-                StringBuilder sb = new StringBuilder();
-                String codes = formatCode(tags);
-                if (queryType != QueryType.FULL && pointCount > 0) {
-                    long interval = millis / pointCount;
-                    sb.append(String.format(sql, queryType.name(),
-                            TABLE_NAME, codes, begin.toDate().getTime(), end.toDate().getTime() + 999, interval));
-                } else {
-                    sb.append(String.format(sqlFull,
-                            TABLE_NAME, codes, begin.toDate().getTime(), end.toDate().getTime() + 999));
-                }
-
-                return builderResultValue(sb.toString());
-            });
-            taskList.add(futureTask);
-        }
-        List<RtdbResult> results = buildResult(taskList);
-        service.shutdown();
-        return results;
-    }
-
-    /**
-     * 姹囨�诲疄鏃舵暟鎹�
-     *
-     * @param tagCodes  鐐逛綅鍙烽泦鍚�
-     * @param beginTime 寮�濮嬫椂闂�
-     * @param endTime   缁撴潫鏃堕棿
-     * @param queryType 姹囨�绘柟寮忥紙鏈�澶у�笺�佹渶灏忓�笺�佸钩鍧囧�笺�佹眰鍜岀瓑锛�
-     * @return
-     */
-    public List<RtdbResult> statistics(List<String> tagCodes, Date beginTime, Date endTime,
-                                       QueryType queryType) throws ExecutionException, InterruptedException {
-        if (queryType == QueryType.FULL) {
-            return new ArrayList<>();
-        }
-        DateTime begin = new DateTime(beginTime);
-        DateTime end = new DateTime(endTime);
-        List<List<String>> newList = Lists.partition(tagCodes, 10);
-        List<ListenableFuture<QueryResult>> taskList = new ArrayList<>();
-        ListeningExecutorService service =
-                MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(50));
-
-        final String sql = "select %s(value) as value, quality FROM FROM %s WHERE %s AND time >=%dms " +
-                "AND" +
-                " time <=%dms GROUP BY code fill(previous)";
-        for (List<String> tags : newList) {
-            ListenableFuture<QueryResult> futureTask = service.submit(() -> {
-                StringBuilder sb = new StringBuilder();
-                String codes = formatCode(tags);
-                sb.append(String.format(sql, queryType.name(),
-                        TABLE_NAME, codes, begin.toDate().getTime(), end.toDate().getTime() + 999));
-                return builderResultValue(sb.toString());
-            });
-            taskList.add(futureTask);
-        }
-        List<RtdbResult> results = buildResult(taskList);
-        service.shutdown();
-        return results;
-    }
-
-    /**
-     * 鎻掑叆瀹炴椂鏁版嵁
-     *
-     * @param tagValues 瀹炴椂鏁版嵁闆嗗悎
-     * @return
-     */
-    public Boolean storeData(List<RtdbResult> tagValues) {
-        Instant now = Instant.now();
-        for (RtdbResult tagValue : tagValues) {
-            tagValue.setTime(now);
-        }
-        return saveData(tagValues);
-    }
-
-    /**
-     * 鎻掑叆鍘嗗彶鏁版嵁
-     *
-     * @param tagValues 鍘嗗彶鏁版嵁闆嗗悎
-     * @return
-     */
-    public Boolean insertData(List<RtdbResult> tagValues) {
-        return saveData(tagValues);
-    }
-
-
-    /**
-     * 鍒犻櫎娴嬬偣
-     *
-     * @param tagCode 鐐逛綅鍙�
-     * @return
-     */
-    public Boolean deleteTag(String tagCode) {
-        return false;
-    }
-
-    private Boolean saveData(List<RtdbResult> tagValues) {
-        BatchPoints.Builder builder = BatchPoints
-                .database(dataBaseName)
-                .retentionPolicy("autogen").precision(TimeUnit.SECONDS);
-        tagValues.forEach(tagValue -> {
-            Point point = Point
-                    .measurement(TABLE_NAME)
-                    .addField("value", tagValue.getValue())
-                    .addField("quality", tagValue.getQuality())
-                    .tag("code", tagValue.getTagCode())
-                    .time(tagValue.getTime().getEpochSecond(), TimeUnit.SECONDS).build();
-            builder.point(point);
-        });
-        influxDB.write(builder.build());
-        return true;
-    }
-
-    private QueryResult builderResultValue(String sql) {
-        try {
-//            logger.error("璁$畻鏁版嵁鐨凷QL鏄�" + sql);
-            Query query = new Query(sql, dataBaseName);
-            return influxDB.query(query);
-        } catch (Throwable throwable) {
-            return new QueryResult();
-        }
-    }
-
-    private List<RtdbResult> buildResult(List<ListenableFuture<QueryResult>> taskList) {
-        List<RtdbResult> results = new ArrayList<>();
-
-        try {
-            for (QueryResult queryResult : Futures.successfulAsList(taskList).get()) {
-                try {
-                    synchronized (this) {
-                        if (queryResult != null) {
-                            List<RtdbResult> rtdbResults = resultMapper.toPOJO(queryResult, RtdbResult.class);
-                            results.addAll(rtdbResults);
-                        }
-                    }
-                } catch (Throwable throwable) {
-                }
-            }
-        } catch (InterruptedException | ExecutionException e) {
-        }
-
-        return results;
-    }
-
-    private String formatCode(List<String> codeList) {
-        return "(code='" + String.join("' or code='", codeList) + "')";
-    }
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/influxdb/QueryType.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/influxdb/QueryType.java
deleted file mode 100644
index 9a0e64c..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/influxdb/QueryType.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.dingzhuo.energy.dataservice.data.influxdb;
-
-/**
- * @author 鏅虹⒊鏈潵
- * <p>
- * 鑾峰彇瀹炴椂鏁版嵁鏂瑰紡.
- */
-public enum QueryType {
-  /**
-   * 鍘熷
-   */
-  FULL,
-  /**
-   * 鎻掑��
-   */
-  MEAN,
-  /**
-   * 鏈�灏�
-   */
-  MIN,
-  /**
-   * 鏈�澶�
-   */
-  MAX,
-  /**
-   * 鏈�鏃�
-   */
-  FIRST,
-  /**
-   * 鏈�鍚�
-   */
-  LAST,
-  /**
-   * 涓綅鏁�
-   */
-  MEDIAN,
-  /**
-   * 姹傚拰
-   */
-  SUM,
-  /**
-   * 绉垎
-   */
-  INTEGRAL
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/influxdb/RtdbResult.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/influxdb/RtdbResult.java
deleted file mode 100644
index 902618c..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/data/influxdb/RtdbResult.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.dingzhuo.energy.dataservice.data.influxdb;
-
-import com.jsoniter.annotation.JsonProperty;
-import org.influxdb.annotation.Column;
-import org.influxdb.annotation.Measurement;
-
-import java.io.Serializable;
-import java.time.Instant;
-
-/**
- * @author fanxinfu
- */
-@Measurement(name = "daq")
-public class RtdbResult implements Serializable {
-  private static final long serialVersionUID = -6608775093489743678L;
-  @Column(name = "time")
-  @JsonProperty(value = "dataTime", decoder = DecodeInstant.class)
-  private Instant time;
-  @Column(name = "code", tag = true)
-  @JsonProperty("tagCode")
-  private String tagCode;
-  @Column(name = "value")
-  @JsonProperty("value")
-  private Double value;
-  @Column(name = "quality")
-  @JsonProperty("quality")
-  private int quality;
-
-  public Instant getTime() {
-    return time;
-  }
-
-  public void setTime(Instant time) {
-    this.time = time;
-  }
-
-  public String getTagCode() {
-    return tagCode;
-  }
-
-  public void setTagCode(String tagCode) {
-    this.tagCode = tagCode;
-  }
-
-  public Double getValue() {
-    return value;
-  }
-
-  public void setValue(Double value) {
-    this.value = value;
-  }
-
-  public int getQuality() {
-    return quality;
-  }
-
-  public void setQuality(int quality) {
-    this.quality = quality;
-  }
-
-  @Override
-  public String toString() {
-    return "RtdbResult{" +
-        "time=" + time +
-        ", tagCode='" + tagCode + '\'' +
-        ", value=" + value +
-        ", quality=" + quality +
-        '}';
-  }
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/CollectionModes.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/CollectionModes.java
deleted file mode 100644
index 3794e65..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/CollectionModes.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.dingzhuo.energy.dataservice.domain;
-
-/**
- * @author 鏅虹⒊鏈潵
- *
- *         瀹炴椂鏁版嵁缁熻绫诲瀷.
- */
-public enum CollectionModes {
-  Minimum, Maximum, Integral, Mean, Sum
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/DataItem.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/DataItem.java
deleted file mode 100644
index ce981ec..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/DataItem.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package com.dingzhuo.energy.dataservice.domain;
-
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import io.swagger.annotations.ApiParam;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 鍛ㄦ湡鏁版嵁椤�.
- */
-@ApiModel(value = "dataItem瀵硅薄")
-public class DataItem implements Serializable {
-  private static final long serialVersionUID = -2777479013884125925L;
-
-  @ApiModelProperty(value = "鎸囨爣id")
-  private String indexId;
-  @ApiModelProperty(value = "鎸囨爣搴搃d")
-  private String indexStorageId;
-  @ApiModelProperty(value = "鎸囨爣code")
-  private String indexCode;
-  @ApiModelProperty(value = "鎸囨爣鍚嶇О")
-  private String indexName;
-  @ApiModelProperty(value = "寮�濮嬫椂闂�")
-  private Date beginTime;
-  @ApiModelProperty(value = "缁撴潫鏃堕棿")
-  private Date endTime;
-  @ApiModelProperty(value = "鏃ユ湡")
-  private Date dataTime;
-  @ApiModelProperty(value = "鏃堕棿绫诲瀷缂栫爜")
-  private String timeCode;
-  @ApiModelProperty(value = "鏃堕棿绫诲瀷")
-  private TimeType timeType;
-  @ApiModelProperty(value = "鍊�")
-  private Double value;
-  @ApiModelProperty(value = "璐ㄩ噺")
-  private Quality quality;
-  @ApiModelProperty(value = "")
-  private String unitId;
-  @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-  private Date createTime;
-  @ApiModelProperty(value = "鏇存柊鏃堕棿")
-  private Date updateTime;
-  @ApiModelProperty(value = "澶囨敞")
-  private String remark;
-
-  public String getIndexId() {
-    return indexId;
-  }
-
-  public void setIndexId(String indexId) {
-    this.indexId = indexId;
-  }
-
-  public String getIndexStorageId() {
-    return indexStorageId;
-  }
-
-  public void setIndexStorageId(String indexStorageId) {
-    this.indexStorageId = indexStorageId;
-  }
-
-  public String getIndexCode() {
-    return indexCode;
-  }
-
-  public void setIndexCode(String indexCode) {
-    this.indexCode = indexCode;
-  }
-
-  public String getIndexName() {
-    return indexName;
-  }
-
-  public void setIndexName(String indexName) {
-    this.indexName = indexName;
-  }
-
-  public Date getBeginTime() {
-    return beginTime;
-  }
-
-  public void setBeginTime(Date beginTime) {
-    this.beginTime = beginTime;
-  }
-
-  public Date getEndTime() {
-    return endTime;
-  }
-
-  public void setEndTime(Date endTime) {
-    this.endTime = endTime;
-  }
-
-  public Date getDataTime() {
-    return dataTime;
-  }
-
-  public void setDataTime(Date dataTime) {
-    this.dataTime = dataTime;
-  }
-
-  public String getTimeCode() {
-    return timeCode;
-  }
-
-  public void setTimeCode(String timeCode) {
-    this.timeCode = timeCode;
-  }
-
-  public TimeType getTimeType() {
-    return timeType;
-  }
-
-  public void setTimeType(TimeType timeType) {
-    this.timeType = timeType;
-  }
-
-  public Double getValue() {
-    return value;
-  }
-
-  public void setValue(Double value) {
-    this.value = value;
-  }
-
-  public Quality getQuality() {
-    return quality;
-  }
-
-  public void setQuality(Quality quality) {
-    this.quality = quality;
-  }
-
-  public String getUnitId() {
-    return unitId;
-  }
-
-  public void setUnitId(String unitId) {
-    this.unitId = unitId;
-  }
-
-  public Date getCreateTime() {
-    return createTime;
-  }
-
-  public void setCreateTime(Date createTime) {
-    this.createTime = createTime;
-  }
-
-  public Date getUpdateTime() {
-    return updateTime;
-  }
-
-  public void setUpdateTime(Date updateTime) {
-    this.updateTime = updateTime;
-  }
-
-  public String getRemark() {
-    return remark;
-  }
-
-  public void setRemark(String remark) {
-    this.remark = remark;
-  }
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/Quality.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/Quality.java
deleted file mode 100644
index 3bb76c8..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/Quality.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.dingzhuo.energy.dataservice.domain;
-
-public enum Quality {
-  /**
-   * 鏁版嵁姝e父
-   */
-  GOOD,
-  /**
-   * 鏁版嵁閿欒
-   */
-  BAD
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/RetrievalModes.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/RetrievalModes.java
deleted file mode 100644
index 2f30c6e..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/RetrievalModes.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.dingzhuo.energy.dataservice.domain;
-
-/**
- * @author 鏅虹⒊鏈潵
- *
- *     鑾峰彇瀹炴椂鏁版嵁鏂瑰紡.
- */
-public enum RetrievalModes {
-  Full, BestFit
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/StatisticResult.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/StatisticResult.java
deleted file mode 100644
index a20370d..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/StatisticResult.java
+++ /dev/null
@@ -1,190 +0,0 @@
-package com.dingzhuo.energy.dataservice.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import org.springframework.util.StringUtils;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import java.util.Date;
-
-public class StatisticResult extends BaseEntity {
-  /**
-   * 鎸囨爣涓婚敭
-   */
-  @Excel(name = "鎸囨爣涓婚敭")
-  private String indexId;
-  /**
-   * 鎸囨爣缂栫爜
-   */
-  @Excel(name = "鎸囨爣缂栫爜")
-  private String indexCode;
-  /**
-   * 鎸囨爣鍚嶇О
-   */
-  @Excel(name = "鎸囨爣鍚嶇О")
-  private String indexName;
-  /**
-   * 鍗曚綅涓婚敭
-   */
-  @Excel(name = "鍗曚綅涓婚敭")
-  private String unitId;
-  /**
-   * 鏁版嵁鏃堕棿
-   */
-  @Excel(name = "鏁版嵁鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Excel.Type.EXPORT)
-  private Date dataTime;
-  /**
-   * 鏈湡鍊�
-   */
-  @Excel(name = "鏈湡鍊�")
-  private double currentValue;
-  /**
-   * 涓婃湡鍊�
-   */
-  @Excel(name = "涓婃湡鍊�")
-  private double previousValue;
-  /**
-   * 鍚屾湡鍊�
-   */
-  @Excel(name = "鍚屾湡鍊�")
-  private double lastYearValue;
-  /**
-   * 鏈�澶у��
-   */
-  @Excel(name = "鏈�澶у��")
-  private double maxValue;
-  /**
-   * 鏈�灏忓��
-   */
-  @Excel(name = "鏈�灏忓��")
-  private double minValue;
-  /**
-   * 骞冲潎鍊�
-   */
-  @Excel(name = "骞冲潎鍊�")
-  private double avgValue;
-  //鏃堕棿
-  private String formatdate;
-
-  public String getFormatdate() {
-    return formatdate;
-  }
-
-  public void setFormatdate(String formatdate) {
-    this.formatdate = DateUtils.parseDateToStr(formatdate,this.dataTime);
-  }
-  public String getIndexCode() {
-    return indexCode;
-  }
-
-  public void setIndexCode(String indexCode) {
-    this.indexCode = indexCode;
-  }
-
-  public String getIndexName() {
-    return indexName;
-  }
-
-  public void setIndexName(String indexName) {
-    this.indexName = indexName;
-  }
-
-  public String getUnitId() {
-    return unitId;
-  }
-
-  public void setUnitId(String unitId) {
-    this.unitId = unitId;
-  }
-
-  public String getIndexId() {
-    return indexId;
-  }
-
-  public void setIndexId(String indexId) {
-    this.indexId = indexId;
-  }
-
-  public Date getDataTime() {
-    return dataTime;
-  }
-
-  public void setDataTime(Date dataTime) {
-    this.dataTime = dataTime;
-  }
-
-  public double getCurrentValue() {
-    return currentValue;
-  }
-
-  public void setCurrentValue(double currentValue) {
-    this.currentValue = currentValue;
-  }
-
-  public double getPreviousValue() {
-    return previousValue;
-  }
-
-  public void setPreviousValue(double previousValue) {
-    this.previousValue = previousValue;
-  }
-
-  public double getLastYearValue() {
-    return lastYearValue;
-  }
-
-  public void setLastYearValue(double lastYearValue) {
-    this.lastYearValue = lastYearValue;
-  }
-
-  public double getMaxValue() {
-    return maxValue;
-  }
-
-  public void setMaxValue(double maxValue) {
-    this.maxValue = maxValue;
-  }
-
-  /**
-   * 鍚屾瘮.
-   */
-  public double getYoy() {
-    if (lastYearValue != 0) {
-      return (currentValue - lastYearValue) / lastYearValue * 100;
-    }
-    return 0;
-  }
-
-  /**
-   * 鐜瘮.
-   * @return
-   */
-  public double getQoq() {
-    if (previousValue != 0) {
-      return (currentValue - previousValue) / previousValue * 100;
-    }
-    return 0;
-  }
-
-  public boolean isEmpty() {
-    return StringUtils.isEmpty(indexId);
-  }
-
-  public double getMinValue() {
-    return minValue;
-  }
-
-  public void setMinValue(double minValue) {
-    this.minValue = minValue;
-  }
-
-  public double getAvgValue() {
-    return avgValue;
-  }
-
-  public void setAvgValue(double avgValue) {
-    this.avgValue = avgValue;
-  }
-
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/StatisticType.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/StatisticType.java
deleted file mode 100644
index 6cf5ce1..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/StatisticType.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.dingzhuo.energy.dataservice.domain;
-
-public enum StatisticType {
-  SUM, MAX, MIN, AVG
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/TagValue.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/TagValue.java
deleted file mode 100644
index 4e55ebf..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/TagValue.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package com.dingzhuo.energy.dataservice.domain;
-
-import com.dingzhuo.energy.common.utils.DateUtils;
-
-import java.util.Date;
-
-/**
- * @author 鏅虹⒊鏈潵
- *
- * 娴嬬偣鏁版嵁瀹炰綋绫�.
- */
-public class TagValue {
-
-  /**
-   * 娴嬬偣缂栫爜.
-   */
-  private String tagCode;
-
-  /**
-   * 娴嬬偣鏁版嵁鏃堕棿.
-   */
-  private Date dataTime;
-
-  /**
-   * 娴嬬偣鍊�.
-   */
-  private Double value;
-
-  /**
-   * 娴嬬偣鏁版嵁璐ㄩ噺.
-   */
-  private Quality quality;
-
-  /**
-   * 璇︾粏鐨勮川閲忕紪鐮�.
-   */
-  private Integer qualityDetail;
-
-  private String showDataTime;
-
-  public String getTagCode() {
-    return tagCode;
-  }
-
-  public void setTagCode(String tagCode) {
-    this.tagCode = tagCode;
-  }
-
-  public Date getDataTime() {
-    return dataTime;
-  }
-
-  public void setDataTime(Date dataTime) {
-    this.dataTime = dataTime;
-  }
-
-  public Double getValue() {
-    return value;
-  }
-
-  public void setValue(Double value) {
-    this.value = value;
-  }
-
-  public Quality getQuality() {
-    return quality;
-  }
-
-  public void setQuality(Quality quality) {
-    this.quality = quality;
-  }
-
-  public Integer getQualityDetail() {
-    return qualityDetail;
-  }
-
-  public void setQualityDetail(Integer qualityDetail) {
-    this.qualityDetail = qualityDetail;
-  }
-
-  public String getShowDataTime() {
-    return showDataTime;
-  }
-
-  public void setShowDataTime(String format) {
-    this.showDataTime = DateUtils.parseDateToStr(format,this.getDataTime());;
-  }
-  @Override
-  public String toString() {
-    return "TagValue{" +
-        "tagCode='" + tagCode + '\'' +
-        ", dataTime=" + dataTime +
-        ", value=" + value +
-        ", quality=" + quality +
-        ", qualityDetail=" + qualityDetail +
-        '}';
-  }
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/TagValueResult.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/TagValueResult.java
deleted file mode 100644
index aa9f622..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/domain/TagValueResult.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.dingzhuo.energy.dataservice.domain;
-
-import java.util.Date;
-
-public class TagValueResult {
-
-  /**
-   * 娴嬬偣缂栫爜.
-   */
-  private String tagCode;
-
-  private String tagName;
-  private String unitId;
-
-  /**
-   * 娴嬬偣鏁版嵁鏃堕棿.
-   */
-  private Date dataTime;
-
-  /**
-   * 娴嬬偣鍊�.
-   */
-  private Double value;
-
-  /**
-   * 娴嬬偣鏁版嵁璐ㄩ噺.
-   */
-  private Quality quality;
-  /**
-   * 璁¢噺鍣ㄥ叿鍚嶇О
-   */
-  private String meteName;
-
-  public String getTagCode() {
-    return tagCode;
-  }
-
-  public void setTagCode(String tagCode) {
-    this.tagCode = tagCode;
-  }
-
-  public String getTagName() {
-    return tagName;
-  }
-
-  public void setTagName(String tagName) {
-    this.tagName = tagName;
-  }
-
-  public String getUnitId() {
-    return unitId;
-  }
-
-  public void setUnitId(String unitId) {
-    this.unitId = unitId;
-  }
-
-  public Date getDataTime() {
-    return dataTime;
-  }
-
-  public void setDataTime(Date dataTime) {
-    this.dataTime = dataTime;
-  }
-
-  public Double getValue() {
-    return value;
-  }
-
-  public void setValue(Double value) {
-    this.value = value;
-  }
-
-  public Quality getQuality() {
-    return quality;
-  }
-
-  public void setQuality(Quality quality) {
-    this.quality = quality;
-  }
-
-  public String getMeteName() {
-    return meteName;
-  }
-
-  public void setMeteName(String meteName) {
-    this.meteName = meteName;
-  }
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/mapper/PeriodDataMapper.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/mapper/PeriodDataMapper.java
deleted file mode 100644
index 4148c05..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/mapper/PeriodDataMapper.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.dingzhuo.energy.dataservice.mapper;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.dataservice.domain.*;
-import java.util.Map;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 闃舵鏁版嵁鏌ヨ锛屾暟鎹闂帴鍙�.
- */
-public interface PeriodDataMapper {
-
-  void save(@Param("dataItem") DataItem dataItem);
-
-  void insert(@Param("dataItem") DataItem dataItem);
-
-  void update(@Param("dataItem") DataItem dataItem);
-
-  DataItem getDataByIndex(@Param("indexId") String indexId,
-                          @Param("timeCode") String timeCode);
-
-  List<DataItem> getDatasByIndex(@Param("indexIds") List<String> indexIds,
-                                 @Param("timeCode") String timeCode);
-
-  List<DataItem> getPeriodDatasByIndex(@Param("indexIds") List<String> indexIds,
-                                       @Param("beginTime") Date beginTime,
-                                       @Param("endTime") Date endTime,
-                                       @Param("timeType") TimeType timeType);
-
-  Double dataStatisticsByIndex(@Param("indexId") String indexId,
-                               @Param("statisticType") StatisticType statisticType,
-                               @Param("timeType") TimeType timeType,
-                               @Param("beginTime") Date beginTime,
-                               @Param("endTime") Date endTime);
-
-  List<DataItem> dataStatisticsByIndexs(@Param("indexIds") List<String> indexIds,
-                                        @Param("statisticType") StatisticType
-                                            statisticType,
-                                        @Param("timeType") TimeType timeType,
-                                        @Param("beginTime") Date beginTime,
-                                        @Param("endTime") Date endTime);
-
-  List<DataItem> statistic(@Param("indexIds") List<String> indexIds,
-                           @Param("timeType") TimeType timeType,
-                           @Param("beginTime") Date beginTime,
-                           @Param("endTime") Date endTime);
-
-  List<DataItem> statisticByCode(@Param("indexCodes") List<String> indexCodes,
-                                 @Param("timeType") TimeType timeType,
-                                 @Param("beginTime") Date beginTime,
-                                 @Param("endTime") Date endTime);
-
-  List<StatisticResult> getStatisticDatasById(@Param("indexIds") List<String> indexIds,
-                                              @Param("timeType") TimeType timeType);
-
-  List<StatisticResult> getStatisticDatasByCode(@Param("indexCodes") List<String> indexCodes,
-                                                @Param("timeType") TimeType timeType);
-
-  List<DataItem> dataStatisticsByCodes(@Param("indexCodes") List<String> indexCodes,
-                                       @Param("statisticType") StatisticType statisticType,
-                                       @Param("timeType") TimeType timeType,
-                                       @Param("beginTime") Date beginTime,
-                                       @Param("endTime") Date endTime);
-
-  String hasExist(@Param("indexId") String indexId,
-                  @Param("timeCode") String timeCode);
-
-  void saveDataList(@Param("dataItemVlues") List<DataItem> datas);
-
-  List<DataItem> getPeriodDatasByIndexAndQuality(@Param("indexIds") List<String> indexIds,
-                                                 @Param("beginTime") Date beginTime,
-                                                 @Param("endTime") Date endTime,
-                                                 @Param("timeType") TimeType timeType,
-                                                 @Param("quality") Quality quality);
-
-  List<DataItem> dataStatisticsFilterByCodes(@Param("indexCodes") List<String> indexCodes,
-                                             @Param("statisticType") StatisticType statisticType,
-                                             @Param("timeType") TimeType timeType,
-                                             @Param("beginTime") Date beginTime,
-                                             @Param("endTime") Date endTime,
-                                             @Param("isFilter") boolean isFilter);
-
-  void delete(@Param("indexId") String indexId,
-              @Param("timeType") TimeType timeType,
-              @Param("beginTime") Date beginTime,
-              @Param("endTime") Date endTime);
-
-  DataItem getDataByIndexCode(String indexCode, String timeCode);
-
-  List<String> queryDataItemIsExist(@Param("queryMap") Map<String, List<String>> queryMap);
-
-  void insertDataList(List<DataItem> insertData);
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/service/PeriodDataService.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/service/PeriodDataService.java
deleted file mode 100644
index ba99075..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/service/PeriodDataService.java
+++ /dev/null
@@ -1,305 +0,0 @@
-package com.dingzhuo.energy.dataservice.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.dataservice.domain.Quality;
-import com.dingzhuo.energy.dataservice.domain.StatisticResult;
-import com.dingzhuo.energy.dataservice.domain.StatisticType;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 闃舵鏁版嵁鏌ヨ鎺ュ彛.
- */
-public interface PeriodDataService {
-
-  /**
-   * 淇濆瓨鎸囨爣鏁版嵁.
-   *
-   * @param data 鎸囨爣鏁版嵁
-   */
-  void save(DataItem data);
-
-  /**
-   * 鎵归噺淇濆瓨鍛ㄦ湡鏁版嵁.
-   *
-   * @param datas 瑕佷繚瀛樼殑鏁版嵁闆嗗悎
-   */
-  void save(List<DataItem> datas);
-
-  /**
-   * 鎵归噺淇濆瓨鏁版嵁锛屼笉澶勭悊寮傚父
-   * 閲囩敤merge淇濆瓨鏁版嵁锛屽鏋滄壒閲忎繚瀛樺け璐ヨ窇鍑哄紓甯�
-   *
-   * @param dataItems
-   */
-  void savePeriodData(List<DataItem> dataItems);
-
-  /**
-   * 淇敼鎸囨爣鏁版嵁.
-   *
-   * @param data 鎸囨爣鏁版嵁
-   */
-  void update(DataItem data);
-
-  /**
-   * 鑾峰彇鎸囨爣鏁版嵁.
-   *
-   * @param indexId  璁$畻鎸囨爣
-   * @param timeCode 鏃堕棿缂栫爜
-   */
-  DataItem getDataByIndex(String indexId, String timeCode);
-
-  /**
-   * 鑾峰彇鎸囨爣鏌愪竴鏃跺埢鐨勬暟鎹�.
-   *
-   * @param indexId  璁$畻鎸囨爣
-   * @param dataTime 鏃堕棿
-   * @param timeType 鍛ㄦ湡绫诲瀷
-   */
-  DataItem getDataByIndex(String indexId, Date dataTime, TimeType timeType);
-
-  /**
-   * 鑾峰彇璁$畻鎸囨爣鏁版嵁.
-   *
-   * @param indexIds 璁$畻鎸囨爣
-   * @param timeCode 鏃堕棿缂栧彿
-   * @return 璁$畻鎸囨爣鏁版嵁
-   */
-  List<DataItem> getDatasByIndex(List<String> indexIds, String timeCode);
-
-  /**
-   * 鑾峰彇璁$畻鎸囨爣鏁版嵁.
-   *
-   * @param indexIds 璁$畻鎸囨爣闆嗗悎
-   * @param dataTime 鏃堕棿
-   * @param timeType 鍛ㄦ湡绫诲瀷
-   * @return 璁$畻鎸囨爣鏁版嵁
-   */
-  List<DataItem> getDatasByIndex(List<String> indexIds,
-                                 Date dataTime,
-                                 TimeType timeType);
-
-  /**
-   * 鑾峰彇鎸囨爣鏌愪竴鏃跺埢鐨勬暟鎹�.
-   *
-   * @param indexIds  璁$畻鎸囨爣瀛樺偍闆嗗悎
-   * @param beginTime 寮�濮嬫椂闂�
-   * @param endTime   缁撴潫鏃堕棿
-   * @param timeType  鍛ㄦ湡绫诲瀷
-   */
-  List<DataItem> getDatasByIndex(List<String> indexIds,
-                                 Date beginTime,
-                                 Date endTime,
-                                 TimeType timeType);
-
-  /**
-   * 鑾峰彇鎸囨爣鏌愪竴鏃跺埢鐨勬暟鎹�.
-   *
-   * @param indexId   璁$畻鎸囨爣瀛樺偍闆嗗悎
-   * @param beginTime 寮�濮嬫椂闂�
-   * @param endTime   缁撴潫鏃堕棿
-   * @param timeType  鍛ㄦ湡绫诲瀷
-   */
-  List<DataItem>  getDatasByIndex(String indexId,
-                  Date beginTime,
-                  Date endTime,
-                  TimeType timeType);
-
-  /**
-   * 鑾峰彇鎸囨爣鏌愪竴鏃跺埢鐨勬暟鎹�.
-   *
-   * @param indexIds  璁$畻鎸囨爣瀛樺偍闆嗗悎
-   * @param beginTime 寮�濮嬫椂闂�
-   * @param endTime   缁撴潫鏃堕棿
-   * @param timeType  鍛ㄦ湡绫诲瀷
-   */
-  List<DataItem> getDatasByIndex(List<String> indexIds,
-                                 Date beginTime,
-                                 Date endTime,
-                                 TimeType timeType,
-                                 Quality quality);
-
-  /**
-   * 鑾峰彇缁熻鏁版嵁.
-   *
-   * @param indexId       璁$畻鎸囨爣
-   * @param statisticType 缁熻绫诲瀷
-   * @param timeType      鏃堕棿绫诲瀷
-   * @param beginTime     寮�濮嬫椂闂�
-   * @param endTime       缁撴潫鏃堕棿
-   */
-  double dataStatisticsByIndex(String indexId,
-                               StatisticType statisticType,
-                               TimeType timeType,
-                               Date beginTime,
-                               Date endTime);
-
-  /**
-   * 鑾峰彇缁熻鏁版嵁.
-   *
-   * @param indexIds      璁$畻鎸囨爣闆嗗悎
-   * @param statisticType 缁熻绫诲瀷
-   * @param timeType      鏃堕棿绫诲瀷
-   * @param beginTime     寮�濮嬫椂闂�
-   * @param endTime       缁撴潫鏃堕棿
-   */
-  List<DataItem> dataStatisticsByIndexs(List<String> indexIds,
-                                        StatisticType statisticType,
-                                        TimeType timeType,
-                                        Date beginTime,
-                                        Date endTime);
-
-
-  /**
-   * 鑾峰彇缁熻鏁版嵁.
-   *
-   * @param indexCode     璁$畻鎸囨爣
-   * @param statisticType 缁熻绫诲瀷
-   * @param timeType      鏃堕棿绫诲瀷
-   * @param beginTime     寮�濮嬫椂闂�
-   * @param endTime       缁撴潫鏃堕棿
-   */
-  double dataStatisticsByCode(String indexCode,
-                              StatisticType statisticType,
-                              TimeType timeType,
-                              Date beginTime,
-                              Date endTime);
-
-  /**
-   * 鑾峰彇缁熻鏁版嵁.
-   *
-   * @param indexCodes    璁$畻鎸囨爣闆嗗悎
-   * @param statisticType 缁熻绫诲瀷
-   * @param timeType      鏃堕棿绫诲瀷
-   * @param beginTime     寮�濮嬫椂闂�
-   * @param endTime       缁撴潫鏃堕棿
-   */
-  List<DataItem> dataStatisticsByCodes(List<String> indexCodes,
-                                       StatisticType statisticType,
-                                       TimeType timeType,
-                                       Date beginTime,
-                                       Date endTime);
-
-  /**
-   * 鑾峰彇缁熻鏁版嵁.
-   *
-   * @param indexCodes    璁$畻鎸囨爣闆嗗悎
-   * @param statisticType 缁熻绫诲瀷
-   * @param timeType      鏃堕棿绫诲瀷
-   * @param beginTime     寮�濮嬫椂闂�
-   * @param endTime       缁撴潫鏃堕棿
-   */
-  List<DataItem> dataStatisticsByCodes(List<String> indexCodes,
-                                       StatisticType statisticType,
-                                       TimeType timeType,
-                                       Date beginTime,
-                                       Date endTime,
-                                       boolean isFilter);
-
-  /**
-   * 缁熻鎸囨爣鏈湡鍊笺�佷笂鏈熷�笺�佸悓鏈熷�笺�佹渶澶у�笺�佹渶灏忓�煎拰骞冲潎鍊�.
-   *
-   * @param indexId  鎸囨爣涓婚敭
-   * @param timeType 鏃堕棿鍛ㄦ湡绫诲瀷
-   * @param dataTime 鏁版嵁鏃堕棿
-   * @return 缁熻缁撴瀯
-   */
-  StatisticResult statisticById(String indexId, TimeType timeType, Date dataTime);
-
-  /**
-   * 缁熻鎸囨爣鏈湡鍊笺�佷笂鏈熷�笺�佸悓鏈熷�笺�佹渶澶у�笺�佹渶灏忓�煎拰骞冲潎鍊�.
-   *
-   * @param indexIds 鎸囨爣涓婚敭
-   * @param timeType 鏃堕棿鍛ㄦ湡绫诲瀷
-   * @param dataTime 鏁版嵁鏃堕棿
-   * @return 缁熻缁撴灉
-   */
-  List<StatisticResult> statisticById(List<String> indexIds, TimeType timeType, Date dataTime);
-
-  /**
-   * 缁熻涓�娈垫椂闂村懆鏈熷唴鎸囨爣姣忎釜鏁版嵁鏃堕棿鐨勬湰鏈熷�笺�佷笂鏈熷�笺�佸悓鏈熷�笺�佹渶澶у�笺�佹渶灏忓�煎拰骞冲潎鍊�.
-   *
-   * @param indexId   鎸囨爣涓婚敭
-   * @param timeType  鏃堕棿鍛ㄦ湡绫诲瀷
-   * @param beginTime 寮�濮嬫椂闂�
-   * @param endTime   缁撴潫鏃堕棿
-   * @return 缁熻缁撴灉
-   */
-  List<StatisticResult> statisticById(String indexId, TimeType timeType, Date beginTime, Date endTime);
-
-  /**
-   * 缁熻涓�娈垫椂闂村懆鏈熷唴鎸囨爣姣忎釜鏁版嵁鏃堕棿鐨勬湰鏈熷�笺�佷笂鏈熷�笺�佸悓鏈熷�笺�佹渶澶у�笺�佹渶灏忓�煎拰骞冲潎鍊�.
-   *
-   * @param indexIds  鎸囨爣涓婚敭
-   * @param timeType  鏃堕棿鍛ㄦ湡绫诲瀷
-   * @param beginTime 寮�濮嬫椂闂�
-   * @param endTime   缁撴潫鏃堕棿
-   * @return 缁熻缁撴灉
-   */
-  List<StatisticResult> statisticById(List<String> indexIds, TimeType timeType, Date beginTime, Date endTime);
-
-
-  /**
-   * 缁熻涓�娈垫椂闂村懆鏈熷唴鎸囨爣姣忎釜鏁版嵁鏃堕棿鐨勬湰鏈熷�笺�佷笂鏈熷��
-   * 杩欓噷鏄笂鏈熸暟鍊肩暐鏈変笉鍚岋紝灏忔椂鐨勬槸鏄ㄥぉ鐨勶紝鏃ユ暟鎹槸涓婁釜鏈堢殑锛屾湀鏄幓骞寸殑
-   *
-   * @param indexIds  鎸囨爣涓婚敭
-   * @param timeType  鏃堕棿鍛ㄦ湡绫诲瀷
-   * @param beginTime 寮�濮嬫椂闂�
-   * @param endTime   缁撴潫鏃堕棿
-   * @return 缁熻缁撴灉
-   */
-  List<StatisticResult> statisticOtherCycle(List<String> indexIds, TimeType timeType, Date beginTime, Date endTime);
-
-  /**
-   * 缁熻鎸囨爣鏈湡鍊笺�佷笂鏈熷�笺�佸悓鏈熷�笺�佹渶澶у�笺�佹渶灏忓�煎拰骞冲潎鍊�.
-   *
-   * @param indexCode 鎸囨爣涓婚敭
-   * @param timeType  鏃堕棿鍛ㄦ湡绫诲瀷
-   * @param dataTime  鏁版嵁鏃堕棿
-   * @return 缁熻缁撴瀯
-   */
-  StatisticResult statisticByCode(String indexCode, TimeType timeType, Date dataTime);
-
-  /**
-   * 缁熻鎸囨爣鏈湡鍊笺�佷笂鏈熷�笺�佸悓鏈熷�笺�佹渶澶у�笺�佹渶灏忓�煎拰骞冲潎鍊�.
-   *
-   * @param indexCodes 鎸囨爣涓婚敭
-   * @param timeType   鏃堕棿鍛ㄦ湡绫诲瀷
-   * @param dataTime   鏁版嵁鏃堕棿
-   * @return 缁熻缁撴灉
-   */
-  List<StatisticResult> statisticByCode(List<String> indexCodes, TimeType timeType, Date dataTime);
-
-  /**
-   * 缁熻涓�娈垫椂闂村懆鏈熷唴鎸囨爣姣忎釜鏁版嵁鏃堕棿鐨勬湰鏈熷�笺�佷笂鏈熷�笺�佸悓鏈熷�笺�佹渶澶у�笺�佹渶灏忓�煎拰骞冲潎鍊�.
-   *
-   * @param indexCode 鎸囨爣涓婚敭
-   * @param timeType  鏃堕棿鍛ㄦ湡绫诲瀷
-   * @param beginTime 寮�濮嬫椂闂�
-   * @param endTime   缁撴潫鏃堕棿
-   * @return 缁熻缁撴灉
-   */
-  List<StatisticResult> statisticByCode(String indexCode, TimeType timeType, Date beginTime, Date endTime);
-
-  /**
-   * 缁熻涓�娈垫椂闂村懆鏈熷唴鎸囨爣姣忎釜鏁版嵁鏃堕棿鐨勬湰鏈熷�笺�佷笂鏈熷�笺�佸悓鏈熷�笺�佹渶澶у�笺�佹渶灏忓�煎拰骞冲潎鍊�.
-   *
-   * @param indexCodes 鎸囨爣涓婚敭
-   * @param timeType   鏃堕棿鍛ㄦ湡绫诲瀷
-   * @param beginTime  寮�濮嬫椂闂�
-   * @param endTime    缁撴潫鏃堕棿
-   * @return 缁熻缁撴灉
-   */
-  List<StatisticResult> statisticByCode(List<String> indexCodes, TimeType timeType, Date beginTime, Date endTime);
-
-  /**
-   * 鑾峰彇鎸囨爣鏁版嵁.
-   *
-   * @param indexCode 璁$畻鎸囨爣缂栫爜
-   * @param timeCode  鏃堕棿缂栫爜
-   */
-  DataItem getDataByIndexCode(String indexCode, String timeCode);
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/service/RealtimeDatabase.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/service/RealtimeDatabase.java
deleted file mode 100644
index 407e9de..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/service/RealtimeDatabase.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.dingzhuo.energy.dataservice.service;
-
-import com.dingzhuo.energy.dataservice.domain.CollectionModes;
-import com.dingzhuo.energy.dataservice.domain.RetrievalModes;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-
-import java.util.Date;
-import java.util.List;
-
-public interface RealtimeDatabase {
-
-    long id = System.currentTimeMillis();
-
-    /**
-     * 鍏抽棴杩炴帴
-     */
-    void close();
-
-    /**
-     * 鏍规嵁鐐逛綅鍙疯幏鍙栧疄鏃舵暟鎹�
-     *
-     * @param tagCodes 鐐逛綅鍙峰垪琛�
-     * @return
-     */
-    List<TagValue> retrieve(List<String> tagCodes) throws Exception;
-
-    /**
-     * 鏍规嵁鐐逛綅鍙疯幏鍙栨煇涓�鏃跺埢鐨勫巻鍙叉暟鎹�
-     *
-     * @param tagCodes 鐐逛綅鍙烽泦鍚�
-     * @param dataTime 鍘嗗彶鏃跺埢
-     * @param timeCode 鍖哄垎鏃堕棿绫诲瀷鐨則imeCode
-     * @return
-     */
-    List<TagValue> retrieve(List<String> tagCodes, Date dataTime,String timeCode) throws Exception;
-
-    /**
-     * 鏍规嵁鏌ヨ鏂瑰紡鑾峰彇涓�娈垫椂闂村唴鐨勫巻鍙叉暟鎹�
-     *
-     * @param tagCodes       鐐逛綅鍙烽泦鍚�
-     * @param beginTime      寮�濮嬫椂闂�
-     * @param endTime        缁撴潫鏃堕棿
-     * @param retrievalModes 鏌ヨ鏂瑰紡锛堝惊鐜�佹嫙鍚堛�佸叏閮級
-     * @param pointCount     瑕佹煡璇㈢殑鏁版嵁涓暟
-     * @return
-     */
-    List<TagValue> retrieve(List<String> tagCodes, Date beginTime, Date endTime,
-                            RetrievalModes retrievalModes, int pointCount) throws Exception;
-
-    /**
-     * 姹囨�诲疄鏃舵暟鎹�
-     *
-     * @param tagCodes        鐐逛綅鍙烽泦鍚�
-     * @param beginTime       寮�濮嬫椂闂�
-     * @param endTime         缁撴潫鏃堕棿
-     * @param collectionModes 姹囨�绘柟寮忥紙鏈�澶у�笺�佹渶灏忓�笺�佸钩鍧囧�笺�佹眰鍜岀瓑锛�
-     * @return
-     */
-    List<TagValue> statistics(List<String> tagCodes, Date beginTime, Date endTime,
-                              CollectionModes collectionModes) throws Exception;
-
-    /**
-     * 鎻掑叆瀹炴椂鏁版嵁
-     *
-     * @param tagValues 瀹炴椂鏁版嵁闆嗗悎
-     * @return
-     */
-    Boolean storeData(List<TagValue> tagValues) throws Exception;
-
-    /**
-     * 鎻掑叆鍘嗗彶鏁版嵁
-     *
-     * @param tagValues 鍘嗗彶鏁版嵁闆嗗悎
-     * @return
-     */
-    Boolean insertData(List<TagValue> tagValues) throws Exception;
-
-    /**
-     * 鎵撳紑杩炴帴
-     *
-     * @param host     瀹炴椂鏁版嵁搴撳湴鍧�
-     * @param port     绔彛鍙�
-     * @param userName 鐧诲綍鐢ㄦ埛鍚�
-     * @param pwd      鐧诲綍瀵嗙爜
-     * @return 鏄惁杩炴帴鎴愬姛
-     */
-    boolean open(String host, int port, String userName, String pwd) throws Exception;
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/service/RealtimeDatabaseService.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/service/RealtimeDatabaseService.java
deleted file mode 100644
index 3a84125..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/service/RealtimeDatabaseService.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package com.dingzhuo.energy.dataservice.service;
-
-import com.dingzhuo.energy.dataservice.domain.CollectionModes;
-import com.dingzhuo.energy.dataservice.domain.RetrievalModes;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * @author 鏅虹⒊鏈潵 瀹炴椂鏁版嵁搴撹闂帴鍙�.
- */
-public interface RealtimeDatabaseService {
-
-    /**
-     * 鑾峰彇鍗曚釜娴嬬偣鐨勫疄鏃舵暟鎹�.
-     *
-     * @param tagCode 娴嬬偣缂栧彿
-     * @return 娴嬭瘯瀹炴椂鏁版嵁
-     */
-    TagValue retrieve(String tagCode);
-
-    /**
-     * 鑾峰彇鎵归噺娴嬬偣鐨勫疄鏃舵暟鎹�.
-     *
-     * @param tagCodes 娴嬬偣缂栫爜闆嗗悎
-     * @return 瀹炴椂鏁版嵁闆嗗悎
-     */
-    List<TagValue> retrieve(List<String> tagCodes);
-
-    /**
-     * 鑾峰彇娴嬬偣鐨勫巻鍙叉椂鍒诲��.
-     *
-     * @param tagCode  娴嬬偣缂栧彿
-     * @param dataTime 鍘嗗彶鏃跺埢
-     * @param timeCode 鏃堕棿绫诲瀷鐨凾IME CODE
-     * @return 娴嬬偣鍘嗗彶鏃跺埢鍊�
-     */
-    TagValue retrieve(String tagCode, Date dataTime, String timeCode);
-
-    /**
-     * 鑾峰彇鎵归噺娴嬬偣鐨勫巻鍙叉椂鍒诲��.
-     *
-     * @param tagCodes 娴嬬偣缂栧彿闆嗗悎
-     * @param dataTime 鍘嗗彶鏃跺埢
-     * @param timeCode 鏃堕棿绫诲瀷鐨凾IME CODE
-     * @return 娴嬭瘯鍘嗗彶鏃跺埢鏁版嵁闆嗗悎
-     */
-    List<TagValue> retrieve(List<String> tagCodes, Date dataTime, String timeCode);
-
-    /**
-     * 鑾峰彇涓�娈垫椂闂村唴娴嬬偣鐨勫巻鍙叉暟鎹�.
-     *
-     * @param tagCode        娴嬬偣缂栧彿
-     * @param beginTime      寮�濮嬫椂闂�
-     * @param endTime        缁撴潫鏃堕棿
-     * @param retrievalModes 鏌ヨ鏁版嵁鏂瑰紡
-     * @param pointCount     娴嬬偣寰楀埌鐨勬暟鎹釜鏁�
-     * @return 娴嬬偣鍘嗗彶鏁版嵁
-     */
-    List<TagValue> retrieve(String tagCode, Date beginTime, Date endTime,
-                            RetrievalModes retrievalModes, int pointCount);
-
-    /**
-     * 鑾峰彇涓�娈垫椂闂村唴鎵归噺娴嬬偣鐨勫巻鍙叉暟鎹�.
-     *
-     * @param tagCodes       娴嬬偣缂栧彿闆嗗悎
-     * @param beginTime      寮�濮嬫椂闂�
-     * @param endTime        缁撴潫鏃堕棿
-     * @param retrievalModes 鏌ヨ鏁版嵁鏂瑰紡
-     * @param pointCount     姣忎釜娴嬬偣寰楀埌鐨勬暟鎹釜鏁�
-     * @return 娴嬬偣鍘嗗彶鏁版嵁
-     */
-    List<TagValue> retrieve(List<String> tagCodes, Date beginTime, Date endTime,
-                            RetrievalModes retrievalModes, int pointCount);
-
-    /**
-     * 鑾峰彇娴嬬偣鍦ㄤ竴娈垫椂闂村唴鐨勭粺璁℃暟鎹�.
-     *
-     * @param tagCode         娴嬬偣缂栧彿
-     * @param beginTime       寮�濮嬫椂闂�
-     * @param endTime         缁撴潫鏃堕棿
-     * @param collectionModes 缁熻绫诲瀷
-     * @return 娴嬬偣缁熻缁撴灉
-     */
-    TagValue statistics(String tagCode, Date beginTime, Date endTime,
-                        CollectionModes collectionModes);
-
-    /**
-     * 鑾峰彇娴嬬偣鍦ㄤ竴娈垫椂闂村唴鐨勭粺璁℃暟鎹�.
-     *
-     * @param tagCodes        娴嬬偣缂栧彿闆嗗悎
-     * @param beginTime       寮�濮嬫椂闂�
-     * @param endTime         缁撴潫鏃堕棿
-     * @param collectionModes 缁熻绫诲瀷
-     * @return 娴嬬偣缁熻缁撴灉
-     */
-    List<TagValue> statistics(List<String> tagCodes, Date beginTime, Date endTime,
-                              CollectionModes collectionModes);
-
-    /**
-     * 瀛樺偍娴嬬偣鐨勫疄鏃舵暟鎹�.
-     *
-     * @param tagValues 娴嬬偣瀹炴椂鏁版嵁
-     */
-    void storeData(List<TagValue> tagValues);
-
-    /**
-     * 鎻掑叆娴嬬偣鍘嗗彶鏃跺埢鏁版嵁.
-     *
-     * @param tagValues 娴嬬偣鍘嗗彶鏃跺埢鏁版嵁
-     */
-    void insertData(List<TagValue> tagValues);
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/service/impl/PeriodDataServiceImpl.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/service/impl/PeriodDataServiceImpl.java
deleted file mode 100644
index 94968a3..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/service/impl/PeriodDataServiceImpl.java
+++ /dev/null
@@ -1,614 +0,0 @@
-package com.dingzhuo.energy.dataservice.service.impl;
-
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.service.IEnergyIndexService;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.dataservice.domain.Quality;
-import com.dingzhuo.energy.dataservice.domain.StatisticResult;
-import com.dingzhuo.energy.dataservice.domain.StatisticType;
-import com.dingzhuo.energy.dataservice.mapper.PeriodDataMapper;
-import com.dingzhuo.energy.dataservice.service.PeriodDataService;
-import java.util.stream.Collectors;
-import org.apache.commons.lang.StringUtils;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.joda.time.DateTime;
-import org.joda.time.format.DateTimeFormat;
-import org.joda.time.format.DateTimeFormatter;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-
-/**
- * Created by chongru on 2016-1-22.
- */
-@Service
-public class PeriodDataServiceImpl implements PeriodDataService {
-  private Logger logger = LogManager.getLogger(PeriodDataServiceImpl.class);
-  @Autowired
-  private PeriodDataMapper periodDataMapper;
-
-  @Autowired
-  private IEnergyIndexService energyIndexService;
-
-  @Override
-  public void save(DataItem data) {
-    String item = periodDataMapper.hasExist(data.getIndexId(), data.getTimeCode());
-    if (StringUtils.isEmpty(item)) {
-      periodDataMapper.insert(data);
-    } else {
-      update(data);
-    }
-  }
-
-  @Override
-  public void save(List<DataItem> datas) {
-    List<List<DataItem>> splitDatas = splitList(datas, 100);
-    if (splitDatas != null) {
-      splitDatas.parallelStream().forEach(dataPart -> {
-        try {
-          periodDataMapper.saveDataList(dataPart);
-        } catch (Exception ex) {
-          logger.error("鎵归噺淇濆瓨鏁版嵁澶辫触", ex);
-          dataPart.parallelStream().forEach(dataItem -> {
-            try {
-              periodDataMapper.save(dataItem);
-            } catch (Exception singleEx) {
-              logger.error("鍗曚釜鎸囨爣鏁版嵁淇濆瓨澶辫触锛併��" + dataItem + "銆�", singleEx);
-            }
-          });
-        }
-      });
-    }
-  }
-
-  @Override
-  public void savePeriodData(List<DataItem> dataItems) {
-    Map<String, List<String>> map = dataItems.stream()
-      .collect(Collectors.groupingBy(DataItem::getTimeCode,
-          Collectors.mapping(DataItem::getIndexId, Collectors.toList())));
-    List<String> keys = periodDataMapper.queryDataItemIsExist(map);
-    List<DataItem> insertData = dataItems.stream()
-        .filter(
-            item -> !keys.contains(String.format("%s:%s", item.getTimeCode(), item.getIndexId())))
-        .collect(Collectors.toList());
-    if (!insertData.isEmpty()) {
-      periodDataMapper.insertDataList(insertData);
-    }
-
-    List<DataItem> updateData = dataItems.stream()
-        .filter(
-            item -> keys.contains(String.format("%s:%s", item.getTimeCode(), item.getIndexId())))
-        .collect(Collectors.toList());
-    if (!updateData.isEmpty()) {
-      periodDataMapper.saveDataList(updateData);
-    }
-  }
-
-  @Override
-  public void update(DataItem data) {
-    periodDataMapper.update(data);
-  }
-
-  @Override
-  public DataItem getDataByIndex(String indexId, String timeCode) {
-    if (StringUtils.isEmpty(indexId)) {
-      return null;
-    }
-
-    return periodDataMapper.getDataByIndex(indexId, timeCode);
-  }
-
-  @Override
-  public DataItem getDataByIndex(String indexId, Date dataTime, TimeType timeType) {
-    if (StringUtils.isEmpty(indexId)) {
-      return null;
-    }
-
-    String timeCode = TimeManager.getTimeCode(dataTime, timeType);
-    return getDataByIndex(indexId, timeCode);
-  }
-
-  @Override
-  public List<DataItem> getDatasByIndex(List<String> indexIds, String timeCode) {
-    if (indexIds != null && !indexIds.isEmpty()) {
-      return periodDataMapper.getDatasByIndex(indexIds, timeCode);
-    }
-
-    return Collections.emptyList();
-  }
-
-  @Override
-  public List<DataItem> getDatasByIndex(List<String> indexIds, Date dataTime, TimeType timeType) {
-    if (indexIds != null && !indexIds.isEmpty()) {
-      String timeCode = TimeManager.getTimeCode(dataTime, timeType);
-      return periodDataMapper.getDatasByIndex(indexIds, timeCode);
-    }
-
-    return Collections.emptyList();
-  }
-
-  @Override
-  public List<DataItem> getDatasByIndex(List<String> indexIds, Date beginTime,
-                                        Date endTime, TimeType timeType) {
-    if (indexIds != null && !indexIds.isEmpty()) {
-      return periodDataMapper.getPeriodDatasByIndex(indexIds, beginTime, endTime, timeType);
-    }
-
-    return Collections.emptyList();
-  }
-
-  @Override
-  public List<DataItem> getDatasByIndex(String indexId,
-                                        Date beginTime,
-                                        Date endTime,
-                                        TimeType timeType) {
-    if (StringUtils.isEmpty(indexId)) {
-      return Collections.emptyList();
-    }
-
-    List<String> indexIds = new ArrayList<>();
-    indexIds.add(indexId);
-    return periodDataMapper.getPeriodDatasByIndex(indexIds, beginTime, endTime, timeType);
-  }
-
-  @Override
-  public List<DataItem> getDatasByIndex(List<String> indexIds, Date beginTime, Date endTime,
-                                        TimeType timeType, Quality quality) {
-    if (indexIds != null && !indexIds.isEmpty()) {
-      return periodDataMapper.getPeriodDatasByIndexAndQuality(indexIds,
-          beginTime,
-          endTime,
-          timeType,
-          quality);
-    }
-
-    return Collections.emptyList();
-  }
-
-  @Override
-  public double dataStatisticsByIndex(String indexId,
-                                      StatisticType statisticType,
-                                      TimeType timeType,
-                                      Date beginTime,
-                                      Date endTime) {
-    if (StringUtils.isEmpty(indexId)) {
-      return 0;
-    }
-
-    Double value = periodDataMapper.dataStatisticsByIndex(
-        indexId,
-        statisticType,
-        timeType,
-        beginTime,
-        endTime);
-
-    return value == null ? 0 : value;
-  }
-
-  @Override
-  public List<DataItem> dataStatisticsByIndexs(List<String> indexIds, StatisticType
-      statisticType, TimeType timeType, Date beginTime, Date endTime) {
-    if (indexIds == null || indexIds.isEmpty()) {
-      return Collections.emptyList();
-    }
-
-    return periodDataMapper.dataStatisticsByIndexs(
-        indexIds,
-        statisticType,
-        timeType,
-        beginTime,
-        endTime);
-  }
-
-  @Override
-  public double dataStatisticsByCode(String indexCode, StatisticType
-      statisticType, TimeType timeType, Date beginTime, Date endTime) {
-    if (StringUtils.isEmpty(indexCode)) {
-      return 0;
-    }
-
-    List<String> indexCodes = Collections.singletonList(indexCode);
-    List<DataItem> dataItems = dataStatisticsByCodes(
-        indexCodes,
-        statisticType,
-        timeType,
-        beginTime,
-        endTime);
-    if (!dataItems.isEmpty()) {
-      return dataItems.get(0).getValue();
-    }
-
-    return 0;
-  }
-
-  @Override
-  public List<DataItem> dataStatisticsByCodes(List<String> indexCodes,
-                                              StatisticType statisticType, TimeType timeType,
-                                              Date beginTime, Date endTime) {
-    if (indexCodes == null || indexCodes.isEmpty()) {
-      return Collections.emptyList();
-    }
-
-    return periodDataMapper.dataStatisticsByCodes(
-        indexCodes,
-        statisticType,
-        timeType,
-        beginTime,
-        endTime);
-  }
-
-  @Override
-  public List<DataItem> dataStatisticsByCodes(List<String> indexCodes,
-                                              StatisticType statisticType,
-                                              TimeType timeType,
-                                              Date beginTime, Date endTime,
-                                              boolean isFilter) {
-    if (indexCodes == null || indexCodes.isEmpty()) {
-      return Collections.emptyList();
-    }
-
-    return periodDataMapper.dataStatisticsFilterByCodes(
-        indexCodes,
-        statisticType,
-        timeType,
-        beginTime,
-        endTime,
-        isFilter);
-  }
-
-  @Override
-  public StatisticResult statisticById(String indexId, TimeType timeType, Date dataTime) {
-    if (StringUtils.isEmpty(indexId)) {
-      return null;
-    }
-
-    List<String> indexIds = Collections.singletonList(indexId);
-    List<StatisticResult> results = statisticById(indexIds, timeType, dataTime);
-    if (!results.isEmpty()) {
-      return results.get(0);
-    }
-
-    return new StatisticResult();
-  }
-
-  @Override
-  public List<StatisticResult> statisticById(List<String> indexIds, TimeType timeType, Date dataTime) {
-    if (indexIds == null || indexIds.isEmpty()) {
-      return Collections.emptyList();
-    }
-
-    String timeCode = TimeManager.getTimeCode(dataTime, timeType);
-    return statisticById(indexIds, timeType,
-        TimeManager.getBeginTime(timeCode), TimeManager.getEndTime(timeCode));
-  }
-
-  @Override
-  public List<StatisticResult> statisticById(String indexId, TimeType timeType,
-                                         Date beginTime, Date endTime) {
-    if (StringUtils.isEmpty(indexId)) {
-      return Collections.emptyList();
-    }
-
-    List<String> indexIds = Collections.singletonList(indexId);
-    return statisticById(indexIds, timeType, beginTime, endTime);
-  }
-
-  @Override
-  public List<StatisticResult> statisticById(List<String> indexIds, TimeType timeType,
-                                         Date beginTime, Date endTime) {
-    if (indexIds == null || indexIds.isEmpty()) {
-      return Collections.emptyList();
-    }
-
-    ReBuildTime reBuildTime = new ReBuildTime(timeType, beginTime, endTime).invoke();
-    DateTime begin = reBuildTime.getBegin();
-    DateTime end = reBuildTime.getEnd();
-
-    DateTime lastYearOfBeginTime = begin.plusYears(-1);
-    DateTime lastYearOfEndTime = end.plusYears(-1);
-    DateTime previousOfBeginTime = getTime(begin, timeType, -1, STATISTIC_QUERY_TYPE);
-    DateTime previousOfEndTime = getTime(end, timeType, -1, STATISTIC_QUERY_TYPE);
-
-    List<EnergyIndex> aggregateIndexList = energyIndexService.getEnergyIndexByIds(indexIds);
-    List<DataItem> currentValues = periodDataMapper.statistic(indexIds,
-        timeType,
-        begin.toDate(),
-        end.toDate());
-    List<DataItem> previousValues = periodDataMapper.statistic(indexIds,
-        timeType,
-        previousOfBeginTime.toDate(),
-        previousOfEndTime.toDate());
-    List<DataItem> lastYearValues = periodDataMapper.statistic(indexIds,
-        timeType,
-        lastYearOfBeginTime.toDate(),
-        lastYearOfEndTime.toDate());
-
-    List<StatisticResult> statisticResults =
-        periodDataMapper.getStatisticDatasById(indexIds, timeType);
-
-    return buildNewDatas(aggregateIndexList, timeType, currentValues, previousValues,
-        lastYearValues, statisticResults, begin, end, STATISTIC_QUERY_TYPE);
-  }
-
-  /**
-   * 缁熻涓�娈垫椂闂村懆鏈熷唴鎸囨爣姣忎釜鏁版嵁鏃堕棿鐨勬湰鏈熷�笺�佷笂鏈熷��
-   * 杩欓噷鏄笂鏈熸暟鍊肩暐鏈変笉鍚岋紝灏忔椂鐨勬槸鏄ㄥぉ鐨勶紝鏃ユ暟鎹槸涓婁釜鏈堢殑锛屾湀鏄幓骞寸殑
-   *
-   * @param indexIds  鎸囨爣涓婚敭
-   * @param timeType  鏃堕棿鍛ㄦ湡绫诲瀷
-   * @param beginTime 寮�濮嬫椂闂�
-   * @param endTime   缁撴潫鏃堕棿
-   * @return 缁熻缁撴灉
-   */
-  @Override
-  public List<StatisticResult> statisticOtherCycle(List<String> indexIds, TimeType timeType, Date beginTime, Date endTime) {
-    if (indexIds == null || indexIds.isEmpty()) {
-      return Collections.emptyList();
-    }
-    String type = "other";
-    ReBuildTime reBuildTime = new ReBuildTime(timeType, beginTime, endTime).invoke();
-    DateTime begin = reBuildTime.getBegin();
-    DateTime end = reBuildTime.getEnd();
-    DateTime previousOfBeginTime = getTime(begin, timeType, -1, type);
-    DateTime previousOfEndTime = getTime(end, timeType, -1, type);
-    List<EnergyIndex> aggregateIndexList = energyIndexService.getEnergyIndexByIds(indexIds);
-    List<DataItem> currentValues = periodDataMapper.statistic(indexIds,
-        timeType,
-        begin.toDate(),
-        end.toDate());
-    List<DataItem> previousValues = periodDataMapper.statistic(indexIds,
-        timeType,
-        previousOfBeginTime.toDate(),
-        previousOfEndTime.toDate());
-    return buildNewDatas(aggregateIndexList, timeType, currentValues, previousValues,
-        new ArrayList<>(), null, begin, end, type);
-  }
-
-  @Override
-  public StatisticResult statisticByCode(String indexCode,
-                                   TimeType timeType, Date dataTime) {
-    if (StringUtils.isEmpty(indexCode)) {
-      return null;
-    }
-
-    List<String> indexCodes = Collections.singletonList(indexCode);
-    List<StatisticResult> results = statisticByCode(indexCodes, timeType, dataTime);
-    if (!results.isEmpty()) {
-      return results.get(0);
-    }
-
-    return new StatisticResult();
-  }
-
-  @Override
-  public List<StatisticResult> statisticByCode(List<String> indexCodes,
-                                               TimeType timeType, Date dataTime) {
-    if (indexCodes == null || indexCodes.isEmpty()
-    ) {
-      return Collections.emptyList();
-    }
-
-    String timeCode = TimeManager.getTimeCode(dataTime, timeType);
-    return statisticByCode(indexCodes, timeType,
-        TimeManager.getBeginTime(timeCode), TimeManager.getEndTime(timeCode));
-  }
-
-  @Override
-  public List<StatisticResult> statisticByCode(String indexCode, TimeType timeType,
-                                         Date beginTime, Date endTime) {
-    if (StringUtils.isEmpty(indexCode)) {
-      return Collections.emptyList();
-    }
-
-    List<String> indexCodes = Collections.singletonList(indexCode);
-    return statisticByCode(indexCodes, timeType, beginTime, endTime);
-  }
-
-  private final static String STATISTIC_QUERY_TYPE = "normal";
-
-  @Override
-  public List<StatisticResult> statisticByCode(List<String> indexCodes,
-                                         TimeType timeType, Date beginTime, Date endTime) {
-    if (indexCodes == null || indexCodes.isEmpty()) {
-      return Collections.emptyList();
-    }
-
-    ReBuildTime reBuildTime = new ReBuildTime(timeType, beginTime, endTime).invoke();
-    DateTime begin = reBuildTime.getBegin();
-    DateTime end = reBuildTime.getEnd();
-
-    List<EnergyIndex> aggregateIndexList =
-        energyIndexService.getEnergyIndexByCodes(indexCodes);
-    DateTime lastYearOfBeginTime = begin.plusYears(-1);
-    DateTime lastYearOfEndTime = end.plusYears(-1);
-    DateTime previousOfBeginTime = getTime(begin, timeType, -1, STATISTIC_QUERY_TYPE);
-    DateTime previousOfEndTime = getTime(end, timeType, -1, STATISTIC_QUERY_TYPE);
-
-    List<DataItem> currentValues = periodDataMapper.statisticByCode(
-        indexCodes,
-        timeType,
-        begin.toDate(),
-        end.toDate());
-    List<DataItem> previousValues = periodDataMapper.statisticByCode(
-        indexCodes,
-        timeType,
-        previousOfBeginTime.toDate(),
-        previousOfEndTime.toDate());
-    List<DataItem> lastYearValues = periodDataMapper.statisticByCode(
-        indexCodes,
-        timeType,
-        lastYearOfBeginTime.toDate(),
-        lastYearOfEndTime.toDate());
-
-    List<StatisticResult> statisticResults =
-        periodDataMapper.getStatisticDatasByCode(indexCodes, timeType);
-
-    return buildNewDatas(aggregateIndexList,
-        timeType,
-        currentValues,
-        previousValues,
-        lastYearValues,
-        statisticResults, begin, end, STATISTIC_QUERY_TYPE);
-  }
-
-  @Override
-  public DataItem getDataByIndexCode(String indexCode, String timeCode) {
-    return periodDataMapper.getDataByIndexCode(indexCode, timeCode);
-  }
-
-  private DataItem findValue(List<DataItem> items, String indexId, DateTime dataTime) {
-    Optional<DataItem> value = items.stream()
-        .filter(f -> StringUtils.equalsIgnoreCase(f.getIndexId(), indexId)
-            && dataTime.equals(new DateTime(f.getDataTime())))
-        .findAny();
-    return value.orElseGet(DataItem::new);
-
-  }
-
-  private DateTime getTime(DateTime time, TimeType timeType, int offset, String type) {
-    if (STATISTIC_QUERY_TYPE.equalsIgnoreCase(type)) {
-      if (timeType == TimeType.HOUR) {
-        return time.plusHours(offset);
-      } else if (timeType == TimeType.DAY) {
-        return time.plusDays(offset);
-      } else if (timeType == TimeType.MONTH) {
-        return time.plusMonths(offset);
-      } else if (timeType == TimeType.YEAR) {
-        return time.plusYears(offset);
-      }
-      return time;
-    } else {
-      switch (timeType) {
-        case HOUR:
-          return time.plusDays(offset);
-        case DAY:
-          return time.plusMonths(offset);
-        case MONTH:
-        case YEAR:
-          return time.plusYears(offset);
-        default:
-          return time;
-      }
-    }
-  }
-
-
-  private List<StatisticResult> buildNewDatas(List<EnergyIndex> indexList, TimeType timeType,
-                                              List<DataItem> currentValues,
-                                              List<DataItem> previousValues,
-                                              List<DataItem> lastYearValues,
-                                              List<StatisticResult> statisticResults,
-                                              DateTime beginTime,
-                                              DateTime endTime, String type) {
-    List<StatisticResult> results = new ArrayList<>();
-    indexList.forEach(index -> {
-      DateTime tmpTime = beginTime;
-      String indexId = index.getIndexId();
-      Optional<StatisticResult> statisticResult;
-      if (statisticResults == null) {
-        statisticResult = Optional.empty();
-      } else {
-        statisticResult = statisticResults.stream()
-            .filter(f -> StringUtils.equalsIgnoreCase(f.getIndexId(), indexId))
-            .findFirst();
-      }
-
-      while (tmpTime.isBefore(endTime)) {
-        StatisticResult result = new StatisticResult();
-        result.setIndexId(indexId);
-        result.setIndexCode(index.getCode());
-        result.setIndexName(index.getName());
-        result.setUnitId(index.getUnitId());
-
-        if (statisticResult.isPresent()) {
-          result.setMaxValue(statisticResult.get().getMaxValue());
-          result.setMinValue(statisticResult.get().getMinValue());
-          result.setAvgValue(statisticResult.get().getAvgValue());
-        }
-
-        result.setDataTime(tmpTime.toDate());
-        DataItem currentValue = findValue(currentValues, indexId, tmpTime);
-        result.setCurrentValue(currentValue.getValue() == null ? 0 : currentValue.getValue());
-
-        DateTime preTime = getTime(tmpTime, timeType, -1, type);
-        DataItem previousValue = findValue(previousValues, indexId, preTime);
-        result.setPreviousValue(previousValue.getValue() == null ? 0 : previousValue.getValue());
-
-        DateTime lastYearTime = tmpTime.plusYears(-1);
-        DataItem lastYearValue = findValue(lastYearValues, indexId, lastYearTime);
-        result.setLastYearValue(lastYearValue.getValue() == null ? 0 : lastYearValue.getValue());
-        results.add(result);
-        tmpTime = getTime(tmpTime, timeType, 1, STATISTIC_QUERY_TYPE);
-      }
-    });
-
-    return results;
-  }
-
-  public static <E> List<List<E>> splitList(List<E> targetList, Integer splitSize) {
-    if (targetList == null) {
-      return Collections.emptyList();
-    }
-
-    int size = targetList.size();
-    List<List<E>> resultList = new ArrayList<>();
-    if (size <= splitSize) {
-      resultList.add(targetList);
-    } else {
-      for (int i = 0; i < size; i += splitSize) {
-        //鐢ㄤ簬闄愬埗鏈�鍚庝竴閮ㄥ垎size灏忎簬splitSize鐨刲ist
-        int limit = i + splitSize;
-        if (limit > size) {
-          limit = size;
-        }
-        resultList.add(targetList.subList(i, limit));
-      }
-    }
-    return resultList;
-  }
-
-  private static class ReBuildTime {
-    private TimeType timeType;
-    private Date beginTime;
-    private Date endTime;
-    private DateTime begin;
-    private DateTime end;
-
-    public ReBuildTime(TimeType timeType, Date beginTime, Date endTime) {
-      this.timeType = timeType;
-      this.beginTime = beginTime;
-      this.endTime = endTime;
-    }
-
-    public DateTime getBegin() {
-      return begin;
-    }
-
-    public DateTime getEnd() {
-      return end;
-    }
-
-    public ReBuildTime invoke() {
-      begin = new DateTime(beginTime);
-      end = new DateTime(endTime);
-      DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:00:00");
-      if (timeType == TimeType.HOUR) {
-        formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:00:00");
-      } else if (timeType == TimeType.DAY) {
-        formatter = DateTimeFormat.forPattern("yyyy-MM-dd");
-      } else if (timeType == TimeType.MONTH) {
-        formatter = DateTimeFormat.forPattern("yyyy-MM-01");
-      } else if (timeType == TimeType.YEAR) {
-        formatter = DateTimeFormat.forPattern("yyyy-01-01");
-      }
-
-      begin = formatter.parseDateTime(begin.toString(formatter));
-      end = formatter.parseDateTime(end.toString(formatter));
-      return this;
-    }
-  }
-}
diff --git a/data-service/src/main/java/com/dingzhuo/energy/dataservice/service/impl/RealtimeDatabaseServiceImpl.java b/data-service/src/main/java/com/dingzhuo/energy/dataservice/service/impl/RealtimeDatabaseServiceImpl.java
deleted file mode 100644
index b0fb578..0000000
--- a/data-service/src/main/java/com/dingzhuo/energy/dataservice/service/impl/RealtimeDatabaseServiceImpl.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.dingzhuo.energy.dataservice.service.impl;
-
-import com.dingzhuo.energy.dataservice.data.RealtimeDatabaseManager;
-import com.dingzhuo.energy.dataservice.domain.CollectionModes;
-import com.dingzhuo.energy.dataservice.domain.RetrievalModes;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import com.dingzhuo.energy.dataservice.service.RealtimeDatabaseService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 瀹炴椂鏁版嵁搴撳彇鏁版湇鍔″疄鐜扮被.
- */
-@Service
-public class RealtimeDatabaseServiceImpl implements RealtimeDatabaseService {
-    @Autowired
-    private RealtimeDatabaseManager realtimeDatabaseManager;
-
-    @Override
-    public TagValue retrieve(String tagCode) {
-        return realtimeDatabaseManager.retrieve(tagCode);
-    }
-
-    @Override
-    public List<TagValue> retrieve(List<String> tagCodes) {
-        return realtimeDatabaseManager.retrieve(tagCodes);
-    }
-
-    @Override
-    public TagValue retrieve(String tagCode, Date dataTime, String timeCode) {
-        return realtimeDatabaseManager.retrieve(tagCode, dataTime, timeCode);
-    }
-
-    @Override
-    public List<TagValue> retrieve(List<String> tagCodes, Date dataTime, String timeCode) {
-        return realtimeDatabaseManager.retrieve(tagCodes, dataTime, timeCode);
-    }
-
-    @Override
-    public List<TagValue> retrieve(String tagCode, Date beginTime, Date endTime,
-                                   RetrievalModes retrievalModes, int pointCount) {
-        return realtimeDatabaseManager.retrieve(tagCode, beginTime, endTime, retrievalModes, pointCount);
-    }
-
-    @Override
-    public List<TagValue> retrieve(List<String> tagCodes, Date beginTime, Date endTime,
-                                   RetrievalModes retrievalModes, int pointCount) {
-        return realtimeDatabaseManager.retrieve(tagCodes, beginTime, endTime, retrievalModes, pointCount);
-    }
-
-    @Override
-    public TagValue statistics(String tagCode, Date beginTime, Date endTime,
-                               CollectionModes collectionModes) {
-        return realtimeDatabaseManager.statistics(tagCode, beginTime, endTime, collectionModes);
-    }
-
-    @Override
-    public List<TagValue> statistics(List<String> tagCodes, Date beginTime, Date endTime,
-                                     CollectionModes collectionModes) {
-        return realtimeDatabaseManager.statistics(tagCodes, beginTime, endTime, collectionModes);
-    }
-
-    @Override
-    public void storeData(List<TagValue> tagValues) {
-        realtimeDatabaseManager.storeData(tagValues);
-    }
-
-    @Override
-    public void insertData(List<TagValue> tagValues) {
-        realtimeDatabaseManager.insertData(tagValues);
-    }
-
-}
diff --git a/data-service/src/main/resources/mybatis/dataService/PeriodDataMapper.xml b/data-service/src/main/resources/mybatis/dataService/PeriodDataMapper.xml
deleted file mode 100644
index a7e2782..0000000
--- a/data-service/src/main/resources/mybatis/dataService/PeriodDataMapper.xml
+++ /dev/null
@@ -1,444 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.dataservice.mapper.PeriodDataMapper">
-  <resultMap id="dataItemMap" type="com.dingzhuo.energy.dataservice.domain.DataItem">
-    <id column="index_id" property="indexId"/>
-    <id column="time_code" property="timeCode"/>
-    <id column="index_code" property="indexCode"/>
-    <id column="index_name" property="indexName"/>
-    <result column="begin_time" property="beginTime"/>
-    <result column="end_time" property="endTime"/>
-    <result column="data_time" property="dataTime"/>
-    <result column="value" property="value"/>
-    <result column="time_type" property="timeType"/>
-    <result column="quality" property="quality"/>
-    <result column="unit_id" property="unitId"/>
-    <result column="create_time" property="createTime"/>
-    <result column="update_time" property="updateTime"/>
-    <result column="remark" property="remark"/>
-  </resultMap>
-
-  <resultMap id="statisticResultMap" type="com.dingzhuo.energy.dataservice.domain.StatisticResult">
-    <id column="index_id" property="indexId"/>
-    <id column="index_code" property="indexCode"/>
-    <id column="index_name" property="indexName"/>
-    <result column="unit_id" property="unitId"/>
-    <result column="maxvalue" property="maxValue"/>
-    <result column="minvalue" property="minValue"/>
-    <result column="avgvalue" property="avgValue"/>
-  </resultMap>
-  <delete id="delete">
-    DELETE
-    FROM data_item
-    WHERE index_id = #{indexId}
-      AND time_type = #{timeType}
-      AND data_time &gt;= #{beginTime}
-      AND data_time &lt;= #{endTime}
-  </delete>
-
-  <sql id="itemHead">
-    SELECT di.index_id,
-           di.time_code,
-           di.time_type,
-           di.begin_time,
-           di.end_time,
-           di.data_time,
-           di.value,
-           di.quality,
-           di.create_time,
-           di.update_time,
-           ci.code AS "index_code",
-           ci.name AS "index_name"
-    FROM data_item di
-           LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-  </sql>
-
-  <select id="getDataByIndex" resultMap="dataItemMap">
-    <include refid="itemHead"/>
-    WHERE di.index_id = #{indexId}
-    AND di.time_code = #{timeCode}
-  </select>
-  <select id="hasExist" resultType="java.lang.String">
-    SELECT index_id
-    FROM data_item
-    WHERE index_id = #{indexId}
-      AND time_code = #{timeCode}
-  </select>
-  <select id="getDatasByIndex" resultMap="dataItemMap">
-    <include refid="itemHead"/>
-    where di.time_code = #{timeCode}
-    AND di.index_id in
-    <foreach item="indexId" index="index" collection="indexIds"
-      open="(" separator="," close=")">
-      #{indexId}
-    </foreach>
-  </select>
-  <select id="getPeriodDatasByIndex" resultMap="dataItemMap">
-    <include refid="itemHead"/>
-    WHERE di.index_id in
-    <foreach item="indexId" index="index" collection="indexIds"
-      open="(" separator="," close=")">
-      #{indexId}
-    </foreach>
-    AND di.time_type = #{timeType}
-    AND di.data_time &gt;= #{beginTime}
-    AND di.data_time &lt; #{endTime}
-  </select>
-  <select id="dataStatisticsByIndex" resultType="java.lang.Double">
-    SELECT
-    <if test="statisticType.name() == 'Sum'">
-      sum(value)
-    </if>
-    <if test="statisticType.name() == 'Max'">
-      max(value)
-    </if>
-    <if test="statisticType.name() == 'Min'">
-      min(value)
-    </if>
-    <if test="statisticType.name() == 'Average'">
-      avg(value)
-    </if>
-    FROM data_item
-    WHERE index_id = #{indexId}
-    AND time_type = #{timeType}
-    AND data_time &gt;= #{beginTime}
-    AND data_time &lt; #{endTime}
-  </select>
-
-  <select id="dataStatisticsByIndexs" resultMap="dataItemMap">
-    SELECT
-    <if test="statisticType.name() == 'Sum'">
-      sum(value)
-    </if>
-    <if test="statisticType.name() == 'Max'">
-      max(value)
-    </if>
-    <if test="statisticType.name() == 'Min'">
-      min(value)
-    </if>
-    <if test="statisticType.name() == 'Average'">
-      avg(value)
-    </if>
-    AS value,
-    i.code as index_code,
-    i.name as index_name,
-    i.unit_id,
-    d.index_id
-    FROM data_item d
-    LEFT JOIN energy_index i ON d.index_id = i.index_id
-    WHERE d.index_id in
-    <foreach item="indexId" index="index" collection="indexIds"
-      open="(" separator="," close=")">
-      #{indexId}
-    </foreach>
-    AND time_type = #{timeType}
-    AND data_time &gt;= #{beginTime}
-    AND data_time &lt; #{endTime}
-    GROUP BY d.index_id, i.code, i.unit_id, i.name
-  </select>
-
-  <select id="dataStatisticsByCodes" resultMap="dataItemMap">
-    SELECT
-    <if test="statisticType.name() == 'Sum'">
-      sum(value)
-    </if>
-    <if test="statisticType.name() == 'Max'">
-      max(value)
-    </if>
-    <if test="statisticType.name() == 'Min'">
-      min(value)
-    </if>
-    <if test="statisticType.name() == 'Average'">
-      avg(value)
-    </if>
-    AS value,
-    i.code as index_code,
-    i.name as index_name,
-    i.unit_id,
-    d.index_id
-    FROM data_item d
-    LEFT JOIN energy_index i ON d.index_id = i.index_id
-    WHERE
-    i.code IN
-    <foreach item="indexCode" index="index" collection="indexCodes"
-      open="(" separator="," close=")">
-      #{indexCode}
-    </foreach>
-    AND time_type = #{timeType}
-    AND data_time &gt;= #{beginTime}
-    AND data_time &lt; #{endTime}
-    GROUP BY d.index_id, i.code, i.unit_id, i.name
-  </select>
-
-  <select id="dataStatisticsFilterByCodes" resultMap="dataItemMap">
-    SELECT
-    <if test="statisticType.name() == 'Sum'">
-      sum(value)
-    </if>
-    <if test="statisticType.name() == 'Max'">
-      max(value)
-    </if>
-    <if test="statisticType.name() == 'Min'">
-      min(value)
-    </if>
-    <if test="statisticType.name() == 'Average'">
-      avg(value)
-    </if>
-    AS value,
-    i.code as index_code,
-    i.name as index_name,
-    i.unit_id,
-    d.index_id
-    FROM data_item d
-    LEFT JOIN energy_index i ON d.index_id = i.index_id
-    WHERE
-    i.code IN
-    <foreach item="indexCode" index="index" collection="indexCodes"
-      open="(" separator="," close=")">
-      #{indexCode}
-    </foreach>
-    AND time_type = #{timeType}
-    AND data_time &gt;= #{beginTime}
-    AND data_time &lt; #{endTime}
-    <if test="isFilter == true">
-      AND value > 0
-    </if>
-    GROUP BY d.index_id, i.code, i.unit_id, i.name
-  </select>
-
-  <select id="statistic" resultMap="dataItemMap">
-    SELECT
-    d.index_id,
-    time_code,
-    data_time,
-    i.code as index_code,
-    i.name as index_name,
-    i.unit_id,
-    VALUE
-    FROM
-    data_item d
-    LEFT JOIN energy_index i ON d.index_id = i.index_id
-    WHERE
-    d.index_id in
-    <foreach item="indexId" index="index" collection="indexIds"
-      open="(" separator="," close=")">
-      #{indexId}
-    </foreach>
-    AND data_time &gt;= #{beginTime}
-    AND data_time &lt; #{endTime}
-    AND time_type = #{timeType}
-    GROUP BY
-    d.index_id, time_code, data_time, value, i.code, i.unit_id, i.name
-  </select>
-
-  <select id="statisticByCode" resultMap="dataItemMap">
-    SELECT
-    d.index_id,
-    time_code,
-    data_time,
-    i.code as index_code,
-    i.name as index_name,
-    i.unit_id,
-    value
-    FROM
-    data_item d
-    LEFT JOIN energy_index i ON d.index_id = i.index_id
-    WHERE
-    i.code IN
-    <foreach item="indexCode" index="index" collection="indexCodes"
-      open="(" separator="," close=")">
-      #{indexCode}
-    </foreach>
-    AND data_time &gt;= #{beginTime}
-    AND data_time &lt;= #{endTime}
-    AND time_type = #{timeType}
-    GROUP BY
-    d.index_id, time_code, data_time, value, i.code, i.unit_id, i.name
-  </select>
-
-  <select id="getStatisticDatasById" resultMap="statisticResultMap">
-    SELECT
-    d.index_id,
-    i.code as index_code,
-    i.unit_id,
-    i.name as index_name,
-    MAX(value) as "maxvalue",
-    min(value) as minvalue,
-    avg(value) as avgvalue
-    FROM
-    data_item d
-    LEFT JOIN energy_index i ON d.index_id = i.index_id
-    WHERE
-    d.index_id in
-    <foreach item="indexId" index="index" collection="indexIds"
-      open="(" separator="," close=")">
-      #{indexId}
-    </foreach>
-    AND time_type = #{timeType}
-    GROUP BY
-    d.index_id, i.code, i.unit_id, i.name
-  </select>
-
-  <select id="getStatisticDatasByCode" resultMap="statisticResultMap">
-    SELECT
-    d.index_id,
-    i.code as index_code,
-    i.name as index_name,
-    i.unit_id,
-    MAX(value) as "maxvalue",
-    min(value) as minvalue,
-    avg(value) as avgvalue
-    FROM
-    data_item d
-    LEFT JOIN energy_index i ON d.index_id = i.index_id
-    WHERE
-    i.code IN
-    <foreach item="indexCode" index="index" collection="indexCodes"
-      open="(" separator="," close=")">
-      #{indexCode}
-    </foreach>
-    AND time_type = #{timeType}
-    GROUP BY
-    d.index_id, i.code, i.unit_id, i.name
-  </select>
-
-  <insert id="insert">
-    INSERT INTO data_item (index_id,
-                           time_code,
-                           time_type,
-                           begin_time,
-                           end_time,
-                           data_time,
-                           value,
-                           quality,
-                           create_time)
-    VALUES (#{dataItem.indexId},
-            #{dataItem.timeCode},
-            #{dataItem.timeType},
-            #{dataItem.beginTime},
-            #{dataItem.endTime},
-            #{dataItem.dataTime},
-            #{dataItem.value, jdbcType = DOUBLE},
-            #{dataItem.quality},
-            now())
-  </insert>
-
-  <insert id="save">
-    insert into data_item (index_id,
-                           time_code,
-                           time_type,
-                           begin_time,
-                           end_time,
-                           data_time,
-                           value,
-                           quality,
-                           create_time)
-    select #{dataItem.indexId},
-           #{dataItem.timeCode},
-           #{dataItem.timeType},
-           #{dataItem.beginTime},
-           #{dataItem.endTime},
-           #{dataItem.dataTime},
-           #{dataItem.value, jdbcType = DOUBLE},
-           #{dataItem.quality},
-           now()
-    on conflict
-      (index_id,time_code)
-    do update
-    set value = #{dataItem.value, jdbcType = DOUBLE},
-      quality = #{dataItem.quality},
-      update_time = now();
-
-  </insert>
-  <insert id="saveDataList" parameterType="java.util.List">
-    <foreach item="dataItem" collection="dataItemVlues">
-      <if test="dataItem != null">
-        insert into data_item (index_id,
-        time_code,
-        time_type,
-        begin_time,
-        end_time,
-        data_time,
-        value,
-        quality,
-        create_time)
-        select #{dataItem.indexId},
-        #{dataItem.timeCode},
-        #{dataItem.timeType},
-        #{dataItem.beginTime},
-        #{dataItem.endTime},
-        #{dataItem.dataTime},
-        #{dataItem.value, jdbcType = DOUBLE},
-        #{dataItem.quality},
-        now()
-        on conflict(index_id,time_code)
-        do update
-        set value= #{dataItem.value, jdbcType = DOUBLE},
-        quality = #{dataItem.quality},
-        update_time = now();
-      </if>
-    </foreach>
-  </insert>
-  <insert id="insertDataList">
-    insert into data_item (index_id, time_code,
-    time_type,
-    begin_time,
-    end_time,
-    data_time,
-    value,
-    quality,
-    create_time)
-    values
-    <foreach collection="list" item="dataItem" index="index" separator=",">
-      (#{dataItem.indexId},
-        #{dataItem.timeCode},
-        #{dataItem.timeType},
-        #{dataItem.beginTime},
-        #{dataItem.endTime},
-        #{dataItem.dataTime},
-        #{dataItem.value, jdbcType = DOUBLE},
-        #{dataItem.quality},
-        now())
-    </foreach>
-  </insert>
-
-  <update id="update">
-    UPDATE data_item
-    SET value       = #{dataItem.value, jdbcType = DOUBLE},
-        quality     = #{dataItem.quality},
-        update_time = now()
-    WHERE index_id = #{dataItem.indexId}
-      AND time_code = #{dataItem.timeCode}
-  </update>
-  <select id="getPeriodDatasByIndexAndQuality" resultMap="dataItemMap">
-    SELECT index_id, time_code, time_type, begin_time, end_time, data_time, `value`, quality,
-    create_time, update_time
-    FROM data_item
-    WHERE index_id in
-    <foreach item="indexId" index="index" collection="indexIds"
-      open="(" separator="," close=")">
-      #{indexId}
-    </foreach>
-    AND time_type = #{timeType}
-    AND data_time &gt;= #{beginTime}
-    AND data_time &lt; #{endTime}
-    AND quality = #{quality}
-  </select>
-  <select id="getDataByIndexCode" resultMap="dataItemMap">
-    <include refid="itemHead"/>
-    WHERE ci.code = #{indexCode}
-    AND di.time_code = #{timeCode}
-  </select>
-  <select id="queryDataItemIsExist" resultType="java.lang.String">
-    select concat(time_code, ':', index_id)
-    from data_item where
-    <foreach collection="queryMap.keys" index="index" item="key" separator="or">
-      (time_code = #{key} and index_id in
-      <foreach collection="queryMap[key]" item="id" separator="," open="(" close=")">
-        #{id}
-      </foreach>
-      )
-    </foreach>
-  </select>
-</mapper>
diff --git a/db/2022-03-17.sql b/db/2022-03-17.sql
deleted file mode 100644
index c517891..0000000
--- a/db/2022-03-17.sql
+++ /dev/null
@@ -1,7 +0,0 @@
---璁惧绠$悊澧炲姞閲嶇偣鑳借�楄澶囨爣璇�
-ALTER TABLE "public"."facility_archives"
-  ADD COLUMN "point_flag" varchar(2);
-
-COMMENT ON COLUMN "public"."facility_archives"."point_flag" IS '閲嶇偣鑳借�楄澶囨爣璇哬鏄疦鍚�';
-
---瑕佺敤绯荤粺瀛楀吀琛� pointFlage
diff --git a/db/2022-04-15.sql b/db/2022-04-15.sql
deleted file mode 100644
index 1f4a7dc..0000000
--- a/db/2022-04-15.sql
+++ /dev/null
@@ -1,57 +0,0 @@
---缃戝叧閰嶇疆淇℃伅琛�
-CREATE TABLE "gateway_setting" (
-  "id" varchar(36) NOT NULL,
-  "gateway_num" varchar(20),
-  "plant_area" varchar(50),
-  "address" varchar(255),
-  "create_by" varchar(64) COLLATE "pg_catalog"."default",
-  "create_time" timestamp(6),
-  "update_by" varchar(64) COLLATE "pg_catalog"."default",
-  "update_time" timestamp(6),
-  PRIMARY KEY ("id")
-)
-;
-
-COMMENT ON COLUMN "gateway_setting"."id" IS 'UUID涓婚敭';
-
-COMMENT ON COLUMN "gateway_setting"."gateway_num" IS '缃戝叧缂栧彿';
-
-COMMENT ON COLUMN "gateway_setting"."plant_area" IS '鍘傚尯';
-
-COMMENT ON COLUMN "gateway_setting"."address" IS '鍦板潃';
-
-COMMENT ON COLUMN "gateway_setting"."create_by" IS '鍒涘缓鑰�';
-
-COMMENT ON COLUMN "gateway_setting"."create_time" IS '鍒涘缓鏃堕棿';
-
-COMMENT ON COLUMN "gateway_setting"."update_by" IS '鏇存柊鑰�';
-
-COMMENT ON COLUMN "gateway_setting"."update_time" IS '鏇存柊鏃堕棿';
-
-COMMENT ON TABLE "gateway_setting" IS '缃戝叧閰嶇疆淇℃伅琛�';
-
-ALTER TABLE "gateway_setting"
-  ADD COLUMN "hbt_time" date;
-
-COMMENT ON COLUMN "gateway_setting"."hbt_time" IS '蹇冭烦鏃堕棿';
-
---蹇冭烦鍖呮棩蹇楄〃 gateway_hbt_log
-CREATE TABLE gateway_hbt_log (
-  "id" varchar(36) NOT NULL,
-  "gateway_no" varchar(20),
-  "hbt_time" date,
-  "content" varchar(500),
-  PRIMARY KEY ("id")
-);
-
-COMMENT ON COLUMN gateway_hbt_log."id" IS '涓婚敭';
-
-COMMENT ON COLUMN gateway_hbt_log."gateway_no" IS '缃戝叧缂栧彿';
-
-COMMENT ON COLUMN gateway_hbt_log."hbt_time" IS '蹇冭烦鏃堕棿';
-
-COMMENT ON COLUMN gateway_hbt_log."content" IS '蹇冭烦鍖�';
-
-COMMENT ON TABLE gateway_hbt_log IS '缃戝叧蹇冭烦鏃ュ織琛�';
-
-
diff --git a/energy_management_server/.gitignore b/energy_management_server/.gitignore
deleted file mode 100644
index fd446f4..0000000
--- a/energy_management_server/.gitignore
+++ /dev/null
@@ -1,43 +0,0 @@
-######################################################################
-# Build Tools
-
-.gradle
-/build/
-!gradle/wrapper/gradle-wrapper.jar
-
-target/
-!.mvn/wrapper/maven-wrapper.jar
-
-######################################################################
-# IDE
-
-### STS ###
-.apt_generated
-.classpath
-.factorypath
-.project
-.settings
-.springBeans
-
-### IntelliJ IDEA ###
-.idea
-*.iws
-*.iml
-*.ipr
-
-### NetBeans ###
-nbproject/private/
-build/*
-nbbuild/
-dist/
-nbdist/
-.nb-gradle/
-
-######################################################################
-# Others
-*.log
-*.xml.versionsBackup
-
-!*/build/*.java
-!*/build/*.html
-!*/build/*.xml
\ No newline at end of file
diff --git a/energy_management_server/pom.xml b/energy_management_server/pom.xml
deleted file mode 100644
index d6aeed8..0000000
--- a/energy_management_server/pom.xml
+++ /dev/null
@@ -1,149 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <artifactId>energy-management</artifactId>
-    <groupId>com.dingzhuo</groupId>
-    <version>1.0.0</version>
-  </parent>
-
-  <artifactId>energy-management-server</artifactId>
-  <packaging>jar</packaging>
-  <description>浼佷笟鑳芥簮绠$悊绯荤粺</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.dingzhuo</groupId>
-      <artifactId>basic</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.dingzhuo</groupId>
-      <artifactId>data-service</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.dingzhuo</groupId>
-      <artifactId>data-monitoring</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.xmlgraphics</groupId>
-      <artifactId>batik-codec</artifactId>
-      <version>1.7</version>
-    </dependency>
-      <dependency>
-          <groupId>org.projectlombok</groupId>
-          <artifactId>lombok</artifactId>
-          <version>RELEASE</version>
-          <scope>compile</scope>
-      </dependency>
-      <dependency>
-          <groupId>cn.hutool</groupId>
-          <artifactId>hutool-core</artifactId>
-          <version>5.3.8</version>
-      </dependency>
-      <dependency>
-          <groupId>org.apache.httpcomponents</groupId>
-          <artifactId>httpclient</artifactId>
-          <version>4.5.13</version>
-      </dependency>
-      <dependency>
-        <groupId>org.springframework.integration</groupId>
-        <artifactId>spring-integration-mqtt</artifactId>
-      </dependency>
-  </dependencies>
-  <build>
-    <finalName>${project.artifactId}</finalName>
-    <plugins>
-<!--      绗笁鏂瑰寘鎵撹繘jar鏂囦欢涓�-->
-      <plugin>
-        <groupId>org.springframework.boot</groupId>
-        <artifactId>spring-boot-maven-plugin</artifactId>
-        <version>2.0.5.RELEASE</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>repackage</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <includeSystemScope>true</includeSystemScope>
-        </configuration>
-      </plugin>
-
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <configuration>
-          <archive>
-            <manifest>
-              <addClasspath>true</addClasspath>
-              <classpathPrefix>lib/</classpathPrefix>
-              <mainClass>com.dingzhuo.energy.EnergyManagementApplication</mainClass>
-              <useUniqueVersions>false</useUniqueVersions>
-            </manifest>
-            <manifestEntries>
-              <Class-Path>lib/fel-0.10.jar</Class-Path>
-            </manifestEntries>
-          </archive>
-          <excludes>
-            <exclude>application-prod.yml</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>copy-lib</id>
-            <phase>package</phase>
-            <goals>
-              <goal>copy-dependencies</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${project.build.directory}/lib</outputDirectory>
-              <excludeTransitive>false</excludeTransitive>
-              <stripVersion>false</stripVersion>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-resources-plugin</artifactId>
-        <version>2.7</version>
-        <configuration>
-          <encoding>UTF-8</encoding>
-        </configuration>
-        <executions>
-          <execution>
-            <id>copy-resources</id>
-            <phase>validate</phase>
-            <goals>
-              <goal>copy-resources</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${basedir}/target/config</outputDirectory>
-              <resources>
-                <resource>
-                  <directory>src/main/resources</directory>
-                  <filtering>true</filtering>
-                  <includes>
-                    <include>application-prod.yml</include>
-                  </includes>
-                </resource>
-              </resources>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-
-    </plugins>
-  </build>
-
-</project>
diff --git a/energy_management_server/ry.sh b/energy_management_server/ry.sh
deleted file mode 100644
index 706036c..0000000
--- a/energy_management_server/ry.sh
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/bin/bash
-
-AppName=ruoyi.jar
-
-#JVM鍙傛暟
-JVM_OPTS="-Dname=$AppName  -Duser.timezone=Asia/Shanghai -Xms512M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps  -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
-APP_HOME=`pwd`
-LOG_PATH=$APP_HOME/logs/$AppName.log
-
-if [ "$1" = "" ];
-then
-    echo -e "\033[0;31m 鏈緭鍏ユ搷浣滃悕 \033[0m  \033[0;34m {start|stop|restart|status} \033[0m"
-    exit 1
-fi
-
-if [ "$AppName" = "" ];
-then
-    echo -e "\033[0;31m 鏈緭鍏ュ簲鐢ㄥ悕 \033[0m"
-    exit 1
-fi
-
-function start()
-{
-    PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
-
-	if [ x"$PID" != x"" ]; then
-	    echo "$AppName is running..."
-	else
-		nohup java -jar  $JVM_OPTS target/$AppName > /dev/null 2>&1 &
-		echo "Start $AppName success..."
-	fi
-}
-
-function stop()
-{
-    echo "Stop $AppName"
-	
-	PID=""
-	query(){
-		PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
-	}
-
-	query
-	if [ x"$PID" != x"" ]; then
-		kill -TERM $PID
-		echo "$AppName (pid:$PID) exiting..."
-		while [ x"$PID" != x"" ]
-		do
-			sleep 1
-			query
-		done
-		echo "$AppName exited."
-	else
-		echo "$AppName already stopped."
-	fi
-}
-
-function restart()
-{
-    stop
-    sleep 2
-    start
-}
-
-function status()
-{
-    PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
-    if [ $PID != 0 ];then
-        echo "$AppName is running..."
-    else
-        echo "$AppName is not running..."
-    fi
-}
-
-case $1 in
-    start)
-    start;;
-    stop)
-    stop;;
-    restart)
-    restart;;
-    status)
-    status;;
-    *)
-
-esac
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/EnergyManagementApplication.java b/energy_management_server/src/main/java/com/dingzhuo/energy/EnergyManagementApplication.java
deleted file mode 100644
index 714f3e8..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/EnergyManagementApplication.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.dingzhuo.energy;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
-
-/**
- * 鍚姩绋嬪簭
- *
- * @author ruoyi
- */
-@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
-public class EnergyManagementApplication {
-  public static void main(String[] args) {
-    SpringApplication.run(EnergyManagementApplication.class, args);
-    System.out.println("骞冲彴鍚姩鎴愬姛 O(鈭鈭�)O~");
-  }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/EnergyManagementServletInitializer.java b/energy_management_server/src/main/java/com/dingzhuo/energy/EnergyManagementServletInitializer.java
deleted file mode 100644
index f6d8f73..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/EnergyManagementServletInitializer.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.dingzhuo.energy;
-
-import org.springframework.boot.builder.SpringApplicationBuilder;
-import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
-
-/**
- * web瀹瑰櫒涓繘琛岄儴缃�
- * 
- * @author ruoyi
- */
-public class EnergyManagementServletInitializer extends SpringBootServletInitializer
-{
-    @Override
-    protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
-    {
-        return application.sources(EnergyManagementApplication.class);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/EnergyBenchmarking/controller/EnergyBenchmarkingController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/EnergyBenchmarking/controller/EnergyBenchmarkingController.java
deleted file mode 100644
index 428941a..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/EnergyBenchmarking/controller/EnergyBenchmarkingController.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.dingzhuo.energy.project.EnergyBenchmarking.controller;
-
-import java.util.List;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.project.EnergyBenchmarking.domain.EnergyBenchmarking;
-import com.dingzhuo.energy.project.EnergyBenchmarking.service.IEnergyBenchmarkingService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * energy_benchmarkingController
- * 
- * @author sys
- * @date 2020-11-18
- */
-@RestController
-@RequestMapping("/energyEenchmarking/energyEenchmarking")
-public class EnergyBenchmarkingController extends BaseController
-{
-    @Autowired
-    private IEnergyBenchmarkingService energyBenchmarkingService;
-
-    /**
-     * 鏌ヨenergy_benchmarking鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('energyEenchmarking:energyEenchmarking:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(EnergyBenchmarking energyBenchmarking)
-    {
-        startPage();
-        List<EnergyBenchmarking> list = energyBenchmarkingService.selectEnergyBenchmarkingList(energyBenchmarking);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭energy_benchmarking鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('energyEenchmarking:energyEenchmarking:export')")
-    @Log(title = "energy_benchmarking", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(EnergyBenchmarking energyBenchmarking)
-    {
-        List<EnergyBenchmarking> list = energyBenchmarkingService.selectEnergyBenchmarkingList(energyBenchmarking);
-        ExcelUtil<EnergyBenchmarking> util = new ExcelUtil<EnergyBenchmarking>(EnergyBenchmarking.class);
-        return util.exportExcel(list, "energyEenchmarking");
-    }
-
-    /**
-     * 鑾峰彇energy_benchmarking璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('energyEenchmarking:energyEenchmarking:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(energyBenchmarkingService.selectEnergyBenchmarkingById(id));
-    }
-
-    /**
-     * 鏂板energy_benchmarking
-     */
-    @PreAuthorize("@ss.hasPermi('energyEenchmarking:energyEenchmarking:add')")
-    @Log(title = "energy_benchmarking", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody EnergyBenchmarking energyBenchmarking)
-    {
-        return toAjax(energyBenchmarkingService.insertEnergyBenchmarking(energyBenchmarking));
-    }
-
-    /**
-     * 淇敼energy_benchmarking
-     */
-    @PreAuthorize("@ss.hasPermi('energyEenchmarking:energyEenchmarking:edit')")
-    @Log(title = "energy_benchmarking", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody EnergyBenchmarking energyBenchmarking)
-    {
-        return toAjax(energyBenchmarkingService.updateEnergyBenchmarking(energyBenchmarking));
-    }
-
-    /**
-     * 鍒犻櫎energy_benchmarking
-     */
-    @PreAuthorize("@ss.hasPermi('energyEenchmarking:energyEenchmarking:remove')")
-    @Log(title = "energy_benchmarking", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(energyBenchmarkingService.deleteEnergyBenchmarkingByIds(ids));
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/EnergyBenchmarking/domain/EnergyBenchmarking.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/EnergyBenchmarking/domain/EnergyBenchmarking.java
deleted file mode 100644
index 3460885..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/EnergyBenchmarking/domain/EnergyBenchmarking.java
+++ /dev/null
@@ -1,146 +0,0 @@
-package com.dingzhuo.energy.project.EnergyBenchmarking.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * energy_benchmarking瀵硅薄 energy_benchmarking
- * 
- * @author sys
- * @date 2020-11-18
- */
-public class EnergyBenchmarking extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** $column.columnComment */
-    private String id;
-
-    /** 鍗曚綅鍚嶇О */
-    @Excel(name = "鍗曚綅鍚嶇О")
-    private String name;
-
-    /** 鎸囨爣鍚嶇О */
-    @Excel(name = "鎸囨爣鍚嶇О")
-    private String codeId;
-
-    /** 鎸囨爣鍗曚綅 */
-    @Excel(name = "鎸囨爣鍗曚綅")
-    private String unit;
-
-    /** 鏍囨潌鑼冨洿 */
-    @Excel(name = "鏍囨潌鑼冨洿")
-    private String range;
-
-    /** 鏍囨潌绫诲瀷 */
-    @Excel(name = "鏍囨潌绫诲瀷")
-    private String type;
-
-    /** 鏍囨潌鍊� */
-    @Excel(name = "鏍囨潌鍊�")
-    private String value;
-    /** 鏍囨潌鍊� */
-    private String modelNode;
-    /** 鏈夋晥鏈� */
-    @Excel(name = "鏈夋晥鏈�", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date termValidity;
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setName(String name) 
-    {
-        this.name = name;
-    }
-
-    public String getName() 
-    {
-        return name;
-    }
-    public void setCodeId(String codeId) 
-    {
-        this.codeId = codeId;
-    }
-
-    public String getCodeId() 
-    {
-        return codeId;
-    }
-    public void setUnit(String unit) 
-    {
-        this.unit = unit;
-    }
-
-    public String getUnit() 
-    {
-        return unit;
-    }
-    public void setRange(String range) 
-    {
-        this.range = range;
-    }
-
-    public String getRange() 
-    {
-        return range;
-    }
-    public void setType(String type) 
-    {
-        this.type = type;
-    }
-
-    public String getType() 
-    {
-        return type;
-    }
-    public void setValue(String value) 
-    {
-        this.value = value;
-    }
-
-    public String getValue() 
-    {
-        return value;
-    }
-    public void setTermValidity(Date termValidity) 
-    {
-        this.termValidity = termValidity;
-    }
-
-    public Date getTermValidity() 
-    {
-        return termValidity;
-    }
-
-    public String getModelNode() {
-        return modelNode;
-    }
-
-    public void setModelNode(String modelNode) {
-        this.modelNode = modelNode;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("name", getName())
-            .append("codeId", getCodeId())
-            .append("unit", getUnit())
-            .append("range", getRange())
-            .append("type", getType())
-            .append("value", getValue())
-            .append("termValidity", getTermValidity())
-            .append("modelNode", getModelNode())
-            .toString();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/EnergyBenchmarking/mapper/EnergyBenchmarkingMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/EnergyBenchmarking/mapper/EnergyBenchmarkingMapper.java
deleted file mode 100644
index d6e42af..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/EnergyBenchmarking/mapper/EnergyBenchmarkingMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.project.EnergyBenchmarking.mapper;
-
-import com.dingzhuo.energy.project.EnergyBenchmarking.domain.EnergyBenchmarking;
-import java.util.List;
-
-/**
- * energy_benchmarkingMapper鎺ュ彛
- * 
- * @author sys
- * @date 2020-11-18
- */
-public interface EnergyBenchmarkingMapper 
-{
-    /**
-     * 鏌ヨenergy_benchmarking
-     * 
-     * @param id energy_benchmarkingID
-     * @return energy_benchmarking
-     */
-    public EnergyBenchmarking selectEnergyBenchmarkingById(String id);
-
-    /**
-     * 鏌ヨenergy_benchmarking鍒楄〃
-     * 
-     * @param energyBenchmarking energy_benchmarking
-     * @return energy_benchmarking闆嗗悎
-     */
-    public List<EnergyBenchmarking> selectEnergyBenchmarkingList(EnergyBenchmarking energyBenchmarking);
-
-    /**
-     * 鏂板energy_benchmarking
-     * 
-     * @param energyBenchmarking energy_benchmarking
-     * @return 缁撴灉
-     */
-    public int insertEnergyBenchmarking(EnergyBenchmarking energyBenchmarking);
-
-    /**
-     * 淇敼energy_benchmarking
-     * 
-     * @param energyBenchmarking energy_benchmarking
-     * @return 缁撴灉
-     */
-    public int updateEnergyBenchmarking(EnergyBenchmarking energyBenchmarking);
-
-    /**
-     * 鍒犻櫎energy_benchmarking
-     * 
-     * @param id energy_benchmarkingID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyBenchmarkingById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎energy_benchmarking
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyBenchmarkingByIds(String[] ids);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/EnergyBenchmarking/service/IEnergyBenchmarkingService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/EnergyBenchmarking/service/IEnergyBenchmarkingService.java
deleted file mode 100644
index 0d560ad..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/EnergyBenchmarking/service/IEnergyBenchmarkingService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.project.EnergyBenchmarking.service;
-
-import com.dingzhuo.energy.project.EnergyBenchmarking.domain.EnergyBenchmarking;
-import java.util.List;
-
-/**
- * energy_benchmarkingService鎺ュ彛
- * 
- * @author sys
- * @date 2020-11-18
- */
-public interface IEnergyBenchmarkingService 
-{
-    /**
-     * 鏌ヨenergy_benchmarking
-     * 
-     * @param id energy_benchmarkingID
-     * @return energy_benchmarking
-     */
-    public EnergyBenchmarking selectEnergyBenchmarkingById(String id);
-
-    /**
-     * 鏌ヨenergy_benchmarking鍒楄〃
-     * 
-     * @param energyBenchmarking energy_benchmarking
-     * @return energy_benchmarking闆嗗悎
-     */
-    public List<EnergyBenchmarking> selectEnergyBenchmarkingList(EnergyBenchmarking energyBenchmarking);
-
-    /**
-     * 鏂板energy_benchmarking
-     * 
-     * @param energyBenchmarking energy_benchmarking
-     * @return 缁撴灉
-     */
-    public int insertEnergyBenchmarking(EnergyBenchmarking energyBenchmarking);
-
-    /**
-     * 淇敼energy_benchmarking
-     * 
-     * @param energyBenchmarking energy_benchmarking
-     * @return 缁撴灉
-     */
-    public int updateEnergyBenchmarking(EnergyBenchmarking energyBenchmarking);
-
-    /**
-     * 鎵归噺鍒犻櫎energy_benchmarking
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑energy_benchmarkingID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyBenchmarkingByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎energy_benchmarking淇℃伅
-     * 
-     * @param id energy_benchmarkingID
-     * @return 缁撴灉
-     */
-    public int deleteEnergyBenchmarkingById(String id);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/EnergyBenchmarking/service/impl/EnergyBenchmarkingServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/EnergyBenchmarking/service/impl/EnergyBenchmarkingServiceImpl.java
deleted file mode 100644
index 39fa3b4..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/EnergyBenchmarking/service/impl/EnergyBenchmarkingServiceImpl.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.dingzhuo.energy.project.EnergyBenchmarking.service.impl;
-
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.project.EnergyBenchmarking.mapper.EnergyBenchmarkingMapper;
-import com.dingzhuo.energy.project.EnergyBenchmarking.domain.EnergyBenchmarking;
-import com.dingzhuo.energy.project.EnergyBenchmarking.service.IEnergyBenchmarkingService;
-
-/**
- * energy_benchmarkingService涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-11-18
- */
-@Service
-public class EnergyBenchmarkingServiceImpl implements IEnergyBenchmarkingService 
-{
-    @Autowired
-    private EnergyBenchmarkingMapper energyBenchmarkingMapper;
-
-    /**
-     * 鏌ヨenergy_benchmarking
-     * 
-     * @param id energy_benchmarkingID
-     * @return energy_benchmarking
-     */
-    @Override
-    public EnergyBenchmarking selectEnergyBenchmarkingById(String id)
-    {
-        return energyBenchmarkingMapper.selectEnergyBenchmarkingById(id);
-    }
-
-    /**
-     * 鏌ヨenergy_benchmarking鍒楄〃
-     * 
-     * @param energyBenchmarking energy_benchmarking
-     * @return energy_benchmarking
-     */
-    @Override
-    public List<EnergyBenchmarking> selectEnergyBenchmarkingList(EnergyBenchmarking energyBenchmarking)
-    {
-        return energyBenchmarkingMapper.selectEnergyBenchmarkingList(energyBenchmarking);
-    }
-
-    /**
-     * 鏂板energy_benchmarking
-     * 
-     * @param energyBenchmarking energy_benchmarking
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertEnergyBenchmarking(EnergyBenchmarking energyBenchmarking)
-    {
-        return energyBenchmarkingMapper.insertEnergyBenchmarking(energyBenchmarking);
-    }
-
-    /**
-     * 淇敼energy_benchmarking
-     * 
-     * @param energyBenchmarking energy_benchmarking
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateEnergyBenchmarking(EnergyBenchmarking energyBenchmarking)
-    {
-        return energyBenchmarkingMapper.updateEnergyBenchmarking(energyBenchmarking);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎energy_benchmarking
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑energy_benchmarkingID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteEnergyBenchmarkingByIds(String[] ids)
-    {
-        return energyBenchmarkingMapper.deleteEnergyBenchmarkingByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎energy_benchmarking淇℃伅
-     * 
-     * @param id energy_benchmarkingID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteEnergyBenchmarkingById(String id)
-    {
-        return energyBenchmarkingMapper.deleteEnergyBenchmarkingById(id);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/controller/HomePageIndexController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/controller/HomePageIndexController.java
deleted file mode 100644
index 929e321..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/controller/HomePageIndexController.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.dingzhuo.energy.project.basicSetup.controller;
-
-import com.dingzhuo.energy.framework.config.SystemConfig;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 棣栭〉閰嶇疆Controller
- *
- * @author sys
- * @date 2021-04-09
- */
-@RestController
-@RequestMapping("/HomePage")
-public class HomePageIndexController extends BaseController
-{
-
-    /**
-     * 鑾峰彇 棣栭〉 IFRAME鐨勫唴宓孶RL鍦板潃
-     * @return
-     */
-    @GetMapping(value = "/indexIframeUrl")
-    public AjaxResult indexIframeUrl(){
-        Map<String,String> map = new HashMap<>();
-        //浠庣郴缁熼厤缃枃浠朵腑鑾峰彇 閰嶇疆鐨�  url鍦板潃
-        map.put("INDEXIFRAMEURL", SystemConfig.getIndexUrl());
-        return AjaxResult.success(map);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/controller/SysEquipmentfileController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/controller/SysEquipmentfileController.java
deleted file mode 100644
index 4e6a9b8..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/controller/SysEquipmentfileController.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package com.dingzhuo.energy.project.basicSetup.controller;
-
-import com.dingzhuo.energy.common.core.lang.UUID;
-import com.dingzhuo.energy.framework.config.RuoYiConfig;
-import java.io.*;
-import java.net.MalformedURLException;
-import java.util.List;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.file.FileUploadUtils;
-import com.dingzhuo.energy.common.utils.file.FileUtils;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import com.dingzhuo.energy.dataservice.service.RealtimeDatabaseService;
-import com.dingzhuo.energy.dataservice.service.impl.RealtimeDatabaseServiceImpl;
-
-import com.dingzhuo.energy.project.basicSetup.domain.SysSvgInfo;
-import org.apache.commons.lang3.StringUtils;
-import org.dom4j.Attribute;
-import org.dom4j.Document;
-import org.dom4j.DocumentException;
-import org.dom4j.Element;
-import org.dom4j.io.SAXReader;
-import org.dom4j.io.XMLWriter;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.ClassUtils;
-import org.springframework.web.bind.annotation.*;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.project.basicSetup.domain.SysEquipmentfile;
-import com.dingzhuo.energy.project.basicSetup.service.ISysEquipmentfileService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import org.springframework.web.multipart.MultipartFile;
-
-
-/**
- * 缁勬�佸浘Controller
- *
- * @author sys
- * @date 2020-02-24
- */
-@RestController
-@RequestMapping("/basicSetup/equipmentfile")
-public class SysEquipmentfileController extends BaseController {
-
-  private final ISysEquipmentfileService sysEquipmentfileService;
-
-  public SysEquipmentfileController(
-      ISysEquipmentfileService sysEquipmentfileService) {
-    this.sysEquipmentfileService = sysEquipmentfileService;
-  }
-
-  @PostMapping(value = "/upload")
-  @Log(title = "绯荤粺鍥�", businessType = BusinessType.IMPORT)
-  public AjaxResult upload(MultipartFile file) throws IOException {
-    if (!file.isEmpty()) {
-      String fileSuffix = FileUploadUtils.getExtension(file);
-      if (StringUtils.containsIgnoreCase(".svg,.jpg,.png,.gif", fileSuffix)) {
-        //鏂囦欢鏈�缁堜繚瀛樼殑缁濆璺緞
-        String filePath = FileUploadUtils.upload(RuoYiConfig.getConfigurePath(), file);
-        return AjaxResult.success(filePath);
-      }
-      return AjaxResult.error("鏂囦欢鏍煎紡閿欒");
-    }
-    return AjaxResult.error("绯荤粺鍥句笂浼犲け璐�");
-  }
-
-  /**
-   * 淇敼缁勬�佸浘
-   */
-  @Log(title = "绯荤粺鍥�", businessType = BusinessType.UPDATE)
-  @PutMapping
-  public AjaxResult edit(@RequestBody SysEquipmentfile sysEquipmentfile) {
-    try {
-      sysEquipmentfileService.saveEquipmentFile(sysEquipmentfile);
-      return AjaxResult.success();
-    } catch (Exception ex) {
-      return AjaxResult.error();
-    }
-  }
-
-  @PutMapping("/setting/{nodeId}")
-  public AjaxResult saveSetting(@PathVariable("nodeId") String nodeId,
-      @RequestBody List<SysSvgInfo> svgInfo) {
-    try {
-      svgInfo.forEach(info -> info.setId(UUID.fastUUID().toString()));
-      sysEquipmentfileService.saveSettingInfo(nodeId, svgInfo);
-      return AjaxResult.success("淇濆瓨鎴愬姛锛�");
-    } catch (Exception ex) {
-      return AjaxResult.error("淇濆瓨澶辫触锛�");
-    }
-  }
-
-  @GetMapping("/configure/{nodeId}")
-  public AjaxResult getConfigure(@PathVariable("nodeId") String nodeId) {
-    try {
-      SysEquipmentfile sysEquipmentfile = sysEquipmentfileService.getConfigure(nodeId);
-      return AjaxResult.success(sysEquipmentfile);
-    } catch (Exception ex) {
-      return AjaxResult.error("淇濆瓨澶辫触锛�");
-    }
-  }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/controller/SysStandardCategoryController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/controller/SysStandardCategoryController.java
deleted file mode 100644
index e213dce..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/controller/SysStandardCategoryController.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.dingzhuo.energy.project.basicSetup.controller;
-
-import java.util.List;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.project.basicSetup.domain.SysStandardCategory;
-import com.dingzhuo.energy.project.basicSetup.service.ISysStandardCategoryService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * categoryController
- * 
- * @author ruoyi
- * @date 2020-02-12
- */
-@RestController
-@RequestMapping("/basicSetup/category")
-public class SysStandardCategoryController extends BaseController
-{
-    @Autowired
-    private ISysStandardCategoryService sysStandardCategoryService;
-
-    /**
-     * 鏌ヨcategory鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('basicSetup:category:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(SysStandardCategory sysStandardCategory)
-    {
-        startPage();
-        List<SysStandardCategory> list = sysStandardCategoryService.selectSysStandardCategoryList(sysStandardCategory);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭category鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('basicSetup:category:export')")
-    @Log(title = "category", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(SysStandardCategory sysStandardCategory)
-    {
-        List<SysStandardCategory> list = sysStandardCategoryService.selectSysStandardCategoryList(sysStandardCategory);
-        ExcelUtil<SysStandardCategory> util = new ExcelUtil<SysStandardCategory>(SysStandardCategory.class);
-        return util.exportExcel(list, "category");
-    }
-
-    /**
-     * 鑾峰彇category璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('basicSetup:category:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(sysStandardCategoryService.selectSysStandardCategoryById(id));
-    }
-
-    /**
-     * 鏂板category
-     */
-    @PreAuthorize("@ss.hasPermi('basicSetup:category:add')")
-    @Log(title = "category", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody SysStandardCategory sysStandardCategory)
-    {
-        return toAjax(sysStandardCategoryService.insertSysStandardCategory(sysStandardCategory));
-    }
-
-    /**
-     * 淇敼category
-     */
-    @PreAuthorize("@ss.hasPermi('basicSetup:category:edit')")
-    @Log(title = "category", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody SysStandardCategory sysStandardCategory)
-    {
-        return toAjax(sysStandardCategoryService.updateSysStandardCategory(sysStandardCategory));
-    }
-
-    /**
-     * 鍒犻櫎category
-     */
-    @PreAuthorize("@ss.hasPermi('basicSetup:category:remove')")
-    @Log(title = "category", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(sysStandardCategoryService.deleteSysStandardCategoryByIds(ids));
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/controller/SysStandardParametersController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/controller/SysStandardParametersController.java
deleted file mode 100644
index 6ea70ef..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/controller/SysStandardParametersController.java
+++ /dev/null
@@ -1,174 +0,0 @@
-package com.dingzhuo.energy.project.basicSetup.controller;
-
-import java.math.BigDecimal;
-import java.util.*;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import com.dingzhuo.energy.dataservice.service.RealtimeDatabaseService;
-import com.dingzhuo.energy.project.basicSetup.domain.SysStandardCategory;
-import com.dingzhuo.energy.project.energyStatistics.domain.dataTimeSVG;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.project.basicSetup.domain.SysStandardParameters;
-import com.dingzhuo.energy.project.basicSetup.service.ISysStandardParametersService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * parametersController
- *
- * @author ruoyi
- * @date 2020-02-12
- */
-@RestController
-@RequestMapping("/basicSetup/parameters")
-public class SysStandardParametersController extends BaseController {
-    @Autowired
-    private ISysStandardParametersService sysStandardParametersService;
-    @Autowired
-    private RealtimeDatabaseService realtimeDatabaseService;
-
-    /**
-     * 鏌ヨparameters鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('basicSetup:parameters:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(SysStandardParameters sysStandardParameters) {
-        startPage();
-        List<SysStandardParameters> list = sysStandardParametersService.selectSysStandardParametersList(sysStandardParameters);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭parameters鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('basicSetup:parameters:export')")
-    @Log(title = "parameters", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(SysStandardParameters sysStandardParameters) {
-        List<SysStandardParameters> list = sysStandardParametersService.selectSysStandardParametersList(sysStandardParameters);
-        ExcelUtil<SysStandardParameters> util = new ExcelUtil<SysStandardParameters>(SysStandardParameters.class);
-        return util.exportExcel(list, "parameters");
-    }
-
-    /**
-     * 鑾峰彇parameters璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('basicSetup:parameters:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id) {
-        return AjaxResult.success(sysStandardParametersService.selectSysStandardParametersById(id));
-    }
-
-    /**
-     * 鏂板parameters
-     */
-    @PreAuthorize("@ss.hasPermi('basicSetup:parameters:add')")
-    @Log(title = "parameters", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody SysStandardParameters sysStandardParameters) {
-        int msg = sysStandardParametersService.insertSysStandardParameters(sysStandardParameters);
-        return toAjax(msg);
-    }
-
-    /**
-     * 淇敼parameters
-     */
-    @PreAuthorize("@ss.hasPermi('basicSetup:parameters:edit')")
-    @Log(title = "parameters", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody SysStandardParameters sysStandardParameters) {
-        SysStandardParameters standardParameters =sysStandardParametersService.selectSysStandardParametersById(sysStandardParameters.getId());
-        int msg;
-        if(standardParameters==null){
-            msg = sysStandardParametersService.insertSysStandardParameters(sysStandardParameters);
-        }else{
-            msg=sysStandardParametersService.updateSysStandardParameters(sysStandardParameters);
-        }
-        return toAjax(msg);
-    }
-
-    /**
-     * 鍒犻櫎parameters
-     */
-    @PreAuthorize("@ss.hasPermi('basicSetup:parameters:remove')")
-    @Log(title = "parameters", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids) {
-        return toAjax(sysStandardParametersService.deleteSysStandardParametersByIds(ids));
-    }
-    @PreAuthorize("@ss.hasPermi('basicSetup:parameters:listSee')")
-    @GetMapping("/listSee/{id}")
-    public AjaxResult getListSee(@PathVariable("id") String id) {
-        try {
-            List tableList = new ArrayList();
-            List<String> tagCodes = new ArrayList<String>();
-            SysStandardParameters sysStandardParameters = sysStandardParametersService.getStandardParameters(id);
-            if (sysStandardParameters != null) {
-                JSONArray ar = JSONObject.parseArray(sysStandardParameters.getConfigInfo());
-                for(int i=0;i<ar.size();i++){
-                    JSONObject t =  ar.getJSONObject(i);
-                    List<Map> list = JSONObject.parseArray(t.get("tableRow").toString(), Map.class);
-                    for (Map item : list) {
-                        for (int j = 1; j < item.keySet().size(); j++) {
-                            tagCodes.add((String) item.get("colName"+j));
-                        }
-                    }
-                }
-                //tagCodes.add("DB01_A01");
-                List<TagValue> tagValueslist= realtimeDatabaseService.retrieve(tagCodes);
-                for(int i=0;i<ar.size();i++){
-                    JSONObject t =  ar.getJSONObject(i);
-                    Map tabMap = new HashMap();
-                    tabMap.put("tableName",t.get("tableName"));
-                    List<Map> listRow = JSONObject.parseArray(t.get("tableColumn").toString(), Map.class);
-                    tabMap.put("tablecolumn",listRow);
-                    List<Map> list = JSONObject.parseArray(t.get("tableRow").toString(), Map.class);//杩欓噷鐨勭浜屼釜鍙傛暟涔熷彲浠ョ敤瀵瑰簲鐨勮嚜瀹氫箟javaBean.class
-                    List rowList = new ArrayList();
-                    for (Map item : list) {
-                        Map row= new HashMap();
-                        for (int j = 0; j < item.values().size(); j++) {
-                            /*if(item.get("colName"+j).toString().indexOf())*/
-                            String code = "";
-                            String code1=item.get("colName"+j).toString();
-                            for (TagValue items:tagValueslist) {
-                                String code2=items.getTagCode();
-                                if(code2.equals(code1)){
-                                    code = String.valueOf((Double)new BigDecimal(items.getValue()).setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue());
-                                }else{
-                                    code=item.get("colName"+j).toString();
-                                }
-                            }
-                            row.put("colName"+j,code);
-                        }
-                        rowList.add(row);
-                    }
-                    tabMap.put("tablerowdata",rowList);
-                    tableList.add(tabMap);
-                }
-            }
-
-
-            return AjaxResult.success(tableList);
-        } catch (Exception ex) {
-            logger.error(ex.getMessage());
-            return AjaxResult.error("鏌ヨ澶辫触锛�");
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/domain/SysEquipmentfile.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/domain/SysEquipmentfile.java
deleted file mode 100644
index 749fbb2..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/domain/SysEquipmentfile.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.dingzhuo.energy.project.basicSetup.domain;
-
-import java.util.List;
-
-/**
- * 缁勬�佸浘瀵硅薄 sys_equipmentfile
- *
- * @author sys
- * @date 2020-02-24
- */
-public class SysEquipmentfile {
-
-  private String nodeId;
-  private String filePath;
-  private String svgType;
-  private List<SysSvgInfo> infoList;
-
-  public String getNodeId() {
-    return nodeId;
-  }
-
-  public void setNodeId(String nodeId) {
-    this.nodeId = nodeId;
-  }
-
-  public String getFilePath() {
-    return filePath;
-  }
-
-  public void setFilePath(String filePath) {
-    this.filePath = filePath;
-  }
-
-  public List<SysSvgInfo> getInfoList() {
-    return infoList;
-  }
-
-  public void setInfoList(
-      List<SysSvgInfo> infoList) {
-    this.infoList = infoList;
-  }
-
-  public String getSvgType() {
-    return svgType;
-  }
-
-  public void setSvgType(String svgType) {
-    this.svgType = svgType;
-  }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/domain/SysStandardCategory.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/domain/SysStandardCategory.java
deleted file mode 100644
index 48501ad..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/domain/SysStandardCategory.java
+++ /dev/null
@@ -1,153 +0,0 @@
-package com.dingzhuo.energy.project.basicSetup.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * category瀵硅薄 sys_standard_category
- * 
- * @author ruoyi
- * @date 2020-02-12
- */
-public class SysStandardCategory extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-    private String tableName;
-    private String tableRow;
-    private String colName;
-    private String tableColumn;
-    private String name;
-    private String item;
-    public String getTableName() {
-        return tableName;
-    }
-
-    public void setTableName(String tableName) {
-        this.tableName = tableName;
-    }
-
-    public String getTableRow() {
-        return tableRow;
-    }
-
-    public void setTableRow(String tableRow) {
-        this.tableRow = tableRow;
-    }
-
-    public String getColName() {
-        return colName;
-    }
-
-    public void setColName(String colName) {
-        this.colName = colName;
-    }
-
-    public String getTableColumn() {
-        return tableColumn;
-    }
-
-    public void setTableColumn(String tableColumn) {
-        this.tableColumn = tableColumn;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getItem() {
-        return item;
-    }
-
-    public void setItem(String item) {
-        this.item = item;
-    }
-    /* *//** $column.columnComment *//*
-    private String id;
-
-    *//** 鏍囧噯鍙傛暟绫诲埆鍚嶇О *//*
-    @Excel(name = "鏍囧噯鍙傛暟绫诲埆鍚嶇О")
-    private String categoryName;
-
-    *//** 鏍囧噯鍙傛暟绫诲埆缂栫爜 *//*
-    @Excel(name = "鏍囧噯鍙傛暟绫诲埆缂栫爜")
-    private String categoryCode;
-
-    *//** 鏁版嵁灞曠ず绫诲瀷锛�1-瀹炴椂鏁版嵁锛�2-闃舵鏁版嵁 *//*
-    @Excel(name = "鏁版嵁灞曠ず绫诲瀷锛�1-瀹炴椂鏁版嵁锛�2-闃舵鏁版嵁")
-    private String dataType;
-
-    *//** 鏄惁鏄剧ず鎶ヨ *//*
-    @Excel(name = "鏄惁鏄剧ず鎶ヨ")
-    private String showAlarm;
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setCategoryName(String categoryName) 
-    {
-        this.categoryName = categoryName;
-    }
-
-    public String getCategoryName() 
-    {
-        return categoryName;
-    }
-    public void setCategoryCode(String categoryCode) 
-    {
-        this.categoryCode = categoryCode;
-    }
-
-    public String getCategoryCode() 
-    {
-        return categoryCode;
-    }
-    public void setDataType(String dataType) 
-    {
-        this.dataType = dataType;
-    }
-
-    public String getDataType() 
-    {
-        return dataType;
-    }
-    public void setShowAlarm(String showAlarm) 
-    {
-        this.showAlarm = showAlarm;
-    }
-
-    public String getShowAlarm() 
-    {
-        return showAlarm;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("categoryName", getCategoryName())
-            .append("categoryCode", getCategoryCode())
-            .append("dataType", getDataType())
-            .append("showAlarm", getShowAlarm())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .append("remark", getRemark())
-            .toString();
-    }*/
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/domain/SysStandardParameters.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/domain/SysStandardParameters.java
deleted file mode 100644
index 16880b6..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/domain/SysStandardParameters.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package com.dingzhuo.energy.project.basicSetup.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-/**
- * parameters瀵硅薄 sys_standard_parameters
- *
- * @author ruoyi
- * @date 2020-02-12
- */
-public class SysStandardParameters extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** $column.columnComment */
-    private String id;
-
-    /** 鏍囧噯鍙傛暟绫诲埆鍚嶇О */
-    @Excel(name = "鏍囧噯鍙傛暟绫诲埆鍚嶇О")
-    private String name;
-
-    /** 璁捐鍐呭 */
-    @Excel(name = "璁捐鍐呭")
-    private String configInfo;
-
-    /** 鏍囧噯鍙傛暟绫诲埆缂栫爜 */
-    @Excel(name = "鏍囧噯鍙傛暟绫诲埆缂栫爜")
-    private String code;
-
-    /** 鏁版嵁灞曠ず绫诲瀷锛�1-瀹炴椂鏁版嵁锛�2-闃舵鏁版嵁 */
-    @Excel(name = "鏁版嵁灞曠ず绫诲瀷锛�1-瀹炴椂鏁版嵁锛�2-闃舵鏁版嵁")
-    private String dataType;
-
-    /** 鏄惁鏄剧ず鎶ヨ */
-    @Excel(name = "鏄惁鏄剧ず鎶ヨ")
-    private String showAlarm;
-
-    @Excel(name = "鏍囧噯鍙傛暟绫诲埆Id")
-    private String categoryId;
-
-    public void setId(String id)
-    {
-        this.id = id;
-    }
-
-    public String getId()
-    {
-        return id;
-    }
-    public void setName(String name)
-    {
-        this.name = name;
-    }
-
-    public String getName()
-    {
-        return name;
-    }
-    public void setConfigInfo(String configInfo)
-    {
-        this.configInfo = configInfo;
-    }
-
-    public String getConfigInfo()
-    {
-        return configInfo;
-    }
-    public void setCode(String code)
-    {
-        this.code = code;
-    }
-
-    public String getCode()
-    {
-        return code;
-    }
-    public void setDataType(String dataType)
-    {
-        this.dataType = dataType;
-    }
-
-    public String getDataType()
-    {
-        return dataType;
-    }
-    public void setShowAlarm(String showAlarm)
-    {
-        this.showAlarm = showAlarm;
-    }
-
-    public String getShowAlarm()
-    {
-        return showAlarm;
-    }
-
-    public String getCategoryId()
-    {
-        return categoryId;
-    }
-
-    public void setCategoryId(String categoryId)
-    {
-        this.categoryId = categoryId;
-    }
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-                .append("id", getId())
-                .append("name", getName())
-                .append("configInfo", getConfigInfo())
-                .append("createBy", getCreateBy())
-                .append("createTime", getCreateTime())
-                .append("updateBy", getUpdateBy())
-                .append("updateTime", getUpdateTime())
-                .append("remark", getRemark())
-                .append("code", getCode())
-                .append("dataType", getDataType())
-                .append("showAlarm", getShowAlarm())
-                .append("categoryId",  getCategoryId())
-                .toString();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/domain/SysSvgInfo.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/domain/SysSvgInfo.java
deleted file mode 100644
index dad0278..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/domain/SysSvgInfo.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.dingzhuo.energy.project.basicSetup.domain;
-
-public class SysSvgInfo {
-
-  private String id;
-  private String param;
-  private String tag;
-
-  public String getParam() {
-    return param;
-  }
-
-  public void setParam(String param) {
-    this.param = param;
-  }
-
-  public String getTag() {
-    return tag;
-  }
-
-  public void setTag(String tag) {
-    this.tag = tag;
-  }
-
-  public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/mapper/SysEquipmentfileMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/mapper/SysEquipmentfileMapper.java
deleted file mode 100644
index 4fa6805..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/mapper/SysEquipmentfileMapper.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.dingzhuo.energy.project.basicSetup.mapper;
-
-import com.dingzhuo.energy.project.basicSetup.domain.SysEquipmentfile;
-import com.dingzhuo.energy.project.basicSetup.domain.SysSvgInfo;
-
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
-
-/**
- * 缁勬�佸浘Mapper鎺ュ彛
- *
- * @author sys
- * @date 2020-02-24
- */
-public interface SysEquipmentfileMapper {
-
-  void saveEquipmentFile(SysEquipmentfile sysEquipmentfile);
-
-  void saveSettingInfo(@Param("nodeId") String nodeId, @Param("svgInfo") List<SysSvgInfo> svgInfo);
-
-  SysEquipmentfile getConfigure(String nodeId);
-
-  List<SysSvgInfo> getConfigureTag(String nodeId);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/mapper/SysStandardCategoryMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/mapper/SysStandardCategoryMapper.java
deleted file mode 100644
index 4618ac8..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/mapper/SysStandardCategoryMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.project.basicSetup.mapper;
-
-import com.dingzhuo.energy.project.basicSetup.domain.SysStandardCategory;
-import java.util.List;
-
-/**
- * categoryMapper鎺ュ彛
- * 
- * @author ruoyi
- * @date 2020-02-12
- */
-public interface SysStandardCategoryMapper 
-{
-    /**
-     * 鏌ヨcategory
-     * 
-     * @param id categoryID
-     * @return category
-     */
-    public SysStandardCategory selectSysStandardCategoryById(String id);
-
-    /**
-     * 鏌ヨcategory鍒楄〃
-     * 
-     * @param sysStandardCategory category
-     * @return category闆嗗悎
-     */
-    public List<SysStandardCategory> selectSysStandardCategoryList(SysStandardCategory sysStandardCategory);
-
-    /**
-     * 鏂板category
-     * 
-     * @param sysStandardCategory category
-     * @return 缁撴灉
-     */
-    public int insertSysStandardCategory(SysStandardCategory sysStandardCategory);
-
-    /**
-     * 淇敼category
-     * 
-     * @param sysStandardCategory category
-     * @return 缁撴灉
-     */
-    public int updateSysStandardCategory(SysStandardCategory sysStandardCategory);
-
-    /**
-     * 鍒犻櫎category
-     * 
-     * @param id categoryID
-     * @return 缁撴灉
-     */
-    public int deleteSysStandardCategoryById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎category
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteSysStandardCategoryByIds(String[] ids);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/mapper/SysStandardParametersMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/mapper/SysStandardParametersMapper.java
deleted file mode 100644
index c81268e..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/mapper/SysStandardParametersMapper.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.dingzhuo.energy.project.basicSetup.mapper;
-
-import com.dingzhuo.energy.project.basicSetup.domain.SysStandardParameters;
-import java.util.List;
-
-/**
- * parametersMapper鎺ュ彛
- *
- * @author ruoyi
- * @date 2020-02-12
- */
-public interface SysStandardParametersMapper
-{
-    /**
-     * 鏌ヨparameters
-     *
-     * @param id parametersID
-     * @return parameters
-     */
-    public SysStandardParameters selectSysStandardParametersById(String id);
-    /*public List<SysStandardParameters> getStandardParameters();*/
-    public SysStandardParameters getStandardParameters(String id);
-    /**
-     * 鏌ヨparameters鍒楄〃
-     *
-     * @param sysStandardParameters parameters
-     * @return parameters闆嗗悎
-     */
-    public List<SysStandardParameters> selectSysStandardParametersList(SysStandardParameters sysStandardParameters);
-
-    /**
-     * 鏂板parameters
-     *
-     * @param sysStandardParameters parameters
-     * @return 缁撴灉
-     */
-    public int insertSysStandardParameters(SysStandardParameters sysStandardParameters);
-
-    /**
-     * 淇敼parameters
-     *
-     * @param sysStandardParameters parameters
-     * @return 缁撴灉
-     */
-    public int updateSysStandardParameters(SysStandardParameters sysStandardParameters);
-
-    /**
-     * 鍒犻櫎parameters
-     *
-     * @param id parametersID
-     * @return 缁撴灉
-     */
-    public int deleteSysStandardParametersById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎parameters
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteSysStandardParametersByIds(String[] ids);
-
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/service/ISysEquipmentfileService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/service/ISysEquipmentfileService.java
deleted file mode 100644
index 11a80ad..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/service/ISysEquipmentfileService.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.dingzhuo.energy.project.basicSetup.service;
-
-import com.dingzhuo.energy.project.basicSetup.domain.SysEquipmentfile;
-import com.dingzhuo.energy.project.basicSetup.domain.SysSvgInfo;
-
-import java.util.List;
-
-/**
- * 缁勬�佸浘Service鎺ュ彛
- *
- * @author sys
- * @date 2020-02-24
- */
-public interface ISysEquipmentfileService {
-
-  void saveEquipmentFile(SysEquipmentfile sysEquipmentfile);
-
-  void saveSettingInfo(String nodeId, List<SysSvgInfo> svgInfo);
-
-  /**
-   * 鑾峰彇缁勬�佸浘閰嶇疆淇℃伅
-   * @param nodeId 妯″瀷鑺傜偣 id
-   * @return
-   */
-  SysEquipmentfile getConfigure(String nodeId);
-
-  /**
-   * 鑾峰彇缁勬�佸浘閰嶇疆鐨勭偣浣嶅彿
-   * @param nodeId 妯″瀷鑺傜偣 id
-   * @return
-   */
-  List<SysSvgInfo> getConfigureTag(String nodeId);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/service/ISysStandardCategoryService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/service/ISysStandardCategoryService.java
deleted file mode 100644
index 4dae6a6..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/service/ISysStandardCategoryService.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.dingzhuo.energy.project.basicSetup.service;
-
-import com.dingzhuo.energy.project.basicSetup.domain.SysStandardCategory;
-
-import java.util.List;
-
-/**
- * categoryService鎺ュ彛
- * 
- * @author ruoyi
- * @date 2020-02-12
- */
-public interface ISysStandardCategoryService 
-{
-    /**
-     * 鏌ヨcategory
-     * 
-     * @param id categoryID
-     * @return category
-     */
-    public SysStandardCategory selectSysStandardCategoryById(String id);
-
-    /**
-     * 鏌ヨcategory鍒楄〃
-     * 
-     * @param sysStandardCategory category
-     * @return category闆嗗悎
-     */
-    public List<SysStandardCategory> selectSysStandardCategoryList(SysStandardCategory sysStandardCategory);
-
-    /**
-     * 鏂板category
-     * 
-     * @param sysStandardCategory category
-     * @return 缁撴灉
-     */
-    public int insertSysStandardCategory(SysStandardCategory sysStandardCategory);
-
-    /**
-     * 淇敼category
-     * 
-     * @param sysStandardCategory category
-     * @return 缁撴灉
-     */
-    public int updateSysStandardCategory(SysStandardCategory sysStandardCategory);
-
-    /**
-     * 鎵归噺鍒犻櫎category
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑categoryID
-     * @return 缁撴灉
-     */
-    public int deleteSysStandardCategoryByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎category淇℃伅
-     * 
-     * @param id categoryID
-     * @return 缁撴灉
-     */
-    public int deleteSysStandardCategoryById(String id);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/service/ISysStandardParametersService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/service/ISysStandardParametersService.java
deleted file mode 100644
index e678e6d..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/service/ISysStandardParametersService.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.dingzhuo.energy.project.basicSetup.service;
-
-import com.dingzhuo.energy.project.basicSetup.domain.SysStandardParameters;
-import java.util.List;
-
-/**
- * parametersService鎺ュ彛
- *
- * @author ruoyi
- * @date 2020-02-12
- */
-public interface ISysStandardParametersService
-{
-    /**
-     * 鏌ヨparameters
-     *
-     * @param id parametersID
-     * @return parameters
-     */
-    public SysStandardParameters selectSysStandardParametersById(String id);
-    /*public List<SysStandardParameters> getStandardParameters();*/
-    public SysStandardParameters getStandardParameters(String id);
-    /**
-     * 鏌ヨparameters鍒楄〃
-     *
-     * @param sysStandardParameters parameters
-     * @return parameters闆嗗悎
-     */
-    public List<SysStandardParameters> selectSysStandardParametersList(SysStandardParameters sysStandardParameters);
-
-    /**
-     * 鏂板parameters
-     *
-     * @param sysStandardParameters parameters
-     * @return 缁撴灉
-     */
-    public int insertSysStandardParameters(SysStandardParameters sysStandardParameters);
-
-    /**
-     * 淇敼parameters
-     *
-     * @param sysStandardParameters parameters
-     * @return 缁撴灉
-     */
-    public int updateSysStandardParameters(SysStandardParameters sysStandardParameters);
-
-    /**
-     * 鎵归噺鍒犻櫎parameters
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑parametersID
-     * @return 缁撴灉
-     */
-    public int deleteSysStandardParametersByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎parameters淇℃伅
-     *
-     * @param id parametersID
-     * @return 缁撴灉
-     */
-    public int deleteSysStandardParametersById(String id);
-
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/service/impl/SysEquipmentfileServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/service/impl/SysEquipmentfileServiceImpl.java
deleted file mode 100644
index 85a6387..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/service/impl/SysEquipmentfileServiceImpl.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.dingzhuo.energy.project.basicSetup.service.impl;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import com.dingzhuo.energy.project.basicSetup.domain.SysSvgInfo;
-import org.apache.batik.dom.svg.SAXSVGDocumentFactory;
-import org.apache.batik.util.XMLResourceDescriptor;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.project.basicSetup.mapper.SysEquipmentfileMapper;
-import com.dingzhuo.energy.project.basicSetup.domain.SysEquipmentfile;
-import com.dingzhuo.energy.project.basicSetup.service.ISysEquipmentfileService;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-/**
- * 缁勬�佸浘Service涓氬姟灞傚鐞�
- *
- * @author sys
- * @date 2020-02-24
- */
-@Service
-public class SysEquipmentfileServiceImpl implements ISysEquipmentfileService {
-
-  @Autowired
-  private SysEquipmentfileMapper equipmentfileMapper;
-
-  @Override
-  public void saveEquipmentFile(SysEquipmentfile sysEquipmentfile) {
-    equipmentfileMapper.saveEquipmentFile(sysEquipmentfile);
-  }
-
-  @Override
-  public void saveSettingInfo(String nodeId, List<SysSvgInfo> svgInfo) {
-    equipmentfileMapper.saveSettingInfo(nodeId, svgInfo);
-  }
-
-  @Override
-  public SysEquipmentfile getConfigure(String nodeId) {
-    SysEquipmentfile sysEquipmentfile = equipmentfileMapper.getConfigure(nodeId);
-    List<SysSvgInfo> infos = getConfigureTag(nodeId);
-    if (sysEquipmentfile != null) {
-      sysEquipmentfile.setInfoList(infos);
-    }
-
-    return sysEquipmentfile;
-  }
-
-  @Override
-  public List<SysSvgInfo> getConfigureTag(String nodeId) {
-    return equipmentfileMapper.getConfigureTag(nodeId);
-  }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/service/impl/SysStandardCategoryServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/service/impl/SysStandardCategoryServiceImpl.java
deleted file mode 100644
index d2ecbca..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/service/impl/SysStandardCategoryServiceImpl.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.dingzhuo.energy.project.basicSetup.service.impl;
-
-import java.util.List;
-import java.util.UUID;
-
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.project.basicSetup.mapper.SysStandardCategoryMapper;
-import com.dingzhuo.energy.project.basicSetup.domain.SysStandardCategory;
-import com.dingzhuo.energy.project.basicSetup.service.ISysStandardCategoryService;
-
-/**
- * categoryService涓氬姟灞傚鐞�
- * 
- * @author ruoyi
- * @date 2020-02-12
- */
-@Service
-public class SysStandardCategoryServiceImpl implements ISysStandardCategoryService 
-{
-    @Autowired
-    private SysStandardCategoryMapper sysStandardCategoryMapper;
-
-    /**
-     * 鏌ヨcategory
-     * 
-     * @param id categoryID
-     * @return category
-     */
-    @Override
-    public SysStandardCategory selectSysStandardCategoryById(String id)
-    {
-        return sysStandardCategoryMapper.selectSysStandardCategoryById(id);
-    }
-
-    /**
-     * 鏌ヨcategory鍒楄〃
-     * 
-     * @param sysStandardCategory category
-     * @return category
-     */
-    @Override
-    public List<SysStandardCategory> selectSysStandardCategoryList(SysStandardCategory sysStandardCategory)
-    {
-        return sysStandardCategoryMapper.selectSysStandardCategoryList(sysStandardCategory);
-    }
-
-    /**
-     * 鏂板category
-     * 
-     * @param sysStandardCategory category
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertSysStandardCategory(SysStandardCategory sysStandardCategory)
-    {
-        //sysStandardCategory.setId(UUID.randomUUID().toString());
-        sysStandardCategory.setCreateBy(SecurityUtils.getUsername());
-        sysStandardCategory.setCreateTime(DateUtils.getNowDate());
-        return sysStandardCategoryMapper.insertSysStandardCategory(sysStandardCategory);
-    }
-
-    /**
-     * 淇敼category
-     * 
-     * @param sysStandardCategory category
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateSysStandardCategory(SysStandardCategory sysStandardCategory)
-    {
-        sysStandardCategory.setUpdateBy(SecurityUtils.getUsername());
-        sysStandardCategory.setUpdateTime(DateUtils.getNowDate());
-        return sysStandardCategoryMapper.updateSysStandardCategory(sysStandardCategory);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎category
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑categoryID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteSysStandardCategoryByIds(String[] ids)
-    {
-        return sysStandardCategoryMapper.deleteSysStandardCategoryByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎category淇℃伅
-     * 
-     * @param id categoryID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteSysStandardCategoryById(String id)
-    {
-        return sysStandardCategoryMapper.deleteSysStandardCategoryById(id);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/service/impl/SysStandardParametersServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/service/impl/SysStandardParametersServiceImpl.java
deleted file mode 100644
index 07faa1c..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/basicSetup/service/impl/SysStandardParametersServiceImpl.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.dingzhuo.energy.project.basicSetup.service.impl;
-
-import java.util.List;
-import java.util.UUID;
-
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.project.basicSetup.mapper.SysStandardParametersMapper;
-import com.dingzhuo.energy.project.basicSetup.domain.SysStandardParameters;
-import com.dingzhuo.energy.project.basicSetup.service.ISysStandardParametersService;
-
-/**
- * parametersService涓氬姟灞傚鐞�
- *
- * @author ruoyi
- * @date 2020-02-12
- */
-@Service
-public class SysStandardParametersServiceImpl implements ISysStandardParametersService
-{
-    @Autowired
-    private SysStandardParametersMapper sysStandardParametersMapper;
-
-    /**
-     * 鏌ヨparameters
-     *
-     * @param id parametersID
-     * @return parameters
-     */
-    @Override
-    public SysStandardParameters selectSysStandardParametersById(String id)
-    {
-        return sysStandardParametersMapper.selectSysStandardParametersById(id);
-    }
-   /* public List<SysStandardParameters> getStandardParameters(){
-        return sysStandardParametersMapper.getStandardParameters();
-    }*/
-   public SysStandardParameters getStandardParameters(String id){
-       return sysStandardParametersMapper.getStandardParameters(id);
-   }
-    /**
-     * 鏌ヨparameters鍒楄〃
-     *
-     * @param sysStandardParameters parameters
-     * @return parameters
-     */
-    @Override
-    public List<SysStandardParameters> selectSysStandardParametersList(SysStandardParameters sysStandardParameters)
-    {
-        return sysStandardParametersMapper.selectSysStandardParametersList(sysStandardParameters);
-    }
-
-    /**
-     * 鏂板parameters
-     *
-     * @param sysStandardParameters parameters
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertSysStandardParameters(SysStandardParameters sysStandardParameters) {
-        /*sysStandardParameters.setId(UUID.randomUUID().toString())*/;
-        sysStandardParameters.setCreateBy(SecurityUtils.getUsername());
-        sysStandardParameters.setCreateTime(DateUtils.getNowDate());
-        return sysStandardParametersMapper.insertSysStandardParameters(sysStandardParameters);
-    }
-
-    /**
-     * 淇敼parameters
-     *
-     * @param sysStandardParameters parameters
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateSysStandardParameters(SysStandardParameters sysStandardParameters){
-        sysStandardParameters.setUpdateBy(SecurityUtils.getUsername());
-        sysStandardParameters.setUpdateTime(DateUtils.getNowDate());
-        return sysStandardParametersMapper.updateSysStandardParameters(sysStandardParameters);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎parameters
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑parametersID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteSysStandardParametersByIds(String[] ids)
-    {
-        return sysStandardParametersMapper.deleteSysStandardParametersByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎parameters淇℃伅
-     *
-     * @param id parametersID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteSysStandardParametersById(String id)
-    {
-        return sysStandardParametersMapper.deleteSysStandardParametersById(id);
-    }
-
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/controller/BenchmarkingManagementController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/controller/BenchmarkingManagementController.java
deleted file mode 100644
index d5adaad..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/controller/BenchmarkingManagementController.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package com.dingzhuo.energy.project.benchmarking.controller;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.project.benchmarking.domain.BenchmarkingManagement;
-import com.dingzhuo.energy.project.benchmarking.service.IBenchmarkingManagementService;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-
-/**
- * 鏍囨潌绠$悊Controller
- * 
- * @author sys
- * @date 2020-12-21
- */
-@RestController
-@RequestMapping("/benchmarking/BenchmarkingManagement")
-public class BenchmarkingManagementController extends BaseController
-{
-    @Autowired
-    private IBenchmarkingManagementService benchmarkingManagementService;
-    @Autowired
-    private IModelNodeService modelNodeService;
-    /**
-     * 鏌ヨ鏍囨潌绠$悊鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('benchmarking:BenchmarkingManagement:list')")
-    @GetMapping("/list")
-    public AjaxResult list(BenchmarkingManagement benchmarkingManagement)
-    {
-        List<EnergyIndex> energyList = modelNodeService.getSettingIndex(benchmarkingManagement.getIndexId());
-        List<String> indexCode = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        List<BenchmarkingManagement> list;
-        list = benchmarkingManagementService.selectBenchmarkingManagementList(indexCode,benchmarkingManagement.getDateTime(), benchmarkingManagement.getTimeType());
-        if(list.size()==0){
-            list = benchmarkingManagementService.selectBenchmarkingList(indexCode,benchmarkingManagement);
-        }
-        return AjaxResult.success(list);
-    }
-
-    /**
-     * 瀵煎嚭鏍囨潌绠$悊鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('benchmarking:BenchmarkingManagement:export')")
-    @Log(title = "鏍囨潌绠$悊", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(BenchmarkingManagement benchmarkingManagement)
-    {
-        String timeCode = TimeManager.getTimeCode(benchmarkingManagement.getDateTime(), benchmarkingManagement.getTimeType());
-        List<EnergyIndex> energyList = modelNodeService.getSettingIndex(benchmarkingManagement.getIndexId());
-        List<String> indexCode = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        List<BenchmarkingManagement> list = benchmarkingManagementService.selectBenchmarkingManagementList(indexCode,benchmarkingManagement.getDateTime(), benchmarkingManagement.getTimeType());
-        ExcelUtil<BenchmarkingManagement> util = new ExcelUtil<BenchmarkingManagement>(BenchmarkingManagement.class);
-        return util.exportExcel(list, "BenchmarkingManagement");
-    }
-
-    /**
-     * 鑾峰彇銆愯濉啓鍔熻兘鍚嶇О銆戣缁嗕俊鎭�
-     */
-    @PreAuthorize("@ss.hasPermi('system:management:query')")
-    @GetMapping(value = "/{indexId}")
-    public AjaxResult getInfo(@PathVariable("indexId") String indexId)
-    {
-        return AjaxResult.success(benchmarkingManagementService.selectBenchmarkingManagementById(indexId));
-    }
-    /**
-     * 鏂板鏍囨潌绠$悊
-     */
-    @PreAuthorize("@ss.hasPermi('benchmarking:BenchmarkingManagement:add')")
-    @Log(title = "鏍囨潌绠$悊", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody List<BenchmarkingManagement> listMap) {
-        List<BenchmarkingManagement> benchmarking = new ArrayList<>();
-        listMap.forEach(data -> {
-            String timeCode = TimeManager.getTimeCode(data.getDateTime(), data.getTimeType());
-            BenchmarkingManagement dataItem = new BenchmarkingManagement();
-            dataItem.setTimeCode(timeCode);
-            dataItem.setIndexId(data.getIndexId());
-            dataItem.setValue(data.getValue());
-            dataItem.setDateTime(data.getDateTime());
-            dataItem.setTimeType(data.getTimeType());
-            dataItem.setActualValue(data.getActualValue());
-            dataItem.setBenchmarkingRange(data.getBenchmarkingRange());
-            dataItem.setBenchmarkingType(data.getBenchmarkingType());
-            benchmarking.add(dataItem);
-        });
-        try {
-            this.benchmarkingManagementService.save(benchmarking);
-            return AjaxResult.success("淇濆瓨鎴愬姛锛�");
-        }catch (Exception ex) {
-            logger.error("淇濆瓨澶辫触锛�" + ex.getMessage());
-            return AjaxResult.success(ex.getMessage());
-        }
-        //return toAjax(benchmarkingManagementService.insertBenchmarkingManagement(benchmarkingManagement));
-    }
-
-    /**
-     * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆�
-     */
-    /*@PreAuthorize("@ss.hasPermi('system:management:add')")
-    @Log(title = "銆愯濉啓鍔熻兘鍚嶇О銆�", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody BenchmarkingManagement benchmarkingManagement)
-    {
-        return toAjax(benchmarkingManagementService.insertBenchmarkingManagement(benchmarkingManagement));
-    }*/
-
-    /**
-     * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆�
-     */
-    @PreAuthorize("@ss.hasPermi('system:management:edit')")
-    @Log(title = "銆愯濉啓鍔熻兘鍚嶇О銆�", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody BenchmarkingManagement benchmarkingManagement)
-    {
-        return toAjax(benchmarkingManagementService.updateBenchmarkingManagement(benchmarkingManagement));
-    }
-
-    /**
-     * 鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆�
-     */
-    @PreAuthorize("@ss.hasPermi('system:management:remove')")
-    @Log(title = "銆愯濉啓鍔熻兘鍚嶇О銆�", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{indexIds}")
-    public AjaxResult remove(@PathVariable String[] indexIds)
-    {
-        return toAjax(benchmarkingManagementService.deleteBenchmarkingManagementByIds(indexIds));
-    }
-
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/controller/PhaseBenchmarkingController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/controller/PhaseBenchmarkingController.java
deleted file mode 100644
index 25848cc..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/controller/PhaseBenchmarkingController.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.dingzhuo.energy.project.benchmarking.controller;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.project.benchmarking.domain.BenchmarkingManagement;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.project.benchmarking.service.IPhaseBenchmarkingService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-
-/**
- * 瀵规爣Controller
- * 
- * @author sys
- * @date 2020-12-22
- */
-@RestController
-@RequestMapping("/benchmarking/phaseBenchmarking")
-public class PhaseBenchmarkingController extends BaseController
-{
-    @Autowired
-    private IPhaseBenchmarkingService phaseBenchmarkingService;
-    @Autowired
-    private IModelNodeService modelNodeService;
-    /**
-     * 鏌ヨ闃舵瀵规爣鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('benchmarking:phaseBenchmarking:list')")
-    @GetMapping("/list")
-    public AjaxResult list(BenchmarkingManagement phaseBenchmarking)
-    {
-        List<BenchmarkingManagement> list = phaseBenchmarkingService.selectPhaseBenchmarkingList(phaseBenchmarking.getIndexId(),phaseBenchmarking.getBeginTime(),phaseBenchmarking.getEndTime(), phaseBenchmarking.getTimeType());
-        return AjaxResult.success(list);
-    }
-    /*瀹炴椂瀵规爣*/
-    @PreAuthorize("@ss.hasPermi('benchmarking:phaseBenchmarking:realTimeListrealTime')")
-    @GetMapping("/realTimeListrealTime")
-    public AjaxResult realTimeListrealTime(BenchmarkingManagement phaseBenchmarking)
-    {
-        List<EnergyIndex> energyList = modelNodeService.getSettingIndex(phaseBenchmarking.getIndexId());
-        List<String> indexCode = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        List<BenchmarkingManagement> list = phaseBenchmarkingService.selectRealTimeListrealTime(indexCode,phaseBenchmarking.getDateTime(), phaseBenchmarking.getTimeType());
-        return AjaxResult.success(list);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/domain/BenchmarkingManagement.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/domain/BenchmarkingManagement.java
deleted file mode 100644
index c8b57c4..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/domain/BenchmarkingManagement.java
+++ /dev/null
@@ -1,200 +0,0 @@
-package com.dingzhuo.energy.project.benchmarking.domain;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 鏍囨潌绠$悊瀵硅薄 benchmarking_management
- * 
- * @author sys
- * @date 2020-12-21
- */
-public class BenchmarkingManagement implements Serializable
-{
-    private static final long serialVersionUID = 1L;
-
-    /** $column.columnComment */
-    @Excel(name = "鎸囨爣ID")
-    private String indexId;
-    @Excel(name = "鎸囨爣code")
-    private String indexCode;
-    @Excel(name = "鎸囨爣鍚嶇О")
-    private String indexName;
-    @Excel(name = "鎸囨爣鍗曚綅")
-    private String unitId;
-
-    /** $column.columnComment */
-    @Excel(name = "鏃ユ湡绫诲瀷")
-    private TimeType timeType;
-
-    /** $column.columnComment */
-    @Excel(name = "鏃ユ湡")
-    private Date dateTime;
-
-    /** $column.columnComment */
-    @Excel(name = "鏍囨潌鍊�")
-    private String value;
-    @Excel(name = "瀹為檯鍊�")
-    private String actualValue;
-    /** $column.columnComment */
-    @Excel(name = "${comment}")
-    private String timeCode;
-    @Excel(name = "鏍囨潌鑼冨洿")
-    private String  benchmarkingRange;
-    @Excel(name = "鏍囨潌绫诲瀷")
-    private String  benchmarkingType;
-    private Date beginTime;
-    private Date endTime;
-    private Date createTime;
-    private Date updateTime;
-    public String getIndexId()
-    {
-        return indexId;
-    }
-    public void setIndexId(String indexId) {
-        this.indexId = indexId;
-    }
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-
-    public String getIndexCode() {
-        return indexCode;
-    }
-
-    public void setIndexCode(String indexCode) {
-        this.indexCode = indexCode;
-    }
-
-    public String getUnitId() {
-        return unitId;
-    }
-
-    public void setUnitId(String unitId) {
-        this.unitId = unitId;
-    }
-
-    public void setTimeType(TimeType timeType)
-    {
-        this.timeType = timeType;
-    }
-
-    public TimeType getTimeType()
-    {
-        return timeType;
-    }
-    public void setDateTime(Date dateTime) 
-    {
-        this.dateTime = dateTime;
-    }
-
-    public Date getDateTime() 
-    {
-        return dateTime;
-    }
-    public void setValue(String value) 
-    {
-        this.value = value;
-    }
-
-    public String getValue() 
-    {
-        return value;
-    }
-
-    public String getActualValue() {
-        return actualValue;
-    }
-
-    public void setActualValue(String actualValue) {
-        this.actualValue = actualValue;
-    }
-
-    public void setTimeCode(String timeCode)
-    {
-        this.timeCode = timeCode;
-    }
-
-    public String getTimeCode() 
-    {
-        return timeCode;
-    }
-
-    public String getBenchmarkingRange() {
-        return benchmarkingRange;
-    }
-
-    public void setBenchmarkingRange(String benchmarkingRange) {
-        this.benchmarkingRange = benchmarkingRange;
-    }
-
-    public String getBenchmarkingType() {
-        return benchmarkingType;
-    }
-
-    public void setBenchmarkingType(String benchmarkingType) {
-        this.benchmarkingType = benchmarkingType;
-    }
-
-
-
-    public Date getBeginTime() {
-        return beginTime;
-    }
-
-    public void setBeginTime(Date beginTime) {
-        this.beginTime = beginTime;
-    }
-
-    public Date getEndTime() {
-        return endTime;
-    }
-
-    public void setEndTime(Date endTime) {
-        this.endTime = endTime;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public Date getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Date updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("indexId", getIndexId())
-            .append("indexName", getIndexName())
-            .append("unitId", getUnitId())
-            .append("timeType", getTimeType())
-            .append("dateTime", getDateTime())
-            .append("value", getValue())
-            .append("actualValue", getActualValue())
-            .append("timeCode", getTimeCode())
-            .append("benchmarkingRange", getBenchmarkingRange())
-            .append("benchmarkingType", getBenchmarkingType())
-            .append("createTime", getCreateTime())
-            .append("updateTime", getUpdateTime())
-            .toString();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/domain/PhaseBenchmarking.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/domain/PhaseBenchmarking.java
deleted file mode 100644
index 4e0f362..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/domain/PhaseBenchmarking.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.dingzhuo.energy.project.benchmarking.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * 瀵规爣瀵硅薄 phase_benchmarking
- * 
- * @author sys
- * @date 2020-12-22
- */
-public class PhaseBenchmarking extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String indexId;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String timeCode;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String timeType;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String value;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private Date dataTime;
-
-    public void setIndexId(String indexId) 
-    {
-        this.indexId = indexId;
-    }
-
-    public String getIndexId() 
-    {
-        return indexId;
-    }
-    public void setTimeCode(String timeCode) 
-    {
-        this.timeCode = timeCode;
-    }
-
-    public String getTimeCode() 
-    {
-        return timeCode;
-    }
-    public void setTimeType(String timeType) 
-    {
-        this.timeType = timeType;
-    }
-
-    public String getTimeType() 
-    {
-        return timeType;
-    }
-    public void setValue(String value) 
-    {
-        this.value = value;
-    }
-
-    public String getValue() 
-    {
-        return value;
-    }
-    public void setDataTime(Date dataTime) 
-    {
-        this.dataTime = dataTime;
-    }
-
-    public Date getDataTime() 
-    {
-        return dataTime;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("indexId", getIndexId())
-            .append("timeCode", getTimeCode())
-            .append("timeType", getTimeType())
-            .append("value", getValue())
-            .append("dataTime", getDataTime())
-            .append("createTime", getCreateTime())
-            .append("updateTime", getUpdateTime())
-            .toString();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/mapper/BenchmarkingManagementMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/mapper/BenchmarkingManagementMapper.java
deleted file mode 100644
index dad8c42..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/mapper/BenchmarkingManagementMapper.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.dingzhuo.energy.project.benchmarking.mapper;
-
-import com.dingzhuo.energy.project.benchmarking.domain.BenchmarkingManagement;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * 鏍囨潌绠$悊Mapper鎺ュ彛
- * 
- * @author sys
- * @date 2020-12-21
- */
-public interface BenchmarkingManagementMapper 
-{
-    /**
-     * 鏌ヨ鏍囨潌绠$悊
-     * 
-     * @param indexId 鏍囨潌绠$悊ID
-     * @return 鏍囨潌绠$悊
-     */
-    public BenchmarkingManagement selectBenchmarkingManagementById(String indexId);
-
-    /**
-     * 鏌ヨ鏍囨潌绠$悊鍒楄〃
-     * 
-     * @param
-     * @return 鏍囨潌绠$悊闆嗗悎
-     */
-    public List<BenchmarkingManagement> selectBenchmarkingManagementList(@Param("indexIds") List<String> indexIds,@Param("timeCode") String timeCode);
-    public List<BenchmarkingManagement> selectBenchmarkingList(@Param("indexIds") List<String> indexIds, BenchmarkingManagement benchmarkingManagement);
-    /**
-     * 鏂板鏍囨潌绠$悊
-     * 
-     * @param benchmarkingManagement 鏍囨潌绠$悊
-     * @return 缁撴灉
-     */
-    public int insertBenchmarkingManagement(BenchmarkingManagement benchmarkingManagement);
-
-    /**
-     * 淇敼鏍囨潌绠$悊
-     * 
-     * @param benchmarkingManagement 鏍囨潌绠$悊
-     * @return 缁撴灉
-     */
-    public int updateBenchmarkingManagement(BenchmarkingManagement benchmarkingManagement);
-
-    /**
-     * 鍒犻櫎鏍囨潌绠$悊
-     * 
-     * @param indexId 鏍囨潌绠$悊ID
-     * @return 缁撴灉
-     */
-    public int deleteBenchmarkingManagementById(String indexId);
-
-    /**
-     * 鎵归噺鍒犻櫎鏍囨潌绠$悊
-     * 
-     * @param indexIds 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteBenchmarkingManagementByIds(String[] indexIds);
-
-    void save(@Param("benchmarkingManagement") BenchmarkingManagement benchmarkingManagement);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/mapper/PhaseBenchmarkingMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/mapper/PhaseBenchmarkingMapper.java
deleted file mode 100644
index 05c1979..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/mapper/PhaseBenchmarkingMapper.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.dingzhuo.energy.project.benchmarking.mapper;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.benchmarking.domain.BenchmarkingManagement;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 瀵规爣Mapper鎺ュ彛
- * 
- * @author sys
- * @date 2020-12-22
- */
-public interface PhaseBenchmarkingMapper 
-{
-    /**
-     * 鏌ヨ瀵规爣鍒楄〃
-     * 
-     * @param
-     * @return 瀵规爣闆嗗悎
-     */
-    public List<BenchmarkingManagement> selectPhaseBenchmarkingList(@Param("indexId") String indexIds,@Param("beginTime") Date beginTime,
-                                                                    @Param("endTime") Date endTime,@Param("timeType") TimeType timeType);
-    public List<BenchmarkingManagement> selectRealTimeListrealTime(@Param("indexIds") List<String> indexIds, @Param("timeCode") String timeCode);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/service/IBenchmarkingManagementService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/service/IBenchmarkingManagementService.java
deleted file mode 100644
index 15ab2db..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/service/IBenchmarkingManagementService.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.dingzhuo.energy.project.benchmarking.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.benchmarking.domain.BenchmarkingManagement;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 鏍囨潌绠$悊Service鎺ュ彛
- * 
- * @author sys
- * @date 2020-12-21
- */
-public interface IBenchmarkingManagementService 
-{
-    /**
-     * 鏌ヨ鏍囨潌绠$悊
-     * 
-     * @param indexId 鏍囨潌绠$悊ID
-     * @return 鏍囨潌绠$悊
-     */
-    public BenchmarkingManagement selectBenchmarkingManagementById(String indexId);
-
-    /**
-     * 鏌ヨ鏍囨潌绠$悊鍒楄〃
-     * 
-     * @param
-     * @return 鏍囨潌绠$悊闆嗗悎
-     */
-    public List<BenchmarkingManagement> selectBenchmarkingManagementList(List<String> indexIds, Date dateTime,TimeType timeType);
-    public List<BenchmarkingManagement> selectBenchmarkingList(List<String> indexIds,BenchmarkingManagement benchmarkingManagement);
-    /**
-     * 鏂板鏍囨潌绠$悊
-     * 
-     * @param benchmarkingManagement 鏍囨潌绠$悊
-     * @return 缁撴灉
-     */
-    public int insertBenchmarkingManagement(BenchmarkingManagement benchmarkingManagement);
-    public void save(List<BenchmarkingManagement> datas);
-    /**
-     * 淇敼鏍囨潌绠$悊
-     * 
-     * @param benchmarkingManagement 鏍囨潌绠$悊
-     * @return 缁撴灉
-     */
-    public int updateBenchmarkingManagement(BenchmarkingManagement benchmarkingManagement);
-
-    /**
-     * 鎵归噺鍒犻櫎鏍囨潌绠$悊
-     * 
-     * @param indexIds 闇�瑕佸垹闄ょ殑鏍囨潌绠$悊ID
-     * @return 缁撴灉
-     */
-    public int deleteBenchmarkingManagementByIds(String[] indexIds);
-
-    /**
-     * 鍒犻櫎鏍囨潌绠$悊淇℃伅
-     * 
-     * @param indexId 鏍囨潌绠$悊ID
-     * @return 缁撴灉
-     */
-    public int deleteBenchmarkingManagementById(String indexId);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/service/IPhaseBenchmarkingService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/service/IPhaseBenchmarkingService.java
deleted file mode 100644
index 6d63375..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/service/IPhaseBenchmarkingService.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.dingzhuo.energy.project.benchmarking.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.benchmarking.domain.BenchmarkingManagement;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 瀵规爣Service鎺ュ彛
- * 
- * @author sys
- * @date 2020-12-22
- */
-public interface IPhaseBenchmarkingService 
-{
-
-    /**
-     * 鏌ヨ瀵规爣鍒楄〃
-     * 
-     * @param
-     * @return 瀵规爣闆嗗悎
-     */
-    public List<BenchmarkingManagement> selectPhaseBenchmarkingList(String indexId, Date beginTime,Date endTime, TimeType timeType);
-    public List<BenchmarkingManagement> selectRealTimeListrealTime(List<String> indexIds, Date dateTime, TimeType timeType);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/service/impl/BenchmarkingManagementServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/service/impl/BenchmarkingManagementServiceImpl.java
deleted file mode 100644
index a667f0e..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/service/impl/BenchmarkingManagementServiceImpl.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package com.dingzhuo.energy.project.benchmarking.service.impl;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.project.benchmarking.mapper.BenchmarkingManagementMapper;
-import com.dingzhuo.energy.project.benchmarking.domain.BenchmarkingManagement;
-import com.dingzhuo.energy.project.benchmarking.service.IBenchmarkingManagementService;
-
-/**
- * 鏍囨潌绠$悊Service涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-12-21
- */
-@Service
-public class BenchmarkingManagementServiceImpl implements IBenchmarkingManagementService 
-{
-    private Logger logger = LogManager.getLogger(BenchmarkingManagementServiceImpl.class);
-    @Autowired
-    private BenchmarkingManagementMapper benchmarkingManagementMapper;
-
-    /**
-     * 鏌ヨ鏍囨潌绠$悊
-     * 
-     * @param indexId 鏍囨潌绠$悊ID
-     * @return 鏍囨潌绠$悊
-     */
-    @Override
-    public BenchmarkingManagement selectBenchmarkingManagementById(String indexId)
-    {
-        return benchmarkingManagementMapper.selectBenchmarkingManagementById(indexId);
-    }
-    @Override
-    public List<BenchmarkingManagement> selectBenchmarkingList(List<String> indexIds,BenchmarkingManagement benchmarkingManagement)
-    {
-        if (indexIds.size() !=0) {
-            return benchmarkingManagementMapper.selectBenchmarkingList(indexIds,benchmarkingManagement);
-        }
-        return Collections.emptyList();
-    }
-    /**
-     * 鏌ヨ鏍囨潌绠$悊鍒楄〃
-     * 
-     * @param
-     * @return 鏍囨潌绠$悊
-     */
-    @Override
-    public List<BenchmarkingManagement> selectBenchmarkingManagementList(List<String> indexIds, Date dateTime, TimeType timeType)
-    {
-        if (indexIds.size() !=0) {
-            String timeCode = TimeManager.getTimeCode(dateTime, timeType);
-            return  benchmarkingManagementMapper.selectBenchmarkingManagementList(indexIds,timeCode);
-        }
-        return Collections.emptyList();
-    }
-
-    /**
-     * 鏂板鏍囨潌绠$悊
-     * 
-     * @param benchmarkingManagement 鏍囨潌绠$悊
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertBenchmarkingManagement(BenchmarkingManagement benchmarkingManagement)
-    {
-        benchmarkingManagement.setCreateTime(DateUtils.getNowDate());
-        return benchmarkingManagementMapper.insertBenchmarkingManagement(benchmarkingManagement);
-    }
-
-    @Override
-    public void save(List<BenchmarkingManagement> datas) {
-        List<List<BenchmarkingManagement>> splitDatas = splitList(datas, 100);
-        if (splitDatas != null) {
-            splitDatas.parallelStream().forEach(dataPart -> {
-                dataPart.parallelStream().forEach(dataItem -> {
-                    try {
-                        benchmarkingManagementMapper.save(dataItem);
-                    } catch (Exception singleEx) {
-                        logger.error("鍗曚釜鎸囨爣鏁版嵁淇濆瓨澶辫触锛併��" + dataItem + "銆�", singleEx);
-                    }
-                });
-            });
-        }
-    }
-    /**
-     * 淇敼鏍囨潌绠$悊
-     * 
-     * @param benchmarkingManagement 鏍囨潌绠$悊
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateBenchmarkingManagement(BenchmarkingManagement benchmarkingManagement)
-    {
-        benchmarkingManagement.setUpdateTime(DateUtils.getNowDate());
-        return benchmarkingManagementMapper.updateBenchmarkingManagement(benchmarkingManagement);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鏍囨潌绠$悊
-     * 
-     * @param indexIds 闇�瑕佸垹闄ょ殑鏍囨潌绠$悊ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteBenchmarkingManagementByIds(String[] indexIds)
-    {
-        return benchmarkingManagementMapper.deleteBenchmarkingManagementByIds(indexIds);
-    }
-
-    /**
-     * 鍒犻櫎鏍囨潌绠$悊淇℃伅
-     * 
-     * @param indexId 鏍囨潌绠$悊ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteBenchmarkingManagementById(String indexId)
-    {
-        return benchmarkingManagementMapper.deleteBenchmarkingManagementById(indexId);
-    }
-    public static <E> List<List<E>> splitList(List<E> targetList, Integer splitSize) {
-        if (targetList == null) {
-            return Collections.emptyList();
-        }
-
-        int size = targetList.size();
-        List<List<E>> resultList = new ArrayList<>();
-        if (size <= splitSize) {
-            resultList.add(targetList);
-        } else {
-            for (int i = 0; i < size; i += splitSize) {
-                //鐢ㄤ簬闄愬埗鏈�鍚庝竴閮ㄥ垎size灏忎簬splitSize鐨刲ist
-                int limit = i + splitSize;
-                if (limit > size) {
-                    limit = size;
-                }
-                resultList.add(targetList.subList(i, limit));
-            }
-        }
-        return resultList;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/service/impl/PhaseBenchmarkingServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/service/impl/PhaseBenchmarkingServiceImpl.java
deleted file mode 100644
index b81c761..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/benchmarking/service/impl/PhaseBenchmarkingServiceImpl.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.dingzhuo.energy.project.benchmarking.service.impl;
-
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.benchmarking.domain.BenchmarkingManagement;
-import org.apache.ibatis.annotations.Param;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.project.benchmarking.mapper.PhaseBenchmarkingMapper;
-import com.dingzhuo.energy.project.benchmarking.service.IPhaseBenchmarkingService;
-
-/**
- * 瀵规爣Service涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-12-22
- */
-@Service
-public class PhaseBenchmarkingServiceImpl implements IPhaseBenchmarkingService 
-{
-    @Autowired
-    private PhaseBenchmarkingMapper phaseBenchmarkingMapper;
-
-    /**
-     * 鏌ヨ瀵规爣鍒楄〃
-     * 
-     * @param
-     * @return 瀵规爣
-     */
-    @Override
-    public List<BenchmarkingManagement> selectPhaseBenchmarkingList(String indexId,Date beginTime, Date endTime, TimeType timeType)
-    {
-        return phaseBenchmarkingMapper.selectPhaseBenchmarkingList(indexId,beginTime,endTime,timeType);
-    }
-    @Override
-    public List<BenchmarkingManagement> selectRealTimeListrealTime(List<String> indexIds, Date dateTime, TimeType timeType)
-    {
-        if (indexIds.size() !=0) {
-            String timeCode = TimeManager.getTimeCode(dateTime, timeType);
-            return phaseBenchmarkingMapper.selectRealTimeListrealTime(indexIds,timeCode);
-        }
-        return Collections.emptyList();
-
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/CommonConst.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/CommonConst.java
deleted file mode 100644
index ea4a93d..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/CommonConst.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package com.dingzhuo.energy.project.common;
-
-/**
- * @Description: 甯搁噺灏佽
- * @author: yxw
- * @date: 2022骞�02鏈�02鏃� 11:37
- */
-public class CommonConst {
-    /**
-     * 甯搁噺瀛楃涓� - 绌哄瓧绗︿覆
-     */
-    public static final String EMPTY = "";
-    /**
-     * 鍙屽噺鍙�
-     */
-    public static final String DOUBLE_MINUS_SIGN = "--";
-    /**
-     * 鐧惧垎姣�
-     */
-    public static final String PERCENTAGE = "%";
-    /**
-     * 娓╁害
-     */
-    public static final String UNIT_TEMPERATURE = "掳";
-    /**
-     * 瀛楃涓叉暟瀛� 0
-     */
-    public static final String STR_NUMBER_0 = "0";
-    /**
-     * 瀛楃涓叉暟瀛� 1
-     */
-    public static final String STR_NUMBER_1 = "1";
-    /**
-     * 瀛楃涓叉暟瀛� 2
-     */
-    public static final String STR_NUMBER_2 = "2";
-    /**
-     * 瀛楃涓叉暟瀛� 3
-     */
-    public static final String STR_NUMBER_3 = "3";
-    /**
-     * 瀛楃涓叉暟瀛� 4
-     */
-    public static final String STR_NUMBER_4 = "4";
-    /**
-     * 瀛楃涓叉暟瀛� 5
-     */
-    public static final String STR_NUMBER_5 = "5";
-    /**
-     * 瀛楃涓叉暟瀛� 6
-     */
-    public static final String STR_NUMBER_6 = "6";
-    /**
-     * 瀛楃涓叉暟瀛� 7
-     */
-    public static final String STR_NUMBER_7 = "7";
-    /**
-     * 瀛楃涓叉暟瀛� 8
-     */
-    public static final String STR_NUMBER_8 = "8";
-    /**
-     * 瀛楃涓叉暟瀛� 9
-     */
-    public static final String STR_NUMBER_9 = "9";
-    /**
-     * 瀛楃涓叉暟瀛� 10
-     */
-    public static final String STR_NUMBER_10 = "10";
-    /**
-     * 瀛楃涓叉暟瀛� 11
-     */
-    public static final String STR_NUMBER_11 = "11";
-    /**
-     * 瀛楃涓叉暟瀛� 12
-     */
-    public static final String STR_NUMBER_12 = "12";
-    /**
-     * 澶у啓瀛楁瘝 M
-     */
-    public static final String WORD_M = "M";
-    /**
-     * 澶у啓瀛楁瘝 Y
-     */
-    public static final String WORD_Y = "Y";
-    /**
-     * 澶у啓瀛楁瘝 D
-     */
-    public static final String WORD_D = "D";
-    /**
-     * 鏁板瓧 0
-     */
-    public static final int DIGIT_0 = 0;
-    /**
-     * 鏁板瓧 1
-     */
-    public static final int DIGIT_1 = 1;
-    /**
-     * 鏁板瓧 2
-     */
-    public static final int DIGIT_2 = 2;
-    /**
-     * 鏁板瓧 3
-     */
-    public static final int DIGIT_3 = 3;
-    /**
-     * 鏁板瓧 4
-     */
-    public static final int DIGIT_4 = 4;
-    /**
-     * 鏁板瓧 100
-     */
-    public static final int DIGIT_100 = 100;
-    /**
-     * 鏁板瓧 1000
-     */
-    public static final int DIGIT_1000 = 1000;
-    /**
-     * 鏁板瓧 -1
-     */
-    public static final int DIGIT_MINUS_1 = -1;
-    /**
-     * 鏁板瓧 -3
-     */
-    public static final int DIGIT_MINUS_3 = -3;
-    /**
-     * 璁$畻鐐硅瘑鍒鍒� 绱Н閲�
-     */
-    public static final String COMMON_STR_CALC_POINT_RULE_LJL = "_LJL";
-    /**
-     * 璁$畻鐐硅瘑鍒鍒� 缁煎悎鑳借��
-     */
-    public static final String COMMON_STR_CALC_POINT_RULE_ZHNH = "_ZHNH";
-    /**
-     * 璁$畻鐐硅瘑鍒鍒� 鑳芥簮浠锋牸
-     */
-    public static final String COMMON_STR_CALC_POINT_RULE_NYJG = "_NYJG";
-    /**
-     * 鏃堕棿绫诲瀷瀛楃涓� - 澶�
-     */
-    public static final String TIME_TYPE_DAY = "DAY";
-    /**
-     * 閲嶇畻鎺ュ彛鍦板潃
-     */
-    public static final String RE_CALC_INTERFACE_ADDRESS = "http://127.0.0.1:8999/computing/recalc";
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/DateTimeUtil.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/DateTimeUtil.java
deleted file mode 100644
index 1593d17..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/DateTimeUtil.java
+++ /dev/null
@@ -1,399 +0,0 @@
-package com.dingzhuo.energy.project.common;
-
-import cn.hutool.core.date.DateTime;
-
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-
-/**
- * @Description: 鏃堕棿宸ュ叿绫�
- * @author: yxw
- * @date: 2022骞�02鏈�02鏃� 12:23
- */
-public class DateTimeUtil {
-    /**
-     * 鏃ユ湡甯哥敤鏍煎紡
-     */
-    public static final String COMMON_PATTERN = "yyyy-MM-dd HH:mm:ss";
-    /**
-     * 鏃ユ湡甯哥敤鏍煎紡 - 骞翠唤
-     */
-    public static final String COMMON_PATTERN_YEAR = "yyyy";
-    /**
-     * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堜唤
-     */
-    public static final String COMMON_PATTERN_MONTH = "yyyyMM";
-    /**
-     * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堜唤
-     */
-    public static final String COMMON_PATTERN_TO_MONTH = "yyyy-MM";
-    /**
-     * 鏃ユ湡甯哥敤鏍煎紡 - 澶�
-     */
-    public static final String COMMON_PATTERN_DAY = "yyyyMMdd";
-    /**
-     * 鏃ユ湡甯哥敤鏍煎紡 - 澶�
-     */
-    public static final String COMMON_PATTERN_TO_DAY = "yyyy-MM-dd";
-    /**
-     * 鏃ユ湡甯哥敤鏍煎紡 - 澶╂煇涓�澶�,
-     */
-    public static final String COMMON_PATTERN_DAY_OF_MONTH = "dd";
-    /**
-     * 鏃ユ湡甯哥敤鏍煎紡 - 灏忔椂
-     */
-    public static final String COMMON_PATTERN_HOUR = "yyyyMMddHH";
-    /**
-     * 鏃ユ湡甯哥敤鏍煎紡 - 灏忔椂
-     */
-    public static final String COMMON_PATTERN_TO_HOUR = "yyyy-MM-dd HH";
-
-    /**
-     * 鑾峰彇褰撳墠鏃堕棿,鏃堕棿鏍煎紡锛歽yyy-MM-dd HH:mm:ss
-     *
-     * @return
-     */
-    public static String getNowDateTime() {
-        return getNowDateTime(COMMON_PATTERN);
-    }
-
-    /**
-     * 鑾峰彇褰撳墠鏃堕棿
-     *
-     * @param pattern 鏃堕棿鏍煎紡
-     * @return
-     */
-    public static String getNowDateTime(String pattern) {
-        //璁剧疆鏃ユ湡鏍煎紡
-        SimpleDateFormat df = new SimpleDateFormat(pattern);
-        String dateTime = df.format(new Date());
-        return dateTime;
-    }
-
-    /**
-     * 鑾峰彇浠婂勾鐨勫勾浠藉��
-     *
-     * @return
-     */
-    public static String getNowYear() {
-        return getNowDateTime(COMMON_PATTERN_YEAR);
-    }
-
-    /**
-     * 鑾峰彇浠婂勾鐨勬湀浠藉��
-     *
-     * @return
-     */
-    public static String getNowMonth() {
-        return getNowDateTime(COMMON_PATTERN_MONTH);
-    }
-
-    /**
-     * 瀛楃涓茶浆鎴愭椂闂寸被鍨�,榛樿鏍煎紡锛歽yyy-MM-dd HH:mm:ss
-     *
-     * @param dateTimeStr
-     * @return
-     */
-    public static Date toDateTime(String dateTimeStr) {
-        DateTime dt = null;
-        try {
-            dt = DateTime.of(dateTimeStr, COMMON_PATTERN);
-        } catch (Exception e) {
-
-        }
-        return dt;
-    }
-
-    /**
-     * 瀛楃涓茶浆鎴愭椂闂寸被鍨�
-     *
-     * @param dateTimeStr
-     * @return
-     */
-    public static Date toDateTime(String dateTimeStr, String pattern) {
-        DateTime dt = null;
-        try {
-            dt = DateTime.of(dateTimeStr, pattern);
-        } catch (Exception e) {
-
-        }
-        return dt;
-    }
-
-    /**
-     * 瀛楃涓茶浆鎴愮壒瀹氭牸寮忕殑鏃堕棿瀛楃涓茬被鍨�
-     *
-     * @param dateTimeStr   鏃堕棿瀛楃涓�
-     * @param sourcePattern 瀛楃涓叉椂闂存牸寮�
-     * @param toPattern     瑕佽浆鎴愪粈涔堟牸寮忕殑鏃堕棿
-     * @return
-     */
-    public static String toDateTimeStr(String dateTimeStr, String sourcePattern, String toPattern) {
-        String str = CommonConst.EMPTY;
-        try {
-            DateTime dt = DateTime.of(dateTimeStr, sourcePattern);
-            str = getDateTime(dt, toPattern);
-        } catch (Exception e) {
-
-        }
-        return str;
-    }
-
-    /**
-     * 鏃堕棿杞垚鎸囧畾鏍煎紡鐨勫瓧绗︿覆
-     *
-     * @param pattern 鏃堕棿鏍煎紡
-     * @return
-     */
-    public static String getDateTime(Date dt, String pattern) {
-        if (dt == null) {
-            return CommonConst.EMPTY;
-        }
-        //璁剧疆鏃ユ湡鏍煎紡
-        SimpleDateFormat df = new SimpleDateFormat(pattern);
-        return df.format(dt);
-    }
-
-    /**
-     * 鏍规嵁瀛楃涓蹭互鍙婃椂闂寸被鍨嬭幏鍙栨椂闂村��
-     *
-     * @param dateTime
-     * @param timeType
-     * @return
-     */
-    public static String getDateTimeStrWithTimeType(Date dateTime, String timeType) {
-        String str = CommonConst.EMPTY;
-        switch (timeType) {
-            case TimeTypeConst.TIME_TYPE_HOUR:
-                str = getDateTime(dateTime, COMMON_PATTERN_TO_HOUR);
-                break;
-            case TimeTypeConst.TIME_TYPE_DAY:
-                str = getDateTime(dateTime, COMMON_PATTERN_TO_DAY);
-                break;
-            case TimeTypeConst.TIME_TYPE_MONTH:
-                str = getDateTime(dateTime, COMMON_PATTERN_TO_MONTH);
-                break;
-            case TimeTypeConst.TIME_TYPE_YEAR:
-                str = getDateTime(dateTime, COMMON_PATTERN_YEAR);
-                break;
-            default:
-                break;
-        }
-        return str;
-    }
-
-    /**
-     * 鏍规嵁瀛楃涓蹭互鍙婃椂闂存牸寮忚幏鍙栨椂闂村��
-     *
-     * @param dateTimeStr
-     * @param timeType
-     * @return
-     */
-    public static Date getDateTimeWithTimeType(String dateTimeStr, String timeType) {
-        Date dt = null;
-        switch (timeType) {
-            case TimeTypeConst.TIME_TYPE_HOUR:
-                dt = toDateTime(dateTimeStr, COMMON_PATTERN_TO_HOUR);
-                break;
-            case TimeTypeConst.TIME_TYPE_DAY:
-                dt = toDateTime(dateTimeStr, COMMON_PATTERN_TO_DAY);
-                break;
-            case TimeTypeConst.TIME_TYPE_MONTH:
-                dt = toDateTime(dateTimeStr, COMMON_PATTERN_TO_MONTH);
-                break;
-            case TimeTypeConst.TIME_TYPE_YEAR:
-                dt = toDateTime(dateTimeStr, COMMON_PATTERN_YEAR);
-                break;
-            default:
-                break;
-        }
-        return dt;
-    }
-
-    /**
-     * 鏍规嵁瀛楃涓蹭互鍙婃椂闂存牸绫诲瀷鑾峰彇鏃堕棿鍊�
-     *
-     * @param dateTime
-     * @param timeType
-     * @return
-     */
-    public static Date getEndTimeWithTimeType(Date dateTime, String timeType) {
-        Date dt = null;
-        switch (timeType) {
-            case TimeTypeConst.TIME_TYPE_HOUR:
-                dt = addSeconds(addHours(dateTime, CommonConst.DIGIT_1), CommonConst.DIGIT_MINUS_1);
-                break;
-            case TimeTypeConst.TIME_TYPE_DAY:
-                dt = addSeconds(addDays(dateTime, CommonConst.DIGIT_1), CommonConst.DIGIT_MINUS_1);
-                break;
-            case TimeTypeConst.TIME_TYPE_MONTH:
-                dt = addSeconds(addMonths(dateTime, CommonConst.DIGIT_1), CommonConst.DIGIT_MINUS_1);
-                break;
-            case TimeTypeConst.TIME_TYPE_YEAR:
-                dt = addSeconds(addYears(dateTime, CommonConst.DIGIT_1), CommonConst.DIGIT_MINUS_1);
-                break;
-            default:
-                break;
-        }
-        return dt;
-    }
-
-    /**
-     * 鑾峰彇褰撳墠鏃堕棿鎵�灞炴湀浠界殑鏈�鍚庝竴澶�
-     *
-     * @return
-     */
-    public static int getDateTimeLastDay(Date dt) {
-        String month = getMonth(dt);
-        String firstDate = month + "01";
-        Date nextMonthFirstDate = addMonths(toDateTime(firstDate, COMMON_PATTERN_DAY), CommonConst.DIGIT_1);
-        Date currentMonthLastDate = addDays(nextMonthFirstDate, CommonConst.DIGIT_MINUS_1);
-        int day = IntegerUtil.toInt(getDateTime(currentMonthLastDate, COMMON_PATTERN_DAY_OF_MONTH));
-        return day;
-    }
-
-    /**
-     * 鑾峰彇骞翠唤鍊�
-     *
-     * @return
-     */
-    public static String getYear(Date dt) {
-        return getDateTime(dt, COMMON_PATTERN_YEAR);
-    }
-
-    /**
-     * 鑾峰彇鏈堜唤鍊� 202202
-     *
-     * @return
-     */
-    public static String getMonth(Date dt) {
-        return getDateTime(dt, COMMON_PATTERN_MONTH);
-    }
-
-    /**
-     * 鑾峰彇澶�
-     *
-     * @return
-     */
-    public static String getDay(Date dt) {
-        return getDateTime(dt, COMMON_PATTERN_DAY);
-    }
-
-    /**
-     * 鑾峰彇灏忔椂
-     *
-     * @return
-     */
-    public static String getHour(Date dt) {
-        return getDateTime(dt, COMMON_PATTERN_HOUR);
-    }
-
-    /**
-     * 杞垚瀛楃涓茬被鍨嬪��
-     *
-     * @return
-     */
-    public static String toString(Date dt) {
-        if (dt == null) {
-            return CommonConst.EMPTY;
-        }
-        return getDateTime(dt, COMMON_PATTERN);
-    }
-
-    /**
-     * 鏃堕棿澧炲姞瀵瑰簲鐨勫勾鏁�
-     *
-     * @param dateTime
-     * @param years
-     * @return
-     */
-    public static Date addYears(Date dateTime, int years) {
-        return calcDate(dateTime, years, Calendar.YEAR);
-    }
-
-    /**
-     * 鏃堕棿澧炲姞瀵瑰簲鐨勬湀鏁�
-     *
-     * @param dateTime
-     * @param months
-     * @return
-     */
-    public static Date addMonths(Date dateTime, int months) {
-        return calcDate(dateTime, months, Calendar.MONTH);
-    }
-
-    /**
-     * 鏃堕棿澧炲姞瀵瑰簲鐨勫ぉ鏁�
-     *
-     * @param dateTime
-     * @param days
-     * @return
-     */
-    public static Date addDays(Date dateTime, int days) {
-        return calcDate(dateTime, days, Calendar.DATE);
-    }
-
-    /**
-     * 鏃堕棿澧炲姞瀵瑰簲鐨勫皬鏃舵暟
-     *
-     * @param dateTime
-     * @param hours
-     * @return
-     */
-    public static Date addHours(Date dateTime, int hours) {
-        return calcDate(dateTime, hours, Calendar.HOUR);
-    }
-
-    /**
-     * 鏃堕棿澧炲姞瀵瑰簲鐨勫垎閽熸暟
-     *
-     * @param dateTime
-     * @param minutes
-     * @return
-     */
-    public static Date addMinutes(Date dateTime, int minutes) {
-        return calcDate(dateTime, minutes, Calendar.MINUTE);
-    }
-
-    /**
-     * 鏃堕棿澧炲姞瀵瑰簲鐨勭鏁�
-     *
-     * @param dateTime
-     * @param seconds
-     * @return
-     */
-    public static Date addSeconds(Date dateTime, int seconds) {
-        return calcDate(dateTime, seconds, Calendar.SECOND);
-    }
-
-    /**
-     * 璁$畻鏃ユ湡閫氱敤鏂规硶
-     *
-     * @param dateTime
-     * @param value
-     * @param calendarType 璁$畻绫诲瀷锛欳alendar.YEAR锛孋alendar.MONTH,Calendar.DAY
-     * @return
-     */
-    public static Date calcDate(Date dateTime, int value, int calendarType) {
-        Date dt = null;
-        try {
-            if (dateTime == null) {
-                return dt;
-            }
-            Calendar calendar = new GregorianCalendar();
-            calendar.setTime(dateTime);
-            //鎶婃棩鏈熷線鍚庡鍔犱竴骞达紝鏁存暟寰�鍚庢帹锛岃礋鏁板線鍓嶇Щ
-            calendar.add(calendarType, value);
-            // 鑾峰彇鐩稿姞鎴栬�呯浉鍑忎箣鍚庣殑鏃堕棿鍊�
-            Date tempDt = calendar.getTime();
-            // 鎶婃椂闂磋浆鎴愭墍闇�瑕佺殑鏍煎紡
-            String temp = getDateTime(tempDt, COMMON_PATTERN);
-            dt = toDateTime(temp);
-        } catch (Exception e) {
-
-        }
-        return dt;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/DoubleUtil.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/DoubleUtil.java
deleted file mode 100644
index 65caa6e..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/DoubleUtil.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package com.dingzhuo.energy.project.common;
-
-/**
- * @Description: 鏁板瓧宸ュ叿绫�
- * @author: yxw
- * @date: 2022骞�02鏈�07鏃� 15:03
- */
-public class DoubleUtil {
-    public static double toDouble(String str) {
-        double d = 0;
-        try {
-            d = Double.parseDouble(str);
-        } catch (Exception e) {
-            d = 0;
-        }
-        return d;
-    }
-
-    /**
-     * long 杞垚 double绫诲瀷
-     *
-     * @param l
-     * @return
-     */
-    public static double toDouble(long l) {
-        return toDouble(l + "");
-    }
-
-    /**
-     * int 杞垚 double绫诲瀷
-     *
-     * @param i
-     * @return
-     */
-    public static double toDouble(int i) {
-        return toDouble(i + "");
-    }
-
-
-    /**
-     * 鏍煎紡鍖栧皬鏁颁负鎸囧畾浣嶆暟鐨勫皬鏁板瓧绗︿覆
-     *
-     * @param value
-     * @return
-     */
-    public static String formatDoubleToStr(double value, int format) {
-        String str = String.format("%." + format + "f", value).toString();
-        return str;
-    }
-
-    /**
-     * 鏍煎紡鍖栧皬鏁颁负鎸囧畾浣嶆暟鐨勫皬鏁板瓧绗︿覆,榛樿鏍煎紡鍖栦负2浣嶅皬鏁�
-     *
-     * @param value
-     * @return
-     */
-    public static String formatDoubleToStr(double value) {
-        return formatDoubleToStr(value, 2);
-    }
-
-    /**
-     * 鏍煎紡鍖栧皬鏁颁负鎸囧畾浣嶆暟鐨勫皬鏁�
-     *
-     * @param value
-     * @param format
-     * @return
-     */
-    public static double formatDouble(double value, int format) {
-        String str = formatDoubleToStr(value, format);
-        return toDouble(str);
-    }
-
-    /**
-     * 鏍煎紡鍖栧皬鏁颁负2浣嶆暟鐨勫皬鏁�
-     *
-     * @param value
-     * @return
-     */
-    public static double formatDouble(double value) {
-        return formatDouble(value, 2);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/HttpClientUtil.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/HttpClientUtil.java
deleted file mode 100644
index 4c77ccc..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/HttpClientUtil.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.dingzhuo.energy.project.common;
-
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpStatus;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.entity.ContentType;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.util.EntityUtils;
-
-/**
- * @Description: http璇锋眰宸ュ叿绫�
- * @author: yxw
- * @date: 2022骞�03鏈�18鏃� 17:39
- */
-public class HttpClientUtil {
-    public static String doGet(String url, String param, String authorization) {
-        String charset = "UTF-8";
-        String body = "";
-        try {
-            // 鍙傝�冭祫鏂欙細https://blog.csdn.net/weixin_44146379/article/details/109809386
-            //鍒涘缓httpclient瀵硅薄
-            CloseableHttpClient client = HttpClients.createDefault();
-            HttpGetWithEntity httpGetWithEntity = new HttpGetWithEntity(url);
-            HttpEntity httpEntity = new StringEntity(param, ContentType.APPLICATION_JSON);
-            httpGetWithEntity.setEntity(httpEntity);
-            httpGetWithEntity.setHeader("Authorization", authorization);
-            //鎵ц璇锋眰鎿嶄綔锛屽苟鎷垮埌缁撴灉锛堝悓姝ラ樆濉烇級
-            CloseableHttpResponse response = client.execute(httpGetWithEntity);
-            //鑾峰彇缁撴灉瀹炰綋
-            HttpEntity entity = response.getEntity();
-            if (entity != null) {
-                //鎸夋寚瀹氱紪鐮佽浆鎹㈢粨鏋滃疄浣撲负String绫诲瀷
-                body = EntityUtils.toString(entity, charset);
-            }
-            //閲婃斁閾炬帴
-            response.close();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return body;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/HttpGetWithEntity.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/HttpGetWithEntity.java
deleted file mode 100644
index 22cfa54..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/HttpGetWithEntity.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.dingzhuo.energy.project.common;
-
-import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
-
-import java.net.URI;
-
-/**
- * @Description: TODO
- * @author: yxw
- * @date: 2022骞�03鏈�18鏃� 18:23
- */
-public class HttpGetWithEntity extends HttpEntityEnclosingRequestBase {
-    public final static String METHOD_NAME = "GET";
-
-    public HttpGetWithEntity() {
-        super();
-    }
-
-    public HttpGetWithEntity(final URI uri) {
-        super();
-        setURI(uri);
-    }
-
-    public HttpGetWithEntity(final String uri) {
-        super();
-        setURI(URI.create(uri));
-    }
-
-    @Override
-    public String getMethod() {
-        // TODO Auto-generated method stub
-        return METHOD_NAME;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/IntegerUtil.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/IntegerUtil.java
deleted file mode 100644
index 3d15fae..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/IntegerUtil.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.dingzhuo.energy.project.common;
-
-/**
- * @Description: 鏁存暟鐩稿叧宸ュ叿绫�
- * @author: yxw
- * @date: 2022骞�03鏈�10鏃� 17:31
- */
-public class IntegerUtil {
-    /**
-     * 瀛楃涓茶浆鎴恑nt绫诲瀷
-     *
-     * @param str
-     * @return
-     */
-    public static int toInt(String str) {
-        int d = 0;
-        try {
-            d = Integer.parseInt(str);
-        } catch (Exception e) {
-            d = 0;
-        }
-        return d;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/StringUtil.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/StringUtil.java
deleted file mode 100644
index 0fa2913..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/StringUtil.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.dingzhuo.energy.project.common;
-
-import com.alibaba.fastjson.JSONObject;
-
-/**
- * @Description: 瀛楃涓插伐鍏风被
- * @author: yxw
- * @date: 2022骞�02鏈�02鏃� 12:27
- */
-public class StringUtil {
-    /**
-     * 鍒ゆ柇瀛楃涓叉槸鍚︿负绌哄瓧绗︿覆鎴栬�匩ull
-     *
-     * @param str 闇�瑕佸垽鏂殑瀛楃涓�
-     * @return
-     */
-    public static boolean isEmptyOrNull(String str) {
-        if (str == null || CommonConst.EMPTY.equals(str)) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * 瀛楃涓插鏋滀负绌哄瓧绗︿覆鎴栬�匩ull杩斿洖绌哄瓧绗︿覆锛屽惁鍒欒繑鍥炲瓧绗︿覆鏈韩鐨勫��
-     *
-     * @param str
-     * @return
-     */
-    public static String ifEmptyOrNullReturnValue(String str) {
-        if (isEmptyOrNull(str)) {
-            return CommonConst.EMPTY;
-        }
-        return str;
-    }
-
-    /**
-     * 瀵硅薄杞垚json瀛楃涓�
-     *
-     * @param obj
-     * @return
-     */
-    public static String toJson(Object obj) {
-        return JSONObject.toJSONString(obj);
-    }
-
-    /**
-     * 瀵硅薄杞垚JSONObject
-     *
-     * @param obj
-     * @return
-     */
-    public static JSONObject toJsonObject(Object obj) {
-        return JSONObject.parseObject(toJson(obj));
-    }
-
-    /**
-     * 棣栧瓧姣嶅ぇ鍐�
-     *
-     * @param str
-     * @return
-     */
-    public static String captureWord(String str) {
-        str = str.toLowerCase();
-        char[] cs = str.toCharArray();
-        cs[0] -= 32;
-        return String.valueOf(cs);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/TimeTypeConst.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/TimeTypeConst.java
deleted file mode 100644
index 89fd787..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/common/TimeTypeConst.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.dingzhuo.energy.project.common;
-
-/**
- * @Description: 鍛ㄦ湡绫诲瀷
- * @author: yxw
- * @date: 2022骞�03鏈�17鏃� 12:33
- */
-public class TimeTypeConst {
-    /**
-     * 鍛ㄦ湡绫诲瀷 - 灏忔椂
-     */
-    public static final String TIME_TYPE_HOUR="HOUR";
-    /**
-     * 鍛ㄦ湡绫诲瀷 - 鏃�
-     */
-    public static final String TIME_TYPE_DAY="DAY";
-    /**
-     * 鍛ㄦ湡绫诲瀷 - 鏈�
-     */
-    public static final String TIME_TYPE_MONTH="MONTH";
-    /**
-     * 鍛ㄦ湡绫诲瀷 - 骞�
-     */
-    public static final String TIME_TYPE_YEAR="YEAR";
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/controller/comprehensiveStatisticsController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/controller/comprehensiveStatisticsController.java
deleted file mode 100644
index 0884b3a..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/controller/comprehensiveStatisticsController.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.controller;
-
-import com.dingzhuo.energy.basic.data.facility.domain.FacilityArchives;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.service.PeriodDataService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.comprehensiveStatistics.domain.comprehensiveStatistics;
-import com.dingzhuo.energy.project.comprehensiveStatistics.service.IComprehensiveStatisticsService;
-import com.dingzhuo.energy.project.keyEquipment.service.IdailyKeyEquipmentService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * electricityPriceController
- *
- * @author sys
- * @date 2020-02-18
- */
-@RestController
-@RequestMapping("/statisticalData/comprehensiveStatistics")
-public class comprehensiveStatisticsController extends BaseController {
-
-    @Autowired
-    private PeriodDataService periodDataService;
-    @Autowired
-    private IModelNodeService modelNodeService;
-    @Autowired
-    private IComprehensiveStatisticsService IComprehensiveStatisticsService;
-
-    @Autowired
-    private IdailyKeyEquipmentService dailykeyEquipment;
-
-    @GetMapping("/getList")
-    public AjaxResult getList(comprehensiveStatistics dataItem) {
-        try {
-            /*List<EnergyIndex> list = modelNodeService.getSettingIndex(dataItem.getIndexCode());
-            List<String> indexCode = list.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());*/
-            List<comprehensiveStatistics> list =IComprehensiveStatisticsService.getEnergyByIndex(dataItem.getIndexType());
-            List<String> indexCode = list.stream().map(comprehensiveStatistics::getIndexId).collect(Collectors.toList());
-            List<comprehensiveStatistics> resultList = IComprehensiveStatisticsService.getDatasByIndex(indexCode, dataItem.getDataTime(), dataItem.getTimeType());
-            Map<String, List<comprehensiveStatistics>> groupBy = resultList.stream().collect(Collectors.groupingBy(comprehensiveStatistics::getName));
-            List<Map> energyHeadList = new ArrayList<Map>();
-            groupBy.forEach((IndexName,value)->{
-                Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
-                tableColumn.put("name",IndexName);
-                for(comprehensiveStatistics result:value){
-                    if(result.getIndexCode().contains("electric")){
-                        tableColumn.put("electric",result.getValue());
-                    }else if(result.getIndexCode().contains("water")){
-                        tableColumn.put("water",result.getValue());
-                    }else if(result.getIndexCode().contains("coal")){
-                        tableColumn.put("coal",result.getValue());
-                    }else if(result.getIndexCode().contains("steam")){
-                        tableColumn.put("steam",result.getValue());
-                    }
-                }
-                energyHeadList.add(tableColumn);
-            });
-            return AjaxResult.success(energyHeadList);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍑洪敊!");
-        }
-    }
-    @GetMapping("/energyList")
-    public AjaxResult getEnergyList(comprehensiveStatistics dataItem) {
-        try {
-            List<EnergyIndex> list = modelNodeService.getSettingIndex(dataItem.getIndexCode());
-            List<String> indexCode = list.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-            List<comprehensiveStatistics> resultList = IComprehensiveStatisticsService.getDatasIndex(indexCode, dataItem.getDataTime(), dataItem.getTimeType());
-            Map<String, List<comprehensiveStatistics>> groupBy = resultList.stream().collect(Collectors.groupingBy(comprehensiveStatistics::getFacilityName));
-            List<Map> energyHeadList = new ArrayList<Map>();
-            groupBy.forEach((IndexName,value)->{
-                Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
-                tableColumn.put("name",IndexName);
-                tableColumn.put("value",value);
-                energyHeadList.add(tableColumn);
-            });
-            return AjaxResult.success(energyHeadList);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍑洪敊!");
-        }
-    }
-    @GetMapping("/energyDevice")
-    public AjaxResult energyDevice(comprehensiveStatistics dataItem) {
-        try {
-            List<EnergyIndex> list = modelNodeService.getSettingIndex(dataItem.getIndexCode());
-            List<String> indexCode = list.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-            List<comprehensiveStatistics> resultList = IComprehensiveStatisticsService.getDatasIndex(indexCode, dataItem.getDataTime(), dataItem.getTimeType());
-            return AjaxResult.success(resultList);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍑洪敊!");
-        }
-    }
-    @GetMapping("/getDeviceList")
-    public AjaxResult getDeviceList(comprehensiveStatistics dataItem) {
-        try {
-            List<EnergyIndex> list = modelNodeService.getSettingIndex(dataItem.getIndexCode());
-            List<String> indexCode = list.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-            List<comprehensiveStatistics> resultList = IComprehensiveStatisticsService.getDatasIndex(indexCode, dataItem.getDataTime(), dataItem.getTimeType());
-            List<Map> energyHeadList = new ArrayList<Map>();
-            if(dataItem.getIndexType().equals("1")){
-                resultList.forEach(value->{
-                    if(!value.getIndexCode().contains("scale")){
-                        Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
-                        tableColumn.put("value",value.getValue());
-                        tableColumn.put("facilityName",value.getFacilityName());
-                        energyHeadList.add(tableColumn);
-                    }
-                });
-            }else{
-                resultList.forEach(value->{
-                    if(value.getIndexCode().contains("scale")){
-                        Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
-                        tableColumn.put("facilityName",value.getFacilityName());
-                        tableColumn.put("value",value.getValue());
-                        energyHeadList.add(tableColumn);
-                    }
-                });
-            }
-            return AjaxResult.success(energyHeadList);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍑洪敊!");
-        }
-    }
-    @GetMapping("/getFacilityArchives")
-    public AjaxResult getFacilityArchives() {
-        try {
-            List<FacilityArchives> list=IComprehensiveStatisticsService.getFacilityArchives();
-            return AjaxResult.success(list);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鏍囬鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鏍囬鍑洪敊!");
-        }
-    }
-
-    /**
-     * 閲嶇偣鑳借�楄澶�
-     * @return
-     */
-    @GetMapping("/getPointFacility")
-    public AjaxResult getPointFacility() {
-        try {
-            List<FacilityArchives> list=dailykeyEquipment.getPointFacility();
-            return AjaxResult.success(list);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇璁惧鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鏍囬鍑洪敊!");
-        }
-    }
-
-    @GetMapping("/export")
-    public AjaxResult export(comprehensiveStatistics dataItem) {
-        List<comprehensiveStatistics> list =IComprehensiveStatisticsService.getEnergyByIndex(dataItem.getIndexType());
-        List<String> indexCode = list.stream().map(comprehensiveStatistics::getIndexId).collect(Collectors.toList());
-        List<comprehensiveStatistics> resultList = IComprehensiveStatisticsService.getDatasByList(indexCode, dataItem.getBeginTime(),dataItem.getEndTime(),dataItem.getTimeType());
-        ExcelUtil<comprehensiveStatistics> util = new ExcelUtil<comprehensiveStatistics>(comprehensiveStatistics.class);
-        return util.exportExcel(resultList, "set");
-    }
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/controller/dailycomprehensiveController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/controller/dailycomprehensiveController.java
deleted file mode 100644
index a31cf59..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/controller/dailycomprehensiveController.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.controller;
-
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.comprehensiveStatistics.domain.dailyComprehensive;
-import com.dingzhuo.energy.project.comprehensiveStatistics.service.IdailyComprehensive;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.commons.lang3.ObjectUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- *
- * @author sys
- * @date 2020-02-18
- */
-@RestController
-@RequestMapping("/comprehensive/dailyComprehensive")
-@Api(value = "缁煎悎鎸囨爣鍒嗘瀽锛堟棩锛塩ontroller",tags = {"缁煎悎鎸囨爣鍒嗘瀽"})
-public class dailycomprehensiveController extends BaseController {
-
-    @Autowired
-    private IModelNodeService modelNodeService;
-    @Autowired
-    private IdailyComprehensive dailyComprehensive;
-
-    /*鍏ㄥ巶鑳借�楃粺璁�*/
-    @ApiOperation(value = "鑾峰彇缁煎悎鎸囨爣鍒嗘瀽锛堟棩锛夊垪琛�")
-    @GetMapping("/list")
-    public AjaxResult list(DataItem dataItem) {
-        try {
-            ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(dataItem.getIndexCode());
-            if (ObjectUtils.isEmpty(modelNode)) {
-                return AjaxResult.success("鏆傛棤鏁版嵁");
-            }
-            List<dailyComprehensive> dataList = new ArrayList<>();
-            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            String aa = df.format(dataItem.getDataTime());
-            String bb = "";
-            int i = 0;
-            dataItem.setBeginTime(dataItem.getDataTime());
-            String endTime=aa+" 24:00:00";
-            dataItem.setEndTime(sf.parse(endTime));
-            while (i < 24) {
-                if(i>9){
-                    bb = aa + " " + i + ":00:00";
-                } else {
-                    bb = aa + " 0" + i + ":00:00";
-                }
-                dailyComprehensive report = new dailyComprehensive();
-                report.setDataTime(sf.parse(bb));
-                report.setValue("value" + i);
-                dataList.add(report);
-                i++;
-            }
-            List<dailyComprehensive> list = dailyComprehensive.getdailyComprehensiveList(modelNode.getNodeId(),
-                    dataList, dataItem.getBeginTime(), dataItem.getEndTime(), dataItem.getTimeType(), dataItem.getIndexStorageId());
-            return AjaxResult.success(list);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍑洪敊!");
-        }
-    }
-
-    /**
-     * 鍏ㄥ巶缁煎悎鑳借�楃粺璁″浘
-     */
-    @ApiOperation(value = "鑾峰彇缁煎悎鎸囨爣鍒嗘瀽鍥捐〃锛堟棩锛夋暟鎹�")
-    @GetMapping("/listChart")
-    public AjaxResult listChart(DataItem dataItem) throws ParseException {
-        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String aa= df.format(dataItem.getDataTime());
-        dataItem.setBeginTime(dataItem.getDataTime());
-        String endTime=aa+" 24:00:00";
-        dataItem.setEndTime(sf.parse(endTime));
-        List<dailyComprehensive> list = dailyComprehensive.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-        return AjaxResult.success(list);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/controller/monthlycomprehensiveController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/controller/monthlycomprehensiveController.java
deleted file mode 100644
index f44bd22..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/controller/monthlycomprehensiveController.java
+++ /dev/null
@@ -1,207 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.controller;
-
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.comprehensiveStatistics.domain.monthlyComprehensive;
-import com.dingzhuo.energy.project.comprehensiveStatistics.service.ImonthlyComprehensive;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.ObjectUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.lang.reflect.Field;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * electricityPriceController
- *
- * @author sys
- * @date 2020-02-18
- */
-@RestController
-@RequestMapping("/comprehensive/monthlyComprehensive")
-@Api(value = "缁煎悎鎸囨爣鍒嗘瀽锛堟湀锛塩ontroller",tags = {"缁煎悎鎸囨爣鍒嗘瀽"})
-public class monthlycomprehensiveController extends BaseController {
-
-    @Autowired
-    private IModelNodeService modelNodeService;
-    @Autowired
-    private ImonthlyComprehensive monthlyComprehensive;
-
-    /*鍏ㄥ巶鑳借�楃粺璁�*/
-    @ApiOperation(value = "鑾峰彇缁煎悎鎸囨爣鍒嗘瀽锛堟湀锛夊垪琛�")
-    @GetMapping("/list")
-    public AjaxResult list(DataItem dataItem) {
-        try {
-
-            Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
-            List<monthlyComprehensive> dataList=new ArrayList<>();
-            DateFormat df = new SimpleDateFormat("yyyy-MM");
-            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            String aa= df.format(dataItem.getDataTime());
-            String bb="";
-            int i = 1;
-            String beginTime=aa+"-01 00:00:00";
-            dataItem.setBeginTime(sf.parse(beginTime));
-            String endTime=aa+"-"+Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))+" 00:00:00";
-            dataItem.setEndTime(sf.parse(endTime));
-            while (i <= Integer.parseInt(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length() - 2))) {
-                if (i > 9) {
-                    bb = aa + "-" + i + " 00:00:00";
-                } else {
-                    bb = aa + "-0" + i + " 00:00:00";
-                }
-                monthlyComprehensive report = new monthlyComprehensive();
-                report.setDataTime(sf.parse(bb));
-                report.setValue("value" + i);
-                dataList.add(report);
-                tableColumn.put("value" + i, String.valueOf(i) + "鏃�");
-                i++;
-            }
-
-            monthlyComprehensive reportList = new monthlyComprehensive();
-            List<Map> table = new ArrayList<>();
-            table.add(tableColumn);
-            reportList.setTablehead(table);
-
-            ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(dataItem.getIndexCode());
-            if (ObjectUtils.isEmpty(modelNode)) {
-                return AjaxResult.success(reportList);
-            }
-            List<monthlyComprehensive> list = monthlyComprehensive.getMonthlyComprehensiveList(modelNode.getNodeId(),
-                    dataList, dataItem.getBeginTime(), dataItem.getEndTime(), dataItem.getTimeType(), dataItem.getIndexStorageId());
-            int count = Integer.parseInt(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length() - 2));
-            list.forEach(monthlyReport -> monthlyReport.setCount(count));
-            reportList.setTabledata(list);
-
-            return AjaxResult.success(reportList);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍑洪敊!");
-        }
-    }
-/**/
-    /**
-     * 鍏ㄥ巶缁煎悎鑳借�楃粺璁″浘
-     */
-    @GetMapping("/listChart")
-    @ApiOperation(value = "鑾峰彇缁煎悎鎸囨爣鍒嗘瀽鍥捐〃锛堟湀锛夋暟鎹�")
-    public AjaxResult listChart(DataItem dataItem) throws ParseException {
-        DateFormat df = new SimpleDateFormat("yyyy-MM");
-        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String aa= df.format(dataItem.getDataTime());
-        String beginTime=aa+"-01 00:00:00";
-        dataItem.setBeginTime(sf.parse(beginTime));
-        String endTime=aa+"-"+Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))+" 00:00:00";
-        dataItem.setEndTime(sf.parse(endTime));
-        List<monthlyComprehensive> list = monthlyComprehensive.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-        return AjaxResult.success(list);
-    }
-    public static String getLastDayOfMonth(String yearMonth) {
-        int year = Integer.parseInt(yearMonth.split("-")[0]);  //骞�
-        int month = Integer.parseInt(yearMonth.split("-")[1]); //鏈�
-        Calendar cal = Calendar.getInstance();
-        // 璁剧疆骞翠唤
-        cal.set(Calendar.YEAR, year);
-        // 璁剧疆鏈堜唤
-        // cal.set(Calendar.MONTH, month - 1);
-        cal.set(Calendar.MONTH, month); //璁剧疆褰撳墠鏈堢殑涓婁竴涓湀
-        // 鑾峰彇鏌愭湀鏈�澶уぉ鏁�
-        //int lastDay = cal.getActualMaximum(Calendar.DATE);
-        int lastDay = cal.getMinimum(Calendar.DATE); //鑾峰彇鏈堜唤涓殑鏈�灏忓�硷紝鍗崇涓�澶�
-        // 璁剧疆鏃ュ巻涓湀浠界殑鏈�澶уぉ鏁�
-        //cal.set(Calendar.DAY_OF_MONTH, lastDay);
-        cal.set(Calendar.DAY_OF_MONTH, lastDay - 1); //涓婃湀鐨勭涓�澶╁噺鍘�1灏辨槸褰撴湀鐨勬渶鍚庝竴澶�
-        // 鏍煎紡鍖栨棩鏈�
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-        return sdf.format(cal.getTime());
-    }
-    /*缁煎悎鏈堟姤琛ㄥ鍑�*/
-    @Log(title = "缁煎悎鏈堟姤琛ㄥ鍑�", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    @ApiOperation(value = "缁煎悎鏈堟姤琛ㄥ鍑�")
-    public AjaxResult export(DataItem dataItem) {
-        try {
-
-            Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
-            List<monthlyComprehensive> dataList=new ArrayList<>();
-            DateFormat df = new SimpleDateFormat("yyyy-MM");
-            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            String aa= df.format(dataItem.getDataTime());
-            String bb="";
-            int i = 1;
-            String beginTime=aa+"-01 00:00:00";
-            dataItem.setBeginTime(sf.parse(beginTime));
-            String endTime=aa+"-"+Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))+" 00:00:00";
-            dataItem.setEndTime(sf.parse(endTime));
-            while (i <= Integer.parseInt(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length() - 2))) {
-                if (i > 9) {
-                    bb = aa + "-" + i + " 00:00:00";
-                } else {
-                    bb = aa + "-0" + i + " 00:00:00";
-                }
-                monthlyComprehensive report = new monthlyComprehensive();
-                report.setDataTime(sf.parse(bb));
-                report.setValue("value" + i);
-                dataList.add(report);
-                tableColumn.put("value" + i, i + "鏃�");
-                i++;
-            }
-
-            monthlyComprehensive reportList = new monthlyComprehensive();
-            List<Map> table = new ArrayList<>();
-            table.add(tableColumn);
-            reportList.setTablehead(table);
-
-            ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(dataItem.getIndexCode());
-            if (ObjectUtils.isEmpty(modelNode)) {
-                return AjaxResult.success(reportList);
-            }
-            List<monthlyComprehensive> list = monthlyComprehensive.getMonthlyComprehensiveList(modelNode.getNodeId(), dataList,
-                    dataItem.getBeginTime(), dataItem.getEndTime(), dataItem.getTimeType(), dataItem.getIndexStorageId());
-            int count = Integer.parseInt(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length() - 2));
-            list.forEach(monthlyReport -> monthlyReport.setCount(count));
-            if (CollectionUtils.isNotEmpty(list)) {
-                list.forEach(this::valueRep);
-            }
-            ExcelUtil<monthlyComprehensive> util = new ExcelUtil<>(monthlyComprehensive.class);
-            return util.exportExcel(list, "缁煎悎鎸囨爣鍒嗘瀽鏈�");
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍑洪敊!");
-        }
-    }
-    public void valueRep(Object dr){
-        Field[] fields = dr.getClass().getDeclaredFields();
-        for(Field field:fields){
-            field.setAccessible(true);
-            Object obj = field.getType();
-            if(field.getType().getName().equals("java.lang.Double")){
-                String name = field.getName();
-                try {
-                    if(ObjectUtils.isEmpty(field.get(dr)))
-                    {
-                        field.set(dr,0.00);
-                    }
-                } catch (IllegalAccessException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/controller/processEnergyConsumptionController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/controller/processEnergyConsumptionController.java
deleted file mode 100644
index 6e4cb77..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/controller/processEnergyConsumptionController.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.controller;
-
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.project.comprehensiveStatistics.service.processEnergyConsumptionService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-
-/**
- * 宸ュ簭鑳借�楃粺璁�
- *
- * @author sys
- * @date 2020-02-18
- */
-@RestController
-@RequestMapping("/statisticalData/processEnergyConsumption")
-public class processEnergyConsumptionController extends BaseController {
-
-    @Autowired
-    private IModelNodeService modelNodeService;
-    @Autowired
-    private processEnergyConsumptionService processEnergyConsumptionService;
-
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/controller/yearComprehensiveController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/controller/yearComprehensiveController.java
deleted file mode 100644
index d13f2a5..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/controller/yearComprehensiveController.java
+++ /dev/null
@@ -1,154 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.controller;
-
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.comprehensiveStatistics.domain.yearComperhensive;
-import com.dingzhuo.energy.project.comprehensiveStatistics.service.IyearComprehensive;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.ObjectUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.lang.reflect.Field;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * electricityPriceController
- *
- * @author sys
- * @date 2020-02-18
- */
-@RestController
-@RequestMapping("/comprehensive/yearComprehensive")
-@Api(value = "缁煎悎鎸囨爣鍒嗘瀽锛堝勾锛塩ontroller",tags = {"缁煎悎鎸囨爣鍒嗘瀽"})
-public class yearComprehensiveController extends BaseController {
-
-    @Autowired
-    private IModelNodeService modelNodeService;
-    @Autowired
-    private IyearComprehensive yearComprehensive;
-
-    /*鍏ㄥ巶鑳借�楃粺璁�*/
-    @GetMapping("/list")
-    @ApiOperation(value = "鑾峰彇缁煎悎鎸囨爣鍒嗘瀽锛堝勾锛夊垪琛�")
-    public AjaxResult list(DataItem dataItem) {
-        try {
-            ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(dataItem.getIndexCode());
-            if (ObjectUtils.isEmpty(modelNode)) {
-                return AjaxResult.success("鏆傛棤鏁版嵁");
-            }
-            List<yearComperhensive> dataList = new ArrayList<>();
-            DateFormat df = new SimpleDateFormat("yyyy");
-            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            String aa= df.format(dataItem.getBeginTime());
-            String bb="";
-            int i = 1;
-            while (i <= 12) {
-                if(i>9){
-                    bb=aa+"-"+i+"-01 00:00:00";
-                }else{
-                    bb=aa+"-0"+i+"-01 00:00:00";
-                }
-                yearComperhensive report=new yearComperhensive();
-                report.setDataTime(sf.parse(bb));
-                report.setValue("value"+i);
-                dataList.add(report);
-                i++;
-            }
-            List<yearComperhensive> list = yearComprehensive.getYearComprehensiveList(modelNode.getNodeId(),
-                    dataList,dataItem.getBeginTime(), dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-            return AjaxResult.success(list);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍑洪敊!");
-        }
-    }
-
-    /**
-     * 鍏ㄥ巶缁煎悎鑳借�楃粺璁″浘
-     */
-    @GetMapping("/listChart")
-    @ApiOperation(value = "鑾峰彇缁煎悎鎸囨爣鍒嗘瀽鍥捐〃锛堝勾锛夋暟鎹�")
-    public AjaxResult listChart(DataItem dataItem){
-        List<yearComperhensive> list = yearComprehensive.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-        return AjaxResult.success(list);
-    }
-
-    /**
-     * 瀵煎嚭宸ュ簭鍗曡�楃粺璁℃寚鏍囪缃姛鑳藉垪琛�
-     */
-    @Log(title = "缁煎悎鎶ヨ〃", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    @ApiOperation(value = "缁煎悎骞存姤琛ㄥ鍑�")
-    public AjaxResult export(DataItem dataItem) {
-        try {
-            ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(dataItem.getIndexCode());
-            if (ObjectUtils.isEmpty(modelNode)) {
-                return AjaxResult.success("鏆傛棤鏁版嵁");
-            }
-            List<yearComperhensive> dataList = new ArrayList<>();
-            DateFormat df = new SimpleDateFormat("yyyy");
-            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            String aa = df.format(dataItem.getBeginTime());
-            String bb = "";
-            int i = 1;
-            while (i <= 12) {
-                if(i>9){
-                    bb=aa+"-"+i+"-01 00:00:00";
-                }else{
-                    bb=aa+"-0"+i+"-01 00:00:00";
-                }
-                yearComperhensive report=new yearComperhensive();
-                report.setDataTime(sf.parse(bb));
-                report.setValue("value"+i);
-                dataList.add(report);
-                i++;
-            }
-            List<yearComperhensive> list = yearComprehensive.getYearComprehensiveList(modelNode.getNodeId(),
-                    dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-            if(CollectionUtils.isNotEmpty(list)){
-                list.forEach(this::valueRep);
-            }
-            ExcelUtil<yearComperhensive> util = new ExcelUtil<>(yearComperhensive.class);
-            return util.exportExcel(list, "缁煎悎鎸囨爣鍒嗘瀽骞�");
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍑洪敊!");
-        }
-    }
-
-    public void valueRep(Object dr){
-        Field[] fields = dr.getClass().getDeclaredFields();
-        for(Field field:fields){
-            field.setAccessible(true);
-            Object obj = field.getType();
-            if(field.getType().getName().equals("java.lang.Double")){
-                String name = field.getName();
-                try {
-                    if(ObjectUtils.isEmpty(field.get(dr)))
-                    {
-                        field.set(dr,0.00);
-                    }
-                } catch (IllegalAccessException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-    }
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/domain/comprehensive.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/domain/comprehensive.java
deleted file mode 100644
index 12e9283..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/domain/comprehensive.java
+++ /dev/null
@@ -1,385 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-public  class comprehensive implements Serializable {
-  private static final long serialVersionUID = -2777479013884125925L;
-  private String indexId;
-  @Excel(name = "鎸囨爣鍚嶇О")
-  private String indexName;
-  private String value;
-  private Date dataTime;
-  private String timeType;
-  @Excel(name = "1")
-  private Double value1;
-  @Excel(name = "2")
-  private Double value2;
-  @Excel(name = "3")
-  private Double value3;
-  @Excel(name = "4")
-  private Double value4;
-  @Excel(name = "5")
-  private Double value5;
-  @Excel(name = "6")
-  private Double value6;
-  @Excel(name = "7")
-  private Double value7;
-  @Excel(name = "8")
-  private Double value8;
-  @Excel(name = "9")
-  private Double value9;
-  @Excel(name = "10")
-  private Double value10;
-  @Excel(name = "11")
-  private Double value11;
-  @Excel(name = "12")
-  private Double value12;
-  @Excel(name = "13")
-  private Double value13;
-  @Excel(name = "14")
-  private Double value14;
-  @Excel(name = "15")
-  private Double value15;
-  @Excel(name = "16")
-  private Double value16;
-  @Excel(name = "17")
-  private Double value17;
-  @Excel(name = "18")
-  private Double value18;
-  @Excel(name = "19")
-  private Double value19;
-  @Excel(name = "20")
-  private Double value20;
-  @Excel(name = "21")
-  private Double value21;
-  @Excel(name = "22")
-  private Double value22;
-  @Excel(name = "23")
-  private Double value23;
-  @Excel(name = "24")
-  private Double value24;
-  @Excel(name = "25")
-  private Double value25;
-  @Excel(name = "16")
-  private Double value26;
-  @Excel(name = "27")
-  private Double value27;
-  @Excel(name = "28")
-  private Double value28;
-  @Excel(name = "29")
-  private Double value29;
-  @Excel(name = "30")
-  private Double value30;
-  @Excel(name = "31")
-  private Double value31;
-  private List<Map> tablehead =new ArrayList<>();
-  private List<comprehensive> tabledata =new ArrayList<>();
-  public String getIndexId() {
-    return indexId;
-  }
-
-  public void setIndexId(String indexId) {
-    this.indexId = indexId;
-  }
-
-  public String getIndexName() {
-    return indexName;
-  }
-
-  public void setIndexName(String indexName) {
-    this.indexName = indexName;
-  }
-
-  public String getValue() {
-    return value;
-  }
-
-  public void setValue(String value) {
-    this.value = value;
-  }
-
-  public String getTimeType() {
-    return timeType;
-  }
-
-  public void setTimeType(String timeType) {
-    this.timeType = timeType;
-  }
-
-  public Date getDataTime() {
-    return dataTime;
-  }
-
-  public void setDataTime(Date dataTime) {
-    this.dataTime = dataTime;
-  }
-
-  public Double getValue1() {
-    return value1;
-  }
-
-  public void setValue1(Double value1) {
-    this.value1 = value1;
-  }
-
-  public Double getValue2() {
-    return value2;
-  }
-
-  public void setValue2(Double value2) {
-    this.value2 = value2;
-  }
-
-  public Double getValue3() {
-    return value3;
-  }
-
-  public void setValue3(Double value3) {
-    this.value3 = value3;
-  }
-
-  public Double getValue4() {
-    return value4;
-  }
-
-  public void setValue4(Double value4) {
-    this.value4 = value4;
-  }
-
-  public Double getValue5() {
-    return value5;
-  }
-
-  public void setValue5(Double value5) {
-    this.value5 = value5;
-  }
-
-  public Double getValue6() {
-    return value6;
-  }
-
-  public void setValue6(Double value6) {
-    this.value6 = value6;
-  }
-
-  public Double getValue7() {
-    return value7;
-  }
-
-  public void setValue7(Double value7) {
-    this.value7 = value7;
-  }
-
-  public Double getValue8() {
-    return value8;
-  }
-
-  public void setValue8(Double value8) {
-    this.value8 = value8;
-  }
-
-  public Double getValue9() {
-    return value9;
-  }
-
-  public void setValue9(Double value9) {
-    this.value9 = value9;
-  }
-
-  public Double getValue10() {
-    return value10;
-  }
-
-  public void setValue10(Double value10) {
-    this.value10 = value10;
-  }
-
-  public Double getValue11() {
-    return value11;
-  }
-
-  public void setValue11(Double value11) {
-    this.value11 = value11;
-  }
-
-  public Double getValue12() {
-    return value12;
-  }
-
-  public void setValue12(Double value12) {
-    this.value12 = value12;
-  }
-
-  public Double getValue13() {
-    return value13;
-  }
-
-  public void setValue13(Double value13) {
-    this.value13 = value13;
-  }
-
-  public Double getValue14() {
-    return value14;
-  }
-
-  public void setValue14(Double value14) {
-    this.value14 = value14;
-  }
-
-  public Double getValue15() {
-    return value15;
-  }
-
-  public void setValue15(Double value15) {
-    this.value15 = value15;
-  }
-
-  public Double getValue16() {
-    return value16;
-  }
-
-  public void setValue16(Double value16) {
-    this.value16 = value16;
-  }
-
-  public Double getValue17() {
-    return value17;
-  }
-
-  public void setValue17(Double value17) {
-    this.value17 = value17;
-  }
-
-  public Double getValue18() {
-    return value18;
-  }
-
-  public void setValue18(Double value18) {
-    this.value18 = value18;
-  }
-
-  public Double getValue19() {
-    return value19;
-  }
-
-  public void setValue19(Double value19) {
-    this.value19 = value19;
-  }
-
-  public Double getValue20() {
-    return value20;
-  }
-
-  public void setValue20(Double value20) {
-    this.value20 = value20;
-  }
-
-  public Double getValue21() {
-    return value21;
-  }
-
-  public void setValue21(Double value21) {
-    this.value21 = value21;
-  }
-
-  public Double getValue22() {
-    return value22;
-  }
-
-  public void setValue22(Double value22) {
-    this.value22 = value22;
-  }
-
-  public Double getValue23() {
-    return value23;
-  }
-
-  public void setValue23(Double value23) {
-    this.value23 = value23;
-  }
-
-  public Double getValue24() {
-    return value24;
-  }
-
-  public void setValue24(Double value24) {
-    this.value24 = value24;
-  }
-
-  public Double getValue25() {
-    return value25;
-  }
-
-  public void setValue25(Double value25) {
-    this.value25 = value25;
-  }
-
-  public Double getValue26() {
-    return value26;
-  }
-
-  public void setValue26(Double value26) {
-    this.value26 = value26;
-  }
-
-  public Double getValue27() {
-    return value27;
-  }
-
-  public void setValue27(Double value27) {
-    this.value27 = value27;
-  }
-
-  public Double getValue28() {
-    return value28;
-  }
-
-  public void setValue28(Double value28) {
-    this.value28 = value28;
-  }
-
-  public Double getValue29() {
-    return value29;
-  }
-
-  public void setValue29(Double value29) {
-    this.value29 = value29;
-  }
-
-  public Double getValue30() {
-    return value30;
-  }
-
-  public void setValue30(Double value30) {
-    this.value30 = value30;
-  }
-
-  public Double getValue31() {
-    return value31;
-  }
-
-  public void setValue31(Double value31) {
-    this.value31 = value31;
-  }
-
-  public List<Map> getTablehead() {
-    return tablehead;
-  }
-
-  public void setTablehead(List<Map> tablehead) {
-    this.tablehead = tablehead;
-  }
-  public List<comprehensive> getTabledata() {
-    return tabledata;
-  }
-
-  public void setTabledata(List<comprehensive> tabledata) {
-    this.tabledata = tabledata;
-  }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/domain/comprehensiveStatistics.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/domain/comprehensiveStatistics.java
deleted file mode 100644
index cf47e19..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/domain/comprehensiveStatistics.java
+++ /dev/null
@@ -1,185 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.domain;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.dataservice.domain.Quality;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-
-import java.io.Serializable;
-import java.util.Date;
-
-public  class comprehensiveStatistics implements Serializable {
-  private static final long serialVersionUID = -2777479013884125925L;
-
-  private String indexId;
-  private String indexStorageId;
-  @Excel(name = "鎸囨爣Id")
-  private String indexCode;
-  private String indexName;
-  private Date beginTime;
-  private Date endTime;
-  private Date dataTime;
-  private String timeCode;
-  private TimeType timeType;
-  @Excel(name = "鑳借�楅噺")
-  private Double value;
-  private Quality quality;
-  private String unitId;
-  private Date createTime;
-  private Date updateTime;
-  private String remark;
-  @Excel(name = "鍚嶇О")
-  private String name;
-  private String indexType;
-  private String facilityName;
-  private String valueScale;
-  public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public String getIndexId() {
-    return indexId;
-  }
-
-  public void setIndexId(String indexId) {
-    this.indexId = indexId;
-  }
-
-  public String getIndexStorageId() {
-    return indexStorageId;
-  }
-
-  public void setIndexStorageId(String indexStorageId) {
-    this.indexStorageId = indexStorageId;
-  }
-
-  public String getIndexCode() {
-    return indexCode;
-  }
-
-  public void setIndexCode(String indexCode) {
-    this.indexCode = indexCode;
-  }
-
-  public String getIndexName() {
-    return indexName;
-  }
-
-  public void setIndexName(String indexName) {
-    this.indexName = indexName;
-  }
-
-  public Date getBeginTime() {
-    return beginTime;
-  }
-
-  public void setBeginTime(Date beginTime) {
-    this.beginTime = beginTime;
-  }
-
-  public Date getEndTime() {
-    return endTime;
-  }
-
-  public void setEndTime(Date endTime) {
-    this.endTime = endTime;
-  }
-
-  public Date getDataTime() {
-    return dataTime;
-  }
-
-  public void setDataTime(Date dataTime) {
-    this.dataTime = dataTime;
-  }
-
-  public String getTimeCode() {
-    return timeCode;
-  }
-
-  public void setTimeCode(String timeCode) {
-    this.timeCode = timeCode;
-  }
-
-  public TimeType getTimeType() {
-    return timeType;
-  }
-
-  public void setTimeType(TimeType timeType) {
-    this.timeType = timeType;
-  }
-
-  public Double getValue() {
-    return value;
-  }
-
-  public void setValue(Double value) {
-    this.value = value;
-  }
-
-  public Quality getQuality() {
-    return quality;
-  }
-
-  public void setQuality(Quality quality) {
-    this.quality = quality;
-  }
-
-  public String getUnitId() {
-    return unitId;
-  }
-
-  public void setUnitId(String unitId) {
-    this.unitId = unitId;
-  }
-
-  public Date getCreateTime() {
-    return createTime;
-  }
-
-  public void setCreateTime(Date createTime) {
-    this.createTime = createTime;
-  }
-
-  public Date getUpdateTime() {
-    return updateTime;
-  }
-
-  public void setUpdateTime(Date updateTime) {
-    this.updateTime = updateTime;
-  }
-
-  public String getRemark() {
-    return remark;
-  }
-
-  public void setRemark(String remark) {
-    this.remark = remark;
-  }
-
-  public String getIndexType() {
-    return indexType;
-  }
-  public void setIndexType(String indexType) {
-    this.indexType = indexType;
-  }
-
-  public String getFacilityName() {
-    return facilityName;
-  }
-
-  public void setFacilityName(String facilityName) {
-    this.facilityName = facilityName;
-  }
-
-  public String getValueScale() {
-    return valueScale;
-  }
-
-  public void setValueScale(String valueScale) {
-    this.valueScale = valueScale;
-  }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/domain/dailyComprehensive.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/domain/dailyComprehensive.java
deleted file mode 100644
index 730a1f7..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/domain/dailyComprehensive.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 
- * @author sys
- * @date 2020-03-25
- */
-@Data
-public class dailyComprehensive implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private String indexId;
-    @Excel(name = "鎸囨爣鍚嶇О")
-    private String indexName;
-    private String value;
-    private Date dataTime;
-    private String timeType;
-    private String timeCode;
-    private String unitId;
-    @Excel(name = "0鏃�")
-    private String value0;
-    @Excel(name = "1鏃�")
-    private String value1;
-    @Excel(name = "2鏃�")
-    private String value2;
-    @Excel(name = "3鏃�")
-    private String value3;
-    @Excel(name = "4鏃�")
-    private String value4;
-    @Excel(name = "5鏃�")
-    private String value5;
-    @Excel(name = "6鏃�")
-    private String value6;
-    @Excel(name = "7鏃�")
-    private String value7;
-    @Excel(name = "8鏃�")
-    private String value8;
-    @Excel(name = "9鏃�")
-    private String value9;
-    @Excel(name = "10鏃�")
-    private String value10;
-    @Excel(name = "11鏃�")
-    private String value11;
-    @Excel(name = "12鏃�")
-    private String value12;
-    @Excel(name = "13鏃�")
-    private String value13;
-    @Excel(name = "14鏃�")
-    private String value14;
-    @Excel(name = "15鏃�")
-    private String value15;
-    @Excel(name = "16鏃�")
-    private String value16;
-    @Excel(name = "17鏃�")
-    private String value17;
-    @Excel(name = "18鏃�")
-    private String value18;
-    @Excel(name = "19鏃�")
-    private String value19;
-    @Excel(name = "20鏃�")
-    private String value20;
-    @Excel(name = "21鏃�")
-    private String value21;
-    @Excel(name = "22鏃�")
-    private String value22;
-    @Excel(name = "23鏃�")
-    private String value23;
-    private List<Map> tablehead =new ArrayList<>();
-    private List<dailyComprehensive> tabledata =new ArrayList<>();
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/domain/monthlyComprehensive.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/domain/monthlyComprehensive.java
deleted file mode 100644
index 878eda6..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/domain/monthlyComprehensive.java
+++ /dev/null
@@ -1,415 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 
- * @author sys
- * @date 2020-12-31
- */
-public class monthlyComprehensive implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private String indexId;
-    @Excel(name = "鎸囨爣鍚嶇О")
-    private String indexName;
-    private String value;
-    private Date dataTime;
-    private String timeType;
-    private String unitId;
-    @Excel(name = "1鏃�")
-    private Double value1;
-    @Excel(name = "2鏃�")
-    private Double value2;
-    @Excel(name = "3鏃�")
-    private Double value3;
-    @Excel(name = "4鏃�")
-    private Double value4;
-    @Excel(name = "5鏃�")
-    private Double value5;
-    @Excel(name = "6鏃�")
-    private Double value6;
-    @Excel(name = "7鏃�")
-    private Double value7;
-    @Excel(name = "8鏃�")
-    private Double value8;
-    @Excel(name = "9鏃�")
-    private Double value9;
-    @Excel(name = "10鏃�")
-    private Double value10;
-    @Excel(name = "11鏃�")
-    private Double value11;
-    @Excel(name = "12鏃�")
-    private Double value12;
-    @Excel(name = "13鏃�")
-    private Double value13;
-    @Excel(name = "14鏃�")
-    private Double value14;
-    @Excel(name = "15鏃�")
-    private Double value15;
-    @Excel(name = "16鏃�")
-    private Double value16;
-    @Excel(name = "17鏃�")
-    private Double value17;
-    @Excel(name = "18鏃�")
-    private Double value18;
-    @Excel(name = "19鏃�")
-    private Double value19;
-    @Excel(name = "20鏃�")
-    private Double value20;
-    @Excel(name = "21鏃�")
-    private Double value21;
-    @Excel(name = "22鏃�")
-    private Double value22;
-    @Excel(name = "23鏃�")
-    private Double value23;
-    @Excel(name = "24鏃�")
-    private Double value24;
-    @Excel(name = "25鏃�")
-    private Double value25;
-    @Excel(name = "26鏃�")
-    private Double value26;
-    @Excel(name = "27鏃�")
-    private Double value27;
-    @Excel(name = "28鏃�")
-    private Double value28;
-    @Excel(name = "29鏃�")
-    private Double value29;
-    @Excel(name = "30鏃�")
-    private Double value30;
-    @Excel(name = "31鏃�")
-    private Double value31;
-    private String timeCode;
-    private Integer count;
-    private List<Map> tablehead =new ArrayList<>();
-    private List<monthlyComprehensive> tabledata =new ArrayList<>();
-    public String getIndexId() {
-        return indexId;
-    }
-
-    public void setIndexId(String indexId) {
-        this.indexId = indexId;
-    }
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-    public String getUnitId() {
-        return unitId;
-    }
-
-    public void setUnitId(String unitId) {
-        this.unitId = unitId;
-    }
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getTimeType() {
-        return timeType;
-    }
-
-    public void setTimeType(String timeType) {
-        this.timeType = timeType;
-    }
-
-    public Date getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(Date dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public Double getValue1() {
-        return value1;
-    }
-
-    public void setValue1(Double value1) {
-        this.value1 = value1;
-    }
-
-    public Double getValue2() {
-        return value2;
-    }
-
-    public void setValue2(Double value2) {
-        this.value2 = value2;
-    }
-
-    public Double getValue3() {
-        return value3;
-    }
-
-    public void setValue3(Double value3) {
-        this.value3 = value3;
-    }
-
-    public Double getValue4() {
-        return value4;
-    }
-
-    public void setValue4(Double value4) {
-        this.value4 = value4;
-    }
-
-    public Double getValue5() {
-        return value5;
-    }
-
-    public void setValue5(Double value5) {
-        this.value5 = value5;
-    }
-
-    public Double getValue6() {
-        return value6;
-    }
-
-    public void setValue6(Double value6) {
-        this.value6 = value6;
-    }
-
-    public Double getValue7() {
-        return value7;
-    }
-
-    public void setValue7(Double value7) {
-        this.value7 = value7;
-    }
-
-    public Double getValue8() {
-        return value8;
-    }
-
-    public void setValue8(Double value8) {
-        this.value8 = value8;
-    }
-
-    public Double getValue9() {
-        return value9;
-    }
-
-    public void setValue9(Double value9) {
-        this.value9 = value9;
-    }
-
-    public Double getValue10() {
-        return value10;
-    }
-
-    public void setValue10(Double value10) {
-        this.value10 = value10;
-    }
-
-    public Double getValue11() {
-        return value11;
-    }
-
-    public void setValue11(Double value11) {
-        this.value11 = value11;
-    }
-
-    public Double getValue12() {
-        return value12;
-    }
-
-    public void setValue12(Double value12) {
-        this.value12 = value12;
-    }
-
-    public Double getValue13() {
-        return value13;
-    }
-
-    public void setValue13(Double value13) {
-        this.value13 = value13;
-    }
-
-    public Double getValue14() {
-        return value14;
-    }
-
-    public void setValue14(Double value14) {
-        this.value14 = value14;
-    }
-
-    public Double getValue15() {
-        return value15;
-    }
-
-    public void setValue15(Double value15) {
-        this.value15 = value15;
-    }
-
-    public Double getValue16() {
-        return value16;
-    }
-
-    public void setValue16(Double value16) {
-        this.value16 = value16;
-    }
-
-    public Double getValue17() {
-        return value17;
-    }
-
-    public void setValue17(Double value17) {
-        this.value17 = value17;
-    }
-
-    public Double getValue18() {
-        return value18;
-    }
-
-    public void setValue18(Double value18) {
-        this.value18 = value18;
-    }
-
-    public Double getValue19() {
-        return value19;
-    }
-
-    public void setValue19(Double value19) {
-        this.value19 = value19;
-    }
-
-    public Double getValue20() {
-        return value20;
-    }
-
-    public void setValue20(Double value20) {
-        this.value20 = value20;
-    }
-
-    public Double getValue21() {
-        return value21;
-    }
-
-    public void setValue21(Double value21) {
-        this.value21 = value21;
-    }
-
-    public Double getValue22() {
-        return value22;
-    }
-
-    public void setValue22(Double value22) {
-        this.value22 = value22;
-    }
-
-    public Double getValue23() {
-        return value23;
-    }
-
-    public void setValue23(Double value23) {
-        this.value23 = value23;
-    }
-
-    public Double getValue24() {
-        return value24;
-    }
-
-    public void setValue24(Double value24) {
-        this.value24 = value24;
-    }
-
-    public Double getValue25() {
-        return value25;
-    }
-
-    public void setValue25(Double value25) {
-        this.value25 = value25;
-    }
-
-    public Double getValue26() {
-        return value26;
-    }
-
-    public void setValue26(Double value26) {
-        this.value26 = value26;
-    }
-
-    public Double getValue27() {
-        return value27;
-    }
-
-    public void setValue27(Double value27) {
-        this.value27 = value27;
-    }
-
-    public Double getValue28() {
-        return value28;
-    }
-
-    public void setValue28(Double value28) {
-        this.value28 = value28;
-    }
-
-    public Double getValue29() {
-        return value29;
-    }
-
-    public void setValue29(Double value29) {
-        this.value29 = value29;
-    }
-
-    public Double getValue30() {
-        return value30;
-    }
-
-    public void setValue30(Double value30) {
-        this.value30 = value30;
-    }
-
-    public Double getValue31() {
-        return value31;
-    }
-
-    public void setValue31(Double value31) {
-        this.value31 = value31;
-    }
-
-    public List<Map> getTablehead() {
-        return tablehead;
-    }
-
-    public void setTablehead(List<Map> tablehead) {
-        this.tablehead = tablehead;
-    }
-    public List<monthlyComprehensive> getTabledata() {
-        return tabledata;
-    }
-
-    public void setTabledata(List<monthlyComprehensive> tabledata) {
-        this.tabledata = tabledata;
-    }
-
-    public String getTimeCode() {
-        return timeCode;
-    }
-
-    public void setTimeCode(String timeCode) {
-        this.timeCode = timeCode;
-    }
-
-    public Integer getCount() {
-        return count;
-    }
-
-    public void setCount(Integer count) {
-        this.count = count;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/domain/yearComperhensive.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/domain/yearComperhensive.java
deleted file mode 100644
index e59e451..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/domain/yearComperhensive.java
+++ /dev/null
@@ -1,215 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.project.reportForm.domain.dailyReport;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 
- * @author sys
- * @date 2020-03-25
- */
-public class yearComperhensive implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private String indexId;
-    @Excel(name = "鎸囨爣鍚嶇О")
-    private String indexName;
-    private String value;
-    private Date dataTime;
-    private String timeType;
-    private String unitId;
-    @Excel(name = "1鏈�")
-    private Double value1;
-    @Excel(name = "2鏈�")
-    private Double value2;
-    @Excel(name = "3鏈�")
-    private Double value3;
-    @Excel(name = "4鏈�")
-    private Double value4;
-    @Excel(name = "5鏈�")
-    private Double value5;
-    @Excel(name = "6鏈�")
-    private Double value6;
-    @Excel(name = "7鏈�")
-    private Double value7;
-    @Excel(name = "8鏈�")
-    private Double value8;
-    @Excel(name = "9鏈�")
-    private Double value9;
-    @Excel(name = "10鏈�")
-    private Double value10;
-    @Excel(name = "11鏈�")
-    private Double value11;
-    @Excel(name = "12鏈�")
-    private Double value12;
-    private String timeCode;
-    private List<Map> tablehead =new ArrayList<>();
-    private List<dailyReport> tabledata =new ArrayList<>();
-    public String getIndexId() {
-        return indexId;
-    }
-
-    public void setIndexId(String indexId) {
-        this.indexId = indexId;
-    }
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-    public String getUnitId() {
-        return unitId;
-    }
-
-    public void setUnitId(String unitId) {
-        this.unitId = unitId;
-    }
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getTimeType() {
-        return timeType;
-    }
-
-    public void setTimeType(String timeType) {
-        this.timeType = timeType;
-    }
-
-    public Date getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(Date dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public Double getValue1() {
-        return value1;
-    }
-
-    public void setValue1(Double value1) {
-        this.value1 = value1;
-    }
-
-    public Double getValue2() {
-        return value2;
-    }
-
-    public void setValue2(Double value2) {
-        this.value2 = value2;
-    }
-
-    public Double getValue3() {
-        return value3;
-    }
-
-    public void setValue3(Double value3) {
-        this.value3 = value3;
-    }
-
-    public Double getValue4() {
-        return value4;
-    }
-
-    public void setValue4(Double value4) {
-        this.value4 = value4;
-    }
-
-    public Double getValue5() {
-        return value5;
-    }
-
-    public void setValue5(Double value5) {
-        this.value5 = value5;
-    }
-
-    public Double getValue6() {
-        return value6;
-    }
-
-    public void setValue6(Double value6) {
-        this.value6 = value6;
-    }
-
-    public Double getValue7() {
-        return value7;
-    }
-
-    public void setValue7(Double value7) {
-        this.value7 = value7;
-    }
-
-    public Double getValue8() {
-        return value8;
-    }
-
-    public void setValue8(Double value8) {
-        this.value8 = value8;
-    }
-
-    public Double getValue9() {
-        return value9;
-    }
-
-    public void setValue9(Double value9) {
-        this.value9 = value9;
-    }
-
-    public Double getValue10() {
-        return value10;
-    }
-
-    public void setValue10(Double value10) {
-        this.value10 = value10;
-    }
-
-    public Double getValue11() {
-        return value11;
-    }
-
-    public void setValue11(Double value11) {
-        this.value11 = value11;
-    }
-
-    public Double getValue12() {
-        return value12;
-    }
-
-    public void setValue12(Double value12) {
-        this.value12 = value12;
-    }
-    public String getTimeCode() {
-        return timeCode;
-    }
-
-    public void setTimeCode(String timeCode) {
-        this.timeCode = timeCode;
-    }
-    public List<Map> getTablehead() {
-        return tablehead;
-    }
-
-    public void setTablehead(List<Map> tablehead) {
-        this.tablehead = tablehead;
-    }
-    public List<dailyReport> getTabledata() {
-        return tabledata;
-    }
-
-    public void setTabledata(List<dailyReport> tabledata) {
-        this.tabledata = tabledata;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/mapper/comprehensiveStatisticsMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/mapper/comprehensiveStatisticsMapper.java
deleted file mode 100644
index 65e06f6..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/mapper/comprehensiveStatisticsMapper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.mapper;
-
-import com.dingzhuo.energy.basic.data.facility.domain.FacilityArchives;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.comprehensiveStatistics.domain.comprehensiveStatistics;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-public interface comprehensiveStatisticsMapper {
-    List<FacilityArchives> getFacilityArchives();
-    List<comprehensiveStatistics> getDatasByList(@Param("indexIds") List<String> indexIds, @Param("beginTime") Date beginTime,
-                                                 @Param("endTime") Date endTime,
-                                                 @Param("timeType") TimeType timeType);
-    List<comprehensiveStatistics> getDatasByIndex(@Param("indexIds") List<String> indexIds, @Param("timeCode") String timeCode);
-    List<comprehensiveStatistics> getDatasIndex(@Param("indexIds") List<String> indexIds,@Param("timeCode") String timeCode);
-    List<comprehensiveStatistics> getEnergyByIndex(@Param("indexType") String indexType);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/mapper/dailyComprehensiveMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/mapper/dailyComprehensiveMapper.java
deleted file mode 100644
index 222b696..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/mapper/dailyComprehensiveMapper.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.mapper;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.comprehensiveStatistics.domain.dailyComprehensive;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- *鍏ㄥ巶缁煎悎鑳借�楃粺璁� 鏃�
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface dailyComprehensiveMapper {
-    public List<dailyComprehensive> getdailyComprehensiveList(@Param("nodeId") String nodeId,
-                                                              @Param("dataList") List<dailyComprehensive> dataList,
-                                                              @Param("beginTime") Date beginTime,
-                                                              @Param("endTime") Date endTime,
-                                                              @Param("timeType") TimeType timeType,
-                                                              @Param("indexStorageId") String indexStorageId);
-
-    List<dailyComprehensive> getListChart(@Param("indexId") String indexId,
-                                            @Param("beginTime") Date beginTime,
-                                            @Param("endTime") Date endTime,
-                                            @Param("timeType") TimeType timeType,
-                                            @Param("indexStorageId")  String indexStorageId);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/mapper/monthlyComprehensiveMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/mapper/monthlyComprehensiveMapper.java
deleted file mode 100644
index af3dc6f..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/mapper/monthlyComprehensiveMapper.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.mapper;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.comprehensiveStatistics.domain.monthlyComprehensive;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 鍏ㄥ巶缁煎悎鑳借�楃粺璁� 鏈�
- *
- * @author sys
- * @date 2020-03-25
- */
-public interface monthlyComprehensiveMapper {
-    public List<monthlyComprehensive> getMonthlyComprehensiveList(@Param("nodeId") String nodeId,
-                                                                  @Param("dataList") List<monthlyComprehensive> dataList,
-                                                                  @Param("beginTime") Date beginTime,
-                                                                  @Param("endTime") Date endTime,
-                                                                  @Param("timeType") TimeType timeType,
-                                                                  @Param("indexStorageId") String indexStorageId);
-
-    List<monthlyComprehensive> getListChart(@Param("indexId") String indexId,
-                                            @Param("beginTime") Date beginTime,
-                                            @Param("endTime") Date endTime,
-                                            @Param("timeType") TimeType timeType,
-                                            @Param("indexStorageId") String indexStorageId);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/mapper/processEnergyConsumptionMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/mapper/processEnergyConsumptionMapper.java
deleted file mode 100644
index 6e62b4a..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/mapper/processEnergyConsumptionMapper.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.mapper;
-
-
-public interface processEnergyConsumptionMapper {
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/mapper/yearComprehensiveMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/mapper/yearComprehensiveMapper.java
deleted file mode 100644
index 0b32bb1..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/mapper/yearComprehensiveMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.mapper;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.comprehensiveStatistics.domain.yearComperhensive;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 鍏ㄥ巶缁煎悎鑳借�楃粺璁� 骞�
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface yearComprehensiveMapper {
-    public List<yearComperhensive> getYearComprehensiveList(@Param("nodeId") String nodeId,
-                                                               @Param("dataList") List<yearComperhensive> dataList,
-                                                               @Param("beginTime") Date beginTime,
-                                                               @Param("endTime") Date endTime,
-                                                               @Param("timeType") TimeType timeType,
-                                                               @Param("indexStorageId") String indexStorageId);
-    List<yearComperhensive> getListChart(@Param("indexId") String indexId,
-                                            @Param("beginTime") Date beginTime,
-                                            @Param("endTime") Date endTime,
-                                            @Param("timeType") TimeType timeType,
-                                            @Param("indexStorageId") String indexStorageId);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/IComprehensiveStatisticsService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/IComprehensiveStatisticsService.java
deleted file mode 100644
index 9a4a869..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/IComprehensiveStatisticsService.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.service;
-
-import com.dingzhuo.energy.basic.data.facility.domain.FacilityArchives;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.comprehensiveStatistics.domain.comprehensiveStatistics;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice鎺ュ彛
- *
- * @author ruoyi
- * @date 2020-02-07
- */
-public interface IComprehensiveStatisticsService {
-    List<FacilityArchives> getFacilityArchives();
-    List<comprehensiveStatistics> getDatasByList(List<String> indexIds,Date beginTime, Date endTime,TimeType timeType);
-    List<comprehensiveStatistics> getDatasByIndex(List<String> indexIds,Date beginTime, TimeType timeType);
-    List<comprehensiveStatistics>  getDatasIndex(List<String> indexIds,Date dataTime, TimeType timeType);
-    List<comprehensiveStatistics> getEnergyByIndex(String indexType);
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/IdailyComprehensive.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/IdailyComprehensive.java
deleted file mode 100644
index c31e68e..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/IdailyComprehensive.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.comprehensiveStatistics.domain.dailyComprehensive;
-import java.util.Date;
-import java.util.List;
-
-/**
- * 鍏ㄥ巶缁煎悎鑳借�楃粺璁� 鏃�
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface IdailyComprehensive {
-    public List<dailyComprehensive> getdailyComprehensiveList(String nodeId, List<dailyComprehensive> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-    List<dailyComprehensive> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/ImonthlyComprehensive.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/ImonthlyComprehensive.java
deleted file mode 100644
index 8c62402..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/ImonthlyComprehensive.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.comprehensiveStatistics.domain.monthlyComprehensive;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 鍏ㄥ巶缁煎悎鑳借�楃粺璁� 鏈�
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface ImonthlyComprehensive {
-    public List<monthlyComprehensive> getMonthlyComprehensiveList(String nodeId, List<monthlyComprehensive> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-    List<monthlyComprehensive> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/IyearComprehensive.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/IyearComprehensive.java
deleted file mode 100644
index c7c416d..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/IyearComprehensive.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.comprehensiveStatistics.domain.yearComperhensive;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 鍏ㄥ巶缁煎悎鑳借�楃粺璁� 骞�
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface IyearComprehensive {
-    public List<yearComperhensive> getYearComprehensiveList(String nodeId, List<yearComperhensive> dataList,
-                                                            Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-    List<yearComperhensive> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/impl/comprehensiveStatisticsImp.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/impl/comprehensiveStatisticsImp.java
deleted file mode 100644
index a6049c6..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/impl/comprehensiveStatisticsImp.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.service.impl;
-
-import com.dingzhuo.energy.basic.data.facility.domain.FacilityArchives;
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.comprehensiveStatistics.domain.comprehensiveStatistics;
-import com.dingzhuo.energy.project.comprehensiveStatistics.mapper.comprehensiveStatisticsMapper;
-import com.dingzhuo.energy.project.comprehensiveStatistics.service.IComprehensiveStatisticsService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-
-/**
- * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞�
- *
- * @author ruoyi
- * @date 2020-02-07
- */
-@Service
-public  class comprehensiveStatisticsImp implements IComprehensiveStatisticsService{
-    @Autowired
-    private comprehensiveStatisticsMapper statisticsMapperpper;
-    @Override
-    public List<FacilityArchives> getFacilityArchives() {
-        return statisticsMapperpper.getFacilityArchives();
-    }
-
-    @Override
-    public List<comprehensiveStatistics> getDatasByList(List<String> indexIds, Date beginTime, Date endTime,TimeType timeType) {
-        if (indexIds != null && !indexIds.isEmpty()) {
-            return statisticsMapperpper.getDatasByList(indexIds, beginTime,endTime,timeType);
-        }
-        return Collections.emptyList();
-    }
-    @Override
-    public List<comprehensiveStatistics> getDatasByIndex(List<String> indexIds, Date dataTime, TimeType timeType) {
-        if (indexIds != null && !indexIds.isEmpty()) {
-            String timeCode = TimeManager.getTimeCode(dataTime, timeType);
-            return statisticsMapperpper.getDatasByIndex(indexIds, timeCode);
-        }
-        return Collections.emptyList();
-    }
-    @Override
-    public List<comprehensiveStatistics> getDatasIndex(List<String> indexIds, Date dataTime, TimeType timeType) {
-        if (indexIds != null && !indexIds.isEmpty()) {
-            String timeCode = TimeManager.getTimeCode(dataTime, timeType);
-            return statisticsMapperpper.getDatasIndex(indexIds, timeCode);
-        }
-        return Collections.emptyList();
-    }
-    @Override
-    public List<comprehensiveStatistics> getEnergyByIndex(String indexType) {
-            return statisticsMapperpper.getEnergyByIndex(indexType);
-
-    }
-
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/impl/dailyComprehensiveServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/impl/dailyComprehensiveServiceImpl.java
deleted file mode 100644
index 34dec9d..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/impl/dailyComprehensiveServiceImpl.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.service.impl;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.comprehensiveStatistics.domain.dailyComprehensive;
-import com.dingzhuo.energy.project.comprehensiveStatistics.mapper.dailyComprehensiveMapper;
-import com.dingzhuo.energy.project.comprehensiveStatistics.service.IdailyComprehensive;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-/**
- * 涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-03-25
- */
-@Service
-public class dailyComprehensiveServiceImpl implements IdailyComprehensive {
-    @Autowired
-    private dailyComprehensiveMapper dailyMapper;
-
-    public List<dailyComprehensive> getdailyComprehensiveList(String nodeId, List<dailyComprehensive> dataList,
-                                                              Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
-
-        if (StringUtils.isNotEmpty(nodeId)) {
-            return dailyMapper.getdailyComprehensiveList(nodeId, dataList, beginTime, endTime, timeType, indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-    @Override
-    public List<dailyComprehensive> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
-        if (indexId != null && !indexId.isEmpty()) {
-            return dailyMapper.getListChart(indexId,beginTime,endTime,timeType,indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/impl/monthlyComprehensiveServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/impl/monthlyComprehensiveServiceImpl.java
deleted file mode 100644
index 48e87ee..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/impl/monthlyComprehensiveServiceImpl.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.service.impl;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.comprehensiveStatistics.domain.monthlyComprehensive;
-import com.dingzhuo.energy.project.comprehensiveStatistics.mapper.monthlyComprehensiveMapper;
-import com.dingzhuo.energy.project.comprehensiveStatistics.service.ImonthlyComprehensive;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-/**
- * 涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-03-25
- */
-@Service
-public class monthlyComprehensiveServiceImpl implements ImonthlyComprehensive {
-    @Autowired
-    private monthlyComprehensiveMapper monthMapper;
-
-    public List<monthlyComprehensive> getMonthlyComprehensiveList(String nodeId, List<monthlyComprehensive> dataList,
-                                                                  Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
-        if (StringUtils.isNotEmpty(nodeId)) {
-            return monthMapper.getMonthlyComprehensiveList(nodeId, dataList, beginTime, endTime, timeType, indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-
-    @Override
-    public List<monthlyComprehensive> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
-        if (indexId != null && !indexId.isEmpty()) {
-            return monthMapper.getListChart(indexId,beginTime,endTime,timeType,indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/impl/processEnergyConsumptionImp.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/impl/processEnergyConsumptionImp.java
deleted file mode 100644
index 63ac936..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/impl/processEnergyConsumptionImp.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.service.impl;
-
-import com.dingzhuo.energy.basic.data.facility.domain.FacilityArchives;
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.comprehensiveStatistics.domain.comprehensive;
-import com.dingzhuo.energy.project.comprehensiveStatistics.domain.comprehensiveStatistics;
-import com.dingzhuo.energy.project.comprehensiveStatistics.mapper.comprehensiveStatisticsMapper;
-import com.dingzhuo.energy.project.comprehensiveStatistics.mapper.processEnergyConsumptionMapper;
-import com.dingzhuo.energy.project.comprehensiveStatistics.service.IComprehensiveStatisticsService;
-import com.dingzhuo.energy.project.comprehensiveStatistics.service.processEnergyConsumptionService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-
-/**
- * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞�
- *
- * @author ruoyi
- * @date 2020-02-07
- */
-@Service
-public  class processEnergyConsumptionImp implements processEnergyConsumptionService {
-    @Autowired
-    private processEnergyConsumptionMapper processEnergyConsumption;
-
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/impl/yearComprehensiveServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/impl/yearComprehensiveServiceImpl.java
deleted file mode 100644
index 657614b..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/impl/yearComprehensiveServiceImpl.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.service.impl;
-
-import cn.hutool.core.date.DateUtil;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.common.CommonConst;
-import com.dingzhuo.energy.project.common.DateTimeUtil;
-import com.dingzhuo.energy.project.comprehensiveStatistics.domain.yearComperhensive;
-import com.dingzhuo.energy.project.comprehensiveStatistics.mapper.yearComprehensiveMapper;
-import com.dingzhuo.energy.project.comprehensiveStatistics.service.IyearComprehensive;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.ObjectUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * 涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-03-25
- */
-@Service
-public class yearComprehensiveServiceImpl implements IyearComprehensive {
-    @Autowired
-    private yearComprehensiveMapper yearMapper;
-
-    @Override
-    public List<yearComperhensive> getYearComprehensiveList(String nodeId, List<yearComperhensive> dataList,
-                                                            Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
-        if (StringUtils.isNotEmpty(nodeId)) {
-            return yearMapper.getYearComprehensiveList(nodeId, dataList, beginTime, endTime, timeType, indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-    @Override
-    public List<yearComperhensive> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
-        List<yearComperhensive> dataList = new ArrayList<>();
-        if (StringUtils.isNotEmpty(indexId)) {
-            List<yearComperhensive> listChart = yearMapper.getListChart(indexId, beginTime, endTime, timeType, indexStorageId);
-            if (CollectionUtils.isNotEmpty(listChart)) {
-                Date date = new Date();
-                yearComperhensive first = listChart.get(CommonConst.DIGIT_0);
-                Map<String, yearComperhensive> listChartMap = yearMapper.getListChart(indexId, beginTime, endTime, timeType, indexStorageId)
-                        .stream().collect(Collectors.toMap(yearComperhensive::getTimeCode, prot -> prot));
-                while (beginTime.before(date)) {
-                    yearComperhensive yearComperhensive = new yearComperhensive();
-                    String format = CommonConst.WORD_M + DateUtil.format(beginTime, DateTimeUtil.COMMON_PATTERN_MONTH);
-                    yearComperhensive item = listChartMap.get(format);
-                    if (ObjectUtils.isNotEmpty(item)) {
-                        yearComperhensive = item;
-                    } else {
-                        yearComperhensive.setTimeCode(format);
-                        yearComperhensive.setIndexId(indexId);
-                        yearComperhensive.setTimeType(timeType.name());
-                        yearComperhensive.setUnitId(first.getUnitId());
-                        yearComperhensive.setIndexName(first.getIndexName());
-                    }
-                    dataList.add(yearComperhensive);
-                    beginTime = DateUtil.offsetMonth(beginTime, CommonConst.DIGIT_1);
-                }
-            }
-        }
-        return dataList;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/processEnergyConsumptionService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/processEnergyConsumptionService.java
deleted file mode 100644
index 8f274e9..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/comprehensiveStatistics/service/processEnergyConsumptionService.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.dingzhuo.energy.project.comprehensiveStatistics.service;
-
-
-/**
- * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice鎺ュ彛
- *
- * @author ruoyi
- * @date 2020-02-07
- */
-public interface processEnergyConsumptionService {
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/ConglomeratePushTask.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/ConglomeratePushTask.java
deleted file mode 100644
index 009e88e..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/ConglomeratePushTask.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.dingzhuo.energy.project.conglomeratepush;
-
-import com.dingzhuo.energy.project.conglomeratepush.service.IConglomeratePushLogService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.annotation.Scheduled;
-
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 闆嗗洟鎶曢�掍换鍔�
- * @author zhw
- */
-@Configuration      //1.涓昏鐢ㄤ簬鏍囪閰嶇疆绫伙紝鍏煎Component鐨勬晥鏋溿��
-@EnableScheduling   // 2.寮�鍚畾鏃朵换鍔�
-public class ConglomeratePushTask {
-
-    private IConglomeratePushLogService pushLogService;
-    @Autowired
-    public ConglomeratePushTask(IConglomeratePushLogService pushLogService) {
-        this.pushLogService = pushLogService;
-    }
-
-    /**
-     * 娣诲姞瀹氭椂浠诲姟
-     */
-//    @Scheduled(cron = "0/5 * * * * ?")
-    private void configureTasks() {
-        System.err.println("鎵ц闈欐�佸畾鏃朵换鍔℃椂闂�: " + LocalDateTime.now());
-        //璇诲彇瑕佹姇閫掔殑鏁版嵁瀵硅薄
-        List<Object> pushDataList = new ArrayList<>();
-        //缁勭粐鎶曢�掓姤鏂�
-        StringBuffer pushMessageBf = new StringBuffer();
-
-//        pushLogService.sendConglomerate(pushMessageBf.toString(),1);
-        //娴嬭瘯鏃ュ織淇濆瓨
-        pushLogService.test();
-
-
-    }
-
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/HttpUtil.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/HttpUtil.java
deleted file mode 100644
index d8c5f1f..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/HttpUtil.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.dingzhuo.energy.project.conglomeratepush;
-
-import okhttp3.*;
-
-import java.io.IOException;
-import java.util.Map;
-
-/**
- *OkHttpClient 鍙戦��
- *
- * @author zhw
- * @since 2022-03-09
- */
-public class HttpUtil {
-
-
-    /**
-     * post璇锋眰
-     * @param params
-     * @param url
-     * @return
-     */
-    public static Response post(Map<String,String> params, String url){
-
-        OkHttpClient client = new OkHttpClient();
-		FormBody.Builder builder = new FormBody.Builder();
-
-        for (Map.Entry<String, String> entry : params.entrySet()) {
-			builder.add(entry.getKey(),entry.getValue());
-        }
-        RequestBody formBody = builder.build();
-
-        Request request = new Request.Builder()
-                .url(url)
-                .post(formBody)
-                .build();
-
-        try {
-            Response response = client.newCall(request).execute();
-            return response;
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
-
-    /**
-     *get璇锋眰
-     * @param url
-     * @return
-     */
-	public static Response get(String url){
-		OkHttpClient client = new OkHttpClient();
-		Request request = new Request.Builder()
-			.url(url)
-			.build();
-		try {
-			Response response = client.newCall(request).execute();
-			return response;
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/domain/ConglomeratePushLog.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/domain/ConglomeratePushLog.java
deleted file mode 100644
index 82ad130..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/domain/ConglomeratePushLog.java
+++ /dev/null
@@ -1,106 +0,0 @@
-
-package com.dingzhuo.energy.project.conglomeratepush.domain;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 闆嗗洟鏁版嵁鎺ㄩ�佸疄浣撶被
- *
- * @author zhw
- * @since 2022-03-09
- */
-public class ConglomeratePushLog implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-
-	/**
-	 * 涓婚敭
-	 */
-		private String id;
-
-		/**
-		* 鎺ㄩ�佺姸鎬侊紙Y銆丯锛�
-		*/
-		private String pushStatus;
-		/**
-		* 鎺ㄩ�佹椂闂�
-		*/
-		private Date pushTime;
-		/**
-		* 鎺ㄩ�佸唴瀹癸紙json涓诧級
-		*/
-		private String pushContent;
-		/**
-		* 鎺ㄩ�佹鏁�
-		*/
-		private Long pushCount;
-
-		/**
-		* 鍙戦�佽繑鍥炰俊鎭�(sendRes)
-		*/
-		private String pushResult;
-
-		/**
-		 * 寮傚父淇℃伅璁板綍
-		 */
-		private String errorInfo;
-
-
-	public String getId() {
-		return id;
-	}
-
-	public void setId(String id) {
-		this.id = id;
-	}
-
-	public String getPushStatus() {
-		return pushStatus;
-	}
-
-	public void setPushStatus(String pushStatus) {
-		this.pushStatus = pushStatus;
-	}
-
-	public Date getPushTime() {
-		return pushTime;
-	}
-
-	public void setPushTime(Date pushTime) {
-		this.pushTime = pushTime;
-	}
-
-	public String getPushContent() {
-		return pushContent;
-	}
-
-	public void setPushContent(String pushContent) {
-		this.pushContent = pushContent;
-	}
-
-	public Long getPushCount() {
-		return pushCount;
-	}
-
-	public void setPushCount(Long pushCount) {
-		this.pushCount = pushCount;
-	}
-
-	public String getPushResult() {
-		return pushResult;
-	}
-
-	public void setPushResult(String pushResult) {
-		this.pushResult = pushResult;
-	}
-
-	public String getErrorInfo() {
-		return errorInfo;
-	}
-
-	public void setErrorInfo(String errorInfo) {
-		this.errorInfo = errorInfo;
-	}
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/mapper/ConglomeratePushLogMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/mapper/ConglomeratePushLogMapper.java
deleted file mode 100644
index f464532..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/mapper/ConglomeratePushLogMapper.java
+++ /dev/null
@@ -1,17 +0,0 @@
-
-package com.dingzhuo.energy.project.conglomeratepush.mapper;
-
-
-import com.dingzhuo.energy.project.conglomeratepush.domain.ConglomeratePushLog;
-
-/**
- * 闆嗗洟淇℃伅鎺ㄩ�佽〃 Mapper 鎺ュ彛
- *
- * @author zhw
- * @since 2022-03-09
- */
-public interface ConglomeratePushLogMapper{
-
-  int  saveLog(ConglomeratePushLog conglomeratePushLog);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/mqtt/InitCallback.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/mqtt/InitCallback.java
deleted file mode 100644
index b73342e..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/mqtt/InitCallback.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.dingzhuo.energy.project.conglomeratepush.mqtt;
-
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONException;
-import com.alibaba.fastjson.JSONObject;
-import com.dingzhuo.energy.common.core.lang.UUID;
-import com.dingzhuo.energy.project.gateway.domain.GatewayHbtLog;
-import com.dingzhuo.energy.project.gateway.domain.GatewaySetting;
-import com.dingzhuo.energy.project.gateway.service.IGatewayHbtLogService;
-import com.dingzhuo.energy.project.gateway.service.IGatewaySettingService;
-import lombok.extern.slf4j.Slf4j;
-import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
-import org.eclipse.paho.client.mqttv3.MqttCallback;
-import org.eclipse.paho.client.mqttv3.MqttMessage;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.nio.charset.StandardCharsets;
-import java.util.Date;
-import java.util.Iterator;
-
-/**
- * MQTT鍥炶皟鍑芥暟
- *MqttClientCallback 鍥炶皟鍑芥暟绫讳腑鍙兘涓嶈兘鐢� @Autowired 娉ㄥ叆鐨勶紝 瑙e喅鍔炴硶  SpringContextHolder 绫诲紩鍏�
- * @author zhw
- * @since 2022/04/05
- */
-@Slf4j
-@Component
-public class InitCallback implements MqttCallback {
-
-  @Autowired
-  private IGatewayHbtLogService gatewayHbtLogService;
-
-  @Autowired
-  private IGatewaySettingService gatewaySettingService;
-
-  /**
-   * MQTT 鏂紑杩炴帴浼氭墽琛屾鏂规硶
-   */
-  @Override
-  public void connectionLost(Throwable cause)
-  {
-    log.error(cause.getMessage(), cause);
-  }
-
-  /**
-   * publish鍙戝竷鎴愬姛鍚庝細鎵ц鍒拌繖閲�
-   */
-  @Override
-  public void deliveryComplete(IMqttDeliveryToken token) {
-    //鍙戝竷瀹屾垚鍚� 璁板綍鏃ュ織淇℃伅 骞舵柇寮�杩炴帴
-  }
-
-  /**
-   * subscribe璁㈤槄鍚庡緱鍒扮殑娑堟伅浼氭墽琛屽埌杩欓噷
-   */
-  @Override
-  public void messageArrived(String topic, MqttMessage message) {
-    String result = new String(message.getPayload(), StandardCharsets.UTF_8);
-     try {
-//      JSONObject jsonObject = JSON.parseObject(result);
-//       Date hbtTime =  jsonObject.getDate("ts");
-//       Iterator<String> keys =  jsonObject.getJSONObject("d").keySet().iterator();
-//       if(keys.hasNext())
-//       {
-//         String key = keys.next();
-//         //鏇存柊瀹炴椂鐘舵��
-//         GatewaySetting gatewaySetting = new GatewaySetting();
-//         gatewaySetting.setGatewayNum(key);
-//         gatewaySetting.setHbtTime(hbtTime);
-//         gatewaySettingService.updateGatewaySettingByNum(gatewaySetting);
-//
-//         //璁板綍鏃ュ織琛�
-//         GatewayHbtLog gatewayHbtLog = new GatewayHbtLog();
-//         gatewayHbtLog.setId(UUID.fastUUID().toString());
-//         gatewayHbtLog.setGatewayNo(key);
-//         gatewayHbtLog.setHbtTime(hbtTime);
-//         gatewayHbtLog.setContent(result);
-//         gatewayHbtLogService.insertGatewayHbtLog(gatewayHbtLog);
-//       }
-
-    } catch (JSONException e) {
-      log.error("JSON Format Parsing Exception : {}", result);
-    }
-  }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/mqtt/MQTTConnect.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/mqtt/MQTTConnect.java
deleted file mode 100644
index c5c05c1..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/mqtt/MQTTConnect.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package com.dingzhuo.energy.project.conglomeratepush.mqtt;
-
-import lombok.extern.slf4j.Slf4j;
-import org.eclipse.paho.client.mqttv3.*;
-import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-/**
- * MQTT宸ュ叿绫绘搷浣�
- *
- * @author zhw
- * @since 2022/04/05
- */
-@Slf4j
-@Component
-public class MQTTConnect {
-
-  @Value("${mqtt.host}")
-  private String HOST;
-  private final String clientId = "ClientHBT" + (int) (Math.random() * 100000000);
-  private MqttClient mqttClient;
-
-  /**
-   * 瀹㈡埛绔痗onnect杩炴帴mqtt鏈嶅姟鍣�
-   *
-   * @param username 鐢ㄦ埛鍚�
-   * @param password 瀵嗙爜
-   * @param mqttCallback 鍥炶皟鍑芥暟
-   **/
-  public void setMqttClient(String username, String password, MqttCallback mqttCallback)
-      throws MqttException {
-    System.out.println("MQTT鏈嶅姟鍣ㄨ繛鎺ュ紑濮�...........");
-    MqttConnectOptions options = mqttConnectOptions(username, password);
-    mqttClient.setCallback(mqttCallback);
-    mqttClient.connect(options);
-  }
-
-  /**
-   * MQTT杩炴帴鍙傛暟璁剧疆
-   */
-  private MqttConnectOptions mqttConnectOptions(String userName, String passWord)
-      throws MqttException {
-    mqttClient = new MqttClient(HOST, clientId, new MemoryPersistence());
-    MqttConnectOptions options = new MqttConnectOptions();
-    options.setUserName(userName);
-    options.setPassword(passWord.toCharArray());
-    options.setConnectionTimeout(10);///榛樿锛�30
-    options.setAutomaticReconnect(true);//榛樿锛歠alse
-    options.setCleanSession(false);//榛樿锛歵rue
-    //options.setKeepAliveInterval(20);//榛樿锛�60
-    return options;
-  }
-
-  /**
-   * 鍏抽棴MQTT杩炴帴
-   */
-  public void close() throws MqttException {
-    try {
-      if(mqttClient!=null){
-        if(mqttClient.isConnected()){
-          mqttClient.unsubscribe(clientId);
-        }
-        mqttClient.disconnect();
-        mqttClient.close();
-      }
-
-    }catch (Exception e){
-      e.printStackTrace();
-    }
-
-  }
-
-  /**
-   * 鍚戞煇涓富棰樺彂甯冩秷鎭� 榛樿qos锛�1
-   */
-  public void pub(String topic, String msg) throws MqttException {
-    MqttMessage mqttMessage = new MqttMessage();
-    //mqttMessage.setQos(2);
-    mqttMessage.setPayload(msg.getBytes());
-    MqttTopic mqttTopic = mqttClient.getTopic(topic);
-    MqttDeliveryToken token = mqttTopic.publish(mqttMessage);
-    token.waitForCompletion();
-  }
-
-  /**
-   * 鍚戞煇涓富棰樺彂甯冩秷鎭�
-   *
-   * @param topic: 鍙戝竷鐨勪富棰�
-   * @param msg: 鍙戝竷鐨勬秷鎭�
-   * @param qos: 娑堟伅璐ㄩ噺    Qos锛�0銆�1銆�2
-   */
-  public void pub(String topic, String msg, int qos) throws MqttException {
-    MqttMessage mqttMessage = new MqttMessage();
-    mqttMessage.setQos(qos);
-    mqttMessage.setPayload(msg.getBytes());
-    MqttTopic mqttTopic = mqttClient.getTopic(topic);
-    MqttDeliveryToken token = mqttTopic.publish(mqttMessage);
-    token.waitForCompletion();
-  }
-
-  /**
-   * 璁㈤槄鏌愪竴涓富棰� 锛屾鏂规硶榛樿鐨勭殑Qos绛夌骇涓猴細1
-   *
-   * @param topic 涓婚
-   */
-  public void sub(String topic) throws MqttException {
-    mqttClient.subscribe(topic);
-  }
-
-  /**
-   * 璁㈤槄鏌愪竴涓富棰橈紝鍙惡甯os
-   *
-   * @param topic 鎵�瑕佽闃呯殑涓婚
-   * @param qos 娑堟伅璐ㄩ噺锛�0銆�1銆�2
-   */
-  public void sub(String topic, int qos) throws MqttException {
-    mqttClient.subscribe(topic, qos);
-  }
-
-  public static void main(String[] args) throws MqttException {
-    //娴嬭瘯杩炴帴鍙婁富鍔ㄨ闃呬俊鎭� 杈撳嚭 閫氳繃
-    //瑕佸仛鎺ㄩ�� 鐩存帴鍦ㄨ鍒掍换鍔′腑杩炴帴鎺ㄩ�佸嵆鍙紝鍋氬叏灞�conn瀵硅薄锛岀劧鍚� 姣忔璁″垝浠诲姟杞鍙戦�佸墠鍒ゆ柇
-    //瀵硅薄鏄惁瀛樺湪涓� 娌℃湁鍏抽棴 瑕佽繘琛屽鐞�
-//    MQTTConnect mqttConnect = new MQTTConnect();
-//    String msg = "Mr.Qu" + (int) (Math.random() * 100000000);
-//    mqttConnect.setMqttClient("dingzhuo", "dingzhuo@2022", new InitCallback());
-//    mqttConnect.sub("iot-2/evt/waconn/#",0);
-//    try {
-//      Thread.sleep(5000);
-//    } catch (InterruptedException e) {
-//      e.printStackTrace();
-//    }
-//    mqttConnect.close();
-  }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/mqtt/MQTTListener.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/mqtt/MQTTListener.java
deleted file mode 100644
index 0ae5a1b..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/mqtt/MQTTListener.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.dingzhuo.energy.project.conglomeratepush.mqtt;
-
-import lombok.extern.slf4j.Slf4j;
-import org.eclipse.paho.client.mqttv3.MqttException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.ApplicationListener;
-import org.springframework.context.event.ContextRefreshedEvent;
-import org.springframework.stereotype.Component;
-
-/**
- * 椤圭洰鍚姩 鐩戝惉涓婚 涓诲姩璁㈤槄鐢� 涓嶈闃呭彲 涓嶅惎鐢� 娉ㄩ噴鎺塁omponent
- *
- * @author zhw
- * @since 2022/04/05
- */
-@Slf4j
-@Component //涓嶈璺熼殢绯荤粺鍚姩璁㈤槄灏卞厛灞忚斀锛岄渶瑕佸啀鎵撳紑
-public class MQTTListener implements ApplicationListener<ContextRefreshedEvent> {
-
-  @Value("${mqtt.username}")
-  private String username;
-  @Value("${mqtt.password}")
-  private String password;
-  @Value("${mqtt.subhbt}")
-  private String subhbt;
-  @Value("${mqtt.subhbtqos}")
-  private int subhbtqos;
-  private final MQTTConnect server;
-  private final InitCallback initCallback;
-
-  @Autowired
-  public MQTTListener(MQTTConnect server, InitCallback initCallback) {
-//    System.out.println("MQTT server 璺熼殢鍚姩鐩戝惉鍒濆鍖�");
-    this.server = server;
-    this.initCallback = initCallback;
-  }
-
-  @Override
-  public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
-//    System.out.println("MQTT server 鍚姩璁㈤槄");
-//    try {
-//      server.setMqttClient(username, password, initCallback);
-//      server.sub(subhbt,subhbtqos);
-//    } catch (MqttException e) {
-//      log.error(e.getMessage(), e);
-//    }
-  }
-}
-
-
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/service/IConglomeratePushLogService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/service/IConglomeratePushLogService.java
deleted file mode 100644
index 389e21b..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/service/IConglomeratePushLogService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.dingzhuo.energy.project.conglomeratepush.service;
-
-/**
- * 鎺ュ彛
- * @author zhw
- */
-public interface IConglomeratePushLogService {
-    /**
-     * 鍙戦�侀泦鍥㈠鎺ヤ俊鎭�
-     * @param jsonData
-     * @param pushCount
-     */
-    void sendConglomerate(String jsonData,long pushCount);
-
-    public void test();
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/service/impl/ConglomeratePushLogServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/service/impl/ConglomeratePushLogServiceImpl.java
deleted file mode 100644
index d610f37..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/conglomeratepush/service/impl/ConglomeratePushLogServiceImpl.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.dingzhuo.energy.project.conglomeratepush.service.impl;
-
-import com.alibaba.fastjson.JSONObject;
-import com.dingzhuo.energy.common.core.lang.UUID;
-import com.dingzhuo.energy.project.conglomeratepush.HttpUtil;
-import com.dingzhuo.energy.project.conglomeratepush.domain.ConglomeratePushLog;
-import com.dingzhuo.energy.project.conglomeratepush.mapper.ConglomeratePushLogMapper;
-import com.dingzhuo.energy.project.conglomeratepush.service.IConglomeratePushLogService;
-import okhttp3.Response;
-import org.apache.commons.lang3.ObjectUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author zhw
- */
-@Service
-public class ConglomeratePushLogServiceImpl  implements IConglomeratePushLogService {
-
-    @Autowired
-    private ConglomeratePushLogMapper conglomeratePushLogMapper;
-
-    @Override
-    public void test(){
-        ConglomeratePushLog conglomeratePushLog = new ConglomeratePushLog();
-        conglomeratePushLog.setId(UUID.fastUUID().toString());
-        conglomeratePushLog.setPushContent("abcd");
-        conglomeratePushLog.setPushResult("111");
-        conglomeratePushLog.setPushStatus("abssscd");
-        conglomeratePushLog.setPushCount(1L);
-        conglomeratePushLog.setPushTime(new Date());
-        //淇濆瓨鍙戦�佷俊鎭�
-        conglomeratePushLogMapper.saveLog(conglomeratePushLog);
-    }
-
-    @Override
-    public void sendConglomerate(String jsonData,long pushCount){
-        ConglomeratePushLog conglomeratePushLog = new ConglomeratePushLog();
-        conglomeratePushLog.setId(UUID.fastUUID().toString());
-        //璁板綍鍙戦�佷俊鎭殑瀵硅薄
-        JSONObject sendResJson=null;
-        String exeRes="N";
-        try{
-            //瑕佸彂閫佺殑鏁版嵁瀵硅薄
-            jsonData = "";
-            sendResJson = send(jsonData);
-            //涓嶈鎴愬姛銆佸け璐� 閮借褰曞埌鎺ㄩ�� 淇℃伅鍙戦�佽〃涓�
-            String success = sendResJson.getString("success");
-            //鎴愬姛
-            if(StringUtils.isNotBlank(success) && StringUtils.equals(success, "true")){
-                exeRes="Y";
-            }
-        }catch (Exception e){
-            //璁板綍浠ヤ笅Log 鎹曡幏寮傚父涓嶈鎶涘嚭
-            conglomeratePushLog.setErrorInfo(e.getMessage());
-        }finally {
-            //璁板綍瑕佸彂閫佺殑鍐呭
-            conglomeratePushLog.setPushContent(jsonData);
-            conglomeratePushLog.setPushResult(ObjectUtils.isNotEmpty(sendResJson)?sendResJson.toJSONString():"");
-            conglomeratePushLog.setPushStatus(exeRes);
-            conglomeratePushLog.setPushCount(pushCount);
-            conglomeratePushLog.setPushTime(new Date());
-            //淇濆瓨鍙戦�佷俊鎭�
-            conglomeratePushLogMapper.saveLog(conglomeratePushLog);
-
-        }
-    }
-
-    private JSONObject send(String jsonData){
-        try{
-            Map<String,String> params = new HashMap<String, String>();
-            params.put("appKey", "");
-            params.put("call", "");
-            params.put("timestamp", String.valueOf(System.currentTimeMillis()));
-            params.put("data", jsonData);//
-            Response response = HttpUtil.post(params,"url");
-            String res = response.body().string();
-            return JSONObject.parseObject(res);
-        }catch (Exception e)
-        {
-            JSONObject jsonObject = new JSONObject();
-            jsonObject.put("success", false);
-            jsonObject.put("result", false);
-            jsonObject.put("error", e.getMessage());
-            return jsonObject;
-        }
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/dataEntry/controller/DataItemController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/dataEntry/controller/DataItemController.java
deleted file mode 100644
index dc7b06e..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/dataEntry/controller/DataItemController.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package com.dingzhuo.energy.project.dataEntry.controller;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.dataservice.service.PeriodDataService;
-import com.dingzhuo.energy.project.common.CommonConst;
-import com.dingzhuo.energy.project.common.DateTimeUtil;
-import com.dingzhuo.energy.project.common.StringUtil;
-import com.dingzhuo.energy.project.common.TimeTypeConst;
-import com.dingzhuo.energy.project.energyConsumeInput.domain.EnergyConsumeInput;
-import com.dingzhuo.energy.project.energyConsumeInput.domain.SaveEnergyConsumeInputEntity;
-import com.dingzhuo.energy.project.energyConsumeInput.service.IEnergyConsumeInputService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.dataEntry.service.*;
-import com.dingzhuo.energy.project.dataEntry.domain.*;
-
-/**
- * 闃舵鏁版嵁褰曞叆
- *
- * @author sys
- * @date 2020-03-25
- */
-@RestController
-@Api(value = "闃舵褰曞叆",tags = {"闃舵褰曞叆"})
-@RequestMapping("/dataEntry/stagseDataEntry")
-public class DataItemController extends BaseController {
-    @Autowired
-    private IDataItemService dataItemService;
-    @Autowired
-    private PeriodDataService periodDataService;
-    @Autowired
-    private IEnergyConsumeInputService energyConsumeInputService;
-
-    /**
-     * 闃舵鏁版嵁褰曞叆鏌ヨ
-     */
-    @PreAuthorize("@ss.hasPermi('dataEntry:stagseDataEntry:list')")
-    @Log(title = "闃舵鏁版嵁褰曞叆鏌ヨ", businessType = BusinessType.UPDATE)
-    @GetMapping("/list")
-    @ApiOperation(value = "闃舵鏁版嵁褰曞叆鍒楄〃")
-    public TableDataInfo list(stagseDataEntry stagseDataEntry) {
-        stagseDataEntry.setDataTime(DateTimeUtil.getDateTimeWithTimeType(stagseDataEntry.getDataTimeStr(), stagseDataEntry.getTimeType().toString()));
-        String timeCode = TimeManager.getTimeCode(stagseDataEntry.getDataTime(), stagseDataEntry.getTimeType());
-        stagseDataEntry.setBeginTime(TimeManager.getBeginTime(timeCode));
-        stagseDataEntry.setEndTime(TimeManager.getEndTime(timeCode));
-        List<EnergyConsumeInput> list = energyConsumeInputService.selectEnergyConsumeInputList(stagseDataEntry.getNodeId(), timeCode, stagseDataEntry.getTimeType().toString());
-        for (EnergyConsumeInput input : list) {
-            input.setDataTimeStr(DateTimeUtil.getDateTimeStrWithTimeType(input.getDataTime(), stagseDataEntry.getTimeType().toString()));
-            if (StringUtil.isEmptyOrNull(input.getDataTimeStr())) {
-                input.setDataTimeStr(DateTimeUtil.getDateTimeStrWithTimeType(stagseDataEntry.getDataTime(), stagseDataEntry.getTimeType().toString()));
-            }
-            input.setCreateTimeStr(DateTimeUtil.toString(input.getCreateTime()));
-            input.setTimeType(stagseDataEntry.getTimeType());
-        }
-        return getDataTable(list);
-    }
-
-    /**
-     * 闃舵鏁版嵁褰曞叆鏌ヨ
-     */
-    @PreAuthorize("@ss.hasPermi('dataEntry:stagseDataEntry:edit')")
-    @Log(title = "闃舵鏁版嵁褰曞叆淇敼", businessType = BusinessType.UPDATE)
-    @GetMapping("/edit")
-    @ApiOperation(value = "闃舵鏁版嵁褰曞叆淇敼")
-    public TableDataInfo edit(stagseDataEntry stagseDataEntry) {
-        List<stagseDataEntry> list = dataItemService.getSettingEdit(stagseDataEntry);
-        list.forEach(s -> {
-            if (s.getDataTime() == null) {
-                s.setDataTime(stagseDataEntry.getDataTime());
-            }
-        });
-        return getDataTable(list);
-    }
-
-    /**
-     * 鏂板闃舵鏁版嵁
-     */
-    @PreAuthorize("@ss.hasPermi('dataEntry:stagseDataEntry:add')")
-    @PostMapping
-    @ApiOperation(value = "鏂板闃舵鏁版嵁")
-    public AjaxResult add(@RequestHeader("Authorization") String authorization, @RequestBody List<EnergyConsumeInput> listMap) {
-        if (listMap != null && !listMap.isEmpty()) {
-            EnergyConsumeInput temp = listMap.stream().findFirst().orElse(null);
-
-            List<String> indexIds = listMap.stream().map(EnergyConsumeInput::getIndexId).collect(Collectors.toList());
-            Date dataTime = DateTimeUtil.getDateTimeWithTimeType(temp.getDataTimeStr(), temp.getTimeType().toString());
-            String timeCode = TimeManager.getTimeCode(dataTime, temp.getTimeType());
-            int res = energyConsumeInputService.deleteEnergyConsumeInputByIds(indexIds, timeCode);
-
-            List<SaveEnergyConsumeInputEntity> dataItemList = new ArrayList<>();
-            Date endTime = DateTimeUtil.getEndTimeWithTimeType(dataTime, temp.getTimeType().toString());
-            String userName = SecurityUtils.getUsername();
-            for (EnergyConsumeInput input : listMap) {
-                if (input.getValue() != null) {
-                    SaveEnergyConsumeInputEntity data = new SaveEnergyConsumeInputEntity();
-                    data.setValue(input.getValue());
-                    data.setCreateTime(DateUtils.getNowDate());
-                    data.setIndexId(input.getIndexId());
-                    data.setIndexCode(input.getCode());
-                    data.setTimeType(temp.getTimeType().toString());
-                    data.setTimeCode(timeCode);
-                    data.setDataTime(dataTime);
-                    data.setBeginTime(dataTime);
-                    data.setEndTime(endTime);
-                    data.setCreateBy(userName);
-                    dataItemList.add(data);
-                }
-            }
-            int saveRes = energyConsumeInputService.saveEnergyConsumeInputList(dataItemList);
-            if (saveRes > 0) {
-                boolean mark = energyConsumeInputService.reCalcIndexIdByIds(indexIds, temp.getTimeType().toString(), authorization, dataTime);
-            }
-        }
-        return AjaxResult.success();
-    }
-
-    /**
-     * 闃舵鏁版嵁褰曞叆鏌ヨ
-     */
-    @PreAuthorize("@ss.hasPermi('dataEntry:stagseDataEntry:listEdit')")
-    @Log(title = "闃舵鏁版嵁褰曞叆鏌ヨ", businessType = BusinessType.UPDATE)
-    @GetMapping("/listEdit")
-    @ApiOperation(value = "闃舵鏁版嵁褰曞叆鏌ヨ")
-    public AjaxResult c(stagseDataEntry stagseDataEntry) {
-        List<String> indexCode = Arrays.asList(stagseDataEntry.getIndexCode().split(","));
-        List<stagseDataEntry> list = dataItemService.stagseDataEntry(stagseDataEntry.getNodeId(), indexCode, stagseDataEntry.getTimeType(), stagseDataEntry.getBeginTime(), stagseDataEntry.getEndTime(), stagseDataEntry.getCalcType());
-        return AjaxResult.success(list);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/dataEntry/domain/dataEntry.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/dataEntry/domain/dataEntry.java
deleted file mode 100644
index c4a7966..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/dataEntry/domain/dataEntry.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package com.dingzhuo.energy.project.dataEntry.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * stagseDataEntry瀵硅薄 data_item
- * 
- * @author sys
- * @date 2020-03-25
- */
-public class dataEntry extends BaseEntity {
-    private static final long serialVersionUID = 1L;
-
-    @Excel(name = "鎸囨爣id")
-    private String indexId;
-
-    @Excel(name = "鎸囨爣code")
-    private String timeCode;
-
-    @Excel(name = "鍊�")
-    private String value;
-
-    @Excel(name = "寮�濮嬫椂闂�")
-    private Date beginTime;
-
-    @Excel(name = "缁撴潫鏃堕棿")
-    private Date endTime;
-
-    private String quality;
-
-    @Excel(name = "鏃堕棿绫诲瀷")
-    private String timeType;
-
-    @Excel(name = "鏁版嵁鏃堕棿")
-    private Date dataTime;
-
-    public void setIndexId(String indexId) 
-    {
-        this.indexId = indexId;
-    }
-
-    public String getIndexId() 
-    {
-        return indexId;
-    }
-    public void setTimeCode(String timeCode) 
-    {
-        this.timeCode = timeCode;
-    }
-
-    public String getTimeCode() 
-    {
-        return timeCode;
-    }
-    public void setBeginTime(Date beginTime) 
-    {
-        this.beginTime = beginTime;
-    }
-
-    public String getValue() {return value;}
-
-    public void setValue(String value) {this.value = value;}
-
-    public void setQuality(String quality)
-    {
-        this.quality = quality;
-    }
-
-    public String getQuality() 
-    {
-        return quality;
-    }
-    public void setTimeType(String timeType) 
-    {
-        this.timeType = timeType;
-    }
-
-    public String getTimeType() 
-    {
-        return timeType;
-    }
-    public void setDataTime(Date dataTime) 
-    {
-        this.dataTime = dataTime;
-    }
-
-    public Date getDataTime() 
-    {
-        return dataTime;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("createTime", getCreateTime())
-            .append("updateTime", getUpdateTime())
-            .append("indexId", getIndexId())
-            .append("timeCode", getTimeCode())
-            .append("beginTime", getBeginTime())
-            .append("endTime", getEndTime())
-            .append("quality", getQuality())
-            .append("timeType", getTimeType())
-            .append("value", getValue())
-            .append("dataTime", getDataTime())
-            .toString();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/dataEntry/domain/stagseDataEntry.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/dataEntry/domain/stagseDataEntry.java
deleted file mode 100644
index 895a3e2..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/dataEntry/domain/stagseDataEntry.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.dingzhuo.energy.project.dataEntry.domain;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * stagseDataEntry瀵硅薄 data_item
- *
- * @author sys
- * @date 2020-03-25
- */
-@Data
-@ApiModel(value = "闃舵褰曞叆瀹炰綋")
-public class stagseDataEntry  implements Serializable {
-    private static final long serialVersionUID = 1L;
-    @ApiModelProperty(value = "鑺傜偣id")
-    private String nodeId;
-    @ApiModelProperty(value = "鏃堕棿绫诲瀷")
-    private TimeType timeType;
-    @ApiModelProperty(value = "鎸囨爣id")
-    private String indexId;
-    @ApiModelProperty(value = "鎸囨爣缂栫爜")
-    private String indexCode;
-    @ApiModelProperty(value = "璁$畻鏂瑰紡")
-    private String calcType;
-    @ApiModelProperty(value = "缂栫爜")
-    private String code;
-    @ApiModelProperty(value = "鍚嶇О")
-    private String name;
-    @ApiModelProperty(value = "鍗曚綅")
-    private String unitId;
-    @ApiModelProperty(value = "鍊�")
-    private Double value;
-    @ApiModelProperty(value = "鏃堕棿缂栫爜")
-    private String timeCode;
-    @ApiModelProperty(value = "鏃ユ湡")
-    private Date dataTime;
-    @ApiModelProperty(value = "鏃ユ湡瀛楃涓�")
-    private String dataTimeStr;
-    @ApiModelProperty(value = "寮�濮嬫椂闂�")
-    private Date beginTime;
-    @ApiModelProperty(value = "缁撴潫鏃堕棿")
-    private Date endTime;
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/dataEntry/mapper/DataItemMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/dataEntry/mapper/DataItemMapper.java
deleted file mode 100644
index a8fdf99..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/dataEntry/mapper/DataItemMapper.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.dingzhuo.energy.project.dataEntry.mapper;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.project.dataEntry.domain.stagseDataEntry;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 闃舵鏁版嵁褰曞叆鎺ュ彛
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface DataItemMapper {
-    /**
-     * 闃舵鏁版嵁褰曞叆
-     *
-     * @param stagseDataEntry
-     * @return 缁撴灉
-     */
-    public List<stagseDataEntry> getSettingIndex(stagseDataEntry stagseDataEntry);
-
-    public List<stagseDataEntry> getSettingEdit(stagseDataEntry stagseDataEntry);
-
-    List<stagseDataEntry> stagseDataByCode(@Param("nodeId") String nodeId,
-                                           @Param("indexCodes") List<String> indexCodes,
-                                           @Param("timeType") TimeType timeType,
-                                           @Param("beginTime") Date beginTime,
-                                           @Param("endTime") Date endTime,
-                                           @Param("calcType") String calcType);
-
-    /**
-     * 鏍规嵁indexId涓庢椂闂磋寖鍥存煡璇㈠皬鏃剁殑dataitem淇℃伅
-     *
-     * @param beginTime 寮�濮嬫椂闂�
-     * @param endTime   鎴鏃堕棿
-     * @param timeType  鏃堕棿绫诲瀷
-     * @param indexIds  鐐逛綅闆嗗悎
-     * @return
-     */
-    List<DataItem> getDataItemHourInforByIndexIds(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime,
-                                                  @Param("timeType") String timeType, @Param("indexIds") List<String> indexIds);
-
-    /**
-     * 鏍规嵁indexId涓庢椂闂寸紪鐮佹煡璇㈢偣浣嶅�煎悎璁�
-     *
-     * @param timeCode 鏃堕棿缂栫爜
-     * @param indexIds 鐐逛綅id闆嗗悎
-     * @return
-     */
-    List<DataItem> getDataItemInforByIndexIds(@Param("timeCode") String timeCode, @Param("indexIds") List<String> indexIds);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/dataEntry/service/IDataItemService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/dataEntry/service/IDataItemService.java
deleted file mode 100644
index af4a887..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/dataEntry/service/IDataItemService.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.dingzhuo.energy.project.dataEntry.service;
-
-import cn.hutool.core.date.DateTime;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.project.dataEntry.domain.stagseDataEntry;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 闃舵鏁版嵁褰曞叆鎺ュ彛
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface IDataItemService {
-    /**
-     * 鏌ヨ闇�瑕佹墜鍔ㄥ綍鍏ョ殑闃舵鏁版嵁
-     * 
-     * @param stagseDataEntry
-     * @return stagseDataEntry闆嗗悎
-     */
-    public List<stagseDataEntry> getSettingIndex(stagseDataEntry stagseDataEntry);
-
-    /**
-     * 鏌ヨ淇敼鎵嬪姩褰曞叆鐨勯樁娈垫暟鎹�
-     *
-     * @param stagseDataEntry
-     * @return stagseDataEntry闆嗗悎
-     */
-    public List<stagseDataEntry> getSettingEdit(stagseDataEntry stagseDataEntry);
-
-    public List<stagseDataEntry> stagseDataEntry(String nodeId, List<String> indexCodes,
-                                                 TimeType timeType,
-                                                 Date beginTime,
-                                                 Date endTime,
-                                                 String calcType);
-
-    /**
-     * 鏍规嵁indexId涓庢椂闂磋寖鍥存煡璇㈠皬鏃剁殑dataitem淇℃伅
-     *
-     * @param beginTime 寮�濮嬫椂闂�
-     * @param endTime   鎴鏃堕棿
-     * @param timeType  鏃堕棿绫诲瀷
-     * @param indexIds  鐐逛綅闆嗗悎
-     * @return
-     */
-    List<DataItem> getDataItemHourInforByIndexIds(Date beginTime, Date endTime, String timeType, List<String> indexIds);
-
-    /**
-     * 鏍规嵁indexId涓庢椂闂寸紪鐮佹煡璇㈢偣浣嶅�煎悎璁�
-     *
-     * @param timeCode 鏃堕棿缂栫爜
-     * @param indexIds 鐐逛綅id闆嗗悎
-     * @return
-     */
-    List<DataItem> getDataItemInforByIndexIds(String timeCode, List<String> indexIds);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/dataEntry/service/impl/DataItemServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/dataEntry/service/impl/DataItemServiceImpl.java
deleted file mode 100644
index ddb4ab8..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/dataEntry/service/impl/DataItemServiceImpl.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.dingzhuo.energy.project.dataEntry.service.impl;
-
-import cn.hutool.core.date.DateTime;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.project.dataEntry.domain.stagseDataEntry;
-import com.dingzhuo.energy.project.dataEntry.mapper.DataItemMapper;
-import com.dingzhuo.energy.project.dataEntry.service.IDataItemService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * stagseDataEntryService涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-03-25
- */
-@Service
-public class DataItemServiceImpl implements IDataItemService {
-    @Autowired
-    private DataItemMapper dataItemMapper;
-    /**
-     * 鏌ヨ闇�瑕佹墜鍔ㄥ綍鍏ョ殑闃舵鏁版嵁
-     *
-     * @param stagseDataEntry
-     * @return 缁撴灉
-     */
-    @Override
-    public List<stagseDataEntry> getSettingIndex(stagseDataEntry stagseDataEntry) {
-        return dataItemMapper.getSettingIndex(stagseDataEntry);
-    }
-
-    /**
-     * 鏌ヨ淇敼鎵嬪姩褰曞叆鐨勯樁娈垫暟鎹�
-     *
-     * @param stagseDataEntry
-     * @return 缁撴灉
-     */
-    @Override
-    public List<stagseDataEntry> getSettingEdit(stagseDataEntry stagseDataEntry) {
-        return dataItemMapper.getSettingEdit(stagseDataEntry);
-    }
-
-    @Override
-    public List<stagseDataEntry> stagseDataEntry(String nodeId, List<String> indexCodes, TimeType timeType, Date beginTime, Date endTime, String calcType) {
-        return dataItemMapper.stagseDataByCode(nodeId, indexCodes, timeType, beginTime, endTime, calcType);
-    }
-
-    /**
-     * 鏍规嵁indexId涓庢椂闂磋寖鍥存煡璇㈠皬鏃剁殑dataitem淇℃伅
-     *
-     * @param beginTime 寮�濮嬫椂闂�
-     * @param endTime   鎴鏃堕棿
-     * @param timeType  鏃堕棿绫诲瀷
-     * @param indexIds  鐐逛綅闆嗗悎
-     * @return
-     */
-    @Override
-    public List<DataItem> getDataItemHourInforByIndexIds(Date beginTime, Date endTime, String timeType, List<String> indexIds) {
-        return dataItemMapper.getDataItemHourInforByIndexIds(beginTime, endTime, timeType, indexIds);
-    }
-
-    /**
-     * 鏍规嵁indexId涓庢椂闂寸紪鐮佹煡璇㈢偣浣嶅�煎悎璁�
-     *
-     * @param timeCode 鏃堕棿缂栫爜
-     * @param indexIds 鐐逛綅id闆嗗悎
-     * @return
-     */
-    @Override
-    public List<DataItem> getDataItemInforByIndexIds(String timeCode, List<String> indexIds) {
-        return dataItemMapper.getDataItemInforByIndexIds(timeCode, indexIds);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/controller/ElectricityPriceController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/controller/ElectricityPriceController.java
deleted file mode 100644
index 802baa8..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/controller/ElectricityPriceController.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package com.dingzhuo.energy.project.electricity.controller;
-
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.electricity.domain.ElectricityPrice;
-import com.dingzhuo.energy.project.electricity.service.IElectricityPriceService;
-import com.dingzhuo.energy.project.system.domain.SysDictData;
-import com.dingzhuo.energy.project.system.service.ISysDictDataService;
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * electricityPriceController
- *
- * @author sys
- * @date 2020-02-18
- */
-@RestController
-@RequestMapping("/electricityPrice/electricity")
-public class ElectricityPriceController extends BaseController
-{
-    @Autowired
-    private IElectricityPriceService electricityPriceService;
-
-    @Autowired
-    private ISysDictDataService dictDataService;
-
-    @PreAuthorize("@ss.hasPermi('electricityPrice:electricity:dictList')")
-    @GetMapping("/dictList")
-    public TableDataInfo dictList(SysDictData dictData)
-    {
-        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
-        return getDataTable(list);
-    }
-    /**
-     * 鏌ヨelectricityPrice鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('electricityPrice:electricity:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(ElectricityPrice electricityPrice){
-        startPage();
-        List<ElectricityPrice> Datelist = electricityPriceService.selectList(electricityPrice);
-        if(Datelist.size()>0){
-            electricityPrice.setEffectiveDate(Datelist.get(0).getEffectiveDate());
-        }
-        List<ElectricityPrice> list = electricityPriceService.selectElectricityPriceList(electricityPrice);
-        return getDataTable(list);
-    }
-    /**
-     * 鏌ヨ鍘嗗彶鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('electricityPrice:electricity:listHistory')")
-    @GetMapping("/listHistory")
-    public TableDataInfo listHistory(ElectricityPrice electricityPrice){
-        startPage();
-        List<ElectricityPrice> list = electricityPriceService.listHistory(electricityPrice);
-        return getDataTable(list);
-    }
-    /**
-     * 鏌ヨ鐢熸晥鏃ユ湡鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('electricityPrice:electricity:listDate')")
-    @GetMapping("/listDate")
-    public TableDataInfo listDate(ElectricityPrice electricityPrice) {
-        List<ElectricityPrice> list = electricityPriceService.selectList(electricityPrice);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭electricityPrice鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('electricityPrice:electricity:export')")
-    @Log(title = "electricityPrice", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(ElectricityPrice electricityPrice)
-    {
-        List<ElectricityPrice> list = electricityPriceService.selectElectricityPriceList(electricityPrice);
-        ExcelUtil<ElectricityPrice> util = new ExcelUtil<ElectricityPrice>(ElectricityPrice.class);
-        return util.exportExcel(list, "electricity");
-    }
-
-    /**
-     * 鑾峰彇electricityPrice璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('electricityPrice:electricity:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(electricityPriceService.selectElectricityPriceById(id));
-    }
-
-    /**
-     * 鏂板electricityPrice
-     */
-    @PreAuthorize("@ss.hasPermi('electricityPrice:electricity:add')")
-    @Log(title = "electricityPrice", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody ElectricityPrice electricityPrice){
-        return toAjax(electricityPriceService.insertElectricityPrice(electricityPrice));
-    }
-
-    /**
-     * 淇敼electricityPrice
-     */
-    @PreAuthorize("@ss.hasPermi('electricityPrice:electricity:edit')")
-    @Log(title = "electricityPrice", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody ElectricityPrice electricityPrice)
-    {
-        return toAjax(electricityPriceService.updateElectricityPrice(electricityPrice));
-    }
-
-    /**
-     * 鍒犻櫎electricityPrice
-     */
-    @PreAuthorize("@ss.hasPermi('electricityPrice:electricity:remove')")
-    @Log(title = "electricityPrice", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(electricityPriceService.deleteElectricityPriceByIds(ids));
-    }
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/controller/TimePeriodPriceController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/controller/TimePeriodPriceController.java
deleted file mode 100644
index fac3afc..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/controller/TimePeriodPriceController.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package com.dingzhuo.energy.project.electricity.controller;
-
-import java.util.List;
-
-import com.dingzhuo.energy.project.electricity.domain.ElectricityPrice;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.project.electricity.domain.TimePeriodPrice;
-import com.dingzhuo.energy.project.electricity.service.ITimePeriodPriceService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * electricityPriceController
- * 
- * @author sys
- * @date 2020-02-19
- */
-@RestController
-@RequestMapping("/electricityPrice/price")
-public class TimePeriodPriceController extends BaseController
-{
-    @Autowired
-    private ITimePeriodPriceService timePeriodPriceService;
-
-    /**
-     * 鏌ヨelectricityPrice鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('electricityPrice:price:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(TimePeriodPrice timePeriodPrice)
-    {
-        startPage();
-        List<TimePeriodPrice> list= timePeriodPriceService.selectTimePeriodPriceList(timePeriodPrice);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭electricityPrice鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('electricityPrice:price:export')")
-    @Log(title = "electricityPrice", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(TimePeriodPrice timePeriodPrice)
-    {
-        List<TimePeriodPrice> list = timePeriodPriceService.selectTimePeriodPriceList(timePeriodPrice);
-        ExcelUtil<TimePeriodPrice> util = new ExcelUtil<TimePeriodPrice>(TimePeriodPrice.class);
-        return util.exportExcel(list, "price");
-    }
-
-    /**
-     * 鑾峰彇electricityPrice璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('electricityPrice:price:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(timePeriodPriceService.selectTimePeriodPriceById(id));
-    }
-
-    /**
-     * 鏂板electricityPrice
-     */
-    @PreAuthorize("@ss.hasPermi('electricityPrice:price:add')")
-    @Log(title = "electricityPrice", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody TimePeriodPrice timePeriodPrice) {
-        int msg=timePeriodPriceService.insertTimePeriodPrice(timePeriodPrice);
-        /*if(msg>0){
-            timePeriodPriceService.editPeriodPrice(timePeriodPrice);
-        }*/
-        return toAjax(msg);
-    }
-
-    /**
-     * 淇敼electricityPrice
-     */
-    @PreAuthorize("@ss.hasPermi('electricityPrice:price:edit')")
-    @Log(title = "electricityPrice", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody TimePeriodPrice timePeriodPrice)
-    {
-        return toAjax(timePeriodPriceService.updateTimePeriodPrice(timePeriodPrice));
-    }
-
-    /**
-     * 鍒犻櫎electricityPrice
-     */
-    @PreAuthorize("@ss.hasPermi('electricityPrice:price:remove')")
-    @Log(title = "electricityPrice", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(timePeriodPriceService.deleteTimePeriodPriceByIds(ids));
-    }
-    /**
-     * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('electricityPrice:price:dictType')")
-    @GetMapping("/dictType")
-    public AjaxResult EdictType(TimePeriodPrice timePeriodPrice){
-        List<TimePeriodPrice> list=timePeriodPriceService.selectDictType(timePeriodPrice);
-        return AjaxResult.success(list);
-    }
-    @PreAuthorize("@ss.hasPermi('electricityPrice:price:dictTypeList')")
-    @GetMapping("/dictTypeList")
-    public AjaxResult dictTypeList(TimePeriodPrice timePeriodPrice){
-        List<TimePeriodPrice> list=timePeriodPriceService.selectDictType(timePeriodPrice);
-        if (!list.isEmpty()) {
-            return AjaxResult.success(list);
-        }else{
-            List<TimePeriodPrice> TimePeriodPriceList=timePeriodPriceService.dictTypeList(timePeriodPrice);
-            return AjaxResult.success(TimePeriodPriceList);
-        }
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/controller/statisticsController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/controller/statisticsController.java
deleted file mode 100644
index 662497c..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/controller/statisticsController.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package com.dingzhuo.energy.project.electricity.controller;
-
-import com.dingzhuo.energy.common.utils.Arith;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.dataservice.service.PeriodDataService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.electricity.domain.*;
-import com.dingzhuo.energy.project.electricity.service.IstatisticsService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.stream.Collectors;
-
-/**
- * electricityPriceController
- *
- * @author sys
- * @date 2020-02-18
- */
-@RestController
-@RequestMapping("/electricityPrice/statistics")
-public class statisticsController extends BaseController {
-    @Autowired
-    private IstatisticsService statisticsService;
-
-    @Autowired
-    private PeriodDataService periodDataService;
-    @GetMapping("/getStatisticsList")
-    public AjaxResult getStatisticsList(statistics statistics) {
-        List<EnergyIndex> list = statisticsService.getStatisticsList(statistics);//鏌ヨ鎸囨爣list
-        List<String> indexIds= list.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        List<electricityDataItem> result = statisticsService.getPeriodDatasByIndex(indexIds, statistics.getBeginTime(),statistics.getEndTime(),statistics.getTimeType());//宄板钩璋锋寚鏍囪绠楁暟鎹�
-        List<TimePeriodPrice> priceList = statisticsService.getElectricityPriceList(statistics);//宄板钩璋蜂环鏍�
-        electricitTable tableData =new electricitTable();//琛ㄦ牸
-        if(result.size()>0){
-            Map<String, List<electricityDataItem>> groupBy = result.stream().collect(Collectors.groupingBy(electricityDataItem::getFormatdate));//鏍规嵁鏃堕棿杩涜鍒嗙粍
-            List<electricity> energyHeadList = new ArrayList<>();//琛ㄥご
-            List<Map> tableDataMaps = new ArrayList<Map>();//琛ㄦ牸鏁版嵁
-            List<Map> table = new ArrayList<Map>();
-            //鎷兼帴琛ㄥご
-            /*groupBy.forEach((indexName,value)->{*/
-                electricity energyHead = new electricity();
-                energyHead.setLable(statistics.getNodeName());//涓�绾ф爣棰�
-                AtomicInteger colcount= new AtomicInteger(2);//琛ㄦ牸鍒楃殑鏁伴噺
-                priceList.forEach((item)->{
-                    Map map =new HashMap<>();//琛ㄦ暟鎹�
-                    electricity energyChildNode1 = new electricity();
-                    energyChildNode1.setLable(item.getElectricityName());//浜岀骇鏍囬
-                    energyChildNode1.setValue("鐢ㄩ噺");//涓夌骇鏍囬
-                    energyChildNode1.setPrice("璐圭敤");//涓夌骇鏍囬
-                    energyChildNode1.setValueProp("col"+colcount);
-                    map.put("鐢ㄩ噺","col"+colcount);
-                    colcount.getAndIncrement();
-                    energyChildNode1.setPriceProp("col"+colcount);
-                    map.put("璐圭敤","col"+colcount);
-                    map.put("col"+colcount,item.getPrices());
-                    map.put("code",item.getTimePeriod());
-                    colcount.getAndIncrement();
-                    energyHead.addChildNode(energyChildNode1);
-                    table.add(map);
-                });
-                energyHeadList.add(energyHead);
-            /*});*/
-            tableData.setTablehead(energyHeadList);
-            //琛ㄦ牸鏁版嵁
-           groupBy.forEach((indexName,value)->{
-               Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
-                value.forEach((data)->{
-                    tableColumn.put("name",indexName);
-                    table.forEach((item)->{
-                        String bb =item.get("code").toString().substring(0, 2);
-                        String b =data.getIndexCode().substring(0, 2);
-                        if(bb.equals("F_") && b.equals("F_")){
-                            Double outlay=new BigDecimal(data.getValue()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                            Double usage=new BigDecimal(item.get(item.get("璐圭敤")).toString()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                            tableColumn.put(item.get("鐢ㄩ噺"),outlay);
-                            tableColumn.put(item.get("璐圭敤"),Arith.mul(outlay, usage));
-                        }
-                        if(bb.equals("P_") && b.equals("P_")){
-                            Double outlay=new BigDecimal(data.getValue()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                            Double usage=new BigDecimal(item.get(item.get("璐圭敤")).toString()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                            tableColumn.put(item.get("鐢ㄩ噺"),outlay);
-                            tableColumn.put(item.get("璐圭敤"),Arith.mul(outlay, usage));
-                        }
-                        if(bb.equals("G_") && b.equals("G_")){
-                            Double outlay=new BigDecimal(data.getValue()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                            Double usage=new BigDecimal(item.get(item.get("璐圭敤")).toString()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                            tableColumn.put(item.get("鐢ㄩ噺"),outlay);
-                            tableColumn.put(item.get("璐圭敤"),Arith.mul(outlay, usage));
-                        }
-                        if(bb.equals("J_") && b.equals("J_")){
-                            Double outlay=new BigDecimal(data.getValue()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                            Double usage=new BigDecimal(item.get(item.get("璐圭敤")).toString()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                            tableColumn.put(item.get("鐢ㄩ噺"),outlay);
-                            tableColumn.put(item.get("璐圭敤"),Arith.mul(outlay, usage));
-                        }
-                    });
-                });
-               tableDataMaps.add(tableColumn);
-            });
-            tableData.setTabledataMap(tableDataMaps);
-        }
-        return AjaxResult.success(tableData);
-    }
-
-    @GetMapping("/getDataStatistics")
-    public AjaxResult getDataStatistics(statistics statistics) {
-        List<EnergyIndex> list = statisticsService.getStatisticsList(statistics);//鏌ヨ鎸囨爣list
-        List<String> indexIds= list.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        //List<electricityDataItem> result = statisticsService.getDatasByIndex(indexIds, statistics.getTimeType());//鏌ヨ宄板钩璋锋寚鏍囨暟鎹�
-        List<electricityDataItem> result = statisticsService.getDatasByIndex(indexIds, statistics.getBeginTime(),statistics.getEndTime(),statistics.getTimeType());//宄板钩璋锋寚鏍囪绠楁暟鎹�
-        List<TimePeriodPrice> priceList = statisticsService.getElectricityPriceList(statistics);//宄板钩璋蜂环鏍�
-        electricitTable tableData =new electricitTable();
-        List<Map> tableDataMaps = new ArrayList<Map>();
-        //宄板钩璋峰崰姣�
-        priceList.forEach(item->{
-            String bb =item.getTimePeriod().substring(0, 2);
-            result.forEach(data->{
-                String dataItem =data.getIndexCode().substring(0, 2);
-                Map map =new HashMap<>();
-                if(bb.equals(dataItem)){
-                    map.put("value", Arith.mul(data.getValue(), item.getPrices()));
-                    map.put("name",data.getIndexName());
-                }
-                tableDataMaps.add(map) ;
-            });
-        });
-        tableData.setTabledataMap(tableDataMaps);
-        return AjaxResult.success(tableData);
-    }
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/domain/ElectricityPrice.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/domain/ElectricityPrice.java
deleted file mode 100644
index c2d9bf4..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/domain/ElectricityPrice.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package com.dingzhuo.energy.project.electricity.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-/**
- * electricityPrice瀵硅薄 electricity_price
- *
- * @author sys
- * @date 2020-02-18
- */
-public class ElectricityPrice extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 涓婚敭 */
-    private String id;
-
-    /** 鐢熸晥鏃ユ湡 */
-    @Excel(name = "鐢熸晥鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date effectiveDate;
-
-    /** 鍗曚环 */
-    @Excel(name = "鍗曚环")
-    private String priceId;
-
-    /** 鏃舵寮�濮嬫椂闂� */
-    @Excel(name = "鏃舵寮�濮嬫椂闂�")
-    private String beginDate;
-
-    /** 鏃舵缁撴潫鏃堕棿 */
-    @Excel(name = "鏃舵缁撴潫鏃堕棿")
-    private String endDate;
-
-    /** 鏃舵鍚嶇О */
-    @Excel(name = "鏃舵鍚嶇О")
-    private String effectiveName;
-    /** 鍗曚环 */
-    @Excel(name = "鍗曚环")
-    private String price;
-    private String electricityName;
-
-    @Excel(name = "鍗曚环")
-    private Double prices;
-    public void setId(String id)
-    {
-        this.id = id;
-    }
-
-    public String getId()
-    {
-        return id;
-    }
-    public void setEffectiveDate(Date effectiveDate)
-    {
-        this.effectiveDate = effectiveDate;
-    }
-
-    public Date getEffectiveDate()
-    {
-        return effectiveDate;
-    }
-    public void setPriceId(String priceId)
-    {
-        this.priceId = priceId;
-    }
-
-    public String getPriceId()
-    {
-        return priceId;
-    }
-    public void setBeginDate(String beginDate)
-    {
-        this.beginDate = beginDate;
-    }
-
-    public String getBeginDate()
-    {
-        return beginDate;
-    }
-    public void setEndDate(String endDate)
-    {
-        this.endDate = endDate;
-    }
-
-    public String getEndDate()
-    {
-        return endDate;
-    }
-    public void setEffectiveName(String effectiveName)
-    {
-        this.effectiveName = effectiveName;
-    }
-
-    public String getEffectiveName()
-    {
-        return effectiveName;
-    }
-    public void setPrice(String price)
-    {
-        this.price = price;
-    }
-
-    public String getPrice()
-    {
-        return price;
-    }
-
-    public Double getPrices() {
-        return prices;
-    }
-
-    public void setPrices(Double prices) {
-        this.prices = prices;
-    }
-
-    public String getElectricityName() {
-        return electricityName;
-    }
-
-    public void setElectricityName(String electricityName) {
-        this.electricityName = electricityName;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-                .append("id", getId())
-                .append("effectiveDate", getEffectiveDate())
-                .append("priceId", getPriceId())
-                .append("beginDate", getBeginDate())
-                .append("endDate", getEndDate())
-                .append("effectiveName", getEffectiveName())
-                .append("price", getPrice())
-                .toString();
-    }
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/domain/TimePeriodPrice.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/domain/TimePeriodPrice.java
deleted file mode 100644
index 38c26a1..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/domain/TimePeriodPrice.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package com.dingzhuo.energy.project.electricity.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * electricity瀵硅薄 time_period_price
- * 
- * @author sys
- * @date 2020-02-19
- */
-public class TimePeriodPrice extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 涓婚敭 */
-    private String id;
-
-    /** 鐢熸晥鏃ユ湡 */
-    private Date effectiveDate;
-
-    /** 鏃舵 */
-    @Excel(name = "鏃舵")
-    private String timePeriod;
-
-    /** 鍗曚环 */
-    @Excel(name = "鍗曚环")
-    private String price;
-    private Double prices;
-    private String electricityName;
-    private String dictType;//瀛楀吀绫诲瀷
-    private String dictValue;//瀛楀吀鍊�
-    private String dictLabel;//瀛楀吀鍚嶇О
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setEffectiveDate(Date effectiveDate) 
-    {
-        this.effectiveDate = effectiveDate;
-    }
-
-    public Date getEffectiveDate() 
-    {
-        return effectiveDate;
-    }
-    public void setTimePeriod(String timePeriod) 
-    {
-        this.timePeriod = timePeriod;
-    }
-
-    public String getTimePeriod() 
-    {
-        return timePeriod;
-    }
-    public void setPrice(String price)
-    {
-        this.price = price;
-    }
-
-    public String getPrice()
-    {
-        return price;
-    }
-
-    public Double getPrices() {
-        return prices;
-    }
-
-    public void setPrices(Double prices) {
-        this.prices = prices;
-    }
-
-    public String getDictType() {
-        return dictType;
-    }
-    public void setDictType(String dictType) {
-        this.dictType = dictType;
-    }
-    public String getDictValue() {
-        return dictValue;
-    }
-    public void setDictValue(String dictValue) {
-        this.dictValue = dictValue;
-    }
-    public String getDictLabel() {
-        return dictLabel;
-    }
-    public void setDictLabel(String dictLabel) {
-        this.dictLabel = dictLabel;
-    }
-
-    public String getElectricityName() {
-        return electricityName;
-    }
-
-    public void setElectricityName(String electricityName) {
-        this.electricityName = electricityName;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("effectiveDate", getEffectiveDate())
-            .append("timePeriod", getTimePeriod())
-            .append("price", getPrice())
-            .append("dictType", getDictType())
-            .append("dictValue", getDictValue())
-            .append("dictLabel", getDictLabel())
-            .append("electricityName", getElectricityName())
-            .toString();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/domain/electricitTable.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/domain/electricitTable.java
deleted file mode 100644
index b97e675..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/domain/electricitTable.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.dingzhuo.energy.project.electricity.domain;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-
-public class electricitTable implements Serializable {
-  private static final long serialVersionUID = -2777479013884125925L;
-  private List<electricity> tablehead =new ArrayList<>();
-  private List<Map> tabledataMap = new ArrayList<Map>();
-  public List<Map> getTabledataMap() {
-    return tabledataMap;
-  }
-  public void setTabledataMap(List<Map> tabledataMap) {
-    this.tabledataMap = tabledataMap;
-  }
-  public List<electricity> getTablehead() {
-    return tablehead;
-  }
-  public void setTablehead(List<electricity> tablehead) {
-    this.tablehead = tablehead;
-  }
-
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/domain/electricity.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/domain/electricity.java
deleted file mode 100644
index 7f52236..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/domain/electricity.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package com.dingzhuo.energy.project.electricity.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import com.dingzhuo.energy.project.energyStatistics.domain.EnergyConsumption;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-/**
- * electricityPrice瀵硅薄 electricity_price
- *
- * @author sys
- * @date 2020-02-18
- */
-public class electricity implements Serializable {
-    private static final long serialVersionUID = -2777479013884125925L;
-    private String lable;
-    private String prop;
-    private String maxValue;
-    private String minValue;
-    private String dataTime;
-    private  String value;
-    private  String price;
-    private String valueProp;
-    private String priceProp;
-    private String name;
-    private List<electricity> childNodes =new ArrayList<>();
-
-    public List<electricity> getChildNodes() {
-        return childNodes;
-    }
-
-    public void setChildNodes(List<electricity> childNodes) {
-        this.childNodes = childNodes;
-    }
-
-    public void addChildNode(electricity childNode){
-        this.childNodes.add(childNode);
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getLable() {
-        return lable;
-    }
-
-    public void setLable(String lable) {
-        this.lable = lable;
-    }
-
-    public String getProp() {
-        return prop;
-    }
-
-    public void setProp(String prop) {
-        this.prop = prop;
-    }
-
-    public String getMaxValue() {
-        return maxValue;
-    }
-
-    public void setMaxValue(String maxValue) {
-        this.maxValue = maxValue;
-    }
-
-    public String getMinValue() {
-        return minValue;
-    }
-
-    public void setMinValue(String minValue) {
-        this.minValue = minValue;
-    }
-
-    public String getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(String dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getPrice() {
-        return price;
-    }
-
-    public void setPrice(String price) {
-        this.price = price;
-    }
-
-    public String getValueProp() {
-        return valueProp;
-    }
-
-    public void setValueProp(String valueProp) {
-        this.valueProp = valueProp;
-    }
-
-    public String getPriceProp() {
-        return priceProp;
-    }
-
-    public void setPriceProp(String priceProp) {
-        this.priceProp = priceProp;
-    }
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/domain/electricityDataItem.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/domain/electricityDataItem.java
deleted file mode 100644
index dc8b00c..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/domain/electricityDataItem.java
+++ /dev/null
@@ -1,161 +0,0 @@
-package com.dingzhuo.energy.project.electricity.domain;
-
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.dataservice.domain.Quality;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 鍛ㄦ湡鏁版嵁椤�.
- */
-public class electricityDataItem implements Serializable {
-  private static final long serialVersionUID = -2777479013884125925L;
-
-  private String indexId;
-  private String indexStorageId;
-  private String indexCode;
-  private String indexName;
-  private Date beginTime;
-  private Date endTime;
-  private Date dataTime;
-  private String timeCode;
-  private TimeType timeType;
-  private Double value;
-  private Quality quality;
-  private String unitId;
-  private Date createTime;
-  private Date updateTime;
-  private String remark;
-  //鏃堕棿鏍煎紡鍖�
-  private String formatdate;
-
-  public String getIndexId() {
-    return indexId;
-  }
-
-  public String getFormatdate() {
-    return formatdate;
-  }
-
-  public void setFormatdate(String formatdate) {
-    this.formatdate = formatdate;
-  }
-
-  public void setIndexId(String indexId) {
-    this.indexId = indexId;
-  }
-
-  public String getIndexStorageId() {
-    return indexStorageId;
-  }
-
-  public void setIndexStorageId(String indexStorageId) {
-    this.indexStorageId = indexStorageId;
-  }
-
-  public String getIndexCode() {
-    return indexCode;
-  }
-
-  public void setIndexCode(String indexCode) {
-    this.indexCode = indexCode;
-  }
-
-  public String getIndexName() {
-    return indexName;
-  }
-
-  public void setIndexName(String indexName) {
-    this.indexName = indexName;
-  }
-
-  public Date getBeginTime() {
-    return beginTime;
-  }
-
-  public void setBeginTime(Date beginTime) {
-    this.beginTime = beginTime;
-  }
-
-  public Date getEndTime() {
-    return endTime;
-  }
-
-  public void setEndTime(Date endTime) {
-    this.endTime = endTime;
-  }
-
-  public Date getDataTime() {
-    return dataTime;
-  }
-
-  public void setDataTime(Date dataTime) {
-    this.dataTime = dataTime;
-  }
-
-  public String getTimeCode() {
-    return timeCode;
-  }
-
-  public void setTimeCode(String timeCode) {
-    this.timeCode = timeCode;
-  }
-
-  public TimeType getTimeType() {
-    return timeType;
-  }
-
-  public void setTimeType(TimeType timeType) {
-    this.timeType = timeType;
-  }
-
-  public Double getValue() {
-    return value;
-  }
-
-  public void setValue(Double value) {
-    this.value = value;
-  }
-
-  public Quality getQuality() {
-    return quality;
-  }
-
-  public void setQuality(Quality quality) {
-    this.quality = quality;
-  }
-
-  public String getUnitId() {
-    return unitId;
-  }
-
-  public void setUnitId(String unitId) {
-    this.unitId = unitId;
-  }
-
-  public Date getCreateTime() {
-    return createTime;
-  }
-
-  public void setCreateTime(Date createTime) {
-    this.createTime = createTime;
-  }
-
-  public Date getUpdateTime() {
-    return updateTime;
-  }
-
-  public void setUpdateTime(Date updateTime) {
-    this.updateTime = updateTime;
-  }
-
-  public String getRemark() {
-    return remark;
-  }
-
-  public void setRemark(String remark) {
-    this.remark = remark;
-  }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/domain/statistics.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/domain/statistics.java
deleted file mode 100644
index 6f880c2..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/domain/statistics.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.dingzhuo.energy.project.electricity.domain;
-
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import java.util.Date;
-
-/**
- *
- * @author sys
- * @date 2020-02-18
- */
-public class statistics{
-    private static final long serialVersionUID = 1L;
-    private String nodeId;
-    private String nodeName;
-    private String eierarchyFlag;
-    private TimeType TimeType;
-    private String dictType;
-    private Date beginTime;
-    private Date endTime;
-
-    public String getNodeId() {
-        return nodeId;
-    }
-
-    public void setNodeId(String nodeId) {
-        this.nodeId = nodeId;
-    }
-
-    public String getNodeName() {
-        return nodeName;
-    }
-
-    public void setNodeName(String nodeName) {
-        this.nodeName = nodeName;
-    }
-
-    public String getEierarchyFlag() {
-        return eierarchyFlag;
-    }
-
-    public void setEierarchyFlag(String eierarchyFlag) {
-        this.eierarchyFlag = eierarchyFlag;
-    }
-
-    public TimeType getTimeType() {
-        return TimeType;
-    }
-
-    public void setTimeType(TimeType timeType) {
-        TimeType = timeType;
-    }
-
-    public Date getBeginTime() {
-        return beginTime;
-    }
-
-    public void setBeginTime(Date beginTime) {
-        this.beginTime = beginTime;
-    }
-
-    public Date getEndTime() {
-        return endTime;
-    }
-
-    public void setEndTime(Date endTime) {
-        this.endTime = endTime;
-    }
-
-    public String getDictType() {
-        return dictType;
-    }
-
-    public void setDictType(String dictType) {
-        this.dictType = dictType;
-    }
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/mapper/ElectricityPriceMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/mapper/ElectricityPriceMapper.java
deleted file mode 100644
index 179b2f2..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/mapper/ElectricityPriceMapper.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.dingzhuo.energy.project.electricity.mapper;
-
-import com.dingzhuo.energy.project.electricity.domain.ElectricityPrice;
-import java.util.List;
-
-/**
- * electricityPriceMapper鎺ュ彛
- *
- * @author sys
- * @date 2020-02-18
- */
-public interface ElectricityPriceMapper
-{
-    /**
-     * 鏌ヨelectricityPrice
-     *
-     * @param id electricityPriceID
-     * @return electricityPrice
-     */
-    public ElectricityPrice selectElectricityPriceById(String id);
-
-    /**
-     * 鏌ヨelectricityPrice鍒楄〃
-     *
-     * @param electricityPrice electricityPrice
-     * @return electricityPrice闆嗗悎
-     */
-    public List<ElectricityPrice> selectElectricityPriceList(ElectricityPrice electricityPrice);
-    /**
-     * 鏌ヨ鐢熸晥鏃ユ湡鍒楄〃
-     *
-     * @param electricityPrice electricityPrice
-     * @return electricityPrice闆嗗悎
-     */
-    public List<ElectricityPrice> selectList(ElectricityPrice electricityPrice);
-    /**
-     * 鏂板electricityPrice
-     *
-     * @param electricityPrice electricityPrice
-     * @return 缁撴灉
-     */
-    public int insertElectricityPrice(ElectricityPrice electricityPrice);
-
-    /**
-     * 淇敼electricityPrice
-     *
-     * @param electricityPrice electricityPrice
-     * @return 缁撴灉
-     */
-    public int updateElectricityPrice(ElectricityPrice electricityPrice);
-
-    /**
-     * 鍒犻櫎electricityPrice
-     *
-     * @param id electricityPriceID
-     * @return 缁撴灉
-     */
-    public int deleteElectricityPriceById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎electricityPrice
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteElectricityPriceByIds(String[] ids);
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/mapper/TimePeriodPriceMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/mapper/TimePeriodPriceMapper.java
deleted file mode 100644
index 65e7919..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/mapper/TimePeriodPriceMapper.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.dingzhuo.energy.project.electricity.mapper;
-
-import com.dingzhuo.energy.project.electricity.domain.ElectricityPrice;
-import com.dingzhuo.energy.project.electricity.domain.TimePeriodPrice;
-import java.util.List;
-
-/**
- * electricityMapper鎺ュ彛
- * 
- * @author sys
- * @date 2020-02-19
- */
-public interface TimePeriodPriceMapper 
-{
-    /**
-     * 鏌ヨelectricity
-     * 
-     * @param id electricityID
-     * @return electricity
-     */
-    public TimePeriodPrice selectTimePeriodPriceById(String id);
-
-    /**
-     * 鏌ヨelectricity鍒楄〃
-     * 
-     * @param timePeriodPrice electricity
-     * @return electricity闆嗗悎
-     */
-    public List<TimePeriodPrice> selectTimePeriodPriceList(TimePeriodPrice timePeriodPrice);
-
-    /**
-     * 鏂板electricity
-     * 
-     * @param timePeriodPrice electricity
-     * @return 缁撴灉
-     */
-    public int insertTimePeriodPrice(TimePeriodPrice timePeriodPrice);
-
-    /**
-     * 淇敼electricity
-     * 
-     * @param timePeriodPrice electricity
-     * @return 缁撴灉
-     */
-    public int updateTimePeriodPrice(TimePeriodPrice timePeriodPrice);
-
-    /**
-     * 鍒犻櫎electricity
-     * 
-     * @param id electricityID
-     * @return 缁撴灉
-     */
-    public int deleteTimePeriodPriceById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎electricity
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteTimePeriodPriceByIds(String[] ids);
-
-    public List<TimePeriodPrice>selectDictType(TimePeriodPrice timePeriodPrice);
-    public List<TimePeriodPrice> dictTypeList(TimePeriodPrice timePeriodPrice);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/mapper/statisticsMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/mapper/statisticsMapper.java
deleted file mode 100644
index d538b3c..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/mapper/statisticsMapper.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.dingzhuo.energy.project.electricity.mapper;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.project.electricity.domain.ElectricityPrice;
-import com.dingzhuo.energy.project.electricity.domain.TimePeriodPrice;
-import com.dingzhuo.energy.project.electricity.domain.electricityDataItem;
-import com.dingzhuo.energy.project.electricity.domain.statistics;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * electricityPriceMapper鎺ュ彛
- *
- * @author sys
- * @date 2020-02-18
- */
-public interface statisticsMapper {
-    List<EnergyIndex> getStatisticsList(statistics statistics);
-    List<TimePeriodPrice> getElectricityPriceList(statistics statistics);
-    public List<electricityDataItem> getDatasByIndex(@Param("indexIds")List<String> indexIds, @Param("beginTime") Date beginTime, @Param("endTime") Date endTime,@Param("timeType")TimeType timeType);
-
-    List<electricityDataItem> getPeriodDatasByIndex(@Param("indexIds") List<String> indexIds,
-                                                    @Param("beginTime") Date beginTime,
-                                                    @Param("endTime") Date endTime,
-                                                    @Param("timeType") TimeType timeType);
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/service/IElectricityPriceService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/service/IElectricityPriceService.java
deleted file mode 100644
index fe67e9e..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/service/IElectricityPriceService.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.dingzhuo.energy.project.electricity.service;
-
-import com.dingzhuo.energy.project.electricity.domain.ElectricityPrice;
-import java.util.List;
-
-/**
- * electricityPriceService鎺ュ彛
- *
- * @author sys
- * @date 2020-02-18
- */
-public interface IElectricityPriceService
-{
-    /**
-     * 鏌ヨelectricityPrice
-     *
-     * @param id electricityPriceID
-     * @return electricityPrice
-     */
-    public ElectricityPrice selectElectricityPriceById(String id);
-
-    /**
-     * 鏌ヨelectricityPrice鍒楄〃
-     *
-     * @param electricityPrice electricityPrice
-     * @return electricityPrice闆嗗悎
-     */
-    public List<ElectricityPrice> selectElectricityPriceList(ElectricityPrice electricityPrice);
-    /**
-     * 鏌ヨ鐢熸晥鏃ユ湡鍒楄〃
-     *
-     * @param electricityPrice electricityPrice
-     * @return electricityPrice闆嗗悎
-     */
-    public List<ElectricityPrice> selectList(ElectricityPrice electricityPrice);
-    /**
-     * 鏌ヨ鍘嗗彶鍒楄〃
-     *
-     * @param electricityPrice electricityPrice
-     * @return electricityPrice闆嗗悎
-     */
-    public List<ElectricityPrice> listHistory(ElectricityPrice electricityPrice);
-    /**
-     * 鏂板electricityPrice
-     *
-     * @param electricityPrice electricityPrice
-     * @return 缁撴灉
-     */
-    public int insertElectricityPrice(ElectricityPrice electricityPrice);
-
-    /**
-     * 淇敼electricityPrice
-     *
-     * @param electricityPrice electricityPrice
-     * @return 缁撴灉
-     */
-    public int updateElectricityPrice(ElectricityPrice electricityPrice);
-
-    /**
-     * 鎵归噺鍒犻櫎electricityPrice
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑electricityPriceID
-     * @return 缁撴灉
-     */
-    public int deleteElectricityPriceByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎electricityPrice淇℃伅
-     *
-     * @param id electricityPriceID
-     * @return 缁撴灉
-     */
-    public int deleteElectricityPriceById(String id);
-
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/service/ITimePeriodPriceService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/service/ITimePeriodPriceService.java
deleted file mode 100644
index c5dc1d9..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/service/ITimePeriodPriceService.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.dingzhuo.energy.project.electricity.service;
-
-import com.dingzhuo.energy.project.electricity.domain.ElectricityPrice;
-import com.dingzhuo.energy.project.electricity.domain.TimePeriodPrice;
-import java.util.List;
-
-/**
- * electricityService鎺ュ彛
- * 
- * @author sys
- * @date 2020-02-19
- */
-public interface ITimePeriodPriceService 
-{
-    /**
-     * 鏌ヨelectricity
-     * 
-     * @param id electricityID
-     * @return electricity
-     */
-    public TimePeriodPrice selectTimePeriodPriceById(String id);
-
-    /**
-     * 鏌ヨelectricity鍒楄〃
-     * 
-     * @param timePeriodPrice electricity
-     * @return electricity闆嗗悎
-     */
-    public List<TimePeriodPrice> selectTimePeriodPriceList(TimePeriodPrice timePeriodPrice);
-
-    /**
-     * 鏂板electricity
-     * 
-     * @param timePeriodPrice electricity
-     * @return 缁撴灉
-     */
-    public int insertTimePeriodPrice(TimePeriodPrice timePeriodPrice);
-    /**
-     * 淇敼electricity
-     * 
-     * @param timePeriodPrice electricity
-     * @return 缁撴灉
-     */
-    public int updateTimePeriodPrice(TimePeriodPrice timePeriodPrice);
-
-    /**
-     * 鎵归噺鍒犻櫎electricity
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑electricityID
-     * @return 缁撴灉
-     */
-    public int deleteTimePeriodPriceByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎electricity淇℃伅
-     * 
-     * @param id electricityID
-     * @return 缁撴灉
-     */
-    public int deleteTimePeriodPriceById(String id);
-
-    public List<TimePeriodPrice> selectDictType(TimePeriodPrice timePeriodPrice);
-
-    public List<TimePeriodPrice> dictTypeList(TimePeriodPrice timePeriodPrice);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/service/IstatisticsService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/service/IstatisticsService.java
deleted file mode 100644
index a959021..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/service/IstatisticsService.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.dingzhuo.energy.project.electricity.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.project.electricity.domain.ElectricityPrice;
-import com.dingzhuo.energy.project.electricity.domain.TimePeriodPrice;
-import com.dingzhuo.energy.project.electricity.domain.electricityDataItem;
-import com.dingzhuo.energy.project.electricity.domain.statistics;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 宄板钩璋锋帴鍙�
- *
- * @author sys
- * @date 2020-02-18
- */
-public interface IstatisticsService {
-    List<EnergyIndex> getStatisticsList(statistics statistics);
-    List<TimePeriodPrice> getElectricityPriceList(statistics statistics);
-    List<electricityDataItem> getDatasByIndex(List<String> indexIds, Date beginTime,Date endTime,TimeType timeType);
-    /**
-     * 鑾峰彇鎸囨爣鏌愪竴鏃跺埢鐨勬暟鎹�.
-     *
-     * @param indexIds  璁$畻鎸囨爣瀛樺偍闆嗗悎
-     * @param beginTime 寮�濮嬫椂闂�
-     * @param endTime   缁撴潫鏃堕棿
-     * @param timeType  鍛ㄦ湡绫诲瀷
-     */
-    List<electricityDataItem> getPeriodDatasByIndex(List<String> indexIds,
-                                              Date beginTime,
-                                              Date endTime,
-                                              TimeType timeType);
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/service/impl/ElectricityPriceServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/service/impl/ElectricityPriceServiceImpl.java
deleted file mode 100644
index d59dd3f..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/service/impl/ElectricityPriceServiceImpl.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package com.dingzhuo.energy.project.electricity.service.impl;
-
-import java.text.SimpleDateFormat;
-import java.util.List;
-import java.util.UUID;
-
-import com.dingzhuo.energy.project.electricity.domain.TimePeriodPrice;
-import com.dingzhuo.energy.project.electricity.mapper.TimePeriodPriceMapper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.project.electricity.mapper.ElectricityPriceMapper;
-import com.dingzhuo.energy.project.electricity.domain.ElectricityPrice;
-import com.dingzhuo.energy.project.electricity.service.IElectricityPriceService;
-
-/**
- * electricityPriceService涓氬姟灞傚鐞�
- *
- * @author sys
- * @date 2020-02-17
- */
-@Service
-public class ElectricityPriceServiceImpl implements IElectricityPriceService
-{
-    @Autowired
-    private ElectricityPriceMapper electricityPriceMapper;
-
-    @Autowired
-    private TimePeriodPriceMapper timePeriodPriceMapper;
-    /**
-     * 鏌ヨelectricityPrice
-     *
-     * @param priceId electricityPriceID
-     * @return electricityPrice
-     */
-    @Override
-    public ElectricityPrice selectElectricityPriceById(String priceId)
-    {
-        return electricityPriceMapper.selectElectricityPriceById(priceId);
-    }
-
-    /**
-     * 鏌ヨelectricityPrice鍒楄〃
-     *
-     * @param electricityPrice electricityPrice
-     * @return electricityPrice
-     */
-    @Override
-    public List<ElectricityPrice> selectElectricityPriceList(ElectricityPrice electricityPrice){
-        List<ElectricityPrice> listdate=electricityPriceMapper.selectList(electricityPrice);
-        if(listdate.size()>0){
-            electricityPrice.setEffectiveDate(listdate.get(0).getEffectiveDate());
-        }
-        List<ElectricityPrice> list=electricityPriceMapper.selectElectricityPriceList(electricityPrice);
-        return list;
-    }
-    /**
-     * 鏌ヨ鐢熸晥鏃ユ湡鍒楄〃
-     *
-     * @param electricityPrice electricityPrice
-     * @return electricityPrice
-     */
-    @Override
-    public List<ElectricityPrice> selectList(ElectricityPrice electricityPrice)
-    {
-        return electricityPriceMapper.selectList(electricityPrice);
-    }
-    /**
-     * 鏂板electricityPrice
-     *
-     * @param electricityPrice electricityPrice
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertElectricityPrice(ElectricityPrice electricityPrice){
-        electricityPrice.setId(UUID.randomUUID().toString());
-        TimePeriodPrice timePeriodPrice =new TimePeriodPrice();
-        timePeriodPrice.setEffectiveDate(electricityPrice.getEffectiveDate());
-        timePeriodPrice.setTimePeriod(electricityPrice.getEffectiveName());
-        List<TimePeriodPrice> priceList = timePeriodPriceMapper.selectTimePeriodPriceList(timePeriodPrice);
-        electricityPrice.setPriceId(priceList.get(0).getId());
-        return electricityPriceMapper.insertElectricityPrice(electricityPrice);
-    }
-
-    /**
-     * 淇敼electricityPrice
-     *
-     * @param electricityPrice electricityPrice
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateElectricityPrice(ElectricityPrice electricityPrice)
-    {
-        return electricityPriceMapper.updateElectricityPrice(electricityPrice);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎electricityPrice
-     *
-     * @param priceIds 闇�瑕佸垹闄ょ殑electricityPriceID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteElectricityPriceByIds(String[] priceIds)
-    {
-        return electricityPriceMapper.deleteElectricityPriceByIds(priceIds);
-    }
-
-    /**
-     * 鍒犻櫎electricityPrice淇℃伅
-     *
-     * @param priceId electricityPriceID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteElectricityPriceById(String priceId)
-    {
-        return electricityPriceMapper.deleteElectricityPriceById(priceId);
-    }
-
-    /**
-     * 鏌ヨ鍘嗗彶鍒楄〃
-     *
-     * @param electricityPrice electricityPrice
-     * @return electricityPrice闆嗗悎
-     */
-    public List<ElectricityPrice> listHistory(ElectricityPrice electricityPrice){
-        return electricityPriceMapper.selectElectricityPriceList(electricityPrice);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/service/impl/TimePeriodPriceServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/service/impl/TimePeriodPriceServiceImpl.java
deleted file mode 100644
index 66d5cb7..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/service/impl/TimePeriodPriceServiceImpl.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package com.dingzhuo.energy.project.electricity.service.impl;
-
-import java.util.List;
-import java.util.UUID;
-
-import com.dingzhuo.energy.project.electricity.domain.ElectricityPrice;
-import com.dingzhuo.energy.project.electricity.mapper.ElectricityPriceMapper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.project.electricity.mapper.TimePeriodPriceMapper;
-import com.dingzhuo.energy.project.electricity.domain.TimePeriodPrice;
-import com.dingzhuo.energy.project.electricity.service.ITimePeriodPriceService;
-
-/**
- * electricityService涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-02-19
- */
-@Service
-public class TimePeriodPriceServiceImpl implements ITimePeriodPriceService 
-{
-    @Autowired
-    private TimePeriodPriceMapper timePeriodPriceMapper;
-
-    /**
-     * 鏌ヨelectricity
-     * 
-     * @param id electricityID
-     * @return electricity
-     */
-    @Override
-    public TimePeriodPrice selectTimePeriodPriceById(String id)
-    {
-        return timePeriodPriceMapper.selectTimePeriodPriceById(id);
-    }
-
-    /**
-     * 鏌ヨelectricity鍒楄〃
-     * 
-     * @param timePeriodPrice electricity
-     * @return electricity
-     */
-    @Override
-    public List<TimePeriodPrice> selectTimePeriodPriceList(TimePeriodPrice timePeriodPrice)
-    {
-        return timePeriodPriceMapper.selectTimePeriodPriceList(timePeriodPrice);
-    }
-
-    /**
-     * 鏂板electricity
-     * 
-     * @param timePeriodPrice electricity
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertTimePeriodPrice(TimePeriodPrice timePeriodPrice)
-    {
-        String[] s_array=timePeriodPrice.getPrice().split(",");
-        String[] TimePeriod=timePeriodPrice.getDictValue().split(",");
-        int msg=0;
-        for (int i=0;i<TimePeriod.length;i++) {
-            timePeriodPrice.setId(UUID.randomUUID().toString());
-            timePeriodPrice.setTimePeriod(TimePeriod[i]);
-            timePeriodPrice.setPrice(s_array[i]);
-           msg= timePeriodPriceMapper.insertTimePeriodPrice(timePeriodPrice);
-        }
-        return msg;
-    }
-    /**
-     * 淇敼electricity
-     * 
-     * @param timePeriodPrice electricity
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateTimePeriodPrice(TimePeriodPrice timePeriodPrice){
-        String[] s_array=timePeriodPrice.getPrice().split(",");
-        String[] TimePeriod=timePeriodPrice.getDictValue().split(",");
-        String[] ids=timePeriodPrice.getId().split(",");
-        int msg=0;
-        for (int i=0;i<ids.length;i++) {
-            timePeriodPrice.setId(ids[i]);
-            timePeriodPrice.setTimePeriod(TimePeriod[i]);
-            timePeriodPrice.setPrice(s_array[i]);
-            msg= timePeriodPriceMapper.updateTimePeriodPrice(timePeriodPrice);
-        }
-        return msg;
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎electricity
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑electricityID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteTimePeriodPriceByIds(String[] ids)
-    {
-        return timePeriodPriceMapper.deleteTimePeriodPriceByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎electricity淇℃伅
-     * 
-     * @param id electricityID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteTimePeriodPriceById(String id)
-    {
-        return timePeriodPriceMapper.deleteTimePeriodPriceById(id);
-    }
-
-    /**
-     * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁淇℃伅
-     *
-     * @param timePeriodPrice timePeriodPrice
-     * @return electricityPrice
-     */
-    @Override
-    public List<TimePeriodPrice> selectDictType(TimePeriodPrice timePeriodPrice)
-    {
-        return timePeriodPriceMapper.selectDictType(timePeriodPrice);
-    }
-    public List<TimePeriodPrice> dictTypeList(TimePeriodPrice timePeriodPrice){
-        return timePeriodPriceMapper.dictTypeList(timePeriodPrice);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/service/impl/statisticsServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/service/impl/statisticsServiceImpl.java
deleted file mode 100644
index 6133611..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricity/service/impl/statisticsServiceImpl.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.dingzhuo.energy.project.electricity.service.impl;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.dataservice.service.impl.PeriodDataServiceImpl;
-import com.dingzhuo.energy.project.electricity.domain.ElectricityPrice;
-import com.dingzhuo.energy.project.electricity.domain.TimePeriodPrice;
-import com.dingzhuo.energy.project.electricity.domain.electricityDataItem;
-import com.dingzhuo.energy.project.electricity.domain.statistics;
-import com.dingzhuo.energy.project.electricity.mapper.statisticsMapper;
-import com.dingzhuo.energy.project.electricity.service.IstatisticsService;
-import org.joda.time.DateTime;
-import org.joda.time.format.DateTimeFormat;
-import org.joda.time.format.DateTimeFormatter;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-/**
- * electricityPriceService涓氬姟灞傚鐞�
- *
- * @author sys
- * @date 2020-02-17
- */
-@Service
-public class statisticsServiceImpl implements IstatisticsService
-{
-    @Autowired
-    private statisticsMapper statisticsMapper;
-    @Override
-    public List<EnergyIndex> getStatisticsList(statistics statistics){
-        return statisticsMapper.getStatisticsList(statistics);
-    }
-    public List<TimePeriodPrice> getElectricityPriceList(statistics statistics){
-        return  statisticsMapper.getElectricityPriceList(statistics);
-    }
-
-    @Override
-    public List<electricityDataItem> getDatasByIndex(List<String> indexIds, Date beginTime,
-                                                     Date endTime, TimeType timeType) {
-        if (indexIds != null && !indexIds.isEmpty()) {
-            return statisticsMapper.getDatasByIndex(indexIds,beginTime, endTime,timeType);
-        }
-        return Collections.emptyList();
-    }
-    @Override
-    public List<electricityDataItem> getPeriodDatasByIndex(List<String> indexIds, Date beginTime,
-                                                     Date endTime, TimeType timeType) {
-        if (indexIds != null && !indexIds.isEmpty()) {
-            return statisticsMapper.getPeriodDatasByIndex(indexIds, beginTime, endTime, timeType);
-        }
-
-        return Collections.emptyList();
-    }
-    private static class ReBuildTime {
-        private Date endTime;
-        private DateTime end;
-
-        public ReBuildTime(Date endTime) {
-            this.endTime = endTime;
-        }
-        public DateTime getEnd() {
-            return end;
-        }
-
-        public statisticsServiceImpl.ReBuildTime invoke() {
-            end = new DateTime(endTime);
-            DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:00:00");
-            formatter = DateTimeFormat.forPattern("yyyy-MM-dd");
-            end = formatter.parseDateTime(end.toString(formatter));
-            return this;
-        }
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/controller/ElectricityDataItemController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/controller/ElectricityDataItemController.java
deleted file mode 100644
index ed75c48..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/controller/ElectricityDataItemController.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.controller;
-
-
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityDataItemListDTO;
-import com.dingzhuo.energy.project.electricityTypeSetting.service.IElectricityDataItemService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-
-/**
- * 灏栧嘲骞宠胺鏁版嵁Controller
- *
- * @author ruoyi
- * @date 2024-06-19
- */
-@RestController
-@RequestMapping("/electricityDataItem")
-@Api(tags = "灏栧嘲骞宠胺鏁版嵁")
-public class ElectricityDataItemController extends BaseController {
-
-    @Resource
-    private IElectricityDataItemService rulesService;
-
-
-    /**
-     * 鑾峰彇灏栧嘲骞宠胺鏁版嵁缁熻
-     */
-    @GetMapping("/getDataStatistics")
-    @ApiOperation(value = "鑾峰彇灏栧嘲骞宠胺鏁版嵁缁熻")
-    public AjaxResult getDataStatistics(ElectricityDataItemListDTO dto) {
-        return AjaxResult.success(rulesService.getDataStatistics(dto));
-    }
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/controller/ElectricityTypeSettingController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/controller/ElectricityTypeSettingController.java
deleted file mode 100644
index 0fd2cfb..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/controller/ElectricityTypeSettingController.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.controller;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityTypeSettingAddVO;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityTypeSettingUpdateVO;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.ElectricityTypeSettingItemQueryVO;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.ElectricityTypeSettingPageListVO;
-import com.dingzhuo.energy.project.electricityTypeSetting.service.IElectricityTypeSettingService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-import javax.validation.constraints.NotNull;
-import java.util.List;
-
-/**
- * 璁¤垂绛栫暐Controller
- *
- * @author ruoyi
- * @date 2024-06-19
- */
-@RestController
-@RequestMapping("/rule")
-@Api(tags = "璁¤垂绛栫暐")
-public class ElectricityTypeSettingController extends BaseController {
-
-    @Resource
-    private IElectricityTypeSettingService rulesService;
-
-
-    /**
-     * 鏌ヨ璁¤垂瑙勫垯鍒楄〃
-     */
-    @GetMapping("/list")
-    @ApiOperation(value = "鍒嗛〉鏌ヨ璁¤垂瑙勫垯鍒楄〃")
-    public TableDataInfo list(@ApiParam("璁¤垂瑙勫垯鍚嶇О") @RequestParam(value = "name", required = false) String name) {
-        startPage();
-        List<ElectricityTypeSettingPageListVO> responsePage = rulesService.selectPageList(name);
-        return getDataTable(responsePage);
-    }
-
-    /**
-     * 鑾峰彇璁¤垂瑙勫垯璇︽儏
-     */
-    @GetMapping(value = "/getRuleDetail")
-    @ApiOperation(value = "鑾峰彇璁¤垂瑙勫垯璇︽儏")
-    public AjaxResult getRuleDetail(@ApiParam("璁¤垂瑙勫垯id") @NotNull(message = "id涓嶈兘涓虹┖!") @RequestParam("id") String id) {
-        ElectricityTypeSettingItemQueryVO response = rulesService.getRuleDetail(id);
-        return AjaxResult.success(response);
-    }
-
-    /**
-     * 鏂板璁¤垂绛栫暐
-     */
-    @PostMapping("/addRule")
-    @ApiOperation(value = "鏂板璁¤垂绛栫暐")
-    @Log(title = "鏂板璁¤垂绛栫暐", businessType = BusinessType.INSERT)
-    public AjaxResult addRule(@RequestBody @Validated ElectricityTypeSettingAddVO request) {
-        rulesService.addRule(request);
-        return AjaxResult.success();
-    }
-
-    /**
-     * 淇敼璁¤垂绛栫暐
-     */
-    @PostMapping("/updateRule")
-    @ApiOperation(value = "淇敼璁¤垂绛栫暐")
-    @Log(title = "淇敼璁¤垂绛栫暐", businessType = BusinessType.UPDATE)
-    public AjaxResult updateRule(@RequestBody @Validated ElectricityTypeSettingUpdateVO request) {
-        rulesService.updateRule(request);
-        return AjaxResult.success();
-    }
-
-    /**
-     * 鍒犻櫎璁¤垂绛栫暐
-     */
-    @DeleteMapping("/delRule/{id}")
-    @ApiOperation(value = "鍒犻櫎璁¤垂绛栫暐")
-    @Log(title = "鍒犻櫎璁¤垂绛栫暐", businessType = BusinessType.DELETE)
-    public AjaxResult delRule(@ApiParam("璁¤垂瑙勫垯id") @NotNull(message = "id涓嶈兘涓虹┖!") @PathVariable("id") String id) {
-        rulesService.delRule(id);
-        return AjaxResult.success();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityDataItemListDTO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityDataItemListDTO.java
deleted file mode 100644
index 721001a..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityDataItemListDTO.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.domain.dto;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.util.Date;
-
-
-/**
- * 灏栧嘲骞宠胺鏁版嵁鍒楄〃瀹炰綋绫� electricityDataItem
- *
- * @author ruoyi
- * @date 2024-06-19
- */
-@Data
-@ApiModel(value = "灏栧嘲骞宠胺鏁版嵁鍒楄〃瀹炰綋绫�")
-public class ElectricityDataItemListDTO {
-
-    /**
-     * 妯″瀷缂栧彿
-     */
-    @ApiModelProperty(value = "妯″瀷缂栧彿")
-    @NotBlank(message = "妯″瀷缂栧彿涓嶈兘涓虹┖!")
-    private String modelCode;
-
-    /**
-     * 鑺傜偣id
-     */
-    @ApiModelProperty(value = "鑺傜偣id")
-    @NotBlank(message = "鑺傜偣id涓嶈兘涓虹┖!")
-    private String nodeId;
-
-    /**
-     * 鏃堕棿绫诲瀷
-     */
-    @ApiModelProperty(value = "鏃堕棿绫诲瀷")
-    @NotBlank(message = "鏃堕棿绫诲瀷涓嶈兘涓虹┖!")
-    private String timeType;
-
-    /**
-     * 鏌ヨ鏃堕棿
-     */
-    @ApiModelProperty(value = "鏌ヨ鏃堕棿")
-    @NotNull(message = "鏌ヨ鏃堕棿涓嶈兘涓虹┖!")
-    @DateTimeFormat(pattern = "yyyy-MM")
-    private Date queryTime;
-
-
-    public String getTimeType() {
-
-        switch (TimeType.valueOf(this.timeType)) {
-            case HOUR:
-            case DAY:
-                return TimeType.HOUR.name();
-            case MONTH:
-                return TimeType.DAY.name();
-            case YEAR:
-                return TimeType.MONTH.name();
-            default:
-                return TimeType.DAY.name();
-        }
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingAddVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingAddVO.java
deleted file mode 100644
index 353000f..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingAddVO.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.domain.dto;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import javax.validation.constraints.DecimalMin;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-
-/**
- * 璁¤垂瑙勫垯瀵硅薄 rules
- *
- * @author ruoyi
- * @date 2024-06-19
- */
-@Data
-@ApiModel(value = "璁¤垂瑙勫垯鏂板璇锋眰瀹炰綋绫�")
-public class ElectricityTypeSettingAddVO {
-
-    /**
-     * 瑙勫垯鍚嶇О
-     */
-    @ApiModelProperty(value = "瑙勫垯鍚嶇О")
-    @NotBlank(message = "瑙勫垯鍚嶇О涓嶈兘涓虹┖!")
-    private String name;
-
-    /**
-     * 鐢熸晥鏃堕棿
-     */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @ApiModelProperty(value = "鐢熸晥鏃堕棿")
-    @NotNull(message = "鐢熸晥鏃堕棿涓嶈兘涓虹┖!")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private Date effectiveDate;
-
-    /**
-     * 灏栨椂娈电數璐逛环鏍�
-     */
-    @ApiModelProperty(value = "灏栨椂娈电數璐逛环鏍�")
-    @NotNull(message = "灏栨椂娈电數璐逛环鏍间笉鑳戒负绌�!")
-    @DecimalMin(value = "0", message = "灏栨椂娈电數璐逛环鏍兼渶灏忎负0")
-    private BigDecimal sharpFee;
-
-    /**
-     * 宄版椂娈电數璐逛环鏍�
-     */
-    @ApiModelProperty(value = "宄版椂娈电數璐逛环鏍�")
-    @NotNull(message = "宄版椂娈电數璐逛环鏍间笉鑳戒负绌�!")
-    @DecimalMin(value = "0", message = "宄版椂娈电數璐逛环鏍兼渶灏忎负0")
-    private BigDecimal peakFee;
-
-    /**
-     * 骞虫椂娈电數璐逛环鏍�
-     */
-    @ApiModelProperty(value = "骞虫椂娈电數璐逛环鏍�")
-    @NotNull(message = "骞虫椂娈电數璐逛环鏍间笉鑳戒负绌�!")
-    @DecimalMin(value = "0", message = "骞虫椂娈电數璐逛环鏍兼渶灏忎负0")
-    private BigDecimal flatFee;
-
-    /**
-     * 璋锋椂娈电數璐逛环鏍�
-     */
-    @ApiModelProperty(value = "璋锋椂娈电數璐逛环鏍�")
-    @NotNull(message = "璋锋椂娈电數璐逛环鏍间笉鑳戒负绌�!")
-    @DecimalMin(value = "0", message = "璋锋椂娈电數璐逛环鏍兼渶灏忎负0")
-    private BigDecimal valleyFee;
-
-    /**
-     * 澶囨敞
-     */
-    @ApiModelProperty(value = "澶囨敞")
-    private String remark;
-
-    /**
-     * 璁¤垂绛栫暐璇︽儏鍒楄〃
-     */
-    @ApiModelProperty(value = "璁¤垂绛栫暐璇︽儏鍒楄〃")
-    @NotNull(message = "灏栧嘲骞宠胺鏃堕棿娈典笉鑳戒负绌�!")
-    private List<ElectricityTypeSettingItemAddVO> ruleDetailList;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingItemAddVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingItemAddVO.java
deleted file mode 100644
index 3858b6b..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingItemAddVO.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.domain.dto;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import javax.validation.constraints.Max;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotNull;
-
-/**
- * 浠锋牸瀵硅薄 rule_details
- *
- * @author ruoyi
- * @date 2024-06-14
- */
-@Data
-@ApiModel(value = "璁¤垂瑙勫垯璐圭敤绫诲瀷鍙婃椂闂存鏂板璇锋眰绫�")
-public class ElectricityTypeSettingItemAddVO {
-
-    /**
-     * 璐圭敤绫诲瀷鏃堕棿娈�
-     */
-    @ApiModelProperty(value = "璐圭敤绫诲瀷鏃堕棿娈�")
-    @NotNull(message = "璐圭敤绫诲瀷鏃堕棿娈典笉鑳戒负绌�!")
-    @Min(value = 1, message = "璐圭敤绫诲瀷鏃堕棿娈垫渶灏忓�间负1")
-    @Max(value = 48, message = "璐圭敤绫诲瀷鏃堕棿娈垫渶澶у�间负48")
-    private Integer timePeriod;
-
-    /**
-     * 鏃堕棿娈电被鍨� 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
-     */
-    @ApiModelProperty(value = "鏃堕棿娈电被鍨�")
-    @NotNull(message = "鏃堕棿娈电被鍨嬩笉鑳戒负绌�!")
-    private String type;
-
-    /**
-     * 澶囨敞
-     */
-    @ApiModelProperty(value = "澶囨敞")
-    private String remark;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingItemUpdateVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingItemUpdateVO.java
deleted file mode 100644
index 3ffdb5a..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingItemUpdateVO.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.domain.dto;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import javax.validation.constraints.NotNull;
-
-/**
- * 浠锋牸瀵硅薄 rule_details
- *
- * @author ruoyi
- * @date 2024-06-14
- */
-@Data
-@ApiModel(value = "璁¤垂瑙勫垯璐圭敤绫诲瀷鍙婃椂闂存鏇存柊璇锋眰绫�")
-public class ElectricityTypeSettingItemUpdateVO {
-
-    /**
-     * 璁¤垂瑙勫垯瀛愯〃id
-     */
-    @ApiModelProperty(value = "璁¤垂瑙勫垯瀛愯〃id")
-    @NotNull(message = "璁¤垂瑙勫垯瀛愯〃id涓嶈兘涓虹┖!")
-    private String id;
-
-    /**
-     * 鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
-     */
-    @ApiModelProperty(value = "璐圭敤绫诲瀷")
-    @NotNull(message = "璐圭敤绫诲瀷涓嶈兘涓虹┖!")
-    private String type;
-
-    /**
-     * 澶囨敞
-     */
-    @ApiModelProperty(value = "澶囨敞")
-    private String remark;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingUpdateVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingUpdateVO.java
deleted file mode 100644
index c134da4..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingUpdateVO.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.domain.dto;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import javax.validation.constraints.DecimalMin;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-
-/**
- * 璁¤垂瑙勫垯瀵硅薄 rules
- *
- * @author ruoyi
- * @date 2024-06-19
- */
-@Data
-@ApiModel(value = "璁¤垂瑙勫垯鏇存柊璇锋眰瀹炰綋绫�")
-public class ElectricityTypeSettingUpdateVO {
-
-    /**
-     * 涓婚敭
-     */
-    @NotNull(message = "id涓嶈兘涓虹┖!")
-    @ApiModelProperty(value = "璁¤垂瑙勫垯id")
-    private String id;
-
-    /**
-     * 瑙勫垯鍚嶇О
-     */
-    @NotBlank(message = "瑙勫垯鍚嶇О涓嶈兘涓虹┖!")
-    @ApiModelProperty(value = "瑙勫垯鍚嶇О")
-    private String name;
-
-    /**
-     * 鐢熸晥鏃堕棿
-     */
-    @ApiModelProperty(value = "鐢熸晥鏃堕棿")
-    @NotBlank(message = "鐢熸晥鏃堕棿涓嶈兘涓虹┖!")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private Date effectiveDate;
-
-    /**
-     * 灏栨椂娈电數璐逛环鏍�
-     */
-    @ApiModelProperty(value = "灏栨椂娈电數璐逛环鏍�")
-    @NotNull(message = "灏栨椂娈电數璐逛环鏍间笉鑳戒负绌�!")
-    @DecimalMin(value = "0", message = "灏栨椂娈电數璐逛环鏍兼渶灏忎负0")
-    private BigDecimal sharpFee;
-
-    /**
-     * 宄版椂娈电數璐逛环鏍�
-     */
-    @ApiModelProperty(value = "宄版椂娈电數璐逛环鏍�")
-    @NotNull(message = "宄版椂娈电數璐逛环鏍间笉鑳戒负绌�!")
-    @DecimalMin(value = "0", message = "宄版椂娈电數璐逛环鏍兼渶灏忎负0")
-    private BigDecimal peakFee;
-
-    /**
-     * 骞虫椂娈电數璐逛环鏍�
-     */
-    @ApiModelProperty(value = "骞虫椂娈电數璐逛环鏍�")
-    @NotNull(message = "骞虫椂娈电數璐逛环鏍间笉鑳戒负绌�!")
-    @DecimalMin(value = "0", message = "骞虫椂娈电數璐逛环鏍兼渶灏忎负0")
-    private BigDecimal flatFee;
-
-    /**
-     * 璋锋椂娈电數璐逛环鏍�
-     */
-    @ApiModelProperty(value = "璋锋椂娈电數璐逛环鏍�")
-    @NotNull(message = "璋锋椂娈电數璐逛环鏍间笉鑳戒负绌�!")
-    @DecimalMin(value = "0", message = "璋锋椂娈电數璐逛环鏍兼渶灏忎负0")
-    private BigDecimal valleyFee;
-
-    /**
-     * 澶囨敞
-     */
-    @ApiModelProperty(value = "澶囨敞")
-    private String remark;
-
-    /**
-     * 璁¤垂绛栫暐璇︽儏鍒楄〃
-     */
-    @ApiModelProperty(value = "璁¤垂绛栫暐璇︽儏鍒楄〃")
-    @NotNull(message = "灏栧嘲骞宠胺鏃堕棿娈典笉鑳戒负绌�!")
-    private List<ElectricityTypeSettingItemUpdateVO> ruleDetailList;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityDataItem.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityDataItem.java
deleted file mode 100644
index 61a6bcb..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityDataItem.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.domain.entity;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
- * 灏栧嘲骞宠胺鏁版嵁琛�
- *
- * @author sys
- * @date 2024-08-27
- */
-@Data
-public class ElectricityDataItem {
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 鐐逛綅id
-     */
-    @Excel(name = "鐐逛綅id")
-    private String indexId;
-
-    /**
-     * 鏃堕棿缂栧彿
-     */
-    @Excel(name = "鏃堕棿缂栧彿")
-    private String timeCode;
-
-    /**
-     * 鏃堕棿绫诲瀷
-     */
-    @Excel(name = "鏃堕棿绫诲瀷")
-    private String timeType;
-
-    /**
-     * 鐢ㄧ數绫诲瀷宄般�佸钩銆佽胺绛�
-     */
-    @Excel(name = "鐢ㄧ數绫诲瀷宄般�佸钩銆佽胺绛�")
-    private String electricityType;
-
-    /**
-     * 鎸囨爣缂栫爜锛屽啑浣欏瓧娈碉紝鍙互鐢� code 鏌ヨ
-     */
-    @Excel(name = "鎸囨爣缂栫爜锛屽啑浣欏瓧娈碉紝鍙互鐢� code 鏌ヨ")
-    private String indexCode;
-
-    /**
-     * 鏁版嵁鏃堕棿
-     */
-    @Excel(name = "鏁版嵁鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date dataTime;
-
-    /**
-     * 寮�濮嬫椂闂�
-     */
-    @Excel(name = "寮�濮嬫椂闂�", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date beginTime;
-
-    /**
-     * 缁撴潫鏃堕棿
-     */
-    @Excel(name = "缁撴潫鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date endTime;
-
-    /**
-     * 鐢ㄧ數閲�
-     */
-    @Excel(name = "鐢ㄧ數閲�")
-    private BigDecimal electricity;
-
-    /**
-     * 鐢佃垂
-     */
-    @Excel(name = "鐢佃垂")
-    private BigDecimal cost;
-
-    /**
-     * 鍗曚环
-     */
-    @Excel(name = "鍗曚环")
-    private BigDecimal price;
-
-    /**
-     * 鍒涘缓鏃堕棿
-     */
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
-
-    /**
-     * 鏇存柊鏃堕棿
-     */
-    @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date updateTime;
-
-    /**
-     * 澶囨敞
-     */
-    @ApiModelProperty(value = "澶囨敞")
-    private String remark;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityTypeSetting.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityTypeSetting.java
deleted file mode 100644
index 760d29e..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityTypeSetting.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.domain.entity;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
- * 璁¤垂瑙勫垯瀵硅薄 rules
- *
- * @author ruoyi
- * @date 2024-06-14
- */
-@Data
-public class ElectricityTypeSetting extends BaseEntity {
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * $column.columnComment
-     */
-    private String id;
-
-    /**
-     * 瑙勫垯鍚嶇О
-     */
-    @Excel(name = "瑙勫垯鍚嶇О")
-    private String name;
-
-    /**
-     * 鐢熸晥鏃堕棿
-     */
-    @Excel(name = "鐢熸晥鏃堕棿")
-    private Date effectiveDate;
-
-    /**
-     * 灏栫數璐逛环鏍�
-     */
-    @Excel(name = "灏栫數璐逛环鏍�")
-    private BigDecimal sharpFee;
-
-    /**
-     * 宄扮數璐逛环鏍�
-     */
-    @Excel(name = "宄扮數璐逛环鏍�")
-    private BigDecimal peakFee;
-
-    /**
-     * 骞崇數璐逛环鏍�
-     */
-    @Excel(name = "骞崇數璐逛环鏍�")
-    private BigDecimal flatFee;
-
-    /**
-     * 璋风數璐逛环鏍�
-     */
-    @Excel(name = "璋风數璐逛环鏍�")
-    private BigDecimal valleyFee;
-
-    /**
-     * 缁勭粐鏋舵瀯id
-     */
-    @Excel(name = "缁勭粐鏋舵瀯id")
-    private Long deptId;
-
-    /**
-     * '0'鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛�
-     */
-    private String delFlag;
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityTypeSettingItem.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityTypeSettingItem.java
deleted file mode 100644
index 3a5da03..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityTypeSettingItem.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.domain.entity;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import lombok.Data;
-
-/**
- * 浠锋牸瀵硅薄 rule_details
- *
- * @author ruoyi
- * @date 2024-06-14
- */
-@Data
-public class ElectricityTypeSettingItem extends BaseEntity {
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * $column.columnComment
-     */
-    private String id;
-
-    /**
-     * 璁¤垂瑙勫垯id
-     */
-    @Excel(name = "璁¤垂瑙勫垯id")
-    private String ruleId;
-
-    /**
-     * 璐圭敤绫诲瀷鏃堕棿娈�
-     */
-    @Excel(name = "璐圭敤绫诲瀷鏃堕棿娈�", readConverterExp = "1=0:00")
-    private Integer timePeriod;
-
-    /**
-     * 鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
-     */
-    @Excel(name = "鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺")
-    private String type;
-
-    /**
-     * 缁勭粐鏋舵瀯id
-     */
-    @Excel(name = "缁勭粐鏋舵瀯id")
-    private Long deptId;
-
-    /**
-     * 鍒犻櫎鏍囪锛岄粯璁�0锛氭湭鍒犻櫎锛�2 鍒犻櫎
-     */
-    private String delFlag;
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/enums/ElectricityTypeEnum.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/enums/ElectricityTypeEnum.java
deleted file mode 100644
index e1d90ca..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/enums/ElectricityTypeEnum.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.domain.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-@Getter
-@AllArgsConstructor
-public enum ElectricityTypeEnum {
-    SHARP("灏�"),
-    PEAK("宄�"),
-    FLAT("骞�"),
-    VALLEY("璋�");
-
-    private final String desc;
-
-    public static String getNameByType(String type) {
-        for (ElectricityTypeEnum electricityType : ElectricityTypeEnum.values()) {
-            if (electricityType.name().equalsIgnoreCase(type)) {
-                return electricityType.name();
-            }
-        }
-        throw new IllegalArgumentException("Invalid electricity type: " + type);
-    }
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityPeriodFeeDetailVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityPeriodFeeDetailVO.java
deleted file mode 100644
index 7695823..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityPeriodFeeDetailVO.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.domain.vo;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-@Data
-@ApiModel(value = "璁¤垂瑙勫垯鍚勬椂娈电殑璐圭敤杩斿洖瀹炰綋")
-public class ElectricityPeriodFeeDetailVO {
-
-    /**
-     * 璐圭敤绫诲瀷鏃堕棿娈�
-     */
-    @ApiModelProperty(value = "璐圭敤绫诲瀷鏃堕棿娈�")
-    private Integer timePeriod;
-
-    /**
-     * 鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
-     */
-    @ApiModelProperty(value = "璐圭敤绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺")
-    private Integer type;
-
-    /**
-     * 鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
-     */
-    @ApiModelProperty(value = "璐圭敤绫诲瀷鎻忚堪")
-    private String typeDesc;
-
-    /**
-     * 鐢佃垂浠锋牸
-     */
-    @ApiModelProperty(value = "鐢佃垂浠锋牸")
-    private BigDecimal electricityFee;
-
-    /**
-     * 鏈嶅姟璐逛环鏍�
-     */
-    @ApiModelProperty(value = "鏈嶅姟璐逛环鏍�")
-    private BigDecimal serviceFee;
-
-    /**
-     * 鍋滆溅璐逛环鏍�
-     */
-    @ApiModelProperty(value = "鍋滆溅璐逛环鏍�")
-    private BigDecimal parkingFee;
-
-    /**
-     * 瓒呮椂鍗犵敤璐逛环鏍�
-     */
-    @ApiModelProperty(value = "瓒呮椂鍗犵敤璐逛环鏍�")
-    private BigDecimal occupancyFee;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingItemQueryVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingItemQueryVO.java
deleted file mode 100644
index 5d26193..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingItemQueryVO.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.domain.vo;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-
-/**
- * 璁¤垂瑙勫垯瀵硅薄 rules
- *
- * @author ruoyi
- * @date 2024-06-19
- */
-@Data
-@ApiModel(value = "璁¤垂瑙勫垯璇︽儏鏌ヨ杩斿洖瀹炰綋绫�")
-public class ElectricityTypeSettingItemQueryVO {
-
-    /**
-     * 涓婚敭
-     */
-    @ApiModelProperty(value = "璁¤垂瑙勫垯id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private String id;
-
-    /**
-     * 瑙勫垯鍚嶇О
-     */
-    @ApiModelProperty(value = "瑙勫垯鍚嶇О")
-    private String name;
-
-    /**
-     * 鐢熸晥鏃堕棿
-     */
-    @ApiModelProperty(value = "鐢熸晥鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date effectiveDate;
-
-    /**
-     * 灏栨椂娈电數璐逛环鏍�
-     */
-    @ApiModelProperty(value = "灏栨椂娈电數璐逛环鏍�")
-    private BigDecimal sharpFee;
-
-    /**
-     * 宄版椂娈电數璐逛环鏍�
-     */
-    @ApiModelProperty(value = "宄版椂娈电數璐逛环鏍�")
-    private BigDecimal peakFee;
-
-    /**
-     * 骞虫椂娈电數璐逛环鏍�
-     */
-    @ApiModelProperty(value = "骞虫椂娈电數璐逛环鏍�")
-    private BigDecimal flatFee;
-
-    /**
-     * 璋锋椂娈电數璐逛环鏍�
-     */
-    @ApiModelProperty(value = "璋锋椂娈电數璐逛环鏍�")
-    private BigDecimal valleyFee;
-
-    /**
-     * 灏栨椂娈垫湇鍔¤垂浠锋牸
-     */
-    @ApiModelProperty(value = "灏栨椂娈垫湇鍔¤垂浠锋牸")
-    private BigDecimal sharpServiceFee;
-
-    /**
-     * 宄版椂娈垫湇鍔¤垂浠锋牸
-     */
-    @ApiModelProperty(value = "宄版椂娈垫湇鍔¤垂浠锋牸")
-    private BigDecimal peakServiceFee;
-
-    /**
-     * 骞虫椂娈垫湇鍔¤垂浠锋牸
-     */
-    @ApiModelProperty(value = "骞虫椂娈垫湇鍔¤垂浠锋牸")
-    private BigDecimal flatServiceFee;
-
-    /**
-     * 璋锋椂娈垫湇鍔¤垂浠锋牸
-     */
-    @ApiModelProperty(value = "璋锋椂娈垫湇鍔¤垂浠锋牸")
-    private BigDecimal valleyServiceFee;
-
-    /**
-     * 灏栨椂娈靛仠杞﹁垂浠锋牸
-     */
-    @ApiModelProperty(value = "灏栨椂娈靛仠杞﹁垂浠锋牸")
-    private BigDecimal sharpParkingFee;
-
-    /**
-     * 宄版椂娈靛仠杞﹁垂浠锋牸
-     */
-    @ApiModelProperty(value = "宄版椂娈靛仠杞﹁垂浠锋牸")
-    private BigDecimal peakParkingFee;
-
-    /**
-     * 骞虫椂娈靛仠杞﹁垂浠锋牸
-     */
-    @ApiModelProperty(value = "骞虫椂娈靛仠杞﹁垂浠锋牸")
-    private BigDecimal flatParkingFee;
-
-    /**
-     * 璋锋椂娈靛仠杞﹁垂浠锋牸
-     */
-    @ApiModelProperty(value = "璋锋椂娈靛仠杞﹁垂浠锋牸")
-    private BigDecimal valleyParkingFee;
-
-    /**
-     * 灏栨椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸
-     */
-    @ApiModelProperty(value = "灏栨椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸")
-    private BigDecimal sharpOccupancyFee;
-
-    /**
-     * 宄版椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸
-     */
-    @ApiModelProperty(value = "宄版椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸")
-    private BigDecimal peakOccupancyFee;
-
-    /**
-     * 骞虫椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸
-     */
-    @ApiModelProperty(value = "骞虫椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸")
-    private BigDecimal flatOccupancyFee;
-
-    /**
-     * 璋锋椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸
-     */
-    @ApiModelProperty(value = "璋锋椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸")
-    private BigDecimal valleyOccupancyFee;
-
-    /**
-     * 澶囨敞
-     */
-    @ApiModelProperty(value = "澶囨敞")
-    private String remark;
-
-    /**
-     * 璁¤垂绛栫暐璇︽儏鍒楄〃
-     */
-    @ApiModelProperty(value = "璁¤垂绛栫暐鏃堕棿娈佃鎯呭垪琛�")
-    private List<ElectricityTypeSettingItemVO> ruleDetailList;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingItemVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingItemVO.java
deleted file mode 100644
index 04df5a2..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingItemVO.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.domain.vo;
-
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-
-/**
- * 浠锋牸瀵硅薄 rule_details
- *
- * @author ruoyi
- * @date 2024-06-14
- */
-@Data
-@ApiModel(value = "璁¤垂瑙勫垯璇︽儏鏌ヨ杩斿洖鏃堕棿娈靛疄浣撶被")
-public class ElectricityTypeSettingItemVO {
-
-    /**
-     * 涓婚敭
-     */
-    @ApiModelProperty(value = "璁¤垂瑙勫垯瀛愯〃id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long id;
-
-    /**
-     * 璁¤垂瑙勫垯id
-     */
-    @ApiModelProperty(value = "璁¤垂瑙勫垯id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long ruleId;
-
-    /**
-     * 璐圭敤绫诲瀷鏃堕棿娈�
-     */
-    @ApiModelProperty(value = "璐圭敤绫诲瀷鏃堕棿娈�")
-    private Integer timePeriod;
-
-    /**
-     * 鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
-     */
-    @ApiModelProperty(value = "璐圭敤绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺")
-    private String type;
-
-    /**
-     * 鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
-     */
-    @ApiModelProperty(value = "璐圭敤绫诲瀷鎻忚堪")
-    private String typeDesc;
-
-    /**
-     * 缁勭粐鏋舵瀯id
-     */
-    @ApiModelProperty(value = "缁勭粐鏋舵瀯id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long deptId;
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingPageListVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingPageListVO.java
deleted file mode 100644
index 066d585..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingPageListVO.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.domain.vo;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.util.Date;
-
-/**
- * 璁¤垂瑙勫垯瀵硅薄 rules
- *
- * @author ruoyi
- * @date 2024-06-19
- */
-@Data
-@ApiModel(value = "璁¤垂瑙勫垯鍒嗛〉鏌ヨ杩斿洖瀹炰綋绫�")
-public class ElectricityTypeSettingPageListVO {
-
-    /**
-     * 涓婚敭
-     */
-    @ApiModelProperty(value = "璁¤垂瑙勫垯id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private String id;
-
-    /**
-     * 瑙勫垯鍚嶇О
-     */
-    @ApiModelProperty(value = "瑙勫垯鍚嶇О")
-    private String name;
-
-    /**
-     * 鏄惁鐢熸晥
-     */
-    @ApiModelProperty(value = "鏄惁鐢熸晥")
-    private boolean isEffective;
-
-    /**
-     * 鐢熸晥鏃堕棿
-     */
-    @ApiModelProperty(value = "鐢熸晥鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date effectiveDate;
-
-    /**
-     * 鍒涘缓鑰�
-     */
-    @ApiModelProperty(value = "鍒涘缓鑰�")
-    private String createBy;
-
-    /**
-     * 鍒涘缓鏃堕棿
-     */
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
-
-    /**
-     * 澶囨敞
-     */
-    @ApiModelProperty(value = "澶囨敞")
-    private String remark;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/PeakAndValleyReportVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/PeakAndValleyReportVO.java
deleted file mode 100644
index 527d55f..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/PeakAndValleyReportVO.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.domain.vo;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
- * 灏栧嘲骞宠胺鎶ヨ〃 vo
- */
-@Data
-@NoArgsConstructor
-@ApiModel(value = "灏栧嘲骞宠胺鎶ヨ〃 vo", description = "灏栧嘲骞宠胺鎶ヨ〃 vo")
-public class PeakAndValleyReportVO {
-
-    /**
-     * 鏃堕棿
-     */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @ApiModelProperty(value = "鏃堕棿")
-    private Date time;
-
-    /**
-     * 灏栬垂鐢�
-     */
-    @ApiModelProperty(value = "灏栬垂鐢�")
-    private BigDecimal sharpFee;
-
-    /**
-     * 灏栫數閲�
-     */
-    @ApiModelProperty(value = "灏栫數閲�")
-    private BigDecimal sharpPower;
-
-    /**
-     * 宄拌垂鐢�
-     */
-    @ApiModelProperty(value = "宄拌垂鐢�")
-    private BigDecimal peakFee;
-
-    /**
-     * 宄扮數閲�
-     */
-    @ApiModelProperty(value = "宄扮數閲�")
-    private BigDecimal peakPower;
-
-    /**
-     * 骞宠垂鐢�
-     */
-    @ApiModelProperty(value = "骞宠垂鐢�")
-    private BigDecimal flatFee;
-
-    /**
-     * 骞崇數閲�
-     */
-    @ApiModelProperty(value = "骞崇數閲�")
-    private BigDecimal flatPower;
-
-    /**
-     * 璋疯垂鐢�
-     */
-    @ApiModelProperty(value = "璋疯垂鐢�")
-    private BigDecimal valleyFee;
-
-    /**
-     * 璋风數閲�
-     */
-    @ApiModelProperty(value = "璋风數閲�")
-    private BigDecimal valleyPower;
-
-
-    public PeakAndValleyReportVO(Date time, BigDecimal sharpFee, BigDecimal sharpPower, BigDecimal peakFee,
-                                 BigDecimal peakPower, BigDecimal flatFee, BigDecimal flatPower, BigDecimal valleyFee,
-                                 BigDecimal valleyPower) {
-        this.time = time;
-        this.sharpFee = sharpFee;
-        this.sharpPower = sharpPower;
-        this.peakFee = peakFee;
-        this.peakPower = peakPower;
-        this.flatFee = flatFee;
-        this.flatPower = flatPower;
-        this.valleyFee = valleyFee;
-        this.valleyPower = valleyPower;
-    }
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityDataItemMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityDataItemMapper.java
deleted file mode 100644
index 2ad0763..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityDataItemMapper.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.mapper;
-
-
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityDataItem;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
-
-/**
- * 灏栧嘲骞宠胺鏁版嵁瀵硅薄 Mapper鎺ュ彛
- *
- * @author sys
- * @date 2024-08-27
- */
-public interface ElectricityDataItemMapper {
-
-    /**
-     * 鏌ヨ灏栧嘲骞宠胺缁熻鏁版嵁
-     *
-     * @param indexIdSet 鐐逛綅id闆嗗悎
-     * @param startTime  寮�濮嬫椂闂�
-     * @param endTime    鎴鏃堕棿
-     * @param timeType   鏃堕棿绫诲瀷
-     * @return 缁撴灉
-     */
-    List<ElectricityDataItem> getDataStatistics(@Param("indexIdSet") Set<String> indexIdSet, @Param("startTime") Date startTime,
-                                                @Param("endTime") Date endTime, @Param("timeType") String timeType);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityTypeSettingItemMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityTypeSettingItemMapper.java
deleted file mode 100644
index ec6f0bd..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityTypeSettingItemMapper.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.mapper;
-
-
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityTypeSettingItem;
-
-import java.util.List;
-
-/**
- * 浠锋牸Mapper鎺ュ彛
- *
- * @author ruoyi
- * @date 2024-06-14
- */
-public interface ElectricityTypeSettingItemMapper {
-
-    /**
-     * 鏍规嵁瑙勫垯id鏌ヨ瑙勫垯璇︽儏
-     *
-     * @param id 瑙勫垯id
-     * @return 缁撴灉
-     */
-    List<ElectricityTypeSettingItem> selectListByRuleId(String id);
-
-    /**
-     * 淇敼
-     *
-     * @param ruleDetails 瑙勫垯璇︽儏
-     */
-    int updateRuleDetails(ElectricityTypeSettingItem ruleDetails);
-
-    /**
-     * 鏂板瑙勫垯鏄庣粏
-     *
-     * @param ruleDetails 瑙勫垯鏄庣粏
-     * @return 缁撴灉
-     */
-    int insertRuleDetails(ElectricityTypeSettingItem ruleDetails);
-
-    /**
-     * 鏍规嵁瑙勫垯id鍒犻櫎瑙勫垯鏄庣粏
-     *
-     * @param ruleId 瑙勫垯id
-     */
-    int deleteRulesByRuleId(String ruleId);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityTypeSettingMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityTypeSettingMapper.java
deleted file mode 100644
index a0f4724..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityTypeSettingMapper.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.mapper;
-
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityTypeSetting;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.ElectricityTypeSettingPageListVO;
-
-import java.util.List;
-
-/**
- * 璁¤垂瑙勫垯Mapper鎺ュ彛
- *
- * @author ruoyi
- * @date 2024-06-14
- */
-public interface ElectricityTypeSettingMapper {
-
-    /**
-     * 鏌ヨ鍒楄〃
-     */
-    List<ElectricityTypeSettingPageListVO> selectList(String name);
-
-    /**
-     * 鏍规嵁id鏌ヨ璇︽儏
-     *
-     * @param id id
-     * @return 缁撴瀯
-     */
-    ElectricityTypeSetting selectById(String id);
-
-    /**
-     * 鏇存柊
-     *
-     * @param rules 瑙勫垯淇℃伅
-     * @return 缁撴灉
-     */
-    int updateRules(ElectricityTypeSetting rules);
-
-    /**
-     * 鏂板瑙勫垯
-     *
-     * @param rules 瑙勫垯
-     * @return 缁撴灉
-     */
-    int insertRules(ElectricityTypeSetting rules);
-
-    /**
-     * 鍒犻櫎璁¤垂瑙勫垯
-     *
-     * @param id id
-     * @return 缁撴灉
-     */
-    int deleteRulesById(String id);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/IElectricityDataItemService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/IElectricityDataItemService.java
deleted file mode 100644
index 3b0744d..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/IElectricityDataItemService.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.service;
-
-
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityDataItemListDTO;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.PeakAndValleyReportVO;
-
-import java.util.List;
-
-/**
- * 灏栧嘲骞宠胺鏁版嵁Service鎺ュ彛
- *
- * @author sys
- * @date 2024-08-27
- */
-public interface IElectricityDataItemService {
-
-    /**
-     * 鏌ヨ缁熻鏁版嵁
-     *
-     * @param dto 璇锋眰鍙傛暟
-     * @return 缁撴灉
-     */
-    List<PeakAndValleyReportVO> getDataStatistics(ElectricityDataItemListDTO dto);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/IElectricityTypeSettingService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/IElectricityTypeSettingService.java
deleted file mode 100644
index 30a3158..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/IElectricityTypeSettingService.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.service;
-
-
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityTypeSettingAddVO;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityTypeSettingUpdateVO;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.ElectricityTypeSettingItemQueryVO;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.ElectricityTypeSettingPageListVO;
-
-import java.util.List;
-
-/**
- * 璁¤垂瑙勫垯Service鎺ュ彛
- *
- * @author ruoyi
- * @date 2024-06-14
- */
-public interface IElectricityTypeSettingService {
-
-    /**
-     * 鏌ヨ璁¤垂瑙勫垯鍒楄〃
-     */
-    List<ElectricityTypeSettingPageListVO> selectPageList(String name);
-
-    /**
-     * 鑾峰彇璁¤垂瑙勫垯璇︽儏
-     */
-    ElectricityTypeSettingItemQueryVO getRuleDetail(String id);
-
-    /**
-     * 淇敼璁¤垂绛栫暐
-     */
-    void updateRule(ElectricityTypeSettingUpdateVO request);
-
-    /**
-     * 鏂板璁¤垂绛栫暐
-     */
-    void addRule(ElectricityTypeSettingAddVO request);
-
-    /**
-     * 鍒犻櫎璁¤垂绛栫暐
-     */
-    void delRule(String id);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/impl/ElectricityDataItemServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/impl/ElectricityDataItemServiceImpl.java
deleted file mode 100644
index a6918dc..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/impl/ElectricityDataItemServiceImpl.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.service.impl;
-
-
-import cn.hutool.core.date.DateUtil;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.model.domain.vo.ModelNodeIndexInfor;
-import com.dingzhuo.energy.data.model.mapper.ModelNodeMapper;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityDataItemListDTO;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityDataItem;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.enums.ElectricityTypeEnum;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.PeakAndValleyReportVO;
-import com.dingzhuo.energy.project.electricityTypeSetting.mapper.ElectricityDataItemMapper;
-import com.dingzhuo.energy.project.electricityTypeSetting.service.IElectricityDataItemService;
-import org.apache.commons.collections4.CollectionUtils;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * 灏栧嘲骞宠胺鏁版嵁Service涓氬姟灞傚鐞�
- *
- * @author sys
- * @date 2024-08-27
- */
-@Service
-public class ElectricityDataItemServiceImpl implements IElectricityDataItemService {
-    @Resource
-    private ModelNodeMapper modelNodeMapper;
-    @Resource
-    private ElectricityDataItemMapper electricityDataItemMapper;
-
-
-    /**
-     * 鏌ヨ缁熻鏁版嵁
-     *
-     * @param dto 璇锋眰鍙傛暟
-     * @return 缁撴灉
-     */
-    @Override
-    public List<PeakAndValleyReportVO> getDataStatistics(ElectricityDataItemListDTO dto) {
-        List<PeakAndValleyReportVO> reportVOList = new ArrayList<>();
-        // 鏌ヨ鏃堕棿鑼冨洿
-        Date startTime = DateUtil.beginOfMonth(dto.getQueryTime());
-        Date endTime = DateUtil.endOfMonth(startTime);
-        String timeType = dto.getTimeType();
-
-        Map<String, List<ElectricityDataItem>> electricityDataMap = new HashMap<>();
-        // 鏌ヨ鐐逛綅淇℃伅
-        List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(dto.getModelCode(), dto.getNodeId());
-        if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
-            Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
-            List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatistics(indexSet, startTime, endTime, timeType);
-
-            electricityDataMap = dataItemList.stream()
-                    .collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime())));
-        }
-        while (!startTime.after(endTime)) {
-            String mapKey = DateUtil.formatDateTime(startTime);
-            List<ElectricityDataItem> dataItemList = electricityDataMap.get(mapKey);
-
-            BigDecimal sharpFee = BigDecimal.ZERO;
-            BigDecimal sharpPower = BigDecimal.ZERO;
-            BigDecimal peakFee = BigDecimal.ZERO;
-            BigDecimal peakPower = BigDecimal.ZERO;
-            BigDecimal flatFee = BigDecimal.ZERO;
-            BigDecimal flatPower = BigDecimal.ZERO;
-            BigDecimal valleyFee = BigDecimal.ZERO;
-            BigDecimal valleyPower = BigDecimal.ZERO;
-
-            if (CollectionUtils.isNotEmpty(dataItemList)) {
-                for (ElectricityDataItem electricityDataItem : dataItemList) {
-                    String electricityType = electricityDataItem.getElectricityType();
-
-                    if (ElectricityTypeEnum.SHARP.name().equals(electricityType)) {
-                        sharpFee = sharpFee.add(electricityDataItem.getCost());
-                        sharpPower = sharpPower.add(electricityDataItem.getElectricity());
-                    } else if (ElectricityTypeEnum.PEAK.name().equals(electricityType)) {
-                        peakFee = peakFee.add(electricityDataItem.getCost());
-                        peakPower = peakPower.add(electricityDataItem.getElectricity());
-                    } else if (ElectricityTypeEnum.FLAT.name().equals(electricityType)) {
-                        flatFee = flatFee.add(electricityDataItem.getCost());
-                        flatPower = flatPower.add(electricityDataItem.getElectricity());
-                    } else {
-                        valleyFee = valleyFee.add(electricityDataItem.getCost());
-                        valleyPower = valleyPower.add(electricityDataItem.getElectricity());
-                    }
-                }
-            }
-            PeakAndValleyReportVO peakAndValleyReportVO = new PeakAndValleyReportVO(startTime, sharpFee, sharpPower,
-                    peakFee, peakPower, flatFee, flatPower, valleyFee, valleyPower);
-
-            reportVOList.add(peakAndValleyReportVO);
-            switch (TimeType.valueOf(timeType)) {
-                case HOUR:
-                    startTime = DateUtil.offsetHour(startTime, 1);
-                    break;
-                case DAY:
-                    startTime = DateUtil.offsetDay(startTime, 1);
-                    break;
-                case MONTH:
-                    startTime = DateUtil.offsetMonth(startTime, 1);
-                    break;
-                default:
-                    startTime = DateUtil.offsetMonth(startTime, 12);
-                    break;
-            }
-        }
-
-        return reportVOList;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/impl/ElectricityTypeSettingServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/impl/ElectricityTypeSettingServiceImpl.java
deleted file mode 100644
index 3558808..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/impl/ElectricityTypeSettingServiceImpl.java
+++ /dev/null
@@ -1,186 +0,0 @@
-package com.dingzhuo.energy.project.electricityTypeSetting.service.impl;
-
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityTypeSettingAddVO;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityTypeSettingItemAddVO;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityTypeSettingItemUpdateVO;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityTypeSettingUpdateVO;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityTypeSetting;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityTypeSettingItem;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.enums.ElectricityTypeEnum;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.ElectricityTypeSettingItemQueryVO;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.ElectricityTypeSettingItemVO;
-import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.ElectricityTypeSettingPageListVO;
-import com.dingzhuo.energy.project.electricityTypeSetting.mapper.ElectricityTypeSettingItemMapper;
-import com.dingzhuo.energy.project.electricityTypeSetting.mapper.ElectricityTypeSettingMapper;
-import com.dingzhuo.energy.project.electricityTypeSetting.service.IElectricityTypeSettingService;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.ObjectUtils;
-import org.springframework.beans.BeanUtils;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.UUID;
-import java.util.stream.Collectors;
-
-/**
- * 璁¤垂瑙勫垯Service涓氬姟灞傚鐞�
- *
- * @author ruoyi
- * @date 2024-06-14
- */
-@Service
-public class ElectricityTypeSettingServiceImpl implements IElectricityTypeSettingService {
-
-    @Resource
-    private ElectricityTypeSettingMapper rulesMapper;
-    @Resource
-    private ElectricityTypeSettingItemMapper ruleDetailsMapper;
-
-
-    /**
-     * 鏌ヨ璁¤垂瑙勫垯鍒楄〃
-     */
-    @Override
-    public List<ElectricityTypeSettingPageListVO> selectPageList(String name) {
-        List<ElectricityTypeSettingPageListVO> rulesPageListVOList = rulesMapper.selectList(name);
-        if (CollectionUtils.isEmpty(rulesPageListVOList)) {
-            return rulesPageListVOList;
-        }
-        Date maxEffectiveDate = new Date();
-        Date date = new Date();
-
-        for (ElectricityTypeSettingPageListVO vo : rulesPageListVOList) {
-            Date effectiveDate = vo.getEffectiveDate();
-            // 鍒ゆ柇骞惰缃� effective 灞炴��
-            if (effectiveDate.before(date) && effectiveDate.after(maxEffectiveDate)) {
-                maxEffectiveDate = effectiveDate;
-                vo.setEffective(true);
-            }
-        }
-        return rulesPageListVOList;
-    }
-
-    /**
-     * 鑾峰彇璁¤垂瑙勫垯璇︽儏
-     */
-    @Override
-    public ElectricityTypeSettingItemQueryVO getRuleDetail(String id) {
-        ElectricityTypeSettingItemQueryVO rulesDetailQueryResponse = new ElectricityTypeSettingItemQueryVO();
-
-        ElectricityTypeSetting rules = rulesMapper.selectById(id);
-        if (ObjectUtils.isEmpty(rules)) {
-            return rulesDetailQueryResponse;
-        }
-        BeanUtils.copyProperties(rules, rulesDetailQueryResponse);
-
-        List<ElectricityTypeSettingItem> detailsList = ruleDetailsMapper.selectListByRuleId(id);
-        if (ObjectUtils.isNotEmpty(detailsList)) {
-            List<ElectricityTypeSettingItemVO> ruleDetailList = new ArrayList<>();
-            for (ElectricityTypeSettingItem ruleDetails : detailsList) {
-                ElectricityTypeSettingItemVO ruleDetailsResponse = new ElectricityTypeSettingItemVO();
-                BeanUtils.copyProperties(ruleDetails, ruleDetailsResponse);
-                ruleDetailsResponse.setTypeDesc(ElectricityTypeEnum.getNameByType(ruleDetails.getType()));
-                ruleDetailList.add(ruleDetailsResponse);
-            }
-            rulesDetailQueryResponse.setRuleDetailList(ruleDetailList);
-        }
-        return rulesDetailQueryResponse;
-    }
-
-    /**
-     * 淇敼璁¤垂绛栫暐
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void updateRule(ElectricityTypeSettingUpdateVO request) {
-        ElectricityTypeSetting rules = rulesMapper.selectById(request.getId());
-        if (ObjectUtils.isEmpty(rules)) {
-            throw new RuntimeException("璁¤垂瑙勫垯涓嶅瓨鍦�");
-        }
-
-        // 鍒ゆ柇褰撳墠鐢熸晥鏃堕棿涓嶈兘灏忎簬褰撳墠鏃ユ湡
-        Date now = new Date();
-        Date inputDate = request.getEffectiveDate();
-        if (inputDate.before(now) || inputDate.equals(now)) {
-            throw new RuntimeException("浼犲叆鏃堕棿鏃╀簬鎴栫瓑浜庡綋鍓嶆椂闂�: " + inputDate);
-        }
-
-        List<ElectricityTypeSettingItemUpdateVO> ruleDetailList = request.getRuleDetailList();
-
-        if (ruleDetailList.size() != 48) {
-            throw new RuntimeException("鏀惰垂鏃堕棿娈靛繀椤绘槸48鏉�");
-        }
-
-        BeanUtils.copyProperties(request, rules);
-        rulesMapper.updateRules(rules);
-
-        for (ElectricityTypeSettingItemUpdateVO ruleDetailsRequest : ruleDetailList) {
-            ElectricityTypeSettingItem ruleDetails = new ElectricityTypeSettingItem();
-
-            ruleDetails.setId(ruleDetailsRequest.getId());
-            ruleDetails.setType(ruleDetailsRequest.getType());
-            if (ObjectUtils.isNotEmpty(ruleDetailsRequest.getRemark())) {
-                ruleDetails.setRemark(ruleDetailsRequest.getRemark());
-            }
-            ruleDetailsMapper.updateRuleDetails(ruleDetails);
-        }
-    }
-
-    /**
-     * 鏂板璁¤垂绛栫暐
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void addRule(ElectricityTypeSettingAddVO request) {
-        Date effectiveDate = request.getEffectiveDate();
-        Date now = new Date();
-        if (effectiveDate.before(now) || effectiveDate.equals(now)) {
-            throw new RuntimeException("浼犲叆鏃堕棿鏃╀簬鎴栫瓑浜庡綋鍓嶆椂闂�");
-        }
-
-        List<ElectricityTypeSettingItemAddVO> ruleDetailList = request.getRuleDetailList();
-
-        if (ruleDetailList.size() != 48) {
-            throw new RuntimeException("鏀惰垂鏃堕棿娈靛繀椤绘槸48鏉�!");
-        }
-        List<Integer> timePeriodList = ruleDetailList.stream().distinct().map(ElectricityTypeSettingItemAddVO::getTimePeriod).collect(Collectors.toList());
-        if (timePeriodList.size() != ruleDetailList.size()) {
-            throw new RuntimeException("鏀惰垂鏃堕棿娈典笉鑳介噸澶�!");
-        }
-        Date createTime = new Date();
-
-        ElectricityTypeSetting rules = new ElectricityTypeSetting();
-        BeanUtils.copyProperties(request, rules);
-        rules.setId(UUID.randomUUID().toString());
-        rules.setCreateTime(createTime);
-        rulesMapper.insertRules(rules);
-
-        for (ElectricityTypeSettingItemAddVO ruleDetailsAddRequest : ruleDetailList) {
-            ElectricityTypeSettingItem ruleDetails = new ElectricityTypeSettingItem();
-            ruleDetails.setRuleId(rules.getId());
-            BeanUtils.copyProperties(ruleDetailsAddRequest, ruleDetails);
-            ruleDetails.setId(UUID.randomUUID().toString());
-            ruleDetails.setCreateTime(createTime);
-            ruleDetailsMapper.insertRuleDetails(ruleDetails);
-        }
-    }
-
-    /**
-     * 鍒犻櫎璁¤垂绛栫暐
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void delRule(String id) {
-        ElectricityTypeSetting rules = rulesMapper.selectById(id);
-        if (ObjectUtils.isEmpty(rules)) {
-            throw new RuntimeException("璁¤垂瑙勫垯涓嶅瓨鍦�");
-        }
-
-        rulesMapper.deleteRulesById(id);
-        ruleDetailsMapper.deleteRulesByRuleId(id);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/controller/energyBalanceController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/controller/energyBalanceController.java
deleted file mode 100644
index c064925..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/controller/energyBalanceController.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package com.dingzhuo.energy.project.energyBalance.controller;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.dataservice.service.PeriodDataService;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.energyBalance.domain.EnergyPic;
-import com.dingzhuo.energy.project.energyBalance.service.IEnergyBalanceService;
-import com.dingzhuo.energy.project.energyBalance.service.IEnergyPicService;
-import com.dingzhuo.energy.project.reportForm.domain.reportForm;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-
-/**
- * 瀵规爣Controller
- * 
- * @author sys
- * @date 2020-12-22
- */
-@RestController
-@RequestMapping("/balance/energyBalance")
-public class energyBalanceController extends BaseController
-{
-    @Autowired
-    private IModelNodeService modelNodeService;
-    @Autowired
-    private PeriodDataService periodDataService;
-    @Autowired
-    private IEnergyPicService energyPicService;
-    @Autowired
-    private IEnergyBalanceService balanceService;
-    /**
-     * 鑳芥簮骞宠 鍒嗘瀽
-     */
-    @PreAuthorize("@ss.hasPermi('balance:energyBalance:list')")
-    @GetMapping("/list")
-    public AjaxResult list(DataItem dataItem)
-    {
-        List<EnergyIndex> energyList = modelNodeService.getSettingIndex(dataItem.getIndexCode());
-        List<String> indexCode = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        List<DataItem> list = balanceService.getBalanceList(indexCode, dataItem.getDataTime(), dataItem.getTimeType());
-        return AjaxResult.success(list);
-    }
-    @PreAuthorize("@ss.hasPermi('balance:energyBalance:tableList')")
-    @GetMapping("/tableList")
-    public AjaxResult tableList(DataItem dataItem)
-    {
-        List<EnergyIndex> energyList = modelNodeService.getSettingIndex(dataItem.getIndexCode());
-        List<String> indexCode = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        List<DataItem> list = periodDataService.getDatasByIndex(indexCode, dataItem.getDataTime(), dataItem.getTimeType());
-        List<Map> energyHeadList = new ArrayList<Map>();
-        Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
-        list.forEach(result->{
-            if(result.getIndexCode().lastIndexOf("_CC")==result.getIndexCode().length()-3){
-                tableColumn.put("value_CC",result.getValue());
-            }else if(result.getIndexCode().lastIndexOf("_XH")==result.getIndexCode().length()-3){
-                tableColumn.put("value_XH",result.getValue());
-            }else if(result.getIndexCode().lastIndexOf("_WG")==result.getIndexCode().length()-3){
-                tableColumn.put("value_WG",result.getValue());
-            }else if(result.getIndexCode().lastIndexOf("_SH")==result.getIndexCode().length()-3){
-                tableColumn.put("value_SH",result.getValue());
-            }
-        });
-        energyHeadList.add(tableColumn);
-        return AjaxResult.success(energyHeadList);
-    }
-    /**
-     * 鑳芥簮鎹熷け鍒嗘瀽
-     */
-    @PreAuthorize("@ss.hasPermi('balance:energyBalance:lossAnalysisList')")
-    @GetMapping("/lossAnalysisList")
-    public AjaxResult lossAnalysisList(DataItem dataItem)
-    {
-        List<EnergyIndex> energyList = modelNodeService.getSettingIndex(dataItem.getIndexCode());
-        List<String> indexCode = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        List<DataItem> list = periodDataService.getDatasByIndex(indexCode, dataItem.getDataTime(), dataItem.getTimeType());
-        return AjaxResult.success(list);
-    }
-    @PreAuthorize("@ss.hasPermi('balance:energyBalance:lossTableList')")
-    @GetMapping("/lossTableList")
-    public AjaxResult lossTableList(DataItem dataItem)
-    {
-        List<EnergyIndex> energyList = modelNodeService.getSettingIndex(dataItem.getIndexCode());
-        List<String> indexCode = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        List<DataItem> list = periodDataService.getDatasByIndex(indexCode, dataItem.getDataTime(), dataItem.getTimeType());
-        List<Map> energyHeadList = new ArrayList<Map>();
-        Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
-        list.forEach(result->{
-            if(result.getIndexCode().lastIndexOf("_CC")==result.getIndexCode().length()-3){
-                tableColumn.put("value_CC",result.getValue());
-            }else if(result.getIndexCode().lastIndexOf("_XH")==result.getIndexCode().length()-3){
-                tableColumn.put("value_XH",result.getValue());
-            }else if(result.getIndexCode().lastIndexOf("_WG")==result.getIndexCode().length()-3){
-                tableColumn.put("value_WG",result.getValue());
-            }else if(result.getIndexCode().lastIndexOf("_SH")==result.getIndexCode().length()-3){
-                tableColumn.put("value_SH",result.getValue());
-            }else if(result.getIndexCode().lastIndexOf("_total")==result.getIndexCode().length()-6){
-                tableColumn.put("value_total",result.getValue());
-            }
-        });
-        energyHeadList.add(tableColumn);
-        return AjaxResult.success(energyHeadList);
-    }
-    /**
-     * 鏌ヨ  鑳芥祦鍒嗘瀽   鍔熻兘鎶ヨ〃  鍒楄〃
-     */
-    @GetMapping("/listEnergyPicIndex")
-    public TableDataInfo list(EnergyPic energyPic){
-        List<EnergyPic> list = energyPicService.selectEnergyPicList(energyPic);
-        return getDataTable(list);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/domain/EnergyPic.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/domain/EnergyPic.java
deleted file mode 100644
index 9ea4128..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/domain/EnergyPic.java
+++ /dev/null
@@ -1,453 +0,0 @@
-package com.dingzhuo.energy.project.energyBalance.domain;
-
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-
-/**
- * 鑳芥祦鍒嗘瀽  EnergyPic
- * 
- * @author zhaow
- * @date 2020-12-26
- */
-public class EnergyPic extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 閰嶇疆涓婚敭 */
-    private String index_id;
-
-    /** 鎸囨爣鍚嶅瓧*/
-    private String name;
-
-    /** 鎸囨爣鐨刢ode*/
-    private String code;
-
-    /** 鎸囨爣鍒嗙被鎺掑簭鍦板潃 */
-    private String address;
-    /**鏌ヨ鏃ユ湡**/
-    private String dataTime;
-    /**閫夋嫨灏忔椂**/
-    private String selectHour;
-    /**妯″瀷鐨勫悕瀛�**/
-    private String modename;
-    /**妯″瀷鐨刬d**/
-    private String nodeid;
-    /**鏌ヨ鐨剆ql涓撶敤鐗规畩澶勭悊鐨� 鏃ユ湡鏉′欢 鍙拡瀵�  鑳芥祦鍒嗘瀽浣跨敤**/
-    private String sqlWhereDataTime;
-
-    private String 	a1;
-    private String 	a2;
-    private String 	a3;
-    private String 	a4;
-    private String 	a5;
-    private String 	a6;
-    private String 	a7;
-    private String 	a8;
-    private String 	a9;
-    private String 	a10;
-    private String 	a11;
-    private String 	a12;
-    private String 	a13;
-    private String 	a14;
-    private String 	a15;
-    private String 	a16;
-    private String 	a17;
-    private String 	a18;
-    private String 	a19;
-    private String 	a20;
-    private String 	a21;
-    private String 	a22;
-    private String 	a23;
-    private String 	a24;
-    private String 	a25;
-    private String 	a26;
-    private String 	a27;
-    private String 	a28;
-    private String 	a29;
-    private String 	a30;
-    private String 	a31;
-    private String 	a32;
-    private String 	a33;
-    private String 	a34;
-    private String 	a35;
-    private String 	a36;
-
-    public String getIndex_id() {
-        return index_id;
-    }
-
-    public void setIndex_id(String index_id) {
-        this.index_id = index_id;
-    }
-
-    public String getA1() {
-        return getNlfxVal(getNlfxVal(this.a1));
-    }
-
-    public void setA1(String a1) {
-        this.a1 = a1;
-    }
-
-    public String getA2() {
-        return getNlfxVal(this.a2);
-    }
-
-    public void setA2(String a2) {
-        this.a2 = a2;
-    }
-
-    public String getA3() {
-        return getNlfxVal(this.a3);
-    }
-
-    public void setA3(String a3) {
-        this.a3 = a3;
-    }
-
-    public String getA4() {
-        return getNlfxVal(this.a4);
-    }
-
-    public void setA4(String a4) {
-        this.a4 = a4;
-    }
-
-    public String getA5() {
-        return getNlfxVal(this.a5);
-    }
-
-    public void setA5(String a5) {
-        this.a5 = a5;
-    }
-
-    public String getA6() {
-        return getNlfxVal(this.a6);
-    }
-
-    public void setA6(String a6) {
-        this.a6 = a6;
-    }
-
-    public String getA7() {
-        return getNlfxVal(this.a7);
-    }
-
-    public void setA7(String a7) {
-        this.a7 = a7;
-    }
-
-    public String getA8() {
-        return getNlfxVal(this.a8);
-    }
-
-    public void setA8(String a8) {
-        this.a8 = a8;
-    }
-
-    public String getA9() {
-        return getNlfxVal(this.a9);
-    }
-
-    public void setA9(String a9) {
-        this.a9 = a9;
-    }
-
-    public String getA10() {
-        return getNlfxVal(this.a10);
-    }
-
-    public void setA10(String a10) {
-        this.a10 = a10;
-    }
-
-    public String getA11() {
-        return getNlfxVal(this.a11);
-    }
-
-    public void setA11(String a11) {
-        this.a11 = a11;
-    }
-
-    public String getA12() {
-        return getNlfxVal(this.a12);
-    }
-
-    public void setA12(String a12) {
-        this.a12 = a12;
-    }
-
-    public String getA13() {
-        return getNlfxVal(this.a13);
-    }
-
-    public void setA13(String a13) {
-        this.a13 = a13;
-    }
-
-    public String getA14() {
-        return getNlfxVal(this.a14);
-    }
-
-    public void setA14(String a14) {
-        this.a14 = a14;
-    }
-
-    public String getA15() {
-        return getNlfxVal(this.a15);
-    }
-
-    public void setA15(String a15) {
-        this.a15 = a15;
-    }
-
-    public String getA16() {
-        return getNlfxVal(this.a16);
-    }
-
-    public void setA16(String a16) {
-        this.a16 = a16;
-    }
-
-    public String getA17() {
-        return getNlfxVal(this.a17);
-    }
-
-    public void setA17(String a17) {
-        this.a17 = a17;
-    }
-
-    public String getA18() {
-        return getNlfxVal(this.a18);
-    }
-
-    public void setA18(String a18) {
-        this.a18 = a18;
-    }
-
-    public String getA19() {
-        return getNlfxVal(this.a19);
-    }
-
-    public void setA19(String a19) {
-        this.a19 = a19;
-    }
-
-    public String getA20() {
-        return getNlfxVal(this.a20);
-    }
-
-    public void setA20(String a20) {
-        this.a20 = a20;
-    }
-
-    public String getA21() {
-        return getNlfxVal(this.a21);
-    }
-
-    public void setA21(String a21) {
-        this.a21 = a21;
-    }
-
-    public String getA22() {
-        return getNlfxVal(this.a22);
-    }
-
-    public void setA22(String a22) {
-        this.a22 = a22;
-    }
-
-    public String getA23() {
-        return getNlfxVal(this.a23);
-    }
-
-    public void setA23(String a23) {
-        this.a23 = a23;
-    }
-
-    public String getA24() {
-        return getNlfxVal(this.a24);
-    }
-
-    public void setA24(String a24) {
-        this.a24 = a24;
-    }
-
-    public String getA25() {
-        return getNlfxVal(this.a25);
-    }
-
-    public void setA25(String a25) {
-        this.a25 = a25;
-    }
-
-    public String getA26() {
-        return getNlfxVal(this.a26);
-    }
-
-    public void setA26(String a26) {
-        this.a26 = a26;
-    }
-
-    public String getA27() {
-        return getNlfxVal(this.a27);
-    }
-
-    public void setA27(String a27) {
-        this.a27 = a27;
-    }
-
-    public String getA28() {
-        return getNlfxVal(this.a28);
-    }
-
-    public void setA28(String a28) {
-        this.a28 = a28;
-    }
-
-    public String getA29() {
-        return getNlfxVal(this.a29);
-    }
-
-    public void setA29(String a29) {
-        this.a29 = a29;
-    }
-
-    public String getA30() {
-        return getNlfxVal(this.a30);
-    }
-
-    public void setA30(String a30) {
-        this.a30 = a30;
-    }
-
-    public String getA31() {
-        return getNlfxVal(this.a31);
-    }
-
-    public void setA31(String a31) {
-        this.a31 = a31;
-    }
-
-    public String getA32() {
-        return getNlfxVal(this.a32);
-    }
-
-    public void setA32(String a32) {
-        this.a32 = a32;
-    }
-
-    public String getA33() {
-        return getNlfxVal(this.a33);
-    }
-
-    public void setA33(String a33) {
-        this.a33 = a33;
-    }
-
-    public String getA34() {
-        return getNlfxVal(this.a34);
-    }
-
-    public void setA34(String a34) {
-        this.a34 = a34;
-    }
-
-    public String getA35() {
-        return getNlfxVal(this.a35);
-    }
-
-    public void setA35(String a35) {
-        this.a35 = a35;
-    }
-
-    public String getA36() {
-        return getNlfxVal(this.a36);
-    }
-
-    public void setA36(String a36) {
-        this.a36 = a36;
-    }
-
-
-    public String getSelectHour() {
-        return selectHour;
-    }
-
-    public void setSelectHour(String selectHour) {
-        this.selectHour = selectHour;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getAddress() {
-        return address;
-    }
-
-    public void setAddress(String address) {
-        this.address = address;
-    }
-
-    public String getModename() {
-        return modename;
-    }
-
-    public void setModename(String modename) {
-        this.modename = modename;
-    }
-
-    public String getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(String dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public String getNodeid() {
-        return nodeid;
-    }
-
-    public void setNodeid(String nodeid) {
-        this.nodeid = nodeid;
-    }
-
-    public String getSqlWhereDataTime() {
-        return this.dataTime+" "+this.selectHour;
-    }
-
-    public void setSqlWhereDataTime(String sqlWhereDataTime) {
-        this.sqlWhereDataTime = sqlWhereDataTime;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-                .append("index_id", getIndex_id())
-                .toString();
-    }
-
-    private String getNlfxVal(String val)
-    {
-        String tVal = (val==null || val.length()==0)?"--":val;
-        if(tVal.indexOf(".")>-1)
-        {
-            tVal = String.format("%.2f", Double.parseDouble(tVal));
-        }
-        return tVal;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/mapper/EnergyPicMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/mapper/EnergyPicMapper.java
deleted file mode 100644
index 9c4e5dd..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/mapper/EnergyPicMapper.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.dingzhuo.energy.project.energyBalance.mapper;
-
-
-import com.dingzhuo.energy.project.energyBalance.domain.EnergyPic;
-
-import java.util.List;
-
-/**
- * 鑳芥祦鍒嗘瀽  Mapper鎺ュ彛
- * 
- * @author zhaow
- * @date 2020-12-26
- */
-public interface EnergyPicMapper
-{
-    /**
-     * 鏌ヨ  鑳芥祦鍒嗘瀽  鎸囨爣鏁版嵁鍒楄〃
-     *
-     * @param energyPic 宸ュ簭鍗曡�楃粺璁″姛鑳芥姤琛ㄧ殑鎸囨爣鏁版嵁
-     * @return 鑳芥祦鍒嗘瀽    鍔熻兘闆嗗悎
-     */
-    public List<EnergyPic> selectEnergyPicList(EnergyPic energyPic);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/mapper/energybalanceMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/mapper/energybalanceMapper.java
deleted file mode 100644
index 36c3cf9..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/mapper/energybalanceMapper.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.dingzhuo.energy.project.energyBalance.mapper;
-
-
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.project.energyBalance.domain.EnergyPic;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * 鑳芥祦鍒嗘瀽  Mapper鎺ュ彛
- * 
- * @author zhaow
- * @date 2020-12-26
- */
-public interface energybalanceMapper
-{
-    /**
-     * 鏌ヨ  鑳芥簮骞宠 鍒嗘瀽
-     *
-     */
-    public List<DataItem> getBalanceList(@Param("indexIds") List<String> indexIds,
-                                   @Param("timeCode") String timeCode);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/service/IEnergyBalanceService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/service/IEnergyBalanceService.java
deleted file mode 100644
index 77654ad..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/service/IEnergyBalanceService.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.dingzhuo.energy.project.energyBalance.service;
-
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.project.energyBalance.domain.EnergyPic;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 鑳藉憳骞宠 Service鎺ュ彛
- * 
- * @author zhaow
- * @date 2020-12-26
- */
-public interface IEnergyBalanceService
-{
-
-    /**
-     * 鏌ヨ鑳芥簮骞宠 
-     *
-     */
-    public List<DataItem> getBalanceList(List<String> indexIds,Date dataTime,TimeType timeType);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/service/IEnergyPicService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/service/IEnergyPicService.java
deleted file mode 100644
index dde5f5b..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/service/IEnergyPicService.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.dingzhuo.energy.project.energyBalance.service;
-
-
-import com.dingzhuo.energy.project.energyBalance.domain.EnergyPic;
-
-import java.util.List;
-
-/**
- * 鑳芥祦鍒嗘瀽Service鎺ュ彛
- * 
- * @author zhaow
- * @date 2020-12-26
- */
-public interface IEnergyPicService
-{
-
-    /**
-     * 鏌ヨ鑳芥祦鍒嗘瀽鎶ヨ〃鐨勬寚鏍囨暟鎹垪琛�
-     *
-     * @param energyPic 鑳芥祦鍒嗘瀽鎶ヨ〃鐨勬寚鏍囨暟鎹�
-     * @return 鑳芥祦鍒嗘瀽闆嗗悎
-     */
-    public List<EnergyPic> selectEnergyPicList(EnergyPic energyPic);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/service/impl/EnergyPicServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/service/impl/EnergyPicServiceImpl.java
deleted file mode 100644
index b13474d..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/service/impl/EnergyPicServiceImpl.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package com.dingzhuo.energy.project.energyBalance.service.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import com.dingzhuo.energy.project.energyBalance.domain.EnergyPic;
-import com.dingzhuo.energy.project.energyBalance.mapper.EnergyPicMapper;
-import com.dingzhuo.energy.project.energyBalance.service.IEnergyPicService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-/**
- * 宸ュ簭鍗曡�楃粺璁″姛鑳絊ervice涓氬姟灞傚鐞�
- * 
- * @author zhaow
- * @date 2020-12-26
- */
-@Service
-public class EnergyPicServiceImpl implements IEnergyPicService
-{
-    @Autowired
-    private EnergyPicMapper energyPicMapper;
-
-    /**
-     * 鏌ヨ宸ュ簭鍗曡�楃粺璁″姛鑳芥姤琛ㄧ殑鎸囨爣鏁版嵁鍒楄〃
-     *
-     * @param energyPic 宸ュ簭鍗曡�楃粺璁″姛鑳芥姤琛ㄧ殑鎸囨爣鏁版嵁
-     * @return 宸ュ簭鍗曡�楃粺璁″姛鑳介泦鍚�
-     */
-    public List<EnergyPic> selectEnergyPicList(EnergyPic energyPic){
-
-        //鏌ヨ鏁版嵁
-        List<EnergyPic> queryEnergyPiclRes = energyPicMapper.selectEnergyPicList(energyPic);
-        //杩斿洖淇℃伅
-        List<EnergyPic> resList = new ArrayList<>();
-        //鎸� 妯″瀷鐨刟ddress鍋氫釜鍒嗙粍 鍏跺疄 鎸� 鎸囨爣鎵�鍦ㄦā鍨嬪悕瀛楀垎缁勪篃鍙互
-        Map<String, List<EnergyPic>> addRessMap = queryEnergyPiclRes.stream().collect(Collectors.groupingBy(EnergyPic::getAddress, Collectors.toList()));
-        //閬嶅巻鍒嗙粍锛屽洜涓轰竴涓ā鍨嬩笅灏卞浐瀹氬洓涓寚鏍� 浜у嚭銆佹秷鑰椼�佸渚涖�佹崯鑰� 锛屽皢浠栦滑妯捣鏉ュ仛鎴愪竴涓� bean
-        addRessMap.forEach((k,v)->{
-            EnergyPic tPic = new EnergyPic();
-            for(EnergyPic codePic:v)
-            {
-                String code = codePic.getCode();
-                tPic.setModename(codePic.getModename());
-                if(code.lastIndexOf("_CC")==code.length()-3)//鏍规嵁鎸囨爣鐨勭紪鐮佸垽瀹� 鏄偅绉� 鍊硷紙浜у嚭銆佹秷鑰楃瓑绛夛級锛屽簳灞傛病鏈夊睘鎬ф敮鎸侊紝鍏堢敤杩欎釜
-                {
-                    tPic.setA1(codePic.getA1());
-                }
-                if(code.lastIndexOf("_XH")==code.length()-3)
-                {
-                    tPic.setA2(codePic.getA1());
-                }
-                if(code.lastIndexOf("_WG")==code.length()-3)
-                {
-                    tPic.setA3(codePic.getA1());
-                }
-                if(code.lastIndexOf("_SH")==code.length()-3)
-                {
-                    tPic.setA4(codePic.getA1());
-                }
-            }
-            resList.add(tPic);
-        });
-        return resList;
-    }
-
-    private String calculationCpdh(String nyxhl,String cpcl)
-    {
-        try{
-            if(nyxhl.equals("--")||cpcl.equals("--"))
-            {
-                return "--";
-            }else{
-                double fz = Double.parseDouble(nyxhl);
-                double fm = Double.parseDouble(cpcl);
-                return String.format("%.2f", fz/fm);
-            }
-        }catch (Exception e)
-        {
-            e.printStackTrace();
-            return "--";
-        }
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/service/impl/energyBalanceServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/service/impl/energyBalanceServiceImpl.java
deleted file mode 100644
index f631eeb..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyBalance/service/impl/energyBalanceServiceImpl.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.dingzhuo.energy.project.energyBalance.service.impl;
-
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.project.energyBalance.mapper.energybalanceMapper;
-import com.dingzhuo.energy.project.energyBalance.service.IEnergyBalanceService;
-import com.dingzhuo.energy.project.energyBalance.service.IEnergyPicService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * 宸ュ簭鍗曡�楃粺璁″姛鑳絊ervice涓氬姟灞傚鐞�
- * 
- * @author zhaow
- * @date 2020-12-26
- */
-@Service
-public class energyBalanceServiceImpl implements IEnergyBalanceService
-{
-    @Autowired
-    private energybalanceMapper energybalanceMapper;
-
-    @Override
-    public List<DataItem> getBalanceList(List<String> indexIds, Date dataTime, TimeType timeType) {
-        if (indexIds != null && !indexIds.isEmpty()) {
-            String timeCode = TimeManager.getTimeCode(dataTime, timeType);
-            return energybalanceMapper.getBalanceList(indexIds, timeCode);
-        }
-
-        return Collections.emptyList();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/controller/EnergyMonthConsumeInputController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/controller/EnergyMonthConsumeInputController.java
deleted file mode 100644
index cbd9569..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/controller/EnergyMonthConsumeInputController.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.dingzhuo.energy.project.energyConsumeInput.controller;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.common.*;
-import com.dingzhuo.energy.project.energyConsumeInput.domain.*;
-import com.dingzhuo.energy.project.energyConsumeInput.service.IEnergyConsumeInputService;
-import com.jsoniter.annotation.JsonObject;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * 瀵规爣Controller
- *
- * @author sys
- * @date 2020-12-22
- */
-@RestController
-@RequestMapping("/energyAssistInput/energyMonthConsumeInput")
-@Api(value = "鏈堟暟鎹綍鍏�",tags = {"鏈堟暟鎹綍鍏�"})
-public class EnergyMonthConsumeInputController extends BaseController {
-    @Autowired
-    private IEnergyConsumeInputService energyConsumeInputService;
-
-    /**
-     * 鏌ヨ  鏈堝害鑳借�楁墜鍔ㄥ綍鍏ュ�� 鍒楄〃
-     */
-    @GetMapping("/listEnergyConsumeInputIndex")
-    @ApiOperation(value = "鏈堟暟鎹綍鍏ュ垪琛�")
-    public TableDataInfo list(String nodeId, String date, String timeType) {
-        String tempDate = date;
-        date = DateTimeUtil.toDateTimeStr(date, DateTimeUtil.COMMON_PATTERN_TO_MONTH, DateTimeUtil.COMMON_PATTERN_MONTH);
-        String timeCode = CommonConst.WORD_M + date;
-        List<EnergyConsumeInput> list = energyConsumeInputService.selectEnergyConsumeInputList(nodeId, timeCode, timeType);
-        for (EnergyConsumeInput input : list) {
-            input.setDataTimeStr(DateTimeUtil.getDateTime(input.getDataTime(), DateTimeUtil.COMMON_PATTERN_TO_MONTH));
-            if (StringUtil.isEmptyOrNull(input.getDataTimeStr())) {
-                input.setDataTimeStr(tempDate);
-            }
-            input.setCreateTimeStr(DateTimeUtil.toString(input.getCreateTime()));
-        }
-        return getDataTable(list);
-    }
-
-    /**
-     * 淇濆瓨鑳借�楁墜鍔ㄨ緭鍏ヤ俊鎭�
-     *
-     * @return
-     */
-    @PostMapping("/saveEnergyConsumeInput")
-    @ApiOperation(value = "鏈堟暟鎹綍鍏ヤ繚瀛�")
-    public TableDataInfo save(@RequestHeader("Authorization") String authorization, @RequestBody SaveEnergyConsumeInputModel model) {
-        if (model != null && !model.getModels().isEmpty()) {
-            EnergyConsumeInput temp = model.getModels().stream().findFirst().orElse(null);
-            String timeCode = CommonConst.EMPTY;
-            Date dataTime = null;
-            if (temp != null) {
-                String dt = temp.getDataTimeStr();
-                dataTime = DateTimeUtil.toDateTime(dt, DateTimeUtil.COMMON_PATTERN_TO_MONTH);
-                timeCode = CommonConst.WORD_M + DateTimeUtil.getMonth(dataTime);
-            }
-            List<String> indexIds = model.getModels().stream().map(EnergyConsumeInput::getIndexId).collect(Collectors.toList());
-
-            int res = energyConsumeInputService.deleteEnergyConsumeInputByIds(indexIds, timeCode);
-
-            List<SaveEnergyConsumeInputEntity> dataItemList = new ArrayList<>();
-            Date endTime = DateTimeUtil.addSeconds(DateTimeUtil.addMonths(dataTime, CommonConst.DIGIT_1), CommonConst.DIGIT_MINUS_1);
-            String userName = SecurityUtils.getUsername();
-            for (EnergyConsumeInput input : model.getModels()) {
-                if (input.getValue() != null) {
-                    SaveEnergyConsumeInputEntity data = new SaveEnergyConsumeInputEntity();
-                    data.setValue(input.getValue());
-                    data.setCreateTime(DateUtils.getNowDate());
-                    data.setIndexId(input.getIndexId());
-                    data.setIndexCode(input.getCode());
-                    data.setTimeType(TimeTypeConst.TIME_TYPE_MONTH);
-                    data.setTimeCode(timeCode);
-                    data.setDataTime(dataTime);
-                    data.setBeginTime(dataTime);
-                    data.setEndTime(endTime);
-                    data.setCreateBy(userName);
-                    dataItemList.add(data);
-                }
-            }
-            int saveRes = energyConsumeInputService.saveEnergyConsumeInputList(dataItemList);
-            if (saveRes > 0) {
-                boolean mark = energyConsumeInputService.reCalcIndexIdByIds(indexIds, TimeTypeConst.TIME_TYPE_MONTH, authorization, dataTime);
-            }
-        }
-        List<String> res = new ArrayList<>();
-        return getDataTable(res);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/controller/energyDayConsumeInputController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/controller/energyDayConsumeInputController.java
deleted file mode 100644
index ae86f91..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/controller/energyDayConsumeInputController.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.dingzhuo.energy.project.energyConsumeInput.controller;
-
-import com.alibaba.fastjson.JSON;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.common.*;
-import com.dingzhuo.energy.project.energyConsumeInput.domain.*;
-import com.dingzhuo.energy.project.energyConsumeInput.service.IEnergyConsumeInputService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * 瀵规爣Controller
- *
- * @author sys
- * @date 2020-12-22
- */
-@RestController
-@RequestMapping("/energyAssistInput/energyDayConsumeInput")
-@Api(value = "鏃ユ暟鎹綍鍏�",tags = {"鏃ユ暟鎹綍鍏�"})
-public class energyDayConsumeInputController extends BaseController {
-    @Autowired
-    private IEnergyConsumeInputService energyConsumeInputService;
-
-    /**
-     * 鏌ヨ  鏃ュ害鑳借�楁墜鍔ㄥ綍鍏ュ�� 鍒楄〃
-     */
-    @GetMapping("/listEnergyConsumeInputIndex")
-    @ApiOperation(value = "鏃ユ暟鎹綍鍏ュ垪琛�")
-    public TableDataInfo list(String nodeId, String date, String timeType) {
-        String tempDate = date;
-        date = DateTimeUtil.toDateTimeStr(date, DateTimeUtil.COMMON_PATTERN_TO_DAY, DateTimeUtil.COMMON_PATTERN_DAY);
-        String timeCode = CommonConst.WORD_D + date;
-        List<EnergyConsumeInput> list = energyConsumeInputService.selectEnergyConsumeInputList(nodeId, timeCode, timeType);
-        for (EnergyConsumeInput input : list) {
-            input.setDataTimeStr(DateTimeUtil.getDateTime(input.getDataTime(), DateTimeUtil.COMMON_PATTERN_TO_DAY));
-            if (StringUtil.isEmptyOrNull(input.getDataTimeStr())) {
-                input.setDataTimeStr(tempDate);
-            }
-            input.setCreateTimeStr(DateTimeUtil.toString(input.getCreateTime()));
-        }
-        return getDataTable(list);
-    }
-
-    /**
-     * 淇濆瓨鑳借�楁墜鍔ㄨ緭鍏ヤ俊鎭�
-     *
-     * @return
-     */
-    @PostMapping("/saveEnergyConsumeInput")
-    @ApiOperation(value = "鏃ユ暟鎹綍鍏ヤ繚瀛�")
-    public TableDataInfo save(@RequestHeader("Authorization") String authorization, @RequestBody SaveEnergyConsumeInputModel model) {
-        if (model != null && !model.getModels().isEmpty()) {
-            EnergyConsumeInput temp = model.getModels().stream().findFirst().orElse(null);
-            String timeCode = CommonConst.EMPTY;
-            Date dataTime = null;
-            if (temp != null) {
-                String dt = temp.getDataTimeStr();
-                dataTime = DateTimeUtil.toDateTime(dt, DateTimeUtil.COMMON_PATTERN_TO_DAY);
-                timeCode = CommonConst.WORD_D + DateTimeUtil.getDay(dataTime);
-            }
-            List<String> indexIds = model.getModels().stream().map(EnergyConsumeInput::getIndexId).collect(Collectors.toList());
-
-            int res = energyConsumeInputService.deleteEnergyConsumeInputByIds(indexIds, timeCode);
-
-            List<SaveEnergyConsumeInputEntity> dataItemList = new ArrayList<>();
-            Date endTime = DateTimeUtil.addSeconds(DateTimeUtil.addDays(dataTime, CommonConst.DIGIT_1), CommonConst.DIGIT_MINUS_1);
-            String userName = SecurityUtils.getUsername();
-            for (EnergyConsumeInput input : model.getModels()) {
-                if (input.getValue() != null) {
-                    SaveEnergyConsumeInputEntity data = new SaveEnergyConsumeInputEntity();
-                    data.setValue(input.getValue());
-                    data.setCreateTime(DateUtils.getNowDate());
-                    data.setIndexId(input.getIndexId());
-                    data.setIndexCode(input.getCode());
-                    data.setTimeType(TimeTypeConst.TIME_TYPE_DAY);
-                    data.setTimeCode(timeCode);
-                    data.setDataTime(dataTime);
-                    data.setBeginTime(dataTime);
-                    data.setEndTime(endTime);
-                    data.setCreateBy(userName);
-                    dataItemList.add(data);
-                }
-            }
-            int saveRes = energyConsumeInputService.saveEnergyConsumeInputList(dataItemList);
-            if (saveRes > 0) {
-                boolean mark = energyConsumeInputService.reCalcIndexIdByIds(indexIds, TimeTypeConst.TIME_TYPE_DAY, authorization, dataTime);
-            }
-        }
-        List<String> res = new ArrayList<>();
-        return getDataTable(res);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/controller/energyYearConsumeInputController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/controller/energyYearConsumeInputController.java
deleted file mode 100644
index c8191f5..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/controller/energyYearConsumeInputController.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.dingzhuo.energy.project.energyConsumeInput.controller;
-
-import com.alibaba.fastjson.JSON;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.common.*;
-import com.dingzhuo.energy.project.energyConsumeInput.domain.*;
-import com.dingzhuo.energy.project.energyConsumeInput.service.IEnergyConsumeInputService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * 瀵规爣Controller
- *
- * @author sys
- * @date 2020-12-22
- */
-@RestController
-@RequestMapping("/energyAssistInput/energyYearConsumeInput")
-@Api(value = "骞存暟鎹綍鍏�",tags = {"骞存暟鎹綍鍏�"})
-public class energyYearConsumeInputController extends BaseController {
-    @Autowired
-    private IEnergyConsumeInputService energyConsumeInputService;
-
-    /**
-     * 鏌ヨ  骞村害鑳借�楁墜鍔ㄥ綍鍏ュ�� 鍒楄〃
-     */
-    @GetMapping("/listEnergyConsumeInputIndex")
-    @ApiOperation(value = "骞存暟鎹綍鍏ュ垪琛�")
-    public TableDataInfo list(String nodeId, String date, String timeType) {
-        String tempDate = date;
-        date = DateTimeUtil.toDateTimeStr(date, DateTimeUtil.COMMON_PATTERN_YEAR, DateTimeUtil.COMMON_PATTERN_YEAR);
-        String timeCode = CommonConst.WORD_Y + date;
-        List<EnergyConsumeInput> list = energyConsumeInputService.selectEnergyConsumeInputList(nodeId, timeCode, timeType);
-        for (EnergyConsumeInput input : list) {
-            input.setDataTimeStr(DateTimeUtil.getDateTime(input.getDataTime(), DateTimeUtil.COMMON_PATTERN_YEAR));
-            if (StringUtil.isEmptyOrNull(input.getDataTimeStr())) {
-                input.setDataTimeStr(tempDate);
-            }
-            input.setCreateTimeStr(DateTimeUtil.toString(input.getCreateTime()));
-        }
-        return getDataTable(list);
-    }
-
-    /**
-     * 淇濆瓨鑳借�楁墜鍔ㄨ緭鍏ヤ俊鎭�
-     *
-     * @return
-     */
-    @PostMapping("/saveEnergyConsumeInput")
-    @ApiOperation(value = "骞存暟鎹綍鍏ヤ繚瀛�")
-    public TableDataInfo save(@RequestHeader("Authorization") String authorization, @RequestBody SaveEnergyConsumeInputModel model) {
-        if (model != null && !model.getModels().isEmpty()) {
-            EnergyConsumeInput temp = model.getModels().stream().findFirst().orElse(null);
-            String timeCode = CommonConst.EMPTY;
-            Date dataTime = null;
-            if (temp != null) {
-                String dt = temp.getDataTimeStr();
-                dataTime = DateTimeUtil.toDateTime(dt, DateTimeUtil.COMMON_PATTERN_YEAR);
-                timeCode = CommonConst.WORD_Y + DateTimeUtil.getYear(dataTime);
-            }
-            List<String> indexIds = model.getModels().stream().map(EnergyConsumeInput::getIndexId).collect(Collectors.toList());
-
-            int res = energyConsumeInputService.deleteEnergyConsumeInputByIds(indexIds, timeCode);
-
-            List<SaveEnergyConsumeInputEntity> dataItemList = new ArrayList<>();
-            Date endTime = DateTimeUtil.addSeconds(DateTimeUtil.addYears(dataTime, CommonConst.DIGIT_1), CommonConst.DIGIT_MINUS_1);
-            String userName = SecurityUtils.getUsername();
-            for (EnergyConsumeInput input : model.getModels()) {
-                if (input.getValue() != null) {
-                    SaveEnergyConsumeInputEntity data = new SaveEnergyConsumeInputEntity();
-                    data.setValue(input.getValue());
-                    data.setCreateTime(DateUtils.getNowDate());
-                    data.setIndexId(input.getIndexId());
-                    data.setIndexCode(input.getCode());
-                    data.setTimeType(TimeTypeConst.TIME_TYPE_YEAR);
-                    data.setTimeCode(timeCode);
-                    data.setDataTime(dataTime);
-                    data.setBeginTime(dataTime);
-                    data.setEndTime(endTime);
-                    data.setCreateBy(userName);
-                    dataItemList.add(data);
-                }
-            }
-            int saveRes = energyConsumeInputService.saveEnergyConsumeInputList(dataItemList);
-            if (saveRes > 0) {
-                boolean mark = energyConsumeInputService.reCalcIndexIdByIds(indexIds, TimeTypeConst.TIME_TYPE_YEAR, authorization, dataTime);
-            }
-        }
-        List<String> res = new ArrayList<>();
-        return getDataTable(res);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/domain/EnergyConsumeInput.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/domain/EnergyConsumeInput.java
deleted file mode 100644
index 6aaaede..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/domain/EnergyConsumeInput.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package com.dingzhuo.energy.project.energyConsumeInput.domain;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.util.Date;
-
-/**
- * @Description: 鑳借�楁墜鍔ㄥ綍鍏ュ垪琛ㄥ疄浣�
- * @author: yxw
- * @date: 2022骞�03鏈�16鏃� 18:05
- */
-@Data
-@ApiModel(value = "闃舵褰曞叆")
-public class EnergyConsumeInput {
-    /** 鎸囨爣id */
-    @ApiModelProperty(value = "鎸囨爣id")
-    private String indexId;
-
-    /**
-     * 鏃堕棿绫诲瀷
-     */
-    @ApiModelProperty(value = "鏃堕棿绫诲瀷")
-    private TimeType timeType;
-
-    /** 鎸囨爣鍚嶅瓧*/
-    @ApiModelProperty(value = "鎸囨爣鍚嶅瓧")
-    private String name;
-
-    /** 鎸囨爣鐨刢ode*/
-    @ApiModelProperty(value = "鎸囨爣鐨刢ode")
-    private String code;
-    /**
-     * 鍗曚綅
-     */
-    @ApiModelProperty(value = "鍗曚綅")
-    private String unit;
-    /**
-     * 涓庢暟鎹簱瀛楁瀵瑰簲
-     */
-    @ApiModelProperty(value = "涓庢暟鎹簱瀛楁瀵瑰簲")
-    private Date dataTime;
-    /**
-     * 椤甸潰鏄剧ず鏃堕棿瀛楁
-     */
-    @ApiModelProperty(value = "椤甸潰鏄剧ず鏃堕棿瀛楁")
-    private String dataTimeStr;
-    /**
-     * 褰曞叆鍊�
-     */
-    @ApiModelProperty(value = "褰曞叆鍊�")
-    private Double value;
-    /**
-     * 褰曞叆鏃堕棿 涓庢暟鎹簱瀛楁瀵瑰簲
-     */
-    @ApiModelProperty(value = "褰曞叆鏃堕棿")
-    private Date createTime;
-    /**
-     * 褰曞叆鏃堕棿 椤甸潰鏄剧ず瀛楁
-     */
-    @ApiModelProperty(value = "褰曞叆鏃堕棿-椤甸潰")
-    private String createTimeStr;
-    /**
-     * 鍒涘缓浜�
-     */
-    @ApiModelProperty(value = "鍒涘缓浜�")
-    private String createBy;
-    /**
-     * 鎸囨爣绫诲瀷鍚嶇О
-     */
-    @ApiModelProperty(value = "鎸囨爣绫诲瀷鍚嶇О")
-    private String categoryName;
-    /**
-     * 鑳芥簮绫诲瀷鍚嶇О
-     */
-    @ApiModelProperty(value = "鑳芥簮绫诲瀷鍚嶇О")
-    private String energyName;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/domain/ReCalcParamsModel.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/domain/ReCalcParamsModel.java
deleted file mode 100644
index 746bae5..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/domain/ReCalcParamsModel.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.dingzhuo.energy.project.energyConsumeInput.domain;
-
-import lombok.Data;
-
-import java.util.Date;
-
-/**
- * @Description: 璁$畻寮曟搸閲嶇畻鎺ュ彛浼犻�掑疄浣�
- * @author: yxw
- * @date: 2022骞�03鏈�18鏃� 18:07
- */
-@Data
-public class ReCalcParamsModel {
-    /** 鎸囨爣id */
-    private String indexId;
-    /**
-     * 鏃堕棿绫诲瀷
-     */
-    private String timeType;
-    /**
-     * 涓庢暟鎹簱瀛楁瀵瑰簲
-     */
-    private String dataTime;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/domain/ReCalcRespModel.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/domain/ReCalcRespModel.java
deleted file mode 100644
index 8dbd102..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/domain/ReCalcRespModel.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.dingzhuo.energy.project.energyConsumeInput.domain;
-
-import lombok.Data;
-
-/**
- * @Description: 璁$畻寮曟搸閲嶇畻鎺ュ彛杩斿洖缁撴灉
- * @author: yxw
- * @date: 2022骞�03鏈�18鏃� 18:07
- */
-@Data
-public class ReCalcRespModel {
-    /** 杩斿洖淇℃伅 */
-    private String msg;
-    /**
-     * 鎺ュ彛璇锋眰缁撴灉
-     */
-    private int code;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/domain/SaveEnergyConsumeInputEntity.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/domain/SaveEnergyConsumeInputEntity.java
deleted file mode 100644
index 9133fc3..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/domain/SaveEnergyConsumeInputEntity.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.dingzhuo.energy.project.energyConsumeInput.domain;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.dataservice.domain.Quality;
-import lombok.Data;
-
-import java.util.Date;
-
-/**
- * @Description: 淇濆瓨鑳借�楁墜鍔ㄥ綍鍏ユ暟鎹�
- * @author: yxw
- * @date: 2022骞�03鏈�17鏃� 12:05
- */
-@Data
-public class SaveEnergyConsumeInputEntity {
-
-    private String indexId;
-    private String indexCode;
-    private Date beginTime;
-    private Date endTime;
-    private Date dataTime;
-    private String timeCode;
-    private String timeType;
-    private Double value;
-    private Quality quality;
-    private Date createTime;
-    private Date updateTime;
-    /**
-     * 鍒涘缓浜�
-     */
-    private String createBy;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/domain/SaveEnergyConsumeInputModel.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/domain/SaveEnergyConsumeInputModel.java
deleted file mode 100644
index 00ed0ca..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/domain/SaveEnergyConsumeInputModel.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.dingzhuo.energy.project.energyConsumeInput.domain;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * @Description: TODO
- * @author: yxw
- * @date: 2022骞�03鏈�17鏃� 11:13
- */
-@Data
-@ApiModel(value = "闃舵褰曞叆model")
-public class SaveEnergyConsumeInputModel {
-
-    @ApiModelProperty(value = "褰曞叆鏁版嵁鍒楄〃")
-    private List<EnergyConsumeInput> models;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/mapper/EnergyConsumeInputMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/mapper/EnergyConsumeInputMapper.java
deleted file mode 100644
index 3422daf..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/mapper/EnergyConsumeInputMapper.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.dingzhuo.energy.project.energyConsumeInput.mapper;
-
-
-import com.dingzhuo.energy.project.energyBalance.domain.EnergyPic;
-import com.dingzhuo.energy.project.energyConsumeInput.domain.EnergyConsumeInput;
-import com.dingzhuo.energy.project.energyConsumeInput.domain.SaveEnergyConsumeInputEntity;
-
-import java.util.List;
-
-/**
- * 鑳芥祦鍒嗘瀽  Mapper鎺ュ彛
- *
- * @author yxw
- * @date 2020-12-26
- */
-public interface EnergyConsumeInputMapper {
-
-    /**
-     * 鏌ヨ  鑳借�楁墜鍔ㄥ綍鍏� 鏁版嵁鍒楄〃
-     *
-     * @param nodeId
-     * @param timeCode
-     * @param timeType
-     * @return
-     */
-    List<EnergyConsumeInput> selectEnergyConsumeInputList(String nodeId, String timeCode, String timeType);
-
-    /**
-     * 鏍规嵁鏃ユ湡鍜屾寚鏍噄d鍒犻櫎鏁版嵁
-     *
-     * @param indexIds 鎸囨爣id鍒楄〃
-     * @param timeCode 鏈堜唤鍊�
-     * @return
-     */
-    int deleteEnergyConsumeInputByIds(List<String> indexIds, String timeCode);
-
-    /**
-     * 淇濆瓨鑳借�楁墜鍔ㄨ緭鍏ユ暟鎹�
-     *
-     * @param models
-     * @return
-     */
-    int saveEnergyConsumeInputList(List<SaveEnergyConsumeInputEntity> models);
-
-    /**
-     * 鏌ヨ瑕侀噸绠楃殑indexId鍒楄〃
-     *
-     * @param indexIds
-     * @return
-     */
-    List<EnergyConsumeInput> queryReCalcIndexIdByIds(List<String> indexIds);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/service/IEnergyConsumeInputService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/service/IEnergyConsumeInputService.java
deleted file mode 100644
index 33894c8..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/service/IEnergyConsumeInputService.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.dingzhuo.energy.project.energyConsumeInput.service;
-
-
-import com.dingzhuo.energy.project.energyBalance.domain.EnergyPic;
-import com.dingzhuo.energy.project.energyConsumeInput.domain.EnergyConsumeInput;
-import com.dingzhuo.energy.project.energyConsumeInput.domain.SaveEnergyConsumeInputEntity;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 鑳芥祦鍒嗘瀽Service鎺ュ彛
- *
- * @author zhaow
- * @date 2020-12-26
- */
-public interface IEnergyConsumeInputService {
-    /**
-     * 鏌ヨ  鑳借�楁墜鍔ㄥ綍鍏� 鏁版嵁鍒楄〃
-     *
-     * @return 鑳借�楁墜鍔ㄥ綍鍏�    鍔熻兘闆嗗悎
-     */
-    public List<EnergyConsumeInput> selectEnergyConsumeInputList(String nodeId, String timeCode, String timeType);
-
-    /**
-     * 鏍规嵁鏃ユ湡鍜屾寚鏍噄d鍒犻櫎鏁版嵁
-     *
-     * @param indexIds 鎸囨爣id鍒楄〃
-     * @param timeCode 鏈堜唤鍊�
-     * @return
-     */
-    public int deleteEnergyConsumeInputByIds(List<String> indexIds, String timeCode);
-
-    /**
-     * 淇濆瓨鑳借�楁墜鍔ㄨ緭鍏ユ暟鎹�
-     *
-     * @param models
-     * @return
-     */
-    public int saveEnergyConsumeInputList(List<SaveEnergyConsumeInputEntity> models);
-
-    /**
-     * 閲嶇畻鐩稿叧鎸囨爣
-     * @param indexIds
-     * @param timeType
-     * @param authorization
-     * @param dataTime
-     * @return
-     */
-    public boolean reCalcIndexIdByIds(List<String> indexIds, String timeType, String authorization, Date dataTime);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/service/impl/EnergyConsumeInputServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/service/impl/EnergyConsumeInputServiceImpl.java
deleted file mode 100644
index fc0a59e..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyConsumeInput/service/impl/EnergyConsumeInputServiceImpl.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package com.dingzhuo.energy.project.energyConsumeInput.service.impl;
-
-import com.alibaba.fastjson.JSON;
-import com.dingzhuo.energy.project.common.*;
-import com.dingzhuo.energy.project.energyBalance.domain.EnergyPic;
-import com.dingzhuo.energy.project.energyConsumeInput.domain.EnergyConsumeInput;
-import com.dingzhuo.energy.project.energyConsumeInput.domain.ReCalcParamsModel;
-import com.dingzhuo.energy.project.energyConsumeInput.domain.ReCalcRespModel;
-import com.dingzhuo.energy.project.energyConsumeInput.domain.SaveEnergyConsumeInputEntity;
-import com.dingzhuo.energy.project.energyConsumeInput.mapper.EnergyConsumeInputMapper;
-import com.dingzhuo.energy.project.energyConsumeInput.service.IEnergyConsumeInputService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-/**
- * 宸ュ簭鍗曡�楃粺璁″姛鑳絊ervice涓氬姟灞傚鐞�
- *
- * @author zhaow
- * @date 2020-12-26
- */
-@Service
-public class EnergyConsumeInputServiceImpl implements IEnergyConsumeInputService {
-    @Autowired
-    private EnergyConsumeInputMapper energyConsumeInputMapper;
-
-    /**
-     * 鏌ヨ  鑳借�楁墜鍔ㄥ綍鍏� 鏁版嵁鍒楄〃
-     *
-     * @return 鑳借�楁墜鍔ㄥ綍鍏�    鍔熻兘闆嗗悎
-     */
-    @Override
-    public List<EnergyConsumeInput> selectEnergyConsumeInputList(String nodeId, String timeCode, String timeType) {
-        List<EnergyConsumeInput> resList = energyConsumeInputMapper.selectEnergyConsumeInputList(nodeId, timeCode, timeType);
-        return resList;
-    }
-
-    /**
-     * 鏍规嵁鏃ユ湡鍜屾寚鏍噄d鍒犻櫎鏁版嵁
-     *
-     * @param indexIds 鎸囨爣id鍒楄〃
-     * @param timeCode 鏈堜唤鍊�
-     * @return
-     */
-    @Override
-    public int deleteEnergyConsumeInputByIds(List<String> indexIds, String timeCode) {
-        return energyConsumeInputMapper.deleteEnergyConsumeInputByIds(indexIds, timeCode);
-    }
-
-    /**
-     * 淇濆瓨鑳借�楁墜鍔ㄨ緭鍏ユ暟鎹�
-     *
-     * @param models
-     * @return
-     */
-    @Override
-    public int saveEnergyConsumeInputList(List<SaveEnergyConsumeInputEntity> models) {
-        return energyConsumeInputMapper.saveEnergyConsumeInputList(models);
-    }
-
-    /**
-     * 閲嶇畻鐩稿叧鎸囨爣
-     *
-     * @param indexIds
-     * @param timeType
-     * @param authorization
-     * @param dataTime
-     * @return
-     */
-    @Override
-    public boolean reCalcIndexIdByIds(List<String> indexIds, String timeType, String authorization, Date dataTime) {
-        boolean mark = false;
-        List<EnergyConsumeInput> energyConsumeInputs = energyConsumeInputMapper.queryReCalcIndexIdByIds(indexIds);
-        List<String> indexIdList = energyConsumeInputs.stream().map(EnergyConsumeInput::getIndexId).collect(Collectors.toList());
-        if (!indexIdList.isEmpty()) {
-            List<ReCalcParamsModel> reCalcParamsModels = new ArrayList<>();
-            for (String indexId : indexIdList) {
-                ReCalcParamsModel t1 = new ReCalcParamsModel();
-                t1.setIndexId(indexId);
-                t1.setDataTime(DateTimeUtil.toString(dataTime));
-                t1.setTimeType(timeType);
-                reCalcParamsModels.add(t1);
-            }
-            String json = StringUtil.toJson(reCalcParamsModels);
-            String result = HttpClientUtil.doGet(CommonConst.RE_CALC_INTERFACE_ADDRESS, json, authorization);
-            if (!StringUtil.isEmptyOrNull(result)) {
-                ReCalcRespModel respModel = JSON.parseObject(result, ReCalcRespModel.class);
-                if (respModel != null && respModel.getCode() == 200) {
-                    mark = true;
-                }
-            }
-        }
-
-        return mark;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyShareAnalysis/controller/EnergyShareAnalysisController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyShareAnalysis/controller/EnergyShareAnalysisController.java
deleted file mode 100644
index c821d1c..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyShareAnalysis/controller/EnergyShareAnalysisController.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.dingzhuo.energy.project.energyShareAnalysis.controller;
-
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.energyShareAnalysis.domain.dto.EnergyAnalysisDTO;
-import com.dingzhuo.energy.project.energyShareAnalysis.domain.vo.EnergyAnalysisVO;
-import com.dingzhuo.energy.project.energyShareAnalysis.service.IEnergyShareAnalysisService;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
-
-
-/**
- * 鑳借�楀崰姣斿垎鏋� 鎺у埗灞�
- */
-@RestController
-@RequestMapping("/energyShareAnalysis")
-public class EnergyShareAnalysisController extends BaseController {
-
-    @Autowired
-    private IEnergyShareAnalysisService analysisService;
-
-
-    @GetMapping("/getElectricityShareAnalysis")
-    @ApiOperation(value = "鑾峰彇鐢靛崰姣旂粺璁′俊鎭�", notes = "鑾峰彇鐢靛崰姣旂粺璁′俊鎭�")
-    public AjaxResult listElectricityShareAnalysis(@Validated EnergyAnalysisDTO dto) {
-
-        List<EnergyAnalysisVO> yoyList = analysisService.listEnergyShareAnalysis(dto);
-        return AjaxResult.success(yoyList);
-    }
-
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyShareAnalysis/domain/dto/EnergyAnalysisDTO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyShareAnalysis/domain/dto/EnergyAnalysisDTO.java
deleted file mode 100644
index 3bac957..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyShareAnalysis/domain/dto/EnergyAnalysisDTO.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.dingzhuo.energy.project.energyShareAnalysis.domain.dto;
-
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Data;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.util.Date;
-
-/**
- * 鑳芥簮鏁版嵁鍒嗘瀽 璇锋眰鍙傛暟
- */
-@Data
-public class EnergyAnalysisDTO {
-
-
-    /**
-     * 缁熻寮�濮嬫椂闂�
-     */
-    @NotNull(message = "璇风淮鎶ゆ煡璇㈡椂闂�")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date beginTime;
-
-    /**
-     * 缁熻寮�濮嬫椂闂�
-     */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @NotNull(message = "璇风淮鎶ゆ煡璇㈡椂闂�")
-    private Date endTime;
-
-    /**
-     * 鏃堕棿绫诲瀷
-     */
-    @NotBlank(message = "鏈壘鍒版椂闂寸被鍨�")
-    private String timeType;
-
-    /**
-     * 妯″瀷鑺傜偣缂栧彿
-     */
-    @NotBlank(message = "鏈壘鍒版ā鍨嬭妭鐐圭紪鍙蜂俊鎭�")
-    private String modelCode;
-
-    /**
-     * 鑳芥簮绫诲瀷
-     */
-    @NotBlank(message = "璇风淮鎶よ兘婧愮被鍨�")
-    private String energyType;
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyShareAnalysis/domain/vo/EnergyAnalysisVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyShareAnalysis/domain/vo/EnergyAnalysisVO.java
deleted file mode 100644
index 4051364..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyShareAnalysis/domain/vo/EnergyAnalysisVO.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.dingzhuo.energy.project.energyShareAnalysis.domain.vo;
-
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-/**
- * 鑳芥簮鏁版嵁鍗犳瘮鍒嗘瀽 杩斿洖vo
- */
-@Data
-public class EnergyAnalysisVO {
-
-
-    /**
-     * 鐢ㄨ兘鍗曞厓鍚嶇О
-     */
-    private String energyUnitName;
-
-    /**
-     * 鏈湡鍊�
-     */
-    private BigDecimal value;
-
-    /**
-     * 鍗犳瘮鍊�
-     */
-    private BigDecimal ratio;
-
-    /**
-     * 鍚堣鍊�
-     */
-    private BigDecimal sumValue;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyShareAnalysis/service/IEnergyShareAnalysisService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyShareAnalysis/service/IEnergyShareAnalysisService.java
deleted file mode 100644
index c3cf00d..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyShareAnalysis/service/IEnergyShareAnalysisService.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.dingzhuo.energy.project.energyShareAnalysis.service;
-
-import com.dingzhuo.energy.project.energyShareAnalysis.domain.dto.EnergyAnalysisDTO;
-import com.dingzhuo.energy.project.energyShareAnalysis.domain.vo.EnergyAnalysisVO;
-
-import java.util.List;
-
-/**
- * 鑳借�楀崰姣斿垎鏋�  鎺ュ彛灞�
- */
-public interface IEnergyShareAnalysisService {
-
-    /**
-     * 鑾峰彇鐢靛崰姣旂粺璁′俊鎭�
-     *
-     * @param dto 鏌ヨ鍙傛暟
-     * @return 缁撴灉
-     */
-    List<EnergyAnalysisVO> listEnergyShareAnalysis(EnergyAnalysisDTO dto);
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyShareAnalysis/service/impl/EnergyShareAnalysisServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyShareAnalysis/service/impl/EnergyShareAnalysisServiceImpl.java
deleted file mode 100644
index fb09460..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyShareAnalysis/service/impl/EnergyShareAnalysisServiceImpl.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package com.dingzhuo.energy.project.energyShareAnalysis.service.impl;
-
-import cn.hutool.core.date.DateUtil;
-import com.dingzhuo.energy.data.model.domain.vo.ModelNodeIndexInfor;
-import com.dingzhuo.energy.data.model.service.IEnergyIndexService;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.project.common.CommonConst;
-import com.dingzhuo.energy.project.common.TimeTypeConst;
-import com.dingzhuo.energy.project.dataEntry.service.IDataItemService;
-import com.dingzhuo.energy.project.energyShareAnalysis.domain.dto.EnergyAnalysisDTO;
-import com.dingzhuo.energy.project.energyShareAnalysis.domain.vo.EnergyAnalysisVO;
-import com.dingzhuo.energy.project.energyShareAnalysis.service.IEnergyShareAnalysisService;
-import com.google.common.collect.Lists;
-import lombok.AllArgsConstructor;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.*;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.stream.Collectors;
-
-/**
- * 鑳借�楀崰姣斿垎鏋�  鎺ュ彛灞傚疄鐜板眰
- */
-@Service
-@AllArgsConstructor
-public class EnergyShareAnalysisServiceImpl implements IEnergyShareAnalysisService {
-
-
-    private final IDataItemService dataItemService;
-
-    private final IModelNodeService modelNodeService;
-
-    private final IEnergyIndexService energyIndexService;
-
-
-    /**
-     * 鑾峰彇鐢靛崰姣旂粺璁′俊鎭�
-     *
-     * @param dto 鏌ヨ鍙傛暟
-     * @return 缁撴灉
-     */
-    @Override
-    public List<EnergyAnalysisVO> listEnergyShareAnalysis(EnergyAnalysisDTO dto) {
-
-        List<ModelNodeIndexInfor> nodeInforList = modelNodeService.getModelNodeIndexIdRelationInforByCode(dto.getModelCode());
-        if (CollectionUtils.isEmpty(nodeInforList)) {
-            return new ArrayList<>();
-        }
-
-        List<String> indexIds = nodeInforList.stream()
-                .map(ModelNodeIndexInfor::getIndexId)
-                .filter(StringUtils::isNotBlank)
-                .collect(Collectors.toList());
-        // 鎸夌収鐐逛綅杩涜鍒嗙粍
-        Map<String, List<ModelNodeIndexInfor>> nodeIndexMap = nodeInforList.stream().collect(
-                Collectors.groupingBy(ModelNodeIndexInfor::getName));
-        // 鑾峰彇鏌ヨ鏃堕棿
-        Date beginTime = dto.getBeginTime();
-        Date endTime = dto.getEndTime();
-        if (!TimeTypeConst.TIME_TYPE_HOUR.equals(dto.getTimeType())) {
-            endTime = DateUtil.endOfDay(endTime);
-        }
-        // 鏌ヨ瀵瑰簲indexIds锛屾壘鍒板搴攄ataItem淇℃伅
-        List<DataItem> dataItemList = dataItemService.getDataItemHourInforByIndexIds(beginTime, endTime, TimeTypeConst.TIME_TYPE_HOUR, indexIds);
-        // 姹傛�诲拰
-        BigDecimal sum = BigDecimal.valueOf(dataItemList.stream().mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-        AtomicReference<BigDecimal> sumValue = new AtomicReference<>(sum);
-        if ("electric".equals(dto.getEnergyType())) {
-            List<String> sumIndexIds = Lists.newArrayList("e632a819-7115-483c-9215-b562ccfa8437", "3df75c95-d179-4e58-985d-637b94554d70");
-            List<DataItem> sumDataItem = dataItemService.getDataItemHourInforByIndexIds(beginTime, endTime, TimeTypeConst.TIME_TYPE_HOUR, sumIndexIds);
-            sumValue.set(BigDecimal.valueOf(sumDataItem.stream().mapToDouble(DataItem::getValue).sum()));
-        }
-        // 濡傛灉鏄按鐨�7001鐨勮瘽 闇�瑕佹湁涓叾浠栫殑鍗犳瘮
-        if ("WaterShareAnalysis_1".equals(dto.getModelCode())) {
-            List<String> sumIndexIds = Lists.newArrayList("07d6b073-f8d7-4e4b-b8fb-a899c64d245c");
-            List<DataItem> sumDataItem = dataItemService.getDataItemHourInforByIndexIds(beginTime, endTime, TimeTypeConst.TIME_TYPE_HOUR, sumIndexIds);
-            sumValue.set(BigDecimal.valueOf(sumDataItem.stream().mapToDouble(DataItem::getValue).sum()));
-        }
-
-        //  鍊嶇巼
-        BigDecimal multiple = BigDecimal.valueOf(CommonConst.DIGIT_100);
-        AtomicReference<BigDecimal> totalRatio = new AtomicReference<>(BigDecimal.ZERO);
-        AtomicReference<BigDecimal> totalValue = new AtomicReference<>(BigDecimal.ZERO);
-
-        List<EnergyAnalysisVO> analysisVOList = new ArrayList<>();
-        nodeIndexMap.forEach((key, value) -> {
-            EnergyAnalysisVO analysisVO = new EnergyAnalysisVO();
-
-            BigDecimal valueTotal = sumValue.get();
-
-            analysisVO.setSumValue(valueTotal);
-            analysisVO.setEnergyUnitName(key);
-
-            List<String> nodeIndexIds = value.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-            BigDecimal currentValue = BigDecimal.valueOf(dataItemList.stream()
-                            .filter(li -> nodeIndexIds.contains(li.getIndexId()))
-                            .mapToDouble(DataItem::getValue).sum())
-                    .setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-
-            analysisVO.setValue(currentValue);
-            //  鍚屾瘮鍊�
-            BigDecimal ratio = BigDecimal.ZERO;
-            if (valueTotal.compareTo(BigDecimal.ZERO) != 0) {
-                ratio = currentValue.divide(valueTotal, CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-            }
-            // 瓒呰繃1鍒欑敤1鍓帀
-            if (totalRatio.get().add(ratio).compareTo(BigDecimal.ONE) > 0) {
-                ratio = BigDecimal.ONE.subtract(totalRatio.get());
-            }
-
-            analysisVO.setRatio(ratio.multiply(multiple));
-            analysisVOList.add(analysisVO);
-            totalValue.set(totalValue.get().add(currentValue));
-            totalRatio.set(totalRatio.get().add(ratio));
-        });
-
-        if ("WaterShareAnalysis_1".equals(dto.getModelCode())) {
-            BigDecimal valueTotal = sumValue.get();
-            EnergyAnalysisVO analysisVO = new EnergyAnalysisVO();
-            analysisVO.setEnergyUnitName("鍏朵粬");
-            analysisVO.setValue(valueTotal.subtract(totalValue.get()));
-            analysisVO.setRatio(BigDecimal.ONE.subtract(totalRatio.get()).multiply(multiple));
-            analysisVO.setSumValue(valueTotal);
-
-            analysisVOList.add(analysisVO);
-        }
-
-        // 鍗犳瘮鎺掑簭
-        return analysisVOList.stream().sorted(Comparator.comparing(EnergyAnalysisVO::getRatio).reversed()).collect(Collectors.toList());
-    }
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/controller/energyAnalysisController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/controller/energyAnalysisController.java
deleted file mode 100644
index 31d1d3d..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/controller/energyAnalysisController.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.dingzhuo.energy.project.energyStatistics.controller;
-
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.dataservice.service.PeriodDataService;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.energyStatistics.domain.energyAnalysis;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.stream.Collectors;
-
-/**
- * electricityPriceController
- *
- * @author sys
- * @date 2020-02-18
- */
-@RestController
-@RequestMapping("/energyAnalysis")
-public class energyAnalysisController extends BaseController {
-
-    @Autowired
-    private PeriodDataService periodDataService;
-    @Autowired
-    private IModelNodeService modelNodeService;
-    @Autowired
-    private com.dingzhuo.energy.project.energyStatistics.service.IEnergyStatisticsService IEnergyStatisticsService;
-
-    @GetMapping("/getEnergyAnalysis")
-    public AjaxResult getEnergyAnalysis(DataItem dataItem) {
-        try {
-            List<EnergyIndex> list = modelNodeService.getSettingIndex(dataItem.getIndexCode());
-            List<String> indexCode = list.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-            List<DataItem> result = periodDataService.getDatasByIndex(indexCode, dataItem.getBeginTime(), dataItem.getEndTime(), dataItem.getTimeType());
-            Map<String, List<DataItem>> groupBy = result.stream().collect(Collectors.groupingBy(DataItem::getIndexCode));
-            energyAnalysis tableData =new energyAnalysis();
-            List<energyAnalysis> tableDataMaps = new ArrayList<>();
-            List<Map> energyHeadList = new ArrayList<Map>();
-            AtomicInteger colcount= new AtomicInteger(1);//琛ㄦ牸鍒楃殑鏁伴噺
-            /*groupBy.forEach((IndexName,value)->{
-                Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
-                Map table =new HashMap<>();//琛ㄦ暟鎹�
-                for(DataItem re:value){
-                    energyAnalysis energyHead = new energyAnalysis();
-                    energyHead.setDataTime(re.getDataTime());
-                    energyHead.setValue(re.getValue());
-                    energyHead.setProp("col"+ colcount);
-                    tableDataMaps.add(energyHead);
-                }
-                colcount.getAndIncrement();
-                tableColumn.put("IndexName",IndexName);
-                tableColumn.put("prop",IndexName);
-                energyHeadList.add(tableColumn);
-                tableData.setAnalysisTableHead(energyHeadList);
-                tableData.setAnalysisTableDate(tableDataMaps);
-            });*/
-            return AjaxResult.success(result);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍑洪敊!");
-        }
-    }
-    @Log(title = "鑳借�楃粺璁″垎鏋�", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(DataItem dataItem) { {
-        List<EnergyIndex> indexCodeList = modelNodeService.getSettingIndex(dataItem.getIndexCode());
-        List<String> indexCode = indexCodeList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        List<DataItem> list = periodDataService.getDatasByIndex(indexCode, dataItem.getBeginTime(), dataItem.getEndTime(), dataItem.getTimeType());
-        ExcelUtil<DataItem> util = new ExcelUtil<DataItem>(DataItem.class);
-        return util.exportExcel(list, "exportEnergyAnalysis");
-    }
-}}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/controller/energyStatisticsController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/controller/energyStatisticsController.java
deleted file mode 100644
index 396a6b5..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/controller/energyStatisticsController.java
+++ /dev/null
@@ -1,280 +0,0 @@
-package com.dingzhuo.energy.project.energyStatistics.controller;
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.project.energyStatistics.domain.dataTimeSVG;
-import com.dingzhuo.energy.project.energyStatistics.domain.energyTable;
-import com.dingzhuo.energy.project.energyStatistics.domain.EnergyConsumption;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.dataservice.domain.StatisticResult;
-import com.dingzhuo.energy.dataservice.service.PeriodDataService;
-import com.dingzhuo.energy.project.energyStatistics.service.IEnergyStatisticsService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-/**
- * 鑳芥簮缁熻鍒嗘瀽Controller
- *
- * @author ruoyi
- * @date 2020-02-07
- */
-@RestController
-@RequestMapping("/energyStatistics")
-public class energyStatisticsController extends BaseController {
-  @Autowired
-  private PeriodDataService periodDataService;
-  @Autowired
-  private IEnergyStatisticsService IEnergyStatisticsService;
-  @Autowired
-  private IModelNodeService modelNodeService;
-  /**
-   * 瀵煎嚭鑳芥簮鎸囨爣瓒嬪娍鍒嗘瀽鍒楄〃
-   */
-  @PreAuthorize("@ss.hasPermi('energyStatistics:energyStatisticsTrend:export')")
-  @Log(title = "鑳借�楁寚鏍囪秼鍔垮垎鏋�", businessType = BusinessType.EXPORT)
-  @GetMapping("/export")
-  public AjaxResult export(DataItem dataItem) {
-    List<StatisticResult> list = periodDataService.statisticById(dataItem.getIndexId(), dataItem.getTimeType(), dataItem.getBeginTime(),dataItem.getEndTime());
-    ExcelUtil<StatisticResult> util = new ExcelUtil<StatisticResult>(StatisticResult.class);
-    return util.exportExcel(list, "set");
-  }
-  /**
-   * 鑳芥簮鎸囨爣瓒嬪娍鍒嗘瀽
-   */
-  @GetMapping("/getEnergyStatisticsTrend")
-  public TableDataInfo getEnergyStatisticsTrend(DataItem dataItem) {
-    startPage();
-    List<StatisticResult> list = periodDataService.statisticById(dataItem.getIndexId(), dataItem.getTimeType(), dataItem.getBeginTime(),dataItem.getEndTime());
-    return getDataTable(list);
-  }
-  /**
-   * 鑳芥簮娑堣垂鎴愭湰鏋勬垚
-   */
-  @GetMapping("/getEnergyConstitute")
-  public AjaxResult getEnergyConstitute(DataItem dataItem) {
-    try {
-      /*List<String> indexCodes = new ArrayList<String>();
-      String[] indexCode =dataItem.getIndexCode().split(",");
-      for(int i =0; i <indexCode.length ; i++){
-        indexCodes.add(indexCode[i]);
-      }*/
-      List<String> indexCodeXFL = new ArrayList<String>();
-      List<String> indexCodeXFCB = new ArrayList<String>();
-      List<String> indexCodeZBL = new ArrayList<String>();
-      List<EnergyIndex> energyIndexList = modelNodeService.getSettingIndex(dataItem.getIndexCode());
-      energyIndexList.forEach(param ->{
-        if (param.getCode().contains("XFL_")){
-          indexCodeXFL.add(param.getCode());
-        }else if(param.getCode().contains("XFCB_")){
-          indexCodeXFCB.add(param.getCode());
-        }else{
-          indexCodeZBL.add(param.getCode());
-        }
-      });
-      energyTable tableData =new energyTable();
-      //娑堣垂閲�
-      List<DataItem> listXFL= IEnergyStatisticsService.statisticByCode(indexCodeXFL,dataItem.getTimeType(),dataItem.getBeginTime(),dataItem.getEndTime());
-      //鎶樻爣
-      List<DataItem> listZBL= IEnergyStatisticsService.statisticByCode(indexCodeZBL,dataItem.getTimeType(),dataItem.getBeginTime(),dataItem.getEndTime());
-      //娑堣垂鎴愭湰
-      List<DataItem> listXFCB= IEnergyStatisticsService.statisticByCode(indexCodeXFCB,dataItem.getTimeType(),dataItem.getBeginTime(),dataItem.getEndTime());
-
-      tableData.setListXFL(listXFL);
-      tableData.setListZBL(listZBL);
-      tableData.setListXFCB(listXFCB);
-      return AjaxResult.success(tableData);
-    } catch (Exception ex) {
-      logger.error("鑾峰彇鍑洪敊锛�", ex);
-      return AjaxResult.error("鑾峰彇鍑洪敊!");
-    }
-  }
-  /**
-   * 鑳芥簮娑堣垂鎴愭湰鍒嗘瀽
-   */
-  @GetMapping("/getEnergyConsumption")
-  public AjaxResult getEnergyConsumption(DataItem dataItem) {
-    try {
-      /*TimeType timeType=TimeType.MONTH;
-      if( dataItem.getTimeType().name().equals("YEAR")){
-        timeType=TimeType.YEAR;
-      }else if(dataItem.getTimeType().name().equals("MONTH")){
-        timeType=TimeType.MONTH;
-      }if(dataItem.getTimeType().name().equals("DAY")){
-        timeType=TimeType.DAY;
-      }*/
-      String[] indexCode =dataItem.getIndexName().split(",");
-      List<String> indexCodeXFCB = new ArrayList<String>();
-      List<String> indexCodeZBL = new ArrayList<String>();
-      for(int i =0; i <indexCode.length ; i++){
-        if (indexCode[i].contains("ZBL_")){
-          indexCodeZBL.add(indexCode[i]);
-        }else if(indexCode[i].contains("XFCB_")){
-          indexCodeXFCB.add(indexCode[i]);
-        }
-      }
-      energyTable tableData =new energyTable();
-      //鎶樻爣瀵规瘮
-      List<StatisticResult> resultListZBL= periodDataService.statisticByCode(indexCodeZBL,dataItem.getTimeType(),dataItem.getBeginTime(),dataItem.getEndTime());
-      resultListZBL.forEach(statisticResult -> statisticResult.setFormatdate("yyyy-MM-dd"));
-      Map<String, List<StatisticResult>> groupByZBL = resultListZBL.stream().collect(Collectors.groupingBy(StatisticResult::getIndexName));
-      List<Map> tableZBL = new ArrayList<Map>();
-      List<Map> mListZBL = new ArrayList<Map>();
-      groupByZBL.forEach((indexName,value)->{
-        Map tableColumn =new HashMap<>();
-        tableColumn.put("indexName",indexName);
-        tableZBL.add(tableColumn);
-        tableData.setResultZBL(tableZBL);
-        Map table =new HashMap<>();
-        List currentList = new ArrayList<>();
-        List lastYearList = new ArrayList<>();
-        for(StatisticResult result:value){
-          currentList.add(new BigDecimal(result.getCurrentValue()).setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue());
-          lastYearList.add(new BigDecimal(result.getLastYearValue()).setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue());
-        }
-        tableColumn.put("currentValue",currentList);
-        tableColumn.put("lastYearValue",lastYearList);
-        mListZBL.add(tableColumn);
-      });
-      //娑堣垂鎴愭湰瀵规瘮
-      List<StatisticResult> resultListXFCB= periodDataService.statisticByCode(indexCodeXFCB,dataItem.getTimeType(),dataItem.getBeginTime(),dataItem.getEndTime());
-      resultListXFCB.forEach(statisticResult -> statisticResult.setFormatdate("yyyy-MM-dd"));
-      Map<String, List<StatisticResult>> groupByXFCB = resultListXFCB.stream().collect(Collectors.groupingBy(StatisticResult::getIndexName));
-      List<Map> tableXFCB = new ArrayList<Map>();
-      List<Map> mListXFCB = new ArrayList<Map>();
-      groupByXFCB.forEach((indexName,value)->{
-        Map tableColumn =new HashMap<>();
-        tableColumn.put("indexName",indexName);
-        tableXFCB.add(tableColumn);
-        tableData.setResultXFCB(tableXFCB);
-        Map table =new HashMap<>();
-        List currentList = new ArrayList<>();
-        List lastYearList = new ArrayList<>();
-        for(StatisticResult result:value){
-          currentList.add(new BigDecimal(result.getCurrentValue()).setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue());
-          lastYearList.add(new BigDecimal(result.getLastYearValue()).setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue());
-        }
-        tableColumn.put("currentValue",currentList);
-        tableColumn.put("lastYearValue",lastYearList);
-        mListXFCB.add(tableColumn);
-      });
-      tableData.setResultListZBL(mListZBL);
-      tableData.setResultListXFCB(mListXFCB);
-      return AjaxResult.success(tableData);
-    } catch (Exception ex) {
-      logger.error("鑾峰彇鍑洪敊锛�", ex);
-      return AjaxResult.error("鑾峰彇鍑洪敊!");
-    }
-  }
-  /**
-   * 鑳芥簮娑堣垂鎴愭湰鍒嗘椂鍒嗘瀽鎶ヨ〃
-   */
-  @GetMapping("/listEnergyConsumption")
-  public AjaxResult listEnergyConsumption(DataItem dataItem){
-    List<String> indexCodes = new ArrayList<String>();
-    String[] indexCode =dataItem.getIndexCode().split(",");
-    for(int i =0; i <indexCode.length ; i++){
-      indexCodes.add(indexCode[i]);
-    }
-    List<StatisticResult> list= periodDataService.statisticByCode(indexCodes,dataItem.getTimeType(),dataItem.getBeginTime(),dataItem.getEndTime());
-    list.forEach(statisticResult -> statisticResult.setFormatdate("yyyy-MM-dd"));
-    List<EnergyConsumption> energyHeadList = new ArrayList<>();
-    energyTable tableData =new energyTable();
-    List<Map> tableDataMaps = new ArrayList<Map>();
-    Map<String, List<StatisticResult>> groupBy = list.stream().collect(Collectors.groupingBy(StatisticResult::getFormatdate));
-    groupBy.forEach((time,value)->{
-      int propcount=0;//琛ㄦ牸prop鐨勬暟閲�
-      int colcount=0;//琛ㄦ牸鍒楃殑鏁伴噺
-      Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
-      for(StatisticResult result:value){
-        EnergyConsumption energyHead = new EnergyConsumption();//涓�绾ц〃澶�
-        energyHead.setLable(result.getIndexName());
-        EnergyConsumption energyChildNode1 = new EnergyConsumption();//浜岀骇琛ㄥご鐨勭涓�鍒�
-        energyChildNode1.setProp("col"+colcount);
-        energyChildNode1.setLable("鑰楅噺("+result.getUnitId()+")");
-        tableColumn.put("col"+colcount,result.getMaxValue());
-        EnergyConsumption energyChildNode2 = new EnergyConsumption();//浜岀骇琛ㄥご鐨勭涓�鍒�
-        colcount++;
-        energyChildNode2.setProp("col"+colcount);
-        energyChildNode2.setLable("鎴愭湰(涓囧厓)");
-        tableColumn.put("col"+colcount,result.getMinValue());
-        colcount++;
-        energyHead.addChildNode(energyChildNode1);
-        energyHead.addChildNode(energyChildNode2);
-        energyHeadList.add(energyHead);
-        propcount++;
-      }
-      tableColumn.put("dateTims",time);
-      tableDataMaps.add(tableColumn);
-      tableData.setTabledataMap(tableDataMaps);
-      tableData.setTablehead(energyHeadList);
-    });
-    return AjaxResult.success(tableData);
-  }
-  @Log(title = "鑳芥簮娑堣垂鎴愭湰鍒嗘椂鍒嗘瀽鎶ヨ〃", businessType = BusinessType.EXPORT)
-  @GetMapping("/energyConsumptionExport")
-  public AjaxResult energyConsumptionExport(DataItem dataItem){
-    List<String> indexCodes = new ArrayList<String>();
-    String[] indexCode =dataItem.getIndexCode().split(",");
-    for(int i =0; i <indexCode.length ; i++){
-      indexCodes.add(indexCode[i]);
-    }
-    List<StatisticResult> list= periodDataService.statisticByCode(indexCodes,dataItem.getTimeType(),dataItem.getBeginTime(),dataItem.getEndTime());
-    ExcelUtil<StatisticResult> util = new ExcelUtil<StatisticResult>(StatisticResult.class);
-    return util.exportExcel(list, "set");
-  }
-  /*
-  鐢ㄨ兘鍗曞厓鑳借�楀垎鏋�
-   */
-  @GetMapping("/getEnergyUnit")
-  public AjaxResult getEnergyUnit(DataItem dataItem) {
-    try {
-      List<String> indexCode =  Collections.singletonList(dataItem.getIndexCode());
-      // List<StatisticResult> list= periodDataService.statisticByCode(dataItem.getIndexCode(),timeType, dataItem.getBeginTime(), dataItem.getEndTime());
-      List<StatisticResult> list= periodDataService.statisticByCode(indexCode,dataItem.getTimeType(),dataItem.getDataTime());
-      list.forEach(statisticResult -> statisticResult.setFormatdate("yyyy-MM-dd"));
-      return AjaxResult.success(list);
-    } catch (Exception ex) {
-      logger.error("鑾峰彇鍑洪敊锛�", ex);
-      return AjaxResult.error("鑾峰彇鍑洪敊!");
-    }
-  }
-  /*
-     瀹炴椂妫�娴嬪sheet椤靛睍绀虹粍鎬佸浘鎶ヨ〃
-   */
-  @GetMapping("/reportFormsvg")
-  public AjaxResult reportFormsvg(dataTimeSVG dataItem) {
-    List<dataTimeSVG> list= IEnergyStatisticsService.reportFormsvg(dataItem);
-    list.forEach(dataTimeSVG -> dataTimeSVG.setFormatdate("yyyy-MM-dd HH:mm:ss"));
-    Map<String, List<dataTimeSVG>> groupBy = list.stream().collect(Collectors.groupingBy(dataTimeSVG::getIndexName));
-    energyTable tableData =new energyTable();//琛ㄦ牸
-    List<Map> tablehead = new ArrayList<Map>();
-    groupBy.forEach((indexName,value)->{
-      tableData.setTabledata(value);
-      Map tableColumn =new HashMap<>();
-      tableColumn.put("indexName",indexName);
-      tablehead.add(tableColumn);
-      tableData.setTabledataMap(tablehead);
-    });
-    return AjaxResult.success(tableData);
-  }
-  /*
-    瀹炴椂妫�娴嬪sheet椤靛睍绀虹粍鎬佸浘鎶ヨ〃瀵煎嚭
-  */
-  @GetMapping("/reportFormsvgExport")
-  public AjaxResult reportFormsvgExport(dataTimeSVG dataItem) {
-    List<dataTimeSVG> list = IEnergyStatisticsService.reportFormsvg(dataItem);
-    ExcelUtil<dataTimeSVG> util = new ExcelUtil<dataTimeSVG>(dataTimeSVG.class);
-    return util.exportExcel(list, "set");
-  }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/controller/energyStatisticsCurveController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/controller/energyStatisticsCurveController.java
deleted file mode 100644
index 1464424..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/controller/energyStatisticsCurveController.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.dingzhuo.energy.project.energyStatistics.controller;
-
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.dataservice.domain.StatisticResult;
-import com.dingzhuo.energy.dataservice.service.PeriodDataService;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.energyStatistics.service.IEnergyStatisticsService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.Collections;
-import java.util.List;
-
-@RestController
-@RequestMapping("/energyCurve")
-public class energyStatisticsCurveController extends BaseController {
-
-    @Autowired
-    private PeriodDataService periodDataService;
-    @Autowired
-    private IEnergyStatisticsService IEnergyStatisticsService;
-    /**
-     * 瀵煎嚭鑳芥簮鎸囨爣瓒嬪娍鍒嗘瀽鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('energyCurve:energyCurveTrend:export')")
-    @Log(title = "鑳借�楁寚鏍囪秼鍔垮垎鏋�", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(DataItem dataItem) {
-        List<StatisticResult> list = periodDataService.statisticById(dataItem.getIndexId(), dataItem.getTimeType(), dataItem.getBeginTime(),dataItem.getEndTime());
-        ExcelUtil<StatisticResult> util = new ExcelUtil<StatisticResult>(StatisticResult.class);
-        return util.exportExcel(list, "set");
-    }
-
-    /**
-     * 鑳芥簮鎸囨爣瓒嬪娍鍒嗘瀽
-     */
-    @GetMapping("/getEnergyCurveTrend")
-    public TableDataInfo getEnergyCurveTrend(DataItem dataItem) {
-        startPage();
-        List<StatisticResult> list = periodDataService.statisticById(dataItem.getIndexId(), dataItem.getTimeType(), dataItem.getBeginTime(),dataItem.getEndTime());
-        return getDataTable(list);
-    }
-
-    /*
-鐢ㄨ兘鍗曞厓鑳借�楀垎鏋�
- */
-    @GetMapping("/getEnergyUnit")
-    public AjaxResult getEnergyUnit(DataItem dataItem) {
-        try {
-            List<String> indexCode =  Collections.singletonList(dataItem.getIndexCode());
-            // List<StatisticResult> list= periodDataService.statisticByCode(dataItem.getIndexCode(),timeType, dataItem.getBeginTime(), dataItem.getEndTime());
-            List<StatisticResult> list= periodDataService.statisticByCode(indexCode,dataItem.getTimeType(),dataItem.getDataTime());
-            list.forEach(statisticResult -> statisticResult.setFormatdate("yyyy-MM-dd"));
-            return AjaxResult.success(list);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍑洪敊!");
-        }
-    }
-   /* @GetMapping("/getEnergyConstitute")
-    public AjaxResult getEnergyConstitute(DataItem dataItem) {
-        energyTable tabledata =new energyTable();
-        List<dataTimeSVG> tabledatalist= IEnergyStatisticsService.statisticByCode(dataItem);
-        tabledata.setTabledata(tabledatalist);
-        return AjaxResult.success(tabledata);
-    }
-*/
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/domain/EnergyConsumption.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/domain/EnergyConsumption.java
deleted file mode 100644
index 375e35f..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/domain/EnergyConsumption.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.dingzhuo.energy.project.energyStatistics.domain;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-
-public class EnergyConsumption implements Serializable {
-  private static final long serialVersionUID = -2777479013884125925L;
-  private String lable;
-  private String prop;
-  private String maxValue;
-  private String minValue;
-  private String dataTime;
-  private List<EnergyConsumption> childNodes =new ArrayList<>();
-
-
-  public List<EnergyConsumption> getChildNodes() {
-    return childNodes;
-  }
-
-  public void setChildNodes(List<EnergyConsumption> childNodes) {
-    this.childNodes = childNodes;
-  }
-
-  public void addChildNode(EnergyConsumption childNode){
-    this.childNodes.add(childNode);
-  }
-
-  public String getLable() {
-    return lable;
-  }
-
-  public void setLable(String lable) {
-    this.lable = lable;
-  }
-
-  public String getProp() {
-    return prop;
-  }
-
-  public void setProp(String prop) {
-    this.prop = prop;
-  }
-
-  public String getMaxValue() {
-    return maxValue;
-  }
-
-  public void setMaxValue(String maxValue) {
-    this.maxValue = maxValue;
-  }
-
-  public String getMinValue() {
-    return minValue;
-  }
-
-  public void setMinValue(String minValue) {
-    this.minValue = minValue;
-  }
-
-  public String getDataTime() {
-    return dataTime;
-  }
-
-  public void setDataTime(String dataTime) {
-    this.dataTime = dataTime;
-  }
-
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/domain/dataTimeSVG.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/domain/dataTimeSVG.java
deleted file mode 100644
index eec623c..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/domain/dataTimeSVG.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package com.dingzhuo.energy.project.energyStatistics.domain;
-
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-
-import java.io.Serializable;
-import java.util.Date;
-
-
-public class dataTimeSVG implements Serializable {
-  private static final long serialVersionUID = -2777479013884125925L;
-  @Excel(name = "鎸囨爣id")
-  private String indexId;
-  @Excel(name = "鎸囨爣缂栫爜")
-  private String indexCode;
-  @Excel(name = "鎸囨爣鍚嶇О")
-  private String indexName;
-  @Excel(name = "寮�濮嬫椂闂�")
-  private Date beginTime;
-  @Excel(name = "缁撴潫鏃堕棿")
-  private Date endTime;
-  @Excel(name = "鏃堕棿")
-  private Date dataTime;
-  @Excel(name = "timeCode")
-  private String timeCode;
-  @Excel(name = "鏃堕棿绫诲瀷")
-  private TimeType timeType;
-  @Excel(name = "鎸囨爣鍊�")
-  private Double value;
-  @Excel(name = "鍗曚綅")
-  private String unitId;
-  @Excel(name = "澶囨敞")
-  private String remark;
-  @Excel(name = "璁¢噺鍣ㄥ叿id")
-  private String meterId;
-  //妯″瀷鑺傜偣涓婚敭id
-  private String nodeId;
-  private String indexType;
-  //鏃堕棿鏍煎紡鍖�
-  private String formatdate;
-  public String getFormatdate() {
-    return formatdate;
-  }
-  public void setFormatdate(String formatdate) {
-    this.formatdate = DateUtils.parseDateToStr(formatdate,this.dataTime);
-  }
-  /**
-   * SVG鏂囦欢鐨処D
-   */
-  private Integer svgId;
-
-  public String getIndexId() {
-    return indexId;
-  }
-
-  public void setIndexId(String indexId) {
-    this.indexId = indexId;
-  }
-
-  public String getIndexCode() {
-    return indexCode;
-  }
-
-  public void setIndexCode(String indexCode) {
-    this.indexCode = indexCode;
-  }
-
-  public String getIndexName() {
-    return indexName;
-  }
-
-  public void setIndexName(String indexName) {
-    this.indexName = indexName;
-  }
-
-  public Date getBeginTime() {
-    return beginTime;
-  }
-
-  public void setBeginTime(Date beginTime) {
-    this.beginTime = beginTime;
-  }
-
-  public Date getEndTime() {
-    return endTime;
-  }
-
-  public void setEndTime(Date endTime) {
-    this.endTime = endTime;
-  }
-
-  public Date getDataTime() {
-    return dataTime;
-  }
-
-  public void setDataTime(Date dataTime) {
-    this.dataTime = dataTime;
-  }
-
-  public String getTimeCode() {
-    return timeCode;
-  }
-
-  public void setTimeCode(String timeCode) {
-    this.timeCode = timeCode;
-  }
-
-  public TimeType getTimeType() {
-    return timeType;
-  }
-
-  public void setTimeType(TimeType timeType) {
-    this.timeType = timeType;
-  }
-
-  public Double getValue() {
-    return value;
-  }
-
-  public void setValue(Double value) {
-    this.value = value;
-  }
-
-  public String getMeterId() {
-    return meterId;
-  }
-
-  public void setMeterId(String meterId) { this.meterId = meterId; }
-
-  public Integer getSvgId() {
-    return svgId;
-  }
-
-  public void setSvgId(Integer svgId) {
-    this.svgId = svgId;
-  }
-
-  public String getRemark() {
-    return remark;
-  }
-
-  public void setRemark(String remark) {
-    this.remark = remark;
-  }
-
-  public String getNodeId() {
-    return nodeId;
-  }
-
-  public void setNodeId(String nodeId) {
-    this.nodeId = nodeId;
-  }
-
-  public String getIndexType() {
-    return indexType;
-  }
-
-  public void setIndexType(String indexType) {
-    this.indexType = indexType;
-  }
-
-  public String getUnitId() {
-    return unitId;
-  }
-  public void setUnitId(String unitId) {
-    this.unitId = unitId;
-  }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/domain/energyAnalysis.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/domain/energyAnalysis.java
deleted file mode 100644
index c77c823..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/domain/energyAnalysis.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.dingzhuo.energy.project.energyStatistics.domain;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-public class energyAnalysis implements Serializable {
-    private static final long serialVersionUID = -2777479013884125925L;
-    private String prop;
-    private Double value;
-    private Date dataTime;
-    private List<energyAnalysis> analysisTableDate = new ArrayList<>();
-    private List<Map> analysisTableHead = new ArrayList<Map>();
-    public String getProp() {
-        return prop;
-    }
-
-    public void setProp(String prop) {
-        this.prop = prop;
-    }
-
-    public Double getValue() {
-        return value;
-    }
-
-    public void setValue(Double value) {
-        this.value = value;
-    }
-    public Date getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(Date dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public List<energyAnalysis> getAnalysisTableDate() {
-        return analysisTableDate;
-    }
-
-    public void setAnalysisTableDate(List<energyAnalysis> analysisTableDate) {
-        this.analysisTableDate = analysisTableDate;
-    }
-
-    public List<Map> getAnalysisTableHead() {
-        return analysisTableHead;
-    }
-
-    public void setAnalysisTableHead(List<Map> analysisTableHead) {
-        this.analysisTableHead = analysisTableHead;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/domain/energyTable.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/domain/energyTable.java
deleted file mode 100644
index 9b52b19..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/domain/energyTable.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package com.dingzhuo.energy.project.energyStatistics.domain;
-
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.dataservice.domain.StatisticResult;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-
-public class energyTable implements Serializable {
-  private static final long serialVersionUID = -2777479013884125925L;
-  private List<EnergyConsumption> tablehead =new ArrayList<>();
-  private List<Map> tabledataMap = new ArrayList<Map>();
-  private List<dataTimeSVG> tabledata = new ArrayList<dataTimeSVG>();
-  private List<DataItem> listXFL=new ArrayList<DataItem>();//鑳芥簮娑堣垂鎴愭湰 娑堣垂閲�
-  private List<DataItem> listZBL=new ArrayList<DataItem>(); //鑳芥簮娑堣垂鎴愭湰 鎶樻爣閲�
-  private List<DataItem> listXFCB=new ArrayList<DataItem>(); //鑳芥簮娑堣垂鎴愭湰 娑堣垂鎴愭湰
-  private List<Map> resultListZBL=new ArrayList<>(); //鑳芥簮娑堣垂鎴愭湰 鎶樻爣瀵规瘮
-  private List<Map> resultListXFCB=new ArrayList<>(); //鑳芥簮娑堣垂鎴愭湰 娑堣垂鎴愭湰瀵规瘮
-  private List<Map> resultZBL = new ArrayList<Map>();
-  private List<Map> resultXFCB = new ArrayList<Map>();
-  public List<Map> getTabledataMap() {
-    return tabledataMap;
-  }
-  public void setTabledataMap(List<Map> tabledataMap) {
-    this.tabledataMap = tabledataMap;
-  }
-  public List<EnergyConsumption> getTablehead() {
-    return tablehead;
-  }
-  public void setTablehead(List<EnergyConsumption> tablehead) {
-    this.tablehead = tablehead;
-  }
-
-  public List<dataTimeSVG> getTabledata() {
-    return tabledata;
-  }
-
-  public void setTabledata(List<dataTimeSVG> tabledata) {
-    this.tabledata = tabledata;
-  }
-
-  public List<DataItem> getListXFL() {
-    return listXFL;
-  }
-
-  public void setListXFL(List<DataItem> listXFL) {
-    this.listXFL = listXFL;
-  }
-
-  public List<DataItem> getListZBL() {
-    return listZBL;
-  }
-
-  public void setListZBL(List<DataItem> listZBL) {
-    this.listZBL = listZBL;
-  }
-
-  public List<DataItem> getListXFCB() {
-    return listXFCB;
-  }
-
-  public void setListXFCB(List<DataItem> listXFCB) {
-    this.listXFCB = listXFCB;
-  }
-
-  public List<Map> getResultListZBL() {
-    return resultListZBL;
-  }
-
-  public void setResultListZBL(List<Map> resultListZBL) {
-    this.resultListZBL = resultListZBL;
-  }
-
-  public List<Map> getResultListXFCB() {
-    return resultListXFCB;
-  }
-
-  public void setResultListXFCB(List<Map> resultListXFCB) {
-    this.resultListXFCB = resultListXFCB;
-  }
-
-  public List<Map> getResultZBL() {
-    return resultZBL;
-  }
-
-  public void setResultZBL(List<Map> resultZBL) {
-    this.resultZBL = resultZBL;
-  }
-
-  public List<Map> getResultXFCB() {
-    return resultXFCB;
-  }
-
-  public void setResultXFCB(List<Map> resultXFCB) {
-    this.resultXFCB = resultXFCB;
-  }
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/mapper/energyStatisticsMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/mapper/energyStatisticsMapper.java
deleted file mode 100644
index 16f9260..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/mapper/energyStatisticsMapper.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.dingzhuo.energy.project.energyStatistics.mapper;
-
-import com.dingzhuo.energy.project.energyStatistics.domain.dataTimeSVG;
-
-import java.util.List;
-
-public interface energyStatisticsMapper {
-  List<dataTimeSVG> reportFormsvg(dataTimeSVG dataItem);
-  List<dataTimeSVG> selectDataTimelist(dataTimeSVG dataItem);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/service/IEnergyStatisticsService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/service/IEnergyStatisticsService.java
deleted file mode 100644
index b173a61..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/service/IEnergyStatisticsService.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.dingzhuo.energy.project.energyStatistics.service;
-
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.project.energyStatistics.domain.dataTimeSVG;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice鎺ュ彛
- *
- * @author ruoyi
- * @date 2020-02-07
- */
-public interface IEnergyStatisticsService {
-    public List<DataItem> statisticByCode(List<String> indexCodes, TimeType timeType, Date beginTime, Date endTime);
-    List<dataTimeSVG> reportFormsvg(dataTimeSVG dataItem);
-    List<dataTimeSVG> selectDataTimeList(dataTimeSVG dataItem);
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/service/impl/energyStatisticsServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/service/impl/energyStatisticsServiceImpl.java
deleted file mode 100644
index 0f30d67..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/energyStatistics/service/impl/energyStatisticsServiceImpl.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.dingzhuo.energy.project.energyStatistics.service.impl;
-
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.dataservice.mapper.PeriodDataMapper;
-import com.dingzhuo.energy.project.energyStatistics.domain.dataTimeSVG;
-import com.dingzhuo.energy.project.energyStatistics.mapper.energyStatisticsMapper;
-import com.dingzhuo.energy.project.energyStatistics.service.IEnergyStatisticsService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-/**
- * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞�
- *
- * @author ruoyi
- * @date 2020-02-07
- */
-@Service
-public class energyStatisticsServiceImpl implements IEnergyStatisticsService {
-    @Autowired
-    private energyStatisticsMapper energyStatisticsMapper;
-
-    @Autowired
-    private PeriodDataMapper PeriodDataMapper;
-
-    @Override
-    public List<DataItem> statisticByCode(List<String> indexCodes, TimeType timeType, Date beginTime, Date endTime) {
-        if (indexCodes == null || indexCodes.isEmpty()) {
-            return Collections.emptyList();
-        }
-        return PeriodDataMapper.statisticByCode(indexCodes, timeType, beginTime, endTime);
-    }
-    @Override
-    public List<dataTimeSVG> reportFormsvg(dataTimeSVG dataItem) {
-        String timeCode = TimeManager.getTimeCode(dataItem.getDataTime(), dataItem.getTimeType());
-        dataItem.setBeginTime(TimeManager.getBeginTime(timeCode));
-        dataItem.setEndTime(TimeManager.getEndTime(timeCode));
-        return energyStatisticsMapper.reportFormsvg(dataItem);
-    }
-    @Override
-    public List<dataTimeSVG> selectDataTimeList(dataTimeSVG dataItem) {
-        String timeCode = TimeManager.getTimeCode(dataItem.getDataTime(), dataItem.getTimeType());
-        dataItem.setBeginTime(TimeManager.getBeginTime(timeCode));
-        dataItem.setEndTime(TimeManager.getEndTime(timeCode));
-        return energyStatisticsMapper.reportFormsvg(dataItem);
-    }
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/controller/GatewayHbtLogController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/controller/GatewayHbtLogController.java
deleted file mode 100644
index ec9f804..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/controller/GatewayHbtLogController.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package com.dingzhuo.energy.project.gateway.controller;
-
-import com.dingzhuo.energy.common.core.lang.UUID;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.gateway.domain.GatewayHbtLog;
-import com.dingzhuo.energy.project.gateway.service.IGatewayHbtLogService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * 缃戝叧蹇冭烦鏃ュ織Controller
- *
- * @author zhw
- * @date 2022-04-15
- */
-@RestController
-@RequestMapping("/gateway/gatewaylog")
-public class GatewayHbtLogController extends BaseController
-{
-    @Autowired
-    private IGatewayHbtLogService gatewayHbtLogService;
-
-    /**
-     * 鏌ヨ缃戝叧蹇冭烦鏃ュ織鍒楄〃
-     */
-    @GetMapping("/list")
-    public TableDataInfo list(GatewayHbtLog gatewayHbtLog)
-    {
-        startPage();
-        List<GatewayHbtLog> list = gatewayHbtLogService.selectGatewayHbtLogList(gatewayHbtLog);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭缃戝叧蹇冭烦鏃ュ織鍒楄〃
-     */
-    @Log(title = "缃戝叧蹇冭烦鏃ュ織", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(GatewayHbtLog gatewayHbtLog)
-    {
-        List<GatewayHbtLog> list = gatewayHbtLogService.selectGatewayHbtLogList(gatewayHbtLog);
-        ExcelUtil<GatewayHbtLog> util = new ExcelUtil<GatewayHbtLog>(GatewayHbtLog.class);
-        return util.exportExcel(list, "gatewaylog");
-    }
-
-    /**
-     * 鑾峰彇缃戝叧蹇冭烦鏃ュ織璇︾粏淇℃伅
-     */
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(gatewayHbtLogService.selectGatewayHbtLogById(id));
-    }
-
-    /**
-     * 鏂板缃戝叧蹇冭烦鏃ュ織
-     */
-    @Log(title = "缃戝叧蹇冭烦鏃ュ織", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody GatewayHbtLog gatewayHbtLog)
-    {
-        gatewayHbtLog.setId(UUID.fastUUID().toString());
-        return toAjax(gatewayHbtLogService.insertGatewayHbtLog(gatewayHbtLog));
-    }
-
-    /**
-     * 淇敼缃戝叧蹇冭烦鏃ュ織
-     */
-    @Log(title = "缃戝叧蹇冭烦鏃ュ織", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody GatewayHbtLog gatewayHbtLog)
-    {
-        return toAjax(gatewayHbtLogService.updateGatewayHbtLog(gatewayHbtLog));
-    }
-
-    /**
-     * 鍒犻櫎缃戝叧蹇冭烦鏃ュ織
-     */
-    @Log(title = "缃戝叧蹇冭烦鏃ュ織", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(gatewayHbtLogService.deleteGatewayHbtLogByIds(ids));
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/controller/GatewaySettingController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/controller/GatewaySettingController.java
deleted file mode 100644
index 8d44060..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/controller/GatewaySettingController.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package com.dingzhuo.energy.project.gateway.controller;
-
-import cn.hutool.core.collection.CollectionUtil;
-import com.dingzhuo.energy.common.core.lang.UUID;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.gateway.domain.GatewaySetting;
-import com.dingzhuo.energy.project.gateway.service.IGatewaySettingService;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.ObjectUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
-
-/**
- * 缃戝叧閰嶇疆淇℃伅Controller
- *
- * @author zhw
- * @date 2022-04-15
- */
-@RestController
-@RequestMapping("/gateway/gatewaysetting")
-public class GatewaySettingController extends BaseController
-{
-    @Autowired
-    private IGatewaySettingService gatewaySettingService;
-
-    /**
-     * 鏌ヨ缃戝叧閰嶇疆淇℃伅鍒楄〃
-     */
-    @GetMapping("/list")
-    public TableDataInfo list(GatewaySetting gatewaySetting)
-    {
-        startPage();
-        List<GatewaySetting> list = gatewaySettingService.selectGatewaySettingList(gatewaySetting);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭缃戝叧閰嶇疆淇℃伅鍒楄〃
-     */
-    @Log(title = "缃戝叧閰嶇疆淇℃伅", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(GatewaySetting gatewaySetting)
-    {
-        List<GatewaySetting> list = gatewaySettingService.selectGatewaySettingList(gatewaySetting);
-        ExcelUtil<GatewaySetting> util = new ExcelUtil<GatewaySetting>(GatewaySetting.class);
-        return util.exportExcel(list, "gatewaysetting");
-    }
-
-    /**
-     * 鑾峰彇缃戝叧閰嶇疆淇℃伅璇︾粏淇℃伅
-     */
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(gatewaySettingService.selectGatewaySettingById(id));
-    }
-
-    /**
-     * 鏂板缃戝叧閰嶇疆淇℃伅
-     */
-    @Log(title = "鏂板缃戝叧閰嶇疆淇℃伅", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody GatewaySetting gatewaySetting)
-    {
-        List<GatewaySetting> gatewaySettingList =  gatewaySettingService.checkOne(gatewaySetting);
-        if(!CollectionUtil.isEmpty(gatewaySettingList)){
-            return AjaxResult.error("缃戝叧缂栧彿閲嶅");
-        }
-        gatewaySetting.setId(UUID.fastUUID().toString());
-        return toAjax(gatewaySettingService.insertGatewaySetting(gatewaySetting));
-    }
-
-    /**
-     * 淇敼缃戝叧閰嶇疆淇℃伅
-     */
-    @Log(title = "缃戝叧閰嶇疆淇℃伅", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody GatewaySetting gatewaySetting)
-    {
-        if(ObjectUtils.isEmpty(gatewaySetting.getId())){
-            return AjaxResult.error("鏃犵綉鍏充富閿�");
-        }
-        List<GatewaySetting> gatewaySettingList =  gatewaySettingService.checkOne(gatewaySetting);
-        if(!CollectionUtil.isEmpty(gatewaySettingList)){
-            return AjaxResult.error("缃戝叧缂栧彿閲嶅");
-        }
-        return toAjax(gatewaySettingService.updateGatewaySetting(gatewaySetting));
-    }
-
-    /**
-     * 鍒犻櫎缃戝叧閰嶇疆淇℃伅
-     */
-    @Log(title = "缃戝叧閰嶇疆淇℃伅", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(gatewaySettingService.deleteGatewaySettingByIds(ids));
-    }
-
-    /**
-     * 鏌ヨ缃戝叧閰嶇疆淇℃伅鍒楄〃
-     */
-    @GetMapping("/monitor")
-    public TableDataInfo monitor()
-    {
-        startPage();
-        List<GatewaySetting> list = gatewaySettingService.selectGatewaySettingMonitorList();
-
-        if(CollectionUtils.isNotEmpty(list)){
-            list.forEach(f->{
-                Date dd = f.getHbtTime();
-                //3鍒嗛挓娌℃湁蹇冭烦灏辫秴鏃�
-                if(ObjectUtils.isEmpty(dd)){
-                    f.setState("鏈煡");
-                }else  if(dd.getTime()+60000*5>(new Date()).getTime())
-                {
-                    f.setState("鍦ㄧ嚎");
-                }else{
-                    f.setState("绂荤嚎");
-                }
-            });
-        }
-        list.stream().sorted(Comparator.comparing(GatewaySetting::getHbtTime));
-        return getDataTable(list);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/domain/GatewayHbtLog.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/domain/GatewayHbtLog.java
deleted file mode 100644
index 3535b78..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/domain/GatewayHbtLog.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package com.dingzhuo.energy.project.gateway.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * 缃戝叧蹇冭烦鏃ュ織瀵硅薄 gateway_hbt_log
- * 
- * @author zhw
- * @date 2022-04-15
- */
-public class GatewayHbtLog extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 涓婚敭 */
-    private String id;
-
-    /** 缃戝叧缂栧彿 */
-    @Excel(name = "缃戝叧缂栧彿")
-    private String gatewayNo;
-
-    /** 蹇冭烦鏃堕棿 */
-    @Excel(name = "蹇冭烦鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date hbtTime;
-
-    /** 蹇冭烦鍖� */
-    @Excel(name = "蹇冭烦鍖�")
-    private String content;
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setGatewayNo(String gatewayNo) 
-    {
-        this.gatewayNo = gatewayNo;
-    }
-
-    public String getGatewayNo() 
-    {
-        return gatewayNo;
-    }
-    public void setHbtTime(Date hbtTime) 
-    {
-        this.hbtTime = hbtTime;
-    }
-
-    public Date getHbtTime() 
-    {
-        return hbtTime;
-    }
-    public void setContent(String content) 
-    {
-        this.content = content;
-    }
-
-    public String getContent() 
-    {
-        return content;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("gatewayNo", getGatewayNo())
-            .append("hbtTime", getHbtTime())
-            .append("content", getContent())
-            .toString();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/domain/GatewaySetting.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/domain/GatewaySetting.java
deleted file mode 100644
index 03b8935..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/domain/GatewaySetting.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package com.dingzhuo.energy.project.gateway.domain;
-
-import com.alibaba.fastjson.annotation.JSONField;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-import org.springframework.data.annotation.Transient;
-import org.springframework.format.annotation.DateTimeFormat;
-
-/**
- * 缃戝叧閰嶇疆淇℃伅瀵硅薄 gateway_setting
- *
- * @author zhw
- * @date 2022-04-15
- */
-public class GatewaySetting extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** UUID涓婚敭 */
-    private String id;
-
-    /** 缃戝叧缂栧彿 */
-    @Excel(name = "缃戝叧缂栧彿")
-    private String gatewayNum;
-
-    /** 鍘傚尯 */
-    @Excel(name = "鍘傚尯")
-    private String plantArea;
-
-    /** 鍦板潃 */
-    @Excel(name = "鍦板潃")
-    private String address;
-
-    /** 蹇冭烦鏃堕棿 */
-    @Excel(name = "蹇冭烦鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
-    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date hbtTime;
-
-    /**
-     * 缃戝叧鐘舵�� 绂荤嚎/鍦ㄧ嚎
-     */
-    @Transient
-    private String state;
-
-    public void setId(String id)
-    {
-        this.id = id;
-    }
-
-    public String getId()
-    {
-        return id;
-    }
-    public void setGatewayNum(String gatewayNum)
-    {
-        this.gatewayNum = gatewayNum;
-    }
-
-    public String getGatewayNum()
-    {
-        return gatewayNum;
-    }
-    public void setPlantArea(String plantArea)
-    {
-        this.plantArea = plantArea;
-    }
-
-    public String getPlantArea()
-    {
-        return plantArea;
-    }
-    public void setAddress(String address)
-    {
-        this.address = address;
-    }
-
-    public String getAddress()
-    {
-        return address;
-    }
-    public void setHbtTime(Date hbtTime)
-    {
-        this.hbtTime = hbtTime;
-    }
-
-    public Date getHbtTime()
-    {
-        return hbtTime;
-    }
-
-    public String getState() {
-        return state;
-    }
-
-
-    public void setState(String state) {
-        this.state = state;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("gatewayNum", getGatewayNum())
-            .append("plantArea", getPlantArea())
-            .append("address", getAddress())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .append("hbtTime", getHbtTime())
-            .toString();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/mapper/GatewayHbtLogMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/mapper/GatewayHbtLogMapper.java
deleted file mode 100644
index 9b03053..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/mapper/GatewayHbtLogMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.project.gateway.mapper;
-
-import com.dingzhuo.energy.project.gateway.domain.GatewayHbtLog;
-import java.util.List;
-
-/**
- * 缃戝叧蹇冭烦鏃ュ織Mapper鎺ュ彛
- * 
- * @author zhw
- * @date 2022-04-15
- */
-public interface GatewayHbtLogMapper 
-{
-    /**
-     * 鏌ヨ缃戝叧蹇冭烦鏃ュ織
-     * 
-     * @param id 缃戝叧蹇冭烦鏃ュ織ID
-     * @return 缃戝叧蹇冭烦鏃ュ織
-     */
-    public GatewayHbtLog selectGatewayHbtLogById(String id);
-
-    /**
-     * 鏌ヨ缃戝叧蹇冭烦鏃ュ織鍒楄〃
-     * 
-     * @param gatewayHbtLog 缃戝叧蹇冭烦鏃ュ織
-     * @return 缃戝叧蹇冭烦鏃ュ織闆嗗悎
-     */
-    public List<GatewayHbtLog> selectGatewayHbtLogList(GatewayHbtLog gatewayHbtLog);
-
-    /**
-     * 鏂板缃戝叧蹇冭烦鏃ュ織
-     * 
-     * @param gatewayHbtLog 缃戝叧蹇冭烦鏃ュ織
-     * @return 缁撴灉
-     */
-    public int insertGatewayHbtLog(GatewayHbtLog gatewayHbtLog);
-
-    /**
-     * 淇敼缃戝叧蹇冭烦鏃ュ織
-     * 
-     * @param gatewayHbtLog 缃戝叧蹇冭烦鏃ュ織
-     * @return 缁撴灉
-     */
-    public int updateGatewayHbtLog(GatewayHbtLog gatewayHbtLog);
-
-    /**
-     * 鍒犻櫎缃戝叧蹇冭烦鏃ュ織
-     * 
-     * @param id 缃戝叧蹇冭烦鏃ュ織ID
-     * @return 缁撴灉
-     */
-    public int deleteGatewayHbtLogById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎缃戝叧蹇冭烦鏃ュ織
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteGatewayHbtLogByIds(String[] ids);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/mapper/GatewaySettingMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/mapper/GatewaySettingMapper.java
deleted file mode 100644
index 62645d5..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/mapper/GatewaySettingMapper.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package com.dingzhuo.energy.project.gateway.mapper;
-
-import com.dingzhuo.energy.project.gateway.domain.GatewaySetting;
-import java.util.List;
-
-/**
- * 缃戝叧閰嶇疆淇℃伅Mapper鎺ュ彛
- *
- * @author zhw
- * @date 2022-04-15
- */
-public interface GatewaySettingMapper
-{
-    /**
-     * 鏌ヨ缃戝叧閰嶇疆淇℃伅
-     *
-     * @param id 缃戝叧閰嶇疆淇℃伅ID
-     * @return 缃戝叧閰嶇疆淇℃伅
-     */
-    public GatewaySetting selectGatewaySettingById(String id);
-
-    /**
-     * 鏌ヨ缃戝叧閰嶇疆淇℃伅鍒楄〃
-     *
-     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
-     * @return 缃戝叧閰嶇疆淇℃伅闆嗗悎
-     */
-    public List<GatewaySetting> selectGatewaySettingList(GatewaySetting gatewaySetting);
-
-
-    /**
-     * 鏂板缃戝叧閰嶇疆淇℃伅
-     *
-     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
-     * @return 缁撴灉
-     */
-    public int insertGatewaySetting(GatewaySetting gatewaySetting);
-
-    /**
-     * 淇敼缃戝叧閰嶇疆淇℃伅
-     *
-     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
-     * @return 缁撴灉
-     */
-    public int updateGatewaySetting(GatewaySetting gatewaySetting);
-
-    /**
-     * 鍒犻櫎缃戝叧閰嶇疆淇℃伅
-     *
-     * @param id 缃戝叧閰嶇疆淇℃伅ID
-     * @return 缁撴灉
-     */
-    public int deleteGatewaySettingById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎缃戝叧閰嶇疆淇℃伅
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteGatewaySettingByIds(String[] ids);
-
-    /**
-     * 鏍规嵁缃戝叧缂栧彿鏇存柊蹇冭烦鏃堕棿
-     * @param gatewaySetting
-     * @return
-     */
-    public int updateGatewaySettingByNum(GatewaySetting gatewaySetting);
-
-    /**
-     * 缃戝叧瀹炴椂鐘舵�佺洃鎺у垪琛�
-     * @return
-     */
-    public List<GatewaySetting> selectGatewaySettingMonitorList();
-
-    /**
-     * 缃戝叧缂栧彿鍞竴鎬ф鏌�
-     * @return
-     */
-    public List<GatewaySetting> checkOne(GatewaySetting gatewaySetting);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/service/IGatewayHbtLogService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/service/IGatewayHbtLogService.java
deleted file mode 100644
index b397c53..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/service/IGatewayHbtLogService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.project.gateway.service;
-
-import com.dingzhuo.energy.project.gateway.domain.GatewayHbtLog;
-import java.util.List;
-
-/**
- * 缃戝叧蹇冭烦鏃ュ織Service鎺ュ彛
- * 
- * @author zhw
- * @date 2022-04-15
- */
-public interface IGatewayHbtLogService 
-{
-    /**
-     * 鏌ヨ缃戝叧蹇冭烦鏃ュ織
-     * 
-     * @param id 缃戝叧蹇冭烦鏃ュ織ID
-     * @return 缃戝叧蹇冭烦鏃ュ織
-     */
-    public GatewayHbtLog selectGatewayHbtLogById(String id);
-
-    /**
-     * 鏌ヨ缃戝叧蹇冭烦鏃ュ織鍒楄〃
-     * 
-     * @param gatewayHbtLog 缃戝叧蹇冭烦鏃ュ織
-     * @return 缃戝叧蹇冭烦鏃ュ織闆嗗悎
-     */
-    public List<GatewayHbtLog> selectGatewayHbtLogList(GatewayHbtLog gatewayHbtLog);
-
-    /**
-     * 鏂板缃戝叧蹇冭烦鏃ュ織
-     * 
-     * @param gatewayHbtLog 缃戝叧蹇冭烦鏃ュ織
-     * @return 缁撴灉
-     */
-    public int insertGatewayHbtLog(GatewayHbtLog gatewayHbtLog);
-
-    /**
-     * 淇敼缃戝叧蹇冭烦鏃ュ織
-     * 
-     * @param gatewayHbtLog 缃戝叧蹇冭烦鏃ュ織
-     * @return 缁撴灉
-     */
-    public int updateGatewayHbtLog(GatewayHbtLog gatewayHbtLog);
-
-    /**
-     * 鎵归噺鍒犻櫎缃戝叧蹇冭烦鏃ュ織
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑缃戝叧蹇冭烦鏃ュ織ID
-     * @return 缁撴灉
-     */
-    public int deleteGatewayHbtLogByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎缃戝叧蹇冭烦鏃ュ織淇℃伅
-     * 
-     * @param id 缃戝叧蹇冭烦鏃ュ織ID
-     * @return 缁撴灉
-     */
-    public int deleteGatewayHbtLogById(String id);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/service/IGatewaySettingService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/service/IGatewaySettingService.java
deleted file mode 100644
index 54cb1a0..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/service/IGatewaySettingService.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package com.dingzhuo.energy.project.gateway.service;
-
-import com.dingzhuo.energy.project.gateway.domain.GatewaySetting;
-import java.util.List;
-
-/**
- * 缃戝叧閰嶇疆淇℃伅Service鎺ュ彛
- *
- * @author zhw
- * @date 2022-04-15
- */
-public interface IGatewaySettingService
-{
-    /**
-     * 鏌ヨ缃戝叧閰嶇疆淇℃伅
-     *
-     * @param id 缃戝叧閰嶇疆淇℃伅ID
-     * @return 缃戝叧閰嶇疆淇℃伅
-     */
-    public GatewaySetting selectGatewaySettingById(String id);
-
-    /**
-     * 鏌ヨ缃戝叧閰嶇疆淇℃伅鍒楄〃
-     *
-     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
-     * @return 缃戝叧閰嶇疆淇℃伅闆嗗悎
-     */
-    public List<GatewaySetting> selectGatewaySettingList(GatewaySetting gatewaySetting);
-
-    /**
-     * 鏂板缃戝叧閰嶇疆淇℃伅
-     *
-     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
-     * @return 缁撴灉
-     */
-    public int insertGatewaySetting(GatewaySetting gatewaySetting);
-
-    /**
-     * 淇敼缃戝叧閰嶇疆淇℃伅
-     *
-     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
-     * @return 缁撴灉
-     */
-    public int updateGatewaySetting(GatewaySetting gatewaySetting);
-
-    /**
-     * 鎵归噺鍒犻櫎缃戝叧閰嶇疆淇℃伅
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑缃戝叧閰嶇疆淇℃伅ID
-     * @return 缁撴灉
-     */
-    public int deleteGatewaySettingByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎缃戝叧閰嶇疆淇℃伅淇℃伅
-     *
-     * @param id 缃戝叧閰嶇疆淇℃伅ID
-     * @return 缁撴灉
-     */
-    public int deleteGatewaySettingById(String id);
-
-    /**
-     * 鏍规嵁缃戝叧缂栧彿鏇存柊蹇冭烦鏃堕棿
-     * @param gatewaySetting
-     * @return
-     */
-    public int updateGatewaySettingByNum(GatewaySetting gatewaySetting);
-
-    /**
-     * 鏌ヨ缃戝叧鐩戞帶淇℃伅鍒楄〃
-     *
-     * @return 缃戝叧閰嶇疆淇℃伅
-     */
-    public List<GatewaySetting> selectGatewaySettingMonitorList();
-
-    /**
-     * 缃戝叧缂栧彿鍞竴鎬ф鏌�
-     * @return
-     */
-    public List<GatewaySetting> checkOne(GatewaySetting gatewaySetting);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/service/impl/GatewayHbtLogServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/service/impl/GatewayHbtLogServiceImpl.java
deleted file mode 100644
index e883658..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/service/impl/GatewayHbtLogServiceImpl.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.dingzhuo.energy.project.gateway.service.impl;
-
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.project.gateway.mapper.GatewayHbtLogMapper;
-import com.dingzhuo.energy.project.gateway.domain.GatewayHbtLog;
-import com.dingzhuo.energy.project.gateway.service.IGatewayHbtLogService;
-
-/**
- * 缃戝叧蹇冭烦鏃ュ織Service涓氬姟灞傚鐞�
- * 
- * @author zhw
- * @date 2022-04-15
- */
-@Service
-public class GatewayHbtLogServiceImpl implements IGatewayHbtLogService 
-{
-    @Autowired
-    private GatewayHbtLogMapper gatewayHbtLogMapper;
-
-    /**
-     * 鏌ヨ缃戝叧蹇冭烦鏃ュ織
-     * 
-     * @param id 缃戝叧蹇冭烦鏃ュ織ID
-     * @return 缃戝叧蹇冭烦鏃ュ織
-     */
-    @Override
-    public GatewayHbtLog selectGatewayHbtLogById(String id)
-    {
-        return gatewayHbtLogMapper.selectGatewayHbtLogById(id);
-    }
-
-    /**
-     * 鏌ヨ缃戝叧蹇冭烦鏃ュ織鍒楄〃
-     * 
-     * @param gatewayHbtLog 缃戝叧蹇冭烦鏃ュ織
-     * @return 缃戝叧蹇冭烦鏃ュ織
-     */
-    @Override
-    public List<GatewayHbtLog> selectGatewayHbtLogList(GatewayHbtLog gatewayHbtLog)
-    {
-        return gatewayHbtLogMapper.selectGatewayHbtLogList(gatewayHbtLog);
-    }
-
-    /**
-     * 鏂板缃戝叧蹇冭烦鏃ュ織
-     * 
-     * @param gatewayHbtLog 缃戝叧蹇冭烦鏃ュ織
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertGatewayHbtLog(GatewayHbtLog gatewayHbtLog)
-    {
-        return gatewayHbtLogMapper.insertGatewayHbtLog(gatewayHbtLog);
-    }
-
-    /**
-     * 淇敼缃戝叧蹇冭烦鏃ュ織
-     * 
-     * @param gatewayHbtLog 缃戝叧蹇冭烦鏃ュ織
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateGatewayHbtLog(GatewayHbtLog gatewayHbtLog)
-    {
-        return gatewayHbtLogMapper.updateGatewayHbtLog(gatewayHbtLog);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎缃戝叧蹇冭烦鏃ュ織
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑缃戝叧蹇冭烦鏃ュ織ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteGatewayHbtLogByIds(String[] ids)
-    {
-        return gatewayHbtLogMapper.deleteGatewayHbtLogByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎缃戝叧蹇冭烦鏃ュ織淇℃伅
-     * 
-     * @param id 缃戝叧蹇冭烦鏃ュ織ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteGatewayHbtLogById(String id)
-    {
-        return gatewayHbtLogMapper.deleteGatewayHbtLogById(id);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/service/impl/GatewaySettingServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/service/impl/GatewaySettingServiceImpl.java
deleted file mode 100644
index d5f4986..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/gateway/service/impl/GatewaySettingServiceImpl.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.dingzhuo.energy.project.gateway.service.impl;
-
-import java.util.List;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.project.gateway.mapper.GatewaySettingMapper;
-import com.dingzhuo.energy.project.gateway.domain.GatewaySetting;
-import com.dingzhuo.energy.project.gateway.service.IGatewaySettingService;
-
-/**
- * 缃戝叧閰嶇疆淇℃伅Service涓氬姟灞傚鐞�
- *
- * @author zhw
- * @date 2022-04-15
- */
-@Service
-public class GatewaySettingServiceImpl implements IGatewaySettingService
-{
-    @Autowired
-    private GatewaySettingMapper gatewaySettingMapper;
-
-    /**
-     * 鏌ヨ缃戝叧閰嶇疆淇℃伅
-     *
-     * @param id 缃戝叧閰嶇疆淇℃伅ID
-     * @return 缃戝叧閰嶇疆淇℃伅
-     */
-    @Override
-    public GatewaySetting selectGatewaySettingById(String id)
-    {
-        return gatewaySettingMapper.selectGatewaySettingById(id);
-    }
-
-    /**
-     * 鏌ヨ缃戝叧閰嶇疆淇℃伅鍒楄〃
-     *
-     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
-     * @return 缃戝叧閰嶇疆淇℃伅
-     */
-    @Override
-    public List<GatewaySetting> selectGatewaySettingList(GatewaySetting gatewaySetting)
-    {
-        return gatewaySettingMapper.selectGatewaySettingList(gatewaySetting);
-    }
-
-    /**
-     * 鏂板缃戝叧閰嶇疆淇℃伅
-     *
-     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertGatewaySetting(GatewaySetting gatewaySetting)
-    {
-        gatewaySetting.setCreateTime(DateUtils.getNowDate());
-        return gatewaySettingMapper.insertGatewaySetting(gatewaySetting);
-    }
-
-    /**
-     * 淇敼缃戝叧閰嶇疆淇℃伅
-     *
-     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateGatewaySetting(GatewaySetting gatewaySetting)
-    {
-        gatewaySetting.setUpdateTime(DateUtils.getNowDate());
-        return gatewaySettingMapper.updateGatewaySetting(gatewaySetting);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎缃戝叧閰嶇疆淇℃伅
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑缃戝叧閰嶇疆淇℃伅ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteGatewaySettingByIds(String[] ids)
-    {
-        return gatewaySettingMapper.deleteGatewaySettingByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎缃戝叧閰嶇疆淇℃伅淇℃伅
-     *
-     * @param id 缃戝叧閰嶇疆淇℃伅ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteGatewaySettingById(String id)
-    {
-        return gatewaySettingMapper.deleteGatewaySettingById(id);
-    }
-
-    /**
-     * 鏍规嵁缃戝叧缂栧彿鏇存柊蹇冭烦鏃堕棿
-     * @param gatewaySetting
-     * @return
-     */
-    @Override
-    public int updateGatewaySettingByNum(GatewaySetting gatewaySetting){
-        return gatewaySettingMapper.updateGatewaySettingByNum(gatewaySetting);
-    }
-
-    /**
-     * 鏌ヨ缃戝叧鐩戞帶淇℃伅鍒楄〃
-     *
-     * @return 缃戝叧閰嶇疆淇℃伅
-     */
-    @Override
-    public List<GatewaySetting> selectGatewaySettingMonitorList()
-    {
-        return gatewaySettingMapper.selectGatewaySettingMonitorList();
-    }
-
-    /**
-     * 缃戝叧缂栧彿鍞竴鎬ф鏌�
-     * @return
-     */
-    @Override
-    public List<GatewaySetting> checkOne(GatewaySetting gatewaySetting){
-        return gatewaySettingMapper.checkOne(gatewaySetting);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/GovReportsTask.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/GovReportsTask.java
deleted file mode 100644
index ddaa0a0..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/GovReportsTask.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.dingzhuo.energy.project.govReports;
-
-import cn.hutool.core.date.DateUtil;
-import com.dingzhuo.energy.project.govReports.domain.DataItemPub;
-import com.dingzhuo.energy.project.govReports.service.IDataItemPubService;
-import com.dingzhuo.energy.project.reportForm.domain.reportSet;
-import com.dingzhuo.energy.project.reportForm.mapper.reportSetMapper;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-import java.text.MessageFormat;
-import java.util.Date;
-import java.util.List;
-
-@Configuration
-@Component
-public class GovReportsTask {
-
-    private static final String DATE_TYPE_DAY = "DAY";
-    private static final String DATE_TYPE_MONTH = "MONTH";
-
-    /**
-     * 琚鐞嗙殑琛ㄧ殑鏁版嵁
-     **/
-    final IDataItemPubService dataItemPubService;
-
-    final reportSetMapper reportSetMapper;
-
-    public GovReportsTask(IDataItemPubService dataItemPubService, reportSetMapper reportSetMapper) {
-        this.dataItemPubService = dataItemPubService;
-        this.reportSetMapper = reportSetMapper;
-    }
-
-    @Scheduled(cron = "${govReport.cronDay}")
-    private void handleDayDataTask() {
-        Date yesterday = DateUtil.yesterday();
-        String timeCode = MessageFormat.format("D{0}", DateUtil.format(yesterday, "yyyyMMdd"));
-        List<reportSet> reportSetList = reportSetMapper.getAllEnableSetByDateType(DATE_TYPE_DAY);
-        List<DataItemPub> data = dataItemPubService.getReportData(timeCode, DATE_TYPE_DAY);
-        compareData(data, reportSetList);
-        // 鎻掑叆鎴栬�呮洿鏂版暟鎹�
-        dataItemPubService.insertOrUpdateDateItemPub(data);
-    }
-
-    @Scheduled(cron = "${govReport.cronMonth}")
-    private void handleMonthDataTask() {
-        Date lastMonth = DateUtil.lastMonth();
-        String timeCode = MessageFormat.format("M{0}", DateUtil.format(lastMonth, "yyyyMM"));
-        List<reportSet> reportSetList = reportSetMapper.getAllEnableSetByDateType(DATE_TYPE_MONTH);
-        List<DataItemPub> data = dataItemPubService.getReportData(timeCode, DATE_TYPE_MONTH);
-        compareData(data, reportSetList);
-        // 鎻掑叆鎴栬�呮洿鏂版暟鎹�
-        dataItemPubService.insertOrUpdateDateItemPub(data);
-    }
-
-    /**
-     * 姣旇緝骞朵笖澶勭悊鏁版嵁
-     *
-     * @param itemPubList 鍘熷鏁版嵁
-     **/
-    private List<DataItemPub> compareData(List<DataItemPub> itemPubList, List<reportSet> mReportSet) {
-
-        // 鍙栧嚭鏉ョ殑鏄┖锛屽垯鐩存帴杩斿洖鏁版嵁
-        if (mReportSet.isEmpty()) {
-            return itemPubList;
-        }
-
-        itemPubList.forEach(m -> {
-            m.setOriginValue(m.getValue());
-            // 鑾峰彇姝ょ偣浣嶇殑璁剧疆
-            reportSet current = mReportSet.stream().filter(n -> n.getIndexId().equals(m.getIndexId())).findFirst().orElse(null);
-            if (current != null) {
-                // id
-                m.setReportSetId(current.getId());
-                // 涓嬮檺鍊�
-                m.setReportLowerLimit(Double.valueOf(current.getLimitValDown()));
-                // 涓嬮檺鏇挎崲
-                m.setReportLowerReplace(Double.valueOf(current.getLimitReplaceValDown()));
-                // 涓婇檺鍊�
-                m.setReportUpperLimit(Double.valueOf(current.getLimitValUp()));
-                // 涓婇檺鏇挎崲
-                m.setReportLowerLimit(Double.valueOf(current.getLimitReplaceValUp()));
-                if (m.getOriginValue() > m.getReportUpperLimit()) {
-                    m.setValue(m.getReportUpperReplace());
-                }
-                if (m.getOriginValue() < m.getReportLowerLimit()) {
-                    m.setValue(m.getReportLowerReplace());
-                }
-            }
-        });
-
-        return itemPubList;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/controller/DataItemPubController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/controller/DataItemPubController.java
deleted file mode 100644
index 07bdc2b..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/controller/DataItemPubController.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.dingzhuo.energy.project.govReports.controller;
-
-import com.dingzhuo.energy.common.utils.StringUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.govReports.domain.DataItemPub;
-import com.dingzhuo.energy.project.govReports.domain.DataItemPubVo;
-import com.dingzhuo.energy.project.govReports.service.IDataItemPubService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * GovReportsController
- *
- * @author zy
- * @date 2022-04-06
- */
-@RestController
-@RequestMapping("/govReports/govReports")
-public class DataItemPubController extends BaseController
-{
-    @Autowired
-    private IDataItemPubService dataItemPubService;
-
-    /**
-     * 鏌ヨGovReports鍒楄〃
-     */
-    @GetMapping("/list")
-    public TableDataInfo list(@RequestParam(value = "timeCode",required = false) String timeCode,@RequestParam(value = "timeType",required = false) String timeType)
-    {
-        if(StringUtils.isNotEmpty(timeCode)){
-            if("DAY".equals(timeType)){
-                timeCode="D"+timeCode;
-            }
-            if("MONTH".equals(timeType)){
-                timeCode="M"+timeCode;
-            }
-        }
-        DataItemPub dip = new DataItemPub();
-        dip.setTimeCode(timeCode);
-        startPage();
-        List<DataItemPubVo> list = dataItemPubService.selectDataItemPubInfoList(dip);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭GovReports鍒楄〃
-     */
-    @Log(title = "GovReports", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(DataItemPub dataItemPub)
-    {
-        List<DataItemPub> list = dataItemPubService.selectDataItemPubList(dataItemPub);
-        ExcelUtil<DataItemPub> util = new ExcelUtil<DataItemPub>(DataItemPub.class);
-        return util.exportExcel(list, "govReports");
-    }
-
-//    /**
-//     * 鑾峰彇GovReports璇︾粏淇℃伅
-//     */
-//    @GetMapping(value = "/{indexId}")
-//    public AjaxResult getInfo(@PathVariable("indexId") String indexId)
-//    {
-//        return AjaxResult.success(dataItemPubService.selectDataItemPubById(indexId));
-//    }
-
-    /**
-     * 鏂板GovReports
-     */
-    @Log(title = "GovReports", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody DataItemPub dataItemPub)
-    {
-        return toAjax(dataItemPubService.insertDataItemPub(dataItemPub));
-    }
-
-    /**
-     * 淇敼GovReports
-     */
-    @Log(title = "GovReports", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody DataItemPub dataItemPub)
-    {
-        return toAjax(dataItemPubService.updateDataItemPub(dataItemPub));
-    }
-
-    /**
-     * 鍒犻櫎GovReports
-     */
-    @Log(title = "GovReports", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{indexIds}")
-    public AjaxResult remove(@PathVariable String[] indexIds)
-    {
-        return toAjax(dataItemPubService.deleteDataItemPubByIds(indexIds));
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/domain/DataItemPub.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/domain/DataItemPub.java
deleted file mode 100644
index 8a97319..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/domain/DataItemPub.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package com.dingzhuo.energy.project.govReports.domain;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Data;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-import java.util.Date;
-
-/**
- * GovReports瀵硅薄 data_item_pub
- *
- * @author zy
- * @date 2022-04-06
- */
-@Data
-public class DataItemPub {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * $column.columnComment
-     */
-    private String indexId;
-
-    /**
-     * $column.columnComment
-     */
-    private String timeCode;
-
-    /**
-     * $column.columnComment
-     */
-    private Date beginTime;
-
-    /**
-     * $column.columnComment
-     */
-    private Date endTime;
-
-    /**
-     * 涓婃姤鍊�
-     */
-    @Excel(name = "涓婃姤鍊�")
-    private Double value;
-
-    /**
-     * $column.columnComment
-     */
-    @Excel(name = "涓婃姤鍊�")
-    private String quality;
-
-    /**
-     * $column.columnComment
-     */
-    @Excel(name = "涓婃姤鍊�")
-    private String timeType;
-
-    /**
-     * $column.columnComment
-     */
-    @Excel(name = "涓婃姤鍊�", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date dataTime;
-
-    /**
-     * 鍙戦�佺姸鎬� 0 鏈彂閫� 1 宸插彂閫� 2鍙戦�佸け璐�
-     */
-    private Integer sendStatus = 0;
-
-    /**
-     * 鍙戦�佹椂闂�
-     */
-    private Date sendDate;
-
-    /**
-     * 鍙戦�佹鏁�
-     */
-    private Integer sendTimes;
-
-    /**
-     * 璁剧疆鐨刬d
-     */
-    private String reportSetId;
-
-    /**
-     * 涓婇檺闄愬��
-     */
-    private Double reportUpperLimit;
-
-    /**
-     * 涓婇檺鏇挎崲鍊�
-     */
-    private Double reportUpperReplace;
-
-    /**
-     * 涓嬮檺闄愬��
-     */
-    private Double reportLowerLimit;
-
-    /**
-     * 涓嬮檺鏇挎崲鍊�
-     */
-    private Double reportLowerReplace;
-
-    /**
-     * 鍘熷鍊�
-     */
-    private Double originValue;
-
-    /** 鍒涘缓鑰� */
-    private String createBy;
-
-    /** 鍒涘缓鏃堕棿 */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
-
-    /** 鏇存柊鑰� */
-    private String updateBy;
-
-    /** 鏇存柊鏃堕棿 */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date updateTime;
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
-                .append("indexId", getIndexId())
-                .append("timeCode", getTimeCode())
-                .append("beginTime", getBeginTime())
-                .append("endTime", getEndTime())
-                .append("value", getValue())
-                .append("quality", getQuality())
-                .append("createTime", getCreateTime())
-                .append("updateTime", getUpdateTime())
-                .append("timeType", getTimeType())
-                .append("dataTime", getDataTime())
-                .append("createBy", getCreateBy())
-                .append("sendStatus", getSendStatus())
-                .append("sendDate", getSendDate())
-                .append("sendTimes", getSendTimes())
-                .append("reportSetId", getReportSetId())
-                .append("reportUpperLimit", getReportUpperLimit())
-                .append("reportUpperReplace", getReportUpperReplace())
-                .append("reportLowerLimit", getReportLowerLimit())
-                .append("reportLowerReplace", getReportLowerReplace())
-                .append("originValue", getOriginValue())
-                .toString();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/domain/DataItemPubVo.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/domain/DataItemPubVo.java
deleted file mode 100644
index 56d7d28..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/domain/DataItemPubVo.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package com.dingzhuo.energy.project.govReports.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import lombok.Data;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-
-/**
- * GovReportsVo瀵硅薄 data_item_pub
- *
- * @author zw
- * @date 2022-04-07
- */
-@Data
-public class DataItemPubVo {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 鎸囨爣涓婚敭
-     */
-    private String indexId;
-    /**
-     * 鎸囨爣缂栫爜
-     */
-    @Excel(name = "鎸囨爣缂栫爜")
-    private String indexCode;
-    /**
-     * 鎸囨爣鍚嶇О
-     */
-    @Excel(name = "鎸囨爣鍚嶇О")
-    private String indexName;
-
-    /**
-     * 鎵�灞炴湡
-     */
-    @Excel(name = "涓婃姤鎵�灞炴湡")
-    private String timeCode;
-
-    /**
-     * 涓婃姤鍊�
-     */
-    @Excel(name = "涓婃姤鍊�")
-    private Double value;
-
-    /**
-     * 鍘熷鍊�
-     */
-    @Excel(name = "鍘熷鍊�")
-    private Double originValue;
-
-    /**
-     * 涓婇檺闄愬��
-     */
-    @Excel(name = "涓婇檺闄愬��")
-    private Double reportUpperLimit;
-
-    /**
-     * 涓婇檺鏇挎崲鍊�
-     */
-    @Excel(name = "涓婇檺鏇挎崲鍊�")
-    private Double reportUpperReplace;
-
-    /**
-     * 涓嬮檺闄愬��
-     */
-    @Excel(name = "涓嬮檺闄愬��")
-    private Double reportLowerLimit;
-
-    /**
-     * 涓嬮檺鏇挎崲鍊�
-     */
-    @Excel(name = "涓嬮檺鏇挎崲鍊�")
-    private Double reportLowerReplace;
-
-
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
-                .append("indexId", getIndexId())
-                .append("timeCode", getTimeCode())
-                .append("value", getValue())
-                .append("reportUpperLimit", getReportUpperLimit())
-                .append("reportUpperReplace", getReportUpperReplace())
-                .append("reportLowerLimit", getReportLowerLimit())
-                .append("reportLowerReplace", getReportLowerReplace())
-                .append("originValue", getOriginValue())
-                .toString();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/mapper/DataItemPubMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/mapper/DataItemPubMapper.java
deleted file mode 100644
index 49c2cf0..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/mapper/DataItemPubMapper.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.dingzhuo.energy.project.govReports.mapper;
-
-import com.dingzhuo.energy.project.govReports.domain.DataItemPub;
-import com.dingzhuo.energy.project.govReports.domain.DataItemPubVo;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * GovReportsMapper鎺ュ彛
- *
- * @author zy
- * @date 2022-04-06
- */
-public interface DataItemPubMapper {
-    /**
-     * 鏌ヨGovReports
-     *
-     * @param indexId GovReportsID
-     * @return GovReports
-     */
-    DataItemPub selectDataItemPubById(String indexId);
-
-    /**
-     * 鏌ヨGovReports鍒楄〃
-     *
-     * @param dataItemPub GovReports
-     * @return GovReports闆嗗悎
-     */
-    List<DataItemPub> selectDataItemPubList(DataItemPub dataItemPub);
-
-    /**
-     * 鏂板GovReports
-     *
-     * @param dataItemPub GovReports
-     * @return 缁撴灉
-     */
-    int insertDataItemPub(DataItemPub dataItemPub);
-
-    /**
-     * 淇敼GovReports
-     *
-     * @param dataItemPub GovReports
-     * @return 缁撴灉
-     */
-    int updateDataItemPub(DataItemPub dataItemPub);
-
-    /**
-     * 鍒犻櫎GovReports
-     *
-     * @param indexId GovReportsID
-     * @return 缁撴灉
-     */
-    int deleteDataItemPubById(String indexId);
-
-    /**
-     * 鎵归噺鍒犻櫎GovReports
-     *
-     * @param indexIds 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    int deleteDataItemPubByIds(String[] indexIds);
-
-    /**
-     * 鑾峰彇闇�瑕佸鐞嗙殑鏁版嵁
-     *
-     * @param dateType 鏃ユ湡绫诲瀷 DAY 澶�  MONTH 鏈�
-     * @param timeCode 鏃堕棿缂栫爜
-     **/
-    List<DataItemPub> getReportData(@Param("timeCode") String timeCode, @Param("dateType") String dateType);
-
-    /**
-     * 鎻掑叆鎴栬�呮洿鏂版暟鎹�
-     **/
-    int insertOrUpdateDateItemPub(@Param("list") List<DataItemPub> list);
-
-    /**
-     * 鏌ヨGovReports鐨勬樉绀轰俊鎭垪琛�
-     *
-     * @param dataItemPub GovReports
-     * @return GovReports闆嗗悎
-     */
-    List<DataItemPubVo> selectDataItemPubInfoList(DataItemPub dataItemPub);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/service/IDataItemPubService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/service/IDataItemPubService.java
deleted file mode 100644
index b4a4016..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/service/IDataItemPubService.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.dingzhuo.energy.project.govReports.service;
-
-import com.dingzhuo.energy.project.govReports.domain.DataItemPub;
-import com.dingzhuo.energy.project.govReports.domain.DataItemPubVo;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * GovReportsService鎺ュ彛
- *
- * @author zy
- * @date 2022-04-06
- */
-public interface IDataItemPubService {
-    /**
-     * 鏌ヨGovReports
-     *
-     * @param indexId GovReportsID
-     * @return GovReports
-     */
-    DataItemPub selectDataItemPubById(String indexId);
-
-    /**
-     * 鏌ヨGovReports鍒楄〃
-     *
-     * @param dataItemPub GovReports
-     * @return GovReports闆嗗悎
-     */
-    List<DataItemPub> selectDataItemPubList(DataItemPub dataItemPub);
-
-    /**
-     * 鏂板GovReports
-     *
-     * @param dataItemPub GovReports
-     * @return 缁撴灉
-     */
-    int insertDataItemPub(DataItemPub dataItemPub);
-
-    /**
-     * 淇敼GovReports
-     *
-     * @param dataItemPub GovReports
-     * @return 缁撴灉
-     */
-    int updateDataItemPub(DataItemPub dataItemPub);
-
-    /**
-     * 鎵归噺鍒犻櫎GovReports
-     *
-     * @param indexIds 闇�瑕佸垹闄ょ殑GovReportsID
-     * @return 缁撴灉
-     */
-    int deleteDataItemPubByIds(String[] indexIds);
-
-    /**
-     * 鍒犻櫎GovReports淇℃伅
-     *
-     * @param indexId GovReportsID
-     * @return 缁撴灉
-     */
-    int deleteDataItemPubById(String indexId);
-
-    /**
-     * 鑾峰彇闇�瑕佸鐞嗙殑鏁版嵁
-     *
-     * @param dateType 鏃ユ湡绫诲瀷 DAY 澶�  MONTH 鏈�
-     * @param timeCode 鏃堕棿缂栫爜
-     **/
-    List<DataItemPub> getReportData(String timeCode, String dateType);
-
-    /**
-     * 鎻掑叆鎴栬�呮洿鏂版暟鎹�
-     **/
-    int insertOrUpdateDateItemPub(List<DataItemPub> list);
-
-    /**
-     * 鏌ヨGovReports鐨勬樉绀轰俊鎭垪琛�
-     *
-     * @param dataItemPub GovReports
-     * @return GovReports闆嗗悎
-     */
-    List<DataItemPubVo> selectDataItemPubInfoList(DataItemPub dataItemPub);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/service/impl/DataItemPubServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/service/impl/DataItemPubServiceImpl.java
deleted file mode 100644
index 3a68d37..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/govReports/service/impl/DataItemPubServiceImpl.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package com.dingzhuo.energy.project.govReports.service.impl;
-
-import java.util.List;
-
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.project.govReports.domain.DataItemPubVo;
-import org.apache.ibatis.annotations.Param;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.project.govReports.mapper.DataItemPubMapper;
-import com.dingzhuo.energy.project.govReports.domain.DataItemPub;
-import com.dingzhuo.energy.project.govReports.service.IDataItemPubService;
-
-/**
- * GovReportsService涓氬姟灞傚鐞�
- *
- * @author zy
- * @date 2022-04-06
- */
-@Service
-public class DataItemPubServiceImpl implements IDataItemPubService {
-
-    @Autowired
-    private DataItemPubMapper dataItemPubMapper;
-
-    /**
-     * 鏌ヨGovReports
-     *
-     * @param indexId GovReportsID
-     * @return GovReports
-     */
-    @Override
-    public DataItemPub selectDataItemPubById(String indexId) {
-        return dataItemPubMapper.selectDataItemPubById(indexId);
-    }
-
-    /**
-     * 鏌ヨGovReports鍒楄〃
-     *
-     * @param dataItemPub GovReports
-     * @return GovReports
-     */
-    @Override
-    public List<DataItemPub> selectDataItemPubList(DataItemPub dataItemPub) {
-        return dataItemPubMapper.selectDataItemPubList(dataItemPub);
-    }
-
-    /**
-     * 鏂板GovReports
-     *
-     * @param dataItemPub GovReports
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertDataItemPub(DataItemPub dataItemPub) {
-        dataItemPub.setCreateTime(DateUtils.getNowDate());
-        return dataItemPubMapper.insertDataItemPub(dataItemPub);
-    }
-
-    /**
-     * 淇敼GovReports
-     *
-     * @param dataItemPub GovReports
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateDataItemPub(DataItemPub dataItemPub) {
-        dataItemPub.setUpdateTime(DateUtils.getNowDate());
-        return dataItemPubMapper.updateDataItemPub(dataItemPub);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎GovReports
-     *
-     * @param indexIds 闇�瑕佸垹闄ょ殑GovReportsID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteDataItemPubByIds(String[] indexIds) {
-        return dataItemPubMapper.deleteDataItemPubByIds(indexIds);
-    }
-
-    /**
-     * 鍒犻櫎GovReports淇℃伅
-     *
-     * @param indexId GovReportsID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteDataItemPubById(String indexId) {
-        return dataItemPubMapper.deleteDataItemPubById(indexId);
-    }
-
-    @Override
-    public List<DataItemPub> getReportData(String timeCode, String dateType) {
-        return dataItemPubMapper.getReportData(timeCode, dateType);
-    }
-
-    /**
-     * 鎻掑叆鎴栬�呮洿鏂版暟鎹�
-     **/
-    @Override
-    public int insertOrUpdateDateItemPub(List<DataItemPub> list) {
-        return dataItemPubMapper.insertOrUpdateDateItemPub(list);
-    }
-
-    /**
-     * 鏌ヨGovReports鐨勬樉绀轰俊鎭垪琛�
-     *
-     * @param dataItemPub GovReports
-     * @return GovReports
-     */
-    @Override
-    public List<DataItemPubVo> selectDataItemPubInfoList(DataItemPub dataItemPub) {
-        return dataItemPubMapper.selectDataItemPubInfoList(dataItemPub);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/controller/HomeController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/controller/HomeController.java
deleted file mode 100644
index 6b9d740..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/controller/HomeController.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package com.dingzhuo.energy.project.home.controller;
-
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.home.domain.vo.*;
-import com.dingzhuo.energy.project.home.service.IHomeService;
-import com.dingzhuo.energy.project.system.domain.SysDictData;
-import com.dingzhuo.energy.project.system.service.ISysDictDataService;
-import io.swagger.annotations.ApiOperation;
-import org.apache.commons.collections4.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.stream.Collectors;
-
-
-/**
- * 棣栭〉 鎺у埗灞�
- *
- * @Author: Zhujw
- * @Date: 2023/3/1
- */
-@RestController
-@RequestMapping("/home")
-public class HomeController extends BaseController {
-
-    @Autowired
-    private IHomeService homeService;
-
-    @Autowired
-    private ISysDictDataService dictDataService;
-
-    @GetMapping("/getHomeEnergyConsumptionSummation")
-    @ApiOperation(value = "棣栭〉鑾峰彇鍏ㄥ巶缁煎悎鑳借��", notes = "棣栭〉鑾峰彇鍏ㄥ巶缁煎悎鑳借��")
-    public AjaxResult getHomeenergyConsumptionSummation() {
-        String code = "Home_Equipment";
-        return AjaxResult.success(homeService.geEnergyConsumptionSummation(code));
-    }
-
-    @GetMapping("/getHomeEnergyConsumptionRatio")
-    @ApiOperation(value = "棣栭〉鑾峰彇缁煎悎鑳借�楀崰姣斿垎鏋�", notes = "棣栭〉鑾峰彇缁煎悎鑳借�楀崰姣斿垎鏋�")
-    public AjaxResult getHomeEnergyConsumptionRatio() {
-        // 鍏ㄥ満缁煎悎鑳借�� code
-        String code = "Home_Equipment";
-        List<HomeEnergyConsumptionRatioVO> ratioList = homeService.getHomeEnergyConsumptionRatio(code);
-        return AjaxResult.success(ratioList);
-    }
-
-    @GetMapping("/getHomeEnergyMonitoring")
-    @ApiOperation(value = "棣栭〉鑾峰彇鑳芥簮鍒嗘椂鐩戞祴", notes = "棣栭〉鑾峰彇鑳芥簮鍒嗘椂鐩戞祴")
-    public AjaxResult getHomeEnergyMonitoring(String energyType) {
-        // 鍒嗙被鑳芥簮缁熻code
-        String code  = "Home_TimeMonitoring";
-        HomeEnergyMonitoringHistogramVO vo = homeService.getHomeEnergyMonitoring(code, energyType);
-        return AjaxResult.success(vo);
-    }
-
-    @GetMapping("/getHomeEnergyStatistic")
-    @ApiOperation(value = "棣栭〉鑾峰彇鍒嗙被鑳芥簮缁熻", notes = "棣栭〉鑾峰彇鍒嗙被鑳芥簮缁熻")
-    public AjaxResult getHomeEnergyStatistic() {
-        // 鍒嗙被鑳芥簮缁熻code
-        String code = "Home_Cumulative";
-        List<HomeEnergyStatisticsVO> voList = homeService.getHomeEnergyStatistic(code);
-        return AjaxResult.success(voList);
-    }
-
-    @GetMapping("/getHomeEnergyUnitConsumptionRatio")
-    @ApiOperation(value = "棣栭〉鑾峰彇鑳借�楄澶囧崰姣斾俊鎭�", notes = "棣栭〉鑾峰彇鑳借�楄澶囧崰姣斾俊鎭�")
-    public AjaxResult getHomeEnergyUnitConsumptionRatio() {
-        String code = "Home_Equipment";
-        List<HomeEnergyUnitConsumptionChartVO> voList = homeService.getHomeEnergyUnitConsumptionRatio(code);
-        return AjaxResult.success(voList);
-    }
-
-    @GetMapping("/listEnergyType")
-    @ApiOperation(value = "棣栭〉鑾峰彇鑳芥簮绫诲瀷", notes = "棣栭〉鑾峰彇鑳芥簮绫诲瀷")
-    public AjaxResult listEnergyType() {
-        String dictType = "energy_type";
-        List<SysDictData> energyTypeList = dictDataService.selectDictDataByType(dictType);
-        List<HomeEnergyTypeVO> voList = new ArrayList<>();
-        if (CollectionUtils.isNotEmpty(energyTypeList)) {
-            voList = energyTypeList.stream().map(data-> {
-                HomeEnergyTypeVO vo = new HomeEnergyTypeVO();
-                vo.setEnergy(data.getDictValue());
-                vo.setEnergyName(data.getDictLabel());
-                return vo;
-            }).sorted(Comparator.comparing(HomeEnergyTypeVO::getEnergy)).collect(Collectors.toList());
-        }
-        return AjaxResult.success(voList);
-    }
-
-
-    @GetMapping("/getHomeOutdoorTemperature")
-    @ApiOperation(value = "棣栭〉鑾峰彇瀹ゅ娓╂箍搴�", notes = "棣栭〉鑾峰彇瀹ゅ娓╂箍搴�")
-    public AjaxResult getHomeOutdoorTemperature() {
-        return AjaxResult.success(homeService.getHomeOutdoorTemperature());
-    }
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyConsumptionRatioVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyConsumptionRatioVO.java
deleted file mode 100644
index e655fc0..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyConsumptionRatioVO.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.dingzhuo.energy.project.home.domain.vo;
-
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-/**
- * 棣栭〉缁煎悎鑳借�楀崰姣斿垎鏋愯繑鍥� VO
- *
- * @Author: Zhujw
- * @Date: 2023/3/1
- */
-@Data
-public class HomeEnergyConsumptionRatioVO {
-
-
-    /**
-     * 鑳芥簮绫诲瀷鍚嶇О
-     */
-    private String item;
-
-    /**
-     * 鑳芥簮绫诲瀷
-     */
-    private String energyType;
-
-    /**
-     * 鍗曚綅
-     */
-    private String unit;
-
-    /**
-     * 鍚堣鍊�
-     */
-    private BigDecimal count;
-
-    /**
-     * 鍗犳瘮
-     */
-    private BigDecimal percent;
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyCostRatioVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyCostRatioVO.java
deleted file mode 100644
index 4fb7484..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyCostRatioVO.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.dingzhuo.energy.project.home.domain.vo;
-
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-/**
- * 棣栭〉璐圭敤鍗犳瘮鍒嗘瀽杩斿洖 VO
- *
- * @Author: Zhujw
- * @Date: 2023/3/1
- */
-@Data
-public class HomeEnergyCostRatioVO {
-
-
-    /**
-     * 鑳芥簮绫诲瀷鍚嶇О
-     */
-    private String item;
-
-    /**
-     * 鍚堣鍊�
-     */
-    private BigDecimal count;
-
-    /**
-     * 鍗犳瘮
-     */
-    private BigDecimal percent;
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyDetectionChart.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyDetectionChart.java
deleted file mode 100644
index 75f17f2..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyDetectionChart.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.dingzhuo.energy.project.home.domain.vo;
-
-import java.math.BigDecimal;
-
-
-/**
- * 鑳芥簮妫�娴嬫煴鐘跺浘淇℃伅
- *
- * @Author: Zhujw
- * @Date: 2023/3/1
- */
-public class HomeEnergyDetectionChart {
-
-    /**
-     * 鍚嶇О
-     */
-    private String name;
-
-    /**
-     * 鏃堕棿
-     */
-    private String date;
-
-    /**
-     * 鍊�
-     */
-    private BigDecimal value;
-
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getDate() {
-        return date;
-    }
-
-    public void setDate(String date) {
-        this.date = date;
-    }
-
-    public BigDecimal getValue() {
-        return value;
-    }
-
-    public void setValue(BigDecimal value) {
-        this.value = value;
-    }
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyMonitoringHistogramVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyMonitoringHistogramVO.java
deleted file mode 100644
index 3008170..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyMonitoringHistogramVO.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.dingzhuo.energy.project.home.domain.vo;
-
-import java.util.List;
-
-
-/**
- * 鑳芥簮鐩戞祴鏌辩姸鍥炬暟鎹� VO
- *
- * @Author: Zhujw
- * @Date: 2023/3/1
- */
-//@Data
-public class HomeEnergyMonitoringHistogramVO {
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 鍗曚綅淇℃伅
-     */
-    private String unit;
-
-    /**
-     * 鍥惧舰鏁版嵁
-     */
-    private List<HomeEnergyDetectionChart> chartData;
-
-    public String getUnit() {
-        return unit;
-    }
-
-    public void setUnit(String unit) {
-        this.unit = unit;
-    }
-
-    public List<HomeEnergyDetectionChart> getChartData() {
-        return chartData;
-    }
-
-    public void setChartData(List<HomeEnergyDetectionChart> chartData) {
-        this.chartData = chartData;
-    }
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyStatisticsVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyStatisticsVO.java
deleted file mode 100644
index 154e937..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyStatisticsVO.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.dingzhuo.energy.project.home.domain.vo;
-
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-/**
- * 棣栭〉鑾峰彇鍒嗙被鑳芥簮缁熻杩斿洖 VO
- *
- * @Author: Zhujw
- * @Date: 2023/3/1
- */
-@Data
-public class HomeEnergyStatisticsVO {
-
-
-    /**
-     * 鑳芥簮绫诲瀷鍚嶇О
-     */
-    private String item;
-
-    /**
-     * 鑳芥簮绫诲瀷
-     */
-    private String energyType;
-
-    /**
-     * 鍚堣鍊�
-     */
-    private String count;
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyTypeVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyTypeVO.java
deleted file mode 100644
index a29feec..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyTypeVO.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.dingzhuo.energy.project.home.domain.vo;
-
-
-import lombok.Data;
-
-
-/**
- * 棣栭〉鑳芥簮绫诲瀷杩斿洖vo
- *
- * @Author: Zhujw
- * @Date: 2023/3/2
- */
-@Data
-public class HomeEnergyTypeVO {
-
-    /**
-     * 鑳芥簮绫诲瀷
-     */
-    private String energy;
-
-    /**
-     * 鑳芥簮绫诲瀷鍚嶇О
-     */
-    private String energyName;
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyUnitConsumptionChartVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyUnitConsumptionChartVO.java
deleted file mode 100644
index 9771f9b..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeEnergyUnitConsumptionChartVO.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.dingzhuo.energy.project.home.domain.vo;
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-
-/**
- * 棣栭〉鑾峰彇鑳借�楄澶囧崰姣� 杩斿洖 vo
- *
- * @Author: Zhujw
- * @Date: 2023/3/1
- */
-@Data
-public class HomeEnergyUnitConsumptionChartVO {
-
-    /**
-     * 鍚嶇О
-     */
-    private String name;
-
-    /**
-     * 鍗曚綅
-     */
-    private String unit;
-
-    /**
-     * 鍊�
-     */
-    private BigDecimal value;
-
-    /**
-     * 鍚堣鍊�
-     */
-    private BigDecimal total;
-
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeOutdoorTemperatureVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeOutdoorTemperatureVO.java
deleted file mode 100644
index 7aa6ed7..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/domain/vo/HomeOutdoorTemperatureVO.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.dingzhuo.energy.project.home.domain.vo;
-
-
-import lombok.Data;
-
-/**
- * 棣栭〉瀹ゅ娓╁害杩斿洖 VO
- */
-@Data
-public class HomeOutdoorTemperatureVO {
-
-
-    /**
-     * 娓╁害
-     */
-    private String temperature = "--";
-
-    /**
-     * 婀垮害
-     */
-    private String humidity = "--";
-
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/service/IHomeService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/service/IHomeService.java
deleted file mode 100644
index 0b9a73f..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/service/IHomeService.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.dingzhuo.energy.project.home.service;
-
-import com.dingzhuo.energy.project.home.domain.vo.*;
-
-import java.math.BigDecimal;
-import java.util.List;
-
-/**
- * 棣栭〉  鎺ュ彛灞�
- *
- * @Author: Zhujw
- * @Date: 2023/3/1
- */
-public interface IHomeService {
-
-    /**
-     * 棣栭〉鑾峰彇鍏ㄥ巶缁煎悎鑳借��
-     *
-     * @return
-     */
-    BigDecimal geEnergyConsumptionSummation(String code);
-
-
-    /**
-     * 棣栭〉鑾峰彇缁煎悎鑳借�楀崰姣斿垎鏋�
-     *
-     * @param code 鏌ヨ缂栧彿
-     * @return
-     */
-    List<HomeEnergyConsumptionRatioVO> getHomeEnergyConsumptionRatio(String code);
-
-    /**
-     * 棣栭〉鑾峰彇鍒嗙被鑳芥簮缁熻
-     *
-     * @param code 鏌ヨ缂栧彿
-     * @return
-     */
-    List<HomeEnergyStatisticsVO> getHomeEnergyStatistic(String code);
-
-    /**
-     * 棣栭〉鑾峰彇鑳芥簮鍒嗘椂鐩戞祴
-     *
-     * @param code       鏌ヨ缂栧彿
-     * @param energyType 鑳芥簮绫诲瀷
-     * @return
-     */
-    HomeEnergyMonitoringHistogramVO getHomeEnergyMonitoring(String code, String energyType);
-
-    /**
-     * 棣栭〉鑾峰彇鑳借�楄澶囧崰姣斾俊鎭�
-     *
-     * @param code 鏌ヨ缂栧彿
-     * @return
-     */
-    List<HomeEnergyUnitConsumptionChartVO> getHomeEnergyUnitConsumptionRatio(String code);
-
-    /**
-     * 棣栭〉鑾峰彇瀹ゅ娓╂箍搴�
-     *
-     * @return 缁撴灉
-     */
-    HomeOutdoorTemperatureVO getHomeOutdoorTemperature();
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/service/impl/HomeServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/service/impl/HomeServiceImpl.java
deleted file mode 100644
index 75f47a2..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/home/service/impl/HomeServiceImpl.java
+++ /dev/null
@@ -1,369 +0,0 @@
-package com.dingzhuo.energy.project.home.service.impl;
-
-import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUtil;
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.domain.vo.ModelNodeIndexInfor;
-import com.dingzhuo.energy.data.model.service.IEnergyIndexService;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.data.RealtimeDatabaseManager;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.dataservice.domain.TagValue;
-import com.dingzhuo.energy.project.common.CommonConst;
-import com.dingzhuo.energy.project.dataEntry.service.IDataItemService;
-import com.dingzhuo.energy.project.home.domain.vo.*;
-import com.dingzhuo.energy.project.home.service.IHomeService;
-import com.dingzhuo.energy.project.system.domain.SysDictData;
-import com.dingzhuo.energy.project.system.service.ISysDictDataService;
-import lombok.AllArgsConstructor;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.ObjectUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.*;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.stream.Collectors;
-
-
-/**
- * 棣栭〉   鎺ュ彛瀹炵幇灞�
- *
- * @Author: Zhujw
- * @Date: 2023/3/1
- */
-@Service
-@AllArgsConstructor
-public class HomeServiceImpl implements IHomeService {
-
-
-    private final IDataItemService dataItemService;
-
-    private final IModelNodeService modelNodeService;
-
-    private final ISysDictDataService dictDataService;
-
-    private final IEnergyIndexService energyIndexService;
-
-    private RealtimeDatabaseManager realtimeDatabaseManager;
-
-
-    /**
-     * 棣栭〉鑾峰彇鍏ㄥ巶缁煎悎鑳借��
-     *
-     * @return
-     */
-    @Override
-    public BigDecimal geEnergyConsumptionSummation(String code) {
-        // 鑾峰彇鏌ヨ鏃堕棿
-        String timeCode = TimeManager.getTimeCode(DateUtil.date(), TimeType.DAY);
-        // 閫氳繃code鑾峰彇modelnode瀵瑰簲indexId淇℃伅
-        List<String> indexIds = modelNodeService.listIndexIdsByModelCode(code);
-        if (CollectionUtils.isEmpty(indexIds)) {
-            return BigDecimal.ZERO;
-        }
-        // 閫氳繃indexIds鎵綿ata_Item鏁版嵁
-        List<DataItem> itemList = dataItemService.getDataItemInforByIndexIds(timeCode, indexIds);
-        // 杞瑃ce鍊嶇巼
-        BigDecimal multiple = BigDecimal.valueOf(CommonConst.DIGIT_1000);
-        double sum = itemList.stream().mapToDouble(DataItem::getValue).sum();
-        return BigDecimal.valueOf(sum).divide(multiple, CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-    }
-
-    /**
-     * 棣栭〉鑾峰彇缁煎悎鑳借�楀崰姣斿垎鏋�
-     *
-     * @param code 鏌ヨ缂栧彿
-     * @return
-     */
-    @Override
-    public List<HomeEnergyConsumptionRatioVO> getHomeEnergyConsumptionRatio(String code) {
-        List<HomeEnergyConsumptionRatioVO> ratioVOList = new ArrayList<>();
-        // 鏌ヨ瀛楀吀鑾峰彇鎵�鏈夎兘婧愬悕瀛�
-        List<SysDictData> energyTypeDictist = dictDataService.selectDictDataByType("energy_type");
-        energyTypeDictist.forEach(energyType -> {
-            HomeEnergyConsumptionRatioVO ratioVO = new HomeEnergyConsumptionRatioVO();
-            ratioVO.setItem(energyType.getDictLabel());
-            ratioVO.setEnergyType(energyType.getDictValue());
-            ratioVOList.add(ratioVO);
-        });
-        // 閫氳繃code鑾峰彇modelnode瀵瑰簲index淇℃伅
-        List<String> indexIds = modelNodeService.listIndexIdsByModelCode(code);
-        if (CollectionUtils.isEmpty(indexIds)) {
-            return ratioVOList;
-        }
-        // 鑾峰彇鏌ヨ鏃堕棿
-        String timeCode = TimeManager.getTimeCode(DateUtil.date(), TimeType.DAY);
-        // 閫氳繃indexIds鎵綿ata_Item鏁版嵁
-        List<DataItem> itemList = dataItemService.getDataItemInforByIndexIds(timeCode, indexIds);
-        // 杞瑃ce鍊嶇巼
-        BigDecimal multiple = BigDecimal.valueOf(CommonConst.DIGIT_1000);
-        // 鎬诲悎璁″��
-        double sum = itemList.stream().mapToDouble(DataItem::getValue).sum();
-        BigDecimal totalValue = BigDecimal.valueOf(sum).divide(multiple, CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-        // 鏌ヨ鐐逛綅璇︾粏淇℃伅
-        List<EnergyIndex> energyIndexInforList = energyIndexService.getEnergyIndexByIds(indexIds);
-        // 鑾峰彇鐐逛綅鑳芥簮绫诲瀷
-        Map<String, List<String>> energyTypeMap = energyIndexInforList.stream()
-                .filter(l -> StringUtils.isNotEmpty(l.getEnergyId()))
-                .collect(Collectors.groupingBy(
-                        EnergyIndex::getEnergyId, Collectors.mapping(EnergyIndex::getIndexId, Collectors.toList())
-                ));
-        AtomicReference<BigDecimal> totalRatio = new AtomicReference<>(BigDecimal.ZERO);
-        for (HomeEnergyConsumptionRatioVO ratioVO : ratioVOList) {
-            List<String> indexs = energyTypeMap.get(ratioVO.getEnergyType());
-            ratioVO.setUnit("tce");
-            if (CollectionUtils.isEmpty(indexs)) {
-                continue;
-            }
-            // 鎵惧埌鍚堣鍊�
-            double doubleCount = itemList.stream().filter(li -> indexs.contains(li.getIndexId())).mapToDouble(DataItem::getValue).sum();
-            BigDecimal count = BigDecimal.valueOf(doubleCount).divide(multiple, CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-            BigDecimal ratio = BigDecimal.ZERO;
-            if (totalValue.compareTo(BigDecimal.ZERO) != 0 || count.compareTo(BigDecimal.ZERO) != 0) {
-                // 璁$畻姣斾緥
-                ratio = count.divide(totalValue, CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-                // 瓒呰繃1鍒欑敤1鍓帀
-                if (totalRatio.get().add(ratio).compareTo(BigDecimal.ONE) > 0) {
-                    ratio = BigDecimal.ONE.subtract(totalRatio.get());
-                }
-            }
-            ratioVO.setCount(count);
-            ratioVO.setPercent(ratio);
-            totalRatio.set(totalRatio.get().add(ratio));
-        }
-        return ratioVOList;
-    }
-
-    /**
-     * 棣栭〉鑾峰彇鍒嗙被鑳芥簮缁熻
-     *
-     * @param code 鏌ヨ缂栧彿
-     * @return
-     */
-    @Override
-    public List<HomeEnergyStatisticsVO> getHomeEnergyStatistic(String code) {
-        List<HomeEnergyStatisticsVO> voList;
-        // 鏌ヨ瀛楀吀鑾峰彇鎵�鏈夎兘婧愬悕瀛�
-        List<SysDictData> energyTypeDictist = dictDataService.selectDictDataByType("energy_type");
-        voList = energyTypeDictist.stream().map(dict -> {
-            HomeEnergyStatisticsVO vo = new HomeEnergyStatisticsVO();
-            vo.setItem(dict.getDictLabel());
-            vo.setEnergyType(dict.getDictValue());
-            return vo;
-        }).sorted(Comparator.comparing(HomeEnergyStatisticsVO::getEnergyType)).collect(Collectors.toList());
-        // 閫氳繃code鑾峰彇modelnode瀵瑰簲index淇℃伅
-        ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(code);
-        if (ObjectUtils.isEmpty(modelNode)) {
-            return voList;
-        }
-        List<ModelNodeIndexInfor> inforList = modelNodeService.getModelNodeIndexIdRelationInforByNodeId(modelNode.getNodeId());
-        List<String> indexIds = inforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-        // 鑾峰彇鏌ヨ鏃堕棿
-        Date beginTime = DateUtil.beginOfDay(DateUtil.date());
-        Date endTime = DateUtil.endOfDay(beginTime);
-        // 閫氳繃indexIds鎵綿ata_Item鏁版嵁
-        List<DataItem> itemList = dataItemService.getDataItemHourInforByIndexIds(beginTime, endTime, TimeType.HOUR.name(), indexIds);
-        // 鏌ヨ鐐逛綅璇︾粏淇℃伅
-        List<EnergyIndex> energyIndexInforList = energyIndexService.getEnergyIndexByIds(indexIds);
-        // 鑾峰彇鐐逛綅鑳芥簮绫诲瀷
-        Map<String, List<String>> energyTypeMap = energyIndexInforList.stream()
-                .filter(l -> StringUtils.isNotEmpty(l.getEnergyId())).collect(Collectors.groupingBy(
-                        EnergyIndex::getEnergyId, Collectors.mapping(EnergyIndex::getIndexId, Collectors.toList())
-                ));
-        for (HomeEnergyStatisticsVO vo : voList) {
-            List<String> value = energyTypeMap.get(vo.getEnergyType());
-            if (CollectionUtils.isEmpty(value)) {
-                continue;
-            }
-            // 鎵惧埌鍚堣鍊�
-            double doubleCount = itemList.stream().filter(li -> value.contains(li.getIndexId())).mapToDouble(DataItem::getValue).sum();
-
-            BigDecimal count = BigDecimal.valueOf(doubleCount).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-            switch (vo.getEnergyType()) {
-                case "electric":
-                    vo.setCount(count + "KWh");
-                    break;
-//                case "water":
-                default:
-                    vo.setCount(count + "m鲁");
-                    break;
-            }
-        }
-        return voList;
-    }
-
-    /**
-     * 棣栭〉鑾峰彇鑳芥簮鍒嗘椂鐩戞祴
-     *
-     * @param code       鏌ヨ缂栧彿
-     * @param energyType 鑳芥簮绫诲瀷
-     * @return
-     */
-    @Override
-    public HomeEnergyMonitoringHistogramVO getHomeEnergyMonitoring(String code, String energyType) {
-        HomeEnergyMonitoringHistogramVO vo = new HomeEnergyMonitoringHistogramVO();
-        // 閫氳繃code鑾峰彇modelnode瀵瑰簲index淇℃伅
-        List<String> indexIds = modelNodeService.listIndexIdsByModelCode(code);
-        if (CollectionUtils.isEmpty(indexIds)) {
-            return vo;
-        }
-        // 鏌ヨ鐐逛綅璇︾粏淇℃伅
-        List<EnergyIndex> energyIndexInforList = energyIndexService.getEnergyIndexByIds(indexIds);
-        if (StringUtils.isNotEmpty(energyType)) {
-            energyIndexInforList = energyIndexInforList.stream().filter(li -> energyType.equals(li.getEnergyId()))
-                    .collect(Collectors.toList());
-            indexIds = energyIndexInforList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-            if (CollectionUtils.isEmpty(indexIds)) {
-                return vo;
-            }
-        }
-        Optional<EnergyIndex> first = energyIndexInforList.stream().filter(li -> StringUtils.isNotEmpty(li.getUnitId()))
-                .findFirst();
-        first.ifPresent(energyIndex -> vo.setUnit(energyIndex.getUnitId()));
-        // 鑾峰彇鏌ヨ鏃堕棿
-        DateTime beginTime = DateUtil.beginOfDay(DateUtil.date());
-        DateTime endTime = DateUtil.endOfDay(beginTime);
-        // 瀵规瘮鏌ヨ鏃堕棿
-        DateTime lastBeginTime = DateUtil.offsetDay(beginTime, -1);
-        DateTime lastEndTime = DateUtil.offsetDay(endTime, -1);
-        // 閫氳繃indexIds鎵綿ata_Item鏁版嵁
-        String timeType = TimeType.HOUR.name();
-        List<DataItem> itemList = dataItemService.getDataItemHourInforByIndexIds(beginTime, endTime, timeType, indexIds);
-        List<DataItem> lastItemList = dataItemService.getDataItemHourInforByIndexIds(lastBeginTime, lastEndTime, timeType, indexIds);
-        // 鎸夋椂闂村垎缁�
-        Map<String, List<DataItem>> timeValueMap = new HashMap<>();
-        Map<String, List<DataItem>> lastTimeValueMap = new HashMap<>();
-        if (CollectionUtils.isNotEmpty(itemList)) {
-            timeValueMap = itemList.stream().collect(Collectors.groupingBy(li -> DateUtil.format(li.getDataTime(), "yyyy-MM-dd HH")));
-        }
-        if (CollectionUtils.isNotEmpty(lastItemList)) {
-            lastTimeValueMap = lastItemList.stream().collect(Collectors.groupingBy(li -> DateUtil.format(li.getDataTime(), "yyyy-MM-dd HH")));
-        }
-        List<HomeEnergyDetectionChart> chartList = new ArrayList<>();
-        // 閬嶅巻鐢熸垚淇℃伅
-        while (beginTime.isBefore(endTime)) {
-            HomeEnergyDetectionChart chart = new HomeEnergyDetectionChart();
-            String name = DateUtil.formatDate(beginTime);
-            chart.setName(name);
-            String date = DateUtil.format(beginTime, "HH:mm");
-            chart.setDate(date);
-            String format = DateUtil.format(beginTime, "yyyy-MM-dd HH");
-            // 姹傚拰
-            BigDecimal total = BigDecimal.ZERO;
-            List<DataItem> dataItemList = timeValueMap.get(format);
-            if (CollectionUtils.isNotEmpty(dataItemList)) {
-                total = BigDecimal.valueOf(dataItemList.stream().mapToDouble(DataItem::getValue).sum());
-            }
-            chart.setValue(total.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP));
-            // 瀵规瘮鍊�
-            HomeEnergyDetectionChart lastChart = new HomeEnergyDetectionChart();
-            String lastName = DateUtil.formatDate(lastBeginTime);
-            lastChart.setName(lastName);
-            String lastDate = DateUtil.format(lastBeginTime, "HH:mm");
-            lastChart.setDate(lastDate);
-            // 姹傚拰
-            String lastFormat = DateUtil.format(lastBeginTime, "yyyy-MM-dd HH");
-            BigDecimal lastTotal = BigDecimal.ZERO;
-            List<DataItem> lastDataItemList = lastTimeValueMap.get(lastFormat);
-            if (CollectionUtils.isNotEmpty(lastDataItemList)) {
-                lastTotal = BigDecimal.valueOf(lastDataItemList.stream().mapToDouble(DataItem::getValue).sum());
-            }
-            lastChart.setValue(lastTotal.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP));
-            chartList.add(chart);
-            chartList.add(lastChart);
-            beginTime = DateUtil.offsetHour(beginTime, 1);
-            lastBeginTime = DateUtil.offsetHour(lastBeginTime, 1);
-        }
-        vo.setChartData(chartList);
-        return vo;
-    }
-
-    /**
-     * 棣栭〉鑾峰彇鑳借�楄澶囧崰姣斾俊鎭�
-     *
-     * @param code 鏌ヨ缂栧彿
-     * @return
-     */
-    @Override
-    public List<HomeEnergyUnitConsumptionChartVO> getHomeEnergyUnitConsumptionRatio(String code) {
-        List<HomeEnergyUnitConsumptionChartVO> chartVOList = new ArrayList<>();
-        // 閫氳繃code鑾峰彇modelnode瀵瑰簲index淇℃伅
-        List<ModelNodeIndexInfor> inforList = modelNodeService.getModelNodeIndexIdRelationInforByCode(code);
-        if (CollectionUtils.isEmpty(inforList)) {
-            return chartVOList;
-        }
-        // 鑾峰彇鏃堕棿缂栫爜
-        String timeCode = TimeManager.getTimeCode(DateUtil.date(), TimeType.DAY);
-        List<String> indexIds = inforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-        // 杞瑃ce鍊嶇巼
-        BigDecimal multiple = BigDecimal.valueOf(CommonConst.DIGIT_1000);
-        // 鏍规嵁鐐逛綅id鏌ヨdataitem
-        List<DataItem> dataItemList = dataItemService.getDataItemInforByIndexIds(timeCode, indexIds);
-        // 鍚堣鍊�
-        double totalSum = dataItemList.stream().mapToDouble(DataItem::getValue).sum();
-        BigDecimal totalValue = BigDecimal.valueOf(totalSum).divide(multiple, CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-        // 鏍规嵁鐢ㄨ兘鍗曞厓id鍒嗙粍
-        Map<String, List<ModelNodeIndexInfor>> nodeMap = inforList.stream().collect(Collectors.groupingBy(ModelNodeIndexInfor::getNodeId));
-        nodeMap.forEach((key, value) -> {
-            HomeEnergyUnitConsumptionChartVO chartVO = new HomeEnergyUnitConsumptionChartVO();
-            // 璁剧疆鍚嶅瓧
-            Optional<ModelNodeIndexInfor> first = value.stream().findFirst();
-            first.ifPresent(modelNodeIndexInfor -> chartVO.setName(modelNodeIndexInfor.getName()));
-            // 璁剧疆褰撳墠鍊�
-            List<String> indexIdList = value.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-            double sum = dataItemList.stream().filter(li -> indexIdList.contains(li.getIndexId())).mapToDouble(DataItem::getValue).sum();
-            BigDecimal energyValue = BigDecimal.valueOf(sum).divide(multiple, CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-            chartVO.setValue(energyValue);
-            chartVO.setUnit("tce");
-            // 璁剧疆鍚堣鍊�
-            chartVO.setTotal(totalValue);
-            chartVOList.add(chartVO);
-        });
-        return chartVOList;
-    }
-
-    /**
-     * 棣栭〉鑾峰彇瀹ゅ娓╂箍搴�
-     *
-     * @return 缁撴灉
-     */
-    @Override
-    public HomeOutdoorTemperatureVO getHomeOutdoorTemperature() {
-
-        HomeOutdoorTemperatureVO outdoorTemperatureVO = new HomeOutdoorTemperatureVO();
-
-        String code = "Outside_Temperature";
-        // 閫氳繃code鑾峰彇modelnode瀵瑰簲index淇℃伅
-        List<ModelNodeIndexInfor> infoList = modelNodeService.getModelNodeIndexIdRelationInforByCode(code);
-        if (CollectionUtils.isEmpty(infoList)) {
-            return outdoorTemperatureVO;
-        }
-
-        List<String> indexIds = infoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-
-        List<EnergyIndex> energyIndexList = energyIndexService.selectEnergyIndexByIds(indexIds);
-        List<String> codeList = energyIndexList.stream().map(EnergyIndex::getCode).collect(Collectors.toList());
-
-        List<TagValue> tagValueList = realtimeDatabaseManager.retrieve(codeList);
-
-        if (CollectionUtils.isNotEmpty(tagValueList)) {
-            for (TagValue tagValue : tagValueList) {
-                double value = tagValue.getValue() * 0.1;
-                if (tagValue.getTagCode().endsWith("SD")) {
-                    outdoorTemperatureVO.setHumidity(String.format("%.2f",value) + CommonConst.PERCENTAGE);
-                } else {
-                    outdoorTemperatureVO.setTemperature(String.format("%.2f",value) + CommonConst.UNIT_TEMPERATURE);
-                }
-            }
-        }
-
-        return outdoorTemperatureVO;
-    }
-
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/controller/dailyKeyEquipmenteController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/controller/dailyKeyEquipmenteController.java
deleted file mode 100644
index 586f1c1..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/controller/dailyKeyEquipmenteController.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package com.dingzhuo.energy.project.keyEquipment.controller;
-import com.dingzhuo.energy.basic.data.facility.domain.FacilityArchives;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.keyEquipment.domain.dailyKeyEquipment;
-import com.dingzhuo.energy.project.keyEquipment.service.IdailyKeyEquipmentService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.commons.collections.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- *閲嶇偣璁惧鑳借�楃粺璁� 鏃�
- *
- * @author sys
- * @date 2021-01-11
- */
-@RestController
-@RequestMapping("/keyEquipment/dailyKeyEquipment")
-@Api(value = "閲嶇偣璁惧鑳借�楃粺璁★紙鏃ワ級",tags = {"璁惧鍗曡�楀垎鏋�"})
-public class dailyKeyEquipmenteController extends BaseController {
-
-    @Autowired
-    private IModelNodeService modelNodeService;
-    @Autowired
-    private IdailyKeyEquipmentService dailykeyEquipment;
-
-    @GetMapping("/list")
-    @ApiOperation(value = "閲嶇偣璁惧鑳借�楀垎鏋愶紙鏃ワ級鍒楄〃")
-    public TableDataInfo list(DataItem dataItem) throws ParseException {
-        List<ModelNode> nodeId = modelNodeService.getModelNodeByModelCode(dataItem.getIndexCode());
-        if(CollectionUtils.isEmpty(nodeId)){
-            return getDataTable(new ArrayList<>());
-        }
-        List<EnergyIndex> energyList = modelNodeService.getSettingIndex(nodeId.get(0).getNodeId());
-        if(CollectionUtils.isEmpty(energyList)){
-            return getDataTable(new ArrayList<>());
-        }
-        List<String> indexIds = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        List<dailyKeyEquipment> dataList=new ArrayList<>();
-        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String aa= df.format(dataItem.getDataTime());
-        String bb="";
-        int i = 0;
-        dataItem.setBeginTime(dataItem.getDataTime());
-        String endTime=aa+" 24:00:00";
-        dataItem.setEndTime(sf.parse(endTime));
-        while (i < 24) {
-            if(i>9){
-                bb=aa+" "+i+":00:00";
-            }else{
-                bb=aa+" 0"+i+":00:00";
-            }
-            dailyKeyEquipment report=new dailyKeyEquipment();
-            report.setDataTime(sf.parse(bb));
-            report.setValue("value"+i);
-            dataList.add(report);
-            i++;
-        };
-        startPage();
-        List<dailyKeyEquipment> list = dailykeyEquipment.getdailyKeyEquipmentList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-        //return AjaxResult.success(list);
-        return getDataTable(list);
-    }
-
-    @GetMapping("/listChart")
-    @ApiOperation(value = "閲嶇偣璁惧鑳借�楀垎鏋愶紙鏃ワ級鍥捐〃")
-    public AjaxResult listChart(DataItem dataItem) throws ParseException {
-        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String aa= df.format(dataItem.getDataTime());
-        dataItem.setBeginTime(dataItem.getDataTime());
-        String endTime=aa+" 24:00:00";
-        dataItem.setEndTime(sf.parse(endTime));
-        List<dailyKeyEquipment> list = dailykeyEquipment.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-        return AjaxResult.success(list);
-    }
-    /*鎵�鏈夎澶�*/
-    @GetMapping("/getFacilityArchives")
-    @ApiOperation(value = "鏌ヨ鎵�鏈夎澶囧垪琛�")
-    public AjaxResult getFacilityArchives() {
-        try {
-            List<FacilityArchives> list=dailykeyEquipment.getFacilityArchives();
-            return AjaxResult.success(list);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇璁惧鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鏍囬鍑洪敊!");
-        }
-    }
-
-    /**
-     * 閲嶇偣鑳借�楄澶�
-     * @return
-     */
-    @GetMapping("/getPointFacility")
-    @ApiOperation(value = "鏌ヨ閲嶇偣璁惧鍒楄〃")
-    public AjaxResult getPointFacility() {
-        try {
-            List<FacilityArchives> list=dailykeyEquipment.getPointFacility();
-            return AjaxResult.success(list);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇璁惧鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鏍囬鍑洪敊!");
-        }
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/controller/monthlyKeyEquipmentController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/controller/monthlyKeyEquipmentController.java
deleted file mode 100644
index 1db350b..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/controller/monthlyKeyEquipmentController.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.dingzhuo.energy.project.keyEquipment.controller;
-
-import com.dingzhuo.energy.common.constant.HttpStatus;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.keyEquipment.domain.monthlyKeyEquipment;
-import com.dingzhuo.energy.project.keyEquipment.service.ImonthlyKeyEquipmentService;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.commons.collections.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- *閲嶇偣璁惧鑳借�楃粺璁� 鏈�
- *
- * @author sys
- * @date 2021-01-11
- */
-@RestController
-@RequestMapping("/keyEquipment/monthlyKeyEquipment")
-@Api(value = "閲嶇偣璁惧鑳借�楃粺璁★紙鏈堬級",tags = {"璁惧鍗曡�楀垎鏋�"})
-public class monthlyKeyEquipmentController extends BaseController {
-
-    @Autowired
-    private IModelNodeService modelNodeService;
-    @Autowired
-    private ImonthlyKeyEquipmentService monthlyKeyEquipment;
-
-    @GetMapping("/list")
-    @ApiOperation(value = "閲嶇偣璁惧鑳借�楃粺璁★紙鏈堬級鍒楄〃")
-    public AjaxResult list(DataItem dataItem) {
-        try {
-            List<monthlyKeyEquipment> dataList=new ArrayList<>();
-
-            Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
-            DateFormat df = new SimpleDateFormat("yyyy-MM");
-            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            String aa= df.format(dataItem.getDataTime());
-            String bb="";
-            int i = 1;
-            String beginTime=aa+"-01 00:00:00";
-            dataItem.setBeginTime(sf.parse(beginTime));
-            String endTime=aa+"-"+Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))+" 00:00:00";
-            dataItem.setEndTime(sf.parse(endTime));
-            while (i <= Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))) {
-                if(i>9){
-                    bb=aa+"-"+i+" 00:00:00";
-                }else{
-                    bb=aa+"-0"+i+" 00:00:00";
-                }
-                monthlyKeyEquipment report=new monthlyKeyEquipment();
-                report.setDataTime(sf.parse(bb));
-                report.setValue("value"+i);
-                dataList.add(report);
-                tableColumn.put("value"+i,String.valueOf(i)+"鏃�");
-                i++;
-            }
-            List<Map> table=new ArrayList<>();
-            monthlyKeyEquipment reportList =new  monthlyKeyEquipment();
-            table.add(tableColumn);
-            reportList.setTablehead(table);
-            List<ModelNode> nodeId = modelNodeService.getModelNodeByModelCode(dataItem.getIndexCode());
-            if(CollectionUtils.isEmpty(nodeId)){
-                return AjaxResult.success(reportList);
-            }
-            List<EnergyIndex> energyList = modelNodeService.getSettingIndex(nodeId.get(0).getNodeId());
-            if(CollectionUtils.isEmpty(energyList)){
-                return AjaxResult.success(reportList);
-            }
-            List<String> indexIds = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-
-            startPage();
-            List<monthlyKeyEquipment> list = monthlyKeyEquipment.getMonthlyKeyEquipmentList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-            int count=Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2));
-            list.forEach(monthlyReport -> monthlyReport.setCount(count));
-            reportList.setTabledata(list);
-            reportList.setTotal(new PageInfo(list).getTotal());
-
-            return AjaxResult.success(reportList);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍑洪敊!");
-        }
-    }
-
-    @GetMapping("/listChart")
-    @ApiOperation(value = "閲嶇偣璁惧鑳借�楃粺璁★紙鏈堬級鍥捐〃")
-    public AjaxResult listChart(DataItem dataItem) throws ParseException {
-        DateFormat df = new SimpleDateFormat("yyyy-MM");
-        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String aa= df.format(dataItem.getDataTime());
-        String beginTime=aa+"-01 00:00:00";
-        dataItem.setBeginTime(sf.parse(beginTime));
-        String endTime=aa+"-"+Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))+" 00:00:00";
-        dataItem.setEndTime(sf.parse(endTime));
-        List<monthlyKeyEquipment> list = monthlyKeyEquipment.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-        return AjaxResult.success(list);
-    }
-    public static String getLastDayOfMonth(String yearMonth) {
-        int year = Integer.parseInt(yearMonth.split("-")[0]);  //骞�
-        int month = Integer.parseInt(yearMonth.split("-")[1]); //鏈�
-        Calendar cal = Calendar.getInstance();
-        // 璁剧疆骞翠唤
-        cal.set(Calendar.YEAR, year);
-        // 璁剧疆鏈堜唤
-        // cal.set(Calendar.MONTH, month - 1);
-        cal.set(Calendar.MONTH, month); //璁剧疆褰撳墠鏈堢殑涓婁竴涓湀
-        // 鑾峰彇鏌愭湀鏈�澶уぉ鏁�
-        //int lastDay = cal.getActualMaximum(Calendar.DATE);
-        int lastDay = cal.getMinimum(Calendar.DATE); //鑾峰彇鏈堜唤涓殑鏈�灏忓�硷紝鍗崇涓�澶�
-        // 璁剧疆鏃ュ巻涓湀浠界殑鏈�澶уぉ鏁�
-        //cal.set(Calendar.DAY_OF_MONTH, lastDay);
-        cal.set(Calendar.DAY_OF_MONTH, lastDay - 1); //涓婃湀鐨勭涓�澶╁噺鍘�1灏辨槸褰撴湀鐨勬渶鍚庝竴澶�
-        // 鏍煎紡鍖栨棩鏈�
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-        return sdf.format(cal.getTime());
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/controller/yearKeyEquipmentController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/controller/yearKeyEquipmentController.java
deleted file mode 100644
index 6ffaf85..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/controller/yearKeyEquipmentController.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.dingzhuo.energy.project.keyEquipment.controller;
-
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.keyEquipment.domain.yearKeyEquipment;
-import com.dingzhuo.energy.project.keyEquipment.service.IyearKeyEquipmentService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.commons.collections.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- *閲嶇偣璁惧鑳借�楃粺璁� 骞�
- *
- * @author sys
- * @date 2021-01-11
- */
-@RestController
-@RequestMapping("/keyEquipment/yearKeyEquipment")
-@Api(value = "閲嶇偣璁惧鑳借�楃粺璁★紙骞达級",tags = {"璁惧鍗曡�楀垎鏋�"})
-public class yearKeyEquipmentController extends BaseController {
-
-    @Autowired
-    private IModelNodeService modelNodeService;
-    @Autowired
-    private IyearKeyEquipmentService yearKeyEquipment;
-
-    @GetMapping("/list")
-    @ApiOperation(value = "閲嶇偣璁惧鑳借�楃粺璁★紙骞达級鍒楄〃")
-    public TableDataInfo list(DataItem dataItem) throws ParseException {
-        List<ModelNode> nodeId = modelNodeService.getModelNodeByModelCode(dataItem.getIndexCode());
-        if(CollectionUtils.isEmpty(nodeId)){
-            return getDataTable(new ArrayList<>());
-        }
-        List<EnergyIndex> energyList = modelNodeService.getSettingIndex(nodeId.get(0).getNodeId());
-        if(CollectionUtils.isEmpty(energyList)){
-            return getDataTable(new ArrayList<>());
-        }
-        List<String> indexIds = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        List<yearKeyEquipment> dataList=new ArrayList<>();
-        DateFormat df = new SimpleDateFormat("yyyy");
-        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String aa= df.format(dataItem.getBeginTime());
-        String bb="";
-        int i = 1;
-        while (i <= 12) {
-            if(i>9){
-                bb=aa+"-"+i+"-01 00:00:00";
-            }else{
-                bb=aa+"-0"+i+"-01 00:00:00";
-            }
-            yearKeyEquipment report=new yearKeyEquipment();
-            report.setDataTime(sf.parse(bb));
-            report.setValue("value"+i);
-            dataList.add(report);
-            i++;
-        }
-        startPage();
-        List<yearKeyEquipment> list = yearKeyEquipment.getYearKeyEquipmentList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-        return getDataTable(list);
-    }
-
-    @GetMapping("/listChart")
-    @ApiOperation(value = "閲嶇偣璁惧鑳借�楃粺璁★紙骞达級鍥捐〃")
-    public AjaxResult listChart(DataItem dataItem){
-        List<yearKeyEquipment> list = yearKeyEquipment.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-        return AjaxResult.success(list);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/domain/dailyKeyEquipment.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/domain/dailyKeyEquipment.java
deleted file mode 100644
index 19e4d27..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/domain/dailyKeyEquipment.java
+++ /dev/null
@@ -1,323 +0,0 @@
-package com.dingzhuo.energy.project.keyEquipment.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-/**
- *閲嶇偣璁惧鑳借�楃粺璁� 鏃�
- *
- * @author sys
- * @date 2021-01-11
- */
-public class dailyKeyEquipment implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private String indexId;
-    @Excel(name = "鎸囨爣鍚嶇О")
-    private String indexName;
-    private String value;
-    private Date dataTime;
-    private String timeType;
-    private String timeCode;
-    private String unitId;
-    @Excel(name = "1鏃�")
-    private Double value1;
-    @Excel(name = "2鏃�")
-    private Double value2;
-    @Excel(name = "3鏃�")
-    private Double value3;
-    @Excel(name = "4鏃�")
-    private Double value4;
-    @Excel(name = "5鏃�")
-    private Double value5;
-    @Excel(name = "6鏃�")
-    private Double value6;
-    @Excel(name = "7鏃�")
-    private Double value7;
-    @Excel(name = "8鏃�")
-    private Double value8;
-    @Excel(name = "9鏃�")
-    private Double value9;
-    @Excel(name = "10鏃�")
-    private Double value10;
-    @Excel(name = "11鏃�")
-    private Double value11;
-    @Excel(name = "12鏃�")
-    private Double value12;
-    @Excel(name = "13鏃�")
-    private Double value13;
-    @Excel(name = "14鏃�")
-    private Double value14;
-    @Excel(name = "15鏃�")
-    private Double value15;
-    @Excel(name = "16鏃�")
-    private Double value16;
-    @Excel(name = "17鏃�")
-    private Double value17;
-    @Excel(name = "18鏃�")
-    private Double value18;
-    @Excel(name = "19鏃�")
-    private Double value19;
-    @Excel(name = "20鏃�")
-    private Double value20;
-    @Excel(name = "21鏃�")
-    private Double value21;
-    @Excel(name = "22鏃�")
-    private Double value22;
-    @Excel(name = "23鏃�")
-    private Double value23;
-    @Excel(name = "0鏃�")
-    private Double value0;
-    public String getIndexId() {
-        return indexId;
-    }
-
-    public void setIndexId(String indexId) {
-        this.indexId = indexId;
-    }
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-
-    public String getUnitId() {
-        return unitId;
-    }
-
-    public void setUnitId(String unitId) {
-        this.unitId = unitId;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getTimeType() {
-        return timeType;
-    }
-
-    public void setTimeType(String timeType) {
-        this.timeType = timeType;
-    }
-
-    public Date getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(Date dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public Double getValue1() {
-        return value1;
-    }
-
-    public void setValue1(Double value1) {
-        this.value1 = value1;
-    }
-
-    public Double getValue2() {
-        return value2;
-    }
-
-    public void setValue2(Double value2) {
-        this.value2 = value2;
-    }
-
-    public Double getValue3() {
-        return value3;
-    }
-
-    public void setValue3(Double value3) {
-        this.value3 = value3;
-    }
-
-    public Double getValue4() {
-        return value4;
-    }
-
-    public void setValue4(Double value4) {
-        this.value4 = value4;
-    }
-
-    public Double getValue5() {
-        return value5;
-    }
-
-    public void setValue5(Double value5) {
-        this.value5 = value5;
-    }
-
-    public Double getValue6() {
-        return value6;
-    }
-
-    public void setValue6(Double value6) {
-        this.value6 = value6;
-    }
-
-    public Double getValue7() {
-        return value7;
-    }
-
-    public void setValue7(Double value7) {
-        this.value7 = value7;
-    }
-
-    public Double getValue8() {
-        return value8;
-    }
-
-    public void setValue8(Double value8) {
-        this.value8 = value8;
-    }
-
-    public Double getValue9() {
-        return value9;
-    }
-
-    public void setValue9(Double value9) {
-        this.value9 = value9;
-    }
-
-    public Double getValue10() {
-        return value10;
-    }
-
-    public void setValue10(Double value10) {
-        this.value10 = value10;
-    }
-
-    public Double getValue11() {
-        return value11;
-    }
-
-    public void setValue11(Double value11) {
-        this.value11 = value11;
-    }
-
-    public Double getValue12() {
-        return value12;
-    }
-
-    public void setValue12(Double value12) {
-        this.value12 = value12;
-    }
-
-    public Double getValue13() {
-        return value13;
-    }
-
-    public void setValue13(Double value13) {
-        this.value13 = value13;
-    }
-
-    public Double getValue14() {
-        return value14;
-    }
-
-    public void setValue14(Double value14) {
-        this.value14 = value14;
-    }
-
-    public Double getValue15() {
-        return value15;
-    }
-
-    public void setValue15(Double value15) {
-        this.value15 = value15;
-    }
-
-    public Double getValue16() {
-        return value16;
-    }
-
-    public void setValue16(Double value16) {
-        this.value16 = value16;
-    }
-
-    public Double getValue17() {
-        return value17;
-    }
-
-    public void setValue17(Double value17) {
-        this.value17 = value17;
-    }
-
-    public Double getValue18() {
-        return value18;
-    }
-
-    public void setValue18(Double value18) {
-        this.value18 = value18;
-    }
-
-    public Double getValue19() {
-        return value19;
-    }
-
-    public void setValue19(Double value19) {
-        this.value19 = value19;
-    }
-
-    public Double getValue20() {
-        return value20;
-    }
-
-    public void setValue20(Double value20) {
-        this.value20 = value20;
-    }
-
-    public Double getValue21() {
-        return value21;
-    }
-
-    public void setValue21(Double value21) {
-        this.value21 = value21;
-    }
-
-    public Double getValue22() {
-        return value22;
-    }
-
-    public void setValue22(Double value22) {
-        this.value22 = value22;
-    }
-
-    public Double getValue23() {
-        return value23;
-    }
-
-    public void setValue23(Double value23) {
-        this.value23 = value23;
-    }
-
-    public Double getValue0() {
-        return value0;
-    }
-
-    public void setValue0(Double value0) {
-        this.value0 = value0;
-    }
-
-    public String getTimeCode() {
-        return timeCode;
-    }
-
-    public void setTimeCode(String timeCode) {
-        this.timeCode = timeCode;
-    }
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/domain/monthlyKeyEquipment.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/domain/monthlyKeyEquipment.java
deleted file mode 100644
index 705bd5f..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/domain/monthlyKeyEquipment.java
+++ /dev/null
@@ -1,427 +0,0 @@
-package com.dingzhuo.energy.project.keyEquipment.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-/**
- *閲嶇偣璁惧鑳借�楃粺璁� 鏈�
- *
- * @author sys
- * @date 2021-01-11
- */
-public class monthlyKeyEquipment implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private String indexId;
-    @Excel(name = "鎸囨爣鍚嶇О")
-    private String indexName;
-    private String value;
-    private Date dataTime;
-    private String timeType;
-    private String timeCode;
-    @Excel(name = "1鏃�")
-    private Double value1;
-    @Excel(name = "2鏃�")
-    private Double value2;
-    @Excel(name = "3鏃�")
-    private Double value3;
-    @Excel(name = "4鏃�")
-    private Double value4;
-    @Excel(name = "5鏃�")
-    private Double value5;
-    @Excel(name = "6鏃�")
-    private Double value6;
-    @Excel(name = "7鏃�")
-    private Double value7;
-    @Excel(name = "8鏃�")
-    private Double value8;
-    @Excel(name = "9鏃�")
-    private Double value9;
-    @Excel(name = "10鏃�")
-    private Double value10;
-    @Excel(name = "11鏃�")
-    private Double value11;
-    @Excel(name = "12鏃�")
-    private Double value12;
-    @Excel(name = "13鏃�")
-    private Double value13;
-    @Excel(name = "14鏃�")
-    private Double value14;
-    @Excel(name = "15鏃�")
-    private Double value15;
-    @Excel(name = "16鏃�")
-    private Double value16;
-    @Excel(name = "17鏃�")
-    private Double value17;
-    @Excel(name = "18鏃�")
-    private Double value18;
-    @Excel(name = "19鏃�")
-    private Double value19;
-    @Excel(name = "20鏃�")
-    private Double value20;
-    @Excel(name = "21鏃�")
-    private Double value21;
-    @Excel(name = "22鏃�")
-    private Double value22;
-    @Excel(name = "23鏃�")
-    private Double value23;
-    @Excel(name = "24鏃�")
-    private Double value24;
-    @Excel(name = "25鏃�")
-    private Double value25;
-    @Excel(name = "26鏃�")
-    private Double value26;
-    @Excel(name = "27鏃�")
-    private Double value27;
-    @Excel(name = "28鏃�")
-    private Double value28;
-    @Excel(name = "29鏃�")
-    private Double value29;
-    @Excel(name = "30鏃�")
-    private Double value30;
-    @Excel(name = "31鏃�")
-    private Double value31;
-    private Integer count;
-    private String unitId;
-    /** 鎬昏褰曟暟 */
-    private long total;
-    private List<Map> tablehead =new ArrayList<>();
-    private List<monthlyKeyEquipment> tabledata =new ArrayList<>();
-    public String getIndexId() {
-        return indexId;
-    }
-
-    public void setIndexId(String indexId) {
-        this.indexId = indexId;
-    }
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-    public String getUnitId() {
-        return unitId;
-    }
-
-    public void setUnitId(String unitId) {
-        this.unitId = unitId;
-    }
-
-    public String getTimeCode() {
-        return timeCode;
-    }
-
-    public void setTimeCode(String timeCode) {
-        this.timeCode = timeCode;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getTimeType() {
-        return timeType;
-    }
-
-    public void setTimeType(String timeType) {
-        this.timeType = timeType;
-    }
-
-    public Date getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(Date dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public Double getValue1() {
-        return value1;
-    }
-
-    public void setValue1(Double value1) {
-        this.value1 = value1;
-    }
-
-    public Double getValue2() {
-        return value2;
-    }
-
-    public void setValue2(Double value2) {
-        this.value2 = value2;
-    }
-
-    public Double getValue3() {
-        return value3;
-    }
-
-    public void setValue3(Double value3) {
-        this.value3 = value3;
-    }
-
-    public Double getValue4() {
-        return value4;
-    }
-
-    public void setValue4(Double value4) {
-        this.value4 = value4;
-    }
-
-    public Double getValue5() {
-        return value5;
-    }
-
-    public void setValue5(Double value5) {
-        this.value5 = value5;
-    }
-
-    public Double getValue6() {
-        return value6;
-    }
-
-    public void setValue6(Double value6) {
-        this.value6 = value6;
-    }
-
-    public Double getValue7() {
-        return value7;
-    }
-
-    public void setValue7(Double value7) {
-        this.value7 = value7;
-    }
-
-    public Double getValue8() {
-        return value8;
-    }
-
-    public void setValue8(Double value8) {
-        this.value8 = value8;
-    }
-
-    public Double getValue9() {
-        return value9;
-    }
-
-    public void setValue9(Double value9) {
-        this.value9 = value9;
-    }
-
-    public Double getValue10() {
-        return value10;
-    }
-
-    public void setValue10(Double value10) {
-        this.value10 = value10;
-    }
-
-    public Double getValue11() {
-        return value11;
-    }
-
-    public void setValue11(Double value11) {
-        this.value11 = value11;
-    }
-
-    public Double getValue12() {
-        return value12;
-    }
-
-    public void setValue12(Double value12) {
-        this.value12 = value12;
-    }
-
-    public Double getValue13() {
-        return value13;
-    }
-
-    public void setValue13(Double value13) {
-        this.value13 = value13;
-    }
-
-    public Double getValue14() {
-        return value14;
-    }
-
-    public void setValue14(Double value14) {
-        this.value14 = value14;
-    }
-
-    public Double getValue15() {
-        return value15;
-    }
-
-    public void setValue15(Double value15) {
-        this.value15 = value15;
-    }
-
-    public Double getValue16() {
-        return value16;
-    }
-
-    public void setValue16(Double value16) {
-        this.value16 = value16;
-    }
-
-    public Double getValue17() {
-        return value17;
-    }
-
-    public void setValue17(Double value17) {
-        this.value17 = value17;
-    }
-
-    public Double getValue18() {
-        return value18;
-    }
-
-    public void setValue18(Double value18) {
-        this.value18 = value18;
-    }
-
-    public Double getValue19() {
-        return value19;
-    }
-
-    public void setValue19(Double value19) {
-        this.value19 = value19;
-    }
-
-    public Double getValue20() {
-        return value20;
-    }
-
-    public void setValue20(Double value20) {
-        this.value20 = value20;
-    }
-
-    public Double getValue21() {
-        return value21;
-    }
-
-    public void setValue21(Double value21) {
-        this.value21 = value21;
-    }
-
-    public Double getValue22() {
-        return value22;
-    }
-
-    public void setValue22(Double value22) {
-        this.value22 = value22;
-    }
-
-    public Double getValue23() {
-        return value23;
-    }
-
-    public void setValue23(Double value23) {
-        this.value23 = value23;
-    }
-
-    public Double getValue24() {
-        return value24;
-    }
-
-    public void setValue24(Double value24) {
-        this.value24 = value24;
-    }
-
-    public Double getValue25() {
-        return value25;
-    }
-
-    public void setValue25(Double value25) {
-        this.value25 = value25;
-    }
-
-    public Double getValue26() {
-        return value26;
-    }
-
-    public void setValue26(Double value26) {
-        this.value26 = value26;
-    }
-
-    public Double getValue27() {
-        return value27;
-    }
-
-    public void setValue27(Double value27) {
-        this.value27 = value27;
-    }
-
-    public Double getValue28() {
-        return value28;
-    }
-
-    public void setValue28(Double value28) {
-        this.value28 = value28;
-    }
-
-    public Double getValue29() {
-        return value29;
-    }
-
-    public void setValue29(Double value29) {
-        this.value29 = value29;
-    }
-
-    public Double getValue30() {
-        return value30;
-    }
-
-    public void setValue30(Double value30) {
-        this.value30 = value30;
-    }
-
-    public Double getValue31() {
-        return value31;
-    }
-
-    public void setValue31(Double value31) {
-        this.value31 = value31;
-    }
-
-    public List<Map> getTablehead() {
-        return tablehead;
-    }
-
-    public void setTablehead(List<Map> tablehead) {
-        this.tablehead = tablehead;
-    }
-    public List<monthlyKeyEquipment> getTabledata() {
-        return tabledata;
-    }
-
-    public void setTabledata(List<monthlyKeyEquipment> tabledata) {
-        this.tabledata = tabledata;
-    }
-
-    public Integer getCount() {
-        return count;
-    }
-
-    public void setCount(Integer count) {
-        this.count = count;
-    }
-
-    public long getTotal() {
-        return total;
-    }
-
-    public void setTotal(long total) {
-        this.total = total;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/domain/yearKeyEquipment.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/domain/yearKeyEquipment.java
deleted file mode 100644
index f0ce2f2..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/domain/yearKeyEquipment.java
+++ /dev/null
@@ -1,201 +0,0 @@
-package com.dingzhuo.energy.project.keyEquipment.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.project.reportForm.domain.dailyReport;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-/**
- *閲嶇偣璁惧鑳借�楃粺璁� 骞�
- *
- * @author sys
- * @date 2021-01-11
- */
-public class yearKeyEquipment implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private String indexId;
-    @Excel(name = "鎸囨爣鍚嶇О")
-    private String indexName;
-    private String value;
-    private Date dataTime;
-    private String timeType;
-    @Excel(name = "1鏈�")
-    private Double value1;
-    @Excel(name = "2鏈�")
-    private Double value2;
-    @Excel(name = "3鏈�")
-    private Double value3;
-    @Excel(name = "4鏈�")
-    private Double value4;
-    @Excel(name = "5鏈�")
-    private Double value5;
-    @Excel(name = "6鏈�")
-    private Double value6;
-    @Excel(name = "7鏈�")
-    private Double value7;
-    @Excel(name = "8鏈�")
-    private Double value8;
-    @Excel(name = "9鏈�")
-    private Double value9;
-    @Excel(name = "10鏈�")
-    private Double value10;
-    @Excel(name = "11鏈�")
-    private Double value11;
-    @Excel(name = "12鏈�")
-    private Double value12;
-    private String timeCode;
-    private  String unitId;
-    public String getIndexId() {
-        return indexId;
-    }
-
-    public void setIndexId(String indexId) {
-        this.indexId = indexId;
-    }
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-    public String getUnitId() {
-        return unitId;
-    }
-
-    public void setUnitId(String unitId) {
-        this.unitId = unitId;
-    }
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getTimeType() {
-        return timeType;
-    }
-
-    public void setTimeType(String timeType) {
-        this.timeType = timeType;
-    }
-
-    public Date getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(Date dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public Double getValue1() {
-        return value1;
-    }
-
-    public void setValue1(Double value1) {
-        this.value1 = value1;
-    }
-
-    public Double getValue2() {
-        return value2;
-    }
-
-    public void setValue2(Double value2) {
-        this.value2 = value2;
-    }
-
-    public Double getValue3() {
-        return value3;
-    }
-
-    public void setValue3(Double value3) {
-        this.value3 = value3;
-    }
-
-    public Double getValue4() {
-        return value4;
-    }
-
-    public void setValue4(Double value4) {
-        this.value4 = value4;
-    }
-
-    public Double getValue5() {
-        return value5;
-    }
-
-    public void setValue5(Double value5) {
-        this.value5 = value5;
-    }
-
-    public Double getValue6() {
-        return value6;
-    }
-
-    public void setValue6(Double value6) {
-        this.value6 = value6;
-    }
-
-    public Double getValue7() {
-        return value7;
-    }
-
-    public void setValue7(Double value7) {
-        this.value7 = value7;
-    }
-
-    public Double getValue8() {
-        return value8;
-    }
-
-    public void setValue8(Double value8) {
-        this.value8 = value8;
-    }
-
-    public Double getValue9() {
-        return value9;
-    }
-
-    public void setValue9(Double value9) {
-        this.value9 = value9;
-    }
-
-    public Double getValue10() {
-        return value10;
-    }
-
-    public void setValue10(Double value10) {
-        this.value10 = value10;
-    }
-
-    public Double getValue11() {
-        return value11;
-    }
-
-    public void setValue11(Double value11) {
-        this.value11 = value11;
-    }
-
-    public Double getValue12() {
-        return value12;
-    }
-
-    public void setValue12(Double value12) {
-        this.value12 = value12;
-    }
-    public String getTimeCode() {
-        return timeCode;
-    }
-
-    public void setTimeCode(String timeCode) {
-        this.timeCode = timeCode;
-    }
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/mapper/dailyKeyEquipmentMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/mapper/dailyKeyEquipmentMapper.java
deleted file mode 100644
index 54b037f..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/mapper/dailyKeyEquipmentMapper.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.dingzhuo.energy.project.keyEquipment.mapper;
-
-import com.dingzhuo.energy.basic.data.facility.domain.FacilityArchives;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.keyEquipment.domain.dailyKeyEquipment;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- *閲嶇偣璁惧鑳借�楃粺璁� 鏃�
- *
- * @author sys
- * @date 2021-01-11
- */
-public interface dailyKeyEquipmentMapper {
-    public List<dailyKeyEquipment> getdailyKeyEquipmentList(@Param("indexIds") List<String> indexIds,
-                                                            @Param("dataList") List<dailyKeyEquipment> dataList,
-                                                            @Param("beginTime") Date beginTime,
-                                                            @Param("endTime") Date endTime,
-                                                            @Param("timeType") TimeType timeType,
-                                                            @Param("indexStorageId") String indexStorageId);
-    List<dailyKeyEquipment> getListChart(@Param("indexId") String indexId,
-                                            @Param("beginTime") Date beginTime,
-                                            @Param("endTime") Date endTime,
-                                            @Param("timeType") TimeType timeType,
-                                            @Param("indexStorageId")  String indexStorageId);
-    List<FacilityArchives> getFacilityArchives();
-    List<FacilityArchives> getPointFacility();
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/mapper/monthlyKeyEquipmentMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/mapper/monthlyKeyEquipmentMapper.java
deleted file mode 100644
index 05ea1f7..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/mapper/monthlyKeyEquipmentMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.dingzhuo.energy.project.keyEquipment.mapper;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.keyEquipment.domain.monthlyKeyEquipment;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- *閲嶇偣璁惧鑳借�楃粺璁� 鏈�
- *
- * @author sys
- * @date 2021-01-11
- */
-public interface monthlyKeyEquipmentMapper {
-    public List<monthlyKeyEquipment> getMonthlyKeyEquipmentList(@Param("indexIds") List<String> indexIds,
-                                                                    @Param("dataList") List<monthlyKeyEquipment> dataList,
-                                                                    @Param("beginTime") Date beginTime,
-                                                                    @Param("endTime") Date endTime,
-                                                                    @Param("timeType") TimeType timeType,
-                                                                    @Param("indexStorageId") String indexStorageId);
-    List<monthlyKeyEquipment> getListChart(@Param("indexId") String indexId,
-                                               @Param("beginTime") Date beginTime,
-                                               @Param("endTime") Date endTime,
-                                               @Param("timeType") TimeType timeType,
-                                               @Param("indexStorageId") String indexStorageId);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/mapper/yearKeyEquipmentMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/mapper/yearKeyEquipmentMapper.java
deleted file mode 100644
index 102d279..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/mapper/yearKeyEquipmentMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.dingzhuo.energy.project.keyEquipment.mapper;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.keyEquipment.domain.yearKeyEquipment;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- *閲嶇偣璁惧鑳借�楃粺璁� 骞�
- *
- * @author sys
- * @date 2021-01-11
- */
-public interface yearKeyEquipmentMapper {
-    public List<yearKeyEquipment> getYearKeyEquipmentList(@Param("indexIds") List<String> indexIds,
-                                                              @Param("dataList") List<yearKeyEquipment> dataList,
-                                                              @Param("beginTime") Date beginTime,
-                                                              @Param("endTime") Date endTime,
-                                                              @Param("timeType") TimeType timeType,
-                                                              @Param("indexStorageId") String indexStorageId);
-    List<yearKeyEquipment> getListChart(@Param("indexId") String indexId,
-                                            @Param("beginTime") Date beginTime,
-                                            @Param("endTime") Date endTime,
-                                            @Param("timeType") TimeType timeType,
-                                            @Param("indexStorageId") String indexStorageId);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/service/IdailyKeyEquipmentService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/service/IdailyKeyEquipmentService.java
deleted file mode 100644
index 2d768be..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/service/IdailyKeyEquipmentService.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.dingzhuo.energy.project.keyEquipment.service;
-
-import com.dingzhuo.energy.basic.data.facility.domain.FacilityArchives;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.keyEquipment.domain.dailyKeyEquipment;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- *閲嶇偣璁惧鑳借�楃粺璁� 鏃�
- *
- * @author sys
- * @date 2021-01-11
- */
-public interface IdailyKeyEquipmentService {
-    public List<dailyKeyEquipment> getdailyKeyEquipmentList(List<String> indexIds, List<dailyKeyEquipment> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-    public List<dailyKeyEquipment> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-    public List<FacilityArchives> getFacilityArchives();
-    public List<FacilityArchives> getPointFacility();
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/service/ImonthlyKeyEquipmentService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/service/ImonthlyKeyEquipmentService.java
deleted file mode 100644
index e8404da..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/service/ImonthlyKeyEquipmentService.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.dingzhuo.energy.project.keyEquipment.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.keyEquipment.domain.monthlyKeyEquipment;
-
-
-import java.util.Date;
-import java.util.List;
-
-/**
- *閲嶇偣璁惧鑳借�楃粺璁� 鏈�
- *
- * @author sys
- * @date 2021-01-11
- */
-public interface ImonthlyKeyEquipmentService {
-    public List<monthlyKeyEquipment> getMonthlyKeyEquipmentList(List<String> indexIds, List<monthlyKeyEquipment> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-    List<monthlyKeyEquipment> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/service/IyearKeyEquipmentService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/service/IyearKeyEquipmentService.java
deleted file mode 100644
index 0f9f0de..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/service/IyearKeyEquipmentService.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.dingzhuo.energy.project.keyEquipment.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.keyEquipment.domain.yearKeyEquipment;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- *閲嶇偣璁惧鑳借�楃粺璁� 骞�
- *
- * @author sys
- * @date 2021-01-11
- */
-public interface IyearKeyEquipmentService {
-    public List<yearKeyEquipment> getYearKeyEquipmentList(List<String> indexIds, List<yearKeyEquipment> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-    List<yearKeyEquipment> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/service/impl/dailyKeyEquipmentServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/service/impl/dailyKeyEquipmentServiceImpl.java
deleted file mode 100644
index ca4a796..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/service/impl/dailyKeyEquipmentServiceImpl.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.dingzhuo.energy.project.keyEquipment.service.impl;
-
-import com.dingzhuo.energy.basic.data.facility.domain.FacilityArchives;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.keyEquipment.domain.dailyKeyEquipment;
-import com.dingzhuo.energy.project.keyEquipment.mapper.dailyKeyEquipmentMapper;
-import com.dingzhuo.energy.project.keyEquipment.service.IdailyKeyEquipmentService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-/**
- *閲嶇偣璁惧鑳借�楃粺璁� 鏃�
- *
- * @author sys
- * @date 2021-01-11
- */
-@Service
-public class dailyKeyEquipmentServiceImpl implements IdailyKeyEquipmentService {
-    @Autowired
-    private dailyKeyEquipmentMapper dailyMapper;
-
-    @Override
-    public List<dailyKeyEquipment> getdailyKeyEquipmentList(List<String> indexIds, List<dailyKeyEquipment> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
-        if (indexIds != null && !indexIds.isEmpty()) {
-            return dailyMapper.getdailyKeyEquipmentList(indexIds, dataList, beginTime, endTime, timeType, indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-    @Override
-    public List<dailyKeyEquipment> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
-        if (indexId != null && !indexId.isEmpty()) {
-            return dailyMapper.getListChart(indexId,beginTime,endTime,timeType,indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-    @Override
-    public List<FacilityArchives> getFacilityArchives() {
-        return dailyMapper.getFacilityArchives();
-    }
-    @Override
-    public List<FacilityArchives> getPointFacility() {
-        return dailyMapper.getPointFacility();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/service/impl/monthlyKeyEquipmentServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/service/impl/monthlyKeyEquipmentServiceImpl.java
deleted file mode 100644
index aefc5a2..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/service/impl/monthlyKeyEquipmentServiceImpl.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.dingzhuo.energy.project.keyEquipment.service.impl;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.keyEquipment.domain.monthlyKeyEquipment;
-import com.dingzhuo.energy.project.keyEquipment.mapper.monthlyKeyEquipmentMapper;
-import com.dingzhuo.energy.project.keyEquipment.service.ImonthlyKeyEquipmentService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-/**
- *閲嶇偣璁惧鑳借�楃粺璁� 鏈�
- *
- * @author sys
- * @date 2021-01-11
- */
-@Service
-public class monthlyKeyEquipmentServiceImpl implements ImonthlyKeyEquipmentService {
-    @Autowired
-    private monthlyKeyEquipmentMapper monthMapper;
-
-    public List<monthlyKeyEquipment> getMonthlyKeyEquipmentList(List<String> indexIds, List<monthlyKeyEquipment> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
-        if (indexIds != null && !indexIds.isEmpty()) {
-            return monthMapper.getMonthlyKeyEquipmentList(indexIds, dataList, beginTime, endTime, timeType, indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-
-    @Override
-    public List<monthlyKeyEquipment> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
-        if (indexId != null && !indexId.isEmpty()) {
-            return monthMapper.getListChart(indexId,beginTime,endTime,timeType,indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/service/impl/yearKeyEquipmentServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/service/impl/yearKeyEquipmentServiceImpl.java
deleted file mode 100644
index 199ff68..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/keyEquipment/service/impl/yearKeyEquipmentServiceImpl.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.dingzhuo.energy.project.keyEquipment.service.impl;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.keyEquipment.domain.yearKeyEquipment;
-import com.dingzhuo.energy.project.keyEquipment.mapper.yearKeyEquipmentMapper;
-import com.dingzhuo.energy.project.keyEquipment.service.IyearKeyEquipmentService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-/**
- *閲嶇偣璁惧鑳借�楃粺璁� 骞�
- *
- * @author sys
- * @date 2021-01-11
- */
-@Service
-public class yearKeyEquipmentServiceImpl implements IyearKeyEquipmentService {
-    @Autowired
-    private yearKeyEquipmentMapper yearMapper;
-
-    public List<yearKeyEquipment> getYearKeyEquipmentList(List<String> indexIds, List<yearKeyEquipment> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
-        if (indexIds != null && !indexIds.isEmpty()) {
-            return yearMapper.getYearKeyEquipmentList(indexIds, dataList, beginTime, endTime, timeType, indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-    @Override
-    public List<yearKeyEquipment> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
-        if (indexId != null && !indexId.isEmpty()) {
-            return yearMapper.getListChart(indexId,beginTime,endTime,timeType,indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/controller/PlanEnergyController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/controller/PlanEnergyController.java
deleted file mode 100644
index 8d6cfc6..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/controller/PlanEnergyController.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.dingzhuo.energy.project.plannedOutput.controller;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysProduct;
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.project.plannedOutput.domain.PlanEnergy;
-import com.dingzhuo.energy.project.plannedOutput.service.IPlanEnergyService;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-
-/**
- * 銆愯濉啓鍔熻兘鍚嶇О銆慍ontroller
- * 
- * @author sys
- * @date 2020-12-17
- */
-@RestController
-@RequestMapping("/PlanEnergy")
-public class PlanEnergyController extends BaseController {
-    @Autowired
-    private IPlanEnergyService planEnergyService;
-    @Autowired
-    private IModelNodeService modelNodeService;
-    /**
-     * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛�
-     */
-    @PreAuthorize("@ss.hasPermi('system:energy:list')")
-    @GetMapping("/list")
-    public AjaxResult list(PlanEnergy planEnergy)
-    {
-
-        List<SysProduct> productList= modelNodeService.getSettingProduct(planEnergy.getIndexCode());
-        List<Integer> indexCode = productList.stream().map(SysProduct::getProductid).collect(Collectors.toList());
-        List<PlanEnergy> list;
-        list = planEnergyService.PlanEnergyList(indexCode,planEnergy.getTimeType(),planEnergy.getDataTime(),planEnergy.getType());
-        if(list.size()==0){
-            list = planEnergyService.selectPlanEnergyList(indexCode,planEnergy.getTimeType(),planEnergy.getDataTime());
-        }
-        return AjaxResult.success(list);
-    }
-    /**
-     * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆�
-     */
-    @PreAuthorize("@ss.hasPermi('system:energy:add')")
-    @Log(title = "銆愯濉啓鍔熻兘鍚嶇О銆�", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody List<PlanEnergy> listMap){
-        List<PlanEnergy> dataItems = new ArrayList<>();
-        listMap.forEach(data -> {
-            String timeCode = TimeManager.getTimeCode(data.getDataTime(), data.getTimeType());
-            PlanEnergy dataItem = new PlanEnergy();
-            dataItem.setTimeCode(timeCode);
-            dataItem.setProductId(data.getProductId());
-            dataItem.setTimeType(data.getTimeType());
-            dataItem.setActualValue(data.getActualValue());
-            dataItem.setValue(data.getValue());
-            dataItem.setEnergyValue(data.getEnergyValue());
-            dataItem.setCoalValue(data.getCoalValue());
-            data.setCoalEnergyValue(data.getCoalEnergyValue());
-            dataItem.setSteamValue(data.getSteamValue());
-            dataItem.setSteamEnereyValue(data.getSteamEnereyValue());
-            dataItem.setWaterValue(data.getWaterValue());
-            dataItem.setWaterEnergyValue(data.getWaterEnergyValue());
-            dataItem.setDataTime(dataItem.getDataTime());
-            dataItems.add(dataItem);
-        });
-        try {
-            this.planEnergyService.insertPlanEnergy(dataItems);
-            return AjaxResult.success("淇濆瓨鎴愬姛锛�");
-        }catch (Exception ex) {
-            logger.error("淇濆瓨澶辫触锛�" + ex.getMessage());
-            return AjaxResult.success(ex.getMessage());
-        }
-        //return toAjax(planEnergyService.insertPlanEnergy(planEnergy));
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/controller/PlannedOutputController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/controller/PlannedOutputController.java
deleted file mode 100644
index 66cd2b9..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/controller/PlannedOutputController.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package com.dingzhuo.energy.project.plannedOutput.controller;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysProduct;
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.project.plannedOutput.domain.PlannedOutput;
-import com.dingzhuo.energy.project.plannedOutput.service.IPlannedOutputService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-
-/**
- * plannedOutputController
- * 
- * @author sys
- * @date 2020-12-16
- */
-@RestController
-@RequestMapping("/planned/plannedOutput")
-public class PlannedOutputController extends BaseController {
-    @Autowired
-    private IPlannedOutputService plannedOutputService;
-    @Autowired
-    private IModelNodeService modelNodeService;
-
-    /**
-     * 鏌ヨplannedOutput鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('planned:plannedOutput:list')")
-    @GetMapping("/list")
-    public AjaxResult list(PlannedOutput plannedOutput) {
-        //startPage();
-        List<SysProduct> productList= modelNodeService.getSettingProduct(plannedOutput.getIndexCode());
-        List<Integer> indexCode = productList.stream().map(SysProduct::getProductid).collect(Collectors.toList());
-        List<PlannedOutput> list= plannedOutputService.selectPlannedOutputList(indexCode,plannedOutput.getTimeType(),plannedOutput.getDataTime(),plannedOutput.getPalnType());
-        if(list.size()==0){
-            list= plannedOutputService.selectPlanList(indexCode);
-        }
-        //return getDataTable(list);
-        return AjaxResult.success(list);
-    }
-
-    /**
-     * 鏂板plannedOutput
-     */
-    @PreAuthorize("@ss.hasPermi('planned:plannedOutput:add')")
-    @Log(title = "plannedOutput", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody List<PlannedOutput> listMap) {
-        List<PlannedOutput> dataItems = new ArrayList<>();
-        listMap.forEach(data -> {
-            String timeCode = TimeManager.getTimeCode(data.getDataTime(), data.getTimeType());
-            PlannedOutput dataItem = new PlannedOutput();
-            dataItem.setPalnType(data.getPalnType());
-            dataItem.setTimeCode(timeCode);
-            dataItem.setDataTime(data.getDataTime());
-            dataItem.setProductId(data.getProductId());
-            dataItem.setPlanValue(data.getPlanValue());
-            dataItem.setValue(data.getValue());
-            dataItem.setCoalValue(data.getCoalValue());
-            dataItem.setSteamValue(data.getSteamValue());
-            dataItem.setWaterValue(data.getWaterValue());
-            dataItems.add(dataItem);
-        });
-        try {
-            this.plannedOutputService.insertPlannedOutput(dataItems);
-            return AjaxResult.success("淇濆瓨鎴愬姛锛�");
-        }catch (Exception ex) {
-            logger.error("淇濆瓨澶辫触锛�" + ex.getMessage());
-            return AjaxResult.success(ex.getMessage());
-        }
-        //return toAjax(plannedOutputService.insertPlannedOutput(plannedOutput));
-    }
-
-    /**
-     * 淇敼plannedOutput
-     */
-    @PreAuthorize("@ss.hasPermi('planned:plannedOutput:edit')")
-    @Log(title = "plannedOutput", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody PlannedOutput plannedOutput) {
-        return toAjax(plannedOutputService.updatePlannedOutput(plannedOutput));
-    }
-
-
-    /**
-     * 瀵煎嚭plannedOutput鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('planned:plannedOutput:export')")
-    @Log(title = "plannedOutput", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(PlannedOutput plannedOutput) {
-        List<SysProduct> productList= modelNodeService.getSettingProduct(plannedOutput.getIndexCode());
-        List<Integer> indexCode = productList.stream().map(SysProduct::getProductid).collect(Collectors.toList());
-        List<PlannedOutput> list= plannedOutputService.selectPlannedOutputList(indexCode,plannedOutput.getTimeType(),plannedOutput.getDataTime(),plannedOutput.getPalnType());
-        ExcelUtil<PlannedOutput> util = new ExcelUtil<PlannedOutput>(PlannedOutput.class);
-        return util.exportExcel(list, "plannedOutput");
-    }
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/controller/energyMonitoringController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/controller/energyMonitoringController.java
deleted file mode 100644
index 135bb23..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/controller/energyMonitoringController.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.dingzhuo.energy.project.plannedOutput.controller;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-import com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysProduct;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.project.plannedOutput.domain.PlanEnergy;
-import com.dingzhuo.energy.project.plannedOutput.domain.energyMonitoring;
-import com.dingzhuo.energy.project.plannedOutput.service.energyMonitoringService;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-
-/**
- * 璁″垝浜庡疄缁╁姣斿垎鏋怌ontroller
- * 
- * @author sys
- * @date 2020-12-17
- */
-@RestController
-@RequestMapping("/energyMonitoring")
-public class energyMonitoringController extends BaseController {
-    @Autowired
-    private IModelNodeService modelNodeService;
-    @Autowired
-    private energyMonitoringService energyMonitoringService;
-    /**
-     * 鏌ヨ鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('system:energy:list')")
-    @GetMapping("/list")
-    public AjaxResult list(PlanEnergy planEnergy) {
-        List<SysProduct> productList= modelNodeService.getSettingProduct(planEnergy.getIndexCode());
-        List<Integer> indexCode = productList.stream().map(SysProduct::getProductid).collect(Collectors.toList());
-        List<energyMonitoring> list=energyMonitoringService.selectEnergyMonitoringList(indexCode,planEnergy.getTimeType(),planEnergy.getDataTime());
-        return AjaxResult.success(list);
-    }
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/domain/PlanEnergy.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/domain/PlanEnergy.java
deleted file mode 100644
index 8d66079..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/domain/PlanEnergy.java
+++ /dev/null
@@ -1,246 +0,0 @@
-package com.dingzhuo.energy.project.plannedOutput.domain;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import java.util.Date;
-
-/**
- * 銆愯濉啓鍔熻兘鍚嶇О銆戝璞� plan_energy
- * 
- * @author sys
- * @date 2020-12-17
- */
-public class PlanEnergy extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** $column.columnComment */
-    @Excel(name = "浜у搧ID")
-    private Integer productId;
-    @Excel(name = "浜у搧鍚嶇О")
-    private String productname;
-    @Excel(name = "鍗曚綅")
-    private String muid;
-    @Excel(name = "璁″垝鍊�")
-    private String planValue;
-    @Excel(name = "瀹為檯鍊�")
-    private String actualValue;
-    /** 鐢佃兘鑰楅噺 */
-    @Excel(name = "鐢佃兘鑰楅噺")
-    private String value;
-    /** 鐢靛崟浣嶄骇鍝佽兘鑰楅噺 */
-    @Excel(name = "鐢靛崟浣嶄骇鍝佽兘鑰楅噺")
-    private String energyValue;
-
-    /** 绫诲瀷 */
-    @Excel(name = "绫诲瀷")
-    private TimeType timeType;
-
-    /** 钂告苯鍗曚綅浜у搧鑳借�楅噺 */
-    @Excel(name = "钂告苯鍗曚綅浜у搧鑳借�楅噺")
-    private String steamEnereyValue;
-
-    /** 鐢靛崟浣嶄骇鍝佽兘鑰楅噺 */
-    @Excel(name = "姘村崟浣嶄骇鍝佽兘鑰楅噺")
-    private String waterValue;
-
-    /** 姘村崟浣嶄骇鍝佽兘鑰楅噺 */
-    @Excel(name = "姘村崟浣嶄骇鍝佽兘鑰楅噺")
-    private String waterEnergyValue;
-
-    /** 鐓ゆ皵鑳借�楅噺 */
-    @Excel(name = "鐓ゆ皵鑳借�楅噺")
-    private String coalValue;
-
-    /** 鐓ゆ皵鍗曚綅浜у搧鑳借�楅噺 */
-    @Excel(name = "鐓ゆ皵鍗曚綅浜у搧鑳借�楅噺")
-    private String coalEnergyValue;
-
-    /** 钂告苯鑳借�楅噺 */
-    @Excel(name = "钂告苯鑳借�楅噺")
-    private String steamValue;
-
-    /** 鏃ユ湡 */
-    @Excel(name = "鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date dataTime;
-    private String indexCode;
-    private String timeCode;
-    private String type;
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public void setProductId(Integer productId)
-    {
-        this.productId = productId;
-    }
-
-    public Integer getProductId()
-    {
-        return productId;
-    }
-
-    public String getProductname() {
-        return productname;
-    }
-
-    public void setProductname(String productname) {
-        this.productname = productname;
-    }
-
-    public String getMuid() {
-        return muid;
-    }
-
-    public void setMuid(String muid) {
-        this.muid = muid;
-    }
-
-    public String getPlanValue() {
-        return planValue;
-    }
-
-    public void setPlanValue(String planValue) {
-        this.planValue = planValue;
-    }
-
-    public String getActualValue() {
-        return actualValue;
-    }
-
-    public void setActualValue(String actualValue) {
-        this.actualValue = actualValue;
-    }
-
-    public void setValue(String value)
-    {
-        this.value = value;
-    }
-
-    public String getValue() 
-    {
-        return value;
-    }
-    public void setEnergyValue(String energyValue) 
-    {
-        this.energyValue = energyValue;
-    }
-
-    public String getEnergyValue() 
-    {
-        return energyValue;
-    }
-
-    public String getSteamEnereyValue() {
-        return steamEnereyValue;
-    }
-
-    public void setSteamEnereyValue(String steamEnereyValue) {
-        this.steamEnereyValue = steamEnereyValue;
-    }
-
-    public String getWaterValue() {
-        return waterValue;
-    }
-
-    public void setWaterValue(String waterValue) {
-        this.waterValue = waterValue;
-    }
-
-    public String getWaterEnergyValue() {
-        return waterEnergyValue;
-    }
-
-    public void setWaterEnergyValue(String waterEnergyValue) {
-        this.waterEnergyValue = waterEnergyValue;
-    }
-
-    public String getCoalValue() {
-        return coalValue;
-    }
-
-    public void setCoalValue(String coalValue) {
-        this.coalValue = coalValue;
-    }
-
-    public String getCoalEnergyValue() {
-        return coalEnergyValue;
-    }
-
-    public void setCoalEnergyValue(String coalEnergyValue) {
-        this.coalEnergyValue = coalEnergyValue;
-    }
-
-    public String getSteamValue() {
-        return steamValue;
-    }
-
-    public void setSteamValue(String steamValue) {
-        this.steamValue = steamValue;
-    }
-
-    public void setDataTime(Date dataTime)
-    {
-        this.dataTime = dataTime;
-    }
-
-    public Date getDataTime() 
-    {
-        return dataTime;
-    }
-    public void setTimeType(TimeType timeType)
-    {
-        this.timeType = timeType;
-    }
-
-    public TimeType getTimeType()
-    {
-        return timeType;
-    }
-
-    public String getIndexCode() {
-        return indexCode;
-    }
-
-    public void setIndexCode(String indexCode) {
-        this.indexCode = indexCode;
-    }
-
-    public String getTimeCode() {
-        return timeCode;
-    }
-
-    public void setTimeCode(String timeCode) {
-        this.timeCode = timeCode;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("productId", getProductId())
-            .append("productname", getProductname())
-            .append("muid", getMuid())
-            .append("planValue", getPlanValue())
-            .append("value", getValue())
-            .append("energyValue", getEnergyValue())
-            .append("steamEnereyValue", getSteamEnereyValue())
-            .append("waterValue", getWaterValue())
-            .append("waterEnergyValue", getWaterEnergyValue())
-            .append("coalValue", getCoalValue())
-            .append("coalEnergyValue", getCoalEnergyValue())
-            .append("steamValue", getSteamValue())
-            .append("dataTime", getDataTime())
-            .append("timeType", getTimeType())
-            .append("createTime", getCreateTime())
-            .append("updateTime", getUpdateTime())
-            .toString();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/domain/PlannedOutput.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/domain/PlannedOutput.java
deleted file mode 100644
index 7a7220f..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/domain/PlannedOutput.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package com.dingzhuo.energy.project.plannedOutput.domain;
-
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-import java.util.Date;
-
-/**
- * plannedOutput瀵硅薄 planned_output
- * 
- * @author sys
- * @date 2020-12-16
- */
-public class PlannedOutput extends BaseEntity {
-    private static final long serialVersionUID = 1L;
-    /** 璁″垝鍒嗙被 */
-    @Excel(name = "璁″垝鍒嗙被")
-    private String palnType;
-
-    /** 浜у搧id */
-    @Excel(name = "浜у搧id")
-    private Integer productId;
-
-    /** 璁″垝鍊� */
-    @Excel(name = "璁″垝鍊�")
-    private String planValue;
-    /** 璁″垝鍊� */
-    @Excel(name = "璁″垝鐢电敤閲�")
-    private String value;
-    /** 璁″垝鐢ㄦ按閲� */
-    @Excel(name = "璁″垝姘寸敤閲�")
-    private String waterValue;
-    /** 璁″垝鍊� */
-    @Excel(name = "璁″垝鐓ゆ皵鐢ㄩ噺")
-    private String coalValue;
-    /** 璁″垝鍊� */
-    @Excel(name = "璁″垝钂告苯鐢ㄩ噺")
-    private String steamValue;
-    /** 鏃ユ湡 */
-    @Excel(name = "鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date dataTime;
-    private String indexCode;
-    private String productname;
-    private String productsno;
-    private String muid;
-    private String timeCode;
-    private TimeType timeType;
-    public void setPalnType(String palnType)
-    {
-        this.palnType = palnType;
-    }
-
-    public String getPalnType()
-    {
-        return palnType;
-    }
-    public void setProductId(Integer productId)
-    {
-        this.productId = productId;
-    }
-
-    public Integer getProductId()
-    {
-        return productId;
-    }
-    public void setPlanValue(String planValue)
-    {
-        this.planValue = planValue;
-    }
-
-    public String getPlanValue()
-    {
-        return planValue;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getWaterValue() {
-        return waterValue;
-    }
-
-    public void setWaterValue(String waterValue) {
-        this.waterValue = waterValue;
-    }
-
-    public String getCoalValue() {
-        return coalValue;
-    }
-
-    public void setCoalValue(String coalValue) {
-        this.coalValue = coalValue;
-    }
-
-    public String getSteamValue() {
-        return steamValue;
-    }
-
-    public void setSteamValue(String steamValue) {
-        this.steamValue = steamValue;
-    }
-
-    public void setDataTime(Date dataTime)
-    {
-        this.dataTime = dataTime;
-    }
-
-    public Date getDataTime()
-    {
-        return dataTime;
-    }
-
-    public String getIndexCode() {
-        return indexCode;
-    }
-
-    public void setIndexCode(String indexCode) {
-        this.indexCode = indexCode;
-    }
-
-    public String getProductname() {
-        return productname;
-    }
-
-    public void setProductname(String productname) {
-        this.productname = productname;
-    }
-
-    public String getProductsno() {
-        return productsno;
-    }
-
-    public void setProductsno(String productsno) {
-        this.productsno = productsno;
-    }
-
-    public String getMuid() {
-        return muid;
-    }
-
-    public void setMuid(String muid) {
-        this.muid = muid;
-    }
-
-    public String getTimeCode() {
-        return timeCode;
-    }
-
-    public void setTimeCode(String timeCode) {
-        this.timeCode = timeCode;
-    }
-
-    public TimeType getTimeType() {
-        return timeType;
-    }
-
-    public void setTimeType(TimeType timeType) {
-        this.timeType = timeType;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-                .append("palnType", getPalnType())
-                .append("productId", getProductId())
-                .append("planValue", getPlanValue())
-                .append("dataTime", getDataTime())
-                .append("createTime", getCreateTime())
-                .append("updateTime", getUpdateTime())
-                .toString();
-    }
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/domain/energyMonitoring.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/domain/energyMonitoring.java
deleted file mode 100644
index d6541d5..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/domain/energyMonitoring.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package com.dingzhuo.energy.project.plannedOutput.domain;
-
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-import java.util.Date;
-
-/**
- * plannedOutput瀵硅薄 planned_output
- * 
- * @author sys
- * @date 2020-12-16
- */
-public class energyMonitoring extends BaseEntity {
-    private static final long serialVersionUID = 1L;
-    private String peValue;
-    private String peWaterValue;
-    private String peCoalValue;
-    private String peSteamValue;
-    private String actualValue;
-    private String planValue;
-    private String poValue;
-    private String poVaterValue;
-    private String poCoalValue;
-    private String poSteamValue;
-    private String productid;
-    private String productname;
-    private String muid;
-
-    public String getPeValue() {
-        return peValue;
-    }
-
-    public void setPeValue(String peValue) {
-        this.peValue = peValue;
-    }
-
-    public String getPeWaterValue() {
-        return peWaterValue;
-    }
-
-    public void setPeWaterValue(String peWaterValue) {
-        this.peWaterValue = peWaterValue;
-    }
-
-    public String getPeCoalValue() {
-        return peCoalValue;
-    }
-
-    public void setPeCoalValue(String peCoalValue) {
-        this.peCoalValue = peCoalValue;
-    }
-
-    public String getPeSteamValue() {
-        return peSteamValue;
-    }
-
-    public void setPeSteamValue(String peSteamValue) {
-        this.peSteamValue = peSteamValue;
-    }
-
-    public String getActualValue() {
-        return actualValue;
-    }
-
-    public void setActualValue(String actualValue) {
-        this.actualValue = actualValue;
-    }
-
-    public String getPlanValue() {
-        return planValue;
-    }
-
-    public void setPlanValue(String planValue) {
-        this.planValue = planValue;
-    }
-
-    public String getPoValue() {
-        return poValue;
-    }
-
-    public void setPoValue(String poValue) {
-        this.poValue = poValue;
-    }
-
-    public String getPoVaterValue() {
-        return poVaterValue;
-    }
-
-    public void setPoVaterValue(String poVaterValue) {
-        this.poVaterValue = poVaterValue;
-    }
-
-    public String getPoCoalValue() {
-        return poCoalValue;
-    }
-
-    public void setPoCoalValue(String poCoalValue) {
-        this.poCoalValue = poCoalValue;
-    }
-
-    public String getPoSteamValue() {
-        return poSteamValue;
-    }
-
-    public void setPoSteamValue(String poSteamValue) {
-        this.poSteamValue = poSteamValue;
-    }
-
-    public String getProductid() {
-        return productid;
-    }
-
-    public void setProductid(String productid) {
-        this.productid = productid;
-    }
-
-    public String getProductname() {
-        return productname;
-    }
-
-    public void setProductname(String productname) {
-        this.productname = productname;
-    }
-
-    public String getMuid() {
-        return muid;
-    }
-
-    public void setMuid(String muid) {
-        this.muid = muid;
-    }
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/mapper/PlanEnergyMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/mapper/PlanEnergyMapper.java
deleted file mode 100644
index 741c99a..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/mapper/PlanEnergyMapper.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.dingzhuo.energy.project.plannedOutput.mapper;
-
-import com.dingzhuo.energy.project.plannedOutput.domain.PlanEnergy;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * 銆愯濉啓鍔熻兘鍚嶇О銆慚apper鎺ュ彛
- * 
- * @author sys
- * @date 2020-12-17
- */
-public interface PlanEnergyMapper 
-{
-
-    /**
-     * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛�
-     * 
-     * @param
-     * @return 銆愯濉啓鍔熻兘鍚嶇О銆戦泦鍚�
-     */
-    public List<PlanEnergy> selectPlanEnergyList(@Param("indexIds") List<Integer> indexIds,@Param("timeCode") String timeCode);
-    public List<PlanEnergy> PlanEnergyList(@Param("indexIds") List<Integer> indexIds,@Param("timeCode") String timeCode, @Param("type") String type);
-    void save(@Param("planEnergy") PlanEnergy planEnergy);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/mapper/PlannedOutputMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/mapper/PlannedOutputMapper.java
deleted file mode 100644
index 1737851..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/mapper/PlannedOutputMapper.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.dingzhuo.energy.project.plannedOutput.mapper;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.project.plannedOutput.domain.PlannedOutput;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * plannedOutputMapper鎺ュ彛
- * 
- * @author sys
- * @date 2020-12-16
- */
-public interface PlannedOutputMapper 
-{
-    /**
-     * 鏌ヨplannedOutput鍒楄〃
-     * 
-     * @param
-     * @return plannedOutput闆嗗悎
-     */
-    public List<PlannedOutput> selectPlannedOutputList (@Param("indexIds") List<Integer> indexIds,
-                                                        @Param("timeCode") String timeCode, @Param("palnType") String palnType);
-    public List<PlannedOutput> selectPlanList (@Param("indexIds") List<Integer> indexIds);
-    /**
-     * 鏂板plannedOutput
-     * 
-     * @param plannedOutput plannedOutput
-     * @return 缁撴灉
-     */
-    public int insertPlannedOutput(PlannedOutput plannedOutput);
-
-    /**
-     * 淇敼plannedOutput
-     * 
-     * @param plannedOutput plannedOutput
-     * @return 缁撴灉
-     */
-    public int updatePlannedOutput(PlannedOutput plannedOutput);
-    void save(@Param("plannedOutput") PlannedOutput plannedOutput);
-    void saveDataList(@Param("PlannedOutput") List<PlannedOutput> datas);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/mapper/energyMonitoringMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/mapper/energyMonitoringMapper.java
deleted file mode 100644
index 79625b5..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/mapper/energyMonitoringMapper.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.dingzhuo.energy.project.plannedOutput.mapper;
-
-import com.dingzhuo.energy.project.plannedOutput.domain.energyMonitoring;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * 銆愯濉啓鍔熻兘鍚嶇О銆慚apper鎺ュ彛
- * 
- * @author sys
- * @date 2020-12-17
- */
-public interface energyMonitoringMapper
-{
-
-    /**
-     * 鏌ヨ鍒楄〃
-     */
-    public List<energyMonitoring> selectEnergyMonitoringList(@Param("indexIds") List<Integer> indexIds, @Param("timeCode") String timeCode);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/service/IPlanEnergyService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/service/IPlanEnergyService.java
deleted file mode 100644
index 137464a..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/service/IPlanEnergyService.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.dingzhuo.energy.project.plannedOutput.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.plannedOutput.domain.PlanEnergy;
-import com.dingzhuo.energy.project.plannedOutput.domain.PlannedOutput;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice鎺ュ彛
- * 
- * @author sys
- * @date 2020-12-17
- */
-public interface IPlanEnergyService 
-{
-    /**
-     * 鏌ヨ鍒楄〃
-     * 
-     * @param
-     * @return
-     */
-    public List<PlanEnergy> selectPlanEnergyList(List<Integer> indexIds,TimeType timeType, Date dataTime);
-    public List<PlanEnergy> PlanEnergyList(List<Integer> indexIds, TimeType timeType, Date dataTime,String type);
-    /**
-     * 鏂板淇敼
-     */
-    public void insertPlanEnergy(List<PlanEnergy> datas);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/service/IPlannedOutputService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/service/IPlannedOutputService.java
deleted file mode 100644
index f10bbae..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/service/IPlannedOutputService.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.dingzhuo.energy.project.plannedOutput.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.plannedOutput.domain.PlannedOutput;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * plannedOutputService鎺ュ彛
- * 
- * @author sys
- * @date 2020-12-16
- */
-public interface IPlannedOutputService {
-    /**
-     * 鏌ヨplannedOutput鍒楄〃
-     * 
-     * @param
-     * @return plannedOutput闆嗗悎
-     */
-    public List<PlannedOutput> selectPlannedOutputList(List<Integer> indexIds, TimeType timeType,Date dataTime,String palnType);
-    public List<PlannedOutput> selectPlanList(List<Integer> indexIds);
-    /**
-     * 鏂板plannedOutput
-     *
-     * @return 缁撴灉
-     */
-    //public int insertPlannedOutput(PlannedOutput plannedOutput);
-    public void insertPlannedOutput(List<PlannedOutput> datas);
-    /**
-     * 淇敼plannedOutput
-     * 
-     * @param plannedOutput plannedOutput
-     * @return 缁撴灉
-     */
-    public int updatePlannedOutput(PlannedOutput plannedOutput);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/service/energyMonitoringService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/service/energyMonitoringService.java
deleted file mode 100644
index f074a8f..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/service/energyMonitoringService.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.dingzhuo.energy.project.plannedOutput.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.plannedOutput.domain.energyMonitoring;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice鎺ュ彛
- * 
- * @author sys
- * @date 2020-12-17
- */
-public interface energyMonitoringService
-{
-    /**
-     * 鏌ヨ鍒楄〃
-     *
-     * @param
-     * @return
-     */
-    public List<energyMonitoring> selectEnergyMonitoringList(List<Integer> indexIds, TimeType timeType, Date dataTime);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/service/impl/PlanEnergyServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/service/impl/PlanEnergyServiceImpl.java
deleted file mode 100644
index 16010c9..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/service/impl/PlanEnergyServiceImpl.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.dingzhuo.energy.project.plannedOutput.service.impl;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.plannedOutput.domain.PlanEnergy;
-import com.dingzhuo.energy.project.plannedOutput.domain.PlannedOutput;
-import com.dingzhuo.energy.project.plannedOutput.mapper.PlanEnergyMapper;
-import com.dingzhuo.energy.project.plannedOutput.service.IPlanEnergyService;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-/**
- * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-12-17
- */
-@Service
-public class PlanEnergyServiceImpl implements IPlanEnergyService
-{
-    private Logger logger = LogManager.getLogger(PlanEnergyServiceImpl.class);
-    @Autowired
-    private PlanEnergyMapper planEnergyMapper;
-
-    /**
-     * 鏌ヨ鍒楄〃
-     */
-    @Override
-    public List<PlanEnergy> selectPlanEnergyList(List<Integer> indexIds,TimeType timeType, Date dataTime)
-    {
-        if (indexIds.size() !=0) {
-            String timeCode = TimeManager.getTimeCode(dataTime, timeType);
-            return planEnergyMapper.selectPlanEnergyList(indexIds,timeCode);
-        }
-        return Collections.emptyList();
-    }
-
-    public List<PlanEnergy> PlanEnergyList(List<Integer> indexIds, TimeType timeType, Date dataTime,String type)
-    {
-        if (indexIds.size() !=0) {
-            String timeCode = TimeManager.getTimeCode(dataTime, timeType);
-            return planEnergyMapper.PlanEnergyList(indexIds, timeCode,type);
-        }
-        return Collections.emptyList();
-    }
-
-
-    /**
-     * 鏂板淇敼
-     */
-    @Override
-    public void insertPlanEnergy(List<PlanEnergy> datas) {
-        List<List<PlanEnergy>> splitDatas = splitList(datas, 100);
-        if (splitDatas != null) {
-            splitDatas.parallelStream().forEach(dataPart -> {
-                /*try {
-                    plannedOutputMapper.saveDataList(dataPart);
-                } catch (Exception ex) {
-                    logger.error("鎵归噺淇濆瓨鏁版嵁澶辫触", ex);*/
-                dataPart.parallelStream().forEach(dataItem -> {
-                    try {
-                        planEnergyMapper.save(dataItem);
-                    } catch (Exception singleEx) {
-                        logger.error("鍗曚釜鎸囨爣鏁版嵁淇濆瓨澶辫触锛併��" + dataItem + "銆�", singleEx);
-                    }
-                });
-                /* }*/
-            });
-        }
-    }
-    public static <E> List<List<E>> splitList(List<E> targetList, Integer splitSize) {
-        if (targetList == null) {
-            return Collections.emptyList();
-        }
-
-        int size = targetList.size();
-        List<List<E>> resultList = new ArrayList<>();
-        if (size <= splitSize) {
-            resultList.add(targetList);
-        } else {
-            for (int i = 0; i < size; i += splitSize) {
-                //鐢ㄤ簬闄愬埗鏈�鍚庝竴閮ㄥ垎size灏忎簬splitSize鐨刲ist
-                int limit = i + splitSize;
-                if (limit > size) {
-                    limit = size;
-                }
-                resultList.add(targetList.subList(i, limit));
-            }
-        }
-        return resultList;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/service/impl/PlannedOutputServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/service/impl/PlannedOutputServiceImpl.java
deleted file mode 100644
index eb9fe31..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/service/impl/PlannedOutputServiceImpl.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package com.dingzhuo.energy.project.plannedOutput.service.impl;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.dataservice.service.impl.PeriodDataServiceImpl;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.project.plannedOutput.mapper.PlannedOutputMapper;
-import com.dingzhuo.energy.project.plannedOutput.domain.PlannedOutput;
-import com.dingzhuo.energy.project.plannedOutput.service.IPlannedOutputService;
-
-/**
- * plannedOutputService涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-12-16
- */
-@Service
-public class PlannedOutputServiceImpl implements IPlannedOutputService 
-{
-    private Logger logger = LogManager.getLogger(PlannedOutputServiceImpl.class);
-    @Autowired
-    private PlannedOutputMapper plannedOutputMapper;
-
-    /**
-     * 鏌ヨplannedOutput鍒楄〃
-     * 
-     * @param
-     * @return plannedOutput
-     */
-    @Override
-    public List<PlannedOutput> selectPlannedOutputList(List<Integer> indexIds, TimeType timeType,Date dataTime,String palnType)
-    {
-        if (indexIds.size() !=0) {
-            String timeCode = TimeManager.getTimeCode(dataTime, timeType);
-            return plannedOutputMapper.selectPlannedOutputList(indexIds, timeCode,palnType);
-        }
-        return Collections.emptyList();
-    }
-    public List<PlannedOutput> selectPlanList(List<Integer> indexIds){
-        if (indexIds.size() !=0) {
-            return plannedOutputMapper.selectPlanList(indexIds);
-        }
-        return Collections.emptyList();
-    }
-    /**
-     * 鏂板plannedOutput
-     *
-     * @return 缁撴灉
-     */
-    /*@Override
-    public int insertPlannedOutput(PlannedOutput plannedOutput)
-    {
-        return plannedOutputMapper.insertPlannedOutput(plannedOutput);
-    }*/
-    @Override
-    public void insertPlannedOutput(List<PlannedOutput> datas) {
-        List<List<PlannedOutput>> splitDatas = splitList(datas, 100);
-        if (splitDatas != null) {
-            splitDatas.parallelStream().forEach(dataPart -> {
-                /*try {
-                    plannedOutputMapper.saveDataList(dataPart);
-                } catch (Exception ex) {
-                    logger.error("鎵归噺淇濆瓨鏁版嵁澶辫触", ex);*/
-                    dataPart.parallelStream().forEach(dataItem -> {
-                        try {
-                            plannedOutputMapper.save(dataItem);
-                        } catch (Exception singleEx) {
-                            logger.error("鍗曚釜鎸囨爣鏁版嵁淇濆瓨澶辫触锛併��" + dataItem + "銆�", singleEx);
-                        }
-                    });
-               /* }*/
-            });
-        }
-    }
-    /**
-     * 淇敼plannedOutput
-     * 
-     * @param plannedOutput plannedOutput
-     * @return 缁撴灉
-     */
-    @Override
-    public int updatePlannedOutput(PlannedOutput plannedOutput)
-    {
-        return plannedOutputMapper.updatePlannedOutput(plannedOutput);
-    }
-    public static <E> List<List<E>> splitList(List<E> targetList, Integer splitSize) {
-        if (targetList == null) {
-            return Collections.emptyList();
-        }
-
-        int size = targetList.size();
-        List<List<E>> resultList = new ArrayList<>();
-        if (size <= splitSize) {
-            resultList.add(targetList);
-        } else {
-            for (int i = 0; i < size; i += splitSize) {
-                //鐢ㄤ簬闄愬埗鏈�鍚庝竴閮ㄥ垎size灏忎簬splitSize鐨刲ist
-                int limit = i + splitSize;
-                if (limit > size) {
-                    limit = size;
-                }
-                resultList.add(targetList.subList(i, limit));
-            }
-        }
-        return resultList;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/service/impl/energyMonitoringServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/service/impl/energyMonitoringServiceImpl.java
deleted file mode 100644
index f229104..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/plannedOutput/service/impl/energyMonitoringServiceImpl.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.dingzhuo.energy.project.plannedOutput.service.impl;
-
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.plannedOutput.domain.energyMonitoring;
-import com.dingzhuo.energy.project.plannedOutput.mapper.energyMonitoringMapper;
-import com.dingzhuo.energy.project.plannedOutput.service.energyMonitoringService;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-/**
- * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-12-17
- */
-@Service
-public class energyMonitoringServiceImpl implements energyMonitoringService
-{
-    private Logger logger = LogManager.getLogger(energyMonitoringServiceImpl.class);
-    @Autowired
-    private energyMonitoringMapper energyMonitoringMapper;
-
-    /**
-     * 鏌ヨ鍒楄〃
-     */
-    @Override
-    public List<energyMonitoring> selectEnergyMonitoringList(List<Integer> indexIds, TimeType timeType, Date dataTime)
-    {
-        if (indexIds.size() !=0) {
-            String timeCode = TimeManager.getTimeCode(dataTime, timeType);
-            return energyMonitoringMapper.selectEnergyMonitoringList(indexIds,timeCode);
-        }
-        return Collections.emptyList();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/ComprehensiveReportsController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/ComprehensiveReportsController.java
deleted file mode 100644
index e3539a8..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/ComprehensiveReportsController.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.controller;
-
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.reportForm.domain.dto.ComprehensiveReportsDTO;
-import com.dingzhuo.energy.project.reportForm.domain.vo.ComprehensiveConsumptionRatioVO;
-import com.dingzhuo.energy.project.reportForm.domain.vo.ComprehensiveReportsItem;
-import com.dingzhuo.energy.project.reportForm.domain.vo.ComprehensiveUnitConsumptionChartVO;
-import com.dingzhuo.energy.project.reportForm.service.IComprehensiveReportsService;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
-
-/**
- * 缁煎悎鎶ヨ〃
- *
- * @Author: Zhujw
- * @Date: 2023/3/16
- */
-@RestController
-@RequestMapping("/report/comprehensive")
-class ComprehensiveReportsController extends BaseController {
-    @Autowired
-    private IComprehensiveReportsService service;
-
-    /**
-     * 缁煎悎鎶ヨ〃鏌ヨ鍒楄〃淇℃伅
-     */
-    //    @PreAuthorize("@ss.hasPermi('dailyReport:list')")
-    @GetMapping("/list")
-    @ApiOperation(value = "缁煎悎鎶ヨ〃鏌ヨ鍒楄〃淇℃伅", notes = "棣栭〉鑾峰彇鑳芥簮鍒嗘椂鐩戞祴")
-    public AjaxResult list(@Validated ComprehensiveReportsDTO dto) {
-        List<ComprehensiveReportsItem> reportsItemList = service.listComprehensiveReport(dto);
-        return AjaxResult.success(reportsItemList);
-    }
-
-    /**
-     * 缁煎悎鎶ヨ〃鏌ヨ鐢ㄨ兘鍗曞厓鏌辩姸鍥句俊鎭�
-     */
-    //    @PreAuthorize("@ss.hasPermi('dailyReport:list')")
-    @GetMapping("/listEnergyUnitChart")
-    @ApiOperation(value = "缁煎悎鎶ヨ〃鏌ヨ淇℃伅", notes = "棣栭〉鑾峰彇鑳芥簮鍒嗘椂鐩戞祴")
-    public AjaxResult listUnitChart(@Validated ComprehensiveReportsDTO dto) {
-        List<ComprehensiveReportsItem> chart = service.listEnergyUnitComprehensiveReport(dto);
-        return AjaxResult.success(chart);
-    }
-
-    /**
-     * 缁煎悎鎶ヨ〃鏌ヨ鑳借�楀崰姣斾俊鎭�
-     */
-    //    @PreAuthorize("@ss.hasPermi('dailyReport:list')")
-    @GetMapping("/getEnergyConsumptionRatio")
-    @ApiOperation(value = "缁煎悎鎶ヨ〃鏌ヨ鑳借�楀崰姣斾俊鎭�", notes = "缁煎悎鎶ヨ〃鏌ヨ鑳借�楀崰姣斾俊鎭�")
-    public AjaxResult getEnergyConsumptionRatio(@Validated ComprehensiveReportsDTO dto) {
-        List<ComprehensiveConsumptionRatioVO> vo = service.getEnergyConsumptionRatio(dto);
-        return AjaxResult.success(vo);
-    }
-
-    /**
-     * 缁煎悎鎶ヨ〃鑾峰彇鑳借�楄澶囧崰姣斾俊鎭�
-     */
-    //    @PreAuthorize("@ss.hasPermi('dailyReport:list')")
-    @GetMapping("/getEnergyUnitConsumptionRatio")
-    @ApiOperation(value = "缁煎悎鎶ヨ〃鑾峰彇鑳借�楄澶囧崰姣斾俊鎭�", notes = "缁煎悎鎶ヨ〃鑾峰彇鑳借�楄澶囧崰姣斾俊鎭�")
-    public AjaxResult getEnergyUnitConsumptionRatio(@Validated ComprehensiveReportsDTO dto) {
-        List<ComprehensiveUnitConsumptionChartVO> vo = service.getEnergyUnitConsumptionRatio(dto);
-        return AjaxResult.success(vo);
-    }
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/ReportSetController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/ReportSetController.java
deleted file mode 100644
index e352796..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/ReportSetController.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.controller;
-
-import com.dingzhuo.energy.common.utils.ServletUtils;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem;
-import com.dingzhuo.energy.data.monitoring.alarm.service.IAlarmItemService;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.security.LoginUser;
-import com.dingzhuo.energy.framework.security.service.TokenService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-import com.dingzhuo.energy.project.reportForm.domain.reportSet;
-import com.dingzhuo.energy.project.reportForm.domain.reportSetRequestModel;
-import com.dingzhuo.energy.project.reportForm.service.IreportSetService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-/**
- * 涓婃姤璁剧疆Controller
- *
- * @author sys
- * @date 2020-03-02
- */
-@RestController
-@RequestMapping("/system/report")
-public class ReportSetController extends BaseController {
-
-    @Autowired
-    private IAlarmItemService alarmItemService;
-
-    @Autowired
-    private TokenService tokenService;
-
-    @Autowired
-    private IreportSetService reportSetService;
-
-    /**
-     * 鏌ヨ涓婃姤璁剧疆鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('system:reportSet:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(reportSetRequestModel requestModel) {
-        List<reportSet> list = reportSetService.listReportSet(requestModel);
-        return getDataTable(list);
-    }
-
-    /**
-     * 淇濆瓨涓婃姤閰嶇疆
-     *
-     * @param listMap
-     * @return
-     */
-    @PutMapping(value = "/save")
-    public AjaxResult save(@RequestBody List<reportSet> listMap) {
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        String username = loginUser.getUsername();
-
-        return toAjax(reportSetService.saveReportSet(listMap, username));
-    }
-
-    /**
-     * 鏌ヨ鑺傜偣涓嬬殑鐐逛綅
-     *
-     * @param nodeId    鑺傜偣id
-     * @param indexType 鐐逛綅绫诲瀷
-     * @return
-     */
-    @GetMapping(value = "/listNodeEnergyIndex")
-    public AjaxResult listNodeEnergyIndex(String nodeId, String indexType) {
-
-        return AjaxResult.success(reportSetService.listNodeIndex(nodeId, indexType));
-    }
-
-    /**
-     * 鏌ヨ鑺傜偣涓嬬殑鐐逛綅
-     *
-     * @param nodeId       鑺傜偣id
-     * @param indexId      鐐逛綅id
-     * @param enableStatus 鍚敤闄愬�肩姸鎬�
-     * @return
-     */
-    @GetMapping(value = "/updateEnableStatus")
-    public AjaxResult updateEnableStatus(String nodeId, String indexId, boolean enableStatus) {
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        String username = loginUser.getUsername();
-//        int res = reportSetService.updateEnableStatus(nodeId, indexId, enableStatus, username);
-//        if (res <= 0) {
-//            return AjaxResult.error("璇峰厛璁剧疆鎶ヨ鍊间互鍙婃浛鎹㈠�硷紒");
-//        }
-        return AjaxResult.success(reportSetService.updateEnableStatus(nodeId, indexId, enableStatus, username));
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/annualReportController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/annualReportController.java
deleted file mode 100644
index 808afc9..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/annualReportController.java
+++ /dev/null
@@ -1,180 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.controller;
-
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.reportForm.domain.annualReport;
-import com.dingzhuo.energy.project.reportForm.domain.dailyReport;
-import com.dingzhuo.energy.project.reportForm.service.IannualReportService;
-import com.dingzhuo.energy.project.reportForm.service.IreportFormService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * 鎶ヨ〃
- * @author sys
- * @date 2020-03-25
- */
-@RestController
-@RequestMapping("/report/annualReport")
-class annualReportController extends BaseController {
-    @Autowired
-    private IannualReportService annualReportService;
-    @Autowired
-    private IModelNodeService modelNodeService;
-    /**
-     * 鎶ヨ〃鏌ヨ
-     */
-    @PreAuthorize("@ss.hasPermi('report:annualReport:list')")
-    @GetMapping("/list")
-    public AjaxResult list(DataItem dataItem) throws ParseException {
-        List<ModelNode> nodeId = modelNodeService.getModelNodeByModelCode(dataItem.getIndexCode());
-        List<EnergyIndex> energyList = modelNodeService.getSettingIndex(nodeId.get(0).getNodeId());
-        List<String> indexIds = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        List<annualReport> dataList=new ArrayList<>();
-        DateFormat df = new SimpleDateFormat("yyyy");
-        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String aa= df.format(dataItem.getBeginTime());
-        String bb="";
-        int i = 1;
-        while (i <= 12) {
-            if(i>9){
-                bb=aa+"-"+i+"-01 00:00:00";
-            }else{
-                bb=aa+"-0"+i+"-01 00:00:00";
-            }
-            annualReport report=new annualReport();
-            report.setDataTime(sf.parse(bb));
-            report.setValue("value"+i);
-            dataList.add(report);
-            i++;
-        }
-        List<annualReport> list = annualReportService.getannualReportList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-        return AjaxResult.success(list);
-    }
-    /**
-     * 瀵煎嚭鎶ヨ〃璁剧疆鍔熻兘鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('report:annualReport::export')")
-    @Log(title = "缁煎悎鎶ヨ〃", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(DataItem dataItem) throws ParseException {
-        List<ModelNode> nodeId = modelNodeService.getModelNodeByModelCode(dataItem.getIndexCode());
-        List<EnergyIndex> energyList = modelNodeService.getSettingIndex(nodeId.get(0).getNodeId());
-        List<String> indexIds = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        List<annualReport> dataList=new ArrayList<>();
-        if(dataItem.getTimeType().name().equals("HOUR")){
-            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-            String aa= df.format(dataItem.getBeginTime());
-            String bb="";
-            int i = 1;
-            while (i <= 24) {
-                if(i>9){
-                    bb=aa+" "+i+":00:00";
-                }else{
-                    bb=aa+" 0"+i+":00:00";
-                }
-                annualReport report=new annualReport();
-                SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                report.setDataTime(sf.parse(bb));
-                report.setValue("value"+i);
-                dataList.add(report);
-                i++;
-            }
-        }else if(dataItem.getTimeType().name().equals("DAY")){
-            DateFormat df = new SimpleDateFormat("yyyy-MM");
-            String aa= df.format(dataItem.getDataTime());
-            String bb="";
-            int i = 1;
-            annualReport report1=new annualReport();
-            while (i <= Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))) {
-                if(i>9){
-                    bb=aa+"-"+i+" 00:00:00";
-                }else{
-                    bb=aa+"-0"+i+" 00:00:00";
-                }
-                annualReport report=new annualReport();
-                SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                report.setDataTime(sf.parse(bb));
-                report.setValue("value"+i);
-                i++;
-            }
-            //table.add(report1);
-        }else if(dataItem.getTimeType().name().equals("MONTH")){
-            DateFormat df = new SimpleDateFormat("yyyy");
-            String aa= df.format(dataItem.getDataTime());
-            String bb="";
-            int i = 1;
-            while (i <= 12) {
-                if(i>9){
-                    bb=aa+"-"+i+"-01 00:00:00";
-                }else{
-                    bb=aa+"-0"+i+"-01 00:00:00";
-                }
-                annualReport report=new annualReport();
-                SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                report.setDataTime(sf.parse(bb));
-                report.setValue("value"+i);
-                dataList.add(report);
-                i++;
-            }
-        }
-        List<annualReport> list = annualReportService.getannualReportList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());;
-        ExcelUtil<annualReport> util = new ExcelUtil<annualReport>(annualReport.class);
-        return util.exportExcel(list, "缁煎悎鎶ヨ〃");
-    }
-    public static String getLastDayOfMonth(String yearMonth) {
-        int year = Integer.parseInt(yearMonth.split("-")[0]);  //骞�
-        int month = Integer.parseInt(yearMonth.split("-")[1]); //鏈�
-        Calendar cal = Calendar.getInstance();
-        // 璁剧疆骞翠唤
-        cal.set(Calendar.YEAR, year);
-        // 璁剧疆鏈堜唤
-        // cal.set(Calendar.MONTH, month - 1);
-        cal.set(Calendar.MONTH, month); //璁剧疆褰撳墠鏈堢殑涓婁竴涓湀
-        // 鑾峰彇鏌愭湀鏈�澶уぉ鏁�
-        //int lastDay = cal.getActualMaximum(Calendar.DATE);
-        int lastDay = cal.getMinimum(Calendar.DATE); //鑾峰彇鏈堜唤涓殑鏈�灏忓�硷紝鍗崇涓�澶�
-        // 璁剧疆鏃ュ巻涓湀浠界殑鏈�澶уぉ鏁�
-        //cal.set(Calendar.DAY_OF_MONTH, lastDay);
-        cal.set(Calendar.DAY_OF_MONTH, lastDay - 1); //涓婃湀鐨勭涓�澶╁噺鍘�1灏辨槸褰撴湀鐨勬渶鍚庝竴澶�
-        // 鏍煎紡鍖栨棩鏈�
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-        return sdf.format(cal.getTime());
-    }
-    private static Map<String, DataItem> change(List<DataItem> list) {
-        Map<String, DataItem> resultMap = new HashMap<String, DataItem>();
-        Set setTmp = new HashSet();
-        for (DataItem tmp : list) {
-            setTmp.add(tmp.getIndexId());
-        }
-        Iterator it = setTmp.iterator();
-        while (it.hasNext()) {
-            String oneSetTmpStr = (String) it.next();
-            List<DataItem> oneSetTmpList = new ArrayList<DataItem>();
-            for (DataItem tmp : list) {
-                String oneMapValueStr = tmp.getIndexId();
-                if (oneMapValueStr.equals(oneSetTmpStr)) {
-                    oneSetTmpList.add(tmp);
-                }
-            }
-            resultMap.put(oneSetTmpStr, oneSetTmpList.get(0));
-        }
-        return  resultMap;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/consolidatedStatementsController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/consolidatedStatementsController.java
deleted file mode 100644
index 6d7d6fa..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/consolidatedStatementsController.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.controller;
-
-import java.io.*;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.List;
-import java.util.UUID;
-
-import com.dingzhuo.energy.common.utils.SecurityUtils;
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.framework.config.RuoYiConfig;
-import com.dingzhuo.energy.project.reportForm.domain.JtZhnhExcel;
-import org.apache.commons.io.FileUtils;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.ClassUtils;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.project.reportForm.domain.consolidatedStatements;
-import com.dingzhuo.energy.project.reportForm.service.IconsolidatedStatementsService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-import javax.servlet.ServletContext;
-
-/**
- * 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃Controller
- * 
- * @author sys
- * @date 2021-01-15
- */
-@RestController
-@RequestMapping("/reportForm/consolidatedStatements")
-public class consolidatedStatementsController extends BaseController
-{
-    @Autowired
-    private IconsolidatedStatementsService consolidatedStatementsService;
-
-    /**
-     * 鏌ヨ鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('reportForm:consolidatedStatements:list')")
-    @GetMapping("/list")
-    public AjaxResult list(consolidatedStatements consolidatedStatements)
-    {
-        List<consolidatedStatements> list = consolidatedStatementsService.selectconsolidatedStatementsList(consolidatedStatements);
-        return AjaxResult.success(list);
-    }
-
-    /**
-     * 鑾峰彇鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('reportForm:consolidatedStatements:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(consolidatedStatementsService.selectconsolidatedStatementsById(id));
-    }
-
-    /**
-     * 鏂板鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     */
-    @PreAuthorize("@ss.hasPermi('reportForm:consolidatedStatements:add')")
-    @Log(title = "鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody consolidatedStatements consolidatedStatements) throws ParseException {
-        consolidatedStatements.setId(UUID.randomUUID().toString());
-        consolidatedStatements.setCreateBy(SecurityUtils.getUsername());
-        return toAjax(consolidatedStatementsService.insertconsolidatedStatements(consolidatedStatements));
-    }
-
-    /**
-     * 淇敼鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     */
-    @PreAuthorize("@ss.hasPermi('reportForm:consolidatedStatements:edit')")
-    @Log(title = "鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody consolidatedStatements consolidatedStatements)
-    {
-        return toAjax(consolidatedStatementsService.updateconsolidatedStatements(consolidatedStatements));
-    }
-
-    /**
-     * 鍒犻櫎鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     */
-    @PreAuthorize("@ss.hasPermi('reportForm:consolidatedStatements:remove')")
-    @Log(title = "鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(consolidatedStatementsService.deleteconsolidatedStatementsByIds(ids));
-    }
-    /**
-     * 瀵煎嚭鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('reportForm:consolidatedStatements:export')")
-    @Log(title = "鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(consolidatedStatements consolidatedStatements)
-    {
-        List<consolidatedStatements> list = consolidatedStatementsService.selectconsolidatedStatementsList(consolidatedStatements);
-        /*ExcelUtil<consolidatedStatements> util = new ExcelUtil<consolidatedStatements>(consolidatedStatements.class);
-        return util.exportExcel(list, "consolidatedStatements");*/
-        String downLoadFilePaht = null;
-        if(list.size()>0){
-            JtZhnhExcel excelout=new JtZhnhExcel();
-            downLoadFilePaht=excelout.writeExcel(RuoYiConfig.getDownloadPath() + "jhnhrep.xlsx",list);
-        }
-        return AjaxResult.success(downLoadFilePaht);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/dailyReportController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/dailyReportController.java
deleted file mode 100644
index 2111899..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/dailyReportController.java
+++ /dev/null
@@ -1,216 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.controller;
-
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.reportForm.domain.dailyReport;
-import com.dingzhuo.energy.project.reportForm.service.IdailyReportService;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.ObjectUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.lang.reflect.Field;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * 鎶ヨ〃
- * @author sys
- * @date 2020-03-25
- */
-@RestController
-@RequestMapping("/report/dailyReport")
-class dailyReportController extends BaseController {
-    @Autowired
-    private IdailyReportService dailyReportService;
-    @Autowired
-    private IModelNodeService modelNodeService;
-    /**
-     * 鎶ヨ〃鏌ヨ
-     */
-    @GetMapping("/list")
-    public AjaxResult list(DataItem dataItem) throws ParseException {
-        List<ModelNode> nodeId = modelNodeService.getModelNodeByModelCode(dataItem.getIndexCode());
-        List<EnergyIndex> energyList = modelNodeService.getSettingIndex(nodeId.get(0).getNodeId());
-        List<String> indexIds = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        dailyReport reportList =new  dailyReport();
-        List<dailyReport> dataList=new ArrayList<>();
-        /*List<Map> table=new ArrayList<>();
-        Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�*/
-        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String aa= df.format(dataItem.getDataTime());
-        String bb="";
-        int i = 0;
-        dataItem.setBeginTime(dataItem.getDataTime());
-        String endTime=aa+" 24:00:00";
-        dataItem.setEndTime(sf.parse(endTime));
-        while (i < 24) {
-            if(i>9){
-                bb=aa+" "+i+":00:00";
-            }else{
-                bb=aa+" 0"+i+":00:00";
-            }
-            dailyReport report=new dailyReport();
-            report.setDataTime(sf.parse(bb));
-            report.setValue("value"+i);
-            dataList.add(report);
-            i++;
-        }
-       List<dailyReport> list = dailyReportService.getDailyReportList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-        reportList.setTabledata(list);
-        /*table.add(tableColumn);
-        reportList.setTablehead(table);*/
-        return AjaxResult.success(list);
-        /*//琛ㄦ牸鏁版嵁
-        List<DataItem> list = reportFormService.getDailyReportList(indexCode, dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType());
-        Map<Date, List<DataItem>> groupBy = list.stream().collect(Collectors.groupingBy(DataItem::getDataTime));
-        List<Map<String,Object>> tableRows= new ArrayList<>();
-        AtomicInteger colcount= new AtomicInteger(0);//鏃ユ湡鍒楃殑鍒嗙粍璁板綍鏁�
-        groupBy.forEach((time,indexDatas)->{
-            //time 鏄瘡涓�鍒楃殑 鏃ユ湡
-            //indexdatas鏄瘡涓�鍒楃殑琛屾暟鎹�
-            //閬嶅巻姣忎竴鍒楃殑琛岄泦鍚�
-            for(int rowCounts=0;rowCounts<indexDatas.size();rowCounts++)
-            {
-                DataItem indexData = indexDatas.get(rowCounts);//鍙栧垪鐨勮鍗曞厓鏍�
-                if(rowCounts==0 && tableRows.size()==0)
-                {
-                    Map<String,Object> indexDataRow = new HashMap<>();
-                    indexDataRow.put("indexname",indexData.getIndexName());
-                    indexDataRow.put(time.getHours()+"",indexData.getValue());
-                    tableRows.add(indexDataRow);
-                }else
-                {
-                    if((tableRows.size()-1)==rowCounts)
-                    {
-                        Map<String,Object> t = tableRows.get(rowCounts);
-                        t.put("indexname",indexData.getIndexName());
-                        t.put(time.getHours()+"",indexData.getValue());
-                        tableRows.add(t);
-                    }else if((tableRows.size()-1)<rowCounts){
-                        Map<String,Object> indexDataRow = new HashMap<>();
-                        indexDataRow.put("indexname",indexData.getIndexName());
-                        indexDataRow.put(time.getHours()+"",indexData.getValue());
-                        tableRows.add(indexDataRow);
-                    }
-                }
-            }
-            colcount.getAndIncrement();
-        });
-        System.out.print("tableRows="+tableRows.size());
-        System.out.print("=========================");*/
-    }
-    /**
-     * 瀵煎嚭宸ュ簭鍗曡�楃粺璁℃寚鏍囪缃姛鑳藉垪琛�
-     */
-    @Log(title = "缁煎悎鎶ヨ〃", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(DataItem dataItem) throws ParseException {
-        ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(dataItem.getIndexCode());
-        if (ObjectUtils.isEmpty(modelNode)) {
-            return AjaxResult.success("鏆傛棤鏁版嵁");
-        }
-        List<dailyReport> dataList=new ArrayList<>();
-        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String aa= df.format(dataItem.getDataTime());
-        String bb;
-        int i = 0;
-        dataItem.setBeginTime(dataItem.getDataTime());
-        String endTime=aa+" 24:00:00";
-        dataItem.setEndTime(sf.parse(endTime));
-        while (i < 24) {
-            if(i>9){
-                bb=aa+" "+i+":00:00";
-            }else{
-                bb=aa+" 0"+i+":00:00";
-            }
-            dailyReport report=new dailyReport();
-            report.setDataTime(sf.parse(bb));
-            report.setValue("value"+i);
-            dataList.add(report);
-            i++;
-        }
-        List<dailyReport> list = dailyReportService.listDailyReportList(modelNode.getNodeId(), dataList,dataItem.getBeginTime(),
-                dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-        if(CollectionUtils.isNotEmpty(list)){
-            list.forEach(this::valueRep);
-        }
-        ExcelUtil<dailyReport> util = new ExcelUtil<>(dailyReport.class);
-        return util.exportExcel(list, "缁煎悎鎸囨爣鍒嗘瀽鏃�");
-    }
-
-    public void valueRep(dailyReport dr){
-        Field[] fields = dr.getClass().getDeclaredFields();
-        for(Field field:fields){
-            field.setAccessible(true);
-            Object obj = field.getType();
-            if(field.getType().getName().equals("java.lang.Double")){
-                String name = field.getName();
-                try {
-                    if(ObjectUtils.isEmpty(field.get(dr)))
-                    {
-                        field.set(dr,0.00);
-                    }
-                } catch (IllegalAccessException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-    }
-
-
-    public static String getLastDayOfMonth(String yearMonth) {
-        int year = Integer.parseInt(yearMonth.split("-")[0]);  //骞�
-        int month = Integer.parseInt(yearMonth.split("-")[1]); //鏈�
-        Calendar cal = Calendar.getInstance();
-        // 璁剧疆骞翠唤
-        cal.set(Calendar.YEAR, year);
-        // 璁剧疆鏈堜唤
-        // cal.set(Calendar.MONTH, month - 1);
-        cal.set(Calendar.MONTH, month); //璁剧疆褰撳墠鏈堢殑涓婁竴涓湀
-        // 鑾峰彇鏌愭湀鏈�澶уぉ鏁�
-        //int lastDay = cal.getActualMaximum(Calendar.DATE);
-        int lastDay = cal.getMinimum(Calendar.DATE); //鑾峰彇鏈堜唤涓殑鏈�灏忓�硷紝鍗崇涓�澶�
-        // 璁剧疆鏃ュ巻涓湀浠界殑鏈�澶уぉ鏁�
-        //cal.set(Calendar.DAY_OF_MONTH, lastDay);
-        cal.set(Calendar.DAY_OF_MONTH, lastDay - 1); //涓婃湀鐨勭涓�澶╁噺鍘�1灏辨槸褰撴湀鐨勬渶鍚庝竴澶�
-        // 鏍煎紡鍖栨棩鏈�
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-        return sdf.format(cal.getTime());
-    }
-    private static Map<String, DataItem> change(List<DataItem> list) {
-        Map<String, DataItem> resultMap = new HashMap<String, DataItem>();
-        Set setTmp = new HashSet();
-        for (DataItem tmp : list) {
-            setTmp.add(tmp.getIndexId());
-        }
-        Iterator it = setTmp.iterator();
-        while (it.hasNext()) {
-            String oneSetTmpStr = (String) it.next();
-            List<DataItem> oneSetTmpList = new ArrayList<DataItem>();
-            for (DataItem tmp : list) {
-                String oneMapValueStr = tmp.getIndexId();
-                if (oneMapValueStr.equals(oneSetTmpStr)) {
-                    oneSetTmpList.add(tmp);
-                }
-            }
-            resultMap.put(oneSetTmpStr, oneSetTmpList.get(0));
-        }
-        return  resultMap;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/monthlyReportController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/monthlyReportController.java
deleted file mode 100644
index df5119b..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/monthlyReportController.java
+++ /dev/null
@@ -1,201 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.controller;
-
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.reportForm.domain.monthlyReport;
-import com.dingzhuo.energy.project.reportForm.service.ImonthlyReportService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * 鎶ヨ〃
- * @author sys
- * @date 2020-03-25
- */
-@RestController
-@RequestMapping("/report/monthlyReport")
-class monthlyReportController extends BaseController {
-    @Autowired
-    private ImonthlyReportService ImonthlyReportService;
-    @Autowired
-    private IModelNodeService modelNodeService;
-    /**
-     * 鎶ヨ〃鏌ヨ
-     */
-    @PreAuthorize("@ss.hasPermi('report:monthlyReport:list')")
-    @GetMapping("/list")
-    public AjaxResult list(DataItem dataItem) throws ParseException {
-        List<ModelNode> nodeId = modelNodeService.getModelNodeByModelCode(dataItem.getIndexCode());
-        List<EnergyIndex> energyList = modelNodeService.getSettingIndex(nodeId.get(0).getNodeId());
-        List<String> indexIds = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        monthlyReport reportList =new  monthlyReport();
-        List<monthlyReport> dataList=new ArrayList<>();
-        List<Map> table=new ArrayList<>();
-        Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
-        DateFormat df = new SimpleDateFormat("yyyy-MM");
-        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String aa= df.format(dataItem.getDataTime());
-        String bb="";
-        int i = 1;
-        monthlyReport report1=new monthlyReport();
-        String beginTime=aa+"-01 00:00:00";
-        dataItem.setBeginTime(sf.parse(beginTime));
-        String endTime=aa+"-"+Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))+" 00:00:00";
-        dataItem.setEndTime(sf.parse(endTime));
-        while (i <= Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))) {
-            if(i>9){
-                bb=aa+"-"+i+" 00:00:00";
-            }else{
-                bb=aa+"-0"+i+" 00:00:00";
-            }
-            monthlyReport report=new monthlyReport();
-            report.setDataTime(sf.parse(bb));
-            report.setValue("value"+i);
-            dataList.add(report);
-            tableColumn.put("value"+i,String.valueOf(i)+"鏃�");
-            i++;
-        }
-        List<monthlyReport> list = ImonthlyReportService.getMonthlyReporList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-        int count=Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2));
-        list.forEach(monthlyReport -> monthlyReport.setCount(count));
-        reportList.setTabledata(list);
-        table.add(tableColumn);
-        reportList.setTablehead(table);
-        return AjaxResult.success(reportList);
-    }
-    /**
-     * 瀵煎嚭宸ュ簭鍗曡�楃粺璁℃寚鏍囪缃姛鑳藉垪琛�
-     */
-    @PreAuthorize("@ss.hasPermi('report:monthlyReport::export')")
-    @Log(title = "缁煎悎鎶ヨ〃", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(DataItem dataItem) throws ParseException {
-        List<ModelNode> nodeId = modelNodeService.getModelNodeByModelCode(dataItem.getIndexCode());
-        List<EnergyIndex> energyList = modelNodeService.getSettingIndex(nodeId.get(0).getNodeId());
-        List<String> indexIds = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        List<monthlyReport> dataList=new ArrayList<>();
-
-        if(dataItem.getTimeType().name().equals("HOUR")){
-            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-            String aa= df.format(dataItem.getDataTime());
-            String bb="";
-            int i = 1;
-            while (i <= 24) {
-                if(i>9){
-                    bb=aa+" "+i+":00:00";
-                }else{
-                    bb=aa+" 0"+i+":00:00";
-                }
-                monthlyReport report=new monthlyReport();
-                SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                report.setDataTime(sf.parse(bb));
-                report.setValue("value"+i);
-                dataList.add(report);
-                i++;
-            }
-        }else if(dataItem.getTimeType().name().equals("DAY")){
-            DateFormat df = new SimpleDateFormat("yyyy-MM");
-            String aa= df.format(dataItem.getDataTime());
-            String bb="";
-            int i = 1;
-            monthlyReport report1=new monthlyReport();
-
-            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            String beginTime=aa+"-01 00:00:00";
-            dataItem.setBeginTime(sf.parse(beginTime));
-            String endTime=aa+"-"+Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))+" 00:00:00";
-            dataItem.setEndTime(sf.parse(endTime));
-
-            while (i <= Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))) {
-                if(i>9){
-                    bb=aa+"-"+i+" 00:00:00";
-                }else{
-                    bb=aa+"-0"+i+" 00:00:00";
-                }
-                monthlyReport report=new monthlyReport();
-                //SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                report.setDataTime(sf.parse(bb));
-                report.setValue("value"+i);
-                dataList.add(report);
-                i++;
-            }
-            //table.add(report1);
-        }else if(dataItem.getTimeType().name().equals("MONTH")){
-            DateFormat df = new SimpleDateFormat("yyyy");
-            String aa= df.format(dataItem.getDataTime());
-            String bb="";
-            int i = 1;
-            while (i <= 12) {
-                if(i>9){
-                    bb=aa+"-"+i+"-01 00:00:00";
-                }else{
-                    bb=aa+"-0"+i+"-01 00:00:00";
-                }
-                monthlyReport report=new monthlyReport();
-                SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                report.setDataTime(sf.parse(bb));
-                report.setValue("value"+i);
-                dataList.add(report);
-                i++;
-            }
-        }
-        List<monthlyReport> list = ImonthlyReportService.getMonthlyReporList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());;
-        ExcelUtil<monthlyReport> util = new ExcelUtil<monthlyReport>(monthlyReport.class);
-        return util.exportExcel(list, "缁煎悎鎶ヨ〃");
-    }
-    public static String getLastDayOfMonth(String yearMonth) {
-        int year = Integer.parseInt(yearMonth.split("-")[0]);  //骞�
-        int month = Integer.parseInt(yearMonth.split("-")[1]); //鏈�
-        Calendar cal = Calendar.getInstance();
-        // 璁剧疆骞翠唤
-        cal.set(Calendar.YEAR, year);
-        // 璁剧疆鏈堜唤
-        // cal.set(Calendar.MONTH, month - 1);
-        cal.set(Calendar.MONTH, month); //璁剧疆褰撳墠鏈堢殑涓婁竴涓湀
-        // 鑾峰彇鏌愭湀鏈�澶уぉ鏁�
-        //int lastDay = cal.getActualMaximum(Calendar.DATE);
-        int lastDay = cal.getMinimum(Calendar.DATE); //鑾峰彇鏈堜唤涓殑鏈�灏忓�硷紝鍗崇涓�澶�
-        // 璁剧疆鏃ュ巻涓湀浠界殑鏈�澶уぉ鏁�
-        //cal.set(Calendar.DAY_OF_MONTH, lastDay);
-        cal.set(Calendar.DAY_OF_MONTH, lastDay - 1); //涓婃湀鐨勭涓�澶╁噺鍘�1灏辨槸褰撴湀鐨勬渶鍚庝竴澶�
-        // 鏍煎紡鍖栨棩鏈�
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-        return sdf.format(cal.getTime());
-    }
-    private static Map<String, DataItem> change(List<DataItem> list) {
-        Map<String, DataItem> resultMap = new HashMap<String, DataItem>();
-        Set setTmp = new HashSet();
-        for (DataItem tmp : list) {
-            setTmp.add(tmp.getIndexId());
-        }
-        Iterator it = setTmp.iterator();
-        while (it.hasNext()) {
-            String oneSetTmpStr = (String) it.next();
-            List<DataItem> oneSetTmpList = new ArrayList<DataItem>();
-            for (DataItem tmp : list) {
-                String oneMapValueStr = tmp.getIndexId();
-                if (oneMapValueStr.equals(oneSetTmpStr)) {
-                    oneSetTmpList.add(tmp);
-                }
-            }
-            resultMap.put(oneSetTmpStr, oneSetTmpList.get(0));
-        }
-        return  resultMap;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/reportFormController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/reportFormController.java
deleted file mode 100644
index e7e9585..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/controller/reportFormController.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.controller;
-
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.reportForm.domain.reportForm;
-import com.dingzhuo.energy.project.reportForm.service.IreportFormService;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-/**
- * 鎶ヨ〃
- * @author sys
- * @date 2020-03-25
- */
-@RestController
-@RequestMapping("/reportForm")
-class reportFormController extends BaseController {
-    @Autowired
-    private IreportFormService reportFormService;
-
-    /**
-     * 鎶ヨ〃鏌ヨ
-     */
-    @PreAuthorize("@ss.hasPermi('dailyReport:list')")
-    @GetMapping("/list")
-    public AjaxResult list(reportForm report) {
-        List<reportForm> list= reportFormService.selectReportFormList(report.getCode());//鏍规嵁鐖剁骇鏌ヨ浜岀骇鏁版嵁
-        List<reportForm> resultList= reportFormService.selectReportFormListp(report.getCode());//鏍规嵁浜岀骇鏌ヨ涓夌骇鏁版嵁
-        List<reportForm> result= reportFormService.selectList(report.getTimeDate(),report.getCode(),report.getTimeYear(),report.getTimeType());//鏌ヨ涓夌骇
-
-        List<Map> table = new ArrayList<Map>();
-        List<reportForm> tables = new ArrayList<reportForm>();
-        resultList.forEach(value->{
-            list.forEach(item->{
-                if(item.getParentId().equals(value.getNodeId())){
-                    Map map=new HashMap();
-                    map.put("parentName",value.getName());
-                    map.put("name",item.getName());
-                    map.put("nodeId",item.getNodeId());
-                    table.add(map);
-                }
-            });
-        });
-        Map<String, List<reportForm>> groupBy = result.stream().filter(item-> StringUtils.isNotBlank(item.getNodeId())).collect(Collectors.groupingBy(reportForm::getNodeId));
-        groupBy.forEach((indexName,value)->{
-            for (Map item : table) {
-                //Map map=new HashMap();
-                reportForm map=new reportForm();
-                if(item.get("nodeId").equals(indexName)){
-                    for(reportForm resultValue:value){
-                        if(report.getTimeYear().equals(resultValue.getTimeYear())){
-                            //map.put("value13",resultValue.getValue());
-                            map.setValue13(resultValue.getValue());
-                        }else  if(resultValue.getTimeDate().equals("01")){
-                            //map.put("value1",resultValue.getValue());
-                            map.setValue1(resultValue.getValue());
-                        }else if(resultValue.getTimeDate().equals("02")){
-                            //map.put("value2",resultValue.getValue());
-                            map.setValue2(resultValue.getValue());
-                        }else if(resultValue.getTimeDate().equals("03")){
-                            //map.put("value3",resultValue.getValue());
-                            map.setValue3(resultValue.getValue());
-                        }else if(resultValue.getTimeDate().equals("04")){
-                            //map.put("value4",resultValue.getValue());
-                            map.setValue4(resultValue.getValue());
-                        }else if(resultValue.getTimeDate().equals("05")){
-                            //map.put("value5",resultValue.getValue());
-                            map.setValue5(resultValue.getValue());
-                        }else if(resultValue.getTimeDate().equals("06")){
-                            //map.put("value6",resultValue.getValue());
-                            map.setValue6(resultValue.getValue());
-                        }else if(resultValue.getTimeDate().equals("07")){
-                            //map.put("value7",resultValue.getValue());
-                            map.setValue7(resultValue.getValue());
-                        }else if(resultValue.getTimeDate().equals("08")){
-                            //map.put("value8",resultValue.getValue());
-                            map.setValue8(resultValue.getValue());
-                        }else if(resultValue.getTimeDate().equals("09")){
-                            //map.put("value9",resultValue.getValue());
-                            map.setValue9(resultValue.getValue());
-                        }else if(resultValue.getTimeDate().equals("10")){
-                            //map.put("value10",resultValue.getValue());
-                            map.setValue10(resultValue.getValue());
-                        }else if(resultValue.getTimeDate().equals("11")){
-                            //map.put("value11",resultValue.getValue());
-                            map.setValue11(resultValue.getValue());
-                        }else {
-                            //map.put("value12",resultValue.getValue());
-                            map.setValue12(resultValue.getValue());
-                        }
-                    }
-                    //map.put("parentName",item.get("parentName"));
-                    //map.put("name",item.get("name"));
-                    map.setParentName((String) item.get("parentName"));
-                    map.setName((String) item.get("name"));
-                    tables.add(map);
-                }
-            }
-        });
-        return AjaxResult.success(tables);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/JtZhnhExcel.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/JtZhnhExcel.java
deleted file mode 100644
index 9cf0500..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/JtZhnhExcel.java
+++ /dev/null
@@ -1,207 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.domain;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.List;
-
-import com.dingzhuo.energy.framework.config.RuoYiConfig;
-import org.apache.commons.io.FileUtils;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-
-/**
- * 鐒﹀寲宸ュ簭缁煎悎鑳借�� 瀹氬埗鐨� 鐢熸垚Excel
- */
-public class JtZhnhExcel {
-    /*public static void main(String[] args) {
-        JtZhnhExcel a = new JtZhnhExcel();
-        String downLoadFilePaht = a.writeExcel("e:\\jhnhrep.xlsx",new Object());
-        System.out.println("鐢熸垚鍚庡彲浠ヤ笅杞界殑鏂囦欢璺緞:"+downLoadFilePaht);
-    }*/
-    /**
-     * 鐢熸垚鐒︾偔缁煎悎鑳借�桬xcel鎶ヨ〃
-     * @param modeFilePath  瑕佺敓鎴愮殑Excel浣跨敤鐨勬ā鏉跨粷瀵硅矾寰�
-     * @param list    杩欎釜灏辨槸涓�寮犳姤琛ㄧ殑 JavaBean
-     */
-    public String writeExcel(String modeFilePath, List<consolidatedStatements> list) {
-        OutputStream out = null;
-
-        // 鐢熸垚鐨勪笅杞芥枃浠惰矾寰�
-        String fownLoadFileName = System.currentTimeMillis()+ "_zhnhRep.xlsx";
-        //String fownLoadFileName = "jhnhrep" + ".xlsx";
-        //杩欎釜鏂规硶瑕佹敞鎰忎笅  鍙湁鍦╞oot涓惎鍔ㄦ墠鏈夋晥锛屽鏋滃崟鐙瑀un杩欎釜绫诲仛娴嬭瘯锛岃鏀逛笅閲岄潰鐨勫唴瀹�
-        String downLoadFilePath = getAbsoluteFile(fownLoadFileName);
-        // 璇诲彇Excel鏂囨。
-        File finalXlsxFile = createNewFile(modeFilePath,downLoadFilePath);//澶嶅埗妯℃澘锛�
-        Workbook workBook = null;
-        try {
-            workBook = getWorkbok(finalXlsxFile);
-        } catch (IOException e1) {
-            e1.printStackTrace();
-        }
-
-        // sheet 瀵瑰簲涓�涓伐浣滈〉 鎻掑叆鏁版嵁寮�濮� ------
-        Sheet sheet = workBook.getSheetAt(0);
-        Row row2 = sheet.getRow(2);// 鑾峰彇鍒扮3琛�
-        Cell B3 = row2.getCell(1);// 3琛� 2鍒� 鎶曞叆_鎶樻爣绯绘暟
-        B3.setCellValue(list.get(0).getTrRljmZb());  // 杩欓噷灏辨敼鎴恓tzhnhBean.get鍊煎氨琛岋紝鐒跺悗鍙堝嚑琛屽啓鍑犺鐨勬暟鎹氨瀹屾椿浜�
-        Cell C3 = row2.getCell(2);// 3琛� 3鍒� 鎶曞叆_瀹炵墿閲�
-        C3.setCellValue(list.get(0).getTrRljmSwl());
-        Cell D3 = row2.getCell(3);// 3琛� 4鍒� 鎶曞叆_鎶樻爣鍑嗙叅
-        D3.setCellValue(list.get(0).getTrRljmZbzm());
-        Cell F3 = row2.getCell(5);// 3琛� 6鍒� 浜у嚭_鎶樻爣绯绘暟
-        F3.setCellValue(list.get(0).getCcJtZb());
-        Cell G3 = row2.getCell(6);// 3琛� 7鍒� 浜у嚭_瀹炵墿閲�
-        G3.setCellValue(list.get(0).getCcJtSwl());
-        Cell H3 = row2.getCell(7);// 3琛� 8鍒� 浜у嚭_鎶樻爣鍑嗙叅
-        H3.setCellValue(list.get(0).getCcJtZbzm());
-
-        Row row3 = sheet.getRow(3);// 鑾峰彇鍒扮4琛�
-        Cell B4 = row3.getCell(1);// 4琛� 2鍒� 鎶曞叆_鎶樻爣绯绘暟
-        B4.setCellValue(list.get(0).getTrDianZb());  // 杩欓噷灏辨敼鎴恓tzhnhBean.get鍊煎氨琛岋紝鐒跺悗鍙堝嚑琛屽啓鍑犺鐨勬暟鎹氨瀹屾椿浜�
-        Cell C4 = row3.getCell(2);// 4琛� 3鍒� 鎶曞叆_瀹炵墿閲�
-        C4.setCellValue(list.get(0).getTrDianSwl());
-        Cell D4 = row3.getCell(3);// 4琛� 4鍒� 鎶曞叆_鎶樻爣鍑嗙叅
-        D4.setCellValue(list.get(0).getTrDianZbzm());
-        Cell F4 = row3.getCell(5);// 4琛� 6鍒� 浜у嚭_鎶樻爣绯绘暟
-        F4.setCellValue(list.get(0).getCcJyZb());
-        Cell G4 = row3.getCell(6);// 4琛� 7鍒� 浜у嚭_瀹炵墿閲�
-        G4.setCellValue(list.get(0).getCcJySwl());
-        Cell H4 = row3.getCell(7);// 4琛� 8鍒� 浜у嚭_鎶樻爣鍑嗙叅
-        H4.setCellValue(list.get(0).getCcJyZbzm());
-
-        Row row4 = sheet.getRow(4);// 鑾峰彇鍒扮5琛�
-        Cell B5 = row4.getCell(1);// 5琛� 2鍒� 鎶曞叆_鎶樻爣绯绘暟
-        B5.setCellValue(list.get(0).getTrShuiZb());  // 杩欓噷灏辨敼鎴恓tzhnhBean.get鍊煎氨琛岋紝鐒跺悗鍙堝嚑琛屽啓鍑犺鐨勬暟鎹氨瀹屾椿浜�
-        Cell C5 = row4.getCell(2);// 5琛� 3鍒� 鎶曞叆_瀹炵墿閲�
-        C5.setCellValue(list.get(0).getTrShuiSwl());
-        Cell D5 = row4.getCell(3);// 5琛� 4鍒� 鎶曞叆_鎶樻爣鍑嗙叅
-        D5.setCellValue(list.get(0).getTrShuiZbzm());
-        Cell F5 = row4.getCell(5);// 5琛� 6鍒� 浜у嚭_鎶樻爣绯绘暟
-        F5.setCellValue(list.get(0).getCcCbZb());
-        Cell G5 = row4.getCell(6);// 5琛� 7鍒� 浜у嚭_瀹炵墿閲�
-        G5.setCellValue(list.get(0).getCcCbSwl());
-        Cell H5 = row4.getCell(7);// 5琛� 8鍒� 浜у嚭_鎶樻爣鍑嗙叅
-        H5.setCellValue(list.get(0).getCcCbZbzm());
-
-        Row row5 = sheet.getRow(5);// 鑾峰彇鍒扮6琛�
-        Cell B6 = row5.getCell(1);// 6琛� 2鍒� 鎶曞叆_鎶樻爣绯绘暟
-        B6.setCellValue(list.get(0).getTrZqZb());  // 杩欓噷灏辨敼鎴恓tzhnhBean.get鍊煎氨琛岋紝鐒跺悗鍙堝嚑琛屽啓鍑犺鐨勬暟鎹氨瀹屾椿浜�
-        Cell C6 = row5.getCell(2);// 6琛� 3鍒� 鎶曞叆_瀹炵墿閲�
-        C6.setCellValue(list.get(0).getTrZqSwl());
-        Cell D6 = row5.getCell(3);//6琛� 4鍒� 鎶曞叆_鎶樻爣鍑嗙叅
-        D6.setCellValue(list.get(0).getTrZqZbzm());
-        Cell F6 = row5.getCell(5);// 6琛� 6鍒� 浜у嚭_鎶樻爣绯绘暟
-        F6.setCellValue(list.get(0).getCcMqZb());
-        Cell G6 = row5.getCell(6);// 6琛� 7鍒� 浜у嚭_瀹炵墿閲�
-        G6.setCellValue(list.get(0).getCcMqSwl());
-        Cell H6 = row5.getCell(7);// 6琛� 8鍒� 浜у嚭_鎶樻爣鍑嗙叅
-        H6.setCellValue(list.get(0).getCcMqZbzm());
-
-        Row row6 = sheet.getRow(6);// 鑾峰彇鍒扮7琛�
-        Cell F7 = row6.getCell(5);// 7琛� 6鍒� 浜у嚭_鎶樻爣绯绘暟
-        F7.setCellValue(list.get(0).getCcDianZb());
-        Cell G7 = row6.getCell(6);// 7琛� 7鍒� 浜у嚭_瀹炵墿閲�
-        G7.setCellValue(list.get(0).getCcDianSwl());
-        Cell H7 = row6.getCell(7);// 7琛� 8鍒� 浜у嚭_鎶樻爣鍑嗙叅
-        H7.setCellValue(list.get(0).getCcDianZbzm());
-
-        Row row7 = sheet.getRow(7);// 8鑾峰彇鍒扮3琛�
-        Cell F8 = row7.getCell(5);// 8琛� 6鍒� 浜у嚭_鎶樻爣绯绘暟
-        F8.setCellValue(list.get(0).getCcZqZb());
-        Cell G8 = row7.getCell(6);// 8琛� 7鍒� 浜у嚭_瀹炵墿閲�
-        G8.setCellValue(list.get(0).getCcZqSwl());
-        Cell H8 = row7.getCell(7);// 8琛� 8鍒� 浜у嚭_鎶樻爣鍑嗙叅
-        H8.setCellValue(list.get(0).getCcZqZbzm());
-
-        Row row8 = sheet.getRow(8);// 鑾峰彇鍒扮9琛�
-        Cell B9 = row8.getCell(3);// 9琛� 2鍒� 鎶曞叆_鎶樻爣绯绘暟
-        B9.setCellValue(list.get(0).getTrZbzm());  // 杩欓噷灏辨敼鎴恓tzhnhBean.get鍊煎氨琛岋紝鐒跺悗鍙堝嚑琛屽啓鍑犺鐨勬暟鎹氨瀹屾椿浜�
-        Cell F9 = row8.getCell(6);// 9琛� 6鍒� 浜у嚭_鎶樻爣绯绘暟
-        F9.setCellValue(list.get(0).getCcZbzm());
-
-        Row row9 = sheet.getRow(9);// 鑾峰彇鍒扮10琛�
-        Cell C9 = row9.getCell(3);// 10琛� 2鍒� 鎶曞叆_鎶樻爣绯绘暟
-        C9.setCellValue(list.get(0).getJhbm());  // 杩欓噷灏辨敼鎴恓tzhnhBean.get鍊煎氨琛岋紝鐒跺悗鍙堝嚑琛屽啓鍑犺鐨勬暟鎹氨瀹屾椿浜�
-        Cell G9 = row9.getCell(6);// 10琛� 6鍒� 浜у嚭_鎶樻爣绯绘暟
-        G9.setCellValue(list.get(0).getZhnh());
-        //鎻掑叆鏁版嵁缁撴潫
-        try {
-            out = new FileOutputStream(finalXlsxFile);
-            workBook.write(out);
-        } catch (Exception e1) {
-            e1.printStackTrace();
-        }
-        finally {
-            if (out != null) {
-                try {
-                    out.flush();
-                    out.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-        return fownLoadFileName;
-    }
-    /**
-     * 鑾峰彇Excel宸ヤ綔绨�
-     *
-     * @param file
-     * @return
-     * @throws IOException
-     */
-    public static Workbook getWorkbok(File file) throws IOException {
-        Workbook wb = null;
-        FileInputStream in = new FileInputStream(file);
-        wb = new XSSFWorkbook(in);
-        return wb;
-    }
-    /**
-     * 鏍规嵁妯℃澘鏂板缓鏂囦欢骞惰繑鍥炴枃浠舵祦鐢ㄤ簬濉厖鏁版嵁
-     * @param path   杩欎釜鏄ā鏉胯矾寰�
-     * @param downLoadFilePath 杩欎釜鏄敓鎴愬甫鏁版嵁鐨勬姤琛� 涓嬭浇璺緞
-     * @return
-     */
-    private static File createNewFile(String path,String downLoadFilePath) {
-        // 璇诲彇妯℃澘锛屽苟璧嬪�煎埌鏂版枃浠�************************************************************
-        // 鏂囦欢妯℃澘璺緞
-        File file = new File(path);
-        if (!file.exists()) {
-            System.out.println("鍘熸ā鏉挎枃浠朵笉瀛樺湪");
-        }
-        // 鍐欏叆鍒版柊鐨別xcel
-        File newFile = new File(downLoadFilePath);
-        try {
-            newFile.createNewFile();
-            // 澶嶅埗妯℃澘鍒版柊鏂囦欢
-            FileUtils.copyFile(file, newFile);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return newFile;
-    }
-
-    /**
-     * 鑾峰彇涓嬭浇璺緞
-     *
-     * @param filename 鏂囦欢鍚嶇О
-     */
-    private String getAbsoluteFile(String filename) {
-        //Web杩愯鐨勬柟娉�
-        String downloadPath = RuoYiConfig.getDownloadPath() + filename;
-        //main鏂规硶鐙珛杩愯娴嬭瘯
-        //String downloadPath = "e:\\"+filename;
-        File desc = new File(downloadPath);
-        if (!desc.getParentFile().exists()) {
-            desc.getParentFile().mkdirs();
-        }
-        return downloadPath;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/annualReport.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/annualReport.java
deleted file mode 100644
index 9f6bb72..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/annualReport.java
+++ /dev/null
@@ -1,206 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.domain;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import com.dingzhuo.energy.project.energyStatistics.domain.EnergyConsumption;
-import com.dingzhuo.energy.project.energyStatistics.domain.dataTimeSVG;
-
-import java.io.Serializable;
-import java.time.Instant;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 
- * @author sys
- * @date 2020-03-25
- */
-public class annualReport implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private String indexId;
-    @Excel(name = "鎸囨爣鍚嶇О")
-    private String indexName;
-    private String value;
-    private Date dataTime;
-    private String timeType;
-    @Excel(name = "1鏈�")
-    private Double value1;
-    @Excel(name = "2鏈�")
-    private Double value2;
-    @Excel(name = "3鏈�")
-    private Double value3;
-    @Excel(name = "4鏈�")
-    private Double value4;
-    @Excel(name = "5鏈�")
-    private Double value5;
-    @Excel(name = "6鏈�")
-    private Double value6;
-    @Excel(name = "7鏈�")
-    private Double value7;
-    @Excel(name = "8鏈�")
-    private Double value8;
-    @Excel(name = "9鏈�")
-    private Double value9;
-    @Excel(name = "10鏈�")
-    private Double value10;
-    @Excel(name = "11鏈�")
-    private Double value11;
-    @Excel(name = "12鏈�")
-    private Double value12;
-    private List<Map> tablehead =new ArrayList<>();
-    private List<dailyReport> tabledata =new ArrayList<>();
-    public String getIndexId() {
-        return indexId;
-    }
-
-    public void setIndexId(String indexId) {
-        this.indexId = indexId;
-    }
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getTimeType() {
-        return timeType;
-    }
-
-    public void setTimeType(String timeType) {
-        this.timeType = timeType;
-    }
-
-    public Date getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(Date dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public Double getValue1() {
-        return value1;
-    }
-
-    public void setValue1(Double value1) {
-        this.value1 = value1;
-    }
-
-    public Double getValue2() {
-        return value2;
-    }
-
-    public void setValue2(Double value2) {
-        this.value2 = value2;
-    }
-
-    public Double getValue3() {
-        return value3;
-    }
-
-    public void setValue3(Double value3) {
-        this.value3 = value3;
-    }
-
-    public Double getValue4() {
-        return value4;
-    }
-
-    public void setValue4(Double value4) {
-        this.value4 = value4;
-    }
-
-    public Double getValue5() {
-        return value5;
-    }
-
-    public void setValue5(Double value5) {
-        this.value5 = value5;
-    }
-
-    public Double getValue6() {
-        return value6;
-    }
-
-    public void setValue6(Double value6) {
-        this.value6 = value6;
-    }
-
-    public Double getValue7() {
-        return value7;
-    }
-
-    public void setValue7(Double value7) {
-        this.value7 = value7;
-    }
-
-    public Double getValue8() {
-        return value8;
-    }
-
-    public void setValue8(Double value8) {
-        this.value8 = value8;
-    }
-
-    public Double getValue9() {
-        return value9;
-    }
-
-    public void setValue9(Double value9) {
-        this.value9 = value9;
-    }
-
-    public Double getValue10() {
-        return value10;
-    }
-
-    public void setValue10(Double value10) {
-        this.value10 = value10;
-    }
-
-    public Double getValue11() {
-        return value11;
-    }
-
-    public void setValue11(Double value11) {
-        this.value11 = value11;
-    }
-
-    public Double getValue12() {
-        return value12;
-    }
-
-    public void setValue12(Double value12) {
-        this.value12 = value12;
-    }
-
-    public List<Map> getTablehead() {
-        return tablehead;
-    }
-
-    public void setTablehead(List<Map> tablehead) {
-        this.tablehead = tablehead;
-    }
-    public List<dailyReport> getTabledata() {
-        return tabledata;
-    }
-
-    public void setTabledata(List<dailyReport> tabledata) {
-        this.tabledata = tabledata;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/consolidatedStatements.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/consolidatedStatements.java
deleted file mode 100644
index 8b84daa..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/consolidatedStatements.java
+++ /dev/null
@@ -1,554 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.domain;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-import java.util.Date;
-
-/**
- * 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃瀵硅薄 consolidated_statements
- *
- * @author sys
- * @date 2021-01-15
- */
-public class consolidatedStatements extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** $column.columnComment */
-    private String id;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String trRljmZb;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String trRljmSwl;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String trRljmZbzm;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String trDianZb;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String trDianSwl;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String trDianZbzm;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String trShuiZb;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String trShuiSwl;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String trShuiZbzm;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String trZqZb;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String trZqSwl;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String trZqZbzm;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccJtZb;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccJtSwl;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccJtZbzm;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccJyZb;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccJySwl;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccJyZbzm;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccCbZb;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccCbSwl;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccCbZbzm;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccMqZb;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccMqSwl;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccMqZbzm;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccDianZb;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccDianSwl;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccDianZbzm;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccZqZb;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccZqSwl;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccZqZbzm;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}")
-    private TimeType timeType;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String timeCode;
-    @Excel(name = "${comment}")
-    private String dataTime;
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String trZbzm;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String ccZbzm;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String jhbm;
-
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String zhnh;
-    public void setId(String id)
-    {
-        this.id = id;
-    }
-
-    public String getId()
-    {
-        return id;
-    }
-    public void setTrRljmZb(String trRljmZb)
-    {
-        this.trRljmZb = trRljmZb;
-    }
-
-    public String getTrRljmZb()
-    {
-        return trRljmZb;
-    }
-    public void setTrRljmSwl(String trRljmSwl)
-    {
-        this.trRljmSwl = trRljmSwl;
-    }
-
-    public String getTrRljmSwl()
-    {
-        return trRljmSwl;
-    }
-    public void setTrRljmZbzm(String trRljmZbzm)
-    {
-        this.trRljmZbzm = trRljmZbzm;
-    }
-
-    public String getTrRljmZbzm()
-    {
-        return trRljmZbzm;
-    }
-    public void setTrDianZb(String trDianZb)
-    {
-        this.trDianZb = trDianZb;
-    }
-
-    public String getTrDianZb()
-    {
-        return trDianZb;
-    }
-    public void setTrDianSwl(String trDianSwl)
-    {
-        this.trDianSwl = trDianSwl;
-    }
-
-    public String getTrDianSwl()
-    {
-        return trDianSwl;
-    }
-    public void setTrDianZbzm(String trDianZbzm)
-    {
-        this.trDianZbzm = trDianZbzm;
-    }
-
-    public String getTrDianZbzm()
-    {
-        return trDianZbzm;
-    }
-    public void setTrShuiZb(String trShuiZb)
-    {
-        this.trShuiZb = trShuiZb;
-    }
-
-    public String getTrShuiZb()
-    {
-        return trShuiZb;
-    }
-    public void setTrShuiSwl(String trShuiSwl)
-    {
-        this.trShuiSwl = trShuiSwl;
-    }
-
-    public String getTrShuiSwl()
-    {
-        return trShuiSwl;
-    }
-    public void setTrShuiZbzm(String trShuiZbzm)
-    {
-        this.trShuiZbzm = trShuiZbzm;
-    }
-
-    public String getTrShuiZbzm()
-    {
-        return trShuiZbzm;
-    }
-    public void setTrZqZb(String trZqZb)
-    {
-        this.trZqZb = trZqZb;
-    }
-
-    public String getTrZqZb()
-    {
-        return trZqZb;
-    }
-    public void setTrZqSwl(String trZqSwl)
-    {
-        this.trZqSwl = trZqSwl;
-    }
-
-    public String getTrZqSwl()
-    {
-        return trZqSwl;
-    }
-    public void setTrZqZbzm(String trZqZbzm)
-    {
-        this.trZqZbzm = trZqZbzm;
-    }
-
-    public String getTrZqZbzm()
-    {
-        return trZqZbzm;
-    }
-    public void setCcJtZb(String ccJtZb)
-    {
-        this.ccJtZb = ccJtZb;
-    }
-
-    public String getCcJtZb()
-    {
-        return ccJtZb;
-    }
-    public void setCcJtSwl(String ccJtSwl)
-    {
-        this.ccJtSwl = ccJtSwl;
-    }
-
-    public String getCcJtSwl()
-    {
-        return ccJtSwl;
-    }
-    public void setCcJtZbzm(String ccJtZbzm)
-    {
-        this.ccJtZbzm = ccJtZbzm;
-    }
-
-    public String getCcJtZbzm()
-    {
-        return ccJtZbzm;
-    }
-    public void setCcJyZb(String ccJyZb)
-    {
-        this.ccJyZb = ccJyZb;
-    }
-
-    public String getCcJyZb()
-    {
-        return ccJyZb;
-    }
-    public void setCcJySwl(String ccJySwl)
-    {
-        this.ccJySwl = ccJySwl;
-    }
-
-    public String getCcJySwl()
-    {
-        return ccJySwl;
-    }
-    public void setCcJyZbzm(String ccJyZbzm)
-    {
-        this.ccJyZbzm = ccJyZbzm;
-    }
-
-    public String getCcJyZbzm()
-    {
-        return ccJyZbzm;
-    }
-    public void setCcCbZb(String ccCbZb)
-    {
-        this.ccCbZb = ccCbZb;
-    }
-
-    public String getCcCbZb()
-    {
-        return ccCbZb;
-    }
-    public void setCcCbSwl(String ccCbSwl)
-    {
-        this.ccCbSwl = ccCbSwl;
-    }
-
-    public String getCcCbSwl()
-    {
-        return ccCbSwl;
-    }
-    public void setCcCbZbzm(String ccCbZbzm)
-    {
-        this.ccCbZbzm = ccCbZbzm;
-    }
-
-    public String getCcCbZbzm()
-    {
-        return ccCbZbzm;
-    }
-    public void setCcMqZb(String ccMqZb)
-    {
-        this.ccMqZb = ccMqZb;
-    }
-
-    public String getCcMqZb()
-    {
-        return ccMqZb;
-    }
-    public void setCcMqSwl(String ccMqSwl)
-    {
-        this.ccMqSwl = ccMqSwl;
-    }
-
-    public String getCcMqSwl()
-    {
-        return ccMqSwl;
-    }
-    public void setCcMqZbzm(String ccMqZbzm)
-    {
-        this.ccMqZbzm = ccMqZbzm;
-    }
-
-    public String getCcMqZbzm()
-    {
-        return ccMqZbzm;
-    }
-    public void setCcDianZb(String ccDianZb)
-    {
-        this.ccDianZb = ccDianZb;
-    }
-
-    public String getCcDianZb()
-    {
-        return ccDianZb;
-    }
-    public void setCcDianSwl(String ccDianSwl)
-    {
-        this.ccDianSwl = ccDianSwl;
-    }
-
-    public String getCcDianSwl()
-    {
-        return ccDianSwl;
-    }
-    public void setCcDianZbzm(String ccDianZbzm)
-    {
-        this.ccDianZbzm = ccDianZbzm;
-    }
-
-    public String getCcDianZbzm()
-    {
-        return ccDianZbzm;
-    }
-    public void setCcZqZb(String ccZqZb)
-    {
-        this.ccZqZb = ccZqZb;
-    }
-
-    public String getCcZqZb()
-    {
-        return ccZqZb;
-    }
-    public void setCcZqSwl(String ccZqSwl)
-    {
-        this.ccZqSwl = ccZqSwl;
-    }
-
-    public String getCcZqSwl()
-    {
-        return ccZqSwl;
-    }
-    public void setCcZqZbzm(String ccZqZbzm)
-    {
-        this.ccZqZbzm = ccZqZbzm;
-    }
-
-    public String getCcZqZbzm()
-    {
-        return ccZqZbzm;
-    }
-    public void setTimeType(TimeType timeType)
-    {
-        this.timeType = timeType;
-    }
-
-    public TimeType getTimeType()
-    {
-        return timeType;
-    }
-    public void setTimeCode(String timeCode)
-    {
-        this.timeCode = timeCode;
-    }
-
-    public String getTimeCode()
-    {
-        return timeCode;
-    }
-
-    public String getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(String dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public String getTrZbzm() {
-        return trZbzm;
-    }
-
-    public void setTrZbzm(String trZbzm) {
-        this.trZbzm = trZbzm;
-    }
-
-    public String getCcZbzm() {
-        return ccZbzm;
-    }
-
-    public void setCcZbzm(String ccZbzm) {
-        this.ccZbzm = ccZbzm;
-    }
-
-    public String getJhbm() {
-        return jhbm;
-    }
-
-    public void setJhbm(String jhbm) {
-        this.jhbm = jhbm;
-    }
-
-    public String getZhnh() {
-        return zhnh;
-    }
-
-    public void setZhnh(String zhnh) {
-        this.zhnh = zhnh;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-                .append("id", getId())
-                .append("trRljmZb", getTrRljmZb())
-                .append("trRljmSwl", getTrRljmSwl())
-                .append("trRljmZbzm", getTrRljmZbzm())
-                .append("trDianZb", getTrDianZb())
-                .append("trDianSwl", getTrDianSwl())
-                .append("trDianZbzm", getTrDianZbzm())
-                .append("trShuiZb", getTrShuiZb())
-                .append("trShuiSwl", getTrShuiSwl())
-                .append("trShuiZbzm", getTrShuiZbzm())
-                .append("trZqZb", getTrZqZb())
-                .append("trZqSwl", getTrZqSwl())
-                .append("trZqZbzm", getTrZqZbzm())
-                .append("ccJtZb", getCcJtZb())
-                .append("ccJtSwl", getCcJtSwl())
-                .append("ccJtZbzm", getCcJtZbzm())
-                .append("ccJyZb", getCcJyZb())
-                .append("ccJySwl", getCcJySwl())
-                .append("ccJyZbzm", getCcJyZbzm())
-                .append("ccCbZb", getCcCbZb())
-                .append("ccCbSwl", getCcCbSwl())
-                .append("ccCbZbzm", getCcCbZbzm())
-                .append("ccMqZb", getCcMqZb())
-                .append("ccMqSwl", getCcMqSwl())
-                .append("ccMqZbzm", getCcMqZbzm())
-                .append("ccDianZb", getCcDianZb())
-                .append("ccDianSwl", getCcDianSwl())
-                .append("ccDianZbzm", getCcDianZbzm())
-                .append("ccZqZb", getCcZqZb())
-                .append("ccZqSwl", getCcZqSwl())
-                .append("ccZqZbzm", getCcZqZbzm())
-                .append("timeType", getTimeType())
-                .append("createTime", getCreateTime())
-                .append("createBy", getCreateBy())
-                .append("updateTime", getUpdateTime())
-                .append("updateBy", getUpdateBy())
-                .append("remark", getRemark())
-                .append("timeCode", getTimeCode())
-                .append("dataTime", getDataTime())
-                .append("trZbzm", getTrZbzm())
-                .append("ccZbzm", getCcZbzm())
-                .append("jhbm", getJhbm())
-                .append("zhnh", getZhnh())
-                .toString();
-    }
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/dailyReport.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/dailyReport.java
deleted file mode 100644
index db3adb4..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/dailyReport.java
+++ /dev/null
@@ -1,326 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.domain;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import com.dingzhuo.energy.project.energyStatistics.domain.EnergyConsumption;
-import com.dingzhuo.energy.project.energyStatistics.domain.dataTimeSVG;
-
-import java.io.Serializable;
-import java.time.Instant;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-/**
- *
- * @author sys
- * @date 2020-03-25
- */
-public class dailyReport implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private String indexId;
-    @Excel(name = "鎸囨爣鍚嶇О")
-    private String indexName;
-    private String value;
-    private Date dataTime;
-    private String timeType;
-    @Excel(name = "0鏃�")
-    private Double value0;
-    @Excel(name = "1鏃�")
-    private Double value1;
-    @Excel(name = "2鏃�")
-    private Double value2;
-    @Excel(name = "3鏃�")
-    private Double value3;
-    @Excel(name = "4鏃�")
-    private Double value4;
-    @Excel(name = "5鏃�")
-    private Double value5;
-    @Excel(name = "6鏃�")
-    private Double value6;
-    @Excel(name = "7鏃�")
-    private Double value7;
-    @Excel(name = "8鏃�")
-    private Double value8;
-    @Excel(name = "9鏃�")
-    private Double value9;
-    @Excel(name = "10鏃�")
-    private Double value10;
-    @Excel(name = "11鏃�")
-    private Double value11;
-    @Excel(name = "12鏃�")
-    private Double value12;
-    @Excel(name = "13鏃�")
-    private Double value13;
-    @Excel(name = "14鏃�")
-    private Double value14;
-    @Excel(name = "15鏃�")
-    private Double value15;
-    @Excel(name = "16鏃�")
-    private Double value16;
-    @Excel(name = "17鏃�")
-    private Double value17;
-    @Excel(name = "18鏃�")
-    private Double value18;
-    @Excel(name = "19鏃�")
-    private Double value19;
-    @Excel(name = "20鏃�")
-    private Double value20;
-    @Excel(name = "21鏃�")
-    private Double value21;
-    @Excel(name = "22鏃�")
-    private Double value22;
-    @Excel(name = "23鏃�")
-    private Double value23;
-    private List<Map> tablehead =new ArrayList<>();
-    private List<dailyReport> tabledata =new ArrayList<>();
-    public String getIndexId() {
-        return indexId;
-    }
-
-    public void setIndexId(String indexId) {
-        this.indexId = indexId;
-    }
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getTimeType() {
-        return timeType;
-    }
-
-    public void setTimeType(String timeType) {
-        this.timeType = timeType;
-    }
-
-    public Date getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(Date dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public Double getValue1() {
-        return value1;
-    }
-
-    public void setValue1(Double value1) {
-        this.value1 = value1;
-    }
-
-    public Double getValue2() {
-        return value2;
-    }
-
-    public void setValue2(Double value2) {
-        this.value2 = value2;
-    }
-
-    public Double getValue3() {
-        return value3;
-    }
-
-    public void setValue3(Double value3) {
-        this.value3 = value3;
-    }
-
-    public Double getValue4() {
-        return value4;
-    }
-
-    public void setValue4(Double value4) {
-        this.value4 = value4;
-    }
-
-    public Double getValue5() {
-        return value5;
-    }
-
-    public void setValue5(Double value5) {
-        this.value5 = value5;
-    }
-
-    public Double getValue6() {
-        return value6;
-    }
-
-    public void setValue6(Double value6) {
-        this.value6 = value6;
-    }
-
-    public Double getValue7() {
-        return value7;
-    }
-
-    public void setValue7(Double value7) {
-        this.value7 = value7;
-    }
-
-    public Double getValue8() {
-        return value8;
-    }
-
-    public void setValue8(Double value8) {
-        this.value8 = value8;
-    }
-
-    public Double getValue9() {
-        return value9;
-    }
-
-    public void setValue9(Double value9) {
-        this.value9 = value9;
-    }
-
-    public Double getValue10() {
-        return value10;
-    }
-
-    public void setValue10(Double value10) {
-        this.value10 = value10;
-    }
-
-    public Double getValue11() {
-        return value11;
-    }
-
-    public void setValue11(Double value11) {
-        this.value11 = value11;
-    }
-
-    public Double getValue12() {
-        return value12;
-    }
-
-    public void setValue12(Double value12) {
-        this.value12 = value12;
-    }
-
-    public Double getValue13() {
-        return value13;
-    }
-
-    public void setValue13(Double value13) {
-        this.value13 = value13;
-    }
-
-    public Double getValue14() {
-        return value14;
-    }
-
-    public void setValue14(Double value14) {
-        this.value14 = value14;
-    }
-
-    public Double getValue15() {
-        return value15;
-    }
-
-    public void setValue15(Double value15) {
-        this.value15 = value15;
-    }
-
-    public Double getValue16() {
-        return value16;
-    }
-
-    public void setValue16(Double value16) {
-        this.value16 = value16;
-    }
-
-    public Double getValue17() {
-        return value17;
-    }
-
-    public void setValue17(Double value17) {
-        this.value17 = value17;
-    }
-
-    public Double getValue18() {
-        return value18;
-    }
-
-    public void setValue18(Double value18) {
-        this.value18 = value18;
-    }
-
-    public Double getValue19() {
-        return value19;
-    }
-
-    public void setValue19(Double value19) {
-        this.value19 = value19;
-    }
-
-    public Double getValue20() {
-        return value20;
-    }
-
-    public void setValue20(Double value20) {
-        this.value20 = value20;
-    }
-
-    public Double getValue21() {
-        return value21;
-    }
-
-    public void setValue21(Double value21) {
-        this.value21 = value21;
-    }
-
-    public Double getValue22() {
-        return value22;
-    }
-
-    public void setValue22(Double value22) {
-        this.value22 = value22;
-    }
-
-    public Double getValue23() {
-        return value23;
-    }
-
-    public void setValue23(Double value23) {
-        this.value23 = value23;
-    }
-
-    public Double getValue0() {
-        return value0;
-    }
-
-    public void setValue0(Double value0) {
-        this.value0 = value0;
-    }
-
-    public List<Map> getTablehead() {
-        return tablehead;
-    }
-
-    public void setTablehead(List<Map> tablehead) {
-        this.tablehead = tablehead;
-    }
-    public List<dailyReport> getTabledata() {
-        return tabledata;
-    }
-
-    public void setTabledata(List<dailyReport> tabledata) {
-        this.tabledata = tabledata;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/dto/ComprehensiveReportsDTO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/dto/ComprehensiveReportsDTO.java
deleted file mode 100644
index b8e0588..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/dto/ComprehensiveReportsDTO.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.domain.dto;
-
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.util.Date;
-
-/**
- * 缁煎悎鎶ヨ〃璇锋眰绫�
- *
- * @Author: Zhujw
- * @Date: 2023/3/16
- */
-@Data
-public class ComprehensiveReportsDTO {
-
-    /**
-     * 妯″瀷code
-     */
-    @NotBlank(message = "妯″瀷缂栫爜涓虹┖")
-    private String modeCode;
-
-    /**
-     * 鏌ヨ鏃堕棿
-     */
-    @NotNull(message = "鏈壘鍒版煡璇㈡椂闂�")
-    @DateTimeFormat(pattern = "yyyy-MM")
-    @JsonFormat(pattern = "yyyy-MM")
-    private Date time;
-
-    /**
-     * 鑳芥簮绫诲瀷
-     */
-    private String energyType;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/monthlyReport.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/monthlyReport.java
deleted file mode 100644
index badc9a7..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/monthlyReport.java
+++ /dev/null
@@ -1,406 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.domain;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import com.dingzhuo.energy.project.energyStatistics.domain.EnergyConsumption;
-import com.dingzhuo.energy.project.energyStatistics.domain.dataTimeSVG;
-
-import java.io.Serializable;
-import java.time.Instant;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 
- * @author sys
- * @date 2020-12-31
- */
-public class monthlyReport implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private String indexId;
-    @Excel(name = "鎸囨爣鍚嶇О")
-    private String indexName;
-    private String value;
-    private Date dataTime;
-    private String timeType;
-    @Excel(name = "1鏃�")
-    private Double value1;
-    @Excel(name = "2鏃�")
-    private Double value2;
-    @Excel(name = "3鏃�")
-    private Double value3;
-    @Excel(name = "4鏃�")
-    private Double value4;
-    @Excel(name = "5鏃�")
-    private Double value5;
-    @Excel(name = "6鏃�")
-    private Double value6;
-    @Excel(name = "7鏃�")
-    private Double value7;
-    @Excel(name = "8鏃�")
-    private Double value8;
-    @Excel(name = "9鏃�")
-    private Double value9;
-    @Excel(name = "10鏃�")
-    private Double value10;
-    @Excel(name = "11鏃�")
-    private Double value11;
-    @Excel(name = "12鏃�")
-    private Double value12;
-    @Excel(name = "13鏃�")
-    private Double value13;
-    @Excel(name = "14鏃�")
-    private Double value14;
-    @Excel(name = "15鏃�")
-    private Double value15;
-    @Excel(name = "16鏃�")
-    private Double value16;
-    @Excel(name = "17鏃�")
-    private Double value17;
-    @Excel(name = "18鏃�")
-    private Double value18;
-    @Excel(name = "19鏃�")
-    private Double value19;
-    @Excel(name = "20鏃�")
-    private Double value20;
-    @Excel(name = "21鏃�")
-    private Double value21;
-    @Excel(name = "22鏃�")
-    private Double value22;
-    @Excel(name = "23鏃�")
-    private Double value23;
-    @Excel(name = "24鏃�")
-    private Double value24;
-    @Excel(name = "25鏃�")
-    private Double value25;
-    @Excel(name = "26鏃�")
-    private Double value26;
-    @Excel(name = "27鏃�")
-    private Double value27;
-    @Excel(name = "28鏃�")
-    private Double value28;
-    @Excel(name = "29鏃�")
-    private Double value29;
-    @Excel(name = "30鏃�")
-    private Double value30;
-    @Excel(name = "31鏃�")
-    private Double value31;
-
-    private Integer count;
-    private List<Map> tablehead =new ArrayList<>();
-    private List<monthlyReport> tabledata =new ArrayList<>();
-    public String getIndexId() {
-        return indexId;
-    }
-
-    public void setIndexId(String indexId) {
-        this.indexId = indexId;
-    }
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getTimeType() {
-        return timeType;
-    }
-
-    public void setTimeType(String timeType) {
-        this.timeType = timeType;
-    }
-
-    public Date getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(Date dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public Double getValue1() {
-        return value1;
-    }
-
-    public void setValue1(Double value1) {
-        this.value1 = value1;
-    }
-
-    public Double getValue2() {
-        return value2;
-    }
-
-    public void setValue2(Double value2) {
-        this.value2 = value2;
-    }
-
-    public Double getValue3() {
-        return value3;
-    }
-
-    public void setValue3(Double value3) {
-        this.value3 = value3;
-    }
-
-    public Double getValue4() {
-        return value4;
-    }
-
-    public void setValue4(Double value4) {
-        this.value4 = value4;
-    }
-
-    public Double getValue5() {
-        return value5;
-    }
-
-    public void setValue5(Double value5) {
-        this.value5 = value5;
-    }
-
-    public Double getValue6() {
-        return value6;
-    }
-
-    public void setValue6(Double value6) {
-        this.value6 = value6;
-    }
-
-    public Double getValue7() {
-        return value7;
-    }
-
-    public void setValue7(Double value7) {
-        this.value7 = value7;
-    }
-
-    public Double getValue8() {
-        return value8;
-    }
-
-    public void setValue8(Double value8) {
-        this.value8 = value8;
-    }
-
-    public Double getValue9() {
-        return value9;
-    }
-
-    public void setValue9(Double value9) {
-        this.value9 = value9;
-    }
-
-    public Double getValue10() {
-        return value10;
-    }
-
-    public void setValue10(Double value10) {
-        this.value10 = value10;
-    }
-
-    public Double getValue11() {
-        return value11;
-    }
-
-    public void setValue11(Double value11) {
-        this.value11 = value11;
-    }
-
-    public Double getValue12() {
-        return value12;
-    }
-
-    public void setValue12(Double value12) {
-        this.value12 = value12;
-    }
-
-    public Double getValue13() {
-        return value13;
-    }
-
-    public void setValue13(Double value13) {
-        this.value13 = value13;
-    }
-
-    public Double getValue14() {
-        return value14;
-    }
-
-    public void setValue14(Double value14) {
-        this.value14 = value14;
-    }
-
-    public Double getValue15() {
-        return value15;
-    }
-
-    public void setValue15(Double value15) {
-        this.value15 = value15;
-    }
-
-    public Double getValue16() {
-        return value16;
-    }
-
-    public void setValue16(Double value16) {
-        this.value16 = value16;
-    }
-
-    public Double getValue17() {
-        return value17;
-    }
-
-    public void setValue17(Double value17) {
-        this.value17 = value17;
-    }
-
-    public Double getValue18() {
-        return value18;
-    }
-
-    public void setValue18(Double value18) {
-        this.value18 = value18;
-    }
-
-    public Double getValue19() {
-        return value19;
-    }
-
-    public void setValue19(Double value19) {
-        this.value19 = value19;
-    }
-
-    public Double getValue20() {
-        return value20;
-    }
-
-    public void setValue20(Double value20) {
-        this.value20 = value20;
-    }
-
-    public Double getValue21() {
-        return value21;
-    }
-
-    public void setValue21(Double value21) {
-        this.value21 = value21;
-    }
-
-    public Double getValue22() {
-        return value22;
-    }
-
-    public void setValue22(Double value22) {
-        this.value22 = value22;
-    }
-
-    public Double getValue23() {
-        return value23;
-    }
-
-    public void setValue23(Double value23) {
-        this.value23 = value23;
-    }
-
-    public Double getValue24() {
-        return value24;
-    }
-
-    public void setValue24(Double value24) {
-        this.value24 = value24;
-    }
-
-    public Double getValue25() {
-        return value25;
-    }
-
-    public void setValue25(Double value25) {
-        this.value25 = value25;
-    }
-
-    public Double getValue26() {
-        return value26;
-    }
-
-    public void setValue26(Double value26) {
-        this.value26 = value26;
-    }
-
-    public Double getValue27() {
-        return value27;
-    }
-
-    public void setValue27(Double value27) {
-        this.value27 = value27;
-    }
-
-    public Double getValue28() {
-        return value28;
-    }
-
-    public void setValue28(Double value28) {
-        this.value28 = value28;
-    }
-
-    public Double getValue29() {
-        return value29;
-    }
-
-    public void setValue29(Double value29) {
-        this.value29 = value29;
-    }
-
-    public Double getValue30() {
-        return value30;
-    }
-
-    public void setValue30(Double value30) {
-        this.value30 = value30;
-    }
-
-    public Double getValue31() {
-        return value31;
-    }
-
-    public void setValue31(Double value31) {
-        this.value31 = value31;
-    }
-
-    public List<Map> getTablehead() {
-        return tablehead;
-    }
-
-    public void setTablehead(List<Map> tablehead) {
-        this.tablehead = tablehead;
-    }
-    public List<monthlyReport> getTabledata() {
-        return tabledata;
-    }
-
-    public void setTabledata(List<monthlyReport> tabledata) {
-        this.tabledata = tabledata;
-    }
-
-    public Integer getCount() {
-        return count;
-    }
-
-    public void setCount(Integer count) {
-        this.count = count;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/reportForm.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/reportForm.java
deleted file mode 100644
index d50298a..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/reportForm.java
+++ /dev/null
@@ -1,276 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.domain;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-import java.time.Instant;
-
-/**
- * 
- * @author sys
- * @date 2020-03-25
- */
-public class reportForm extends BaseEntity {
-    private static final long serialVersionUID = 1L;
-
-    private String code;
-    private String name;
-    private String nodeId;
-    private String parentId;
-    private String address;
-    private String modelCode;
-    private String nodeCategory;
-    private String orderNum;
-    private String indexId;
-    private String indexType;
-    private String value;
-    private String dataTime;
-    private String timeDate;
-    private String parentName;
-    private String timeYear;
-    private TimeType timeType;
-    private String value1;
-    private String value2;
-    private String value3;
-    private String value4;
-    private String value5;
-    private String value6;
-    private String value7;
-    private String value8;
-    private String value9;
-    private String value10;
-    private String value11;
-    private String value12;
-    private String value13;
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getNodeId() {
-        return nodeId;
-    }
-
-    public void setNodeId(String nodeId) {
-        this.nodeId = nodeId;
-    }
-
-    public String getParentId() {
-        return parentId;
-    }
-
-    public void setParentId(String parentId) {
-        this.parentId = parentId;
-    }
-
-    public String getAddress() {
-        return address;
-    }
-
-    public void setAddress(String address) {
-        this.address = address;
-    }
-
-    public String getModelCode() {
-        return modelCode;
-    }
-
-    public void setModelCode(String modelCode) {
-        this.modelCode = modelCode;
-    }
-
-    public String getNodeCategory() {
-        return nodeCategory;
-    }
-
-    public void setNodeCategory(String nodeCategory) {
-        this.nodeCategory = nodeCategory;
-    }
-
-    public String getOrderNum() {
-        return orderNum;
-    }
-
-    public void setOrderNum(String orderNum) {
-        this.orderNum = orderNum;
-    }
-
-    public String getIndexId() {
-        return indexId;
-    }
-
-    public void setIndexId(String indexId) {
-        this.indexId = indexId;
-    }
-
-    public String getIndexType() {
-        return indexType;
-    }
-
-    public void setIndexType(String indexType) {
-        this.indexType = indexType;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(String dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public String getTimeDate() {
-        return timeDate;
-    }
-
-    public void setTimeDate(String timeDate) {
-        this.timeDate = timeDate;
-    }
-
-    public String getParentName() {
-        return parentName;
-    }
-
-    public void setParentName(String parentName) {
-        this.parentName = parentName;
-    }
-
-    public String getTimeYear() {
-        return timeYear;
-    }
-
-    public void setTimeYear(String timeYear) {
-        this.timeYear = timeYear;
-    }
-
-    public TimeType getTimeType() {
-        return timeType;
-    }
-
-    public void setTimeType(TimeType timeType) {
-        this.timeType = timeType;
-    }
-
-    public String getValue1() {
-        return value1;
-    }
-
-    public void setValue1(String value1) {
-        this.value1 = value1;
-    }
-
-    public String getValue2() {
-        return value2;
-    }
-
-    public void setValue2(String value2) {
-        this.value2 = value2;
-    }
-
-    public String getValue3() {
-        return value3;
-    }
-
-    public void setValue3(String value3) {
-        this.value3 = value3;
-    }
-
-    public String getValue4() {
-        return value4;
-    }
-
-    public void setValue4(String value4) {
-        this.value4 = value4;
-    }
-
-    public String getValue5() {
-        return value5;
-    }
-
-    public void setValue5(String value5) {
-        this.value5 = value5;
-    }
-
-    public String getValue6() {
-        return value6;
-    }
-
-    public void setValue6(String value6) {
-        this.value6 = value6;
-    }
-
-    public String getValue7() {
-        return value7;
-    }
-
-    public void setValue7(String value7) {
-        this.value7 = value7;
-    }
-
-    public String getValue8() {
-        return value8;
-    }
-
-    public void setValue8(String value8) {
-        this.value8 = value8;
-    }
-
-    public String getValue9() {
-        return value9;
-    }
-
-    public void setValue9(String value9) {
-        this.value9 = value9;
-    }
-
-    public String getValue10() {
-        return value10;
-    }
-
-    public void setValue10(String value10) {
-        this.value10 = value10;
-    }
-
-    public String getValue11() {
-        return value11;
-    }
-
-    public void setValue11(String value11) {
-        this.value11 = value11;
-    }
-
-    public String getValue12() {
-        return value12;
-    }
-
-    public void setValue12(String value12) {
-        this.value12 = value12;
-    }
-
-    public String getValue13() {
-        return value13;
-    }
-
-    public void setValue13(String value13) {
-        this.value13 = value13;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/reportSet.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/reportSet.java
deleted file mode 100644
index df75d69..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/reportSet.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.domain;
-
-import java.io.Serializable;
-import java.io.UnsupportedEncodingException;
-import java.util.Date;
-import java.math.BigDecimal;
-import lombok.Data;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import org.springframework.format.annotation.DateTimeFormat;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * @Description: report_set
- * @Author: jeecg-boot
- * @Date:   2022-04-01
- * @Version: V1.0
- */
-@Data
-public class reportSet implements Serializable {
-	/**id*/
-    @ApiModelProperty(value = "id")
-    private String id;
-	/**indexId*/
-    @ApiModelProperty(value = "indexId")
-    private String indexId;
-	/**鏃堕棿绫诲瀷锛欴AY/MONTH*/
-    @ApiModelProperty(value = "鏃堕棿绫诲瀷锛欴AY/MONTH")
-    private String dateType;
-    /**
-     * 鏃堕棿绫诲瀷鏄剧ず瀛楃涓�
-     */
-    private String dateTypeShow;
-	/**涓婇檺鍊�*/
-    @ApiModelProperty(value = "涓婇檺鍊�")
-    private String limitValUp;
-	/**createTime*/
-	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern="yyyy-MM-dd")
-    @ApiModelProperty(value = "createTime")
-    private Date createTime;
-	/**createBy*/
-    @ApiModelProperty(value = "createBy")
-    private String createBy;
-	/**updateTime*/
-	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern="yyyy-MM-dd")
-    @ApiModelProperty(value = "updateTime")
-    private Date updateTime;
-	/**updateBy*/
-    @ApiModelProperty(value = "updateBy")
-    private String updateBy;
-	/**涓嬮檺鍊�*/
-    @ApiModelProperty(value = "涓嬮檺鍊�")
-    private String limitValDown;
-	/**nodeId*/
-    @ApiModelProperty(value = "nodeId")
-    private String nodeId;
-	/**涓婇檺鏇挎崲鍊�*/
-    @ApiModelProperty(value = "涓婇檺鏇挎崲鍊�")
-    private String limitReplaceValUp;
-	/**涓嬮檺鏇挎崲鍊�*/
-    @ApiModelProperty(value = "涓嬮檺鏇挎崲鍊�")
-    private String limitReplaceValDown;
-
-    /** 鏄惁鍚敤闄愬�兼浛鎹�*/
-    @ApiModelProperty(value = "鏄惁鍚敤闄愬�兼浛鎹�")
-    private Integer enableLimitValue;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/reportSetDataModel.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/reportSetDataModel.java
deleted file mode 100644
index 4e4fd7d..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/reportSetDataModel.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.domain;
-
-import lombok.Data;
-
-/**
- * @Description: 鑾峰彇鑺傜偣涓嬬殑鐐逛綅鍒楄〃
- * @author: yxw
- * @date: 2022骞�04鏈�01鏃� 18:30
- */
-@Data
-public class reportSetDataModel {
-
-    private String indexId;
-    private String indexCode;
-    private String indexName;
-    private String meterId;
-    private String meterName;
-    /** 鏄惁鍚敤闄愬�兼浛鎹�*/
-    private boolean enableLimitValue;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/reportSetRequestModel.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/reportSetRequestModel.java
deleted file mode 100644
index df36938..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/reportSetRequestModel.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import lombok.Data;
-
-/**
- * @Description: 鑾峰彇涓婃姤鑺傜偣閰嶇疆鍒楄〃璇锋眰鍙傛暟瀹炰綋
- * @author: yxw
- * @date: 2022骞�04鏈�01鏃� 11:04
- */
-@Data
-public class reportSetRequestModel {
-    /**
-     * nodeid
-     */
-    @Excel(name = "鑺傜偣ID")
-    private String nodeId;
-    /**
-     * 鎸囨爣id
-     */
-    private String indexId;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/vo/ComprehensiveConsumptionRatioVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/vo/ComprehensiveConsumptionRatioVO.java
deleted file mode 100644
index e2f2f57..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/vo/ComprehensiveConsumptionRatioVO.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.domain.vo;
-
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-/**
- * 缁煎悎鎶ヨ〃鏌ヨ鑳借�楀崰姣斾俊鎭繑鍥� VO
- *
- * @Author: Zhujw
- * @Date: 2023/3/1
- */
-@Data
-public class ComprehensiveConsumptionRatioVO {
-
-
-    /**
-     * 鑳芥簮绫诲瀷鍚嶇О
-     */
-    private String item;
-
-    /**
-     * 鑳芥簮绫诲瀷
-     */
-    private String energyType;
-
-    /**
-     * 鍗曚綅
-     */
-    private String unit;
-
-    /**
-     * 鍚堣鍊�
-     */
-    private BigDecimal count;
-
-    /**
-     * 鍗犳瘮
-     */
-    private BigDecimal percent;
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/vo/ComprehensiveReportsItem.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/vo/ComprehensiveReportsItem.java
deleted file mode 100644
index 4bf6758..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/vo/ComprehensiveReportsItem.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.domain.vo;
-
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-/**
- * 缁煎悎鎶ヨ〃杩斿洖璇︾粏淇℃伅
- *
- * @Author: Zhujw
- * @Date: 2023/3/16
- */
-@Data
-public class ComprehensiveReportsItem {
-
-    /**
-     * 鐢ㄨ兘鍗曞厓
-     */
-    private String energyUnit;
-
-    /**
-     * 骞翠唤1
-     */
-    private BigDecimal value;
-
-    /**
-     * 骞翠唤2
-     */
-    private BigDecimal value2;
-
-    /**
-     * 骞翠唤3
-     */
-    private BigDecimal value3;
-
-    /**
-     * 骞翠唤4
-     */
-    private BigDecimal value4;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/vo/ComprehensiveReportsVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/vo/ComprehensiveReportsVO.java
deleted file mode 100644
index 163f548..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/vo/ComprehensiveReportsVO.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.domain.vo;
-
-
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * 缁煎悎鎶ヨ〃杩斿洖绫�
- *
- * @Author: Zhujw
- * @Date: 2023/3/16
- */
-@Data
-public class ComprehensiveReportsVO {
-
-    /**
-     * MC鐢ㄧ數鎬婚噺
-     */
-    private List<ComprehensiveReportsItem> reportsItemList;
-
-    /**
-     * 缁煎悎鑳借�楁姌绾垮浘
-     */
-    private List<ComprehensiveReportsItem> chart;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/vo/ComprehensiveUnitConsumptionChartVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/vo/ComprehensiveUnitConsumptionChartVO.java
deleted file mode 100644
index 53cffcc..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/domain/vo/ComprehensiveUnitConsumptionChartVO.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.domain.vo;
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-
-/**
- * 缁煎悎鎶ヨ〃鑾峰彇鑳借�楄澶囧崰姣斾俊鎭� 杩斿洖 vo
- *
- * @Author: Zhujw
- * @Date: 2023/3/1
- */
-@Data
-public class ComprehensiveUnitConsumptionChartVO {
-
-    /**
-     * 鍚嶇О
-     */
-    private String name;
-
-    /**
-     * 鍗曚綅
-     */
-    private String unit;
-
-    /**
-     * 鍊�
-     */
-    private BigDecimal value;
-
-    /**
-     * 鍚堣鍊�
-     */
-    private BigDecimal total;
-
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/mapper/annualReportMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/mapper/annualReportMapper.java
deleted file mode 100644
index ef84392..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/mapper/annualReportMapper.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.mapper;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.reportForm.domain.annualReport;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 闃舵鏁版嵁褰曞叆鎺ュ彛
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface annualReportMapper {
-    public List<annualReport> getannualReportList(@Param("indexIds") List<String> indexIds,
-                                                @Param("dataList") List<annualReport> dataList,
-                                                @Param("beginTime") Date beginTime,
-                                                @Param("endTime") Date endTime,
-                                                @Param("timeType") TimeType timeType,
-                                                @Param("indexStorageId")  String indexStorageId);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/mapper/consolidatedStatementsMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/mapper/consolidatedStatementsMapper.java
deleted file mode 100644
index 9b85605..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/mapper/consolidatedStatementsMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.mapper;
-
-import com.dingzhuo.energy.project.reportForm.domain.consolidatedStatements;
-import java.util.List;
-
-/**
- * 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃Mapper鎺ュ彛
- * 
- * @author sys
- * @date 2021-01-15
- */
-public interface consolidatedStatementsMapper 
-{
-    /**
-     * 鏌ヨ鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * 
-     * @param id 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃ID
-     * @return 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     */
-    public consolidatedStatements selectconsolidatedStatementsById(String id);
-
-    /**
-     * 鏌ヨ鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃鍒楄〃
-     * 
-     * @param consolidatedStatements 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * @return 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃闆嗗悎
-     */
-    public List<consolidatedStatements> selectconsolidatedStatementsList(consolidatedStatements consolidatedStatements);
-
-    /**
-     * 鏂板鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * 
-     * @param consolidatedStatements 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * @return 缁撴灉
-     */
-    public int insertconsolidatedStatements(consolidatedStatements consolidatedStatements);
-
-    /**
-     * 淇敼鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * 
-     * @param consolidatedStatements 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * @return 缁撴灉
-     */
-    public int updateconsolidatedStatements(consolidatedStatements consolidatedStatements);
-
-    /**
-     * 鍒犻櫎鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * 
-     * @param id 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃ID
-     * @return 缁撴灉
-     */
-    public int deleteconsolidatedStatementsById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteconsolidatedStatementsByIds(String[] ids);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/mapper/dailyReportMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/mapper/dailyReportMapper.java
deleted file mode 100644
index 2bd98db..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/mapper/dailyReportMapper.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.mapper;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.reportForm.domain.dailyReport;
-import com.dingzhuo.energy.project.reportForm.domain.reportForm;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 闃舵鏁版嵁褰曞叆鎺ュ彛
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface dailyReportMapper {
-    /*public List<DataItem> getDailyReportList(*//*@Param("indexIds") List<String> indexIds,
-                                             @Param("beginTime") Date beginTime,
-                                             @Param("endTime") Date endTime,
-                                             @Param("timeType") TimeType timeType*//*);*/
-    public List<dailyReport> getDailyReportList(@Param("indexIds") List<String> indexIds,
-                                                @Param("dataList") List<dailyReport> dataList,
-                                                @Param("beginTime") Date beginTime,
-                                                @Param("endTime") Date endTime,
-                                                @Param("timeType") TimeType timeType,
-                                                @Param("indexStorageId")  String indexStorageId);
-
-    public List<dailyReport> listDailyReportList(@Param("nodeId") String nodeId,
-                                                @Param("dataList") List<dailyReport> dataList,
-                                                @Param("beginTime") Date beginTime,
-                                                @Param("endTime") Date endTime,
-                                                @Param("timeType") TimeType timeType,
-                                                @Param("indexStorageId")  String indexStorageId);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/mapper/monthlyReportMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/mapper/monthlyReportMapper.java
deleted file mode 100644
index 2c6318c..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/mapper/monthlyReportMapper.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.mapper;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.reportForm.domain.dailyReport;
-import com.dingzhuo.energy.project.reportForm.domain.monthlyReport;
-import com.dingzhuo.energy.project.reportForm.domain.reportForm;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 闃舵鏁版嵁褰曞叆鎺ュ彛
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface monthlyReportMapper {
-    public List<monthlyReport> getmonthlyReportList(@Param("indexIds") List<String> indexIds,
-                                                    @Param("dataList") List<monthlyReport> dataList,
-                                                    @Param("beginTime") Date beginTime,
-                                                    @Param("endTime") Date endTime,
-                                                    @Param("timeType") TimeType timeType,
-                                                    @Param("indexStorageId")  String indexStorageId);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/mapper/reportFormMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/mapper/reportFormMapper.java
deleted file mode 100644
index 9ac6b14..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/mapper/reportFormMapper.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.mapper;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.reportForm.domain.dailyReport;
-import com.dingzhuo.energy.project.reportForm.domain.reportForm;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 闃舵鏁版嵁褰曞叆鎺ュ彛
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface reportFormMapper {
-    public List<reportForm> selectReportFormList(@Param("code") String code);
-    public List<reportForm> selectReportFormListp(@Param("code") String code);
-    public List<reportForm> selectList(@Param("timeDate") String timeDate,
-                                       @Param("code") String code,
-                                       @Param("timeYear") String timeYear,
-                                       @Param("timeType") TimeType timeType);
-    /*public List<DataItem> getDailyReportList(*//*@Param("indexIds") List<String> indexIds,
-                                             @Param("beginTime") Date beginTime,
-                                             @Param("endTime") Date endTime,
-                                             @Param("timeType") TimeType timeType*//*);*/
-    public List<dailyReport> getDailyReportList(@Param("indexIds") List<String> indexIds,
-                                                @Param("dataList") List<dailyReport> dataList,
-                                                @Param("beginTime") Date beginTime,
-                                                @Param("endTime") Date endTime,
-                                                @Param("timeType") TimeType timeType,
-                                                @Param("indexStorageId")  String indexStorageId);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/mapper/reportSetMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/mapper/reportSetMapper.java
deleted file mode 100644
index 49f24c5..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/mapper/reportSetMapper.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.mapper;
-
-import java.util.List;
-
-import com.dingzhuo.energy.project.reportForm.domain.reportSet;
-import com.dingzhuo.energy.project.reportForm.domain.reportSetDataModel;
-import com.dingzhuo.energy.project.reportForm.domain.reportSetRequestModel;
-import org.apache.ibatis.annotations.Param;
-
-/**
- * @Description: report_set
- * @Author: jeecg-boot
- * @Date: 2022-04-01
- * @Version: V1.0
- */
-public interface reportSetMapper {
-    /**
-     * 鑾峰彇涓婃姤璁剧疆鍒楄〃
-     *
-     * @param nodeId  鑺傜偣id
-     * @param indexId 鎸囨爣id
-     * @return
-     */
-    List<reportSet> listReportSet(String nodeId, String indexId);
-    /**
-     * 鑾峰彇鑺傜偣涓嬫墍鏈夌殑涓婃姤璁剧疆鍒楄〃
-     *
-     * @param nodeId  鑺傜偣id
-     * @return
-     */
-    List<reportSet> listNodeReportSet(String nodeId);
-
-    /**
-     * 淇濆瓨涓婃姤閰嶇疆
-     *
-     * @param listMap
-     * @return
-     */
-    int saveReportSet(List<reportSet> listMap);
-
-    /**
-     * 鍒犻櫎璇ョ偣浣嶇殑涓婃姤閰嶇疆
-     *
-     * @param nodeId
-     * @param indexId
-     * @param username
-     * @return
-     */
-    int deleteReportSetByNodeId(String nodeId, String indexId, String username);
-
-    /**
-     * 鑾峰彇鑺傜偣涓嬬殑鐐逛綅鍒楄〃
-     * @param nodeId
-     * @param indexType
-     * @return
-     */
-    List<reportSetDataModel> listNodeIndex(String nodeId, String indexType);
-
-    /**
-     * 璁剧疆璇ョ偣浣嶇殑闄愬�煎惎鐢ㄧ姸鎬�
-     * @param nodeId
-     * @param indexId
-     * @param enableStatus 瑕佽缃殑鐘舵��
-     * @param username
-     * @return
-     */
-    int updateEnableStatus(String nodeId,String indexId, int enableStatus, String username);
-
-    /**
-     * 鏍规嵁鏃ユ湡绫诲瀷鑾峰彇涓婃姤璁剧疆
-     **/
-    List<reportSet> getAllEnableSetByDateType(@Param("dateType") String dateType);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/IComprehensiveReportsService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/IComprehensiveReportsService.java
deleted file mode 100644
index 3f5797a..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/IComprehensiveReportsService.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.service;
-
-import com.dingzhuo.energy.project.reportForm.domain.dto.ComprehensiveReportsDTO;
-import com.dingzhuo.energy.project.reportForm.domain.vo.ComprehensiveConsumptionRatioVO;
-import com.dingzhuo.energy.project.reportForm.domain.vo.ComprehensiveReportsItem;
-import com.dingzhuo.energy.project.reportForm.domain.vo.ComprehensiveUnitConsumptionChartVO;
-
-import java.util.List;
-
-/**
- * 缁煎悎鎶ヨ〃 鎺ュ彛灞�
- *
- * @Author: Zhujw
- * @Date: 2023/3/16
- */
-public interface IComprehensiveReportsService {
-
-    /**
-     * 缁煎悎鎶ヨ〃鏌ヨ鍒楄〃淇℃伅
-     *
-     * @param dto 璇锋眰鍙傛暟
-     * @return
-     */
-    List<ComprehensiveReportsItem> listComprehensiveReport(ComprehensiveReportsDTO dto);
-
-    /**
-     * 缁煎悎鎶ヨ〃鏌ヨ鑳借�楀崰姣斾俊鎭�
-     *
-     * @param dto 璇锋眰鍙傛暟
-     * @return
-     */
-    List<ComprehensiveConsumptionRatioVO> getEnergyConsumptionRatio(ComprehensiveReportsDTO dto);
-
-    /**
-     * 缁煎悎鎶ヨ〃鑾峰彇鑳借�楄澶囧崰姣斾俊鎭�
-     *
-     * @param dto 璇锋眰鍙傛暟
-     * @return
-     */
-    List<ComprehensiveUnitConsumptionChartVO> getEnergyUnitConsumptionRatio(ComprehensiveReportsDTO dto);
-
-    /**
-     * 缁煎悎鎶ヨ〃鏌ヨ鐢ㄨ兘鍗曞厓鏌辩姸鍥句俊鎭�
-     *
-     * @param dto 璇锋眰鍙傛暟
-     * @return
-     */
-    List<ComprehensiveReportsItem> listEnergyUnitComprehensiveReport(ComprehensiveReportsDTO dto);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/IannualReportService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/IannualReportService.java
deleted file mode 100644
index d1502b7..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/IannualReportService.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.reportForm.domain.annualReport;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 闃舵鏁版嵁褰曞叆鎺ュ彛
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface IannualReportService {
-    public List<annualReport> getannualReportList(List<String> indexIds, List<annualReport> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/IconsolidatedStatementsService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/IconsolidatedStatementsService.java
deleted file mode 100644
index dba2969..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/IconsolidatedStatementsService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.service;
-
-import com.dingzhuo.energy.project.reportForm.domain.consolidatedStatements;
-import java.util.List;
-
-/**
- * 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃Service鎺ュ彛
- * 
- * @author sys
- * @date 2021-01-15
- */
-public interface IconsolidatedStatementsService 
-{
-    /**
-     * 鏌ヨ鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * 
-     * @param id 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃ID
-     * @return 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     */
-    public consolidatedStatements selectconsolidatedStatementsById(String id);
-
-    /**
-     * 鏌ヨ鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃鍒楄〃
-     * 
-     * @param consolidatedStatements 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * @return 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃闆嗗悎
-     */
-    public List<consolidatedStatements> selectconsolidatedStatementsList(consolidatedStatements consolidatedStatements);
-
-    /**
-     * 鏂板鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * 
-     * @param consolidatedStatements 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * @return 缁撴灉
-     */
-    public int insertconsolidatedStatements(consolidatedStatements consolidatedStatements);
-
-    /**
-     * 淇敼鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * 
-     * @param consolidatedStatements 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * @return 缁撴灉
-     */
-    public int updateconsolidatedStatements(consolidatedStatements consolidatedStatements);
-
-    /**
-     * 鎵归噺鍒犻櫎鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃ID
-     * @return 缁撴灉
-     */
-    public int deleteconsolidatedStatementsByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃淇℃伅
-     * 
-     * @param id 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃ID
-     * @return 缁撴灉
-     */
-    public int deleteconsolidatedStatementsById(String id);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/IdailyReportService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/IdailyReportService.java
deleted file mode 100644
index 22ac2f2..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/IdailyReportService.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.reportForm.domain.dailyReport;
-import com.dingzhuo.energy.project.reportForm.domain.reportForm;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 闃舵鏁版嵁褰曞叆鎺ュ彛
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface IdailyReportService {
-    public List<dailyReport> getDailyReportList(List<String> indexIds,List<dailyReport> dataList, Date beginTime,
-                                                Date endTime, TimeType timeType,String indexStorageId);
-
-    public List<dailyReport> listDailyReportList(String nodeId,List<dailyReport> dataList, Date beginTime,
-                                                 Date endTime, TimeType timeType,String indexStorageId);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/ImonthlyReportService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/ImonthlyReportService.java
deleted file mode 100644
index 7980638..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/ImonthlyReportService.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.reportForm.domain.monthlyReport;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 闃舵鏁版嵁褰曞叆鎺ュ彛
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface ImonthlyReportService {
-    public List<monthlyReport> getMonthlyReporList(List<String> indexIds, List<monthlyReport> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/IreportFormService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/IreportFormService.java
deleted file mode 100644
index 7c44b01..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/IreportFormService.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.reportForm.domain.dailyReport;
-import com.dingzhuo.energy.project.reportForm.domain.reportForm;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 闃舵鏁版嵁褰曞叆鎺ュ彛
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface IreportFormService {
-    public List<reportForm> selectReportFormList(String code);
-    public List<reportForm> selectReportFormListp(String code);
-    public List<reportForm> selectList(String timeDate, String code, String timeYear, TimeType timeType);
-    //public List<DataItem> getDailyReportList(List<String> indexIds, Date beginTime, Date endTime, TimeType timeType);
-    public List<dailyReport> getDailyReportList(List<String> indexIds,List<dailyReport> dataList, Date beginTime, Date endTime, TimeType timeType,String indexStorageId);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/IreportSetService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/IreportSetService.java
deleted file mode 100644
index 74b9f6f..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/IreportSetService.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.service;
-
-import com.dingzhuo.energy.project.reportForm.domain.reportSet;
-import com.dingzhuo.energy.project.reportForm.domain.reportSetDataModel;
-import com.dingzhuo.energy.project.reportForm.domain.reportSetRequestModel;
-
-import java.util.List;
-
-/**
- * 闃舵鏁版嵁褰曞叆鎺ュ彛
- *
- * @author sys
- * @date 2020-03-25
- */
-public interface IreportSetService {
-    /**
-     * 鑾峰彇涓婃姤璁剧疆鍒楄〃
-     *
-     * @param requestModel 鍙傛暟
-     * @return
-     */
-    List<reportSet> listReportSet(reportSetRequestModel requestModel);
-
-    /**
-     * 淇濆瓨涓婃姤閰嶇疆
-     *
-     * @param listMap
-     */
-    int saveReportSet(List<reportSet> listMap, String username);
-
-    /**
-     * 鑾峰彇鑺傜偣涓嬬殑鐐逛綅鍒楄〃
-     * @param nodeId
-     * @param indexType
-     * @return
-     */
-    List<reportSetDataModel> listNodeIndex(String nodeId, String indexType);
-
-    /**
-     * 璁剧疆璇ョ偣浣嶇殑闄愬�煎惎鐢ㄧ姸鎬�
-     * @param nodeId
-     * @param indexId
-     * @param enableStatus 瑕佽缃殑鐘舵��
-     * @param username
-     * @return
-     */
-    int updateEnableStatus(String nodeId,String indexId, boolean enableStatus, String username);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/AnnualReportFormServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/AnnualReportFormServiceImpl.java
deleted file mode 100644
index 67524ae..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/AnnualReportFormServiceImpl.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.service.impl;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.reportForm.domain.annualReport;
-import com.dingzhuo.energy.project.reportForm.domain.dailyReport;
-import com.dingzhuo.energy.project.reportForm.mapper.annualReportMapper;
-import com.dingzhuo.energy.project.reportForm.mapper.reportFormMapper;
-import com.dingzhuo.energy.project.reportForm.service.IannualReportService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * stagseDataEntryService涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-03-25
- */
-@Service
-public class AnnualReportFormServiceImpl implements IannualReportService {
-    @Autowired
-    private annualReportMapper annualReportMapper;
-
-    @Override
-    public List<annualReport> getannualReportList(List<String> indexIds, List<annualReport> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId) {
-        return annualReportMapper.getannualReportList(indexIds,dataList, beginTime, endTime, timeType,indexStorageId);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/ComprehensiveReportsServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/ComprehensiveReportsServiceImpl.java
deleted file mode 100644
index b696220..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/ComprehensiveReportsServiceImpl.java
+++ /dev/null
@@ -1,347 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.service.impl;
-
-import cn.hutool.core.date.DateField;
-import cn.hutool.core.date.DateUtil;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.domain.vo.ModelNodeIndexInfor;
-import com.dingzhuo.energy.data.model.service.IEnergyIndexService;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.project.common.CommonConst;
-import com.dingzhuo.energy.project.dataEntry.service.IDataItemService;
-import com.dingzhuo.energy.project.reportForm.domain.dto.ComprehensiveReportsDTO;
-import com.dingzhuo.energy.project.reportForm.domain.vo.ComprehensiveConsumptionRatioVO;
-import com.dingzhuo.energy.project.reportForm.domain.vo.ComprehensiveReportsItem;
-import com.dingzhuo.energy.project.reportForm.domain.vo.ComprehensiveUnitConsumptionChartVO;
-import com.dingzhuo.energy.project.reportForm.service.IComprehensiveReportsService;
-import com.dingzhuo.energy.project.system.domain.SysDictData;
-import com.dingzhuo.energy.project.system.service.ISysConfigService;
-import com.dingzhuo.energy.project.system.service.ISysDictDataService;
-import lombok.AllArgsConstructor;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.ObjectUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.*;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.stream.Collectors;
-
-
-/**
- * 缁煎悎鎶ヨ〃鎺ュ彛瀹炵幇灞�
- *
- * @Author: Zhujw
- * @Date: 2023/3/16
- */
-@Service
-@AllArgsConstructor
-public class ComprehensiveReportsServiceImpl implements IComprehensiveReportsService {
-
-
-    private final IDataItemService dataItemService;
-
-    private final IModelNodeService modelNodeService;
-
-    private final ISysConfigService sysConfigService;
-
-    private final ISysDictDataService dictDataService;
-
-    private final IEnergyIndexService energyIndexService;
-
-
-    /**
-     * 缁煎悎鎶ヨ〃鏌ヨ鍒楄〃淇℃伅
-     *
-     * @param dto 璇锋眰鍙傛暟
-     * @return
-     */
-    @Override
-    public List<ComprehensiveReportsItem> listComprehensiveReport(ComprehensiveReportsDTO dto) {
-        List<ComprehensiveReportsItem> ratio = new ArrayList<>();
-        // 鏍规嵁code鏌ヨmodel淇℃伅
-        ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(dto.getModeCode());
-        if (ObjectUtils.isEmpty(modelNode)) {
-            return ratio;
-        }
-        // 閫氳繃code鑾峰彇modelnode瀵瑰簲index淇℃伅
-        List<ModelNodeIndexInfor> nodeIndexInforList = modelNodeService.listModelNodeIndexIdRelationInforByParentId(modelNode.getNodeId());
-        List<String> indexIds = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-        if (CollectionUtils.isEmpty(indexIds)) {
-            return ratio;
-        }
-        // 濡傛灉濉叆浜嗚兘婧愮被鍨嬪垯闇�瑕佽繘琛岀瓫閫�
-        if (StringUtils.isNotEmpty(dto.getEnergyType())) {
-            List<EnergyIndex> energyIndexList = energyIndexService.getEnergyIndexByIds(indexIds).stream()
-                    .filter(li -> dto.getEnergyType().equals(li.getEnergyId())).collect(Collectors.toList());
-            if (CollectionUtils.isEmpty(energyIndexList)) {
-                return ratio;
-            }
-            indexIds = energyIndexList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        }
-        // 鍒嗙粍
-        Map<String, List<String>> nodeIndexMap = nodeIndexInforList.stream().collect(
-                Collectors.groupingBy(ModelNodeIndexInfor::getNodeId,
-                        Collectors.mapping(ModelNodeIndexInfor::getIndexId, Collectors.toList())));
-        // 鏌ヨ鏁版嵁
-        Date time = dto.getTime();
-        AtomicReference<List<DataItem>> dataItemList = new AtomicReference<>();
-        AtomicReference<List<DataItem>> dataItemList2 = new AtomicReference<>();
-        AtomicReference<List<DataItem>> dataItemList3 = new AtomicReference<>();
-        AtomicReference<List<DataItem>> dataItemList4 = new AtomicReference<>();
-        for (int i = 0; i < CommonConst.DIGIT_4; i++) {
-            int offset = i * CommonConst.DIGIT_MINUS_1;
-            // 鑾峰彇鏌ヨ鏃堕棿
-            Date newDate = DateUtil.offset(time, DateField.YEAR, offset);
-            Date newEndDate = DateUtil.endOfMonth(newDate);
-            // 鏌ヨdataItem 鏁版嵁
-            switch (i) {
-                case 0:
-                    dataItemList.set(dataItemService.getDataItemHourInforByIndexIds(newDate, newEndDate, TimeType.HOUR.name(), indexIds));
-                    break;
-                case 1:
-                    dataItemList2.set(dataItemService.getDataItemHourInforByIndexIds(newDate, newEndDate, TimeType.HOUR.name(), indexIds));
-                    break;
-                case 2:
-                    dataItemList3.set(dataItemService.getDataItemHourInforByIndexIds(newDate, newEndDate, TimeType.HOUR.name(), indexIds));
-                    break;
-                default:
-                    dataItemList4.set(dataItemService.getDataItemHourInforByIndexIds(newDate, newEndDate, TimeType.HOUR.name(), indexIds));
-                    break;
-            }
-        }
-        // 瀵绘壘鍏崇郴
-        nodeIndexMap.forEach((key, value) -> {
-            ComprehensiveReportsItem reportsItem = new ComprehensiveReportsItem();
-            Optional<ModelNodeIndexInfor> first = nodeIndexInforList.stream().filter(li -> key.equals(li.getNodeId())).findFirst();
-            ModelNodeIndexInfor infor = first.get();
-            // 璁剧疆鍚嶇О
-            reportsItem.setEnergyUnit(infor.getName());
-            // 璁剧疆鍊�
-            BigDecimal sum = BigDecimal.valueOf(dataItemList.get().stream().filter(li -> value.contains(li.getIndexId()))
-                    .mapToDouble(DataItem::getValue).sum());
-            BigDecimal sum2 = BigDecimal.valueOf(dataItemList2.get().stream().filter(li -> value.contains(li.getIndexId()))
-                    .mapToDouble(DataItem::getValue).sum());
-            BigDecimal sum3 = BigDecimal.valueOf(dataItemList3.get().stream().filter(li -> value.contains(li.getIndexId()))
-                    .mapToDouble(DataItem::getValue).sum());
-            BigDecimal sum4 = BigDecimal.valueOf(dataItemList4.get().stream().filter(li -> value.contains(li.getIndexId()))
-                    .mapToDouble(DataItem::getValue).sum());
-            reportsItem.setValue(sum.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP));
-            reportsItem.setValue2(sum2.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP));
-            reportsItem.setValue3(sum3.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP));
-            reportsItem.setValue4(sum4.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP));
-            ratio.add(reportsItem);
-        });
-        return ratio;
-    }
-
-    /**
-     * 缁煎悎鎶ヨ〃鏌ヨ鐢ㄨ兘鍗曞厓鏌辩姸鍥句俊鎭�
-     *
-     * @param dto   璇锋眰鍙傛暟
-     * @return
-     */
-    @Override
-    public List<ComprehensiveReportsItem> listEnergyUnitComprehensiveReport(ComprehensiveReportsDTO dto) {
-        List<ComprehensiveReportsItem> ratio = new ArrayList<>();
-        // 鏍规嵁code鏌ヨmodel淇℃伅
-        ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(dto.getModeCode());
-        if (ObjectUtils.isEmpty(modelNode)) {
-            return ratio;
-        }
-        // 閫氳繃code鑾峰彇modelnode瀵瑰簲index淇℃伅
-        List<ModelNodeIndexInfor> nodeIndexInforList = modelNodeService.listModelNodeIndexIdRelationInforByParentId(modelNode.getNodeId());
-        List<String> indexIds = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-        if (CollectionUtils.isEmpty(indexIds)) {
-            return ratio;
-        }
-        // 濡傛灉濉叆浜嗚兘婧愮被鍨嬪垯闇�瑕佽繘琛岀瓫閫�
-        if (StringUtils.isNotEmpty(dto.getEnergyType())) {
-            List<EnergyIndex> energyIndexList = energyIndexService.getEnergyIndexByIds(indexIds).stream()
-                    .filter(li -> dto.getEnergyType().equals(li.getEnergyId())).collect(Collectors.toList());
-            if (CollectionUtils.isEmpty(energyIndexList)) {
-                return ratio;
-            }
-            indexIds = energyIndexList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        }
-        // 鍒嗙粍
-        Map<String, List<String>> nodeIndexMap = nodeIndexInforList.stream().collect(
-                Collectors.groupingBy(ModelNodeIndexInfor::getNodeId,
-                        Collectors.mapping(ModelNodeIndexInfor::getIndexId, Collectors.toList())));
-        // 鏌ヨ鏁版嵁
-        Date time = dto.getTime();
-        AtomicReference<List<DataItem>> dataItemList = new AtomicReference<>();
-        AtomicReference<List<DataItem>> dataItemList2 = new AtomicReference<>();
-        AtomicReference<List<DataItem>> dataItemList3 = new AtomicReference<>();
-        AtomicReference<List<DataItem>> dataItemList4 = new AtomicReference<>();
-        for (int i = 0; i < CommonConst.DIGIT_4; i++) {
-            int offset = i * CommonConst.DIGIT_MINUS_1;
-            // 鑾峰彇鏌ヨ鏃堕棿
-            Date newDate = DateUtil.offset(time, DateField.YEAR, offset);
-            Date newEndDate = DateUtil.endOfMonth(newDate);
-            // 鏌ヨdataItem 鏁版嵁
-            switch (i) {
-                case 0:
-                    dataItemList.set(dataItemService.getDataItemHourInforByIndexIds(newDate, newEndDate, TimeType.HOUR.name(), indexIds));
-                    break;
-                case 1:
-                    dataItemList2.set(dataItemService.getDataItemHourInforByIndexIds(newDate, newEndDate, TimeType.HOUR.name(), indexIds));
-                    break;
-                case 2:
-                    dataItemList3.set(dataItemService.getDataItemHourInforByIndexIds(newDate, newEndDate, TimeType.HOUR.name(), indexIds));
-                    break;
-                default:
-                    dataItemList4.set(dataItemService.getDataItemHourInforByIndexIds(newDate, newEndDate, TimeType.HOUR.name(), indexIds));
-                    break;
-            }
-        }
-        // 瀵绘壘鍏崇郴
-        nodeIndexMap.forEach((key, value) -> {
-            ComprehensiveReportsItem charItem = new ComprehensiveReportsItem();
-            Optional<ModelNodeIndexInfor> first = nodeIndexInforList.stream().filter(li -> key.equals(li.getNodeId())).findFirst();
-            ModelNodeIndexInfor infor = first.get();
-            // 璁剧疆鍚嶇О
-            charItem.setEnergyUnit(infor.getName());
-            // 璁剧疆鍊�
-            BigDecimal sum = BigDecimal.valueOf(dataItemList.get().stream().filter(li -> value.contains(li.getIndexId()))
-                    .mapToDouble(DataItem::getValue).sum());
-            BigDecimal sum2 = BigDecimal.valueOf(dataItemList2.get().stream().filter(li -> value.contains(li.getIndexId()))
-                    .mapToDouble(DataItem::getValue).sum());
-            BigDecimal sum3 = BigDecimal.valueOf(dataItemList3.get().stream().filter(li -> value.contains(li.getIndexId()))
-                    .mapToDouble(DataItem::getValue).sum());
-            BigDecimal sum4 = BigDecimal.valueOf(dataItemList4.get().stream().filter(li -> value.contains(li.getIndexId()))
-                    .mapToDouble(DataItem::getValue).sum());
-            charItem.setValue(sum.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP));
-            charItem.setValue2(sum2.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP));
-            charItem.setValue3(sum3.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP));
-            charItem.setValue4(sum4.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP));
-            ratio.add(charItem);
-        });
-        return ratio;
-    }
-
-    /**
-     * 缁煎悎鎶ヨ〃鏌ヨ鑳借�楀崰姣斾俊鎭�
-     *
-     * @param dto 璇锋眰鍙傛暟
-     * @return
-     */
-    @Override
-    public List<ComprehensiveConsumptionRatioVO> getEnergyConsumptionRatio(ComprehensiveReportsDTO dto) {
-        List<ComprehensiveConsumptionRatioVO> ratioVOList = new ArrayList<>();
-        // 鏌ヨ瀛楀吀鑾峰彇鎵�鏈夎兘婧愬悕瀛�
-        List<SysDictData> energyTypeDictist = dictDataService.selectDictDataByType("energy_type");
-        energyTypeDictist.forEach(energyType -> {
-            ComprehensiveConsumptionRatioVO ratioVO = new ComprehensiveConsumptionRatioVO();
-            ratioVO.setItem(energyType.getDictLabel());
-            ratioVO.setEnergyType(energyType.getDictValue());
-            ratioVOList.add(ratioVO);
-        });
-        // 閫氳繃code鑾峰彇modelnode瀵瑰簲index淇℃伅
-        List<String> indexIds = modelNodeService.listIndexIdsByModelCode(dto.getModeCode());
-        if (CollectionUtils.isEmpty(indexIds)) {
-            return ratioVOList;
-        }
-        // 鏌ヨ鐐逛綅璇︾粏淇℃伅
-        List<EnergyIndex> energyIndexInforList = energyIndexService.getEnergyIndexByIds(indexIds);
-        // 鑾峰彇鏌ヨ鏃堕棿
-        Date newDate = dto.getTime();
-        Date newEndDate = DateUtil.endOfMonth(newDate);
-        // 閫氳繃indexIds鎵綿ata_Item鏁版嵁
-        List<DataItem> itemList = dataItemService.getDataItemHourInforByIndexIds(newDate, newEndDate, TimeType.HOUR.name(), indexIds);
-        // 杞瑃ce鍊嶇巼
-        BigDecimal multiple = BigDecimal.valueOf(CommonConst.DIGIT_1000);
-        // 鎬诲悎璁″��
-        double sum = itemList.stream().mapToDouble(DataItem::getValue).sum();
-        BigDecimal totalValue = BigDecimal.valueOf(sum).divide(multiple, CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-        // 鑾峰彇鐐逛綅鑳芥簮绫诲瀷
-        Map<String, List<String>> energyTypeMap = energyIndexInforList.stream()
-                .filter(l -> StringUtils.isNotEmpty(l.getEnergyId()))
-                .collect(Collectors.groupingBy(
-                        EnergyIndex::getEnergyId, Collectors.mapping(EnergyIndex::getIndexId, Collectors.toList())
-                ));
-        AtomicReference<BigDecimal> totalRatio = new AtomicReference<>(BigDecimal.ZERO);
-        for (ComprehensiveConsumptionRatioVO ratioVO : ratioVOList) {
-            List<String> indexs = energyTypeMap.get(ratioVO.getEnergyType());
-            ratioVO.setUnit("tce");
-            if (CollectionUtils.isEmpty(indexs)) {
-                continue;
-            }
-            // 鎵惧埌鍚堣鍊�
-            double doubleCount = itemList.stream().filter(li -> indexs.contains(li.getIndexId()))
-                    .mapToDouble(DataItem::getValue).sum();
-            BigDecimal count = BigDecimal.valueOf(doubleCount).divide(multiple, CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-            BigDecimal ratio = BigDecimal.ZERO;
-            if (totalValue.compareTo(BigDecimal.ZERO) != 0 || count.compareTo(BigDecimal.ZERO) != 0) {
-                // 璁$畻姣斾緥
-                ratio = count.divide(totalValue, CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-                // 瓒呰繃1鍒欑敤1鍓帀
-                if (totalRatio.get().add(ratio).compareTo(BigDecimal.ONE) > 0) {
-                    ratio = BigDecimal.ONE.subtract(totalRatio.get());
-                }
-            }
-            ratioVO.setCount(count);
-            ratioVO.setPercent(ratio);
-            totalRatio.set(totalRatio.get().add(ratio));
-        }
-        return ratioVOList;
-    }
-
-    /**
-     * 缁煎悎鎶ヨ〃鑾峰彇鑳借�楄澶囧崰姣斾俊鎭�
-     *
-     * @param dto 璇锋眰鍙傛暟
-     * @return
-     */
-    @Override
-    public List<ComprehensiveUnitConsumptionChartVO> getEnergyUnitConsumptionRatio(ComprehensiveReportsDTO dto) {
-        List<ComprehensiveUnitConsumptionChartVO> chartVOList = new ArrayList<>();
-        // 閫氳繃code鑾峰彇modelnode瀵瑰簲index淇℃伅
-        List<ModelNodeIndexInfor> inforList = modelNodeService.getModelNodeIndexIdRelationInforByCode(dto.getModeCode());
-        if (CollectionUtils.isEmpty(inforList)) {
-            return chartVOList;
-        }
-        List<String> indexIds = inforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-        // 濡傛灉濉叆浜嗚兘婧愮被鍨嬪垯闇�瑕佽繘琛岀瓫閫�
-        if (StringUtils.isNotEmpty(dto.getEnergyType())) {
-            List<EnergyIndex> energyIndexList = energyIndexService.getEnergyIndexByIds(indexIds).stream().filter(li -> dto.getEnergyType().equals(li.getEnergyId())).collect(Collectors.toList());
-            if (CollectionUtils.isEmpty(energyIndexList)) {
-                return chartVOList;
-            }
-            indexIds = energyIndexList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-        }
-        // 鑾峰彇鏃堕棿缂栫爜
-        Date newDate = dto.getTime();
-        Date newEndDate = DateUtil.endOfMonth(newDate);
-        // 鏍规嵁鐐逛綅id鏌ヨdataitem
-        List<DataItem> dataItemList = dataItemService.getDataItemHourInforByIndexIds(newDate, newEndDate, TimeType.HOUR.name(), indexIds);
-        // 鍚堣鍊�
-        double totalSum = dataItemList.stream().mapToDouble(DataItem::getValue).sum();
-        BigDecimal totalValue = BigDecimal.valueOf(totalSum).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-        // 杞瑃ce鍊嶇巼
-        BigDecimal multiple = BigDecimal.valueOf(CommonConst.DIGIT_1000);
-        // 鏍规嵁鐢ㄨ兘鍗曞厓id鍒嗙粍
-        Map<String, List<ModelNodeIndexInfor>> nodeMap = inforList.stream().collect(Collectors.groupingBy(ModelNodeIndexInfor::getNodeId));
-        nodeMap.forEach((key, value) -> {
-            ComprehensiveUnitConsumptionChartVO chartVO = new ComprehensiveUnitConsumptionChartVO();
-            // 璁剧疆鍚嶅瓧
-            Optional<ModelNodeIndexInfor> first = value.stream().findFirst();
-            first.ifPresent(modelNodeIndexInfor -> chartVO.setName(modelNodeIndexInfor.getName()));
-            // 璁剧疆褰撳墠鍊�
-            List<String> indexIdList = value.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-            double sum = dataItemList.stream().filter(li -> indexIdList.contains(li.getIndexId())).mapToDouble(DataItem::getValue).sum();
-            BigDecimal energyValue = BigDecimal.valueOf(sum).divide(multiple, CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-            chartVO.setValue(energyValue);
-            chartVO.setUnit("tce");
-            // 璁剧疆鍚堣鍊�
-            chartVO.setTotal(totalValue);
-            chartVOList.add(chartVO);
-        });
-        return chartVOList;
-    }
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/consolidatedStatementsServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/consolidatedStatementsServiceImpl.java
deleted file mode 100644
index 094f984..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/consolidatedStatementsServiceImpl.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.service.impl;
-
-import java.util.List;
-import com.dingzhuo.energy.common.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.project.reportForm.mapper.consolidatedStatementsMapper;
-import com.dingzhuo.energy.project.reportForm.domain.consolidatedStatements;
-import com.dingzhuo.energy.project.reportForm.service.IconsolidatedStatementsService;
-
-/**
- * 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃Service涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2021-01-15
- */
-@Service
-public class consolidatedStatementsServiceImpl implements IconsolidatedStatementsService 
-{
-    @Autowired
-    private consolidatedStatementsMapper consolidatedStatementsMapper;
-
-    /**
-     * 鏌ヨ鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * 
-     * @param id 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃ID
-     * @return 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     */
-    @Override
-    public consolidatedStatements selectconsolidatedStatementsById(String id)
-    {
-        return consolidatedStatementsMapper.selectconsolidatedStatementsById(id);
-    }
-
-    /**
-     * 鏌ヨ鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃鍒楄〃
-     * 
-     * @param consolidatedStatements 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * @return 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     */
-    @Override
-    public List<consolidatedStatements> selectconsolidatedStatementsList(consolidatedStatements consolidatedStatements)
-    {
-        return consolidatedStatementsMapper.selectconsolidatedStatementsList(consolidatedStatements);
-    }
-
-    /**
-     * 鏂板鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * 
-     * @param consolidatedStatements 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertconsolidatedStatements(consolidatedStatements consolidatedStatements)
-    {
-        consolidatedStatements.setCreateTime(DateUtils.getNowDate());
-        return consolidatedStatementsMapper.insertconsolidatedStatements(consolidatedStatements);
-    }
-
-    /**
-     * 淇敼鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * 
-     * @param consolidatedStatements 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateconsolidatedStatements(consolidatedStatements consolidatedStatements)
-    {
-        consolidatedStatements.setUpdateTime(DateUtils.getNowDate());
-        return consolidatedStatementsMapper.updateconsolidatedStatements(consolidatedStatements);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteconsolidatedStatementsByIds(String[] ids)
-    {
-        return consolidatedStatementsMapper.deleteconsolidatedStatementsByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃淇℃伅
-     * 
-     * @param id 鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteconsolidatedStatementsById(String id)
-    {
-        return consolidatedStatementsMapper.deleteconsolidatedStatementsById(id);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/dailyReportServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/dailyReportServiceImpl.java
deleted file mode 100644
index 920f88a..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/dailyReportServiceImpl.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.service.impl;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.reportForm.domain.dailyReport;
-import com.dingzhuo.energy.project.reportForm.mapper.dailyReportMapper;
-import com.dingzhuo.energy.project.reportForm.service.IdailyReportService;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-/**
- * stagseDataEntryService涓氬姟灞傚鐞�
- *
- * @author sys
- * @date 2020-03-25
- */
-@Service
-public class dailyReportServiceImpl implements IdailyReportService {
-    @Autowired
-    private dailyReportMapper dailyReportMapper;
-
-    @Override
-    public List<dailyReport> getDailyReportList(List<String> indexIds, List<dailyReport> dataList, Date beginTime, Date endTime,
-                                                TimeType timeType, String indexStorageId) {
-        if (CollectionUtils.isNotEmpty(indexIds)) {
-            return dailyReportMapper.getDailyReportList(indexIds, dataList, beginTime, endTime, timeType, indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-
-    @Override
-    public List<dailyReport> listDailyReportList(String nodeId, List<dailyReport> dataList, Date beginTime,
-                                                 Date endTime, TimeType timeType, String indexStorageId) {
-
-        if (StringUtils.isNotEmpty(nodeId)) {
-            return dailyReportMapper.listDailyReportList(nodeId, dataList, beginTime, endTime, timeType, indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/monthlyReportServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/monthlyReportServiceImpl.java
deleted file mode 100644
index ad542cf..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/monthlyReportServiceImpl.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.service.impl;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.reportForm.domain.dailyReport;
-import com.dingzhuo.energy.project.reportForm.domain.monthlyReport;
-import com.dingzhuo.energy.project.reportForm.mapper.monthlyReportMapper;
-import com.dingzhuo.energy.project.reportForm.mapper.reportFormMapper;
-import com.dingzhuo.energy.project.reportForm.service.ImonthlyReportService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * stagseDataEntryService涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-03-25
- */
-@Service
-public class monthlyReportServiceImpl implements ImonthlyReportService {
-    @Autowired
-    private monthlyReportMapper monthlyReportMapper;
-
-    public List<monthlyReport> getMonthlyReporList(List<String> indexIds,List<monthlyReport> dataList, Date beginTime, Date endTime, TimeType timeType,String indexStorageId){
-        return monthlyReportMapper.getmonthlyReportList(indexIds,dataList, beginTime, endTime, timeType,indexStorageId);
-    }
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/reportFormServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/reportFormServiceImpl.java
deleted file mode 100644
index 70bb610..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/reportFormServiceImpl.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.service.impl;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.reportForm.domain.dailyReport;
-import com.dingzhuo.energy.project.reportForm.domain.reportForm;
-import com.dingzhuo.energy.project.reportForm.mapper.reportFormMapper;
-import com.dingzhuo.energy.project.reportForm.service.IreportFormService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * stagseDataEntryService涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-03-25
- */
-@Service
-public class reportFormServiceImpl implements IreportFormService {
-    @Autowired
-    private reportFormMapper reportFormMapper;
-    public List<reportForm> selectReportFormList(String code){
-        return reportFormMapper.selectReportFormList(code);
-    }
-    public List<reportForm> selectReportFormListp(String code){
-        return reportFormMapper.selectReportFormListp(code);
-    }
-    public List<reportForm> selectList(String timeDate,String code,String timeYear,TimeType timeType){
-        return reportFormMapper.selectList(timeDate,code,timeYear,timeType);
-    }
-    /*public List<DataItem> getDailyReportList(List<String> indexIds, Date beginTime, Date endTime, TimeType timeType){
-        if (indexIds != null && !indexIds.isEmpty()) {
-            return reportFormMapper.getDailyReportList(indexIds, beginTime, endTime, timeType);
-        }
-        return Collections.emptyList();
-        return reportFormMapper.getDailyReportList(*//*indexIds, beginTime, endTime, timeType*//*);
-    }*/
-    public List<dailyReport> getDailyReportList(List<String> indexIds,List<dailyReport> dataList, Date beginTime, Date endTime, TimeType timeType,String indexStorageId){
-        return reportFormMapper.getDailyReportList(indexIds,dataList, beginTime, endTime, timeType,indexStorageId);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/reportSetServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/reportSetServiceImpl.java
deleted file mode 100644
index 5fd76ac..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/reportForm/service/impl/reportSetServiceImpl.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package com.dingzhuo.energy.project.reportForm.service.impl;
-
-import com.dingzhuo.energy.project.common.CommonConst;
-import com.dingzhuo.energy.project.common.StringUtil;
-import com.dingzhuo.energy.project.reportForm.domain.reportSet;
-import com.dingzhuo.energy.project.reportForm.domain.reportSetDataModel;
-import com.dingzhuo.energy.project.reportForm.domain.reportSetRequestModel;
-import com.dingzhuo.energy.project.reportForm.mapper.reportSetMapper;
-import com.dingzhuo.energy.project.reportForm.service.IreportSetService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-/**
- * stagseDataEntryService涓氬姟灞傚鐞�
- *
- * @author sys
- * @date 2020-03-25
- */
-@Service
-public class reportSetServiceImpl implements IreportSetService {
-    @Autowired
-    private reportSetMapper reportSetMapper;
-
-    /**
-     * 鑾峰彇涓婃姤璁剧疆鍒楄〃
-     *
-     * @param requestModel 鍙傛暟
-     * @return
-     */
-    @Override
-    public List<reportSet> listReportSet(reportSetRequestModel requestModel) {
-        List<reportSet> models = reportSetMapper.listReportSet(requestModel.getNodeId(), requestModel.getIndexId());
-        if (models.isEmpty()) {
-            reportSet daySet = new reportSet();
-            daySet.setDateType("DAY");
-            daySet.setIndexId(requestModel.getIndexId());
-            daySet.setNodeId(requestModel.getNodeId());
-            models.add(daySet);
-            reportSet monthSet = new reportSet();
-            monthSet.setDateType("MONTH");
-            monthSet.setIndexId(requestModel.getIndexId());
-            monthSet.setNodeId(requestModel.getNodeId());
-            models.add(monthSet);
-        }
-        for (reportSet model : models) {
-            if ("DAY".equals(model.getDateType())) {
-                model.setDateTypeShow("鏃�");
-            } else {
-                model.setDateTypeShow("鏈�");
-            }
-        }
-        return models;
-    }
-
-    /**
-     * 淇濆瓨涓婃姤閰嶇疆
-     *
-     * @param listMap
-     */
-    @Override
-    public int saveReportSet(List<reportSet> listMap, String username) {
-        if (!listMap.isEmpty()) {
-            for (reportSet reportSet : listMap) {
-                reportSet.setCreateBy(username);
-                reportSet.setUpdateBy(username);
-                reportSet.setId(UUID.randomUUID().toString());
-            }
-            reportSet rs = listMap.get(0);
-            int delRes = reportSetMapper.deleteReportSetByNodeId(rs.getNodeId(), rs.getIndexId(), username);
-            int res = reportSetMapper.saveReportSet(listMap);
-        }
-
-        return 1;
-    }
-
-    /**
-     * 鑾峰彇鑺傜偣涓嬬殑鐐逛綅鍒楄〃
-     *
-     * @param nodeId
-     * @param indexType
-     * @return
-     */
-    @Override
-    public List<reportSetDataModel> listNodeIndex(String nodeId, String indexType) {
-        List<reportSetDataModel> models = reportSetMapper.listNodeIndex(nodeId, indexType);
-        List<reportSet> reportSetList = reportSetMapper.listNodeReportSet(nodeId);
-        for (reportSetDataModel model : models) {
-            reportSet rs = reportSetList.stream().filter(x -> StringUtil.ifEmptyOrNullReturnValue(x.getIndexId()).equals(model.getIndexId())).findAny().orElse(null);
-            if (rs != null) {
-                if (rs.getEnableLimitValue() != null) {
-                    model.setEnableLimitValue(rs.getEnableLimitValue() == CommonConst.DIGIT_1);
-                }
-            }
-        }
-        return models;
-    }
-
-    /**
-     * 璁剧疆璇ョ偣浣嶇殑闄愬�煎惎鐢ㄧ姸鎬�
-     *
-     * @param nodeId
-     * @param indexId
-     * @param enableStatus 瑕佽缃殑鐘舵��
-     * @param username
-     * @return
-     */
-    @Override
-    public int updateEnableStatus(String nodeId, String indexId, boolean enableStatus, String username) {
-        List<reportSet> models = reportSetMapper.listReportSet(nodeId, indexId);
-        if(models.isEmpty()){
-            return -1;
-        }
-        int intEnableStatus = enableStatus ? CommonConst.DIGIT_1 : CommonConst.DIGIT_0;
-        return reportSetMapper.updateEnableStatus(nodeId, indexId, intEnableStatus, username);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/controller/StatisticalAnalysisController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/controller/StatisticalAnalysisController.java
deleted file mode 100644
index d7fce29..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/controller/StatisticalAnalysisController.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package com.dingzhuo.energy.project.statisticalAnalysis.controller;
-
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.statisticalAnalysis.domain.dto.DataAnalysisMoMDTO;
-import com.dingzhuo.energy.project.statisticalAnalysis.domain.vo.DataAnalysisMoMExcel;
-import com.dingzhuo.energy.project.statisticalAnalysis.domain.vo.DataAnalysisMoMVO;
-import com.dingzhuo.energy.project.statisticalAnalysis.domain.vo.DataAnalysisYoYExcel;
-import com.dingzhuo.energy.project.statisticalAnalysis.domain.vo.DataAnalysisYoYVO;
-import com.dingzhuo.energy.project.statisticalAnalysis.service.IStatisticalAnalysisService;
-import io.swagger.annotations.ApiOperation;
-import org.apache.commons.collections4.CollectionUtils;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * 缁熻鍒嗘瀽 鎺у埗灞�
- *
- * @Author: Zhujw
- * @Date: 2023/3/1
- */
-@RestController
-@RequestMapping("/statisticalAnalysis")
-public class StatisticalAnalysisController extends BaseController {
-
-    @Autowired
-    private IStatisticalAnalysisService analysisService;
-
-
-    @PostMapping("/getElectricDataComparisonYoY")
-    @ApiOperation(value = "鑾峰彇鐢佃兘鑰楀悓姣旀暟鎹�", notes = "鑾峰彇鐢佃兘鑰楀悓姣旀暟鎹�")
-    public AjaxResult listElectricDataComparisonYoY(@RequestBody @Validated DataAnalysisMoMDTO dto) {
-        List<DataAnalysisYoYVO> yoyList = analysisService.listElectricDataComparisonYoY(dto);
-        return AjaxResult.success(yoyList);
-    }
-
-    @PostMapping("/getElectricDataComparisonMoM")
-    @ApiOperation(value = "鑾峰彇鐢佃兘鑰楃幆姣旀暟鎹�", notes = "鑾峰彇鐢佃兘鑰楃幆姣旀暟鎹�")
-    public AjaxResult listElectricDataComparisonMoM(@RequestBody @Validated DataAnalysisMoMDTO dto) {
-        List<DataAnalysisMoMVO> momList = analysisService.listElectricDataComparisonMoM(dto);
-        return AjaxResult.success(momList);
-    }
-
-    @PostMapping("/getWaterDataComparisonYoY")
-    @ApiOperation(value = "鑾峰彇姘磋兘鑰楀悓姣旀暟鎹�", notes = "鑾峰彇姘磋兘鑰楀悓姣旀暟鎹�")
-    public AjaxResult listWaterDataComparisonYoY(@RequestBody @Validated DataAnalysisMoMDTO dto) {
-        List<DataAnalysisYoYVO> yoyList = analysisService.listWaterDataComparisonYoY(dto);
-        return AjaxResult.success(yoyList);
-    }
-
-    @PostMapping("/getWaterDataComparisonMoM")
-    @ApiOperation(value = "鑾峰彇姘磋兘鑰楃幆姣旀暟鎹�", notes = "鑾峰彇姘磋兘鑰楃幆姣旀暟鎹�")
-    public AjaxResult listWaterDataComparisonMoM(@RequestBody @Validated DataAnalysisMoMDTO dto) {
-        List<DataAnalysisMoMVO> momList = analysisService.listWaterDataComparisonMoM(dto);
-        return AjaxResult.success(momList);
-    }
-
-    @PostMapping("/exportElectricYoY")
-    @ApiOperation(value = "瀵煎嚭鐢佃兘鑰楀悓姣旀暟鎹�", notes = "瀵煎嚭鐢佃兘鑰楀悓姣旀暟鎹�")
-    public AjaxResult exportElectricComparisonYoY(@RequestBody @Validated DataAnalysisMoMDTO dto) {
-        List<DataAnalysisYoYExcel> yoYExcelsList = new ArrayList<>();
-        List<DataAnalysisYoYVO> yoYList = analysisService.listElectricDataComparisonYoY(dto);
-        if (CollectionUtils.isNotEmpty(yoYList)) {
-            for (DataAnalysisYoYVO vo : yoYList) {
-                DataAnalysisYoYExcel excel = new DataAnalysisYoYExcel();
-                BeanUtils.copyProperties(vo, excel);
-                yoYExcelsList.add(excel);
-            }
-        }
-        ExcelUtil<DataAnalysisYoYExcel> util = new ExcelUtil<>(DataAnalysisYoYExcel.class);
-        return util.exportExcel(yoYExcelsList, "鐢电患鍚堣兘鑰楀悓姣斾俊鎭�");
-    }
-
-    @PostMapping("/exportElectricMoM")
-    @ApiOperation(value = "瀵煎嚭鐢佃兘鑰楃幆姣旀暟鎹�", notes = "瀵煎嚭鐢佃兘鑰楃幆姣旀暟鎹�")
-    public AjaxResult exportElectricComparisonMoM(@RequestBody @Validated DataAnalysisMoMDTO dto) {
-        List<DataAnalysisMoMExcel> moMExcelsList = new ArrayList<>();
-        List<DataAnalysisMoMVO> moMList = analysisService.listElectricDataComparisonMoM(dto);
-        if (CollectionUtils.isNotEmpty(moMList)) {
-            for (DataAnalysisMoMVO vo : moMList) {
-                DataAnalysisMoMExcel excel = new DataAnalysisMoMExcel();
-                BeanUtils.copyProperties(vo, excel);
-                moMExcelsList.add(excel);
-            }
-        }
-        ExcelUtil<DataAnalysisMoMExcel> util = new ExcelUtil<>(DataAnalysisMoMExcel.class);
-        return util.exportRealTimeDataExcel(moMExcelsList, "鐢电患鍚堣兘鑰楃幆姣斾俊鎭�");
-    }
-
-    @PostMapping("/exportWaterYoY")
-    @ApiOperation(value = "瀵煎嚭姘磋�楀悓姣旀暟鎹�", notes = "瀵煎嚭姘磋�楀悓姣旀暟鎹�")
-    public AjaxResult exportWaterComparisonYoY(@RequestBody @Validated DataAnalysisMoMDTO dto) {
-        List<DataAnalysisYoYExcel> yoYExcelsList = new ArrayList<>();
-        List<DataAnalysisYoYVO> yoYList = analysisService.listWaterDataComparisonYoY(dto);
-        if (CollectionUtils.isNotEmpty(yoYList)) {
-            for (DataAnalysisYoYVO vo : yoYList) {
-                DataAnalysisYoYExcel excel = new DataAnalysisYoYExcel();
-                BeanUtils.copyProperties(vo, excel);
-                yoYExcelsList.add(excel);
-            }
-        }
-        ExcelUtil<DataAnalysisYoYExcel> util = new ExcelUtil<>(DataAnalysisYoYExcel.class);
-        return util.exportExcel(yoYExcelsList, "姘寸患鍚堣兘鑰楄�楀悓姣斾俊鎭�");
-    }
-
-    @PostMapping("/exportWaterMoM")
-    @ApiOperation(value = "瀵煎嚭姘磋�楃幆姣旀暟鎹�", notes = "瀵煎嚭姘磋�楃幆姣旀暟鎹�")
-    public AjaxResult exportWaterComparisonMoM(@RequestBody @Validated DataAnalysisMoMDTO dto) {
-        List<DataAnalysisMoMExcel> moMExcelsList = new ArrayList<>();
-        List<DataAnalysisMoMVO> moMList = analysisService.listWaterDataComparisonMoM(dto);
-        if (CollectionUtils.isNotEmpty(moMList)) {
-            for (DataAnalysisMoMVO vo : moMList) {
-                DataAnalysisMoMExcel excel = new DataAnalysisMoMExcel();
-                BeanUtils.copyProperties(vo, excel);
-                moMExcelsList.add(excel);
-            }
-        }
-        ExcelUtil<DataAnalysisMoMExcel> util = new ExcelUtil<>(DataAnalysisMoMExcel.class);
-        return util.exportExcel(moMExcelsList, "姘寸患鍚堣兘鑰楄�楃幆姣斾俊鎭�");
-    }
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/domain/dto/DataAnalysisMoMDTO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/domain/dto/DataAnalysisMoMDTO.java
deleted file mode 100644
index 109a2fa..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/domain/dto/DataAnalysisMoMDTO.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.dingzhuo.energy.project.statisticalAnalysis.domain.dto;
-
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Data;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.util.Date;
-
-/**
- * 鏁版嵁鍒嗘瀽鐜瘮 璇锋眰鍙傛暟
- *
- * @Author: Zhujw
- * @Date: 2023/3/3
- */
-@Data
-public class DataAnalysisMoMDTO {
-
-
-    /**
-     * 缁熻寮�濮嬫椂闂�
-     */
-    @NotNull(message = "璇风淮鎶ゆ煡璇㈡椂闂�")
-    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
-    @Excel(name = "鎶ヨ寮�濮嬫椂闂�", dateFormat = "yyyy-MM-dd HH:mm:ss")
-    private Date beginTime;
-
-    /**
-     * 缁熻寮�濮嬫椂闂�
-     */
-    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
-    @Excel(name = "鎶ヨ寮�濮嬫椂闂�", dateFormat = "yyyy-MM-dd HH:mm:ss")
-    @NotNull(message = "璇风淮鎶ゆ煡璇㈡椂闂�")
-    private Date endTime;
-
-    /**
-     * 鏃堕棿绫诲瀷
-     */
-    @NotBlank(message = "鏈壘鍒版椂闂寸被鍨�")
-    private String timeType;
-
-    /**
-     * 妯″瀷鑺傜偣id
-     */
-    @NotBlank(message = "鏈壘鍒版ā鍨嬭妭鐐逛俊鎭�")
-    private String nodeId;
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/domain/vo/DataAnalysisMoMExcel.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/domain/vo/DataAnalysisMoMExcel.java
deleted file mode 100644
index e8d551e..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/domain/vo/DataAnalysisMoMExcel.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.dingzhuo.energy.project.statisticalAnalysis.domain.vo;
-
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-/**
- * 鏁版嵁鍒嗘瀽鐜瘮 瀵煎嚭Excel
- *
- * @Author: Zhujw
- * @Date: 2023/3/3
- */
-@Data
-public class DataAnalysisMoMExcel {
-
-
-    /**
-     * 鐢ㄨ兘鍗曞厓鍚嶇О
-     */
-    @Excel(name = "鐢ㄨ兘鍗曞厓")
-    private String energyUnitName;
-
-    /**
-     * 鏈湡鍊�
-     */
-    @Excel(name = "鏈湡鍊�")
-    private BigDecimal currentValue;
-
-    /**
-     * 鍚屾湡鍊�
-     */
-    @Excel(name = "鍚屾湡鍊�")
-    private BigDecimal oldValue;
-
-    /**
-     * 鍚屾瘮鍊�
-     */
-    @Excel(name = "鍚屾瘮鍊�")
-    private BigDecimal ratio;
-
-    /**
-     * 鍗曚綅
-     */
-    @Excel(name = "鍗曚綅")
-    private String unit;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/domain/vo/DataAnalysisMoMVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/domain/vo/DataAnalysisMoMVO.java
deleted file mode 100644
index 18cec00..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/domain/vo/DataAnalysisMoMVO.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.dingzhuo.energy.project.statisticalAnalysis.domain.vo;
-
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-/**
- * 鏁版嵁鍒嗘瀽鐜瘮 杩斿洖vo
- *
- * @Author: Zhujw
- * @Date: 2023/3/3
- */
-@Data
-public class DataAnalysisMoMVO {
-
-
-    /**
-     * 鍗曚綅
-     */
-    private String unit;
-
-    /**
-     * 鐢ㄨ兘鍗曞厓鍚嶇О
-     */
-    private String energyUnitName;
-
-    /**
-     * 鏈湡鍊�
-     */
-    private BigDecimal currentValue;
-
-    /**
-     * 鍚屾湡鍊�
-     */
-    private BigDecimal oldValue;
-
-    /**
-     * 鍚屾瘮鍊�
-     */
-    private BigDecimal ratio;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/domain/vo/DataAnalysisYoYExcel.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/domain/vo/DataAnalysisYoYExcel.java
deleted file mode 100644
index 506fbcd..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/domain/vo/DataAnalysisYoYExcel.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.dingzhuo.energy.project.statisticalAnalysis.domain.vo;
-
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-/**
- * 鏁版嵁鍒嗘瀽鍚屾瘮 瀵煎嚭Excel
- *
- * @Author: Zhujw
- * @Date: 2023/3/3
- */
-@Data
-public class DataAnalysisYoYExcel {
-
-
-    /**
-     * 鐢ㄨ兘鍗曞厓鍚嶇О
-     */
-    @Excel(name = "鐢ㄨ兘鍗曞厓鍚嶇О")
-    private String energyUnitName;
-
-    /**
-     * 鏈湡鍊�
-     */
-    @Excel(name = "鏈湡鍊�")
-    private BigDecimal currentValue;
-
-    /**
-     * 鍚屾湡鍊�
-     */
-    @Excel(name = "鍚屾湡鍊�")
-    private BigDecimal oldValue;
-
-    /**
-     * 鍚屾瘮鍊�
-     */
-    @Excel(name = "鍚屾瘮鍊�")
-    private BigDecimal ratio;
-
-    /**
-     * 鍗曚綅
-     */
-    @Excel(name = "鍗曚綅")
-    private String unit;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/domain/vo/DataAnalysisYoYVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/domain/vo/DataAnalysisYoYVO.java
deleted file mode 100644
index 50e811e..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/domain/vo/DataAnalysisYoYVO.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.dingzhuo.energy.project.statisticalAnalysis.domain.vo;
-
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-/**
- * 鏁版嵁鍒嗘瀽鍚屾瘮 杩斿洖vo
- *
- * @Author: Zhujw
- * @Date: 2023/3/3
- */
-@Data
-public class DataAnalysisYoYVO {
-
-
-    /**
-     * 鍗曚綅
-     */
-    private String unit;
-
-    /**
-     * 鐢ㄨ兘鍗曞厓鍚嶇О
-     */
-    private String energyUnitName;
-
-    /**
-     * 鏈湡鍊�
-     */
-    private BigDecimal currentValue;
-
-    /**
-     * 鍚屾湡鍊�
-     */
-    private BigDecimal oldValue;
-
-    /**
-     * 鍚屾瘮鍊�
-     */
-    private BigDecimal ratio;
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/service/IStatisticalAnalysisService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/service/IStatisticalAnalysisService.java
deleted file mode 100644
index 8ea84b7..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/service/IStatisticalAnalysisService.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.dingzhuo.energy.project.statisticalAnalysis.service;
-
-import com.dingzhuo.energy.project.statisticalAnalysis.domain.dto.DataAnalysisMoMDTO;
-import com.dingzhuo.energy.project.statisticalAnalysis.domain.vo.DataAnalysisMoMVO;
-import com.dingzhuo.energy.project.statisticalAnalysis.domain.vo.DataAnalysisYoYExcel;
-import com.dingzhuo.energy.project.statisticalAnalysis.domain.vo.DataAnalysisYoYVO;
-
-import java.util.List;
-
-/**
- * 缁熻鍒嗘瀽  鎺ュ彛灞�
- *
- * @Author: Zhujw
- * @Date: 2023/3/1
- */
-public interface IStatisticalAnalysisService {
-
-    /**
-     * 鑾峰彇鐢佃兘鑰楀悓姣旀暟鎹�
-     *
-     * @param dto 鏌ヨ鍙傛暟
-     * @return
-     */
-    List<DataAnalysisYoYVO> listElectricDataComparisonYoY(DataAnalysisMoMDTO dto);
-
-    /**
-     * 鑾峰彇鐢佃兘鑰楃幆姣旀暟鎹�
-     *
-     * @param dto 鏌ヨ鍙傛暟
-     * @return
-     */
-    List<DataAnalysisMoMVO> listElectricDataComparisonMoM(DataAnalysisMoMDTO dto);
-
-    /**
-     * 鑾峰彇鑳借�楀悓姣旀暟鎹�
-     *
-     * @param dto 鏌ヨ鍙傛暟
-     * @return
-     */
-    List<DataAnalysisYoYVO> listWaterDataComparisonYoY(DataAnalysisMoMDTO dto);
-
-    /**
-     * 鑾峰彇鑳借�楃幆姣旀暟鎹�
-     *
-     * @param dto 鏌ヨ鍙傛暟
-     * @return
-     */
-    List<DataAnalysisMoMVO> listWaterDataComparisonMoM(DataAnalysisMoMDTO dto);
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/service/impl/StatisticalAnalysisServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/service/impl/StatisticalAnalysisServiceImpl.java
deleted file mode 100644
index b0ff8bd..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalAnalysis/service/impl/StatisticalAnalysisServiceImpl.java
+++ /dev/null
@@ -1,315 +0,0 @@
-package com.dingzhuo.energy.project.statisticalAnalysis.service.impl;
-
-import cn.hutool.core.date.DateField;
-import cn.hutool.core.date.DateUtil;
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.data.model.domain.vo.ModelNodeIndexInfor;
-import com.dingzhuo.energy.data.model.service.IEnergyIndexService;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.project.common.CommonConst;
-import com.dingzhuo.energy.project.common.TimeTypeConst;
-import com.dingzhuo.energy.project.dataEntry.service.IDataItemService;
-import com.dingzhuo.energy.project.statisticalAnalysis.domain.dto.DataAnalysisMoMDTO;
-import com.dingzhuo.energy.project.statisticalAnalysis.domain.vo.DataAnalysisMoMVO;
-import com.dingzhuo.energy.project.statisticalAnalysis.domain.vo.DataAnalysisYoYVO;
-import com.dingzhuo.energy.project.statisticalAnalysis.service.IStatisticalAnalysisService;
-import lombok.AllArgsConstructor;
-import org.apache.commons.collections4.CollectionUtils;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * 缁熻鍒嗘瀽  鎺ュ彛灞傚疄鐜板眰
- *
- * @Author: Zhujw
- * @Date: 2023/3/1
- */
-@Service
-@AllArgsConstructor
-public class StatisticalAnalysisServiceImpl implements IStatisticalAnalysisService {
-
-
-    private final IDataItemService dataItemService;
-
-    private final IModelNodeService modelNodeService;
-
-    private final IEnergyIndexService energyIndexService;
-
-
-    /**
-     * 鑾峰彇鐢佃兘鑰楀悓姣旀暟鎹�
-     *
-     * @param dto 鏌ヨ鍙傛暟
-     * @return
-     */
-    @Override
-    public List<DataAnalysisYoYVO> listElectricDataComparisonYoY(DataAnalysisMoMDTO dto) {
-        List<DataAnalysisYoYVO> yoyList = new ArrayList<>();
-        // 鏌ヨ鐐逛綅涓庣敤鑳藉崟鍏冧俊鎭�
-        List<ModelNodeIndexInfor> nodeInforList = listModelNodeIndexIdRelationInfor(dto.getNodeId());
-        if (CollectionUtils.isEmpty(nodeInforList)) {
-            return yoyList;
-        }
-        List<String> indexIds = nodeInforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-        // 鎸夌収鐐逛綅杩涜鍒嗙粍
-        Map<String, List<ModelNodeIndexInfor>> nodeIndexMap = nodeInforList.stream().collect(
-                Collectors.groupingBy(ModelNodeIndexInfor::getNodeId));
-        // 鑾峰彇鏌ヨ鏃堕棿
-        Date beginTime = dto.getBeginTime();
-        Date endTime = dto.getEndTime();
-        // 鍚屾瘮鏃堕棿
-        Date lastTime = DateUtil.offset(beginTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1);
-        Date lastEndTime = DateUtil.offset(endTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1);
-        // 鏌ヨ瀵瑰簲indexIds锛屾壘鍒板搴攄ataItem淇℃伅
-        List<DataItem> dataItemList = dataItemService.getDataItemHourInforByIndexIds(beginTime, endTime, TimeType.HOUR.name(), indexIds);
-        List<DataItem> lastDataItemList = dataItemService.getDataItemHourInforByIndexIds(lastTime, lastEndTime, TimeType.HOUR.name(), indexIds);
-        //  鍊嶇巼
-        BigDecimal multiple = BigDecimal.valueOf(CommonConst.DIGIT_100);
-        nodeIndexMap.forEach((key, value) -> {
-            DataAnalysisYoYVO yoyVO = new DataAnalysisYoYVO();
-            Optional<ModelNodeIndexInfor> first = value.stream().findFirst();
-            first.ifPresent(modelNodeIndexInfor -> yoyVO.setEnergyUnitName(modelNodeIndexInfor.getName()));
-            // 璧嬪�煎崟浣�
-            yoyVO.setUnit("kWh");
-            // 鎵惧嚭indexIds
-            List<String> indexIdList = value.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-            // 姹傚拰
-            BigDecimal sum = BigDecimal.valueOf(dataItemList.stream().filter(li -> indexIdList.contains(li.getIndexId()))
-                    .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-            BigDecimal lastSum = BigDecimal.valueOf(lastDataItemList.stream().filter(li -> indexIdList.contains(li.getIndexId()))
-                    .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-            yoyVO.setCurrentValue(sum);
-            yoyVO.setOldValue(lastSum);
-            //  鍚屾瘮鍊�
-            BigDecimal ratio = BigDecimal.ZERO;
-            if (lastSum.compareTo(BigDecimal.ZERO) != 0) {
-                ratio = sum.subtract(lastSum).divide(lastSum, CommonConst.DIGIT_2, RoundingMode.HALF_UP).multiply(multiple);
-            }
-            yoyVO.setRatio(ratio);
-            yoyList.add(yoyVO);
-        });
-        return yoyList;
-    }
-
-    /**
-     * 鑾峰彇鐢佃兘鑰楃幆姣旀暟鎹�
-     *
-     * @param dto 鏌ヨ鍙傛暟
-     * @return
-     */
-    @Override
-    public List<DataAnalysisMoMVO> listElectricDataComparisonMoM(DataAnalysisMoMDTO dto) {
-        List<DataAnalysisMoMVO> momList = new ArrayList<>();
-        // 鏍规嵁id鏌ヨ鐐逛綅淇℃伅
-        List<ModelNodeIndexInfor> nodeIndexInforList = listModelNodeIndexIdRelationInfor(dto.getNodeId());
-        if (CollectionUtils.isEmpty(nodeIndexInforList)) {
-            return momList;
-        }
-        List<String> indexIds = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-        Date beginTime = dto.getBeginTime();
-        Date endTime = dto.getEndTime();
-        Date lastTime;
-        Date lastEndTime;
-        String queryTimeType = dto.getTimeType();
-        // 灏忔椂
-        if (TimeTypeConst.TIME_TYPE_HOUR.equals(queryTimeType)) {
-            lastTime = DateUtil.offsetHour(beginTime, CommonConst.DIGIT_MINUS_1);
-            lastEndTime = DateUtil.offsetHour(endTime, CommonConst.DIGIT_MINUS_1);
-            // 澶�
-        } else if (TimeTypeConst.TIME_TYPE_DAY.equals(queryTimeType)) {
-            lastTime = DateUtil.offsetDay(beginTime, CommonConst.DIGIT_MINUS_1);
-            lastEndTime = DateUtil.offsetDay(endTime, CommonConst.DIGIT_MINUS_1);
-            // 鏈�
-        } else if (TimeTypeConst.TIME_TYPE_MONTH.equals(queryTimeType)) {
-            lastTime = DateUtil.offsetMonth(beginTime, CommonConst.DIGIT_MINUS_1);
-            lastEndTime = DateUtil.offsetMonth(endTime, CommonConst.DIGIT_MINUS_1);
-            // 骞�
-        } else {
-            lastTime = DateUtil.offset(beginTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1);
-            lastEndTime = DateUtil.offset(endTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1);
-        }
-        // 鎸夌収鐐逛綅杩涜鍒嗙粍
-        Map<String, List<ModelNodeIndexInfor>> nodeIndexMap = nodeIndexInforList.stream().collect(
-                Collectors.groupingBy(ModelNodeIndexInfor::getNodeId));
-        // 鏍规嵁indexId鏌ヨdataItem
-        List<DataItem> dataItemList = dataItemService.getDataItemHourInforByIndexIds(beginTime, endTime, TimeType.HOUR.name(), indexIds);
-        List<DataItem> lastDataItemList = dataItemService.getDataItemHourInforByIndexIds(lastTime, lastEndTime, TimeType.HOUR.name(), indexIds);
-        //  鍊嶇巼
-        BigDecimal multiple = BigDecimal.valueOf(CommonConst.DIGIT_100);
-        nodeIndexMap.forEach((key, value) -> {
-            DataAnalysisMoMVO momVO = new DataAnalysisMoMVO();
-            Optional<ModelNodeIndexInfor> first = value.stream().findFirst();
-            first.ifPresent(modelNodeIndexInfor -> momVO.setEnergyUnitName(modelNodeIndexInfor.getName()));
-            // 璧嬪�煎崟浣�
-            momVO.setUnit("kWh");
-            // 鎵惧嚭indexIds
-            List<String> indexIdList = value.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-            // 姹傚拰
-            BigDecimal sum = BigDecimal.valueOf(dataItemList.stream().filter(li -> indexIdList.contains(li.getIndexId()))
-                    .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-            BigDecimal lastSum = BigDecimal.valueOf(lastDataItemList.stream().filter(li -> indexIdList.contains(li.getIndexId()))
-                    .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-            momVO.setCurrentValue(sum);
-            momVO.setOldValue(lastSum);
-            //  鍚屾瘮鍊�
-            BigDecimal ratio = BigDecimal.ZERO;
-            if (lastSum.compareTo(BigDecimal.ZERO) != 0) {
-                ratio = sum.subtract(lastSum).divide(lastSum, CommonConst.DIGIT_2, RoundingMode.HALF_UP).multiply(multiple);
-            }
-            momVO.setRatio(ratio);
-            momList.add(momVO);
-        });
-        return momList;
-    }
-
-    /**
-     * 鑾峰彇鑳借�楀悓姣旀暟鎹�
-     *
-     * @param dto 鏌ヨ鍙傛暟
-     * @return
-     */
-    @Override
-    public List<DataAnalysisYoYVO> listWaterDataComparisonYoY(DataAnalysisMoMDTO dto) {
-        List<DataAnalysisYoYVO> yoyList = new ArrayList<>();
-        // 鏌ヨ鐐逛綅涓庣敤鑳藉崟鍏冧俊鎭�
-        List<ModelNodeIndexInfor> nodeInforList = listModelNodeIndexIdRelationInfor(dto.getNodeId());
-        if (CollectionUtils.isEmpty(nodeInforList)) {
-            return yoyList;
-        }
-        List<String> indexIds = nodeInforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-        // 鎸夌収鐐逛綅杩涜鍒嗙粍
-        Map<String, List<ModelNodeIndexInfor>> nodeIndexMap = nodeInforList.stream().collect(
-                Collectors.groupingBy(ModelNodeIndexInfor::getNodeId));
-        // 鏃堕棿绫诲瀷
-        // 鑾峰彇鏌ヨ鏃堕棿
-        Date beginTime = dto.getBeginTime();
-        Date endTime = dto.getEndTime();
-        // 鍚屾瘮鏃堕棿
-        Date lastTime = DateUtil.offset(beginTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1);
-        Date lastEndTime = DateUtil.offset(endTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1);
-        // 鏌ヨ瀵瑰簲indexIds锛屾壘鍒板搴攄ataItem淇℃伅
-        List<DataItem> dataItemList = dataItemService.getDataItemHourInforByIndexIds(beginTime, endTime, TimeType.HOUR.name(), indexIds);
-        List<DataItem> lastDataItemList = dataItemService.getDataItemHourInforByIndexIds(lastTime, lastEndTime, TimeType.HOUR.name(), indexIds);
-        //  鍊嶇巼
-        BigDecimal multiple = BigDecimal.valueOf(CommonConst.DIGIT_100);
-        nodeIndexMap.forEach((key, value) -> {
-            DataAnalysisYoYVO yoyVO = new DataAnalysisYoYVO();
-            Optional<ModelNodeIndexInfor> first = value.stream().findFirst();
-            first.ifPresent(modelNodeIndexInfor -> yoyVO.setEnergyUnitName(modelNodeIndexInfor.getName()));
-            // 璧嬪�煎崟浣�
-            yoyVO.setUnit("m鲁");
-            // 鎵惧嚭indexIds
-            List<String> indexIdList = value.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-            // 姹傚拰
-            BigDecimal sum = BigDecimal.valueOf(dataItemList.stream().filter(li -> indexIdList.contains(li.getIndexId()))
-                    .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-            BigDecimal lastSum = BigDecimal.valueOf(lastDataItemList.stream().filter(li -> indexIdList.contains(li.getIndexId()))
-                    .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-            yoyVO.setCurrentValue(sum);
-            yoyVO.setOldValue(lastSum);
-            //  鍚屾瘮鍊�
-            BigDecimal ratio = BigDecimal.ZERO;
-            if (lastSum.compareTo(BigDecimal.ZERO) != 0) {
-                ratio = sum.subtract(lastSum).divide(lastSum, CommonConst.DIGIT_2, RoundingMode.HALF_UP).multiply(multiple);
-            }
-            yoyVO.setRatio(ratio);
-            yoyList.add(yoyVO);
-        });
-        return yoyList;
-    }
-
-    /**
-     * 鑾峰彇鑳借�楃幆姣旀暟鎹�
-     *
-     * @param dto 鏌ヨ鍙傛暟
-     * @return
-     */
-    @Override
-    public List<DataAnalysisMoMVO> listWaterDataComparisonMoM(DataAnalysisMoMDTO dto) {
-        List<DataAnalysisMoMVO> momList = new ArrayList<>();
-        // 鏍规嵁id鏌ヨ鐐逛綅淇℃伅
-        List<ModelNodeIndexInfor> nodeIndexInforList = listModelNodeIndexIdRelationInfor(dto.getNodeId());
-        if (CollectionUtils.isEmpty(nodeIndexInforList)) {
-            return momList;
-        }
-        List<String> indexIds = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-        Date beginTime = dto.getBeginTime();
-        Date endTime = dto.getEndTime();
-        Date lastTime;
-        Date lastEndTime;
-        String queryTimeType = dto.getTimeType();
-        // 灏忔椂
-        if (TimeTypeConst.TIME_TYPE_HOUR.equals(queryTimeType)) {
-            lastTime = DateUtil.offsetHour(beginTime, CommonConst.DIGIT_MINUS_1);
-            lastEndTime = DateUtil.offsetHour(endTime, CommonConst.DIGIT_MINUS_1);
-            // 澶�
-        } else if (TimeTypeConst.TIME_TYPE_DAY.equals(queryTimeType)) {
-            lastTime = DateUtil.offsetDay(beginTime, CommonConst.DIGIT_MINUS_1);
-            lastEndTime = DateUtil.offsetDay(endTime, CommonConst.DIGIT_MINUS_1);
-            // 鏈�
-        } else if (TimeTypeConst.TIME_TYPE_MONTH.equals(queryTimeType)) {
-            lastTime = DateUtil.offsetMonth(beginTime, CommonConst.DIGIT_MINUS_1);
-            lastEndTime = DateUtil.offsetMonth(endTime, CommonConst.DIGIT_MINUS_1);
-            // 骞�
-        } else {
-            lastTime = DateUtil.offset(beginTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1);
-            lastEndTime = DateUtil.offset(endTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1);
-        }
-        // 鎸夌収鐐逛綅杩涜鍒嗙粍
-        Map<String, List<ModelNodeIndexInfor>> nodeIndexMap = nodeIndexInforList.stream().collect(
-                Collectors.groupingBy(ModelNodeIndexInfor::getNodeId));
-        // 鏌ヨ瀵瑰簲indexIds锛屾壘鍒板搴攄ataItem淇℃伅
-        List<DataItem> dataItemList = dataItemService.getDataItemHourInforByIndexIds(beginTime, endTime, TimeType.HOUR.name(), indexIds);
-        List<DataItem> lastDataItemList = dataItemService.getDataItemHourInforByIndexIds(lastTime, lastEndTime, TimeType.HOUR.name(), indexIds);
-        //  鍊嶇巼
-        BigDecimal multiple = BigDecimal.valueOf(CommonConst.DIGIT_100);
-        nodeIndexMap.forEach((key, value) -> {
-            DataAnalysisMoMVO momVO = new DataAnalysisMoMVO();
-            Optional<ModelNodeIndexInfor> first = value.stream().findFirst();
-            first.ifPresent(modelNodeIndexInfor -> momVO.setEnergyUnitName(modelNodeIndexInfor.getName()));
-            // 璧嬪�煎崟浣�
-            momVO.setUnit("m鲁");
-            // 鎵惧嚭indexIds
-            List<String> indexIdList = value.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-            // 姹傚拰
-            BigDecimal sum = BigDecimal.valueOf(dataItemList.stream().filter(li -> indexIdList.contains(li.getIndexId()))
-                    .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-            BigDecimal lastSum = BigDecimal.valueOf(lastDataItemList.stream().filter(li -> indexIdList.contains(li.getIndexId()))
-                    .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
-            momVO.setCurrentValue(sum);
-            momVO.setOldValue(lastSum);
-            //  鍚屾瘮鍊�
-            BigDecimal ratio = BigDecimal.ZERO;
-            if (lastSum.compareTo(BigDecimal.ZERO) != 0) {
-                ratio = sum.subtract(lastSum).divide(lastSum, CommonConst.DIGIT_2, RoundingMode.HALF_UP).multiply(multiple);
-            }
-            momVO.setRatio(ratio);
-            momList.add(momVO);
-        });
-        return momList;
-    }
-
-    /**
-     * 鏌ヨ鐐逛綅涓庣敤鑳藉崟鍏冧俊鎭�
-     *
-     * @param nodeId
-     * @return
-     */
-    private List<ModelNodeIndexInfor> listModelNodeIndexIdRelationInfor(String nodeId) {
-        List<ModelNodeIndexInfor> nodeInforList = modelNodeService.listModelNodeIndexIdRelationInforByParentId(nodeId);
-        // 濡傛灉鏄┖瀛樺湪涓ょ鎯呭喌锛�1锛歩d鏈夐棶棰橈紝2锛氭渶搴曞眰
-        if (CollectionUtils.isEmpty(nodeInforList)) {
-            List<ModelNodeIndexInfor> inforList = modelNodeService.getModelNodeIndexIdRelationInforByNodeId(nodeId);
-            if (CollectionUtils.isNotEmpty(inforList)) {
-                nodeInforList.addAll(inforList);
-            }
-        }
-        return nodeInforList;
-    }
-
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalData/controller/GxdhCountController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalData/controller/GxdhCountController.java
deleted file mode 100644
index ce400b1..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalData/controller/GxdhCountController.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package com.dingzhuo.energy.project.statisticalData.controller;
-
-import java.util.List;
-import java.util.UUID;
-
-import com.dingzhuo.energy.project.statisticalData.domain.GxdhCountIndex;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import com.dingzhuo.energy.project.statisticalData.domain.GxdhCount;
-import com.dingzhuo.energy.project.statisticalData.service.IGxdhCountService;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * 宸ュ簭鍗曡�楃粺璁″姛鑳紺ontroller
- * 
- * @author zhaow
- * @date 2020-12-26
- */
-@RestController
-@RequestMapping("/statisticalData/gxdhcount")
-public class GxdhCountController extends BaseController
-{
-    @Autowired
-    private IGxdhCountService gxdhCountService;
-
-    /**
-     * 鏌ヨ宸ュ簭鍗曡�楃粺璁℃寚鏍囪缃姛鑳藉垪琛�
-     */
-    @PreAuthorize("@ss.hasPermi('statisticalData:gxdhcount:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(GxdhCount gxdhCount)
-    {
-        startPage();
-        List<GxdhCount> list = gxdhCountService.selectGxdhCountList(gxdhCount);
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭宸ュ簭鍗曡�楃粺璁℃寚鏍囪缃姛鑳藉垪琛�
-     */
-    @PreAuthorize("@ss.hasPermi('statisticalData:gxdhcount:export')")
-    @Log(title = "宸ュ簭鍗曡�楃粺璁℃寚鏍囪缃姛鑳�", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(GxdhCount gxdhCount)
-    {
-        List<GxdhCount> list = gxdhCountService.selectGxdhCountList(gxdhCount);
-        ExcelUtil<GxdhCount> util = new ExcelUtil<GxdhCount>(GxdhCount.class);
-        return util.exportExcel(list, "gxdhcount");
-    }
-
-    /**
-     * 鑾峰彇宸ュ簭鍗曡�楃粺璁℃寚鏍囪缃姛鑳借缁嗕俊鎭�
-     */
-    @PreAuthorize("@ss.hasPermi('statisticalData:gxdhcount:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
-    {
-        return AjaxResult.success(gxdhCountService.selectGxdhCountById(id));
-    }
-
-    /**
-     * 鏂板宸ュ簭鍗曡�楃粺璁℃寚鏍囪缃姛鑳�
-     */
-    @PreAuthorize("@ss.hasPermi('statisticalData:gxdhcount:add')")
-    @Log(title = "宸ュ簭鍗曡�楃粺璁℃寚鏍囪缃姛鑳�", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody GxdhCount gxdhCount)
-    {
-        gxdhCount.setId(UUID.randomUUID().toString());
-        return toAjax(gxdhCountService.insertGxdhCount(gxdhCount));
-    }
-
-    /**
-     * 淇敼宸ュ簭鍗曡�楃粺璁℃寚鏍囪缃姛鑳�
-     */
-    @PreAuthorize("@ss.hasPermi('statisticalData:gxdhcount:edit')")
-    @Log(title = "宸ュ簭鍗曡�楃粺璁℃寚鏍囪缃姛鑳�", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody GxdhCount gxdhCount)
-    {
-        return toAjax(gxdhCountService.updateGxdhCount(gxdhCount));
-    }
-
-    /**
-     * 鍒犻櫎宸ュ簭鍗曡�楃粺璁℃寚鏍囪缃姛鑳�
-     */
-    @PreAuthorize("@ss.hasPermi('statisticalData:gxdhcount:remove')")
-    @Log(title = "宸ュ簭鍗曡�楃粺璁℃寚鏍囪缃姛鑳�", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
-    {
-        return toAjax(gxdhCountService.deleteGxdhCountByIds(ids));
-    }
-
-    /**
-     * 鏌ヨ宸ュ簭鍗曡�楃粺璁℃寚鏍囪缃姛鑳藉垪琛�
-     */
-    @GetMapping("/listReportIndex")
-    public TableDataInfo list(GxdhCountIndex gxdhCountIndex)
-    {
-        List<GxdhCountIndex> list = gxdhCountService.selectGxdhCountIndexList(gxdhCountIndex);
-        return getDataTable(list);
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalData/domain/GxdhCount.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalData/domain/GxdhCount.java
deleted file mode 100644
index 0d71b43..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalData/domain/GxdhCount.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package com.dingzhuo.energy.project.statisticalData.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-
-/**
- * 宸ュ簭鍗曡�楃粺璁″姛鑳藉璞� gxdh_count
- * 
- * @author zhaow
- * @date 2020-12-26
- */
-public class GxdhCount extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 閰嶇疆涓婚敭 */
-    private String id;
-
-    /** 浜у搧绫诲瀷 */
-    @Excel(name = "浜у搧绫诲瀷")
-    private String repProductType;
-
-    /** 鐢垫寚鏍� */
-    @Excel(name = "鐢垫寚鏍�")
-    private String electricIndex;
-
-    /** 鐓ゆ皵鎸囨爣 */
-    @Excel(name = "鐓ゆ皵鎸囨爣")
-    private String gasIndex;
-
-    /** 钂告苯鎸囨爣 */
-    @Excel(name = "钂告苯鎸囨爣")
-    private String steamIndex;
-
-    /** 鑳芥簮鍝佺 */
-    @Excel(name = "鑳芥簮鍝佺")
-    private String varietyType;
-
-    public void setId(String id) 
-    {
-        this.id = id;
-    }
-
-    public String getId() 
-    {
-        return id;
-    }
-    public void setRepProductType(String repProductType) 
-    {
-        this.repProductType = repProductType;
-    }
-
-    public String getRepProductType() 
-    {
-        return repProductType;
-    }
-    public void setElectricIndex(String electricIndex) 
-    {
-        this.electricIndex = electricIndex;
-    }
-
-    public String getElectricIndex() 
-    {
-        return electricIndex;
-    }
-    public void setGasIndex(String gasIndex) 
-    {
-        this.gasIndex = gasIndex;
-    }
-
-    public String getGasIndex() 
-    {
-        return gasIndex;
-    }
-    public void setSteamIndex(String steamIndex) 
-    {
-        this.steamIndex = steamIndex;
-    }
-
-    public String getSteamIndex() 
-    {
-        return steamIndex;
-    }
-    public void setVarietyType(String varietyType) 
-    {
-        this.varietyType = varietyType;
-    }
-
-    public String getVarietyType() 
-    {
-        return varietyType;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("repProductType", getRepProductType())
-            .append("electricIndex", getElectricIndex())
-            .append("gasIndex", getGasIndex())
-            .append("steamIndex", getSteamIndex())
-            .append("varietyType", getVarietyType())
-            .toString();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalData/domain/GxdhCountIndex.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalData/domain/GxdhCountIndex.java
deleted file mode 100644
index 82e6bcc..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalData/domain/GxdhCountIndex.java
+++ /dev/null
@@ -1,425 +0,0 @@
-package com.dingzhuo.energy.project.statisticalData.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-
-/**
- * 宸ュ簭鍗曡�楃粺璁″姛鑳絖_鎸囨爣鍊� 椤甸潰鏄剧ず 瀵硅薄 GxdhCountIndex
- * 
- * @author zhaow
- * @date 2020-12-26
- */
-public class GxdhCountIndex extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 閰嶇疆涓婚敭 */
-    private String index_id;
-
-    /** 浜у搧绫诲瀷  鐒︾偔  鐒︽补 绛夌瓑 6绉�*/
-    private String repProductType;
-
-    /** 鑳芥簮鍝佺  鑳芥簮娑堣�楅噺   浜у搧浜ч噺*/
-    private String varietyType;
-
-    /** 鍒嗙被  鐢�     鐓ゆ皵   钂告苯  */
-    private String FL;
-    /**鏌ヨ骞村害**/
-    private String selectYear;
-
-    private String 	a1;
-    private String 	a2;
-    private String 	a3;
-    private String 	a4;
-    private String 	a5;
-    private String 	a6;
-    private String 	a7;
-    private String 	a8;
-    private String 	a9;
-    private String 	a10;
-    private String 	a11;
-    private String 	a12;
-    private String 	a13;
-    private String 	a14;
-    private String 	a15;
-    private String 	a16;
-    private String 	a17;
-    private String 	a18;
-    private String 	a19;
-    private String 	a20;
-    private String 	a21;
-    private String 	a22;
-    private String 	a23;
-    private String 	a24;
-    private String 	a25;
-    private String 	a26;
-    private String 	a27;
-    private String 	a28;
-    private String 	a29;
-    private String 	a30;
-    private String 	a31;
-    private String 	a32;
-    private String 	a33;
-    private String 	a34;
-    private String 	a35;
-    private String 	a36;
-
-    public String getIndex_id() {
-        return index_id;
-    }
-
-    public void setIndex_id(String index_id) {
-        this.index_id = index_id;
-    }
-
-    public void setRepProductType(String repProductType)
-    {
-        this.repProductType = repProductType;
-    }
-
-    public String getRepProductType()
-    {
-        return repProductType;
-    }
-    public void setVarietyType(String varietyType)
-    {
-        this.varietyType = varietyType;
-    }
-
-    public String getVarietyType()
-    {
-        return varietyType;
-    }
-
-    public String getFL() {
-        return FL;
-    }
-
-    public void setFL(String FL) {
-        this.FL = FL;
-    }
-
-    public String getA1() {
-        return getNlfxVal(getNlfxVal(this.a1));
-    }
-
-    public void setA1(String a1) {
-        this.a1 = a1;
-    }
-
-    public String getA2() {
-        return getNlfxVal(this.a2);
-    }
-
-    public void setA2(String a2) {
-        this.a2 = a2;
-    }
-
-    public String getA3() {
-        return getNlfxVal(this.a3);
-    }
-
-    public void setA3(String a3) {
-        this.a3 = a3;
-    }
-
-    public String getA4() {
-        return getNlfxVal(this.a4);
-    }
-
-    public void setA4(String a4) {
-        this.a4 = a4;
-    }
-
-    public String getA5() {
-        return getNlfxVal(this.a5);
-    }
-
-    public void setA5(String a5) {
-        this.a5 = a5;
-    }
-
-    public String getA6() {
-        return getNlfxVal(this.a6);
-    }
-
-    public void setA6(String a6) {
-        this.a6 = a6;
-    }
-
-    public String getA7() {
-        return getNlfxVal(this.a7);
-    }
-
-    public void setA7(String a7) {
-        this.a7 = a7;
-    }
-
-    public String getA8() {
-        return getNlfxVal(this.a8);
-    }
-
-    public void setA8(String a8) {
-        this.a8 = a8;
-    }
-
-    public String getA9() {
-        return getNlfxVal(this.a9);
-    }
-
-    public void setA9(String a9) {
-        this.a9 = a9;
-    }
-
-    public String getA10() {
-        return getNlfxVal(this.a10);
-    }
-
-    public void setA10(String a10) {
-        this.a10 = a10;
-    }
-
-    public String getA11() {
-        return getNlfxVal(this.a11);
-    }
-
-    public void setA11(String a11) {
-        this.a11 = a11;
-    }
-
-    public String getA12() {
-        return getNlfxVal(this.a12);
-    }
-
-    public void setA12(String a12) {
-        this.a12 = a12;
-    }
-
-    public String getA13() {
-        return getNlfxVal(this.a13);
-    }
-
-    public void setA13(String a13) {
-        this.a13 = a13;
-    }
-
-    public String getA14() {
-        return getNlfxVal(this.a14);
-    }
-
-    public void setA14(String a14) {
-        this.a14 = a14;
-    }
-
-    public String getA15() {
-        return getNlfxVal(this.a15);
-    }
-
-    public void setA15(String a15) {
-        this.a15 = a15;
-    }
-
-    public String getA16() {
-        return getNlfxVal(this.a16);
-    }
-
-    public void setA16(String a16) {
-        this.a16 = a16;
-    }
-
-    public String getA17() {
-        return getNlfxVal(this.a17);
-    }
-
-    public void setA17(String a17) {
-        this.a17 = a17;
-    }
-
-    public String getA18() {
-        return getNlfxVal(this.a18);
-    }
-
-    public void setA18(String a18) {
-        this.a18 = a18;
-    }
-
-    public String getA19() {
-        return getNlfxVal(this.a19);
-    }
-
-    public void setA19(String a19) {
-        this.a19 = a19;
-    }
-
-    public String getA20() {
-        return getNlfxVal(this.a20);
-    }
-
-    public void setA20(String a20) {
-        this.a20 = a20;
-    }
-
-    public String getA21() {
-        return getNlfxVal(this.a21);
-    }
-
-    public void setA21(String a21) {
-        this.a21 = a21;
-    }
-
-    public String getA22() {
-        return getNlfxVal(this.a22);
-    }
-
-    public void setA22(String a22) {
-        this.a22 = a22;
-    }
-
-    public String getA23() {
-        return getNlfxVal(this.a23);
-    }
-
-    public void setA23(String a23) {
-        this.a23 = a23;
-    }
-
-    public String getA24() {
-        return getNlfxVal(this.a24);
-    }
-
-    public void setA24(String a24) {
-        this.a24 = a24;
-    }
-
-    public String getA25() {
-        return getNlfxVal(this.a25);
-    }
-
-    public void setA25(String a25) {
-        this.a25 = a25;
-    }
-
-    public String getA26() {
-        return getNlfxVal(this.a26);
-    }
-
-    public void setA26(String a26) {
-        this.a26 = a26;
-    }
-
-    public String getA27() {
-        return getNlfxVal(this.a27);
-    }
-
-    public void setA27(String a27) {
-        this.a27 = a27;
-    }
-
-    public String getA28() {
-        return getNlfxVal(this.a28);
-    }
-
-    public void setA28(String a28) {
-        this.a28 = a28;
-    }
-
-    public String getA29() {
-        return getNlfxVal(this.a29);
-    }
-
-    public void setA29(String a29) {
-        this.a29 = a29;
-    }
-
-    public String getA30() {
-        return getNlfxVal(this.a30);
-    }
-
-    public void setA30(String a30) {
-        this.a30 = a30;
-    }
-
-    public String getA31() {
-        return getNlfxVal(this.a31);
-    }
-
-    public void setA31(String a31) {
-        this.a31 = a31;
-    }
-
-    public String getA32() {
-        return getNlfxVal(this.a32);
-    }
-
-    public void setA32(String a32) {
-        this.a32 = a32;
-    }
-
-    public String getA33() {
-        return getNlfxVal(this.a33);
-    }
-
-    public void setA33(String a33) {
-        this.a33 = a33;
-    }
-
-    public String getA34() {
-        return getNlfxVal(this.a34);
-    }
-
-    public void setA34(String a34) {
-        this.a34 = a34;
-    }
-
-    public String getA35() {
-        return getNlfxVal(this.a35);
-    }
-
-    public void setA35(String a35) {
-        this.a35 = a35;
-    }
-
-    public String getA36() {
-        return getNlfxVal(this.a36);
-    }
-
-    public void setA36(String a36) {
-        this.a36 = a36;
-    }
-
-    public String getSelectYear() {
-        return selectYear;
-    }
-
-    public void setSelectYear(String selectYear) {
-        this.selectYear = selectYear;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("index_id", getIndex_id())
-            .append("repProductType", getRepProductType())
-            .append("varietyType", getVarietyType())
-            .toString();
-    }
-
-    private String getNlfxVal(String val)
-    {
-        String tVal = (val==null || val.length()==0)?"--":val;
-        if(tVal.indexOf(".")>-1)
-        {
-            tVal = String.format("%.2f", Double.parseDouble(tVal));
-        }
-        return tVal;
-    }
-
-//    public static void main(String args[])
-//    {
-//        GxdhCountIndex a = new GxdhCountIndex();
-//        System.out.println(a.getNlfxVal("1.1"));
-
-//    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalData/mapper/GxdhCountMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalData/mapper/GxdhCountMapper.java
deleted file mode 100644
index 7f02084..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalData/mapper/GxdhCountMapper.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.dingzhuo.energy.project.statisticalData.mapper;
-
-import com.dingzhuo.energy.project.statisticalData.domain.GxdhCount;
-import com.dingzhuo.energy.project.statisticalData.domain.GxdhCountIndex;
-
-import java.util.List;
-
-/**
- * 宸ュ簭鍗曡�楃粺璁″姛鑳組apper鎺ュ彛
- * 
- * @author zhaow
- * @date 2020-12-26
- */
-public interface GxdhCountMapper 
-{
-    /**
-     * 鏌ヨ宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * 
-     * @param id 宸ュ簭鍗曡�楃粺璁″姛鑳絀D
-     * @return 宸ュ簭鍗曡�楃粺璁″姛鑳�
-     */
-    public GxdhCount selectGxdhCountById(String id);
-
-    /**
-     * 鏌ヨ宸ュ簭鍗曡�楃粺璁″姛鑳藉垪琛�
-     * 
-     * @param gxdhCount 宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * @return 宸ュ簭鍗曡�楃粺璁″姛鑳介泦鍚�
-     */
-    public List<GxdhCount> selectGxdhCountList(GxdhCount gxdhCount);
-
-    /**
-     * 鏂板宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * 
-     * @param gxdhCount 宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * @return 缁撴灉
-     */
-    public int insertGxdhCount(GxdhCount gxdhCount);
-
-    /**
-     * 淇敼宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * 
-     * @param gxdhCount 宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * @return 缁撴灉
-     */
-    public int updateGxdhCount(GxdhCount gxdhCount);
-
-    /**
-     * 鍒犻櫎宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * 
-     * @param id 宸ュ簭鍗曡�楃粺璁″姛鑳絀D
-     * @return 缁撴灉
-     */
-    public int deleteGxdhCountById(String id);
-
-    /**
-     * 鎵归噺鍒犻櫎宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int deleteGxdhCountByIds(String[] ids);
-
-    /**
-     * 鏌ヨ宸ュ簭鍗曡�楃粺璁″姛鑳芥姤琛ㄧ殑鎸囨爣鏁版嵁鍒楄〃
-     *
-     * @param gxdhCountIndex 宸ュ簭鍗曡�楃粺璁″姛鑳芥姤琛ㄧ殑鎸囨爣鏁版嵁
-     * @return 宸ュ簭鍗曡�楃粺璁″姛鑳介泦鍚�
-     */
-    public List<GxdhCountIndex> selectGxdhCountIndexList(GxdhCountIndex gxdhCountIndex);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalData/service/IGxdhCountService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalData/service/IGxdhCountService.java
deleted file mode 100644
index be7e400..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalData/service/IGxdhCountService.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.dingzhuo.energy.project.statisticalData.service;
-
-import com.dingzhuo.energy.project.statisticalData.domain.GxdhCount;
-import com.dingzhuo.energy.project.statisticalData.domain.GxdhCountIndex;
-
-import java.util.List;
-
-/**
- * 宸ュ簭鍗曡�楃粺璁″姛鑳絊ervice鎺ュ彛
- * 
- * @author zhaow
- * @date 2020-12-26
- */
-public interface IGxdhCountService 
-{
-    /**
-     * 鏌ヨ宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * 
-     * @param id 宸ュ簭鍗曡�楃粺璁″姛鑳絀D
-     * @return 宸ュ簭鍗曡�楃粺璁″姛鑳�
-     */
-    public GxdhCount selectGxdhCountById(String id);
-
-    /**
-     * 鏌ヨ宸ュ簭鍗曡�楃粺璁″姛鑳藉垪琛�
-     * 
-     * @param gxdhCount 宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * @return 宸ュ簭鍗曡�楃粺璁″姛鑳介泦鍚�
-     */
-    public List<GxdhCount> selectGxdhCountList(GxdhCount gxdhCount);
-
-    /**
-     * 鏂板宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * 
-     * @param gxdhCount 宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * @return 缁撴灉
-     */
-    public int insertGxdhCount(GxdhCount gxdhCount);
-
-    /**
-     * 淇敼宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * 
-     * @param gxdhCount 宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * @return 缁撴灉
-     */
-    public int updateGxdhCount(GxdhCount gxdhCount);
-
-    /**
-     * 鎵归噺鍒犻櫎宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑宸ュ簭鍗曡�楃粺璁″姛鑳絀D
-     * @return 缁撴灉
-     */
-    public int deleteGxdhCountByIds(String[] ids);
-
-    /**
-     * 鍒犻櫎宸ュ簭鍗曡�楃粺璁″姛鑳戒俊鎭�
-     * 
-     * @param id 宸ュ簭鍗曡�楃粺璁″姛鑳絀D
-     * @return 缁撴灉
-     */
-    public int deleteGxdhCountById(String id);
-
-    /**
-     * 鏌ヨ宸ュ簭鍗曡�楃粺璁″姛鑳芥姤琛ㄧ殑鎸囨爣鏁版嵁鍒楄〃
-     *
-     * @param gxdhCountIndex 宸ュ簭鍗曡�楃粺璁″姛鑳芥姤琛ㄧ殑鎸囨爣鏁版嵁
-     * @return 宸ュ簭鍗曡�楃粺璁″姛鑳介泦鍚�
-     */
-    public List<GxdhCountIndex> selectGxdhCountIndexList(GxdhCountIndex gxdhCountIndex);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalData/service/impl/GxdhCountServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalData/service/impl/GxdhCountServiceImpl.java
deleted file mode 100644
index e6d202c..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/statisticalData/service/impl/GxdhCountServiceImpl.java
+++ /dev/null
@@ -1,279 +0,0 @@
-package com.dingzhuo.energy.project.statisticalData.service.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.dingzhuo.energy.project.statisticalData.domain.GxdhCountIndex;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.dingzhuo.energy.project.statisticalData.mapper.GxdhCountMapper;
-import com.dingzhuo.energy.project.statisticalData.domain.GxdhCount;
-import com.dingzhuo.energy.project.statisticalData.service.IGxdhCountService;
-
-/**
- * 宸ュ簭鍗曡�楃粺璁″姛鑳絊ervice涓氬姟灞傚鐞�
- * 
- * @author zhaow
- * @date 2020-12-26
- */
-@Service
-public class GxdhCountServiceImpl implements IGxdhCountService 
-{
-    @Autowired
-    private GxdhCountMapper gxdhCountMapper;
-
-    /**
-     * 鏌ヨ宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * 
-     * @param id 宸ュ簭鍗曡�楃粺璁″姛鑳絀D
-     * @return 宸ュ簭鍗曡�楃粺璁″姛鑳�
-     */
-    @Override
-    public GxdhCount selectGxdhCountById(String id)
-    {
-        return gxdhCountMapper.selectGxdhCountById(id);
-    }
-
-    /**
-     * 鏌ヨ宸ュ簭鍗曡�楃粺璁″姛鑳藉垪琛�
-     * 
-     * @param gxdhCount 宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * @return 宸ュ簭鍗曡�楃粺璁″姛鑳�
-     */
-    @Override
-    public List<GxdhCount> selectGxdhCountList(GxdhCount gxdhCount)
-    {
-        return gxdhCountMapper.selectGxdhCountList(gxdhCount);
-    }
-
-    /**
-     * 鏂板宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * 
-     * @param gxdhCount 宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertGxdhCount(GxdhCount gxdhCount)
-    {
-        return gxdhCountMapper.insertGxdhCount(gxdhCount);
-    }
-
-    /**
-     * 淇敼宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * 
-     * @param gxdhCount 宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateGxdhCount(GxdhCount gxdhCount)
-    {
-        return gxdhCountMapper.updateGxdhCount(gxdhCount);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎宸ュ簭鍗曡�楃粺璁″姛鑳�
-     * 
-     * @param ids 闇�瑕佸垹闄ょ殑宸ュ簭鍗曡�楃粺璁″姛鑳絀D
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteGxdhCountByIds(String[] ids)
-    {
-        return gxdhCountMapper.deleteGxdhCountByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎宸ュ簭鍗曡�楃粺璁″姛鑳戒俊鎭�
-     * 
-     * @param id 宸ュ簭鍗曡�楃粺璁″姛鑳絀D
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteGxdhCountById(String id)
-    {
-        return gxdhCountMapper.deleteGxdhCountById(id);
-    }
-
-    /**
-     * 鏌ヨ宸ュ簭鍗曡�楃粺璁″姛鑳芥姤琛ㄧ殑鎸囨爣鏁版嵁鍒楄〃
-     *
-     * @param gxdhCountIndex 宸ュ簭鍗曡�楃粺璁″姛鑳芥姤琛ㄧ殑鎸囨爣鏁版嵁
-     * @return 宸ュ簭鍗曡�楃粺璁″姛鑳介泦鍚�
-     */
-    public List<GxdhCountIndex> selectGxdhCountIndexList(GxdhCountIndex gxdhCountIndex){
-        List<GxdhCountIndex> resList = new ArrayList<>();
-        GxdhCountIndex nyxhl = new GxdhCountIndex();
-        nyxhl.setVarietyType("鑳芥簮娑堣�楅噺");
-
-        GxdhCountIndex cpcl = new GxdhCountIndex();
-        cpcl.setVarietyType("浜у搧浜ч噺");
-
-        GxdhCountIndex cpdh = new GxdhCountIndex();
-        cpdh.setVarietyType("浜у搧鍗曡��");
-        //鍏堟煡 鑳芥簮娑堣�楅噺
-        gxdhCountIndex.setVarietyType("NYXHL");
-        List<GxdhCountIndex> queryNyxhlRes = gxdhCountMapper.selectGxdhCountIndexList(gxdhCountIndex);
-        if(queryNyxhlRes!=null && queryNyxhlRes.size()>0)
-        {
-            for(GxdhCountIndex gxdhCountIndexT:queryNyxhlRes)
-            {
-                if(gxdhCountIndexT.getFL().equals("DIAN"))
-                {
-                    nyxhl.setA1(gxdhCountIndexT.getA1());
-                    nyxhl.setA4(gxdhCountIndexT.getA2());
-                    nyxhl.setA7(gxdhCountIndexT.getA3());
-                    nyxhl.setA10(gxdhCountIndexT.getA4());
-                    nyxhl.setA13(gxdhCountIndexT.getA5());
-                    nyxhl.setA16(gxdhCountIndexT.getA6());
-                    nyxhl.setA19(gxdhCountIndexT.getA7());
-                    nyxhl.setA22(gxdhCountIndexT.getA8());
-                    nyxhl.setA25(gxdhCountIndexT.getA9());
-                    nyxhl.setA28(gxdhCountIndexT.getA10());
-                    nyxhl.setA31(gxdhCountIndexT.getA11());
-                    nyxhl.setA34(gxdhCountIndexT.getA12());
-                }else if(gxdhCountIndexT.getFL().equals("MQ"))
-                {
-                    nyxhl.setA2(gxdhCountIndexT.getA1());
-                    nyxhl.setA5(gxdhCountIndexT.getA2());
-                    nyxhl.setA8(gxdhCountIndexT.getA3());
-                    nyxhl.setA11(gxdhCountIndexT.getA4());
-                    nyxhl.setA14(gxdhCountIndexT.getA5());
-                    nyxhl.setA17(gxdhCountIndexT.getA6());
-                    nyxhl.setA20(gxdhCountIndexT.getA7());
-                    nyxhl.setA23(gxdhCountIndexT.getA8());
-                    nyxhl.setA26(gxdhCountIndexT.getA9());
-                    nyxhl.setA29(gxdhCountIndexT.getA10());
-                    nyxhl.setA32(gxdhCountIndexT.getA11());
-                    nyxhl.setA35(gxdhCountIndexT.getA12());
-                }else if(gxdhCountIndexT.getFL().equals("ZQ"))
-                {
-                    nyxhl.setA3(gxdhCountIndexT.getA1());
-                    nyxhl.setA6(gxdhCountIndexT.getA2());
-                    nyxhl.setA9(gxdhCountIndexT.getA3());
-                    nyxhl.setA12(gxdhCountIndexT.getA4());
-                    nyxhl.setA15(gxdhCountIndexT.getA5());
-                    nyxhl.setA18(gxdhCountIndexT.getA6());
-                    nyxhl.setA21(gxdhCountIndexT.getA7());
-                    nyxhl.setA24(gxdhCountIndexT.getA8());
-                    nyxhl.setA27(gxdhCountIndexT.getA9());
-                    nyxhl.setA30(gxdhCountIndexT.getA10());
-                    nyxhl.setA33(gxdhCountIndexT.getA11());
-                    nyxhl.setA36(gxdhCountIndexT.getA12());
-                }
-            }
-        }
-
-        //鍐嶆煡  浜у搧浜ч噺
-        gxdhCountIndex.setVarietyType("CPCL");
-        List<GxdhCountIndex> queryCpclRes = gxdhCountMapper.selectGxdhCountIndexList(gxdhCountIndex);
-        if(queryCpclRes!=null && queryCpclRes.size()>0)
-        {
-            for(GxdhCountIndex gxdhCountIndexCpcl:queryCpclRes)
-            {
-                if(gxdhCountIndexCpcl.getFL().equals("DIAN"))
-                {
-                    cpcl.setA1(gxdhCountIndexCpcl.getA1());
-                    cpcl.setA4(gxdhCountIndexCpcl.getA2());
-                    cpcl.setA7(gxdhCountIndexCpcl.getA3());
-                    cpcl.setA10(gxdhCountIndexCpcl.getA4());
-                    cpcl.setA13(gxdhCountIndexCpcl.getA5());
-                    cpcl.setA16(gxdhCountIndexCpcl.getA6());
-                    cpcl.setA19(gxdhCountIndexCpcl.getA7());
-                    cpcl.setA22(gxdhCountIndexCpcl.getA8());
-                    cpcl.setA25(gxdhCountIndexCpcl.getA9());
-                    cpcl.setA28(gxdhCountIndexCpcl.getA10());
-                    cpcl.setA31(gxdhCountIndexCpcl.getA11());
-                    cpcl.setA34(gxdhCountIndexCpcl.getA12());
-                }else if(gxdhCountIndexCpcl.getFL().equals("MQ"))
-                {
-                    cpcl.setA2(gxdhCountIndexCpcl.getA1());
-                    cpcl.setA5(gxdhCountIndexCpcl.getA2());
-                    cpcl.setA8(gxdhCountIndexCpcl.getA3());
-                    cpcl.setA11(gxdhCountIndexCpcl.getA4());
-                    cpcl.setA14(gxdhCountIndexCpcl.getA5());
-                    cpcl.setA17(gxdhCountIndexCpcl.getA6());
-                    cpcl.setA20(gxdhCountIndexCpcl.getA7());
-                    cpcl.setA23(gxdhCountIndexCpcl.getA8());
-                    cpcl.setA26(gxdhCountIndexCpcl.getA9());
-                    cpcl.setA29(gxdhCountIndexCpcl.getA10());
-                    cpcl.setA32(gxdhCountIndexCpcl.getA11());
-                    cpcl.setA35(gxdhCountIndexCpcl.getA12());
-                }else if(gxdhCountIndexCpcl.getFL().equals("ZQ"))
-                {
-                    cpcl.setA3(gxdhCountIndexCpcl.getA1());
-                    cpcl.setA6(gxdhCountIndexCpcl.getA2());
-                    cpcl.setA9(gxdhCountIndexCpcl.getA3());
-                    cpcl.setA12(gxdhCountIndexCpcl.getA4());
-                    cpcl.setA15(gxdhCountIndexCpcl.getA5());
-                    cpcl.setA18(gxdhCountIndexCpcl.getA6());
-                    cpcl.setA21(gxdhCountIndexCpcl.getA7());
-                    cpcl.setA24(gxdhCountIndexCpcl.getA8());
-                    cpcl.setA27(gxdhCountIndexCpcl.getA9());
-                    cpcl.setA30(gxdhCountIndexCpcl.getA10());
-                    cpcl.setA33(gxdhCountIndexCpcl.getA11());
-                    cpcl.setA36(gxdhCountIndexCpcl.getA12());
-                }
-            }
-        }
-
-        resList.add(nyxhl);
-        resList.add(cpcl);
-        //璁$畻浜у搧鍗曡��=鑳芥簮娑堣�楅噺/浜у搧浜ч噺
-        cpdh.setA1(calculationCpdh(nyxhl.getA1(),cpcl.getA1()));
-        cpdh.setA2(calculationCpdh(nyxhl.getA2(),cpcl.getA2()));
-        cpdh.setA3(calculationCpdh(nyxhl.getA3(),cpcl.getA3()));
-        cpdh.setA4(calculationCpdh(nyxhl.getA4(),cpcl.getA4()));
-        cpdh.setA5(calculationCpdh(nyxhl.getA5(),cpcl.getA5()));
-        cpdh.setA6(calculationCpdh(nyxhl.getA6(),cpcl.getA6()));
-        cpdh.setA7(calculationCpdh(nyxhl.getA7(),cpcl.getA7()));
-        cpdh.setA8(calculationCpdh(nyxhl.getA8(),cpcl.getA8()));
-        cpdh.setA9(calculationCpdh(nyxhl.getA9(),cpcl.getA9()));
-        cpdh.setA10(calculationCpdh(nyxhl.getA10(),cpcl.getA10()));
-        cpdh.setA11(calculationCpdh(nyxhl.getA11(),cpcl.getA11()));
-        cpdh.setA12(calculationCpdh(nyxhl.getA12(),cpcl.getA12()));
-        cpdh.setA13(calculationCpdh(nyxhl.getA13(),cpcl.getA13()));
-        cpdh.setA14(calculationCpdh(nyxhl.getA14(),cpcl.getA14()));
-        cpdh.setA15(calculationCpdh(nyxhl.getA15(),cpcl.getA15()));
-        cpdh.setA16(calculationCpdh(nyxhl.getA16(),cpcl.getA16()));
-        cpdh.setA17(calculationCpdh(nyxhl.getA17(),cpcl.getA17()));
-        cpdh.setA18(calculationCpdh(nyxhl.getA18(),cpcl.getA18()));
-        cpdh.setA19(calculationCpdh(nyxhl.getA19(),cpcl.getA19()));
-        cpdh.setA20(calculationCpdh(nyxhl.getA20(),cpcl.getA20()));
-        cpdh.setA21(calculationCpdh(nyxhl.getA21(),cpcl.getA21()));
-        cpdh.setA22(calculationCpdh(nyxhl.getA22(),cpcl.getA22()));
-        cpdh.setA23(calculationCpdh(nyxhl.getA23(),cpcl.getA23()));
-        cpdh.setA24(calculationCpdh(nyxhl.getA24(),cpcl.getA24()));
-        cpdh.setA25(calculationCpdh(nyxhl.getA25(),cpcl.getA25()));
-        cpdh.setA26(calculationCpdh(nyxhl.getA26(),cpcl.getA26()));
-        cpdh.setA27(calculationCpdh(nyxhl.getA27(),cpcl.getA27()));
-        cpdh.setA28(calculationCpdh(nyxhl.getA28(),cpcl.getA28()));
-        cpdh.setA29(calculationCpdh(nyxhl.getA29(),cpcl.getA29()));
-        cpdh.setA30(calculationCpdh(nyxhl.getA30(),cpcl.getA30()));
-        cpdh.setA31(calculationCpdh(nyxhl.getA31(),cpcl.getA31()));
-        cpdh.setA32(calculationCpdh(nyxhl.getA32(),cpcl.getA32()));
-        cpdh.setA33(calculationCpdh(nyxhl.getA33(),cpcl.getA33()));
-        cpdh.setA34(calculationCpdh(nyxhl.getA34(),cpcl.getA34()));
-        cpdh.setA35(calculationCpdh(nyxhl.getA35(),cpcl.getA35()));
-        cpdh.setA36(calculationCpdh(nyxhl.getA36(),cpcl.getA36()));
-        resList.add(cpdh);
-        return resList;
-    }
-
-    private String calculationCpdh(String nyxhl,String cpcl)
-    {
-        try{
-            if(nyxhl.equals("--")||cpcl.equals("--"))
-            {
-                return "--";
-            }else{
-                double fz = Double.parseDouble(nyxhl);
-                double fm = Double.parseDouble(cpcl);
-                return String.format("%.2f", fz/fm);
-            }
-        }catch (Exception e)
-        {
-            e.printStackTrace();
-            return "--";
-        }
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/controller/dailyWorkingProcedureController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/controller/dailyWorkingProcedureController.java
deleted file mode 100644
index 673f703..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/controller/dailyWorkingProcedureController.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package com.dingzhuo.energy.project.workingProcedure.controller;
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.workingProcedure.domain.dailyWorkingProcedure;
-import com.dingzhuo.energy.project.workingProcedure.service.IdailyWorkingProcedure;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- *宸ュ簭鑳借�楃粺璁�
- * @author sys
- * @date 2020-02-18
- */
-@RestController
-@RequestMapping("/workingProcedure/dailyWorkingProcedure")
-public class dailyWorkingProcedureController extends BaseController {
-
-    @Autowired
-    private IModelNodeService modelNodeService;
-    @Autowired
-    private IdailyWorkingProcedure dailyWorkingProcedure;
-
-    @GetMapping("/list")
-    public AjaxResult list(DataItem dataItem) {
-        try {
-            List<ModelNode> nodeId = modelNodeService.getModelNodeByModelCode(dataItem.getIndexCode());
-            List<EnergyIndex> energyList = modelNodeService.getSettingIndex(nodeId.get(0).getNodeId());
-            List<String> indexIds = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-            List<dailyWorkingProcedure> dataList=new ArrayList<>();
-            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            String aa= df.format(dataItem.getDataTime());
-            String bb="";
-            int i = 0;
-            dataItem.setBeginTime(dataItem.getDataTime());
-            String endTime=aa+" 24:00:00";
-            dataItem.setEndTime(sf.parse(endTime));
-            while (i < 24) {
-                if(i>9){
-                    bb=aa+" "+i+":00:00";
-                }else{
-                    bb=aa+" 0"+i+":00:00";
-                }
-                dailyWorkingProcedure report=new dailyWorkingProcedure();
-                report.setDataTime(sf.parse(bb));
-                report.setValue("value"+i);
-                dataList.add(report);
-                i++;
-            };
-            List<dailyWorkingProcedure> list = dailyWorkingProcedure.getdailyWorkingProcedureList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-            return AjaxResult.success(list);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍑洪敊!");
-        }
-    }
-
-    @GetMapping("/listChart")
-    public AjaxResult listChart(DataItem dataItem) throws ParseException {
-        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String aa= df.format(dataItem.getDataTime());
-        dataItem.setBeginTime(dataItem.getDataTime());
-        String endTime=aa+" 24:00:00";
-        dataItem.setEndTime(sf.parse(endTime));
-        List<dailyWorkingProcedure> list = dailyWorkingProcedure.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-        return AjaxResult.success(list);
-    }
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/controller/monthlyWorkingProcedureController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/controller/monthlyWorkingProcedureController.java
deleted file mode 100644
index c4728d4..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/controller/monthlyWorkingProcedureController.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package com.dingzhuo.energy.project.workingProcedure.controller;
-
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.workingProcedure.domain.monthlyWorkingProcedure;
-import com.dingzhuo.energy.project.workingProcedure.service.ImonthlyWorkingProcedure;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * 宸ュ簭鑳借�楃粺璁�
- *
- * @author sys
- * @date 2020-02-18
- */
-@RestController
-@RequestMapping("/workingProcedure/monthlyWorkingProcedure")
-public class monthlyWorkingProcedureController extends BaseController {
-
-    @Autowired
-    private IModelNodeService modelNodeService;
-    @Autowired
-    private ImonthlyWorkingProcedure imonthlyWorkingProcedure;
-
-    @GetMapping("/list")
-    public AjaxResult list(DataItem dataItem) {
-        try {
-            List<ModelNode> nodeId = modelNodeService.getModelNodeByModelCode(dataItem.getIndexCode());
-            List<EnergyIndex> energyList = modelNodeService.getSettingIndex(nodeId.get(0).getNodeId());
-            List<String> indexIds = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-            List<monthlyWorkingProcedure> dataList=new ArrayList<>();
-            Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
-            monthlyWorkingProcedure report1=new monthlyWorkingProcedure();
-            DateFormat df = new SimpleDateFormat("yyyy-MM");
-            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            String aa= df.format(dataItem.getDataTime());
-            String bb="";
-            int i = 1;
-            String beginTime=aa+"-01 00:00:00";
-            dataItem.setBeginTime(sf.parse(beginTime));
-            String endTime=aa+"-"+Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))+" 00:00:00";
-            dataItem.setEndTime(sf.parse(endTime));
-            while (i <= Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))) {
-                if(i>9){
-                    bb=aa+"-"+i+" 00:00:00";
-                }else{
-                    bb=aa+"-0"+i+" 00:00:00";
-                }
-                monthlyWorkingProcedure report=new monthlyWorkingProcedure();
-                report.setDataTime(sf.parse(bb));
-                report.setValue("value"+i);
-                dataList.add(report);
-                tableColumn.put("value"+i,String.valueOf(i)+"鏃�");
-                i++;
-            }
-            monthlyWorkingProcedure reportList =new  monthlyWorkingProcedure();
-            List<Map> table=new ArrayList<>();
-            List<monthlyWorkingProcedure> list = imonthlyWorkingProcedure.getMonthlyWorkingProcedureList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-            int count=Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2));
-            list.forEach(monthlyReport -> monthlyReport.setCount(count));
-            reportList.setTabledata(list);
-            table.add(tableColumn);
-            reportList.setTablehead(table);
-            return AjaxResult.success(reportList);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍑洪敊!");
-        }
-    }
-
-    @GetMapping("/listChart")
-    public AjaxResult listChart(DataItem dataItem) throws ParseException {
-        DateFormat df = new SimpleDateFormat("yyyy-MM");
-        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String aa= df.format(dataItem.getDataTime());
-        String beginTime=aa+"-01 00:00:00";
-        dataItem.setBeginTime(sf.parse(beginTime));
-        String endTime=aa+"-"+Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))+" 00:00:00";
-        dataItem.setEndTime(sf.parse(endTime));
-        List<monthlyWorkingProcedure> list = imonthlyWorkingProcedure.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-        return AjaxResult.success(list);
-    }
-    public static String getLastDayOfMonth(String yearMonth) {
-        int year = Integer.parseInt(yearMonth.split("-")[0]);  //骞�
-        int month = Integer.parseInt(yearMonth.split("-")[1]); //鏈�
-        Calendar cal = Calendar.getInstance();
-        // 璁剧疆骞翠唤
-        cal.set(Calendar.YEAR, year);
-        // 璁剧疆鏈堜唤
-        // cal.set(Calendar.MONTH, month - 1);
-        cal.set(Calendar.MONTH, month); //璁剧疆褰撳墠鏈堢殑涓婁竴涓湀
-        // 鑾峰彇鏌愭湀鏈�澶уぉ鏁�
-        //int lastDay = cal.getActualMaximum(Calendar.DATE);
-        int lastDay = cal.getMinimum(Calendar.DATE); //鑾峰彇鏈堜唤涓殑鏈�灏忓�硷紝鍗崇涓�澶�
-        // 璁剧疆鏃ュ巻涓湀浠界殑鏈�澶уぉ鏁�
-        //cal.set(Calendar.DAY_OF_MONTH, lastDay);
-        cal.set(Calendar.DAY_OF_MONTH, lastDay - 1); //涓婃湀鐨勭涓�澶╁噺鍘�1灏辨槸褰撴湀鐨勬渶鍚庝竴澶�
-        // 鏍煎紡鍖栨棩鏈�
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-        return sdf.format(cal.getTime());
-    }
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/controller/yearWorkingProcedureController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/controller/yearWorkingProcedureController.java
deleted file mode 100644
index 0f9cdd2..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/controller/yearWorkingProcedureController.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package com.dingzhuo.energy.project.workingProcedure.controller;
-
-import com.dingzhuo.energy.common.utils.time.TimeManager;
-import com.dingzhuo.energy.data.model.domain.EnergyIndex;
-import com.dingzhuo.energy.data.model.domain.ModelNode;
-import com.dingzhuo.energy.data.model.service.IModelNodeService;
-import com.dingzhuo.energy.dataservice.domain.DataItem;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.project.workingProcedure.domain.yearWorkingProcedure;
-import com.dingzhuo.energy.project.workingProcedure.service.IyearWorkingProcedure;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- *宸ュ簭鑳借�楃粺璁�
- * @author sys
- * @date 2020-02-18
- */
-@RestController
-@RequestMapping("/workingProcedure/yearWorkingProcedure")
-public class yearWorkingProcedureController extends BaseController {
-
-    @Autowired
-    private IModelNodeService modelNodeService;
-    @Autowired
-    private IyearWorkingProcedure yearComprehensive;
-
-    @GetMapping("/list")
-    public AjaxResult list(DataItem dataItem) {
-        try {
-            List<ModelNode> nodeId = modelNodeService.getModelNodeByModelCode(dataItem.getIndexCode());
-            List<EnergyIndex> energyList = modelNodeService.getSettingIndex(nodeId.get(0).getNodeId());
-            List<String> indexIds = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
-            List<yearWorkingProcedure> dataList=new ArrayList<>();
-            DateFormat df = new SimpleDateFormat("yyyy");
-            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            String aa= df.format(dataItem.getBeginTime());
-            String bb="";
-            int i = 1;
-            while (i <= 12) {
-                if(i>9){
-                    bb=aa+"-"+i+"-01 00:00:00";
-                }else{
-                    bb=aa+"-0"+i+"-01 00:00:00";
-                }
-                yearWorkingProcedure report=new yearWorkingProcedure();
-                report.setDataTime(sf.parse(bb));
-                report.setValue("value"+i);
-                dataList.add(report);
-                i++;
-            }
-            List<yearWorkingProcedure> list = yearComprehensive.getYearWorkingProcedureList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-            return AjaxResult.success(list);
-        } catch (Exception ex) {
-            logger.error("鑾峰彇鍑洪敊锛�", ex);
-            return AjaxResult.error("鑾峰彇鍑洪敊!");
-        }
-    }
-
-    @GetMapping("/listChart")
-    public AjaxResult listChart(DataItem dataItem){
-        List<yearWorkingProcedure> list = yearComprehensive.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
-        return AjaxResult.success(list);
-    }
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/domain/dailyWorkingProcedure.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/domain/dailyWorkingProcedure.java
deleted file mode 100644
index 1735c5a..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/domain/dailyWorkingProcedure.java
+++ /dev/null
@@ -1,322 +0,0 @@
-package com.dingzhuo.energy.project.workingProcedure.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 
- * @author sys
- * @date 2020-03-25
- */
-public class dailyWorkingProcedure implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private String indexId;
-    @Excel(name = "鎸囨爣鍚嶇О")
-    private String indexName;
-    private String value;
-    private Date dataTime;
-    private String timeType;
-    private String timeCode;
-    private String unitId;
-    @Excel(name = "1鏃�")
-    private Double value1;
-    @Excel(name = "2鏃�")
-    private Double value2;
-    @Excel(name = "3鏃�")
-    private Double value3;
-    @Excel(name = "4鏃�")
-    private Double value4;
-    @Excel(name = "5鏃�")
-    private Double value5;
-    @Excel(name = "6鏃�")
-    private Double value6;
-    @Excel(name = "7鏃�")
-    private Double value7;
-    @Excel(name = "8鏃�")
-    private Double value8;
-    @Excel(name = "9鏃�")
-    private Double value9;
-    @Excel(name = "10鏃�")
-    private Double value10;
-    @Excel(name = "11鏃�")
-    private Double value11;
-    @Excel(name = "12鏃�")
-    private Double value12;
-    @Excel(name = "13鏃�")
-    private Double value13;
-    @Excel(name = "14鏃�")
-    private Double value14;
-    @Excel(name = "15鏃�")
-    private Double value15;
-    @Excel(name = "16鏃�")
-    private Double value16;
-    @Excel(name = "17鏃�")
-    private Double value17;
-    @Excel(name = "18鏃�")
-    private Double value18;
-    @Excel(name = "19鏃�")
-    private Double value19;
-    @Excel(name = "20鏃�")
-    private Double value20;
-    @Excel(name = "21鏃�")
-    private Double value21;
-    @Excel(name = "22鏃�")
-    private Double value22;
-    @Excel(name = "23鏃�")
-    private Double value23;
-    @Excel(name = "0鏃�")
-    private Double value0;
-    public String getIndexId() {
-        return indexId;
-    }
-
-    public void setIndexId(String indexId) {
-        this.indexId = indexId;
-    }
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-
-    public String getUnitId() {
-        return unitId;
-    }
-
-    public void setUnitId(String unitId) {
-        this.unitId = unitId;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getTimeType() {
-        return timeType;
-    }
-
-    public void setTimeType(String timeType) {
-        this.timeType = timeType;
-    }
-
-    public Date getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(Date dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public Double getValue1() {
-        return value1;
-    }
-
-    public void setValue1(Double value1) {
-        this.value1 = value1;
-    }
-
-    public Double getValue2() {
-        return value2;
-    }
-
-    public void setValue2(Double value2) {
-        this.value2 = value2;
-    }
-
-    public Double getValue3() {
-        return value3;
-    }
-
-    public void setValue3(Double value3) {
-        this.value3 = value3;
-    }
-
-    public Double getValue4() {
-        return value4;
-    }
-
-    public void setValue4(Double value4) {
-        this.value4 = value4;
-    }
-
-    public Double getValue5() {
-        return value5;
-    }
-
-    public void setValue5(Double value5) {
-        this.value5 = value5;
-    }
-
-    public Double getValue6() {
-        return value6;
-    }
-
-    public void setValue6(Double value6) {
-        this.value6 = value6;
-    }
-
-    public Double getValue7() {
-        return value7;
-    }
-
-    public void setValue7(Double value7) {
-        this.value7 = value7;
-    }
-
-    public Double getValue8() {
-        return value8;
-    }
-
-    public void setValue8(Double value8) {
-        this.value8 = value8;
-    }
-
-    public Double getValue9() {
-        return value9;
-    }
-
-    public void setValue9(Double value9) {
-        this.value9 = value9;
-    }
-
-    public Double getValue10() {
-        return value10;
-    }
-
-    public void setValue10(Double value10) {
-        this.value10 = value10;
-    }
-
-    public Double getValue11() {
-        return value11;
-    }
-
-    public void setValue11(Double value11) {
-        this.value11 = value11;
-    }
-
-    public Double getValue12() {
-        return value12;
-    }
-
-    public void setValue12(Double value12) {
-        this.value12 = value12;
-    }
-
-    public Double getValue13() {
-        return value13;
-    }
-
-    public void setValue13(Double value13) {
-        this.value13 = value13;
-    }
-
-    public Double getValue14() {
-        return value14;
-    }
-
-    public void setValue14(Double value14) {
-        this.value14 = value14;
-    }
-
-    public Double getValue15() {
-        return value15;
-    }
-
-    public void setValue15(Double value15) {
-        this.value15 = value15;
-    }
-
-    public Double getValue16() {
-        return value16;
-    }
-
-    public void setValue16(Double value16) {
-        this.value16 = value16;
-    }
-
-    public Double getValue17() {
-        return value17;
-    }
-
-    public void setValue17(Double value17) {
-        this.value17 = value17;
-    }
-
-    public Double getValue18() {
-        return value18;
-    }
-
-    public void setValue18(Double value18) {
-        this.value18 = value18;
-    }
-
-    public Double getValue19() {
-        return value19;
-    }
-
-    public void setValue19(Double value19) {
-        this.value19 = value19;
-    }
-
-    public Double getValue20() {
-        return value20;
-    }
-
-    public void setValue20(Double value20) {
-        this.value20 = value20;
-    }
-
-    public Double getValue21() {
-        return value21;
-    }
-
-    public void setValue21(Double value21) {
-        this.value21 = value21;
-    }
-
-    public Double getValue22() {
-        return value22;
-    }
-
-    public void setValue22(Double value22) {
-        this.value22 = value22;
-    }
-
-    public Double getValue23() {
-        return value23;
-    }
-
-    public void setValue23(Double value23) {
-        this.value23 = value23;
-    }
-
-    public Double getValue0() {
-        return value0;
-    }
-
-    public void setValue0(Double value0) {
-        this.value0 = value0;
-    }
-
-    public String getTimeCode() {
-        return timeCode;
-    }
-
-    public void setTimeCode(String timeCode) {
-        this.timeCode = timeCode;
-    }
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/domain/monthlyWorkingProcedure.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/domain/monthlyWorkingProcedure.java
deleted file mode 100644
index ef97ad6..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/domain/monthlyWorkingProcedure.java
+++ /dev/null
@@ -1,415 +0,0 @@
-package com.dingzhuo.energy.project.workingProcedure.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 
- * @author sys
- * @date 2020-12-31
- */
-public class monthlyWorkingProcedure implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private String indexId;
-    @Excel(name = "鎸囨爣鍚嶇О")
-    private String indexName;
-    private String value;
-    private Date dataTime;
-    private String timeType;
-    @Excel(name = "1鏃�")
-    private Double value1;
-    @Excel(name = "2鏃�")
-    private Double value2;
-    @Excel(name = "3鏃�")
-    private Double value3;
-    @Excel(name = "4鏃�")
-    private Double value4;
-    @Excel(name = "5鏃�")
-    private Double value5;
-    @Excel(name = "6鏃�")
-    private Double value6;
-    @Excel(name = "7鏃�")
-    private Double value7;
-    @Excel(name = "8鏃�")
-    private Double value8;
-    @Excel(name = "9鏃�")
-    private Double value9;
-    @Excel(name = "10鏃�")
-    private Double value10;
-    @Excel(name = "11鏃�")
-    private Double value11;
-    @Excel(name = "12鏃�")
-    private Double value12;
-    @Excel(name = "13鏃�")
-    private Double value13;
-    @Excel(name = "14鏃�")
-    private Double value14;
-    @Excel(name = "15鏃�")
-    private Double value15;
-    @Excel(name = "16鏃�")
-    private Double value16;
-    @Excel(name = "17鏃�")
-    private Double value17;
-    @Excel(name = "18鏃�")
-    private Double value18;
-    @Excel(name = "19鏃�")
-    private Double value19;
-    @Excel(name = "20鏃�")
-    private Double value20;
-    @Excel(name = "21鏃�")
-    private Double value21;
-    @Excel(name = "22鏃�")
-    private Double value22;
-    @Excel(name = "23鏃�")
-    private Double value23;
-    @Excel(name = "24鏃�")
-    private Double value24;
-    @Excel(name = "25鏃�")
-    private Double value25;
-    @Excel(name = "26鏃�")
-    private Double value26;
-    @Excel(name = "27鏃�")
-    private Double value27;
-    @Excel(name = "28鏃�")
-    private Double value28;
-    @Excel(name = "29鏃�")
-    private Double value29;
-    @Excel(name = "30鏃�")
-    private Double value30;
-    @Excel(name = "31鏃�")
-    private Double value31;
-    private String timeCode;
-    private Integer count;
-    private String unitId;
-    private List<Map> tablehead =new ArrayList<>();
-    private List<monthlyWorkingProcedure> tabledata =new ArrayList<>();
-    public String getIndexId() {
-        return indexId;
-    }
-
-    public void setIndexId(String indexId) {
-        this.indexId = indexId;
-    }
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-    public String getUnitId() {
-        return unitId;
-    }
-
-    public void setUnitId(String unitId) {
-        this.unitId = unitId;
-    }
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getTimeType() {
-        return timeType;
-    }
-
-    public void setTimeType(String timeType) {
-        this.timeType = timeType;
-    }
-
-    public Date getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(Date dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public Double getValue1() {
-        return value1;
-    }
-
-    public void setValue1(Double value1) {
-        this.value1 = value1;
-    }
-
-    public Double getValue2() {
-        return value2;
-    }
-
-    public void setValue2(Double value2) {
-        this.value2 = value2;
-    }
-
-    public Double getValue3() {
-        return value3;
-    }
-
-    public void setValue3(Double value3) {
-        this.value3 = value3;
-    }
-
-    public Double getValue4() {
-        return value4;
-    }
-
-    public void setValue4(Double value4) {
-        this.value4 = value4;
-    }
-
-    public Double getValue5() {
-        return value5;
-    }
-
-    public void setValue5(Double value5) {
-        this.value5 = value5;
-    }
-
-    public Double getValue6() {
-        return value6;
-    }
-
-    public void setValue6(Double value6) {
-        this.value6 = value6;
-    }
-
-    public Double getValue7() {
-        return value7;
-    }
-
-    public void setValue7(Double value7) {
-        this.value7 = value7;
-    }
-
-    public Double getValue8() {
-        return value8;
-    }
-
-    public void setValue8(Double value8) {
-        this.value8 = value8;
-    }
-
-    public Double getValue9() {
-        return value9;
-    }
-
-    public void setValue9(Double value9) {
-        this.value9 = value9;
-    }
-
-    public Double getValue10() {
-        return value10;
-    }
-
-    public void setValue10(Double value10) {
-        this.value10 = value10;
-    }
-
-    public Double getValue11() {
-        return value11;
-    }
-
-    public void setValue11(Double value11) {
-        this.value11 = value11;
-    }
-
-    public Double getValue12() {
-        return value12;
-    }
-
-    public void setValue12(Double value12) {
-        this.value12 = value12;
-    }
-
-    public Double getValue13() {
-        return value13;
-    }
-
-    public void setValue13(Double value13) {
-        this.value13 = value13;
-    }
-
-    public Double getValue14() {
-        return value14;
-    }
-
-    public void setValue14(Double value14) {
-        this.value14 = value14;
-    }
-
-    public Double getValue15() {
-        return value15;
-    }
-
-    public void setValue15(Double value15) {
-        this.value15 = value15;
-    }
-
-    public Double getValue16() {
-        return value16;
-    }
-
-    public void setValue16(Double value16) {
-        this.value16 = value16;
-    }
-
-    public Double getValue17() {
-        return value17;
-    }
-
-    public void setValue17(Double value17) {
-        this.value17 = value17;
-    }
-
-    public Double getValue18() {
-        return value18;
-    }
-
-    public void setValue18(Double value18) {
-        this.value18 = value18;
-    }
-
-    public Double getValue19() {
-        return value19;
-    }
-
-    public void setValue19(Double value19) {
-        this.value19 = value19;
-    }
-
-    public Double getValue20() {
-        return value20;
-    }
-
-    public void setValue20(Double value20) {
-        this.value20 = value20;
-    }
-
-    public Double getValue21() {
-        return value21;
-    }
-
-    public void setValue21(Double value21) {
-        this.value21 = value21;
-    }
-
-    public Double getValue22() {
-        return value22;
-    }
-
-    public void setValue22(Double value22) {
-        this.value22 = value22;
-    }
-
-    public Double getValue23() {
-        return value23;
-    }
-
-    public void setValue23(Double value23) {
-        this.value23 = value23;
-    }
-
-    public Double getValue24() {
-        return value24;
-    }
-
-    public void setValue24(Double value24) {
-        this.value24 = value24;
-    }
-
-    public Double getValue25() {
-        return value25;
-    }
-
-    public void setValue25(Double value25) {
-        this.value25 = value25;
-    }
-
-    public Double getValue26() {
-        return value26;
-    }
-
-    public void setValue26(Double value26) {
-        this.value26 = value26;
-    }
-
-    public Double getValue27() {
-        return value27;
-    }
-
-    public void setValue27(Double value27) {
-        this.value27 = value27;
-    }
-
-    public Double getValue28() {
-        return value28;
-    }
-
-    public void setValue28(Double value28) {
-        this.value28 = value28;
-    }
-
-    public Double getValue29() {
-        return value29;
-    }
-
-    public void setValue29(Double value29) {
-        this.value29 = value29;
-    }
-
-    public Double getValue30() {
-        return value30;
-    }
-
-    public void setValue30(Double value30) {
-        this.value30 = value30;
-    }
-
-    public Double getValue31() {
-        return value31;
-    }
-
-    public void setValue31(Double value31) {
-        this.value31 = value31;
-    }
-
-    public List<Map> getTablehead() {
-        return tablehead;
-    }
-
-    public void setTablehead(List<Map> tablehead) {
-        this.tablehead = tablehead;
-    }
-    public List<monthlyWorkingProcedure> getTabledata() {
-        return tabledata;
-    }
-
-    public void setTabledata(List<monthlyWorkingProcedure> tabledata) {
-        this.tabledata = tabledata;
-    }
-
-    public String getTimeCode() {
-        return timeCode;
-    }
-
-    public void setTimeCode(String timeCode) {
-        this.timeCode = timeCode;
-    }
-
-    public Integer getCount() {
-        return count;
-    }
-
-    public void setCount(Integer count) {
-        this.count = count;
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/domain/yearWorkingProcedure.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/domain/yearWorkingProcedure.java
deleted file mode 100644
index 22b21fc..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/domain/yearWorkingProcedure.java
+++ /dev/null
@@ -1,200 +0,0 @@
-package com.dingzhuo.energy.project.workingProcedure.domain;
-
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.project.reportForm.domain.dailyReport;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 
- * @author sys
- * @date 2020-03-25
- */
-public class yearWorkingProcedure implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private String indexId;
-    @Excel(name = "鎸囨爣鍚嶇О")
-    private String indexName;
-    private String value;
-    private Date dataTime;
-    private String timeType;
-    @Excel(name = "1鏈�")
-    private Double value1;
-    @Excel(name = "2鏈�")
-    private Double value2;
-    @Excel(name = "3鏈�")
-    private Double value3;
-    @Excel(name = "4鏈�")
-    private Double value4;
-    @Excel(name = "5鏈�")
-    private Double value5;
-    @Excel(name = "6鏈�")
-    private Double value6;
-    @Excel(name = "7鏈�")
-    private Double value7;
-    @Excel(name = "8鏈�")
-    private Double value8;
-    @Excel(name = "9鏈�")
-    private Double value9;
-    @Excel(name = "10鏈�")
-    private Double value10;
-    @Excel(name = "11鏈�")
-    private Double value11;
-    @Excel(name = "12鏈�")
-    private Double value12;
-    private String timeCode;
-    private  String unitId;
-    public String getIndexId() {
-        return indexId;
-    }
-
-    public void setIndexId(String indexId) {
-        this.indexId = indexId;
-    }
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(String indexName) {
-        this.indexName = indexName;
-    }
-    public String getUnitId() {
-        return unitId;
-    }
-
-    public void setUnitId(String unitId) {
-        this.unitId = unitId;
-    }
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getTimeType() {
-        return timeType;
-    }
-
-    public void setTimeType(String timeType) {
-        this.timeType = timeType;
-    }
-
-    public Date getDataTime() {
-        return dataTime;
-    }
-
-    public void setDataTime(Date dataTime) {
-        this.dataTime = dataTime;
-    }
-
-    public Double getValue1() {
-        return value1;
-    }
-
-    public void setValue1(Double value1) {
-        this.value1 = value1;
-    }
-
-    public Double getValue2() {
-        return value2;
-    }
-
-    public void setValue2(Double value2) {
-        this.value2 = value2;
-    }
-
-    public Double getValue3() {
-        return value3;
-    }
-
-    public void setValue3(Double value3) {
-        this.value3 = value3;
-    }
-
-    public Double getValue4() {
-        return value4;
-    }
-
-    public void setValue4(Double value4) {
-        this.value4 = value4;
-    }
-
-    public Double getValue5() {
-        return value5;
-    }
-
-    public void setValue5(Double value5) {
-        this.value5 = value5;
-    }
-
-    public Double getValue6() {
-        return value6;
-    }
-
-    public void setValue6(Double value6) {
-        this.value6 = value6;
-    }
-
-    public Double getValue7() {
-        return value7;
-    }
-
-    public void setValue7(Double value7) {
-        this.value7 = value7;
-    }
-
-    public Double getValue8() {
-        return value8;
-    }
-
-    public void setValue8(Double value8) {
-        this.value8 = value8;
-    }
-
-    public Double getValue9() {
-        return value9;
-    }
-
-    public void setValue9(Double value9) {
-        this.value9 = value9;
-    }
-
-    public Double getValue10() {
-        return value10;
-    }
-
-    public void setValue10(Double value10) {
-        this.value10 = value10;
-    }
-
-    public Double getValue11() {
-        return value11;
-    }
-
-    public void setValue11(Double value11) {
-        this.value11 = value11;
-    }
-
-    public Double getValue12() {
-        return value12;
-    }
-
-    public void setValue12(Double value12) {
-        this.value12 = value12;
-    }
-    public String getTimeCode() {
-        return timeCode;
-    }
-
-    public void setTimeCode(String timeCode) {
-        this.timeCode = timeCode;
-    }
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/mapper/dailyWorkingProcedureMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/mapper/dailyWorkingProcedureMapper.java
deleted file mode 100644
index 17af796..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/mapper/dailyWorkingProcedureMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.dingzhuo.energy.project.workingProcedure.mapper;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.workingProcedure.domain.dailyWorkingProcedure;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- *宸ュ簭鑳借�楃粺璁� 鏃�
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface dailyWorkingProcedureMapper {
-    public List<dailyWorkingProcedure> getdailyWorkingProcedureList(@Param("indexIds") List<String> indexIds,
-                                                                @Param("dataList") List<dailyWorkingProcedure> dataList,
-                                                                @Param("beginTime") Date beginTime,
-                                                                @Param("endTime") Date endTime,
-                                                                @Param("timeType") TimeType timeType,
-                                                                @Param("indexStorageId") String indexStorageId);
-    List<dailyWorkingProcedure> getListChart(@Param("indexId") String indexId,
-                                            @Param("beginTime") Date beginTime,
-                                            @Param("endTime") Date endTime,
-                                            @Param("timeType") TimeType timeType,
-                                            @Param("indexStorageId")  String indexStorageId);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/mapper/monthlyWorkingProcedureMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/mapper/monthlyWorkingProcedureMapper.java
deleted file mode 100644
index a3aad6d..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/mapper/monthlyWorkingProcedureMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.dingzhuo.energy.project.workingProcedure.mapper;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.workingProcedure.domain.monthlyWorkingProcedure;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 宸ュ簭缁煎悎鑳借�楃粺璁� 鏈�
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface monthlyWorkingProcedureMapper {
-    public List<monthlyWorkingProcedure> getMonthlyWorkingProcedureList(@Param("indexIds") List<String> indexIds,
-                                                                @Param("dataList") List<monthlyWorkingProcedure> dataList,
-                                                                @Param("beginTime") Date beginTime,
-                                                                @Param("endTime") Date endTime,
-                                                                @Param("timeType") TimeType timeType,
-                                                                @Param("indexStorageId") String indexStorageId);
-    List<monthlyWorkingProcedure> getListChart(@Param("indexId") String indexId,
-                                               @Param("beginTime") Date beginTime,
-                                               @Param("endTime") Date endTime,
-                                               @Param("timeType") TimeType timeType,
-                                               @Param("indexStorageId") String indexStorageId);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/mapper/yearWorkingProcedureMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/mapper/yearWorkingProcedureMapper.java
deleted file mode 100644
index caeb469..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/mapper/yearWorkingProcedureMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.dingzhuo.energy.project.workingProcedure.mapper;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.workingProcedure.domain.yearWorkingProcedure;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 宸ュ簭缁煎悎鑳借�楃粺璁� 骞�
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface yearWorkingProcedureMapper {
-    public List<yearWorkingProcedure> getYearWorkingProcedureList(@Param("indexIds") List<String> indexIds,
-                                                                  @Param("dataList") List<yearWorkingProcedure> dataList,
-                                                                  @Param("beginTime") Date beginTime,
-                                                                  @Param("endTime") Date endTime,
-                                                                  @Param("timeType") TimeType timeType,
-                                                                  @Param("indexStorageId") String indexStorageId);
-    List<yearWorkingProcedure> getListChart(@Param("indexId") String indexId,
-                                            @Param("beginTime") Date beginTime,
-                                            @Param("endTime") Date endTime,
-                                            @Param("timeType") TimeType timeType,
-                                            @Param("indexStorageId") String indexStorageId);
-
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/service/IdailyWorkingProcedure.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/service/IdailyWorkingProcedure.java
deleted file mode 100644
index a147c27..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/service/IdailyWorkingProcedure.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.dingzhuo.energy.project.workingProcedure.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.workingProcedure.domain.dailyWorkingProcedure;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 鍏ㄥ巶缁煎悎鑳借�楃粺璁� 鏃�
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface IdailyWorkingProcedure {
-    public List<dailyWorkingProcedure> getdailyWorkingProcedureList(List<String> indexIds, List<dailyWorkingProcedure> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-    public List<dailyWorkingProcedure> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/service/ImonthlyWorkingProcedure.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/service/ImonthlyWorkingProcedure.java
deleted file mode 100644
index 8d0c87f..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/service/ImonthlyWorkingProcedure.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.dingzhuo.energy.project.workingProcedure.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.workingProcedure.domain.monthlyWorkingProcedure;
-
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 鍏ㄥ巶缁煎悎鑳借�楃粺璁� 鏈�
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface ImonthlyWorkingProcedure {
-    public List<monthlyWorkingProcedure> getMonthlyWorkingProcedureList(List<String> indexIds, List<monthlyWorkingProcedure> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-    List<monthlyWorkingProcedure> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/service/IyearWorkingProcedure.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/service/IyearWorkingProcedure.java
deleted file mode 100644
index 40d89cd..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/service/IyearWorkingProcedure.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.dingzhuo.energy.project.workingProcedure.service;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.workingProcedure.domain.yearWorkingProcedure;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 宸ュ簭鑳借�楃粺璁� 骞�
- * 
- * @author sys
- * @date 2020-03-25
- */
-public interface IyearWorkingProcedure {
-    public List<yearWorkingProcedure> getYearWorkingProcedureList(List<String> indexIds, List<yearWorkingProcedure> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-    List<yearWorkingProcedure> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/service/impl/dailyWorkingProcedureServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/service/impl/dailyWorkingProcedureServiceImpl.java
deleted file mode 100644
index 762d29a..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/service/impl/dailyWorkingProcedureServiceImpl.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.dingzhuo.energy.project.workingProcedure.service.impl;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.workingProcedure.domain.dailyWorkingProcedure;
-import com.dingzhuo.energy.project.workingProcedure.mapper.dailyWorkingProcedureMapper;
-import com.dingzhuo.energy.project.workingProcedure.service.IdailyWorkingProcedure;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-/**
- * 涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-03-25
- */
-@Service
-public class dailyWorkingProcedureServiceImpl implements IdailyWorkingProcedure {
-    @Autowired
-    private dailyWorkingProcedureMapper dailyMapper;
-
-    public List<dailyWorkingProcedure> getdailyWorkingProcedureList(List<String> indexIds, List<dailyWorkingProcedure> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
-        if (indexIds != null && !indexIds.isEmpty()) {
-            return dailyMapper.getdailyWorkingProcedureList(indexIds, dataList, beginTime, endTime, timeType, indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-    @Override
-    public List<dailyWorkingProcedure> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
-        if (indexId != null && !indexId.isEmpty()) {
-            return dailyMapper.getListChart(indexId,beginTime,endTime,timeType,indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/service/impl/monthlyWorkingProcedureServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/service/impl/monthlyWorkingProcedureServiceImpl.java
deleted file mode 100644
index 4a5469e..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/service/impl/monthlyWorkingProcedureServiceImpl.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.dingzhuo.energy.project.workingProcedure.service.impl;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.workingProcedure.domain.monthlyWorkingProcedure;
-import com.dingzhuo.energy.project.workingProcedure.mapper.monthlyWorkingProcedureMapper;
-import com.dingzhuo.energy.project.workingProcedure.service.ImonthlyWorkingProcedure;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-/**
- * 涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-03-25
- */
-@Service
-public class monthlyWorkingProcedureServiceImpl implements ImonthlyWorkingProcedure {
-    @Autowired
-    private monthlyWorkingProcedureMapper monthMapper;
-
-    public List<monthlyWorkingProcedure> getMonthlyWorkingProcedureList(List<String> indexIds, List<monthlyWorkingProcedure> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
-        if (indexIds != null && !indexIds.isEmpty()) {
-            return monthMapper.getMonthlyWorkingProcedureList(indexIds, dataList, beginTime, endTime, timeType, indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-
-    @Override
-    public List<monthlyWorkingProcedure> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
-        if (indexId != null && !indexId.isEmpty()) {
-            return monthMapper.getListChart(indexId,beginTime,endTime,timeType,indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/service/impl/yearWorkingProcedureServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/service/impl/yearWorkingProcedureServiceImpl.java
deleted file mode 100644
index d34fc58..0000000
--- a/energy_management_server/src/main/java/com/dingzhuo/energy/project/workingProcedure/service/impl/yearWorkingProcedureServiceImpl.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.dingzhuo.energy.project.workingProcedure.service.impl;
-
-import com.dingzhuo.energy.common.utils.time.TimeType;
-import com.dingzhuo.energy.project.workingProcedure.domain.yearWorkingProcedure;
-import com.dingzhuo.energy.project.workingProcedure.mapper.yearWorkingProcedureMapper;
-import com.dingzhuo.energy.project.workingProcedure.service.IyearWorkingProcedure;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-/**
- * 涓氬姟灞傚鐞�
- * 
- * @author sys
- * @date 2020-03-25
- */
-@Service
-public class yearWorkingProcedureServiceImpl implements IyearWorkingProcedure {
-    @Autowired
-    private yearWorkingProcedureMapper yearMapper;
-
-    public List<yearWorkingProcedure> getYearWorkingProcedureList(List<String> indexIds, List<yearWorkingProcedure> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
-        if (indexIds != null && !indexIds.isEmpty()) {
-            return yearMapper.getYearWorkingProcedureList(indexIds, dataList, beginTime, endTime, timeType, indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-    @Override
-    public List<yearWorkingProcedure> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
-        if (indexId != null && !indexId.isEmpty()) {
-            return yearMapper.getListChart(indexId,beginTime,endTime,timeType,indexStorageId);
-        }
-        return Collections.emptyList();
-    }
-}
diff --git a/energy_management_server/src/main/resources/application-prod.yml b/energy_management_server/src/main/resources/application-prod.yml
deleted file mode 100644
index 3fe1be0..0000000
--- a/energy_management_server/src/main/resources/application-prod.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-# 鏁版嵁婧愰厤缃�
-spring:
-  datasource:
-    url: jdbc:postgresql://localhost:5432/energy_dongli
-    username: 
-    password: 
-  redis:
-    host: localhost
-    port: 
-
-server:
-  port: 8097
-
-rtdb:
-  host: localhost
-  port: 8086
-#  host: 192.168.8.122
-#  port: 8086
-
-upload:
-  #  path: /Users/fanxinfu/Documents/MyWork/dingzhuo/upload
-  #  path: D:/workspace/energy-management/energy_management_ui/upload
-  path: D:/energy_system/upload
-
-# 琛ㄨ揪寮忎笉鑳藉寘鍚勾鐨勯儴鍒� 鏈�澶氬叚涓�
-govReport:
-  # 15鍒嗛挓鎵ц涓�娆�
-  cronDay: 0 30/15 0,1 * * *
-  # 姣忔湀浠�1鍙峰紑濮� 姣忓ぉ闆剁偣鎵ц涓�娆�
-  cronMonth: 0 0 0 1,2,3,4 * *
-
-mqtt:
-  host: tcp://localhost:30509
-  username: 
-  password: 
-  subhbt: iot-2/evt/waconn/#
-  subhbtqos: 0
diff --git a/energy_management_server/src/main/resources/application.yml b/energy_management_server/src/main/resources/application.yml
deleted file mode 100644
index 7906203..0000000
--- a/energy_management_server/src/main/resources/application.yml
+++ /dev/null
@@ -1,187 +0,0 @@
-# 椤圭洰鐩稿叧閰嶇疆
-ruoyi:
-  # 鍚嶇О
-  name: 鏅虹⒊鏈潵EMS
-  # 鐗堟湰
-  version: 1.0.0
-  # 鐗堟潈骞翠唤
-  copyrightYear: 2023
-  # 瀹炰緥婕旂ず寮�鍏�
-  demoEnabled: true
-  # 鏂囦欢璺緞 绀轰緥锛� Windows閰嶇疆D:/ruoyi/uploadPath锛孡inux閰嶇疆 /home/ruoyi/uploadPath锛�
-  profile: ${upload.path}
-  # 鑾峰彇ip鍦板潃寮�鍏�
-  addressEnabled: true
-
-# 寮�鍙戠幆澧冮厤缃�
-server:
-  # 鏈嶅姟鍣ㄧ殑HTTP绔彛锛岄粯璁や负8080
-  port: ${server.port}
-  servlet:
-    # 搴旂敤鐨勮闂矾寰�
-    context-path: /
-  undertow:
-    # 璁剧疆IO绾跨▼鏁�, 瀹冧富瑕佹墽琛岄潪闃诲鐨勪换鍔�,瀹冧滑浼氳礋璐e涓繛鎺�, 榛樿璁剧疆姣忎釜CPU鏍稿績涓�涓嚎绋�
-    io-threads: 4
-    # 闃诲浠诲姟绾跨▼姹�, 褰撴墽琛岀被浼約ervlet璇锋眰闃诲IO鎿嶄綔, undertow浼氫粠杩欎釜绾跨▼姹犱腑鍙栧緱绾跨▼
-    # 瀹冪殑鍊艰缃彇鍐充簬绯荤粺绾跨▼鎵ц浠诲姟鐨勯樆濉炵郴鏁帮紝榛樿鍊兼槸IO绾跨▼鏁�*8
-    worker-threads: 32
-    # 浠ヤ笅鐨勯厤缃細褰卞搷buffer,杩欎簺buffer浼氱敤浜庢湇鍔″櫒杩炴帴鐨処O鎿嶄綔,鏈夌偣绫讳技netty鐨勬睜鍖栧唴瀛樼鐞�
-    # 姣忓潡buffer鐨勭┖闂村ぇ灏�,瓒婂皬鐨勭┖闂磋鍒╃敤瓒婂厖鍒嗭紝涓嶈璁剧疆澶ぇ锛屼互鍏嶅奖鍝嶅叾浠栧簲鐢紝鍚堥�傚嵆鍙�
-    buffer-size: 1024
-    # 鏄惁鍒嗛厤鐨勭洿鎺ュ唴瀛�(NIO鐩存帴鍒嗛厤鐨勫爢澶栧唴瀛�)
-    direct-buffers: true
-
-# 鏃ュ織閰嶇疆
-logging:
-  level:
-    com.dingzhuo: debug
-    org.springframework: info
-
-# Spring閰嶇疆
-spring:
-  # 璧勬簮淇℃伅
-  messages:
-    # 鍥介檯鍖栬祫婧愭枃浠惰矾寰�
-    basename: i18n/messages
-  datasource:
-    type: com.alibaba.druid.pool.DruidDataSource
-    driverClassName: org.postgresql.Driver
-    druid:
-      # 涓诲簱鏁版嵁婧�
-      master:
-        url: ${spring.datasource.url}
-        username: ${spring.datasource.username}
-        password: ${spring.datasource.password}
-      # 浠庡簱鏁版嵁婧�
-      slave:
-        # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴
-        enabled: false
-        url:
-        username:
-        password:
-      # 鍒濆杩炴帴鏁�
-      initialSize: 5
-      # 鏈�灏忚繛鎺ユ睜鏁伴噺
-      minIdle: 10
-      # 鏈�澶ц繛鎺ユ睜鏁伴噺
-      maxActive: 20
-      # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
-      maxWait: 60000
-      # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
-      timeBetweenEvictionRunsMillis: 60000
-      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
-      minEvictableIdleTimeMillis: 300000
-      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
-      maxEvictableIdleTimeMillis: 900000
-      # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁�
-      validationQuery: SELECT 1
-      testWhileIdle: true
-      testOnBorrow: false
-      testOnReturn: false
-      webStatFilter:
-        enabled: true
-      statViewServlet:
-        enabled: true
-        # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂�
-        allow:
-        url-pattern: /druid/*
-        # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮�
-        login-username:
-        login-password:
-      filter:
-        stat:
-          enabled: true
-          # 鎱QL璁板綍
-          log-slow-sql: true
-          slow-sql-millis: 10000
-          merge-sql: true
-        wall:
-          config:
-            multi-statement-allow: true
-  profiles:
-    active: prod
-  # 鏂囦欢涓婁紶
-  servlet:
-    multipart:
-      # 鍗曚釜鏂囦欢澶у皬
-      max-file-size:  10MB
-      # 璁剧疆鎬讳笂浼犵殑鏂囦欢澶у皬
-      max-request-size:  20MB
-  # 鏈嶅姟妯″潡
-  devtools:
-    restart:
-      # 鐑儴缃插紑鍏�
-      enabled: true
-  # redis 閰嶇疆
-  redis:
-    # 鍦板潃
-    host: ${spring.redis.host}
-    # 绔彛锛岄粯璁や负6379
-    port: ${spring.redis.port}
-    # 杩炴帴瓒呮椂鏃堕棿
-    timeout: 10s
-    lettuce:
-      pool:
-        # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
-        min-idle: 0
-        # 杩炴帴姹犱腑鐨勬渶澶х┖闂茶繛鎺�
-        max-idle: 8
-        # 杩炴帴姹犵殑鏈�澶ф暟鎹簱杩炴帴鏁�
-        max-active: 8
-        # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
-        max-wait: -1ms
-
-# token閰嶇疆
-token:
-  # 浠ょ墝鑷畾涔夋爣璇�
-  header: Authorization
-  # 浠ょ墝绉橀挜
-  secret: abcdefghijklmnopqrstuvwxyz
-  # 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛�
-#  expireTime: 1440
-  expireTime: 1440
-
-# MyBatis閰嶇疆
-mybatis:
-  # 鎼滅储鎸囧畾鍖呭埆鍚�
-  typeAliasesPackage: com.dingzhuo.energy.**.domain
-  # 閰嶇疆mapper鐨勬壂鎻忥紝鎵惧埌鎵�鏈夌殑mapper.xml鏄犲皠鏂囦欢
-  mapperLocations: classpath*:mybatis/**/*Mapper.xml
-  # 鍔犺浇鍏ㄥ眬鐨勯厤缃枃浠�
-  configLocation: classpath:mybatis/mybatis-config.xml
-
-# PageHelper鍒嗛〉鎻掍欢
-pagehelper:
-  helperDialect: PostgreSQL
-  reasonable: true
-  supportMethodsArguments: true
-  params: count=countSql
-
-# 闃叉XSS鏀诲嚮
-xss:
-  # 杩囨护寮�鍏�
-  enabled: true
-  # 鎺掗櫎閾炬帴锛堝涓敤閫楀彿鍒嗛殧锛�
-  excludes: /system/notice/*
-  # 鍖归厤閾炬帴
-  urlPatterns: /system/*,/monitor/*,/tool/*,/meter/*,/facility/*
-
-# 浠g爜鐢熸垚
-gen:
-  # 浣滆��
-  author: sys
-  # 榛樿鐢熸垚鍖呰矾寰� system 闇�鏀规垚鑷繁鐨勬ā鍧楀悕绉� 濡� system monitor tool
-  packageName: com.dingzhuo.energy.project.system
-  # 鑷姩鍘婚櫎琛ㄥ墠缂�锛岄粯璁ゆ槸true
-  autoRemovePre: false
-  # 琛ㄥ墠缂�锛堢敓鎴愮被鍚嶄笉浼氬寘鍚〃鍓嶇紑锛屽涓敤閫楀彿鍒嗛殧锛�
-  tablePrefix: sys_
-
-rtdb:
-  host: ${rtdb.host}
-  port: ${rtdb.port}
-
-sysconfig:
-  indexUrl: "/indexdev"
-  #鎶ヨ〃棣栭〉   http://10.50.217.4:88/webroot/decision/view/form?viewlet=Form14.frm
diff --git a/energy_management_server/src/main/resources/banner.txt b/energy_management_server/src/main/resources/banner.txt
deleted file mode 100644
index d56a2b0..0000000
--- a/energy_management_server/src/main/resources/banner.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Application Version: ${ruoyi.version}
-Application Port: ${server.port}
diff --git a/energy_management_server/src/main/resources/i18n/messages.properties b/energy_management_server/src/main/resources/i18n/messages.properties
deleted file mode 100644
index d63aa1f..0000000
--- a/energy_management_server/src/main/resources/i18n/messages.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-#閿欒娑堟伅
-not.null=* 蹇呴』濉啓
-user.jcaptcha.error=楠岃瘉鐮侀敊璇�
-user.jcaptcha.expire=楠岃瘉鐮佸凡澶辨晥
-user.not.exists=鐢ㄦ埛涓嶅瓨鍦�/瀵嗙爜閿欒
-user.password.not.match=鐢ㄦ埛涓嶅瓨鍦�/瀵嗙爜閿欒
-user.password.retry.limit.count=瀵嗙爜杈撳叆閿欒{0}娆�
-user.password.retry.limit.exceed=瀵嗙爜杈撳叆閿欒{0}娆★紝甯愭埛閿佸畾10鍒嗛挓
-user.password.delete=瀵逛笉璧凤紝鎮ㄧ殑璐﹀彿宸茶鍒犻櫎
-user.blocked=鐢ㄦ埛宸插皝绂侊紝璇疯仈绯荤鐞嗗憳
-role.blocked=瑙掕壊宸插皝绂侊紝璇疯仈绯荤鐞嗗憳
-user.logout.success=閫�鍑烘垚鍔�
-
-length.not.valid=闀垮害蹇呴』鍦▄min}鍒皗max}涓瓧绗︿箣闂�
-
-user.username.not.valid=* 2鍒�20涓眽瀛椼�佸瓧姣嶃�佹暟瀛楁垨涓嬪垝绾跨粍鎴愶紝涓斿繀椤讳互闈炴暟瀛楀紑澶�
-user.password.not.valid=* 5-50涓瓧绗�
- 
-user.email.not.valid=閭鏍煎紡閿欒
-user.mobile.phone.number.not.valid=鎵嬫満鍙锋牸寮忛敊璇�
-user.login.success=鐧诲綍鎴愬姛
-user.notfound=璇烽噸鏂扮櫥褰�
-user.forcelogout=绠$悊鍛樺己鍒堕��鍑猴紝璇烽噸鏂扮櫥褰�
-user.unknown.error=鏈煡閿欒锛岃閲嶆柊鐧诲綍
-
-##鏂囦欢涓婁紶娑堟伅
-upload.exceed.maxSize=涓婁紶鐨勬枃浠跺ぇ灏忚秴鍑洪檺鍒剁殑鏂囦欢澶у皬锛�<br/>鍏佽鐨勬枃浠舵渶澶уぇ灏忔槸锛歿0}MB锛�
-upload.filename.exceed.length=涓婁紶鐨勬枃浠跺悕鏈�闀縶0}涓瓧绗�
-
-##鏉冮檺
-no.permission=鎮ㄦ病鏈夋暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄� [{0}]
-no.create.permission=鎮ㄦ病鏈夊垱寤烘暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄� [{0}]
-no.update.permission=鎮ㄦ病鏈変慨鏀规暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄� [{0}]
-no.delete.permission=鎮ㄦ病鏈夊垹闄ゆ暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄� [{0}]
-no.export.permission=鎮ㄦ病鏈夊鍑烘暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄� [{0}]
-no.view.permission=鎮ㄦ病鏈夋煡鐪嬫暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄� [{0}]
diff --git a/energy_management_server/src/main/resources/logback.xml b/energy_management_server/src/main/resources/logback.xml
deleted file mode 100644
index 803c579..0000000
--- a/energy_management_server/src/main/resources/logback.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-    <!-- 鏃ュ織瀛樻斁璺緞 -->
-	<property name="log.path" value="logs" />
-    <!-- 鏃ュ織杈撳嚭鏍煎紡 -->
-	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
-
-	<!-- 鎺у埗鍙拌緭鍑� -->
-	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-		<encoder>
-			<pattern>${log.pattern}</pattern>
-		</encoder>
-	</appender>
-
-	<!-- 绯荤粺鏃ュ織杈撳嚭 -->
-	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
-	    <file>${log.path}/sys-info.log</file>
-        <!-- 寰幆鏀跨瓥锛氬熀浜庢椂闂村垱寤烘棩蹇楁枃浠� -->
-		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!-- 鏃ュ織鏂囦欢鍚嶆牸寮� -->
-			<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
-			<!-- 鏃ュ織鏈�澶х殑鍘嗗彶 60澶� -->
-			<maxHistory>60</maxHistory>
-		</rollingPolicy>
-		<encoder>
-			<pattern>${log.pattern}</pattern>
-		</encoder>
-		<filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <!-- 杩囨护鐨勭骇鍒� -->
-            <level>INFO</level>
-            <!-- 鍖归厤鏃剁殑鎿嶄綔锛氭帴鏀讹紙璁板綍锛� -->
-            <onMatch>ACCEPT</onMatch>
-            <!-- 涓嶅尮閰嶆椂鐨勬搷浣滐細鎷掔粷锛堜笉璁板綍锛� -->
-            <onMismatch>DENY</onMismatch>
-        </filter>
-	</appender>
-
-	<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
-	    <file>${log.path}/sys-error.log</file>
-        <!-- 寰幆鏀跨瓥锛氬熀浜庢椂闂村垱寤烘棩蹇楁枃浠� -->
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!-- 鏃ュ織鏂囦欢鍚嶆牸寮� -->
-            <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
-			<!-- 鏃ュ織鏈�澶х殑鍘嗗彶 60澶� -->
-			<maxHistory>60</maxHistory>
-        </rollingPolicy>
-        <encoder>
-            <pattern>${log.pattern}</pattern>
-        </encoder>
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <!-- 杩囨护鐨勭骇鍒� -->
-            <level>ERROR</level>
-			<!-- 鍖归厤鏃剁殑鎿嶄綔锛氭帴鏀讹紙璁板綍锛� -->
-            <onMatch>ACCEPT</onMatch>
-			<!-- 涓嶅尮閰嶆椂鐨勬搷浣滐細鎷掔粷锛堜笉璁板綍锛� -->
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
-
-	<!-- 鐢ㄦ埛璁块棶鏃ュ織杈撳嚭  -->
-    <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<file>${log.path}/sys-user.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!-- 鎸夊ぉ鍥炴粴 daily -->
-            <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
-            <!-- 鏃ュ織鏈�澶х殑鍘嗗彶 60澶� -->
-            <maxHistory>60</maxHistory>
-        </rollingPolicy>
-        <encoder>
-            <pattern>${log.pattern}</pattern>
-        </encoder>
-    </appender>
-
-	<!-- 绯荤粺妯″潡鏃ュ織绾у埆鎺у埗  -->
-	<logger name="com.dingzhuo" level="info" />
-	<!-- Spring鏃ュ織绾у埆鎺у埗  -->
-	<logger name="org.springframework" level="warn" />
-
-	<root level="info">
-		<appender-ref ref="console" />
-	</root>
-
-	<!--绯荤粺鎿嶄綔鏃ュ織-->
-    <root level="error">
-       <appender-ref ref="file_info" />
-        <appender-ref ref="file_error" />
-    </root>
-
-	<!--绯荤粺鐢ㄦ埛鎿嶄綔鏃ュ織-->
-    <logger name="sys-user" level="error">
-        <appender-ref ref="sys-user"/>
-    </logger>
-</configuration>
diff --git a/energy_management_server/src/main/resources/mybatis/EnergyConsumeInput/EnergyConsumeInputMapper.xml b/energy_management_server/src/main/resources/mybatis/EnergyConsumeInput/EnergyConsumeInputMapper.xml
deleted file mode 100644
index a659193..0000000
--- a/energy_management_server/src/main/resources/mybatis/EnergyConsumeInput/EnergyConsumeInputMapper.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.energyConsumeInput.mapper.EnergyConsumeInputMapper">
-
-    <resultMap type="EnergyConsumeInput" id="EnergyConsumeInputResult">
-        <result property="indexId" column="index_id"/>
-        <result property="name" column="name"/>
-        <result property="code" column="code"/>
-        <result property="unit" column="unit_name"/>
-        <result property="dataTime" column="data_time"/>
-        <result property="value" column="value"/>
-        <result property="createTime" column="create_time"/>
-        <result property="createBy" column="create_by"/>
-        <result property="categoryName" column="category_name"/>
-        <result property="energyName" column="energy_name"/>
-    </resultMap>
-
-
-    <select id="selectEnergyConsumeInputList" resultMap="EnergyConsumeInputResult">
-         select
-            ni.index_id,ei."name",ei.code,dd3.dict_label unit_name,di.data_time,di."value",
-            di.create_time,di.create_by,dd1.dict_label category_name,dd2.dict_label energy_name
-        from
-            node_index ni
-            left join energy_index ei on ni.index_id = ei.index_id
-            left join index_storage ist on ist.index_id = ei.index_id
-            left join  data_item di on ei.index_id = di.index_id and di.time_code = #{timeCode}
-            left join sys_dict_data dd1 on dd1.dict_value = ei.index_category and dd1.dict_type = 'sys_index_category'
-            left join sys_dict_data dd2 on dd2.dict_value = ei.energy_id and dd2.dict_type = 'energy_type'
-            left join sys_dict_data dd3 on dd3.dict_value = ei.unit_id and dd3.dict_type = 'sys_unit'
-        WHERE
-            ist.calc_type = 'INPUT' and ist.time_type = #{timeType}
-            AND ni.node_id = #{nodeId}
-            order by data_time DESC
-    </select>
-
-    <delete id="deleteEnergyConsumeInputByIds" parameterType="String">
-        delete from data_item where time_code = #{timeCode} and index_id in
-        <foreach item="id" collection="indexIds" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-
-    <insert id="saveEnergyConsumeInputList">
-        insert into data_item (index_id, time_code,
-        time_type,
-        begin_time,
-        end_time,
-        data_time,
-        value,
-        quality,
-        create_time,
-        create_by)
-        values
-        <foreach collection="list" item="dataItem" index="index" separator=",">
-            (#{dataItem.indexId},
-            #{dataItem.timeCode},
-            #{dataItem.timeType},
-            #{dataItem.beginTime},
-            #{dataItem.endTime},
-            #{dataItem.dataTime},
-            #{dataItem.value, jdbcType = DOUBLE},
-            #{dataItem.quality},
-            now(),
-            #{dataItem.createBy})
-        </foreach>
-    </insert>
-
-    <select id="queryReCalcIndexIdByIds" parameterType="String" resultMap="EnergyConsumeInputResult">
-        select
-        ifp.index_id
-        from
-        index_formula_param ifp
-        WHERE
-        ifp.param_value in (
-        SELECT ei.code FROM energy_index ei where ei.index_id in
-        <foreach item="id" collection="list" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-        )
-    </select>
-
-
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/basicSetup/SysEquipmentfileMapper.xml b/energy_management_server/src/main/resources/mybatis/basicSetup/SysEquipmentfileMapper.xml
deleted file mode 100644
index ea0f413..0000000
--- a/energy_management_server/src/main/resources/mybatis/basicSetup/SysEquipmentfileMapper.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.basicSetup.mapper.SysEquipmentfileMapper">
-  <resultMap id="SysEquipmentFile"
-    type="com.dingzhuo.energy.project.basicSetup.domain.SysEquipmentfile">
-    <result property="nodeId" column="node_id"/>
-    <result property="filePath" column="filepath"/>
-  </resultMap>
-  <resultMap id="SysSvgInfo"
-    type="com.dingzhuo.energy.project.basicSetup.domain.SysSvgInfo">
-    <result property="id" column="id"/>
-    <result property="param" column="param"/>
-    <result property="tag" column="tag"/>
-  </resultMap>
-
-  <insert id="saveSettingInfo">
-    delete
-    from sys_svg_info
-    where node_id = #{nodeId};
-
-    <foreach collection="svgInfo" item="info" separator=";">
-      insert into sys_svg_info (id, node_id, param, tag)
-      values (#{info.id}, #{nodeId}, #{info.param}, #{info.tag});
-    </foreach>
-  </insert>
-
-  <update id="saveEquipmentFile">
-    insert into sys_equipmentfile (node_id, filepath)
-    select #{nodeId}, #{filePath}
-    on conflict
-      (node_id)
-    do update
-    set filepath = #{filePath}
-  </update>
-  <select id="getConfigure" resultMap="SysEquipmentFile">
-    select node_id, filepath
-    from sys_equipmentfile
-    where node_id = #{nodeId};
-  </select>
-  <select id="getConfigureTag" resultMap="SysSvgInfo">
-    select id, param, tag
-    from sys_svg_info
-    where node_id = #{nodeId}
-  </select>
-
-</mapper>
diff --git a/energy_management_server/src/main/resources/mybatis/basicSetup/SysStandardCategoryMapper.xml b/energy_management_server/src/main/resources/mybatis/basicSetup/SysStandardCategoryMapper.xml
deleted file mode 100644
index 0f50def..0000000
--- a/energy_management_server/src/main/resources/mybatis/basicSetup/SysStandardCategoryMapper.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.basicSetup.mapper.SysStandardCategoryMapper">
-    
-    <resultMap type="SysStandardCategory" id="SysStandardCategoryResult">
-        <result property="id"    column="id"    />
-        <result property="categoryName"    column="category_name"    />
-        <result property="categoryCode"    column="category_code"    />
-        <result property="dataType"    column="data_type"    />
-        <result property="showAlarm"    column="show_alarm"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="remark"    column="remark"    />
-    </resultMap>
-
-    <sql id="selectSysStandardCategoryVo">
-        select id, category_name, category_code, data_type, show_alarm, create_by, create_time, update_by, update_time, remark from sys_standard_category
-    </sql>
-
-    <select id="selectSysStandardCategoryList" parameterType="SysStandardCategory" resultMap="SysStandardCategoryResult">
-        <include refid="selectSysStandardCategoryVo"/>
-        <where>  
-            <if test="categoryName != null  and categoryName != ''"> and category_name like concat('%', #{categoryName}, '%')</if>
-            <if test="categoryCode != null  and categoryCode != ''"> and category_code like concat('%', #{categoryCode}, '%')</if>
-            <if test="dataType != null  and dataType != ''"> and data_type like concat('%', #{dataType}, '%')</if>
-            <if test="showAlarm != null  and showAlarm != ''"> and show_alarm like concat('%', #{showAlarm}, '%')</if>
-        </where>
-        order by create_time desc
-    </select>
-    
-    <select id="selectSysStandardCategoryById" parameterType="String" resultMap="SysStandardCategoryResult">
-        <include refid="selectSysStandardCategoryVo"/>
-        where id = #{id}
-    </select>
-        
-    <insert id="insertSysStandardCategory" parameterType="SysStandardCategory">
-        insert into sys_standard_category
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="categoryName != null  and categoryName != ''">category_name,</if>
-            <if test="categoryCode != null  and categoryCode != ''">category_code,</if>
-            <if test="dataType != null  and dataType != ''">data_type,</if>
-            <if test="showAlarm != null  and showAlarm != ''">show_alarm,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="updateBy != null  and updateBy != ''">update_by,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="remark != null  and remark != ''">remark,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="categoryName != null  and categoryName != ''">#{categoryName},</if>
-            <if test="categoryCode != null  and categoryCode != ''">#{categoryCode},</if>
-            <if test="dataType != null  and dataType != ''">#{dataType},</if>
-            <if test="showAlarm != null  and showAlarm != ''">#{showAlarm},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="remark != null  and remark != ''">#{remark},</if>
-         </trim>
-    </insert>
-
-    <update id="updateSysStandardCategory" parameterType="SysStandardCategory">
-        update sys_standard_category
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="categoryName != null  and categoryName != ''">category_name = #{categoryName},</if>
-            <if test="categoryCode != null  and categoryCode != ''">category_code = #{categoryCode},</if>
-            <if test="dataType != null  and dataType != ''">data_type = #{dataType},</if>
-            <if test="showAlarm != null  and showAlarm != ''">show_alarm = #{showAlarm},</if>
-            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="remark != null  and remark != ''">remark = #{remark},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteSysStandardCategoryById" parameterType="String">
-        delete from sys_standard_category where id = #{id}
-    </delete>
-
-    <delete id="deleteSysStandardCategoryByIds" parameterType="String">
-        delete from sys_standard_category where id in 
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/basicSetup/SysStandardParametersMapper.xml b/energy_management_server/src/main/resources/mybatis/basicSetup/SysStandardParametersMapper.xml
deleted file mode 100644
index 59c78e7..0000000
--- a/energy_management_server/src/main/resources/mybatis/basicSetup/SysStandardParametersMapper.xml
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.basicSetup.mapper.SysStandardParametersMapper">
-
-    <resultMap type="SysStandardParameters" id="SysStandardParametersResult">
-        <result property="id"    column="id"    />
-        <result property="name"    column="name"    />
-        <result property="configInfo"    column="config_info"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="remark"    column="remark"    />
-        <result property="code"    column="code"    />
-        <result property="dataType"    column="data_type"    />
-        <result property="showAlarm"    column="show_alarm"    />
-        <result property="categoryId"    column="category_id"    />
-    </resultMap>
-    <sql id="selectSysStandardParametersVo">
-        select
-        id,
-        name,
-        config_info,
-        create_by,
-        create_time,
-        update_by,
-        update_time,
-        remark,
-        code,
-        data_type,
-        show_alarm,
-        category_id
-        from sys_standard_parameters
-    </sql>
-
-    <select id="selectSysStandardParametersList" parameterType="SysStandardParameters" resultMap="SysStandardParametersResult">
-        <include refid="selectSysStandardParametersVo"/>
-        <where>
-            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
-            <if test="configInfo != null  and configInfo != ''"> and config_info like concat('%', #{configInfo}, '%')</if>
-            <if test="code != null  and code != ''"> and code like concat('%', #{code}, '%')</if>
-            <if test="dataType != null  and dataType != ''"> and data_type like concat('%', #{dataType}, '%')</if>
-            <if test="showAlarm != null  and showAlarm != ''"> and show_alarm like concat('%', #{showAlarm}, '%')</if>
-            <if test="id != null  and id != ''"> and id = #{id}</if>
-        </where>
-        order by create_time desc
-    </select>
-
-    <select id="selectSysStandardParametersById" parameterType="String" resultMap="SysStandardParametersResult">
-        <include refid="selectSysStandardParametersVo"/>
-        where id = #{id}
-    </select>
-
-    <insert id="insertSysStandardParameters" parameterType="SysStandardParameters">
-        insert into sys_standard_parameters
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="name != null  and name != ''">name,</if>
-            <if test="configInfo != null  and configInfo != ''">config_info,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="updateBy != null  and updateBy != ''">update_by,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="remark != null  and remark != ''">remark,</if>
-            <if test="code != null  and code != ''">code,</if>
-            <if test="dataType != null  and dataType != ''">data_type,</if>
-            <if test="showAlarm != null ">show_alarm,</if>
-            <if test="categoryId != null ">category_id,</if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="name != null  and name != ''">#{name},</if>
-            <if test="configInfo != null  and configInfo != ''">#{configInfo},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="remark != null  and remark != ''">#{remark},</if>
-            <if test="code != null  and code != ''">#{code},</if>
-            <if test="dataType != null  and dataType != ''">#{dataType},</if>
-            <if test="showAlarm != null ">#{showAlarm},</if>
-            <if test="categoryId != null ">#{categoryId},</if>
-        </trim>
-    </insert>
-
-    <update id="updateSysStandardParameters" parameterType="SysStandardParameters">
-        update sys_standard_parameters
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="name != null  and name != ''">name = #{name},</if>
-            <if test="configInfo != null  and configInfo != ''">config_info = #{configInfo},</if>
-            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="remark != null  and remark != ''">remark = #{remark},</if>
-            <if test="code != null  and code != ''">code = #{code},</if>
-            <if test="dataType != null  and dataType != ''">data_type = #{dataType},</if>
-            <if test="showAlarm != null ">show_alarm = #{showAlarm},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteSysStandardParametersById" parameterType="String">
-        delete from sys_standard_parameters where id = #{id}
-    </delete>
-
-    <delete id="deleteSysStandardParametersByIds" parameterType="String">
-        delete from sys_standard_parameters where id in
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    <select id="getStandardParameters" parameterType="SysStandardParameters" resultMap="SysStandardParametersResult">
-        SELECT
-            s.ID,
-            s.NAME,
-            s.config_info
-        FROM
-            sys_standard_parameters s
-            LEFT JOIN model_node n ON s.ID = node_id
-        WHERE
-            s.id =#{id}
-    </select>
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/benchmarking/BenchmarkingManagementMapper.xml b/energy_management_server/src/main/resources/mybatis/benchmarking/BenchmarkingManagementMapper.xml
deleted file mode 100644
index 63939e6..0000000
--- a/energy_management_server/src/main/resources/mybatis/benchmarking/BenchmarkingManagementMapper.xml
+++ /dev/null
@@ -1,160 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.benchmarking.mapper.BenchmarkingManagementMapper">
-    
-    <resultMap type="BenchmarkingManagement" id="BenchmarkingManagementResult">
-        <result property="indexId"    column="index_id"    />
-        <result property="indexName"    column="index_name"    />
-        <result property="indexCode"    column="index_code"    />
-        <result property="unitId"    column="unit_id"    />
-        <result property="timeType"    column="time_type"    />
-        <result property="dateTime"    column="date_time"    />
-        <result property="value"    column="value"    />
-        <result property="timeCode"    column="time_code"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="actualValue"    column="actual_value"    />
-        <result property="benchmarkingRange"    column="benchmarking_range"    />
-        <result property="benchmarkingType"    column="benchmarking_type"    />
-    </resultMap>
-
-    <sql id="selectBenchmarkingManagementVo">
-        SELECT
-            e.index_id,
-            e.name as index_name,
-            e.code as index_code,
-            e.unit_id,
-            bm.time_type,
-            bm.date_time,
-            bm."value",
-            bm.time_code,
-            bm.actual_value,
-            benchmarking_range,
-            benchmarking_type
-        FROM
-            energy_index e
-            LEFT JOIN benchmarking_management bm ON bm.index_id = e.index_id
-    </sql>
-
-    <select id="selectBenchmarkingManagementList" parameterType="BenchmarkingManagement" resultMap="BenchmarkingManagementResult">
-        <include refid="selectBenchmarkingManagementVo"/>
-        <where>
-            e.index_id in <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
-            <if test="timeCode != null  and timeCode !=''"> AND bm.time_code = #{timeCode}</if>
-        </where>
-    </select>
-    <select id="selectBenchmarkingList" parameterType="BenchmarkingManagement" resultMap="BenchmarkingManagementResult">
-        SELECT
-            e.index_id,
-            e.name as index_name,
-            e.code as index_code,
-            e.unit_id
-        FROM
-            energy_index e
-         where e.index_id in <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
-    </select>
-
-    <insert id="save">
-        insert into benchmarking_management (index_id,
-        time_code,
-        time_type,
-        value,
-        actual_value,
-        date_time,
-        benchmarking_range,
-        benchmarking_type,
-        create_time)
-        select #{benchmarkingManagement.indexId},
-        #{benchmarkingManagement.timeCode},
-        #{benchmarkingManagement.timeType},
-        #{benchmarkingManagement.value,jdbcType = DOUBLE},
-        #{benchmarkingManagement.actualValue,jdbcType = DOUBLE},
-        #{benchmarkingManagement.dateTime},
-        #{benchmarkingManagement.benchmarkingRange},
-        #{benchmarkingManagement.benchmarkingType},
-        now()
-        on conflict
-        (index_id,time_code)
-        do update
-        set
-        <if test="benchmarkingManagement.value != null  and benchmarkingManagement.value != ''"> value = #{benchmarkingManagement.value, jdbcType = DOUBLE},</if>
-        <if test="benchmarkingManagement.actualValue != null  and benchmarkingManagement.actualValue != ''"> actual_value = #{benchmarkingManagement.actualValue, jdbcType = DOUBLE},</if>
-        benchmarking_range=#{benchmarkingManagement.benchmarkingRange},
-        benchmarking_type=#{benchmarkingManagement.benchmarkingType},
-        update_time = now();
-    </insert>
-
-
-
-    <select id="selectBenchmarkingManagementById" parameterType="String" resultMap="BenchmarkingManagementResult">
-        SELECT
-            bm.time_type,
-            bm.date_time,
-            bm."value",
-            bm.time_code,
-            bm.actual_value,
-            benchmarking_range,
-            benchmarking_type
-        FROM
-           benchmarking_management bm
-        where bm.index_id = #{indexId}
-    </select>
-
-    <insert id="insertBenchmarkingManagement" parameterType="BenchmarkingManagement">
-        insert into benchmarking_management
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="indexId != null  and indexId != ''">index_id,</if>
-            <if test="timeType != null  and timeType != ''">time_type,</if>
-            <if test="dateTime != null ">date_time,</if>
-            <if test="value != null  and value != ''">value,</if>
-            <if test="timeCode != null  and timeCode != ''">time_code,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="actualValue != null  and actualValue != ''">actual_value,</if>
-            <if test="benchmarkingRange != null ">benchmarking_range,</if>
-            <if test="benchmarkingType != null ">benchmarking_type,</if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="indexId != null  and indexId != ''">#{indexId},</if>
-            <if test="timeType != null  and timeType != ''">#{timeType},</if>
-            <if test="dateTime != null ">#{dateTime},</if>
-            <if test="value != null  and value != ''">#{value},</if>
-            <if test="timeCode != null  and timeCode != ''">#{timeCode},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="actualValue != null  and actualValue != ''">#{actualValue},</if>
-            <if test="benchmarkingRange != null ">#{benchmarkingRange},</if>
-            <if test="benchmarkingType != null ">#{benchmarkingType},</if>
-        </trim>
-    </insert>
-
-    <update id="updateBenchmarkingManagement" parameterType="BenchmarkingManagement">
-        update benchmarking_management
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="timeType != null  and timeType != ''">time_type = #{timeType},</if>
-            <if test="dateTime != null ">date_time = #{dateTime},</if>
-            <if test="value != null  and value != ''">value = #{value},</if>
-            <if test="timeCode != null  and timeCode != ''">time_code = #{timeCode},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="actualValue != null  and actualValue != ''">actual_value = #{actualValue},</if>
-            <if test="benchmarkingRange != null ">benchmarking_range = #{benchmarkingRange},</if>
-            <if test="benchmarkingType != null ">benchmarking_type = #{benchmarkingType},</if>
-        </trim>
-        where index_id = #{indexId}
-    </update>
-
-    <delete id="deleteBenchmarkingManagementById" parameterType="String">
-        delete from benchmarking_management where index_id = #{indexId}
-    </delete>
-
-    <delete id="deleteBenchmarkingManagementByIds" parameterType="String">
-        delete from benchmarking_management where index_id in
-        <foreach item="indexId" collection="array" open="(" separator="," close=")">
-            #{indexId}
-        </foreach>
-    </delete>
-    
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/benchmarking/PhaseBenchmarkingMapper.xml b/energy_management_server/src/main/resources/mybatis/benchmarking/PhaseBenchmarkingMapper.xml
deleted file mode 100644
index ca66b60..0000000
--- a/energy_management_server/src/main/resources/mybatis/benchmarking/PhaseBenchmarkingMapper.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.benchmarking.mapper.PhaseBenchmarkingMapper">
-    
-    <resultMap type="com.dingzhuo.energy.project.benchmarking.domain.BenchmarkingManagement" id="PhaseBenchmarkingResult">
-        <result property="indexId"    column="index_id"    />
-        <result property="indexName"    column="index_name"    />
-        <result property="indexCode"    column="index_code"    />
-        <result property="unitId"    column="unit_id"    />
-        <result property="timeType"    column="time_type"    />
-        <result property="dateTime"    column="date_time"    />
-        <result property="value"    column="value"    />
-        <result property="timeCode"    column="time_code"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="actualValue"    column="actual_value"    />
-        <result column="begin_time" property="beginTime"/>
-        <result column="end_time" property="endTime"/>
-    </resultMap>
-
-    <sql id="selectPhaseBenchmarkingVo">
-        SELECT
-            e.index_id,
-            e.name as index_name,
-            e.code as index_code,
-            e.unit_id,
-            bm.time_type,
-            bm.date_time,
-            bm."value",
-            bm.time_code,
-            bm.actual_value
-        FROM
-            energy_index e
-            LEFT JOIN benchmarking_management bm ON bm.index_id = e.index_id
-    </sql>
-
-    <select id="selectPhaseBenchmarkingList" parameterType="com.dingzhuo.energy.project.benchmarking.domain.BenchmarkingManagement" resultMap="PhaseBenchmarkingResult">
-        <include refid="selectPhaseBenchmarkingVo"/>
-        <where>
-            e.index_id =#{indexId}
-            AND bm.time_type = #{timeType}
-            AND bm.date_time &gt;= #{beginTime}
-            AND bm.date_time &lt;= #{endTime}
-        </where>
-    </select>
-    <select id="selectRealTimeListrealTime" parameterType="com.dingzhuo.energy.project.benchmarking.domain.BenchmarkingManagement" resultMap="PhaseBenchmarkingResult">
-        <include refid="selectPhaseBenchmarkingVo"/>
-        <where>
-            e.index_id in <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
-            <if test="timeCode != null  and timeCode !=''"> AND bm.time_code = #{timeCode}</if>
-        </where>
-    </select>
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/comprehensiveStatistics/comprehensiveStatisticsMapper.xml b/energy_management_server/src/main/resources/mybatis/comprehensiveStatistics/comprehensiveStatisticsMapper.xml
deleted file mode 100644
index 38148a8..0000000
--- a/energy_management_server/src/main/resources/mybatis/comprehensiveStatistics/comprehensiveStatisticsMapper.xml
+++ /dev/null
@@ -1,172 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.comprehensiveStatistics.mapper.comprehensiveStatisticsMapper">
-    <resultMap id="dataItemMap" type="com.dingzhuo.energy.project.comprehensiveStatistics.domain.comprehensiveStatistics">
-        <id column="index_id" property="indexId"/>
-        <id column="time_code" property="timeCode"/>
-        <id column="index_code" property="indexCode"/>
-        <id column="index_name" property="indexName"/>
-        <result column="begin_time" property="beginTime"/>
-        <result column="end_time" property="endTime"/>
-        <result column="data_time" property="dataTime"/>
-        <result column="value" property="value"/>
-        <result column="time_type" property="timeType"/>
-        <result column="quality" property="quality"/>
-        <result column="unit_id" property="unitId"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="remark" property="remark"/>
-        <result column="name" property="name"/>
-        <result column="index_type" property="indexType"/>
-        <result column="facility_name" property="facilityName"/>
-    </resultMap>
-    <resultMap id="comprehensiveMap" type="com.dingzhuo.energy.project.comprehensiveStatistics.domain.comprehensive">
-        <result column="index_id" property="indexId"/>
-        <result column="index_name" property="indexName"/>
-        <result column="time_type" property="timeType"/>
-        <result column="value1" property="value1"/>
-        <result column="value2" property="value2"/>
-        <result column="value3" property="value3"/>
-        <result column="value4" property="value4"/>
-        <result column="value5" property="value5"/>
-        <result column="value6" property="value6"/>
-        <result column="value7" property="value7"/>
-        <result column="value8" property="value8"/>
-        <result column="value9" property="value9"/>
-        <result column="value10" property="value10"/>
-        <result column="value11" property="value11"/>
-        <result column="value12" property="value12"/>
-        <result column="value13" property="value13"/>
-        <result column="value14" property="value14"/>
-        <result column="value15" property="value15"/>
-        <result column="value16" property="value16"/>
-        <result column="value17" property="value17"/>
-        <result column="value18" property="value18"/>
-        <result column="value19" property="value19"/>
-        <result column="value20" property="value20"/>
-        <result column="value21" property="value21"/>
-        <result column="value22" property="value22"/>
-        <result column="value23" property="value23"/>
-        <result column="value24" property="value24"/>
-        <result column="value25" property="value25"/>
-        <result column="value26" property="value26"/>
-        <result column="value27" property="value27"/>
-        <result column="value28" property="value28"/>
-        <result column="value29" property="value29"/>
-        <result column="value30" property="value30"/>
-        <result column="value31" property="value31"/>
-    </resultMap>
-
-    <sql id="itemHead">
-        SELECT di.index_id,
-               di.time_code,
-               di.time_type,
-               di.begin_time,
-               di.end_time,
-               di.data_time,
-               di.value,
-               di.quality,
-               di.create_time,
-               di.update_time,
-               ci.code AS "index_code",
-               ci.name AS "index_name",
-               ci.unit_id AS unitId,
-               f.facility_name AS facilityName
-        FROM data_item di
-               LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-               LEFT JOIN facility_archives f ON f."id"=ci.equipment
-    </sql>
-    <select id="getStatisticsEnergy" resultType="com.dingzhuo.energy.basic.data.enerInfoManage.domain.SysEnergy">
-        select enerid, enersno, enername,( SELECT d.dict_label FROM sys_dict_data d WHERE dict_type = 'sys_unit' AND d.dict_code	= e.muid) muidName
-        from sys_energy e
-               left join node_energy ne on e.enerid = ne.energy_id
-        where ne.node_id = #{nodeId};
-    </select>
-    <select id="getDatasByIndex" resultMap="dataItemMap">
-        SELECT
-            e.NAME,
-            e.index_code,
-            di.index_id,
-            di.time_code,
-            di.time_type,
-            di.begin_time,
-            di.end_time,
-            di.data_time,
-            di.VALUE,
-            di.quality,
-            di.create_time,
-            di.update_time
-        FROM
-            data_item di
-            LEFT JOIN energy_statistics e ON di.index_id = e.index_id
-        where di.time_code = #{timeCode}
-            AND di.index_id in
-            <foreach item="indexId" index="index" collection="indexIds" open="(" separator="," close=")">
-                #{indexId}
-            </foreach>
-    </select>
-    <select id="getEnergyByIndex" resultMap="dataItemMap">
-       select "name",index_id from  energy_statistics where index_type=#{indexType}
-    </select>
-    <select id="getFacilityArchives" resultType="com.dingzhuo.energy.basic.data.facility.domain.FacilityArchives">
-        SELECT ID,code,facility_name AS facilityName FROM facility_archives
-    </select>
-
-    <select id="getDatasIndex" resultMap="dataItemMap">
-        SELECT di.index_id,
-        di.time_code,
-        di.time_type,
-        di.begin_time,
-        di.end_time,
-        di.data_time,
-        di.value,
-        di.quality,
-        di.create_time,
-        di.update_time,
-        ci.code AS "index_code",
-        ci.name AS "index_name",
-        ci.unit_id AS unitId,
-        f.facility_name AS "facility_name"
-        FROM data_item di
-        LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        LEFT JOIN facility_archives f ON f."id"=ci.equipment
-        where di.time_code = #{timeCode}
-        AND di.index_id in
-        <foreach item="indexId" index="index" collection="indexIds"
-                 open="(" separator="," close=")">
-            #{indexId}
-        </foreach>
-         and ci.equipment is not null
-        ORDER BY di."value" desc
-    </select>
-
-    <select id="getDatasByList" resultMap="dataItemMap">
-        SELECT
-            e.NAME,
-            e.index_code,
-            di.index_id,
-            di.time_code,
-            di.time_type,
-            di.begin_time,
-            di.end_time,
-            di.data_time,
-            di.VALUE,
-            di.quality,
-            di.create_time,
-            di.update_time
-        FROM
-            data_item di
-            LEFT JOIN energy_statistics e ON di.index_id = e.index_id
-        where di.time_type = #{timeType}
-            AND di.data_time &gt;= #{beginTime}
-            AND di.data_time &lt; #{endTime}
-            AND di.index_id in
-            <foreach item="indexId" index="index" collection="indexIds"
-                     open="(" separator="," close=")">
-                #{indexId}
-            </foreach>
-        ORDER BY di."value" desc
-    </select>
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/comprehensiveStatistics/dailyComprehensiveMapper.xml b/energy_management_server/src/main/resources/mybatis/comprehensiveStatistics/dailyComprehensiveMapper.xml
deleted file mode 100644
index ee17e4c..0000000
--- a/energy_management_server/src/main/resources/mybatis/comprehensiveStatistics/dailyComprehensiveMapper.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.comprehensiveStatistics.mapper.dailyComprehensiveMapper">
-    <resultMap id="dataItemMap" type="com.dingzhuo.energy.project.comprehensiveStatistics.domain.dailyComprehensive">
-        <result column="index_id" property="indexId"/>
-        <result column="index_name" property="indexName"/>
-        <result column="time_type" property="timeType"/>
-        <result column="time_code" property="timeCode"/>
-        <result column="unit_id" property="unitId"/>
-        <result column="value1" property="value1"/>
-        <result column="value2" property="value2"/>
-        <result column="value3" property="value3"/>
-        <result column="value4" property="value4"/>
-        <result column="value5" property="value5"/>
-        <result column="value6" property="value6"/>
-        <result column="value7" property="value7"/>
-        <result column="value8" property="value8"/>
-        <result column="value9" property="value9"/>
-        <result column="value10" property="value10"/>
-        <result column="value11" property="value11"/>
-        <result column="value12" property="value12"/>
-        <result column="value13" property="value13"/>
-        <result column="value14" property="value14"/>
-        <result column="value15" property="value15"/>
-        <result column="value16" property="value16"/>
-        <result column="value17" property="value17"/>
-        <result column="value18" property="value18"/>
-        <result column="value19" property="value19"/>
-        <result column="value20" property="value20"/>
-        <result column="value21" property="value21"/>
-        <result column="value22" property="value22"/>
-        <result column="value23" property="value23"/>
-        <result column="value0" property="value0"/>
-    </resultMap>
-    <!--鍏ㄥ巶鑳借�楃粺璁�-->
-    <select id="getdailyComprehensiveList" resultMap="dataItemMap">
-        SELECT
-            aa.index_id,
-            aa.index_name,
-            <foreach item="item" index="index" collection="dataList">
-                COALESCE ( MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ), null ) AS ${item.value},
-            </foreach>
-            aa.time_type,
-            aa.order_num orderNum
-        FROM
-            (
-            SELECT
-                ni.index_id,
-                ei."name" AS "index_name",
-                di."value",
-                di.data_time,
-                di.time_type,
-                mn.order_num
-            FROM
-                model_node mn
-                LEFT JOIN node_index ni ON ni.node_id = mn.node_id
-                LEFT JOIN energy_index ei ON ei.index_id = ni.index_id
-                LEFT JOIN data_item di ON ni.index_id = di.index_id
-            WHERE
-                mn.parent_id = #{nodeId}
-                AND di.data_time >= #{beginTime}
-                AND di.data_time &lt; #{endTime}
-                AND di.time_type = #{timeType}
-                <if test="indexStorageId !='' and indexStorageId !=null">
-                    and ei.energy_id=#{indexStorageId}
-                </if>
-            ) aa
-        GROUP BY
-            aa.index_id, aa.index_name, aa.time_type, aa.order_num
-        ORDER BY aa.order_num ASC
-    </select>
-
-    <select id="getListChart" resultMap="dataItemMap">
-        SELECT
-            di.index_id,
-            ci.name AS "index_name",
-            ci.unit_id,
-            di."value",
-            di.data_time,
-            di.time_type,
-            di.time_code
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        WHERE
-            di.index_id =#{indexId}
-            AND di.data_time &lt; #{endTime}
-            AND di.data_time >= #{beginTime}
-            AND di.time_type = #{timeType}
-        ORDER BY data_time ASC
-    </select>
-</mapper>
diff --git a/energy_management_server/src/main/resources/mybatis/comprehensiveStatistics/monthlyComprehensiveMapper.xml b/energy_management_server/src/main/resources/mybatis/comprehensiveStatistics/monthlyComprehensiveMapper.xml
deleted file mode 100644
index 719b03a..0000000
--- a/energy_management_server/src/main/resources/mybatis/comprehensiveStatistics/monthlyComprehensiveMapper.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.comprehensiveStatistics.mapper.monthlyComprehensiveMapper">
-    <resultMap id="dataItemMap" type="com.dingzhuo.energy.project.comprehensiveStatistics.domain.monthlyComprehensive">
-        <result column="index_id" property="indexId"/>
-        <result column="index_name" property="indexName"/>
-        <result column="time_type" property="timeType"/>
-        <result column="time_code" property="timeCode"/>
-        <result column="unit_id" property="unitId"/>
-        <result column="value1" property="value1"/>
-        <result column="value2" property="value2"/>
-        <result column="value3" property="value3"/>
-        <result column="value4" property="value4"/>
-        <result column="value5" property="value5"/>
-        <result column="value6" property="value6"/>
-        <result column="value7" property="value7"/>
-        <result column="value8" property="value8"/>
-        <result column="value9" property="value9"/>
-        <result column="value10" property="value10"/>
-        <result column="value11" property="value11"/>
-        <result column="value12" property="value12"/>
-        <result column="value13" property="value13"/>
-        <result column="value14" property="value14"/>
-        <result column="value15" property="value15"/>
-        <result column="value16" property="value16"/>
-        <result column="value17" property="value17"/>
-        <result column="value18" property="value18"/>
-        <result column="value19" property="value19"/>
-        <result column="value20" property="value20"/>
-        <result column="value21" property="value21"/>
-        <result column="value22" property="value22"/>
-        <result column="value23" property="value23"/>
-        <result column="value24" property="value24"/>
-        <result column="value25" property="value25"/>
-        <result column="value26" property="value26"/>
-        <result column="value27" property="value27"/>
-        <result column="value28" property="value28"/>
-        <result column="value29" property="value29"/>
-        <result column="value30" property="value30"/>
-        <result column="value31" property="value31"/>
-    </resultMap>
-    <!--鍏ㄥ巶鑳借�楃粺璁�-->
-    <select id="getMonthlyComprehensiveList" resultMap="dataItemMap">
-        SELECT
-            aa.index_id,
-            aa.index_name,
-        <foreach item="item" index="index" collection="dataList">
-            COALESCE ( MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ), null ) AS ${item.value},
-        </foreach>
-            aa.time_type,
-            aa.order_num orderNum
-        FROM
-        (
-            SELECT
-                ni.index_id,
-                ei."name" AS "index_name",
-                di."value",
-                di.data_time,
-                di.time_type,
-                mn.order_num
-            FROM
-                model_node mn
-                LEFT JOIN node_index ni ON ni.node_id = mn.node_id
-                LEFT JOIN energy_index ei ON ei.index_id = ni.index_id
-                LEFT JOIN data_item di ON ni.index_id = di.index_id
-            WHERE
-                mn.parent_id = #{nodeId}
-                AND di.data_time >= #{beginTime}
-                AND di.data_time &lt;= #{endTime}
-                AND di.time_type = #{timeType}
-            <if test="indexStorageId !='' and indexStorageId !=null">
-                and ei.energy_id=#{indexStorageId}
-            </if>
-        ) aa
-        GROUP BY
-        aa.index_id, aa.index_name, aa.time_type, aa.order_num
-        ORDER BY aa.order_num ASC
-    </select>
-
-    <select id="getListChart" resultMap="dataItemMap">
-        SELECT
-            di.index_id,
-            ci.name AS "index_name",
-            ci.unit_id,
-            di."value",
-            di.data_time,
-            di.time_type,
-            di.time_code
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        WHERE
-            di.index_id =#{indexId}
-            AND di.data_time &lt;= #{endTime}
-            AND di.data_time >= #{beginTime}
-            AND di.time_type = #{timeType}
-        ORDER BY
-            di.time_code;
-    </select>
-</mapper>
diff --git a/energy_management_server/src/main/resources/mybatis/comprehensiveStatistics/yearComprehensiveMapper.xml b/energy_management_server/src/main/resources/mybatis/comprehensiveStatistics/yearComprehensiveMapper.xml
deleted file mode 100644
index 6de84ef..0000000
--- a/energy_management_server/src/main/resources/mybatis/comprehensiveStatistics/yearComprehensiveMapper.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.comprehensiveStatistics.mapper.yearComprehensiveMapper">
-    <resultMap id="dataItemMap" type="com.dingzhuo.energy.project.comprehensiveStatistics.domain.yearComperhensive">
-        <result column="index_id" property="indexId"/>
-        <result column="index_name" property="indexName"/>
-        <result column="time_type" property="timeType"/>
-        <result column="time_code" property="timeCode"/>
-        <result column="unit_id" property="unitId"/>
-        <result column="value1" property="value1"/>
-        <result column="value2" property="value2"/>
-        <result column="value3" property="value3"/>
-        <result column="value4" property="value4"/>
-        <result column="value5" property="value5"/>
-        <result column="value6" property="value6"/>
-        <result column="value7" property="value7"/>
-        <result column="value8" property="value8"/>
-        <result column="value9" property="value9"/>
-        <result column="value10" property="value10"/>
-        <result column="value11" property="value11"/>
-        <result column="value12" property="value12"/>
-    </resultMap>
-    <!--鍏ㄥ巶鑳借�楃粺璁�-->
-    <select id="getYearComprehensiveList" resultMap="dataItemMap">
-        SELECT
-            aa.index_id,
-            aa.index_name,
-            <foreach item="item" index="index" collection="dataList">
-                COALESCE ( MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ), null ) AS ${item.value},
-            </foreach>
-            aa.time_type,
-            aa.order_num orderNum
-        FROM
-        (
-            SELECT
-                ni.index_id,
-                ei."name" AS "index_name",
-                di."value",
-                di.data_time,
-                di.time_type,
-                mn.order_num
-            FROM
-                model_node mn
-                LEFT JOIN node_index ni ON ni.node_id = mn.node_id
-                LEFT JOIN energy_index ei ON ei.index_id = ni.index_id
-                LEFT JOIN data_item di ON ni.index_id = di.index_id
-            WHERE
-                mn.parent_id = #{nodeId}
-                AND di.data_time >= #{beginTime}
-                AND di.data_time &lt;= #{endTime}
-                AND di.time_type = #{timeType}
-            <if test="indexStorageId !='' and indexStorageId !=null">
-                and ei.energy_id=#{indexStorageId}
-            </if>
-        ) aa
-        GROUP BY aa.index_id, aa.index_name, aa.time_type, aa.order_num
-        ORDER BY aa.order_num ASC
-    </select>
-
-    <select id="getListChart" resultMap="dataItemMap">
-        SELECT
-            di.index_id,
-            ci.name AS "index_name",
-            ci.unit_id,
-            di."value",
-            di.data_time,
-            di.time_type,
-            di.time_code
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        WHERE
-            di.index_id =#{indexId}
-            AND di.data_time &lt; #{endTime}
-            AND di.data_time >= #{beginTime}
-            AND di.time_type = #{timeType}
-        ORDER BY
-            di.time_code;
-    </select>
-</mapper>
diff --git a/energy_management_server/src/main/resources/mybatis/conglomeratepush/ConglomeratePushLogMapper.xml b/energy_management_server/src/main/resources/mybatis/conglomeratepush/ConglomeratePushLogMapper.xml
deleted file mode 100644
index d477d58..0000000
--- a/energy_management_server/src/main/resources/mybatis/conglomeratepush/ConglomeratePushLogMapper.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.conglomeratepush.mapper.ConglomeratePushLogMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="orderMiningSendResultMap" type="com.dingzhuo.energy.project.conglomeratepush.domain.ConglomeratePushLog">
-        <result column="id" property="id"/>
-        <result column="push_time" property="pushTime"/>
-        <result column="push_content" property="pushContent"/>
-        <result column="push_status" property="pushStatus"/>
-        <result column="push_result" property="pushResult"/>
-        <result column="push_count" property="pushCount"/>
-        <result column="error_info" property="errorInfo"/>
-    </resultMap>
-
-    <insert id="saveLog" parameterType="ConglomeratePushLog">
-        insert into conglomerate_push_log
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="pushTime != null ">push_time,</if>
-            <if test="pushContent != null  and pushContent != ''">push_content,</if>
-            <if test="pushStatus != null ">push_status,</if>
-            <if test="pushResult != null ">push_result,</if>
-            <if test="pushCount != null  and pushCount != ''">push_count,</if>
-            <if test="errorInfo != null  and errorInfo != ''">error_info,</if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="pushTime != null ">#{pushTime},</if>
-            <if test="pushContent != null  and pushContent != ''">#{pushContent},</if>
-            <if test="pushStatus != null ">#{pushStatus},</if>
-            <if test="pushResult != null ">#{pushResult},</if>
-            <if test="pushCount != null  and pushCount != ''">#{pushCount},</if>
-            <if test="errorInfo != null  and errorInfo != ''">#{errorInfo},</if>
-        </trim>
-    </insert>
-
-</mapper>
diff --git a/energy_management_server/src/main/resources/mybatis/dataEntry/DataItemMapper.xml b/energy_management_server/src/main/resources/mybatis/dataEntry/DataItemMapper.xml
deleted file mode 100644
index 7e033ae..0000000
--- a/energy_management_server/src/main/resources/mybatis/dataEntry/DataItemMapper.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.dataEntry.mapper.DataItemMapper">
-    <resultMap type="stagseDataEntry" id="stagseDataEntryResult">
-        <result property="code" column="code"/>
-        <result property="name" column="name"/>
-        <result property="indexId" column="index_id"/>
-        <result property="timeType" column="time_type"/>
-        <result property="unitId" column="unit_id"/>
-        <result property="calcType" column="calc_type"/>
-        <result property="value" column="value"/>
-        <result property="timeCode" column="time_code"/>
-        <result property="dataTime" column="data_time"/>
-    </resultMap>
-
-    <select id="getSettingIndex" parameterType="stagseDataEntry" resultMap="stagseDataEntryResult">
-
-        SELECT
-        ei.index_id,
-        code,
-        NAME,
-        si.time_type,
-        ei.unit_id
-        FROM
-        energy_index ei
-        LEFT JOIN node_index ni ON ei.index_id = ni.index_id
-        LEFT JOIN index_storage si ON si.index_id = ei.index_id
-        WHERE
-        not EXISTS ( SELECT index_id FROM data_item WHERE index_id =ei.index_id and  data_time >= #{beginTime} AND data_time &lt;= #{endTime}) AND
-        ni.node_id =  #{nodeId}
-        and si.time_type = #{timeType}
-        AND si.calc_type = #{calcType}
-   </select>
-    <select id="getSettingEdit" parameterType="stagseDataEntry" resultMap="stagseDataEntryResult">
-        SELECT
-            ei.index_id,
-            code,
-            NAME,
-            si.time_type,
-            ei.unit_id,
-            di.value,
-            di.data_time
-        FROM
-            energy_index ei
-            LEFT JOIN node_index ni ON ei.index_id = ni.index_id
-            LEFT JOIN index_storage si ON si.index_id = ei.index_id
-            LEFT JOIN data_item di on di.index_id=ei.index_id
-        WHERE
-            ni.node_id = #{nodeId}
-            and si.time_type = #{timeType}
-            AND si.calc_type = #{calcType}
-            AND data_time &gt;= #{beginTime}
-            AND data_time &lt;= #{endTime}
-    </select>
-    <select id="stagseDataByCode" parameterType="stagseDataEntry" resultMap="stagseDataEntryResult">
-        SELECT
-            ei.index_id,
-            code,
-            NAME,
-            ei.unit_id,
-            di.value,
-            di.data_time,
-            di.time_type
-        FROM
-            energy_index ei
-            LEFT JOIN node_index ni ON ei.index_id = ni.index_id
-            LEFT JOIN data_item di on di.index_id=ei.index_id
-        WHERE
-            ni.node_id = #{nodeId}
-            and ei.code IN
-            <foreach item="indexCode" index="index" collection="indexCodes"
-                     open="(" separator="," close=")">
-                #{indexCode}
-            </foreach>
-            and di.time_type = #{timeType}
-            AND di.data_time &gt;= #{beginTime}
-            AND di.data_time &lt;= #{endTime}
-    </select>
-
-    <select id="getDataItemHourInforByIndexIds" resultType="com.dingzhuo.energy.dataservice.domain.DataItem">
-        SELECT
-            index_id indexId,
-            data_time dataTime,
-            "value"
-        FROM
-            "data_item"
-        WHERE
-            index_id IN
-        <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
-            #{indexId}
-        </foreach>
-            AND ( begin_time BETWEEN #{beginTime} AND #{endTime} )
-            AND time_type = #{timeType}
-    </select>
-
-    <select id="getDataItemInforByIndexIds" resultType="com.dingzhuo.energy.dataservice.domain.DataItem">
-        SELECT
-            index_id indexId,
-            begin_time beginTime,
-            "value"
-        FROM
-            "data_item"
-        WHERE
-            index_id IN
-            <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
-                #{indexId}
-            </foreach>
-            AND time_code = #{timeCode}
-    </select>
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/electricityPrice/ElectricityPriceMapper.xml b/energy_management_server/src/main/resources/mybatis/electricityPrice/ElectricityPriceMapper.xml
deleted file mode 100644
index f8d0021..0000000
--- a/energy_management_server/src/main/resources/mybatis/electricityPrice/ElectricityPriceMapper.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.electricity.mapper.ElectricityPriceMapper">
-
-    <resultMap type="ElectricityPrice" id="ElectricityPriceResult">
-        <result property="id"    column="id"    />
-        <result property="effectiveDate"    column="effective_date"    />
-        <result property="priceId"    column="price_id"    />
-        <result property="beginDate"    column="begin_date"    />
-        <result property="endDate"    column="end_date"    />
-        <result property="effectiveName"    column="effective_name"    />
-    </resultMap>
-
-    <sql id="selectElectricityPriceVo">
-        select id, effective_date, price_id, begin_date, end_date, effective_name from electricity_price
-    </sql>
-
-    <select id="selectElectricityPriceList" parameterType="ElectricityPrice" resultMap="ElectricityPriceResult">
-        select e.id, e.effective_date,e.price_id,
-                e.begin_date,
-                e.end_date,
-                e.effective_name,
-                t.price
-        from electricity_price e LEFT JOIN time_period_price t ON e.price_id=t.id
-        <where> 1=1
-            <if test="effectiveName != null  and effectiveName != ''"> and e.effective_name like concat('%', #{effectiveName}, '%')</if>
-            <if test="effectiveDate != null "> and e.effective_date = #{effectiveDate}</if>
-        </where>
-        order by effective_date desc
-    </select>
-
-    <select id="selectElectricityPriceById" parameterType="String" resultMap="ElectricityPriceResult">
-        <include refid="selectElectricityPriceVo"/>
-        where id = #{id}
-    </select>
-
-    <insert id="insertElectricityPrice" parameterType="ElectricityPrice">
-        insert into electricity_price
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="effectiveDate != null ">effective_date,</if>
-            <if test="priceId != null  and priceId != ''">price_id,</if>
-            <if test="beginDate != null ">begin_date,</if>
-            <if test="endDate != null ">end_date,</if>
-            <if test="effectiveName != null  and effectiveName != ''">effective_name,</if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="effectiveDate != null ">#{effectiveDate},</if>
-            <if test="priceId != null  and priceId != ''">#{priceId},</if>
-            <if test="beginDate != null ">#{beginDate},</if>
-            <if test="endDate != null ">#{endDate},</if>
-            <if test="effectiveName != null  and effectiveName != ''">#{effectiveName},</if>
-        </trim>
-    </insert>
-
-    <update id="updateElectricityPrice" parameterType="ElectricityPrice">
-        update electricity_price
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="effectiveDate != null ">effective_date = #{effectiveDate},</if>
-            <if test="priceId != null  and priceId != ''">price_id = #{priceId},</if>
-            <if test="beginDate != null ">begin_date = #{beginDate},</if>
-            <if test="endDate != null ">end_date = #{endDate},</if>
-            <if test="effectiveName != null  and effectiveName != ''">effective_name = #{effectiveName},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteElectricityPriceById" parameterType="String">
-        delete from electricity_price where id = #{id}
-    </delete>
-
-    <delete id="deleteElectricityPriceByIds" parameterType="String">
-        delete from electricity_price where id in
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    <!--鐢熸晥鏃ユ湡-->
-    <select id="selectList" parameterType="ElectricityPrice" resultMap="ElectricityPriceResult">
-        select distinct effective_date from electricity_price
-        <where>
-            <if test="effectiveName != null  and effectiveName != ''"> and effective_name like concat('%', #{effectiveName}, '%')</if>
-        </where>
-        order by effective_date desc
-    </select>
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/electricityPrice/TimePeriodPriceMapper.xml b/energy_management_server/src/main/resources/mybatis/electricityPrice/TimePeriodPriceMapper.xml
deleted file mode 100644
index 9872d73..0000000
--- a/energy_management_server/src/main/resources/mybatis/electricityPrice/TimePeriodPriceMapper.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.electricity.mapper.TimePeriodPriceMapper">
-    
-    <resultMap type="TimePeriodPrice" id="TimePeriodPriceResult">
-        <result property="id"    column="id"    />
-        <result property="effectiveDate"    column="effective_date"    />
-        <result property="timePeriod"    column="time_period"    />
-        <result property="price"    column="price"    />
-        <result property="dictType"    column="dict_type"    />
-        <result property="dictValue"    column="dict_value"    />
-        <result property="dictLabel"    column="dict_label"    />
-    </resultMap>
-
-    <sql id="selectTimePeriodPriceVo">
-        select id, effective_date, time_period, price from time_period_price
-    </sql>
-
-    <select id="selectTimePeriodPriceList" parameterType="TimePeriodPrice" resultMap="TimePeriodPriceResult">
-        <include refid="selectTimePeriodPriceVo"/>
-        <where>
-            <if test="effectiveDate != null "> and effective_date = #{effectiveDate}</if>
-            <if test="timePeriod != null and timePeriod != '' "> and time_period = #{timePeriod}</if>
-        </where>
-    </select>
-    
-    <select id="selectTimePeriodPriceById" parameterType="String" resultMap="TimePeriodPriceResult">
-        <include refid="selectTimePeriodPriceVo"/>
-        where id = #{id}
-    </select>
-        
-    <insert id="insertTimePeriodPrice" parameterType="TimePeriodPrice">
-        insert into time_period_price
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="effectiveDate != null ">effective_date,</if>
-            <if test="timePeriod != null  and timePeriod != ''">time_period,</if>
-            <if test="price != null  and price != ''">price,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="effectiveDate != null ">#{effectiveDate},</if>
-            <if test="timePeriod != null  and timePeriod != ''">#{timePeriod},</if>
-            <if test="price != null  and price != ''">#{price},</if>
-         </trim>
-    </insert>
-
-    <update id="updateTimePeriodPrice" parameterType="TimePeriodPrice">
-        update time_period_price
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="effectiveDate != null ">effective_date = #{effectiveDate},</if>
-            <if test="timePeriod != null  and timePeriod != ''">time_period = #{timePeriod},</if>
-            <if test="price != null  and price != ''">price = #{price},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteTimePeriodPriceById" parameterType="String">
-        delete from time_period_price where id = #{id}
-    </delete>
-
-    <delete id="deleteTimePeriodPriceByIds" parameterType="String">
-        delete from time_period_price where id in 
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    <select id="selectDictType" parameterType="TimePeriodPrice" resultMap="TimePeriodPriceResult">
-        select d.dict_label, d.dict_value, d.dict_type,p.price,p.id
-		from sys_dict_data d left join time_period_price p on d.dict_value=p.time_period
-        where d.status = '0'
-        and d.dict_type = #{dictType}
-        <if test="effectiveDate != null "> and p.effective_date = #{effectiveDate}</if>
-        order by d.dict_sort asc
-    </select>
-
-    <select id="dictTypeList" parameterType="TimePeriodPrice" resultMap="TimePeriodPriceResult">
-        select dict_label, dict_value, dict_type
-        from sys_dict_data
-        where status = '0'
-        and dict_type = #{dictType}
-        order by dict_sort asc
-    </select>
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/electricityPrice/statisticsMapper.xml b/energy_management_server/src/main/resources/mybatis/electricityPrice/statisticsMapper.xml
deleted file mode 100644
index def568a..0000000
--- a/energy_management_server/src/main/resources/mybatis/electricityPrice/statisticsMapper.xml
+++ /dev/null
@@ -1,139 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.electricity.mapper.statisticsMapper">
-    <resultMap type="TimePeriodPrice" id="TimePeriodPriceResult">
-        <result property="id"    column="id"    />
-        <result property="effectiveDate"    column="effective_date"    />
-        <result property="timePeriod"    column="time_period"    />
-        <result property="price"    column="price"    />
-        <result property="dictType"    column="dict_type"    />
-        <result property="dictValue"    column="dict_value"    />
-        <result property="dictLabel"    column="dict_label"    />
-    </resultMap>
-
-    <resultMap type="stagseDataEntry" id="stagseDataEntryResult">
-        <result property="code" column="code"/>
-        <result property="name" column="name"/>
-        <result property="indexId" column="index_id"/>
-        <result property="timeType" column="time_type"/>
-        <result property="unitId" column="unit_id"/>
-        <result property="calcType" column="calc_type"/>
-        <result property="value" column="value"/>
-        <result property="timeCode" column="time_code"/>
-        <result property="dataTime" column="data_time"/>
-    </resultMap>
-    <resultMap id="dataItemMap" type="com.dingzhuo.energy.project.electricity.domain.electricityDataItem">
-        <id column="index_id" property="indexId"/>
-        <id column="time_code" property="timeCode"/>
-        <id column="index_code" property="indexCode"/>
-        <id column="index_name" property="indexName"/>
-        <result column="begin_time" property="beginTime"/>
-        <result column="end_time" property="endTime"/>
-        <result column="data_time" property="dataTime"/>
-        <result column="value" property="value"/>
-        <result column="time_type" property="timeType"/>
-        <result column="quality" property="quality"/>
-        <result column="unit_id" property="unitId"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="remark" property="remark"/>
-    </resultMap>
-    <select id="getStatisticsList" resultType="com.dingzhuo.energy.data.model.domain.EnergyIndex">
-        SELECT
-        ei.index_id indexId,
-        code,
-        NAME,
-        si.time_type timeType,
-        ei.unit_id unitId
-        FROM
-        energy_index ei
-        LEFT JOIN node_index ni ON ei.index_id = ni.index_id
-        LEFT JOIN index_storage si ON si.index_id = ei.index_id
-        WHERE
-        ni.node_id IN (
-            SELECT node_id FROM model_node WHERE address LIKE (SELECT address FROM model_node WHERE node_id = #{nodeId} )
-            <if test='eierarchyFlag=="ALL"'>
-               || '%'
-            </if>
-        )
-    </select>
-    <select id="getElectricityPriceList" parameterType="TimePeriodPrice" resultMap="TimePeriodPriceResult">
-        SELECT A.ID,
-            A.effective_date,
-            A.time_period,
-            A.price prices,
-            ( SELECT dict_label FROM sys_dict_data WHERE dict_type = 'electricity_price' AND status = '0' AND dict_value = A.time_period ) electricityName
-        FROM
-            time_period_price A
-        WHERE
-            NOT EXISTS ( SELECT 1 FROM time_period_price b WHERE b.time_period = A.time_period AND b.effective_date > A.effective_date )
-        <if test="endTime !=null ">AND A.effective_date &lt; #{endTime}</if>
-    </select>
-    <!--<select id="getElectricityPriceList" parameterType="ElectricityPrice" resultMap="ElectricityPriceResult">
-        select e.id,
-            e.effective_date,
-            e.price_id,
-            e.begin_date,
-            e.end_date,
-            e.effective_name,
-            t.price as prices,
-            (SELECT dict_label FROM sys_dict_data WHERE dict_type = 'electricity_price' AND status = '0' AND dict_value = e.effective_name) electricityName
-        from electricity_price e LEFT JOIN time_period_price t ON e.price_id=t.id
-        <where> 1=1
-            <if test="endTime !=null ">AND e.effective_date &lt; #{endTime}</if>
-        </where>
-        order by e.effective_date desc
-    </select>-->
-    <select id="getDatasByIndex" resultMap="dataItemMap">
-        SELECT
-        d.index_id,
-        i.code AS index_code,
-        i.NAME AS index_name,
-        i.unit_id,
-        sum(value) as value
-        FROM
-        data_item d
-        LEFT JOIN energy_index i ON d.index_id = i.index_id
-        WHERE
-        i.index_id IN
-        <foreach item="indexId" index="index" collection="indexIds" open="(" separator="," close=")">
-            #{indexId}
-        </foreach>
-        AND time_type = #{timeType}
-        AND data_time &gt;= #{beginTime}
-        AND data_time &lt;= #{endTime}
-        GROUP BY
-        d.index_id,
-        i.code,
-        i.unit_id,
-        i.NAME
-    </select>
-    <select id="getPeriodDatasByIndex" resultMap="dataItemMap">
-        SELECT
-        d.index_id,
-        i.code AS index_code,
-        i.NAME AS index_name,
-        i.unit_id,
-        sum(value) as value,
-        to_char(d.data_time, 'YYYY-MM' ) as formatdate
-        FROM
-        data_item d
-        LEFT JOIN energy_index i ON d.index_id = i.index_id
-        WHERE
-        i.index_id IN
-        <foreach item="indexId" index="index" collection="indexIds" open="(" separator="," close=")">
-            #{indexId}
-        </foreach>
-        AND time_type = #{timeType}
-        AND data_time &gt;= #{beginTime}
-        AND data_time &lt;= #{endTime}
-        GROUP BY
-        d.index_id,
-        i.code,
-        i.unit_id,
-        i.NAME,to_char(d.data_time, 'YYYY-MM' )
-    </select>
-
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityDataItemMapper.xml b/energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityDataItemMapper.xml
deleted file mode 100644
index 0b5a2f3..0000000
--- a/energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityDataItemMapper.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.electricityTypeSetting.mapper.ElectricityDataItemMapper">
-
-
-    <select id="getDataStatistics"
-            resultType="com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityDataItem">
-        SELECT
-        index_code indexCode,
-        time_code timeCode,
-        electricity_type electricityType,
-        data_time dataTime,
-        electricity,
-        "cost",
-        time_type timeType,
-        price,
-        remark
-        FROM
-        "electricity_data_item"
-        WHERE
-        index_id IN
-        <foreach collection="indexIdSet" item="indexId" open="(" separator="," close=")">
-            #{indexId}
-        </foreach>
-        AND (data_time BETWEEN #{startTime} AND #{endTime})
-        AND time_type = #{timeType}
-    </select>
-
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityTypeSettingItemMapper.xml b/energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityTypeSettingItemMapper.xml
deleted file mode 100644
index 1d17839..0000000
--- a/energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityTypeSettingItemMapper.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.electricityTypeSetting.mapper.ElectricityTypeSettingItemMapper">
-
-    <sql id="selectRuleDetailsVo">
-        select id,
-               rule_id,
-               start_time,
-               end_time,
-               type,
-               dept_id,
-               del_flag,
-               create_by,
-               create_time,
-               update_by,
-               update_time,
-               remark
-        from electricity_type_setting_item
-    </sql>
-
-    <select id="selectListByRuleId"
-            resultType="com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityTypeSettingItem">
-        SELECT *
-        FROM electricity_type_setting_item
-        WHERE rule_id = #{id}
-    </select>
-
-    <insert id="insertRuleDetails" parameterType="ElectricityTypeSettingItem">
-        insert into electricity_type_setting_item
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null ">id,</if>
-            <if test="ruleId != null ">rule_id,</if>
-            <if test="type != null ">type,</if>
-            <if test="deptId != null ">dept_id,</if>
-            <if test="delFlag != null ">del_flag,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="updateBy != null  and updateBy != ''">update_by,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="remark != null  and remark != ''">remark,</if>
-            <if test="timePeriod != null ">time_period,</if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null ">#{id},</if>
-            <if test="ruleId != null ">#{ruleId},</if>
-            <if test="type != null ">#{type},</if>
-            <if test="deptId != null ">#{deptId},</if>
-            <if test="delFlag != null ">#{delFlag},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="remark != null  and remark != ''">#{remark},</if>
-            <if test="timePeriod != null ">#{timePeriod},</if>
-        </trim>
-    </insert>
-
-    <update id="updateRuleDetails" parameterType="ElectricityTypeSettingItem">
-        update electricity_type_setting_item
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="ruleId != null ">rule_id = #{ruleId},</if>
-            <if test="type != null ">type = #{type},</if>
-            <if test="deptId != null ">dept_id = #{deptId},</if>
-            <if test="delFlag != null ">del_flag = #{delFlag},</if>
-            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="remark != null  and remark != ''">remark = #{remark},</if>
-            <if test="timePeriod != null ">time_period = #{timePeriod},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteRuleDetailsById">
-        delete
-        from electricity_type_setting_item
-        where id = #{id}
-    </delete>
-
-    <delete id="deleteRulesByRuleId">
-        delete
-        from electricity_type_setting_item
-        where rule_id = #{ruleId}
-    </delete>
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityTypeSettingMapper.xml b/energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityTypeSettingMapper.xml
deleted file mode 100644
index 2a59d5f..0000000
--- a/energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityTypeSettingMapper.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.electricityTypeSetting.mapper.ElectricityTypeSettingMapper">
-
-    <select id="selectList"
-            resultType="com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.ElectricityTypeSettingPageListVO">
-        select
-        id,
-        name,
-        sharp_fee AS sharpFee,
-        peak_fee AS peakFee,
-        flat_fee AS flatFee,
-        valley_fee AS valleyFee,
-        create_by AS createBy,
-        create_time AS createTime,
-        effective_date AS effectiveDate,
-        remark
-        from electricity_type_setting
-        <where>
-            <if test="name != null  and name != ''">
-                and name like concat('%', #{name}, '%')
-            </if>
-            and del_flag = '0'
-        </where>
-        order by create_time desc
-    </select>
-    <select id="selectById"
-            resultType="com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityTypeSetting">
-        select id,
-               name,
-               effective_date,
-               sharp_fee,
-               peak_fee,
-               flat_fee,
-               valley_fee,
-               effective_date,
-               create_by,
-               create_time,
-               update_by,
-               update_time,
-               remark
-        from electricity_type_setting
-        where id = #{id}
-    </select>
-
-    <insert id="insertRules" parameterType="ElectricityTypeSetting">
-        insert into electricity_type_setting
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null ">id,</if>
-            <if test="name != null  and name != ''">name,</if>
-            <if test="sharpFee != null ">sharp_fee,</if>
-            <if test="peakFee != null ">peak_fee,</if>
-            <if test="flatFee != null ">flat_fee,</if>
-            <if test="valleyFee != null ">valley_fee,</if>
-            <if test="effectiveDate != null ">effective_date,</if>
-            <if test="deptId != null ">dept_id,</if>
-            <if test="delFlag != null ">del_flag,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="updateBy != null  and updateBy != ''">update_by,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="remark != null  and remark != ''">remark,</if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null ">#{id},</if>
-            <if test="name != null  and name != ''">#{name},</if>
-            <if test="sharpFee != null ">#{sharpFee},</if>
-            <if test="peakFee != null ">#{peakFee},</if>
-            <if test="flatFee != null ">#{flatFee},</if>
-            <if test="valleyFee != null ">#{valleyFee},</if>
-            <if test="effectiveDate != null ">#{effectiveDate},</if>
-            <if test="deptId != null ">#{deptId},</if>
-            <if test="delFlag != null ">#{delFlag},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="remark != null  and remark != ''">#{remark},</if>
-        </trim>
-    </insert>
-
-    <update id="updateRules" parameterType="ElectricityTypeSetting">
-        update electricity_type_setting
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="name != null  and name != ''">name = #{name},</if>
-            <if test="sharpFee != null ">sharp_fee = #{sharpFee},</if>
-            <if test="peakFee != null ">peak_fee = #{peakFee},</if>
-            <if test="flatFee != null ">flat_fee = #{flatFee},</if>
-            <if test="valleyFee != null ">valley_fee = #{valleyFee},</if>
-            <if test="effectiveDate != null ">valley_fee = #{effectiveDate},</if>
-            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="remark != null  and remark != ''">remark = #{remark},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteRulesById">
-        delete
-        from electricity_type_setting
-        where id = #{id}
-    </delete>
-
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/energyBalance/EnergyPicMapper.xml b/energy_management_server/src/main/resources/mybatis/energyBalance/EnergyPicMapper.xml
deleted file mode 100644
index 3bddbaf..0000000
--- a/energy_management_server/src/main/resources/mybatis/energyBalance/EnergyPicMapper.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.energyBalance.mapper.EnergyPicMapper">
-
-    <resultMap type="EnergyPic" id="EnergyPicResult">
-        <result property="index_id"    column="index_id"    />
-        <result property="name"    column="name"    />
-        <result property="code"    column="code"    />
-        <result property="address"    column="address"    />
-        <result property="modename"    column="modename"    />
-        <result property="a1" column="a1"/>
-        <result property="a2" column="a2"/>
-        <result property="a3" column="a3"/>
-        <result property="a4" column="a4"/>
-        <result property="a5" column="a5"/>
-        <result property="a6" column="a6"/>
-        <result property="a7" column="a7"/>
-        <result property="a8" column="a8"/>
-        <result property="a9" column="a9"/>
-        <result property="a10" column="a10"/>
-        <result property="a11" column="a11"/>
-        <result property="a12" column="a12"/>
-        <result property="a13" column="a13"/>
-        <result property="a14" column="a14"/>
-        <result property="a15" column="a15"/>
-        <result property="a16" column="a16"/>
-        <result property="a17" column="a17"/>
-        <result property="a18" column="a18"/>
-        <result property="a19" column="a19"/>
-        <result property="a20" column="a20"/>
-        <result property="a21" column="a21"/>
-        <result property="a22" column="a22"/>
-        <result property="a23" column="a23"/>
-        <result property="a24" column="a24"/>
-        <result property="a25" column="a25"/>
-        <result property="a26" column="a26"/>
-        <result property="a27" column="a27"/>
-        <result property="a28" column="a28"/>
-        <result property="a29" column="a29"/>
-        <result property="a30" column="a30"/>
-        <result property="a31" column="a31"/>
-        <result property="a32" column="a32"/>
-        <result property="a33" column="a33"/>
-        <result property="a34" column="a34"/>
-        <result property="a35" column="a35"/>
-        <result property="a36" column="a36"/>
-    </resultMap>
-
-
-    <select id="selectEnergyPicList" parameterType="EnergyPic" resultMap="EnergyPicResult">
-        select * from (
-        SELECT
-        aa.index_id,
-        aa.data_time,
-        aa.name,
-        aa.code,
-        aa.address,
-        aa.modename,
-        max(value) as A1
-        FROM
-        (
-        SELECT di.index_id,
-        "value",
-        data_time,
-        ei.name,
-        ei.code,
-        mo.address,
-        mo."name" as modename
-        FROM	data_item di ,
-        energy_index ei,
-        node_index ni,
-        model_node mo
-        WHERE
-        to_char( data_time, 'YYYY-MM-DD HH24' ) = #{sqlWhereDataTime}
-        AND time_type = 'HOUR'
-        and di.index_id = ei.index_id
-        and ei.index_id = ni.index_id
-        and ni.node_id = mo.node_id
-        and ni.node_id IN ( SELECT node_id FROM model_node WHERE address LIKE ( SELECT address FROM model_node WHERE node_id = #{nodeid} ) || '%' )
-        ) aa
-        GROUP BY
-        aa.index_id,aa.data_time,aa.name,aa.code,aa.address,aa."modename") t
-        order by t.address
-    </select>
-
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/energyBalance/energyBalanceMapper.xml b/energy_management_server/src/main/resources/mybatis/energyBalance/energyBalanceMapper.xml
deleted file mode 100644
index 115bcf8..0000000
--- a/energy_management_server/src/main/resources/mybatis/energyBalance/energyBalanceMapper.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.energyBalance.mapper.energybalanceMapper">
-
-    <resultMap id="dataItemMap" type="com.dingzhuo.energy.dataservice.domain.DataItem">
-        <id column="index_id" property="indexId"/>
-        <id column="time_code" property="timeCode"/>
-        <id column="index_code" property="indexCode"/>
-        <id column="index_name" property="indexName"/>
-        <result column="begin_time" property="beginTime"/>
-        <result column="end_time" property="endTime"/>
-        <result column="data_time" property="dataTime"/>
-        <result column="value" property="value"/>
-        <result column="time_type" property="timeType"/>
-        <result column="quality" property="quality"/>
-        <result column="unit_id" property="unitId"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="remark" property="remark"/>
-    </resultMap>
-    <sql id="itemHead">
-    SELECT di.index_id,
-           di.time_code,
-           di.time_type,
-           di.begin_time,
-           di.end_time,
-           di.data_time,
-           di.value,
-           di.quality,
-           di.create_time,
-           di.update_time,
-           ci.code AS "index_code",
-           ci.name AS "index_name"
-    FROM data_item di
-           LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-  </sql>
-    <select id="getBalanceList" resultMap="dataItemMap">
-        <include refid="itemHead"/>
-        where di.time_code = #{timeCode}
-        AND di.index_id in
-        <foreach item="indexId" index="index" collection="indexIds"
-                 open="(" separator="," close=")">
-            #{indexId}
-        </foreach>
-        ORDER BY "value" DESC
-    </select>
-
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/energyEenchmarking/EnergyBenchmarkingMapper.xml b/energy_management_server/src/main/resources/mybatis/energyEenchmarking/EnergyBenchmarkingMapper.xml
deleted file mode 100644
index 050f975..0000000
--- a/energy_management_server/src/main/resources/mybatis/energyEenchmarking/EnergyBenchmarkingMapper.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.EnergyBenchmarking.mapper.EnergyBenchmarkingMapper">
-    
-    <resultMap type="EnergyBenchmarking" id="EnergyBenchmarkingResult">
-        <result property="id"    column="id"    />
-        <result property="name"    column="name"    />
-        <result property="codeId"    column="code_id"    />
-        <result property="unit"    column="unit"    />
-        <result property="range"    column="range"    />
-        <result property="type"    column="type"    />
-        <result property="value"    column="value"    />
-        <result property="termValidity"    column="term_validity"    />
-        <result property="modelNode"    column="model_node"    />
-    </resultMap>
-
-    <sql id="selectEnergyBenchmarkingVo">
-        select id, name, code_id, unit, range, type, value, term_validity,model_node from energy_benchmarking
-    </sql>
-
-    <select id="selectEnergyBenchmarkingList" parameterType="EnergyBenchmarking" resultMap="EnergyBenchmarkingResult">
-        <include refid="selectEnergyBenchmarkingVo"/>
-        <where>
-            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
-            <if test="modelNode != null  and modelNode != ''"> and model_node like concat('%', #{modelNode}, '%')</if>
-            <if test="codeId != null  and codeId != ''"> and code_id like concat('%', #{codeId}, '%')</if>
-            <if test="unit != null  and unit != ''"> and unit like concat('%', #{unit}, '%')</if>
-            <if test="range != null  and range != ''"> and range like concat('%', #{range}, '%')</if>
-            <if test="type != null  and type != ''"> and type like concat('%', #{type}, '%')</if>
-            <if test="value != null  and value != ''"> and value like concat('%', #{value}, '%')</if>
-            <if test="termValidity != null "> and term_validity like concat('%', #{termValidity}, '%')</if>
-        </where>
-    </select>
-    
-    <select id="selectEnergyBenchmarkingById" parameterType="String" resultMap="EnergyBenchmarkingResult">
-        <include refid="selectEnergyBenchmarkingVo"/>
-        where id = #{id}
-    </select>
-        
-    <insert id="insertEnergyBenchmarking" parameterType="EnergyBenchmarking">
-        insert into energy_benchmarking
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="name != null  and name != ''">name,</if>
-            <if test="codeId != null  and codeId != ''">code_id,</if>
-            <if test="unit != null  and unit != ''">unit,</if>
-            <if test="range != null  and range != ''">range,</if>
-            <if test="type != null  and type != ''">type,</if>
-            <if test="value != null  and value != ''">value,</if>
-            <if test="termValidity != null ">term_validity,</if>
-            <if test="modelNode != null ">model_node,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="name != null  and name != ''">#{name},</if>
-            <if test="codeId != null  and codeId != ''">#{codeId},</if>
-            <if test="unit != null  and unit != ''">#{unit},</if>
-            <if test="range != null  and range != ''">#{range},</if>
-            <if test="type != null  and type != ''">#{type},</if>
-            <if test="value != null  and value != ''">#{value},</if>
-            <if test="termValidity != null ">#{termValidity},</if>
-            <if test="modelNode != null ">#{modelNode},</if>
-         </trim>
-    </insert>
-
-    <update id="updateEnergyBenchmarking" parameterType="EnergyBenchmarking">
-        update energy_benchmarking
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="name != null  and name != ''">name = #{name},</if>
-            <if test="codeId != null  and codeId != ''">code_id = #{codeId},</if>
-            <if test="unit != null  and unit != ''">unit = #{unit},</if>
-            <if test="range != null  and range != ''">range = #{range},</if>
-            <if test="type != null  and type != ''">type = #{type},</if>
-            <if test="value != null  and value != ''">value = #{value},</if>
-            <if test="termValidity != null ">term_validity = #{termValidity},</if>
-            <if test="modelNode != null ">model_node= #{modelNode},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteEnergyBenchmarkingById" parameterType="String">
-        delete from energy_benchmarking where id = #{id}
-    </delete>
-
-    <delete id="deleteEnergyBenchmarkingByIds" parameterType="String">
-        delete from energy_benchmarking where id in 
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/energyStatistics/energyStatisticsMapper.xml b/energy_management_server/src/main/resources/mybatis/energyStatistics/energyStatisticsMapper.xml
deleted file mode 100644
index e1ae83b..0000000
--- a/energy_management_server/src/main/resources/mybatis/energyStatistics/energyStatisticsMapper.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.energyStatistics.mapper.energyStatisticsMapper">
-
-    <resultMap type="EnergyIndex" id="EnergyIndexResult">
-        <result property="indexId" column="index_id"/>
-        <result property="name" column="name"/>
-        <result property="code" column="code"/>
-        <result property="indexType" column="index_type"/>
-        <result property="indexCategory" column="index_category"/>
-        <result property="remark" column="remark"/>
-        <result property="unitId" column="unit_id"/>
-        <result property="meterId" column="meter_id"/>
-    </resultMap>
-    <resultMap id="dataItemMap" type="com.dingzhuo.energy.project.energyStatistics.domain.dataTimeSVG">
-        <id column="index_id" property="indexId"/>
-        <id column="time_code" property="timeCode"/>
-        <id column="index_code" property="indexCode"/>
-        <id column="index_name" property="indexName"/>
-        <result column="begin_time" property="beginTime"/>
-        <result column="end_time" property="endTime"/>
-        <result column="data_time" property="dataTime"/>
-        <result column="value" property=""/>
-        <result column="time_type" property="timeType"/>
-        <result column="unit_id" property="unitId"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="remark" property="remark"/>
-    </resultMap>
-    <select id="reportFormsvg" resultMap="dataItemMap">
-        SELECT
-            d.index_id,
-            time_code,
-            data_time,
-            i.code AS index_code,
-            i.NAME AS index_name,
-            i.unit_id,
-            VALUE
-        FROM
-            data_item d,
-            energy_index i,
-            sys_svg_info svg
-        WHERE
-            d.index_id = i.index_id
-            AND svg.tag = i.code
-            AND svg.node_id = #{nodeId}
-            AND index_type = #{indexType}
-            AND time_type = #{timeType}
-            AND data_time &gt;= #{beginTime}
-            AND data_time &lt;= #{endTime}
-            order by data_time DESC
-    </select>
-    <select id="selectDataTimelist" resultMap="dataItemMap">
-        SELECT
-            d.index_id,
-            time_code,
-            data_time,
-            i.code AS index_code,
-            i.NAME AS index_name,
-            i.unit_id,
-            m.meter_name,
-            VALUE
-        FROM
-            data_item d,
-            energy_index i,
-            meter_implement m
-        WHERE
-            d.index_id = i.index_id
-            AND m.id = i.meter_id
-            AND index_type = #{indexType}
-            AND time_type = #{timeType}
-            AND data_time &gt;= #{beginTime}
-            AND data_time &lt;= #{endTime}
-            order by data_time DESC
-    </select>
-</mapper>
diff --git a/energy_management_server/src/main/resources/mybatis/gateway/GatewayHbtLogMapper.xml b/energy_management_server/src/main/resources/mybatis/gateway/GatewayHbtLogMapper.xml
deleted file mode 100644
index 1e0b5b0..0000000
--- a/energy_management_server/src/main/resources/mybatis/gateway/GatewayHbtLogMapper.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.gateway.mapper.GatewayHbtLogMapper">
-
-    <resultMap type="GatewayHbtLog" id="GatewayHbtLogResult">
-        <result property="id"    column="id"    />
-        <result property="gatewayNo"    column="gateway_no"    />
-        <result property="hbtTime"    column="hbt_time"    />
-        <result property="content"    column="content"    />
-    </resultMap>
-
-    <sql id="selectGatewayHbtLogVo">
-        select id, gateway_no, hbt_time, content from gateway_hbt_log
-    </sql>
-
-    <select id="selectGatewayHbtLogList" parameterType="GatewayHbtLog" resultMap="GatewayHbtLogResult">
-        <include refid="selectGatewayHbtLogVo"/>
-        <where>
-        </where>
-    </select>
-
-    <select id="selectGatewayHbtLogById" parameterType="String" resultMap="GatewayHbtLogResult">
-        <include refid="selectGatewayHbtLogVo"/>
-        where id = #{id}
-    </select>
-
-    <insert id="insertGatewayHbtLog" parameterType="GatewayHbtLog">
-        insert into gateway_hbt_log
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="gatewayNo != null  and gatewayNo != ''">gateway_no,</if>
-            <if test="hbtTime != null ">hbt_time,</if>
-            <if test="content != null  and content != ''">content,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="gatewayNo != null  and gatewayNo != ''">#{gatewayNo},</if>
-            <if test="hbtTime != null ">#{hbtTime},</if>
-            <if test="content != null  and content != ''">#{content},</if>
-         </trim>
-    </insert>
-
-    <update id="updateGatewayHbtLog" parameterType="GatewayHbtLog">
-        update gateway_hbt_log
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="gatewayNo != null  and gatewayNo != ''">gateway_no = #{gatewayNo},</if>
-            <if test="hbtTime != null ">hbt_time = #{hbtTime},</if>
-            <if test="content != null  and content != ''">content = #{content},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteGatewayHbtLogById" parameterType="String">
-        delete from gateway_hbt_log where id = #{id}
-    </delete>
-
-    <delete id="deleteGatewayHbtLogByIds" parameterType="String">
-        delete from gateway_hbt_log where id in
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-
-</mapper>
diff --git a/energy_management_server/src/main/resources/mybatis/gateway/GatewaySettingMapper.xml b/energy_management_server/src/main/resources/mybatis/gateway/GatewaySettingMapper.xml
deleted file mode 100644
index 5549068..0000000
--- a/energy_management_server/src/main/resources/mybatis/gateway/GatewaySettingMapper.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.gateway.mapper.GatewaySettingMapper">
-
-    <resultMap type="GatewaySetting" id="GatewaySettingResult">
-        <result property="id"    column="id"    />
-        <result property="gatewayNum"    column="gateway_num"    />
-        <result property="plantArea"    column="plant_area"    />
-        <result property="address"    column="address"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="hbtTime"    column="hbt_time"    />
-    </resultMap>
-
-    <sql id="selectGatewaySettingVo">
-        select id, gateway_num, plant_area, address, create_by, create_time, update_by, update_time, hbt_time from gateway_setting
-    </sql>
-
-    <select id="selectGatewaySettingList" parameterType="GatewaySetting" resultMap="GatewaySettingResult">
-        <include refid="selectGatewaySettingVo"/>
-        <where>
-            <if test="gatewayNum != null  and gatewayNum != ''"> and gateway_num like concat('%', #{gatewayNum}, '%')</if>
-            <if test="address != null  and address != ''"> and address like concat('%', #{address}, '%')</if>
-        </where>
-    </select>
-
-    <select id="selectGatewaySettingById" parameterType="String" resultMap="GatewaySettingResult">
-        <include refid="selectGatewaySettingVo"/>
-        where id = #{id}
-    </select>
-
-    <insert id="insertGatewaySetting" parameterType="GatewaySetting">
-        insert into gateway_setting
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="gatewayNum != null  and gatewayNum != ''">gateway_num,</if>
-            <if test="plantArea != null  and plantArea != ''">plant_area,</if>
-            <if test="address != null  and address != ''">address,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="updateBy != null  and updateBy != ''">update_by,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="hbtTime != null ">hbt_time,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="gatewayNum != null  and gatewayNum != ''">#{gatewayNum},</if>
-            <if test="plantArea != null  and plantArea != ''">#{plantArea},</if>
-            <if test="address != null  and address != ''">#{address},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="hbtTime != null ">#{hbtTime},</if>
-         </trim>
-    </insert>
-
-    <update id="updateGatewaySetting" parameterType="GatewaySetting">
-        update gateway_setting
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="gatewayNum != null  and gatewayNum != ''">gateway_num = #{gatewayNum},</if>
-            <if test="plantArea != null  and plantArea != ''">plant_area = #{plantArea},</if>
-            <if test="address != null  and address != ''">address = #{address},</if>
-            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="hbtTime != null ">hbt_time = #{hbtTime},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteGatewaySettingById" parameterType="String">
-        delete from gateway_setting where id = #{id}
-    </delete>
-
-    <delete id="deleteGatewaySettingByIds" parameterType="String">
-        delete from gateway_setting where id in
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-
-    <update id="updateGatewaySettingByNum" parameterType="GatewaySetting">
-        update gateway_setting
-        set hbt_time = #{hbtTime}
-        where gateway_num = #{gatewayNum}
-    </update>
-
-
-    <select id="selectGatewaySettingMonitorList" resultMap="GatewaySettingResult">
-        <include refid="selectGatewaySettingVo"/>
-    </select>
-
-    <select id="checkOne" parameterType="GatewaySetting" resultMap="GatewaySettingResult">
-        <include refid="selectGatewaySettingVo"/>
-        where
-        gateway_num=#{gatewayNum}
-        <if test="id != null  and id != ''">
-            and id != #{id}
-        </if>
-    </select>
-</mapper>
diff --git a/energy_management_server/src/main/resources/mybatis/govReports/DataItemPubMapper.xml b/energy_management_server/src/main/resources/mybatis/govReports/DataItemPubMapper.xml
deleted file mode 100644
index 843a29e..0000000
--- a/energy_management_server/src/main/resources/mybatis/govReports/DataItemPubMapper.xml
+++ /dev/null
@@ -1,276 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.govReports.mapper.DataItemPubMapper">
-
-    <resultMap type="DataItemPub" id="DataItemPubResult">
-        <result property="indexId" column="index_id"/>
-        <result property="timeCode" column="time_code"/>
-        <result property="beginTime" column="begin_time"/>
-        <result property="endTime" column="end_time"/>
-        <result property="value" column="value"/>
-        <result property="quality" column="quality"/>
-        <result property="createTime" column="create_time"/>
-        <result property="updateTime" column="update_time"/>
-        <result property="timeType" column="time_type"/>
-        <result property="dataTime" column="data_time"/>
-        <result property="createBy" column="create_by"/>
-        <result property="sendStatus" column="send_status"/>
-        <result property="sendDate" column="send_date"/>
-        <result property="sendTimes" column="send_times"/>
-        <result property="reportSetId" column="report_set_id"/>
-        <result property="reportUpperLimit" column="report_upper_limit"/>
-        <result property="reportUpperReplace" column="report_upper_replace"/>
-        <result property="reportLowerLimit" column="report_lower_limit"/>
-        <result property="reportLowerReplace" column="report_lower_replace"/>
-        <result property="originValue" column="origin_value"/>
-    </resultMap>
-
-    <resultMap type="DataItemPubVo" id="DataItemPubResultVo">
-        <result property="indexId" column="index_id"/>
-        <result property="indexCode" column="code"/>
-        <result property="indexName" column="name"/>
-        <result property="timeCode" column="time_code"/>
-        <result property="value" column="value"/>
-        <result property="originValue" column="origin_value"/>
-        <result property="reportUpperLimit" column="report_upper_limit"/>
-        <result property="reportUpperReplace" column="report_upper_replace"/>
-        <result property="reportLowerLimit" column="report_lower_limit"/>
-        <result property="reportLowerReplace" column="report_lower_replace"/>
-    </resultMap>
-
-    <sql id="selectDataItemPubVo">
-        select index_id,
-               time_code,
-               begin_time,
-               end_time,
-               value,
-               quality,
-               create_time,
-               update_time,
-               time_type,
-               data_time,
-               create_by,
-               send_status,
-               send_date,
-               send_times,
-               report_set_id,
-               report_upper_limit,
-               report_upper_replace,
-               report_lower_limit,
-               report_lower_replace,
-               origin_value
-        from data_item_pub
-    </sql>
-
-    <select id="selectDataItemPubList" parameterType="DataItemPub" resultMap="DataItemPubResult">
-        <include refid="selectDataItemPubVo"/>
-        <where>
-        </where>
-    </select>
-
-    <select id="selectDataItemPubById" parameterType="String" resultMap="DataItemPubResult">
-        <include refid="selectDataItemPubVo"/>
-        where index_id = #{indexId}
-    </select>
-
-    <insert id="insertDataItemPub" parameterType="DataItemPub">
-        insert into data_item_pub
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="indexId != null  and indexId != ''">index_id,</if>
-            <if test="timeCode != null  and timeCode != ''">time_code,</if>
-            <if test="beginTime != null ">begin_time,</if>
-            <if test="endTime != null ">end_time,</if>
-            <if test="value != null ">value,</if>
-            <if test="quality != null  and quality != ''">quality,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="timeType != null  and timeType != ''">time_type,</if>
-            <if test="dataTime != null ">data_time,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="sendStatus != null ">send_status,</if>
-            <if test="sendDate != null ">send_date,</if>
-            <if test="sendTimes != null ">send_times,</if>
-            <if test="reportSetId != null  and reportSetId != ''">report_set_id,</if>
-            <if test="reportUpperLimit != null ">report_upper_limit,</if>
-            <if test="reportUpperReplace != null ">report_upper_replace,</if>
-            <if test="reportLowerLimit != null ">report_lower_limit,</if>
-            <if test="reportLowerReplace != null ">report_lower_replace,</if>
-            <if test="originValue != null ">origin_value,</if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="indexId != null  and indexId != ''">#{indexId},</if>
-            <if test="timeCode != null  and timeCode != ''">#{timeCode},</if>
-            <if test="beginTime != null ">#{beginTime},</if>
-            <if test="endTime != null ">#{endTime},</if>
-            <if test="value != null ">#{value},</if>
-            <if test="quality != null  and quality != ''">#{quality},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="timeType != null  and timeType != ''">#{timeType},</if>
-            <if test="dataTime != null ">#{dataTime},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="sendStatus != null ">#{sendStatus},</if>
-            <if test="sendDate != null ">#{sendDate},</if>
-            <if test="sendTimes != null ">#{sendTimes},</if>
-            <if test="reportSetId != null  and reportSetId != ''">#{reportSetId},</if>
-            <if test="reportUpperLimit != null ">#{reportUpperLimit},</if>
-            <if test="reportUpperReplace != null ">#{reportUpperReplace},</if>
-            <if test="reportLowerLimit != null ">#{reportLowerLimit},</if>
-            <if test="reportLowerReplace != null ">#{reportLowerReplace},</if>
-            <if test="originValue != null ">#{originValue},</if>
-        </trim>
-    </insert>
-
-    <update id="updateDataItemPub" parameterType="DataItemPub">
-        update data_item_pub
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="timeCode != null  and timeCode != ''">time_code = #{timeCode},</if>
-            <if test="beginTime != null ">begin_time = #{beginTime},</if>
-            <if test="endTime != null ">end_time = #{endTime},</if>
-            <if test="value != null ">value = #{value},</if>
-            <if test="quality != null  and quality != ''">quality = #{quality},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="timeType != null  and timeType != ''">time_type = #{timeType},</if>
-            <if test="dataTime != null ">data_time = #{dataTime},</if>
-            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
-            <if test="sendStatus != null ">send_status = #{sendStatus},</if>
-            <if test="sendDate != null ">send_date = #{sendDate},</if>
-            <if test="sendTimes != null ">send_times = #{sendTimes},</if>
-            <if test="reportSetId != null  and reportSetId != ''">report_set_id = #{reportSetId},</if>
-            <if test="reportUpperLimit != null ">report_upper_limit = #{reportUpperLimit},</if>
-            <if test="reportUpperReplace != null ">report_upper_replace = #{reportUpperReplace},</if>
-            <if test="reportLowerLimit != null ">report_lower_limit = #{reportLowerLimit},</if>
-            <if test="reportLowerReplace != null ">report_lower_replace = #{reportLowerReplace},</if>
-            <if test="originValue != null ">origin_value = #{originValue},</if>
-        </trim>
-        where index_id = #{indexId}
-    </update>
-
-    <delete id="deleteDataItemPubById" parameterType="String">
-        delete
-        from data_item_pub
-        where index_id = #{indexId}
-    </delete>
-
-    <delete id="deleteDataItemPubByIds" parameterType="String">
-        delete from data_item_pub where index_id in
-        <foreach item="indexId" collection="array" open="(" separator="," close=")">
-            #{indexId}
-        </foreach>
-    </delete>
-
-    <select id="getReportData" resultMap="DataItemPubResult">
-        SELECT
-            dItem.index_id,
-            dItem.VALUE AS originValue,
-            dItem.VALUE,
-            dItem.begin_time,
-            dItem.end_time,
-            dItem.quality,
-            dItem.create_time,
-            dItem.update_time,
-            dItem.time_type,
-            dItem.data_time,
-            dItem.create_by,
-            dItem.time_code
-        FROM
-            data_item dItem
-        WHERE dItem.time_code = #{timeCode}
-          AND dItem.time_type = #{dateType}
-    </select>
-
-<!--    娉ㄦ剰!!!!!!!!  姝ゅ鏄疨ostGreSql鐨勫啓娉�!-->
-    <insert id="insertOrUpdateDateItemPub">
-        INSERT INTO data_item_pub (
-        index_id,
-        time_code,
-        begin_time,
-        end_time,
-        value,
-        quality,
-        create_time,
-        update_time,
-        time_type,
-        data_time,
-        create_by,
-        send_status,
-        send_date,
-        send_times,
-        report_set_id,
-        report_upper_limit,
-        report_upper_replace,
-        report_lower_limit,
-        report_lower_replace,
-        origin_value
-        )
-        VALUES
-        <foreach collection="list" separator="," item="item">
-            (
-            #{item.indexId},
-            #{item.timeCode},
-            #{item.beginTime},
-            #{item.endTime},
-            #{item.value},
-            #{item.quality},
-            #{item.createTime},
-            #{item.updateTime},
-            #{item.timeType},
-            #{item.dataTime},
-            #{item.createBy},
-            #{item.sendStatus},
-            #{item.sendDate},
-            #{item.sendTimes},
-            #{item.reportSetId},
-            #{item.reportUpperLimit},
-            #{item.reportUpperReplace},
-            #{item.reportLowerLimit},
-            #{item.reportLowerReplace},
-            #{item.originValue}
-            )
-        </foreach>
-        ON CONFLICT(index_id,time_code) DO UPDATE
-        SET index_id = EXCLUDED.index_id,
-        time_code = EXCLUDED.time_code,
-        begin_time = EXCLUDED.begin_time,
-        end_time = EXCLUDED.end_time,
-        value = EXCLUDED.value,
-        quality = EXCLUDED.quality,
-        create_time = EXCLUDED.create_time,
-        update_time = EXCLUDED.update_time,
-        time_type = EXCLUDED.time_type,
-        data_time = EXCLUDED.data_time,
-        create_by = EXCLUDED.create_by,
-        send_status = EXCLUDED.send_status,
-        send_date = EXCLUDED.send_date,
-        send_times = EXCLUDED.send_times,
-        report_set_id = EXCLUDED.report_set_id,
-        report_upper_limit = EXCLUDED.report_upper_limit,
-        report_upper_replace = EXCLUDED.report_upper_replace,
-        report_lower_limit = EXCLUDED.report_lower_limit,
-        report_lower_replace = EXCLUDED.report_lower_replace,
-        origin_value = EXCLUDED.origin_value
-    </insert>
-
-    <select id="selectDataItemPubInfoList" parameterType="DataItemPub" resultMap="DataItemPubResultVo">
-        select ei.index_id,
-            ei.code,
-            ei."name",
-            dip.time_code,
-            dip."value",
-            dip.origin_value,
-            dip.report_upper_limit,
-            dip.report_upper_replace,
-            dip.report_lower_limit,
-            dip.report_lower_replace
-        from energy_index ei,data_item_pub dip
-        where ei.index_id = dip.index_id
-        <if test="timeCode != null and timeCode != ''" >
-            and dip.time_code=#{timeCode}
-        </if>
-
-    </select>
-
-</mapper>
diff --git a/energy_management_server/src/main/resources/mybatis/keyEquipment/dailyKeyEquipmentMapper.xml b/energy_management_server/src/main/resources/mybatis/keyEquipment/dailyKeyEquipmentMapper.xml
deleted file mode 100644
index 79320a7..0000000
--- a/energy_management_server/src/main/resources/mybatis/keyEquipment/dailyKeyEquipmentMapper.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.keyEquipment.mapper.dailyKeyEquipmentMapper">
-    <resultMap id="dataItemMap" type="com.dingzhuo.energy.project.keyEquipment.domain.dailyKeyEquipment">
-        <result column="index_id" property="indexId"/>
-        <result column="index_name" property="indexName"/>
-        <result column="time_type" property="timeType"/>
-        <result column="time_code" property="timeCode"/>
-        <result column="unit_id" property="unitId"/>
-        <result column="value1" property="value1"/>
-        <result column="value2" property="value2"/>
-        <result column="value3" property="value3"/>
-        <result column="value4" property="value4"/>
-        <result column="value5" property="value5"/>
-        <result column="value6" property="value6"/>
-        <result column="value7" property="value7"/>
-        <result column="value8" property="value8"/>
-        <result column="value9" property="value9"/>
-        <result column="value10" property="value10"/>
-        <result column="value11" property="value11"/>
-        <result column="value12" property="value12"/>
-        <result column="value13" property="value13"/>
-        <result column="value14" property="value14"/>
-        <result column="value15" property="value15"/>
-        <result column="value16" property="value16"/>
-        <result column="value17" property="value17"/>
-        <result column="value18" property="value18"/>
-        <result column="value19" property="value19"/>
-        <result column="value20" property="value20"/>
-        <result column="value21" property="value21"/>
-        <result column="value22" property="value22"/>
-        <result column="value23" property="value23"/>
-        <result column="value0" property="value0"/>
-    </resultMap>
-    <select id="getdailyKeyEquipmentList" resultMap="dataItemMap">
-        SELECT
-        aa.index_id,
-        aa.index_name,
-        <foreach item="item" index="index" collection="dataList">
-            MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ) AS ${item.value},
-        </foreach>
-        aa.time_type
-        FROM
-        (
-        SELECT
-        ci.index_id,
-        ci.NAME  AS "index_name",
-        di."value",
-        di.data_time,
-        di.time_type
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        LEFT JOIN facility_archives f ON f."id"=ci.equipment
-        WHERE
-        di.data_time >= #{beginTime}
-        AND di.data_time &lt; #{endTime}
-        AND di.index_id IN <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
-        AND di.time_type = #{timeType}
-        <if test="indexStorageId !='' and indexStorageId !=null">
-            and ci.equipment=#{indexStorageId}
-        </if>
-        ) aa
-        GROUP BY
-        aa.index_id,aa.index_name,aa.time_type
-    </select>
-
-    <select id="getListChart" resultMap="dataItemMap">
-        SELECT
-            di.index_id,
-            ci.name AS "index_name",
-            ci.unit_id,
-            di."value",
-            di.data_time,
-            di.time_type,
-            di.time_code
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        WHERE
-            di.index_id =#{indexId}
-            AND di.data_time &lt; #{endTime}
-            AND di.data_time >= #{beginTime}
-            AND di.time_type = #{timeType}
-        order by di.data_time
-    </select>
-    <select id="getFacilityArchives" resultType="com.dingzhuo.energy.basic.data.facility.domain.FacilityArchives">
-        SELECT ID,code,facility_name AS facilityName FROM facility_archives
-    </select>
-    <select id="getPointFacility" resultType="com.dingzhuo.energy.basic.data.facility.domain.FacilityArchives">
-        SELECT ID,code,facility_name AS facilityName FROM facility_archives where point_flag='Y'
-    </select>
-</mapper>
diff --git a/energy_management_server/src/main/resources/mybatis/keyEquipment/monthlyKeyEquipmentMapper.xml b/energy_management_server/src/main/resources/mybatis/keyEquipment/monthlyKeyEquipmentMapper.xml
deleted file mode 100644
index c388649..0000000
--- a/energy_management_server/src/main/resources/mybatis/keyEquipment/monthlyKeyEquipmentMapper.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.keyEquipment.mapper.monthlyKeyEquipmentMapper">
-    <resultMap id="dataItemMap" type="com.dingzhuo.energy.project.keyEquipment.domain.monthlyKeyEquipment">
-        <result column="index_id" property="indexId"/>
-        <result column="index_name" property="indexName"/>
-        <result column="time_type" property="timeType"/>
-        <result column="time_code" property="timeCode"/>
-        <result column="unit_id" property="unitId"/>
-        <result column="value1" property="value1"/>
-        <result column="value2" property="value2"/>
-        <result column="value3" property="value3"/>
-        <result column="value4" property="value4"/>
-        <result column="value5" property="value5"/>
-        <result column="value6" property="value6"/>
-        <result column="value7" property="value7"/>
-        <result column="value8" property="value8"/>
-        <result column="value9" property="value9"/>
-        <result column="value10" property="value10"/>
-        <result column="value11" property="value11"/>
-        <result column="value12" property="value12"/>
-        <result column="value13" property="value13"/>
-        <result column="value14" property="value14"/>
-        <result column="value15" property="value15"/>
-        <result column="value16" property="value16"/>
-        <result column="value17" property="value17"/>
-        <result column="value18" property="value18"/>
-        <result column="value19" property="value19"/>
-        <result column="value20" property="value20"/>
-        <result column="value21" property="value21"/>
-        <result column="value22" property="value22"/>
-        <result column="value23" property="value23"/>
-        <result column="value24" property="value24"/>
-        <result column="value25" property="value25"/>
-        <result column="value26" property="value26"/>
-        <result column="value27" property="value27"/>
-        <result column="value28" property="value28"/>
-        <result column="value29" property="value29"/>
-        <result column="value30" property="value30"/>
-        <result column="value31" property="value31"/>
-    </resultMap>
-    <!--鍏ㄥ巶鑳借�楃粺璁�-->
-    <select id="getMonthlyKeyEquipmentList" resultMap="dataItemMap">
-        SELECT
-        aa.index_id,
-        aa.index_name,
-        <foreach item="item" index="index" collection="dataList">
-            MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ) AS ${item.value},
-        </foreach>
-        aa.time_type
-        FROM
-        (
-        SELECT
-        ci.index_id,
-        ci.NAME  AS "index_name",
-        di."value",
-        di.data_time,
-        di.time_type
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        LEFT JOIN facility_archives f ON f."id"=ci.equipment
-        WHERE
-        di.data_time >= #{beginTime}
-        AND di.data_time &lt; #{endTime}
-        AND di.index_id IN <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
-        AND di.time_type = #{timeType}
-        <if test="indexStorageId !='' and indexStorageId !=null">
-            and ci.equipment=#{indexStorageId}
-        </if>
-        ) aa
-        GROUP BY
-        aa.index_id,aa.index_name,aa.time_type
-    </select>
-
-    <select id="getListChart" resultMap="dataItemMap">
-        SELECT
-            di.index_id,
-            ci.name AS "index_name",
-            ci.unit_id,
-            di."value",
-            di.data_time,
-            di.time_type,
-            di.time_code
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        WHERE
-            di.index_id =#{indexId}
-            AND di.data_time >= #{beginTime}
-            AND di.data_time &lt; #{endTime}
-            AND di.time_type = #{timeType}
-        order by di.data_time
-    </select>
-</mapper>
diff --git a/energy_management_server/src/main/resources/mybatis/keyEquipment/yearKeyEquipmentMapper.xml b/energy_management_server/src/main/resources/mybatis/keyEquipment/yearKeyEquipmentMapper.xml
deleted file mode 100644
index 076e749..0000000
--- a/energy_management_server/src/main/resources/mybatis/keyEquipment/yearKeyEquipmentMapper.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.keyEquipment.mapper.yearKeyEquipmentMapper">
-    <resultMap id="dataItemMap" type="com.dingzhuo.energy.project.keyEquipment.domain.yearKeyEquipment">
-        <result column="index_id" property="indexId"/>
-        <result column="index_name" property="indexName"/>
-        <result column="time_type" property="timeType"/>
-        <result column="time_code" property="timeCode"/>
-        <result column="unit_id" property="unitId"/>
-        <result column="value1" property="value1"/>
-        <result column="value2" property="value2"/>
-        <result column="value3" property="value3"/>
-        <result column="value4" property="value4"/>
-        <result column="value5" property="value5"/>
-        <result column="value6" property="value6"/>
-        <result column="value7" property="value7"/>
-        <result column="value8" property="value8"/>
-        <result column="value9" property="value9"/>
-        <result column="value10" property="value10"/>
-        <result column="value11" property="value11"/>
-        <result column="value12" property="value12"/>
-    </resultMap>
-    <!--鍏ㄥ巶鑳借�楃粺璁�-->
-    <select id="getYearKeyEquipmentList" resultMap="dataItemMap">
-        SELECT
-        aa.index_id,
-        aa.index_name,
-        <foreach item="item" index="index" collection="dataList">
-            MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ) AS ${item.value},
-        </foreach>
-        aa.time_type
-        FROM
-        (
-        SELECT
-        ci.index_id,
-        ci.NAME  AS "index_name",
-        di."value",
-        di.data_time,
-        di.time_type
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        LEFT JOIN facility_archives f ON f."id"=ci.equipment
-        WHERE
-        di.data_time >= #{beginTime}
-        AND di.data_time &lt; #{endTime}
-        AND di.index_id IN <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
-        AND di.time_type = #{timeType}
-        <if test="indexStorageId !='' and indexStorageId !=null">
-            and ci.equipment=#{indexStorageId}
-        </if>
-        ) aa
-        GROUP BY
-        aa.index_id,aa.index_name,aa.time_type
-    </select>
-
-    <select id="getListChart" resultMap="dataItemMap">
-        SELECT
-            di.index_id,
-            ci.name AS "index_name",
-            ci.unit_id,
-            di."value",
-            di.data_time,
-            di.time_type,
-            di.time_code
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        WHERE
-            di.index_id =#{indexId}
-            AND di.data_time &lt; #{endTime}
-            AND di.data_time >= #{beginTime}
-            AND di.time_type = #{timeType}
-        order by di.data_time
-    </select>
-</mapper>
diff --git a/energy_management_server/src/main/resources/mybatis/mybatis-config.xml b/energy_management_server/src/main/resources/mybatis/mybatis-config.xml
deleted file mode 100644
index e8b52be..0000000
--- a/energy_management_server/src/main/resources/mybatis/mybatis-config.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE configuration
-PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-config.dtd">
-<configuration>
-	
-	<settings>
-		<setting name="cacheEnabled"             value="true" />  <!-- 鍏ㄥ眬鏄犲皠鍣ㄥ惎鐢ㄧ紦瀛� -->
-		<setting name="useGeneratedKeys"         value="true" />  <!-- 鍏佽 JDBC 鏀寔鑷姩鐢熸垚涓婚敭 -->
-		<setting name="defaultExecutorType"      value="REUSE" /> <!-- 閰嶇疆榛樿鐨勬墽琛屽櫒 -->
-		<setting name="logImpl"                  value="SLF4J" /> <!-- 鎸囧畾 MyBatis 鎵�鐢ㄦ棩蹇楃殑鍏蜂綋瀹炵幇 -->
-		<!-- <setting name="mapUnderscoreToCamelCase" value="true"/>  椹煎嘲寮忓懡鍚� -->
-	</settings>
-	
-</configuration>
diff --git a/energy_management_server/src/main/resources/mybatis/plannedOutput/PlanEnergyMapper.xml b/energy_management_server/src/main/resources/mybatis/plannedOutput/PlanEnergyMapper.xml
deleted file mode 100644
index 88eb207..0000000
--- a/energy_management_server/src/main/resources/mybatis/plannedOutput/PlanEnergyMapper.xml
+++ /dev/null
@@ -1,116 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.plannedOutput.mapper.PlanEnergyMapper">
-    
-    <resultMap type="PlanEnergy" id="PlanEnergyResult">
-        <result property="productId"    column="product_id"    />
-        <result property="value"    column="value"    />
-        <result property="energyValue"    column="energy_value"    />
-        <result property="timeType"    column="time_type"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="steamEnereyValue"    column="steam_enerey_value"    />
-        <result property="waterValue"    column="water_value"    />
-        <result property="waterEnergyValue"    column="water_energy_value"    />
-        <result property="coalValue"    column="coal_value"    />
-        <result property="coalEnergyValue"    column="coal_energy_value"    />
-        <result property="steamValue"    column="steam_value"    />
-        <result property="planValue"    column="plan_value"    />
-        <result property="timeCode"    column="time_code"    />
-        <result property="dataTime"    column="data_time"    />
-        <result property="actualValue"    column="actual_value"    />
-    </resultMap>
-
-    <sql id="selectPlanEnergyVo">
-        SELECT
-            productid as product_id,
-            productsno,
-            productname,
-            P.muid,
-            po.plan_value,
-            pe."value",
-            pe.energy_value,
-            pe.water_value,
-            pe.water_energy_value,
-            pe.coal_value,
-            pe.coal_energy_value,
-            pe.steam_value,
-            pe.steam_energy_value,
-            pe.actual_value
-        FROM
-            sys_product P
-            LEFT JOIN planned_output po ON po.product_id = P.productid
-            LEFT JOIN  plan_energy pe ON pe.product_id=p.productid
-    </sql>
-
-    <select id="PlanEnergyList" parameterType="PlanEnergy" resultMap="PlanEnergyResult">
-        <include refid="selectPlanEnergyVo"/>
-        <where>
-            p.productid in
-            <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
-            <if test="type != null  and type !=''"> AND pe.time_type = #{type} </if>
-            <if test="timeCode != null  and timeCode !=''"> AND pe.time_code = #{timeCode} AND po.time_code = #{timeCode}  </if>
-        </where>
-    </select>
-    <select id="selectPlanEnergyList" parameterType="PlanEnergy" resultMap="PlanEnergyResult">
-        SELECT
-            productid as product_id,
-            productsno,
-            productname,
-            P.muid,
-            po.plan_value
-        FROM
-            sys_product P
-            LEFT JOIN planned_output po ON po.product_id = P.productid
-        <where>
-            p.productid in
-            <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
-            <if test="timeCode != null  and timeCode !=''"> AND po.time_code = #{timeCode} </if>
-        </where>
-    </select>
-    <insert id="save">
-        insert into plan_energy (product_id,
-                               time_code,
-                               time_type,
-                               value,
-                               actual_value,
-                               energy_value,
-                               coal_value,
-                               coal_energy_value,
-                               steam_value,
-                               steam_energy_value,
-                               water_value,
-                               water_energy_value,
-                               data_time,
-                               create_time)
-        select #{planEnergy.productId},
-               #{planEnergy.timeCode},
-               #{planEnergy.timeType},
-               #{planEnergy.value,jdbcType = DOUBLE},
-               #{planEnergy.actualValue,jdbcType = DOUBLE},
-               #{planEnergy.energyValue,jdbcType = DOUBLE},
-               #{planEnergy.coalValue,jdbcType = DOUBLE},
-               #{planEnergy.coalEnergyValue,jdbcType = DOUBLE},
-               #{planEnergy.steamValue,jdbcType = DOUBLE},
-               #{planEnergy.steamEnereyValue,jdbcType = DOUBLE},
-               #{planEnergy.waterValue,jdbcType = DOUBLE},
-               #{planEnergy.waterEnergyValue,jdbcType = DOUBLE},
-               #{planEnergy.dataTime},
-               now()
-        on conflict
-          (product_id,time_code)
-        do update
-        set <if test="planEnergy.value !='' and planEnergy.value !=null">value = #{planEnergy.value, jdbcType = DOUBLE},</if>
-        <if test="planEnergy.actualValue !='' and planEnergy.actualValue !=null">actual_value = #{planEnergy.actualValue, jdbcType = DOUBLE},</if>
-        <if test="planEnergy.energyValue !='' and planEnergy.energyValue !=null">energy_value = #{planEnergy.energyValue, jdbcType = DOUBLE},</if>
-        <if test="planEnergy.coalValue !='' and planEnergy.coalValue !=null">coal_value = #{planEnergy.coalValue, jdbcType = DOUBLE},</if>
-        <if test="planEnergy.coalEnergyValue !='' and planEnergy.coalEnergyValue !=null">coal_energy_value = #{planEnergy.coalEnergyValue, jdbcType = DOUBLE},</if>
-        <if test="planEnergy.steamValue !='' and planEnergy.steamValue !=null">steam_value = #{planEnergy.steamValue, jdbcType = DOUBLE},</if>
-        <if test="planEnergy.steamEnereyValue !='' and planEnergy.steamEnereyValue !=null">steam_energy_value = #{planEnergy.steamEnereyValue, jdbcType = DOUBLE},</if>
-        <if test="planEnergy.waterValue !='' and planEnergy.waterValue !=null">water_value = #{planEnergy.waterValue, jdbcType = DOUBLE},</if>
-        <if test="planEnergy.waterEnergyValue !='' and planEnergy.waterEnergyValue !=null">water_energy_value = #{planEnergy.waterEnergyValue, jdbcType = DOUBLE},</if>
-          update_time = now();
-  </insert>
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/plannedOutput/PlannedOutputMapper.xml b/energy_management_server/src/main/resources/mybatis/plannedOutput/PlannedOutputMapper.xml
deleted file mode 100644
index 1c00c5e..0000000
--- a/energy_management_server/src/main/resources/mybatis/plannedOutput/PlannedOutputMapper.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.plannedOutput.mapper.PlannedOutputMapper">
-
-    <resultMap type="PlannedOutput" id="PlannedOutputResult">
-        <result property="palnType"    column="paln_type"    />
-        <result property="productId"    column="product_id"    />
-        <result property="planValue"    column="plan_value"    />
-        <result property="waterValue"    column="water_value"    />
-        <result property="coalValue"    column="coal_value"    />
-        <result property="value"    column="value"    />
-        <result property="steamValue"    column="steam_value"    />
-        <result property="dataTime"    column="data_time"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="productname"    column="productname"    />
-        <result property="productsno"    column="productsno"    />
-        <result property="muid"    column="muid"    />
-        <result property="timeCode"    column="time_code"    />
-    </resultMap>
-
-    <sql id="selectPlannedOutputVo">
-        SELECT
-            productid as product_id,
-            productsno,
-            productname,
-            p.muid,
-            po.plan_value,
-            po.paln_type,
-            po."value",
-            po.coal_value,
-            po.steam_value,
-            po.water_value
-        FROM
-            sys_product P
-          left JOIN planned_output po on po.product_id= p.productid
-    </sql>
-
-    <select id="selectPlannedOutputList" parameterType="PlannedOutput" resultMap="PlannedOutputResult">
-        <include refid="selectPlannedOutputVo"/>
-        <where>
-          p.productid in <foreach item="indexId" index="index" collection="indexIds"
-                                open="(" separator="," close=")">
-            #{indexId}
-        </foreach>
-          <if test="palnType != null  and palnType !=''"> AND po.paln_type = #{palnType} </if>
-          <if test="timeCode != null  and timeCode !=''"> AND po.time_code = #{timeCode} </if>
-        </where>
-    </select>
-    <select id="selectPlanList" parameterType="PlannedOutput" resultMap="PlannedOutputResult">
-        SELECT
-            productid as product_id,
-            productsno,
-            productname,
-            p.muid
-        FROM
-            sys_product P
-        <where>
-             p.productid in <foreach item="indexId" index="index" collection="indexIds"
-                                open="(" separator="," close=")">
-            #{indexId}
-            </foreach>
-        </where>
-    </select>
-    <insert id="insertPlannedOutput" parameterType="PlannedOutput">
-        insert into planned_output
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="palnType != null  and palnType != ''">paln_type,</if>
-            <if test="productId != null ">product_id,</if>
-            <if test="planValue != null  and planValue != ''">plan_value,</if>
-            <if test="dataTime != null ">data_time,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="updateTime != null ">update_time,</if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="palnType != null  and palnType != ''">#{palnType},</if>
-            <if test="productId != null ">#{productId},</if>
-            <if test="planValue != null  and planValue != ''">#{planValue},</if>
-            <if test="dataTime != null ">#{dataTime},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-        </trim>
-    </insert>
-
-    <insert id="save">
-        insert into planned_output (
-                               time_code,
-                               paln_type,
-                               product_id,
-                               plan_value,
-                               value,
-                               coal_value,
-                               steam_value,
-                               water_value,
-                               data_time,
-                               create_time)
-        select #{plannedOutput.timeCode},
-               #{plannedOutput.palnType},
-               #{plannedOutput.productId},
-               #{plannedOutput.planValue,jdbcType = DOUBLE},
-               #{plannedOutput.value,jdbcType = DOUBLE},
-               #{plannedOutput.coalValue,jdbcType = DOUBLE},
-               #{plannedOutput.steamValue,jdbcType = DOUBLE},
-               #{plannedOutput.waterValue,jdbcType = DOUBLE},
-               #{plannedOutput.dataTime},
-               now()
-        on conflict
-          (product_id,time_code)
-        do update
-        set plan_value = #{plannedOutput.planValue, jdbcType = DOUBLE},
-            <if test="plannedOutput.value !='' and plannedOutput.value !=null">value = #{plannedOutput.value, jdbcType = DOUBLE},</if>
-            <if test="plannedOutput.coalValue !='' and plannedOutput.coalValue !=null">coal_value = #{plannedOutput.coalValue, jdbcType = DOUBLE},</if>
-            <if test="plannedOutput.steamValue !='' and plannedOutput.steamValue !=null">steam_value = #{plannedOutput.steamValue, jdbcType = DOUBLE},</if>
-            <if test="plannedOutput.waterValue !='' and plannedOutput.waterValue !=null">water_value = #{plannedOutput.waterValue, jdbcType = DOUBLE},</if>
-            update_time = now();
-
-  </insert>
-    <insert id="saveDataList" parameterType="java.util.List">
-        <foreach item="PlannedOutput" collection="ItemVlues">
-            <if test="PlannedOutput != null">
-                insert into planned_output (
-                time_code,
-                paln_type,
-                product_id,
-                plan_value,
-                data_time,
-                create_time)
-                select #{plannedOutput.timeCode},
-                #{plannedOutput.palnType},
-                #{plannedOutput.productId},
-                #{plannedOutput.planValue,jdbcType = DOUBLE},
-                #{plannedOutput.dataTime},
-                now()
-                on conflict
-                (product_id,time_code)
-                do update
-                set plan_value = #{plannedOutput.planValue, jdbcType = DOUBLE},
-                update_time = now();
-            </if>
-        </foreach>
-    </insert>
-
-
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/plannedOutput/energyMonitoringMapper.xml b/energy_management_server/src/main/resources/mybatis/plannedOutput/energyMonitoringMapper.xml
deleted file mode 100644
index 538c445..0000000
--- a/energy_management_server/src/main/resources/mybatis/plannedOutput/energyMonitoringMapper.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.plannedOutput.mapper.energyMonitoringMapper">
-    
-    <resultMap type="energyMonitoring" id="energyMonitoringResult">
-        <result property="peValue"    column="pe_value"    />
-        <result property="peWaterValue"    column="pe_water_value"    />
-        <result property="peCoalValue"    column="pe_coal_value"    />
-        <result property="peSteamValue"    column="pe_steam_value"    />
-        <result property="actualValue"    column="actual_value"    />
-        <result property="planValue"    column="plan_value"    />
-        <result property="poValue"    column="po_value"    />
-        <result property="poVaterValue"    column="po_water_value"    />
-        <result property="poCoalValue"    column="po_coal_value"    />
-        <result property="poSteamValue"    column="po_steam_value"    />
-        <result property="productid"    column="productid"    />
-        <result property="productname"    column="productname"    />
-        <result property="muid"    column="muid"    />
-    </resultMap>
-
-    <select id="selectEnergyMonitoringList" parameterType="energyMonitoring" resultMap="energyMonitoringResult">
-        SELECT
-            pe."value" AS pe_value,
-            pe.water_value AS pe_water_value,
-            pe.coal_value AS pe_coal_value,
-            pe.steam_value AS pe_steam_value,
-            pe.actual_value,
-            po.plan_value,
-            po."value" AS po_value,
-            po.water_value AS po_water_value,
-            po.coal_value AS po_coal_value,
-            po.steam_value AS po_steam_value,
-            p.productid,
-            P.productname,
-            P.muid
-        FROM
-            plan_energy pe
-            LEFT JOIN planned_output po ON po.product_id = pe.product_id
-            LEFT JOIN sys_product P ON P.productid = pe.product_id
-        WHERE  p.productid in  <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
-            <if test="timeCode != null  and timeCode !=''"> AND pe.time_code = #{timeCode} </if>
-            <if test="timeCode != null  and timeCode !=''"> AND po.time_code = #{timeCode} </if>
-    </select>
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/processEnergyConsumption/processEnergyConsumptionMapper.xml b/energy_management_server/src/main/resources/mybatis/processEnergyConsumption/processEnergyConsumptionMapper.xml
deleted file mode 100644
index 39d3692..0000000
--- a/energy_management_server/src/main/resources/mybatis/processEnergyConsumption/processEnergyConsumptionMapper.xml
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.comprehensiveStatistics.mapper.processEnergyConsumptionMapper">
-    <resultMap id="dataItemMap" type="com.dingzhuo.energy.project.comprehensiveStatistics.domain.comprehensiveStatistics">
-        <id column="index_id" property="indexId"/>
-        <id column="time_code" property="timeCode"/>
-        <id column="index_code" property="indexCode"/>
-        <id column="index_name" property="indexName"/>
-        <result column="begin_time" property="beginTime"/>
-        <result column="end_time" property="endTime"/>
-        <result column="data_time" property="dataTime"/>
-        <result column="value" property="value"/>
-        <result column="time_type" property="timeType"/>
-        <result column="quality" property="quality"/>
-        <result column="unit_id" property="unitId"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="remark" property="remark"/>
-        <result column="name" property="name"/>
-        <result column="index_type" property="indexType"/>
-        <result column="facility_name" property="facilityName"/>
-    </resultMap>
-    <resultMap id="comprehensiveMap" type="com.dingzhuo.energy.project.comprehensiveStatistics.domain.comprehensive">
-        <result column="index_id" property="indexId"/>
-        <result column="index_name" property="indexName"/>
-        <result column="time_type" property="timeType"/>
-        <result column="value1" property="value1"/>
-        <result column="value2" property="value2"/>
-        <result column="value3" property="value3"/>
-        <result column="value4" property="value4"/>
-        <result column="value5" property="value5"/>
-        <result column="value6" property="value6"/>
-        <result column="value7" property="value7"/>
-        <result column="value8" property="value8"/>
-        <result column="value9" property="value9"/>
-        <result column="value10" property="value10"/>
-        <result column="value11" property="value11"/>
-        <result column="value12" property="value12"/>
-        <result column="value13" property="value13"/>
-        <result column="value14" property="value14"/>
-        <result column="value15" property="value15"/>
-        <result column="value16" property="value16"/>
-        <result column="value17" property="value17"/>
-        <result column="value18" property="value18"/>
-        <result column="value19" property="value19"/>
-        <result column="value20" property="value20"/>
-        <result column="value21" property="value21"/>
-        <result column="value22" property="value22"/>
-        <result column="value23" property="value23"/>
-        <result column="value24" property="value24"/>
-        <result column="value25" property="value25"/>
-        <result column="value26" property="value26"/>
-        <result column="value27" property="value27"/>
-        <result column="value28" property="value28"/>
-        <result column="value29" property="value29"/>
-        <result column="value30" property="value30"/>
-        <result column="value31" property="value31"/>
-    </resultMap>
-    <!--鍏ㄥ巶鑳借�楃粺璁�-->
-    <select id="getComprehensiveSList" resultMap="comprehensiveMap">
-        SELECT
-        aa.index_id,
-        aa.index_name,
-        <foreach item="item" index="index" collection="dataList">
-            MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ) AS ${item.value},
-        </foreach>
-        aa.time_type
-        FROM
-        (
-        SELECT
-        ci.index_id,
-        ci.NAME  AS "index_name",
-        di."value",
-        di.data_time,
-        di.time_type
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        WHERE
-        di.data_time >= #{beginTime}
-        AND di.data_time &lt; #{endTime}
-        AND di.index_id IN <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
-        AND di.time_type = #{timeType}
-        <if test="indexStorageId !='' and indexStorageId !=null">
-            and ci.energy_id=#{indexStorageId}
-        </if>
-        ) aa
-        GROUP BY
-        aa.index_id,aa.index_name,aa.time_type
-    </select>
-
-    <select id="getListChart" resultMap="dataItemMap">
-        SELECT
-            di.index_id,
-            ci.name AS "index_name",
-            ci.unit_id AS unitId,
-            di."value",
-            di.data_time,
-            di.time_type,
-            di.time_code
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        WHERE
-            di.index_id =#{indexId}
-            AND di.data_time &lt; #{endTime}
-            AND di.data_time >= #{beginTime}
-            AND di.time_type = #{timeType}
-    </select>
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/reportForm/annualReportMapper.xml b/energy_management_server/src/main/resources/mybatis/reportForm/annualReportMapper.xml
deleted file mode 100644
index 33e8f4f..0000000
--- a/energy_management_server/src/main/resources/mybatis/reportForm/annualReportMapper.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.reportForm.mapper.annualReportMapper">
-    <resultMap id="dataItemMap" type="com.dingzhuo.energy.project.reportForm.domain.annualReport">
-        <result column="index_id" property="indexId"/>
-        <result column="index_name" property="indexName"/>
-        <result column="time_type" property="timeType"/>
-        <result column="value1" property="value1"/>
-        <result column="value2" property="value2"/>
-        <result column="value3" property="value3"/>
-        <result column="value4" property="value4"/>
-        <result column="value5" property="value5"/>
-        <result column="value6" property="value6"/>
-        <result column="value7" property="value7"/>
-        <result column="value8" property="value8"/>
-        <result column="value9" property="value9"/>
-        <result column="value10" property="value10"/>
-        <result column="value11" property="value11"/>
-        <result column="value12" property="value12"/>
-    </resultMap>
-
-    <select id="getannualReportList"  resultMap="dataItemMap">
-        SELECT
-        aa.index_id,
-        aa.index_name,
-        <foreach item="item" index="index" collection="dataList">
-            COALESCE(MAX ( CASE WHEN data_time = #{item.dataTime} THEN round(cast("value" as numeric ),2) END ), null)  AS ${item.value},
-        </foreach>
-        aa.time_type
-        FROM
-        (
-        SELECT
-        ci.index_id,
-        ci.NAME  AS "index_name",
-        di."value",
-        di.data_time,
-        di.time_type
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        WHERE
-        di.data_time >= #{beginTime}
-        AND di.data_time &lt; #{endTime}
-        AND di.index_id IN <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
-        AND di.time_type = #{timeType}
-        <if test="indexStorageId !='' and indexStorageId !=null">
-        and ci.energy_id=#{indexStorageId}
-        </if>
-        ) aa
-        GROUP BY
-        aa.index_id,aa.index_name,aa.time_type
-    </select>
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/reportForm/consolidatedStatementsMapper.xml b/energy_management_server/src/main/resources/mybatis/reportForm/consolidatedStatementsMapper.xml
deleted file mode 100644
index f8f59dd..0000000
--- a/energy_management_server/src/main/resources/mybatis/reportForm/consolidatedStatementsMapper.xml
+++ /dev/null
@@ -1,221 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.reportForm.mapper.consolidatedStatementsMapper">
-
-    <resultMap type="com.dingzhuo.energy.project.reportForm.domain.consolidatedStatements" id="consolidatedResult">
-        <result property="id"    column="id"    />
-        <result property="trRljmZb"    column="tr_rljm_zb"    />
-        <result property="trRljmSwl"    column="tr_rljm_swl"    />
-        <result property="trRljmZbzm"    column="tr_rljm_zbzm"    />
-        <result property="trDianZb"    column="tr_dian_zb"    />
-        <result property="trDianSwl"    column="tr_dian_swl"    />
-        <result property="trDianZbzm"    column="tr_dian_zbzm"    />
-        <result property="trShuiZb"    column="tr_shui_zb"    />
-        <result property="trShuiSwl"    column="tr_shui_swl"    />
-        <result property="trShuiZbzm"    column="tr_shui_zbzm"    />
-        <result property="trZqZb"    column="tr_zq_zb"    />
-        <result property="trZqSwl"    column="tr_zq_swl"    />
-        <result property="trZqZbzm"    column="tr_zq_zbzm"    />
-        <result property="ccJtZb"    column="cc_jt_zb"    />
-        <result property="ccJtSwl"    column="cc_jt_swl"    />
-        <result property="ccJtZbzm"    column="cc_jt_zbzm"    />
-        <result property="ccJyZb"    column="cc_jy_zb"    />
-        <result property="ccJySwl"    column="cc_jy_swl"    />
-        <result property="ccJyZbzm"    column="cc_jy_zbzm"    />
-        <result property="ccCbZb"    column="cc_cb_zb"    />
-        <result property="ccCbSwl"    column="cc_cb_swl"    />
-        <result property="ccCbZbzm"    column="cc_cb_zbzm"    />
-        <result property="ccMqZb"    column="cc_mq_zb"    />
-        <result property="ccMqSwl"    column="cc_mq_swl"    />
-        <result property="ccMqZbzm"    column="cc_mq_zbzm"    />
-        <result property="ccDianZb"    column="cc_dian_zb"    />
-        <result property="ccDianSwl"    column="cc_dian_swl"    />
-        <result property="ccDianZbzm"    column="cc_dian_zbzm"    />
-        <result property="ccZqZb"    column="cc_zq_zb"    />
-        <result property="ccZqSwl"    column="cc_zq_swl"    />
-        <result property="ccZqZbzm"    column="cc_zq_zbzm"    />
-        <result property="timeType"    column="time_type"    />
-        <result property="dataTime"    column="data_time"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="remark"    column="remark"    />
-        <result property="timeCode"    column="time_code"    />
-        <result property="trZbzm"    column="tr_zbzm"    />
-        <result property="ccZbzm"    column="cc_zbzm"    />
-        <result property="jhbm"    column="jhbm"    />
-        <result property="zhnh"    column="zhnh"    />
-    </resultMap>
-
-
-    <sql id="selectConsolidatedStatementsVo">
-        select id, tr_rljm_zb, tr_rljm_swl, tr_rljm_zbzm, tr_dian_zb, tr_dian_swl, tr_dian_zbzm, tr_shui_zb, tr_shui_swl, tr_shui_zbzm, tr_zq_zb, tr_zq_swl, tr_zq_zbzm, cc_jt_zb, cc_jt_swl, cc_jt_zbzm, cc_jy_zb, cc_jy_swl, cc_jy_zbzm, cc_cb_zb, cc_cb_swl, cc_cb_zbzm, cc_mq_zb, cc_mq_swl, cc_mq_zbzm, cc_dian_zb, cc_dian_swl, cc_dian_zbzm, cc_zq_zb, cc_zq_swl, cc_zq_zbzm, time_type, create_time, create_by, update_time, update_by, remark, time_code, data_time, tr_zbzm, cc_zbzm, jhbm, zhnh from consolidated_statements
-    </sql>
-    <select id="selectconsolidatedStatementsList" resultMap="consolidatedResult" parameterType="com.dingzhuo.energy.project.reportForm.domain.consolidatedStatements">
-        <include refid="selectConsolidatedStatementsVo"/>
-        <where><if test="dataTime !='' and dataTime !=null">data_time= #{dataTime}</if></where>
-    </select>
-
-    <select id="selectconsolidatedStatementsById" parameterType="String" resultMap="consolidatedResult">
-        <include refid="selectConsolidatedStatementsVo"/>
-        where data_time = #{id}
-    </select>
-
-    <insert id="insertconsolidatedStatements" parameterType="com.dingzhuo.energy.project.reportForm.domain.consolidatedStatements">
-        insert into consolidated_statements
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="trRljmZb != null  and trRljmZb != ''">tr_rljm_zb,</if>
-            <if test="trRljmSwl != null  and trRljmSwl != ''">tr_rljm_swl,</if>
-            <if test="trRljmZbzm != null  and trRljmZbzm != ''">tr_rljm_zbzm,</if>
-            <if test="trDianZb != null  and trDianZb != ''">tr_dian_zb,</if>
-            <if test="trDianSwl != null  and trDianSwl != ''">tr_dian_swl,</if>
-            <if test="trDianZbzm != null  and trDianZbzm != ''">tr_dian_zbzm,</if>
-            <if test="trShuiZb != null  and trShuiZb != ''">tr_shui_zb,</if>
-            <if test="trShuiSwl != null  and trShuiSwl != ''">tr_shui_swl,</if>
-            <if test="trShuiZbzm != null  and trShuiZbzm != ''">tr_shui_zbzm,</if>
-            <if test="trZqZb != null  and trZqZb != ''">tr_zq_zb,</if>
-            <if test="trZqSwl != null  and trZqSwl != ''">tr_zq_swl,</if>
-            <if test="trZqZbzm != null  and trZqZbzm != ''">tr_zq_zbzm,</if>
-            <if test="ccJtZb != null  and ccJtZb != ''">cc_jt_zb,</if>
-            <if test="ccJtSwl != null  and ccJtSwl != ''">cc_jt_swl,</if>
-            <if test="ccJtZbzm != null  and ccJtZbzm != ''">cc_jt_zbzm,</if>
-            <if test="ccJyZb != null  and ccJyZb != ''">cc_jy_zb,</if>
-            <if test="ccJySwl != null  and ccJySwl != ''">cc_jy_swl,</if>
-            <if test="ccJyZbzm != null  and ccJyZbzm != ''">cc_jy_zbzm,</if>
-            <if test="ccCbZb != null  and ccCbZb != ''">cc_cb_zb,</if>
-            <if test="ccCbSwl != null  and ccCbSwl != ''">cc_cb_swl,</if>
-            <if test="ccCbZbzm != null  and ccCbZbzm != ''">cc_cb_zbzm,</if>
-            <if test="ccMqZb != null  and ccMqZb != ''">cc_mq_zb,</if>
-            <if test="ccMqSwl != null  and ccMqSwl != ''">cc_mq_swl,</if>
-            <if test="ccMqZbzm != null  and ccMqZbzm != ''">cc_mq_zbzm,</if>
-            <if test="ccDianZb != null  and ccDianZb != ''">cc_dian_zb,</if>
-            <if test="ccDianSwl != null  and ccDianSwl != ''">cc_dian_swl,</if>
-            <if test="ccDianZbzm != null  and ccDianZbzm != ''">cc_dian_zbzm,</if>
-            <if test="ccZqZb != null  and ccZqZb != ''">cc_zq_zb,</if>
-            <if test="ccZqSwl != null  and ccZqSwl != ''">cc_zq_swl,</if>
-            <if test="ccZqZbzm != null  and ccZqZbzm != ''">cc_zq_zbzm,</if>
-            <if test="timeType != null  and timeType != ''">time_type,</if>
-            <if test="createTime != null ">create_time,</if>
-            <if test="createBy != null  and createBy != ''">create_by,</if>
-            <if test="updateTime != null ">update_time,</if>
-            <if test="updateBy != null  and updateBy != ''">update_by,</if>
-            <if test="remark != null  and remark != ''">remark,</if>
-            <if test="timeCode != null  and timeCode != ''">time_code,</if>
-            <if test="dataTime != null  and dataTime != ''">data_time,</if>
-            <if test="trZbzm != null  and trZbzm != ''">tr_zbzm,</if>
-            <if test="ccZbzm != null  and ccZbzm != ''">cc_zbzm,</if>
-            <if test="jhbm != null  and jhbm != ''">jhbm,</if>
-            <if test="zhnh != null  and zhnh != ''">zhnh,</if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="trRljmZb != null  and trRljmZb != ''">#{trRljmZb},</if>
-            <if test="trRljmSwl != null  and trRljmSwl != ''">#{trRljmSwl},</if>
-            <if test="trRljmZbzm != null  and trRljmZbzm != ''">#{trRljmZbzm},</if>
-            <if test="trDianZb != null  and trDianZb != ''">#{trDianZb},</if>
-            <if test="trDianSwl != null  and trDianSwl != ''">#{trDianSwl},</if>
-            <if test="trDianZbzm != null  and trDianZbzm != ''">#{trDianZbzm},</if>
-            <if test="trShuiZb != null  and trShuiZb != ''">#{trShuiZb},</if>
-            <if test="trShuiSwl != null  and trShuiSwl != ''">#{trShuiSwl},</if>
-            <if test="trShuiZbzm != null  and trShuiZbzm != ''">#{trShuiZbzm},</if>
-            <if test="trZqZb != null  and trZqZb != ''">#{trZqZb},</if>
-            <if test="trZqSwl != null  and trZqSwl != ''">#{trZqSwl},</if>
-            <if test="trZqZbzm != null  and trZqZbzm != ''">#{trZqZbzm},</if>
-            <if test="ccJtZb != null  and ccJtZb != ''">#{ccJtZb},</if>
-            <if test="ccJtSwl != null  and ccJtSwl != ''">#{ccJtSwl},</if>
-            <if test="ccJtZbzm != null  and ccJtZbzm != ''">#{ccJtZbzm},</if>
-            <if test="ccJyZb != null  and ccJyZb != ''">#{ccJyZb},</if>
-            <if test="ccJySwl != null  and ccJySwl != ''">#{ccJySwl},</if>
-            <if test="ccJyZbzm != null  and ccJyZbzm != ''">#{ccJyZbzm},</if>
-            <if test="ccCbZb != null  and ccCbZb != ''">#{ccCbZb},</if>
-            <if test="ccCbSwl != null  and ccCbSwl != ''">#{ccCbSwl},</if>
-            <if test="ccCbZbzm != null  and ccCbZbzm != ''">#{ccCbZbzm},</if>
-            <if test="ccMqZb != null  and ccMqZb != ''">#{ccMqZb},</if>
-            <if test="ccMqSwl != null  and ccMqSwl != ''">#{ccMqSwl},</if>
-            <if test="ccMqZbzm != null  and ccMqZbzm != ''">#{ccMqZbzm},</if>
-            <if test="ccDianZb != null  and ccDianZb != ''">#{ccDianZb},</if>
-            <if test="ccDianSwl != null  and ccDianSwl != ''">#{ccDianSwl},</if>
-            <if test="ccDianZbzm != null  and ccDianZbzm != ''">#{ccDianZbzm},</if>
-            <if test="ccZqZb != null  and ccZqZb != ''">#{ccZqZb},</if>
-            <if test="ccZqSwl != null  and ccZqSwl != ''">#{ccZqSwl},</if>
-            <if test="ccZqZbzm != null  and ccZqZbzm != ''">#{ccZqZbzm},</if>
-            <if test="timeType != null  and timeType != ''">#{timeType},</if>
-            <if test="createTime != null ">#{createTime},</if>
-            <if test="createBy != null  and createBy != ''">#{createBy},</if>
-            <if test="updateTime != null ">#{updateTime},</if>
-            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
-            <if test="remark != null  and remark != ''">#{remark},</if>
-            <if test="timeCode != null  and timeCode != ''">#{timeCode},</if>
-            <if test="dataTime != null  and dataTime != ''">#{dataTime},</if>
-            <if test="trZbzm != null  and trZbzm != ''">#{trZbzm},</if>
-            <if test="ccZbzm != null  and ccZbzm != ''">#{ccZbzm},</if>
-            <if test="jhbm != null  and jhbm != ''">#{jhbm},</if>
-            <if test="zhnh != null  and zhnh != ''">#{zhnh},</if>
-        </trim>
-    </insert>
-
-    <update id="updateconsolidatedStatements" parameterType="com.dingzhuo.energy.project.reportForm.domain.consolidatedStatements">
-        update consolidated_statements
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="trRljmZb != null  and trRljmZb != ''">tr_rljm_zb = #{trRljmZb},</if>
-            <if test="trRljmSwl != null  and trRljmSwl != ''">tr_rljm_swl = #{trRljmSwl},</if>
-            <if test="trRljmZbzm != null  and trRljmZbzm != ''">tr_rljm_zbzm = #{trRljmZbzm},</if>
-            <if test="trDianZb != null  and trDianZb != ''">tr_dian_zb = #{trDianZb},</if>
-            <if test="trDianSwl != null  and trDianSwl != ''">tr_dian_swl = #{trDianSwl},</if>
-            <if test="trDianZbzm != null  and trDianZbzm != ''">tr_dian_zbzm = #{trDianZbzm},</if>
-            <if test="trShuiZb != null  and trShuiZb != ''">tr_shui_zb = #{trShuiZb},</if>
-            <if test="trShuiSwl != null  and trShuiSwl != ''">tr_shui_swl = #{trShuiSwl},</if>
-            <if test="trShuiZbzm != null  and trShuiZbzm != ''">tr_shui_zbzm = #{trShuiZbzm},</if>
-            <if test="trZqZb != null  and trZqZb != ''">tr_zq_zb = #{trZqZb},</if>
-            <if test="trZqSwl != null  and trZqSwl != ''">tr_zq_swl = #{trZqSwl},</if>
-            <if test="trZqZbzm != null  and trZqZbzm != ''">tr_zq_zbzm = #{trZqZbzm},</if>
-            <if test="ccJtZb != null  and ccJtZb != ''">cc_jt_zb = #{ccJtZb},</if>
-            <if test="ccJtSwl != null  and ccJtSwl != ''">cc_jt_swl = #{ccJtSwl},</if>
-            <if test="ccJtZbzm != null  and ccJtZbzm != ''">cc_jt_zbzm = #{ccJtZbzm},</if>
-            <if test="ccJyZb != null  and ccJyZb != ''">cc_jy_zb = #{ccJyZb},</if>
-            <if test="ccJySwl != null  and ccJySwl != ''">cc_jy_swl = #{ccJySwl},</if>
-            <if test="ccJyZbzm != null  and ccJyZbzm != ''">cc_jy_zbzm = #{ccJyZbzm},</if>
-            <if test="ccCbZb != null  and ccCbZb != ''">cc_cb_zb = #{ccCbZb},</if>
-            <if test="ccCbSwl != null  and ccCbSwl != ''">cc_cb_swl = #{ccCbSwl},</if>
-            <if test="ccCbZbzm != null  and ccCbZbzm != ''">cc_cb_zbzm = #{ccCbZbzm},</if>
-            <if test="ccMqZb != null  and ccMqZb != ''">cc_mq_zb = #{ccMqZb},</if>
-            <if test="ccMqSwl != null  and ccMqSwl != ''">cc_mq_swl = #{ccMqSwl},</if>
-            <if test="ccMqZbzm != null  and ccMqZbzm != ''">cc_mq_zbzm = #{ccMqZbzm},</if>
-            <if test="ccDianZb != null  and ccDianZb != ''">cc_dian_zb = #{ccDianZb},</if>
-            <if test="ccDianSwl != null  and ccDianSwl != ''">cc_dian_swl = #{ccDianSwl},</if>
-            <if test="ccDianZbzm != null  and ccDianZbzm != ''">cc_dian_zbzm = #{ccDianZbzm},</if>
-            <if test="ccZqZb != null  and ccZqZb != ''">cc_zq_zb = #{ccZqZb},</if>
-            <if test="ccZqSwl != null  and ccZqSwl != ''">cc_zq_swl = #{ccZqSwl},</if>
-            <if test="ccZqZbzm != null  and ccZqZbzm != ''">cc_zq_zbzm = #{ccZqZbzm},</if>
-            <if test="timeType != null  and timeType != ''">time_type = #{timeType},</if>
-            <if test="createTime != null ">create_time = #{createTime},</if>
-            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
-            <if test="updateTime != null ">update_time = #{updateTime},</if>
-            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="remark != null  and remark != ''">remark = #{remark},</if>
-            <if test="timeCode != null  and timeCode != ''">time_code = #{timeCode},</if>
-            <if test="dataTime != null  and dataTime != ''">data_time=#{dataTime},</if>
-            <if test="trZbzm != null  and trZbzm != ''">tr_zbzm = #{trZbzm},</if>
-            <if test="ccZbzm != null  and ccZbzm != ''">cc_zbzm = #{ccZbzm},</if>
-            <if test="jhbm != null  and jhbm != ''">jhbm = #{jhbm},</if>
-            <if test="zhnh != null  and zhnh != ''">zhnh = #{zhnh},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteconsolidatedStatementsById" parameterType="String">
-        delete from consolidated_statements where id = #{id}
-    </delete>
-
-    <delete id="deleteconsolidatedStatementsByIds" parameterType="String">
-        delete from consolidated_statements where id in
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/reportForm/dailyReportMapper.xml b/energy_management_server/src/main/resources/mybatis/reportForm/dailyReportMapper.xml
deleted file mode 100644
index 5011b14..0000000
--- a/energy_management_server/src/main/resources/mybatis/reportForm/dailyReportMapper.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.reportForm.mapper.dailyReportMapper">
-    <resultMap id="dataItemMap" type="com.dingzhuo.energy.project.reportForm.domain.dailyReport">
-        <result column="index_id" property="indexId"/>
-        <result column="index_name" property="indexName"/>
-        <result column="time_type" property="timeType"/>
-        <result column="value1" property="value1"/>
-        <result column="value2" property="value2"/>
-        <result column="value3" property="value3"/>
-        <result column="value4" property="value4"/>
-        <result column="value5" property="value5"/>
-        <result column="value6" property="value6"/>
-        <result column="value7" property="value7"/>
-        <result column="value8" property="value8"/>
-        <result column="value9" property="value9"/>
-        <result column="value10" property="value10"/>
-        <result column="value11" property="value11"/>
-        <result column="value12" property="value12"/>
-        <result column="value13" property="value13"/>
-        <result column="value14" property="value14"/>
-        <result column="value15" property="value15"/>
-        <result column="value16" property="value16"/>
-        <result column="value17" property="value17"/>
-        <result column="value18" property="value18"/>
-        <result column="value19" property="value19"/>
-        <result column="value20" property="value20"/>
-        <result column="value21" property="value21"/>
-        <result column="value22" property="value22"/>
-        <result column="value23" property="value23"/>
-        <result column="value0" property="value0"/>
-    </resultMap>
-    <select id="getDailyReportList"  resultMap="dataItemMap">
-        SELECT
-        aa.index_id,
-        aa.index_name,
-        <foreach item="item" index="index" collection="dataList">
-            COALESCE(MAX ( CASE WHEN data_time = #{item.dataTime} THEN round(cast("value" as numeric ),2) END ), null)  AS ${item.value},
-        </foreach>
-        aa.time_type
-        FROM
-        (
-        SELECT
-        ci.index_id,
-        ci.NAME  AS "index_name",
-        di."value",
-        di.data_time,
-        di.time_type
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        WHERE
-        di.data_time >= #{beginTime}
-        AND di.data_time &lt; #{endTime}
-        AND di.index_id IN <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
-        AND di.time_type = #{timeType}
-        <if test="indexStorageId !='' and indexStorageId !=null">
-        and ci.energy_id=#{indexStorageId}
-        </if>
-        ) aa
-        GROUP BY
-        aa.index_id,aa.index_name,aa.time_type
-    </select>
-
-    <select id="listDailyReportList" resultType="com.dingzhuo.energy.project.reportForm.domain.dailyReport">
-        SELECT
-            aa.index_id,
-            aa.index_name indexName,
-            <foreach item="item" index="index" collection="dataList">
-                COALESCE ( MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ), null ) AS ${item.value},
-            </foreach>
-            aa.time_type
-        FROM
-        (
-            SELECT
-                ni.index_id,
-                ei."name" AS "index_name",
-                di."value",
-                di.data_time,
-                di.time_type,
-                mn.order_num
-            FROM
-                model_node mn
-                LEFT JOIN node_index ni ON ni.node_id = mn.node_id
-                LEFT JOIN energy_index ei ON ei.index_id = ni.index_id
-                LEFT JOIN data_item di ON ni.index_id = di.index_id
-            WHERE
-                mn.parent_id = #{nodeId}
-                AND di.data_time >= #{beginTime}
-                AND di.data_time &lt; #{endTime}
-                AND di.time_type = #{timeType}
-            <if test="indexStorageId !='' and indexStorageId !=null">
-                and ei.energy_id=#{indexStorageId}
-            </if>
-        ) aa
-        GROUP BY aa.index_id, aa.index_name, aa.time_type, aa.order_num
-        ORDER BY aa.order_num ASC
-    </select>
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/reportForm/monthlyReportMapper.xml b/energy_management_server/src/main/resources/mybatis/reportForm/monthlyReportMapper.xml
deleted file mode 100644
index 0d44f4b..0000000
--- a/energy_management_server/src/main/resources/mybatis/reportForm/monthlyReportMapper.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.reportForm.mapper.monthlyReportMapper">
-    <resultMap id="dataItemMap" type="com.dingzhuo.energy.project.reportForm.domain.monthlyReport">
-        <result column="index_id" property="indexId"/>
-        <result column="index_name" property="indexName"/>
-        <result column="time_type" property="timeType"/>
-        <result column="value1" property="value1"/>
-        <result column="value2" property="value2"/>
-        <result column="value3" property="value3"/>
-        <result column="value4" property="value4"/>
-        <result column="value5" property="value5"/>
-        <result column="value6" property="value6"/>
-        <result column="value7" property="value7"/>
-        <result column="value8" property="value8"/>
-        <result column="value9" property="value9"/>
-        <result column="value10" property="value10"/>
-        <result column="value11" property="value11"/>
-        <result column="value12" property="value12"/>
-        <result column="value13" property="value13"/>
-        <result column="value14" property="value14"/>
-        <result column="value15" property="value15"/>
-        <result column="value16" property="value16"/>
-        <result column="value17" property="value17"/>
-        <result column="value18" property="value18"/>
-        <result column="value19" property="value19"/>
-        <result column="value20" property="value20"/>
-        <result column="value21" property="value21"/>
-        <result column="value22" property="value22"/>
-        <result column="value23" property="value23"/>
-        <result column="value24" property="value24"/>
-        <result column="value25" property="value25"/>
-        <result column="value26" property="value26"/>
-        <result column="value27" property="value27"/>
-        <result column="value28" property="value28"/>
-        <result column="value29" property="value29"/>
-        <result column="value30" property="value30"/>
-        <result column="value31" property="value31"/>
-    </resultMap>
-    <select id="getmonthlyReportList"  resultMap="dataItemMap">
-        SELECT
-        aa.index_id,
-        aa.index_name,
-        <foreach item="item" index="index" collection="dataList">
-            COALESCE(MAX ( CASE WHEN data_time = #{item.dataTime} THEN round(cast("value" as numeric ),2) END ), null)  AS ${item.value},
-        </foreach>
-        aa.time_type
-        FROM
-        (
-        SELECT
-        ci.index_id,
-        ci.NAME  AS "index_name",
-        di."value",
-        di.data_time,
-        di.time_type
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        WHERE
-        di.data_time >= #{beginTime}
-        AND di.data_time &lt;= #{endTime}
-        AND di.index_id IN <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
-        AND di.time_type = #{timeType}
-        <if test="indexStorageId !='' and indexStorageId !=null">
-        and ci.energy_id=#{indexStorageId}
-        </if>
-        ) aa
-        GROUP BY
-        aa.index_id,aa.index_name,aa.time_type
-    </select>
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/reportForm/reportFromMapper.xml b/energy_management_server/src/main/resources/mybatis/reportForm/reportFromMapper.xml
deleted file mode 100644
index 564cb09..0000000
--- a/energy_management_server/src/main/resources/mybatis/reportForm/reportFromMapper.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.reportForm.mapper.reportFormMapper">
-    <resultMap type="reportForm" id="reportFormResult">
-        <result property="code" column="code"/>
-        <result property="name" column="name"/>
-        <result property="nodeId" column="node_id"/>
-        <result property="parentId" column="parent_id"/>
-        <result property="address" column="address"/>
-        <result property="modelCode" column="model_code"/>
-        <result property="nodeCategory" column="node_category"/>
-        <result property="orderNum" column="order_num"/>
-        <result property="indexId" column="index_id"/>
-        <result property="indexType" column="index_type"/>
-        <result property="value" column="value"/>
-        <result property="dataTime" column="data_time"/>
-    </resultMap>
-    <resultMap id="dataItemMap" type="com.dingzhuo.energy.project.reportForm.domain.dailyReport">
-        <result column="index_id" property="indexId"/>
-        <result column="index_name" property="indexName"/>
-        <result column="time_type" property="timeType"/>
-        <result column="value1" property="value1"/>
-        <result column="value2" property="value2"/>
-        <result column="value3" property="value3"/>
-        <result column="value4" property="value4"/>
-        <result column="value5" property="value5"/>
-        <result column="value6" property="value6"/>
-        <result column="value7" property="value7"/>
-        <result column="value8" property="value8"/>
-        <result column="value9" property="value9"/>
-        <result column="value10" property="value10"/>
-        <result column="value11" property="value11"/>
-        <result column="value12" property="value12"/>
-        <result column="value13" property="value13"/>
-        <result column="value14" property="value14"/>
-        <result column="value15" property="value15"/>
-        <result column="value16" property="value16"/>
-        <result column="value17" property="value17"/>
-        <result column="value18" property="value18"/>
-        <result column="value19" property="value19"/>
-        <result column="value20" property="value20"/>
-        <result column="value21" property="value21"/>
-        <result column="value22" property="value22"/>
-        <result column="value23" property="value23"/>
-        <result column="value24" property="value24"/>
-        <result column="value25" property="value25"/>
-        <result column="value26" property="value26"/>
-        <result column="value27" property="value27"/>
-        <result column="value28" property="value28"/>
-        <result column="value29" property="value29"/>
-        <result column="value30" property="value30"/>
-        <result column="value31" property="value31"/>
-    </resultMap>
-    <select id="selectReportFormList" parameterType="reportForm" resultMap="reportFormResult">
-        SELECT
-            node_id,
-            code,
-            NAME,
-            parent_id,
-            address,
-            model_code,
-            node_category,
-            order_num
-        FROM
-            model_node
-        WHERE
-            model_code =#{code}
-            AND parent_id IN ( SELECT node_id FROM model_node WHERE model_code = #{code} AND parent_id IN ( SELECT node_id FROM model_node WHERE model_code = #{code} AND parent_id IS NULL ) )
-        ORDER BY
-            order_num
-   </select>
-    <select id="selectReportFormListp" parameterType="reportForm" resultMap="reportFormResult">
-        SELECT
-            node_id,
-            code,
-            NAME,
-            parent_id,
-            address,
-            model_code,
-            node_category,
-            order_num
-        FROM
-            model_node
-        WHERE
-            model_code = #{code}
-            AND parent_id IN ( SELECT node_id FROM model_node WHERE model_code = #{code} AND parent_id IS NULL )
-        ORDER BY
-            order_num
-    </select>
-    <select id="selectList" parameterType="reportForm" resultMap="reportFormResult">
-        SELECT
-            SUM ( VALUE ) as value,
-            d.index_id,
-            n.node_id,
-            to_char( d.data_time, 'MM' ) AS timeDate,
-            to_char( d.data_time, 'YYYY-MM' ) AS timeYear
-        FROM
-            data_item d
-            LEFT JOIN energy_index i ON d.index_id = i.index_id
-            LEFT JOIN node_index ni ON i.index_id = ni.index_id
-            LEFT JOIN model_node n ON n.node_id = ni.node_id
-        WHERE
-            time_type = #{timeType}
-            and n.model_code = #{code}
-            and to_char( d.data_time, 'YYYY-MM' )>=#{timeYear}
-            and to_char( d.data_time, 'YYYY' )&lt;=#{timeDate}
-        GROUP BY
-            to_char( data_time, 'YYYY-MM' ),
-            n.node_id,
-            d.index_id,
-            to_char( d.data_time, 'MM' );
-   </select>
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/reportForm/reportSetMapper.xml b/energy_management_server/src/main/resources/mybatis/reportForm/reportSetMapper.xml
deleted file mode 100644
index d0387e4..0000000
--- a/energy_management_server/src/main/resources/mybatis/reportForm/reportSetMapper.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.reportForm.mapper.reportSetMapper">
-    <resultMap type="reportSet" id="reportSetResult">
-        <result property="id" column="id"/>
-        <result property="indexId" column="index_id"/>
-        <result property="dateType" column="date_type"/>
-        <result property="nodeId" column="node_id"/>
-        <result property="enableLimitValue" column="enable_limit_value"/>
-        <result property="limitValUp" column="limit_val_up"/>
-        <result property="limitValDown" column="limit_val_down"/>
-        <result property="limitReplaceValUp" column="limit_replace_val_up"/>
-        <result property="limitReplaceValDown" column="limit_replace_val_down"/>
-    </resultMap>
-    <select id="listReportSet" parameterType="String" resultMap="reportSetResult">
-        SELECT
-            *
-        FROM
-            report_set
-        WHERE
-            index_id =#{indexId}
-            AND node_id = #{nodeId} AND del = 0
-   </select>
-
-    <select id="listNodeReportSet" parameterType="String" resultMap="reportSetResult">
-        SELECT
-            *
-        FROM
-            report_set
-        WHERE
-            node_id = #{nodeId} AND del = 0
-   </select>
-
-    <update id="deleteReportSetByNodeId" parameterType="String">
-        update report_set set del = 1 , update_time = now(),update_by=#{username} where node_id = #{nodeId} AND index_id = #{indexId} and del=0
-    </update>
-
-    <insert id="saveReportSet">
-        insert into report_set (
-        id,
-        index_id,
-        node_id,
-        date_type,
-        limit_val_up,
-        limit_val_down,
-        limit_replace_val_up,
-        limit_replace_val_down,
-        update_time,
-        update_by,
-        create_time,
-        create_by,del,enable_limit_value)
-        values
-        <foreach collection="list" item="data" index="index" separator=",">
-            (#{data.id},
-            #{data.indexId},
-            #{data.nodeId},
-            #{data.dateType},
-            #{data.limitValUp},
-            #{data.limitValDown},
-            #{data.limitReplaceValUp},
-            #{data.limitReplaceValDown},
-            now(),
-            #{data.updateBy},
-            now(),
-            #{data.createBy},0,#{data.enableLimitValue})
-        </foreach>
-    </insert>
-
-    <resultMap type="reportSetDataModel" id="reportSetDataResult">
-        <result property="indexId" column="index_id"/>
-        <result property="indexCode" column="code"/>
-        <result property="indexName" column="name"/>
-        <result property="meterName" column="meter_name"/>
-    </resultMap>
-
-    <select id="listNodeIndex" parameterType="String" resultMap="reportSetDataResult">
-        select
-            ni.index_id,ei."name",ei.code,mi.meter_name
-        from
-            node_index ni
-            left join energy_index ei on ni.index_id = ei.index_id
-						LEFT JOIN meter_implement mi on mi."id" = ei.meter_id
-					WHERE
-            ni.node_id =#{nodeId}
-            AND  ei.index_type = #{indexType}
-   </select>
-
-    <update id="updateEnableStatus" >
-        update report_set set enable_limit_value = #{enableStatus} , update_time = now(),update_by=#{username} where node_id = #{nodeId} AND index_id = #{indexId} and del=0
-    </update>
-
-    <select id="getAllEnableSetByDateType" parameterType="String" resultMap="reportSetResult">
-        SELECT
-            *
-        FROM
-            report_set
-        WHERE del = 0 AND enable_limit_value = 1 AND date_type = #{dateType}
-    </select>
-</mapper>
diff --git a/energy_management_server/src/main/resources/mybatis/statisticalData/GxdhCountMapper.xml b/energy_management_server/src/main/resources/mybatis/statisticalData/GxdhCountMapper.xml
deleted file mode 100644
index 0447765..0000000
--- a/energy_management_server/src/main/resources/mybatis/statisticalData/GxdhCountMapper.xml
+++ /dev/null
@@ -1,236 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.statisticalData.mapper.GxdhCountMapper">
-    
-    <resultMap type="GxdhCount" id="GxdhCountResult">
-        <result property="id"    column="id"    />
-        <result property="repProductType"    column="rep_product_type"    />
-        <result property="electricIndex"    column="electric_index"    />
-        <result property="gasIndex"    column="gas_index"    />
-        <result property="steamIndex"    column="steam_index"    />
-        <result property="varietyType"    column="variety_type"    />
-    </resultMap>
-
-    <resultMap type="GxdhCountIndex" id="GxdhCountIndexResult">
-        <result property="index_id"    column="index_id"    />
-        <result property="repProductType"    column="rep_product_type"    />
-        <result property="varietyType"    column="variety_type"    />
-        <result property="FL"    column="fl"    />
-        <result property="a1" column="a1"/>
-        <result property="a2" column="a2"/>
-        <result property="a3" column="a3"/>
-        <result property="a4" column="a4"/>
-        <result property="a5" column="a5"/>
-        <result property="a6" column="a6"/>
-        <result property="a7" column="a7"/>
-        <result property="a8" column="a8"/>
-        <result property="a9" column="a9"/>
-        <result property="a10" column="a10"/>
-        <result property="a11" column="a11"/>
-        <result property="a12" column="a12"/>
-        <result property="a13" column="a13"/>
-        <result property="a14" column="a14"/>
-        <result property="a15" column="a15"/>
-        <result property="a16" column="a16"/>
-        <result property="a17" column="a17"/>
-        <result property="a18" column="a18"/>
-        <result property="a19" column="a19"/>
-        <result property="a20" column="a20"/>
-        <result property="a21" column="a21"/>
-        <result property="a22" column="a22"/>
-        <result property="a23" column="a23"/>
-        <result property="a24" column="a24"/>
-        <result property="a25" column="a25"/>
-        <result property="a26" column="a26"/>
-        <result property="a27" column="a27"/>
-        <result property="a28" column="a28"/>
-        <result property="a29" column="a29"/>
-        <result property="a30" column="a30"/>
-        <result property="a31" column="a31"/>
-        <result property="a32" column="a32"/>
-        <result property="a33" column="a33"/>
-        <result property="a34" column="a34"/>
-        <result property="a35" column="a35"/>
-        <result property="a36" column="a36"/>
-    </resultMap>
-
-    <sql id="selectGxdhCountVo">
-        select id, rep_product_type, electric_index, gas_index, steam_index, variety_type from gxdh_count
-    </sql>
-
-    <select id="selectGxdhCountList" parameterType="GxdhCount" resultMap="GxdhCountResult">
-        <include refid="selectGxdhCountVo"/>
-        <where>  
-            <if test="repProductType != null  and repProductType != ''"> and rep_product_type = #{repProductType}</if>
-            <if test="varietyType != null  and varietyType != ''"> and variety_type = #{varietyType}</if>
-        </where>
-    </select>
-    
-    <select id="selectGxdhCountById" parameterType="String" resultMap="GxdhCountResult">
-        <include refid="selectGxdhCountVo"/>
-        where id = #{id}
-    </select>
-        
-    <insert id="insertGxdhCount" parameterType="GxdhCount">
-        insert into gxdh_count
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">id,</if>
-            <if test="repProductType != null  and repProductType != ''">rep_product_type,</if>
-            <if test="electricIndex != null  and electricIndex != ''">electric_index,</if>
-            <if test="gasIndex != null  and gasIndex != ''">gas_index,</if>
-            <if test="steamIndex != null  and steamIndex != ''">steam_index,</if>
-            <if test="varietyType != null  and varietyType != ''">variety_type,</if>
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null  and id != ''">#{id},</if>
-            <if test="repProductType != null  and repProductType != ''">#{repProductType},</if>
-            <if test="electricIndex != null  and electricIndex != ''">#{electricIndex},</if>
-            <if test="gasIndex != null  and gasIndex != ''">#{gasIndex},</if>
-            <if test="steamIndex != null  and steamIndex != ''">#{steamIndex},</if>
-            <if test="varietyType != null  and varietyType != ''">#{varietyType},</if>
-         </trim>
-    </insert>
-
-    <update id="updateGxdhCount" parameterType="GxdhCount">
-        update gxdh_count
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="repProductType != null  and repProductType != ''">rep_product_type = #{repProductType},</if>
-            <if test="electricIndex != null  and electricIndex != ''">electric_index = #{electricIndex},</if>
-            <if test="gasIndex != null  and gasIndex != ''">gas_index = #{gasIndex},</if>
-            <if test="steamIndex != null  and steamIndex != ''">steam_index = #{steamIndex},</if>
-            <if test="varietyType != null  and varietyType != ''">variety_type = #{varietyType},</if>
-        </trim>
-        where id = #{id}
-    </update>
-
-    <delete id="deleteGxdhCountById" parameterType="String">
-        delete from gxdh_count where id = #{id}
-    </delete>
-
-    <delete id="deleteGxdhCountByIds" parameterType="String">
-        delete from gxdh_count where id in 
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-
-    <select id="selectGxdhCountIndexList" parameterType="GxdhCountIndex" resultMap="GxdhCountIndexResult">
-        <!--鑳芥簮娑堣�楅噺 鎴�  浜у搧浜ч噺鐨�  鐒︾偔鐨�  鐢�   鐓ゆ皵 钂告苯 -->
-        SELECT
-        aa.index_id,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '01'		THEN "value" END ) AS 	A1	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '02'		THEN "value" END ) AS 	A2	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '03'		THEN "value" END ) AS 	A3	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '04'		THEN "value" END ) AS 	A4	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '05'		THEN "value" END ) AS 	A5	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '06'		THEN "value" END ) AS 	A6	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '07'		THEN "value" END ) AS 	A7	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '08'		THEN "value" END ) AS 	A8	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '09'		THEN "value" END ) AS 	A9	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '10'		THEN "value" END ) AS 	A10	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '11'		THEN "value" END ) AS 	A11	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '12'		THEN "value" END ) AS 	A12	,
-        max(rep_product_type) rep_product_type,
-        max(variety_type) variety_type,
-        'DIAN' as FL
-        FROM
-        (
-        SELECT
-        a.index_id,
-        "value",
-        data_time,
-        b.rep_product_type,
-        b.variety_type
-        FROM
-        data_item a,
-        gxdh_count b
-        WHERE
-        to_char(data_time,'YYYY') = #{selectYear}
-        AND time_type = 'MONTH'
-        and b.variety_type=#{varietyType}
-        and b.rep_product_type=#{repProductType}
-        and a.index_id = b.electric_index
-        ) aa
-        GROUP BY
-        aa.index_id
-        UNION all
-        SELECT
-        aa.index_id,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '01'		THEN "value" END ) AS 	A1	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '02'		THEN "value" END ) AS 	A2	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '03'		THEN "value" END ) AS 	A3	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '04'		THEN "value" END ) AS 	A4	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '05'		THEN "value" END ) AS 	A5	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '06'		THEN "value" END ) AS 	A6	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '07'		THEN "value" END ) AS 	A7	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '08'		THEN "value" END ) AS 	A8	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '09'		THEN "value" END ) AS 	A9	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '10'		THEN "value" END ) AS 	A10	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '11'		THEN "value" END ) AS 	A11	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '12'		THEN "value" END ) AS 	A12	,
-        max(rep_product_type),
-        max(variety_type),
-        'MQ' as FL
-        FROM
-        (
-        SELECT
-        a.index_id,
-        "value",
-        data_time,
-        b.rep_product_type,
-        b.variety_type
-        FROM
-        data_item a,
-        gxdh_count b
-        WHERE
-        to_char(data_time,'YYYY') = #{selectYear}
-        AND time_type = 'MONTH'
-        and b.variety_type=#{varietyType}
-        and b.rep_product_type=#{repProductType}
-        and  a.index_id = b.gas_index
-        ) aa
-        GROUP BY
-        aa.index_id
-        UNION all
-        SELECT
-        aa.index_id,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '01'		THEN "value" END ) AS 	A1	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '02'		THEN "value" END ) AS 	A2	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '03'		THEN "value" END ) AS 	A3	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '04'		THEN "value" END ) AS 	A4	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '05'		THEN "value" END ) AS 	A5	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '06'		THEN "value" END ) AS 	A6	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '07'		THEN "value" END ) AS 	A7	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '08'		THEN "value" END ) AS 	A8	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '09'		THEN "value" END ) AS 	A9	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '10'		THEN "value" END ) AS 	A10	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '11'		THEN "value" END ) AS 	A11	,
-        MAX ( CASE WHEN to_char(data_time,'mm') = '12'		THEN "value" END ) AS 	A12	,
-        max(rep_product_type),
-        max(variety_type),
-        'ZQ' as FL
-        FROM
-        (
-        SELECT
-        a.index_id,
-        "value",
-        data_time,
-        b.rep_product_type,
-        b.variety_type
-        FROM
-        data_item a,
-        gxdh_count b
-        WHERE
-        to_char(data_time,'YYYY') = #{selectYear}
-        AND time_type = 'MONTH'
-        and b.variety_type=#{varietyType}
-        and b.rep_product_type=#{repProductType}
-        and a.index_id = b.steam_index
-        ) aa
-        GROUP BY
-        aa.index_id
-    </select>
-
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/workingProcedure/dailyWorkingProcedureMapper.xml b/energy_management_server/src/main/resources/mybatis/workingProcedure/dailyWorkingProcedureMapper.xml
deleted file mode 100644
index 798c6bd..0000000
--- a/energy_management_server/src/main/resources/mybatis/workingProcedure/dailyWorkingProcedureMapper.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.workingProcedure.mapper.dailyWorkingProcedureMapper">
-    <resultMap id="dataItemMap" type="com.dingzhuo.energy.project.workingProcedure.domain.dailyWorkingProcedure">
-        <result column="index_id" property="indexId"/>
-        <result column="index_name" property="indexName"/>
-        <result column="time_type" property="timeType"/>
-        <result column="time_code" property="timeCode"/>
-        <result column="unit_id" property="unitId"/>
-        <result column="value1" property="value1"/>
-        <result column="value2" property="value2"/>
-        <result column="value3" property="value3"/>
-        <result column="value4" property="value4"/>
-        <result column="value5" property="value5"/>
-        <result column="value6" property="value6"/>
-        <result column="value7" property="value7"/>
-        <result column="value8" property="value8"/>
-        <result column="value9" property="value9"/>
-        <result column="value10" property="value10"/>
-        <result column="value11" property="value11"/>
-        <result column="value12" property="value12"/>
-        <result column="value13" property="value13"/>
-        <result column="value14" property="value14"/>
-        <result column="value15" property="value15"/>
-        <result column="value16" property="value16"/>
-        <result column="value17" property="value17"/>
-        <result column="value18" property="value18"/>
-        <result column="value19" property="value19"/>
-        <result column="value20" property="value20"/>
-        <result column="value21" property="value21"/>
-        <result column="value22" property="value22"/>
-        <result column="value23" property="value23"/>
-        <result column="value0" property="value0"/>
-    </resultMap>
-    <select id="getdailyWorkingProcedureList" resultMap="dataItemMap">
-        SELECT
-        aa.index_id,
-        aa.index_name,
-        <foreach item="item" index="index" collection="dataList">
-            MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ) AS ${item.value},
-        </foreach>
-        aa.time_type
-        FROM
-        (
-        SELECT
-        ci.index_id,
-        ci.NAME  AS "index_name",
-        di."value",
-        di.data_time,
-        di.time_type
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        WHERE
-        di.data_time >= #{beginTime}
-        AND di.data_time &lt; #{endTime}
-        AND di.index_id IN <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
-        AND di.time_type = #{timeType}
-        <if test="indexStorageId !='' and indexStorageId !=null">
-            and ci.energy_id=#{indexStorageId}
-        </if>
-        ) aa
-        GROUP BY
-        aa.index_id,aa.index_name,aa.time_type
-    </select>
-
-    <select id="getListChart" resultMap="dataItemMap">
-        SELECT
-            di.index_id,
-            ci.name AS "index_name",
-            ci.unit_id,
-            di."value",
-            di.data_time,
-            di.time_type,
-            di.time_code
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        WHERE
-            di.index_id =#{indexId}
-            AND di.data_time &lt; #{endTime}
-            AND di.data_time >= #{beginTime}
-            AND di.time_type = #{timeType}
-    </select>
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/workingProcedure/monthlyWorkingProcedureMapper.xml b/energy_management_server/src/main/resources/mybatis/workingProcedure/monthlyWorkingProcedureMapper.xml
deleted file mode 100644
index c27cdc6..0000000
--- a/energy_management_server/src/main/resources/mybatis/workingProcedure/monthlyWorkingProcedureMapper.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.workingProcedure.mapper.monthlyWorkingProcedureMapper">
-    <resultMap id="dataItemMap" type="com.dingzhuo.energy.project.workingProcedure.domain.monthlyWorkingProcedure">
-        <result column="index_id" property="indexId"/>
-        <result column="index_name" property="indexName"/>
-        <result column="time_type" property="timeType"/>
-        <result column="time_code" property="timeCode"/>
-        <result column="unit_id" property="unitId"/>
-        <result column="value1" property="value1"/>
-        <result column="value2" property="value2"/>
-        <result column="value3" property="value3"/>
-        <result column="value4" property="value4"/>
-        <result column="value5" property="value5"/>
-        <result column="value6" property="value6"/>
-        <result column="value7" property="value7"/>
-        <result column="value8" property="value8"/>
-        <result column="value9" property="value9"/>
-        <result column="value10" property="value10"/>
-        <result column="value11" property="value11"/>
-        <result column="value12" property="value12"/>
-        <result column="value13" property="value13"/>
-        <result column="value14" property="value14"/>
-        <result column="value15" property="value15"/>
-        <result column="value16" property="value16"/>
-        <result column="value17" property="value17"/>
-        <result column="value18" property="value18"/>
-        <result column="value19" property="value19"/>
-        <result column="value20" property="value20"/>
-        <result column="value21" property="value21"/>
-        <result column="value22" property="value22"/>
-        <result column="value23" property="value23"/>
-        <result column="value24" property="value24"/>
-        <result column="value25" property="value25"/>
-        <result column="value26" property="value26"/>
-        <result column="value27" property="value27"/>
-        <result column="value28" property="value28"/>
-        <result column="value29" property="value29"/>
-        <result column="value30" property="value30"/>
-        <result column="value31" property="value31"/>
-    </resultMap>
-    <!--鍏ㄥ巶鑳借�楃粺璁�-->
-    <select id="getMonthlyWorkingProcedureList" resultMap="dataItemMap">
-        SELECT
-        aa.index_id,
-        aa.index_name,
-        <foreach item="item" index="index" collection="dataList">
-            MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ) AS ${item.value},
-        </foreach>
-        aa.time_type
-        FROM
-        (
-        SELECT
-        ci.index_id,
-        ci.NAME  AS "index_name",
-        di."value",
-        di.data_time,
-        di.time_type
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        WHERE
-        di.data_time >= #{beginTime}
-        AND di.data_time &lt; #{endTime}
-        AND di.index_id IN <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
-        AND di.time_type = #{timeType}
-        <if test="indexStorageId !='' and indexStorageId !=null">
-            and ci.energy_id=#{indexStorageId}
-        </if>
-        ) aa
-        GROUP BY
-        aa.index_id,aa.index_name,aa.time_type
-    </select>
-
-    <select id="getListChart" resultMap="dataItemMap">
-        SELECT
-            di.index_id,
-            ci.name AS "index_name",
-            ci.unit_id,
-            di."value",
-            di.data_time,
-            di.time_type,
-            di.time_code
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        WHERE
-            di.index_id =#{indexId}
-            AND di.data_time >= #{beginTime}
-            AND di.data_time &lt; #{endTime}
-            AND di.time_type = #{timeType}
-    </select>
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/workingProcedure/yearWorkingProcedureMapper.xml b/energy_management_server/src/main/resources/mybatis/workingProcedure/yearWorkingProcedureMapper.xml
deleted file mode 100644
index 17082d2..0000000
--- a/energy_management_server/src/main/resources/mybatis/workingProcedure/yearWorkingProcedureMapper.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dingzhuo.energy.project.workingProcedure.mapper.yearWorkingProcedureMapper">
-    <resultMap id="dataItemMap" type="com.dingzhuo.energy.project.workingProcedure.domain.yearWorkingProcedure">
-        <result column="index_id" property="indexId"/>
-        <result column="index_name" property="indexName"/>
-        <result column="time_type" property="timeType"/>
-        <result column="time_code" property="timeCode"/>
-        <result column="unit_id" property="unitId"/>
-        <result column="value1" property="value1"/>
-        <result column="value2" property="value2"/>
-        <result column="value3" property="value3"/>
-        <result column="value4" property="value4"/>
-        <result column="value5" property="value5"/>
-        <result column="value6" property="value6"/>
-        <result column="value7" property="value7"/>
-        <result column="value8" property="value8"/>
-        <result column="value9" property="value9"/>
-        <result column="value10" property="value10"/>
-        <result column="value11" property="value11"/>
-        <result column="value12" property="value12"/>
-    </resultMap>
-    <!--鍏ㄥ巶鑳借�楃粺璁�-->
-    <select id="getYearWorkingProcedureList" resultMap="dataItemMap">
-        SELECT
-        aa.index_id,
-        aa.index_name,
-        <foreach item="item" index="index" collection="dataList">
-            MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ) AS ${item.value},
-        </foreach>
-        aa.time_type
-        FROM
-        (
-        SELECT
-        ci.index_id,
-        ci.NAME  AS "index_name",
-        di."value",
-        di.data_time,
-        di.time_type
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        WHERE
-        di.data_time >= #{beginTime}
-        AND di.data_time &lt; #{endTime}
-        AND di.index_id IN <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
-        AND di.time_type = #{timeType}
-        <if test="indexStorageId !='' and indexStorageId !=null">
-            and ci.energy_id=#{indexStorageId}
-        </if>
-        ) aa
-        GROUP BY
-        aa.index_id,aa.index_name,aa.time_type
-    </select>
-
-    <select id="getListChart" resultMap="dataItemMap">
-        SELECT
-            di.index_id,
-            ci.name AS "index_name",
-            ci.unit_id,
-            di."value",
-            di.data_time,
-            di.time_type,
-            di.time_code
-        FROM
-        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
-        WHERE
-            di.index_id =#{indexId}
-            AND di.data_time &lt; #{endTime}
-            AND di.data_time >= #{beginTime}
-            AND di.time_type = #{timeType}
-    </select>
-</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/vm/java/controller.java.vm b/energy_management_server/src/main/resources/vm/java/controller.java.vm
deleted file mode 100644
index bb81d62..0000000
--- a/energy_management_server/src/main/resources/vm/java/controller.java.vm
+++ /dev/null
@@ -1,103 +0,0 @@
-package ${packageName}.controller;
-
-import java.util.List;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
-import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
-import ${packageName}.domain.${ClassName};
-import ${packageName}.service.I${ClassName}Service;
-import com.dingzhuo.energy.framework.web.controller.BaseController;
-import com.dingzhuo.energy.framework.web.domain.AjaxResult;
-import com.dingzhuo.energy.common.utils.poi.ExcelUtil;
-import com.dingzhuo.energy.framework.web.page.TableDataInfo;
-
-/**
- * ${functionName}Controller
- * 
- * @author ${author}
- * @date ${datetime}
- */
-@RestController
-@RequestMapping("/${moduleName}/${businessName}")
-public class ${ClassName}Controller extends BaseController
-{
-    @Autowired
-    private I${ClassName}Service ${className}Service;
-
-    /**
-     * 鏌ヨ${functionName}鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(${ClassName} ${className})
-    {
-        startPage();
-        List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});
-        return getDataTable(list);
-    }
-
-    /**
-     * 瀵煎嚭${functionName}鍒楄〃
-     */
-    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')")
-    @Log(title = "${functionName}", businessType = BusinessType.EXPORT)
-    @GetMapping("/export")
-    public AjaxResult export(${ClassName} ${className})
-    {
-        List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});
-        ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class);
-        return util.exportExcel(list, "${businessName}");
-    }
-
-    /**
-     * 鑾峰彇${functionName}璇︾粏淇℃伅
-     */
-    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:query')")
-    @GetMapping(value = "/{${pkColumn.javaField}}")
-    public AjaxResult getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField})
-    {
-        return AjaxResult.success(${className}Service.select${ClassName}ById(${pkColumn.javaField}));
-    }
-
-    /**
-     * 鏂板${functionName}
-     */
-    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:add')")
-    @Log(title = "${functionName}", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody ${ClassName} ${className})
-    {
-        return toAjax(${className}Service.insert${ClassName}(${className}));
-    }
-
-    /**
-     * 淇敼${functionName}
-     */
-    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:edit')")
-    @Log(title = "${functionName}", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody ${ClassName} ${className})
-    {
-        return toAjax(${className}Service.update${ClassName}(${className}));
-    }
-
-    /**
-     * 鍒犻櫎${functionName}
-     */
-    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:remove')")
-    @Log(title = "${functionName}", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{${pkColumn.javaField}s}")
-    public AjaxResult remove(@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s)
-    {
-        return toAjax(${className}Service.delete${ClassName}ByIds(${pkColumn.javaField}s));
-    }
-}
diff --git a/energy_management_server/src/main/resources/vm/java/domain.java.vm b/energy_management_server/src/main/resources/vm/java/domain.java.vm
deleted file mode 100644
index 39424cd..0000000
--- a/energy_management_server/src/main/resources/vm/java/domain.java.vm
+++ /dev/null
@@ -1,76 +0,0 @@
-package ${packageName}.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
-import com.dingzhuo.energy.framework.web.domain.BaseEntity;
-#foreach ($import in $importList)
-import ${import};
-#end
-
-/**
- * ${functionName}瀵硅薄 ${tableName}
- * 
- * @author ${author}
- * @date ${datetime}
- */
-#set($Entity="BaseEntity")
-public class ${ClassName} extends ${Entity}
-{
-    private static final long serialVersionUID = 1L;
-
-#foreach ($column in $columns)
-#if(!$table.isSuperColumn($column.javaField))
-    /** $column.columnComment */
-#if($column.list)
-#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
-#if($parentheseIndex != -1)
-#set($comment=$column.columnComment.substring(0, $parentheseIndex))
-#else
-#set($comment=$column.columnComment)
-#end
-#if($parentheseIndex != -1)
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-#elseif($column.javaType == 'Date')
-    @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
-#else
-    @Excel(name = "${comment}")
-#end
-#end
-    private $column.javaType $column.javaField;
-
-#end
-#end
-#foreach ($column in $columns)
-#if(!$table.isSuperColumn($column.javaField))
-#if($column.javaField > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
-#set($AttrName=$column.javaField)
-#else
-#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
-#end
-    public void set${AttrName}($column.javaType $column.javaField) 
-    {
-        this.$column.javaField = $column.javaField;
-    }
-
-    public $column.javaType get${AttrName}() 
-    {
-        return $column.javaField;
-    }
-#end
-#end
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-#foreach ($column in $columns)
-#if($column.javaField > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
-#set($AttrName=$column.javaField)
-#else
-#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
-#end
-            .append("${column.javaField}", get${AttrName}())
-#end
-            .toString();
-    }
-}
diff --git a/energy_management_server/src/main/resources/vm/java/mapper.java.vm b/energy_management_server/src/main/resources/vm/java/mapper.java.vm
deleted file mode 100644
index dc3a5df..0000000
--- a/energy_management_server/src/main/resources/vm/java/mapper.java.vm
+++ /dev/null
@@ -1,61 +0,0 @@
-package ${packageName}.mapper;
-
-import ${packageName}.domain.${ClassName};
-import java.util.List;
-
-/**
- * ${functionName}Mapper鎺ュ彛
- * 
- * @author ${author}
- * @date ${datetime}
- */
-public interface ${ClassName}Mapper 
-{
-    /**
-     * 鏌ヨ${functionName}
-     * 
-     * @param ${pkColumn.javaField} ${functionName}ID
-     * @return ${functionName}
-     */
-    public ${ClassName} select${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField});
-
-    /**
-     * 鏌ヨ${functionName}鍒楄〃
-     * 
-     * @param ${className} ${functionName}
-     * @return ${functionName}闆嗗悎
-     */
-    public List<${ClassName}> select${ClassName}List(${ClassName} ${className});
-
-    /**
-     * 鏂板${functionName}
-     * 
-     * @param ${className} ${functionName}
-     * @return 缁撴灉
-     */
-    public int insert${ClassName}(${ClassName} ${className});
-
-    /**
-     * 淇敼${functionName}
-     * 
-     * @param ${className} ${functionName}
-     * @return 缁撴灉
-     */
-    public int update${ClassName}(${ClassName} ${className});
-
-    /**
-     * 鍒犻櫎${functionName}
-     * 
-     * @param ${pkColumn.javaField} ${functionName}ID
-     * @return 缁撴灉
-     */
-    public int delete${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField});
-
-    /**
-     * 鎵归噺鍒犻櫎${functionName}
-     * 
-     * @param ${pkColumn.javaField}s 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    public int delete${ClassName}ByIds(${pkColumn.javaType}[] ${pkColumn.javaField}s);
-}
diff --git a/energy_management_server/src/main/resources/vm/java/service.java.vm b/energy_management_server/src/main/resources/vm/java/service.java.vm
deleted file mode 100644
index 678f6dc..0000000
--- a/energy_management_server/src/main/resources/vm/java/service.java.vm
+++ /dev/null
@@ -1,61 +0,0 @@
-package ${packageName}.service;
-
-import ${packageName}.domain.${ClassName};
-import java.util.List;
-
-/**
- * ${functionName}Service鎺ュ彛
- * 
- * @author ${author}
- * @date ${datetime}
- */
-public interface I${ClassName}Service 
-{
-    /**
-     * 鏌ヨ${functionName}
-     * 
-     * @param ${pkColumn.javaField} ${functionName}ID
-     * @return ${functionName}
-     */
-    public ${ClassName} select${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField});
-
-    /**
-     * 鏌ヨ${functionName}鍒楄〃
-     * 
-     * @param ${className} ${functionName}
-     * @return ${functionName}闆嗗悎
-     */
-    public List<${ClassName}> select${ClassName}List(${ClassName} ${className});
-
-    /**
-     * 鏂板${functionName}
-     * 
-     * @param ${className} ${functionName}
-     * @return 缁撴灉
-     */
-    public int insert${ClassName}(${ClassName} ${className});
-
-    /**
-     * 淇敼${functionName}
-     * 
-     * @param ${className} ${functionName}
-     * @return 缁撴灉
-     */
-    public int update${ClassName}(${ClassName} ${className});
-
-    /**
-     * 鎵归噺鍒犻櫎${functionName}
-     * 
-     * @param ${pkColumn.javaField}s 闇�瑕佸垹闄ょ殑${functionName}ID
-     * @return 缁撴灉
-     */
-    public int delete${ClassName}ByIds(${pkColumn.javaType}[] ${pkColumn.javaField}s);
-
-    /**
-     * 鍒犻櫎${functionName}淇℃伅
-     * 
-     * @param ${pkColumn.javaField} ${functionName}ID
-     * @return 缁撴灉
-     */
-    public int delete${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField});
-}
diff --git a/energy_management_server/src/main/resources/vm/java/serviceImpl.java.vm b/energy_management_server/src/main/resources/vm/java/serviceImpl.java.vm
deleted file mode 100644
index 0ec8482..0000000
--- a/energy_management_server/src/main/resources/vm/java/serviceImpl.java.vm
+++ /dev/null
@@ -1,109 +0,0 @@
-package ${packageName}.service.impl;
-
-import java.util.List;
-#foreach ($column in $columns)
-#if($column.javaField == 'createTime' || $column.javaField == 'updateTime')
-import com.dingzhuo.energy.common.utils.DateUtils;
-#break
-#end
-#end
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import ${packageName}.mapper.${ClassName}Mapper;
-import ${packageName}.domain.${ClassName};
-import ${packageName}.service.I${ClassName}Service;
-
-/**
- * ${functionName}Service涓氬姟灞傚鐞�
- * 
- * @author ${author}
- * @date ${datetime}
- */
-@Service
-public class ${ClassName}ServiceImpl implements I${ClassName}Service 
-{
-    @Autowired
-    private ${ClassName}Mapper ${className}Mapper;
-
-    /**
-     * 鏌ヨ${functionName}
-     * 
-     * @param ${pkColumn.javaField} ${functionName}ID
-     * @return ${functionName}
-     */
-    @Override
-    public ${ClassName} select${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField})
-    {
-        return ${className}Mapper.select${ClassName}ById(${pkColumn.javaField});
-    }
-
-    /**
-     * 鏌ヨ${functionName}鍒楄〃
-     * 
-     * @param ${className} ${functionName}
-     * @return ${functionName}
-     */
-    @Override
-    public List<${ClassName}> select${ClassName}List(${ClassName} ${className})
-    {
-        return ${className}Mapper.select${ClassName}List(${className});
-    }
-
-    /**
-     * 鏂板${functionName}
-     * 
-     * @param ${className} ${functionName}
-     * @return 缁撴灉
-     */
-    @Override
-    public int insert${ClassName}(${ClassName} ${className})
-    {
-#foreach ($column in $columns)
-#if($column.javaField == 'createTime')
-        ${className}.setCreateTime(DateUtils.getNowDate());
-#end
-#end
-        return ${className}Mapper.insert${ClassName}(${className});
-    }
-
-    /**
-     * 淇敼${functionName}
-     * 
-     * @param ${className} ${functionName}
-     * @return 缁撴灉
-     */
-    @Override
-    public int update${ClassName}(${ClassName} ${className})
-    {
-#foreach ($column in $columns)
-#if($column.javaField == 'updateTime')
-        ${className}.setUpdateTime(DateUtils.getNowDate());
-#end
-#end
-        return ${className}Mapper.update${ClassName}(${className});
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎${functionName}
-     * 
-     * @param ${pkColumn.javaField}s 闇�瑕佸垹闄ょ殑${functionName}ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int delete${ClassName}ByIds(${pkColumn.javaType}[] ${pkColumn.javaField}s)
-    {
-        return ${className}Mapper.delete${ClassName}ByIds(${pkColumn.javaField}s);
-    }
-
-    /**
-     * 鍒犻櫎${functionName}淇℃伅
-     * 
-     * @param ${pkColumn.javaField} ${functionName}ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int delete${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField})
-    {
-        return ${className}Mapper.delete${ClassName}ById(${pkColumn.javaField});
-    }
-}
diff --git a/energy_management_server/src/main/resources/vm/js/api.js.vm b/energy_management_server/src/main/resources/vm/js/api.js.vm
deleted file mode 100644
index 296d41a..0000000
--- a/energy_management_server/src/main/resources/vm/js/api.js.vm
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ${functionName}鍒楄〃
-export function list${BusinessName}(query) {
-  return request({
-    url: '/${moduleName}/${businessName}/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ${functionName}璇︾粏
-export function get${BusinessName}(${pkColumn.javaField}) {
-  return request({
-    url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField},
-    method: 'get'
-  })
-}
-
-// 鏂板${functionName}
-export function add${BusinessName}(data) {
-  return request({
-    url: '/${moduleName}/${businessName}',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼${functionName}
-export function update${BusinessName}(data) {
-  return request({
-    url: '/${moduleName}/${businessName}',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎${functionName}
-export function del${BusinessName}(${pkColumn.javaField}) {
-  return request({
-    url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField},
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭${functionName}
-export function export${BusinessName}(query) {
-  return request({
-    url: '/${moduleName}/${businessName}/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/vm/sql/sql.vm b/energy_management_server/src/main/resources/vm/sql/sql.vm
deleted file mode 100644
index 948ce97..0000000
--- a/energy_management_server/src/main/resources/vm/sql/sql.vm
+++ /dev/null
@@ -1,22 +0,0 @@
--- 鑿滃崟 SQL
-insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
-values('${functionName}', '3', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 'C', '0', '${permissionPrefix}:list', '#', 'admin', '2018-03-01', 'ry', '2018-03-01', '${functionName}鑿滃崟');
-
--- 鎸夐挳鐖惰彍鍗旾D
-SELECT @parentId := LAST_INSERT_ID();
-
--- 鎸夐挳 SQL
-insert into sys_menu  (menu_name, parent_id, order_num, path, component, is_frame, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
-values('${functionName}鏌ヨ', @parentId, '1',  '#', '', 1,  'F', '0', '${permissionPrefix}:query',         '#', 'admin', '2018-03-01', 'ry', '2018-03-01', '');
-
-insert into sys_menu  (menu_name, parent_id, order_num, path, component, is_frame, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
-values('${functionName}鏂板', @parentId, '2',  '#', '', 1,  'F', '0', '${permissionPrefix}:add',          '#', 'admin', '2018-03-01', 'ry', '2018-03-01', '');
-
-insert into sys_menu  (menu_name, parent_id, order_num, path, component, is_frame, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
-values('${functionName}淇敼', @parentId, '3',  '#', '', 1,  'F', '0', '${permissionPrefix}:edit',         '#', 'admin', '2018-03-01', 'ry', '2018-03-01', '');
-
-insert into sys_menu  (menu_name, parent_id, order_num, path, component, is_frame, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
-values('${functionName}鍒犻櫎', @parentId, '4',  '#', '', 1,  'F', '0', '${permissionPrefix}:remove',       '#', 'admin', '2018-03-01', 'ry', '2018-03-01', '');
-
-insert into sys_menu  (menu_name, parent_id, order_num, path, component, is_frame, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
-values('${functionName}瀵煎嚭', @parentId, '5',  '#', '', 1,  'F', '0', '${permissionPrefix}:export',       '#', 'admin', '2018-03-01', 'ry', '2018-03-01', '');
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/vm/vue/index.vue.vm b/energy_management_server/src/main/resources/vm/vue/index.vue.vm
deleted file mode 100644
index 9348194..0000000
--- a/energy_management_server/src/main/resources/vm/vue/index.vue.vm
+++ /dev/null
@@ -1,439 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-#foreach($column in $columns)
-#if($column.query)
-#set($dictType=$column.dictType)
-#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
-#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
-#if($parentheseIndex != -1)
-#set($comment=$column.columnComment.substring(0, $parentheseIndex))
-#else
-#set($comment=$column.columnComment)
-#end
-#if($column.htmlType == "input")
-      <el-form-item label="${comment}" prop="${column.javaField}">
-        <el-input
-          v-model="queryParams.${column.javaField}"
-          placeholder="璇疯緭鍏�${comment}"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType)
-        <el-form-item label="${comment}" prop="${column.javaField}">
-        <el-select v-model="queryParams.${column.javaField}" placeholder="璇烽�夋嫨${comment}" clearable size="small">
-          <el-option
-            v-for="dict in ${column.javaField}Options"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && $dictType)
-        <el-form-item label="${comment}" prop="${column.javaField}">
-        <el-select v-model="queryParams.${column.javaField}" placeholder="璇烽�夋嫨${comment}" clearable size="small">
-          <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
-        </el-select>
-      </el-form-item>
-#elseif($column.htmlType == "datetime")
-      <el-form-item label="${comment}" prop="${column.javaField}">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.${column.javaField}"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="閫夋嫨${comment}">
-        </el-date-picker>
-      </el-form-item>
-#end
-#end
-#end
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['${moduleName}:${businessName}:add']"
-        >鏂板</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['${moduleName}:${businessName}:edit']"
-        >淇敼</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['${moduleName}:${businessName}:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['${moduleName}:${businessName}:export']"
-        >瀵煎嚭</el-button>
-      </el-col>
-    </el-row>
-
-    <el-table v-loading="loading" :data="${businessName}List" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-#foreach($column in $columns)
-#set($javaField=$column.javaField)
-#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
-#if($parentheseIndex != -1)
-#set($comment=$column.columnComment.substring(0, $parentheseIndex))
-#else
-#set($comment=$column.columnComment)
-#end
-#if($column.pk)
-      <el-table-column label="${comment}" align="center" prop="${javaField}" />
-#elseif($column.list && $column.htmlType == "datetime")
-      <el-table-column label="${comment}" align="center" prop="${javaField}" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.${javaField}) }}</span>
-        </template>
-      </el-table-column>
-#elseif($column.list && "" != $column.dictType)
-      <el-table-column label="${comment}" align="center" prop="${javaField}" :formatter="${javaField}Format" />
-#elseif($column.list && "" != $javaField)
-      <el-table-column label="${comment}" align="center" prop="${javaField}" />
-#end
-#end
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['${moduleName}:${businessName}:edit']"
-          >淇敼</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['${moduleName}:${businessName}:remove']"
-          >鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 娣诲姞鎴栦慨鏀�${functionName}瀵硅瘽妗� -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-#foreach($column in $columns)
-#set($field=$column.javaField)
-#if($column.insert && !$column.pk)
-#if(($column.usableColumn) || (!$column.superColumn))
-#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
-#if($parentheseIndex != -1)
-#set($comment=$column.columnComment.substring(0, $parentheseIndex))
-#else
-#set($comment=$column.columnComment)
-#end
-#set($dictType=$column.dictType)
-#if($column.htmlType == "input")
-        <el-form-item label="${comment}" prop="${field}">
-          <el-input v-model="form.${field}" placeholder="璇疯緭鍏�${comment}" />
-        </el-form-item>
-#elseif($column.htmlType == "select" && "" != $dictType)
-        <el-form-item label="${comment}">
-          <el-select v-model="form.${field}" placeholder="璇烽�夋嫨${comment}">
-            <el-option
-              v-for="dict in ${field}Options"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-#elseif($column.htmlType == "select" && $dictType)
-        <el-form-item label="${comment}">
-          <el-select v-model="form.${field}" placeholder="璇烽�夋嫨${comment}">
-            <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
-          </el-select>
-        </el-form-item>
-#elseif($column.htmlType == "radio" && "" != $dictType)
-        <el-form-item label="${comment}">
-          <el-radio-group v-model="form.${field}">
-            <el-radio
-              v-for="dict in ${field}Options"
-              :key="dict.dictValue"
-              :label="dict.dictValue"
-            >{{dict.dictLabel}}</el-radio>
-          </el-radio-group>
-        </el-form-item>
-#elseif($column.htmlType == "radio" && $dictType)
-        <el-form-item label="${comment}">
-          <el-radio-group v-model="form.${field}">
-            <el-radio label="1">璇烽�夋嫨瀛楀吀鐢熸垚</el-radio>
-          </el-radio-group>
-        </el-form-item>
-#elseif($column.htmlType == "datetime")
-        <el-form-item label="${comment}" prop="${field}">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.${field}"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="閫夋嫨${comment}">
-          </el-date-picker>
-        </el-form-item>
-#elseif($column.htmlType == "textarea")
-        <el-form-item label="${comment}" prop="${field}">
-          <el-input v-model="form.${field}" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
-        </el-form-item>
-#end
-#end
-#end
-#end
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName}, export${BusinessName} } from "@/api/${moduleName}/${businessName}";
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // ${functionName}琛ㄦ牸鏁版嵁
-      ${businessName}List: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-#foreach ($column in $columns)
-#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
-#if($parentheseIndex != -1)
-#set($comment=$column.columnComment.substring(0, $parentheseIndex))
-#else
-#set($comment=$column.columnComment)
-#end
-#if(${column.dictType} != '')
-      // $comment瀛楀吀
-      ${column.javaField}Options: []#if($velocityCount != $columns.size()),#end
-
-#end
-#end
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-#foreach ($column in $columns)
-#if($column.query)
-        $column.javaField: undefined#if($velocityCount != $columns.size()),#end
-
-#end
-#end
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-#foreach ($column in $columns)
-#if($column.required)
-#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
-#if($parentheseIndex != -1)
-#set($comment=$column.columnComment.substring(0, $parentheseIndex))
-#else
-#set($comment=$column.columnComment)
-#end
-#set($comment=$column.columnComment)
-        $column.javaField: [
-          { required: true, message: "$comment涓嶈兘涓虹┖", trigger: "blur" }
-        ]#if($velocityCount != $columns.size()),#end
-#end
-#end
-      }
-    };
-  },
-  created() {
-    this.getList();
-#foreach ($column in $columns)
-#if(${column.dictType} != '')
-    this.getDicts("${column.dictType}").then(response => {
-      this.${column.javaField}Options = response.data;
-    });
-#end
-#end
-  },
-  methods: {
-    /** 鏌ヨ${functionName}鍒楄〃 */
-    getList() {
-      this.loading = true;
-      list${BusinessName}(this.queryParams).then(response => {
-        this.${businessName}List = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-#foreach ($column in $columns)
-#if(${column.dictType} != '')
-#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
-#if($parentheseIndex != -1)
-#set($comment=$column.columnComment.substring(0, $parentheseIndex))
-#else
-#set($comment=$column.columnComment)
-#end
-    // $comment瀛楀吀缈昏瘧
-    ${column.javaField}Format(row, column) {
-      return this.selectDictLabel(this.${column.javaField}Options, row.${column.javaField});
-    },
-#end
-#end
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-#foreach ($column in $columns)
-#if($column.htmlType == "radio")
-        $column.javaField: "0"#if($velocityCount != $columns.size()),#end
-
-#else
-        $column.javaField: undefined#if($velocityCount != $columns.size()),#end
-
-#end
-#end
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.${pkColumn.javaField})
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞${functionName}";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const ${pkColumn.javaField} = row.${pkColumn.javaField} || this.ids
-      get${BusinessName}(${pkColumn.javaField}).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼${functionName}";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.#[[$]]#refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.${pkColumn.javaField} != undefined) {
-            update${BusinessName}(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            add${BusinessName}(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ${pkColumn.javaField}s = row.${pkColumn.javaField} || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎${functionName}缂栧彿涓�"' + ${pkColumn.javaField}s + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return del${BusinessName}(${pkColumn.javaField}s);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈�${functionName}鏁版嵁椤�?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return export${BusinessName}(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function() {});
-    }
-  }
-};
-</script>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/vm/xml/mapper.xml.vm b/energy_management_server/src/main/resources/vm/xml/mapper.xml.vm
deleted file mode 100644
index 7d75aa3..0000000
--- a/energy_management_server/src/main/resources/vm/xml/mapper.xml.vm
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="${packageName}.mapper.${ClassName}Mapper">
-    
-    <resultMap type="${ClassName}" id="${ClassName}Result">
-#foreach ($column in $columns)
-        <result property="${column.javaField}"    column="${column.columnName}"    />
-#end
-    </resultMap>
-
-    <sql id="select${ClassName}Vo">
-        select#foreach($column in $columns) $column.columnName#if($velocityCount != $columns.size()),#end#end from ${tableName}
-    </sql>
-
-    <select id="select${ClassName}List" parameterType="${ClassName}" resultMap="${ClassName}Result">
-        <include refid="select${ClassName}Vo"/>
-        <where>  
-#foreach($column in $columns)
-#set($queryType=$column.queryType)
-#set($javaField=$column.javaField)
-#set($javaType=$column.javaType)
-#set($columnName=$column.columnName)
-#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
-#if($column.query)
-#if($column.queryType == "EQ")
-            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName = #{$javaField}</if>
-#elseif($queryType == "NE")
-            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName != #{$javaField}</if>
-#elseif($queryType == "GT")
-            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &gt; #{$javaField}</if>
-#elseif($queryType == "GTE")
-            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &gt;= #{$javaField}</if>
-#elseif($queryType == "LT")
-            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &lt; #{$javaField}</if>
-#elseif($queryType == "LTE")
-            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &lt;= #{$javaField}</if>
-#elseif($queryType == "LIKE")
-            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName like concat('%', #{$javaField}, '%')</if>
-#elseif($queryType == "BETWEEN")
-            <if test="params.begin$AttrName != null and params.begin$AttrName != '' and params.end$AttrName != null and params.end$AttrName != ''"> and $columnName between #{params.begin$AttrName} and #{params.end$AttrName}</if>
-#end
-#end
-#end
-        </where>
-    </select>
-    
-    <select id="select${ClassName}ById" parameterType="${pkColumn.javaType}" resultMap="${ClassName}Result">
-        <include refid="select${ClassName}Vo"/>
-        where ${pkColumn.columnName} = #{${pkColumn.javaField}}
-    </select>
-        
-    <insert id="insert${ClassName}" parameterType="${ClassName}"#if($pkColumn.increment) useGeneratedKeys="true" keyProperty="$pkColumn.javaField"#end>
-        insert into ${tableName}
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-#foreach($column in $columns)
-#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment)
-            <if test="$column.javaField != null #if($column.javaType == 'String' ) and $column.javaField != ''#end">$column.columnName,</if>
-#end
-#end
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-#foreach($column in $columns)
-#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment)
-            <if test="$column.javaField != null #if($column.javaType == 'String' ) and $column.javaField != ''#end">#{$column.javaField},</if>
-#end
-#end
-         </trim>
-    </insert>
-
-    <update id="update${ClassName}" parameterType="${ClassName}">
-        update ${tableName}
-        <trim prefix="SET" suffixOverrides=",">
-#foreach($column in $columns)
-#if($column.columnName != $pkColumn.columnName)
-            <if test="$column.javaField != null #if($column.javaType == 'String' ) and $column.javaField != ''#end">$column.columnName = #{$column.javaField},</if>
-#end
-#end
-        </trim>
-        where ${pkColumn.columnName} = #{${pkColumn.javaField}}
-    </update>
-
-    <delete id="delete${ClassName}ById" parameterType="${pkColumn.javaType}">
-        delete from ${tableName} where ${pkColumn.columnName} = #{${pkColumn.javaField}}
-    </delete>
-
-    <delete id="delete${ClassName}ByIds" parameterType="String">
-        delete from ${tableName} where ${pkColumn.columnName} in 
-        <foreach item="${pkColumn.javaField}" collection="array" open="(" separator="," close=")">
-            #{${pkColumn.javaField}}
-        </foreach>
-    </delete>
-    
-</mapper>
\ No newline at end of file
diff --git a/energy_management_ui/.editorconfig b/energy_management_ui/.editorconfig
deleted file mode 100644
index 7034f9b..0000000
--- a/energy_management_ui/.editorconfig
+++ /dev/null
@@ -1,22 +0,0 @@
-# 鍛婅瘔EditorConfig鎻掍欢锛岃繖鏄牴鏂囦欢锛屼笉鐢ㄧ户缁線涓婃煡鎵�
-root = true
-
-# 鍖归厤鍏ㄩ儴鏂囦欢
-[*]
-# 璁剧疆瀛楃闆�
-charset = utf-8
-# 缂╄繘椋庢牸锛屽彲閫塻pace銆乼ab
-indent_style = space
-# 缂╄繘鐨勭┖鏍兼暟
-indent_size = 2
-# 缁撳熬鎹㈣绗︼紝鍙�塴f銆乧r銆乧rlf
-end_of_line = lf
-# 鍦ㄦ枃浠剁粨灏炬彃鍏ユ柊琛�
-insert_final_newline = true
-# 鍒犻櫎涓�琛屼腑鐨勫墠鍚庣┖鏍�
-trim_trailing_whitespace = true
-
-# 鍖归厤md缁撳熬鐨勬枃浠�
-[*.md]
-insert_final_newline = false
-trim_trailing_whitespace = false
diff --git a/energy_management_ui/.env.development b/energy_management_ui/.env.development
deleted file mode 100644
index 28b97c7..0000000
--- a/energy_management_ui/.env.development
+++ /dev/null
@@ -1,8 +0,0 @@
-# 寮�鍙戠幆澧冮厤缃�
-ENV = 'development'
-
-# 鑻ヤ緷绠$悊绯荤粺/寮�鍙戠幆澧�
-VUE_APP_BASE_API = '/dev-api'
-
-# 璺敱鎳掑姞杞�
-VUE_CLI_BABEL_TRANSPILE_MODULES = true
diff --git a/energy_management_ui/.env.production b/energy_management_ui/.env.production
deleted file mode 100644
index 27c717e..0000000
--- a/energy_management_ui/.env.production
+++ /dev/null
@@ -1,5 +0,0 @@
-# 鐢熶骇鐜閰嶇疆
-ENV = 'production'
-
-# 鑻ヤ緷绠$悊绯荤粺/鐢熶骇鐜
-VUE_APP_BASE_API = '/prod-api'
diff --git a/energy_management_ui/.env.staging b/energy_management_ui/.env.staging
deleted file mode 100644
index 6195736..0000000
--- a/energy_management_ui/.env.staging
+++ /dev/null
@@ -1,7 +0,0 @@
-NODE_ENV = production
-
-# 娴嬭瘯鐜閰嶇疆
-ENV = 'staging'
-
-# 鑻ヤ緷绠$悊绯荤粺/娴嬭瘯鐜
-VUE_APP_BASE_API = '/stage-api'
diff --git a/energy_management_ui/.eslintignore b/energy_management_ui/.eslintignore
deleted file mode 100644
index 89be6f6..0000000
--- a/energy_management_ui/.eslintignore
+++ /dev/null
@@ -1,10 +0,0 @@
-# 蹇界暐build鐩綍涓嬬被鍨嬩负js鐨勬枃浠剁殑璇硶妫�鏌�
-build/*.js
-# 蹇界暐src/assets鐩綍涓嬫枃浠剁殑璇硶妫�鏌�
-src/assets
-# 蹇界暐public鐩綍涓嬫枃浠剁殑璇硶妫�鏌�
-public
-# 蹇界暐褰撳墠鐩綍涓嬩负js鐨勬枃浠剁殑璇硶妫�鏌�
-*.js
-# 蹇界暐褰撳墠鐩綍涓嬩负vue鐨勬枃浠剁殑璇硶妫�鏌�
-*.vue
\ No newline at end of file
diff --git a/energy_management_ui/.eslintrc.js b/energy_management_ui/.eslintrc.js
deleted file mode 100644
index 82bbdee..0000000
--- a/energy_management_ui/.eslintrc.js
+++ /dev/null
@@ -1,199 +0,0 @@
-// ESlint 妫�鏌ラ厤缃�
-module.exports = {
-  root: true,
-  parserOptions: {
-    parser: 'babel-eslint',
-    sourceType: 'module'
-  },
-  env: {
-    browser: true,
-    node: true,
-    es6: true,
-  },
-  extends: ['plugin:vue/recommended', 'eslint:recommended'],
-
-  // add your custom rules here
-  //it is base on https://github.com/vuejs/eslint-config-vue
-  rules: {
-    "vue/max-attributes-per-line": [2, {
-      "singleline": 10,
-      "multiline": {
-        "max": 1,
-        "allowFirstLine": false
-      }
-    }],
-    "vue/singleline-html-element-content-newline": "off",
-    "vue/multiline-html-element-content-newline":"off",
-    "vue/name-property-casing": ["error", "PascalCase"],
-    "vue/no-v-html": "off",
-    'accessor-pairs': 2,
-    'arrow-spacing': [2, {
-      'before': true,
-      'after': true
-    }],
-    'block-spacing': [2, 'always'],
-    'brace-style': [2, '1tbs', {
-      'allowSingleLine': true
-    }],
-    'camelcase': [0, {
-      'properties': 'always'
-    }],
-    'comma-dangle': [2, 'never'],
-    'comma-spacing': [2, {
-      'before': false,
-      'after': true
-    }],
-    'comma-style': [2, 'last'],
-    'constructor-super': 2,
-    'curly': [2, 'multi-line'],
-    'dot-location': [2, 'property'],
-    'eol-last': 2,
-    'eqeqeq': ["error", "always", {"null": "ignore"}],
-    'generator-star-spacing': [2, {
-      'before': true,
-      'after': true
-    }],
-    'handle-callback-err': [2, '^(err|error)$'],
-    'indent': [2, 2, {
-      'SwitchCase': 1
-    }],
-    'jsx-quotes': [2, 'prefer-single'],
-    'key-spacing': [2, {
-      'beforeColon': false,
-      'afterColon': true
-    }],
-    'keyword-spacing': [2, {
-      'before': true,
-      'after': true
-    }],
-    'new-cap': [2, {
-      'newIsCap': true,
-      'capIsNew': false
-    }],
-    'new-parens': 2,
-    'no-array-constructor': 2,
-    'no-caller': 2,
-    'no-console': 'off',
-    'no-class-assign': 2,
-    'no-cond-assign': 2,
-    'no-const-assign': 2,
-    'no-control-regex': 0,
-    'no-delete-var': 2,
-    'no-dupe-args': 2,
-    'no-dupe-class-members': 2,
-    'no-dupe-keys': 2,
-    'no-duplicate-case': 2,
-    'no-empty-character-class': 2,
-    'no-empty-pattern': 2,
-    'no-eval': 2,
-    'no-ex-assign': 2,
-    'no-extend-native': 2,
-    'no-extra-bind': 2,
-    'no-extra-boolean-cast': 2,
-    'no-extra-parens': [2, 'functions'],
-    'no-fallthrough': 2,
-    'no-floating-decimal': 2,
-    'no-func-assign': 2,
-    'no-implied-eval': 2,
-    'no-inner-declarations': [2, 'functions'],
-    'no-invalid-regexp': 2,
-    'no-irregular-whitespace': 2,
-    'no-iterator': 2,
-    'no-label-var': 2,
-    'no-labels': [2, {
-      'allowLoop': false,
-      'allowSwitch': false
-    }],
-    'no-lone-blocks': 2,
-    'no-mixed-spaces-and-tabs': 2,
-    'no-multi-spaces': 2,
-    'no-multi-str': 2,
-    'no-multiple-empty-lines': [2, {
-      'max': 1
-    }],
-    'no-native-reassign': 2,
-    'no-negated-in-lhs': 2,
-    'no-new-object': 2,
-    'no-new-require': 2,
-    'no-new-symbol': 2,
-    'no-new-wrappers': 2,
-    'no-obj-calls': 2,
-    'no-octal': 2,
-    'no-octal-escape': 2,
-    'no-path-concat': 2,
-    'no-proto': 2,
-    'no-redeclare': 2,
-    'no-regex-spaces': 2,
-    'no-return-assign': [2, 'except-parens'],
-    'no-self-assign': 2,
-    'no-self-compare': 2,
-    'no-sequences': 2,
-    'no-shadow-restricted-names': 2,
-    'no-spaced-func': 2,
-    'no-sparse-arrays': 2,
-    'no-this-before-super': 2,
-    'no-throw-literal': 2,
-    'no-trailing-spaces': 2,
-    'no-undef': 2,
-    'no-undef-init': 2,
-    'no-unexpected-multiline': 2,
-    'no-unmodified-loop-condition': 2,
-    'no-unneeded-ternary': [2, {
-      'defaultAssignment': false
-    }],
-    'no-unreachable': 2,
-    'no-unsafe-finally': 2,
-    'no-unused-vars': [2, {
-      'vars': 'all',
-      'args': 'none'
-    }],
-    'no-useless-call': 2,
-    'no-useless-computed-key': 2,
-    'no-useless-constructor': 2,
-    'no-useless-escape': 0,
-    'no-whitespace-before-property': 2,
-    'no-with': 2,
-    'one-var': [2, {
-      'initialized': 'never'
-    }],
-    'operator-linebreak': [2, 'after', {
-      'overrides': {
-        '?': 'before',
-        ':': 'before'
-      }
-    }],
-    'padded-blocks': [2, 'never'],
-    'quotes': [2, 'single', {
-      'avoidEscape': true,
-      'allowTemplateLiterals': true
-    }],
-    'semi': [2, 'never'],
-    'semi-spacing': [2, {
-      'before': false,
-      'after': true
-    }],
-    'space-before-blocks': [2, 'always'],
-    'space-before-function-paren': [2, 'never'],
-    'space-in-parens': [2, 'never'],
-    'space-infix-ops': 2,
-    'space-unary-ops': [2, {
-      'words': true,
-      'nonwords': false
-    }],
-    'spaced-comment': [2, 'always', {
-      'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
-    }],
-    'template-curly-spacing': [2, 'never'],
-    'use-isnan': 2,
-    'valid-typeof': 2,
-    'wrap-iife': [2, 'any'],
-    'yield-star-spacing': [2, 'both'],
-    'yoda': [2, 'never'],
-    'prefer-const': 2,
-    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
-    'object-curly-spacing': [2, 'always', {
-      objectsInObjects: false
-    }],
-    'array-bracket-spacing': [2, 'never']
-  }
-}
diff --git a/energy_management_ui/.gitignore b/energy_management_ui/.gitignore
deleted file mode 100644
index 78a752d..0000000
--- a/energy_management_ui/.gitignore
+++ /dev/null
@@ -1,23 +0,0 @@
-.DS_Store
-node_modules/
-dist/
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-**/*.log
-
-tests/**/coverage/
-tests/e2e/reports
-selenium-debug.log
-
-# Editor directories and files
-.idea
-.vscode
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.local
-
-package-lock.json
-yarn.lock
diff --git a/energy_management_ui/README.md b/energy_management_ui/README.md
deleted file mode 100644
index 3b5daac..0000000
--- a/energy_management_ui/README.md
+++ /dev/null
@@ -1,30 +0,0 @@
-## 开发
-
-```bash
-# 克隆项目
-git clone https://gitee.com/y_project/RuoYi-Vue
-
-# 进入项目目录
-cd ruoyi-ui
-
-# 安装依赖
-npm install
-
-# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
-npm install --registry=https://registry.npm.taobao.org
-
-# 启动服务
-npm run dev
-```
-
-浏览器访问 http://localhost:80
-
-## 发布
-
-```bash
-# 构建测试环境
-npm run build:stage
-
-# 构建生产环境
-npm run build:prod
-```
\ No newline at end of file
diff --git a/energy_management_ui/babel.config.js b/energy_management_ui/babel.config.js
deleted file mode 100644
index ba17966..0000000
--- a/energy_management_ui/babel.config.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
-  presets: [
-    '@vue/app'
-  ]
-}
diff --git a/energy_management_ui/build/index.js b/energy_management_ui/build/index.js
deleted file mode 100644
index 0c57de2..0000000
--- a/energy_management_ui/build/index.js
+++ /dev/null
@@ -1,35 +0,0 @@
-const { run } = require('runjs')
-const chalk = require('chalk')
-const config = require('../vue.config.js')
-const rawArgv = process.argv.slice(2)
-const args = rawArgv.join(' ')
-
-if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
-  const report = rawArgv.includes('--report')
-
-  run(`vue-cli-service build ${args}`)
-
-  const port = 9526
-  const publicPath = config.publicPath
-
-  var connect = require('connect')
-  var serveStatic = require('serve-static')
-  const app = connect()
-
-  app.use(
-    publicPath,
-    serveStatic('./dist', {
-      index: ['index.html', '/']
-    })
-  )
-
-  app.listen(port, function () {
-    console.log(chalk.green(`> Preview at  http://localhost:${port}${publicPath}`))
-    if (report) {
-      console.log(chalk.green(`> Report at  http://localhost:${port}${publicPath}report.html`))
-    }
-
-  })
-} else {
-  run(`vue-cli-service build ${args}`)
-}
diff --git a/energy_management_ui/package.json b/energy_management_ui/package.json
deleted file mode 100644
index 8d91ef7..0000000
--- a/energy_management_ui/package.json
+++ /dev/null
@@ -1,106 +0,0 @@
-{
-  "name": "ruoyi",
-  "version": "2.0.0",
-  "description": "涓滀附鍖荤枟鑳芥簮绠$悊绯荤粺",
-  "author": "鑻ヤ緷",
-  "license": "MIT",
-  "scripts": {
-    "serve": "vue-cli-service serve",
-    "build": "vue-cli-service build",
-    "build:stage": "vue-cli-service build --mode staging",
-    "preview": "node build/index.js --preview",
-    "lint": "eslint --ext .js,.vue src",
-    "test:unit": "jest --clearCache && vue-cli-service test:unit",
-    "test:ci": "npm run lint && npm run test:unit",
-    "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
-    "new": "plop"
-  },
-  "husky": {
-    "hooks": {
-      "pre-commit": "lint-staged"
-    }
-  },
-  "lint-staged": {
-    "src/**/*.{js,vue}": [
-      "eslint --fix",
-      "git add"
-    ]
-  },
-  "keywords": [
-    "vue",
-    "admin",
-    "dashboard",
-    "element-ui",
-    "boilerplate",
-    "admin-template",
-    "management-system"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "https://gitee.com/y_project/RuoYi-Vue.git"
-  },
-  "dependencies": {
-    "@riophae/vue-treeselect": "0.4.0",
-    "axios": "0.18.1",
-    "echarts": "4.2.1",
-    "element-ui": "2.11.1",
-    "fuse.js": "3.4.4",
-    "html2pdf.js": "^0.10.1",
-    "js-cookie": "2.2.0",
-    "jsencrypt": "3.0.0-rc.1",
-    "moment": "^2.29.1",
-    "normalize.css": "7.0.0",
-    "nprogress": "0.2.0",
-    "path-to-regexp": "2.4.0",
-    "postcss-px2rem": "^0.3.0",
-    "sass": "^1.50.0",
-    "screenfull": "4.2.0",
-    "svg-sprite-loader": "^4.2.1",
-    "vue": "2.6.10",
-    "vue-count-to": "1.0.13",
-    "vue-cropper": "0.4.9",
-    "vue-quill-editor": "3.0.6",
-    "vue-router": "3.0.2",
-    "vue-splitpane": "1.0.4",
-    "vuex": "3.1.0"
-  },
-  "devDependencies": {
-    "@babel/core": "7.0.0",
-    "@babel/register": "7.0.0",
-    "@vue/cli-plugin-babel": "3.5.3",
-    "@vue/cli-plugin-eslint": "^3.9.1",
-    "@vue/cli-plugin-unit-jest": "3.5.3",
-    "@vue/cli-service": "3.5.3",
-    "@vue/test-utils": "1.0.0-beta.29",
-    "autoprefixer": "^9.5.1",
-    "babel-core": "7.0.0-bridge.0",
-    "babel-eslint": "10.0.1",
-    "babel-jest": "23.6.0",
-    "chalk": "2.4.2",
-    "chokidar": "2.1.5",
-    "connect": "3.6.6",
-    "eslint": "5.15.3",
-    "eslint-plugin-vue": "5.2.2",
-    "html-webpack-plugin": "3.2.0",
-    "http-proxy-middleware": "^0.19.1",
-    "husky": "1.3.1",
-    "lint-staged": "8.1.5",
-    "mockjs": "1.0.1-beta3",
-    "plop": "2.3.0",
-    "runjs": "^4.3.2",
-    "sass-loader": "^7.1.0",
-    "script-ext-html-webpack-plugin": "2.1.3",
-    "script-loader": "0.7.2",
-    "serve-static": "^1.13.2",
-    "svgo": "1.2.0",
-    "vue-template-compiler": "2.6.10"
-  },
-  "engines": {
-    "node": ">=8.9",
-    "npm": ">= 3.0.0"
-  },
-  "browserslist": [
-    "> 1%",
-    "last 2 versions"
-  ]
-}
diff --git a/energy_management_ui/public/favicon.ico b/energy_management_ui/public/favicon.ico
deleted file mode 100644
index 380134d..0000000
--- a/energy_management_ui/public/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/public/index.html b/energy_management_ui/public/index.html
deleted file mode 100644
index 46b4d78..0000000
--- a/energy_management_ui/public/index.html
+++ /dev/null
@@ -1,209 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset="utf-8" />
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
-    <meta name="renderer" content="webkit" />
-    <meta
-      name="viewport"
-      content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
-    />
-    <link rel="icon" href="<%= BASE_URL %>toray_group_icon.png" />
-    <title><%= webpackConfig.name %></title>
-    <style>
-      html,
-      body,
-      #app {
-        height: 100%;
-        margin: 0px;
-        padding: 0px;
-      }
-
-      .chromeframe {
-        margin: 0.2em 0;
-        background: #ccc;
-        color: #000;
-        padding: 0.2em 0;
-      }
-
-      #loader-wrapper {
-        position: fixed;
-        top: 0;
-        left: 0;
-        width: 100%;
-        height: 100%;
-        z-index: 999999;
-      }
-
-      #loader {
-        display: block;
-        position: relative;
-        left: 50%;
-        top: 50%;
-        width: 150px;
-        height: 150px;
-        margin: -75px 0 0 -75px;
-        border-radius: 50%;
-        border: 3px solid transparent;
-        border-top-color: #fff;
-        -webkit-animation: spin 2s linear infinite;
-        -ms-animation: spin 2s linear infinite;
-        -moz-animation: spin 2s linear infinite;
-        -o-animation: spin 2s linear infinite;
-        animation: spin 2s linear infinite;
-        z-index: 1001;
-      }
-
-      #loader:before {
-        content: "";
-        position: absolute;
-        top: 5px;
-        left: 5px;
-        right: 5px;
-        bottom: 5px;
-        border-radius: 50%;
-        border: 3px solid transparent;
-        border-top-color: #fff;
-        -webkit-animation: spin 3s linear infinite;
-        -moz-animation: spin 3s linear infinite;
-        -o-animation: spin 3s linear infinite;
-        -ms-animation: spin 3s linear infinite;
-        animation: spin 3s linear infinite;
-      }
-
-      #loader:after {
-        content: "";
-        position: absolute;
-        top: 15px;
-        left: 15px;
-        right: 15px;
-        bottom: 15px;
-        border-radius: 50%;
-        border: 3px solid transparent;
-        border-top-color: #fff;
-        -moz-animation: spin 1.5s linear infinite;
-        -o-animation: spin 1.5s linear infinite;
-        -ms-animation: spin 1.5s linear infinite;
-        -webkit-animation: spin 1.5s linear infinite;
-        animation: spin 1.5s linear infinite;
-      }
-
-      @-webkit-keyframes spin {
-        0% {
-          -webkit-transform: rotate(0deg);
-          -ms-transform: rotate(0deg);
-          transform: rotate(0deg);
-        }
-        100% {
-          -webkit-transform: rotate(360deg);
-          -ms-transform: rotate(360deg);
-          transform: rotate(360deg);
-        }
-      }
-
-      @keyframes spin {
-        0% {
-          -webkit-transform: rotate(0deg);
-          -ms-transform: rotate(0deg);
-          transform: rotate(0deg);
-        }
-        100% {
-          -webkit-transform: rotate(360deg);
-          -ms-transform: rotate(360deg);
-          transform: rotate(360deg);
-        }
-      }
-
-      #loader-wrapper .loader-section {
-        position: fixed;
-        top: 0;
-        width: 51%;
-        height: 100%;
-        /* background: rgba(43, 142, 255, 1); */
-        background: #38bcbf;
-        z-index: 1000;
-        -webkit-transform: translateX(0);
-        -ms-transform: translateX(0);
-        transform: translateX(0);
-      }
-
-      #loader-wrapper .loader-section.section-left {
-        left: 0;
-      }
-
-      #loader-wrapper .loader-section.section-right {
-        right: 0;
-      }
-
-      .loaded #loader-wrapper .loader-section.section-left {
-        -webkit-transform: translateX(-100%);
-        -ms-transform: translateX(-100%);
-        transform: translateX(-100%);
-        -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
-        transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
-      }
-
-      .loaded #loader-wrapper .loader-section.section-right {
-        -webkit-transform: translateX(100%);
-        -ms-transform: translateX(100%);
-        transform: translateX(100%);
-        -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
-        transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
-      }
-
-      .loaded #loader {
-        opacity: 0;
-        -webkit-transition: all 0.3s ease-out;
-        transition: all 0.3s ease-out;
-      }
-
-      .loaded #loader-wrapper {
-        visibility: hidden;
-        -webkit-transform: translateY(-100%);
-        -ms-transform: translateY(-100%);
-        transform: translateY(-100%);
-        -webkit-transition: all 0.3s 1s ease-out;
-        transition: all 0.3s 1s ease-out;
-      }
-
-      .no-js #loader-wrapper {
-        display: none;
-      }
-
-      .no-js h1 {
-        color: #222222;
-      }
-
-      #loader-wrapper .load_title {
-        font-family: "Open Sans";
-        color: #fff;
-        font-size: 19px;
-        width: 100%;
-        text-align: center;
-        z-index: 9999999999999;
-        position: absolute;
-        top: 60%;
-        opacity: 1;
-        line-height: 30px;
-      }
-
-      #loader-wrapper .load_title span {
-        font-weight: normal;
-        font-style: italic;
-        font-size: 13px;
-        color: #fff;
-        opacity: 0.5;
-      }
-    </style>
-  </head>
-  <body>
-    <div id="app">
-      <div id="loader-wrapper">
-        <div id="loader"></div>
-        <div class="loader-section section-left"></div>
-        <div class="loader-section section-right"></div>
-        <div class="load_title">姝e湪鍔犺浇绯荤粺璧勬簮锛岃鑰愬績绛夊緟</div>
-      </div>
-    </div>
-  </body>
-</html>
diff --git a/energy_management_ui/public/logo.png b/energy_management_ui/public/logo.png
deleted file mode 100644
index 0f0d73a..0000000
--- a/energy_management_ui/public/logo.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/App.vue b/energy_management_ui/src/App.vue
deleted file mode 100644
index ac6b216..0000000
--- a/energy_management_ui/src/App.vue
+++ /dev/null
@@ -1,11 +0,0 @@
-<template>
-  <div id="app">
-    <router-view />
-  </div>
-</template>
-
-<script>
-export default {
-  name: "App"
-};
-</script>
diff --git a/energy_management_ui/src/api/alarmItem/alarmItem.js b/energy_management_ui/src/api/alarmItem/alarmItem.js
deleted file mode 100644
index 320aa8b..0000000
--- a/energy_management_ui/src/api/alarmItem/alarmItem.js
+++ /dev/null
@@ -1,106 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ棰勬姤璀﹁缃垪琛�
-export function listSet(query) {
-  return request({
-    url: '/system/alarmitem/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ棰勬姤璀﹁缃缁�
-export function getSet(id) {
-  return request({
-    url: '/system/alarmitem/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板棰勬姤璀﹁缃�
-export function addSet(data) {
-  return request({
-    url: '/system/alarmitem',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼棰勬姤璀﹁缃�
-export function updateSet(data,type) {
-  return request({
-    url: '/system/alarmitem/startstop/'+type,
-    method: 'post',
-    data: data
-  })
-}
-
-// 鍒犻櫎棰勬姤璀﹁缃�
-export function delSet(id) {
-  return request({
-    url: '/system/alarmitem/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭棰勬姤璀﹁缃�
-export function exportSet(query) {
-  return request({
-    url: '/system/alarmitem/export',
-    method: 'get',
-    params: query
-  })
-}
-
-
-//
-export function getStartStop(indexid) {
-  return request({
-    url: '/system/alarmitem/getStartStop/'+indexid,
-    async: false,
-    method: 'get'
-  })
-}
-
-// 鏌ヨ棰刬d涓嬭缃檺鍊肩殑鏁伴噺
-export function getSettingCount(id) {
-  return request({
-    url: '/system/alarmitem/getSettingCount/'+id,
-    method: 'get',
-  })
-}
-
-//寮瑰嚭绐楀彛
-// 鏌ヨ棰勬姤璀﹁缃缁�
-export function getSetting(id) {
-  return request({
-    url: '/system/alarmitem/getSettingInfo/'+id,
-    method: 'get',
-  })
-}
-// 淇敼棰勬姤璀﹁缃�
-export function updateSetting(data) {
-  return request({
-    url: '/system/alarmitem',
-    method: 'put',
-    data: data
-  })
-}
-//瀵屽伐鎺ュ彛
-export function getSettingIndex(para) {
-  // console.log("nodeId=="+para.nodeId+"index=="+para.indexType);
-  return request({
-    url: '/basicsetting/modelnode/energyIndex/'+para.indexType+"/" + para.nodeId,
-    method: 'get'
-  })
-}
-
-
-// 淇敼琛ㄥ崟鏁版嵁
-export function updateDialogForm(data) {
-  return request({
-    url: '/system/alarmitem/editLimitVal',
-    method: 'put',
-    data: data
-  })
-}
diff --git a/energy_management_ui/src/api/basicSetup/category.js b/energy_management_ui/src/api/basicSetup/category.js
deleted file mode 100644
index 3d40cbb..0000000
--- a/energy_management_ui/src/api/basicSetup/category.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨcategory鍒楄〃
-export function listCategory(query) {
-  return request({
-    url: '/basicSetup/category/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨcategory璇︾粏
-export function getCategory(id) {
-  return request({
-    url: '/basicSetup/category/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板category
-export function addCategory(data) {
-  return request({
-    url: '/basicSetup/category',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼category
-export function updateCategory(data) {
-  return request({
-    url: '/basicSetup/category',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎category
-export function delCategory(id) {
-  return request({
-    url: '/basicSetup/category/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭category
-export function exportCategory(query) {
-  return request({
-    url: '/basicSetup/category/export',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/basicSetup/equipmentfile.js b/energy_management_ui/src/api/basicSetup/equipmentfile.js
deleted file mode 100644
index 8806208..0000000
--- a/energy_management_ui/src/api/basicSetup/equipmentfile.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import request from '@/utils/request'
-
-// 淇敼缁勬�佸浘
-export function updateEquipmentfile(data) {
-  return request({
-    url: '/basicSetup/equipmentfile',
-    method: 'put',
-    data: data
-  })
-}
-
-export function getAllCollectTag(data) {
-  return request({
-    url: '/basicsetting/energyindex/filter',
-    method: 'get',
-    params: data
-  })
-}
-
-export function saveSetting(nodeId, data) {
-  return request({
-    url: '/basicSetup/equipmentfile/setting/' + nodeId,
-    method: 'put',
-    data: data
-  })
-}
-
-export function getConfigure(nodeId) {
-  return request({
-    url: '/basicSetup/equipmentfile/configure/' + nodeId,
-    method: 'get'
-  })
-}
-
-export function getLiveData(tagCodes) {
-  return request({
-    url: '/rtdb/retrieve/' + tagCodes,
-    method: 'get'
-  })
-}
diff --git a/energy_management_ui/src/api/basicSetup/parameters.js b/energy_management_ui/src/api/basicSetup/parameters.js
deleted file mode 100644
index db6e754..0000000
--- a/energy_management_ui/src/api/basicSetup/parameters.js
+++ /dev/null
@@ -1,59 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨbasicSetup鍒楄〃
-export function listParameters(query) {
-  return request({
-    url: '/basicSetup/parameters/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨbasicSetup璇︾粏
-export function getParameters(id) {
-  return request({
-    url: '/basicSetup/parameters/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板basicSetup
-export function addParameters(data) {
-  return request({
-    url: '/basicSetup/parameters',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼basicSetup
-export function updateParameters(data) {
-  return request({
-    url: '/basicSetup/parameters',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎basicSetup
-export function delParameters(id) {
-  return request({
-    url: '/basicSetup/parameters/' + id,
-    method: 'delete'
-  })
-}
-export function getAllCollectTag(data) {
-  return request({
-    url: '/basicsetting/energyindex/filter',
-    method: 'get',
-    params: data
-  })
-}
-
-export function getListSee(titleId) {
-  return request({
-    url: '/basicSetup/parameters/listSee/'+titleId,
-    method: 'get',
-    //params: titleId
-  })
-}
diff --git a/energy_management_ui/src/api/basicsetting/alarm.js b/energy_management_ui/src/api/basicsetting/alarm.js
deleted file mode 100644
index c8cc259..0000000
--- a/energy_management_ui/src/api/basicsetting/alarm.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鍒楄〃
-export function List(indexType,nodeId) {
-  return request({
-    url: '/basicsetting/modelnode/energyIndex/'+indexType+"/" + nodeId,
-    method: 'get',
-  })
-}
diff --git a/energy_management_ui/src/api/basicsetting/deviceStorage.js b/energy_management_ui/src/api/basicsetting/deviceStorage.js
deleted file mode 100644
index b73743c..0000000
--- a/energy_management_ui/src/api/basicsetting/deviceStorage.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import request from '@/utils/request'
-
-export function getDeviceStorage(nodeId,stateId) {
-  return request({
-    url: '/basicsetting/deviceStorage/'+nodeId+"/" + stateId,
-    method: 'GET'
-  })
-}
-
-
-export function saveDeviceStorage(nodeId,stateId, data) {
-  return request({
-    url: '/basicsetting/deviceStorage/' + nodeId+'/'+stateId,
-    method: 'post',
-    data: data
-  });
-}
-
-export function getDeviceStateByNodeIds(query) {
-  return request({
-    url: '/basicsetting/deviceStorage/getDeviceStateByNodeIds',
-    method: 'GET',
-    params: query
-  })
-}
-
-// 淇敼棰勬姤璀﹁缃�
-export function setIsEnable(nodeId,isEnbale,data) {
-  return request({
-    url: '/basicsetting/deviceStorage/setIsEnable/'+nodeId+'/'+isEnbale,
-    method: 'post',
-    data: data
-  })
-}
-
diff --git a/energy_management_ui/src/api/basicsetting/energyindex.js b/energy_management_ui/src/api/basicsetting/energyindex.js
deleted file mode 100644
index 9d119b9..0000000
--- a/energy_management_ui/src/api/basicsetting/energyindex.js
+++ /dev/null
@@ -1,69 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鎸囨爣淇℃伅鍒楄〃
-export function listEnergyindex(query) {
-  return request({
-    url: '/basicsetting/energyindex/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鎸囨爣淇℃伅璇︾粏
-export function getEnergyindex(indexId) {
-  return request({
-    url: '/basicsetting/energyindex/' + indexId,
-    method: 'get'
-  })
-}
-
-// 鏂板鎸囨爣淇℃伅
-export function addEnergyindex(nodeId, data) {
-  return request({
-    url: '/basicsetting/energyindex/' + nodeId,
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鎸囨爣淇℃伅
-export function updateEnergyindex(data) {
-  return request({
-    url: '/basicsetting/energyindex',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鎸囨爣淇℃伅
-export function delEnergyindex(nodeId, indexId) {
-  return request({
-    url: '/basicsetting/energyindex/' + nodeId + '/' + indexId,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鎸囨爣淇℃伅
-export function exportEnergyindex(query) {
-  return request({
-    url: '/basicsetting/energyindex/export',
-    method: 'get',
-    params: query
-  })
-}
-
-export function listCollectIndex(query) {
-  return request({
-    url: '/basicsetting/energyindex/collectIndex',
-    method: 'get',
-    params: query
-  })
-}
-
-// 涓嬭浇瀵煎叆妯℃澘
-export function importTemplate() {
-  return request({
-    url: '/basicsetting/energyindex/importTemplate',
-    method: 'get'
-  })
-}
diff --git a/energy_management_ui/src/api/basicsetting/function.js b/energy_management_ui/src/api/basicsetting/function.js
deleted file mode 100644
index e34d318..0000000
--- a/energy_management_ui/src/api/basicsetting/function.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ璁$畻鍑芥暟鍒楄〃
-export function listFunction(query) {
-  return request({
-    url: '/basicsetting/function/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ璁$畻鍑芥暟璇︾粏
-export function getFunction(info) {
-  return request({
-    url: '/basicsetting/function/' + info,
-    method: 'get'
-  })
-}
-
-// 鏂板璁$畻鍑芥暟
-export function addFunction(data) {
-  return request({
-    url: '/basicsetting/function',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼璁$畻鍑芥暟
-export function updateFunction(data) {
-  return request({
-    url: '/basicsetting/function',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎璁$畻鍑芥暟
-export function delFunction(info) {
-  return request({
-    url: '/basicsetting/function/' + info,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭璁$畻鍑芥暟
-export function exportFunction(query) {
-  return request({
-    url: '/basicsetting/function/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/basicsetting/historyAlarm.js b/energy_management_ui/src/api/basicsetting/historyAlarm.js
deleted file mode 100644
index 2bfbbcc..0000000
--- a/energy_management_ui/src/api/basicsetting/historyAlarm.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鍒楄〃
-export function listHistoryAlarm(query) {
-  return request({
-    url: 'energyAlarm/historicalAlarm/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 瀵煎嚭璁惧妗f
-export function exportHistoricalAlarm(query) {
-  return request({
-    url: 'energyAlarm/historicalAlarm/export',
-    method: 'get',
-    params: query
-  })
-}
-
-
-// 鏌ヨ鍒楄〃
-export function listHistoryAlarmNote(query) {
-  return request({
-    url: 'energyAlarm/historicalAlarm/listNote',
-    method: 'get',
-    params: query
-  })
-}
-
-
-
-
-
-
diff --git a/energy_management_ui/src/api/basicsetting/indexStorage.js b/energy_management_ui/src/api/basicsetting/indexStorage.js
deleted file mode 100644
index 6b0814e..0000000
--- a/energy_management_ui/src/api/basicsetting/indexStorage.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import request from '@/utils/request'
-
-export function parseFormula(data) {
-  return request({
-    url: '/basicsetting/indexStorage/parseFormula',
-    method: 'post',
-    data: data
-  })
-}
-
-export function getNodeIndex(nodeId) {
-  return request({
-    url: '/basicsetting/energyindex/includeChildrenNode/' + nodeId,
-    method: 'GET'
-  })
-}
-
-export function getCalcPeriod() {
-  return request({
-    url: '/basicsetting/indexStorage/calcPeriod/',
-    method: 'GET'
-  })
-}
-
-export function saveIndexStorage(indexId, data) {
-  return request({
-    url: '/basicsetting/indexStorage/' + indexId,
-    method: 'post',
-    data: data
-  });
-}
-
-export function getIndexStorage(indexId) {
-  return request({
-    url: '/basicsetting/indexStorage/' + indexId,
-    method: 'GET'
-  })
-}
diff --git a/energy_management_ui/src/api/basicsetting/limitType.js b/energy_management_ui/src/api/basicsetting/limitType.js
deleted file mode 100644
index 3954bbc..0000000
--- a/energy_management_ui/src/api/basicsetting/limitType.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鎶ヨ闄愬�肩被鍨嬬淮鎶ゅ垪琛�
-export function listLimitType(query) {
-  return request({
-    url: '/basicsetting/limitType/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鎶ヨ闄愬�肩被鍨嬬淮鎶よ缁�
-export function getLimitType(id) {
-  return request({
-    url: '/basicsetting/limitType/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板鎶ヨ闄愬�肩被鍨嬬淮鎶�
-export function addLimitType(data) {
-  return request({
-    url: '/basicsetting/limitType',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鎶ヨ闄愬�肩被鍨嬬淮鎶�
-export function updateLimitType(data) {
-  return request({
-    url: '/basicsetting/limitType',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鎶ヨ闄愬�肩被鍨嬬淮鎶�
-export function delLimitType(id) {
-  return request({
-    url: '/basicsetting/limitType/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鎶ヨ闄愬�肩被鍨嬬淮鎶�
-export function exportLimitType(query) {
-  return request({
-    url: '/basicsetting/limitType/export',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/basicsetting/model.js b/energy_management_ui/src/api/basicsetting/model.js
deleted file mode 100644
index da23492..0000000
--- a/energy_management_ui/src/api/basicsetting/model.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ妯″瀷淇℃伅鍒楄〃
-export function listModel(query) {
-  return request({
-    url: '/basicsetting/model/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ妯″瀷淇℃伅璇︾粏
-export function getModel(id) {
-  return request({
-    url: '/basicsetting/model/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板妯″瀷淇℃伅
-export function addModel(data) {
-  return request({
-    url: '/basicsetting/model',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼妯″瀷淇℃伅
-export function updateModel(data) {
-  return request({
-    url: '/basicsetting/model',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎妯″瀷淇℃伅
-export function delModel(id) {
-  return request({
-    url: '/basicsetting/model/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭妯″瀷淇℃伅
-export function exportModel(query) {
-  return request({
-    url: '/basicsetting/model/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/basicsetting/modelNode.js b/energy_management_ui/src/api/basicsetting/modelNode.js
deleted file mode 100644
index a3675f4..0000000
--- a/energy_management_ui/src/api/basicsetting/modelNode.js
+++ /dev/null
@@ -1,185 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ妯″瀷鑺傜偣鍒楄〃
-export function modelNodeTree(query, withAuth) {
-  if (withAuth) {
-    return request({
-      url: '/basicsetting/modelnode/treelist/withAuth',
-      method: 'get',
-      params: query
-    })
-  } else {
-    return request({
-      url: '/basicsetting/modelnode/treelist',
-      method: 'get',
-      params: query
-    })
-  }
-}
-
-// 鏌ヨ妯″瀷鑺傜偣鍒楄〃
-export function listModelNode(query) {
-  return request({
-    url: '/basicsetting/modelnode/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ妯″瀷鑺傜偣璇︾粏
-export function getModelNode(nodeId) {
-  return request({
-    url: '/basicsetting/modelnode/' + nodeId,
-    method: 'get'
-  })
-}
-
-// 鏂板妯″瀷鑺傜偣
-export function addModelNode(data) {
-  return request({
-    url: '/basicsetting/modelnode',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼妯″瀷鑺傜偣
-export function updateModelNode(data) {
-  return request({
-    url: '/basicsetting/modelnode',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎妯″瀷鑺傜偣
-export function delModelNode(nodeId) {
-  return request({
-    url: '/basicsetting/modelnode/' + nodeId,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭妯″瀷鑺傜偣
-export function exportModelNode(query) {
-  return request({
-    url: '/basicsetting/modelnode/export',
-    method: 'get',
-    params: query
-  })
-}
-
-export function updateModelNodeOrder(param) {
-  return request({
-    url: '/basicsetting/modelnode/order',
-    method: 'put',
-    data: param
-  })
-}
-
-export function hasEnergyIndex(nodeId) {
-  return request({
-    url: '/basicsetting/modelnode/hasEnergyIndex',
-    method: 'get',
-    params: {nodeId: nodeId}
-  })
-}
-
-export function getSettingDevice(nodeId) {
-  return request({
-    url: '/basicsetting/modelnode/device/' + nodeId,
-    method: 'get'
-  })
-}
-
-export function setDevice(nodeId, deviceIds) {
-  return request({
-    url: '/basicsetting/modelnode/device/' + nodeId,
-    method: 'post',
-    data: deviceIds
-  })
-}
-
-export function delDevice(nodeId, deviceId) {
-  return request({
-    url: '/basicsetting/modelnode/device/' + nodeId,
-    method: 'delete',
-    data: [deviceId]
-  })
-}
-//鑾峰彇妯″瀷涓嬬殑鑳芥簮鍝佺
-export function getSettingEnergy(nodeId) {
-  return request({
-    url: '/basicsetting/modelnode/energy/' + nodeId,
-    method: 'get'
-  })
-}
-
-export function setEnergy(nodeId, energyIds) {
-  return request({
-    url: '/basicsetting/modelnode/energy/' + nodeId,
-    method: 'post',
-    data: energyIds
-  })
-}
-
-export function delEnergy(nodeId, energyId) {
-  return request({
-    url: '/basicsetting/modelnode/energy/' + nodeId,
-    method: 'delete',
-    data: [energyId]
-  })
-}
-
-export function getSettingProduct(nodeId) {
-  return request({
-    url: '/basicsetting/modelnode/product/' + nodeId,
-    method: 'get'
-  })
-}
-
-export function setProduct(nodeId, productIds) {
-  return request({
-    url: '/basicsetting/modelnode/product/' + nodeId,
-    method: 'post',
-    data: productIds
-  })
-}
-
-export function delProduct(nodeId, productId) {
-  return request({
-    url: '/basicsetting/modelnode/product/' + nodeId,
-    method: 'delete',
-    data: [productId]
-  })
-}
-//鑾峰彇妯″瀷涓嬬殑鎸囨爣
-export function getSettingIndex(nodeId) {
-  return request({
-    url: '/basicsetting/modelnode/energyIndex/' + nodeId,
-    method: 'get'
-  })
-}
-
-export function getSettingCollectIndex(nodeId) {
-  return request({
-    url: '/basicsetting/modelnode/energyIndex/COLLECT/' + nodeId,
-    method: 'get'
-  })
-}
-
-export function setNodeToIndex(nodeId, indexIds, indexType) {
-  return request({
-    url: '/basicsetting/modelnode/energyIndex/' + nodeId + "/" + indexType,
-    method: 'post',
-    data: indexIds
-  })
-}
-
-export function delIndex(nodeId, indexId) {
-  return request({
-    url: '/basicsetting/modelnode/energyIndex/' + nodeId,
-    method: 'delete',
-    data: [indexId]
-  })
-}
diff --git a/energy_management_ui/src/api/basicsetting/state.js b/energy_management_ui/src/api/basicsetting/state.js
deleted file mode 100644
index 030e34b..0000000
--- a/energy_management_ui/src/api/basicsetting/state.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鍒楄〃
-export function List(indexType,nodeId) {
-  return request({
-    url: '/basicsetting/modelnode/energyIndex/'+indexType+"/" + nodeId,
-    method: 'get',
-  })
-
-
-
-}
diff --git a/energy_management_ui/src/api/basicsetting/statetype.js b/energy_management_ui/src/api/basicsetting/statetype.js
deleted file mode 100644
index f38de5e..0000000
--- a/energy_management_ui/src/api/basicsetting/statetype.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ绯荤粺鐘舵�佺淮鎶ゅ垪琛�
-export function listStatetype(query) {
-  return request({
-    url: '/basicsetting/statetype/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ绯荤粺鐘舵�佺淮鎶よ缁�
-export function getStatetype(stateId) {
-  return request({
-    url: '/basicsetting/statetype/' + stateId,
-    method: 'get'
-  })
-}
-
-// 鏂板绯荤粺鐘舵�佺淮鎶�
-export function addStatetype(data) {
-  return request({
-    url: '/basicsetting/statetype',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼绯荤粺鐘舵�佺淮鎶�
-export function updateStatetype(data) {
-  return request({
-    url: '/basicsetting/statetype',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎绯荤粺鐘舵�佺淮鎶�
-export function delStatetype(stateId) {
-  return request({
-    url: '/basicsetting/statetype/' + stateId,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭绯荤粺鐘舵�佺淮鎶�
-export function exportStatetype(query) {
-  return request({
-    url: '/basicsetting/statetype/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/basicsetting/template.js b/energy_management_ui/src/api/basicsetting/template.js
deleted file mode 100644
index 3be4dcc..0000000
--- a/energy_management_ui/src/api/basicsetting/template.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ閲囬泦鍙傛暟妯℃澘鍒楄〃
-export function listTemplate(query) {
-  return request({
-    url: '/system/template/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ閲囬泦鍙傛暟妯℃澘璇︾粏
-export function getTemplate(id) {
-  return request({
-    url: '/system/template/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板閲囬泦鍙傛暟妯℃澘
-export function addTemplate(data) {
-  return request({
-    url: '/system/template',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼閲囬泦鍙傛暟妯℃澘
-export function updateTemplate(data) {
-  return request({
-    url: '/system/template',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎閲囬泦鍙傛暟妯℃澘
-export function delTemplate(id) {
-  return request({
-    url: '/system/template/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭閲囬泦鍙傛暟妯℃澘
-export function exportTemplate(query) {
-  return request({
-    url: '/system/template/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/benchmarking/BenchmarkingManagement.js b/energy_management_ui/src/api/benchmarking/BenchmarkingManagement.js
deleted file mode 100644
index 2e65b96..0000000
--- a/energy_management_ui/src/api/benchmarking/BenchmarkingManagement.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鏍囨潌绠$悊鍒楄〃
-export function listBenchmarkingManagement(query) {
-  return request({
-    url: '/benchmarking/BenchmarkingManagement/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鏍囨潌绠$悊璇︾粏
-export function getBenchmarkingManagement(indexId) {
-  return request({
-    url: '/benchmarking/BenchmarkingManagement/' + indexId,
-    method: 'get'
-  })
-}
-
-// 鏂板鏍囨潌绠$悊
-export function addBenchmarkingManagement(data) {
-  return request({
-    url: '/benchmarking/BenchmarkingManagement',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鏍囨潌绠$悊
-export function updateBenchmarkingManagement(data) {
-  return request({
-    url: '/benchmarking/BenchmarkingManagement',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鏍囨潌绠$悊
-export function delBenchmarkingManagement(indexId) {
-  return request({
-    url: '/benchmarking/BenchmarkingManagement/' + indexId,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鏍囨潌绠$悊
-export function exportBenchmarkingManagement(query) {
-  return request({
-    url: '/benchmarking/BenchmarkingManagement/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/benchmarking/phaseBenchmarking.js b/energy_management_ui/src/api/benchmarking/phaseBenchmarking.js
deleted file mode 100644
index 52e2c32..0000000
--- a/energy_management_ui/src/api/benchmarking/phaseBenchmarking.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ瀵规爣鍒楄〃
-export function listPhaseBenchmarking(query) {
-  return request({
-    url: '/benchmarking/phaseBenchmarking/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ瀵规爣璇︾粏
-export function listRealTimeListrealTime(query) {
-  return request({
-    url: '/benchmarking/phaseBenchmarking/realTimeListrealTime',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/comprehensiveStatistics/comprehensive.js b/energy_management_ui/src/api/comprehensiveStatistics/comprehensive.js
deleted file mode 100644
index bd8dbb5..0000000
--- a/energy_management_ui/src/api/comprehensiveStatistics/comprehensive.js
+++ /dev/null
@@ -1,70 +0,0 @@
-import request from '@/utils/request'
-
-//鍏ㄥ巶缁煎悎鑳借�楃粺璁�
-export function getDataList(query) {
-  return request({
-    url: '/statisticalData/comprehensiveStatistics/list',
-    method: 'get',
-    params: query
-  })
-}
-
-//鍏ㄥ巶缁煎悎鑳借�楃粺璁″浘
-export function getlistChart(query) {
-  return request({
-    url: '/statisticalData/comprehensiveStatistics/listChart',
-    method: 'get',
-    params: query
-  })
-}
-export function exportList(query) {
-  return request({
-    url: '/statisticalData/comprehensiveStatistics/export',
-    method: 'get',
-    params: query
-  })
-}
-export function getEnergyList(query) {
-  return request({
-    url: '/statisticalData/comprehensiveStatistics/getList',
-    method: 'get',
-    params: query
-  })
-}
-//閲嶇偣璁惧鑳借�楁帓鍚�
-export function energyList(query) {
-  return request({
-    url: '/statisticalData/comprehensiveStatistics/energyList',
-    method: 'get',
-    params: query
-  })
-}
-//璁惧
-export function getFacilityArchives() {
-  return request({
-    url: '/statisticalData/comprehensiveStatistics/getFacilityArchives',
-    method: 'get'
-  })
-}
-//閲嶇偣璁惧
-export function getPointFacility() {
-  return request({
-    url: '/statisticalData/comprehensiveStatistics/getPointFacility',
-    method: 'get'
-  })
-}
-export function getDeviceList(query) {
-  return request({
-    url: '/statisticalData/comprehensiveStatistics/getDeviceList',
-    method: 'get',
-    params: query
-  })
-}
-//鑾峰彇妯″瀷涓嬬殑鑳芥簮鍝佺
-export function energyDevice(query) {
-  return request({
-    url: '/statisticalData/comprehensiveStatistics/energyDevice',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/comprehensiveStatistics/dailyComprehensive/dailyComprehensive.js b/energy_management_ui/src/api/comprehensiveStatistics/dailyComprehensive/dailyComprehensive.js
deleted file mode 100644
index 11bd93c..0000000
--- a/energy_management_ui/src/api/comprehensiveStatistics/dailyComprehensive/dailyComprehensive.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import request from '@/utils/request'
-
- //鏌ヨ鏃ユ姤琛�
-export function getDataList(query) {
-  return request({
-    url: '/comprehensive/dailyComprehensive/list',
-    method: 'get',
-    params: query
-  })
-}
-export function getlistChart(query) {
-  return request({
-    url: '/comprehensive/dailyComprehensive/listChart',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/comprehensiveStatistics/monthlyComprehensive/monthlyComprehensive.js b/energy_management_ui/src/api/comprehensiveStatistics/monthlyComprehensive/monthlyComprehensive.js
deleted file mode 100644
index b3a5668..0000000
--- a/energy_management_ui/src/api/comprehensiveStatistics/monthlyComprehensive/monthlyComprehensive.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import request from '@/utils/request'
-
-//鏌ヨ鏃ユ姤琛�
-export function getDataList(query) {
-  return request({
-    url: '/comprehensive/monthlyComprehensive/list',
-    method: 'get',
-    params: query
-  })
-}
-export function getlistChart(query) {
-  return request({
-    url: '/comprehensive/monthlyComprehensive/listChart',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/comprehensiveStatistics/processEnergyConsumption.js b/energy_management_ui/src/api/comprehensiveStatistics/processEnergyConsumption.js
deleted file mode 100644
index 38858e5..0000000
--- a/energy_management_ui/src/api/comprehensiveStatistics/processEnergyConsumption.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import request from '@/utils/request'
-
-//鍏ㄥ巶缁煎悎鑳借�楃粺璁�
-export function getDataList(query) {
-  return request({
-    url: '/statisticalData/processEnergyConsumption/list',
-    method: 'get',
-    params: query
-  })
-}
-
-//鍏ㄥ巶缁煎悎鑳借�楃粺璁″浘
-export function getlistChart(query) {
-  return request({
-    url: '/statisticalData/processEnergyConsumption/listChart',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/comprehensiveStatistics/yearComprehensive/yearComprehensive.js b/energy_management_ui/src/api/comprehensiveStatistics/yearComprehensive/yearComprehensive.js
deleted file mode 100644
index 03cb827..0000000
--- a/energy_management_ui/src/api/comprehensiveStatistics/yearComprehensive/yearComprehensive.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import request from '@/utils/request'
-
-//鏌ヨ鏃ユ姤琛�
-export function getDataList(query) {
-  return request({
-    url: '/comprehensive/yearComprehensive/list',
-    method: 'get',
-    params: query
-  })
-}
-export function getlistChart(query) {
-  return request({
-    url: '/comprehensive/yearComprehensive/listChart',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/dataAuth/authSetting.js b/energy_management_ui/src/api/dataAuth/authSetting.js
deleted file mode 100644
index 5c4fadd..0000000
--- a/energy_management_ui/src/api/dataAuth/authSetting.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import request from '@/utils/request'
-
-export function selectSettingAuth(id, modelCode, authType) {
-  return request({
-    url: '/data/auth/' + authType + '/' + modelCode + '/' + id,
-    method: 'GET',
-  })
-}
-
-export function setDataAuth(id, modelCode, authType, authIds) {
-  return request({
-    url: '/data/auth/' + authType + '/' + modelCode + '/' + id,
-    method: 'post',
-    data: authIds
-  })
-}
diff --git a/energy_management_ui/src/api/dataEntry/stagseDataEntry.js b/energy_management_ui/src/api/dataEntry/stagseDataEntry.js
deleted file mode 100644
index 50c9174..0000000
--- a/energy_management_ui/src/api/dataEntry/stagseDataEntry.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import request from '@/utils/request'
-//鑾峰彇妯″瀷涓嬬殑鎸囨爣
-export function getSettingIndex(nodeId) {
-  return request({
-    url: '/basicsetting/modelnode/energyIndex/' + nodeId,
-    method: 'get',
-  })
-}
-// 鏌ヨ闃舵鏁版嵁褰曞叆鍒楄〃
-export function listStagseDataEntry(query) {
-  return request({
-    url: '/dataEntry/stagseDataEntry/list',
-    method: 'get',
-    params: query
-  })
-}
-export function listStagseDataEdit(query) {
-  return request({
-    url: '/dataEntry/stagseDataEntry/edit',
-    method: 'get',
-    params: query
-  })
-}
-// 鏂板闃舵鏁版嵁
-export function addStagseDataEntry(data) {
-  return request({
-    url: '/dataEntry/stagseDataEntry',
-    method: 'post',
-    data: data
-  })
-}
-// 鏌ヨ闃舵鏁版嵁褰曞叆鍒楄〃
-export function stagseDataEntryEdit(query) {
-  return request({
-    url: '/dataEntry/stagseDataEntry/listEdit',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/dataMonitoring/energyPercent/index.js b/energy_management_ui/src/api/dataMonitoring/energyPercent/index.js
deleted file mode 100644
index 6e07fb3..0000000
--- a/energy_management_ui/src/api/dataMonitoring/energyPercent/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import request from "@/utils/request";
-
-//鍒楄〃鎺ュ彛
-export function getElectricityShareAnalysis(query) {
-  return request({
-    url: "/energyShareAnalysis/getElectricityShareAnalysis",
-    method: "get",
-    params: query
-  });
-}
diff --git a/energy_management_ui/src/api/dataMonitoring/historyDataTrend/historyDataTrend.js b/energy_management_ui/src/api/dataMonitoring/historyDataTrend/historyDataTrend.js
deleted file mode 100644
index 5557b88..0000000
--- a/energy_management_ui/src/api/dataMonitoring/historyDataTrend/historyDataTrend.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import request from '@/utils/request'
-
-//鍒楄〃鎺ュ彛
-export function getCodeList(query) {
-  return request({
-    url: '/dataMonitoring/historyDataTrend/getHistoricalDataByIndexId',
-    method: 'get',
-    params: query
-  })
-}
-
-//鑾峰彇鐐逛綅鍒楄〃鎺ュ彛
-export function getIndexList(id) {
-  return request({
-    url: '/basicsetting/model/getEnergyIndexByModelId',
-    method: 'get',
-    params: {
-      modelId: id
-    }
-  })
-}
-
-export function exportHistoryDataTrend(query) {
-  return request({
-    url: '/dataMonitoring/historyDataTrend/export',
-    method: 'get',
-    params: query
-  })
-}
-
-// // 瀹炴椂鐩戞祴-瀵煎嚭Excel  get
-// dataMonitoring/realTimeTrend/export?nodeId=ca900cb2-70d9-4bd7-8ff1-f93e5808f2d1
-
-// // 鍘嗗彶鏁版嵁-瀵煎嚭Excel  get
-// dataMonitoring/historyDataTrend/export?nodeId=b7a014a7-a994-457d-ad10-31654f003efa&indexId=2a026b78-3a1d-4f28-8f62-23bd34b1b118&pickerType=datetime&dataTime=2023-03-16+14:50:43&timeType=HOUR
diff --git a/energy_management_ui/src/api/dataMonitoring/realTimeTrend/realTimeTrend.js b/energy_management_ui/src/api/dataMonitoring/realTimeTrend/realTimeTrend.js
deleted file mode 100644
index e938361..0000000
--- a/energy_management_ui/src/api/dataMonitoring/realTimeTrend/realTimeTrend.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import request from '@/utils/request'
-
-//鍒楄〃鎺ュ彛
-export function getTrendSettingIndex(query) {
-  return request({
-    url: '/dataMonitoring/realTimeTrend/energyIndex/list',
-    method: 'get',
-    params: query
-  })
-}
-
-//鎶樼嚎鍥炬暟鎹帴鍙�
-export function getTrendSettingIndexLineData(codes, minute, count) {
-  return request({
-    url: '/dataMonitoring/realTimeTrend/energyIndex/lineList/' + codes + "/" + minute + "/" + count,
-    method: 'get',
-  })
-}
-
-//瓒嬪娍鍥惧垪琛ㄦ帴鍙�
-export function getSvgTrendSettingIndex(query) {
-  return request({
-    url: '/dataMonitoring/realTimeTrend/svgTrendView/energyIndex/list',
-    method: 'get',
-    params: query
-  })
-}
-
-//daochu
-export function exportRealTimeTrend(query) {
-  return request({
-    url: '/dataMonitoring/realTimeTrend/export',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/dataMonitoring/svgTrend/svgTrendView.js b/energy_management_ui/src/api/dataMonitoring/svgTrend/svgTrendView.js
deleted file mode 100644
index 7744453..0000000
--- a/energy_management_ui/src/api/dataMonitoring/svgTrend/svgTrendView.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import request from '@/utils/request'
-
-//鍒楄〃鎺ュ彛
-export function getSvgTrendSettingIndex(query) {
-  return request({
-    url: '/dataMonitoring/svgTrendView/energyIndex/list',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/demo/demo.js b/energy_management_ui/src/api/demo/demo.js
deleted file mode 100644
index 834794c..0000000
--- a/energy_management_ui/src/api/demo/demo.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛�
-export function listDemo(query) {
-  return request({
-    url: '/system/demo/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戣缁�
-export function getDemo(id) {
-  return request({
-    url: '/system/demo/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板銆愯濉啓鍔熻兘鍚嶇О銆�
-export function addDemo(data) {
-  return request({
-    url: '/system/demo',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼銆愯濉啓鍔熻兘鍚嶇О銆�
-export function updateDemo(data) {
-  return request({
-    url: '/system/demo',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆�
-export function delDemo(id) {
-  return request({
-    url: '/system/demo/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭銆愯濉啓鍔熻兘鍚嶇О銆�
-export function exportDemo(query) {
-  return request({
-    url: '/system/demo/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/electricityPrice/electricity.js b/energy_management_ui/src/api/electricityPrice/electricity.js
deleted file mode 100644
index 849e7b3..0000000
--- a/energy_management_ui/src/api/electricityPrice/electricity.js
+++ /dev/null
@@ -1,69 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨelectricityPrice鍒楄〃
-export function listElectricity(query) {
-  return request({
-    url: '/electricityPrice/electricity/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鍘嗗彶鍒楄〃
-export function listHistory(query) {
-  return request({
-    url: '/electricityPrice/electricity/listHistory',
-    method: 'get',
-    params: query
-  })
-}
-// 鏌ヨ鐢熸晥鏃ユ湡鍒楄〃
-export function listDate(query) {
-  return request({
-    url: '/electricityPrice/electricity/listDate',
-    method: 'get',
-    params: query
-  })
-}
-// 鏌ヨelectricityPrice璇︾粏
-export function getElectricity(id) {
-  return request({
-    url: '/electricityPrice/electricity/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板electricityPrice
-export function addElectricity(data) {
-  return request({
-    url: '/electricityPrice/electricity',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼electricityPrice
-export function updateElectricity(data) {
-  return request({
-    url: '/electricityPrice/electricity',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎electricityPrice
-export function delElectricity(id) {
-  return request({
-    url: '/electricityPrice/electricity/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭electricityPrice
-export function exportElectricity(query) {
-  return request({
-    url: '/electricityPrice/electricity/export',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/electricityPrice/price.js b/energy_management_ui/src/api/electricityPrice/price.js
deleted file mode 100644
index d915ba7..0000000
--- a/energy_management_ui/src/api/electricityPrice/price.js
+++ /dev/null
@@ -1,69 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨelectricity鍒楄〃
-export function listPrice(query) {
-  return request({
-    url: '/electricityPrice/price/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨelectricity璇︾粏
-export function getPrice(id) {
-  return request({
-    url: '/electricityPrice/price/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板electricity
-export function addPrice(data) {
-  return request({
-    url: '/electricityPrice/price',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼electricity
-export function updatePrice(data) {
-  return request({
-    url: '/electricityPrice/price',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎electricity
-export function delPrice(id) {
-  return request({
-    url: '/electricityPrice/price/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭electricity
-export function exportPrice(query) {
-  return request({
-    url: '/electricityPrice/price/export',
-    method: 'get',
-    params: query
-  })
-}
-// 鏌ヨ瀛楀吀椤硅缁�
-// 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁淇℃伅
-export function EdictType(query) {
-  return request({
-    url: '/electricityPrice/price/dictType',
-    method: 'get',
-    params: query
-  })
-}
-export function dictTypeList(query) {
-  return request({
-    url: '/electricityPrice/price/dictTypeList',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/electricityPrice/statistics.js b/energy_management_ui/src/api/electricityPrice/statistics.js
deleted file mode 100644
index e865a43..0000000
--- a/energy_management_ui/src/api/electricityPrice/statistics.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import request from "@/utils/request";
-
-// 鏌ヨelectricity鍒楄〃
-export function getStatisticsList(query) {
-  /*if(query.timeType=='MONTH'){
-    query.timeType="DAY"
-  }
-  if(query.timeType=='YEAR'){
-    query.timeType="MONTH"
-  }*/
-  query.timeType = "HOUR";
-  return request({
-    url: "/electricityPrice/statistics/getStatisticsList",
-    method: "get",
-    params: query
-  });
-}
-// 鏌ヨelectricity鍒楄〃
-export function getDataStatistics(query) {
-  return request({
-    url: "/electricityPrice/statistics/getDataStatistics",
-    method: "get",
-    params: query
-  });
-}
-
-// 灏栧嘲骞宠胺 缁熻 鏌ヨ
-// 鎺ュ彛 锛� electricityDataItem/getDataStatistics?modelCode=1&nodeId=1&timeType=DAY&queryTime=2024-08
-export function getElectricityDataItemStatistics(query) {
-  return request({
-    url: "/electricityDataItem/getDataStatistics",
-    method: "get",
-    params: query
-  });
-}
diff --git a/energy_management_ui/src/api/enerInfoManage/enerclass.js b/energy_management_ui/src/api/enerInfoManage/enerclass.js
deleted file mode 100644
index 79348c3..0000000
--- a/energy_management_ui/src/api/enerInfoManage/enerclass.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鑳芥簮鍝佺璁剧疆鍒楄〃
-export function listEnerclass(query) {
-  return request({
-    url: '/enerInfoManage/enerclass/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鑳芥簮鍝佺璁剧疆璇︾粏
-export function getEnerclass(enerclassid) {
-  return request({
-    url: '/enerInfoManage/enerclass/' + enerclassid,
-    method: 'get'
-  })
-}
-
-// 鏂板鑳芥簮鍝佺璁剧疆
-export function addEnerclass(data) {
-  return request({
-    url: '/enerInfoManage/enerclass',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鑳芥簮鍝佺璁剧疆
-export function updateEnerclass(data) {
-  return request({
-    url: '/enerInfoManage/enerclass',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鑳芥簮鍝佺璁剧疆
-export function delEnerclass(enerclassid) {
-  return request({
-    url: '/enerInfoManage/enerclass/' + enerclassid,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鑳芥簮鍝佺璁剧疆
-export function exportEnerclass(query) {
-  return request({
-    url: '/enerInfoManage/enerclass/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/enerInfoManage/enercoefficient.js b/energy_management_ui/src/api/enerInfoManage/enercoefficient.js
deleted file mode 100644
index a62bdca..0000000
--- a/energy_management_ui/src/api/enerInfoManage/enercoefficient.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鑳芥簮鎶樻爣绯绘暟鍒楄〃
-export function listEnercoefficient(query) {
-  return request({
-    url: '/enerInfoManage/enercoefficient/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鑳芥簮鎶樻爣绯绘暟璇︾粏
-export function getEnercoefficient(ecid) {
-  return request({
-    url: '/enerInfoManage/enercoefficient/' + ecid,
-    method: 'get'
-  })
-}
-
-// 鏂板鑳芥簮鎶樻爣绯绘暟
-export function addEnercoefficient(data) {
-  return request({
-    url: '/enerInfoManage/enercoefficient',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鑳芥簮鎶樻爣绯绘暟
-export function updateEnercoefficient(data) {
-  return request({
-    url: '/enerInfoManage/enercoefficient',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鑳芥簮鎶樻爣绯绘暟
-export function delEnercoefficient(ecid) {
-  return request({
-    url: '/enerInfoManage/enercoefficient/' + ecid,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鑳芥簮鎶樻爣绯绘暟
-export function exportEnercoefficient(query) {
-  return request({
-    url: '/enerInfoManage/enercoefficient/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/enerInfoManage/energy.js b/energy_management_ui/src/api/enerInfoManage/energy.js
deleted file mode 100644
index d5774d8..0000000
--- a/energy_management_ui/src/api/enerInfoManage/energy.js
+++ /dev/null
@@ -1,74 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨenergy鍒楄〃
-export function listEnergy(query) {
-  return request({
-    url: '/enerInfoManage/energy/list',
-    method: 'get',
-    params: query
-  })
-}
-export function classselect() {
-  return request({
-    url: '/enerInfoManage/energy/getenerclassname',
-    method: 'get',
-  })
-}
-
-// 鏌ヨenergy璇︾粏
-export function getEnergy(enerid) {
-  return request({
-    url: '/enerInfoManage/energy/' + enerid,
-    method: 'get'
-  })
-}
-// 淇濆瓨鍗曚环璁剧疆
-export function updateEnergyPrice(data){
-  return request({
-    url: '/enerInfoManage/energy/updateEnergyPrice',
-    method: 'put',
-    data: data
-  })
-}
-export function updateEnergyCoefficient(data) {
-  return request({
-    url: '/enerInfoManage/energy/updateEnergyCoefficient',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鏂板energy
-export function addEnergy(data) {
-  return request({
-    url: '/enerInfoManage/energy',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼energy
-export function updateEnergy(data) {
-  return request({
-    url: '/enerInfoManage/energy',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎energy
-export function delEnergy(enerid) {
-  return request({
-    url: '/enerInfoManage/energy/' + enerid,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭energy
-export function exportEnergy(query) {
-  return request({
-    url: '/enerInfoManage/energy/export',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/enerInfoManage/price.js b/energy_management_ui/src/api/enerInfoManage/price.js
deleted file mode 100644
index 3b12c49..0000000
--- a/energy_management_ui/src/api/enerInfoManage/price.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鍗曚环璁剧疆鍒楄〃
-export function listPrice(query) {
-  return request({
-    url: '/price/price/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鍗曚环璁剧疆璇︾粏
-export function getPrice(priceid) {
-  return request({
-    url: '/price/price/' + priceid,
-    method: 'get'
-  })
-}
-
-// 鏂板鍗曚环璁剧疆
-export function addPrice(data) {
-  return request({
-    url: '/price/price',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鍗曚环璁剧疆
-export function updatePrice(data) {
-  return request({
-    url: '/price/price',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鍗曚环璁剧疆
-export function delPrice(priceid) {
-  return request({
-    url: '/price/price/' + priceid,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鍗曚环璁剧疆
-export function exportPrice(query) {
-  return request({
-    url: '/price/price/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/enerInfoManage/product.js b/energy_management_ui/src/api/enerInfoManage/product.js
deleted file mode 100644
index 7eb288e..0000000
--- a/energy_management_ui/src/api/enerInfoManage/product.js
+++ /dev/null
@@ -1,59 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ浜у搧鍒楄〃
-export function listProduct(query) {
-  return request({
-    url: '/enerInfoManage/product/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ浜у搧璇︾粏
-export function getProduct(productid) {
-  return request({
-    url: '/enerInfoManage/product/' + productid,
-    method: 'get'
-  })
-}
-
-// 鏂板浜у搧
-export function addProduct(data) {
-  return request({
-    url: '/enerInfoManage/product',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼浜у搧
-export function updateProduct(data) {
-  return request({
-    url: '/enerInfoManage/product',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎浜у搧
-export function delProduct(productid) {
-  return request({
-    url: '/enerInfoManage/product/' + productid,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭浜у搧
-export function exportProduct(query) {
-  return request({
-    url: '/enerInfoManage/product/export',
-    method: 'get',
-    params: query
-  })
-}
-export function getFatherCP() {
-  return request({
-    url: '/enerInfoManage/product/getFatherCP',
-    method: 'get',
-  })
-}
diff --git a/energy_management_ui/src/api/energy/energyAnnex.js b/energy_management_ui/src/api/energy/energyAnnex.js
deleted file mode 100644
index a476ac3..0000000
--- a/energy_management_ui/src/api/energy/energyAnnex.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鑺傝兘椤圭洰绠$悊闄勪欢鍒楄〃
-export function listEnergyAnnex(query) {
-  return request({
-    url: '/energy/energyAnnex/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鑺傝兘椤圭洰绠$悊闄勪欢璇︾粏
-export function getEnergyAnnex(id) {
-  return request({
-    url: '/energy/energyAnnex/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板鑺傝兘椤圭洰绠$悊闄勪欢
-export function addEnergyAnnex(data) {
-  return request({
-    url: '/energy/energyAnnex',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鑺傝兘椤圭洰绠$悊闄勪欢
-export function updateEnergyAnnex(data) {
-  return request({
-    url: '/energy/energyAnnex',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鑺傝兘椤圭洰绠$悊闄勪欢
-export function delEnergyAnnex(id) {
-  return request({
-    url: '/energy/energyAnnex/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鑺傝兘椤圭洰绠$悊闄勪欢
-export function exportEnergyAnnex(query) {
-  return request({
-    url: '/energy/energyAnnex/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/energy/energyProject.js b/energy_management_ui/src/api/energy/energyProject.js
deleted file mode 100644
index a600220..0000000
--- a/energy_management_ui/src/api/energy/energyProject.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鑺傝兘椤圭洰绠$悊鍒楄〃
-export function listEnergyProject(query) {
-  return request({
-    url: '/energy/energyProject/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鑺傝兘椤圭洰绠$悊璇︾粏
-export function getEnergyProject(id) {
-  return request({
-    url: '/energy/energyProject/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板鑺傝兘椤圭洰绠$悊
-export function addEnergyProject(data) {
-  return request({
-    url: '/energy/energyProject',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鑺傝兘椤圭洰绠$悊
-export function updateEnergyProject(data) {
-  return request({
-    url: '/energy/energyProject',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鑺傝兘椤圭洰绠$悊
-export function delEnergyProject(id) {
-  return request({
-    url: '/energy/energyProject/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鑺傝兘椤圭洰绠$悊
-export function exportEnergyProject(query) {
-  return request({
-    url: '/energy/energyProject/export',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/energy/report.js b/energy_management_ui/src/api/energy/report.js
deleted file mode 100644
index b70e171..0000000
--- a/energy_management_ui/src/api/energy/report.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊鍒楄〃
-export function listReport(query) {
-  return request({
-    url: '/energy/report/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊璇︾粏
-export function getReport(id) {
-  return request({
-    url: '/energy/report/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-export function addReport(data) {
-  return request({
-    url: '/energy/report',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-export function updateReport(data) {
-  return request({
-    url: '/energy/report',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-export function delReport(id) {
-  return request({
-    url: '/energy/report/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鑺傝兘鍒嗘瀽鎶ュ憡绠$悊
-export function exportReport(query) {
-  return request({
-    url: '/energy/report/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/energy/reportAnnex.js b/energy_management_ui/src/api/energy/reportAnnex.js
deleted file mode 100644
index f0edae2..0000000
--- a/energy_management_ui/src/api/energy/reportAnnex.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢鍒楄〃
-export function listReportAnnex(query) {
-  return request({
-    url: '/energy/reportAnnex/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢璇︾粏
-export function getReportAnnex(id) {
-  return request({
-    url: '/energy/reportAnnex/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-export function addReportAnnex(data) {
-  return request({
-    url: '/energy/reportAnnex',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-export function updateReportAnnex(data) {
-  return request({
-    url: '/energy/reportAnnex',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-export function delReportAnnex(id) {
-  return request({
-    url: '/energy/reportAnnex/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鑺傝兘鍒嗘瀽鎶ュ憡绠$悊闄勪欢
-export function exportReportAnnex(query) {
-  return request({
-    url: '/energy/reportAnnex/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/energyAlarm/realTimeAlarm/liveHistoryAssembly.js b/energy_management_ui/src/api/energyAlarm/realTimeAlarm/liveHistoryAssembly.js
deleted file mode 100644
index 153a410..0000000
--- a/energy_management_ui/src/api/energyAlarm/realTimeAlarm/liveHistoryAssembly.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ瀹炴椂椤甸潰鏁版嵁
-export function getRealTimeData(code, minute, pointCount) {
-    return request({
-        url: '/energyAlarm/realTimeAlarm/liveHistoryData/' + code + "/" + minute + "/" + pointCount,
-        method: 'get'
-    })
-}
-
-// 鏌ヨ瀹炴椂琛ㄦ牸椤甸潰鏁版嵁
-export function getRealTimeTableData(code, dataTime) {
-    return request({
-        url: '/dataMonitoring/realTimeTrend/svgTrendView/energyIndex/history/' + code + '/' + dataTime,
-        method: 'get'
-    })
-}
-
-// 鏌ヨ鍘嗗彶椤甸潰鏁版嵁
-export function getHistoryData(code, start, end, pointCount) {
-    return request({
-        url: '/energyAlarm/historicalAlarm/historyData/' + code + "/" + start + "/" + end + "/" + pointCount,
-        method: 'get'
-    })
-}
-
-// 瀵煎嚭鍘嗗彶琛ㄦ牸鏁版嵁
-export function exportHistoryTable(code, start, end, pointCount, indexName, indexUnit) {
-    return request({
-        url: '/energyAlarm/historicalAlarm/historyDataExcel/' + code + "/" + start + "/" + end + "/" + pointCount + "/" + indexName + "/" + indexUnit,
-        method: 'get'
-    })
-}
diff --git a/energy_management_ui/src/api/energyAlarm/realTimeAlarm/realTimeAlarm.js b/energy_management_ui/src/api/energyAlarm/realTimeAlarm/realTimeAlarm.js
deleted file mode 100644
index ed29f20..0000000
--- a/energy_management_ui/src/api/energyAlarm/realTimeAlarm/realTimeAlarm.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鎶ヨ闄愬�肩被鍨嬬淮鎶ゅ垪琛�
-export function getRealTimeAlarmList(query) {
-  return request({
-    url: '/energyAlarm/realTimeAlarm/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// // 鏌ヨ鎶ヨ闄愬�肩被鍨嬬淮鎶よ缁�
-// export function getLimitType(id) {
-//   return request({
-//     url: '/basicsetting/limitType/' + id,
-//     method: 'get'
-//   })
-// }
-//
-// // 鏂板鎶ヨ闄愬�肩被鍨嬬淮鎶�
-// export function addLimitType(data) {
-//   return request({
-//     url: '/basicsetting/limitType',
-//     method: 'post',
-//     data: data
-//   })
-// }
-//
-// // 淇敼鎶ヨ闄愬�肩被鍨嬬淮鎶�
-// export function updateLimitType(data) {
-//   return request({
-//     url: '/basicsetting/limitType',
-//     method: 'put',
-//     data: data
-//   })
-// }
-//
-// // 鍒犻櫎鎶ヨ闄愬�肩被鍨嬬淮鎶�
-// export function delLimitType(id) {
-//   return request({
-//     url: '/basicsetting/limitType/' + id,
-//     method: 'delete'
-//   })
-// }
-//
-// // 瀵煎嚭鎶ヨ闄愬�肩被鍨嬬淮鎶�
-// export function exportLimitType(query) {
-//   return request({
-//     url: '/basicsetting/limitType/export',
-//     method: 'get',
-//     params: query
-//   })
-// }
diff --git a/energy_management_ui/src/api/energyAssistInput/energyDayConsumeInput.js b/energy_management_ui/src/api/energyAssistInput/energyDayConsumeInput.js
deleted file mode 100644
index bceba71..0000000
--- a/energy_management_ui/src/api/energyAssistInput/energyDayConsumeInput.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import request from '@/utils/request'
-// 鏌ヨ鑳借�楁墜鍔ㄨ緭鍏ヤ俊鎭�
-export function selectConsumeInputList(query) {
-  return request({
-    url: '/energyAssistInput/energyDayConsumeInput/listEnergyConsumeInputIndex',
-    method: 'get',
-    params: query
-  })
-}
-
-// 淇濆瓨鑳借�楁墜鍔ㄨ緭鍏ヤ俊鎭�
-export function saveConsumeInput(data) {
-  return request({
-    url: '/energyAssistInput/energyDayConsumeInput/saveEnergyConsumeInput',
-    method: 'post',
-    data: data
-  })
-}
diff --git a/energy_management_ui/src/api/energyAssistInput/energyMonthConsumeInput.js b/energy_management_ui/src/api/energyAssistInput/energyMonthConsumeInput.js
deleted file mode 100644
index 2287865..0000000
--- a/energy_management_ui/src/api/energyAssistInput/energyMonthConsumeInput.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import request from '@/utils/request'
-// 鏌ヨ鑳借�楁墜鍔ㄨ緭鍏ヤ俊鎭�
-export function selectConsumeInputList(query) {
-  return request({
-    url: '/energyAssistInput/energyMonthConsumeInput/listEnergyConsumeInputIndex',
-    method: 'get',
-    params: query
-  })
-}
-
-// 淇濆瓨鑳借�楁墜鍔ㄨ緭鍏ヤ俊鎭�
-export function saveConsumeInput(data) {
-  return request({
-    url: '/energyAssistInput/energyMonthConsumeInput/saveEnergyConsumeInput',
-    method: 'post',
-    data: data
-  })
-}
diff --git a/energy_management_ui/src/api/energyAssistInput/energyYearConsumeInput.js b/energy_management_ui/src/api/energyAssistInput/energyYearConsumeInput.js
deleted file mode 100644
index 3183276..0000000
--- a/energy_management_ui/src/api/energyAssistInput/energyYearConsumeInput.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import request from '@/utils/request'
-// 鏌ヨ鑳借�楁墜鍔ㄨ緭鍏ヤ俊鎭�
-export function selectConsumeInputList(query) {
-  return request({
-    url: '/energyAssistInput/energyYearConsumeInput/listEnergyConsumeInputIndex',
-    method: 'get',
-    params: query
-  })
-}
-
-// 淇濆瓨鑳借�楁墜鍔ㄨ緭鍏ヤ俊鎭�
-export function saveConsumeInput(data) {
-  return request({
-    url: '/energyAssistInput/energyYearConsumeInput/saveEnergyConsumeInput',
-    method: 'post',
-    data: data
-  })
-}
diff --git a/energy_management_ui/src/api/energyBalance/energyBalance.js b/energy_management_ui/src/api/energyBalance/energyBalance.js
deleted file mode 100644
index 6db2816..0000000
--- a/energy_management_ui/src/api/energyBalance/energyBalance.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import request from '@/utils/request'
-
-// 鑳芥簮鎹熷け鍒嗘瀽
-export function lossAnalysisList(query) {
-  return request({
-    url: '/balance/energyBalance/lossAnalysisList',
-    method: 'get',
-    params: query
-  })
-}
-export function energyLossTable(query) {
-  return request({
-    url: '/balance/energyBalance/lossTableList',
-    method: 'get',
-    params: query
-  })
-}
-// 鑳芥簮骞宠 鍒嗘瀽
-export function energyBalanceList(query) {
-  return request({
-    url: '/balance/energyBalance/list',
-    method: 'get',
-    params: query
-  })
-}
-// 鑳芥簮骞宠 鍒嗘瀽
-export function energyBalanceTable(query) {
-  return request({
-    url: '/balance/energyBalance/tableList',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/energyBalance/energyPic.js b/energy_management_ui/src/api/energyBalance/energyPic.js
deleted file mode 100644
index 6f8718f..0000000
--- a/energy_management_ui/src/api/energyBalance/energyPic.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import request from '@/utils/request'
-// 鏌ヨ宸ュ簭鍗曡�楃粺璁� 鎶ヨ〃 鎸囨爣灞曠ず鍐呭
-export function selectEnergyPicList(query) {
-  return request({
-    url: '/balance/energyBalance/listEnergyPicIndex',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/energyEenchmarking/energyEenchmarking.js b/energy_management_ui/src/api/energyEenchmarking/energyEenchmarking.js
deleted file mode 100644
index ca7a7c9..0000000
--- a/energy_management_ui/src/api/energyEenchmarking/energyEenchmarking.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨenergy_benchmarking鍒楄〃
-export function listEnergyEenchmarking(query) {
-  return request({
-    url: '/energyEenchmarking/energyEenchmarking/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨenergy_benchmarking璇︾粏
-export function getEnergyEenchmarking(id) {
-  return request({
-    url: '/energyEenchmarking/energyEenchmarking/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板energy_benchmarking
-export function addEnergyEenchmarking(data) {
-  return request({
-    url: '/energyEenchmarking/energyEenchmarking',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼energy_benchmarking
-export function updateEnergyEenchmarking(data) {
-  return request({
-    url: '/energyEenchmarking/energyEenchmarking',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎energy_benchmarking
-export function delEnergyEenchmarking(id) {
-  return request({
-    url: '/energyEenchmarking/energyEenchmarking/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭energy_benchmarking
-export function exportEnergyEenchmarking(query) {
-  return request({
-    url: '/energyEenchmarking/energyEenchmarking/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/energyExamine/addIndex.js b/energy_management_ui/src/api/energyExamine/addIndex.js
deleted file mode 100644
index cf7899b..0000000
--- a/energy_management_ui/src/api/energyExamine/addIndex.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import request from '@/utils/request'
-
-
-//  鏍规嵁鎸囨爣绫诲瀷鍜屾ā鍨嬭妭鐐筰d鑾峰彇妯″瀷涓嬬殑鎸囨爣鍒楄〃
-export function listIndex(indexType,nodeId) {
-  return request({
-    url: '/basicsetting/modelnode/energyIndex/'+indexType+'/'+nodeId,
-    method: 'get'
-  })
-}
-
-
-// 鏍规嵁璁¢噺鍣ㄥ叿ID鐢熸垚鎴栭噸鏂扮敓鎴愭寚鏍�
-export function addIndex(data,modeNodeId) {
-  return request({
-    url: '/energyExamine/assessmentIndex/addIndex/'+modeNodeId,
-    method: 'post',
-    data:data
-  })
-}
-
-//
-// 鍒犻櫎璁¢噺鍣ㄥ叿妗f闄勪欢
-export function delIndex(id) {
-  return request({
-    url: '/basicsetting/energyindex/' + id,
-    method: 'delete'
-  })
-}
diff --git a/energy_management_ui/src/api/energyExamine/assessmentIndex.js b/energy_management_ui/src/api/energyExamine/assessmentIndex.js
deleted file mode 100644
index 1422228..0000000
--- a/energy_management_ui/src/api/energyExamine/assessmentIndex.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鐢ㄨ兘鑰冩牳鏍囧噯鍒楄〃
-export function listAssessmentIndex(query) {
-  return request({
-    url: '/energyExamine/assessmentIndex/list',
-    method: 'get',
-    params: query
-  })
-}
-// 鏌ヨ鐢ㄨ兘鑰冩牳鏍囧噯鍒楄〃
-export function listAssessmentIndexModel(modeNodeId,query) {
-  return request({
-    url: '/energyExamine/assessmentIndex/list/'+modeNodeId,
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鐢ㄨ兘鑰冩牳鏍囧噯璇︾粏
-export function getAssessmentIndex(id) {
-  return request({
-    url: '/energyExamine/assessmentIndex/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板鐢ㄨ兘鑰冩牳鏍囧噯
-export function addAssessmentIndex(data) {
-  return request({
-    url: '/energyExamine/assessmentIndex',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鐢ㄨ兘鑰冩牳鏍囧噯
-export function updateAssessmentIndex(data) {
-  return request({
-    url: '/energyExamine/assessmentIndex',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鐢ㄨ兘鑰冩牳鏍囧噯
-export function delAssessmentIndex(id) {
-  return request({
-    url: '/energyExamine/assessmentIndex/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鐢ㄨ兘鑰冩牳鏍囧噯
-export function exportAssessmentIndex(query) {
-  return request({
-    url: '/energyExamine/assessmentIndex/export',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/energyPrice/price.js b/energy_management_ui/src/api/energyPrice/price.js
deleted file mode 100644
index 25c1251..0000000
--- a/energy_management_ui/src/api/energyPrice/price.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import request from "@/utils/request";
-
-export default {
-  // 鏌ヨ鍙傛暟鍒楄〃
-  pageRule(query) {
-    return request({
-      url: "/rule/list",
-      method: "get",
-      params: query
-    });
-  },
-  addRule(query) {
-    return request({
-      url: "/rule/addRule",
-      method: "post",
-      data: query
-    });
-  },
-  editRule(query) {
-    return request({
-      url: "/rule/updateRule",
-      method: "post",
-      data: query
-    });
-  },
-  delRule(query) {
-    return request({
-      url: "/rule/delRule/" + query.id,
-      method: "delete",
-      params: query
-    });
-  },
-  getRuleDetail(query) {
-    return request({
-      url: "/rule/getRuleDetail",
-      method: "get",
-      params: query
-    });
-  }
-};
diff --git a/energy_management_ui/src/api/energyStatistics/statistics.js b/energy_management_ui/src/api/energyStatistics/statistics.js
deleted file mode 100644
index 88ceb60..0000000
--- a/energy_management_ui/src/api/energyStatistics/statistics.js
+++ /dev/null
@@ -1,127 +0,0 @@
-import request from '@/utils/request'
-//鑾峰彇妯″瀷涓嬬殑鎸囨爣
-export function getSettingIndex(nodeId) {
-  return request({
-    url: '/basicsetting/modelnode/energyIndex/' + nodeId,
-    method: 'get',
-  })
-}
-//鑾峰彇妯″瀷涓嬬殑鑳芥簮鍝佺
-export function getSettingEnergy(nodeId) {
-  return request({
-    url: '/basicsetting/modelnode/energy/' + nodeId,
-    method: 'get'
-  })
-}
-//鑾峰彇妯″瀷涓嬬殑璁惧
-export function getSettingDevice(nodeId) {
-  return request({
-    url: '/basicsetting/modelnode/device/' + nodeId,
-    method: 'get'
-  })
-}
-// 鑳借�楁寚鏍囪秼鍔垮垎鏋�
-export function getEnergyStatisticsTrend(query) {
-  return request({
-    url: '/energyStatistics/getEnergyStatisticsTrend',
-    method: 'get',
-    params: query,
-  })
-}
-// 鑳借�楁寚鏍囪秼鍔垮垎鏋�
-export function getEnergyCurveTrend(query) {
-  return request({
-    url: '/energyCurve/getEnergyCurveTrend',
-    method: 'get',
-    params: query,
-  })
-}
-// 鑳借�楁寚鏍囪秼鍔垮垎鏋愬鍑�
-export function exportEnergyindex(query) {
-  return request({
-    url: '/energyStatistics/export',
-    method: 'get',
-    params: query
-  })
-}
-// 鑳借�楁寚鏍囪秼鍔垮垎鏋愬鍑�
-export function exportEnergyCurveindex(query) {
-  return request({
-    url: '/energyCurve/export',
-    method: 'get',
-    params: query
-  })
-}
-//鑳芥簮娑堣垂鎴愭湰鏋勬垚
-export function getEnergyConstitute(query) {
-  return request({
-    url: 'energyStatistics/getEnergyConstitute',
-    method: 'get',
-    params: query,
-  })
-}
-//鑳芥簮娑堣垂鎴愭湰鍒嗘瀽
-export function getEnergyConsumption(query) {
-  return request({
-    url: 'energyStatistics/getEnergyConsumption',
-    method: 'get',
-    params: query,
-  })
-}
-// 鑳芥簮鎴愭湰瀵煎嚭
-export function energyConsumptionExport(query) {
-  return request({
-    url: '/energyStatistics/energyConsumptionExport',
-    method: 'get',
-    params: query
-  })
-}
-//鑳芥簮娑堣垂鎴愭湰鍒嗘椂鍒嗘瀽鎶ヨ〃
-export function listEnergyConsumption(query) {
-  return request({
-    url: '/energyStatistics/listEnergyConsumption',
-    method: 'get',
-    params: query,
-  })
-}
-//鐢ㄨ兘鍗曞厓鑳借�楀垎鏋�
-export function getEnergyUnit(query) {
-  return request({
-    url: '/energyStatistics/getEnergyUnit',
-    method: 'get',
-    params: query
-  })
-}
-// 瀹炴椂妫�娴嬬粍鎬佸浘鍔熻兘鐨勫sheet椤垫姤琛�
-export function reportFormsvg(query) {
-  return request({
-    url: '/energyStatistics/reportFormsvg',
-    method: 'get',
-    params: query
-  })
-}
-//瀹炴椂妫�娴嬬粍鎬佸浘鍔熻兘鐨勫sheet椤垫姤琛ㄥ鍑�
-export function reportFormsvgExport(query) {
-  return request({
-    url: '/energyStatistics/reportFormsvgExport',
-    method: 'get',
-    params: query
-  })
-}
-
-//鑳借�楃粺璁�
-export function getEnergyAnalysis(query) {
-  return request ({
-    url: '/energyAnalysis/getEnergyAnalysis',
-    method: 'get',
-    params: query
-  })
-}
-//瀵煎嚭鑳借�楃粺璁�
-export function exportDemo(query) {
-  return request({
-    url: '/energyAnalysis/export',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/equipmentMonitor/historyMonitoring/historyMonitoring.js b/energy_management_ui/src/api/equipmentMonitor/historyMonitoring/historyMonitoring.js
deleted file mode 100644
index 2ad7e44..0000000
--- a/energy_management_ui/src/api/equipmentMonitor/historyMonitoring/historyMonitoring.js
+++ /dev/null
@@ -1,71 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ璁惧鍚仠鍘嗗彶鐩戞祴鍒楄〃
-export function listHistoryMonitoring(query) {
-  return request({
-    url: '/historyMonitoring/historyMonitoring/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ璁惧鍚仠鍘嗗彶鐩戞祴璇︾粏
-export function getHistoryMonitoring(id) {
-  return request({
-    url: '/historyMonitoring/historyMonitoring/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板璁惧鍚仠鍘嗗彶鐩戞祴
-export function addHistoryMonitoring(data) {
-  return request({
-    url: '/historyMonitoring/historyMonitoring',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼璁惧鍚仠鍘嗗彶鐩戞祴
-export function updateHistoryMonitoring(data) {
-  return request({
-    url: '/historyMonitoring/historyMonitoring',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎璁惧鍚仠鍘嗗彶鐩戞祴
-export function delHistoryMonitoring(id) {
-  return request({
-    url: '/historyMonitoring/historyMonitoring/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭璁惧鍚仠鍘嗗彶鐩戞祴
-export function exportHistoryMonitoring(query) {
-  return request({
-    url: '/historyMonitoring/historyMonitoring/export',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ璁惧鍚仠鍘嗗彶鐩戞祴鍒楄〃(鏂板姞)
-export function listHistoryMonitoringNew(query) {
-  return request({
-    url: '/historyMonitoring/historyMonitoring/history/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 瀵煎嚭璁惧鍚仠鍘嗗彶鐩戞祴(鏂板姞)
-export function exportHistoryMonitoringTableList(query) {
-  return request({
-    url: '/historyMonitoring/historyMonitoring/export/tableList',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/equipmentMonitor/realTimeMonitoring/realTimeMonitoring.js b/energy_management_ui/src/api/equipmentMonitor/realTimeMonitoring/realTimeMonitoring.js
deleted file mode 100644
index a028034..0000000
--- a/energy_management_ui/src/api/equipmentMonitor/realTimeMonitoring/realTimeMonitoring.js
+++ /dev/null
@@ -1,62 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ璁惧鍚仠瀹炴椂鐩戞祴鍒楄〃
-export function listRealTimeMonitoring(query) {
-  return request({
-    url: '/realTimeMonitoring/realTimeMonitoring/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ璁惧鍚仠瀹炴椂鐩戞祴璇︾粏
-export function getRealTimeMonitoring(id) {
-  return request({
-    url: '/realTimeMonitoring/realTimeMonitoring/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板璁惧鍚仠瀹炴椂鐩戞祴
-export function addRealTimeMonitoring(data) {
-  return request({
-    url: '/realTimeMonitoring/realTimeMonitoring',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼璁惧鍚仠瀹炴椂鐩戞祴
-export function updateRealTimeMonitoring(data) {
-  return request({
-    url: '/realTimeMonitoring/realTimeMonitoring',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎璁惧鍚仠瀹炴椂鐩戞祴
-export function delRealTimeMonitoring(id) {
-  return request({
-    url: '/realTimeMonitoring/realTimeMonitoring/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭璁惧鍚仠瀹炴椂鐩戞祴
-export function exportRealTimeMonitoring(query) {
-  return request({
-    url: '/realTimeMonitoring/realTimeMonitoring/export',
-    method: 'get',
-    params: query
-  })
-}
-
-//瀵屽伐鎺ュ彛
-export function getSettingIndex(query) {
-  return request({
-    url: '/realTimeMonitoring/realTimeMonitoring/energyIndex/list',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/facility/annex.js b/energy_management_ui/src/api/facility/annex.js
deleted file mode 100644
index c029387..0000000
--- a/energy_management_ui/src/api/facility/annex.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ璁惧妗f闄勪欢鍒楄〃
-export function listAnnex(query) {
-  return request({
-    url: '/facility/annex/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ璁惧妗f闄勪欢璇︾粏
-export function getAnnex(createTime) {
-  return request({
-    url: '/facility/annex/' + createTime,
-    method: 'get'
-  })
-}
-
-// 鏂板璁惧妗f闄勪欢
-export function addAnnex(data) {
-  return request({
-    url: '/facility/annex',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼璁惧妗f闄勪欢
-export function updateAnnex(data) {
-  return request({
-    url: '/facility/annex',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎璁惧妗f闄勪欢
-export function delAnnex(createTime) {
-  return request({
-    url: '/facility/annex/' + createTime,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭璁惧妗f闄勪欢
-export function exportAnnex(query) {
-  return request({
-    url: '/facility/annex/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/facility/archives.js b/energy_management_ui/src/api/facility/archives.js
deleted file mode 100644
index 6fec0f0..0000000
--- a/energy_management_ui/src/api/facility/archives.js
+++ /dev/null
@@ -1,69 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ璁惧妗f鍒楄〃
-export function listArchives(query) {
-  return request({
-    url: '/facility/archives/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ璁惧妗f璇︾粏
-export function getArchives(id) {
-  return request({
-    url: '/facility/archives/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板璁惧妗f
-export function addArchives(data) {
-  return request({
-    url: '/facility/archives',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼璁惧妗f
-export function updateArchives(data) {
-  return request({
-    url: '/facility/archives',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎璁惧妗f
-export function delArchives(id) {
-  return request({
-    url: '/facility/archives/' + id,
-    method: 'delete'
-  })
-}
-
-// 妫�瀹氭仮澶嶈澶囨。妗�
-export function resetArchives(id) {
-  return request({
-    url: '/facility/archives/' + id,
-    method: 'post'
-  })
-}
-
-// 瀵煎嚭璁惧妗f
-export function exportArchives(query) {
-  return request({
-    url: '/facility/archives/export',
-    method: 'get',
-    params: query
-  })
-}
-
-// 涓嬭浇璁惧妗f缁存姢瀵煎叆妯℃澘
-export function importTemplate() {
-  return request({
-    url: '/facility/archives/importTemplate',
-    method: 'get'
-  })
-}
diff --git a/energy_management_ui/src/api/home/home.js b/energy_management_ui/src/api/home/home.js
deleted file mode 100644
index 3a3755a..0000000
--- a/energy_management_ui/src/api/home/home.js
+++ /dev/null
@@ -1,73 +0,0 @@
-import request from "@/utils/request";
-
-// 鑾峰彇鍏ㄥ巶缁煎悎鑳借��
-export function getEnergyConsumptionSummation(timeType) {
-  return request({
-    url: "/home/getHomeEnergyConsumptionSummation",
-    method: "get",
-    params: {
-      timeType
-    }
-  });
-}
-
-// 缁煎悎鑳借�楀崰姣斿垎鏋愮幆褰㈠浘鏁版嵁
-export function getEnergyConsumptionRatio(timeType) {
-  return request({
-    url: "/home/getHomeEnergyConsumptionRatio",
-    method: "get",
-    params: {
-      timeType
-    }
-  });
-}
-
-// 鑳芥簮璁惧鑳借�楃幆褰㈠浘鏁版嵁
-export function getHomeEnergyUnitConsumptionRatio(timeType) {
-  return request({
-    url: "/home/getHomeEnergyUnitConsumptionRatio",
-    method: "get",
-    params: {
-      timeType
-    }
-  });
-}
-
-// 鍒嗙被鑳芥簮缁熻
-export function getEnergyStatistic(timeType) {
-  return request({
-    url: "/home/getHomeEnergyStatistic",
-    method: "get",
-    params: {
-      timeType
-    }
-  });
-}
-
-// 鑳芥簮鐩戞祴鏌辩姸鍥炬暟鎹�
-export function getHomeEnergyMonitoring(timeType, energyType) {
-  return request({
-    url: "/home/getHomeEnergyMonitoring",
-    method: "get",
-    params: {
-      timeType,
-      energyType
-    }
-  });
-}
-
-// 鑾峰彇鑳芥簮绫诲瀷
-export function listEnergyType() {
-  return request({
-    url: "/home/listEnergyType",
-    method: "get"
-  });
-}
-
-// getHomeOutdoorTemperature
-export function getHomeOutdoorTemperature() {
-  return request({
-    url: "/home/getHomeOutdoorTemperature",
-    method: "get"
-  });
-}
diff --git a/energy_management_ui/src/api/index.js b/energy_management_ui/src/api/index.js
deleted file mode 100644
index 895d57a..0000000
--- a/energy_management_ui/src/api/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import request from '@/utils/request'
-
-
-// 棣栭〉IFrame鍔犺浇鍦板潃
-export function getIndexIframeUrl() {
-  return request({
-    url: '/HomePage/indexIframeUrl',
-    method: 'get',
-  })
-}
diff --git a/energy_management_ui/src/api/keyEquipment/dailykeyEquipment/dailykeyEquipment.js b/energy_management_ui/src/api/keyEquipment/dailykeyEquipment/dailykeyEquipment.js
deleted file mode 100644
index ebfa882..0000000
--- a/energy_management_ui/src/api/keyEquipment/dailykeyEquipment/dailykeyEquipment.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import request from '@/utils/request'
-
- //鏌ヨ鏃ユ姤琛�
-export function getDataList(query) {
-  return request({
-    url: '/keyEquipment/dailyKeyEquipment/list',
-    method: 'get',
-    params: query
-  })
-}
-export function getlistChart(query) {
-  return request({
-    url: '/keyEquipment/dailyKeyEquipment/listChart',
-    method: 'get',
-    params: query
-  })
-}
-export function getFacilityArchives(query) {
-  return request({
-    url: '/keyEquipment/dailyKeyEquipment/getFacilityArchives',
-    method: 'get',
-    params: query
-  })
-}
-
-export function getPointFacility(query) {
-  return request({
-    url: '/keyEquipment/dailyKeyEquipment/getPointFacility',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/keyEquipment/monthlykeyEquipment/monthlykeyEquipment.js b/energy_management_ui/src/api/keyEquipment/monthlykeyEquipment/monthlykeyEquipment.js
deleted file mode 100644
index 54d2b3f..0000000
--- a/energy_management_ui/src/api/keyEquipment/monthlykeyEquipment/monthlykeyEquipment.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import request from '@/utils/request'
-
-//鏌ヨ鏃ユ姤琛�
-export function getDataList(query) {
-  return request({
-    url: '/keyEquipment/monthlyKeyEquipment/list',
-    method: 'get',
-    params: query
-  })
-}
-export function getlistChart(query) {
-  return request({
-    url: '/keyEquipment/monthlyKeyEquipment/listChart',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/keyEquipment/yearkeyEquipment/yearkeyEquipment.js b/energy_management_ui/src/api/keyEquipment/yearkeyEquipment/yearkeyEquipment.js
deleted file mode 100644
index ab234e2..0000000
--- a/energy_management_ui/src/api/keyEquipment/yearkeyEquipment/yearkeyEquipment.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import request from '@/utils/request'
-
-//鏌ヨ鏃ユ姤琛�
-export function getDataList(query) {
-  return request({
-    url: '/keyEquipment/yearKeyEquipment/list',
-    method: 'get',
-    params: query
-  })
-}
-export function getlistChart(query) {
-  return request({
-    url: '/keyEquipment/yearKeyEquipment/listChart',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/login.js b/energy_management_ui/src/api/login.js
deleted file mode 100644
index 1e84761..0000000
--- a/energy_management_ui/src/api/login.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import request from '@/utils/request'
-
-// 鐧诲綍鏂规硶
-export function login(username, password, code, uuid) {
-  const data = {
-    username,
-    password,
-    code,
-    uuid
-  }
-  return request({
-    url: '/login',
-    method: 'post',
-    params: data
-  })
-}
-
-// 鑾峰彇鐢ㄦ埛璇︾粏淇℃伅
-export function getInfo() {
-  return request({
-    url: '/getInfo',
-    method: 'get'
-  })
-}
-
-// 閫�鍑烘柟娉�
-export function logout() {
-  return request({
-    url: '/logout',
-    method: 'post'
-  })
-}
-
-// 鑾峰彇楠岃瘉鐮�
-export function getCodeImg() {
-  return request({
-    url: '/captchaImage',
-    method: 'get'
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/menu.js b/energy_management_ui/src/api/menu.js
deleted file mode 100644
index faef101..0000000
--- a/energy_management_ui/src/api/menu.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import request from '@/utils/request'
-
-// 鑾峰彇璺敱
-export const getRouters = () => {
-  return request({
-    url: '/getRouters',
-    method: 'get'
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/meter/annex.js b/energy_management_ui/src/api/meter/annex.js
deleted file mode 100644
index 63646c6..0000000
--- a/energy_management_ui/src/api/meter/annex.js
+++ /dev/null
@@ -1,63 +0,0 @@
-import request from '@/utils/request'
-
-
-// 鏌ヨ璁¢噺鍣ㄥ叿妗f闄勪欢鍒楄〃
-export function listAnnex(query) {
-  return request({
-    url: '/meter/annex/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ璁¢噺鍣ㄥ叿妗f闄勪欢璇︾粏
-export function getAnnex(id) {
-  return request({
-    url: '/meter/annex/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板璁¢噺鍣ㄥ叿妗f闄勪欢
-export function addAnnex(data) {
-  return request({
-    url: '/meter/annex',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼璁¢噺鍣ㄥ叿妗f闄勪欢
-export function updateAnnex(data) {
-  return request({
-    url: '/meter/annex',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎璁¢噺鍣ㄥ叿妗f闄勪欢
-export function delAnnex(id) {
-  return request({
-    url: '/meter/annex/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭璁¢噺鍣ㄥ叿妗f闄勪欢
-export function exportAnnex(query) {
-  return request({
-    url: '/meter/annex/export',
-    method: 'get',
-    params: query
-  })
-}
-
-// 涓嬭浇閲忓櫒鍏锋。妗堢淮鎶ゅ鍏ユā鏉�
-export function seeFile(data) {
-  return request({
-    url: '/meter/annex/assignDownload',
-    method: 'post',
-    params: data
-  })
-}
diff --git a/energy_management_ui/src/api/meter/implement.js b/energy_management_ui/src/api/meter/implement.js
deleted file mode 100644
index ff088b1..0000000
--- a/energy_management_ui/src/api/meter/implement.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃
-export function listImplement(query) {
-  return request({
-    url: '/meter/implement/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢璇︾粏
-export function getImplement(id) {
-  return request({
-    url: '/meter/implement/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板璁¢噺鍣ㄥ叿妗f缁存姢
-export function addImplement(data) {
-  return request({
-    url: '/meter/implement',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼璁¢噺鍣ㄥ叿妗f缁存姢
-export function updateImplement(data) {
-  return request({
-    url: '/meter/implement',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎璁¢噺鍣ㄥ叿妗f缁存姢
-export function delImplement(id) {
-  return request({
-    url: '/meter/implement/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭璁¢噺鍣ㄥ叿妗f缁存姢
-export function exportImplement(query) {
-  return request({
-    url: '/meter/implement/export',
-    method: 'get',
-    params: query
-  })
-}
-// 涓嬭浇閲忓櫒鍏锋。妗堢淮鎶ゅ鍏ユā鏉�
-export function importTemplate() {
-  return request({
-    url: '/meter/implement/importTemplate',
-    method: 'get'
-  })
-}
diff --git a/energy_management_ui/src/api/meter/implementCount.js b/energy_management_ui/src/api/meter/implementCount.js
deleted file mode 100644
index 48ed8cf..0000000
--- a/energy_management_ui/src/api/meter/implementCount.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ璁¢噺鍣ㄥ叿缁熻鏌ヨ鍒楄〃
-export function listImplementCount(query) {
-  return request({
-    url: '/meter/implementCount/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ璁¢噺鍣ㄥ叿缁熻鏌ヨ璇︾粏
-export function getImplementCount(code) {
-  return request({
-    url: '/meter/implementCount/' + code,
-    method: 'get'
-  })
-}
-
-// 鏂板璁¢噺鍣ㄥ叿缁熻鏌ヨ
-export function addImplementCount(data) {
-  return request({
-    url: '/meter/implementCount',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼璁¢噺鍣ㄥ叿缁熻鏌ヨ
-export function updateImplementCount(data) {
-  return request({
-    url: '/meter/implementCount',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎璁¢噺鍣ㄥ叿缁熻鏌ヨ
-export function delImplementCount(code) {
-  return request({
-    url: '/meter/implementCount/' + code,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭璁¢噺鍣ㄥ叿缁熻鏌ヨ
-export function exportImplementCount(query) {
-  return request({
-    url: '/meter/implementCount/export',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/meter/index.js b/energy_management_ui/src/api/meter/index.js
deleted file mode 100644
index 15de4da..0000000
--- a/energy_management_ui/src/api/meter/index.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import request from '@/utils/request'
-
-
-//  鏍规嵁璁¢噺鍣ㄥ叿ID鑾峰彇鎸囨爣淇℃伅z
-export function listIndex(id) {
-  return request({
-    url: '/basicsetting/energyindex/meterIndex/'+id,
-    method: 'get'
-  })
-}
-
-
-// 鏍规嵁璁¢噺鍣ㄥ叿ID鐢熸垚鎴栭噸鏂扮敓鎴愭寚鏍�
-export function addIndex(id) {
-  return request({
-    url: '/basicsetting/energyindex/meterIndex/'+id,
-    method: 'post'
-  })
-}
-
-// // 淇敼璁¢噺鍣ㄥ叿妗f闄勪欢
-// export function updateAnnex(data) {
-//   return request({
-//     url: '/meter/annex',
-//     method: 'put',
-//     data: data
-//   })
-// }
-//
-// 鍒犻櫎璁¢噺鍣ㄥ叿妗f闄勪欢
-export function delIndex(id) {
-  return request({
-    url: '/basicsetting/energyindex/' + id,
-    method: 'delete'
-  })
-}
diff --git a/energy_management_ui/src/api/monitor/logininfor.js b/energy_management_ui/src/api/monitor/logininfor.js
deleted file mode 100644
index 383d61f..0000000
--- a/energy_management_ui/src/api/monitor/logininfor.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鐧诲綍鏃ュ織鍒楄〃
-export function list(query) {
-  return request({
-    url: '/monitor/logininfor/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鍒犻櫎鐧诲綍鏃ュ織
-export function delLogininfor(infoId) {
-  return request({
-    url: '/monitor/logininfor/' + infoId,
-    method: 'delete'
-  })
-}
-
-// 娓呯┖鐧诲綍鏃ュ織
-export function cleanLogininfor() {
-  return request({
-    url: '/monitor/logininfor/clean',
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鐧诲綍鏃ュ織
-export function exportLogininfor(query) {
-  return request({
-    url: '/monitor/logininfor/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/monitor/online.js b/energy_management_ui/src/api/monitor/online.js
deleted file mode 100644
index bd22137..0000000
--- a/energy_management_ui/src/api/monitor/online.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鍦ㄧ嚎鐢ㄦ埛鍒楄〃
-export function list(query) {
-  return request({
-    url: '/monitor/online/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 寮洪��鐢ㄦ埛
-export function forceLogout(tokenId) {
-  return request({
-    url: '/monitor/online/' + tokenId,
-    method: 'delete'
-  })
-}
diff --git a/energy_management_ui/src/api/monitor/operlog.js b/energy_management_ui/src/api/monitor/operlog.js
deleted file mode 100644
index f09b8ed..0000000
--- a/energy_management_ui/src/api/monitor/operlog.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鎿嶄綔鏃ュ織鍒楄〃
-export function list(query) {
-  return request({
-    url: '/monitor/operlog/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鍒犻櫎鎿嶄綔鏃ュ織
-export function delOperlog(operId) {
-  return request({
-    url: '/monitor/operlog/' + operId,
-    method: 'delete'
-  })
-}
-
-// 娓呯┖鎿嶄綔鏃ュ織
-export function cleanOperlog() {
-  return request({
-    url: '/monitor/operlog/clean',
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鎿嶄綔鏃ュ織
-export function exportOperlog(query) {
-  return request({
-    url: '/monitor/operlog/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/monitor/server.js b/energy_management_ui/src/api/monitor/server.js
deleted file mode 100644
index feed783..0000000
--- a/energy_management_ui/src/api/monitor/server.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鏈嶅姟鍣ㄨ缁�
-export function getServer() {
-  return request({
-    url: '/monitor/server',
-    method: 'get'
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/onlineMonitoring/index.js b/energy_management_ui/src/api/onlineMonitoring/index.js
deleted file mode 100644
index c3c8522..0000000
--- a/energy_management_ui/src/api/onlineMonitoring/index.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ璁惧妗f闄勪欢鍒楄〃
-export function listArchives(query) {
-  return request({
-    url: '/gateway/gatewaysetting/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ璁惧妗f闄勪欢鍒楄〃
-export function getlist(query) {
-    return request({
-      url: '/gateway/gatewaysetting/monitor',
-      method: 'get',
-    
-    })
-  }
-// 鏌ヨ璁惧妗f闄勪欢璇︾粏
-export function getArchives(createTime) {
-  return request({
-    url: '/gateway/gatewaysetting/' + createTime,
-    method: 'get'
-  })
-}
-
-// 鏂板璁惧妗f闄勪欢
-export function addArchives(data) {
-  return request({
-    url: '/gateway/gatewaysetting/',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼璁惧妗f闄勪欢
-export function updateArchives(data) {
-  return request({
-    url: '/gateway/gatewaysetting',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎璁惧妗f闄勪欢
-export function delArchives(createTime) {
-  return request({
-    url: '/gateway/gatewaysetting/' + createTime,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭璁惧妗f闄勪欢
-export function exportAnnex(query) {
-  return request({
-    url: '/facility/annex/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/plannedOutput/energyMonitoring.js b/energy_management_ui/src/api/plannedOutput/energyMonitoring.js
deleted file mode 100644
index 85053c8..0000000
--- a/energy_management_ui/src/api/plannedOutput/energyMonitoring.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨplannedOutput鍒楄〃
-export function listEnergyMonitoring(query) {
-  return request({
-    url: '/energyMonitoring/list',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/plannedOutput/planEnergy.js b/energy_management_ui/src/api/plannedOutput/planEnergy.js
deleted file mode 100644
index be7636c..0000000
--- a/energy_management_ui/src/api/plannedOutput/planEnergy.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛�
-export function listEnergy(query) {
-  return request({
-    url: '/PlanEnergy/list',
-    method: 'get',
-    params: query
-  })
-}
-// 鏂板銆愯濉啓鍔熻兘鍚嶇О銆�
-export function addEnergy(data) {
-  return request({
-    url: '/PlanEnergy',
-    method: 'post',
-    data: data
-  })
-}
diff --git a/energy_management_ui/src/api/plannedOutput/plannedOutput.js b/energy_management_ui/src/api/plannedOutput/plannedOutput.js
deleted file mode 100644
index 9a97849..0000000
--- a/energy_management_ui/src/api/plannedOutput/plannedOutput.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨplannedOutput鍒楄〃
-export function listPlannedOutput(query) {
-  return request({
-    url: '/planned/plannedOutput/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨplannedOutput璇︾粏
-export function getPlannedOutput(id) {
-  return request({
-    url: '/planned/plannedOutput/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板plannedOutput
-export function addPlannedOutput(data) {
-  return request({
-    url: '/planned/plannedOutput',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼plannedOutput
-export function updatePlannedOutput(data) {
-  return request({
-    url: '/planned/plannedOutput',
-    method: 'put',
-    params: data
-  })
-}
-
-// 鍒犻櫎plannedOutput
-export function delPlannedOutput(id) {
-  return request({
-    url: '/planned/plannedOutput/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭plannedOutput
-export function exportPlannedOutput(query) {
-  return request({
-    url: '/planned/plannedOutput/export',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/policy/annex.js b/energy_management_ui/src/api/policy/annex.js
deleted file mode 100644
index 561370f..0000000
--- a/energy_management_ui/src/api/policy/annex.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鏀跨瓥娉曡闄勪欢鍒楄〃
-export function listAnnex(query) {
-  return request({
-    url: '/policy/annex/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鏀跨瓥娉曡闄勪欢璇︾粏
-export function getAnnex(filePath) {
-  return request({
-    url: '/policy/annex/' + filePath,
-    method: 'get'
-  })
-}
-
-// 鏂板鏀跨瓥娉曡闄勪欢
-export function addAnnex(data) {
-  return request({
-    url: '/policy/annex',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鏀跨瓥娉曡闄勪欢
-export function updateAnnex(data) {
-  return request({
-    url: '/policy/annex',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鏀跨瓥娉曡闄勪欢
-export function delAnnex(filePath) {
-  return request({
-    url: '/policy/annex/' + filePath,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鏀跨瓥娉曡闄勪欢
-export function exportAnnex(query) {
-  return request({
-    url: '/policy/annex/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/policy/policyInsert.js b/energy_management_ui/src/api/policy/policyInsert.js
deleted file mode 100644
index bc618dd..0000000
--- a/energy_management_ui/src/api/policy/policyInsert.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鏀跨瓥娉曡缁存姢鍒楄〃
-export function listPolicyInsert(query) {
-  return request({
-    url: '/policy/policyInsert/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鏀跨瓥娉曡缁存姢璇︾粏
-export function getPolicyInsert(id) {
-  return request({
-    url: '/policy/policyInsert/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板鏀跨瓥娉曡缁存姢
-export function addPolicyInsert(data) {
-  return request({
-    url: '/policy/policyInsert',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鏀跨瓥娉曡缁存姢
-export function updatePolicyInsert(data) {
-  return request({
-    url: '/policy/policyInsert',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鏀跨瓥娉曡缁存姢
-export function delPolicyInsert(id) {
-  return request({
-    url: '/policy/policyInsert/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鏀跨瓥娉曡缁存姢
-export function exportPolicyInsert(query) {
-  return request({
-    url: '/policy/policyInsert/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/policy/policySelete.js b/energy_management_ui/src/api/policy/policySelete.js
deleted file mode 100644
index 3896392..0000000
--- a/energy_management_ui/src/api/policy/policySelete.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鏀跨瓥娉曡鏌ヨ鍒楄〃
-export function listPolicyselete(query) {
-  return request({
-    url: '/policy/policyselete/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鏀跨瓥娉曡鏌ヨ璇︾粏
-export function getPolicyselete(id) {
-  return request({
-    url: '/policy/policyselete/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板鏀跨瓥娉曡鏌ヨ
-export function addPolicyselete(data) {
-  return request({
-    url: '/policy/policyselete',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鏀跨瓥娉曡鏌ヨ
-export function updatePolicyselete(data) {
-  return request({
-    url: '/policy/policyselete',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鏀跨瓥娉曡鏌ヨ
-export function delPolicyselete(id) {
-  return request({
-    url: '/policy/policyselete/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鏀跨瓥娉曡鏌ヨ
-export function exportPolicyselete(query) {
-  return request({
-    url: '/policy/policyselete/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/powerAnalyse/index.js b/energy_management_ui/src/api/powerAnalyse/index.js
deleted file mode 100644
index 805707b..0000000
--- a/energy_management_ui/src/api/powerAnalyse/index.js
+++ /dev/null
@@ -1,88 +0,0 @@
-import request from '@/utils/request'
-
-/**
- * 鏌ヨ鍚岀幆姣斿垪琛�
- * @param {*} query 
- * @param {*} energyType electric/water
- * @param {*} type 1鍚屾瘮 2鐜瘮
- * @returns 
- */
-export function queryDataComparison(query, energyType, type) {
-  if (energyType == 'electric') {
-    if (type === 1) {
-      // 鐢靛悓姣�
-      return request({
-        url: '/statisticalAnalysis/getElectricDataComparisonYoY',
-        method: 'post',
-        data: query
-      })
-    } else {
-      // 鐢电幆姣�
-      return request({
-        url: '/statisticalAnalysis/getElectricDataComparisonMoM',
-        method: 'post',
-        data: query
-      })
-    }
-  } else {
-    if (type === 1) {
-      // 姘村悓姣�
-      return request({
-        url: '/statisticalAnalysis/getWaterDataComparisonYoY',
-        method: 'post',
-        data: query
-      })
-    } else {
-      // 姘寸幆姣�
-      return request({
-        url: '/statisticalAnalysis/getWaterDataComparisonMoM',
-        method: 'post',
-        data: query
-      })
-    }
-  }
-}
-
-// 瀵煎嚭
-export function exportDataComparison(query, energyType, type) {
-  if (energyType == 'electric') {
-    if (type === 1) {
-      // 鐢靛悓姣�
-      return request({
-        url: '/statisticalAnalysis/exportElectricYoY',
-        method: 'post',
-        data: query
-      })
-    } else {
-      // 鐢电幆姣�
-      return request({
-        url: '/statisticalAnalysis/exportElectricMoM',
-        method: 'post',
-        data: query
-      })
-    }
-  } else {
-    if (type === 1) {
-      // 姘村悓姣�
-      return request({
-        url: '/statisticalAnalysis/exportWaterYoY',
-        method: 'post',
-        data: query
-      })
-    } else {
-      // 姘寸幆姣�
-      return request({
-        url: '/statisticalAnalysis/exportWaterMoM',
-        method: 'post',
-        data: query
-      })
-    }
-  }
-}
-export function exportListMonth(query) {
-  return request({
-    url: '/comprehensive/monthlyComprehensive/export',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/reportForm/annualReport/annualReport.js b/energy_management_ui/src/api/reportForm/annualReport/annualReport.js
deleted file mode 100644
index 335e599..0000000
--- a/energy_management_ui/src/api/reportForm/annualReport/annualReport.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import request from '@/utils/request'
-
- //鏌ヨ鏃ユ姤琛�
-export function reportStatisticsList(query) {
-  return request({
-    url: '/report/annualReport/list',
-    method: 'get',
-    params: query
-  })
-}
-// 瀵煎嚭缁煎悎鎶ヨ〃
-export function exportList(query) {
-  return request({
-    url: '/report/annualReport/export',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/reportForm/consolidatedStatements.js b/energy_management_ui/src/api/reportForm/consolidatedStatements.js
deleted file mode 100644
index 139449f..0000000
--- a/energy_management_ui/src/api/reportForm/consolidatedStatements.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃鍒楄〃
-export function listConsolidatedStatements(query) {
-  return request({
-    url: '/reportForm/consolidatedStatements/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃璇︾粏
-export function getConsolidatedStatements(id) {
-  return request({
-    url: '/reportForm/consolidatedStatements/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-export function addConsolidatedStatements(data) {
-  return request({
-    url: '/reportForm/consolidatedStatements',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-export function updateConsolidatedStatements(data) {
-  return request({
-    url: '/reportForm/consolidatedStatements',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-export function delConsolidatedStatements(id) {
-  return request({
-    url: '/reportForm/consolidatedStatements/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鐒﹀寲宸ュ簭缁煎悎鎶ヨ〃
-export function exportConsolidatedStatements(query) {
-  return request({
-    url: '/reportForm/consolidatedStatements/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/reportForm/dailyReport/dailyReport.js b/energy_management_ui/src/api/reportForm/dailyReport/dailyReport.js
deleted file mode 100644
index 71f3aad..0000000
--- a/energy_management_ui/src/api/reportForm/dailyReport/dailyReport.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import request from '@/utils/request'
-
- //鏌ヨ鏃ユ姤琛�
-export function reportStatisticsList(query) {
-  return request({
-    url: '/report/dailyReport/list',
-    method: 'get',
-    params: query
-  })
-}
-// 瀵煎嚭缁煎悎鎶ヨ〃
-export function exportList(query) {
-  return request({
-    url: '/report/dailyReport/export',
-    method: 'get',
-    params: query
-  })
-}
-// 缁煎悎骞存姤琛ㄥ鍑�
-export function exportListYear(query) {
-  return request({
-    url: '/comprehensive/yearComprehensive/export',
-    method: 'get',
-    params: query
-  })
-}
-
-// 缁煎悎骞存姤琛ㄥ鍑�
-export function exportListMonth(query) {
-  return request({
-    url: '/comprehensive/monthlyComprehensive/export',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/reportForm/monthlyReport/monthlyReport.js b/energy_management_ui/src/api/reportForm/monthlyReport/monthlyReport.js
deleted file mode 100644
index c3eb7d5..0000000
--- a/energy_management_ui/src/api/reportForm/monthlyReport/monthlyReport.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import request from '@/utils/request'
-
- //鏌ヨ鏃ユ姤琛�
-export function reportStatisticsList(query) {
-  return request({
-    url: '/report/monthlyReport/list',
-    method: 'get',
-    params: query
-  })
-}
-// 瀵煎嚭缁煎悎鎶ヨ〃
-export function exportList(query) {
-  return request({
-    url: '/report/monthlyReport/export',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/reportForm/reportForm.js b/energy_management_ui/src/api/reportForm/reportForm.js
deleted file mode 100644
index 07a5680..0000000
--- a/energy_management_ui/src/api/reportForm/reportForm.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import request from '@/utils/request'
-import { praseStrEmpty } from "@/utils/ruoyi";
-
-//
-export function reportFormList(query) {
-  return request({
-    url: '/reportForm/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鏃ユ姤琛�
-export function reportStatisticsList(query) {
-  return request({
-    url: '/report/reportStatistics/list',
-    method: 'get',
-    params: query
-  })
-}
-// 瀵煎嚭缁煎悎鎶ヨ〃
-export function exportList(query) {
-  return request({
-    url: '/report/reportStatistics/export',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/reportInfo/index.js b/energy_management_ui/src/api/reportInfo/index.js
deleted file mode 100644
index 479de41..0000000
--- a/energy_management_ui/src/api/reportInfo/index.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import request from '@/utils/request'
-
-export function govReportList(query) {
-  return request({
-    url: '/govReports/govReports/list',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/reportSet/index.js b/energy_management_ui/src/api/reportSet/index.js
deleted file mode 100644
index 4d5796e..0000000
--- a/energy_management_ui/src/api/reportSet/index.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ棰勬姤璀﹁缃垪琛�
-export function listSet(query) {
-  return request({
-    url: '/system/report/list',
-    method: 'get',
-    params: query
-  })
-}
-
-//瀵屽伐鎺ュ彛
-export function getSettingIndex(para) {
-  return request({
-    url: '/system/report/listNodeEnergyIndex',
-    method: 'get',
-    params: para
-  })
-}
-
-// 淇敼琛ㄥ崟鏁版嵁
-export function updateDialogForm(data) {
-  return request({
-    url: '/system/report/save',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鏌ヨ棰勬姤璀﹁缃垪琛�
-export function updateEnableStatus(query) {
-  return request({
-    url: '/system/report/updateEnableStatus',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/statement/index.js b/energy_management_ui/src/api/statement/index.js
deleted file mode 100644
index a3bbac9..0000000
--- a/energy_management_ui/src/api/statement/index.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import request from '@/utils/request'
-// 鏌ヨMC鐢ㄧ數閲忋�佺患鍚堣兘鑰�  
-export function queryComprehensiveList(query) {
-  return request({
-    url: '/report/comprehensive/list',
-    method: 'get',
-    params: query
-  })
-}
-// 鏌ヨMC鐢ㄧ數閲忋�佺患鍚堣兘鑰�  
-export function queryComprehensiveUnitChart(query) {
-  return request({
-    url: '/report/comprehensive/listEnergyUnitChart',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鑳借�楀崰姣斾俊鎭�   GET璇锋眰,鍙傛暟涓庝笂闈竴鑷�
-export function getEnergyConsumptionRatio(query) {
-  return request({
-    url: '/report/comprehensive/getEnergyConsumptionRatio',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鑳借�楄澶囧崰姣斾俊鎭�  GET璇锋眰,鍙傛暟涓庝笂闈竴鑷�
-export function getEnergyUnitConsumptionRatio(query) {
-  return request({
-    url: '/report/comprehensive/getEnergyUnitConsumptionRatio',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/statisticalData/gxdhcount.js b/energy_management_ui/src/api/statisticalData/gxdhcount.js
deleted file mode 100644
index eaab1da..0000000
--- a/energy_management_ui/src/api/statisticalData/gxdhcount.js
+++ /dev/null
@@ -1,62 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ宸ュ簭鍗曡�楃粺璁″姛鑳藉垪琛�
-export function listGxdhcount(query) {
-  return request({
-    url: '/statisticalData/gxdhcount/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ宸ュ簭鍗曡�楃粺璁″姛鑳借缁�
-export function getGxdhcount(id) {
-  return request({
-    url: '/statisticalData/gxdhcount/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板宸ュ簭鍗曡�楃粺璁″姛鑳�
-export function addGxdhcount(data) {
-  return request({
-    url: '/statisticalData/gxdhcount',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼宸ュ簭鍗曡�楃粺璁″姛鑳�
-export function updateGxdhcount(data) {
-  return request({
-    url: '/statisticalData/gxdhcount',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎宸ュ簭鍗曡�楃粺璁″姛鑳�
-export function delGxdhcount(id) {
-  return request({
-    url: '/statisticalData/gxdhcount/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭宸ュ簭鍗曡�楃粺璁″姛鑳�
-export function exportGxdhcount(query) {
-  return request({
-    url: '/statisticalData/gxdhcount/export',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ宸ュ簭鍗曡�楃粺璁� 鎶ヨ〃 鎸囨爣灞曠ず鍐呭
-export function listGxdhcountIndex(query) {
-  return request({
-    url: '/statisticalData/gxdhcount/listReportIndex',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/system/config.js b/energy_management_ui/src/api/system/config.js
deleted file mode 100644
index f2e792c..0000000
--- a/energy_management_ui/src/api/system/config.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鍙傛暟鍒楄〃
-export function listConfig(query) {
-  return request({
-    url: '/system/config/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鍙傛暟璇︾粏
-export function getConfig(configId) {
-  return request({
-    url: '/system/config/' + configId,
-    method: 'get'
-  })
-}
-
-// 鏍规嵁鍙傛暟閿悕鏌ヨ鍙傛暟鍊�
-export function getConfigKey(configKey) {
-  return request({
-    url: '/system/config/configKey/' + configKey,
-    method: 'get'
-  })
-}
-
-// 鏂板鍙傛暟閰嶇疆
-export function addConfig(data) {
-  return request({
-    url: '/system/config',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鍙傛暟閰嶇疆
-export function updateConfig(data) {
-  return request({
-    url: '/system/config',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鍙傛暟閰嶇疆
-export function delConfig(configId) {
-  return request({
-    url: '/system/config/' + configId,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鍙傛暟
-export function exportConfig(query) {
-  return request({
-    url: '/system/config/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/system/dept.js b/energy_management_ui/src/api/system/dept.js
deleted file mode 100644
index c26894c..0000000
--- a/energy_management_ui/src/api/system/dept.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ閮ㄩ棬鍒楄〃
-export function listDept(query) {
-  return request({
-    url: '/system/dept/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ閮ㄩ棬璇︾粏
-export function getDept(deptId) {
-  return request({
-    url: '/system/dept/' + deptId,
-    method: 'get'
-  })
-}
-
-// 鏌ヨ閮ㄩ棬涓嬫媺鏍戠粨鏋�
-export function treeselect() {
-  return request({
-    url: '/system/dept/treeselect',
-    method: 'get'
-  })
-}
-
-// 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戠粨鏋�
-export function roleDeptTreeselect(roleId) {
-  return request({
-    url: '/system/dept/roleDeptTreeselect/' + roleId,
-    method: 'get'
-  })
-}
-
-// 鏂板閮ㄩ棬
-export function addDept(data) {
-  return request({
-    url: '/system/dept',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼閮ㄩ棬
-export function updateDept(data) {
-  return request({
-    url: '/system/dept',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎閮ㄩ棬
-export function delDept(deptId) {
-  return request({
-    url: '/system/dept/' + deptId,
-    method: 'delete'
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/system/dict/data.js b/energy_management_ui/src/api/system/dict/data.js
deleted file mode 100644
index 5597204..0000000
--- a/energy_management_ui/src/api/system/dict/data.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ瀛楀吀鏁版嵁鍒楄〃
-export function listData(query) {
-  return request({
-    url: '/system/dict/data/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ瀛楀吀鏁版嵁璇︾粏
-export function getData(dictCode) {
-  return request({
-    url: '/system/dict/data/' + dictCode,
-    method: 'get'
-  })
-}
-
-// 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁淇℃伅
-export function getDicts(dictType) {
-  return request({
-    url: '/system/dict/data/dictType/' + dictType,
-    method: 'get'
-  })
-}
-
-// 鏂板瀛楀吀鏁版嵁
-export function addData(data) {
-  return request({
-    url: '/system/dict/data',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼瀛楀吀鏁版嵁
-export function updateData(data) {
-  return request({
-    url: '/system/dict/data',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎瀛楀吀鏁版嵁
-export function delData(dictCode) {
-  return request({
-    url: '/system/dict/data/' + dictCode,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭瀛楀吀鏁版嵁
-export function exportData(query) {
-  return request({
-    url: '/system/dict/data/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/system/dict/type.js b/energy_management_ui/src/api/system/dict/type.js
deleted file mode 100644
index b8d974e..0000000
--- a/energy_management_ui/src/api/system/dict/type.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ瀛楀吀绫诲瀷鍒楄〃
-export function listType(query) {
-  return request({
-    url: '/system/dict/type/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ瀛楀吀绫诲瀷璇︾粏
-export function getType(dictId) {
-  return request({
-    url: '/system/dict/type/' + dictId,
-    method: 'get'
-  })
-}
-
-// 鏂板瀛楀吀绫诲瀷
-export function addType(data) {
-  return request({
-    url: '/system/dict/type',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼瀛楀吀绫诲瀷
-export function updateType(data) {
-  return request({
-    url: '/system/dict/type',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎瀛楀吀绫诲瀷
-export function delType(dictId) {
-  return request({
-    url: '/system/dict/type/' + dictId,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭瀛楀吀绫诲瀷
-export function exportType(query) {
-  return request({
-    url: '/system/dict/type/export',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鑾峰彇瀛楀吀閫夋嫨妗嗗垪琛�
-export function optionselect() {
-  return request({
-    url: '/system/dict/type/optionselect',
-    method: 'get'
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/system/menu.js b/energy_management_ui/src/api/system/menu.js
deleted file mode 100644
index f6415c6..0000000
--- a/energy_management_ui/src/api/system/menu.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鑿滃崟鍒楄〃
-export function listMenu(query) {
-  return request({
-    url: '/system/menu/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鑿滃崟璇︾粏
-export function getMenu(menuId) {
-  return request({
-    url: '/system/menu/' + menuId,
-    method: 'get'
-  })
-}
-
-// 鏌ヨ鑿滃崟涓嬫媺鏍戠粨鏋�
-export function treeselect() {
-  return request({
-    url: '/system/menu/treeselect',
-    method: 'get'
-  })
-}
-
-// 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟涓嬫媺鏍戠粨鏋�
-export function roleMenuTreeselect(roleId) {
-  return request({
-    url: '/system/menu/roleMenuTreeselect/' + roleId,
-    method: 'get'
-  })
-}
-
-// 鏂板鑿滃崟
-export function addMenu(data) {
-  return request({
-    url: '/system/menu',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鑿滃崟
-export function updateMenu(data) {
-  return request({
-    url: '/system/menu',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鑿滃崟
-export function delMenu(menuId) {
-  return request({
-    url: '/system/menu/' + menuId,
-    method: 'delete'
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/system/notice.js b/energy_management_ui/src/api/system/notice.js
deleted file mode 100644
index c274ea5..0000000
--- a/energy_management_ui/src/api/system/notice.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鍏憡鍒楄〃
-export function listNotice(query) {
-  return request({
-    url: '/system/notice/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鍏憡璇︾粏
-export function getNotice(noticeId) {
-  return request({
-    url: '/system/notice/' + noticeId,
-    method: 'get'
-  })
-}
-
-// 鏂板鍏憡
-export function addNotice(data) {
-  return request({
-    url: '/system/notice',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鍏憡
-export function updateNotice(data) {
-  return request({
-    url: '/system/notice',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鍏憡
-export function delNotice(noticeId) {
-  return request({
-    url: '/system/notice/' + noticeId,
-    method: 'delete'
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/system/post.js b/energy_management_ui/src/api/system/post.js
deleted file mode 100644
index 434cd35..0000000
--- a/energy_management_ui/src/api/system/post.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ宀椾綅鍒楄〃
-export function listPost(query) {
-  return request({
-    url: '/system/post/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ宀椾綅璇︾粏
-export function getPost(postId) {
-  return request({
-    url: '/system/post/' + postId,
-    method: 'get'
-  })
-}
-
-// 鏂板宀椾綅
-export function addPost(data) {
-  return request({
-    url: '/system/post',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼宀椾綅
-export function updatePost(data) {
-  return request({
-    url: '/system/post',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎宀椾綅
-export function delPost(postId) {
-  return request({
-    url: '/system/post/' + postId,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭宀椾綅
-export function exportPost(query) {
-  return request({
-    url: '/system/post/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/system/role.js b/energy_management_ui/src/api/system/role.js
deleted file mode 100644
index 463501c..0000000
--- a/energy_management_ui/src/api/system/role.js
+++ /dev/null
@@ -1,75 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ瑙掕壊鍒楄〃
-export function listRole(query) {
-  return request({
-    url: '/system/role/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ瑙掕壊璇︾粏
-export function getRole(roleId) {
-  return request({
-    url: '/system/role/' + roleId,
-    method: 'get'
-  })
-}
-
-// 鏂板瑙掕壊
-export function addRole(data) {
-  return request({
-    url: '/system/role',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼瑙掕壊
-export function updateRole(data) {
-  return request({
-    url: '/system/role',
-    method: 'put',
-    data: data
-  })
-}
-
-// 瑙掕壊鏁版嵁鏉冮檺
-export function dataScope(data) {
-  return request({
-    url: '/system/role/dataScope',
-    method: 'put',
-    data: data
-  })
-}
-
-// 瑙掕壊鐘舵�佷慨鏀�
-export function changeRoleStatus(roleId, status) {
-  const data = {
-    roleId,
-    status
-  }
-  return request({
-    url: '/system/role/changeStatus',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎瑙掕壊
-export function delRole(roleId) {
-  return request({
-    url: '/system/role/' + roleId,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭瑙掕壊
-export function exportRole(query) {
-  return request({
-    url: '/system/role/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/system/user.js b/energy_management_ui/src/api/system/user.js
deleted file mode 100644
index 3b9a776..0000000
--- a/energy_management_ui/src/api/system/user.js
+++ /dev/null
@@ -1,127 +0,0 @@
-import request from '@/utils/request'
-import { praseStrEmpty } from "@/utils/ruoyi";
-
-// 鏌ヨ鐢ㄦ埛鍒楄〃
-export function listUser(query) {
-  return request({
-    url: '/system/user/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鐢ㄦ埛璇︾粏
-export function getUser(userId) {
-  return request({
-    url: '/system/user/' + praseStrEmpty(userId),
-    method: 'get'
-  })
-}
-
-// 鏂板鐢ㄦ埛
-export function addUser(data) {
-  return request({
-    url: '/system/user',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鐢ㄦ埛
-export function updateUser(data) {
-  return request({
-    url: '/system/user',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鐢ㄦ埛
-export function delUser(userId) {
-  return request({
-    url: '/system/user/' + userId,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鐢ㄦ埛
-export function exportUser(query) {
-  return request({
-    url: '/system/user/export',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鐢ㄦ埛瀵嗙爜閲嶇疆
-export function resetUserPwd(userId, password) {
-  const data = {
-    userId,
-    password
-  }
-  return request({
-    url: '/system/user/resetPwd',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鐢ㄦ埛鐘舵�佷慨鏀�
-export function changeUserStatus(userId, status) {
-  const data = {
-    userId,
-    status
-  }
-  return request({
-    url: '/system/user/changeStatus',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鏌ヨ鐢ㄦ埛涓汉淇℃伅
-export function getUserProfile() {
-  return request({
-    url: '/system/user/profile',
-    method: 'get'
-  })
-}
-
-// 淇敼鐢ㄦ埛涓汉淇℃伅
-export function updateUserProfile(data) {
-  return request({
-    url: '/system/user/profile',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鐢ㄦ埛瀵嗙爜閲嶇疆
-export function updateUserPwd(oldPassword, newPassword) {
-  const data = {
-    oldPassword,
-    newPassword
-  }
-  return request({
-    url: '/system/user/profile/updatePwd',
-    method: 'put',
-    params: data
-  })
-}
-
-// 鐢ㄦ埛澶村儚涓婁紶
-export function uploadAvatar(data) {
-  return request({
-    url: '/system/user/profile/avatar',
-    method: 'post',
-    data: data
-  })
-}
-
-// 涓嬭浇鐢ㄦ埛瀵煎叆妯℃澘
-export function importTemplate() {
-  return request({
-    url: '/system/user/importTemplate',
-    method: 'get'
-  })
-}
diff --git a/energy_management_ui/src/api/tool/gen.js b/energy_management_ui/src/api/tool/gen.js
deleted file mode 100644
index 09a0b6f..0000000
--- a/energy_management_ui/src/api/tool/gen.js
+++ /dev/null
@@ -1,59 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鐢熸垚琛ㄦ暟鎹�
-export function listTable(query) {
-  return request({
-    url: '/tool/gen/list',
-    method: 'get',
-    params: query
-  })
-}
-// 鏌ヨdb鏁版嵁搴撳垪琛�
-export function listDbTable(query) {
-  return request({
-    url: '/tool/gen/db/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ琛ㄨ缁嗕俊鎭�
-export function getGenTable(tableId) {
-  return request({
-    url: '/tool/gen/' + tableId,
-    method: 'get'
-  })
-}
-
-// 淇敼浠g爜鐢熸垚淇℃伅
-export function updateGenTable(data) {
-  return request({
-    url: '/tool/gen',
-    method: 'put',
-    data: data
-  })
-}
-
-// 瀵煎叆琛�
-export function importTable(data) {
-  return request({
-    url: '/tool/gen/importTable',
-    method: 'post',
-    params: data
-  })
-}
-// 棰勮鐢熸垚浠g爜
-export function previewTable(tableId) {
-  return request({
-    url: '/tool/gen/preview/' + tableId,
-    method: 'get'
-  })
-}
-// 鍒犻櫎琛ㄦ暟鎹�
-export function delTable(tableId) {
-  return request({
-    url: '/tool/gen/' + tableId,
-    method: 'delete'
-  })
-}
-
diff --git a/energy_management_ui/src/api/workforce/duty_management.js b/energy_management_ui/src/api/workforce/duty_management.js
deleted file mode 100644
index 93a2a05..0000000
--- a/energy_management_ui/src/api/workforce/duty_management.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鎺掔彮绠$悊鍒楄〃
-export function listManagement(query) {
-  return request({
-    url: '/workforce/dutyManagement/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鎺掔彮绠$悊璇︾粏
-export function getManagement(id) {
-  return request({
-    url: '/workforce/dutyManagement/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板鎺掔彮绠$悊
-export function addManagement(data) {
-  return request({
-    url: '/workforce/dutyManagement',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鎺掔彮绠$悊
-export function updateManagement(data) {
-  return request({
-    url: '/workforce/dutyManagement',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鎺掔彮绠$悊
-export function delManagement(id) {
-  return request({
-    url: '/workforce/dutyManagement/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鎺掔彮绠$悊
-export function exportManagement(query) {
-  return request({
-    url: '/workforce/dutyManagement/export',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/workforce/management.js b/energy_management_ui/src/api/workforce/management.js
deleted file mode 100644
index 03070d8..0000000
--- a/energy_management_ui/src/api/workforce/management.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鎺掔彮绠$悊璁剧疆鍒楄〃
-export function listManagement(query) {
-  return request({
-    url: '/workforce/shiftManagement/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鎺掔彮绠$悊璁剧疆璇︾粏
-export function getManagement(id) {
-  return request({
-    url: '/workforce/shiftManagement/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板鎺掔彮绠$悊璁剧疆
-export function addManagement(data) {
-  return request({
-    url: '/workforce/shiftManagement',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鎺掔彮绠$悊璁剧疆
-export function updateManagement(data) {
-  return request({
-    url: '/workforce/shiftManagement',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鎺掔彮绠$悊璁剧疆
-export function delManagement(id) {
-  return request({
-    url: '/workforce/shiftManagement/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鎺掔彮绠$悊璁剧疆
-export function exportManagement(query) {
-  return request({
-    url: '/workforce/shiftManagement/export',
-    method: 'get',
-    params: query
-  })
-}
-export function treeList(query) {
-  return request({
-    url: '/workforce/shiftManagement/treeList',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/workforce/rosteringManagement.js b/energy_management_ui/src/api/workforce/rosteringManagement.js
deleted file mode 100644
index 55ecc12..0000000
--- a/energy_management_ui/src/api/workforce/rosteringManagement.js
+++ /dev/null
@@ -1,64 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鎺掔彮鏂规鍒楄〃
-export function getschemeNameList(query) {
-  return request({
-    url: '/workforce/rosteringManagement/schemeNamelist',
-    method: 'get',
-    params: query
-  })
-}
-
-
-// 鏌ヨ鎺掔彮琛ㄦ煡璇㈠垪琛�
-export function listRosteringManagement(query) {
-  return request({
-    url: '/workforce/rosteringManagement/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ鎺掔彮琛ㄦ煡璇㈣缁�
-export function getRosteringManagement(id) {
-  return request({
-    url: '/workforce/rosteringManagement/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板鎺掔彮琛ㄦ煡璇�
-export function addRosteringManagement(data) {
-  console.log(data);
-  return request({
-    url: '/workforce/rosteringManagement',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼鎺掔彮琛ㄦ煡璇�
-export function updateRosteringManagement(data) {
-  return request({
-    url: '/workforce/rosteringManagement',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎鎺掔彮琛ㄦ煡璇�
-export function delRosteringManagement(id) {
-  return request({
-    url: '/workforce/rosteringManagement/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭鎺掔彮琛ㄦ煡璇�
-export function exportRosteringManagement(query) {
-  return request({
-    url: '/workforce/rosteringManagement/export',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/workforce/scheme.js b/energy_management_ui/src/api/workforce/scheme.js
deleted file mode 100644
index c5f867c..0000000
--- a/energy_management_ui/src/api/workforce/scheme.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ杞�兼柟妗堝垪琛�
-export function listScheme(query) {
-  return request({
-    url: '/rosteringSrcheme/scheme/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ杞�兼柟妗堣缁�
-export function getScheme(id) {
-  return request({
-    url: '/rosteringSrcheme/scheme/' + id,
-    method: 'get'
-  })
-}
-
-// 鏂板杞�兼柟妗�
-export function addScheme(data) {
-  return request({
-    url: '/rosteringSrcheme/scheme',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼杞�兼柟妗�
-export function updateScheme(data) {
-  return request({
-    url: '/rosteringSrcheme/scheme',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎杞�兼柟妗�
-export function delScheme(id) {
-  return request({
-    url: '/rosteringSrcheme/scheme/' + id,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭杞�兼柟妗�
-export function exportScheme(query) {
-  return request({
-    url: '/rosteringSrcheme/scheme/export',
-    method: 'get',
-    params: query
-  })
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/api/workforce/schemeItem.js b/energy_management_ui/src/api/workforce/schemeItem.js
deleted file mode 100644
index 000b2aa..0000000
--- a/energy_management_ui/src/api/workforce/schemeItem.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ杞�兼柟妗堝垪琛�
-export function listSchemeItem(query) {
-  return request({
-    url: '/rosteringSchemeitem/schemeItem/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ杞�兼柟妗堣缁�
-export function getSchemeItem(description) {
-  return request({
-    url: '/rosteringSchemeitem/schemeItem/' + description,
-    method: 'get'
-  })
-}
-
-// 鏂板杞�兼柟妗�
-export function addSchemeItem(data) {
-  return request({
-    url: '/rosteringSchemeitem/schemeItem',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼杞�兼柟妗�
-export function updateSchemeItem(data) {
-  return request({
-    url: '/rosteringSchemeitem/schemeItem',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎杞�兼柟妗�
-export function delSchemeItem(description) {
-  return request({
-    url: '/rosteringSchemeitem/schemeItem/' + description,
-    method: 'delete'
-  })
-}
-
-// 瀵煎嚭杞�兼柟妗�
-export function exportSchemeItem(query) {
-  return request({
-    url: '/rosteringSchemeitem/schemeItem/export',
-    method: 'get',
-    params: query
-  })
-}
-export function listDutyManagement(query) {
-  return request({
-    url: '/workforce/dutyManagement/list',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/workingProcedure/dailyComprehensive/dailyComprehensive.js b/energy_management_ui/src/api/workingProcedure/dailyComprehensive/dailyComprehensive.js
deleted file mode 100644
index 865769d..0000000
--- a/energy_management_ui/src/api/workingProcedure/dailyComprehensive/dailyComprehensive.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import request from '@/utils/request'
-
- //鏌ヨ鏃ユ姤琛�
-export function getDataList(query) {
-  return request({
-    url: '/workingProcedure/dailyWorkingProcedure/list',
-    method: 'get',
-    params: query
-  })
-}
-export function getlistChart(query) {
-  return request({
-    url: '/workingProcedure/dailyWorkingProcedure/listChart',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/workingProcedure/monthlyComprehensive/monthlyComprehensive.js b/energy_management_ui/src/api/workingProcedure/monthlyComprehensive/monthlyComprehensive.js
deleted file mode 100644
index 4880d31..0000000
--- a/energy_management_ui/src/api/workingProcedure/monthlyComprehensive/monthlyComprehensive.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import request from '@/utils/request'
-
-//鏌ヨ鏃ユ姤琛�
-export function getDataList(query) {
-  return request({
-    url: '/workingProcedure/monthlyWorkingProcedure/list',
-    method: 'get',
-    params: query
-  })
-}
-export function getlistChart(query) {
-  return request({
-    url: '/workingProcedure/monthlyWorkingProcedure/listChart',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/api/workingProcedure/yearComprehensive/yearComprehensive.js b/energy_management_ui/src/api/workingProcedure/yearComprehensive/yearComprehensive.js
deleted file mode 100644
index 4fcd35b..0000000
--- a/energy_management_ui/src/api/workingProcedure/yearComprehensive/yearComprehensive.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import request from '@/utils/request'
-
-//鏌ヨ鏃ユ姤琛�
-export function getDataList(query) {
-  console.log(query)
-  return request({
-    url: '/workingProcedure/yearWorkingProcedure/list',
-    method: 'get',
-    params: query
-  })
-}
-export function getlistChart(query) {
-  return request({
-    url: '/workingProcedure/yearWorkingProcedure/listChart',
-    method: 'get',
-    params: query
-  })
-}
diff --git a/energy_management_ui/src/assets/401_images/401.gif b/energy_management_ui/src/assets/401_images/401.gif
deleted file mode 100644
index cd6e0d9..0000000
--- a/energy_management_ui/src/assets/401_images/401.gif
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/404_images/404.png b/energy_management_ui/src/assets/404_images/404.png
deleted file mode 100644
index 3d8e230..0000000
--- a/energy_management_ui/src/assets/404_images/404.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/404_images/404_cloud.png b/energy_management_ui/src/assets/404_images/404_cloud.png
deleted file mode 100644
index c6281d0..0000000
--- a/energy_management_ui/src/assets/404_images/404_cloud.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/cost.png b/energy_management_ui/src/assets/home/cost.png
deleted file mode 100644
index ed7d3a2..0000000
--- a/energy_management_ui/src/assets/home/cost.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/count.png b/energy_management_ui/src/assets/home/count.png
deleted file mode 100644
index fa08aac..0000000
--- a/energy_management_ui/src/assets/home/count.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/electric01.png b/energy_management_ui/src/assets/home/electric01.png
deleted file mode 100644
index 2ad4206..0000000
--- a/energy_management_ui/src/assets/home/electric01.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/electric02.png b/energy_management_ui/src/assets/home/electric02.png
deleted file mode 100644
index 3c7954a..0000000
--- a/energy_management_ui/src/assets/home/electric02.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/electric03.png b/energy_management_ui/src/assets/home/electric03.png
deleted file mode 100644
index 2b7225e..0000000
--- a/energy_management_ui/src/assets/home/electric03.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/electric04.png b/energy_management_ui/src/assets/home/electric04.png
deleted file mode 100644
index 521a5f8..0000000
--- a/energy_management_ui/src/assets/home/electric04.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/electric05.png b/energy_management_ui/src/assets/home/electric05.png
deleted file mode 100644
index eefde94..0000000
--- a/energy_management_ui/src/assets/home/electric05.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/electric06.png b/energy_management_ui/src/assets/home/electric06.png
deleted file mode 100644
index d77935e..0000000
--- a/energy_management_ui/src/assets/home/electric06.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/haodian.svg b/energy_management_ui/src/assets/home/haodian.svg
deleted file mode 100644
index 64ca324..0000000
--- a/energy_management_ui/src/assets/home/haodian.svg
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <title>鑰楁皵閲�</title>
-    <defs>
-        <linearGradient x1="15.5954832%" y1="17.9558225%" x2="79.6918238%" y2="77.5510976%" id="linearGradient-1">
-            <stop stop-color="#53DBDD" offset="0%"></stop>
-            <stop stop-color="#51C6D8" offset="100%"></stop>
-        </linearGradient>
-    </defs>
-    <g id="椤甸潰-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="棣栭〉" transform="translate(-247.000000, -701.000000)">
-            <g id="1" transform="translate(224.000000, 623.000000)">
-                <g id="鑰楁皵閲�" transform="translate(23.000000, 78.000000)">
-                    <circle id="妞渾褰�" fill="url(#linearGradient-1)" cx="10" cy="10" r="10"></circle>
-                    <path d="M10.2132025,11.3611714 L10.2132025,11.5368764 C10.2115497,11.6275763 10.1982731,11.7174915 10.173806,11.8036876 L9.65602283,15.5 L13.5,8.34164857 L10.6859611,8.34164857 C10.3905615,8.2944645 10.1782668,7.98905354 10.2019464,7.64533623 L10.2019464,7.46963124 C10.2027605,7.37192021 10.2179872,7.27508608 10.246971,7.18329721 L10.7647542,3.5 L6.95454545,10.664859 L9.76858437,10.664859 C10.0481503,10.7328446 10.2393164,11.032228 10.2132025,11.3611714 L10.2132025,11.3611714 Z" id="璺緞" fill="#FFFFFF" fill-rule="nonzero"></path>
-                </g>
-            </g>
-        </g>
-    </g>
-</svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/home/haoqi.svg b/energy_management_ui/src/assets/home/haoqi.svg
deleted file mode 100644
index 6c7fee1..0000000
--- a/energy_management_ui/src/assets/home/haoqi.svg
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <title>鑰楃數閲�</title>
-    <defs>
-        <linearGradient x1="15.5954832%" y1="17.9558225%" x2="80.8468413%" y2="78.6250058%" id="linearGradient-1">
-            <stop stop-color="#FF944A" offset="0%"></stop>
-            <stop stop-color="#FF674A" offset="98.2298951%"></stop>
-        </linearGradient>
-    </defs>
-    <g id="椤甸潰-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="棣栭〉" transform="translate(-437.000000, -701.000000)">
-            <g id="1" transform="translate(224.000000, 623.000000)">
-                <g id="鑰楃數閲�" transform="translate(213.000000, 78.000000)">
-                    <circle id="妞渾褰�" fill="url(#linearGradient-1)" cx="10" cy="10" r="10"></circle>
-                    <g id="鐕冩皵" transform="translate(6.973425, 5.709341)" fill="#FFFFFF" fill-rule="nonzero">
-                        <path d="M4.96464814,2.32197096 C5.01669441,2.58543535 5.00081589,2.85592953 4.91652249,3.13335162 C4.79027842,3.54851689 4.71284611,3.54851689 4.5787608,4.00005369 C4.55102239,3.96011632 4.37341816,3.67668325 4.52504826,3.13284222 C4.64158879,2.50362487 4.34175913,1.87155485 3.92538895,1.22308198 C3.52205484,0.593864627 2.92700226,0.119404588 2.36586307,0 L2.33802665,0 L2.34773019,0.0294436228 C2.53043123,0.989672497 2.0105566,1.49001032 1.39737113,2.04862411 C0.784185668,2.6077473 0.113857122,3.25163552 0.0114308414,4.50405924 C-0.120400113,6.15157766 0.918761058,7.31047458 1.54674687,7.84494255 C1.58409081,7.87438617 1.62202284,7.88437052 1.66377748,7.88437052 C1.72944791,7.88437052 1.78041602,7.85502877 1.81825003,7.80510706 C1.85331131,7.75072346 1.85699548,7.68077713 1.82785556,7.62273999 C1.33179871,6.27617818 2.34773019,5.40957799 2.67078954,5.17260267 C2.4037951,6.81197061 3.71504752,8.10076586 4.00742799,7.99379076 C5.20890296,7.55692483 5.98499032,6.67432931 6.1773949,5.48435868 C6.38283555,4.20829855 5.863451,2.79714416 5.00199207,2.33205718 L4.96464814,2.32197096 Z" id="璺緞"></path>
-                    </g>
-                </g>
-            </g>
-        </g>
-    </g>
-</svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/home/haoshui.svg b/energy_management_ui/src/assets/home/haoshui.svg
deleted file mode 100644
index e88e591..0000000
--- a/energy_management_ui/src/assets/home/haoshui.svg
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <title>鑰楁按閲�</title>
-    <defs>
-        <linearGradient x1="15.5954832%" y1="17.9558225%" x2="79.6918238%" y2="77.5510976%" id="linearGradient-1">
-            <stop stop-color="#4AD8FF" offset="0%"></stop>
-            <stop stop-color="#6CB6FF" offset="100%"></stop>
-        </linearGradient>
-    </defs>
-    <g id="椤甸潰-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="棣栭〉" transform="translate(-635.000000, -701.000000)">
-            <g id="1" transform="translate(224.000000, 623.000000)">
-                <g id="鑰楁按閲�" transform="translate(411.000000, 78.000000)">
-                    <circle id="妞渾褰�" fill="url(#linearGradient-1)" cx="10" cy="10" r="10"></circle>
-                    <g id="姘存淮" transform="translate(7.000000, 6.000000)" fill="#FFFFFF" fill-rule="nonzero">
-                        <path d="M3,0 C3,0 0,2.8491931 0,5.21758487 C0,6.90038954 1.34210527,8 3,8 C4.65789473,8 6,6.90038954 6,5.21758487 C5.99561403,2.8491931 3,0 3,0 Z M1.97368421,3.95325543 C1.81578947,4.34501948 1.72807017,4.71007234 1.71052632,5.04396216 C1.69298246,5.39120757 1.74561404,5.71619366 1.86403509,6.01892042 L1.86403509,6.02337229 C1.91228071,6.14357262 1.82456141,6.27267669 1.69736842,6.26822482 L1.60964913,6.26377296 C1.53947369,6.25932109 1.47807018,6.21480245 1.45175438,6.14802448 C1.3245614,5.8096828 1.2631579,5.43572621 1.28070176,5.0261547 C1.29824562,4.62993879 1.40350878,4.22481915 1.56140351,3.8196995 C1.5877193,3.74846967 1.65789474,3.70395103 1.73245614,3.7084029 L1.81578947,3.71285476 C1.93859649,3.71285476 2.01754386,3.84195882 1.97368421,3.95325543 L1.97368421,3.95325543 Z" id="褰㈢姸"></path>
-                    </g>
-                </g>
-            </g>
-        </g>
-    </g>
-</svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/home/haozhengqi.svg b/energy_management_ui/src/assets/home/haozhengqi.svg
deleted file mode 100644
index 4d8a4d0..0000000
--- a/energy_management_ui/src/assets/home/haozhengqi.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <title>鑰楄捀姹介噺</title>
-    <defs>
-        <linearGradient x1="15.5954832%" y1="17.9558225%" x2="79.2208361%" y2="77.1131843%" id="linearGradient-1">
-            <stop stop-color="#6B99FF" offset="0%"></stop>
-            <stop stop-color="#6D89FF" offset="100%"></stop>
-        </linearGradient>
-    </defs>
-    <g id="椤甸潰-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="棣栭〉" transform="translate(-832.000000, -701.000000)">
-            <g id="1" transform="translate(224.000000, 623.000000)">
-                <g id="鑰楄捀姹介噺" transform="translate(608.000000, 78.000000)">
-                    <circle id="妞渾褰�" fill="url(#linearGradient-1)" cx="10" cy="10" r="10"></circle>
-                    <g id="姘斾綋" transform="translate(6.106927, 5.398503)" fill="#FFFFFF" fill-rule="nonzero">
-                        <path d="M2.27786563,9.16994331 C2.13345487,9.16103093 2.0171181,9.07272815 2,8.9590357 L2,6.22545296 C2.00860326,6.1093024 2.12077865,6.01452001 2.2668246,6 C2.41376964,6.00680032 2.53368126,6.09546772 2.55205089,6.21090761 L2.55205089,8.94449034 C2.57009543,9.00490189 2.54546784,9.06830713 2.48764496,9.11030735 C2.42918259,9.14963795 2.35462796,9.1708323 2.27786563,9.16994331 Z M3.90503866,9.71592943 C3.80111255,9.68539156 3.72721405,9.61178628 3.71319795,9.52484991 L3.73159965,7.65235205 C3.7283125,7.57440374 3.7778852,7.50099036 3.8616442,7.45976603 C3.94540321,7.4185417 4.05062352,7.41576937 4.13766966,7.45249336 C4.22471581,7.48921734 4.28036341,7.55985839 4.28365056,7.6378067 L4.26708903,9.51030456 C4.29188342,9.5681206 4.26836516,9.63202258 4.2082036,9.67030344 C4.12574622,9.72889182 4.00896478,9.7464673 3.90503866,9.71592943 Z M5.71714273,8.82230938 C5.57049753,8.81619797 5.45040259,8.72800746 5.43191642,8.6128563 L5.43191642,7.55489819 C5.42830055,7.47694988 5.47756951,7.40339789 5.56116415,7.36194854 C5.6447588,7.32049919 5.74997911,7.31744963 5.83718961,7.35394859 C5.92440012,7.39044756 5.98035147,7.46094999 5.98396733,7.5388983 L5.98396733,8.59685641 C6.01909693,8.65569859 5.99491276,8.72599623 5.92692207,8.76267343 C5.86928553,8.80311705 5.79416526,8.8244722 5.71714273,8.82230938 Z" id="褰㈢姸"></path>
-                        <path d="M7.54185035,5.02432027 C7.28573857,5.22634846 6.95117926,5.33643064 6.60553849,5.33240094 C6.54876587,5.49156066 6.44000758,5.63290802 6.29252328,5.73921015 C5.98291655,5.98186669 5.548068,6.06235166 5.15178089,5.95034715 C4.75549377,5.83834263 4.45797353,5.55086478 4.37129317,5.19620373 C4.28461281,4.84154268 4.42194113,4.47357988 4.73154788,4.23092336 C4.87238127,4.11374088 5.0505351,4.03622336 5.24276049,4.00848674 C5.26312599,3.79784436 5.35176128,3.59655557 5.49836679,3.42801043 C5.42988837,3.38542849 5.36788516,3.33546818 5.31383818,3.27932285 C5.20496021,3.17452623 5.11840595,3.05368842 5.05823187,2.92247266 C4.6639692,3.09613486 4.21225467,3.14411447 3.78156723,3.05807573 C3.70778905,3.41322606 3.49709282,3.73587957 3.18424127,3.97280172 C2.99464081,4.1208752 2.77297386,4.23451321 2.53224016,4.30705139 C2.72608417,4.80341101 2.49437032,5.35011234 1.97658393,5.61805635 C1.45879755,5.88600036 0.796179548,5.80209771 0.387607587,5.41685548 C-0.0662442323,4.95909675 -0.0221358152,4.27080436 0.48738973,3.85979916 C0.150500324,3.53696421 -0.0240331592,3.11028934 0.00266877486,2.67482165 C0.0293707089,2.23935395 0.255090082,1.83126528 0.629545109,1.54146243 C1.13038907,1.14950944 1.83036752,1.01414428 2.47483126,1.18461224 C2.56518568,0.885547306 2.75263272,0.615466353 3.01474832,0.406678833 C3.36526826,0.126943993 3.83001903,-0.0188365672 4.3050167,0.0019542813 C4.78001437,0.0227451298 5.22561052,0.208371959 5.54210691,0.517302385 C5.74603072,0.712876532 5.88742535,0.951585833 5.9521705,1.20959175 C6.49917216,1.04523848 7.10605746,1.18644988 7.48580832,1.56644194 C7.9821946,2.03404182 7.9939805,2.75199426 7.51314589,3.23174283 L7.59925925,3.30668136 C7.86539183,3.53577891 8.01031181,3.85072896 7.99942833,4.17635622 C7.98854484,4.50198349 7.8228344,4.80907103 7.54185035,5.02432027 Z" id="璺緞"></path>
-                    </g>
-                </g>
-            </g>
-        </g>
-    </g>
-</svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/home/homeiconD.png b/energy_management_ui/src/assets/home/homeiconD.png
deleted file mode 100644
index 7cd6a20..0000000
--- a/energy_management_ui/src/assets/home/homeiconD.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/homeiconDQ.png b/energy_management_ui/src/assets/home/homeiconDQ.png
deleted file mode 100644
index b92ab7b..0000000
--- a/energy_management_ui/src/assets/home/homeiconDQ.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/homeiconJ.png b/energy_management_ui/src/assets/home/homeiconJ.png
deleted file mode 100644
index 76601fa..0000000
--- a/energy_management_ui/src/assets/home/homeiconJ.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/homeiconT.png b/energy_management_ui/src/assets/home/homeiconT.png
deleted file mode 100644
index 7f8ab87..0000000
--- a/energy_management_ui/src/assets/home/homeiconT.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/homeiconW.png b/energy_management_ui/src/assets/home/homeiconW.png
deleted file mode 100644
index 96b723d..0000000
--- a/energy_management_ui/src/assets/home/homeiconW.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/homeiconY.png b/energy_management_ui/src/assets/home/homeiconY.png
deleted file mode 100644
index ba6dc10..0000000
--- a/energy_management_ui/src/assets/home/homeiconY.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/homeicontitle.png b/energy_management_ui/src/assets/home/homeicontitle.png
deleted file mode 100644
index e882f61..0000000
--- a/energy_management_ui/src/assets/home/homeicontitle.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/shi.png b/energy_management_ui/src/assets/home/shi.png
deleted file mode 100644
index ac007e6..0000000
--- a/energy_management_ui/src/assets/home/shi.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/statistic.png b/energy_management_ui/src/assets/home/statistic.png
deleted file mode 100644
index 1d1def1..0000000
--- a/energy_management_ui/src/assets/home/statistic.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/tan.svg b/energy_management_ui/src/assets/home/tan.svg
deleted file mode 100644
index 66c21e8..0000000
--- a/energy_management_ui/src/assets/home/tan.svg
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="83px" height="83px"
-     viewBox="0 0 83 83" enable-background="new 0 0 83 83" xml:space="preserve">  <image id="image0" width="83"
-                                                                                         height="83" x="0" y="0"
-                                                                                         href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFMAAABTCAYAAADjsjsAAAAABGdBTUEAALGPC/xhBQAAACBjSFJN
-AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAA
-CXBIWXMAAC4jAAAuIwF4pT92AAARv0lEQVR42s2da28b15mAn5khqQspibIsybLTRIqtJIqZRt4u
-tt0CRVxgv8f5BbF/wLZ2sAgWiwKNsdiiMBZ1sh/81c4vSPIHtgqw2y6yF6utcrOjWI5t+aYLdaPE
-y8zph/eMODOcIYfk0NsXICTOnDmXZ95z3ve858zQOH36NL2Ql95dipXOGmAemEcxDbyhDPLAfGhi
-x/dtEdhCsQDcBRadCouAareut64UEmlzKpFctMQBaA0wDZwF3tR/87Ga7zQcmdfXvQGgFBhpihru
-J8CCqrGSZPtaSaIwo8TKkgfO4fA2ArAuHpDKiMjACTnmvU4dHpNy4JwygBQLwIfAx9Qo9rqdZi8z
-t7JMW1muAndwuE5vQYalOQtcB+6Q4iom071sb09gaojSCLiIQ74pkDCQijpIFfg0yYvwJHkcLgJ3
-MLneK6iJwrSy5K0s7wE3gfNAa80yQs65IIPwAlBVCNwYw+954CYm72GG3OQuJDGYc5eXzmqIv4Qm
-lWwFMsZ1EAEy/lCR1/W8iRkYeroQIwnXaO7y0lXgYstGRIFU8a+DEJCGzi/sZoT1jMY07wOXb10p
-FLvh0BXMuctL08BHhPmF3YJUHnBE53WYnwKMiLyaST3NIvDWrSuFlU55dNzNPd16vkkFGxof2RW9
-1+nxUDmEj5kE8guz6O2BRLfj5uy7S2c7ZdIRzLnLS+eB3xI2NrYD0gvB1hCdkG4cNEiuAQoC9KZt
-D6R7aR747ey7S+efCUwN8nrcCkaCDGl8VJdWwQ9NxsjOZlPBy653ArQtmG2DdMc9IyK9an5dpPZ5
-y1Mh1zWT1iDddNdn/6E9oLFhJgpSNV532LU1ZFcLm2qf969Da5jxQbrSFtBYMLWxSQZknOuCoDyf
-VJST30raB+l+vz77Tjyj1BKmx/1pC0ikhHRtrwY2gAyIZbYoI2YALhbIunw0+87SdKs842jmR8Sx
-2oEaxp2NhFruCDEMqDnx0jYtM0aawLE8UQrlkaYw9cxmPlbBnUSAvCDdMbJJi5U3TRPtbVZmByDd
-C+dnLy1dbVZUJEw9Tl5MFGTYtDDYwrhjYBxJDqQrF2cvRY+foTDnLi/lCTM4SWlkyPWqWfduBa3z
-OXkn112fvbSUDzsRpZkXIUbML+40MU7jXTGaJ1etrjGIZ7njgmwscJqwHksITG29f96yoHbn24Hr
-vJqokurWEUASBImSCNXPT4VY9zDNbIxHJgyy0zHRMELAN4tAkSxIj+Q1J5/4YGqtPB8LCF2AbGMJ
-wlfZYHnPGGSgvedPXfRrZ1Az/d07SZBRyw0q3MAYLcbOVidiKX/nIMEBFeB1CFNb8PNNC+oEpLeC
-hqeuwVmPRwyjEXBDkQbhF0fxcFp8bx8kwPmTF+uW3btufg53rOxivp3LwMwoTOXgyCBMZuWTH4Ca
-DY924OEOPN2DxzuwugNPd+Gg5m+ME2iYZcHxIXg+D+NZGMtJGRM56EtBcR8ebMPjXXiyC6vbUtbm
-fs9AonmdA24EYb7dLciBNDw/AqfH4cQwjPTBkQEYG4S0JckG0zDcD5M5OJYT+NWaNBzqWulb4jEk
-7dwknBqD0QEY6YfxHAz3SZrRQcj2SVlTQ3IjUyaUylB2/PVMCKSb19s+mNrwnO0UpKEgY8GpI/DD
-EzA/JRAtE6zAdfkBGNFaelCDY0NyvGrDeknXUZdpAKYpGvnD5+EHz8ELo5A25bg3a0sDn8iCreDF
-XRjKQLkGd9Yl/3YMXkuQdTl78mdL08v/VlhxNfNsRxEgDXK4D6bz8DcnYP6YaJ1XtsuwW4b+tEA2
-EE1NW/DSOFQdqNjwv/dhv1a/ri8FM0fg9ePwgxPSxV0NB9gpw0ZJgh/9acj3QzYDFnBiRNLYemxe
-Xgfbxq/23YD08zoL3EjpE282A9lsmmiaMNoPhQn4/qQfpKPg3pY0ZOtAuvSpMZgckiHBQLr93LiA
-ub8F323KchDAYAZeOwZ/+4IMG65rVLFhfQ9urcnYWLMF5vFhOHVUxlFDA1XIeLq2B5sl7UlEzJI6
-BAmKN+swu9gDZBkyfh3X45Q3i7US3FyF392Fg6oA/K4If3UCXp0QzQPI9cELeflslqB4oI9n4PlR
-P0jbgXtF+MNDWFwVqI6SIeU5rY3ZtOQJMozMHIFv12G/AvtV6svCrTYxxAN5yC8198ulebwznjYD
-F5YpY9P4oD8KflAVcF8+Ec10s96rCPSXj/qzHOkXTVrZhK2y+GyjA9J1vc561REN/uNDydv21KVU
-helRmD4i3d0wxAhNDcsQ8WhbwwyRLkAC5E/+/dK8iTde2UEEaFCPVUezOgqupXgAdzbg0a4nayVd
-bms/EORFtHYiJwYqZda/ZzP+dLYjXfbRjh+kewOLB7B94M//6KBouKuth2J0AbJR5k3c6FCHEaCR
-PtGq/sBOz50y3N8WP8+7FFG25VzZ9qfPZsR/HOoTmNk+uUF9gXyVkuu3D8Lrs18V7ffCHOoT7cxl
-GtN3DDIkmpQC3uhmmjiUgYFUY977VXF1div+47YjgO8XRftM7VdWbTEsjpLuOZgWwF7rDWKdyzX5
-hEnFlnO2p0JpS3pPJnhj4kCLA1LSvJHSu207AgmiRWbIYF51YKdCqPuxtgf/tyqWGE8kaOtAZkZK
-iS+ZMhunkVVbPlEuo+3IJxhdOqxn1DTUCTkcHyRAPoUeMzuKACGa5IS0zFYys2mogB43/7gKX6Xk
-WqWkoQrR5poj3x3VWPeyLTeqXXFUoBkmjGRkAjGQFt9UIWXvlmG7BHvlQPnN/e75VDcgoUlgN2wT
-gf5/ryqzH9+yriEAbUe6uRlRp3Kt0XjFEW9ZCvGHX5+CwjHtl+qb6ThwbxMWH8AXD8VYttxVoiXV
-dgQoCDJu/DEQWa8Fr1N1Z93ScINhOFuJxe4EptsDLFNcszMnZDLwyoT0/PWSDAXjObH8A2koV+Hu
-JqztxGCjmj1tEWdjftyIeSBdk+hZU7H1tNPuEKatBNLpSfjJDMyOy4350yp8/kiM6Y+m4Xuj8Npx
-GY76UiEwo+xHUiBDwUTNfeMSSHBtyFHShQfT8OIYvHpMburKOvznHfh8VSJOQ30wPCBRqLlJufZ3
-37YGGQ4zSY10xWPt3a7bahEtbPSxDHFzrE636Oqhw7a1Y2/DracCdG1X6vRgS6a0w/0CdMIbtGnR
-I/wwO9HIdpZ4NSSnBciooI5pyuQg1QFMUxu1vbIESBTibTzcrnsdrmeitBa7blgcNn6YcR9eCoJs
-AibqVK5PIk3ZjAByEx/UYGNfZjCuVQ/eiFYwozqOach8f68CXz2BB0VQjhwr1+T8cL8ERvIDUq/N
-kkTt44Yn3RBcPJCqdYatxFHilvx4GmbHxCCAwFvdlgjTF4/F0ITdwL4WML1+eQNMU8rfKEGxJO22
-dJ0GMxJ4PnlUoFZqsLoF9zbigRSYDosEN2fFiEi7Xy2zPiUMa1iYZDMSTC4cawS19KiukWH5pi2J
-6luGf8rolmcZUqegVrszIPcG2Y7AtBHHvXAMfjQD02MC9+4GfPUIVtbigQQWUxB4QDPMKW9iuasR
-rkrarGvdYUv1hY4Sl6Rq1+fetiPTyVK1PnbVQoIOpiHQM6nwcFomJeeDyyU+l8qziWwsC98/AT85
-Ke5Q2oI7a/DZHYH52OsWNe+JRRP4tFOQIGPc1kGjlvSnJR7ZH+J8KR3M8Bqi/apEgw5q0ujdiuRb
-CQQ0DA2zL8JDTltSptfil6qyAnoYGNYy3A9//Tz83ctQmBKN39yDP9yHz+7C421P+a2HtE9N0M9k
-xwEZ0m839mUM2g3MY3MZHfZyY4ieRbJcn/hz3ohQ1dVMbXy2D2QMLQW0zzJkBjM22FiXTEpu4HB/
-ILa6DysbsL1fr0t/Cl6agB/PCMiUKcHjz1bgf+7C3XXR5pggAVZMYDE2yJBMK1WB8GTPHxYb7pOo
-90TWf93kkCxPjA36p5ulqgR8N/ZFY6t6jb247y8vY0nUfPaoPz5pIEu806MSB3XzVohWfrepY6C6
-q8+MyWznpQn5/ngHfv8t/PvX8M1Tb8NjgQRYTH31z4XFV36xVEQvXbQDEgewBOaDLVmDcbv1oN6M
-MH9cGlZzBMSLR+DVSQkoe2WnLJp4GFhA8n20I13eBWeZsnD2+pQMCY+2pRpDffDKuMAc9IzVu2XR
-yrsbovVpS7T3tSk4PQUDGbHaN++JRi4/lZ5xGLKjcagJkeLytcKiO/IsAOfaBolA2tiHO5uycJXv
-r2vQcyNiuecmJECRtiSaPjrYuGR7vyja4Q2vlarwzbrAm5us36iRfjh9TDRwc18an83IbMXb/UsV
-uP0UvnoMq0XR9tEByev0lPQS25FyH2zK+eN5PcvSTn7VFsAtZAHqTvsnSnGuXZCuJu+U4faaNGQg
-Bc/l62vjE7nAlCx4S/fh88ey0rgR6NKVGnyzJlpiK3h5XDQQRFNzY/K/rRqt935VFtz+Y1m6bVlv
-Qshl4NQ4vHCkPq6OZ+HVKfjeEe126aB0qSL2IAbMTw5hKsVCJyBdKddkfTx1vx7NnsjWd3R4fT43
-ZlhzBOSXT+C/voMvH8tSrNexrDmyL6lUFWNQsaEwKTcp5UbiDSnDzbfqSC9YXoffr8B/35MppFt4
-xqov0tmOjM9Hc5DXGm1Qr+9mCe5vtgQJXs38+l8KKy//09ICev23k2e3aw58tyWaWqnJWvdARiqe
-y4jP6Vrp3Yr8fbAFX6/JeLZdrjfGV6SSrvynh9IDltelm+f7xarnB8Sn3a3IkkdRexd312F5DXYP
-dFN03R0dSb9f1K6vjnGmLb9BNA3R7qilYS/I5WvyWLXXW/sQONvNQ/DligQOMqas8wxpF2hkQIxC
-TS+mbZX0otqWDP7ulphmMZMtPZQ83ZMtNkezMnwczYq2bR/ILrj1PbHeT3Zk05YK1L2sjVbNrmum
-YTRuVHWHgN0DWsmH7j9emB8rg6veBbZ2QLqyV4Evnsgn1j7JmFEnpSTvvYpodPCc/FP//3CpIbBs
-sroFq2Fdt7PYaRH42P1yeEO+/lWhiJKtcR2B7PSZG6+0Gc6LAuJbswn+7XCDWoTcWL5WfxVFULs/
-aKvxEenaAplUND342h4dyPBpZ7IgIcDLB/PWrwor6I2bPQcZIzIVS7ywmkFLHuQN1/C4EhYZvIwT
-81VfST1O1+T6pj0/7g1JHmQRuBw82ABTa+cHLbPr9nG6MI0KEdNsDtT3cBb0eox05YOgVkL0437v
-Q5M3/CX9FJgHbHBKmzajVz5VSB4+oL0BuaL5NEgozFu/LhSBC88EZDMgyrOgFUzT4iaEvmYiGWN3
-wWvBW8LUQBcI3oEeP5fo7aIuG3cTlvIci3rm3Peej2AZyYB8f/laYSHqZMs3br30j0s3gfmegfSs
-gCmjDVfTq5XBXW9BlygZkIvL1wpnmiWIswL9Vph1j1W/OBrp7dqEj4NRH/etXA0gvRklA7IIvNUq
-UUuYt35dWAlmFMsFaufhJS886oBUFERHPkSBdJqX14G8FWa924YJcOtKYQFtkBIHGdwp5wR6qNP4
-cSGqsDKTB3mh2TjZNkwN9IYKs/BJP5fo9RudEMVUhI/VUYane5A34iZua9fO7SuFG3iBxnHc2wHp
-pnfn1a3yctNG7YnpTtoCCR28WO8QaHtvXfEfjvuEQzMD5OAPZrQos9cgocNXPmqgP8W7GyRpkG4e
-YREgr0bGKLMNKQI/7QQkdPEy0tv/WlgAzgCLPQHZLK/eTBMXgTNxjU2YJPLO4dl3PO8cThJkWH69
-Afn+8rXCpW4zSeRt2Ld/U7iEdPuVsPN/wSBXkG7dNUhI8NXit39TWEBxBonzFQ/b+pcJsqjr2VW3
-DkqiL72/fbVQvH218B4ylt4IA9kgzx7kDeCMleM9K5fs71305OcYjDQrRpoLwAwSeSom8DhddJrW
-UtT1mLFyXLByvfk1lp7+UIiZYsVMcQmHGeCC0jsfuoLUHsgFZJIxY+W41CuIrjyTn7AxMxSR7nXD
-rjCNw1m8vwcUBSmmy+WRItR/D6jX8IKSiGvUjZz82dI8innkufc3QP9SVWuQiwi8TxGrvLh8rbD4
-/9mWPwNJmgw8gGnkQAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMi0wOC0wNVQwOTo0MjoxOSswMjow
-MJG2S3AAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjItMDgtMDVUMDk6NDI6MTkrMDI6MDDg6/PMAAAA
-AElFTkSuQmCC"/>
-</svg>
diff --git a/energy_management_ui/src/assets/home/wen.png b/energy_management_ui/src/assets/home/wen.png
deleted file mode 100644
index 6d6033b..0000000
--- a/energy_management_ui/src/assets/home/wen.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/home/zonghe.svg b/energy_management_ui/src/assets/home/zonghe.svg
deleted file mode 100644
index 4feaf72..0000000
--- a/energy_management_ui/src/assets/home/zonghe.svg
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <title>缁煎悎</title>
-    <defs>
-        <linearGradient x1="15.5954832%" y1="17.9558225%" x2="80.8468413%" y2="78.6250058%" id="linearGradient-1">
-            <stop stop-color="#FF944A" offset="0%"></stop>
-            <stop stop-color="#FF674A" offset="98.2298951%"></stop>
-        </linearGradient>
-    </defs>
-    <g id="椤甸潰-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="棣栭〉" transform="translate(-295.000000, -273.000000)">
-            <g id="1" transform="translate(224.000000, 190.000000)">
-                <g id="缁煎悎" transform="translate(71.000000, 83.000000)">
-                    <circle id="妞渾褰�" fill="url(#linearGradient-1)" cx="12" cy="12" r="12"></circle>
-                    <path d="M16.0896819,15.464859 L16.0896819,15.5937093 C16.0884698,15.6602227 16.0787336,15.7261604 16.0607911,15.7893709 L15.6810834,18.5 L18.5,13.2505423 L16.4363715,13.2505423 C16.2197451,13.2159406 16.0640623,12.9919726 16.0814274,12.7399132 L16.0814274,12.6110629 C16.0820244,12.5394082 16.0931906,12.4683965 16.1144454,12.4010846 L16.494153,9.7 L13.7,14.9542299 L15.7636285,14.9542299 C15.9686436,15.004086 16.108832,15.2236338 16.0896819,15.464859 L16.0896819,15.464859 Z" id="璺緞" fill="#FFFFFF" fill-rule="nonzero"></path>
-                    <path d="M12.5510395,17 C12.8137542,17.0374383 13,17.1827663 13,17.3503249 C13,17.5178834 12.8137542,17.6632114 12.5510395,17.7006497 C11.1849262,17.8953283 10.4916854,17.9959799 10,18.0050985 C9.42346464,18.0157908 9.0720413,17.9028178 7.4611281,17.7006497 C7.19289028,17.6669861 7,17.5204449 7,17.3503249 C7,17.1802048 7.19289028,17.0336636 7.4611281,17 L12.5510395,17 Z M11.4384557,13.6311719 C11.7219018,13.6846056 11.9228447,13.8920245 11.9228447,14.1311719 C11.9228447,14.3703194 11.7219018,14.5777383 11.4384557,14.6311719 L7.42036146,14.6311719 C7.13095637,14.5831257 6.92284466,14.3739753 6.92284466,14.1311719 C6.92284466,13.8883686 7.13095637,13.6792181 7.42036146,13.6311719 L11.4384557,13.6311719 Z M12.5,10.2088204 C12.7627147,10.2622541 12.9489605,10.469673 12.9489605,10.7088204 C12.9489605,10.9479678 12.7627147,11.1553868 12.5,11.2088204 L7.41008858,11.2088204 C7.14185076,11.1607742 6.94896049,10.9516237 6.94896049,10.7088204 C6.94896049,10.4660171 7.14185076,10.2568667 7.41008858,10.2088204 L12.5,10.2088204 Z M17.5578514,7 C17.8279395,7.02868384 18.0234118,7.25026389 17.9976676,7.49855907 C18.0236088,7.74645479 17.8302833,7.96845368 17.5609929,8 L7.44521854,8 C7.17339855,7.97130701 6.9765258,7.74844143 7.00226072,7.49855907 C6.97833442,7.24974502 7.17473188,7.02869523 7.44521854,7 L17.5578514,7 Z" id="褰㈢姸缁撳悎" fill="#FFFFFF"></path>
-                </g>
-            </g>
-        </g>
-    </g>
-</svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/checkbox.png b/energy_management_ui/src/assets/icons/checkbox.png
deleted file mode 100644
index 498f98e..0000000
--- a/energy_management_ui/src/assets/icons/checkbox.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/icons/checked.png b/energy_management_ui/src/assets/icons/checked.png
deleted file mode 100644
index 4624643..0000000
--- a/energy_management_ui/src/assets/icons/checked.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/icons/index.js b/energy_management_ui/src/assets/icons/index.js
deleted file mode 100644
index 2c6b309..0000000
--- a/energy_management_ui/src/assets/icons/index.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import Vue from 'vue'
-import SvgIcon from '@/components/SvgIcon'// svg component
-
-// register globally
-Vue.component('svg-icon', SvgIcon)
-
-const req = require.context('./svg', false, /\.svg$/)
-const requireAll = requireContext => requireContext.keys().map(requireContext)
-requireAll(req)
diff --git a/energy_management_ui/src/assets/icons/svg/2020-03-23-a204691ac2cdafde1a9a405f9b5cf8ca.svg b/energy_management_ui/src/assets/icons/svg/2020-03-23-a204691ac2cdafde1a9a405f9b5cf8ca.svg
deleted file mode 100644
index bdcf765..0000000
--- a/energy_management_ui/src/assets/icons/svg/2020-03-23-a204691ac2cdafde1a9a405f9b5cf8ca.svg
+++ /dev/null
@@ -1,1204 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="鍥惧眰_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1330.6 650.3" style="enable-background:new 0 0 1330.6 650.3;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#F0EEED;}
-	.st1{font-family:'SimHei';}
-	.st2{font-size:36px;}
-	.st3{fill:none;stroke:#993333;stroke-width:3;stroke-miterlimit:10;}
-	.st4{fill:none;stroke:#663333;stroke-width:1.5;}
-	.st5{fill:#FFFFFF;stroke:#663333;stroke-width:1.5;}
-	.st6{fill:none;stroke:#663333;stroke-miterlimit:10;}
-	.st7{stroke:#663333;stroke-miterlimit:10;}
-	.st8{fill:#FFFFFF;}
-	.st9{font-size:10.6699px;}
-	.st10{font-family:'TimesNewRomanPSMT';}
-	.st11{font-size:9.1456px;}
-	.st12{font-size:16.0048px;}
-	.st13{fill:none;stroke:#CA9B33;stroke-width:5;stroke-miterlimit:10;}
-	.st14{font-size:13.7184px;}
-	.st15{fill:#FB5C5C;}
-	.st16{font-size:18px;}
-	.st17{font-size:17.0812px;}
-	.st18{fill:#8B0000;stroke:#8B0000;stroke-miterlimit:10;}
-	.st19{fill:#3A1BF4;}
-	.st20{font-size:12.8951px;}
-	.st21{fill:none;stroke:#99CC99;stroke-miterlimit:10;}
-	.st22{fill:none;stroke:#666666;stroke-miterlimit:10;}
-	.st23{fill:none;stroke:#663333;}
-	.st24{fill:#FFFFFF;stroke:#663333;stroke-width:0.5;stroke-miterlimit:10;}
-	.st25{font-size:2.5668px;}
-	.st26{fill:none;stroke:#663333;stroke-width:0.5;stroke-miterlimit:10;}
-	.st27{stroke:#663333;stroke-width:1.5;}
-	.st28{fill:none;stroke:#663333;stroke-width:0.5;}
-	.st29{fill:none;stroke:#037400;stroke-width:1.5;}
-	.st30{stroke:#663333;stroke-width:0.5;stroke-miterlimit:10;}
-	.st31{fill:none;stroke:#663333;stroke-width:2;stroke-miterlimit:10;}
-	.st32{font-size:3.0882px;}
-	.st33{fill:none;stroke:#28B400;stroke-miterlimit:10;}
-	.st34{fill:#FFFFFF;stroke:#0A26FF;stroke-miterlimit:10;}
-	.st35{fill:#FFFFFF;stroke:#999966;stroke-miterlimit:10;}
-	.st36{fill:none;}
-	.st37{font-size:14.0625px;}
-	.st38{font-size:13.3828px;}
-	.st39{font-size:13.1666px;}
-	.st40{font-size:12.1669px;}
-	.st41{font-size:14.1138px;}
-	.st42{font-size:11.6694px;}
-	.st43{font-size:12px;}
-	.st44{font-size:13.72px;}
-	.st45{fill:#037400;stroke:#037400;stroke-miterlimit:10;}
-	.st46{fill:none;stroke:#0E5500;stroke-width:1.5;}
-	.st47{fill:none;stroke:#8B0000;stroke-width:1.5;}
-	.st48{fill:none;stroke:#025F00;stroke-width:1.5;}
-	.st49{fill:#FFAD3F;stroke:#FFAD5B;stroke-miterlimit:10;}
-	.st50{fill:#FFAD5B;stroke:#FFAD5B;stroke-miterlimit:10;}
-	.st51{fill:#00FF00;stroke:#00FF00;stroke-miterlimit:10;}
-	.st52{fill:none;stroke:#0A26FF;stroke-width:0.5;stroke-miterlimit:10;}
-</style>
-<polyline class="st0" points="0,-2.2 1330.6,-2.2 1330.6,647.8 0,647.8 "/>
-<text transform="matrix(0.8161 0 0 1 19.0127 37.5732)" class="st1 st2">鐢靛姏绯荤粺鑳芥祦鍥�</text>
-<line class="st3" x1="58.5" y1="342.8" x2="854.8" y2="342.8"/>
-<line class="st4" x1="193.6" y1="400.2" x2="193.6" y2="410.1"/>
-<line class="st4" x1="193.6" y1="371.5" x2="193.6" y2="381.9"/>
-<line class="st4" x1="193.6" y1="343.8" x2="193.6" y2="367.2"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="193.6" y1="375.2" x2="188.4" y2="382.4"/>
-	<line class="st4" x1="199.2" y1="382.4" x2="193.3" y2="375.2"/>
-	<line class="st4" x1="193.6" y1="380" x2="188.4" y2="387.2"/>
-	<line class="st4" x1="199.2" y1="387.2" x2="193.3" y2="380.1"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="193.3" y1="424.4" x2="198.6" y2="417.1"/>
-	<line class="st4" x1="187.8" y1="417.1" x2="193.6" y2="424.3"/>
-	<line class="st4" x1="193.3" y1="419.5" x2="198.6" y2="412.3"/>
-	<line class="st4" x1="187.8" y1="412.3" x2="193.6" y2="419.5"/>
-</g>
-<rect x="170" y="434.4" class="st5" width="10.1" height="18.2"/>
-<line class="st6" x1="174.7" y1="435.1" x2="171.4" y2="444.9"/>
-<line class="st6" x1="171.4" y1="444.9" x2="178.3" y2="444.9"/>
-<line class="st6" x1="178.3" y1="444.9" x2="174.7" y2="435.1"/>
-<line class="st6" x1="174.7" y1="440.5" x2="174.8" y2="462.9"/>
-<line class="st6" x1="174.8" y1="422.1" x2="174.8" y2="433.7"/>
-<line class="st6" x1="171.4" y1="462.9" x2="178.3" y2="462.9"/>
-<line class="st6" x1="172.3" y1="465" x2="177.5" y2="465"/>
-<line class="st6" x1="173.6" y1="467.4" x2="175.7" y2="467.4"/>
-<path class="st7" d="M212.4,422.1"/>
-<path class="st7" d="M203.8,442.1"/>
-<line class="st4" x1="431.4" y1="370.6" x2="431.4" y2="409.6"/>
-<line class="st4" x1="431.4" y1="343" x2="431.4" y2="366.3"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="431.4" y1="374.3" x2="426.1" y2="381.5"/>
-	<line class="st4" x1="437" y1="381.5" x2="431.1" y2="374.4"/>
-	<line class="st4" x1="431.4" y1="379.1" x2="426.1" y2="386.4"/>
-	<line class="st4" x1="437" y1="386.4" x2="431.1" y2="379.2"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="431.1" y1="423.5" x2="436.3" y2="416.3"/>
-	<line class="st4" x1="425.5" y1="416.3" x2="431.4" y2="423.4"/>
-	<line class="st4" x1="431.1" y1="418.7" x2="436.3" y2="411.4"/>
-	<line class="st4" x1="425.5" y1="411.4" x2="431.4" y2="418.6"/>
-</g>
-<line class="st4" x1="492.6" y1="342.9" x2="492.6" y2="366.2"/>
-<line class="st6" x1="480.1" y1="421.2" x2="510.3" y2="421.2"/>
-<line class="st4" x1="683.7" y1="342.7" x2="683.7" y2="366"/>
-<line class="st4" x1="790.8" y1="343.1" x2="790.8" y2="366.4"/>
-<line class="st4" x1="1038.8" y1="343" x2="1038.7" y2="368.6"/>
-<text transform="matrix(1 0 0 1 189.0005 334.0032)" class="st8 st1 st9">36</text>
-<text transform="matrix(1 0 0 1 189.0005 334.0032)" class="st6 st10 st9">36</text>
-<text transform="matrix(1 0 0 1 274.8379 334.0032)" class="st8 st1 st9">34</text>
-<text transform="matrix(1 0 0 1 274.8379 334.0032)" class="st6 st10 st9">34</text>
-<text transform="matrix(1 0 0 1 350.3413 334.0032)" class="st8 st1 st9"> 浜�03</text>
-<text transform="matrix(1 0 0 1 350.3413 334.0032)" class="st6 st10 st9"> </text>
-<text transform="matrix(1 0 0 1 353.0413 334.2049)" class="st6 st1 st9">浜�</text>
-<text transform="matrix(1 0 0 1 363.6413 334.0032)" class="st6 st10 st9">03</text>
-<text transform="matrix(1 0 0 1 420.9443 334.0032)" class="st8 st1 st9"> 30</text>
-<text transform="matrix(1 0 0 1 420.9443 334.0032)" class="st6 st10 st9"> 30</text>
-<text transform="matrix(1 0 0 1 491.1338 334.0032)" class="st8 st1 st9">35</text>
-<text transform="matrix(1 0 0 1 491.1338 334.0032)" class="st6 st10 st9">35</text>
-<text transform="matrix(1 0 0 1 559.7627 334.0032)" class="st8 st1 st9">39</text>
-<text transform="matrix(1 0 0 1 559.7627 334.0032)" class="st6 st10 st9">39</text>
-<text transform="matrix(1 0 0 1 783.3477 334.0032)" class="st8 st1 st9">37</text>
-<text transform="matrix(1 0 0 1 783.3477 334.0032)" class="st6 st10 st9">37</text>
-<text transform="matrix(1 0 0 1 680.668 334.0032)" class="st8 st1 st9">31</text>
-<text transform="matrix(1 0 0 1 680.668 334.0032)" class="st6 st10 st9">31</text>
-<text transform="matrix(1 0 0 1 933.835 334.6379)" class="st8 st1 st9">233</text>
-<text transform="matrix(1 0 0 1 933.835 334.6379)" class="st6 st10 st9">233</text>
-<text transform="matrix(1 0 0 1 1031.54 334.6379)" class="st8 st1 st9">237</text>
-<text transform="matrix(1 0 0 1 1031.54 334.6379)" class="st6 st10 st9">237</text>
-<text transform="matrix(1 0 0 1 1108.1162 335.0032)" class="st8 st1 st9">234</text>
-<text transform="matrix(1 0 0 1 1108.1162 335.0032)" class="st6 st10 st9">234</text>
-<text transform="matrix(1 0 0 1 1182.043 334.5217)" class="st8 st1 st9">236</text>
-<text transform="matrix(1 0 0 1 1182.043 334.5217)" class="st6 st10 st9">236</text>
-<text transform="matrix(1 0 0 1 44.874 46.3831)" class="st8 st1 st11">  </text>
-<text transform="matrix(1 0 0 1 44.874 46.3831)" class="st6 st1 st11">  </text>
-<text transform="matrix(1 0 0 1 339.957 60.4106)" class="st1 st12"> 110kv</text>
-<text transform="matrix(1 0 0 1 402.9 60.4109)" class="st1 st12">姣嶇嚎</text>
-<line class="st13" x1="241.6" y1="41.6" x2="759.4" y2="41.6"/>
-<text transform="matrix(1 0 0 1 58.0015 74.5823)" class="st8 st1 st11">  </text>
-<text transform="matrix(1 0 0 1 58.0015 74.5823)" class="st6 st1 st11">  </text>
-<text transform="matrix(1 0 0 1 63.0835 74.5823)" class="st8 st1 st12">                   </text>
-<text transform="matrix(1 0 0 1 63.0835 74.5823)" class="st6 st1 st12">                   </text>
-<text transform="matrix(1 0 0 1 147.5703 75.5823)" class="st1 st14">110kv</text>
-<text transform="matrix(1 0 0 1 184.1768 75.9338)" class="st1 st14">渚х數鍘�</text>
-<text transform="matrix(1 0 0 1 159.7 92.7003)" class="st1 st14"> Ua</text>
-<text transform="matrix(1 0 0 1 163.0015 108.5061)" class="st1 st14">Ub</text>
-<text transform="matrix(1 0 0 1 163.0015 123.9702)" class="st1 st14">Uc</text>
-<text transform="matrix(1 0 0 1 279.7454 231.0806)" class="st1 st14"> Uab</text>
-<text transform="matrix(1 0 0 1 279.7454 248.5416)" class="st1 st14"> Ubc</text>
-<text transform="matrix(1 0 0 1 279.7454 266.0045)" class="st1 st14"> Uac</text>
-<text transform="matrix(1 0 0 1 616.3359 70.7708)" class="st1 st14">110kv</text>
-<text transform="matrix(1 0 0 1 652.9424 70.1233)" class="st1 st14">渚х數娴佸強鍔熺巼</text>
-<text transform="matrix(1 0 0 1 620.6699 91.3489)" class="st1 st14">Ia   </text>
-<text transform="matrix(1 0 0 1 620.6699 105.8303)" class="st1 st14">Ib   </text>
-<text transform="matrix(1 0 0 1 621.6699 121.5969)" class="st1 st14">Ic     </text>
-<text transform="matrix(1 0 0 1 627.6699 137.0774)" class="st1 st14">P   </text>
-<text transform="matrix(1 0 0 1 627.6699 153.5393)" class="st1 st14">Q    </text>
-<text transform="matrix(1 0 0 1 617.6699 169.0502)" class="st1 st14">cos   </text>
-<text transform="matrix(1 0 0 1 562.7197 217.1656)" class="st1 st14">涓诲彉娌归潰娓╁害</text>
-<text id="ZB_wd" transform="matrix(1 0 0 1 645.0308 217.4094)" class="st15 st1 st14">15###.##</text>
-<text transform="matrix(1 0 0 1 707.1167 217.1656)" class="st1 st14">搴�</text>
-<text transform="matrix(1 0 0 1 562.7197 233.6276)" class="st1 st14">涓诲彉缁曠粍娓╁害</text>
-<text transform="matrix(1 0 0 1 632.0308 233.8713)" class="st15 st1 st14">  16###.##    </text>
-<text transform="matrix(1 0 0 1 707.1167 233.6276)" class="st1 st14">搴�</text>
-<text transform="matrix(1 0 0 1 588 251.0002)" class="st1 st14">涓诲彉妗d綅</text>
-<text id="ZB_dw" transform="matrix(1 0 0 1 644.5938 251.3342)" class="st15 st1 st14">17###.##</text>
-<text transform="matrix(1 0 0 1 707.3607 251.0905)" class="st1 st14">妗�</text>
-<text transform="matrix(0.7963 0 0 1 271.8271 30.6133)" class="st1 st16">褰撴棩绱鐢ㄧ數閲�</text>
-<text id="ZD_ds" transform="matrix(1.0741 0 0 1 389.3999 30.6133)" class="st15 st1 st17">1######.##</text>
-<line class="st6" x1="462.1" y1="90.3" x2="469.8" y2="90.3"/>
-<line class="st6" x1="463.1" y1="92.7" x2="468.9" y2="92.7"/>
-<line class="st6" x1="464.6" y1="95.4" x2="466.9" y2="95.4"/>
-<line class="st6" x1="505" y1="64.6" x2="487.8" y2="64.6"/>
-<line class="st6" x1="496.4" y1="84.1" x2="479.2" y2="84.1"/>
-<line class="st4" x1="496" y1="43.6" x2="496" y2="306.8"/>
-<line class="st6" x1="479.4" y1="90.4" x2="479.4" y2="77.9"/>
-<line class="st6" x1="473.3" y1="84.3" x2="476.8" y2="77.9"/>
-<line class="st6" x1="465.9" y1="84.2" x2="473.3" y2="84.3"/>
-<line class="st6" x1="465.9" y1="90.5" x2="465.9" y2="84.3"/>
-<rect x="490.4" y="101.2" class="st18" width="11.8" height="21.4"/>
-<text transform="matrix(0.8166 0 0 1 144.4053 550.6924)" class="st19 st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 144.4053 566.9219)" class="st19 st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 144.4053 583.6611)" class="st19 st10 st20">Ic</text>
-<text id="AH00_ia" transform="matrix(0.8166 0 0 1 156.0889 551.6924)" class="st19 st10 st20">30A###.##</text>
-<text id="AH00_ib" transform="matrix(0.8166 0 0 1 156.0889 567.3301)" class="st19 st10 st20">31B###.##</text>
-<text id="AH00_ic" transform="matrix(0.8166 0 0 1 156.0889 583.6611)" class="st19 st10 st20">32C###.##</text>
-<line class="st4" x1="101.2" y1="416.6" x2="101.5" y2="505.2"/>
-<line class="st4" x1="101.2" y1="372.8" x2="101.2" y2="411.9"/>
-<line class="st4" x1="101.2" y1="345.1" x2="101.2" y2="368.5"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="101.2" y1="376.5" x2="95.9" y2="383.7"/>
-	<line class="st4" x1="106.7" y1="383.7" x2="100.9" y2="376.6"/>
-	<line class="st4" x1="101.2" y1="381.3" x2="95.9" y2="388.6"/>
-	<line class="st4" x1="106.7" y1="388.6" x2="100.9" y2="381.4"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="100.9" y1="425.7" x2="106.1" y2="418.5"/>
-	<line class="st4" x1="95.3" y1="418.5" x2="101.2" y2="425.6"/>
-	<line class="st4" x1="100.9" y1="420.9" x2="106.1" y2="413.6"/>
-	<line class="st4" x1="95.3" y1="413.6" x2="101.2" y2="420.8"/>
-</g>
-<rect x="79.2" y="432.7" class="st5" width="10.1" height="18.2"/>
-<line class="st6" x1="84.3" y1="436.4" x2="80.9" y2="446.2"/>
-<line class="st6" x1="80.9" y1="446.2" x2="87.8" y2="446.2"/>
-<line class="st6" x1="87.8" y1="446.2" x2="84.3" y2="436.4"/>
-<line class="st6" x1="84.3" y1="441.9" x2="84.4" y2="464.2"/>
-<line class="st6" x1="84.4" y1="423.4" x2="84.4" y2="432.7"/>
-<line class="st6" x1="80.9" y1="464.2" x2="87.8" y2="464.2"/>
-<line class="st6" x1="81.9" y1="466.3" x2="87" y2="466.3"/>
-<line class="st6" x1="83.2" y1="468.7" x2="85.3" y2="468.7"/>
-<line class="st6" x1="95.3" y1="456.2" x2="107.6" y2="456.2"/>
-<line class="st6" x1="95.3" y1="456.2" x2="101.2" y2="465.2"/>
-<line class="st6" x1="101.2" y1="465.2" x2="107.6" y2="456.2"/>
-<path class="st7" d="M119.9,423.4"/>
-<path class="st7" d="M111.4,443.5"/>
-<text transform="matrix(1 0 0 1 80.9502 334.0032)" class="st8 st1 st9">鎵�03</text>
-<text transform="matrix(1 0 0 1 80.9502 334.2049)" class="st6 st1 st9">鎵�</text>
-<text transform="matrix(1 0 0 1 91.6502 334.0032)" class="st6 st10 st9">03</text>
-<line class="st6" x1="116.5" y1="464.1" x2="123.4" y2="464.1"/>
-<line class="st6" x1="117.4" y1="466.2" x2="122.6" y2="466.2"/>
-<line class="st6" x1="118.7" y1="468.6" x2="120.8" y2="468.6"/>
-<g>
-	<line class="st21" x1="119.9" y1="423.2" x2="119.9" y2="442.1"/>
-</g>
-<g>
-	<line class="st21" x1="123.2" y1="442" x2="117.4" y2="442"/>
-</g>
-<g>
-	<line class="st21" x1="117.3" y1="443.9" x2="120.1" y2="448.9"/>
-</g>
-<g>
-	<line class="st21" x1="119.9" y1="448.7" x2="119.9" y2="463.8"/>
-</g>
-<rect x="189" y="381.6" class="st18" width="9.7" height="18.5"/>
-<line class="st4" x1="193.6" y1="415.2" x2="193.9" y2="506.2"/>
-<line class="st6" x1="187.8" y1="454.8" x2="200.1" y2="454.8"/>
-<line class="st6" x1="187.8" y1="454.8" x2="193.6" y2="463.8"/>
-<line class="st6" x1="193.6" y1="463.8" x2="200.1" y2="454.8"/>
-<g>
-	<line class="st21" x1="212.4" y1="421.8" x2="212.4" y2="440.7"/>
-</g>
-<g>
-	<line class="st21" x1="215.7" y1="440.6" x2="209.8" y2="440.6"/>
-</g>
-<g>
-	<line class="st21" x1="209.8" y1="442.5" x2="212.6" y2="447.5"/>
-</g>
-<g>
-	<line class="st21" x1="212.4" y1="447.3" x2="212.4" y2="462.3"/>
-</g>
-<line class="st22" x1="84.4" y1="423.4" x2="119.9" y2="423.4"/>
-<line class="st6" x1="174.8" y1="422.1" x2="212.4" y2="422.1"/>
-<line class="st4" x1="280.3" y1="399.2" x2="280.3" y2="409.1"/>
-<line class="st4" x1="280.3" y1="370.5" x2="280.3" y2="380.9"/>
-<line class="st4" x1="280.3" y1="342.8" x2="280.3" y2="366.2"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="280.3" y1="374.2" x2="275" y2="381.4"/>
-	<line class="st4" x1="285.9" y1="381.4" x2="280" y2="374.2"/>
-	<line class="st4" x1="280.3" y1="379" x2="275" y2="386.2"/>
-	<line class="st4" x1="285.9" y1="386.2" x2="280" y2="379.1"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="280" y1="423.4" x2="285.3" y2="416.1"/>
-	<line class="st4" x1="274.4" y1="416.1" x2="280.3" y2="423.3"/>
-	<line class="st4" x1="280" y1="418.5" x2="285.3" y2="411.3"/>
-	<line class="st4" x1="274.4" y1="411.3" x2="280.3" y2="418.5"/>
-</g>
-<rect x="258.3" y="430.4" class="st5" width="10.1" height="18.2"/>
-<line class="st6" x1="263.4" y1="434.1" x2="260.1" y2="443.9"/>
-<line class="st6" x1="260.1" y1="443.9" x2="266.9" y2="443.9"/>
-<line class="st6" x1="266.9" y1="443.9" x2="263.4" y2="434.1"/>
-<line class="st6" x1="263.4" y1="439.5" x2="263.5" y2="461.9"/>
-<line class="st6" x1="263.5" y1="421.1" x2="263.5" y2="430.4"/>
-<line class="st6" x1="260.1" y1="461.9" x2="266.9" y2="461.9"/>
-<line class="st6" x1="261" y1="464" x2="266.2" y2="464"/>
-<line class="st6" x1="262.3" y1="466.4" x2="264.4" y2="466.4"/>
-<path class="st7" d="M299.1,421.1"/>
-<path class="st7" d="M290.5,441.1"/>
-<rect x="275.7" y="380.6" class="st18" width="9.7" height="18.5"/>
-<line class="st4" x1="280.3" y1="414.2" x2="280.6" y2="505.2"/>
-<line class="st6" x1="274.4" y1="453.8" x2="286.7" y2="453.8"/>
-<line class="st6" x1="274.4" y1="453.8" x2="280.3" y2="462.8"/>
-<line class="st6" x1="280.3" y1="462.8" x2="286.7" y2="453.8"/>
-<g>
-	<line class="st21" x1="299.1" y1="420.8" x2="299.1" y2="439.7"/>
-</g>
-<g>
-	<line class="st21" x1="302.3" y1="439.6" x2="296.5" y2="439.6"/>
-</g>
-<g>
-	<line class="st21" x1="296.4" y1="441.5" x2="299.2" y2="446.5"/>
-</g>
-<g>
-	<line class="st21" x1="299.1" y1="446.3" x2="299.1" y2="461.3"/>
-</g>
-<line class="st6" x1="263.5" y1="421.1" x2="299.1" y2="421.1"/>
-<line class="st4" x1="363.4" y1="343.8" x2="363.4" y2="367.2"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="363.9" y1="375.8" x2="361.2" y2="378.5"/>
-	<line class="st4" x1="365.9" y1="378.5" x2="362.8" y2="375.8"/>
-	<line class="st4" x1="363.9" y1="378.9" x2="361.2" y2="381.6"/>
-	<line class="st4" x1="365.9" y1="381.6" x2="362.8" y2="378.9"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="363" y1="390.1" x2="365.8" y2="387.4"/>
-	<line class="st4" x1="361.1" y1="387.4" x2="364.2" y2="390.1"/>
-	<line class="st4" x1="363" y1="387" x2="365.8" y2="384.4"/>
-	<line class="st4" x1="361.1" y1="384.4" x2="364.2" y2="387"/>
-</g>
-<line class="st23" x1="363.4" y1="370.3" x2="363.4" y2="376.5"/>
-<line class="st23" x1="364" y1="384" x2="350.8" y2="384"/>
-<line class="st23" x1="363.4" y1="380.9" x2="363.4" y2="384"/>
-<line class="st23" x1="365.2" y1="390" x2="365.2" y2="405.1"/>
-<line class="st23" x1="361.4" y1="390.2" x2="361.4" y2="405.3"/>
-<line class="st23" x1="361.6" y1="405" x2="365.5" y2="405"/>
-<line class="st23" x1="361.1" y1="390.2" x2="365" y2="390.2"/>
-<line class="st23" x1="363" y1="384.5" x2="363" y2="420.8"/>
-<path class="st24" d="M367.4,424.3c-1.3,0-2.3-1-2.3-2.2s1.1-2.2,2.3-2.2c1.3,0,2.4,1,2.4,2.2S368.7,424.3,367.4,424.3"/>
-<text transform="matrix(1 0 0 1 366.1143 422.8147)" class="st8 st1 st25">Q</text>
-<text transform="matrix(1 0 0 1 366.1143 422.8147)" class="st6 st1 st25">Q</text>
-<path class="st24" d="M363,422.4c-1.5,0-2.7-1.1-2.7-2.5s1.2-2.5,2.7-2.5s2.7,1.1,2.7,2.5S364.5,422.4,363,422.4"/>
-<line class="st6" x1="363.1" y1="418.2" x2="363.1" y2="419.9"/>
-<line class="st6" x1="363.1" y1="419.7" x2="364.1" y2="421"/>
-<line class="st6" x1="363" y1="420" x2="362" y2="421.3"/>
-<path class="st24" d="M363.1,424.9c-1.5,0-2.7-1.1-2.7-2.5s1.2-2.5,2.7-2.5s2.7,1.1,2.7,2.5C365.8,423.8,364.6,424.9,363.1,424.9"/>
-<line class="st26" x1="363.2" y1="420.7" x2="363.2" y2="422.4"/>
-<line class="st26" x1="363.2" y1="422.2" x2="364.2" y2="423.5"/>
-<line class="st26" x1="363.1" y1="422.4" x2="362.1" y2="423.8"/>
-<line class="st4" x1="431.4" y1="413.7" x2="431.4" y2="508"/>
-<line class="st23" x1="412.2" y1="419.2" x2="431" y2="419.2"/>
-<line class="st23" x1="410.2" y1="419.2" x2="431" y2="419.2"/>
-<line class="st4" x1="494.3" y1="413.8" x2="494.3" y2="468"/>
-<path class="st7" d="M502.2,434.1"/>
-<line class="st6" x1="488.2" y1="454.1" x2="500.5" y2="454.1"/>
-<line class="st6" x1="488.2" y1="454.1" x2="494" y2="463.1"/>
-<line class="st6" x1="494" y1="463.1" x2="500.5" y2="454.1"/>
-<g>
-	<line class="st21" x1="509.7" y1="421.2" x2="509.7" y2="437"/>
-</g>
-<g>
-	<line class="st21" x1="512.9" y1="427.8" x2="507.1" y2="427.8"/>
-</g>
-<g>
-	<line class="st21" x1="507.1" y1="438.4" x2="509.9" y2="442.6"/>
-</g>
-<g>
-	<line class="st21" x1="509.7" y1="442.4" x2="509.7" y2="455"/>
-</g>
-<line class="st6" x1="506.3" y1="454.5" x2="513.2" y2="454.5"/>
-<line class="st6" x1="507.2" y1="456.3" x2="512.4" y2="456.3"/>
-<line class="st6" x1="508.5" y1="458.2" x2="510.6" y2="458.2"/>
-<line class="st4" x1="431.4" y1="508" x2="928.5" y2="508"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="492.9" y1="374" x2="487.6" y2="381.3"/>
-	<line class="st4" x1="498.4" y1="381.3" x2="492.6" y2="374.1"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="493.8" y1="423.1" x2="499" y2="415.9"/>
-	<line class="st4" x1="488.2" y1="415.9" x2="494.1" y2="423"/>
-</g>
-<line class="st4" x1="564" y1="343.2" x2="564" y2="366.5"/>
-<line class="st6" x1="550.5" y1="421.5" x2="580.7" y2="421.5"/>
-<line class="st4" x1="564.7" y1="414.1" x2="564.7" y2="468.3"/>
-<path class="st7" d="M572.5,434.4"/>
-<line class="st6" x1="558.6" y1="454.3" x2="570.9" y2="454.3"/>
-<line class="st6" x1="558.6" y1="454.3" x2="564.4" y2="463.4"/>
-<line class="st6" x1="564.4" y1="463.4" x2="570.9" y2="454.3"/>
-<g>
-	<line class="st21" x1="580.1" y1="421.5" x2="580.1" y2="437.3"/>
-</g>
-<g>
-	<line class="st21" x1="583.3" y1="428.1" x2="577.5" y2="428.1"/>
-</g>
-<g>
-	<line class="st21" x1="577.5" y1="438.7" x2="580.3" y2="442.9"/>
-</g>
-<g>
-	<line class="st21" x1="580.1" y1="442.7" x2="580.1" y2="455.3"/>
-</g>
-<line class="st6" x1="576.7" y1="454.8" x2="583.5" y2="454.8"/>
-<line class="st6" x1="577.6" y1="456.6" x2="582.8" y2="456.6"/>
-<line class="st6" x1="578.9" y1="458.5" x2="581" y2="458.5"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<path class="st27" d="M581.1,384.8"/>
-	<path class="st27" d="M580.8,384.8"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="564.2" y1="376.3" x2="559" y2="383.6"/>
-	<line class="st4" x1="569.8" y1="383.6" x2="564" y2="376.4"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="564.2" y1="423.4" x2="569.4" y2="416.2"/>
-	<line class="st4" x1="558.6" y1="416.2" x2="564.4" y2="423.3"/>
-</g>
-<line class="st23" x1="350.9" y1="383.7" x2="350.9" y2="399.1"/>
-<line class="st23" x1="353.7" y1="395.5" x2="353.7" y2="410.1"/>
-<line class="st23" x1="347.6" y1="395.7" x2="347.6" y2="410.3"/>
-<line class="st28" x1="347.6" y1="410.1" x2="353.7" y2="410.1"/>
-<line class="st28" x1="347.6" y1="395.7" x2="353.7" y2="395.7"/>
-<line class="st28" x1="350.6" y1="410.1" x2="350.6" y2="414.7"/>
-<line class="st6" x1="347.1" y1="414.8" x2="353.8" y2="414.8"/>
-<line class="st6" x1="348" y1="417" x2="353.1" y2="417"/>
-<line class="st6" x1="349.3" y1="419.3" x2="351.3" y2="419.3"/>
-<line class="st23" x1="410.2" y1="419.2" x2="410.2" y2="433"/>
-<line class="st23" x1="413.2" y1="429.3" x2="413.2" y2="444"/>
-<line class="st23" x1="406.7" y1="429.5" x2="406.7" y2="444.2"/>
-<line class="st23" x1="406.7" y1="444" x2="413.2" y2="444"/>
-<line class="st23" x1="406.7" y1="429.5" x2="413.2" y2="429.5"/>
-<line class="st23" x1="409.9" y1="444" x2="409.9" y2="448.6"/>
-<line class="st6" x1="406.2" y1="448.7" x2="413.3" y2="448.7"/>
-<line class="st6" x1="407.1" y1="450.9" x2="412.5" y2="450.9"/>
-<line class="st6" x1="408.5" y1="453.2" x2="410.7" y2="453.2"/>
-<line class="st23" x1="480.2" y1="420.5" x2="480.2" y2="436.1"/>
-<path class="st6" d="M456,436.3"/>
-<path class="st6" d="M455.9,436.1"/>
-<line class="st23" x1="483.2" y1="432.4" x2="483.2" y2="447.1"/>
-<line class="st23" x1="476.7" y1="432.6" x2="476.7" y2="447.3"/>
-<line class="st23" x1="476.7" y1="447.1" x2="483.2" y2="447.1"/>
-<line class="st23" x1="476.7" y1="432.6" x2="483.2" y2="432.6"/>
-<line class="st28" x1="479.9" y1="447.1" x2="479.9" y2="451.7"/>
-<line class="st6" x1="476.2" y1="451.9" x2="483.3" y2="451.9"/>
-<line class="st6" x1="477.1" y1="454" x2="482.5" y2="454"/>
-<line class="st6" x1="478.5" y1="456.3" x2="480.7" y2="456.3"/>
-<line class="st23" x1="550.8" y1="421.7" x2="550.8" y2="437.3"/>
-<line class="st23" x1="553.5" y1="433.4" x2="553.5" y2="448.1"/>
-<line class="st23" x1="546.9" y1="433.6" x2="546.9" y2="448.3"/>
-<line class="st23" x1="546.9" y1="448.1" x2="553.5" y2="448.1"/>
-<line class="st23" x1="546.9" y1="433.6" x2="553.4" y2="433.6"/>
-<line class="st23" x1="550.1" y1="448.1" x2="550.1" y2="452.7"/>
-<line class="st6" x1="546.4" y1="452.9" x2="553.6" y2="452.9"/>
-<line class="st6" x1="547.3" y1="455" x2="552.8" y2="455"/>
-<line class="st6" x1="548.7" y1="457.3" x2="550.9" y2="457.3"/>
-<line class="st4" x1="683.6" y1="398.4" x2="683.6" y2="408.4"/>
-<line class="st4" x1="683.6" y1="369.7" x2="683.6" y2="380.2"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="683.6" y1="373.4" x2="678.3" y2="380.6"/>
-	<line class="st4" x1="689.1" y1="380.6" x2="683.3" y2="373.5"/>
-	<line class="st4" x1="683.6" y1="378.2" x2="678.3" y2="385.5"/>
-	<line class="st4" x1="689.1" y1="385.5" x2="683.3" y2="378.3"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="683.3" y1="422.6" x2="688.5" y2="415.4"/>
-	<line class="st4" x1="677.7" y1="415.4" x2="683.6" y2="422.5"/>
-	<line class="st4" x1="683.3" y1="417.8" x2="688.5" y2="410.5"/>
-	<line class="st4" x1="677.7" y1="410.5" x2="683.6" y2="417.7"/>
-</g>
-<path class="st7" d="M702.3,420.4"/>
-<path class="st7" d="M693.8,440.4"/>
-<rect x="679" y="379.8" class="st18" width="9.7" height="18.5"/>
-<line class="st4" x1="683.6" y1="413.4" x2="683.9" y2="494.9"/>
-<line class="st6" x1="677.7" y1="452.5" x2="690" y2="452.5"/>
-<line class="st6" x1="677.7" y1="452.5" x2="683.6" y2="442.1"/>
-<line class="st6" x1="683.6" y1="442.1" x2="690" y2="452.5"/>
-<line class="st6" x1="666.8" y1="420.4" x2="683.6" y2="420.4"/>
-<line class="st23" x1="666.9" y1="420" x2="666.9" y2="435.6"/>
-<line class="st23" x1="669.9" y1="431.9" x2="669.9" y2="446.6"/>
-<line class="st23" x1="663.4" y1="432.1" x2="663.4" y2="446.8"/>
-<line class="st23" x1="663.4" y1="446.6" x2="669.9" y2="446.6"/>
-<line class="st23" x1="663.4" y1="432.1" x2="669.9" y2="432.1"/>
-<line class="st23" x1="666.6" y1="446.6" x2="666.6" y2="451.2"/>
-<line class="st6" x1="662.9" y1="451.3" x2="670" y2="451.3"/>
-<line class="st6" x1="663.8" y1="453.5" x2="669.2" y2="453.5"/>
-<line class="st6" x1="665.2" y1="455.8" x2="667.4" y2="455.8"/>
-<line class="st4" x1="791.1" y1="400.3" x2="791.1" y2="410.3"/>
-<line class="st4" x1="791.1" y1="371.6" x2="791.1" y2="382"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="791.1" y1="375.3" x2="785.9" y2="382.5"/>
-	<line class="st4" x1="796.7" y1="382.5" x2="790.9" y2="375.3"/>
-	<line class="st4" x1="791.1" y1="380.1" x2="785.9" y2="387.3"/>
-	<line class="st4" x1="796.7" y1="387.3" x2="790.9" y2="380.2"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="790.9" y1="424.5" x2="796.1" y2="417.2"/>
-	<line class="st4" x1="785.3" y1="417.2" x2="791.1" y2="424.4"/>
-	<line class="st4" x1="790.9" y1="419.6" x2="796.1" y2="412.4"/>
-	<line class="st4" x1="785.3" y1="412.4" x2="791.1" y2="419.6"/>
-</g>
-<path class="st7" d="M801.3,442.2"/>
-<rect x="786.5" y="381.7" class="st18" width="9.7" height="18.5"/>
-<line class="st4" x1="791.1" y1="415.3" x2="791.5" y2="468"/>
-<line class="st6" x1="785.3" y1="454.3" x2="797.6" y2="454.3"/>
-<line class="st6" x1="785.3" y1="454.3" x2="791.1" y2="464.6"/>
-<line class="st6" x1="791.1" y1="464.6" x2="797.6" y2="454.3"/>
-<line class="st6" x1="774.4" y1="422.2" x2="809" y2="422.2"/>
-<line class="st23" x1="774.5" y1="421.9" x2="774.5" y2="437.4"/>
-<line class="st23" x1="777.5" y1="433.8" x2="777.5" y2="448.5"/>
-<line class="st23" x1="771" y1="434" x2="771" y2="448.7"/>
-<line class="st23" x1="771" y1="448.4" x2="777.5" y2="448.4"/>
-<line class="st23" x1="771" y1="434" x2="777.4" y2="434"/>
-<line class="st23" x1="774.2" y1="448.5" x2="774.2" y2="453.1"/>
-<line class="st6" x1="770.4" y1="453.2" x2="777.6" y2="453.2"/>
-<line class="st6" x1="771.4" y1="455.4" x2="776.8" y2="455.4"/>
-<line class="st6" x1="772.7" y1="457.7" x2="774.9" y2="457.7"/>
-<g>
-	<line class="st21" x1="809" y1="421.5" x2="809" y2="435.7"/>
-</g>
-<g>
-	<line class="st21" x1="812.2" y1="435.6" x2="806.4" y2="435.6"/>
-</g>
-<g>
-	<line class="st21" x1="806.4" y1="437" x2="809.1" y2="440.7"/>
-</g>
-<g>
-	<line class="st21" x1="809" y1="440.6" x2="809" y2="451.9"/>
-</g>
-<line class="st6" x1="805.6" y1="451.9" x2="812.4" y2="451.9"/>
-<line class="st6" x1="806.5" y1="454.4" x2="811.7" y2="454.4"/>
-<line class="st6" x1="807.8" y1="456.2" x2="809.9" y2="456.2"/>
-<line class="st4" x1="650.1" y1="494.8" x2="684.3" y2="494.5"/>
-<line class="st4" x1="650" y1="305.8" x2="650.3" y2="494.8"/>
-<line class="st4" x1="928.2" y1="420.8" x2="928.5" y2="508.1"/>
-<path class="st27" d="M943.8,401.8"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<path class="st27" d="M948.7,413.4"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="927.7" y1="383.8" x2="922.5" y2="391"/>
-	<line class="st4" x1="933.3" y1="391" x2="927.4" y2="383.8"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="927.9" y1="429.8" x2="933.1" y2="422.6"/>
-	<line class="st4" x1="922.3" y1="422.6" x2="928.2" y2="429.8"/>
-</g>
-<line class="st4" x1="927.2" y1="342.7" x2="927.5" y2="375.2"/>
-<line class="st6" x1="1025.3" y1="424.7" x2="1055.5" y2="424.7"/>
-<line class="st4" x1="1039.5" y1="417.3" x2="1039.5" y2="471.5"/>
-<path class="st7" d="M1047.4,437.7"/>
-<line class="st6" x1="1033.4" y1="457.6" x2="1045.7" y2="457.6"/>
-<line class="st6" x1="1033.4" y1="457.6" x2="1039.2" y2="466.6"/>
-<line class="st6" x1="1039.2" y1="466.6" x2="1045.7" y2="457.6"/>
-<g>
-	<line class="st21" x1="1054.9" y1="424.7" x2="1054.9" y2="440.5"/>
-</g>
-<g>
-	<line class="st21" x1="1058.1" y1="431.3" x2="1052.3" y2="431.3"/>
-</g>
-<g>
-	<line class="st21" x1="1052.3" y1="441.9" x2="1055.1" y2="446.1"/>
-</g>
-<g>
-	<line class="st21" x1="1054.9" y1="445.9" x2="1054.9" y2="458.5"/>
-</g>
-<line class="st6" x1="1051.5" y1="458" x2="1058.4" y2="458"/>
-<line class="st6" x1="1052.4" y1="459.8" x2="1057.6" y2="459.8"/>
-<line class="st6" x1="1053.7" y1="461.8" x2="1055.8" y2="461.8"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<path class="st27" d="M1050.6,414"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1039.1" y1="377.6" x2="1033.8" y2="384.8"/>
-	<line class="st4" x1="1044.6" y1="384.8" x2="1038.8" y2="377.6"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1039" y1="426.6" x2="1044.2" y2="419.4"/>
-	<line class="st4" x1="1033.4" y1="419.4" x2="1039.3" y2="426.6"/>
-</g>
-<line class="st23" x1="1025.4" y1="424.3" x2="1025.4" y2="439.9"/>
-<line class="st23" x1="1028.4" y1="436.2" x2="1028.4" y2="450.9"/>
-<line class="st23" x1="1021.9" y1="436.4" x2="1021.9" y2="451.1"/>
-<line class="st23" x1="1021.9" y1="450.9" x2="1028.4" y2="450.9"/>
-<line class="st23" x1="1021.9" y1="436.4" x2="1028.4" y2="436.4"/>
-<line class="st23" x1="1025.1" y1="450.9" x2="1025.1" y2="455.5"/>
-<line class="st6" x1="1021.4" y1="455.6" x2="1028.5" y2="455.6"/>
-<line class="st6" x1="1022.3" y1="457.8" x2="1027.7" y2="457.8"/>
-<line class="st6" x1="1023.7" y1="460.1" x2="1025.9" y2="460.1"/>
-<line class="st4" x1="1116.4" y1="344" x2="1116.3" y2="369.6"/>
-<line class="st6" x1="1104.9" y1="425.7" x2="1135.1" y2="425.7"/>
-<line class="st4" x1="1119.1" y1="418.4" x2="1119.1" y2="472.5"/>
-<path class="st7" d="M1126.9,438.7"/>
-<line class="st6" x1="1113" y1="458.6" x2="1125.3" y2="458.6"/>
-<line class="st6" x1="1113" y1="458.6" x2="1118.8" y2="467.6"/>
-<line class="st6" x1="1118.8" y1="467.6" x2="1125.3" y2="458.6"/>
-<g>
-	<line class="st21" x1="1134.5" y1="425.7" x2="1134.5" y2="441.5"/>
-</g>
-<g>
-	<line class="st21" x1="1137.7" y1="432.4" x2="1131.9" y2="432.4"/>
-</g>
-<g>
-	<line class="st21" x1="1131.9" y1="443" x2="1134.7" y2="447.2"/>
-</g>
-<g>
-	<line class="st21" x1="1134.5" y1="447" x2="1134.5" y2="459.6"/>
-</g>
-<line class="st6" x1="1131.1" y1="459.1" x2="1137.9" y2="459.1"/>
-<line class="st6" x1="1132" y1="460.8" x2="1137.2" y2="460.8"/>
-<line class="st6" x1="1133.3" y1="462.8" x2="1135.4" y2="462.8"/>
-<line class="st29" x1="1118.1" y1="403.4" x2="1118.1" y2="411.3"/>
-<line class="st29" x1="1117.1" y1="380.8" x2="1117.1" y2="389.1"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1117.5" y1="389" x2="1112.3" y2="394.7"/>
-	<line class="st4" x1="1123.1" y1="394.7" x2="1117.2" y2="389.1"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1117.7" y1="420.8" x2="1123" y2="415"/>
-	<line class="st4" x1="1112.1" y1="415" x2="1118" y2="420.7"/>
-</g>
-<rect x="1113.2" y="388.7" class="st18" width="9.7" height="14.7"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1116.6" y1="381.6" x2="1111.4" y2="388.8"/>
-	<line class="st4" x1="1122.2" y1="388.8" x2="1116.4" y2="381.6"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1118.6" y1="427.6" x2="1123.8" y2="420.4"/>
-	<line class="st4" x1="1113" y1="420.4" x2="1118.8" y2="427.6"/>
-</g>
-<line class="st23" x1="1105" y1="425.4" x2="1105" y2="440.9"/>
-<line class="st23" x1="1108" y1="437.2" x2="1108" y2="452"/>
-<line class="st23" x1="1101.5" y1="437.4" x2="1101.5" y2="452.2"/>
-<line class="st23" x1="1101.5" y1="451.9" x2="1108" y2="451.9"/>
-<line class="st23" x1="1101.5" y1="437.4" x2="1108" y2="437.4"/>
-<line class="st23" x1="1104.7" y1="452" x2="1104.7" y2="456.5"/>
-<line class="st6" x1="1101" y1="456.7" x2="1108.1" y2="456.7"/>
-<line class="st6" x1="1101.9" y1="458.8" x2="1107.3" y2="458.8"/>
-<line class="st6" x1="1103.3" y1="461.1" x2="1105.5" y2="461.1"/>
-<line class="st4" x1="1189" y1="344.5" x2="1189" y2="370.1"/>
-<line class="st6" x1="1175.6" y1="426.2" x2="1205.8" y2="426.2"/>
-<line class="st4" x1="1189.8" y1="418.9" x2="1189.8" y2="473"/>
-<path class="st7" d="M1197.6,439.2"/>
-<line class="st6" x1="1183.6" y1="459.1" x2="1195.9" y2="459.1"/>
-<line class="st6" x1="1183.6" y1="459.1" x2="1189.5" y2="468.1"/>
-<line class="st6" x1="1189.5" y1="468.1" x2="1195.9" y2="459.1"/>
-<g>
-	<line class="st21" x1="1205.2" y1="426.2" x2="1205.2" y2="442"/>
-</g>
-<g>
-	<line class="st21" x1="1208.4" y1="432.9" x2="1202.5" y2="432.9"/>
-</g>
-<g>
-	<line class="st21" x1="1202.6" y1="443.5" x2="1205.3" y2="447.7"/>
-</g>
-<g>
-	<line class="st21" x1="1205.2" y1="447.5" x2="1205.2" y2="460"/>
-</g>
-<line class="st6" x1="1201.8" y1="459.6" x2="1208.6" y2="459.6"/>
-<line class="st6" x1="1202.7" y1="461.3" x2="1207.9" y2="461.3"/>
-<line class="st6" x1="1204" y1="463.3" x2="1206.1" y2="463.3"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<path class="st27" d="M1200.8,415.5"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1189.3" y1="380.1" x2="1184.1" y2="387.3"/>
-	<line class="st4" x1="1194.9" y1="387.3" x2="1189" y2="380.1"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1189.2" y1="428.1" x2="1194.5" y2="420.9"/>
-	<line class="st4" x1="1183.7" y1="420.9" x2="1189.5" y2="428.1"/>
-</g>
-<line class="st23" x1="1175.7" y1="425.8" x2="1175.7" y2="441.4"/>
-<line class="st23" x1="1178.7" y1="437.7" x2="1178.7" y2="452.4"/>
-<line class="st23" x1="1172.2" y1="437.9" x2="1172.2" y2="452.6"/>
-<line class="st28" x1="1172.2" y1="452.4" x2="1178.7" y2="452.4"/>
-<line class="st23" x1="1172.2" y1="437.9" x2="1178.7" y2="437.9"/>
-<line class="st23" x1="1175.4" y1="452.4" x2="1175.4" y2="457"/>
-<line class="st6" x1="1171.6" y1="457.2" x2="1178.8" y2="457.2"/>
-<line class="st6" x1="1172.6" y1="459.3" x2="1178" y2="459.3"/>
-<line class="st6" x1="1173.9" y1="461.6" x2="1176.1" y2="461.6"/>
-<path class="st30" d="M1277.7,435"/>
-<path class="st30" d="M1277.7,435"/>
-<path class="st30" d="M1276.7,433.8"/>
-<path class="st30" d="M1261.7,424.9"/>
-<path class="st30" d="M1262.6,426"/>
-<line class="st4" x1="1277.7" y1="344.2" x2="1277.7" y2="367.5"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1277.5" y1="375" x2="1272.3" y2="382.3"/>
-	<line class="st4" x1="1283.1" y1="382.3" x2="1277.2" y2="375.1"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<path class="st27" d="M1295,378.7"/>
-</g>
-<path class="st27" d="M1295.3,370.7"/>
-<line class="st6" x1="1230.2" y1="304.6" x2="1244.7" y2="304.6"/>
-<line class="st4" x1="1244.4" y1="297.2" x2="1244.4" y2="342.7"/>
-<path class="st7" d="M1252.3,317.6"/>
-<line class="st6" x1="1239.1" y1="318.6" x2="1250.3" y2="318.6"/>
-<line class="st6" x1="1239.1" y1="318.6" x2="1244.4" y2="325.1"/>
-<line class="st6" x1="1244.4" y1="325.1" x2="1250.3" y2="318.6"/>
-<line class="st23" x1="1230.2" y1="304.2" x2="1230.2" y2="314.7"/>
-<line class="st23" x1="1232" y1="315" x2="1232" y2="328.4"/>
-<line class="st23" x1="1227.2" y1="315.2" x2="1227.2" y2="328.5"/>
-<line class="st23" x1="1227.4" y1="328.3" x2="1232.4" y2="328.3"/>
-<line class="st23" x1="1226.7" y1="315.2" x2="1231.7" y2="315.2"/>
-<line class="st28" x1="1229.9" y1="328.4" x2="1229.9" y2="332.5"/>
-<line class="st6" x1="1227.9" y1="332.6" x2="1231.9" y2="332.6"/>
-<line class="st6" x1="1228.5" y1="335" x2="1231.5" y2="335"/>
-<line class="st6" x1="1229.2" y1="336.6" x2="1230.5" y2="336.6"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1244" y1="263.5" x2="1238.7" y2="270.7"/>
-	<line class="st4" x1="1249.5" y1="270.7" x2="1243.7" y2="263.5"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1243.9" y1="306.5" x2="1249.1" y2="299.3"/>
-	<line class="st4" x1="1238.3" y1="299.3" x2="1244.2" y2="306.5"/>
-</g>
-<line class="st4" x1="1243.7" y1="233.6" x2="1243.7" y2="257"/>
-<line class="st3" x1="926.2" y1="344.1" x2="1290.1" y2="344.1"/>
-<line class="st31" x1="651" y1="305.8" x2="495.5" y2="305.8"/>
-<line class="st6" x1="530.8" y1="157.3" x2="522.9" y2="157.3"/>
-<line class="st6" x1="529.7" y1="159.6" x2="523.7" y2="159.6"/>
-<line class="st6" x1="528.2" y1="162.3" x2="525.8" y2="162.3"/>
-<line class="st6" x1="495.5" y1="151" x2="513.2" y2="151"/>
-<line class="st6" x1="519" y1="157.5" x2="519" y2="145"/>
-<line class="st6" x1="526.8" y1="151.1" x2="519.3" y2="151.2"/>
-<line class="st6" x1="526.8" y1="157.4" x2="526.8" y2="151.2"/>
-<line class="st6" x1="426.1" y1="162.3" x2="494.1" y2="162.3"/>
-<line class="st6" x1="426.1" y1="175.3" x2="426.1" y2="162.8"/>
-<path class="st24" d="M430.6,178c-1.3,0-2.4-1.2-2.4-2.6c0-1.4,1.1-2.6,2.4-2.6s2.4,1.2,2.4,2.6S431.9,178,430.6,178"/>
-<text transform="matrix(0.8602 0 0 1 429.249 176.1934)" class="st8 st1 st32">Q</text>
-<text transform="matrix(0.8602 0 0 1 429.249 176.1934)" class="st6 st1 st32">Q</text>
-<line class="st6" x1="426.1" y1="170.6" x2="426.1" y2="172.7"/>
-<line class="st6" x1="426.1" y1="172.4" x2="427.2" y2="174.1"/>
-<line class="st6" x1="426.1" y1="172.7" x2="425" y2="174.4"/>
-<path class="st24" d="M426.1,178.8c-1.5,0-2.8-1.3-2.8-3s1.3-3,2.8-3s2.8,1.3,2.8,3C428.9,177.4,427.7,178.8,426.1,178.8"/>
-<line class="st26" x1="426.2" y1="173.6" x2="426.2" y2="175.7"/>
-<line class="st26" x1="426.2" y1="175.4" x2="427.3" y2="177.1"/>
-<line class="st26" x1="426.1" y1="175.8" x2="425.1" y2="177.4"/>
-<line class="st6" x1="413.3" y1="179.3" x2="421.9" y2="179.3"/>
-<line class="st6" x1="414.4" y1="181.7" x2="420.9" y2="181.7"/>
-<line class="st6" x1="417.6" y1="173.1" x2="425.8" y2="173.3"/>
-<line class="st6" x1="416" y1="184.4" x2="418.7" y2="184.4"/>
-<line class="st6" x1="417.6" y1="179.5" x2="417.6" y2="173.2"/>
-<path class="st24" d="M426.1,175.7c-1.5,0-2.8-1.3-2.8-3s1.3-3,2.8-3s2.8,1.3,2.8,3S427.6,175.7,426.1,175.7"/>
-<line class="st33" x1="505" y1="170" x2="487.8" y2="170"/>
-<line class="st6" x1="512.4" y1="151.4" x2="516" y2="145"/>
-<line class="st6" x1="417.8" y1="238.1" x2="411" y2="230.1"/>
-<line class="st6" x1="527.7" y1="197.3" x2="519.6" y2="197.3"/>
-<line class="st6" x1="526.7" y1="199.6" x2="520.5" y2="199.6"/>
-<line class="st6" x1="525.1" y1="202.3" x2="522.6" y2="202.3"/>
-<line class="st6" x1="495.8" y1="191.1" x2="509.6" y2="191.1"/>
-<line class="st6" x1="515.9" y1="197.5" x2="515.9" y2="185"/>
-<line class="st6" x1="523.6" y1="191.1" x2="515.9" y2="191.3"/>
-<line class="st6" x1="523.6" y1="197.4" x2="523.6" y2="191.2"/>
-<line class="st6" x1="509.8" y1="191.4" x2="513.3" y2="185"/>
-<path class="st34" d="M496,225.7c-5.6,0-10.2-4.5-10.2-9.9c0-5.5,4.6-9.9,10.2-9.9s10.2,4.5,10.2,9.9
-	C506.3,221.2,501.7,225.7,496,225.7"/>
-<path class="st35" d="M496.4,239.7c-5.9,0-10.6-4.6-10.6-10.3s4.8-10.3,10.6-10.3c5.9,0,10.6,4.6,10.6,10.3
-	C507,235.1,502.2,239.7,496.4,239.7"/>
-<line class="st36" x1="503.2" y1="233.9" x2="496.5" y2="222.6"/>
-<line class="st26" x1="496.6" y1="222.5" x2="489.2" y2="234.5"/>
-<line class="st26" x1="503.6" y1="234.1" x2="489.2" y2="233.9"/>
-<line class="st6" x1="428.1" y1="215.4" x2="496.1" y2="215.4"/>
-<line class="st6" x1="433.9" y1="241.9" x2="428.3" y2="236.6"/>
-<line class="st6" x1="428" y1="236.2" x2="423.2" y2="242"/>
-<line class="st6" x1="428.3" y1="236.9" x2="428.3" y2="262.3"/>
-<line class="st6" x1="423.2" y1="225.6" x2="427.9" y2="232"/>
-<line class="st6" x1="427.8" y1="232.3" x2="431.3" y2="225.3"/>
-<line class="st6" x1="427.9" y1="231.7" x2="427.9" y2="215"/>
-<line class="st23" x1="441.4" y1="223.3" x2="441.4" y2="238.3"/>
-<line class="st23" x1="443.1" y1="234.7" x2="443.1" y2="248.9"/>
-<line class="st23" x1="439.3" y1="234.9" x2="439.3" y2="249.1"/>
-<line class="st23" x1="439.3" y1="248.9" x2="443.1" y2="248.9"/>
-<line class="st23" x1="439.3" y1="234.9" x2="443.1" y2="234.9"/>
-<line class="st6" x1="410.7" y1="223" x2="441.3" y2="223"/>
-<line class="st6" x1="410.7" y1="223.3" x2="410.7" y2="231.2"/>
-<line class="st6" x1="417.9" y1="241" x2="404.1" y2="241"/>
-<line class="st6" x1="410.7" y1="240.9" x2="410.7" y2="253.5"/>
-<line class="st6" x1="409.6" y1="253.5" x2="441.8" y2="253.5"/>
-<line class="st6" x1="441.8" y1="248.5" x2="441.8" y2="253.5"/>
-<line class="st6" x1="424.5" y1="262.5" x2="431.4" y2="262.5"/>
-<line class="st6" x1="425.4" y1="264.2" x2="430.6" y2="264.2"/>
-<line class="st6" x1="426.7" y1="266.2" x2="428.8" y2="266.2"/>
-<text transform="matrix(0.907 0 0 1 922.7803 77.8848)" class="st10 st37">10KV</text>
-<text transform="matrix(0.907 0 0 1 953.9805 77.5923)" class="st1 st37">涓讳緵瀹�</text>
-<text transform="matrix(0.907 0 0 1 915.7803 105.8301)" class="st1 st37">  </text>
-<text transform="matrix(0.907 0 0 1 924.8545 105.5376)" class="st1 st37">浜屾ゼ</text>
-<text transform="matrix(0.907 0 0 1 953.9805 105.5376)" class="st1 st37">涓讳緵瀹�</text>
-<text transform="matrix(0.907 0 0 1 923.7803 137.0771)" class="st10 st37">10KV</text>
-<text transform="matrix(0.907 0 0 1 954.9805 136.7847)" class="st1 st37">澶囦緵瀹�</text>
-<text transform="matrix(0.9726 0 0 1 1020.0811 77.8848)" class="st1 st38">娓╁害锛�</text>
-<text transform="matrix(0.9726 0 0 1 1020.0811 107.5059)" class="st1 st38">娓╁害锛�</text>
-<text transform="matrix(0.9726 0 0 1 1020.0811 137.0771)" class="st1 st38">娓╁害锛�</text>
-<text transform="matrix(0.9726 0 0 1 1152.7803 75.582)" class="st1 st38">婀垮害锛�</text>
-<text id="_x31_0KVWD_x5F_wd" transform="matrix(1 0 0 1 1056.5176 77.885)" class="st19 st10 st14">18###.## </text>
-<text id="_x32_ZK_x5F_WD_x5F_wd" transform="matrix(1 0 0 1 1056.5176 107.5061)" class="st19 st10 st14">19###.## </text>
-<text id="_x31_0KVB_x5F_wd" transform="matrix(1 0 0 1 1056.5176 137.0774)" class="st19 st10 st14">20###.## </text>
-<text id="_x31_0KVSD_x5F_sd" transform="matrix(1 0 0 1 1195.9385 77.885)" class="st19 st10 st14">21###.## </text>
-<text transform="matrix(0.9726 0 0 1 1152.7803 107.5059)" class="st1 st38">婀垮害锛�</text>
-<text transform="matrix(0.9726 0 0 1 1152.7803 137.0771)" class="st1 st38">婀垮害锛�</text>
-<text id="_x32_ZKSD_x5F_sd" transform="matrix(1 0 0 1 1195.9385 107.5061)" class="st19 st10 st14">22###.## </text>
-<text id="_x31_0KVB_x5F_sd" transform="matrix(1 0 0 1 1195.9385 137.4309)" class="st19 st10 st14">23###.## </text>
-<text transform="matrix(1 0 0 1 1266.791 77.885)" class="st19 st1 st14">% </text>
-<text transform="matrix(1 0 0 1 1266.791 107.5061)" class="st19 st1 st14">% </text>
-<text transform="matrix(1 0 0 1 1265.4297 137.0774)" class="st19 st1 st14">% </text>
-<text transform="matrix(0.9434 0 0 1 977.8799 187.1885)" class="st1 st39">杩涚嚎</text>
-<text transform="matrix(0.9434 0 0 1 1002.6914 187.354)" class="st1 st39">(</text>
-<text transform="matrix(0.9434 0 0 1 1006.8418 187.1885)" class="st1 st39">澶囦緵</text>
-<text transform="matrix(0.9434 0 0 1 1031.748 187.354)" class="st1 st39">)</text>
-<text id="_x31_0KVB_x5F_ia" transform="matrix(1.0507 0 0 1 1126.9375 216.0146)" class="st15 st10 st40">     27###.##  </text>
-<text id="_x31_0KVB_x5F_ib" transform="matrix(1.0507 0 0 1 1126.9375 230.8584)" class="st15 st10 st40">     28###.## </text>
-<text id="_x31_0KVB_x5F_ic" transform="matrix(1.0507 0 0 1 1126.9375 245.7285)" class="st15 st10 st40">     29###.##</text>
-<text transform="matrix(1.0507 0 0 1 1011.9727 211.7891)" class="st19 st10 st40">Va</text>
-<text id="_x31_10KV_x5F_ua" transform="matrix(1.0507 0 0 1 1029.3936 211.7891)" class="st19 st10 st40">  24###.##</text>
-<text transform="matrix(1.0507 0 0 1 1011.9727 230.7861)" class="st19 st10 st40">Vb</text>
-<text id="_x31_10KV_x5F_ub" transform="matrix(1.0507 0 0 1 1028.3936 230.7861)" class="st19 st10 st40">  25###.##</text>
-<text transform="matrix(1.0507 0 0 1 1011.2891 248.8857)" class="st19 st10 st40">Vc</text>
-<text id="_x31_10KV_x5F_uc" transform="matrix(1.0507 0 0 1 1022.9922 248.8857)" class="st19 st1 st40">  26###.##</text>
-<text transform="matrix(0.9013 0 0 1 1267.2754 335.7031)" class="st8 st1 st41">浜�</text>
-<text transform="matrix(0.9013 0 0 1 1267.2754 335.7031)" class="st6 st1 st41">浜�</text>
-<text transform="matrix(1 0 0 1 53.0977 297.6213)" class="st8 st1 st11">  </text>
-<text transform="matrix(1 0 0 1 53.0977 297.6213)" class="st6 st1 st11">  </text>
-<text transform="matrix(1 0 0 1 53.0977 297.135)" class="st10 st12">10kV1</text>
-<text transform="matrix(1 0 0 1 98.4787 296.567)" class="st1 st12">娈垫瘝绾�</text>
-<text transform="matrix(1 0 0 1 874.0977 309.76)" class="st8 st1 st11">  </text>
-<text transform="matrix(1 0 0 1 874.0977 309.76)" class="st6 st1 st11">  </text>
-<text transform="matrix(1 0 0 1 891.0977 309.1272)" class="st10 st12">10kV2</text>
-<text transform="matrix(1 0 0 1 936.4788 308.5591)" class="st1 st12">娈垫瘝绾�</text>
-<text transform="matrix(1.0185 0 0 1 208.7949 551.6924)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 208.1299 567.3301)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 208.1299 583.6611)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 207.4277 608.6523)" class="st19 st10 st42">MW </text>
-<text transform="matrix(1 0 0 1 1204.7803 523.635)" class="st19 st1 st43">鍗楀巶</text>
-<text transform="matrix(1 0 0 1 1228.7803 523.635)" class="st19 st1 st43">3#</text>
-<text transform="matrix(1 0 0 1 1110.6484 523.635)" class="st19 st1 st43">鍖楀巶</text>
-<text transform="matrix(1 0 0 1 1134.6484 523.635)" class="st19 st10 st43">201</text>
-<text transform="matrix(1 0 0 1 1022.9727 523.635)" class="st19 st1 st43">鍖楀巶</text>
-<text transform="matrix(1 0 0 1 1046.9727 523.635)" class="st19 st10 st43">303</text>
-<text transform="matrix(1 0 0 1 1207.7803 538.635)" class="st19 st10 st43">AH04</text>
-<text transform="matrix(1 0 0 1 1107.6484 538.635)" class="st19 st10 st43">1#HT220</text>
-<text transform="matrix(1 0 0 1 1022.2891 538.635)" class="st19 st10 st43">6#HT219</text>
-<text transform="matrix(1 0 0 1 907.7803 525.635)" class="st19 st1 st43">鑱旂粶</text>
-<text transform="matrix(1 0 0 1 768.7803 523.635)" class="st19 st1 st43">鍖楀巶</text>
-<text transform="matrix(1 0 0 1 792.7803 523.635)" class="st19 st10 st43">303</text>
-<text transform="matrix(1 0 0 1 767.7803 536.635)" class="st19 st10 st43">6#AH001</text>
-<text transform="matrix(1 0 0 1 650.9629 523.635)" class="st19 st1 st43">涓讳緵杩涚嚎</text>
-<text transform="matrix(1 0 0 1 548.7109 523.635)" class="st19 st1 st43">澶囩敤</text>
-<text transform="matrix(1 0 0 1 477.1221 523.635)" class="st19 st1 st43">澶囩敤</text>
-<text transform="matrix(1 0 0 1 417.8154 523.635)" class="st19 st1 st43">闅旂</text>
-<text transform="matrix(1 0 0 1 258.3271 520.635)" class="st19 st1 st43">鍖楀巶</text>
-<text transform="matrix(1 0 0 1 282.3271 520.635)" class="st19 st10 st43">201</text>
-<text transform="matrix(1 0 0 1 256.4434 533.635)" class="st19 st10 st43">1#HT001</text>
-<text transform="matrix(1 0 0 1 178.4912 520.635)" class="st19 st1 st43">鍗楀巶</text>
-<text transform="matrix(1 0 0 1 202.4912 520.635)" class="st19 st10 st43">3#</text>
-<text transform="matrix(1 0 0 1 87.0479 519.635)" class="st19 st1 st43">鎵�鐢ㄥ彉</text>
-<text transform="matrix(0.8166 0 0 1 247.1797 551.6924)" class="st19 st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 247.1797 568.9219)" class="st19 st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 247.1797 583.6611)" class="st19 st10 st20">Ic</text>
-<text id="HT001_ia" transform="matrix(0.8166 0 0 1 258.8633 551.6924)" class="st19 st10 st20">33A###.##</text>
-<text id="HT001_ib" transform="matrix(0.8166 0 0 1 258.8633 567.3301)" class="st19 st10 st20">34B###.##</text>
-<text id="HT001_ic" transform="matrix(0.8166 0 0 1 258.8633 583.6611)" class="st19 st10 st20">35C###.##</text>
-<text transform="matrix(1.0185 0 0 1 311.5693 551.6924)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 310.9043 567.3301)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 310.9043 583.6611)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 310.2021 608.6523)" class="st19 st10 st42">MW </text>
-<text transform="matrix(0.8166 0 0 1 432.8813 551.3145)" class="st19 st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 432.8813 568.5439)" class="st19 st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 432.8813 583.2832)" class="st19 st10 st20">Ic</text>
-<text id="BY35_ia" transform="matrix(0.8166 0 0 1 444.5645 551.3145)" class="st19 st10 st20">40A###.##</text>
-<text id="BY35_ib" transform="matrix(0.8166 0 0 1 444.5645 566.9521)" class="st19 st10 st20">41B###.##</text>
-<text id="BY35_ic" transform="matrix(0.8166 0 0 1 444.5645 583.2832)" class="st19 st10 st20">42C###.##</text>
-<text transform="matrix(1.0185 0 0 1 497.271 551.3145)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 496.6064 566.9521)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 496.6064 583.2832)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 495.9038 609.2744)" class="st19 st10 st42">MW </text>
-<text transform="matrix(0.8166 0 0 1 539.5176 551.3135)" class="st19 st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 539.5176 568.543)" class="st19 st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 539.5176 583.2822)" class="st19 st10 st20">Ic</text>
-<text id="BY39_ia" transform="matrix(0.8166 0 0 1 551.2002 551.3135)" class="st19 st10 st20">45A###.##</text>
-<text id="BY39_ib" transform="matrix(0.8166 0 0 1 551.2002 566.9512)" class="st19 st10 st20">46B###.##</text>
-<text id="BY39_ic" transform="matrix(0.8166 0 0 1 551.2002 583.2822)" class="st19 st10 st20">47C###.##</text>
-<text transform="matrix(1.0185 0 0 1 603.9067 551.3135)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 603.2417 566.9512)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 603.2417 583.2822)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 602.54 609.2734)" class="st19 st10 st42">MW </text>
-<text transform="matrix(0.8166 0 0 1 642.752 551.3145)" class="st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 642.752 568.5439)" class="st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 642.752 583.2832)" class="st10 st20">Ic</text>
-<text id="ZB10KV31_ia" transform="matrix(0.8166 0 0 1 654.4355 551.3145)" class="st15 st10 st20">50A###.##</text>
-<text id="ZB10KV31_ib" transform="matrix(0.8166 0 0 1 654.4355 566.9521)" class="st15 st10 st20">51B###.##</text>
-<text id="ZB10KV31_iC" transform="matrix(0.8166 0 0 1 654.4355 583.2832)" class="st15 st10 st20">52C###.##</text>
-<text transform="matrix(1.0185 0 0 1 707.1416 551.3145)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 706.4766 566.9521)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 706.4766 583.2832)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 705.7744 609.2744)" class="st19 st10 st42">MW </text>
-<text transform="matrix(0.8166 0 0 1 750.3291 551.3135)" class="st19 st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 750.3291 568.543)" class="st19 st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 750.3291 583.2822)" class="st19 st10 st20">Ic</text>
-<text id="AH1_ia" transform="matrix(0.8166 0 0 1 762.0127 551.3135)" class="st19 st10 st20">55A###.##</text>
-<text id="AH1_ib" transform="matrix(0.8166 0 0 1 762.0127 566.9512)" class="st19 st10 st20">56B###.##</text>
-<text id="AH1_ic" transform="matrix(0.8166 0 0 1 762.0127 583.2822)" class="st19 st10 st20">57C###.##</text>
-<text transform="matrix(1.0185 0 0 1 814.7188 551.3135)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 814.0537 566.9512)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 814.0537 583.2822)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 812.3516 609.2734)" class="st19 st10 st42">MW </text>
-<text transform="matrix(0.8166 0 0 1 884.3525 551.3135)" class="st19 st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 884.3525 568.543)" class="st19 st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 884.3525 583.2822)" class="st19 st10 st20">Ic</text>
-<text id="_x31_0KVL233_x5F_ia" transform="matrix(0.8166 0 0 1 896.0361 551.3135)" class="st19 st10 st20">60A###.##</text>
-<text id="_x31_0KVL233_x5F_ib" transform="matrix(0.8166 0 0 1 896.0361 566.9512)" class="st19 st10 st20">61B###.##</text>
-<text id="_x31_0KVL233_x5F_ic" transform="matrix(0.8166 0 0 1 896.0361 583.2822)" class="st19 st10 st20">62C###.##</text>
-<text transform="matrix(1.0185 0 0 1 948.7422 551.3135)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 948.0771 566.9512)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 948.0771 583.2822)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 950.375 609.2734)" class="st19 st10 st42">MW </text>
-<text transform="matrix(0.8166 0 0 1 1000.4854 551.3135)" class="st19 st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 1000.4854 568.543)" class="st19 st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 1000.4854 583.2822)" class="st19 st10 st20">Ic</text>
-<text id="HT219_ia" transform="matrix(0.8166 0 0 1 1012.1689 551.3135)" class="st19 st10 st20">65A###.##</text>
-<text id="HT219_ib" transform="matrix(0.8166 0 0 1 1012.1689 566.9512)" class="st19 st10 st20">66B###.##</text>
-<text id="HT219_ic" transform="matrix(0.8166 0 0 1 1012.1689 583.2822)" class="st19 st10 st20">67C###.##</text>
-<text transform="matrix(1.0185 0 0 1 1064.875 551.3135)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 1064.21 566.9512)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 1064.21 583.2822)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 1062.5078 609.2734)" class="st19 st10 st42">MW </text>
-<text transform="matrix(0.8166 0 0 1 1107.085 551.3135)" class="st19 st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 1107.085 568.543)" class="st19 st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 1107.085 583.2822)" class="st19 st10 st20">Ic</text>
-<text id="HT220_ia" transform="matrix(0.8166 0 0 1 1118.7686 551.3135)" class="st19 st10 st20">70A###.##</text>
-<text id="HT220_ib" transform="matrix(0.8166 0 0 1 1118.7686 566.9512)" class="st19 st10 st20">71B###.##</text>
-<text id="HT220_ic" transform="matrix(0.8166 0 0 1 1118.7686 583.2822)" class="st19 st10 st20">72C###.##</text>
-<text transform="matrix(1.0185 0 0 1 1171.4746 551.3135)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 1170.8096 566.9512)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 1170.8096 583.2822)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 1170.1074 610.2734)" class="st19 st10 st42">MW </text>
-<text transform="matrix(0.8166 0 0 1 1206.4639 551.3135)" class="st19 st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 1206.4639 568.543)" class="st19 st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 1206.4639 583.2822)" class="st19 st10 st20">Ic</text>
-<text id="AH04_ia" transform="matrix(0.8166 0 0 1 1218.1475 551.3135)" class="st19 st10 st20">75A###.##</text>
-<text id="AH04_ib" transform="matrix(0.8166 0 0 1 1218.1475 566.9512)" class="st19 st10 st20">76B###.##</text>
-<text id="AH04_ic" transform="matrix(0.8166 0 0 1 1218.1475 583.2822)" class="st19 st10 st20">77C###.##</text>
-<text transform="matrix(1.0185 0 0 1 .8535 551.3135)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 1270.1885 566.9512)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 1270.1885 583.2822)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 1271.4863 608.2734)" class="st19 st10 st42">MW </text>
-<text transform="matrix(0.9119 0 0 1 158.1772 137.4312)" class="st1 st14">Uab </text>
-<text id="_x31_10KV10_x5F_ua" transform="matrix(0.8166 0 0 1 185.0889 92.7002)" class="st15 st1 st44">2 ###.##</text>
-<text id="_x31_10KV10_x5F_ub" transform="matrix(0.8166 0 0 1 185.4277 107.8999)" class="st15 st1 st44">3 ###.##</text>
-<text id="_x31_10KV10_x5F_uc" transform="matrix(0.8166 0 0 1 185.0889 122.5972)" class="st15 st1 st44">4 ###.##</text>
-<text id="_x31_10KV10_x5F_uab" transform="matrix(0.8166 0 0 1 185.0889 137.4316)" class="st15 st1 st44">5 ###.##</text>
-<text transform="matrix(0.7564 0 0 1 227.9004 94.3999)" class="st1 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 228.4004 107.8994)" class="st1 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 228.4004 123.6001)" class="st1 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 227.4004 138.7852)" class="st1 st14">   KV</text>
-<text id="ZBD_uab" transform="matrix(0.8166 0 0 1 312.5029 231.1113)" class="st15 st1 st44">6 ###.##</text>
-<text id="ZBD_ubc" transform="matrix(0.8166 0 0 1 312.5029 248.8115)" class="st15 st1 st44">7 ###.##</text>
-<text id="ZBD_uca" transform="matrix(0.8166 0 0 1 312.7754 266.7119)" class="st15 st1 st44">8 ###.##</text>
-<text transform="matrix(0.7564 0 0 1 352.4756 230.1113)" class="st1 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 352.4756 267.1123)" class="st1 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 351.9746 248.8115)" class="st1 st14">   KV</text>
-<text id="_x31_10KV10_x5F_ia" transform="matrix(0.8166 0 0 1 650 90.2998)" class="st15 st1 st44">9 ###.##</text>
-<text transform="matrix(0.7564 0 0 1 695.2998 92.2998)" class="st1 st14">   A</text>
-<text id="_x31_10KV10_x5F_ib_x5F_" transform="matrix(0.8166 0 0 1 645.9004 105.5376)" class="st15 st1 st44">10 ###.##</text>
-<text transform="matrix(0.7564 0 0 1 695.2998 107.5376)" class="st1 st14">   A</text>
-<text id="_x31_10KV10_x5F_ic" transform="matrix(0.8166 0 0 1 645.9004 119.8711)" class="st15 st1 st44">11 ###.##</text>
-<text transform="matrix(0.7564 0 0 1 695.2998 123.5972)" class="st1 st14">   A</text>
-<text id="_x31_10KV10_x5F_yg" transform="matrix(0.8166 0 0 1 645.9004 136.7847)" class="st15 st1 st44">12 ###.##</text>
-<text transform="matrix(0.7564 0 0 1 695.2998 138.7847)" class="st1 st14">   A</text>
-<text transform="matrix(0.7564 0 0 1 693.3008 153.3999)" class="st1 st14">   Mvar</text>
-<text id="_x31_10KV10_x5F_wg" transform="matrix(0.8166 0 0 1 645.9004 153.3999)" class="st15 st1 st44">13 ###.##</text>
-<text id="_x31_10KV10_x5F_ys" transform="matrix(0.8166 0 0 1 646.9004 169.6001)" class="st15 st1 st44">14 ###.##</text>
-<text transform="matrix(0.7564 0 0 1 1087.5078 212.4863)" class="st19 st10 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 1087.5078 230.5)" class="st19 st10 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 1087.5078 249.1528)" class="st19 st10 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 1201.8008 217.5005)" class="st19 st10 st14">   A</text>
-<text transform="matrix(0.7564 0 0 1 1201.9004 230.8716)" class="st19 st10 st14">   A</text>
-<text transform="matrix(0.7564 0 0 1 1202.5 246.1001)" class="st19 st10 st14">   A</text>
-<text transform="matrix(1 0 0 1 1125.3 246.3002)" class="st19 st1 st14">Ic     </text>
-<text transform="matrix(1 0 0 1 1125.3 230.8586)" class="st19 st1 st14">Ib   </text>
-<text transform="matrix(1 0 0 1 1125.3 215.2502)" class="st19 st1 st14">Ia   </text>
-<text transform="matrix(1 0 0 1 1207.1477 609.574)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 1106.0629 609.8794)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 997.9319 610.8794)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 884.114 609.8794)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 749.7756 609.8794)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 641.1979 609.8794)" class="st10 st44">P</text>
-<text transform="matrix(1 0 0 1 536.563 609.8794)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 431.3273 609.8794)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 245.0628 609.8794)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 143.0887 608.8794)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 132.0605 625.9822)" class="st19 st10 st44">cos</text>
-<text id="AH00_ys" transform="matrix(0.8166 0 0 1 155.7002 626.875)" class="st19 st10 st44">37###.##</text>
-<text id="HT001_ys" transform="matrix(0.8166 0 0 1 257.7002 627.208)" class="st19 st10 st44">39###.##</text>
-<text transform="matrix(1 0 0 1 233.3957 626.9365)" class="st19 st10 st44">cos</text>
-<text id="AH00_yg" transform="matrix(0.8166 0 0 1 155.7002 608.6523)" class="st19 st10 st44">36###.##</text>
-<text id="HT001_yg" transform="matrix(0.8166 0 0 1 257.3496 609.6523)" class="st19 st10 st44">38###.##</text>
-<text id="BY35_ys" transform="matrix(0.8166 0 0 1 444.1006 626.4961)" class="st19 st10 st44">44###.##</text>
-<text transform="matrix(1 0 0 1 418.6331 625.9822)" class="st19 st10 st44">cos</text>
-<text id="BY35_yg" transform="matrix(0.8166 0 0 1 444.1006 609.6523)" class="st19 st10 st44">43###.##</text>
-<text transform="matrix(1 0 0 1 525.3333 627.5737)" class="st19 st10 st44">cos</text>
-<text id="BY39_ys" transform="matrix(0.8166 0 0 1 549.2002 627.8301)" class="st19 st10 st44">49###.##</text>
-<text id="BY39_yg" transform="matrix(0.8166 0 0 1 549.2002 608.6533)" class="st19 st10 st44">48###.##</text>
-<text transform="matrix(1 0 0 1 630.2756 628.6738)" class="st10 st44">cos</text>
-<text id="ZB10KV31_ys" transform="matrix(0.8166 0 0 1 654.2998 629.5664)" class="st15 st10 st44">54###.##</text>
-<text id="ZB10KV31_yg" transform="matrix(0.8166 0 0 1 654.2998 609.6523)" class="st15 st10 st44">53###.##</text>
-<text transform="matrix(1 0 0 1 736.3459 627.5737)" class="st19 st10 st44">cos</text>
-<text transform="matrix(0.8166 0 0 1 761.5996 628.208)" class="st19 st10 st44">59###.##</text>
-<text id="AH1_yg" transform="matrix(0.8166 0 0 1 761.7998 609.6523)" class="st19 st10 st44">58###.##</text>
-<text id="_x31_0KVL233_x5F_ys" transform="matrix(0.8166 0 0 1 896.5996 627.875)" class="st19 st10 st44">64###.##</text>
-<text transform="matrix(1 0 0 1 872.6741 627.6738)" class="st19 st10 st44">cos</text>
-<text id="_x31_0KVL233_x5F_yg" transform="matrix(0.8166 0 0 1 895.6006 609.6523)" class="st19 st10 st44">63###.##</text>
-<text id="HT219_ys" transform="matrix(0.8166 0 0 1 1011.7002 629.5664)" class="st19 st10 st44">69###.##</text>
-<text id="HT219_yg" transform="matrix(0.8166 0 0 1 1010.5 610.6523)" class="st19 st10 st44">68###.##</text>
-<text transform="matrix(1 0 0 1 985.5021 628.6738)" class="st19 st10 st44">cos</text>
-<text id="HT220_yg" transform="matrix(0.8166 0 0 1 1118.9375 609.6006)" class="st19 st10 st44">73###.##</text>
-<text id="HT220_ys" transform="matrix(0.8166 0 0 1 1120.0996 629.875)" class="st19 st10 st44">74###.##</text>
-<text transform="matrix(1 0 0 1 1095.7832 628.6738)" class="st19 st10 st44">cos</text>
-<text transform="matrix(1 0 0 1 1195.4807 627.6738)" class="st19 st10 st44">cos</text>
-<text id="AH04_yg" transform="matrix(0.8166 0 0 1 1218.7998 608.2734)" class="st19 st10 st44">78###.##</text>
-<text id="AH04_ys" transform="matrix(0.8166 0 0 1 1218.7002 629.208)" class="st19 st10 st44">79###.##</text>
-<path class="st27" d="M564,377.9"/>
-<path class="st27" d="M563.8,377.9"/>
-<path class="st27" d="M1039.1,407.9"/>
-<line class="st29" x1="928.6" y1="403.5" x2="928.6" y2="411.5"/>
-<line class="st29" x1="927.6" y1="381" x2="927.6" y2="389.3"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st29" x1="928.1" y1="389.2" x2="922.8" y2="394.9"/>
-	<line class="st29" x1="933.6" y1="394.9" x2="927.8" y2="389.3"/>
-</g>
-<line class="st29" x1="928.3" y1="412" x2="933.5" y2="406.2"/>
-<line class="st29" x1="922.8" y1="406.2" x2="928.5" y2="411.9"/>
-<rect x="923.8" y="388.9" class="st45" width="9.7" height="14.7"/>
-<line class="st46" x1="1189.9" y1="403.8" x2="1189.9" y2="411.7"/>
-<line class="st47" x1="1188.9" y1="381.2" x2="1188.9" y2="389.5"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1189.4" y1="389.4" x2="1184.1" y2="395.1"/>
-	<line class="st4" x1="1195" y1="395.1" x2="1189.1" y2="389.4"/>
-</g>
-<line class="st48" x1="1189.6" y1="412.1" x2="1194.8" y2="406.4"/>
-<line class="st47" x1="1184" y1="406.4" x2="1189.9" y2="412.1"/>
-<rect x="1185.1" y="389.1" class="st18" width="9.7" height="14.7"/>
-<line class="st23" x1="1279.1" y1="410.1" x2="1265.9" y2="410.1"/>
-<line class="st23" x1="1278.5" y1="407.1" x2="1278.5" y2="410.1"/>
-<line class="st23" x1="1280.3" y1="416.1" x2="1280.3" y2="431.2"/>
-<line class="st23" x1="1276.5" y1="416.4" x2="1276.5" y2="431.4"/>
-<line class="st23" x1="1276.7" y1="431.1" x2="1280.6" y2="431.1"/>
-<line class="st23" x1="1276.2" y1="416.4" x2="1280.1" y2="416.4"/>
-<line class="st23" x1="1278.1" y1="410.7" x2="1278.1" y2="446.9"/>
-<path class="st24" d="M1282.5,450.4c-1.3,0-2.3-1-2.3-2.2s1.1-2.2,2.3-2.2c1.3,0,2.3,1,2.3,2.2S1283.8,450.4,1282.5,450.4"/>
-<text transform="matrix(1 0 0 1 1281.1855 448.9528)" class="st8 st1 st25">Q</text>
-<text transform="matrix(1 0 0 1 1281.1855 448.9528)" class="st6 st1 st25">Q</text>
-<path class="st24" d="M1278.1,448.6c-1.5,0-2.7-1.1-2.7-2.5s1.2-2.5,2.7-2.5s2.7,1.1,2.7,2.5
-	C1280.8,447.5,1279.6,448.6,1278.1,448.6"/>
-<line class="st6" x1="1278.2" y1="444.3" x2="1278.2" y2="446"/>
-<line class="st6" x1="1278.2" y1="445.8" x2="1279.2" y2="447.2"/>
-<line class="st6" x1="1278.1" y1="446.1" x2="1277.1" y2="447.4"/>
-<path class="st24" d="M1278.2,451.1c-1.5,0-2.7-1.1-2.7-2.5s1.2-2.5,2.7-2.5s2.7,1.1,2.7,2.5C1280.9,450,1279.7,451.1,1278.2,451.1"
-	/>
-<line class="st26" x1="1278.2" y1="446.8" x2="1278.3" y2="448.5"/>
-<line class="st26" x1="1278.2" y1="448.3" x2="1279.3" y2="449.7"/>
-<line class="st26" x1="1278.2" y1="448.6" x2="1277.2" y2="449.9"/>
-<line class="st23" x1="1266" y1="409.8" x2="1266" y2="425.3"/>
-<line class="st23" x1="1268.8" y1="421.6" x2="1268.8" y2="436.3"/>
-<line class="st23" x1="1262.7" y1="421.8" x2="1262.7" y2="436.5"/>
-<line class="st28" x1="1262.7" y1="436.2" x2="1268.8" y2="436.2"/>
-<line class="st23" x1="1262.7" y1="421.8" x2="1268.8" y2="421.8"/>
-<line class="st23" x1="1265.7" y1="436.3" x2="1265.7" y2="440.8"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1277.9" y1="417.1" x2="1283.1" y2="409.9"/>
-	<line class="st4" x1="1272.3" y1="409.9" x2="1278.2" y2="417.1"/>
-</g>
-<line class="st4" x1="1277.6" y1="376.8" x2="1272.3" y2="384"/>
-<line class="st4" x1="1283.3" y1="384" x2="1277.3" y2="376.8"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1277.6" y1="405.2" x2="1282.9" y2="397.8"/>
-	<line class="st4" x1="1272.1" y1="397.8" x2="1277.9" y2="405"/>
-</g>
-<line class="st4" x1="1277.9" y1="394" x2="1277.9" y2="377.8"/>
-<line class="st4" x1="1245" y1="282.3" x2="1245" y2="289"/>
-<line class="st4" x1="1244.2" y1="263.3" x2="1244.2" y2="270.3"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1244.6" y1="271.5" x2="1240.6" y2="276.5"/>
-	<line class="st4" x1="1248.9" y1="276.5" x2="1244.4" y2="271.5"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1244.8" y1="298.5" x2="1248.8" y2="293.6"/>
-	<line class="st4" x1="1240.5" y1="293.6" x2="1245" y2="298.5"/>
-</g>
-<rect x="1241.3" y="270" class="st49" width="7.4" height="12.4"/>
-<text transform="matrix(1 0 0 1 149.7948 207.7999)" class="st1 st14">10kv</text>
-<text transform="matrix(1 0 0 1 178.0629 207.7997)" class="st1 st14">渚х浉鐢靛帇</text>
-<text transform="matrix(1 0 0 1 153.1999 233.2303)" class="st1 st14"> Ua</text>
-<text transform="matrix(1 0 0 1 157.5013 248.0361)" class="st1 st14">Ub</text>
-<text transform="matrix(1 0 0 1 157.5013 264.5)" class="st1 st14">Uc</text>
-<text transform="matrix(1 0 0 1 161.8553 264.2563)" class="st8 st1 st14"> :</text>
-<text id="_x31_10KV10_x5F_ua_1_" transform="matrix(0.8166 0 0 1 179.5889 233.2305)" class="st15 st1 st44">82 ###.##</text>
-<text id="_x31_10KV10_x5F_ub_1_" transform="matrix(0.8166 0 0 1 179.9277 249.4297)" class="st15 st1 st44">83 ###.##</text>
-<text id="_x31_10KV10_x5F_uc_1_" transform="matrix(0.8166 0 0 1 179.5889 266.127)" class="st15 st1 st44">84 ###.##</text>
-<text transform="matrix(0.7564 0 0 1 229.4004 233.9297)" class="st1 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 228.9004 248.4297)" class="st1 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 228.9004 266.127)" class="st1 st14">   KV</text>
-<line class="st36" x1="496.5" y1="207.6" x2="496.5" y2="212.3"/>
-<line class="st36" x1="496.5" y1="212.3" x2="503.8" y2="217.4"/>
-<line class="st36" x1="496.5" y1="212.3" x2="490.7" y2="217.3"/>
-<text transform="matrix(0.7564 0 0 1 484 30.6133)" class="st1 st14">   kwh</text>
-<text transform="matrix(1 0 0 1 1018.0886 264.7607)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 1006.8799 280.1998)" class="st19 st10 st44">cos</text>
-<text id="_x31_10KV_x5F_uc_1_" transform="matrix(1.0507 0 0 1 1035.6426 264.8711)" class="st15 st10 st40">80###.##</text>
-<text transform="matrix(0.7564 0 0 1 1086.1582 265.1382)" class="st19 st10 st14">   MW</text>
-<text id="_x31_10KV_x5F_uc_2_" transform="matrix(1.0507 0 0 1 1031.9922 280.833)" class="st19 st10 st40"> 81###.##</text>
-<text transform="matrix(0.7564 0 0 1 1073.5078 281.1001)" class="st19 st1 st14">   </text>
-<text transform="matrix(1 0 0 1 180.1768 532.6353)" class="st19 st10 st43">AH00</text>
-<text transform="matrix(1 0 0 1 437 100)" class="st10 st43">105</text>
-<text transform="matrix(1 0 0 1 511.55 69)" class="st10 st43">101</text>
-<text transform="matrix(1 0 0 1 505 123.9702)" class="st10 st43">10</text>
-<text transform="matrix(1 0 0 1 522 148.2)" class="st10 st43">108</text>
-<text transform="matrix(1 0 0 1 460 187)" class="st10 st43">106</text>
-<text transform="matrix(1 0 0 1 525.8 187.354)" class="st10 st43">109</text>
-<line class="st4" x1="1058.8" y1="399.5" x2="1058.8" y2="407.5"/>
-<line class="st4" x1="1057.8" y1="377" x2="1057.8" y2="385.4"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1058.3" y1="385.2" x2="1053" y2="391"/>
-	<line class="st4" x1="1063.8" y1="391" x2="1058" y2="385.2"/>
-</g>
-<line class="st4" x1="1058.5" y1="408" x2="1063.8" y2="402.2"/>
-<line class="st4" x1="1053" y1="402.2" x2="1058.8" y2="408"/>
-<rect x="1054" y="384.9" class="st50" width="9.7" height="14.7"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="510.5" y1="381.7" x2="505.3" y2="387.4"/>
-	<line class="st4" x1="516" y1="387.4" x2="510.3" y2="381.7"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="510.7" y1="414.4" x2="516" y2="408.7"/>
-	<line class="st4" x1="505.2" y1="408.7" x2="511" y2="414.4"/>
-</g>
-<rect x="506.2" y="381.3" class="st49" width="9.7" height="14.7"/>
-<line class="st4" x1="510.5" y1="373.7" x2="510.5" y2="381.9"/>
-<line class="st4" x1="511" y1="395.1" x2="511" y2="403.3"/>
-<line class="st4" x1="591.5" y1="393.9" x2="591.5" y2="401.8"/>
-<line class="st4" x1="589.5" y1="375.4" x2="589.5" y2="383.6"/>
-<line class="st4" x1="589.8" y1="374.6" x2="584.7" y2="380.3"/>
-<line class="st4" x1="595.5" y1="380.3" x2="589.6" y2="374.6"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="590.1" y1="415.3" x2="595.3" y2="409.6"/>
-	<line class="st4" x1="584.6" y1="409.6" x2="590.3" y2="415.3"/>
-</g>
-<rect x="585.6" y="383.2" class="st49" width="9.7" height="14.7"/>
-<text transform="matrix(1 0 0 1 521.3335 92)" class="st1 st43">L</text>
-<path class="st51" d="M523.6,93.4c-3.3,0-6-2.6-6-5.8s2.7-5.8,6-5.8s6,2.6,6,5.8C529.5,90.8,526.9,93.4,523.6,93.4"/>
-<text transform="matrix(1 0 0 1 520.5 90.2998)" class="st1 st43">L</text>
-<path class="st51" d="M215.8,368.4c-3.3,0-6-2.6-6-5.8s2.7-5.8,6-5.8s5.9,2.6,5.9,5.8S219,368.4,215.8,368.4"/>
-<path class="st51" d="M299.1,367.8c-3.3,0-5.9-2.6-5.9-5.8s2.7-5.8,5.9-5.8c3.3,0,5.9,2.6,5.9,5.8S302.4,367.8,299.1,367.8"/>
-<path class="st51" d="M506.2,365.9c-3.3,0-6-2.6-6-5.8s2.7-5.8,6-5.8s6,2.6,6,5.8S509.5,365.9,506.2,365.9"/>
-<path class="st51" d="M578.9,365.9c-3.3,0-6-2.6-6-5.8s2.7-5.8,6-5.8s6,2.6,6,5.8S582.2,365.9,578.9,365.9"/>
-<text transform="matrix(1 0 0 1 211.75 365.3)" class="st1 st43">R</text>
-<text transform="matrix(1 0 0 1 295.5 365.3)" class="st1 st43">R</text>
-<text transform="matrix(1 0 0 1 503.8 362.667)" class="st1 st43">L</text>
-<text transform="matrix(1 0 0 1 576.7 362.667)" class="st1 st43">L</text>
-<line class="st36" x1="496.5" y1="222.6" x2="503.2" y2="233.9"/>
-<line class="st36" x1="496" y1="225.7" x2="503.2" y2="233.9"/>
-<path class="st51" d="M706.5,367.8c-3.3,0-6-2.6-6-5.8s2.7-5.8,6-5.8s6,2.6,6,5.8S709.7,367.8,706.5,367.8"/>
-<text transform="matrix(1 0 0 1 702.8766 365.3)" class="st1 st43">R</text>
-<path class="st51" d="M812.2,367.8c-3.3,0-6-2.6-6-5.8s2.7-5.8,6-5.8s6,2.6,6,5.8S815.5,367.8,812.2,367.8"/>
-<text transform="matrix(1 0 0 1 808.6 365.3)" class="st1 st43">R</text>
-<path class="st51" d="M941.1,366.8c-3.3,0-5.9-2.6-5.9-5.8s2.7-5.8,5.9-5.8c3.3,0,6,2.6,6,5.8S944.4,366.8,941.1,366.8"/>
-<text transform="matrix(1 0 0 1 936.5 365.3)" class="st1 st43">R</text>
-<path class="st51" d="M1050.1,364.8c-3.3,0-5.9-2.6-5.9-5.8s2.7-5.8,5.9-5.8c3.3,0,6,2.6,6,5.8S1053.4,364.8,1050.1,364.8"/>
-<text transform="matrix(1 0 0 1 1045.5 363.3)" class="st1 st43">R</text>
-<path class="st51" d="M1133.1,364.8c-3.3,0-5.9-2.6-5.9-5.8s2.7-5.8,5.9-5.8c3.3,0,6,2.6,6,5.8S1136.4,364.8,1133.1,364.8"/>
-<text transform="matrix(1 0 0 1 1128.5 363.3)" class="st1 st43">R</text>
-<path class="st51" d="M1205.1,366.8c-3.3,0-5.9-2.6-5.9-5.8s2.7-5.8,5.9-5.8c3.3,0,6,2.6,6,5.8S1208.4,366.8,1205.1,366.8"/>
-<text transform="matrix(1 0 0 1 1201.5 364.3)" class="st1 st43">R</text>
-<line class="st36" x1="496" y1="225.7" x2="501.5" y2="232"/>
-<line class="st36" x1="300.5" y1="171.6" x2="305.8" y2="176.6"/>
-<line class="st36" x1="503.1" y1="233.2" x2="496.6" y2="223.3"/>
-<line class="st26" x1="503.3" y1="234.8" x2="496.5" y2="222.6"/>
-<line class="st52" x1="496.3" y1="213.9" x2="492.7" y2="218.9"/>
-<line class="st52" x1="496.3" y1="213.9" x2="499.6" y2="219"/>
-<line class="st52" x1="496.3" y1="209.3" x2="496.3" y2="214.3"/>
-<text transform="matrix(1 0 0 1 390.5 233.5)" class="st1 st43">闆�</text>
-<text transform="matrix(1 0 0 1 402.5 233.5)" class="st10 st43">1</text>
-<line class="st6" x1="413.5" y1="433.7" x2="405.9" y2="433.7"/>
-<line class="st6" x1="413.6" y1="433.6" x2="410" y2="436.1"/>
-<line class="st6" x1="410.8" y1="436.6" x2="406.8" y2="434.1"/>
-<line class="st6" x1="670.7" y1="435.4" x2="663" y2="435.4"/>
-<line class="st6" x1="670.4" y1="436" x2="666.8" y2="438.6"/>
-<line class="st6" x1="667" y1="438.3" x2="662.9" y2="435.7"/>
-<line class="st6" x1="778.3" y1="437.5" x2="770.6" y2="437.5"/>
-<line class="st6" x1="778.4" y1="437.4" x2="774.7" y2="440"/>
-<line class="st6" x1="774.6" y1="440" x2="770.6" y2="437.4"/>
-<line class="st6" x1="1179.4" y1="441.2" x2="1171.7" y2="441.2"/>
-<line class="st6" x1="1178.5" y1="442" x2="1174.8" y2="444.7"/>
-<line class="st6" x1="1175.7" y1="444.8" x2="1171.7" y2="442.1"/>
-<line class="st6" x1="1263.2" y1="426.3" x2="1268.8" y2="426.3"/>
-<line class="st6" x1="1263.5" y1="426.4" x2="1266.2" y2="429"/>
-<line class="st6" x1="1265.5" y1="429.3" x2="1268.5" y2="426.7"/>
-<line class="st6" x1="1108.9" y1="440.8" x2="1101.2" y2="440.8"/>
-<line class="st6" x1="1107.8" y1="441.5" x2="1104.2" y2="444.1"/>
-<line class="st6" x1="1105" y1="443.3" x2="1100.9" y2="440.7"/>
-<line class="st6" x1="1029.1" y1="440" x2="1021.5" y2="440"/>
-<line class="st6" x1="1029.1" y1="440.4" x2="1025.5" y2="443"/>
-<line class="st6" x1="1025.5" y1="442.8" x2="1021.5" y2="440.1"/>
-<line class="st6" x1="208.3" y1="462.8" x2="215.2" y2="462.8"/>
-<line class="st6" x1="209.2" y1="464.9" x2="214.4" y2="464.9"/>
-<line class="st6" x1="210.5" y1="467.3" x2="212.6" y2="467.3"/>
-<line class="st6" x1="295.6" y1="461.5" x2="302.6" y2="461.5"/>
-<line class="st6" x1="296.6" y1="463.6" x2="301.8" y2="463.6"/>
-<line class="st6" x1="297.9" y1="466" x2="300" y2="466"/>
-<line class="st6" x1="1262.5" y1="441.2" x2="1269.3" y2="441.2"/>
-<line class="st6" x1="1263.4" y1="442.9" x2="1268.6" y2="442.9"/>
-<line class="st6" x1="1264.7" y1="444.9" x2="1266.8" y2="444.9"/>
-<line class="st6" x1="483.6" y1="436.1" x2="476" y2="436.1"/>
-<line class="st6" x1="483.5" y1="435.9" x2="479.9" y2="438.5"/>
-<line class="st6" x1="480" y1="438.7" x2="476" y2="436.1"/>
-<line class="st6" x1="554.3" y1="437.8" x2="546.7" y2="437.8"/>
-<line class="st6" x1="554.1" y1="437.6" x2="550.4" y2="440.2"/>
-<line class="st6" x1="550.7" y1="440.4" x2="546.7" y2="437.8"/>
-<line class="st6" x1="347.7" y1="398.8" x2="353.3" y2="398.8"/>
-<line class="st6" x1="347.6" y1="399" x2="350.4" y2="401.6"/>
-<line class="st6" x1="350.7" y1="401.6" x2="353.6" y2="399"/>
-<text transform="matrix(0.9013 0 0 1 1282.9004 335.7031)" class="st6 st10 st41">203</text>
-<text transform="matrix(0.9013 0 0 1 1267.2754 315.2007)" class="st6 st10 st41">231</text>
-<line class="st6" x1="1227.9" y1="317.3" x2="1231.4" y2="317.3"/>
-<line class="st6" x1="1227.8" y1="317.5" x2="1229.5" y2="319.9"/>
-<line class="st6" x1="1229.5" y1="319.9" x2="1231.3" y2="317.5"/>
-</svg>
diff --git a/energy_management_ui/src/assets/icons/svg/404.svg b/energy_management_ui/src/assets/icons/svg/404.svg
deleted file mode 100644
index 6df5019..0000000
--- a/energy_management_ui/src/assets/icons/svg/404.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M121.718 73.272v9.953c3.957-7.584 6.199-16.05 6.199-24.995C127.917 26.079 99.273 0 63.958 0 28.644 0 0 26.079 0 58.23c0 .403.028.806.028 1.21l22.97-25.953h13.34l-19.76 27.187h6.42V53.77l13.728-19.477v49.361H22.998V73.272H2.158c5.951 20.284 23.608 36.208 45.998 41.399-1.44 3.3-5.618 11.263-12.565 12.674-8.607 1.764 23.358.428 46.163-13.178 17.519-4.611 31.938-15.849 39.77-30.513h-13.506V73.272H85.02V59.464l22.998-25.977h13.008l-19.429 27.187h6.421v-7.433l13.727-19.402v39.433h-.027zm-78.24 2.822a10.516 10.516 0 0 1-.996-4.535V44.548c0-1.613.332-3.124.996-4.535a11.66 11.66 0 0 1 2.713-3.68c1.134-1.032 2.49-1.864 4.04-2.468 1.55-.605 3.21-.908 4.982-.908h11.292c1.77 0 3.431.303 4.981.908 1.522.604 2.85 1.41 3.986 2.418l-12.26 16.303v-2.898a1.96 1.96 0 0 0-.665-1.512c-.443-.403-.996-.604-1.66-.604-.665 0-1.218.201-1.661.604a1.96 1.96 0 0 0-.664 1.512v9.071L44.364 77.606a10.556 10.556 0 0 1-.886-1.512zm35.73-4.535c0 1.613-.332 3.124-.997 4.535a11.66 11.66 0 0 1-2.712 3.68c-1.134 1.032-2.49 1.864-4.04 2.469-1.55.604-3.21.907-4.982.907H55.185c-1.77 0-3.431-.303-4.981-.907-1.55-.605-2.906-1.437-4.041-2.47a12.49 12.49 0 0 1-1.384-1.512l13.727-18.217v6.375c0 .605.222 1.109.665 1.512.442.403.996.604 1.66.604.664 0 1.218-.201 1.66-.604a1.96 1.96 0 0 0 .665-1.512V53.87L75.97 36.838c.913.932 1.66 1.99 2.214 3.175.664 1.41.996 2.922.996 4.535v27.011h.028z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/bug.svg b/energy_management_ui/src/assets/icons/svg/bug.svg
deleted file mode 100644
index 05a150d..0000000
--- a/energy_management_ui/src/assets/icons/svg/bug.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M127.88 73.143c0 1.412-.506 2.635-1.518 3.669-1.011 1.033-2.209 1.55-3.592 1.55h-17.887c0 9.296-1.783 17.178-5.35 23.645l16.609 17.044c1.011 1.034 1.517 2.257 1.517 3.67 0 1.412-.506 2.635-1.517 3.668-.958 1.033-2.155 1.55-3.593 1.55-1.438 0-2.635-.517-3.593-1.55l-15.811-16.063a15.49 15.49 0 0 1-1.196 1.06c-.532.434-1.65 1.208-3.353 2.322a50.104 50.104 0 0 1-5.192 2.974c-1.758.87-3.94 1.658-6.546 2.364-2.607.706-5.189 1.06-7.748 1.06V47.044H58.89v73.062c-2.716 0-5.417-.367-8.106-1.102-2.688-.734-5.003-1.631-6.945-2.692a66.769 66.769 0 0 1-5.268-3.179c-1.571-1.057-2.73-1.94-3.476-2.65L33.9 109.34l-14.611 16.877c-1.066 1.14-2.344 1.711-3.833 1.711-1.277 0-2.422-.434-3.434-1.304-1.012-.978-1.557-2.187-1.635-3.627-.079-1.44.333-2.705 1.236-3.794l16.129-18.51c-3.087-6.197-4.63-13.644-4.63-22.342H5.235c-1.383 0-2.58-.517-3.592-1.55S.125 74.545.125 73.132c0-1.412.506-2.635 1.518-3.668 1.012-1.034 2.21-1.55 3.592-1.55h17.887V43.939L9.308 29.833c-1.012-1.033-1.517-2.256-1.517-3.669 0-1.412.505-2.635 1.517-3.668 1.012-1.034 2.21-1.55 3.593-1.55s2.58.516 3.593 1.55l13.813 14.106h67.396l13.814-14.106c1.012-1.034 2.21-1.55 3.592-1.55 1.384 0 2.581.516 3.593 1.55 1.012 1.033 1.518 2.256 1.518 3.668 0 1.413-.506 2.636-1.518 3.67l-13.814 14.105v23.975h17.887c1.383 0 2.58.516 3.593 1.55 1.011 1.033 1.517 2.256 1.517 3.668l-.005.01zM89.552 26.175H38.448c0-7.23 2.489-13.386 7.466-18.469C50.892 2.623 56.92.082 64 .082c7.08 0 13.108 2.541 18.086 7.624 4.977 5.083 7.466 11.24 7.466 18.469z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/build.svg b/energy_management_ui/src/assets/icons/svg/build.svg
deleted file mode 100644
index 97c4688..0000000
--- a/energy_management_ui/src/assets/icons/svg/build.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1568899741379" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2054" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M960 591.424V368.96c0-0.288 0.16-0.512 0.16-0.768S960 367.68 960 367.424V192a32 32 0 0 0-32-32H96a32 32 0 0 0-32 32v175.424c0 0.288-0.16 0.512-0.16 0.768s0.16 0.48 0.16 0.768v222.464c0 0.288-0.16 0.512-0.16 0.768s0.16 0.48 0.16 0.768V864a32 32 0 0 0 32 32h832a32 32 0 0 0 32-32v-271.04c0-0.288 0.16-0.512 0.16-0.768S960 591.68 960 591.424z m-560-31.232v-160H608v160h-208z m208 64V832h-208v-207.808H608z m-480-224h208v160H128v-160z m544 0h224v160h-224v-160zM896 224v112.192H128V224h768zM128 624.192h208V832H128v-207.808zM672 832v-207.808h224V832h-224z" p-id="2055"></path></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/chart.svg b/energy_management_ui/src/assets/icons/svg/chart.svg
deleted file mode 100644
index 27728fb..0000000
--- a/energy_management_ui/src/assets/icons/svg/chart.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M0 54.857h36.571V128H0V54.857zM91.429 27.43H128V128H91.429V27.429zM45.714 0h36.572v128H45.714V0z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/clipboard.svg b/energy_management_ui/src/assets/icons/svg/clipboard.svg
deleted file mode 100644
index 90923ff..0000000
--- a/energy_management_ui/src/assets/icons/svg/clipboard.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M54.857 118.857h64V73.143H89.143c-1.902 0-3.52-.668-4.855-2.002-1.335-1.335-2.002-2.954-2.002-4.855V36.57H54.857v82.286zM73.143 16v-4.571a2.2 2.2 0 0 0-.677-1.61 2.198 2.198 0 0 0-1.609-.676H20.571c-.621 0-1.158.225-1.609.676a2.198 2.198 0 0 0-.676 1.61V16a2.2 2.2 0 0 0 .676 1.61c.451.45.988.676 1.61.676h50.285c.622 0 1.158-.226 1.61-.677.45-.45.676-.987.676-1.609zm18.286 48h21.357L91.43 42.642V64zM128 73.143v48c0 1.902-.667 3.52-2.002 4.855-1.335 1.335-2.953 2.002-4.855 2.002H52.57c-1.901 0-3.52-.667-4.854-2.002-1.335-1.335-2.003-2.953-2.003-4.855v-11.429H6.857c-1.902 0-3.52-.667-4.855-2.002C.667 106.377 0 104.759 0 102.857v-96c0-1.902.667-3.52 2.002-4.855C3.337.667 4.955 0 6.857 0h77.714c1.902 0 3.52.667 4.855 2.002 1.335 1.335 2.003 2.953 2.003 4.855V30.29c1 .622 1.856 1.29 2.569 2.003l29.147 29.147c1.335 1.335 2.478 3.145 3.429 5.43.95 2.287 1.426 4.383 1.426 6.291v-.018z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/code.svg b/energy_management_ui/src/assets/icons/svg/code.svg
deleted file mode 100644
index ed4d23c..0000000
--- a/energy_management_ui/src/assets/icons/svg/code.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1546567861908" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2422" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M318.577778 819.2L17.066667 512l301.511111-307.2 45.511111 45.511111L96.711111 512l267.377778 261.688889zM705.422222 819.2l-45.511111-45.511111L927.288889 512l-267.377778-261.688889 45.511111-45.511111L1006.933333 512zM540.785778 221.866667l55.751111 11.150222L483.157333 802.133333l-55.751111-11.093333z" fill="#bfbfbf" p-id="2423"></path></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/component.svg b/energy_management_ui/src/assets/icons/svg/component.svg
deleted file mode 100644
index 207ada3..0000000
--- a/energy_management_ui/src/assets/icons/svg/component.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h54.857v54.857H0V0zm0 73.143h54.857V128H0V73.143zm73.143 0H128V128H73.143V73.143zm27.428-18.286C115.72 54.857 128 42.577 128 27.43 128 12.28 115.72 0 100.571 0 85.423 0 73.143 12.28 73.143 27.429c0 15.148 12.28 27.428 27.428 27.428z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/dashboard.svg b/energy_management_ui/src/assets/icons/svg/dashboard.svg
deleted file mode 100644
index 5317d37..0000000
--- a/energy_management_ui/src/assets/icons/svg/dashboard.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="100" xmlns="http://www.w3.org/2000/svg"><path d="M27.429 63.638c0-2.508-.893-4.65-2.679-6.424-1.786-1.775-3.94-2.662-6.464-2.662-2.524 0-4.679.887-6.465 2.662-1.785 1.774-2.678 3.916-2.678 6.424 0 2.508.893 4.65 2.678 6.424 1.786 1.775 3.94 2.662 6.465 2.662 2.524 0 4.678-.887 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zm13.714-31.801c0-2.508-.893-4.65-2.679-6.424-1.785-1.775-3.94-2.662-6.464-2.662-2.524 0-4.679.887-6.464 2.662-1.786 1.774-2.679 3.916-2.679 6.424 0 2.508.893 4.65 2.679 6.424 1.785 1.774 3.94 2.662 6.464 2.662 2.524 0 4.679-.888 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zM71.714 65.98l7.215-27.116c.285-1.23.107-2.378-.536-3.443-.643-1.064-1.56-1.762-2.75-2.094-1.19-.33-2.333-.177-3.429.462-1.095.639-1.81 1.573-2.143 2.804l-7.214 27.116c-2.857.237-5.405 1.266-7.643 3.088-2.238 1.822-3.738 4.152-4.5 6.992-.952 3.644-.476 7.098 1.429 10.364 1.905 3.265 4.69 5.37 8.357 6.317 3.667.947 7.143.474 10.429-1.42 3.285-1.892 5.404-4.66 6.357-8.305.762-2.84.619-5.607-.429-8.305-1.047-2.697-2.762-4.85-5.143-6.46zm47.143-2.342c0-2.508-.893-4.65-2.678-6.424-1.786-1.775-3.94-2.662-6.465-2.662-2.524 0-4.678.887-6.464 2.662-1.786 1.774-2.679 3.916-2.679 6.424 0 2.508.893 4.65 2.679 6.424 1.786 1.775 3.94 2.662 6.464 2.662 2.524 0 4.679-.887 6.465-2.662 1.785-1.775 2.678-3.916 2.678-6.424zm-45.714-45.43c0-2.509-.893-4.65-2.679-6.425C68.68 10.01 66.524 9.122 64 9.122c-2.524 0-4.679.887-6.464 2.661-1.786 1.775-2.679 3.916-2.679 6.425 0 2.508.893 4.65 2.679 6.424 1.785 1.774 3.94 2.662 6.464 2.662 2.524 0 4.679-.888 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zm32 13.629c0-2.508-.893-4.65-2.679-6.424-1.785-1.775-3.94-2.662-6.464-2.662-2.524 0-4.679.887-6.464 2.662-1.786 1.774-2.679 3.916-2.679 6.424 0 2.508.893 4.65 2.679 6.424 1.785 1.774 3.94 2.662 6.464 2.662 2.524 0 4.679-.888 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zM128 63.638c0 12.351-3.357 23.78-10.071 34.286-.905 1.372-2.19 2.058-3.858 2.058H13.93c-1.667 0-2.953-.686-3.858-2.058C3.357 87.465 0 76.037 0 63.638c0-8.613 1.69-16.847 5.071-24.703C8.452 31.08 13 24.312 18.714 18.634c5.715-5.68 12.524-10.199 20.429-13.559C47.048 1.715 55.333.035 64 .035c8.667 0 16.952 1.68 24.857 5.04 7.905 3.36 14.714 7.88 20.429 13.559 5.714 5.678 10.262 12.446 13.643 20.301 3.38 7.856 5.071 16.09 5.071 24.703z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/date.svg b/energy_management_ui/src/assets/icons/svg/date.svg
deleted file mode 100644
index 2a28112..0000000
--- a/energy_management_ui/src/assets/icons/svg/date.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1567417179372" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1155" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M947.2 1024 76.8 1024C38.4 1024 0 992 0 953.6L0 172.8c0-38.4 38.4-70.4 76.8-70.4l38.4 0 0 102.4c0 38.4 38.4 70.4 76.8 70.4l76.8 0c44.8 0 76.8-32 76.8-70.4L345.6 102.4l313.6 0 0 102.4c0 38.4 38.4 70.4 76.8 70.4l76.8 0c44.8 0 76.8-32 76.8-70.4L889.6 102.4l38.4 0c44.8 0 76.8 32 76.8 70.4l0 787.2C1024 992 985.6 1024 947.2 1024zM352 339.2 115.2 339.2 115.2 512l236.8 0L352 339.2zM352 544 115.2 544l0 172.8 236.8 0L352 544zM352 748.8 115.2 748.8l0 172.8 236.8 0L352 748.8zM627.2 339.2 396.8 339.2 396.8 512l236.8 0L633.6 339.2zM627.2 544 396.8 544l0 172.8 236.8 0L633.6 544zM627.2 748.8 396.8 748.8l0 172.8 236.8 0L633.6 748.8zM908.8 339.2l-236.8 0L672 512l236.8 0L908.8 339.2zM908.8 544l-236.8 0 0 172.8 236.8 0L908.8 544zM908.8 748.8l-236.8 0 0 172.8 236.8 0L908.8 748.8zM787.2 236.8c-44.8 0-76.8-32-76.8-70.4L710.4 70.4c0-38.4 38.4-70.4 76.8-70.4s76.8 32 76.8 70.4l0 102.4C864 211.2 832 236.8 787.2 236.8zM236.8 236.8C192 236.8 160 211.2 160 172.8L160 70.4C160 32 192 0 236.8 0s76.8 32 76.8 70.4l0 102.4C313.6 211.2 281.6 236.8 236.8 236.8z" p-id="1156"></path></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/dian.svg b/energy_management_ui/src/assets/icons/svg/dian.svg
deleted file mode 100644
index 021ca51..0000000
--- a/energy_management_ui/src/assets/icons/svg/dian.svg
+++ /dev/null
@@ -1,1204 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="鍥惧眰_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1330.6 650.3" style="enable-background:new 0 0 1330.6 650.3;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#F0EEED;}
-	.st1{font-family:'SimHei';}
-	.st2{font-size:36px;}
-	.st3{fill:none;stroke:#993333;stroke-width:3;stroke-miterlimit:10;}
-	.st4{fill:none;stroke:#663333;stroke-width:1.5;}
-	.st5{fill:#FFFFFF;stroke:#663333;stroke-width:1.5;}
-	.st6{fill:none;stroke:#663333;stroke-miterlimit:10;}
-	.st7{stroke:#663333;stroke-miterlimit:10;}
-	.st8{fill:#FFFFFF;}
-	.st9{font-size:10.6699px;}
-	.st10{font-family:'TimesNewRomanPSMT';}
-	.st11{font-size:9.1456px;}
-	.st12{font-size:16.0048px;}
-	.st13{fill:none;stroke:#CA9B33;stroke-width:5;stroke-miterlimit:10;}
-	.st14{font-size:13.7184px;}
-	.st15{fill:#FB5C5C;}
-	.st16{font-size:18px;}
-	.st17{font-size:17.0812px;}
-	.st18{fill:#8B0000;stroke:#8B0000;stroke-miterlimit:10;}
-	.st19{fill:#3A1BF4;}
-	.st20{font-size:12.8951px;}
-	.st21{fill:none;stroke:#99CC99;stroke-miterlimit:10;}
-	.st22{fill:none;stroke:#666666;stroke-miterlimit:10;}
-	.st23{fill:none;stroke:#663333;}
-	.st24{fill:#FFFFFF;stroke:#663333;stroke-width:0.5;stroke-miterlimit:10;}
-	.st25{font-size:2.5668px;}
-	.st26{fill:none;stroke:#663333;stroke-width:0.5;stroke-miterlimit:10;}
-	.st27{stroke:#663333;stroke-width:1.5;}
-	.st28{fill:none;stroke:#663333;stroke-width:0.5;}
-	.st29{fill:none;stroke:#037400;stroke-width:1.5;}
-	.st30{stroke:#663333;stroke-width:0.5;stroke-miterlimit:10;}
-	.st31{fill:none;stroke:#663333;stroke-width:2;stroke-miterlimit:10;}
-	.st32{font-size:3.0882px;}
-	.st33{fill:none;stroke:#28B400;stroke-miterlimit:10;}
-	.st34{fill:#FFFFFF;stroke:#0A26FF;stroke-miterlimit:10;}
-	.st35{fill:#FFFFFF;stroke:#999966;stroke-miterlimit:10;}
-	.st36{fill:none;}
-	.st37{font-size:14.0625px;}
-	.st38{font-size:13.3828px;}
-	.st39{font-size:13.1666px;}
-	.st40{font-size:12.1669px;}
-	.st41{font-size:14.1138px;}
-	.st42{font-size:11.6694px;}
-	.st43{font-size:12px;}
-	.st44{font-size:13.72px;}
-	.st45{fill:#037400;stroke:#037400;stroke-miterlimit:10;}
-	.st46{fill:none;stroke:#0E5500;stroke-width:1.5;}
-	.st47{fill:none;stroke:#8B0000;stroke-width:1.5;}
-	.st48{fill:none;stroke:#025F00;stroke-width:1.5;}
-	.st49{fill:#FFAD3F;stroke:#FFAD5B;stroke-miterlimit:10;}
-	.st50{fill:#FFAD5B;stroke:#FFAD5B;stroke-miterlimit:10;}
-	.st51{fill:#00FF00;stroke:#00FF00;stroke-miterlimit:10;}
-	.st52{fill:none;stroke:#0A26FF;stroke-width:0.5;stroke-miterlimit:10;}
-</style>
-<polyline class="st0" points="0,-2.2 1330.6,-2.2 1330.6,647.8 0,647.8 "/>
-<text transform="matrix(0.8161 0 0 1 19.0127 37.5732)" class="st1 st2">鐢靛姏绯荤粺鑳芥祦鍥�</text>
-<line class="st3" x1="58.5" y1="342.8" x2="854.8" y2="342.8"/>
-<line class="st4" x1="193.6" y1="400.2" x2="193.6" y2="410.1"/>
-<line class="st4" x1="193.6" y1="371.5" x2="193.6" y2="381.9"/>
-<line class="st4" x1="193.6" y1="343.8" x2="193.6" y2="367.2"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="193.6" y1="375.2" x2="188.4" y2="382.4"/>
-	<line class="st4" x1="199.2" y1="382.4" x2="193.3" y2="375.2"/>
-	<line class="st4" x1="193.6" y1="380" x2="188.4" y2="387.2"/>
-	<line class="st4" x1="199.2" y1="387.2" x2="193.3" y2="380.1"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="193.3" y1="424.4" x2="198.6" y2="417.1"/>
-	<line class="st4" x1="187.8" y1="417.1" x2="193.6" y2="424.3"/>
-	<line class="st4" x1="193.3" y1="419.5" x2="198.6" y2="412.3"/>
-	<line class="st4" x1="187.8" y1="412.3" x2="193.6" y2="419.5"/>
-</g>
-<rect x="170" y="434.4" class="st5" width="10.1" height="18.2"/>
-<line class="st6" x1="174.7" y1="435.1" x2="171.4" y2="444.9"/>
-<line class="st6" x1="171.4" y1="444.9" x2="178.3" y2="444.9"/>
-<line class="st6" x1="178.3" y1="444.9" x2="174.7" y2="435.1"/>
-<line class="st6" x1="174.7" y1="440.5" x2="174.8" y2="462.9"/>
-<line class="st6" x1="174.8" y1="422.1" x2="174.8" y2="433.7"/>
-<line class="st6" x1="171.4" y1="462.9" x2="178.3" y2="462.9"/>
-<line class="st6" x1="172.3" y1="465" x2="177.5" y2="465"/>
-<line class="st6" x1="173.6" y1="467.4" x2="175.7" y2="467.4"/>
-<path class="st7" d="M212.4,422.1"/>
-<path class="st7" d="M203.8,442.1"/>
-<line class="st4" x1="431.4" y1="370.6" x2="431.4" y2="409.6"/>
-<line class="st4" x1="431.4" y1="343" x2="431.4" y2="366.3"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="431.4" y1="374.3" x2="426.1" y2="381.5"/>
-	<line class="st4" x1="437" y1="381.5" x2="431.1" y2="374.4"/>
-	<line class="st4" x1="431.4" y1="379.1" x2="426.1" y2="386.4"/>
-	<line class="st4" x1="437" y1="386.4" x2="431.1" y2="379.2"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="431.1" y1="423.5" x2="436.3" y2="416.3"/>
-	<line class="st4" x1="425.5" y1="416.3" x2="431.4" y2="423.4"/>
-	<line class="st4" x1="431.1" y1="418.7" x2="436.3" y2="411.4"/>
-	<line class="st4" x1="425.5" y1="411.4" x2="431.4" y2="418.6"/>
-</g>
-<line class="st4" x1="492.6" y1="342.9" x2="492.6" y2="366.2"/>
-<line class="st6" x1="480.1" y1="421.2" x2="510.3" y2="421.2"/>
-<line class="st4" x1="683.7" y1="342.7" x2="683.7" y2="366"/>
-<line class="st4" x1="790.8" y1="343.1" x2="790.8" y2="366.4"/>
-<line class="st4" x1="1038.8" y1="343" x2="1038.7" y2="368.6"/>
-<text transform="matrix(1 0 0 1 189.0005 334.0032)" class="st8 st1 st9">36</text>
-<text transform="matrix(1 0 0 1 189.0005 334.0032)" class="st6 st10 st9">36</text>
-<text transform="matrix(1 0 0 1 274.8379 334.0032)" class="st8 st1 st9">34</text>
-<text transform="matrix(1 0 0 1 274.8379 334.0032)" class="st6 st10 st9">34</text>
-<text transform="matrix(1 0 0 1 350.3413 334.0032)" class="st8 st1 st9"> 浜�03</text>
-<text transform="matrix(1 0 0 1 350.3413 334.0032)" class="st6 st10 st9"> </text>
-<text transform="matrix(1 0 0 1 353.0413 334.2049)" class="st6 st1 st9">浜�</text>
-<text transform="matrix(1 0 0 1 363.6413 334.0032)" class="st6 st10 st9">03</text>
-<text transform="matrix(1 0 0 1 420.9443 334.0032)" class="st8 st1 st9"> 30</text>
-<text transform="matrix(1 0 0 1 420.9443 334.0032)" class="st6 st10 st9"> 30</text>
-<text transform="matrix(1 0 0 1 491.1338 334.0032)" class="st8 st1 st9">35</text>
-<text transform="matrix(1 0 0 1 491.1338 334.0032)" class="st6 st10 st9">35</text>
-<text transform="matrix(1 0 0 1 559.7627 334.0032)" class="st8 st1 st9">39</text>
-<text transform="matrix(1 0 0 1 559.7627 334.0032)" class="st6 st10 st9">39</text>
-<text transform="matrix(1 0 0 1 783.3477 334.0032)" class="st8 st1 st9">37</text>
-<text transform="matrix(1 0 0 1 783.3477 334.0032)" class="st6 st10 st9">37</text>
-<text transform="matrix(1 0 0 1 680.668 334.0032)" class="st8 st1 st9">31</text>
-<text transform="matrix(1 0 0 1 680.668 334.0032)" class="st6 st10 st9">31</text>
-<text transform="matrix(1 0 0 1 933.835 334.6379)" class="st8 st1 st9">233</text>
-<text transform="matrix(1 0 0 1 933.835 334.6379)" class="st6 st10 st9">233</text>
-<text transform="matrix(1 0 0 1 1031.54 334.6379)" class="st8 st1 st9">237</text>
-<text transform="matrix(1 0 0 1 1031.54 334.6379)" class="st6 st10 st9">237</text>
-<text transform="matrix(1 0 0 1 1108.1162 335.0032)" class="st8 st1 st9">234</text>
-<text transform="matrix(1 0 0 1 1108.1162 335.0032)" class="st6 st10 st9">234</text>
-<text transform="matrix(1 0 0 1 1182.043 334.5217)" class="st8 st1 st9">236</text>
-<text transform="matrix(1 0 0 1 1182.043 334.5217)" class="st6 st10 st9">236</text>
-<text transform="matrix(1 0 0 1 44.874 46.3831)" class="st8 st1 st11">  </text>
-<text transform="matrix(1 0 0 1 44.874 46.3831)" class="st6 st1 st11">  </text>
-<text transform="matrix(1 0 0 1 339.957 60.4106)" class="st1 st12"> 110kv</text>
-<text transform="matrix(1 0 0 1 402.9 60.4109)" class="st1 st12">姣嶇嚎</text>
-<line class="st13" x1="241.6" y1="41.6" x2="759.4" y2="41.6"/>
-<text transform="matrix(1 0 0 1 58.0015 74.5823)" class="st8 st1 st11">  </text>
-<text transform="matrix(1 0 0 1 58.0015 74.5823)" class="st6 st1 st11">  </text>
-<text transform="matrix(1 0 0 1 63.0835 74.5823)" class="st8 st1 st12">                   </text>
-<text transform="matrix(1 0 0 1 63.0835 74.5823)" class="st6 st1 st12">                   </text>
-<text transform="matrix(1 0 0 1 147.5703 75.5823)" class="st1 st14">110kv</text>
-<text transform="matrix(1 0 0 1 184.1768 75.9338)" class="st1 st14">渚х數鍘�</text>
-<text transform="matrix(1 0 0 1 159.7 92.7003)" class="st1 st14"> Ua</text>
-<text transform="matrix(1 0 0 1 163.0015 108.5061)" class="st1 st14">Ub</text>
-<text transform="matrix(1 0 0 1 163.0015 123.9702)" class="st1 st14">Uc</text>
-<text transform="matrix(1 0 0 1 279.7454 231.0806)" class="st1 st14"> Uab</text>
-<text transform="matrix(1 0 0 1 279.7454 248.5416)" class="st1 st14"> Ubc</text>
-<text transform="matrix(1 0 0 1 279.7454 266.0045)" class="st1 st14"> Uac</text>
-<text transform="matrix(1 0 0 1 616.3359 70.7708)" class="st1 st14">110kv</text>
-<text transform="matrix(1 0 0 1 652.9424 70.1233)" class="st1 st14">渚х數娴佸強鍔熺巼</text>
-<text transform="matrix(1 0 0 1 620.6699 91.3489)" class="st1 st14">Ia   </text>
-<text transform="matrix(1 0 0 1 620.6699 105.8303)" class="st1 st14">Ib   </text>
-<text transform="matrix(1 0 0 1 621.6699 121.5969)" class="st1 st14">Ic     </text>
-<text transform="matrix(1 0 0 1 627.6699 137.0774)" class="st1 st14">P   </text>
-<text transform="matrix(1 0 0 1 627.6699 153.5393)" class="st1 st14">Q    </text>
-<text transform="matrix(1 0 0 1 617.6699 169.0502)" class="st1 st14">cos   </text>
-<text transform="matrix(1 0 0 1 562.7197 217.1656)" class="st1 st14">涓诲彉娌归潰娓╁害</text>
-<text id="ZB_wd" transform="matrix(1 0 0 1 645.0308 217.4094)" class="st15 st1 st14">15###.##</text>
-<text transform="matrix(1 0 0 1 707.1167 217.1656)" class="st1 st14">搴�</text>
-<text transform="matrix(1 0 0 1 562.7197 233.6276)" class="st1 st14">涓诲彉缁曠粍娓╁害</text>
-<text transform="matrix(1 0 0 1 632.0308 233.8713)" class="st15 st1 st14">  16###.##    </text>
-<text transform="matrix(1 0 0 1 707.1167 233.6276)" class="st1 st14">搴�</text>
-<text transform="matrix(1 0 0 1 588 251.0002)" class="st1 st14">涓诲彉妗d綅</text>
-<text id="ZB_dw" transform="matrix(1 0 0 1 644.5938 251.3342)" class="st15 st1 st14">17###.##</text>
-<text transform="matrix(1 0 0 1 707.3607 251.0905)" class="st1 st14">妗�</text>
-<text transform="matrix(0.7963 0 0 1 271.8271 30.6133)" class="st1 st16">褰撴棩绱鐢ㄧ數閲�</text>
-<text id="ZD_ds" transform="matrix(1.0741 0 0 1 389.3999 30.6133)" class="st15 st1 st17">1######.##</text>
-<line class="st6" x1="462.1" y1="90.3" x2="469.8" y2="90.3"/>
-<line class="st6" x1="463.1" y1="92.7" x2="468.9" y2="92.7"/>
-<line class="st6" x1="464.6" y1="95.4" x2="466.9" y2="95.4"/>
-<line class="st6" x1="505" y1="64.6" x2="487.8" y2="64.6"/>
-<line class="st6" x1="496.4" y1="84.1" x2="479.2" y2="84.1"/>
-<line class="st4" x1="496" y1="43.6" x2="496" y2="306.8"/>
-<line class="st6" x1="479.4" y1="90.4" x2="479.4" y2="77.9"/>
-<line class="st6" x1="473.3" y1="84.3" x2="476.8" y2="77.9"/>
-<line class="st6" x1="465.9" y1="84.2" x2="473.3" y2="84.3"/>
-<line class="st6" x1="465.9" y1="90.5" x2="465.9" y2="84.3"/>
-<rect x="490.4" y="101.2" class="st18" width="11.8" height="21.4"/>
-<text transform="matrix(0.8166 0 0 1 144.4053 550.6924)" class="st19 st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 144.4053 566.9219)" class="st19 st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 144.4053 583.6611)" class="st19 st10 st20">Ic</text>
-<text id="AH00_ia" transform="matrix(0.8166 0 0 1 156.0889 551.6924)" class="st19 st10 st20">30A###.##</text>
-<text id="AH00_ib" transform="matrix(0.8166 0 0 1 156.0889 567.3301)" class="st19 st10 st20">31B###.##</text>
-<text id="AH00_ic" transform="matrix(0.8166 0 0 1 156.0889 583.6611)" class="st19 st10 st20">32C###.##</text>
-<line class="st4" x1="101.2" y1="416.6" x2="101.5" y2="505.2"/>
-<line class="st4" x1="101.2" y1="372.8" x2="101.2" y2="411.9"/>
-<line class="st4" x1="101.2" y1="345.1" x2="101.2" y2="368.5"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="101.2" y1="376.5" x2="95.9" y2="383.7"/>
-	<line class="st4" x1="106.7" y1="383.7" x2="100.9" y2="376.6"/>
-	<line class="st4" x1="101.2" y1="381.3" x2="95.9" y2="388.6"/>
-	<line class="st4" x1="106.7" y1="388.6" x2="100.9" y2="381.4"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="100.9" y1="425.7" x2="106.1" y2="418.5"/>
-	<line class="st4" x1="95.3" y1="418.5" x2="101.2" y2="425.6"/>
-	<line class="st4" x1="100.9" y1="420.9" x2="106.1" y2="413.6"/>
-	<line class="st4" x1="95.3" y1="413.6" x2="101.2" y2="420.8"/>
-</g>
-<rect x="79.2" y="432.7" class="st5" width="10.1" height="18.2"/>
-<line class="st6" x1="84.3" y1="436.4" x2="80.9" y2="446.2"/>
-<line class="st6" x1="80.9" y1="446.2" x2="87.8" y2="446.2"/>
-<line class="st6" x1="87.8" y1="446.2" x2="84.3" y2="436.4"/>
-<line class="st6" x1="84.3" y1="441.9" x2="84.4" y2="464.2"/>
-<line class="st6" x1="84.4" y1="423.4" x2="84.4" y2="432.7"/>
-<line class="st6" x1="80.9" y1="464.2" x2="87.8" y2="464.2"/>
-<line class="st6" x1="81.9" y1="466.3" x2="87" y2="466.3"/>
-<line class="st6" x1="83.2" y1="468.7" x2="85.3" y2="468.7"/>
-<line class="st6" x1="95.3" y1="456.2" x2="107.6" y2="456.2"/>
-<line class="st6" x1="95.3" y1="456.2" x2="101.2" y2="465.2"/>
-<line class="st6" x1="101.2" y1="465.2" x2="107.6" y2="456.2"/>
-<path class="st7" d="M119.9,423.4"/>
-<path class="st7" d="M111.4,443.5"/>
-<text transform="matrix(1 0 0 1 80.9502 334.0032)" class="st8 st1 st9">鎵�03</text>
-<text transform="matrix(1 0 0 1 80.9502 334.2049)" class="st6 st1 st9">鎵�</text>
-<text transform="matrix(1 0 0 1 91.6502 334.0032)" class="st6 st10 st9">03</text>
-<line class="st6" x1="116.5" y1="464.1" x2="123.4" y2="464.1"/>
-<line class="st6" x1="117.4" y1="466.2" x2="122.6" y2="466.2"/>
-<line class="st6" x1="118.7" y1="468.6" x2="120.8" y2="468.6"/>
-<g>
-	<line class="st21" x1="119.9" y1="423.2" x2="119.9" y2="442.1"/>
-</g>
-<g>
-	<line class="st21" x1="123.2" y1="442" x2="117.4" y2="442"/>
-</g>
-<g>
-	<line class="st21" x1="117.3" y1="443.9" x2="120.1" y2="448.9"/>
-</g>
-<g>
-	<line class="st21" x1="119.9" y1="448.7" x2="119.9" y2="463.8"/>
-</g>
-<rect x="189" y="381.6" class="st18" width="9.7" height="18.5"/>
-<line class="st4" x1="193.6" y1="415.2" x2="193.9" y2="506.2"/>
-<line class="st6" x1="187.8" y1="454.8" x2="200.1" y2="454.8"/>
-<line class="st6" x1="187.8" y1="454.8" x2="193.6" y2="463.8"/>
-<line class="st6" x1="193.6" y1="463.8" x2="200.1" y2="454.8"/>
-<g>
-	<line class="st21" x1="212.4" y1="421.8" x2="212.4" y2="440.7"/>
-</g>
-<g>
-	<line class="st21" x1="215.7" y1="440.6" x2="209.8" y2="440.6"/>
-</g>
-<g>
-	<line class="st21" x1="209.8" y1="442.5" x2="212.6" y2="447.5"/>
-</g>
-<g>
-	<line class="st21" x1="212.4" y1="447.3" x2="212.4" y2="462.3"/>
-</g>
-<line class="st22" x1="84.4" y1="423.4" x2="119.9" y2="423.4"/>
-<line class="st6" x1="174.8" y1="422.1" x2="212.4" y2="422.1"/>
-<line class="st4" x1="280.3" y1="399.2" x2="280.3" y2="409.1"/>
-<line class="st4" x1="280.3" y1="370.5" x2="280.3" y2="380.9"/>
-<line class="st4" x1="280.3" y1="342.8" x2="280.3" y2="366.2"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="280.3" y1="374.2" x2="275" y2="381.4"/>
-	<line class="st4" x1="285.9" y1="381.4" x2="280" y2="374.2"/>
-	<line class="st4" x1="280.3" y1="379" x2="275" y2="386.2"/>
-	<line class="st4" x1="285.9" y1="386.2" x2="280" y2="379.1"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="280" y1="423.4" x2="285.3" y2="416.1"/>
-	<line class="st4" x1="274.4" y1="416.1" x2="280.3" y2="423.3"/>
-	<line class="st4" x1="280" y1="418.5" x2="285.3" y2="411.3"/>
-	<line class="st4" x1="274.4" y1="411.3" x2="280.3" y2="418.5"/>
-</g>
-<rect x="258.3" y="430.4" class="st5" width="10.1" height="18.2"/>
-<line class="st6" x1="263.4" y1="434.1" x2="260.1" y2="443.9"/>
-<line class="st6" x1="260.1" y1="443.9" x2="266.9" y2="443.9"/>
-<line class="st6" x1="266.9" y1="443.9" x2="263.4" y2="434.1"/>
-<line class="st6" x1="263.4" y1="439.5" x2="263.5" y2="461.9"/>
-<line class="st6" x1="263.5" y1="421.1" x2="263.5" y2="430.4"/>
-<line class="st6" x1="260.1" y1="461.9" x2="266.9" y2="461.9"/>
-<line class="st6" x1="261" y1="464" x2="266.2" y2="464"/>
-<line class="st6" x1="262.3" y1="466.4" x2="264.4" y2="466.4"/>
-<path class="st7" d="M299.1,421.1"/>
-<path class="st7" d="M290.5,441.1"/>
-<rect x="275.7" y="380.6" class="st18" width="9.7" height="18.5"/>
-<line class="st4" x1="280.3" y1="414.2" x2="280.6" y2="505.2"/>
-<line class="st6" x1="274.4" y1="453.8" x2="286.7" y2="453.8"/>
-<line class="st6" x1="274.4" y1="453.8" x2="280.3" y2="462.8"/>
-<line class="st6" x1="280.3" y1="462.8" x2="286.7" y2="453.8"/>
-<g>
-	<line class="st21" x1="299.1" y1="420.8" x2="299.1" y2="439.7"/>
-</g>
-<g>
-	<line class="st21" x1="302.3" y1="439.6" x2="296.5" y2="439.6"/>
-</g>
-<g>
-	<line class="st21" x1="296.4" y1="441.5" x2="299.2" y2="446.5"/>
-</g>
-<g>
-	<line class="st21" x1="299.1" y1="446.3" x2="299.1" y2="461.3"/>
-</g>
-<line class="st6" x1="263.5" y1="421.1" x2="299.1" y2="421.1"/>
-<line class="st4" x1="363.4" y1="343.8" x2="363.4" y2="367.2"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="363.9" y1="375.8" x2="361.2" y2="378.5"/>
-	<line class="st4" x1="365.9" y1="378.5" x2="362.8" y2="375.8"/>
-	<line class="st4" x1="363.9" y1="378.9" x2="361.2" y2="381.6"/>
-	<line class="st4" x1="365.9" y1="381.6" x2="362.8" y2="378.9"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="363" y1="390.1" x2="365.8" y2="387.4"/>
-	<line class="st4" x1="361.1" y1="387.4" x2="364.2" y2="390.1"/>
-	<line class="st4" x1="363" y1="387" x2="365.8" y2="384.4"/>
-	<line class="st4" x1="361.1" y1="384.4" x2="364.2" y2="387"/>
-</g>
-<line class="st23" x1="363.4" y1="370.3" x2="363.4" y2="376.5"/>
-<line class="st23" x1="364" y1="384" x2="350.8" y2="384"/>
-<line class="st23" x1="363.4" y1="380.9" x2="363.4" y2="384"/>
-<line class="st23" x1="365.2" y1="390" x2="365.2" y2="405.1"/>
-<line class="st23" x1="361.4" y1="390.2" x2="361.4" y2="405.3"/>
-<line class="st23" x1="361.6" y1="405" x2="365.5" y2="405"/>
-<line class="st23" x1="361.1" y1="390.2" x2="365" y2="390.2"/>
-<line class="st23" x1="363" y1="384.5" x2="363" y2="420.8"/>
-<path class="st24" d="M367.4,424.3c-1.3,0-2.3-1-2.3-2.2s1.1-2.2,2.3-2.2c1.3,0,2.4,1,2.4,2.2S368.7,424.3,367.4,424.3"/>
-<text transform="matrix(1 0 0 1 366.1143 422.8147)" class="st8 st1 st25">Q</text>
-<text transform="matrix(1 0 0 1 366.1143 422.8147)" class="st6 st1 st25">Q</text>
-<path class="st24" d="M363,422.4c-1.5,0-2.7-1.1-2.7-2.5s1.2-2.5,2.7-2.5s2.7,1.1,2.7,2.5S364.5,422.4,363,422.4"/>
-<line class="st6" x1="363.1" y1="418.2" x2="363.1" y2="419.9"/>
-<line class="st6" x1="363.1" y1="419.7" x2="364.1" y2="421"/>
-<line class="st6" x1="363" y1="420" x2="362" y2="421.3"/>
-<path class="st24" d="M363.1,424.9c-1.5,0-2.7-1.1-2.7-2.5s1.2-2.5,2.7-2.5s2.7,1.1,2.7,2.5C365.8,423.8,364.6,424.9,363.1,424.9"/>
-<line class="st26" x1="363.2" y1="420.7" x2="363.2" y2="422.4"/>
-<line class="st26" x1="363.2" y1="422.2" x2="364.2" y2="423.5"/>
-<line class="st26" x1="363.1" y1="422.4" x2="362.1" y2="423.8"/>
-<line class="st4" x1="431.4" y1="413.7" x2="431.4" y2="508"/>
-<line class="st23" x1="412.2" y1="419.2" x2="431" y2="419.2"/>
-<line class="st23" x1="410.2" y1="419.2" x2="431" y2="419.2"/>
-<line class="st4" x1="494.3" y1="413.8" x2="494.3" y2="468"/>
-<path class="st7" d="M502.2,434.1"/>
-<line class="st6" x1="488.2" y1="454.1" x2="500.5" y2="454.1"/>
-<line class="st6" x1="488.2" y1="454.1" x2="494" y2="463.1"/>
-<line class="st6" x1="494" y1="463.1" x2="500.5" y2="454.1"/>
-<g>
-	<line class="st21" x1="509.7" y1="421.2" x2="509.7" y2="437"/>
-</g>
-<g>
-	<line class="st21" x1="512.9" y1="427.8" x2="507.1" y2="427.8"/>
-</g>
-<g>
-	<line class="st21" x1="507.1" y1="438.4" x2="509.9" y2="442.6"/>
-</g>
-<g>
-	<line class="st21" x1="509.7" y1="442.4" x2="509.7" y2="455"/>
-</g>
-<line class="st6" x1="506.3" y1="454.5" x2="513.2" y2="454.5"/>
-<line class="st6" x1="507.2" y1="456.3" x2="512.4" y2="456.3"/>
-<line class="st6" x1="508.5" y1="458.2" x2="510.6" y2="458.2"/>
-<line class="st4" x1="431.4" y1="508" x2="928.5" y2="508"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="492.9" y1="374" x2="487.6" y2="381.3"/>
-	<line class="st4" x1="498.4" y1="381.3" x2="492.6" y2="374.1"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="493.8" y1="423.1" x2="499" y2="415.9"/>
-	<line class="st4" x1="488.2" y1="415.9" x2="494.1" y2="423"/>
-</g>
-<line class="st4" x1="564" y1="343.2" x2="564" y2="366.5"/>
-<line class="st6" x1="550.5" y1="421.5" x2="580.7" y2="421.5"/>
-<line class="st4" x1="564.7" y1="414.1" x2="564.7" y2="468.3"/>
-<path class="st7" d="M572.5,434.4"/>
-<line class="st6" x1="558.6" y1="454.3" x2="570.9" y2="454.3"/>
-<line class="st6" x1="558.6" y1="454.3" x2="564.4" y2="463.4"/>
-<line class="st6" x1="564.4" y1="463.4" x2="570.9" y2="454.3"/>
-<g>
-	<line class="st21" x1="580.1" y1="421.5" x2="580.1" y2="437.3"/>
-</g>
-<g>
-	<line class="st21" x1="583.3" y1="428.1" x2="577.5" y2="428.1"/>
-</g>
-<g>
-	<line class="st21" x1="577.5" y1="438.7" x2="580.3" y2="442.9"/>
-</g>
-<g>
-	<line class="st21" x1="580.1" y1="442.7" x2="580.1" y2="455.3"/>
-</g>
-<line class="st6" x1="576.7" y1="454.8" x2="583.5" y2="454.8"/>
-<line class="st6" x1="577.6" y1="456.6" x2="582.8" y2="456.6"/>
-<line class="st6" x1="578.9" y1="458.5" x2="581" y2="458.5"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<path class="st27" d="M581.1,384.8"/>
-	<path class="st27" d="M580.8,384.8"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="564.2" y1="376.3" x2="559" y2="383.6"/>
-	<line class="st4" x1="569.8" y1="383.6" x2="564" y2="376.4"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="564.2" y1="423.4" x2="569.4" y2="416.2"/>
-	<line class="st4" x1="558.6" y1="416.2" x2="564.4" y2="423.3"/>
-</g>
-<line class="st23" x1="350.9" y1="383.7" x2="350.9" y2="399.1"/>
-<line class="st23" x1="353.7" y1="395.5" x2="353.7" y2="410.1"/>
-<line class="st23" x1="347.6" y1="395.7" x2="347.6" y2="410.3"/>
-<line class="st28" x1="347.6" y1="410.1" x2="353.7" y2="410.1"/>
-<line class="st28" x1="347.6" y1="395.7" x2="353.7" y2="395.7"/>
-<line class="st28" x1="350.6" y1="410.1" x2="350.6" y2="414.7"/>
-<line class="st6" x1="347.1" y1="414.8" x2="353.8" y2="414.8"/>
-<line class="st6" x1="348" y1="417" x2="353.1" y2="417"/>
-<line class="st6" x1="349.3" y1="419.3" x2="351.3" y2="419.3"/>
-<line class="st23" x1="410.2" y1="419.2" x2="410.2" y2="433"/>
-<line class="st23" x1="413.2" y1="429.3" x2="413.2" y2="444"/>
-<line class="st23" x1="406.7" y1="429.5" x2="406.7" y2="444.2"/>
-<line class="st23" x1="406.7" y1="444" x2="413.2" y2="444"/>
-<line class="st23" x1="406.7" y1="429.5" x2="413.2" y2="429.5"/>
-<line class="st23" x1="409.9" y1="444" x2="409.9" y2="448.6"/>
-<line class="st6" x1="406.2" y1="448.7" x2="413.3" y2="448.7"/>
-<line class="st6" x1="407.1" y1="450.9" x2="412.5" y2="450.9"/>
-<line class="st6" x1="408.5" y1="453.2" x2="410.7" y2="453.2"/>
-<line class="st23" x1="480.2" y1="420.5" x2="480.2" y2="436.1"/>
-<path class="st6" d="M456,436.3"/>
-<path class="st6" d="M455.9,436.1"/>
-<line class="st23" x1="483.2" y1="432.4" x2="483.2" y2="447.1"/>
-<line class="st23" x1="476.7" y1="432.6" x2="476.7" y2="447.3"/>
-<line class="st23" x1="476.7" y1="447.1" x2="483.2" y2="447.1"/>
-<line class="st23" x1="476.7" y1="432.6" x2="483.2" y2="432.6"/>
-<line class="st28" x1="479.9" y1="447.1" x2="479.9" y2="451.7"/>
-<line class="st6" x1="476.2" y1="451.9" x2="483.3" y2="451.9"/>
-<line class="st6" x1="477.1" y1="454" x2="482.5" y2="454"/>
-<line class="st6" x1="478.5" y1="456.3" x2="480.7" y2="456.3"/>
-<line class="st23" x1="550.8" y1="421.7" x2="550.8" y2="437.3"/>
-<line class="st23" x1="553.5" y1="433.4" x2="553.5" y2="448.1"/>
-<line class="st23" x1="546.9" y1="433.6" x2="546.9" y2="448.3"/>
-<line class="st23" x1="546.9" y1="448.1" x2="553.5" y2="448.1"/>
-<line class="st23" x1="546.9" y1="433.6" x2="553.4" y2="433.6"/>
-<line class="st23" x1="550.1" y1="448.1" x2="550.1" y2="452.7"/>
-<line class="st6" x1="546.4" y1="452.9" x2="553.6" y2="452.9"/>
-<line class="st6" x1="547.3" y1="455" x2="552.8" y2="455"/>
-<line class="st6" x1="548.7" y1="457.3" x2="550.9" y2="457.3"/>
-<line class="st4" x1="683.6" y1="398.4" x2="683.6" y2="408.4"/>
-<line class="st4" x1="683.6" y1="369.7" x2="683.6" y2="380.2"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="683.6" y1="373.4" x2="678.3" y2="380.6"/>
-	<line class="st4" x1="689.1" y1="380.6" x2="683.3" y2="373.5"/>
-	<line class="st4" x1="683.6" y1="378.2" x2="678.3" y2="385.5"/>
-	<line class="st4" x1="689.1" y1="385.5" x2="683.3" y2="378.3"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="683.3" y1="422.6" x2="688.5" y2="415.4"/>
-	<line class="st4" x1="677.7" y1="415.4" x2="683.6" y2="422.5"/>
-	<line class="st4" x1="683.3" y1="417.8" x2="688.5" y2="410.5"/>
-	<line class="st4" x1="677.7" y1="410.5" x2="683.6" y2="417.7"/>
-</g>
-<path class="st7" d="M702.3,420.4"/>
-<path class="st7" d="M693.8,440.4"/>
-<rect x="679" y="379.8" class="st18" width="9.7" height="18.5"/>
-<line class="st4" x1="683.6" y1="413.4" x2="683.9" y2="494.9"/>
-<line class="st6" x1="677.7" y1="452.5" x2="690" y2="452.5"/>
-<line class="st6" x1="677.7" y1="452.5" x2="683.6" y2="442.1"/>
-<line class="st6" x1="683.6" y1="442.1" x2="690" y2="452.5"/>
-<line class="st6" x1="666.8" y1="420.4" x2="683.6" y2="420.4"/>
-<line class="st23" x1="666.9" y1="420" x2="666.9" y2="435.6"/>
-<line class="st23" x1="669.9" y1="431.9" x2="669.9" y2="446.6"/>
-<line class="st23" x1="663.4" y1="432.1" x2="663.4" y2="446.8"/>
-<line class="st23" x1="663.4" y1="446.6" x2="669.9" y2="446.6"/>
-<line class="st23" x1="663.4" y1="432.1" x2="669.9" y2="432.1"/>
-<line class="st23" x1="666.6" y1="446.6" x2="666.6" y2="451.2"/>
-<line class="st6" x1="662.9" y1="451.3" x2="670" y2="451.3"/>
-<line class="st6" x1="663.8" y1="453.5" x2="669.2" y2="453.5"/>
-<line class="st6" x1="665.2" y1="455.8" x2="667.4" y2="455.8"/>
-<line class="st4" x1="791.1" y1="400.3" x2="791.1" y2="410.3"/>
-<line class="st4" x1="791.1" y1="371.6" x2="791.1" y2="382"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="791.1" y1="375.3" x2="785.9" y2="382.5"/>
-	<line class="st4" x1="796.7" y1="382.5" x2="790.9" y2="375.3"/>
-	<line class="st4" x1="791.1" y1="380.1" x2="785.9" y2="387.3"/>
-	<line class="st4" x1="796.7" y1="387.3" x2="790.9" y2="380.2"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="790.9" y1="424.5" x2="796.1" y2="417.2"/>
-	<line class="st4" x1="785.3" y1="417.2" x2="791.1" y2="424.4"/>
-	<line class="st4" x1="790.9" y1="419.6" x2="796.1" y2="412.4"/>
-	<line class="st4" x1="785.3" y1="412.4" x2="791.1" y2="419.6"/>
-</g>
-<path class="st7" d="M801.3,442.2"/>
-<rect x="786.5" y="381.7" class="st18" width="9.7" height="18.5"/>
-<line class="st4" x1="791.1" y1="415.3" x2="791.5" y2="468"/>
-<line class="st6" x1="785.3" y1="454.3" x2="797.6" y2="454.3"/>
-<line class="st6" x1="785.3" y1="454.3" x2="791.1" y2="464.6"/>
-<line class="st6" x1="791.1" y1="464.6" x2="797.6" y2="454.3"/>
-<line class="st6" x1="774.4" y1="422.2" x2="809" y2="422.2"/>
-<line class="st23" x1="774.5" y1="421.9" x2="774.5" y2="437.4"/>
-<line class="st23" x1="777.5" y1="433.8" x2="777.5" y2="448.5"/>
-<line class="st23" x1="771" y1="434" x2="771" y2="448.7"/>
-<line class="st23" x1="771" y1="448.4" x2="777.5" y2="448.4"/>
-<line class="st23" x1="771" y1="434" x2="777.4" y2="434"/>
-<line class="st23" x1="774.2" y1="448.5" x2="774.2" y2="453.1"/>
-<line class="st6" x1="770.4" y1="453.2" x2="777.6" y2="453.2"/>
-<line class="st6" x1="771.4" y1="455.4" x2="776.8" y2="455.4"/>
-<line class="st6" x1="772.7" y1="457.7" x2="774.9" y2="457.7"/>
-<g>
-	<line class="st21" x1="809" y1="421.5" x2="809" y2="435.7"/>
-</g>
-<g>
-	<line class="st21" x1="812.2" y1="435.6" x2="806.4" y2="435.6"/>
-</g>
-<g>
-	<line class="st21" x1="806.4" y1="437" x2="809.1" y2="440.7"/>
-</g>
-<g>
-	<line class="st21" x1="809" y1="440.6" x2="809" y2="451.9"/>
-</g>
-<line class="st6" x1="805.6" y1="451.9" x2="812.4" y2="451.9"/>
-<line class="st6" x1="806.5" y1="454.4" x2="811.7" y2="454.4"/>
-<line class="st6" x1="807.8" y1="456.2" x2="809.9" y2="456.2"/>
-<line class="st4" x1="650.1" y1="494.8" x2="684.3" y2="494.5"/>
-<line class="st4" x1="650" y1="305.8" x2="650.3" y2="494.8"/>
-<line class="st4" x1="928.2" y1="420.8" x2="928.5" y2="508.1"/>
-<path class="st27" d="M943.8,401.8"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<path class="st27" d="M948.7,413.4"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="927.7" y1="383.8" x2="922.5" y2="391"/>
-	<line class="st4" x1="933.3" y1="391" x2="927.4" y2="383.8"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="927.9" y1="429.8" x2="933.1" y2="422.6"/>
-	<line class="st4" x1="922.3" y1="422.6" x2="928.2" y2="429.8"/>
-</g>
-<line class="st4" x1="927.2" y1="342.7" x2="927.5" y2="375.2"/>
-<line class="st6" x1="1025.3" y1="424.7" x2="1055.5" y2="424.7"/>
-<line class="st4" x1="1039.5" y1="417.3" x2="1039.5" y2="471.5"/>
-<path class="st7" d="M1047.4,437.7"/>
-<line class="st6" x1="1033.4" y1="457.6" x2="1045.7" y2="457.6"/>
-<line class="st6" x1="1033.4" y1="457.6" x2="1039.2" y2="466.6"/>
-<line class="st6" x1="1039.2" y1="466.6" x2="1045.7" y2="457.6"/>
-<g>
-	<line class="st21" x1="1054.9" y1="424.7" x2="1054.9" y2="440.5"/>
-</g>
-<g>
-	<line class="st21" x1="1058.1" y1="431.3" x2="1052.3" y2="431.3"/>
-</g>
-<g>
-	<line class="st21" x1="1052.3" y1="441.9" x2="1055.1" y2="446.1"/>
-</g>
-<g>
-	<line class="st21" x1="1054.9" y1="445.9" x2="1054.9" y2="458.5"/>
-</g>
-<line class="st6" x1="1051.5" y1="458" x2="1058.4" y2="458"/>
-<line class="st6" x1="1052.4" y1="459.8" x2="1057.6" y2="459.8"/>
-<line class="st6" x1="1053.7" y1="461.8" x2="1055.8" y2="461.8"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<path class="st27" d="M1050.6,414"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1039.1" y1="377.6" x2="1033.8" y2="384.8"/>
-	<line class="st4" x1="1044.6" y1="384.8" x2="1038.8" y2="377.6"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1039" y1="426.6" x2="1044.2" y2="419.4"/>
-	<line class="st4" x1="1033.4" y1="419.4" x2="1039.3" y2="426.6"/>
-</g>
-<line class="st23" x1="1025.4" y1="424.3" x2="1025.4" y2="439.9"/>
-<line class="st23" x1="1028.4" y1="436.2" x2="1028.4" y2="450.9"/>
-<line class="st23" x1="1021.9" y1="436.4" x2="1021.9" y2="451.1"/>
-<line class="st23" x1="1021.9" y1="450.9" x2="1028.4" y2="450.9"/>
-<line class="st23" x1="1021.9" y1="436.4" x2="1028.4" y2="436.4"/>
-<line class="st23" x1="1025.1" y1="450.9" x2="1025.1" y2="455.5"/>
-<line class="st6" x1="1021.4" y1="455.6" x2="1028.5" y2="455.6"/>
-<line class="st6" x1="1022.3" y1="457.8" x2="1027.7" y2="457.8"/>
-<line class="st6" x1="1023.7" y1="460.1" x2="1025.9" y2="460.1"/>
-<line class="st4" x1="1116.4" y1="344" x2="1116.3" y2="369.6"/>
-<line class="st6" x1="1104.9" y1="425.7" x2="1135.1" y2="425.7"/>
-<line class="st4" x1="1119.1" y1="418.4" x2="1119.1" y2="472.5"/>
-<path class="st7" d="M1126.9,438.7"/>
-<line class="st6" x1="1113" y1="458.6" x2="1125.3" y2="458.6"/>
-<line class="st6" x1="1113" y1="458.6" x2="1118.8" y2="467.6"/>
-<line class="st6" x1="1118.8" y1="467.6" x2="1125.3" y2="458.6"/>
-<g>
-	<line class="st21" x1="1134.5" y1="425.7" x2="1134.5" y2="441.5"/>
-</g>
-<g>
-	<line class="st21" x1="1137.7" y1="432.4" x2="1131.9" y2="432.4"/>
-</g>
-<g>
-	<line class="st21" x1="1131.9" y1="443" x2="1134.7" y2="447.2"/>
-</g>
-<g>
-	<line class="st21" x1="1134.5" y1="447" x2="1134.5" y2="459.6"/>
-</g>
-<line class="st6" x1="1131.1" y1="459.1" x2="1137.9" y2="459.1"/>
-<line class="st6" x1="1132" y1="460.8" x2="1137.2" y2="460.8"/>
-<line class="st6" x1="1133.3" y1="462.8" x2="1135.4" y2="462.8"/>
-<line class="st29" x1="1118.1" y1="403.4" x2="1118.1" y2="411.3"/>
-<line class="st29" x1="1117.1" y1="380.8" x2="1117.1" y2="389.1"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1117.5" y1="389" x2="1112.3" y2="394.7"/>
-	<line class="st4" x1="1123.1" y1="394.7" x2="1117.2" y2="389.1"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1117.7" y1="420.8" x2="1123" y2="415"/>
-	<line class="st4" x1="1112.1" y1="415" x2="1118" y2="420.7"/>
-</g>
-<rect x="1113.2" y="388.7" class="st18" width="9.7" height="14.7"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1116.6" y1="381.6" x2="1111.4" y2="388.8"/>
-	<line class="st4" x1="1122.2" y1="388.8" x2="1116.4" y2="381.6"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1118.6" y1="427.6" x2="1123.8" y2="420.4"/>
-	<line class="st4" x1="1113" y1="420.4" x2="1118.8" y2="427.6"/>
-</g>
-<line class="st23" x1="1105" y1="425.4" x2="1105" y2="440.9"/>
-<line class="st23" x1="1108" y1="437.2" x2="1108" y2="452"/>
-<line class="st23" x1="1101.5" y1="437.4" x2="1101.5" y2="452.2"/>
-<line class="st23" x1="1101.5" y1="451.9" x2="1108" y2="451.9"/>
-<line class="st23" x1="1101.5" y1="437.4" x2="1108" y2="437.4"/>
-<line class="st23" x1="1104.7" y1="452" x2="1104.7" y2="456.5"/>
-<line class="st6" x1="1101" y1="456.7" x2="1108.1" y2="456.7"/>
-<line class="st6" x1="1101.9" y1="458.8" x2="1107.3" y2="458.8"/>
-<line class="st6" x1="1103.3" y1="461.1" x2="1105.5" y2="461.1"/>
-<line class="st4" x1="1189" y1="344.5" x2="1189" y2="370.1"/>
-<line class="st6" x1="1175.6" y1="426.2" x2="1205.8" y2="426.2"/>
-<line class="st4" x1="1189.8" y1="418.9" x2="1189.8" y2="473"/>
-<path class="st7" d="M1197.6,439.2"/>
-<line class="st6" x1="1183.6" y1="459.1" x2="1195.9" y2="459.1"/>
-<line class="st6" x1="1183.6" y1="459.1" x2="1189.5" y2="468.1"/>
-<line class="st6" x1="1189.5" y1="468.1" x2="1195.9" y2="459.1"/>
-<g>
-	<line class="st21" x1="1205.2" y1="426.2" x2="1205.2" y2="442"/>
-</g>
-<g>
-	<line class="st21" x1="1208.4" y1="432.9" x2="1202.5" y2="432.9"/>
-</g>
-<g>
-	<line class="st21" x1="1202.6" y1="443.5" x2="1205.3" y2="447.7"/>
-</g>
-<g>
-	<line class="st21" x1="1205.2" y1="447.5" x2="1205.2" y2="460"/>
-</g>
-<line class="st6" x1="1201.8" y1="459.6" x2="1208.6" y2="459.6"/>
-<line class="st6" x1="1202.7" y1="461.3" x2="1207.9" y2="461.3"/>
-<line class="st6" x1="1204" y1="463.3" x2="1206.1" y2="463.3"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<path class="st27" d="M1200.8,415.5"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1189.3" y1="380.1" x2="1184.1" y2="387.3"/>
-	<line class="st4" x1="1194.9" y1="387.3" x2="1189" y2="380.1"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1189.2" y1="428.1" x2="1194.5" y2="420.9"/>
-	<line class="st4" x1="1183.7" y1="420.9" x2="1189.5" y2="428.1"/>
-</g>
-<line class="st23" x1="1175.7" y1="425.8" x2="1175.7" y2="441.4"/>
-<line class="st23" x1="1178.7" y1="437.7" x2="1178.7" y2="452.4"/>
-<line class="st23" x1="1172.2" y1="437.9" x2="1172.2" y2="452.6"/>
-<line class="st28" x1="1172.2" y1="452.4" x2="1178.7" y2="452.4"/>
-<line class="st23" x1="1172.2" y1="437.9" x2="1178.7" y2="437.9"/>
-<line class="st23" x1="1175.4" y1="452.4" x2="1175.4" y2="457"/>
-<line class="st6" x1="1171.6" y1="457.2" x2="1178.8" y2="457.2"/>
-<line class="st6" x1="1172.6" y1="459.3" x2="1178" y2="459.3"/>
-<line class="st6" x1="1173.9" y1="461.6" x2="1176.1" y2="461.6"/>
-<path class="st30" d="M1277.7,435"/>
-<path class="st30" d="M1277.7,435"/>
-<path class="st30" d="M1276.7,433.8"/>
-<path class="st30" d="M1261.7,424.9"/>
-<path class="st30" d="M1262.6,426"/>
-<line class="st4" x1="1277.7" y1="344.2" x2="1277.7" y2="367.5"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1277.5" y1="375" x2="1272.3" y2="382.3"/>
-	<line class="st4" x1="1283.1" y1="382.3" x2="1277.2" y2="375.1"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<path class="st27" d="M1295,378.7"/>
-</g>
-<path class="st27" d="M1295.3,370.7"/>
-<line class="st6" x1="1230.2" y1="304.6" x2="1244.7" y2="304.6"/>
-<line class="st4" x1="1244.4" y1="297.2" x2="1244.4" y2="342.7"/>
-<path class="st7" d="M1252.3,317.6"/>
-<line class="st6" x1="1239.1" y1="318.6" x2="1250.3" y2="318.6"/>
-<line class="st6" x1="1239.1" y1="318.6" x2="1244.4" y2="325.1"/>
-<line class="st6" x1="1244.4" y1="325.1" x2="1250.3" y2="318.6"/>
-<line class="st23" x1="1230.2" y1="304.2" x2="1230.2" y2="314.7"/>
-<line class="st23" x1="1232" y1="315" x2="1232" y2="328.4"/>
-<line class="st23" x1="1227.2" y1="315.2" x2="1227.2" y2="328.5"/>
-<line class="st23" x1="1227.4" y1="328.3" x2="1232.4" y2="328.3"/>
-<line class="st23" x1="1226.7" y1="315.2" x2="1231.7" y2="315.2"/>
-<line class="st28" x1="1229.9" y1="328.4" x2="1229.9" y2="332.5"/>
-<line class="st6" x1="1227.9" y1="332.6" x2="1231.9" y2="332.6"/>
-<line class="st6" x1="1228.5" y1="335" x2="1231.5" y2="335"/>
-<line class="st6" x1="1229.2" y1="336.6" x2="1230.5" y2="336.6"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1244" y1="263.5" x2="1238.7" y2="270.7"/>
-	<line class="st4" x1="1249.5" y1="270.7" x2="1243.7" y2="263.5"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1243.9" y1="306.5" x2="1249.1" y2="299.3"/>
-	<line class="st4" x1="1238.3" y1="299.3" x2="1244.2" y2="306.5"/>
-</g>
-<line class="st4" x1="1243.7" y1="233.6" x2="1243.7" y2="257"/>
-<line class="st3" x1="926.2" y1="344.1" x2="1290.1" y2="344.1"/>
-<line class="st31" x1="651" y1="305.8" x2="495.5" y2="305.8"/>
-<line class="st6" x1="530.8" y1="157.3" x2="522.9" y2="157.3"/>
-<line class="st6" x1="529.7" y1="159.6" x2="523.7" y2="159.6"/>
-<line class="st6" x1="528.2" y1="162.3" x2="525.8" y2="162.3"/>
-<line class="st6" x1="495.5" y1="151" x2="513.2" y2="151"/>
-<line class="st6" x1="519" y1="157.5" x2="519" y2="145"/>
-<line class="st6" x1="526.8" y1="151.1" x2="519.3" y2="151.2"/>
-<line class="st6" x1="526.8" y1="157.4" x2="526.8" y2="151.2"/>
-<line class="st6" x1="426.1" y1="162.3" x2="494.1" y2="162.3"/>
-<line class="st6" x1="426.1" y1="175.3" x2="426.1" y2="162.8"/>
-<path class="st24" d="M430.6,178c-1.3,0-2.4-1.2-2.4-2.6c0-1.4,1.1-2.6,2.4-2.6s2.4,1.2,2.4,2.6S431.9,178,430.6,178"/>
-<text transform="matrix(0.8602 0 0 1 429.249 176.1934)" class="st8 st1 st32">Q</text>
-<text transform="matrix(0.8602 0 0 1 429.249 176.1934)" class="st6 st1 st32">Q</text>
-<line class="st6" x1="426.1" y1="170.6" x2="426.1" y2="172.7"/>
-<line class="st6" x1="426.1" y1="172.4" x2="427.2" y2="174.1"/>
-<line class="st6" x1="426.1" y1="172.7" x2="425" y2="174.4"/>
-<path class="st24" d="M426.1,178.8c-1.5,0-2.8-1.3-2.8-3s1.3-3,2.8-3s2.8,1.3,2.8,3C428.9,177.4,427.7,178.8,426.1,178.8"/>
-<line class="st26" x1="426.2" y1="173.6" x2="426.2" y2="175.7"/>
-<line class="st26" x1="426.2" y1="175.4" x2="427.3" y2="177.1"/>
-<line class="st26" x1="426.1" y1="175.8" x2="425.1" y2="177.4"/>
-<line class="st6" x1="413.3" y1="179.3" x2="421.9" y2="179.3"/>
-<line class="st6" x1="414.4" y1="181.7" x2="420.9" y2="181.7"/>
-<line class="st6" x1="417.6" y1="173.1" x2="425.8" y2="173.3"/>
-<line class="st6" x1="416" y1="184.4" x2="418.7" y2="184.4"/>
-<line class="st6" x1="417.6" y1="179.5" x2="417.6" y2="173.2"/>
-<path class="st24" d="M426.1,175.7c-1.5,0-2.8-1.3-2.8-3s1.3-3,2.8-3s2.8,1.3,2.8,3S427.6,175.7,426.1,175.7"/>
-<line class="st33" x1="505" y1="170" x2="487.8" y2="170"/>
-<line class="st6" x1="512.4" y1="151.4" x2="516" y2="145"/>
-<line class="st6" x1="417.8" y1="238.1" x2="411" y2="230.1"/>
-<line class="st6" x1="527.7" y1="197.3" x2="519.6" y2="197.3"/>
-<line class="st6" x1="526.7" y1="199.6" x2="520.5" y2="199.6"/>
-<line class="st6" x1="525.1" y1="202.3" x2="522.6" y2="202.3"/>
-<line class="st6" x1="495.8" y1="191.1" x2="509.6" y2="191.1"/>
-<line class="st6" x1="515.9" y1="197.5" x2="515.9" y2="185"/>
-<line class="st6" x1="523.6" y1="191.1" x2="515.9" y2="191.3"/>
-<line class="st6" x1="523.6" y1="197.4" x2="523.6" y2="191.2"/>
-<line class="st6" x1="509.8" y1="191.4" x2="513.3" y2="185"/>
-<path class="st34" d="M496,225.7c-5.6,0-10.2-4.5-10.2-9.9c0-5.5,4.6-9.9,10.2-9.9s10.2,4.5,10.2,9.9
-	C506.3,221.2,501.7,225.7,496,225.7"/>
-<path class="st35" d="M496.4,239.7c-5.9,0-10.6-4.6-10.6-10.3s4.8-10.3,10.6-10.3c5.9,0,10.6,4.6,10.6,10.3
-	C507,235.1,502.2,239.7,496.4,239.7"/>
-<line class="st36" x1="503.2" y1="233.9" x2="496.5" y2="222.6"/>
-<line class="st26" x1="496.6" y1="222.5" x2="489.2" y2="234.5"/>
-<line class="st26" x1="503.6" y1="234.1" x2="489.2" y2="233.9"/>
-<line class="st6" x1="428.1" y1="215.4" x2="496.1" y2="215.4"/>
-<line class="st6" x1="433.9" y1="241.9" x2="428.3" y2="236.6"/>
-<line class="st6" x1="428" y1="236.2" x2="423.2" y2="242"/>
-<line class="st6" x1="428.3" y1="236.9" x2="428.3" y2="262.3"/>
-<line class="st6" x1="423.2" y1="225.6" x2="427.9" y2="232"/>
-<line class="st6" x1="427.8" y1="232.3" x2="431.3" y2="225.3"/>
-<line class="st6" x1="427.9" y1="231.7" x2="427.9" y2="215"/>
-<line class="st23" x1="441.4" y1="223.3" x2="441.4" y2="238.3"/>
-<line class="st23" x1="443.1" y1="234.7" x2="443.1" y2="248.9"/>
-<line class="st23" x1="439.3" y1="234.9" x2="439.3" y2="249.1"/>
-<line class="st23" x1="439.3" y1="248.9" x2="443.1" y2="248.9"/>
-<line class="st23" x1="439.3" y1="234.9" x2="443.1" y2="234.9"/>
-<line class="st6" x1="410.7" y1="223" x2="441.3" y2="223"/>
-<line class="st6" x1="410.7" y1="223.3" x2="410.7" y2="231.2"/>
-<line class="st6" x1="417.9" y1="241" x2="404.1" y2="241"/>
-<line class="st6" x1="410.7" y1="240.9" x2="410.7" y2="253.5"/>
-<line class="st6" x1="409.6" y1="253.5" x2="441.8" y2="253.5"/>
-<line class="st6" x1="441.8" y1="248.5" x2="441.8" y2="253.5"/>
-<line class="st6" x1="424.5" y1="262.5" x2="431.4" y2="262.5"/>
-<line class="st6" x1="425.4" y1="264.2" x2="430.6" y2="264.2"/>
-<line class="st6" x1="426.7" y1="266.2" x2="428.8" y2="266.2"/>
-<text transform="matrix(0.907 0 0 1 922.7803 77.8848)" class="st10 st37">10KV</text>
-<text transform="matrix(0.907 0 0 1 953.9805 77.5923)" class="st1 st37">涓讳緵瀹�</text>
-<text transform="matrix(0.907 0 0 1 915.7803 105.8301)" class="st1 st37">  </text>
-<text transform="matrix(0.907 0 0 1 924.8545 105.5376)" class="st1 st37">浜屾ゼ</text>
-<text transform="matrix(0.907 0 0 1 953.9805 105.5376)" class="st1 st37">涓讳緵瀹�</text>
-<text transform="matrix(0.907 0 0 1 923.7803 137.0771)" class="st10 st37">10KV</text>
-<text transform="matrix(0.907 0 0 1 954.9805 136.7847)" class="st1 st37">澶囦緵瀹�</text>
-<text transform="matrix(0.9726 0 0 1 1020.0811 77.8848)" class="st1 st38">娓╁害锛�</text>
-<text transform="matrix(0.9726 0 0 1 1020.0811 107.5059)" class="st1 st38">娓╁害锛�</text>
-<text transform="matrix(0.9726 0 0 1 1020.0811 137.0771)" class="st1 st38">娓╁害锛�</text>
-<text transform="matrix(0.9726 0 0 1 1152.7803 75.582)" class="st1 st38">婀垮害锛�</text>
-<text id="_x31_0KVWD_x5F_wd" transform="matrix(1 0 0 1 1056.5176 77.885)" class="st19 st10 st14">18###.## </text>
-<text id="_x32_ZK_x5F_WD_x5F_wd" transform="matrix(1 0 0 1 1056.5176 107.5061)" class="st19 st10 st14">19###.## </text>
-<text id="_x31_0KVB_x5F_wd" transform="matrix(1 0 0 1 1056.5176 137.0774)" class="st19 st10 st14">20###.## </text>
-<text id="_x31_0KVSD_x5F_sd" transform="matrix(1 0 0 1 1195.9385 77.885)" class="st19 st10 st14">21###.## </text>
-<text transform="matrix(0.9726 0 0 1 1152.7803 107.5059)" class="st1 st38">婀垮害锛�</text>
-<text transform="matrix(0.9726 0 0 1 1152.7803 137.0771)" class="st1 st38">婀垮害锛�</text>
-<text id="_x32_ZKSD_x5F_sd" transform="matrix(1 0 0 1 1195.9385 107.5061)" class="st19 st10 st14">22###.## </text>
-<text id="_x31_0KVB_x5F_sd" transform="matrix(1 0 0 1 1195.9385 137.4309)" class="st19 st10 st14">23###.## </text>
-<text transform="matrix(1 0 0 1 1266.791 77.885)" class="st19 st1 st14">% </text>
-<text transform="matrix(1 0 0 1 1266.791 107.5061)" class="st19 st1 st14">% </text>
-<text transform="matrix(1 0 0 1 1265.4297 137.0774)" class="st19 st1 st14">% </text>
-<text transform="matrix(0.9434 0 0 1 977.8799 187.1885)" class="st1 st39">杩涚嚎</text>
-<text transform="matrix(0.9434 0 0 1 1002.6914 187.354)" class="st1 st39">(</text>
-<text transform="matrix(0.9434 0 0 1 1006.8418 187.1885)" class="st1 st39">澶囦緵</text>
-<text transform="matrix(0.9434 0 0 1 1031.748 187.354)" class="st1 st39">)</text>
-<text id="_x31_0KVB_x5F_ia" transform="matrix(1.0507 0 0 1 1126.9375 216.0146)" class="st15 st10 st40">     27###.##  </text>
-<text id="_x31_0KVB_x5F_ib" transform="matrix(1.0507 0 0 1 1126.9375 230.8584)" class="st15 st10 st40">     28###.## </text>
-<text id="_x31_0KVB_x5F_ic" transform="matrix(1.0507 0 0 1 1126.9375 245.7285)" class="st15 st10 st40">     29###.##</text>
-<text transform="matrix(1.0507 0 0 1 1011.9727 211.7891)" class="st19 st10 st40">Va</text>
-<text id="_x31_10KV_x5F_ua" transform="matrix(1.0507 0 0 1 1029.3936 211.7891)" class="st19 st10 st40">  24###.##</text>
-<text transform="matrix(1.0507 0 0 1 1011.9727 230.7861)" class="st19 st10 st40">Vb</text>
-<text id="_x31_10KV_x5F_ub" transform="matrix(1.0507 0 0 1 1028.3936 230.7861)" class="st19 st10 st40">  25###.##</text>
-<text transform="matrix(1.0507 0 0 1 1011.2891 248.8857)" class="st19 st10 st40">Vc</text>
-<text id="_x31_10KV_x5F_uc" transform="matrix(1.0507 0 0 1 1022.9922 248.8857)" class="st19 st1 st40">  26###.##</text>
-<text transform="matrix(0.9013 0 0 1 1267.2754 335.7031)" class="st8 st1 st41">浜�</text>
-<text transform="matrix(0.9013 0 0 1 1267.2754 335.7031)" class="st6 st1 st41">浜�</text>
-<text transform="matrix(1 0 0 1 53.0977 297.6213)" class="st8 st1 st11">  </text>
-<text transform="matrix(1 0 0 1 53.0977 297.6213)" class="st6 st1 st11">  </text>
-<text transform="matrix(1 0 0 1 53.0977 297.135)" class="st10 st12">10kV1</text>
-<text transform="matrix(1 0 0 1 98.4787 296.567)" class="st1 st12">娈垫瘝绾�</text>
-<text transform="matrix(1 0 0 1 874.0977 309.76)" class="st8 st1 st11">  </text>
-<text transform="matrix(1 0 0 1 874.0977 309.76)" class="st6 st1 st11">  </text>
-<text transform="matrix(1 0 0 1 891.0977 309.1272)" class="st10 st12">10kV2</text>
-<text transform="matrix(1 0 0 1 936.4788 308.5591)" class="st1 st12">娈垫瘝绾�</text>
-<text transform="matrix(1.0185 0 0 1 208.7949 551.6924)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 208.1299 567.3301)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 208.1299 583.6611)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 207.4277 608.6523)" class="st19 st10 st42">MW </text>
-<text transform="matrix(1 0 0 1 1204.7803 523.635)" class="st19 st1 st43">鍗楀巶</text>
-<text transform="matrix(1 0 0 1 1228.7803 523.635)" class="st19 st1 st43">3#</text>
-<text transform="matrix(1 0 0 1 1110.6484 523.635)" class="st19 st1 st43">鍖楀巶</text>
-<text transform="matrix(1 0 0 1 1134.6484 523.635)" class="st19 st10 st43">201</text>
-<text transform="matrix(1 0 0 1 1022.9727 523.635)" class="st19 st1 st43">鍖楀巶</text>
-<text transform="matrix(1 0 0 1 1046.9727 523.635)" class="st19 st10 st43">303</text>
-<text transform="matrix(1 0 0 1 1207.7803 538.635)" class="st19 st10 st43">AH04</text>
-<text transform="matrix(1 0 0 1 1107.6484 538.635)" class="st19 st10 st43">1#HT220</text>
-<text transform="matrix(1 0 0 1 1022.2891 538.635)" class="st19 st10 st43">6#HT219</text>
-<text transform="matrix(1 0 0 1 907.7803 525.635)" class="st19 st1 st43">鑱旂粶</text>
-<text transform="matrix(1 0 0 1 768.7803 523.635)" class="st19 st1 st43">鍖楀巶</text>
-<text transform="matrix(1 0 0 1 792.7803 523.635)" class="st19 st10 st43">303</text>
-<text transform="matrix(1 0 0 1 767.7803 536.635)" class="st19 st10 st43">6#AH001</text>
-<text transform="matrix(1 0 0 1 650.9629 523.635)" class="st19 st1 st43">涓讳緵杩涚嚎</text>
-<text transform="matrix(1 0 0 1 548.7109 523.635)" class="st19 st1 st43">澶囩敤</text>
-<text transform="matrix(1 0 0 1 477.1221 523.635)" class="st19 st1 st43">澶囩敤</text>
-<text transform="matrix(1 0 0 1 417.8154 523.635)" class="st19 st1 st43">闅旂</text>
-<text transform="matrix(1 0 0 1 258.3271 520.635)" class="st19 st1 st43">鍖楀巶</text>
-<text transform="matrix(1 0 0 1 282.3271 520.635)" class="st19 st10 st43">201</text>
-<text transform="matrix(1 0 0 1 256.4434 533.635)" class="st19 st10 st43">1#HT001</text>
-<text transform="matrix(1 0 0 1 178.4912 520.635)" class="st19 st1 st43">鍗楀巶</text>
-<text transform="matrix(1 0 0 1 202.4912 520.635)" class="st19 st10 st43">3#</text>
-<text transform="matrix(1 0 0 1 87.0479 519.635)" class="st19 st1 st43">鎵�鐢ㄥ彉</text>
-<text transform="matrix(0.8166 0 0 1 247.1797 551.6924)" class="st19 st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 247.1797 568.9219)" class="st19 st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 247.1797 583.6611)" class="st19 st10 st20">Ic</text>
-<text id="HT001_ia" transform="matrix(0.8166 0 0 1 258.8633 551.6924)" class="st19 st10 st20">33A###.##</text>
-<text id="HT001_ib" transform="matrix(0.8166 0 0 1 258.8633 567.3301)" class="st19 st10 st20">34B###.##</text>
-<text id="HT001_ic" transform="matrix(0.8166 0 0 1 258.8633 583.6611)" class="st19 st10 st20">35C###.##</text>
-<text transform="matrix(1.0185 0 0 1 311.5693 551.6924)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 310.9043 567.3301)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 310.9043 583.6611)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 310.2021 608.6523)" class="st19 st10 st42">MW </text>
-<text transform="matrix(0.8166 0 0 1 432.8813 551.3145)" class="st19 st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 432.8813 568.5439)" class="st19 st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 432.8813 583.2832)" class="st19 st10 st20">Ic</text>
-<text id="BY35_ia" transform="matrix(0.8166 0 0 1 444.5645 551.3145)" class="st19 st10 st20">40A###.##</text>
-<text id="BY35_ib" transform="matrix(0.8166 0 0 1 444.5645 566.9521)" class="st19 st10 st20">41B###.##</text>
-<text id="BY35_ic" transform="matrix(0.8166 0 0 1 444.5645 583.2832)" class="st19 st10 st20">42C###.##</text>
-<text transform="matrix(1.0185 0 0 1 497.271 551.3145)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 496.6064 566.9521)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 496.6064 583.2832)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 495.9038 609.2744)" class="st19 st10 st42">MW </text>
-<text transform="matrix(0.8166 0 0 1 539.5176 551.3135)" class="st19 st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 539.5176 568.543)" class="st19 st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 539.5176 583.2822)" class="st19 st10 st20">Ic</text>
-<text id="BY39_ia" transform="matrix(0.8166 0 0 1 551.2002 551.3135)" class="st19 st10 st20">45A###.##</text>
-<text id="BY39_ib" transform="matrix(0.8166 0 0 1 551.2002 566.9512)" class="st19 st10 st20">46B###.##</text>
-<text id="BY39_ic" transform="matrix(0.8166 0 0 1 551.2002 583.2822)" class="st19 st10 st20">47C###.##</text>
-<text transform="matrix(1.0185 0 0 1 603.9067 551.3135)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 603.2417 566.9512)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 603.2417 583.2822)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 602.54 609.2734)" class="st19 st10 st42">MW </text>
-<text transform="matrix(0.8166 0 0 1 642.752 551.3145)" class="st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 642.752 568.5439)" class="st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 642.752 583.2832)" class="st10 st20">Ic</text>
-<text id="ZB10KV31_ia" transform="matrix(0.8166 0 0 1 654.4355 551.3145)" class="st15 st10 st20">50A###.##</text>
-<text id="ZB10KV31_ib" transform="matrix(0.8166 0 0 1 654.4355 566.9521)" class="st15 st10 st20">51B###.##</text>
-<text id="ZB10KV31_iC" transform="matrix(0.8166 0 0 1 654.4355 583.2832)" class="st15 st10 st20">52C###.##</text>
-<text transform="matrix(1.0185 0 0 1 707.1416 551.3145)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 706.4766 566.9521)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 706.4766 583.2832)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 705.7744 609.2744)" class="st19 st10 st42">MW </text>
-<text transform="matrix(0.8166 0 0 1 750.3291 551.3135)" class="st19 st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 750.3291 568.543)" class="st19 st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 750.3291 583.2822)" class="st19 st10 st20">Ic</text>
-<text id="AH1_ia" transform="matrix(0.8166 0 0 1 762.0127 551.3135)" class="st19 st10 st20">55A###.##</text>
-<text id="AH1_ib" transform="matrix(0.8166 0 0 1 762.0127 566.9512)" class="st19 st10 st20">56B###.##</text>
-<text id="AH1_ic" transform="matrix(0.8166 0 0 1 762.0127 583.2822)" class="st19 st10 st20">57C###.##</text>
-<text transform="matrix(1.0185 0 0 1 814.7188 551.3135)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 814.0537 566.9512)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 814.0537 583.2822)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 812.3516 609.2734)" class="st19 st10 st42">MW </text>
-<text transform="matrix(0.8166 0 0 1 884.3525 551.3135)" class="st19 st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 884.3525 568.543)" class="st19 st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 884.3525 583.2822)" class="st19 st10 st20">Ic</text>
-<text id="_x31_0KVL233_x5F_ia" transform="matrix(0.8166 0 0 1 896.0361 551.3135)" class="st19 st10 st20">60A###.##</text>
-<text id="_x31_0KVL233_x5F_ib" transform="matrix(0.8166 0 0 1 896.0361 566.9512)" class="st19 st10 st20">61B###.##</text>
-<text id="_x31_0KVL233_x5F_ic" transform="matrix(0.8166 0 0 1 896.0361 583.2822)" class="st19 st10 st20">62C###.##</text>
-<text transform="matrix(1.0185 0 0 1 948.7422 551.3135)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 948.0771 566.9512)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 948.0771 583.2822)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 950.375 609.2734)" class="st19 st10 st42">MW </text>
-<text transform="matrix(0.8166 0 0 1 1000.4854 551.3135)" class="st19 st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 1000.4854 568.543)" class="st19 st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 1000.4854 583.2822)" class="st19 st10 st20">Ic</text>
-<text id="HT219_ia" transform="matrix(0.8166 0 0 1 1012.1689 551.3135)" class="st19 st10 st20">65A###.##</text>
-<text id="HT219_ib" transform="matrix(0.8166 0 0 1 1012.1689 566.9512)" class="st19 st10 st20">66B###.##</text>
-<text id="HT219_ic" transform="matrix(0.8166 0 0 1 1012.1689 583.2822)" class="st19 st10 st20">67C###.##</text>
-<text transform="matrix(1.0185 0 0 1 1064.875 551.3135)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 1064.21 566.9512)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 1064.21 583.2822)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 1062.5078 609.2734)" class="st19 st10 st42">MW </text>
-<text transform="matrix(0.8166 0 0 1 1107.085 551.3135)" class="st19 st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 1107.085 568.543)" class="st19 st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 1107.085 583.2822)" class="st19 st10 st20">Ic</text>
-<text id="HT220_ia" transform="matrix(0.8166 0 0 1 1118.7686 551.3135)" class="st19 st10 st20">70A###.##</text>
-<text id="HT220_ib" transform="matrix(0.8166 0 0 1 1118.7686 566.9512)" class="st19 st10 st20">71B###.##</text>
-<text id="HT220_ic" transform="matrix(0.8166 0 0 1 1118.7686 583.2822)" class="st19 st10 st20">72C###.##</text>
-<text transform="matrix(1.0185 0 0 1 1171.4746 551.3135)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 1170.8096 566.9512)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 1170.8096 583.2822)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 1170.1074 610.2734)" class="st19 st10 st42">MW </text>
-<text transform="matrix(0.8166 0 0 1 1206.4639 551.3135)" class="st19 st10 st20">Ia</text>
-<text transform="matrix(0.8166 0 0 1 1206.4639 568.543)" class="st19 st10 st20">Ib</text>
-<text transform="matrix(0.8166 0 0 1 1206.4639 583.2822)" class="st19 st10 st20">Ic</text>
-<text id="AH04_ia" transform="matrix(0.8166 0 0 1 1218.1475 551.3135)" class="st19 st10 st20">75A###.##</text>
-<text id="AH04_ib" transform="matrix(0.8166 0 0 1 1218.1475 566.9512)" class="st19 st10 st20">76B###.##</text>
-<text id="AH04_ic" transform="matrix(0.8166 0 0 1 1218.1475 583.2822)" class="st19 st10 st20">77C###.##</text>
-<text transform="matrix(1.0185 0 0 1 1270.8535 551.3135)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 1270.1885 566.9512)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 1270.1885 583.2822)" class="st19 st10 st42">A </text>
-<text transform="matrix(1.0185 0 0 1 1271.4863 608.2734)" class="st19 st10 st42">MW </text>
-<text transform="matrix(0.9119 0 0 1 158.1772 137.4312)" class="st1 st14">Uab </text>
-<text id="_x31_10KV10_x5F_ua" transform="matrix(0.8166 0 0 1 185.0889 92.7002)" class="st15 st1 st44">2 ###.##</text>
-<text id="_x31_10KV10_x5F_ub" transform="matrix(0.8166 0 0 1 185.4277 107.8999)" class="st15 st1 st44">3 ###.##</text>
-<text id="_x31_10KV10_x5F_uc" transform="matrix(0.8166 0 0 1 185.0889 122.5972)" class="st15 st1 st44">4 ###.##</text>
-<text id="_x31_10KV10_x5F_uab" transform="matrix(0.8166 0 0 1 185.0889 137.4316)" class="st15 st1 st44">5 ###.##</text>
-<text transform="matrix(0.7564 0 0 1 227.9004 94.3999)" class="st1 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 228.4004 107.8994)" class="st1 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 228.4004 123.6001)" class="st1 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 227.4004 138.7852)" class="st1 st14">   KV</text>
-<text id="ZBD_uab" transform="matrix(0.8166 0 0 1 312.5029 231.1113)" class="st15 st1 st44">6 ###.##</text>
-<text id="ZBD_ubc" transform="matrix(0.8166 0 0 1 312.5029 248.8115)" class="st15 st1 st44">7 ###.##</text>
-<text id="ZBD_uca" transform="matrix(0.8166 0 0 1 312.7754 266.7119)" class="st15 st1 st44">8 ###.##</text>
-<text transform="matrix(0.7564 0 0 1 352.4756 230.1113)" class="st1 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 352.4756 267.1123)" class="st1 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 351.9746 248.8115)" class="st1 st14">   KV</text>
-<text id="_x31_10KV10_x5F_ia" transform="matrix(0.8166 0 0 1 650 90.2998)" class="st15 st1 st44">9 ###.##</text>
-<text transform="matrix(0.7564 0 0 1 695.2998 92.2998)" class="st1 st14">   A</text>
-<text id="_x31_10KV10_x5F_ib_x5F_" transform="matrix(0.8166 0 0 1 645.9004 105.5376)" class="st15 st1 st44">10 ###.##</text>
-<text transform="matrix(0.7564 0 0 1 695.2998 107.5376)" class="st1 st14">   A</text>
-<text id="_x31_10KV10_x5F_ic" transform="matrix(0.8166 0 0 1 645.9004 119.8711)" class="st15 st1 st44">11 ###.##</text>
-<text transform="matrix(0.7564 0 0 1 695.2998 123.5972)" class="st1 st14">   A</text>
-<text id="_x31_10KV10_x5F_yg" transform="matrix(0.8166 0 0 1 645.9004 136.7847)" class="st15 st1 st44">12 ###.##</text>
-<text transform="matrix(0.7564 0 0 1 695.2998 138.7847)" class="st1 st14">   A</text>
-<text transform="matrix(0.7564 0 0 1 693.3008 153.3999)" class="st1 st14">   Mvar</text>
-<text id="_x31_10KV10_x5F_wg" transform="matrix(0.8166 0 0 1 645.9004 153.3999)" class="st15 st1 st44">13 ###.##</text>
-<text id="_x31_10KV10_x5F_ys" transform="matrix(0.8166 0 0 1 646.9004 169.6001)" class="st15 st1 st44">14 ###.##</text>
-<text transform="matrix(0.7564 0 0 1 1087.5078 212.4863)" class="st19 st10 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 1087.5078 230.5)" class="st19 st10 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 1087.5078 249.1528)" class="st19 st10 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 1201.8008 217.5005)" class="st19 st10 st14">   A</text>
-<text transform="matrix(0.7564 0 0 1 1201.9004 230.8716)" class="st19 st10 st14">   A</text>
-<text transform="matrix(0.7564 0 0 1 1202.5 246.1001)" class="st19 st10 st14">   A</text>
-<text transform="matrix(1 0 0 1 1125.3 246.3002)" class="st19 st1 st14">Ic     </text>
-<text transform="matrix(1 0 0 1 1125.3 230.8586)" class="st19 st1 st14">Ib   </text>
-<text transform="matrix(1 0 0 1 1125.3 215.2502)" class="st19 st1 st14">Ia   </text>
-<text transform="matrix(1 0 0 1 1207.1477 609.574)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 1106.0629 609.8794)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 997.9319 610.8794)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 884.114 609.8794)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 749.7756 609.8794)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 641.1979 609.8794)" class="st10 st44">P</text>
-<text transform="matrix(1 0 0 1 536.563 609.8794)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 431.3273 609.8794)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 245.0628 609.8794)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 143.0887 608.8794)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 132.0605 625.9822)" class="st19 st10 st44">cos</text>
-<text id="AH00_ys" transform="matrix(0.8166 0 0 1 155.7002 626.875)" class="st19 st10 st44">37###.##</text>
-<text id="HT001_ys" transform="matrix(0.8166 0 0 1 257.7002 627.208)" class="st19 st10 st44">39###.##</text>
-<text transform="matrix(1 0 0 1 233.3957 626.9365)" class="st19 st10 st44">cos</text>
-<text id="AH00_yg" transform="matrix(0.8166 0 0 1 155.7002 608.6523)" class="st19 st10 st44">36###.##</text>
-<text id="HT001_yg" transform="matrix(0.8166 0 0 1 257.3496 609.6523)" class="st19 st10 st44">38###.##</text>
-<text id="BY35_ys" transform="matrix(0.8166 0 0 1 444.1006 626.4961)" class="st19 st10 st44">44###.##</text>
-<text transform="matrix(1 0 0 1 418.6331 625.9822)" class="st19 st10 st44">cos</text>
-<text id="BY35_yg" transform="matrix(0.8166 0 0 1 444.1006 609.6523)" class="st19 st10 st44">43###.##</text>
-<text transform="matrix(1 0 0 1 525.3333 627.5737)" class="st19 st10 st44">cos</text>
-<text id="BY39_ys" transform="matrix(0.8166 0 0 1 549.2002 627.8301)" class="st19 st10 st44">49###.##</text>
-<text id="BY39_yg" transform="matrix(0.8166 0 0 1 549.2002 608.6533)" class="st19 st10 st44">48###.##</text>
-<text transform="matrix(1 0 0 1 630.2756 628.6738)" class="st10 st44">cos</text>
-<text id="ZB10KV31_ys" transform="matrix(0.8166 0 0 1 654.2998 629.5664)" class="st15 st10 st44">54###.##</text>
-<text id="ZB10KV31_yg" transform="matrix(0.8166 0 0 1 654.2998 609.6523)" class="st15 st10 st44">53###.##</text>
-<text transform="matrix(1 0 0 1 736.3459 627.5737)" class="st19 st10 st44">cos</text>
-<text transform="matrix(0.8166 0 0 1 761.5996 628.208)" class="st19 st10 st44">59###.##</text>
-<text id="AH1_yg" transform="matrix(0.8166 0 0 1 761.7998 609.6523)" class="st19 st10 st44">58###.##</text>
-<text id="_x31_0KVL233_x5F_ys" transform="matrix(0.8166 0 0 1 896.5996 627.875)" class="st19 st10 st44">64###.##</text>
-<text transform="matrix(1 0 0 1 872.6741 627.6738)" class="st19 st10 st44">cos</text>
-<text id="_x31_0KVL233_x5F_yg" transform="matrix(0.8166 0 0 1 895.6006 609.6523)" class="st19 st10 st44">63###.##</text>
-<text id="HT219_ys" transform="matrix(0.8166 0 0 1 1011.7002 629.5664)" class="st19 st10 st44">69###.##</text>
-<text id="HT219_yg" transform="matrix(0.8166 0 0 1 1010.5 610.6523)" class="st19 st10 st44">68###.##</text>
-<text transform="matrix(1 0 0 1 985.5021 628.6738)" class="st19 st10 st44">cos</text>
-<text id="HT220_yg" transform="matrix(0.8166 0 0 1 1118.9375 609.6006)" class="st19 st10 st44">73###.##</text>
-<text id="HT220_ys" transform="matrix(0.8166 0 0 1 1120.0996 629.875)" class="st19 st10 st44">74###.##</text>
-<text transform="matrix(1 0 0 1 1095.7832 628.6738)" class="st19 st10 st44">cos</text>
-<text transform="matrix(1 0 0 1 1195.4807 627.6738)" class="st19 st10 st44">cos</text>
-<text id="AH04_yg" transform="matrix(0.8166 0 0 1 1218.7998 608.2734)" class="st19 st10 st44">78###.##</text>
-<text id="AH04_ys" transform="matrix(0.8166 0 0 1 1218.7002 629.208)" class="st19 st10 st44">79###.##</text>
-<path class="st27" d="M564,377.9"/>
-<path class="st27" d="M563.8,377.9"/>
-<path class="st27" d="M1039.1,407.9"/>
-<line class="st29" x1="928.6" y1="403.5" x2="928.6" y2="411.5"/>
-<line class="st29" x1="927.6" y1="381" x2="927.6" y2="389.3"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st29" x1="928.1" y1="389.2" x2="922.8" y2="394.9"/>
-	<line class="st29" x1="933.6" y1="394.9" x2="927.8" y2="389.3"/>
-</g>
-<line class="st29" x1="928.3" y1="412" x2="933.5" y2="406.2"/>
-<line class="st29" x1="922.8" y1="406.2" x2="928.5" y2="411.9"/>
-<rect x="923.8" y="388.9" class="st45" width="9.7" height="14.7"/>
-<line class="st46" x1="1189.9" y1="403.8" x2="1189.9" y2="411.7"/>
-<line class="st47" x1="1188.9" y1="381.2" x2="1188.9" y2="389.5"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1189.4" y1="389.4" x2="1184.1" y2="395.1"/>
-	<line class="st4" x1="1195" y1="395.1" x2="1189.1" y2="389.4"/>
-</g>
-<line class="st48" x1="1189.6" y1="412.1" x2="1194.8" y2="406.4"/>
-<line class="st47" x1="1184" y1="406.4" x2="1189.9" y2="412.1"/>
-<rect x="1185.1" y="389.1" class="st18" width="9.7" height="14.7"/>
-<line class="st23" x1="1279.1" y1="410.1" x2="1265.9" y2="410.1"/>
-<line class="st23" x1="1278.5" y1="407.1" x2="1278.5" y2="410.1"/>
-<line class="st23" x1="1280.3" y1="416.1" x2="1280.3" y2="431.2"/>
-<line class="st23" x1="1276.5" y1="416.4" x2="1276.5" y2="431.4"/>
-<line class="st23" x1="1276.7" y1="431.1" x2="1280.6" y2="431.1"/>
-<line class="st23" x1="1276.2" y1="416.4" x2="1280.1" y2="416.4"/>
-<line class="st23" x1="1278.1" y1="410.7" x2="1278.1" y2="446.9"/>
-<path class="st24" d="M1282.5,450.4c-1.3,0-2.3-1-2.3-2.2s1.1-2.2,2.3-2.2c1.3,0,2.3,1,2.3,2.2S1283.8,450.4,1282.5,450.4"/>
-<text transform="matrix(1 0 0 1 1281.1855 448.9528)" class="st8 st1 st25">Q</text>
-<text transform="matrix(1 0 0 1 1281.1855 448.9528)" class="st6 st1 st25">Q</text>
-<path class="st24" d="M1278.1,448.6c-1.5,0-2.7-1.1-2.7-2.5s1.2-2.5,2.7-2.5s2.7,1.1,2.7,2.5
-	C1280.8,447.5,1279.6,448.6,1278.1,448.6"/>
-<line class="st6" x1="1278.2" y1="444.3" x2="1278.2" y2="446"/>
-<line class="st6" x1="1278.2" y1="445.8" x2="1279.2" y2="447.2"/>
-<line class="st6" x1="1278.1" y1="446.1" x2="1277.1" y2="447.4"/>
-<path class="st24" d="M1278.2,451.1c-1.5,0-2.7-1.1-2.7-2.5s1.2-2.5,2.7-2.5s2.7,1.1,2.7,2.5C1280.9,450,1279.7,451.1,1278.2,451.1"
-	/>
-<line class="st26" x1="1278.2" y1="446.8" x2="1278.3" y2="448.5"/>
-<line class="st26" x1="1278.2" y1="448.3" x2="1279.3" y2="449.7"/>
-<line class="st26" x1="1278.2" y1="448.6" x2="1277.2" y2="449.9"/>
-<line class="st23" x1="1266" y1="409.8" x2="1266" y2="425.3"/>
-<line class="st23" x1="1268.8" y1="421.6" x2="1268.8" y2="436.3"/>
-<line class="st23" x1="1262.7" y1="421.8" x2="1262.7" y2="436.5"/>
-<line class="st28" x1="1262.7" y1="436.2" x2="1268.8" y2="436.2"/>
-<line class="st23" x1="1262.7" y1="421.8" x2="1268.8" y2="421.8"/>
-<line class="st23" x1="1265.7" y1="436.3" x2="1265.7" y2="440.8"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1277.9" y1="417.1" x2="1283.1" y2="409.9"/>
-	<line class="st4" x1="1272.3" y1="409.9" x2="1278.2" y2="417.1"/>
-</g>
-<line class="st4" x1="1277.6" y1="376.8" x2="1272.3" y2="384"/>
-<line class="st4" x1="1283.3" y1="384" x2="1277.3" y2="376.8"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1277.6" y1="405.2" x2="1282.9" y2="397.8"/>
-	<line class="st4" x1="1272.1" y1="397.8" x2="1277.9" y2="405"/>
-</g>
-<line class="st4" x1="1277.9" y1="394" x2="1277.9" y2="377.8"/>
-<line class="st4" x1="1245" y1="282.3" x2="1245" y2="289"/>
-<line class="st4" x1="1244.2" y1="263.3" x2="1244.2" y2="270.3"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1244.6" y1="271.5" x2="1240.6" y2="276.5"/>
-	<line class="st4" x1="1248.9" y1="276.5" x2="1244.4" y2="271.5"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1244.8" y1="298.5" x2="1248.8" y2="293.6"/>
-	<line class="st4" x1="1240.5" y1="293.6" x2="1245" y2="298.5"/>
-</g>
-<rect x="1241.3" y="270" class="st49" width="7.4" height="12.4"/>
-<text transform="matrix(1 0 0 1 149.7948 207.7999)" class="st1 st14">10kv</text>
-<text transform="matrix(1 0 0 1 178.0629 207.7997)" class="st1 st14">渚х浉鐢靛帇</text>
-<text transform="matrix(1 0 0 1 153.1999 233.2303)" class="st1 st14"> Ua</text>
-<text transform="matrix(1 0 0 1 157.5013 248.0361)" class="st1 st14">Ub</text>
-<text transform="matrix(1 0 0 1 157.5013 264.5)" class="st1 st14">Uc</text>
-<text transform="matrix(1 0 0 1 161.8553 264.2563)" class="st8 st1 st14"> :</text>
-<text id="_x31_10KV10_x5F_ua_1_" transform="matrix(0.8166 0 0 1 179.5889 233.2305)" class="st15 st1 st44">82 ###.##</text>
-<text id="_x31_10KV10_x5F_ub_1_" transform="matrix(0.8166 0 0 1 179.9277 249.4297)" class="st15 st1 st44">83 ###.##</text>
-<text id="_x31_10KV10_x5F_uc_1_" transform="matrix(0.8166 0 0 1 179.5889 266.127)" class="st15 st1 st44">84 ###.##</text>
-<text transform="matrix(0.7564 0 0 1 229.4004 233.9297)" class="st1 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 228.9004 248.4297)" class="st1 st14">   KV</text>
-<text transform="matrix(0.7564 0 0 1 228.9004 266.127)" class="st1 st14">   KV</text>
-<line class="st36" x1="496.5" y1="207.6" x2="496.5" y2="212.3"/>
-<line class="st36" x1="496.5" y1="212.3" x2="503.8" y2="217.4"/>
-<line class="st36" x1="496.5" y1="212.3" x2="490.7" y2="217.3"/>
-<text transform="matrix(0.7564 0 0 1 484 30.6133)" class="st1 st14">   kwh</text>
-<text transform="matrix(1 0 0 1 1018.0886 264.7607)" class="st19 st10 st44">P</text>
-<text transform="matrix(1 0 0 1 1006.8799 280.1998)" class="st19 st10 st44">cos</text>
-<text id="_x31_10KV_x5F_uc_1_" transform="matrix(1.0507 0 0 1 1035.6426 264.8711)" class="st15 st10 st40">80###.##</text>
-<text transform="matrix(0.7564 0 0 1 1086.1582 265.1382)" class="st19 st10 st14">   MW</text>
-<text id="_x31_10KV_x5F_uc_2_" transform="matrix(1.0507 0 0 1 1031.9922 280.833)" class="st19 st10 st40"> 81###.##</text>
-<text transform="matrix(0.7564 0 0 1 1073.5078 281.1001)" class="st19 st1 st14">   </text>
-<text transform="matrix(1 0 0 1 180.1768 532.6353)" class="st19 st10 st43">AH00</text>
-<text transform="matrix(1 0 0 1 437 100)" class="st10 st43">105</text>
-<text transform="matrix(1 0 0 1 511.55 69)" class="st10 st43">101</text>
-<text transform="matrix(1 0 0 1 505 123.9702)" class="st10 st43">10</text>
-<text transform="matrix(1 0 0 1 522 148.2)" class="st10 st43">108</text>
-<text transform="matrix(1 0 0 1 460 187)" class="st10 st43">106</text>
-<text transform="matrix(1 0 0 1 525.8 187.354)" class="st10 st43">109</text>
-<line class="st4" x1="1058.8" y1="399.5" x2="1058.8" y2="407.5"/>
-<line class="st4" x1="1057.8" y1="377" x2="1057.8" y2="385.4"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="1058.3" y1="385.2" x2="1053" y2="391"/>
-	<line class="st4" x1="1063.8" y1="391" x2="1058" y2="385.2"/>
-</g>
-<line class="st4" x1="1058.5" y1="408" x2="1063.8" y2="402.2"/>
-<line class="st4" x1="1053" y1="402.2" x2="1058.8" y2="408"/>
-<rect x="1054" y="384.9" class="st50" width="9.7" height="14.7"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="510.5" y1="381.7" x2="505.3" y2="387.4"/>
-	<line class="st4" x1="516" y1="387.4" x2="510.3" y2="381.7"/>
-</g>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="510.7" y1="414.4" x2="516" y2="408.7"/>
-	<line class="st4" x1="505.2" y1="408.7" x2="511" y2="414.4"/>
-</g>
-<rect x="506.2" y="381.3" class="st49" width="9.7" height="14.7"/>
-<line class="st4" x1="510.5" y1="373.7" x2="510.5" y2="381.9"/>
-<line class="st4" x1="511" y1="395.1" x2="511" y2="403.3"/>
-<line class="st4" x1="591.5" y1="393.9" x2="591.5" y2="401.8"/>
-<line class="st4" x1="589.5" y1="375.4" x2="589.5" y2="383.6"/>
-<line class="st4" x1="589.8" y1="374.6" x2="584.7" y2="380.3"/>
-<line class="st4" x1="595.5" y1="380.3" x2="589.6" y2="374.6"/>
-<g transform="matrix(1,0,0,1,0,-9)">
-	<line class="st4" x1="590.1" y1="415.3" x2="595.3" y2="409.6"/>
-	<line class="st4" x1="584.6" y1="409.6" x2="590.3" y2="415.3"/>
-</g>
-<rect x="585.6" y="383.2" class="st49" width="9.7" height="14.7"/>
-<text transform="matrix(1 0 0 1 521.3335 92)" class="st1 st43">L</text>
-<path class="st51" d="M523.6,93.4c-3.3,0-6-2.6-6-5.8s2.7-5.8,6-5.8s6,2.6,6,5.8C529.5,90.8,526.9,93.4,523.6,93.4"/>
-<text transform="matrix(1 0 0 1 520.5 90.2998)" class="st1 st43">L</text>
-<path class="st51" d="M215.8,368.4c-3.3,0-6-2.6-6-5.8s2.7-5.8,6-5.8s5.9,2.6,5.9,5.8S219,368.4,215.8,368.4"/>
-<path class="st51" d="M299.1,367.8c-3.3,0-5.9-2.6-5.9-5.8s2.7-5.8,5.9-5.8c3.3,0,5.9,2.6,5.9,5.8S302.4,367.8,299.1,367.8"/>
-<path class="st51" d="M506.2,365.9c-3.3,0-6-2.6-6-5.8s2.7-5.8,6-5.8s6,2.6,6,5.8S509.5,365.9,506.2,365.9"/>
-<path class="st51" d="M578.9,365.9c-3.3,0-6-2.6-6-5.8s2.7-5.8,6-5.8s6,2.6,6,5.8S582.2,365.9,578.9,365.9"/>
-<text transform="matrix(1 0 0 1 211.75 365.3)" class="st1 st43">R</text>
-<text transform="matrix(1 0 0 1 295.5 365.3)" class="st1 st43">R</text>
-<text transform="matrix(1 0 0 1 503.8 362.667)" class="st1 st43">L</text>
-<text transform="matrix(1 0 0 1 576.7 362.667)" class="st1 st43">L</text>
-<line class="st36" x1="496.5" y1="222.6" x2="503.2" y2="233.9"/>
-<line class="st36" x1="496" y1="225.7" x2="503.2" y2="233.9"/>
-<path class="st51" d="M706.5,367.8c-3.3,0-6-2.6-6-5.8s2.7-5.8,6-5.8s6,2.6,6,5.8S709.7,367.8,706.5,367.8"/>
-<text transform="matrix(1 0 0 1 702.8766 365.3)" class="st1 st43">R</text>
-<path class="st51" d="M812.2,367.8c-3.3,0-6-2.6-6-5.8s2.7-5.8,6-5.8s6,2.6,6,5.8S815.5,367.8,812.2,367.8"/>
-<text transform="matrix(1 0 0 1 808.6 365.3)" class="st1 st43">R</text>
-<path class="st51" d="M941.1,366.8c-3.3,0-5.9-2.6-5.9-5.8s2.7-5.8,5.9-5.8c3.3,0,6,2.6,6,5.8S944.4,366.8,941.1,366.8"/>
-<text transform="matrix(1 0 0 1 936.5 365.3)" class="st1 st43">R</text>
-<path class="st51" d="M1050.1,364.8c-3.3,0-5.9-2.6-5.9-5.8s2.7-5.8,5.9-5.8c3.3,0,6,2.6,6,5.8S1053.4,364.8,1050.1,364.8"/>
-<text transform="matrix(1 0 0 1 1045.5 363.3)" class="st1 st43">R</text>
-<path class="st51" d="M1133.1,364.8c-3.3,0-5.9-2.6-5.9-5.8s2.7-5.8,5.9-5.8c3.3,0,6,2.6,6,5.8S1136.4,364.8,1133.1,364.8"/>
-<text transform="matrix(1 0 0 1 1128.5 363.3)" class="st1 st43">R</text>
-<path class="st51" d="M1205.1,366.8c-3.3,0-5.9-2.6-5.9-5.8s2.7-5.8,5.9-5.8c3.3,0,6,2.6,6,5.8S1208.4,366.8,1205.1,366.8"/>
-<text transform="matrix(1 0 0 1 1201.5 364.3)" class="st1 st43">R</text>
-<line class="st36" x1="496" y1="225.7" x2="501.5" y2="232"/>
-<line class="st36" x1="300.5" y1="171.6" x2="305.8" y2="176.6"/>
-<line class="st36" x1="503.1" y1="233.2" x2="496.6" y2="223.3"/>
-<line class="st26" x1="503.3" y1="234.8" x2="496.5" y2="222.6"/>
-<line class="st52" x1="496.3" y1="213.9" x2="492.7" y2="218.9"/>
-<line class="st52" x1="496.3" y1="213.9" x2="499.6" y2="219"/>
-<line class="st52" x1="496.3" y1="209.3" x2="496.3" y2="214.3"/>
-<text transform="matrix(1 0 0 1 390.5 233.5)" class="st1 st43">闆�</text>
-<text transform="matrix(1 0 0 1 402.5 233.5)" class="st10 st43">1</text>
-<line class="st6" x1="413.5" y1="433.7" x2="405.9" y2="433.7"/>
-<line class="st6" x1="413.6" y1="433.6" x2="410" y2="436.1"/>
-<line class="st6" x1="410.8" y1="436.6" x2="406.8" y2="434.1"/>
-<line class="st6" x1="670.7" y1="435.4" x2="663" y2="435.4"/>
-<line class="st6" x1="670.4" y1="436" x2="666.8" y2="438.6"/>
-<line class="st6" x1="667" y1="438.3" x2="662.9" y2="435.7"/>
-<line class="st6" x1="778.3" y1="437.5" x2="770.6" y2="437.5"/>
-<line class="st6" x1="778.4" y1="437.4" x2="774.7" y2="440"/>
-<line class="st6" x1="774.6" y1="440" x2="770.6" y2="437.4"/>
-<line class="st6" x1="1179.4" y1="441.2" x2="1171.7" y2="441.2"/>
-<line class="st6" x1="1178.5" y1="442" x2="1174.8" y2="444.7"/>
-<line class="st6" x1="1175.7" y1="444.8" x2="1171.7" y2="442.1"/>
-<line class="st6" x1="1263.2" y1="426.3" x2="1268.8" y2="426.3"/>
-<line class="st6" x1="1263.5" y1="426.4" x2="1266.2" y2="429"/>
-<line class="st6" x1="1265.5" y1="429.3" x2="1268.5" y2="426.7"/>
-<line class="st6" x1="1108.9" y1="440.8" x2="1101.2" y2="440.8"/>
-<line class="st6" x1="1107.8" y1="441.5" x2="1104.2" y2="444.1"/>
-<line class="st6" x1="1105" y1="443.3" x2="1100.9" y2="440.7"/>
-<line class="st6" x1="1029.1" y1="440" x2="1021.5" y2="440"/>
-<line class="st6" x1="1029.1" y1="440.4" x2="1025.5" y2="443"/>
-<line class="st6" x1="1025.5" y1="442.8" x2="1021.5" y2="440.1"/>
-<line class="st6" x1="208.3" y1="462.8" x2="215.2" y2="462.8"/>
-<line class="st6" x1="209.2" y1="464.9" x2="214.4" y2="464.9"/>
-<line class="st6" x1="210.5" y1="467.3" x2="212.6" y2="467.3"/>
-<line class="st6" x1="295.6" y1="461.5" x2="302.6" y2="461.5"/>
-<line class="st6" x1="296.6" y1="463.6" x2="301.8" y2="463.6"/>
-<line class="st6" x1="297.9" y1="466" x2="300" y2="466"/>
-<line class="st6" x1="1262.5" y1="441.2" x2="1269.3" y2="441.2"/>
-<line class="st6" x1="1263.4" y1="442.9" x2="1268.6" y2="442.9"/>
-<line class="st6" x1="1264.7" y1="444.9" x2="1266.8" y2="444.9"/>
-<line class="st6" x1="483.6" y1="436.1" x2="476" y2="436.1"/>
-<line class="st6" x1="483.5" y1="435.9" x2="479.9" y2="438.5"/>
-<line class="st6" x1="480" y1="438.7" x2="476" y2="436.1"/>
-<line class="st6" x1="554.3" y1="437.8" x2="546.7" y2="437.8"/>
-<line class="st6" x1="554.1" y1="437.6" x2="550.4" y2="440.2"/>
-<line class="st6" x1="550.7" y1="440.4" x2="546.7" y2="437.8"/>
-<line class="st6" x1="347.7" y1="398.8" x2="353.3" y2="398.8"/>
-<line class="st6" x1="347.6" y1="399" x2="350.4" y2="401.6"/>
-<line class="st6" x1="350.7" y1="401.6" x2="353.6" y2="399"/>
-<text transform="matrix(0.9013 0 0 1 1282.9004 335.7031)" class="st6 st10 st41">203</text>
-<text transform="matrix(0.9013 0 0 1 1267.2754 315.2007)" class="st6 st10 st41">231</text>
-<line class="st6" x1="1227.9" y1="317.3" x2="1231.4" y2="317.3"/>
-<line class="st6" x1="1227.8" y1="317.5" x2="1229.5" y2="319.9"/>
-<line class="st6" x1="1229.5" y1="319.9" x2="1231.3" y2="317.5"/>
-</svg>
diff --git a/energy_management_ui/src/assets/icons/svg/dict.svg b/energy_management_ui/src/assets/icons/svg/dict.svg
deleted file mode 100644
index 4849377..0000000
--- a/energy_management_ui/src/assets/icons/svg/dict.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1566035680909" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3601" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M1002.0848 744.672l-33.568 10.368c0.96 7.264 2.144 14.304 2.144 21.76 0 7.328-1.184 14.432-2.368 21.568l33.792 10.56c7.936 2.24 14.496 7.616 18.336 14.752 3.84 7.328 4.672 15.808 1.952 23.552-5.376 16-23.168 24.672-39.936 19.68l-34.176-10.624c-7.136 12.8-15.776 24.672-26.208 35.2l20.8 27.488a28.96 28.96 0 0 1 5.824 22.816 29.696 29.696 0 0 1-12.704 19.616 32.544 32.544 0 0 1-44.416-6.752l-20.8-27.552c-13.696 6.56-28.192 11.2-43.008 13.888v33.632c0 16.736-14.112 30.432-31.648 30.432-17.6 0-31.872-13.696-31.872-30.432v-33.632a167.616 167.616 0 0 1-42.88-13.888l-20.928 27.552c-10.72 13.76-30.08 16.64-44.288 6.752a29.632 29.632 0 0 1-12.704-19.616 29.28 29.28 0 0 1 5.696-22.816l20.896-27.808a166.72 166.72 0 0 1-27.008-34.688l-33.376 10.432c-16.8 5.184-34.56-3.552-39.936-19.616a29.824 29.824 0 0 1 20.224-38.24l33.472-10.432c-0.8-7.264-2.016-14.304-2.016-21.824 0-7.36 1.184-14.496 2.304-21.632l-33.792-10.368c-16.672-5.376-25.632-22.496-20.224-38.432 5.376-16 23.136-24.672 39.936-19.68l34.016 10.752c7.328-12.672 15.84-24.8 26.336-35.328l-20.8-27.552a29.44 29.44 0 0 1 6.944-42.432 32.704 32.704 0 0 1 44.384 6.752l20.832 27.616c13.696-6.432 28.224-11.2 43.104-13.952v-33.568c0-16.736 14.048-30.432 31.648-30.432 17.536 0 31.808 13.568 31.808 30.432v33.504c15.072 2.688 29.344 7.808 42.848 14.016l20.992-27.616a32.48 32.48 0 0 1 44.224-6.752 29.568 29.568 0 0 1 7.136 42.432l-21.024 27.808c10.432 10.432 19.872 21.888 27.04 34.752l33.376-10.432c16.768-5.12 34.56 3.68 39.936 19.68 5.536 15.936-3.712 33.056-20.32 38.304z m-206.016-74.432c-61.344 0-111.136 47.808-111.136 106.56 0 58.88 49.792 106.496 111.136 106.496 61.312 0 111.104-47.616 111.104-106.496 0-58.752-49.792-106.56-111.104-106.56z" p-id="3602"></path><path d="M802.7888 57.152h-76.448c0-22.08-21.024-38.24-42.848-38.24H39.3968a39.68 39.68 0 0 0-39.36 40.032v795.616s41.888 120.192 110.752 120.192H673.2848a227.488 227.488 0 0 1-107.04-97.44H117.6368s-40.608-13.696-40.608-41.248l470.304-0.256 1.664 3.36a227.68 227.68 0 0 1-12.64-73.632c0-60.576 24-118.624 66.88-161.44a228.352 228.352 0 0 1 123.552-63.392l-3.2 0.288 2.144-424.672h38.208l0.576 421.024c27.04 0 52.672 4.8 76.64 13.344V101.536c0.032 0-6.304-44.384-38.368-44.384zM149.7648 514.336H72.3888v-77.408H149.7648v77.408z m0-144.32H72.3888v-77.44H149.7648v77.44z m0-137.248H72.3888v-77.44H149.7648v77.44z m501.856 281.568H206.0848v-77.408h445.536v77.408z m0-144.32H206.0848v-77.44h445.536v77.44z m0-137.248H206.0848v-77.44h445.536v77.44z" p-id="3603"></path></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/documentation.svg b/energy_management_ui/src/assets/icons/svg/documentation.svg
deleted file mode 100644
index 7043122..0000000
--- a/energy_management_ui/src/assets/icons/svg/documentation.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M71.984 44.815H115.9L71.984 9.642v35.173zM16.094.05h63.875l47.906 38.37v76.74c0 3.392-1.682 6.645-4.677 9.044-2.995 2.399-7.056 3.746-11.292 3.746H16.094c-4.236 0-8.297-1.347-11.292-3.746-2.995-2.399-4.677-5.652-4.677-9.044V12.84C.125 5.742 7.23.05 16.094.05zm71.86 102.32V89.58h-71.86v12.79h71.86zm23.952-25.58V64H16.094v12.79h95.812z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/download.svg b/energy_management_ui/src/assets/icons/svg/download.svg
deleted file mode 100644
index c896951..0000000
--- a/energy_management_ui/src/assets/icons/svg/download.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1569915748289" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3062" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M768.35456 416a256 256 0 1 0-512 0 192 192 0 1 0 0 384v64a256 256 0 0 1-58.88-505.216 320.128 320.128 0 0 1 629.76 0A256.128 256.128 0 0 1 768.35456 864v-64a192 192 0 0 0 0-384z m-512 384h64v64H256.35456v-64z m448 0h64v64h-64v-64z" fill="#333333" p-id="3063"></path><path d="M539.04256 845.248V512.192a32.448 32.448 0 0 0-32-32.192c-17.664 0-32 14.912-32 32.192v333.056l-36.096-36.096a32.192 32.192 0 0 0-45.056 0.192 31.616 31.616 0 0 0-0.192 45.056l90.88 90.944a31.36 31.36 0 0 0 22.528 9.088 30.08 30.08 0 0 0 22.4-9.088l90.88-90.88a32.192 32.192 0 0 0-0.192-45.12 31.616 31.616 0 0 0-45.056-0.192l-36.096 36.096z" fill="#333333" p-id="3064"></path></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/drag.svg b/energy_management_ui/src/assets/icons/svg/drag.svg
deleted file mode 100644
index 4185d3c..0000000
--- a/energy_management_ui/src/assets/icons/svg/drag.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M73.137 29.08h-9.209 29.7L63.886.093 34.373 29.08h20.49v27.035H27.238v17.948h27.625v27.133h18.274V74.063h27.41V56.115h-27.41V29.08zm-9.245 98.827l27.518-26.711H36.59l27.302 26.71zM.042 64.982l27.196 27.029V38.167L.042 64.982zm100.505-26.815V92.01l27.41-27.029-27.41-26.815z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/druid.svg b/energy_management_ui/src/assets/icons/svg/druid.svg
deleted file mode 100644
index a2b4b4e..0000000
--- a/energy_management_ui/src/assets/icons/svg/druid.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1566036347051" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5853" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M832 128H192a64.19 64.19 0 0 0-64 64v640a64.19 64.19 0 0 0 64 64h640a64.19 64.19 0 0 0 64-64V192a64.19 64.19 0 0 0-64-64z m0 703.89l-0.11 0.11H192.11l-0.11-0.11V768h640zM832 544H720L605.6 696.54 442.18 435.07 333.25 544H192v-64h114.75l147.07-147.07L610.4 583.46 688 480h144z m0-288H192v-63.89l0.11-0.11h639.78l0.11 0.11z" p-id="5854"></path></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/edit.svg b/energy_management_ui/src/assets/icons/svg/edit.svg
deleted file mode 100644
index d26101f..0000000
--- a/energy_management_ui/src/assets/icons/svg/edit.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M106.133 67.2a4.797 4.797 0 0 0-4.8 4.8c0 .187.014.36.027.533h-.027V118.4H9.6V26.667h50.133c2.654 0 4.8-2.147 4.8-4.8 0-2.654-2.146-4.8-4.8-4.8H9.6a9.594 9.594 0 0 0-9.6 9.6V118.4c0 5.307 4.293 9.6 9.6 9.6h91.733c5.307 0 9.6-4.293 9.6-9.6V72.533h-.026c.013-.173.026-.346.026-.533 0-2.653-2.146-4.8-4.8-4.8z"/><path d="M125.16 13.373L114.587 2.8c-3.747-3.747-9.854-3.72-13.6.027l-52.96 52.96a4.264 4.264 0 0 0-.907 1.36L33.813 88.533c-.746 1.76-.226 3.534.907 4.68 1.133 1.147 2.92 1.667 4.693.92l31.4-13.293c.507-.213.96-.52 1.36-.907l52.96-52.96c3.747-3.746 3.774-9.853.027-13.6zM66.107 72.4l-18.32 7.76 7.76-18.32L92.72 24.667l10.56 10.56L66.107 72.4zm52.226-52.227l-8.266 8.267-10.56-10.56 8.266-8.267.027-.026 10.56 10.56-.027.026z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/education.svg b/energy_management_ui/src/assets/icons/svg/education.svg
deleted file mode 100644
index 7bfb01d..0000000
--- a/energy_management_ui/src/assets/icons/svg/education.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M88.883 119.565c-7.284 0-19.434 2.495-21.333 8.25v.127c-4.232.13-5.222 0-7.108 0-1.895-5.76-14.045-8.256-21.333-8.256H0V0h42.523c9.179 0 17.109 5.47 21.47 13.551C68.352 5.475 76.295 0 85.478 0H128v119.57l-39.113-.005h-.004zM60.442 24.763c0-9.651-8.978-16.507-17.777-16.507H7.108V111.43H39.11c7.054-.14 18.177.082 21.333 6.12v-4.628c-.134-5.722-.004-13.522 0-13.832V27.413l.004-2.655-.004.005zm60.442-16.517h-35.55c-8.802 0-17.78 6.856-17.78 16.493v74.259c.004.32.138 8.115 0 13.813v4.627c3.155-6.022 14.279-6.26 21.333-6.114h32V8.25l-.003-.005z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/email.svg b/energy_management_ui/src/assets/icons/svg/email.svg
deleted file mode 100644
index 74d25e2..0000000
--- a/energy_management_ui/src/assets/icons/svg/email.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="96" xmlns="http://www.w3.org/2000/svg"><path d="M64.125 56.975L120.188.912A12.476 12.476 0 0 0 115.5 0h-103c-1.588 0-3.113.3-4.513.838l56.138 56.137z"/><path d="M64.125 68.287l-62.3-62.3A12.42 12.42 0 0 0 0 12.5v71C0 90.4 5.6 96 12.5 96h103c6.9 0 12.5-5.6 12.5-12.5v-71a12.47 12.47 0 0 0-1.737-6.35L64.125 68.287z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/example.svg b/energy_management_ui/src/assets/icons/svg/example.svg
deleted file mode 100644
index 46f42b5..0000000
--- a/energy_management_ui/src/assets/icons/svg/example.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M96.258 57.462h31.421C124.794 27.323 100.426 2.956 70.287.07v31.422a32.856 32.856 0 0 1 25.971 25.97zm-38.796-25.97V.07C27.323 2.956 2.956 27.323.07 57.462h31.422a32.856 32.856 0 0 1 25.97-25.97zm12.825 64.766v31.421c30.46-2.885 54.507-27.253 57.713-57.712H96.579c-2.886 13.466-13.146 23.726-26.292 26.291zM31.492 70.287H.07c2.886 30.46 27.253 54.507 57.713 57.713V96.579c-13.466-2.886-23.726-13.146-26.291-26.292z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/excel.svg b/energy_management_ui/src/assets/icons/svg/excel.svg
deleted file mode 100644
index 74d97b8..0000000
--- a/energy_management_ui/src/assets/icons/svg/excel.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M78.208 16.576v8.384h38.72v5.376h-38.72v8.704h38.72v5.376h-38.72v8.576h38.72v5.376h-38.72v8.576h38.72v5.376h-38.72v8.576h38.72v5.376h-38.72v8.512h38.72v5.376h-38.72v11.136H128v-94.72H78.208zM0 114.368L72.128 128V0L0 13.632v100.736z"/><path d="M28.672 82.56h-11.2l14.784-23.488-14.08-22.592h11.52l8.192 14.976 8.448-14.976h11.136l-14.08 22.208L58.368 82.56H46.656l-8.768-15.68z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/exit-fullscreen.svg b/energy_management_ui/src/assets/icons/svg/exit-fullscreen.svg
deleted file mode 100644
index 485c128..0000000
--- a/energy_management_ui/src/assets/icons/svg/exit-fullscreen.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M49.217 41.329l-.136-35.24c-.06-2.715-2.302-4.345-5.022-4.405h-3.65c-2.712-.06-4.866 2.303-4.806 5.016l.152 19.164-24.151-23.79a6.698 6.698 0 0 0-9.499 0 6.76 6.76 0 0 0 0 9.526l23.93 23.713-18.345.074c-2.712-.069-5.228 1.813-5.64 5.02v3.462c.069 2.721 2.31 4.97 5.022 5.03l35.028-.207c.052.005.087.025.133.025l2.457.054a4.626 4.626 0 0 0 3.436-1.38c.88-.874 1.205-2.096 1.169-3.462l-.262-2.465c0-.048.182-.081.182-.136h.002zm52.523 51.212l18.32-.073c2.713.06 5.224-1.609 5.64-4.815v-3.462c-.068-2.722-2.317-4.97-5.021-5.04l-34.58.21c-.053 0-.086-.021-.138-.021l-2.451-.06a4.64 4.64 0 0 0-3.445 1.381c-.885.868-1.201 2.094-1.174 3.46l.27 2.46c.005.06-.177.095-.177.141l.141 34.697c.069 2.713 2.31 4.338 5.022 4.397l3.45.006c2.705.062 4.867-2.31 4.8-5.026l-.153-18.752 24.151 23.946a6.69 6.69 0 0 0 9.494 0 6.747 6.747 0 0 0 0-9.523L101.74 92.54v.001zM48.125 80.662a4.636 4.636 0 0 0-3.437-1.382l-2.457.06c-.05 0-.082.022-.137.022l-35.025-.21c-2.712.07-4.957 2.318-5.022 5.04v3.462c.409 3.206 2.925 4.874 5.633 4.814l18.554.06-24.132 23.928c-2.62 2.626-2.62 6.89 0 9.524a6.694 6.694 0 0 0 9.496 0l24.155-23.79-.155 18.866c-.06 2.722 2.094 5.093 4.801 5.025h3.65c2.72-.069 4.962-1.685 5.022-4.406l.141-34.956c0-.05-.182-.082-.182-.136l.262-2.46c.03-1.366-.286-2.592-1.166-3.46h-.001zM80.08 47.397a4.62 4.62 0 0 0 3.443 1.374l2.45-.054c.055 0 .088-.02.143-.028l35.08.21c2.712-.062 4.953-2.312 5.021-5.033l.009-3.463c-.417-3.211-2.937-5.084-5.64-5.025l-18.615-.073 23.917-23.715c2.63-2.623 2.63-6.879.008-9.513a6.691 6.691 0 0 0-9.494 0L92.251 26.016l.155-19.312c.065-2.713-2.097-5.085-4.802-5.025h-3.45c-2.713.069-4.954 1.693-5.022 4.406l-.139 35.247c0 .054.18.088.18.136l-.267 2.465c-.028 1.366.288 2.588 1.174 3.463v.001z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/eye-open.svg b/energy_management_ui/src/assets/icons/svg/eye-open.svg
deleted file mode 100644
index 88dcc98..0000000
--- a/energy_management_ui/src/assets/icons/svg/eye-open.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="128" height="128"><defs><style/></defs><path d="M512 128q69.675 0 135.51 21.163t115.498 54.997 93.483 74.837 73.685 82.006 51.67 74.837 32.17 54.827L1024 512q-2.347 4.992-6.315 13.483T998.87 560.17t-31.658 51.669-44.331 59.99-56.832 64.34-69.504 60.16-82.347 51.5-94.848 34.687T512 896q-69.675 0-135.51-21.163t-115.498-54.826-93.483-74.326-73.685-81.493-51.67-74.496-32.17-54.997L0 513.707q2.347-4.992 6.315-13.483t18.816-34.816 31.658-51.84 44.331-60.33 56.832-64.683 69.504-60.331 82.347-51.84 94.848-34.816T512 128.085zm0 85.333q-46.677 0-91.648 12.331t-81.152 31.83-70.656 47.146-59.648 54.485-48.853 57.686-37.675 52.821-26.325 43.99q12.33 21.674 26.325 43.52t37.675 52.351 48.853 57.003 59.648 53.845T339.2 767.02t81.152 31.488T512 810.667t91.648-12.331 81.152-31.659 70.656-46.848 59.648-54.186 48.853-57.344 37.675-52.651T927.957 512q-12.33-21.675-26.325-43.648t-37.675-52.65-48.853-57.345-59.648-54.186-70.656-46.848-81.152-31.659T512 213.334zm0 128q70.656 0 120.661 50.006T682.667 512 632.66 632.661 512 682.667 391.339 632.66 341.333 512t50.006-120.661T512 341.333zm0 85.334q-35.328 0-60.33 25.002T426.666 512t25.002 60.33T512 597.334t60.33-25.002T597.334 512t-25.002-60.33T512 426.666z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/eye.svg b/energy_management_ui/src/assets/icons/svg/eye.svg
deleted file mode 100644
index 16ed2d8..0000000
--- a/energy_management_ui/src/assets/icons/svg/eye.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="64" xmlns="http://www.w3.org/2000/svg"><path d="M127.072 7.994c1.37-2.208.914-5.152-.914-6.87-2.056-1.717-4.797-1.226-6.396.982-.229.245-25.586 32.382-55.74 32.382-29.24 0-55.74-32.382-55.968-32.627-1.6-1.963-4.57-2.208-6.397-.49C-.17 3.086-.399 6.275 1.2 8.238c.457.736 5.94 7.36 14.62 14.72L4.17 35.96c-1.828 1.963-1.6 5.152.228 6.87.457.98 1.6 1.471 2.742 1.471s2.284-.49 3.198-1.472l12.564-13.983c5.94 4.416 13.021 8.587 20.788 11.53l-4.797 17.418c-.685 2.699.686 5.397 3.198 6.133h1.37c2.057 0 3.884-1.472 4.341-3.68L52.6 42.83c3.655.736 7.538 1.227 11.422 1.227 3.883 0 7.767-.49 11.422-1.227l4.797 17.173c.457 2.208 2.513 3.68 4.34 3.68.457 0 .914 0 1.143-.246 2.513-.736 3.883-3.434 3.198-6.133l-4.797-17.172c7.767-2.944 14.848-7.114 20.788-11.53l12.336 13.738c.913.981 2.056 1.472 3.198 1.472s2.284-.49 3.198-1.472c1.828-1.963 1.828-4.906.228-6.87l-11.65-13.001c9.366-7.36 14.849-14.474 14.849-14.474z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/form.svg b/energy_management_ui/src/assets/icons/svg/form.svg
deleted file mode 100644
index dcbaa18..0000000
--- a/energy_management_ui/src/assets/icons/svg/form.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M84.068 23.784c-1.02 0-1.877-.32-2.572-.96a8.588 8.588 0 0 1-1.738-2.237 11.524 11.524 0 0 1-1.042-2.621c-.232-.895-.348-1.641-.348-2.238V0h.278c.834 0 1.622.085 2.363.256.742.17 1.645.575 2.711 1.214 1.066.64 2.363 1.535 3.892 2.686 1.53 1.15 3.453 2.664 5.77 4.54 2.502 2.045 4.494 3.771 5.977 5.178 1.483 1.406 2.618 2.6 3.406 3.58.787.98 1.274 1.812 1.46 2.494.185.682.277 1.278.277 1.79v2.046H84.068zM127.3 84.01c.278.682.464 1.535.556 2.558.093 1.023-.37 2.003-1.39 2.94-.463.427-.88.832-1.25 1.215-.372.384-.696.704-.974.96a6.69 6.69 0 0 1-.973.767l-11.816-10.741a44.331 44.331 0 0 0 1.877-1.535 31.028 31.028 0 0 1 1.737-1.406c1.112-.938 2.317-1.343 3.615-1.215 1.297.128 2.363.405 3.197.83.927.427 1.923 1.173 2.989 2.239 1.065 1.065 1.876 2.195 2.432 3.388zM78.23 95.902c2.038 0 3.752-.511 5.143-1.534l-26.969 25.83H18.037c-1.761 0-3.684-.47-5.77-1.407a24.549 24.549 0 0 1-5.838-3.709 21.373 21.373 0 0 1-4.518-5.306c-1.204-2.003-1.807-4.07-1.807-6.202V16.495c0-1.79.44-3.665 1.32-5.626A18.41 18.41 0 0 1 5.04 5.562a21.798 21.798 0 0 1 5.213-3.964C12.198.533 14.237 0 16.37 0h53.24v15.984c0 1.62.278 3.367.834 5.242a16.704 16.704 0 0 0 2.572 5.179c1.159 1.577 2.665 2.898 4.518 3.964 1.853 1.066 4.078 1.598 6.673 1.598h20.295v42.325L85.458 92.45c1.02-1.364 1.529-2.856 1.529-4.476 0-2.216-.857-4.113-2.572-5.69-1.714-1.577-3.776-2.366-6.186-2.366H26.1c-2.409 0-4.448.789-6.116 2.366-1.668 1.577-2.502 3.474-2.502 5.69 0 2.217.834 4.092 2.502 5.626 1.668 1.535 3.707 2.302 6.117 2.302h52.13zM26.1 47.951c-2.41 0-4.449.789-6.117 2.366-1.668 1.577-2.502 3.473-2.502 5.69 0 2.216.834 4.092 2.502 5.626 1.668 1.534 3.707 2.302 6.117 2.302h52.13c2.409 0 4.47-.768 6.185-2.302 1.715-1.534 2.572-3.41 2.572-5.626 0-2.217-.857-4.113-2.572-5.69-1.714-1.577-3.776-2.366-6.186-2.366H26.1zm52.407 64.063l1.807-1.663 3.476-3.196a479.75 479.75 0 0 0 4.587-4.284 500.757 500.757 0 0 1 5.004-4.667c3.985-3.666 8.48-7.758 13.485-12.276l11.677 10.741-13.485 12.404-5.004 4.603-4.587 4.22a179.46 179.46 0 0 0-3.267 3.068c-.88.853-1.367 1.322-1.46 1.407-.463.341-.973.703-1.529 1.087-.556.383-1.112.703-1.668.959-.556.256-1.413.575-2.572.959a83.5 83.5 0 0 1-3.545 1.087 72.2 72.2 0 0 1-3.475.895c-1.112.256-1.946.426-2.502.511-1.112.17-1.854.043-2.224-.383-.371-.426-.464-1.151-.278-2.174.092-.511.278-1.279.556-2.302.278-1.023.602-2.067.973-3.132l1.042-3.005c.325-.938.58-1.577.765-1.918a10.157 10.157 0 0 1 2.224-2.941z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/fullscreen.svg b/energy_management_ui/src/assets/icons/svg/fullscreen.svg
deleted file mode 100644
index 0e86b6f..0000000
--- a/energy_management_ui/src/assets/icons/svg/fullscreen.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M38.47 52L52 38.462l-23.648-23.67L43.209 0H.035L0 43.137l14.757-14.865L38.47 52zm74.773 47.726L89.526 76 76 89.536l23.648 23.672L84.795 128h43.174L128 84.863l-14.757 14.863zM89.538 52l23.668-23.648L128 43.207V.038L84.866 0 99.73 14.76 76 38.472 89.538 52zM38.46 76L14.792 99.651 0 84.794v43.173l43.137.033-14.865-14.757L52 89.53 38.46 76z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/guide.svg b/energy_management_ui/src/assets/icons/svg/guide.svg
deleted file mode 100644
index 98f0753..0000000
--- a/energy_management_ui/src/assets/icons/svg/guide.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M1.482 70.131l36.204 16.18 69.932-65.485-61.38 70.594 46.435 18.735c1.119.425 2.397-.17 2.797-1.363v-.085L.998.047 1.322 65.874c-1.12.597-1.519 1.959-1.04 3.151.32.511.72.937 1.2 1.107zm44.676 57.821L64.22 107.26l-18.062-7.834v28.527z"/></svg>
diff --git a/energy_management_ui/src/assets/icons/svg/icon.svg b/energy_management_ui/src/assets/icons/svg/icon.svg
deleted file mode 100644
index 82be8ee..0000000
--- a/energy_management_ui/src/assets/icons/svg/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M115.147.062a13 13 0 0 1 4.94.945c1.55.63 2.907 1.526 4.069 2.688a13.148 13.148 0 0 1 2.761 4.069c.678 1.55 1.017 3.245 1.017 5.086v102.3c0 3.681-1.187 6.733-3.56 9.155-2.373 2.422-5.352 3.633-8.937 3.633H12.992c-3.875 0-7-1.26-9.373-3.779-2.373-2.518-3.56-5.667-3.56-9.445V12.704c0-3.39 1.163-6.345 3.488-8.863C5.872 1.32 8.972.062 12.847.062h102.3zM81.434 109.047c1.744 0 3.003-.412 3.778-1.235.775-.824 1.163-1.914 1.163-3.27 0-1.26-.388-2.325-1.163-3.197-.775-.872-2.034-1.307-3.778-1.307H72.57c.097-.194.145-.485.145-.872V27.09h9.01c1.743 0 2.954-.436 3.633-1.308.678-.872 1.017-1.938 1.017-3.197 0-1.26-.34-2.325-1.017-3.197-.679-.872-1.89-1.308-3.633-1.308H46.268c-1.743 0-2.954.436-3.632 1.308-.678.872-1.018 1.938-1.018 3.197 0 1.26.34 2.325 1.018 3.197.678.872 1.889 1.308 3.632 1.308h8.138v72.075c0 .193.024.339.073.436.048.096.072.242.072.436H46.56c-1.744 0-3.003.435-3.778 1.307-.775.872-1.163 1.938-1.163 3.197 0 1.356.388 2.446 1.163 3.27.775.823 2.034 1.235 3.778 1.235h34.875z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/international.svg b/energy_management_ui/src/assets/icons/svg/international.svg
deleted file mode 100644
index e9b56ee..0000000
--- a/energy_management_ui/src/assets/icons/svg/international.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M83.287 103.01c-1.57-3.84-6.778-10.414-15.447-19.548-2.327-2.444-2.182-4.306-1.338-9.862v-.64c.553-3.81 1.513-6.05 14.313-8.087 6.516-1.018 8.203 1.57 10.589 5.178l.785 1.193a12.625 12.625 0 0 0 6.43 5.207c1.134.524 2.53 1.164 4.421 2.24 4.596 2.53 4.596 5.41 4.596 11.753v.727a26.91 26.91 0 0 1-5.178 17.454 59.055 59.055 0 0 1-19.025 11.026c3.49-6.546.814-14.313 0-16.553l-.146-.087zM64 5.12a58.502 58.502 0 0 1 25.484 5.818 54.313 54.313 0 0 0-12.859 10.327c-.93 1.28-1.716 2.473-2.472 3.579-2.444 3.694-3.637 5.352-5.818 5.614a25.105 25.105 0 0 1-4.219 0c-4.276-.29-10.094-.64-11.956 4.422-1.193 3.23-1.396 11.956 2.444 16.495.66 1.077.778 2.4.32 3.578a7.01 7.01 0 0 1-2.066 3.229 18.938 18.938 0 0 1-2.909-2.91 18.91 18.91 0 0 0-8.32-6.603c-1.25-.349-2.647-.64-3.985-.93-3.782-.786-8.03-1.688-9.019-3.812a14.895 14.895 0 0 1-.727-5.818 21.935 21.935 0 0 0-1.396-9.25 8.873 8.873 0 0 0-5.557-4.946A58.705 58.705 0 0 1 64 5.12zM0 64c0 35.346 28.654 64 64 64 35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/job.svg b/energy_management_ui/src/assets/icons/svg/job.svg
deleted file mode 100644
index 2a93a25..0000000
--- a/energy_management_ui/src/assets/icons/svg/job.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1566036191400" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5472" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M934.912 1016.832H192c-14.336 0-25.6-11.264-25.6-25.6v-189.44c0-14.336 11.264-25.6 25.6-25.6s25.6 11.264 25.6 25.6v163.84h691.712V64H217.6v148.48c0 14.336-11.264 25.6-25.6 25.6s-25.6-11.264-25.6-25.6v-174.08c0-14.336 11.264-25.6 25.6-25.6h742.912c14.336 0 25.6 11.264 25.6 25.6v952.832c0 14.336-11.264 25.6-25.6 25.6z" p-id="5473"></path><path d="M232.96 371.2h-117.76c-14.336 0-25.6-11.264-25.6-25.6s11.264-25.6 25.6-25.6h117.76c14.336 0 25.6 11.264 25.6 25.6s-11.264 25.6-25.6 25.6zM232.96 540.16h-117.76c-14.336 0-25.6-11.264-25.6-25.6s11.264-25.6 25.6-25.6h117.76c14.336 0 25.6 11.264 25.6 25.6s-11.264 25.6-25.6 25.6zM232.96 698.88h-117.76c-14.336 0-25.6-11.264-25.6-25.6s11.264-25.6 25.6-25.6h117.76c14.336 0 25.6 11.264 25.6 25.6s-11.264 25.6-25.6 25.6zM574.464 762.88c-134.144 0-243.2-109.056-243.2-243.2S440.32 276.48 574.464 276.48s243.2 109.056 243.2 243.2-109.056 243.2-243.2 243.2z m0-435.2c-105.984 0-192 86.016-192 192S468.48 711.68 574.464 711.68s192-86.016 192-192S680.448 327.68 574.464 327.68z" p-id="5474"></path><path d="M663.04 545.28h-87.04c-14.336 0-25.6-11.264-25.6-25.6s11.264-25.6 25.6-25.6h87.04c14.336 0 25.6 11.264 25.6 25.6s-11.264 25.6-25.6 25.6z" p-id="5475"></path><path d="M576 545.28c-14.336 0-25.6-11.264-25.6-25.6v-87.04c0-14.336 11.264-25.6 25.6-25.6s25.6 11.264 25.6 25.6v87.04c0 14.336-11.264 25.6-25.6 25.6z" p-id="5476"></path></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/language.svg b/energy_management_ui/src/assets/icons/svg/language.svg
deleted file mode 100644
index 0082b57..0000000
--- a/energy_management_ui/src/assets/icons/svg/language.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M84.742 36.8c2.398 7.2 5.595 12.8 11.19 18.4 4.795-4.8 7.992-11.2 10.39-18.4h-21.58zm-52.748 40h20.78l-10.39-28-10.39 28z"/><path d="M111.916 0H16.009C7.218 0 .025 7.2.025 16v96c0 8.8 7.193 16 15.984 16h95.907c8.791 0 15.984-7.2 15.984-16V16c0-8.8-6.394-16-15.984-16zM72.754 103.2c-1.598 1.6-3.197 1.6-4.795 1.6-.8 0-2.398 0-3.197-.8-.8-.8-1.599 0-1.599-.8s-.799-1.6-1.598-3.2c-.8-1.6-.8-2.4-1.599-4l-3.196-8.8H28.797L25.6 96c-1.598 3.2-2.398 5.6-3.197 7.2-.8 1.6-2.398 1.6-4.795 1.6-1.599 0-3.197-.8-4.796-1.6-1.598-1.6-2.397-2.4-2.397-4 0-.8 0-1.6.799-3.2.8-1.6.8-2.4 1.598-4l17.583-44.8c.8-1.6.8-3.2 1.599-4.8.799-1.6 1.598-3.2 2.397-4 .8-.8 1.599-2.4 3.197-3.2 1.599-.8 3.197-.8 4.796-.8 1.598 0 3.196 0 4.795.8 1.598.8 2.398 1.6 3.197 3.2.799.8 1.598 2.4 2.397 4 .8 1.6 1.599 3.2 2.398 5.6l17.583 44c1.598 3.2 2.398 5.6 2.398 7.2-.8.8-1.599 2.4-2.398 4zM116.711 72c-8.791-3.2-15.185-7.2-20.78-12-5.594 5.6-12.787 9.6-21.579 12l-2.397-4c8.791-2.4 15.984-5.6 21.579-11.2C87.939 51.2 83.144 44 81.545 36h-7.992v-3.2h21.58c-1.6-2.4-3.198-5.6-4.796-8l2.397-.8c1.599 2.4 3.997 5.6 5.595 8.8h19.98v4h-7.992c-2.397 8-6.393 15.2-11.189 20 5.595 4.8 11.988 8.8 20.78 11.2l-3.197 4z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/link.svg b/energy_management_ui/src/assets/icons/svg/link.svg
deleted file mode 100644
index 48197ba..0000000
--- a/energy_management_ui/src/assets/icons/svg/link.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M115.625 127.937H.063V12.375h57.781v12.374H12.438v90.813h90.813V70.156h12.374z"/><path d="M116.426 2.821l8.753 8.753-56.734 56.734-8.753-8.745z"/><path d="M127.893 37.982h-12.375V12.375H88.706V0h39.187z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/list.svg b/energy_management_ui/src/assets/icons/svg/list.svg
deleted file mode 100644
index 20259ed..0000000
--- a/energy_management_ui/src/assets/icons/svg/list.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M1.585 12.087c0 6.616 3.974 11.98 8.877 11.98 4.902 0 8.877-5.364 8.877-11.98 0-6.616-3.975-11.98-8.877-11.98-4.903 0-8.877 5.364-8.877 11.98zM125.86.107H35.613c-1.268 0-2.114 1.426-2.114 2.852v18.255c0 1.712 1.057 2.853 2.114 2.853h90.247c1.268 0 2.114-1.426 2.114-2.853V2.96c0-1.711-1.057-2.852-2.114-2.852zM.106 62.86c0 6.615 3.974 11.979 8.876 11.979 4.903 0 8.877-5.364 8.877-11.98 0-6.616-3.974-11.98-8.877-11.98-4.902 0-8.876 5.364-8.876 11.98zM124.17 50.88H33.921c-1.268 0-2.114 1.425-2.114 2.851v18.256c0 1.711 1.057 2.852 2.114 2.852h90.247c1.268 0 2.114-1.426 2.114-2.852V53.73c0-1.426-.846-2.852-2.114-2.852zM.106 115.913c0 6.616 3.974 11.98 8.876 11.98 4.903 0 8.877-5.364 8.877-11.98 0-6.616-3.974-11.98-8.877-11.98-4.902 0-8.876 5.364-8.876 11.98zm124.064-11.98H33.921c-1.268 0-2.114 1.426-2.114 2.853v18.255c0 1.711 1.057 2.852 2.114 2.852h90.247c1.268 0 2.114-1.426 2.114-2.852v-18.255c0-1.427-.846-2.853-2.114-2.853z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/lock.svg b/energy_management_ui/src/assets/icons/svg/lock.svg
deleted file mode 100644
index 74fee54..0000000
--- a/energy_management_ui/src/assets/icons/svg/lock.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M119.88 49.674h-7.987V39.52C111.893 17.738 90.45.08 63.996.08 37.543.08 16.1 17.738 16.1 39.52v10.154H8.113c-4.408 0-7.987 2.94-7.987 6.577v65.13c0 3.637 3.57 6.577 7.987 6.577H119.88c4.407 0 7.987-2.94 7.987-6.577v-65.13c-.008-3.636-3.58-6.577-7.987-6.577zm-23.953 0H32.065V39.52c0-14.524 14.301-26.295 31.931-26.295 17.63 0 31.932 11.777 31.932 26.295v10.153z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/log.svg b/energy_management_ui/src/assets/icons/svg/log.svg
deleted file mode 100644
index d879d33..0000000
--- a/energy_management_ui/src/assets/icons/svg/log.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1566035943711" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4805" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M208.736 566.336H64.384v59.328h144.352v-59.328z m0-336.096H165.44V74.592c0-7.968 4.896-14.848 10.464-14.848h502.016V0.448H175.936c-38.72 1.248-69.248 34.368-68.192 74.144v155.648H64.384V289.6h144.352V230.24z m0 168.096H64.384v59.328h144.352v-59.328z m714.656 76.576h-57.76v474.496c0 7.936-4.896 14.848-10.464 14.848H175.936c-5.568 0-10.464-6.912-10.464-14.848v-155.68h43.296v-59.296H64.384v59.296h43.328v155.68c-1.024 39.776 29.472 72.896 68.192 74.144h679.232c38.72-1.184 69.248-34.368 68.256-74.144V474.912z m14.944-290.336l-83.072-85.312a71.264 71.264 0 0 0-52.544-21.728 71.52 71.52 0 0 0-51.616 23.872L386.528 507.264a30.496 30.496 0 0 0-6.176 10.72L308.16 740.512a30.016 30.016 0 0 0 6.976 30.24c7.712 7.968 19.2 10.752 29.568 7.2l216.544-74.112a28.736 28.736 0 0 0 12.128-7.936L940.448 287.456a75.552 75.552 0 0 0-2.112-102.88z m-557.12 518.272l39.104-120.64 78.336 80.416-117.44 40.224z m170.048-70.016l-103.552-106.016 200.16-222.4 103.52 106.304-200.128 222.112zM897.952 247.072l-0.256 0.224-107.136 119.168-103.52-106.528 106.432-118.624a14.144 14.144 0 0 1 10.304-4.736 13.44 13.44 0 0 1 10.464 4.288l83.264 85.696c5.472 5.6 5.664 14.72 0.448 20.512z" p-id="4806"></path></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/logininfor.svg b/energy_management_ui/src/assets/icons/svg/logininfor.svg
deleted file mode 100644
index 267f844..0000000
--- a/energy_management_ui/src/assets/icons/svg/logininfor.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1566036016814" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5261" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M896 128h-85.333333a42.666667 42.666667 0 0 0 0 85.333333h42.666666v640H170.666667V213.333333h42.666666a42.666667 42.666667 0 0 0 0-85.333333H128a42.666667 42.666667 0 0 0-42.666667 42.666667v725.333333a42.666667 42.666667 0 0 0 42.666667 42.666667h768a42.666667 42.666667 0 0 0 42.666667-42.666667V170.666667a42.666667 42.666667 0 0 0-42.666667-42.666667z" p-id="5262"></path><path d="M341.333333 298.666667a42.666667 42.666667 0 0 0 42.666667-42.666667V128a42.666667 42.666667 0 0 0-85.333333 0v128a42.666667 42.666667 0 0 0 42.666666 42.666667zM512 298.666667a42.666667 42.666667 0 0 0 42.666667-42.666667V128a42.666667 42.666667 0 0 0-85.333334 0v128a42.666667 42.666667 0 0 0 42.666667 42.666667zM682.666667 298.666667a42.666667 42.666667 0 0 0 42.666666-42.666667V128a42.666667 42.666667 0 0 0-85.333333 0v128a42.666667 42.666667 0 0 0 42.666667 42.666667zM341.333333 768a42.666667 42.666667 0 0 0 42.666667-42.666667 128 128 0 0 1 256 0 42.666667 42.666667 0 0 0 85.333333 0 213.333333 213.333333 0 0 0-107.52-184.32A128 128 0 0 0 640 469.333333a128 128 0 0 0-256 0 128 128 0 0 0 22.186667 71.68A213.333333 213.333333 0 0 0 298.666667 725.333333a42.666667 42.666667 0 0 0 42.666666 42.666667z m128-298.666667a42.666667 42.666667 0 1 1 42.666667 42.666667 42.666667 42.666667 0 0 1-42.666667-42.666667z" p-id="5263"></path></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/message.svg b/energy_management_ui/src/assets/icons/svg/message.svg
deleted file mode 100644
index 14ca817..0000000
--- a/energy_management_ui/src/assets/icons/svg/message.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M0 20.967v59.59c0 11.59 8.537 20.966 19.075 20.966h28.613l1 26.477L76.8 101.523h32.125c10.538 0 19.075-9.377 19.075-20.966v-59.59C128 9.377 119.463 0 108.925 0h-89.85C8.538 0 0 9.377 0 20.967zm82.325 33.1c0-5.524 4.013-9.935 9.037-9.935 5.026 0 9.038 4.41 9.038 9.934 0 5.524-4.025 9.934-9.038 9.934-5.024 0-9.037-4.41-9.037-9.934zm-27.613 0c0-5.524 4.013-9.935 9.038-9.935s9.037 4.41 9.037 9.934c0 5.524-4.025 9.934-9.037 9.934-5.025 0-9.038-4.41-9.038-9.934zm-27.1 0c0-5.524 4.013-9.935 9.038-9.935s9.038 4.41 9.038 9.934c0 5.524-4.026 9.934-9.05 9.934-5.013 0-9.025-4.41-9.025-9.934z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/money.svg b/energy_management_ui/src/assets/icons/svg/money.svg
deleted file mode 100644
index c1580de..0000000
--- a/energy_management_ui/src/assets/icons/svg/money.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M54.122 127.892v-28.68H7.513V87.274h46.609v-12.4H7.513v-12.86h38.003L.099 0h22.6l32.556 45.07c3.617 5.144 6.44 9.611 8.487 13.385 1.788-3.05 4.89-7.779 9.301-14.186L103.93 0h24.01L82.385 62.013h38.34v12.862h-46.41v12.4h46.41v11.937h-46.41v28.68H54.123z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/monitor.svg b/energy_management_ui/src/assets/icons/svg/monitor.svg
deleted file mode 100644
index bc308cb..0000000
--- a/energy_management_ui/src/assets/icons/svg/monitor.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1543827393750" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4695" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: rbicon; src: url("chrome-extension://dipiagiiohfljcicegpgffpbnjmgjcnf/fonts/rbicon.woff2") format("woff2"); font-weight: normal; font-style: normal; }
-</style></defs><path d="M64 64V640H896V64H64zM0 0h960v704H0V0z" p-id="4696"></path><path d="M192 896H768v64H192zM448 640H512v256h-64z" p-id="4697"></path><path d="M479.232 561.604267l309.9904-348.330667-47.803733-42.5472-259.566934 291.669333L303.957333 240.008533 163.208533 438.6048l52.224 37.009067 91.6224-129.28z" p-id="4698"></path></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/nested.svg b/energy_management_ui/src/assets/icons/svg/nested.svg
deleted file mode 100644
index 06713a8..0000000
--- a/energy_management_ui/src/assets/icons/svg/nested.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M.002 9.2c0 5.044 3.58 9.133 7.998 9.133 4.417 0 7.997-4.089 7.997-9.133 0-5.043-3.58-9.132-7.997-9.132S.002 4.157.002 9.2zM31.997.066h95.981V18.33H31.997V.066zm0 45.669c0 5.044 3.58 9.132 7.998 9.132 4.417 0 7.997-4.088 7.997-9.132 0-3.263-1.524-6.278-3.998-7.91-2.475-1.63-5.524-1.63-7.998 0-2.475 1.632-4 4.647-4 7.91zM63.992 36.6h63.986v18.265H63.992V36.6zm-31.995 82.2c0 5.043 3.58 9.132 7.998 9.132 4.417 0 7.997-4.089 7.997-9.132 0-5.044-3.58-9.133-7.997-9.133s-7.998 4.089-7.998 9.133zm31.995-9.131h63.986v18.265H63.992V109.67zm0-27.404c0 5.044 3.58 9.133 7.998 9.133 4.417 0 7.997-4.089 7.997-9.133 0-3.263-1.524-6.277-3.998-7.909-2.475-1.631-5.524-1.631-7.998 0-2.475 1.632-4 4.646-4 7.91zm31.995-9.13h31.991V91.4H95.987V73.135z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/online.svg b/energy_management_ui/src/assets/icons/svg/online.svg
deleted file mode 100644
index 330a202..0000000
--- a/energy_management_ui/src/assets/icons/svg/online.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1568899557259" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="535" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M356.246145 681.56286c-68.156286-41.949414-107.246583-103.84102-107.246583-169.805384 0-65.966411 39.090297-127.860063 107.246583-169.809477 12.046361-7.414877 15.800871-23.190165 8.385994-35.236526-7.413853-12.046361-23.191188-15.801894-35.236526-8.387018-39.640836 24.399713-72.539106 56.044434-95.137801 91.515297-23.86657 37.461193-36.481889 79.620385-36.481889 121.917724 0 42.297338 12.615319 84.454484 36.481889 121.914654 22.598694 35.469839 55.496965 67.11456 95.137801 91.51325 4.185322 2.576685 8.821923 3.804652 13.400195 3.804652 8.598842 0 16.998139-4.329609 21.836331-12.190647C372.047016 704.752002 368.291482 688.976714 356.246145 681.56286zM263.943926 754.580874c-92.603071-61.111846-145.713686-149.623739-145.713686-242.840794 0-93.195565 53.094242-181.682899 145.667637-242.774279 11.805884-7.79043 15.061021-23.677259 7.269567-35.483142-7.79043-11.805884-23.677259-15.062044-35.483142-7.269567C128.487861 296.954249 67.006602 401.024489 67.006602 511.74008c0 110.73708 61.496609 214.830857 168.721703 285.593504 4.343935 2.867304 9.240455 4.238534 14.08274 4.238534 8.317433 0 16.476253-4.046153 21.400403-11.507078C279.003923 778.258133 275.748786 762.372328 263.943926 754.580874zM788.660552 226.213092c-11.80486-7.791453-27.692712-4.536316-35.483142 7.269567-7.79043 11.805884-4.536316 27.692712 7.269567 35.483142 92.575442 61.092403 145.670707 149.579737 145.670707 242.774279 0 93.216032-53.111638 181.727924-145.715733 242.840794-11.805884 7.79043-15.059997 23.678282-7.269567 35.484166 4.925173 7.461949 13.081946 11.507078 21.400403 11.507078 4.841262 0 9.739828-1.37123 14.083763-4.238534 107.22714-70.761624 168.724773-174.857447 168.724773-285.593504C957.341323 401.025513 895.860063 296.955272 788.660552 226.213092zM790.090111 633.67213c23.865547-37.459147 36.480866-79.617315 36.480866-121.914654 0-42.298362-12.615319-84.45653-36.480866-121.917724-22.598694-35.470863-55.496965-67.115584-95.139847-91.515297-12.047384-7.413853-27.821649-3.659343-35.236526 8.387018-7.414877 12.045337-3.659343 27.821649 8.385994 35.236526 68.156286 41.949414 107.247606 103.842043 107.247606 169.809477 0 65.964364-39.090297 127.85597-107.247606 169.804361-12.045337 7.414877-15.800871 23.190165-8.385994 35.237549 4.838192 7.861038 13.236466 12.190647 21.835308 12.190647 4.579295 0 9.215896-1.227967 13.400195-3.804652C734.591099 700.786691 767.490394 669.142993 790.090111 633.67213zM567.129086 518.274914c24.12342-17.150612 39.887452-45.305859 39.887452-77.07133 0-52.128241-42.452881-94.538143-94.634334-94.538143-52.18043 0-94.633311 42.408879-94.633311 94.538143 0 31.695886 15.696494 59.797921 39.730886 76.958766-49.875944 21.128203-84.917018 70.234621-84.917018 127.301338 0 2.366907 0.061398 4.762467 0.182149 7.119141l1.249457 24.296359 276.373515 0 1.238201-24.308639c0.119727-2.358721 0.181125-4.750187 0.181125-7.106862C651.786185 588.497255 616.865861 539.465538 567.129086 518.274914zM512.381182 397.889079c23.937179 0 43.411719 19.430538 43.411719 43.314505 0 23.882943-19.47454 43.313481-43.411719 43.313481-23.936155 0-43.409672-19.430538-43.409672-43.313481C468.971509 417.320641 488.445026 397.889079 512.381182 397.889079zM426.08884 625.656573c9.119705-38.542828 44.254923-67.337641 86.085634-67.337641s76.966952 28.794813 86.085634 67.337641L426.08884 625.656573z" p-id="536"></path></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/password.svg b/energy_management_ui/src/assets/icons/svg/password.svg
deleted file mode 100644
index e291d85..0000000
--- a/energy_management_ui/src/assets/icons/svg/password.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M108.8 44.322H89.6v-5.36c0-9.04-3.308-24.163-25.6-24.163-23.145 0-25.6 16.881-25.6 24.162v5.361H19.2v-5.36C19.2 15.281 36.798 0 64 0c27.202 0 44.8 15.281 44.8 38.961v5.361zm-32 39.356c0-5.44-5.763-9.832-12.8-9.832-7.037 0-12.8 4.392-12.8 9.832 0 3.682 2.567 6.808 6.407 8.477v11.205c0 2.718 2.875 4.962 6.4 4.962 3.524 0 6.4-2.244 6.4-4.962V92.155c3.833-1.669 6.393-4.795 6.393-8.477zM128 64v49.201c0 8.158-8.645 14.799-19.2 14.799H19.2C8.651 128 0 121.359 0 113.201V64c0-8.153 8.645-14.799 19.2-14.799h89.6c10.555 0 19.2 6.646 19.2 14.799z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/pdf.svg b/energy_management_ui/src/assets/icons/svg/pdf.svg
deleted file mode 100644
index 957aa0c..0000000
--- a/energy_management_ui/src/assets/icons/svg/pdf.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="128" height="128"><path d="M869.073 277.307H657.111V65.344l211.962 211.963zm-238.232 26.27V65.344l-476.498-.054v416.957h714.73v-178.67H630.841zm-335.836 360.57c-5.07-3.064-10.944-5.133-17.61-6.201-6.67-1.064-13.603-1.6-20.81-1.6h-48.821v85.641h48.822c7.206 0 14.14-.532 20.81-1.6 6.665-1.065 12.54-3.133 17.609-6.202 5.064-3.063 9.134-7.406 12.208-13.007 3.065-5.602 4.6-12.937 4.6-22.011 0-9.07-1.535-16.408-4.6-22.01-3.074-5.603-7.144-9.94-12.208-13.01zM35.82 541.805v416.904h952.358V541.805H35.821zm331.421 191.179c-3.6 11.071-9.343 20.879-17.209 29.413-7.874 8.542-18.078 15.408-30.617 20.61-12.544 5.206-27.747 7.807-45.621 7.807h-66.036v102.45h-62.831V607.517h128.867c17.874 0 33.077 2.6 45.62 7.802 12.541 5.207 22.745 12.076 30.618 20.615 7.866 8.538 13.604 18.277 17.21 29.212 3.6 10.943 5.401 22.278 5.401 34.018 0 11.477-1.8 22.752-5.402 33.819zM644.9 806.417c-5.343 17.61-13.408 32.818-24.212 45.627-10.807 12.803-24.283 22.879-40.423 30.213-16.146 7.343-35.155 11.007-57.03 11.007h-123.26V607.518h123.26c18.41 0 35.552 2.941 51.428 8.808 15.873 5.869 29.618 14.671 41.22 26.412 11.608 11.744 20.674 26.411 27.217 44.02 6.535 17.61 9.803 38.288 9.803 62.035 0 20.81-2.67 40.02-8.003 57.624zm245.362-146.07h-138.07v66.03h119.66v48.829h-119.66v118.058h-62.83V607.518h200.9v52.829h-.001zm-318.2 25.611c-6.402-8.266-14.877-14.604-25.412-19.01-10.544-4.402-23.551-6.602-39.019-6.602h-44.825v180.088h56.029c9.07 0 17.872-1.463 26.415-4.401 8.535-2.932 16.14-7.802 22.812-14.609 6.665-6.8 12.007-15.667 16.007-26.61 4.003-10.94 6.003-24.275 6.003-40.021 0-14.408-1.4-27.416-4.202-39.019-2.8-11.607-7.406-21.542-13.808-29.816zm0 0"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/people.svg b/energy_management_ui/src/assets/icons/svg/people.svg
deleted file mode 100644
index 2bd54ae..0000000
--- a/energy_management_ui/src/assets/icons/svg/people.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M104.185 95.254c8.161 7.574 13.145 17.441 13.145 28.28 0 1.508-.098 2.998-.285 4.466h-10.784c.238-1.465.403-2.948.403-4.465 0-8.983-4.36-17.115-11.419-23.216C86 104.66 75.355 107.162 64 107.162c-11.344 0-21.98-2.495-31.22-6.83-7.064 6.099-11.444 14.218-11.444 23.203 0 1.517.165 3 .403 4.465H10.955a35.444 35.444 0 0 1-.285-4.465c0-10.838 4.974-20.713 13.127-28.291C9.294 85.42.003 70.417.003 53.58.003 23.99 28.656.001 64 .001s63.997 23.988 63.997 53.58c0 16.842-9.299 31.85-23.812 41.673zM64 36.867c-29.454 0-53.33-10.077-53.33 15.342 0 25.418 23.876 46.023 53.33 46.023 29.454 0 53.33-20.605 53.33-46.023 0-25.419-23.876-15.342-53.33-15.342zm24.888 25.644c-3.927 0-7.111-2.665-7.111-5.953 0-3.288 3.184-5.954 7.11-5.954 3.928 0 7.111 2.666 7.111 5.954s-3.183 5.953-7.11 5.953zm-3.556 16.372c0 4.11-9.55 7.442-21.332 7.442-11.781 0-21.332-3.332-21.332-7.442 0-1.06.656-2.064 1.8-2.976 3.295 2.626 10.79 4.465 19.532 4.465 8.743 0 16.237-1.84 19.531-4.465 1.145.912 1.801 1.916 1.801 2.976zm-46.22-16.372c-3.927 0-7.11-2.665-7.11-5.953 0-3.288 3.183-5.954 7.11-5.954 3.927 0 7.111 2.666 7.111 5.954s-3.184 5.953-7.11 5.953z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/peoples.svg b/energy_management_ui/src/assets/icons/svg/peoples.svg
deleted file mode 100644
index aab852e..0000000
--- a/energy_management_ui/src/assets/icons/svg/peoples.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M95.648 118.762c0 5.035-3.563 9.121-7.979 9.121H7.98c-4.416 0-7.979-4.086-7.979-9.121C0 100.519 15.408 83.47 31.152 76.75c-9.099-6.43-15.216-17.863-15.216-30.987v-9.128c0-20.16 14.293-36.518 31.893-36.518s31.894 16.358 31.894 36.518v9.122c0 13.137-6.123 24.556-15.216 30.993 15.738 6.726 31.141 23.769 31.141 42.012z"/><path d="M106.032 118.252h15.867c3.376 0 6.101-3.125 6.101-6.972 0-13.957-11.787-26.984-23.819-32.123 6.955-4.919 11.638-13.66 11.638-23.704v-6.985c0-15.416-10.928-27.926-24.39-27.926-1.674 0-3.306.193-4.89.561 1.936 4.713 3.018 9.974 3.018 15.526v9.121c0 13.137-3.056 23.111-11.066 30.993 14.842 4.41 27.312 23.42 27.541 41.509z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/phone.svg b/energy_management_ui/src/assets/icons/svg/phone.svg
deleted file mode 100644
index ab8e8c4..0000000
--- a/energy_management_ui/src/assets/icons/svg/phone.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1567417214476" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2266" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M761.503029 2.90619 242.121921 2.90619c-32.405037 0-58.932204 26.060539-58.932204 58.527998l0 902.302287c0 32.156374 26.217105 58.216913 58.932204 58.216913l519.381108 0c32.344662 0 58.591443-26.060539 58.591443-58.216913L820.094472 61.123103C820.094472 28.966729 793.847691 2.90619 761.503029 2.90619M452.878996 61.123103l98.147344 0c6.780427 0 12.31549 5.536087 12.31549 12.253068 0 6.748704-5.535063 12.253068-12.31549 12.253068l-98.147344 0c-6.779404 0-12.345166-5.504364-12.345166-12.253068C440.532807 66.659189 446.099592 61.123103 452.878996 61.123103M501.641583 980.593398c-29.636994 0-53.987588-23.946388-53.987588-53.677527 0-29.356608 24.039509-53.614082 53.987588-53.614082 29.91738 0 53.987588 23.883967 53.987588 53.614082C555.629171 956.647009 531.559986 980.593398 501.641583 980.593398M766.35657 803.142893c0 16.23373-13.186324 29.107945-29.233811 29.107945l-470.618521 0c-16.35755 0-29.325909-13.186324-29.325909-29.107945L237.178329 163.500794c0-16.232706 13.279445-29.138644 29.325909-29.138644l470.246037 0c16.420995 0 29.357632 13.1853 29.357632 29.138644l0 639.642099L766.35657 803.142893zM766.35657 803.142893" p-id="2267"></path></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/post.svg b/energy_management_ui/src/assets/icons/svg/post.svg
deleted file mode 100644
index 2922c61..0000000
--- a/energy_management_ui/src/assets/icons/svg/post.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1566035724641" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3998" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M136.4 434.3h77.7c21.5 0 38.9-17.4 38.9-38.9s-17.4-38.9-38.9-38.9h-77.7c-21.5 0-38.9 17.4-38.9 38.9s17.4 38.9 38.9 38.9zM252.9 628.6c0-21.5-17.4-38.9-38.9-38.9h-77.7c-21.5 0-38.9 17.4-38.9 38.9s17.4 38.9 38.9 38.9H214c21.5-0.1 38.9-17.5 38.9-38.9z" p-id="3999"></path><path d="M874.7 97.5H227c-28.6 0-51.8 23.2-51.8 51.8v194.3h38.9c28.6 0 51.8 23.2 51.8 51.8 0 28.6-23.2 51.8-51.8 51.8h-38.9v129.5h38.9c28.6 0 51.8 23.2 51.8 51.8 0 28.6-23.2 51.8-51.8 51.8h-38.9v194.3c0 28.6 23.2 51.8 51.8 51.8h647.7c28.6 0 51.8-23.2 51.8-51.8V149.3c0-28.6-23.2-51.8-51.8-51.8z m-311.3 723c-15.6 0-146.7-71.6-146.7-91 0-19.4 102-368.6 102-368.6l-83.6-104s-12.3-23.1 24.6-23.1h208.9c36.9 0 18.4 23.1 18.4 23.1l-79 104s102 351.3 102 368.6c0.1 17.3-131 91-146.6 91z m169.2-253.6l-27.9 40.2-74.5-240 103.4 171.7c4.6 7.9 4.2 20.6-1 28.1z" p-id="4000"></path></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/qq.svg b/energy_management_ui/src/assets/icons/svg/qq.svg
deleted file mode 100644
index ee13d4e..0000000
--- a/energy_management_ui/src/assets/icons/svg/qq.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M18.448 57.545l-.244-.744-.198-.968-.132-.53v-2.181l.236-.859.24-.908.317-.953.428-1.06.561-1.103.794-1.104v-.773l.077-.724.123-.984.34-1.106.313-1.194.25-.548.289-.511.371-.569.405-.423v-2.73l.234-1.407.236-1.633.42-1.955.577-2.035.43-1.118.426-1.217.468-1.135.559-1.216.57-1.332.655-1.247.737-1.331.929-1.33.43-.762.457-.624.995-1.406 1.025-1.403 1.163-1.444 1.246-1.405 1.352-1.384 1.41-1.423 1.708-1.536 1.083-.934 1.322-1.008 1.34-.89 1.448-.855 1.392-.76 1.57-.63 1.667-.775 1.657-.532 1.653-.552 1.787-.548 1.785-.417 1.876-.347L59.128.68l1.879-.245 1.876-.252 2.002-.106h5.912l1.97.243 1.981.231 2.019.207 1.874.441 1.979.413 1.857.475 2.035.53 1.862.646 1.782.738 1.904.78 1.736.853 1.689.95 1.655 1.044 1.425.971.662.548.693.401 1.323 1.1 1.115 1.064 1.112 1.1 1.083 1.214.894 1.178 1.064 1.217.74 1.306.752 1.162.798 1.352.661 1.175 1.113 2.489.546 1.286.428 1.192.428 1.294.384 1.217.267 1.047.347 1.231.607 2.198.388 1.924.253 1.861.217 1.497.342 2.28.077.362.274.41.737 1.18.473.8.42.832.534.892.472 1.07.307 1.093.334 1.2.252 1.232.115.605.106.746v.648l-.106.643v.8l-.192.774-.35 1.5-.403.76-.299.852v.213l.142.264.4.623 1.746 2.53 1.377 1.9.66 1.267.889 1.389.774 1.52.893 1.627.894 1.828 1.006 2.069.567 1.268.518 1.239.447 1.307.44 1.175.336 1.235.342 1.16.432 2.261.343 2.31.235 2.05v2.891l-.158 1.025-.226 1.768-.308 1.59-.48 1.44-.18.588-.336.707-.28.493-.375.607-.33.383-.42.494-.375.4-.401.34-.48.207-.432.207-.355.114h-.543l-.346-.114-.66-.32-.302-.212-.317-.223-.347-.304-.35-.342-.579-.63-.684-.89-.539-.917-.538-.734-.526-.855-.741-1.517-.833-1.579-.098-.055h-.138l-.338.247-.196.415-.326.516-.567 1.533-.856 2.182-1.096 2.626-.824 1.308-.864 1.366-1.027 1.536-1.09 1.503-.557.68-.676.743-1.555 1.497.136.135.21.214.777.446 3.235 1.524 1.41.779 1.347.756 1.332.953 1.187.982.574.443.432.511.445.593.367.643.198.533.242.64.105.554.115.647-.115.433v.44l-.105.454-.242.415-.092.325-.22.394-.587.784-.543.627-.42.47-.35.348-.893.638-1.01.556-1.077.532-1.155.511-1.287.495-.693.207-.608.167-1.496.342-1.545.325-1.552.323-1.689.27-1.74.072-1.785.21h-5.539l-1.998-.114-1.86-.168-2.005-.27-1.99-.209-2.095-.286-2.03-.495-1.981-.374-1.968-.552-2.019-.707-1.98-.585-1.044-.342-.927-.323-.586-.223-.582-.12h-1.647l-1.904-.131-.962-.096-1.24-.135-.795.705-1.085.665-1.471.701-1.628.875-.99.475-1.033.376-2.281.914-1.24.305-1.3.343-1.803.344-1.13.086-1.193.1-1.246.135-1.45.053h-5.926l-3.346-.053-3.25-.321-1.644-.23-1.589-.23-1.546-.227-1.547-.305-1.442-.456-1.434-.325-1.294-.51-1.223-.474-1.142-.533-.99-.583-.984-.71-.336-.343-.44-.415-.334-.362-.3-.417-.278-.415-.215-.42-.311-.89-.109-.46-.138-.51v-.473l.138-.533v-.53l.109-.53v-1.069l.052-.564.259-.647.215-.646.39-.779.286-.3.236-.348.615-.738.49-.38.464-.266.428-.338.676-.21.543-.324.676-.341.77-.227.775-.231.897-.192.85-.11 1.008-.13 1.093-.081.284-.092h.063l.137-.115v-.13l-.2-.266-.58-.27-1.45-1.231-.975-.761-1.127-.967-1.136-1.082-1.181-1.382-1.36-1.558-.508-.843-.672-.87-.58-1.007-.522-1.1-.704-1.047-.459-1.194-.547-1.192-.546-1.33-.397-1.273-.378-1.575-.112-.057h-.115l-.059-.113h-.14l-.23.113-.114.057-.158.264-.057.321-.119.286-.206.477-.664 1.157-.345.701-.546.612-.58.736-.641.816-.677.724-.795.701-.734.658-.814.524-.89.546-.855.325-1.008.247-.99.095h-.233l-.228-.095-.18-.384-.29-.188-.38-.912-.237-.493-.255-.707-.21-.734-.113-.724-.313-1.648-.12-.972v-3.185l.12-2.379.196-1.214.23-1.252.21-1.347.374-1.254.42-1.443.431-1.407.578-1.448.545-1.38.754-1.4.699-1.52.855-1.425 1.006-1.538 1.023-1.382 1.069-1.538.891-1.071 1.142-1.227 1.202-1.237.56-.59.678-.662.985-.836 1.012-.853 1.647-1.446 1.242-.889z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/search.svg b/energy_management_ui/src/assets/icons/svg/search.svg
deleted file mode 100644
index 84233dd..0000000
--- a/energy_management_ui/src/assets/icons/svg/search.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M124.884 109.812L94.256 79.166c-.357-.357-.757-.629-1.129-.914a50.366 50.366 0 0 0 8.186-27.59C101.327 22.689 78.656 0 50.67 0 22.685 0 0 22.688 0 50.663c0 27.989 22.685 50.663 50.656 50.663 10.186 0 19.643-3.03 27.6-8.201.286.385.557.771.9 1.114l30.628 30.632a10.633 10.633 0 0 0 7.543 3.129c2.728 0 5.457-1.043 7.543-3.115 4.171-4.157 4.171-10.915.014-15.073M50.671 85.338C31.557 85.338 16 69.78 16 50.663c0-19.102 15.557-34.661 34.67-34.661 19.115 0 34.657 15.559 34.657 34.675 0 19.102-15.557 34.661-34.656 34.661"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/server.svg b/energy_management_ui/src/assets/icons/svg/server.svg
deleted file mode 100644
index ca37b00..0000000
--- a/energy_management_ui/src/assets/icons/svg/server.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1547360688278" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M890 120H134a70 70 0 0 0-70 70v500a70 70 0 0 0 70 70h756a70 70 0 0 0 70-70V190a70 70 0 0 0-70-70z m-10 520a40 40 0 0 1-40 40H712V448a40 40 0 0 0-80 0v232h-80V368a40 40 0 0 0-80 0v312h-80V512a40 40 0 0 0-80 0v168H184a40 40 0 0 1-40-40V240a40 40 0 0 1 40-40h656a40 40 0 0 1 40 40zM696 824H328a40 40 0 0 0 0 80h368a40 40 0 0 0 0-80z" fill="#bfbfbf" p-id="6718"></path></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/shopping.svg b/energy_management_ui/src/assets/icons/svg/shopping.svg
deleted file mode 100644
index 87513e7..0000000
--- a/energy_management_ui/src/assets/icons/svg/shopping.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M42.913 101.36c1.642 0 3.198.332 4.667.996a12.28 12.28 0 0 1 3.89 2.772c1.123 1.184 1.987 2.582 2.592 4.193.605 1.612.908 3.318.908 5.118 0 1.8-.303 3.507-.908 5.118-.605 1.611-1.469 3.01-2.593 4.194a13.3 13.3 0 0 1-3.889 2.843 10.582 10.582 0 0 1-4.667 1.066c-1.729 0-3.306-.355-4.732-1.066a13.604 13.604 0 0 1-3.825-2.843c-1.123-1.185-1.988-2.583-2.593-4.194a14.437 14.437 0 0 1-.907-5.118c0-1.8.302-3.506.907-5.118.605-1.61 1.47-3.009 2.593-4.193a12.515 12.515 0 0 1 3.825-2.772c1.426-.664 3.003-.996 4.732-.996zm53.932.285c1.643 0 3.22.331 4.733.995a11.386 11.386 0 0 1 3.889 2.772c1.08 1.185 1.945 2.583 2.593 4.194.648 1.61.972 3.317.972 5.118 0 1.8-.324 3.506-.972 5.117-.648 1.611-1.513 3.01-2.593 4.194a12.253 12.253 0 0 1-3.89 2.843 11 11 0 0 1-4.732 1.066 10.58 10.58 0 0 1-4.667-1.066 12.478 12.478 0 0 1-3.824-2.843c-1.08-1.185-1.945-2.583-2.593-4.194a13.581 13.581 0 0 1-.973-5.117c0-1.801.325-3.507.973-5.118.648-1.611 1.512-3.01 2.593-4.194a11.559 11.559 0 0 1 3.824-2.772 11.212 11.212 0 0 1 4.667-.995zm21.781-80.747c2.42 0 4.3.355 5.64 1.066 1.34.71 2.29 1.587 2.852 2.63a6.427 6.427 0 0 1 .778 3.34c-.044 1.185-.195 2.204-.454 3.057-.26.853-.8 2.606-1.62 5.26a589.268 589.268 0 0 1-2.788 8.743 1236.373 1236.373 0 0 0-3.047 9.453c-.994 3.128-1.75 5.592-2.269 7.393-1.123 3.79-2.55 6.42-4.278 7.89-1.728 1.469-3.846 2.203-6.352 2.203H39.023l1.945 12.795h65.342c4.148 0 6.223 1.943 6.223 5.828 0 1.896-.41 3.53-1.232 4.905-.821 1.374-2.442 2.061-4.862 2.061H38.505c-1.729 0-3.176-.426-4.343-1.28-1.167-.852-2.14-1.966-2.917-3.34a21.277 21.277 0 0 1-1.88-4.478 44.128 44.128 0 0 1-1.102-4.55c-.087-.568-.324-1.942-.713-4.122-.39-2.18-.865-4.904-1.426-8.174l-1.88-10.947c-.692-4.027-1.383-8.079-2.075-12.154-1.642-9.572-3.5-20.234-5.574-31.986H6.87c-1.296 0-2.377-.356-3.24-1.067a9.024 9.024 0 0 1-2.14-2.558 10.416 10.416 0 0 1-1.167-3.2C.108 8.53 0 7.488 0 6.54c0-1.896.583-3.46 1.75-4.69C2.917.615 4.494 0 6.482 0h13.095c1.728 0 3.111.284 4.148.853 1.037.569 1.858 1.28 2.463 2.132a8.548 8.548 0 0 1 1.297 2.701c.26.948.475 1.754.648 2.417.173.758.346 1.825.519 3.199.173 1.374.345 2.772.518 4.193.26 1.706.519 3.507.778 5.403h88.678z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/size.svg b/energy_management_ui/src/assets/icons/svg/size.svg
deleted file mode 100644
index ddb25b8..0000000
--- a/energy_management_ui/src/assets/icons/svg/size.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M0 54.857h54.796v18.286H36.531V128H18.265V73.143H0V54.857zm127.857-36.571H91.935V128H72.456V18.286H36.534V0h91.326l-.003 18.286z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/skill.svg b/energy_management_ui/src/assets/icons/svg/skill.svg
deleted file mode 100644
index a3b7312..0000000
--- a/energy_management_ui/src/assets/icons/svg/skill.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M31.652 93.206h33.401c1.44 2.418 3.077 4.663 4.93 6.692h-38.33v-6.692zm0-10.586h28.914a44.8 44.8 0 0 1-1.264-6.688h-27.65v6.688zm0-17.27H59.39c.288-2.286.714-4.532 1.34-6.687H31.65v6.687h.003zm53.913 44.84v5.85c0 2.798-2.095 5.075-4.667 5.075h-70.07c-2.576 0-4.663-2.277-4.663-5.075V31.26l23.22-20.96v22.25H17.16v6.688h18.39V6.688h45.348c2.576 0 4.667 2.277 4.667 5.066v20.009c1.987-.675 4.053-1.128 6.17-1.445v-18.56C91.738 5.28 86.874 0 80.902 0H31.15L0 28.118v87.917c0 6.48 4.859 11.759 10.832 11.759h70.07c5.974 0 10.837-5.27 10.837-11.759v-4.41c-2.117-.312-4.183-.765-6.17-1.435h-.004zM23.279 58.667h-7.96v6.688h7.96v-6.688zm-7.956 41.23h7.96v-6.691h-7.96v6.692zm7.956-23.96h-7.96v6.687h7.96v-6.688zm89.718-15.042l-4.896-4.07-12.447 17.613-11.19-9.305-3.762 5.311 16.091 13.38 16.204-22.929zM128 70.978c0-18.632-13.97-33.782-31.147-33.782-17.168 0-31.135 15.155-31.135 33.782 0 18.628 13.97 33.783 31.135 33.783 17.172 0 31.143-15.15 31.143-33.783H128zm-6.17 0c0 14.933-11.203 27.1-24.981 27.1-13.77 0-24.987-12.158-24.987-27.1 0-14.941 11.195-27.099 24.987-27.099 13.778 0 24.982 12.158 24.982 27.1z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/star.svg b/energy_management_ui/src/assets/icons/svg/star.svg
deleted file mode 100644
index 6cf86e6..0000000
--- a/energy_management_ui/src/assets/icons/svg/star.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M70.66 4.328l14.01 29.693c1.088 2.29 3.177 3.882 5.603 4.25l31.347 4.76c6.087.926 8.528 8.756 4.117 13.247L103.05 79.395c-1.75 1.78-2.544 4.352-2.132 6.867l5.352 32.641c1.043 6.337-5.33 11.182-10.778 8.19l-28.039-15.409a7.13 7.13 0 0 0-6.91 0l-28.039 15.41c-5.448 2.99-11.821-1.854-10.777-8.19l5.352-32.642c.415-2.515-.387-5.088-2.136-6.867L2.264 56.278C-2.146 51.787.286 43.957 6.38 43.031l31.343-4.76c2.419-.368 4.51-1.96 5.595-4.25L57.334 4.328c2.728-5.77 10.605-5.77 13.325 0z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/swagger.svg b/energy_management_ui/src/assets/icons/svg/swagger.svg
deleted file mode 100644
index 05d4e7b..0000000
--- a/energy_management_ui/src/assets/icons/svg/swagger.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1566036776944" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6463" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M64 223.995345h168.001164v47.997673c0 26.428509 18.878836 47.997673 41.984 47.997673h140.036654c23.095855 0 41.984-21.569164 41.984-47.997673v-47.997673h504.003491a32.004655 32.004655 0 0 0 0-64.009309H455.996509V111.988364c0-26.428509-18.878836-47.997673-41.984-47.997673H273.985164c-23.095855 0-41.984 21.569164-41.984 47.997673v47.997672H64a32.004655 32.004655 0 0 0 0 64.009309zM288.004655 128h111.997672V256H288.004655V128zM960 479.995345H791.998836v-47.997672c0-26.372655-18.878836-47.997673-41.984-47.997673H609.978182c-23.095855 0-41.984 21.634327-41.984 47.997673v47.997672H64a32.004655 32.004655 0 0 0 0 64.00931h504.003491v47.997672c0 26.363345 18.878836 47.997673 41.984 47.997673h140.036654c23.095855 0 41.984-21.634327 41.984-47.997673v-47.997672h168.001164a32.004655 32.004655 0 1 0-0.009309-64.00931zM735.995345 576H623.997673v-128h111.997672v128zM960 800.293236v-0.288581H455.996509v-47.997673c0-26.363345-18.878836-47.997673-41.984-47.997673H274.050327c-23.105164 0-41.984 21.634327-41.984 47.997673v47.997673H64v0.288581a32.004655 32.004655 0 0 0 0 64.009309c0.986764 0 1.917673-0.195491 2.885818-0.288581h165.115346v47.997672c0 26.363345 18.878836 47.997673 41.984 47.997673h140.036654c23.095855 0 41.984-21.634327 41.984-47.997673v-47.997672h501.108364c0.968145 0.093091 1.899055 0.288582 2.895127 0.288581a32.004655 32.004655 0 1 0-0.009309-64.009309zM400.002327 896H288.004655V768h111.997672v128z" fill="" p-id="6464"></path></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/system.svg b/energy_management_ui/src/assets/icons/svg/system.svg
deleted file mode 100644
index dba28cf..0000000
--- a/energy_management_ui/src/assets/icons/svg/system.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1543827724451" class="icon" style="" viewBox="0 0 1084 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10233" xmlns:xlink="http://www.w3.org/1999/xlink" width="211.71875" height="200"><defs><style type="text/css">@font-face { font-family: rbicon; src: url("chrome-extension://dipiagiiohfljcicegpgffpbnjmgjcnf/fonts/rbicon.woff2") format("woff2"); font-weight: normal; font-style: normal; }
-</style></defs><path d="M1080.09609 434.500756c-4.216302-23.731757-26.9241-47.945376-50.595623-53.185637l-17.648235-4.095836a175.940257 175.940257 0 0 1-101.612877-80.832531 177.807476 177.807476 0 0 1-18.732427-129.801867l5.541425-16.684509c7.10748-23.129428-2.108151-54.992624-20.599646-70.833873 0 0-16.624276-14.094495-63.244529-41.199293-46.800951-26.984332-66.858502-34.513443-66.858502-34.513443-22.76803-8.372371-54.631227-0.361397-71.255503 17.407304l-12.287509 13.251234a173.470708 173.470708 0 0 1-120.465769 48.065842A174.13327 174.13327 0 0 1 421.329029 33.590675L409.583617 20.761071C393.140039 2.99237 361.096144-4.898138 338.267881 3.353767c0 0-20.358715 7.529111-67.099434 34.513443-46.800951 27.34573-63.244529 41.440225-63.244529 41.440225-18.431263 15.66055-27.646894 47.222582-20.539413 70.592941l5.059562 16.865207a178.048407 178.048407 0 0 1-18.672194 129.621169 174.916297 174.916297 0 0 1-102.275439 81.073463l-17.045906 3.854904c-23.310126 5.42096-46.258856 29.333415-50.595623 53.185637 0 0-3.854905 21.382674-3.854905 75.712737 0 54.330062 3.854905 75.712736 3.854905 75.712736 4.216302 23.972688 26.9241 47.945376 50.595623 53.185637l16.624276 3.854905a174.253736 174.253736 0 0 1 102.395904 81.314394c23.310126 40.837896 28.911785 87.337683 18.732427 129.801867l-4.81863 16.443578c-7.10748 23.129428 2.108151 54.992624 20.599646 70.833872 0 0 16.624276 14.094495 63.244529 41.199293 46.800951 27.104798 66.918735 34.513443 66.918735 34.513443 22.707798 8.372371 54.631227 0.361397 71.255503-17.407303l11.624947-12.588673a175.096996 175.096996 0 0 1 242.256662 0.120465l11.624947 12.648906c16.383345 17.708468 48.427239 25.598976 71.255503 17.347071 0 0 20.358715-7.529111 67.159666-34.513443 46.740719-27.104798 63.124063-41.199293 63.124064-41.199293 18.491496-15.600317 27.707127-47.463513 20.599646-70.833873l-5.059562-17.106139a176.723284 176.723284 0 0 1 18.672194-129.139305 176.060722 176.060722 0 0 1 102.395904-81.314394l16.68451-3.854905c23.310126-5.42096 46.258856-29.333415 50.595623-53.185637 0 0 3.854905-21.382674 3.854904-75.712737-0.240932-54.330062-4.095836-75.833202-4.095836-75.833202z m-537.819428 293.334149c-119.261112 0-216.175824-97.336342-216.175824-217.621412a216.657687 216.657687 0 0 1 216.236057-217.320249c119.200879 0 216.115591 97.276109 216.11559 217.56118-0.240932 120.044139-96.974945 217.320248-216.175823 217.320249z" p-id="10234" fill="#bfbfbf"></path></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/tab.svg b/energy_management_ui/src/assets/icons/svg/tab.svg
deleted file mode 100644
index b4b48e4..0000000
--- a/energy_management_ui/src/assets/icons/svg/tab.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M78.921.052H49.08c-1.865 0-3.198 1.599-3.198 3.464v6.661c0 1.865 1.6 3.464 3.198 3.464h29.84c1.865 0 3.198-1.599 3.198-3.464V3.516C82.385 1.65 80.786.052 78.92.052zm45.563 0H94.642c-1.865 0-3.464 1.599-3.464 3.464v6.661c0 1.865 1.599 3.464 3.464 3.464h29.842c1.865-.266 3.464-1.599 3.464-3.464V3.516c0-1.865-1.599-3.464-3.464-3.464zm0 22.382H40.02c-1.866 0-3.464-1.599-3.464-3.464V3.516c0-1.865-1.599-3.464-3.464-3.464H3.516C1.65.052.052 1.651.052 3.516V124.75c0 1.598 1.599 3.197 3.464 3.197h120.968c1.865 0 3.464-1.599 3.464-3.464V25.898c0-1.865-1.599-3.464-3.464-3.464z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/table.svg b/energy_management_ui/src/assets/icons/svg/table.svg
deleted file mode 100644
index 0e3dc9d..0000000
--- a/energy_management_ui/src/assets/icons/svg/table.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M.006.064h127.988v31.104H.006V.064zm0 38.016h38.396v41.472H.006V38.08zm0 48.384h38.396v41.472H.006V86.464zM44.802 38.08h38.396v41.472H44.802V38.08zm0 48.384h38.396v41.472H44.802V86.464zM89.598 38.08h38.396v41.472H89.598zm0 48.384h38.396v41.472H89.598z"/><path d="M.006.064h127.988v31.104H.006V.064zm0 38.016h38.396v41.472H.006V38.08zm0 48.384h38.396v41.472H.006V86.464zM44.802 38.08h38.396v41.472H44.802V38.08zm0 48.384h38.396v41.472H44.802V86.464zM89.598 38.08h38.396v41.472H89.598zm0 48.384h38.396v41.472H89.598z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/theme.svg b/energy_management_ui/src/assets/icons/svg/theme.svg
deleted file mode 100644
index 5982a2f..0000000
--- a/energy_management_ui/src/assets/icons/svg/theme.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M125.5 36.984L95.336 2.83C93.735 1.018 91.565 0 89.3 0c-2.263 0-4.433 1.018-6.033 2.83l-3.786 4.286c-1.6 1.812-3.77 2.83-6.032 2.831H54.553c-2.263 0-4.434-1.018-6.033-2.83L44.734 2.83C43.134 1.018 40.964 0 38.701 0c-2.263 0-4.434 1.018-6.034 2.83L2.5 36.984C.9 38.796 0 41.254 0 43.815c0 2.562.899 5.02 2.5 6.831L14.565 64.31c2.178 2.468 5.367 3.403 8.33 2.444 1.35-.435 2.709.592 2.709 2.18v49.407c0 5.313 3.84 9.66 8.532 9.66h59.726c4.693 0 8.532-4.347 8.532-9.66V68.934c0-1.59 1.36-2.616 2.71-2.181 2.962.96 6.15.024 8.329-2.444L125.5 50.646c1.6-1.811 2.499-4.269 2.499-6.83 0-2.563-.899-5.02-2.5-6.832z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/tool.svg b/energy_management_ui/src/assets/icons/svg/tool.svg
deleted file mode 100644
index c813067..0000000
--- a/energy_management_ui/src/assets/icons/svg/tool.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1553828490559" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1684" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M898.831744 900.517641 103.816972 900.517641c-36.002982 0-65.363683-29.286-65.363683-65.313541l0-554.949184c0-36.041868 29.361725-65.326844 65.363683-65.326844l795.015795 0c36.002982 0 65.198931 29.284977 65.198931 65.326844l0 554.949184C964.030675 871.231641 934.834726 900.517641 898.831744 900.517641L898.831744 900.517641zM103.816972 255.593236c-13.576203 0-24.711821 11.085476-24.711821 24.662703l0 554.949184c0 13.576203 11.136641 24.662703 24.711821 24.662703l795.015795 0c13.577227 0 24.547069-11.086499 24.547069-24.662703l0-554.949184c0-13.577227-10.970866-24.662703-24.547069-24.662703L103.816972 255.593236 103.816972 255.593236zM664.346245 251.774257c-11.161201 0-20.332071-9.080819-20.332071-20.332071l0-101.278661c0-13.576203-11.047614-24.623817-24.699542-24.623817L383.181611 105.539708c-13.576203 0-24.712845 11.04659-24.712845 24.623817l0 101.278661c0 11.252275-9.041934 20.332071-20.332071 20.332071-11.20111 0-20.319791-9.080819-20.319791-20.332071l0-101.278661c0-35.989679 29.323862-65.275679 65.364707-65.275679l236.133022 0c36.06745 0 65.402569 29.284977 65.402569 65.275679l0 101.278661C684.717202 242.694461 675.636383 251.774257 664.346245 251.774257L664.346245 251.774257zM413.233044 521.725502 75.694471 521.725502c-11.163247 0-20.333094-9.117658-20.333094-20.35663 0-11.252275 9.169847-20.332071 20.333094-20.332071l337.538573 0c11.277858 0 20.319791 9.080819 20.319791 20.332071C433.552835 512.607844 424.510902 521.725502 413.233044 521.725502L413.233044 521.725502zM912.894018 521.725502 575.367725 521.725502c-11.213389 0-20.332071-9.117658-20.332071-20.35663 0-11.252275 9.118682-20.332071 20.332071-20.332071l337.526293 0c11.290137 0 20.332071 9.080819 20.332071 20.332071C933.226089 512.607844 924.184155 521.725502 912.894018 521.725502L912.894018 521.725502zM557.56322 634.217552 445.085496 634.217552c-11.213389 0-20.332071-9.079796-20.332071-20.331048l0-168.763658c0-11.251252 9.118682-20.332071 20.332071-20.332071l112.478747 0c11.290137 0 20.370956 9.080819 20.370956 20.332071l0 168.763658C577.934177 625.137757 568.853357 634.217552 557.56322 634.217552L557.56322 634.217552zM465.417567 593.514525l71.827909 0L537.245476 465.454918l-71.827909 0L465.417567 593.514525 465.417567 593.514525z" p-id="1685" fill="#bfbfbf"></path></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/tree-table.svg b/energy_management_ui/src/assets/icons/svg/tree-table.svg
deleted file mode 100644
index 8aafdb8..0000000
--- a/energy_management_ui/src/assets/icons/svg/tree-table.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M44.8 0h79.543C126.78 0 128 1.422 128 4.267v23.466c0 2.845-1.219 4.267-3.657 4.267H44.8c-2.438 0-3.657-1.422-3.657-4.267V4.267C41.143 1.422 42.362 0 44.8 0zm22.857 48h56.686c2.438 0 3.657 1.422 3.657 4.267v23.466c0 2.845-1.219 4.267-3.657 4.267H67.657C65.22 80 64 78.578 64 75.733V52.267C64 49.422 65.219 48 67.657 48zm0 48h56.686c2.438 0 3.657 1.422 3.657 4.267v23.466c0 2.845-1.219 4.267-3.657 4.267H67.657C65.22 128 64 126.578 64 123.733v-23.466C64 97.422 65.219 96 67.657 96zM50.286 68.267c2.02 0 3.657-1.91 3.657-4.267 0-2.356-1.638-4.267-3.657-4.267H17.37V32h6.4c2.02 0 3.658-1.91 3.658-4.267V4.267C27.429 1.91 25.79 0 23.77 0H3.657C1.637 0 0 1.91 0 4.267v23.466C0 30.09 1.637 32 3.657 32h6.4v80c0 2.356 1.638 4.267 3.657 4.267h36.572c2.02 0 3.657-1.91 3.657-4.267 0-2.356-1.638-4.267-3.657-4.267H17.37V68.267h32.915z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/tree.svg b/energy_management_ui/src/assets/icons/svg/tree.svg
deleted file mode 100644
index dd4b7dd..0000000
--- a/energy_management_ui/src/assets/icons/svg/tree.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M126.713 90.023c.858.985 1.287 2.134 1.287 3.447v29.553c0 1.423-.429 2.6-1.287 3.53-.858.93-1.907 1.395-3.146 1.395H97.824c-1.145 0-2.146-.465-3.004-1.395-.858-.93-1.287-2.107-1.287-3.53V93.47c0-.875.19-1.696.572-2.462.382-.766.906-1.368 1.573-1.806a3.84 3.84 0 0 1 2.146-.657h9.725V69.007a3.84 3.84 0 0 0-.43-1.806 3.569 3.569 0 0 0-1.143-1.313 2.714 2.714 0 0 0-1.573-.492h-36.47v23.149h9.725c1.144 0 2.145.492 3.004 1.478.858.985 1.287 2.134 1.287 3.447v29.553c0 .876-.191 1.696-.573 2.463-.38.766-.905 1.368-1.573 1.806a3.84 3.84 0 0 1-2.145.656H51.915a3.84 3.84 0 0 1-2.145-.656c-.668-.438-1.216-1.04-1.645-1.806a4.96 4.96 0 0 1-.644-2.463V93.47c0-1.313.43-2.462 1.288-3.447.858-.986 1.907-1.478 3.146-1.478h9.582v-23.15h-37.9c-.953 0-1.74.356-2.359 1.068-.62.711-.93 1.56-.93 2.544v19.538h9.726c1.239 0 2.264.492 3.074 1.478.81.985 1.216 2.134 1.216 3.447v29.553c0 1.423-.405 2.6-1.216 3.53-.81.93-1.835 1.395-3.074 1.395H4.29c-.476 0-.93-.082-1.358-.246a4.1 4.1 0 0 1-1.144-.657 4.658 4.658 0 0 1-.93-1.067 5.186 5.186 0 0 1-.643-1.395 5.566 5.566 0 0 1-.215-1.56V93.47c0-.437.048-.875.143-1.313a3.95 3.95 0 0 1 .429-1.15c.19-.328.429-.656.715-.984.286-.329.572-.602.858-.821.286-.22.62-.383 1.001-.493.382-.11.763-.164 1.144-.164h9.726V61.619c0-.985.31-1.833.93-2.544.619-.712 1.358-1.068 2.216-1.068h44.335V39.62h-9.582c-1.24 0-2.288-.492-3.146-1.477a5.09 5.09 0 0 1-1.287-3.448V5.14c0-1.423.429-2.627 1.287-3.612.858-.985 1.907-1.477 3.146-1.477h25.743c.763 0 1.478.246 2.145.739a5.17 5.17 0 0 1 1.573 1.888c.382.766.573 1.587.573 2.462v29.553c0 1.313-.43 2.463-1.287 3.448-.859.985-1.86 1.477-3.004 1.477h-9.725v18.389h42.762c.954 0 1.74.355 2.36 1.067.62.711.93 1.56.93 2.545v26.925h9.582c1.239 0 2.288.492 3.146 1.478z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/user.svg b/energy_management_ui/src/assets/icons/svg/user.svg
deleted file mode 100644
index 0ba0716..0000000
--- a/energy_management_ui/src/assets/icons/svg/user.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="130" height="130" xmlns="http://www.w3.org/2000/svg"><path d="M63.444 64.996c20.633 0 37.359-14.308 37.359-31.953 0-17.649-16.726-31.952-37.359-31.952-20.631 0-37.36 14.303-37.358 31.952 0 17.645 16.727 31.953 37.359 31.953zM80.57 75.65H49.434c-26.652 0-48.26 18.477-48.26 41.27v2.664c0 9.316 21.608 9.325 48.26 9.325H80.57c26.649 0 48.256-.344 48.256-9.325v-2.663c0-22.794-21.605-41.271-48.256-41.271z" stroke="#979797"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/validCode.svg b/energy_management_ui/src/assets/icons/svg/validCode.svg
deleted file mode 100644
index cfb1021..0000000
--- a/energy_management_ui/src/assets/icons/svg/validCode.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1569580729849" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1939" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M513.3 958.5c-142.2 0-397.9-222.1-401.6-440.5V268c1.7-39.6 31.7-72.3 71.1-77.3 49-4.6 97.1-16.5 142.7-35.3 47.8-14 91.9-38.3 129.4-71.1 30.3-24.4 72.9-26.3 105.3-4.6 39.9 30.7 83.8 55.9 130.5 74.6 48.6 14.7 98.2 25.9 148.4 33.7 38.5 7.6 67.1 40.3 69.5 79.5 3.3 84.9 2.5 169.9-2.6 254.7-33.7 281.6-253.7 436.4-392.7 436.3z m-0.1-813.7c-7.2-0.2-14.3 2-20 6.4-39.7 35.2-86.8 61.1-137.7 75.7-46.8 19.2-96.2 31-146.6 35.2-11 3.2-18.8 13-19.5 24.4v230.1c3.5 180.3 223.3 361 323.9 361s287.3-120.2 317.6-360.5c7.3-142.7 0-228.6 0-229.6-1.3-13.3-11-24.3-24-27.3-49.6-7.7-98.6-19-146.5-33.7-46.3-19.5-89.7-45.3-129-76.7-5.8-3.8-12.7-5.5-19.5-4.9l1.3-0.1z" fill="#C6CCDA" p-id="1940"></path><path d="M750.1 428L490.7 673.2c-11.7 11.1-29.5 12.9-43.1 4.2l-6.8-5.8-141.2-149.4c-9.3-9.3-12.7-22.9-9-35.5 3.8-12.6 14.1-22.1 27-24.8 12.9-2.7 26.1 1.9 34.6 11.9L469 597.5l233.7-221c14.6-12.8 36.8-11.6 49.9 2.7 13.2 14.2 11.5 35.3-2.5 48.8" fill="#C6CCDA" p-id="1941"></path></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/wechat.svg b/energy_management_ui/src/assets/icons/svg/wechat.svg
deleted file mode 100644
index c586e55..0000000
--- a/energy_management_ui/src/assets/icons/svg/wechat.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="110" xmlns="http://www.w3.org/2000/svg"><path d="M86.635 33.334c1.467 0 2.917.113 4.358.283C87.078 14.392 67.58.111 45.321.111 20.44.111.055 17.987.055 40.687c0 13.104 6.781 23.863 18.115 32.209l-4.527 14.352 15.82-8.364c5.666 1.182 10.207 2.395 15.858 2.395 1.42 0 2.829-.073 4.227-.189-.886-3.19-1.398-6.53-1.398-9.996 0-20.845 16.98-37.76 38.485-37.76zm-24.34-12.936c3.407 0 5.665 2.363 5.665 5.954 0 3.576-2.258 5.97-5.666 5.97-3.392 0-6.795-2.395-6.795-5.97 0-3.591 3.403-5.954 6.795-5.954zM30.616 32.323c-3.393 0-6.818-2.395-6.818-5.971 0-3.591 3.425-5.954 6.818-5.954 3.392 0 5.65 2.363 5.65 5.954 0 3.576-2.258 5.97-5.65 5.97z"/><path d="M127.945 70.52c0-19.075-18.108-34.623-38.448-34.623-21.537 0-38.5 15.548-38.5 34.623 0 19.108 16.963 34.622 38.5 34.622 4.508 0 9.058-1.2 13.584-2.395l12.414 7.167-3.404-11.923c9.087-7.184 15.854-16.712 15.854-27.471zm-50.928-5.97c-2.254 0-4.53-2.362-4.53-4.773 0-2.378 2.276-4.771 4.53-4.771 3.422 0 5.665 2.393 5.665 4.771 0 2.41-2.243 4.773-5.665 4.773zm24.897 0c-2.24 0-4.498-2.362-4.498-4.773 0-2.378 2.258-4.771 4.498-4.771 3.392 0 5.665 2.393 5.665 4.771 0 2.41-2.273 4.773-5.665 4.773z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svg/zip.svg b/energy_management_ui/src/assets/icons/svg/zip.svg
deleted file mode 100644
index f806fc4..0000000
--- a/energy_management_ui/src/assets/icons/svg/zip.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M78.527 116.793c.178.008.348.024.527.024h40.233c4.711-.005 8.53-3.677 8.534-8.21V18.895c-.004-4.532-3.823-8.204-8.534-8.209H79.054c-.179 0-.353.016-.527.024V0L0 10.082v107.406l78.527 10.342v-11.037zm0-101.362c.174-.024.348-.052.527-.052h40.233c2.018 0 3.659 1.578 3.659 3.52v89.713c-.003 1.942-1.64 3.517-3.659 3.519H79.054c-.179 0-.353-.028-.527-.052V15.431zM30.262 75.757l-18.721-.46V72.37l11.3-16.673v-.148l-10.266.164v-4.51l17.504-.44v3.264L18.696 70.76v.144l11.566.176v4.678zm9.419.231l-5.823-.144V50.671l5.823-.144v25.461zm22.255-11.632c-2.168 1.922-5.353 2.76-9.02 2.736-.702.004-1.402-.04-2.097-.131v9.303l-5.997-.148V50.743c1.852-.352 4.473-.647 8.218-.743 3.838-.096 6.608.539 8.48 1.913 1.807 1.306 3.032 3.5 3.032 6.112s-.926 4.833-2.612 6.331h-.004zM53.36 54.45c-.856-.01-1.71.083-2.541.275v7.682c.523.116 1.167.152 2.06.152 3.301-.004 5.36-1.614 5.36-4.314 0-2.425-1.772-3.843-4.875-3.791l-.004-.004zm39.847-37.066h9.564v3.795h-9.564v-3.795zm-9.568 5.68h9.564v3.8h-9.564v-3.8zm9.568 6.216h9.564v3.799h-9.564V29.28zm0 12h9.564v3.794h-9.564V41.28zm-9.568-6.096h9.564v3.795h-9.564v-3.795zm9.472 47.064c2.512 0 4.921-.96 6.697-2.67 1.776-1.708 2.773-4.026 2.772-6.442l-1.748-15.263c0-5.033-2.492-9.112-7.725-9.112-5.232 0-7.72 4.079-7.72 9.112l-1.752 15.263c-.001 2.417.996 4.735 2.773 6.444 1.777 1.71 4.187 2.669 6.7 2.668h.003zm-3.135-16.75h6.27v12.743h-6.27V65.5z"/></svg>
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/icons/svgo.yml b/energy_management_ui/src/assets/icons/svgo.yml
deleted file mode 100644
index d11906a..0000000
--- a/energy_management_ui/src/assets/icons/svgo.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-# replace default config
-
-# multipass: true
-# full: true
-
-plugins:
-
-  # - name
-  #
-  # or:
-  # - name: false
-  # - name: true
-  #
-  # or:
-  # - name:
-  #     param1: 1
-  #     param2: 2
-
-- removeAttrs:
-    attrs:
-      - 'fill'
-      - 'fill-rule'
diff --git a/energy_management_ui/src/assets/image/bg.jpg b/energy_management_ui/src/assets/image/bg.jpg
deleted file mode 100644
index e95e661..0000000
--- a/energy_management_ui/src/assets/image/bg.jpg
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/image/breadcrumbBg.png b/energy_management_ui/src/assets/image/breadcrumbBg.png
deleted file mode 100644
index 9438d9c..0000000
--- a/energy_management_ui/src/assets/image/breadcrumbBg.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/image/configureChart.png b/energy_management_ui/src/assets/image/configureChart.png
deleted file mode 100644
index 1cd84e7..0000000
--- a/energy_management_ui/src/assets/image/configureChart.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/image/image.png b/energy_management_ui/src/assets/image/image.png
deleted file mode 100644
index 3a505a6..0000000
--- a/energy_management_ui/src/assets/image/image.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/image/index.png b/energy_management_ui/src/assets/image/index.png
deleted file mode 100644
index 8bc563c..0000000
--- a/energy_management_ui/src/assets/image/index.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/image/index2.png b/energy_management_ui/src/assets/image/index2.png
deleted file mode 100644
index f07bafd..0000000
--- a/energy_management_ui/src/assets/image/index2.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/image/index3.png b/energy_management_ui/src/assets/image/index3.png
deleted file mode 100644
index 13ee271..0000000
--- a/energy_management_ui/src/assets/image/index3.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/image/index4.jpeg b/energy_management_ui/src/assets/image/index4.jpeg
deleted file mode 100644
index 7980be4..0000000
--- a/energy_management_ui/src/assets/image/index4.jpeg
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/image/isbreadcrumbBg.png b/energy_management_ui/src/assets/image/isbreadcrumbBg.png
deleted file mode 100644
index 7d85284..0000000
--- a/energy_management_ui/src/assets/image/isbreadcrumbBg.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/image/login-background.png b/energy_management_ui/src/assets/image/login-background.png
deleted file mode 100644
index ce2a674..0000000
--- a/energy_management_ui/src/assets/image/login-background.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/image/login-background1.png b/energy_management_ui/src/assets/image/login-background1.png
deleted file mode 100644
index e839866..0000000
--- a/energy_management_ui/src/assets/image/login-background1.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/image/navbar/Group.png b/energy_management_ui/src/assets/image/navbar/Group.png
deleted file mode 100644
index d307977..0000000
--- a/energy_management_ui/src/assets/image/navbar/Group.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/image/navbar/exit.png b/energy_management_ui/src/assets/image/navbar/exit.png
deleted file mode 100644
index a30899b..0000000
--- a/energy_management_ui/src/assets/image/navbar/exit.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/image/navbar/xiala.png b/energy_management_ui/src/assets/image/navbar/xiala.png
deleted file mode 100644
index 276e7c0..0000000
--- a/energy_management_ui/src/assets/image/navbar/xiala.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/image/rectangle.png b/energy_management_ui/src/assets/image/rectangle.png
deleted file mode 100644
index ef0017d..0000000
--- a/energy_management_ui/src/assets/image/rectangle.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/image/touxiang.png b/energy_management_ui/src/assets/image/touxiang.png
deleted file mode 100644
index 0df32c6..0000000
--- a/energy_management_ui/src/assets/image/touxiang.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/image/treeBg.png b/energy_management_ui/src/assets/image/treeBg.png
deleted file mode 100644
index ea4587e..0000000
--- a/energy_management_ui/src/assets/image/treeBg.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/logo/logo-page-left.png b/energy_management_ui/src/assets/logo/logo-page-left.png
deleted file mode 100644
index 5dc1c2f..0000000
--- a/energy_management_ui/src/assets/logo/logo-page-left.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/logo/logo.png b/energy_management_ui/src/assets/logo/logo.png
deleted file mode 100644
index 86f718f..0000000
--- a/energy_management_ui/src/assets/logo/logo.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/logo/toray_group_icon.png b/energy_management_ui/src/assets/logo/toray_group_icon.png
deleted file mode 100644
index 6c56317..0000000
--- a/energy_management_ui/src/assets/logo/toray_group_icon.png
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/src/assets/styles/btn.scss b/energy_management_ui/src/assets/styles/btn.scss
deleted file mode 100644
index e6ba1a8..0000000
--- a/energy_management_ui/src/assets/styles/btn.scss
+++ /dev/null
@@ -1,99 +0,0 @@
-@import './variables.scss';
-
-@mixin colorBtn($color) {
-  background: $color;
-
-  &:hover {
-    color: $color;
-
-    &:before,
-    &:after {
-      background: $color;
-    }
-  }
-}
-
-.blue-btn {
-  @include colorBtn($blue)
-}
-
-.light-blue-btn {
-  @include colorBtn($light-blue)
-}
-
-.red-btn {
-  @include colorBtn($red)
-}
-
-.pink-btn {
-  @include colorBtn($pink)
-}
-
-.green-btn {
-  @include colorBtn($green)
-}
-
-.tiffany-btn {
-  @include colorBtn($tiffany)
-}
-
-.yellow-btn {
-  @include colorBtn($yellow)
-}
-
-.pan-btn {
-  font-size: 14px;
-  color: #fff;
-  padding: 14px 36px;
-  border-radius: 8px;
-  border: none;
-  outline: none;
-  transition: 600ms ease all;
-  position: relative;
-  display: inline-block;
-
-  &:hover {
-    background: #fff;
-
-    &:before,
-    &:after {
-      width: 100%;
-      transition: 600ms ease all;
-    }
-  }
-
-  &:before,
-  &:after {
-    content: '';
-    position: absolute;
-    top: 0;
-    right: 0;
-    height: 2px;
-    width: 0;
-    transition: 400ms ease all;
-  }
-
-  &::after {
-    right: inherit;
-    top: inherit;
-    left: 0;
-    bottom: 0;
-  }
-}
-
-.custom-button {
-  display: inline-block;
-  line-height: 1;
-  white-space: nowrap;
-  cursor: pointer;
-  background: #fff;
-  color: #fff;
-  -webkit-appearance: none;
-  text-align: center;
-  box-sizing: border-box;
-  outline: 0;
-  margin: 0;
-  padding: 10px 15px;
-  font-size: 14px;
-  border-radius: 4px;
-}
diff --git a/energy_management_ui/src/assets/styles/common-table-form.scss b/energy_management_ui/src/assets/styles/common-table-form.scss
deleted file mode 100644
index 41191b6..0000000
--- a/energy_management_ui/src/assets/styles/common-table-form.scss
+++ /dev/null
@@ -1,13 +0,0 @@
-.el-form-item {
-  margin-bottom: 0;
-  margin-right: 0
-}
-
-.operation {
-  display: flex;
-  justify-content: end;
-}
-
-.el-row {
-  margin-bottom: 0;
-}
diff --git a/energy_management_ui/src/assets/styles/element-ui.scss b/energy_management_ui/src/assets/styles/element-ui.scss
deleted file mode 100644
index dbd35f7..0000000
--- a/energy_management_ui/src/assets/styles/element-ui.scss
+++ /dev/null
@@ -1,177 +0,0 @@
-// cover some element-ui styles
-
-.el-breadcrumb__inner,
-.el-breadcrumb__inner a {
-  font-weight: 400 !important;
-}
-
-.el-upload {
-  input[type="file"] {
-    display: none !important;
-  }
-}
-
-.el-upload__input {
-  display: none;
-}
-
-.cell {
-  .el-tag {
-    margin-right: 0px;
-  }
-}
-
-.small-padding {
-  .cell {
-    padding-left: 5px;
-    padding-right: 5px;
-  }
-}
-
-.fixed-width {
-  .el-button--mini {
-    padding: 7px 10px;
-    width: 60px;
-  }
-}
-
-.status-col {
-  .cell {
-    padding: 0 10px;
-    text-align: center;
-
-    .el-tag {
-      margin-right: 0px;
-    }
-  }
-}
-
-// to fixed https://github.com/ElemeFE/element/issues/2461
-.el-dialog {
-  transform: none;
-  left: 0;
-  position: relative;
-  margin: 0 auto;
-  background: #001233;
-  .el-dialog__title{
-    color: #fff;
-  }
-}
-
-// refine element ui upload
-.upload-container {
-  .el-upload {
-    width: 100%;
-
-    .el-upload-dragger {
-      width: 100%;
-      height: 200px;
-    }
-  }
-}
-
-// dropdown
-.el-dropdown-menu {
-  a {
-    display: block
-  }
-}
-
-// fix date-picker ui bug in filter-item
-.el-range-editor.el-input__inner {
-  display: inline-flex !important;
-}
-
-.el-form-item__label {
-  color: #fff;
-}
-
-.el-table {
-  background: none
-}
-
-.el-table .el-table__header-wrapper th, .el-table th {
-  background-color: #054586 !important;
-  color: #fff !important;
-}
-
-.el-table tr {
-  color: #fff;
-  background-color: #021441;
-}
-
-.el-table th.is-leaf, .el-table td {
-  border-bottom: 1px solid rgba(255, 255, 255, 0.15);
-}
-
-.el-table__footer-wrapper td {
-  border-top: 1px solid rgba(255, 255, 255, 0.15);
-
-}
-
-.el-table__header-wrapper tbody td, .el-table__footer-wrapper tbody td {
-  color: #fff;
-  background-color: #021441;
-}
-
-.el-table--group, .el-table--border {
-  border: 1px solid #366cb9;
-}
-
-.el-table--border th, .el-table--border td {
-  border-right: 1px solid #366cb9 !important;
-}
-
-.el-table--border th {
-  border-bottom: 1px solid #366cb9;
-}
-
-.el-table::before, .el-table--group::after, .el-table--border::after {
-  background-color: rgba(0, 0, 0, 0);
-}
-
-.el-table__empty-block {
-  color: #fff;
-  background-color: #021441;
-}
-
-.el-table tbody tr:hover > .is-center {
-  background-color: rgba(5, 64, 149, 0.5) !important;
-}
-
-.el-loading-mask {
-  background-color: rgba(5, 64, 149, 0.3)
-}
-
-.el-tabs--card > .el-tabs__header .el-tabs__nav {
-  border: 1px solid #366CB9;
-}
-
-.el-tabs--card > .el-tabs__header {
-  border-bottom: 1px solid #366CB9;
-}
-
-.el-table__fixed::before {
-  background-color: rgba(0, 0, 0, 0);
-}
-
-.el-card__body{
-  .el-tabs--card {
-    .el-tabs__header {
-      .el-tabs__item{
-        border-left:0;
-        color: #95c1fd;
-      }
-      .el-tabs__item.is-active {
-        color: #fff;
-        background: #24CAFF;
-        border-bottom: 0;
-        border-left: 0;
-      }
-    }
-  }
-}
-
-
-
-
diff --git a/energy_management_ui/src/assets/styles/element-variables.scss b/energy_management_ui/src/assets/styles/element-variables.scss
deleted file mode 100644
index 6c2ce08..0000000
--- a/energy_management_ui/src/assets/styles/element-variables.scss
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
-* I think element-ui's default theme color is too light for long-term use.
-* So I modified the default color and you can modify it to your liking.
-**/
-
-/* theme color */
-$--color-primary: #38BCBF;
-$--color-success: #13ce66;
-$--color-warning: #FFBA00;
-$--color-danger: #ff4949;
-// $--color-info: #1E1E1E;
-
-$--button-font-weight: 400;
-
-// $--color-text-regular: #1f2d3d;
-
-$--border-color-light: #dfe4ed;
-$--border-color-lighter: #e6ebf5;
-
-$--table-border:1px solid#dfe6ec;
-
-/* icon font path, required */
-$--font-path: '~element-ui/lib/theme-chalk/fonts';
-
-@import "~element-ui/packages/theme-chalk/src/index";
-
-// the :export directive is the magic sauce for webpack
-// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
-:export {
-  theme: $--color-primary;
-}
diff --git a/energy_management_ui/src/assets/styles/index.scss b/energy_management_ui/src/assets/styles/index.scss
deleted file mode 100644
index cf4c563..0000000
--- a/energy_management_ui/src/assets/styles/index.scss
+++ /dev/null
@@ -1,250 +0,0 @@
-@import './variables.scss';
-@import './mixin.scss';
-@import './transition.scss';
-@import './element-ui.scss';
-@import './sidebar.scss';
-@import './btn.scss';
-
-body {
-  height: 100%;
-  -moz-osx-font-smoothing: grayscale;
-  -webkit-font-smoothing: antialiased;
-  text-rendering: optimizeLegibility;
-  font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
-}
-
-label {
-  font-weight: 700;
-}
-
-html {
-  height: 100%;
-  box-sizing: border-box;
-}
-
-#app {
-  height: 100%;
-}
-
-*,
-*:before,
-*:after {
-  box-sizing: inherit;
-}
-
-.no-padding {
-  padding: 0px !important;
-}
-
-.padding-content {
-  padding: 4px 0;
-}
-
-a:focus,
-a:active {
-  outline: none;
-}
-
-a,
-a:focus,
-a:hover {
-  cursor: pointer;
-  color: inherit;
-  text-decoration: none;
-}
-
-div:focus {
-  outline: none;
-}
-
-.fr {
-  float: right;
-}
-
-.fl {
-  float: left;
-}
-
-.pr-5 {
-  padding-right: 5px;
-}
-
-.pl-5 {
-  padding-left: 5px;
-}
-
-.block {
-  display: block;
-}
-
-.flex{
-  display: flex;
-}
-
-.pointer {
-  cursor: pointer;
-}
-
-.inlineBlock {
-  display: block;
-}
-
-.clearfix {
-  &:after {
-    visibility: hidden;
-    display: block;
-    font-size: 0;
-    content: " ";
-    clear: both;
-    height: 0;
-  }
-}
-
-aside {
-  background: #eef1f6;
-  padding: 8px 24px;
-  margin-bottom: 20px;
-  border-radius: 2px;
-  display: block;
-  line-height: 32px;
-  font-size: 16px;
-  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
-  color: #2c3e50;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-
-  a {
-    color: #38BCBF;
-    cursor: pointer;
-
-    &:hover {
-      color: rgb(32, 160, 255);
-    }
-  }
-}
-
-//main-container鍏ㄥ眬鏍峰紡
-.app-container {
-  padding: 20px;
-}
-
-.components-container {
-  margin: 30px 50px;
-  position: relative;
-}
-
-.text-center {
-  text-align: center
-}
-
-.sub-navbar {
-  height: 50px;
-  line-height: 50px;
-  position: relative;
-  width: 100%;
-  text-align: right;
-  padding-right: 20px;
-  transition: 600ms ease position;
-  background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%);
-
-  .subtitle {
-    font-size: 20px;
-    color: #fff;
-  }
-
-  &.draft {
-    background: #d0d0d0;
-  }
-
-  &.deleted {
-    background: #d0d0d0;
-  }
-}
-
-.link-type,
-.link-type:focus {
-  color: #337ab7;
-  cursor: pointer;
-
-  &:hover {
-    color: rgb(32, 160, 255);
-  }
-}
-
-.filter-container {
-  padding-bottom: 10px;
-
-  .filter-item {
-    display: inline-block;
-    vertical-align: middle;
-    margin-bottom: 10px;
-  }
-}
-
-//refine vue-multiselect plugin
-.multiselect {
-  line-height: 16px;
-}
-
-.multiselect--active {
-  z-index: 1000 !important;
-}
-
-.search-wrapper {
-  // padding-bottom: 12px;
-}
-
-.el-dialog__footer {
-  border-top: 1px solid #366cb9 ;
-}
-
-.el-dialog__header {
-  border-bottom: 1px solid #366cb9;
-}
-.el-drawer {
-  background: #061844;
-}
-.el-drawer__header {
-  color: #fff;
-}
-.el-input__inner, .el-textarea__inner, .vue-treeselect__control {
-  background: rgb(54, 108, 185, 0.2) !important;
-  background-color: rgb(54, 108, 185, 0.2) !important;
-  border: 1px solid #366cb9 !important;
-  color: #fff !important;
-}
-.vue-treeselect__input {
-  background-color: rgb(54, 108, 185, 0.2);
-  border: 1px solid #366cb9;
-  color: #fff;
-}
-.el-date-editor .el-range-input {
-  background-color: transparent;
-  color: #fff;
-}
-.el-date-editor .el-range-separator {
-  color: #fff;
-}
-.vue-treeselect__single-value {
-  color: #fff;
-}
-.el-pagination__total {
-  color: #fff;
-}
-.el-pagination__jump {
-  color: #fff;
-}
-
-aside {
-  background: transparent;
-}
-.el-tabs__item {
-  color: #fff;
-}
-.el-tabs__item.is-active {
-  color: $primary-color;
-}
-.el-collapse-item__header {
-  background-color: #061844;
-  color: #fff;
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/styles/left-right-layout.scss b/energy_management_ui/src/assets/styles/left-right-layout.scss
deleted file mode 100644
index eee7478..0000000
--- a/energy_management_ui/src/assets/styles/left-right-layout.scss
+++ /dev/null
@@ -1,8 +0,0 @@
-.page-left {
-  width: 280px
-}
-
-.page-right {
-  padding-left: 14px;
-  width: calc(100% - 280px);
-}
\ No newline at end of file
diff --git a/energy_management_ui/src/assets/styles/mixin.scss b/energy_management_ui/src/assets/styles/mixin.scss
deleted file mode 100644
index 06fa061..0000000
--- a/energy_management_ui/src/assets/styles/mixin.scss
+++ /dev/null
@@ -1,66 +0,0 @@
-@mixin clearfix {
-  &:after {
-    content: "";
-    display: table;
-    clear: both;
-  }
-}
-
-@mixin scrollBar {
-  &::-webkit-scrollbar-track-piece {
-    background: #d3dce6;
-  }
-
-  &::-webkit-scrollbar {
-    width: 6px;
-  }
-
-  &::-webkit-scrollbar-thumb {
-    background: #99a9bf;
-    border-radius: 20px;
-  }
-}
-
-@mixin relative {
-  position: relative;
-  width: 100%;
-  height: 100%;
-}
-
-@mixin pct($pct) {
-  width: #{$pct};
-  position: relative;
-  margin: 0 auto;
-}
-
-@mixin triangle($width, $height, $color, $direction) {
-  $width: $width/2;
-  $color-border-style: $height solid $color;
-  $transparent-border-style: $width solid transparent;
-  height: 0;
-  width: 0;
-
-  @if $direction==up {
-    border-bottom: $color-border-style;
-    border-left: $transparent-border-style;
-    border-right: $transparent-border-style;
-  }
-
-  @else if $direction==right {
-    border-left: $color-border-style;
-    border-top: $transparent-border-style;
-    border-bottom: $transparent-border-style;
-  }
-
-  @else if $direction==down {
-    border-top: $color-border-style;
-    border-left: $transparent-border-style;
-    border-right: $transparent-border-style;
-  }
-
-  @else if $direction==left {
-    border-right: $color-border-style;
-    border-top: $transparent-border-style;
-    border-bottom: $transparent-border-style;
-  }
-}
diff --git a/energy_management_ui/src/assets/styles/ruoyi.scss b/energy_management_ui/src/assets/styles/ruoyi.scss
deleted file mode 100644
index 4eef1c6..0000000
--- a/energy_management_ui/src/assets/styles/ruoyi.scss
+++ /dev/null
@@ -1,373 +0,0 @@
-/**
-* 閫氱敤css鏍峰紡甯冨眬澶勭悊
-* Copyright (c) 2019 ruoyi
-*/
-.el-table tbody tr:hover > td {
-  background-color: rgba(5,64,149,.5) !important;
-}
-
-.el-table .el-table__header-wrapper th {
-  word-break: break-word;
-  background-color: #D5D5D5;
-  color: #515a6e;
-  height: 40px;
-  font-size: 13px;
-}
-
-.el-table__body tr.hover-row.current-row > td,
-.el-table__body tr.hover-row.el-table__row--striped.current-row > td,
-.el-table__body tr.hover-row.el-table__row--striped > td,
-.el-table__body tr.hover-row > td {
-  background-color: #CFDCF5 !important;
-}
-
-
-
-
-/** 鍩虹閫氱敤 **/
-.pt5 {
-  padding-top: 5px;
-}
-
-.pr5 {
-  padding-right: 5px;
-}
-
-.pb5 {
-  padding-bottom: 5px;
-}
-
-.mt5 {
-  margin-top: 5px;
-}
-
-.mr5 {
-  margin-right: 5px;
-}
-
-.mb5 {
-  margin-bottom: 5px;
-}
-
-.mb8 {
-  margin-bottom: 8px;
-}
-
-.ml5 {
-  margin-left: 5px;
-}
-
-.mt10 {
-  margin-top: 10px;
-}
-
-.mr10 {
-  margin-right: 10px;
-}
-
-.mb10 {
-  margin-bottom: 10px;
-}
-
-.ml0 {
-  margin-left: 10px;
-}
-
-.mt20 {
-  margin-top: 20px;
-}
-
-.mr20 {
-  margin-right: 20px;
-}
-
-.mb20 {
-  margin-bottom: 20px;
-}
-
-.m20 {
-  margin-left: 20px;
-}
-
-.el-dialog {
-  margin-top: 6vh !important;
-}
-
-
-/** 琛ㄥ崟甯冨眬 **/
-.form-header {
-  font-size: 15px;
-  color: #6379bb;
-  border-bottom: 1px solid #ddd;
-  margin: 8px 10px 25px 10px;
-  padding-bottom: 5px
-}
-
-
-.pagination-container .el-pagination {
-  right: 0;
-  position: absolute;
-}
-
-.el-table .fixed-width .el-button--mini {
-  color: #38BCBF;
-  padding-left: 0;
-  padding-right: 0;
-  width: inherit;
-}
-
-.el-button{
-  background: #0083CF;
-  border-radius: 6px 6px 6px 6px;
-  color: #FFFFFF;
-  border: none;
-}
-.el-button--text {
-  background: transparent !important;
-}
-.el-button--primary{
-  background: #24CAFF;
-}
-.el-button--primary:hover{
-  background: #24CAFF;
-}
-.treeBg{
-  background: url("../image/treeBg.png") no-repeat;
-  background-size: 100% 100%;
-}
-.el-tree{
-  background: rgba(0,0,0,0);
-  color: #A3CBFF;
-}
-.el-tree-node:focus>.el-tree-node__content{
-  background-color: rgba(5, 64, 149,0.3);
-}
-
-.el-tree-node__content:hover {
-  background-color: rgba(5, 64, 149,0.3);
-}
-
-.el-collapse-item__wrap{
-  background: #001233;
-  border-bottom: none;
-}
-.el-button,
-.el-tree-node__content > .el-checkbox {
-  margin-right: 8px;
-}
-
-.list-group-striped > .list-group-item {
-  border-left: 0;
-  border-right: 0;
-  border-radius: 0;
-  padding-left: 0;
-  padding-right: 0;
-}
-
-.list-group {
-  padding-left: 0;
-  list-style: none;
-}
-
-.list-group-item {
-  border-bottom: 1px solid #e7eaec;
-  border-top: 1px solid #e7eaec;
-  margin-bottom: -1px;
-  padding: 11px 0;
-  font-size: 13px;
-}
-
-.pull-right {
-  float: right !important;
-}
-
-.el-card{
-  border: none;
-  background-color: #061844;
-  overflow: hidden;
-  color: #fff;
-}
-
-// .el-card__body {
-//   padding: 27px 20px;
-// }
-
-.card-box {
-  padding-right: 15px;
-  padding-left: 15px;
-  margin-bottom: 10px;
-}
-
-/* text color */
-.text-navy {
-  color: #1ab394;
-}
-
-.text-primary {
-  color: inherit;
-}
-
-.text-success {
-  color: #1c84c6;
-}
-
-.text-info {
-  color: #23c6c8;
-}
-
-.text-warning {
-  color: #f8ac59;
-}
-
-.text-danger {
-  color: #ed5565;
-}
-
-.text-muted {
-  color: #888888;
-}
-
-/* image */
-.img-circle {
-  border-radius: 50%;
-}
-
-.img-lg {
-  width: 120px;
-  height: 120px;
-}
-
-.avatar-upload-preview {
-  position: absolute;
-  top: 50%;
-  transform: translate(50%, -50%);
-  width: 180px;
-  height: 180px;
-  border-radius: 50%;
-  box-shadow: 0 0 4px #ccc;
-  overflow: hidden;
-}
-
-.split-container {
-  height: calc(100vh - 131px);
-
-  .el-card__header {
-    padding: 10px;
-    min-height: 40px;
-    line-height: 32px;
-  }
-
-  .left-content {
-    width: 260px;
-    margin-bottom: 0;
-    padding: 0;
-  }
-
-  .el-card__body {
-    padding: 8px 10px 10px 10px;
-    height: calc(100vh - 142px);
-    overflow: auto;
-  }
-}
-.el-card__header{
-  border-bottom: none;
-  background: #09256B;
-}
-
-.modelnode-tree {
-  // margin-top: 8px;
-
-  .custom-tree-node {
-    flex: 1;
-    padding-right: 8px;
-    // line-height: 26px;
-    font-size: 14px;
-  }
-
-  .node-opt {
-    float: right;
-  }
-}
-
-.query-form {
-  .el-form-item {
-    margin-bottom: 8px;
-  }
-}
-
-.model-node-setting {
-  .el-card__body {
-    padding: 8px 10px 10px 10px;
-    height: calc(100vh - 270px);
-    overflow: auto;
-  }
-}
-
-.el-table  ::v-deep .disabledCheck .cell .el-checkbox__inner {
-  display: none !important;
-}
-
-.el-table  ::v-deep .disabledCheck .cell:before {
-  content: '閫夋嫨';
-  position: absolute;
-  right: 15px;
-}
-
-.configure-upload {
-  width: 100%;
-
-  .el-upload {
-    width: 100%;
-  }
-
-  .el-upload-dragger {
-    width: 100%;
-    height: calc(100vh - 165px);
-  }
-
-  .el-icon-upload {
-    margin-top: calc(50vh - 180px);
-  }
-}
-.shrink-col-block {
-  position: absolute;
-  top: 20px;
-  right: 16px;
-  cursor: pointer;
-}
-
-// 缇庡寲婊氬姩鏉�
-::-webkit-scrollbar {
-  width: 11px;
-  height: 10px;
-}
-
-::-webkit-scrollbar-track {
-  width: 6px;
-  background: rgba(#101F1C, 0.1) ;
-  -webkit-border-radius: 2em;
-  -moz-border-radius: 2em;
-  border-radius: 2em;
-}
-
-::-webkit-scrollbar-thumb {
-  background-color:#4E6BBA;
-  background-clip: padding-box;
-  min-height: 28px;
-  -webkit-border-radius: 2em;
-  -moz-border-radius: 2em;
-  border-radius: 2em;
-  transition: background-color .3s;
-  cursor: pointer;
-}
-
-::-webkit-scrollbar-thumb:hover {
-  background-color: rgba(144,147,153,.3);
-}
-::-webkit-scrollbar-track-piece {
-  background-color: #021441
-}
-::-webkit-scrollbar-corner {
-  background-color:  #061844 ;
-}
-
diff --git a/energy_management_ui/src/assets/styles/sidebar.scss b/energy_management_ui/src/assets/styles/sidebar.scss
deleted file mode 100644
index 65ca224..0000000
--- a/energy_management_ui/src/assets/styles/sidebar.scss
+++ /dev/null
@@ -1,240 +0,0 @@
-#app {
-
-  .main-container {
-    // height: 100vh; //鎵撳紑涓嶆樉绀烘粴鍔ㄦ潯
-    overflow: hidden;
-    transition: margin-left .28s;
-    margin-left: $sideBarWidth;
-    position: relative;
-    // background: rgba(235, 237, 240, 1);
-    background: #001233;
-  }
-
-  .sidebar-container {
-    transition: width 0.28s;
-    width: $sideBarWidth !important;
-    background-color: $menuBg;
-    height: 100%;
-    position: fixed;
-    font-size: 0px;
-    top: 0;
-    bottom: 0;
-    left: 0;
-    z-index: 1001;
-    // overflow: hidden;
-
-    // background: url("../image/navbar/Group.png") no-repeat;background-size: 100% 100%;     
-    // padding-left: 13px;
-    // padding-right: 31px;
-    // padding-top: 27px;
-    // margin-top: 10px;
-
-    // reset element-ui css
-    .horizontal-collapse-transition {
-      transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
-    }
-
-    .scrollbar-wrapper {
-      // overflow-x: hidden !important; 婊氬姩鏉�
-      // overflow: auto;
-      height: 100%;
-    }
-    ::-webkit-scrollbar {
-      width: 5px;
-    }
-
-
-    .el-scrollbar__bar.is-vertical {
-      right: 0px;
-      width: 0;
-    }
-
-    .el-scrollbar {
-      height: 100%;
-      background: url("../image/navbar/Group.png") no-repeat;background-size: 100% 100%;     
-      padding-left: 3px;
-      padding-right: 24px;
-      padding-top: 13px;
-    }
-
-    &.has-logo {
-      .el-scrollbar {
-        height: calc(100% - 87px);
-      }
-    }
-
-    .is-horizontal {
-      display: none;
-    }
-
-    a {
-      display: inline-block;
-      width: 100%;
-      overflow: hidden;
-    }
-
-    .svg-icon {
-      margin-right: 12px;
-    }
-
-    .el-menu {
-      border: none;
-      height: 100%;
-      width: 100% !important;
-      background-color: rgba(0, 0, 0, 0);
-    }
-
-    // menu hover
-    .submenu-title-noDropdown,
-    .el-submenu__title {
-      height: 44px;
-      line-height: 44px;
-      &:hover {
-        background-color: $menuHover !important;
-      }
-    }
-
-    .is-active>.el-submenu__title {
-      // color: rgba(11, 107, 241, 1) !important;
-      font-weight: 500;
-    }
-
-    & .nest-menu .el-submenu>.el-submenu__title,
-    & .el-submenu .el-menu-item {
-      height: 44px;
-      line-height: 44px;
-      min-width: $sideBarWidth !important;
-      margin-left: 8px;
-      padding-left: 32px !important;
-      &:hover {
-        background-color: $subMenuHover !important;
-      }
-    }
-  }
-
-  .hideSidebar {
-    .sidebar-container {
-      width: 54px !important;
-    }
-
-    .main-container {
-      margin-left: 54px;
-    }
-
-    .submenu-title-noDropdown {
-      padding: 0 !important;
-      position: relative;
-
-      .el-tooltip {
-        padding: 0 !important;
-
-        .svg-icon {
-          margin-left: 20px;
-        }
-      }
-    }
-
-    .el-submenu {
-      overflow: hidden;
-
-      &>.el-submenu__title {
-        padding: 0 !important;
-
-        .svg-icon {
-          margin-left: 20px;
-        }
-
-        .el-submenu__icon-arrow {
-          display: none;
-        }
-      }
-    }
-
-    .el-menu--collapse {
-      .el-submenu {
-        &>.el-submenu__title {
-          &>span {
-            height: 0;
-            width: 0;
-            overflow: hidden;
-            visibility: hidden;
-            display: inline-block;
-          }
-        }
-      }
-    }
-  }
-
-  .el-menu--collapse .el-menu .el-submenu {
-    min-width: $sideBarWidth !important;
-  }
-
-  // mobile responsive
-  .mobile {
-    .main-container {
-      margin-left: 0px;
-    }
-
-    .sidebar-container {
-      transition: transform .28s;
-      width: $sideBarWidth !important;
-    }
-
-    &.hideSidebar {
-      .sidebar-container {
-        pointer-events: none;
-        transition-duration: 0.3s;
-        transform: translate3d(-$sideBarWidth, 0, 0);
-      }
-    }
-  }
-
-  .withoutAnimation {
-
-    .main-container,
-    .sidebar-container {
-      transition: none;
-    }
-  }
-}
-
-// when menu collapsed
-.el-menu--vertical {
-  &>.el-menu {
-    .svg-icon {
-      margin-right: 12px;
-    }
-  }
-
-  .nest-menu .el-submenu>.el-submenu__title,
-  .el-menu-item {
-    height: 44px;
-    line-height: 44px;
-    &:hover {
-      // you can use $subMenuHover
-      background-color: $menuHover !important;
-    }
-  }
-  .is-active {
-    color: #38bcbf !important;
-  }
-
-  // the scroll bar appears when the subMenu is too long
-  >.el-menu--popup {
-    max-height: 100vh;
-    overflow-y: auto;
-
-    &::-webkit-scrollbar-track-piece {
-      background: #d3dce6;
-    }
-
-    &::-webkit-scrollbar {
-      width: 6px;
-    }
-
-    &::-webkit-scrollbar-thumb {
-      background: #99a9bf;
-      border-radius: 20px;
-    }
-  }
-}
diff --git a/energy_management_ui/src/assets/styles/transition.scss b/energy_management_ui/src/assets/styles/transition.scss
deleted file mode 100644
index 4cb27cc..0000000
--- a/energy_management_ui/src/assets/styles/transition.scss
+++ /dev/null
@@ -1,48 +0,0 @@
-// global transition css
-
-/* fade */
-.fade-enter-active,
-.fade-leave-active {
-  transition: opacity 0.28s;
-}
-
-.fade-enter,
-.fade-leave-active {
-  opacity: 0;
-}
-
-/* fade-transform */
-.fade-transform-leave-active,
-.fade-transform-enter-active {
-  transition: all .5s;
-}
-
-.fade-transform-enter {
-  opacity: 0;
-  transform: translateX(-30px);
-}
-
-.fade-transform-leave-to {
-  opacity: 0;
-  transform: translateX(30px);
-}
-
-/* breadcrumb transition */
-.breadcrumb-enter-active,
-.breadcrumb-leave-active {
-  transition: all .5s;
-}
-
-.breadcrumb-enter,
-.breadcrumb-leave-active {
-  opacity: 0;
-  transform: translateX(20px);
-}
-
-.breadcrumb-move {
-  transition: all .5s;
-}
-
-.breadcrumb-leave-active {
-  position: absolute;
-}
diff --git a/energy_management_ui/src/assets/styles/variables.scss b/energy_management_ui/src/assets/styles/variables.scss
deleted file mode 100644
index c4eda7c..0000000
--- a/energy_management_ui/src/assets/styles/variables.scss
+++ /dev/null
@@ -1,63 +0,0 @@
-// // base color
-// $primary-color: #38BCBF;
-// $blue:#324157;
-// $light-blue:#3A71A8;
-// $red:#C03639;
-// $pink: #E65D6E;
-// $green: #30B08F;
-// $tiffany: #4AB7BD;
-// $yellow:#FEC171;
-// $panGreen: #30B08F;
-
-// // sidebar
-// $menuText:#629FF2;
-// $menuActiveText: #fff;
-// $subMenuActiveText:#38BCBF; // https://github.com/ElemeFE/element/issues/12951
-
-// $menuBg:rgba(255, 255, 255, 1);
-// $menuHover:rgba(246, 250, 255, 1);
-
-// $subMenuBg:#38BCBF;
-// $subMenuHover:rgba(246, 250, 255, 1)s;
-// $tabBarHeight: 40px;  //闈㈠寘灞戦珮搴�
-// $sideBarWidth: 220px;
-// base color
-$primary-color:#38BCBF;
-$blue:#324157;
-$light-blue:#3A71A8;
-$red:#C03639;
-$pink: #E65D6E;
-$green: #30B08F;
-$tiffany: #4AB7BD;
-$yellow:#FEC171;
-$panGreen: #30B08F;
-$Backgroundcolor: #001233;
-
-// sidebar
-$subMenuActiveText:#14CC8F; // https://github.com/ElemeFE/element/issues/12951
-$menuText:#629FF2;
-$menuActiveText: #fff;
-
-$menuBg:#001233;;
-$menuHover:rgba(0, 0, 0, 0);   //鐖�
-
-$subMenuBg:#14CC8F;
-$subMenuHover:rgba(0, 0, 0, 0);  //瀛�
-
-$sideBarWidth: 230px;
-$tabBarHeight: 32px;  //闈㈠寘灞戦珮搴�
-
-// the :export directive is the magic sauce for webpack
-// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
-:export {
-  menuText: $menuText;
-  menuActiveText: $menuActiveText;
-  subMenuActiveText: $subMenuActiveText;
-  menuBg: $menuBg;
-  menuHover: $menuHover;
-  subMenuBg: $subMenuBg;
-  subMenuHover: $subMenuHover;
-  sideBarWidth: $sideBarWidth;
-  primary-color: $primary-color;
-  tabBarHeight: $tabBarHeight;
-}
diff --git a/energy_management_ui/src/components/Breadcrumb/index.vue b/energy_management_ui/src/components/Breadcrumb/index.vue
deleted file mode 100644
index 97603c4..0000000
--- a/energy_management_ui/src/components/Breadcrumb/index.vue
+++ /dev/null
@@ -1,81 +0,0 @@
-<template>
-  <el-breadcrumb class="app-breadcrumb" separator="/">
-    <transition-group name="breadcrumb">
-      <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
-        <span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{ item.meta.title }}</span>
-        <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
-      </el-breadcrumb-item>
-    </transition-group>
-  </el-breadcrumb>
-</template>
-
-<script>
-import pathToRegexp from 'path-to-regexp'
-
-export default {
-  data() {
-    return {
-      levelList: null
-    }
-  },
-  watch: {
-    $route(route) {
-      // if you go to the redirect page, do not update the breadcrumbs
-      if (route.path.startsWith('/redirect/')) {
-        return
-      }
-      this.getBreadcrumb()
-    }
-  },
-  created() {
-    this.getBreadcrumb()
-  },
-  methods: {
-    getBreadcrumb() {
-      // only show routes with meta.title
-      let matched = this.$route.matched.filter(item => item.meta && item.meta.title)
-      const first = matched[0]
-
-      if (!this.isDashboard(first)) {
-        matched = [{ path: '/index', meta: { title: '棣栭〉' }}].concat(matched)
-      }
-
-      this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
-    },
-    isDashboard(route) {
-      const name = route && route.name
-      if (!name) {
-        return false
-      }
-      return name.trim() === '棣栭〉'
-    },
-    pathCompile(path) {
-      const { params } = this.$route
-      var toPath = pathToRegexp.compile(path)
-      return toPath(params)
-    },
-    handleLink(item) {
-      const { redirect, path } = item
-      if (redirect) {
-        this.$router.push(redirect)
-        return
-      }
-      this.$router.push(this.pathCompile(path))
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.app-breadcrumb.el-breadcrumb {
-  display: inline-block;
-  font-size: 14px;
-  line-height: 50px;
-  margin-left: 8px;
-
-  .no-redirect {
-    color: #97a8be;
-    cursor: text;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/components/Editor/index.vue b/energy_management_ui/src/components/Editor/index.vue
deleted file mode 100644
index 771f250..0000000
--- a/energy_management_ui/src/components/Editor/index.vue
+++ /dev/null
@@ -1,226 +0,0 @@
-<template>
-  <div>
-    <!-- 鍥剧墖涓婁紶缁勪欢杈呭姪 -->
-    <el-upload
-      class="avatar-uploader quill-img"
-      :action="uploadImgUrl"
-      name="file"
-      :headers="headers"
-      :show-file-list="false"
-      :on-success="quillImgSuccess"
-      :on-error="uploadError"
-      :before-upload="quillImgBefore"
-      accept='.jpg,.jpeg,.png,.gif'
-    ></el-upload>
-
-    <!-- 瀵屾枃鏈粍浠� -->
-    <quill-editor
-      class="editor"
-      v-model="content"
-      ref="quillEditor"
-      :options="editorOption"
-      @blur="onEditorBlur($event)"
-      @focus="onEditorFocus($event)"
-      @change="onEditorChange($event)"
-    ></quill-editor>
-  </div>
-</template>
-
-<script>
-import { getToken } from '@/utils/auth'
-
-// 宸ュ叿鏍忛厤缃�
-const toolbarOptions = [
-  ["bold", "italic", "underline", "strike"],       // 鍔犵矖 鏂滀綋 涓嬪垝绾� 鍒犻櫎绾�
-  ["blockquote", "code-block"],                    // 寮曠敤  浠g爜鍧�
-  [{ list: "ordered" }, { list: "bullet" }],       // 鏈夊簭銆佹棤搴忓垪琛�
-  [{ indent: "-1" }, { indent: "+1" }],            // 缂╄繘
-  [{ size: ["small", false, "large", "huge"] }],   // 瀛椾綋澶у皬
-  [{ header: [1, 2, 3, 4, 5, 6, false] }],         // 鏍囬
-  [{ color: [] }, { background: [] }],             // 瀛椾綋棰滆壊銆佸瓧浣撹儗鏅鑹�
-  [{ align: [] }],                                 // 瀵归綈鏂瑰紡
-  ["clean"],                                       // 娓呴櫎鏂囨湰鏍煎紡
-  ["link", "image", "video"]                       // 閾炬帴銆佸浘鐗囥�佽棰�
-];
-
-import { quillEditor } from "vue-quill-editor";
-import "quill/dist/quill.core.css";
-import "quill/dist/quill.snow.css";
-import "quill/dist/quill.bubble.css";
-
-export default {
-  props: {
-    /* 缂栬緫鍣ㄧ殑鍐呭 */
-    value: {
-      type: String
-    },
-    /* 鍥剧墖澶у皬 */
-    maxSize: {
-      type: Number,
-      default: 4000 //kb
-    }
-  },
-  components: { quillEditor },
-  data() {
-    return {
-      content: this.value,
-      uploadImgUrl: "",
-      editorOption: {
-        placeholder: "",
-        theme: "snow", // or 'bubble'
-        placeholder: "璇疯緭鍏ュ唴瀹�",
-        modules: {
-          toolbar: {
-            container: toolbarOptions,
-            handlers: {
-              image: function(value) {
-                if (value) {
-                  // 瑙﹀彂input妗嗛�夋嫨鍥剧墖鏂囦欢
-                  document.querySelector(".quill-img input").click();
-                } else {
-                  this.quill.format("image", false);
-                }
-              }
-            }
-          }
-        }
-      },
-      uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 涓婁紶鐨勫浘鐗囨湇鍔″櫒鍦板潃
-      headers: {
-        Authorization: 'Bearer ' + getToken()
-      }
-    };
-  },
-  watch: {
-    value: function() {
-      this.content = this.value;
-    }
-  },
-  methods: {
-    onEditorBlur() {
-      //澶卞幓鐒︾偣浜嬩欢
-    },
-    onEditorFocus() {
-      //鑾峰緱鐒︾偣浜嬩欢
-    },
-    onEditorChange() {
-      //鍐呭鏀瑰彉浜嬩欢
-      this.$emit("input", this.content);
-    },
-
-    // 瀵屾枃鏈浘鐗囦笂浼犲墠
-    quillImgBefore(file) {
-      let fileType = file.type;
-			if(fileType === 'image/jpeg' || fileType === 'image/png'){
-				return true;
-			}else {
-				this.$message.error('璇锋彃鍏ュ浘鐗囩被鍨嬫枃浠�(jpg/jpeg/png)');
-				return false;
-			}
-    },
-
-    quillImgSuccess(res, file) {
-      // res涓哄浘鐗囨湇鍔″櫒杩斿洖鐨勬暟鎹�
-      // 鑾峰彇瀵屾枃鏈粍浠跺疄渚�
-      let quill = this.$refs.quillEditor.quill;
-      // 濡傛灉涓婁紶鎴愬姛
-      if (res.code == 200) {
-        // 鑾峰彇鍏夋爣鎵�鍦ㄤ綅缃�
-        let length = quill.getSelection().index;
-        // 鎻掑叆鍥剧墖  res.url涓烘湇鍔″櫒杩斿洖鐨勫浘鐗囧湴鍧�
-        quill.insertEmbed(length, "image", res.url);
-        // 璋冩暣鍏夋爣鍒版渶鍚�
-        quill.setSelection(length + 1);
-      } else {
-        this.$message.error("鍥剧墖鎻掑叆澶辫触");
-      }
-    },
-    // 瀵屾枃鏈浘鐗囦笂浼犲け璐�
-    uploadError() {
-      // loading鍔ㄧ敾娑堝け
-      this.$message.error("鍥剧墖鎻掑叆澶辫触");
-    }
-  }
-};
-</script> 
-
-<style scoped>
-.editor {
-  line-height: normal !important;
-  height: 192px;
-}
-.el-upload {
-  display: none;
-}
-.ql-snow .ql-tooltip[data-mode="link"]::before {
-  content: "璇疯緭鍏ラ摼鎺ュ湴鍧�:";
-}
-.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
-  border-right: 0px;
-  content: "淇濆瓨";
-  padding-right: 0px;
-}
-
-.ql-snow .ql-tooltip[data-mode="video"]::before {
-  content: "璇疯緭鍏ヨ棰戝湴鍧�:";
-}
-
-.ql-snow .ql-picker.ql-size .ql-picker-label::before,
-.ql-snow .ql-picker.ql-size .ql-picker-item::before {
-  content: "14px";
-}
-.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before,
-.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before {
-  content: "10px";
-}
-.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before,
-.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before {
-  content: "18px";
-}
-.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before,
-.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before {
-  content: "32px";
-}
-
-.ql-snow .ql-picker.ql-header .ql-picker-label::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item::before {
-  content: "鏂囨湰";
-}
-.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
-  content: "鏍囬1";
-}
-.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
-  content: "鏍囬2";
-}
-.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
-  content: "鏍囬3";
-}
-.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
-  content: "鏍囬4";
-}
-.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
-  content: "鏍囬5";
-}
-.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
-  content: "鏍囬6";
-}
-
-.ql-snow .ql-picker.ql-font .ql-picker-label::before,
-.ql-snow .ql-picker.ql-font .ql-picker-item::before {
-  content: "鏍囧噯瀛椾綋";
-}
-.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before,
-.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before {
-  content: "琛嚎瀛椾綋";
-}
-.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before,
-.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before {
-  content: "绛夊瀛椾綋";
-}
-</style>
\ No newline at end of file
diff --git a/energy_management_ui/src/components/Hamburger/index.vue b/energy_management_ui/src/components/Hamburger/index.vue
deleted file mode 100644
index f4c42af..0000000
--- a/energy_management_ui/src/components/Hamburger/index.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-<template>
-  <div style="padding: 0 15px;" @click="toggleClick">
-    <svg
-      :class="{'is-active':isActive}"
-      class="hamburger"
-      viewBox="0 0 1024 1024"
-      xmlns="http://www.w3.org/2000/svg"
-      width="64"
-      height="64"
-      fill="white"
-    >
-      <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" />
-    </svg>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'Hamburger',
-  props: {
-    isActive: {
-      type: Boolean,
-      default: false
-    }
-  },
-  methods: {
-    toggleClick() {
-      this.$emit('toggleClick')
-    }
-  }
-}
-</script>
-
-<style scoped>
-.hamburger {
-  display: inline-block;
-  vertical-align: middle;
-  width: 20px;
-  height: 20px;
-}
-
-.hamburger.is-active {
-  transform: rotate(180deg);
-}
-</style>
diff --git a/energy_management_ui/src/components/HeaderSearch/index.vue b/energy_management_ui/src/components/HeaderSearch/index.vue
deleted file mode 100644
index 6db441d..0000000
--- a/energy_management_ui/src/components/HeaderSearch/index.vue
+++ /dev/null
@@ -1,180 +0,0 @@
-<template>
-  <div :class="{'show':show}" class="header-search">
-    <svg-icon class-name="search-icon" icon-class="search" @click.stop="click" />
-    <el-select
-      ref="headerSearchSelect"
-      v-model="search"
-      :remote-method="querySearch"
-      filterable
-      default-first-option
-      remote
-      placeholder="Search"
-      class="header-search-select"
-      @change="change"
-    >
-      <el-option v-for="item in options" :key="item.path" :value="item" :label="item.title.join(' > ')" />
-    </el-select>
-  </div>
-</template>
-
-<script>
-// fuse is a lightweight fuzzy-search module
-// make search results more in line with expectations
-import Fuse from 'fuse.js'
-import path from 'path'
-
-export default {
-  name: 'HeaderSearch',
-  data() {
-    return {
-      search: '',
-      options: [],
-      searchPool: [],
-      show: false,
-      fuse: undefined
-    }
-  },
-  computed: {
-    routes() {
-      return this.$store.getters.permission_routes
-    }
-  },
-  watch: {
-    routes() {
-      this.searchPool = this.generateRoutes(this.routes)
-    },
-    searchPool(list) {
-      this.initFuse(list)
-    },
-    show(value) {
-      if (value) {
-        document.body.addEventListener('click', this.close)
-      } else {
-        document.body.removeEventListener('click', this.close)
-      }
-    }
-  },
-  mounted() {
-    this.searchPool = this.generateRoutes(this.routes)
-  },
-  methods: {
-    click() {
-      this.show = !this.show
-      if (this.show) {
-        this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.focus()
-      }
-    },
-    close() {
-      this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.blur()
-      this.options = []
-      this.show = false
-    },
-    change(val) {
-      this.$router.push(val.path)
-      this.search = ''
-      this.options = []
-      this.$nextTick(() => {
-        this.show = false
-      })
-    },
-    initFuse(list) {
-      this.fuse = new Fuse(list, {
-        shouldSort: true,
-        threshold: 0.4,
-        location: 0,
-        distance: 100,
-        maxPatternLength: 32,
-        minMatchCharLength: 1,
-        keys: [{
-          name: 'title',
-          weight: 0.7
-        }, {
-          name: 'path',
-          weight: 0.3
-        }]
-      })
-    },
-    // Filter out the routes that can be displayed in the sidebar
-    // And generate the internationalized title
-    generateRoutes(routes, basePath = '/', prefixTitle = []) {
-      let res = []
-
-      for (const router of routes) {
-        // skip hidden router
-        if (router.hidden) { continue }
-
-        const data = {
-          path: path.resolve(basePath, router.path),
-          title: [...prefixTitle]
-        }
-
-        if (router.meta && router.meta.title) {
-          data.title = [...data.title, router.meta.title]
-
-          if (router.redirect !== 'noRedirect') {
-            // only push the routes with title
-            // special case: need to exclude parent router without redirect
-            res.push(data)
-          }
-        }
-
-        // recursive child routes
-        if (router.children) {
-          const tempRoutes = this.generateRoutes(router.children, data.path, data.title)
-          if (tempRoutes.length >= 1) {
-            res = [...res, ...tempRoutes]
-          }
-        }
-      }
-      return res
-    },
-    querySearch(query) {
-      if (query !== '') {
-        this.options = this.fuse.search(query)
-      } else {
-        this.options = []
-      }
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.header-search {
-  font-size: 0 !important;
-
-  .search-icon {
-    cursor: pointer;
-    font-size: 18px;
-    vertical-align: middle;
-  }
-
-  .header-search-select {
-    font-size: 18px;
-    transition: width 0.2s;
-    width: 0;
-    overflow: hidden;
-    background: transparent;
-    border-radius: 0;
-    display: inline-block;
-    vertical-align: middle;
-
-     ::v-deep .el-input__inner {
-      border-radius: 0;
-      border: 0;
-      padding-left: 0;
-      padding-right: 0;
-      box-shadow: none !important;
-      border-bottom: 1px solid #d9d9d9;
-      vertical-align: middle;
-    }
-  }
-
-  &.show {
-    .header-search-select {
-      width: 210px;
-      margin-left: 10px;
-    }
-  }
-}
-</style>
diff --git a/energy_management_ui/src/components/IconSelect/index.vue b/energy_management_ui/src/components/IconSelect/index.vue
deleted file mode 100644
index 53d93e6..0000000
--- a/energy_management_ui/src/components/IconSelect/index.vue
+++ /dev/null
@@ -1,84 +0,0 @@
-<!-- @author zhengjie -->
-<template>
-  <div class="icon-body">
-    <el-input
-      v-model="name"
-      style="position: relative;color: #333;"
-      clearable
-      placeholder="璇疯緭鍏ュ浘鏍囧悕绉�"
-      @clear="filterIcons"
-      @input.native="filterIcons"
-    >
-      <i slot="suffix" class="el-icon-search el-input__icon" />
-    </el-input>
-    <div class="icon-list">
-      <div
-        v-for="(item, index) in iconList"
-        :key="index"
-        @click="selectedIcon(item)"
-      >
-        <svg-icon :icon-class="item" style="height: 30px;width: 16px;" />
-        <span>{{ item }}</span>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import icons from "./requireIcons";
-export default {
-  name: "IconSelect",
-  data() {
-    return {
-      name: "",
-      iconList: icons
-    };
-  },
-  methods: {
-    filterIcons() {
-      if (this.name) {
-        this.iconList = this.iconList.filter(item => item.includes(this.name));
-      } else {
-        this.iconList = icons;
-      }
-    },
-    selectedIcon(name) {
-      this.$emit("selected", name);
-      document.body.click();
-    },
-    reset() {
-      this.name = "";
-      this.iconList = icons;
-    }
-  }
-};
-</script>
-
-<style rel="stylesheet/scss" lang="scss" scoped>
-.icon-body {
-  width: 100%;
-  padding: 10px;
-  z-index: 999;
-  .icon-list {
-    height: 200px;
-    overflow-y: scroll;
-    div {
-      height: 30px;
-      line-height: 30px;
-      margin-bottom: -5px;
-      cursor: pointer;
-      width: 33%;
-      float: left;
-    }
-    span {
-      display: inline-block;
-      vertical-align: -0.15em;
-      fill: currentColor;
-      overflow: hidden;
-    }
-  }
-  .el-input__inner {
-    color: #333;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/components/IconSelect/requireIcons.js b/energy_management_ui/src/components/IconSelect/requireIcons.js
deleted file mode 100644
index 99e5c54..0000000
--- a/energy_management_ui/src/components/IconSelect/requireIcons.js
+++ /dev/null
@@ -1,11 +0,0 @@
-
-const req = require.context('../../assets/icons/svg', false, /\.svg$/)
-const requireAll = requireContext => requireContext.keys()
-
-const re = /\.\/(.*)\.svg/
-
-const icons = requireAll(req).map(i => {
-  return i.match(re)[1]
-})
-
-export default icons
diff --git a/energy_management_ui/src/components/Pagination/index.vue b/energy_management_ui/src/components/Pagination/index.vue
deleted file mode 100644
index c332383..0000000
--- a/energy_management_ui/src/components/Pagination/index.vue
+++ /dev/null
@@ -1,108 +0,0 @@
-<template>
-  <div :class="{ hidden: hidden }" class="pagination-container">
-    <el-pagination
-      :background="background"
-      :current-page.sync="currentPage"
-      :page-size.sync="pageSize"
-      :layout="layout"
-      :page-sizes="pageSizes"
-      :total="total"
-      v-bind="$attrs"
-      @size-change="handleSizeChange"
-      @current-change="handleCurrentChange"
-    />
-  </div>
-</template>
-
-<script>
-import { scrollTo } from "@/utils/scroll-to";
-
-export default {
-  name: "Pagination",
-  props: {
-    total: {
-      required: true,
-      type: Number
-    },
-    page: {
-      type: Number,
-      default: 1
-    },
-    limit: {
-      type: Number,
-      default: 20
-    },
-    pageSizes: {
-      type: Array,
-      default() {
-        return [10, 20, 30, 50];
-      }
-    },
-    layout: {
-      type: String,
-      default: "total, sizes, prev, pager, next, jumper"
-    },
-    background: {
-      type: Boolean,
-      default: true
-    },
-    autoScroll: {
-      type: Boolean,
-      default: true
-    },
-    hidden: {
-      type: Boolean,
-      default: false
-    }
-  },
-  computed: {
-    currentPage: {
-      get() {
-        return this.page;
-      },
-      set(val) {
-        this.$emit("update:page", val);
-      }
-    },
-    pageSize: {
-      get() {
-        return this.limit;
-      },
-      set(val) {
-        this.$emit("update:limit", val);
-      }
-    }
-  },
-  methods: {
-    handleSizeChange(val) {
-      this.$emit("pagination", { page: this.currentPage, limit: val });
-      if (this.autoScroll) {
-        scrollTo(0, 800);
-      }
-    },
-    handleCurrentChange(val) {
-      this.$emit("pagination", { page: val, limit: this.pageSize });
-      if (this.autoScroll) {
-        scrollTo(0, 800);
-      }
-    }
-  }
-};
-</script>
-
-<style scoped>
-.pagination-container {
-  background: transparent;
-  padding: 12px 20px;
-  position: relative;
-}
-.pagination-container.hidden {
-  display: none;
-}
-.el-pagination__total {
-  color: #fff !important;
-}
-.el-pagination__jump {
-  color: #fff;
-}
-</style>
diff --git a/energy_management_ui/src/components/PanThumb/index.vue b/energy_management_ui/src/components/PanThumb/index.vue
deleted file mode 100644
index 1bcf417..0000000
--- a/energy_management_ui/src/components/PanThumb/index.vue
+++ /dev/null
@@ -1,142 +0,0 @@
-<template>
-  <div :style="{zIndex:zIndex,height:height,width:width}" class="pan-item">
-    <div class="pan-info">
-      <div class="pan-info-roles-container">
-        <slot />
-      </div>
-    </div>
-    <!-- eslint-disable-next-line -->
-    <div :style="{backgroundImage: `url(${image})`}" class="pan-thumb"></div>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'PanThumb',
-  props: {
-    image: {
-      type: String,
-      required: true
-    },
-    zIndex: {
-      type: Number,
-      default: 1
-    },
-    width: {
-      type: String,
-      default: '150px'
-    },
-    height: {
-      type: String,
-      default: '150px'
-    }
-  }
-}
-</script>
-
-<style scoped>
-.pan-item {
-  width: 200px;
-  height: 200px;
-  border-radius: 50%;
-  display: inline-block;
-  position: relative;
-  cursor: default;
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
-}
-
-.pan-info-roles-container {
-  padding: 20px;
-  text-align: center;
-}
-
-.pan-thumb {
-  width: 100%;
-  height: 100%;
-  background-position: center center;
-  background-size: cover;
-  border-radius: 50%;
-  overflow: hidden;
-  position: absolute;
-  transform-origin: 95% 40%;
-  transition: all 0.3s ease-in-out;
-}
-
-/* .pan-thumb:after {
-  content: '';
-  width: 8px;
-  height: 8px;
-  position: absolute;
-  border-radius: 50%;
-  top: 40%;
-  left: 95%;
-  margin: -4px 0 0 -4px;
-  background: radial-gradient(ellipse at center, rgba(14, 14, 14, 1) 0%, rgba(125, 126, 125, 1) 100%);
-  box-shadow: 0 0 1px rgba(255, 255, 255, 0.9);
-} */
-
-.pan-info {
-  position: absolute;
-  width: inherit;
-  height: inherit;
-  border-radius: 50%;
-  overflow: hidden;
-  box-shadow: inset 0 0 0 5px rgba(0, 0, 0, 0.05);
-}
-
-.pan-info h3 {
-  color: #fff;
-  text-transform: uppercase;
-  position: relative;
-  letter-spacing: 2px;
-  font-size: 18px;
-  margin: 0 60px;
-  padding: 22px 0 0 0;
-  height: 85px;
-  font-family: 'Open Sans', Arial, sans-serif;
-  text-shadow: 0 0 1px #fff, 0 1px 2px rgba(0, 0, 0, 0.3);
-}
-
-.pan-info p {
-  color: #fff;
-  padding: 10px 5px;
-  font-style: italic;
-  margin: 0 30px;
-  font-size: 12px;
-  border-top: 1px solid rgba(255, 255, 255, 0.5);
-}
-
-.pan-info p a {
-  display: block;
-  color: #333;
-  width: 80px;
-  height: 80px;
-  background: rgba(255, 255, 255, 0.3);
-  border-radius: 50%;
-  color: #fff;
-  font-style: normal;
-  font-weight: 700;
-  text-transform: uppercase;
-  font-size: 9px;
-  letter-spacing: 1px;
-  padding-top: 24px;
-  margin: 7px auto 0;
-  font-family: 'Open Sans', Arial, sans-serif;
-  opacity: 0;
-  transition: transform 0.3s ease-in-out 0.2s, opacity 0.3s ease-in-out 0.2s, background 0.2s linear 0s;
-  transform: translateX(60px) rotate(90deg);
-}
-
-.pan-info p a:hover {
-  background: rgba(255, 255, 255, 0.5);
-}
-
-.pan-item:hover .pan-thumb {
-  transform: rotate(-110deg);
-}
-
-.pan-item:hover .pan-info p a {
-  opacity: 1;
-  transform: translateX(0px) rotate(0deg);
-}
-</style>
diff --git a/energy_management_ui/src/components/RightPanel/index.vue b/energy_management_ui/src/components/RightPanel/index.vue
deleted file mode 100644
index fbf27eb..0000000
--- a/energy_management_ui/src/components/RightPanel/index.vue
+++ /dev/null
@@ -1,149 +0,0 @@
-<template>
-  <div ref="rightPanel" :class="{show:show}" class="rightPanel-container">
-    <div class="rightPanel-background" />
-    <div class="rightPanel">
-      <div class="rightPanel-items">
-        <slot />
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import { addClass, removeClass } from '@/utils'
-
-export default {
-  name: 'RightPanel',
-  props: {
-    clickNotClose: {
-      default: false,
-      type: Boolean
-    },
-    buttonTop: {
-      default: 250,
-      type: Number
-    }
-  },
-  computed: {
-    show: {
-      get() {
-        return this.$store.state.settings.showSettings
-      },
-      set(val) {
-        this.$store.dispatch('settings/changeSetting', {
-          key: 'showSettings',
-          value: val
-        })
-      }
-    },
-    theme() {
-      return this.$store.state.settings.theme
-    },
-  },
-  watch: {
-    show(value) {
-      if (value && !this.clickNotClose) {
-        this.addEventClick()
-      }
-      if (value) {
-        addClass(document.body, 'showRightPanel')
-      } else {
-        removeClass(document.body, 'showRightPanel')
-      }
-    }
-  },
-  mounted() {
-    this.insertToBody()
-    this.addEventClick()
-  },
-  beforeDestroy() {
-    const elx = this.$refs.rightPanel
-    elx.remove()
-  },
-  methods: {
-    addEventClick() {
-      window.addEventListener('click', this.closeSidebar)
-    },
-    closeSidebar(evt) {
-      const parent = evt.target.closest('.rightPanel')
-      if (!parent) {
-        this.show = false
-        window.removeEventListener('click', this.closeSidebar)
-      }
-    },
-    insertToBody() {
-      const elx = this.$refs.rightPanel
-      const body = document.querySelector('body')
-      body.insertBefore(elx, body.firstChild)
-    }
-  }
-}
-</script>
-
-<style>
-.showRightPanel {
-  overflow: hidden;
-  position: relative;
-  width: calc(100% - 15px);
-}
-</style>
-
-<style lang="scss" scoped>
-.rightPanel-background {
-  position: fixed;
-  top: 0;
-  left: 0;
-  opacity: 0;
-  transition: opacity .3s cubic-bezier(.7, .3, .1, 1);
-  background: rgba(0, 0, 0, .2);
-  z-index: -1;
-}
-
-.rightPanel {
-  width: 100%;
-  max-width: 260px;
-  height: 100vh;
-  position: fixed;
-  top: 0;
-  right: 0;
-  box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, .05);
-  transition: all .25s cubic-bezier(.7, .3, .1, 1);
-  transform: translate(100%);
-  background: #fff;
-  z-index: 40000;
-}
-
-.show {
-  transition: all .3s cubic-bezier(.7, .3, .1, 1);
-
-  .rightPanel-background {
-    z-index: 20000;
-    opacity: 1;
-    width: 100%;
-    height: 100%;
-  }
-
-  .rightPanel {
-    transform: translate(0);
-  }
-}
-
-.handle-button {
-  width: 48px;
-  height: 48px;
-  position: absolute;
-  left: -48px;
-  text-align: center;
-  font-size: 24px;
-  border-radius: 6px 0 0 6px !important;
-  z-index: 0;
-  pointer-events: auto;
-  cursor: pointer;
-  color: #fff;
-  line-height: 48px;
-  i {
-    font-size: 24px;
-    line-height: 48px;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/components/RuoYi/index.vue b/energy_management_ui/src/components/RuoYi/index.vue
deleted file mode 100644
index 3f541d1..0000000
--- a/energy_management_ui/src/components/RuoYi/index.vue
+++ /dev/null
@@ -1,21 +0,0 @@
-<template>
-  <div>
-    <svg-icon icon-class="download" @click="handleDownload"/>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'RuoYi',
-  data() {
-    return {
-      url: 'https://gitee.com/y_project/RuoYi-Vue'
-    }
-  },
-  methods: {
-    handleDownload() {
-      window.open(this.url)
-    }
-  }
-}
-</script>
\ No newline at end of file
diff --git a/energy_management_ui/src/components/Screenfull/index.vue b/energy_management_ui/src/components/Screenfull/index.vue
deleted file mode 100644
index 260c90d..0000000
--- a/energy_management_ui/src/components/Screenfull/index.vue
+++ /dev/null
@@ -1,60 +0,0 @@
-<template>
-  <div>
-    <svg-icon :icon-class="isFullscreen?'exit-fullscreen':'fullscreen'" @click="click" />
-  </div>
-</template>
-
-<script>
-import screenfull from 'screenfull'
-
-export default {
-  name: 'Screenfull',
-  data() {
-    return {
-      isFullscreen: false
-    }
-  },
-  mounted() {
-    this.init()
-  },
-  beforeDestroy() {
-    this.destroy()
-  },
-  methods: {
-    click() {
-      if (!screenfull.enabled) {
-        this.$message({
-          message: 'you browser can not work',
-          type: 'warning'
-        })
-        return false
-      }
-      screenfull.toggle()
-    },
-    change() {
-      this.isFullscreen = screenfull.isFullscreen
-    },
-    init() {
-      if (screenfull.enabled) {
-        screenfull.on('change', this.change)
-      }
-    },
-    destroy() {
-      if (screenfull.enabled) {
-        screenfull.off('change', this.change)
-      }
-    }
-  }
-}
-</script>
-
-<style scoped>
-.screenfull-svg {
-  display: inline-block;
-  cursor: pointer;
-  fill: #5a5e66;;
-  width: 20px;
-  height: 20px;
-  vertical-align: 10px;
-}
-</style>
diff --git a/energy_management_ui/src/components/SizeSelect/index.vue b/energy_management_ui/src/components/SizeSelect/index.vue
deleted file mode 100644
index e88065b..0000000
--- a/energy_management_ui/src/components/SizeSelect/index.vue
+++ /dev/null
@@ -1,57 +0,0 @@
-<template>
-  <el-dropdown trigger="click" @command="handleSetSize">
-    <div>
-      <svg-icon class-name="size-icon" icon-class="size" />
-    </div>
-    <el-dropdown-menu slot="dropdown">
-      <el-dropdown-item v-for="item of sizeOptions" :key="item.value" :disabled="size===item.value" :command="item.value">
-        {{
-          item.label }}
-      </el-dropdown-item>
-    </el-dropdown-menu>
-  </el-dropdown>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      sizeOptions: [
-        { label: 'Default', value: 'default' },
-        { label: 'Medium', value: 'medium' },
-        { label: 'Small', value: 'small' },
-        { label: 'Mini', value: 'mini' }
-      ]
-    }
-  },
-  computed: {
-    size() {
-      return this.$store.getters.size
-    }
-  },
-  methods: {
-    handleSetSize(size) {
-      this.$ELEMENT.size = size
-      this.$store.dispatch('app/setSize', size)
-      this.refreshView()
-      this.$message({
-        message: 'Switch Size Success',
-        type: 'success'
-      })
-    },
-    refreshView() {
-      // In order to make the cached page re-rendered
-      this.$store.dispatch('tagsView/delAllCachedViews', this.$route)
-
-      const { fullPath } = this.$route
-
-      this.$nextTick(() => {
-        this.$router.replace({
-          path: '/redirect' + fullPath
-        })
-      })
-    }
-  }
-
-}
-</script>
diff --git a/energy_management_ui/src/components/SvgIcon/index.vue b/energy_management_ui/src/components/SvgIcon/index.vue
deleted file mode 100644
index e4bf5ad..0000000
--- a/energy_management_ui/src/components/SvgIcon/index.vue
+++ /dev/null
@@ -1,61 +0,0 @@
-<template>
-  <div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" />
-  <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners">
-    <use :xlink:href="iconName" />
-  </svg>
-</template>
-
-<script>
-import { isExternal } from '@/utils/validate'
-
-export default {
-  name: 'SvgIcon',
-  props: {
-    iconClass: {
-      type: String,
-      required: true
-    },
-    className: {
-      type: String,
-      default: ''
-    }
-  },
-  computed: {
-    isExternal() {
-      return isExternal(this.iconClass)
-    },
-    iconName() {
-      return `#icon-${this.iconClass}`
-    },
-    svgClass() {
-      if (this.className) {
-        return 'svg-icon ' + this.className
-      } else {
-        return 'svg-icon'
-      }
-    },
-    styleExternalIcon() {
-      return {
-        mask: `url(${this.iconClass}) no-repeat 50% 50%`,
-        '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`
-      }
-    }
-  }
-}
-</script>
-
-<style scoped>
-.svg-icon {
-  width: 1em;
-  height: 1em;
-  vertical-align: -0.15em;
-  fill: currentColor;
-  overflow: hidden;
-}
-
-.svg-external-icon {
-  background-color: currentColor;
-  mask-size: cover!important;
-  display: inline-block;
-}
-</style>
diff --git a/energy_management_ui/src/components/ThemePicker/index.vue b/energy_management_ui/src/components/ThemePicker/index.vue
deleted file mode 100644
index a984004..0000000
--- a/energy_management_ui/src/components/ThemePicker/index.vue
+++ /dev/null
@@ -1,198 +0,0 @@
-<template>
-  <el-color-picker
-    v-model="theme"
-    :predefine="[
-      '#409EFF',
-      '#38BCBF',
-      '#304156',
-      '#212121',
-      '#11a983',
-      '#13c2c2',
-      '#6959CD',
-      '#f5222d'
-    ]"
-    class="theme-picker"
-    popper-class="theme-picker-dropdown"
-  />
-</template>
-
-<script>
-const version = require("element-ui/package.json").version; // element-ui version from node_modules
-const ORIGINAL_THEME = "#409EFF"; // default color
-
-export default {
-  data() {
-    return {
-      chalk: "", // content of theme-chalk css
-      theme: ""
-    };
-  },
-  computed: {
-    defaultTheme() {
-      return this.$store.state.settings.theme;
-    }
-  },
-  watch: {
-    defaultTheme: {
-      handler: function(val, oldVal) {
-        this.theme = val;
-      },
-      immediate: true
-    },
-    async theme(val) {
-      const oldVal = this.chalk ? this.theme : ORIGINAL_THEME;
-      if (typeof val !== "string") return;
-      const themeCluster = this.getThemeCluster(val.replace("#", ""));
-      const originalCluster = this.getThemeCluster(oldVal.replace("#", ""));
-      console.log(themeCluster, originalCluster);
-
-      const $message = this.$message({
-        message: "  Compiling the theme",
-        customClass: "theme-message",
-        type: "success",
-        duration: 0,
-        iconClass: "el-icon-loading"
-      });
-
-      const getHandler = (variable, id) => {
-        return () => {
-          const originalCluster = this.getThemeCluster(
-            ORIGINAL_THEME.replace("#", "")
-          );
-          const newStyle = this.updateStyle(
-            this[variable],
-            originalCluster,
-            themeCluster
-          );
-
-          let styleTag = document.getElementById(id);
-          if (!styleTag) {
-            styleTag = document.createElement("style");
-            styleTag.setAttribute("id", id);
-            document.head.appendChild(styleTag);
-          }
-          styleTag.innerText = newStyle;
-        };
-      };
-
-      if (!this.chalk) {
-        const url = `https://unpkg.com/element-ui@${version}/lib/theme-chalk/index.css`;
-        await this.getCSSString(url, "chalk");
-      }
-
-      const chalkHandler = getHandler("chalk", "chalk-style");
-
-      chalkHandler();
-
-      const styles = [].slice
-        .call(document.querySelectorAll("style"))
-        .filter(style => {
-          const text = style.innerText;
-          return (
-            new RegExp(oldVal, "i").test(text) && !/Chalk Variables/.test(text)
-          );
-        });
-      styles.forEach(style => {
-        const { innerText } = style;
-        if (typeof innerText !== "string") return;
-        style.innerText = this.updateStyle(
-          innerText,
-          originalCluster,
-          themeCluster
-        );
-      });
-
-      this.$emit("change", val);
-
-      $message.close();
-    }
-  },
-
-  methods: {
-    updateStyle(style, oldCluster, newCluster) {
-      let newStyle = style;
-      oldCluster.forEach((color, index) => {
-        newStyle = newStyle.replace(new RegExp(color, "ig"), newCluster[index]);
-      });
-      return newStyle;
-    },
-
-    getCSSString(url, variable) {
-      return new Promise(resolve => {
-        const xhr = new XMLHttpRequest();
-        xhr.onreadystatechange = () => {
-          if (xhr.readyState === 4 && xhr.status === 200) {
-            this[variable] = xhr.responseText.replace(/@font-face{[^}]+}/, "");
-            resolve();
-          }
-        };
-        xhr.open("GET", url);
-        xhr.send();
-      });
-    },
-
-    getThemeCluster(theme) {
-      const tintColor = (color, tint) => {
-        let red = parseInt(color.slice(0, 2), 16);
-        let green = parseInt(color.slice(2, 4), 16);
-        let blue = parseInt(color.slice(4, 6), 16);
-
-        if (tint === 0) {
-          // when primary color is in its rgb space
-          return [red, green, blue].join(",");
-        } else {
-          red += Math.round(tint * (255 - red));
-          green += Math.round(tint * (255 - green));
-          blue += Math.round(tint * (255 - blue));
-
-          red = red.toString(16);
-          green = green.toString(16);
-          blue = blue.toString(16);
-
-          return `#${red}${green}${blue}`;
-        }
-      };
-
-      const shadeColor = (color, shade) => {
-        let red = parseInt(color.slice(0, 2), 16);
-        let green = parseInt(color.slice(2, 4), 16);
-        let blue = parseInt(color.slice(4, 6), 16);
-
-        red = Math.round((1 - shade) * red);
-        green = Math.round((1 - shade) * green);
-        blue = Math.round((1 - shade) * blue);
-
-        red = red.toString(16);
-        green = green.toString(16);
-        blue = blue.toString(16);
-
-        return `#${red}${green}${blue}`;
-      };
-
-      const clusters = [theme];
-      for (let i = 0; i <= 9; i++) {
-        clusters.push(tintColor(theme, Number((i / 10).toFixed(2))));
-      }
-      clusters.push(shadeColor(theme, 0.1));
-      return clusters;
-    }
-  }
-};
-</script>
-
-<style>
-.theme-message,
-.theme-picker-dropdown {
-  z-index: 99999 !important;
-}
-
-.theme-picker .el-color-picker__trigger {
-  height: 26px !important;
-  width: 26px !important;
-  padding: 2px;
-}
-
-.theme-picker-dropdown .el-color-dropdown__link-btn {
-  display: none;
-}
-</style>
diff --git a/energy_management_ui/src/components/common/basic-container.vue b/energy_management_ui/src/components/common/basic-container.vue
deleted file mode 100644
index 7f009ef..0000000
--- a/energy_management_ui/src/components/common/basic-container.vue
+++ /dev/null
@@ -1,97 +0,0 @@
-<template>
-  <div
-    class="basic-container"
-    :style="styleName"
-    :class="{ 'basic-container--block': block }"
-  >
-    <el-card class="basic-container__card" :body-style="bodyStyle">
-      <template #header v-if="!!title">
-        <div class="card-header">
-          <span>{{ title }}</span>
-        </div>
-      </template>
-      <slot></slot>
-    </el-card>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "basicContainer",
-  props: {
-    radius: {
-      type: [String, Number],
-      default: 10
-    },
-    background: {
-      type: String
-    },
-    block: {
-      type: Boolean,
-      default: false
-    },
-    title: {
-      type: String,
-      default: ""
-    },
-    bodyStyle: {
-      type: Object
-    }
-  },
-  computed: {
-    styleName() {
-      return {
-        background: this.background
-      };
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-@import "~@/assets/styles/variables.scss";
-.basic-container {
-  height: 100%;
-  box-sizing: border-box;
-  // margin-bottom: 5px;
-
-  .card-header {
-    font-weight: 500;
-    color: #a3cbff;
-    position: relative;
-    padding-left: 10px;
-
-    &::after {
-      content: "";
-      position: absolute;
-      display: block;
-      width: 4px;
-      height: 16px;
-      background-color: $primary-color;
-      border-radius: 3px;
-      top: 2px;
-      left: 0;
-    }
-  }
-
-  &--block {
-    height: 100%;
-
-    .basic-container__card {
-      height: 100%;
-    }
-  }
-
-  &__card {
-    width: 100%;
-  }
-
-  &:first-child {
-    padding-top: 0;
-  }
-}
-
-// .basic-container:first-child {
-//   margin-top: 5px;
-// }
-</style>
diff --git a/energy_management_ui/src/components/shrink/index.vue b/energy_management_ui/src/components/shrink/index.vue
deleted file mode 100644
index af6c557..0000000
--- a/energy_management_ui/src/components/shrink/index.vue
+++ /dev/null
@@ -1,42 +0,0 @@
-<template>
-  <el-col class="shrink-col">
-    <div class="click-img">
-      <img
-        src="~@/assets/image/rectangle.png"
-        alt=""
-        style="transform:rotate(180deg)"
-        @click="toggleCollapse"
-      />
-    </div>
-  </el-col>
-</template>
-
-<script>
-export default {
-  methods: {
-    toggleCollapse() {
-      this.$emit("toggleCollapse");
-    }
-  }
-};
-</script>
-
-<style scoped lang="scss">
-.shrink-col {
-  width: 48px;
-  background: #09256b;
-  margin: 0 12px 0 0;
-  box-sizing: border-box;
-  box-shadow: 0 2px 12px 0 #0000001a;
-  padding-top: 22px;
-  border-radius: 4px;
-
-  .click-img {
-    text-align: center;
-
-    img {
-      cursor: pointer;
-    }
-  }
-}
-</style>
diff --git a/energy_management_ui/src/directive/permission/hasPermi.js b/energy_management_ui/src/directive/permission/hasPermi.js
deleted file mode 100644
index d7107ce..0000000
--- a/energy_management_ui/src/directive/permission/hasPermi.js
+++ /dev/null
@@ -1,28 +0,0 @@
- /**
- * 鎿嶄綔鏉冮檺澶勭悊
- * Copyright (c) 2019 ruoyi
- */
- 
-import store from '@/store'
-
-export default {
-  inserted(el, binding, vnode) {
-    const { value } = binding
-    const all_permission = "*:*:*";
-    const permissions = store.getters && store.getters.permissions
-
-    if (value && value instanceof Array && value.length > 0) {
-      const permissionFlag = value
-
-      const hasPermissions = permissions.some(permission => {
-        return all_permission === permission || permissionFlag.includes(permission)
-      })
-
-      if (!hasPermissions) {
-        el.parentNode && el.parentNode.removeChild(el)
-      }
-    } else {
-      throw new Error(`璇疯缃搷浣滄潈闄愭爣绛惧�糮)
-    }
-  }
-}
diff --git a/energy_management_ui/src/directive/permission/hasRole.js b/energy_management_ui/src/directive/permission/hasRole.js
deleted file mode 100644
index 1303809..0000000
--- a/energy_management_ui/src/directive/permission/hasRole.js
+++ /dev/null
@@ -1,28 +0,0 @@
- /**
- * 瑙掕壊鏉冮檺澶勭悊
- * Copyright (c) 2019 ruoyi
- */
- 
-import store from '@/store'
-
-export default {
-  inserted(el, binding, vnode) {
-    const { value } = binding
-    const super_admin = "admin";
-    const roles = store.getters && store.getters.roles
-
-    if (value && value instanceof Array && value.length > 0) {
-      const roleFlag = value
-
-      const hasRole = roles.some(role => {
-        return super_admin === role || roleFlag.includes(role)
-      })
-
-      if (!hasRole) {
-        el.parentNode && el.parentNode.removeChild(el)
-      }
-    } else {
-      throw new Error(`璇疯缃鑹叉潈闄愭爣绛惧��"`)
-    }
-  }
-}
diff --git a/energy_management_ui/src/directive/permission/index.js b/energy_management_ui/src/directive/permission/index.js
deleted file mode 100644
index e3d76d3..0000000
--- a/energy_management_ui/src/directive/permission/index.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import hasRole from './hasRole'
-import hasPermi from './hasPermi'
-
-const install = function(Vue) {
-  Vue.directive('hasRole', hasRole)
-  Vue.directive('hasPermi', hasPermi)
-}
-
-if (window.Vue) {
-  window['hasRole'] = hasRole
-  window['hasPermi'] = hasPermi
-  Vue.use(install); // eslint-disable-line
-}
-
-export default install
diff --git a/energy_management_ui/src/layout/RouteView.vue b/energy_management_ui/src/layout/RouteView.vue
deleted file mode 100644
index 98240ae..0000000
--- a/energy_management_ui/src/layout/RouteView.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-<template>
-  <router-view />
-</template>
diff --git a/energy_management_ui/src/layout/components/AppMain.vue b/energy_management_ui/src/layout/components/AppMain.vue
deleted file mode 100644
index a4e7854..0000000
--- a/energy_management_ui/src/layout/components/AppMain.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-<template>
-  <section class="app-main">
-    <transition name="fade-transform" mode="out-in">
-      <keep-alive :include="cachedViews">
-        <router-view :key="key" />
-      </keep-alive>
-    </transition>
-  </section>
-</template>
-
-<script>
-export default {
-  name: "AppMain",
-  computed: {
-    cachedViews() {
-      return this.$store.state.tagsView.cachedViews;
-    },
-    key() {
-      return this.$route.path;
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-@import "~@/assets/styles/variables.scss";
-.app-main {
-  /* 50= navbar  50  */
-  min-height: calc(100vh - 160px - #{$tabBarHeight});
-  width: 100%;
-  position: relative;
-  overflow: hidden;
-  padding: 12px;
-}
-
-.fixed-header + .app-main {
-  padding-top: 50px;
-}
-
-.hasTagsView {
-  .app-main {
-    /* 84 = navbar + tags-view = 50 + 34 */
-    min-height: calc(100vh - 84px - #{$tabBarHeight});
-  }
-
-  .fixed-header + .app-main {
-    padding-top: 106px;
-  }
-}
-</style>
-
-<style lang="scss">
-// fix css style bug in open el-dialog
-.el-popup-parent--hidden {
-  .fixed-header {
-    padding-right: 15px;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/layout/components/Navbar.vue b/energy_management_ui/src/layout/components/Navbar.vue
deleted file mode 100644
index 9f5b030..0000000
--- a/energy_management_ui/src/layout/components/Navbar.vue
+++ /dev/null
@@ -1,187 +0,0 @@
-<template>
-  <div class="navbar">
-    <hamburger
-      id="hamburger-container"
-      :is-active="sidebar.opened"
-      class="hamburger-container"
-      @toggleClick="toggleSideBar"
-    />
-    <div class="right-menu">
-      <el-dropdown
-        class="avatar-container right-menu-item hover-effect"
-        trigger="click"
-      >
-        <div class="avatar-wrapper">
-          <img src="@/assets/image/touxiang.png" class="user-avatar" />
-          <span style="color: white;font-size: 16px;margin: 0 0 0 12px">{{
-            name || "- -"
-          }}</span>
-          <img
-            src="@/assets/image/navbar/xiala.png"
-            style="width: 10px;margin: 3px 0 0 5px"
-          />
-        </div>
-        <el-dropdown-menu slot="dropdown">
-          <router-link to="/user/profile">
-            <el-dropdown-item>涓汉涓績</el-dropdown-item>
-          </router-link>
-        </el-dropdown-menu>
-      </el-dropdown>
-      <img
-        src="@/assets/image/navbar/exit.png"
-        class="exit-img"
-        @click="logout"
-      />
-    </div>
-  </div>
-</template>
-
-<script>
-import { mapGetters } from "vuex";
-import Breadcrumb from "@/components/Breadcrumb";
-import Hamburger from "@/components/Hamburger";
-import Screenfull from "@/components/Screenfull";
-import SizeSelect from "@/components/SizeSelect";
-import Search from "@/components/HeaderSearch";
-import RuoYi from "@/components/RuoYi";
-
-export default {
-  components: {
-    Breadcrumb,
-    Hamburger,
-    Screenfull,
-    SizeSelect,
-    Search,
-    RuoYi
-  },
-  computed: {
-    ...mapGetters(["sidebar", "device"]),
-    setting: {
-      get() {
-        return this.$store.state.settings.showSettings;
-      },
-      set(val) {
-        this.$store.dispatch("settings/changeSetting", {
-          key: "showSettings",
-          value: val
-        });
-      }
-    },
-    name() {
-      return this.$store.state.user.name;
-    }
-  },
-  methods: {
-    toggleSideBar() {
-      this.$store.dispatch("app/toggleSideBar");
-    },
-    async logout() {
-      this.$confirm("纭畾娉ㄩ攢骞堕��鍑虹郴缁熷悧锛�", "鎻愮ず", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(() => {
-        this.$store.dispatch("LogOut").then(() => {
-          location.reload();
-        });
-      });
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.navbar {
-  height: 64px;
-  overflow: hidden;
-  position: relative;
-  background: #001233;
-  box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
-  border-bottom: 1px solid #061844;
-
-  .hamburger-container {
-    line-height: 64px;
-    height: 100%;
-    float: left;
-    cursor: pointer;
-    transition: background 0.3s;
-    -webkit-tap-highlight-color: transparent;
-
-    &:hover {
-      background: rgba(0, 0, 0, 0.025);
-    }
-  }
-
-  .breadcrumb-container {
-    float: left;
-  }
-
-  .errLog-container {
-    display: inline-block;
-    vertical-align: top;
-  }
-
-  .right-menu {
-    float: right;
-    height: 100%;
-    display: flex;
-    align-items: center;
-    &:focus {
-      outline: none;
-    }
-
-    .exit-img {
-      margin-right: 30px;
-      cursor: pointer;
-      &:hover {
-        background: rgba(0, 0, 0, 0.025);
-      }
-    }
-
-    .right-menu-item {
-      display: inline-block;
-      padding: 0 8px;
-      height: 100%;
-      font-size: 18px;
-      color: #5a5e66;
-      display: flex;
-      justify-content: center;
-
-      &.hover-effect {
-        cursor: pointer;
-        transition: background 0.3s;
-
-        &:hover {
-          background: rgba(0, 0, 0, 0.025);
-        }
-      }
-    }
-
-    .avatar-container {
-      margin-right: 30px;
-
-      .avatar-wrapper {
-        // margin-top: 5px;
-        position: relative;
-        display: flex;
-        align-items: center;
-
-        .user-avatar {
-          cursor: pointer;
-          width: 35px;
-          border-radius: 10px;
-        }
-
-        .el-icon-caret-bottom {
-          cursor: pointer;
-          position: absolute;
-          right: -20px;
-          color: white;
-          top: 25px;
-          font-size: 12px;
-        }
-      }
-    }
-  }
-}
-</style>
diff --git a/energy_management_ui/src/layout/components/Sidebar/FixiOSBug.js b/energy_management_ui/src/layout/components/Sidebar/FixiOSBug.js
deleted file mode 100644
index 6823726..0000000
--- a/energy_management_ui/src/layout/components/Sidebar/FixiOSBug.js
+++ /dev/null
@@ -1,25 +0,0 @@
-export default {
-  computed: {
-    device() {
-      return this.$store.state.app.device
-    }
-  },
-  mounted() {
-    // In order to fix the click on menu on the ios device will trigger the mouseleave bug
-    this.fixBugIniOS()
-  },
-  methods: {
-    fixBugIniOS() {
-      const $subMenu = this.$refs.subMenu
-      if ($subMenu) {
-        const handleMouseleave = $subMenu.handleMouseleave
-        $subMenu.handleMouseleave = (e) => {
-          if (this.device === 'mobile') {
-            return
-          }
-          handleMouseleave(e)
-        }
-      }
-    }
-  }
-}
diff --git a/energy_management_ui/src/layout/components/Sidebar/Item.vue b/energy_management_ui/src/layout/components/Sidebar/Item.vue
deleted file mode 100644
index b515f61..0000000
--- a/energy_management_ui/src/layout/components/Sidebar/Item.vue
+++ /dev/null
@@ -1,29 +0,0 @@
-<script>
-export default {
-  name: 'MenuItem',
-  functional: true,
-  props: {
-    icon: {
-      type: String,
-      default: ''
-    },
-    title: {
-      type: String,
-      default: ''
-    }
-  },
-  render(h, context) {
-    const { icon, title } = context.props
-    const vnodes = []
-
-    if (icon) {
-      vnodes.push(<svg-icon icon-class={icon}/>)
-    }
-
-    if (title) {
-      vnodes.push(<span slot='title'>{(title)}</span>)
-    }
-    return vnodes
-  }
-}
-</script>
diff --git a/energy_management_ui/src/layout/components/Sidebar/Link.vue b/energy_management_ui/src/layout/components/Sidebar/Link.vue
deleted file mode 100644
index c88adc1..0000000
--- a/energy_management_ui/src/layout/components/Sidebar/Link.vue
+++ /dev/null
@@ -1,47 +0,0 @@
-
-<template>
-  <!-- eslint-disable vue/require-component-is -->
-  <component v-bind="linkProps(to,menuNode)">
-    <slot />
-  </component>
-</template>
-
-<script>
-import { isExternal } from '@/utils/validate'
-
-export default {
-  props: {
-    to: {
-      type: String,
-      required: true
-    },
-    menuNode:{}
-  },
-  methods: {
-    linkProps(url,menuNode) {
-      if (isExternal(url)) {
-        return {
-          is: 'a',
-          href: url,
-          target: '_blank',
-          rel: 'noopener'
-        }
-      }
-      if(menuNode.pageQueryParameter==null || menuNode.pageQueryParameter==undefined ||menuNode.pageQueryParameter=="")
-      {
-        return {
-          is: 'router-link',
-          to: url
-        }
-      }else {
-        let queryParaObj = JSON.parse(menuNode.pageQueryParameter);
-        return {
-          is: 'router-link',
-          // to: {name:menuNode.name, params:queryParaObj}
-          to: {path:url, query:queryParaObj}
-        }
-      }
-    }
-  }
-}
-</script>
diff --git a/energy_management_ui/src/layout/components/Sidebar/Logo.vue b/energy_management_ui/src/layout/components/Sidebar/Logo.vue
deleted file mode 100644
index 30ddeb0..0000000
--- a/energy_management_ui/src/layout/components/Sidebar/Logo.vue
+++ /dev/null
@@ -1,124 +0,0 @@
-<template>
-  <div class="sidebar-logo-container" :class="{ collapse: collapse }">
-    <transition name="sidebarLogoFade">
-      <router-link
-        v-if="collapse"
-        key="expand"
-        class="sidebar-logo-link-collapse"
-        to="/"
-      >
-        <div class="collapse-logo">
-          <img
-            v-if="logoImg2"
-            :src="logoImg2"
-            style="width: 40px;height: 40px;"
-          />
-        </div>
-      </router-link>
-      <router-link v-else key="expand" class="sidebar-logo-link" to="/">
-        <img v-if="logoImg2" :src="logoImg2" class="sidebar-logo" />
-        {{ title }}
-      </router-link>
-    </transition>
-  </div>
-</template>
-
-<script>
-import { title } from "../../../settings";
-
-import logoImg2 from "@/assets/logo/logo.png";
-
-export default {
-  name: "SidebarLogo",
-  props: {
-    collapse: {
-      type: Boolean,
-      required: true
-    }
-  },
-  data() {
-    return {
-      title: "缁煎悎鑳芥簮绠$悊",
-      logoImg2,
-      logo: "https://www.toray.cn/shared/images/toray_logo_ch.svg"
-      // logoImg2: "http://yunlu.com.cn/template/pc/skin/images/index/u21.png"
-    };
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.sidebarLogoFade-enter-active {
-  transition: opacity 1.5s;
-}
-
-.sidebarLogoFade-enter,
-.sidebarLogoFade-leave-to {
-  opacity: 0;
-}
-
-.sidebar-logo-container {
-  position: relative;
-  width: 100%;
-  height: 64px;
-  line-height: 64px;
-  background: #001233;
-  text-align: center;
-  overflow: hidden;
-  .sidebar-logo-link-collapse {
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    height: 100%;
-    width: 100%;
-    .collapse-logo {
-      display: flex;
-      align-items: center;
-      text-align: center;
-      justify-content: center;
-      height: 100%;
-      width: 100%;
-    }
-  }
-
-  & .sidebar-logo-link {
-    height: 100%;
-    width: 100%;
-    color: #fff;
-    font-weight: 600;
-    font-size: 20px;
-
-    .collapse-logo {
-      display: flex;
-      align-items: center;
-      text-align: center;
-      justify-content: center;
-      height: 100%;
-      width: 100%;
-    }
-
-    & .sidebar-logo {
-      width: 40px;
-      vertical-align: middle;
-      margin-right: 6px;
-    }
-
-    & .sidebar-title {
-      display: inline-block;
-      margin: 0;
-      color: #fff;
-      font-weight: 600;
-      line-height: 50px;
-      font-size: 14px;
-      font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
-      vertical-align: middle;
-    }
-  }
-
-  &.collapse {
-    .sidebar-logo {
-      margin-right: 0px;
-    }
-  }
-}
-</style>
diff --git a/energy_management_ui/src/layout/components/Sidebar/SidebarItem.vue b/energy_management_ui/src/layout/components/Sidebar/SidebarItem.vue
deleted file mode 100644
index 8c71254..0000000
--- a/energy_management_ui/src/layout/components/Sidebar/SidebarItem.vue
+++ /dev/null
@@ -1,128 +0,0 @@
-<template>
-  <div v-if="!item.hidden" class="menu-wrapper">
-    <template
-      v-if="
-        hasOneShowingChild(item.children, item) &&
-          (!onlyOneChild.children || onlyOneChild.noShowingChildren) &&
-          !item.alwaysShow
-      "
-    >
-      <app-link
-        v-if="onlyOneChild.meta"
-        :to="resolvePath(onlyOneChild.path)"
-        :menuNode="resolveParam(onlyOneChild)"
-      >
-        <el-menu-item
-          :index="resolvePath(onlyOneChild.path)"
-          :class="{ 'submenu-title-noDropdown': !isNest }"
-        >
-          <item
-            :icon="onlyOneChild.meta.icon || (item.meta && item.meta.icon)"
-            :title="onlyOneChild.meta.title"
-          />
-        </el-menu-item>
-      </app-link>
-    </template>
-
-    <el-submenu
-      v-else
-      ref="subMenu"
-      :index="resolvePath(item.path)"
-      popper-append-to-body
-    >
-      <template slot="title">
-        <item
-          v-if="item.meta"
-          :icon="item.meta && item.meta.icon"
-          :title="item.meta.title"
-        />
-      </template>
-      <sidebar-item
-        v-for="child in item.children"
-        :key="child.path"
-        :is-nest="true"
-        :item="child"
-        :base-path="resolvePath(child.path)"
-        class="nest-menu"
-      />
-    </el-submenu>
-  </div>
-</template>
-
-<script>
-import path from "path";
-import { isExternal } from "@/utils/validate";
-import Item from "./Item";
-import AppLink from "./Link";
-import FixiOSBug from "./FixiOSBug";
-
-export default {
-  name: "SidebarItem",
-  components: { Item, AppLink },
-  mixins: [FixiOSBug],
-  props: {
-    // route object
-    item: {
-      type: Object,
-      required: true
-    },
-    isNest: {
-      type: Boolean,
-      default: false
-    },
-    basePath: {
-      type: String,
-      default: ""
-    }
-  },
-  data() {
-    this.onlyOneChild = null;
-    return {};
-  },
-  methods: {
-    hasOneShowingChild(children = [], parent) {
-      const showingChildren = children.filter(item => {
-        if (item.hidden) {
-          return false;
-        } else {
-          // Temp set(will be used if only has one showing child)
-          this.onlyOneChild = item;
-          return true;
-        }
-      });
-
-      // When there is only one child router, the child router is displayed by default
-      if (showingChildren.length === 1) {
-        return true;
-      }
-
-      // Show parent if there are no child router to display
-      if (showingChildren.length === 0) {
-        this.onlyOneChild = { ...parent, path: "", noShowingChildren: true };
-        return true;
-      }
-
-      return false;
-    },
-    resolvePath(routePath) {
-      if (isExternal(routePath)) {
-        return routePath;
-      }
-      if (isExternal(this.basePath)) {
-        return this.basePath;
-      }
-      return path.resolve(this.basePath, routePath);
-    },
-    resolveParam(menuNode) {
-      // if(menuNode!=null && menuNode!=undefined && menuNode.pageQueryParameter!=undefined)
-      // {
-      //   return menuNode.pageQueryParameter
-      // }
-      // else {
-      //   return "";
-      // }
-      return menuNode;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/layout/components/Sidebar/index.vue b/energy_management_ui/src/layout/components/Sidebar/index.vue
deleted file mode 100644
index 060f77d..0000000
--- a/energy_management_ui/src/layout/components/Sidebar/index.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-<template>
-  <div :class="{ 'has-logo': showLogo }">
-    <logo v-if="showLogo" :collapse="isCollapse" />
-    <el-scrollbar wrap-class="scrollbar-wrapper">
-      <el-menu
-        :default-active="activeMenu"
-        :collapse="isCollapse"
-        :text-color="variables.menuText"
-        :unique-opened="true"
-        :active-text-color="variables.menuActiveText"
-        :collapse-transition="false"
-        mode="vertical"
-      >
-        <sidebar-item
-          v-for="route in permission_routes"
-          :key="route.path"
-          :item="route"
-          :base-path="route.path"
-        />
-      </el-menu>
-    </el-scrollbar>
-  </div>
-</template>
-
-<script>
-import { mapGetters } from "vuex";
-import Logo from "./Logo";
-import SidebarItem from "./SidebarItem";
-import variables from "@/assets/styles/variables.scss";
-
-export default {
-  components: { SidebarItem, Logo },
-  computed: {
-    ...mapGetters(["permission_routes", "sidebar"]),
-    activeMenu() {
-      const route = this.$route;
-      const { meta, path } = route;
-      // if set path, the sidebar will highlight the path you set
-      if (meta.activeMenu) {
-        return meta.activeMenu;
-      }
-      return path;
-    },
-    showLogo() {
-      return this.$store.state.settings.sidebarLogo;
-    },
-    variables() {
-      return variables;
-    },
-    isCollapse() {
-      return !this.sidebar.opened;
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-::v-deep .el-menu-item.is-active {
-  // background: rgba(246, 250, 255, 1) !important;
-  // background: linear-gradient(90deg, #4fdac9 0%, #32b5cb 100%) !important;
-  background: linear-gradient(
-    90deg,
-    #0559c8 0%,
-    rgba(5, 89, 200, 0) 97%
-  ) !important;
-}
-</style>
diff --git a/energy_management_ui/src/layout/components/index.js b/energy_management_ui/src/layout/components/index.js
deleted file mode 100644
index 246b5e3..0000000
--- a/energy_management_ui/src/layout/components/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export { default as AppMain } from './AppMain'
-export { default as Navbar } from './Navbar'
-export { default as Sidebar } from './Sidebar/index.vue'
diff --git a/energy_management_ui/src/layout/index.vue b/energy_management_ui/src/layout/index.vue
deleted file mode 100644
index 9c16707..0000000
--- a/energy_management_ui/src/layout/index.vue
+++ /dev/null
@@ -1,271 +0,0 @@
-<template>
-  <div :class="classObj" class="app-wrapper">
-    <div
-      v-if="device === 'mobile' && sidebar.opened"
-      class="drawer-bg"
-      @click="handleClickOutside"
-    />
-    <sidebar class="sidebar-container" />
-    <div :class="{ hasTagsView: needTagsView }" class="main-container">
-      <div :class="{ 'fixed-header': fixedHeader }">
-        <navbar />
-        <div class="tabs-container">
-          <el-tabs
-            v-model="activePage"
-            type="card"
-            closable
-            @edit="handleTabsEdit"
-          >
-            <el-tab-pane
-              :id="page.fullPath"
-              :key="page.fullPath"
-              v-for="(page, index) in pageList"
-              :label="page.meta.title"
-              :name="page.fullPath"
-              :closable="!(page.meta.title == '棣栭〉')"
-            >
-              <!-- {{ page.content }} -->
-            </el-tab-pane>
-          </el-tabs>
-        </div>
-      </div>
-      <app-main />
-    </div>
-  </div>
-</template>
-
-<script>
-import RightPanel from "@/components/RightPanel";
-import { AppMain, Navbar, Sidebar } from "./components";
-import ResizeMixin from "./mixin/ResizeHandler";
-import { mapState } from "vuex";
-
-const indexKey = "/index";
-export default {
-  name: "Layout",
-  components: {
-    AppMain,
-    Navbar,
-    RightPanel,
-    Sidebar
-  },
-  data() {
-    return {
-      pageList: [],
-      linkList: [],
-      activePage: "",
-      multipage: true
-    };
-  },
-  mixins: [ResizeMixin],
-  computed: {
-    ...mapState({
-      sidebar: state => state.app.sidebar,
-      device: state => state.app.device,
-      showSettings: state => state.settings.showSettings,
-      needTagsView: state => state.settings.tagsView,
-      fixedHeader: state => state.settings.fixedHeader,
-      tagsView: state => state.tagsView
-    }),
-    classObj() {
-      return {
-        hideSidebar: !this.sidebar.opened,
-        openSidebar: this.sidebar.opened,
-        withoutAnimation: this.sidebar.withoutAnimation,
-        mobile: this.device === "mobile"
-      };
-    }
-  },
-  created() {
-    if (this.$route.path !== indexKey) {
-      this.addIndexToFirst();
-    }
-    // 澶嶅埗涓�涓猺oute瀵硅薄鍑烘潵锛屼笉鑳藉奖鍝嶅師route
-    let currentRoute = Object.assign({}, this.$route);
-    currentRoute.meta = Object.assign({}, currentRoute.meta);
-    this.pageList.push(currentRoute);
-    this.linkList.push(currentRoute.fullPath);
-    this.activePage = currentRoute.fullPath;
-    console.log("pageList", this.pageList);
-  },
-  watch: {
-    $route: function(newRoute) {
-      this.activePage = newRoute.fullPath;
-      if (!this.multipage) {
-        this.linkList = [newRoute.fullPath];
-        this.pageList = [Object.assign({}, newRoute)];
-        // update-begin-author:taoyan date:20200211 for: TASK #3368 銆愯矾鐢辩紦瀛樸�戦椤电殑缂撳瓨璁剧疆鏈夐棶棰橈紝闇�瑕佹牴鎹悗鍙扮殑璺敱閰嶇疆鏉ュ疄鐜版槸鍚︾紦瀛�
-      } else if (indexKey == newRoute.fullPath) {
-        //棣栭〉鏃� 鍒ゆ柇鏄惁缂撳瓨 娌℃湁缂撳瓨 鍒锋柊涔�
-        if (newRoute.meta.keepAlive === false) {
-          this.routeReload();
-        }
-        // update-end-author:taoyan date:20200211 for: TASK #3368 銆愯矾鐢辩紦瀛樸�戦椤电殑缂撳瓨璁剧疆鏈夐棶棰橈紝闇�瑕佹牴鎹悗鍙扮殑璺敱閰嶇疆鏉ュ疄鐜版槸鍚︾紦瀛�
-      } else if (this.linkList.indexOf(newRoute.fullPath) < 0) {
-        this.linkList.push(newRoute.fullPath);
-        this.pageList.push(Object.assign({}, newRoute));
-        //// update-begin-author:sunjianlei date:20200103 for: 濡傛灉鏂板鐨勯〉闈㈤厤缃簡缂撳瓨璺敱锛岄偅涔堝氨寮哄埗鍒锋柊涓�閬� #842
-        // if (newRoute.meta.keepAlive) {
-        //   this.routeReload()
-        // }
-        //// update-end-author:sunjianlei date:20200103 for: 濡傛灉鏂板鐨勯〉闈㈤厤缃簡缂撳瓨璺敱锛岄偅涔堝氨寮哄埗鍒锋柊涓�閬� #842
-      } else if (this.linkList.indexOf(newRoute.fullPath) >= 0) {
-        let oldIndex = this.linkList.indexOf(newRoute.fullPath);
-        let oldPositionRoute = this.pageList[oldIndex];
-        this.pageList.splice(
-          oldIndex,
-          1,
-          Object.assign({}, newRoute, { meta: oldPositionRoute.meta })
-        );
-      }
-    },
-    activePage: function(key) {
-      let index = this.linkList.lastIndexOf(key);
-      let waitRouter = this.pageList[index];
-      // 銆怲ESTA-523銆戜慨澶嶏細涓嶅厑璁搁噸澶嶈烦杞矾鐢卞紓甯�
-      if (waitRouter.fullPath !== this.$route.fullPath) {
-        this.$router.push(Object.assign({}, waitRouter));
-      }
-      // this.changeTitle(waitRouter.meta.title);
-    }
-  },
-  methods: {
-    addIndexToFirst() {
-      this.pageList.splice(0, 0, {
-        name: "home",
-        path: indexKey,
-        fullPath: indexKey,
-        meta: {
-          icon: "dashboard",
-          title: "棣栭〉"
-        }
-      });
-      this.linkList.splice(0, 0, indexKey);
-    },
-    changePage(key) {
-      this.activePage = key;
-    },
-    handleTabsEdit(key, action) {
-      console.log("handleTabsEdit", key, action);
-      this[action](key);
-    },
-    remove(key) {
-      if (key == indexKey) {
-        this.$message({
-          message: "棣栭〉涓嶈兘鍏抽棴!",
-          type: "warning"
-        });
-        return;
-      }
-      if (this.pageList.length === 1) {
-        this.$message({
-          message: "杩欐槸鏈�鍚庝竴椤碉紝涓嶈兘鍐嶅叧闂簡鍟�",
-          type: "warning"
-        });
-        return;
-      }
-      let removeRoute = this.pageList.filter(item => item.fullPath == key);
-      this.pageList = this.pageList.filter(item => item.fullPath !== key);
-      let index = this.linkList.indexOf(key);
-      this.linkList = this.linkList.filter(item => item !== key);
-      index = index >= this.linkList.length ? this.linkList.length - 1 : index;
-      this.activePage = this.linkList[index];
-
-      //update-begin--Author:scott  Date:20201015 for锛氳矾鐢辩紦瀛橀棶棰橈紝鍏抽棴浜唗ab椤垫椂鍐嶆墦寮�灏变笉鍒锋柊 #842
-      //鍏抽棴椤甸潰鍒欎粠缂撳瓨cache_included_routes涓垹闄よ矾鐢憋紝涓嬫鐐瑰嚮鑿滃崟浼氶噸鏂板姞杞介〉闈�
-      // let cacheRouterArray = Vue.ls.get(CACHE_INCLUDED_ROUTES) || [];
-      // if (removeRoute && removeRoute[0]) {
-      //   let componentName = removeRoute[0].meta.componentName;
-      //   if (cacheRouterArray.includes(componentName)) {
-      //     cacheRouterArray.splice(
-      //       cacheRouterArray.findIndex(item => item === componentName),
-      //       1
-      //     );
-      //     Vue.ls.set(CACHE_INCLUDED_ROUTES, cacheRouterArray);
-      //   }
-      //   this.emitPageClosed(removeRoute[0]);
-      // }
-      //update-end--Author:scott  Date:20201015 for锛氳矾鐢辩紦瀛橀棶棰橈紝鍏抽棴浜唗ab椤垫椂鍐嶆墦寮�灏变笉鍒锋柊 #842
-    },
-    handleClickOutside() {
-      this.$store.dispatch("app/closeSideBar", { withoutAnimation: false });
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-@import "~@/assets/styles/mixin.scss";
-@import "~@/assets/styles/variables.scss";
-
-.app-wrapper {
-  @include clearfix;
-  position: relative;
-  height: 100%;
-  width: 100%;
-  background: #001233;
-
-  &.mobile.openSidebar {
-    position: fixed;
-    top: 0;
-  }
-}
-
-.tabs-container {
-  // background: #fff;
-  background: #001233;
-  height: #{$tabBarHeight};
-  ::v-deep {
-    .el-tabs__item {
-      height: #{$tabBarHeight};
-      line-height: #{$tabBarHeight};
-      background: url("../assets/image/breadcrumbBg.png") no-repeat;
-      background-size: 100% 100%;
-      border: none;
-      margin-right: 10px;
-      color: #95c1fd;
-    }
-    .is-active {
-      color: #fff;
-      background: url("../assets/image/isbreadcrumbBg.png") no-repeat;
-      background-size: 100% 100%;
-    }
-    .el-tabs__nav {
-      border: none !important;
-    }
-    .el-tabs__header {
-      margin: 0 !important;
-    }
-    .el-tabs--card > .el-tabs__header {
-      border-bottom: none;
-    }
-  }
-}
-
-.drawer-bg {
-  background: #000;
-  opacity: 0.3;
-  width: 100%;
-  top: 0;
-  height: 100%;
-  position: absolute;
-  z-index: 999;
-}
-
-.fixed-header {
-  position: fixed;
-  top: 0;
-  right: 0;
-  z-index: 9;
-  width: calc(100% - #{$sideBarWidth});
-  transition: width 0.28s;
-}
-
-.hideSidebar .fixed-header {
-  width: calc(100% - 54px);
-}
-
-.mobile .fixed-header {
-  width: 100%;
-}
-</style>
diff --git a/energy_management_ui/src/layout/mixin/ResizeHandler.js b/energy_management_ui/src/layout/mixin/ResizeHandler.js
deleted file mode 100644
index e8d0df8..0000000
--- a/energy_management_ui/src/layout/mixin/ResizeHandler.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import store from '@/store'
-
-const { body } = document
-const WIDTH = 992 // refer to Bootstrap's responsive design
-
-export default {
-  watch: {
-    $route(route) {
-      if (this.device === 'mobile' && this.sidebar.opened) {
-        store.dispatch('app/closeSideBar', { withoutAnimation: false })
-      }
-    }
-  },
-  beforeMount() {
-    window.addEventListener('resize', this.$_resizeHandler)
-  },
-  beforeDestroy() {
-    window.removeEventListener('resize', this.$_resizeHandler)
-  },
-  mounted() {
-    const isMobile = this.$_isMobile()
-    if (isMobile) {
-      store.dispatch('app/toggleDevice', 'mobile')
-      store.dispatch('app/closeSideBar', { withoutAnimation: true })
-    }
-  },
-  methods: {
-    // use $_ for mixins properties
-    // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
-    $_isMobile() {
-      const rect = body.getBoundingClientRect()
-      return rect.width - 1 < WIDTH
-    },
-    $_resizeHandler() {
-      if (!document.hidden) {
-        const isMobile = this.$_isMobile()
-        store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop')
-
-        if (isMobile) {
-          store.dispatch('app/closeSideBar', { withoutAnimation: true })
-        }
-      }
-    }
-  }
-}
diff --git a/energy_management_ui/src/layout/mixin/getHeight.js b/energy_management_ui/src/layout/mixin/getHeight.js
deleted file mode 100644
index 59417fc..0000000
--- a/energy_management_ui/src/layout/mixin/getHeight.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * 鎶樼嚎鍥剧殑鑷�傚簲
- * 褰撶獥鍙e彂鐢熷彉鍖栫殑鏃跺�� 浼氶噸鏂扮殑鏇存柊瑙嗗浘鐨勪綅缃� 杈惧埌鑷�傚簲
- */
-export default {
-    data() {
-        return {
-            bodyStyle: {
-                height: '',
-                overflow: 'auto'
-            }
-        }
-    },
-    mounted() {
-        this.setCharts();
-        window.addEventListener('resize', this.setCharts);
-    },
-    beforeDestroy() {
-        window.removeEventListener('resize', this.setCharts);
-    },
-    methods: {
-
-    }
-};
diff --git a/energy_management_ui/src/main.js b/energy_management_ui/src/main.js
deleted file mode 100644
index 860441f..0000000
--- a/energy_management_ui/src/main.js
+++ /dev/null
@@ -1,107 +0,0 @@
-import Vue from 'vue'
-
-import Cookies from 'js-cookie'
-
-import 'normalize.css/normalize.css' // a modern alternative to CSS resets
-import Element from 'element-ui'
-import './assets/styles/element-variables.scss'
-
-import '@/assets/styles/index.scss' // global css
-import '@/assets/styles/ruoyi.scss' // ruoyi css
-import App from './App'
-import store from './store'
-import router from './router'
-import permission from './directive/permission'
-
-import './assets/icons' // icon
-import './permission' // permission control
-import {
-  getDicts
-} from "@/api/system/dict/data";
-import {
-  getConfigKey
-} from "@/api/system/config";
-import {
-  addDateRange,
-  download,
-  fileDownload,
-  hideCheckAll,
-  parseTime,
-  resetForm,
-  selectDictLabel,
-  selectTimeTypeLabel
-} from "@/utils/ruoyi";
-import Pagination from "@/components/Pagination";
-import basicContainer from '@/components/common/basic-container';
-import htmlToPdf from '@/utils/vueToPdf/htmlToPdf'
-
-// 鍏ㄥ眬鏂规硶鎸傝浇
-Vue.prototype.getDicts = getDicts;
-Vue.prototype.getConfigKey = getConfigKey;
-Vue.prototype.parseTime = parseTime;
-Vue.prototype.resetForm = resetForm;
-Vue.prototype.addDateRange = addDateRange;
-Vue.prototype.selectDictLabel = selectDictLabel;
-Vue.prototype.download = download;
-Vue.prototype.fileDownload = fileDownload;
-Vue.prototype.selectTimeTypeLabel = selectTimeTypeLabel;
-
-Vue.prototype.hideCheckAll = hideCheckAll;
-
-Vue.prototype.msgSuccess = function (msg) {
-  this.$message({
-    showClose: true,
-    message: msg,
-    type: "success"
-  });
-};
-// 娉ㄥ唽鍏ㄥ眬瀹瑰櫒
-Vue.component('basicContainer', basicContainer);
-
-Vue.prototype.msgError = function (msg) {
-  this.$message({
-    showClose: true,
-    message: msg,
-    type: "error"
-  });
-};
-
-Vue.prototype.msgWarning = function (msg) {
-  this.$message({
-    showClose: true,
-    message: msg,
-    type: "warning"
-  });
-};
-
-Vue.prototype.msgInfo = function (msg) {
-  this.$message.info(msg);
-};
-
-// 鍏ㄥ眬缁勪欢鎸傝浇
-Vue.component('Pagination', Pagination);
-
-Vue.use(permission);
-Vue.use(htmlToPdf)
-
-/**
- * If you don't want to use mock-server
- * you want to use MockJs for mock api
- * you can execute: mockXHR()
- *
- * Currently MockJs will be used in the production environment,
- * please remove it before going online! ! !
- */
-
-Vue.use(Element, {
-  size: Cookies.get('size') || 'medium' // set element-ui default size
-});
-
-Vue.config.productionTip = false;
-
-new Vue({
-  el: '#app',
-  router,
-  store,
-  render: h => h(App)
-});
diff --git a/energy_management_ui/src/permission.js b/energy_management_ui/src/permission.js
deleted file mode 100644
index 092eb11..0000000
--- a/energy_management_ui/src/permission.js
+++ /dev/null
@@ -1,91 +0,0 @@
-import router from './router'
-import store from './store'
-import {Message} from 'element-ui'
-import NProgress from 'nprogress'
-import 'nprogress/nprogress.css'
-import {getToken} from '@/utils/auth'
-
-NProgress.configure({showSpinner: false})
-
-const whiteList = ['/login', '/auth-redirect', '/bind', '/register']
-
-router.beforeEach((to, from, next) => {
-    NProgress.start()
-    if (getToken()) {
-        /* has token*/
-        if (to.path === '/login') {
-            next({path: '/'})
-            NProgress.done()
-        } else if (to.path === '/reportAnd-monitorBy-provincesAnd-cities') {
-            const node = document.createElement('a');
-            node.href = 'https://www.baidu.com/';
-            node.target = '_blank';
-            node.rel = 'noopener noreferrer';
-            node.click();
-            node.remove();
-            // 闃绘璺敱璺宠浆
-            next(false);
-        } else if (to.path === '/reportAnd-monitorBy-provincesAnd-group') {
-            const node = document.createElement('a');
-            node.href = 'https://www.baidu.com/';
-            node.target = '_blank';
-            node.rel = 'noopener noreferrer';
-            node.click();
-            node.remove();
-            // 闃绘璺敱璺宠浆
-            next(false);
-        } else if (to.path === '/radiation-heating-monitoring') {
-            const node = document.createElement('a');
-            node.href = 'https://www.51iot.com.cn:3000/frame/ASTopen?orgId=2&language=en-US&theme=gray&refresh=30s';
-            node.target = '_blank';
-            node.rel = 'noopener noreferrer';
-            node.click();
-            node.remove();
-            // 闃绘璺敱璺宠浆
-            next(false);
-        } else {
-            if (store.getters.roles.length === 0) {
-                // 鍒ゆ柇褰撳墠鐢ㄦ埛鏄惁宸叉媺鍙栧畬user_info淇℃伅
-                store.dispatch('GetInfo').then(res => {
-                    // 鎷夊彇user_info
-                    const roles = res.roles
-                    store.dispatch('GenerateRoutes', {roles}).then(accessRoutes => {
-                        // 娴嬭瘯 榛樿闈欐�侀〉闈�
-                        // store.dispatch('permission/generateRoutes', { roles }).then(accessRoutes => {
-                        // 鏍规嵁roles鏉冮檺鐢熸垚鍙闂殑璺敱琛�
-                        router.addRoutes(accessRoutes) // 鍔ㄦ�佹坊鍔犲彲璁块棶璺敱琛�
-                        next({...to, replace: true}) // hack鏂规硶 纭繚addRoutes宸插畬鎴�
-                    })
-                })
-                    .catch(err => {
-                        store.dispatch('FedLogOut').then(() => {
-                            Message.error(err)
-                            next({path: '/'})
-                        })
-                    })
-            } else {
-                next()
-                // 娌℃湁鍔ㄦ�佹敼鍙樻潈闄愮殑闇�姹傚彲鐩存帴next() 鍒犻櫎涓嬫柟鏉冮檺鍒ゆ柇 鈫�
-                // if (hasPermission(store.getters.roles, to.meta.roles)) {
-                //   next()
-                // } else {
-                //   next({ path: '/401', replace: true, query: { noGoBack: true }})
-                // }
-                // 鍙垹 鈫�
-            }
-        }
-    } else {
-        // 娌℃湁token
-        if (whiteList.indexOf(to.path) !== -1) {
-            // 鍦ㄥ厤鐧诲綍鐧藉悕鍗曪紝鐩存帴杩涘叆
-            next()
-        } else {
-            next(`/login?redirect=${to.path}`) // 鍚﹀垯鍏ㄩ儴閲嶅畾鍚戝埌鐧诲綍椤�
-            NProgress.done()
-        }
-    }
-})
-
-router.afterEach(() => {
-    NProgress.done()
-})
diff --git a/energy_management_ui/src/router/index.js b/energy_management_ui/src/router/index.js
deleted file mode 100644
index 9442076..0000000
--- a/energy_management_ui/src/router/index.js
+++ /dev/null
@@ -1,197 +0,0 @@
-import Vue from "vue";
-import Router from "vue-router";
-
-Vue.use(Router);
-
-/* Layout */
-import Layout from "@/layout";
-
-/**
- * Note: 璺敱閰嶇疆椤�
- *
- * hidden: true                   // 褰撹缃� true 鐨勬椂鍊欒璺敱涓嶄細鍐嶄晶杈规爮鍑虹幇 濡�401锛宭ogin绛夐〉闈紝鎴栬�呭涓�浜涚紪杈戦〉闈�/edit/1
- * alwaysShow: true               // 褰撲綘涓�涓矾鐢变笅闈㈢殑 children 澹版槑鐨勮矾鐢卞ぇ浜�1涓椂锛岃嚜鍔ㄤ細鍙樻垚宓屽鐨勬ā寮�--濡傜粍浠堕〉闈�
- *                                // 鍙湁涓�涓椂锛屼細灏嗛偅涓瓙璺敱褰撳仛鏍硅矾鐢辨樉绀哄湪渚ц竟鏍�--濡傚紩瀵奸〉闈�
- *                                // 鑻ヤ綘鎯充笉绠¤矾鐢变笅闈㈢殑 children 澹版槑鐨勪釜鏁伴兘鏄剧ず浣犵殑鏍硅矾鐢�
- *                                // 浣犲彲浠ヨ缃� alwaysShow: true锛岃繖鏍峰畠灏变細蹇界暐涔嬪墠瀹氫箟鐨勮鍒欙紝涓�鐩存樉绀烘牴璺敱
- * redirect: noRedirect           // 褰撹缃� noRedirect 鐨勬椂鍊欒璺敱鍦ㄩ潰鍖呭睉瀵艰埅涓笉鍙鐐瑰嚮
- * name:'router-name'             // 璁惧畾璺敱鐨勫悕瀛楋紝涓�瀹氳濉啓涓嶇劧浣跨敤<keep-alive>鏃朵細鍑虹幇鍚勭闂
- * meta : {
-    roles: ['admin','editor']    // 璁剧疆璇ヨ矾鐢辫繘鍏ョ殑鏉冮檺锛屾敮鎸佸涓潈闄愬彔鍔�
-    title: 'title'               // 璁剧疆璇ヨ矾鐢卞湪渚ц竟鏍忓拰闈㈠寘灞戜腑灞曠ず鐨勫悕瀛�
-    icon: 'svg-name'             // 璁剧疆璇ヨ矾鐢辩殑鍥炬爣锛屽搴旇矾寰剆rc/icons/svg
-    breadcrumb: false            // 濡傛灉璁剧疆涓篺alse锛屽垯涓嶄細鍦╞readcrumb闈㈠寘灞戜腑鏄剧ず
-  }
- */
-
-// 鍏叡璺敱
-export const constantRoutes = [
-  {
-    path: "/redirect",
-    component: Layout,
-    hidden: true,
-    children: [
-      {
-        path: "/redirect/:path*",
-        component: () => import("@/views/redirect")
-      }
-    ]
-  },
-  {
-    path: "/login",
-    component: () => import("@/views/login"),
-    hidden: true
-  },
-  {
-    path: "/404",
-    component: () => import("@/views/error/404"),
-    hidden: true
-  },
-  {
-    path: "/401",
-    component: () => import("@/views/error/401"),
-    hidden: true
-  },
-  {
-    path: "",
-    component: Layout,
-    redirect: "index",
-    children: [
-      {
-        path: "index",
-        component: () => import("@/views/index"),
-        name: "棣栭〉",
-        meta: {
-          title: "棣栭〉",
-          icon: "dashboard",
-          noCache: true,
-          affix: true
-        }
-      }
-    ]
-  },
-  {
-    path: "/indexdev",
-    component: () => import("@/views/index"),
-    hidden: "true"
-  },
-  {
-    path: "/user",
-    component: Layout,
-    hidden: true,
-    redirect: "noredirect",
-    children: [
-      {
-        path: "profile",
-        component: () => import("@/views/system/user/profile/index"),
-        name: "Profile",
-        meta: {
-          title: "涓汉涓績",
-          icon: "user"
-        }
-      }
-    ]
-  },
-  {
-    path: "/dict",
-    component: Layout,
-    hidden: true,
-    children: [
-      {
-        path: "type/data/:dictId(\\d+)",
-        component: () => import("@/views/system/dict/data"),
-        name: "Data",
-        meta: {
-          title: "瀛楀吀鏁版嵁",
-          icon: ""
-        }
-      }
-    ]
-  },
-  {
-    path: "/gen",
-    component: Layout,
-    hidden: true,
-    children: [
-      {
-        path: "edit",
-        component: () => import("@/views/tool/gen/editTable"),
-        name: "GenEdit",
-        meta: {
-          title: "淇敼鐢熸垚閰嶇疆"
-        }
-      }
-    ]
-  },
-  {
-    path: "/model",
-    component: Layout,
-    hidden: true,
-    children: [
-      {
-        path: "",
-        component: () => import("@/views/basicsetting/model/index"),
-        name: "modelManage",
-        meta: {
-          title: "妯″瀷绠$悊"
-        }
-      }
-    ]
-  },
-  {
-    path: "/electricityPrice",
-    component: Layout,
-    hidden: true,
-    children: [
-      {
-        path: "listHistory",
-        component: () => import("@/views/electricityPrice/electricity/history"),
-        name: "electricity",
-        meta: {
-          title: "宄板钩璋峰巻鍙茶褰�",
-          icon: ""
-        }
-      }
-    ]
-  },
-  {
-    path: "/energyConsumption",
-    component: Layout,
-    hidden: true,
-    children: [
-      {
-        path:
-          "listEnergyConsumption/:timeType/:beginTime/:endTime/:indexCode/:id/:titleName",
-        component: () =>
-          import("@/views/energyStatistics/energyConsumption/consumptionCost"),
-        name: "listEnergyConsumption",
-        meta: {
-          title: "鑳芥簮娑堣垂鎴愭湰鍒嗘椂鍒嗘瀽鎶ヨ〃"
-        }
-      }
-    ]
-  },
-  {
-    path: "/rosteringSchemeitem",
-    component: Layout,
-    hidden: true,
-    children: [
-      {
-        path: "list/:id",
-        component: () => import("@/views/workforce/management/schemeItem"),
-        name: "list",
-        meta: {
-          title: "杞�兼柟妗堢粏鍒�"
-        }
-      }
-    ]
-  }
-];
-
-export default new Router({
-  mode: "history", // 鍘绘帀url涓殑#
-  scrollBehavior: () => ({
-    y: 0
-  }),
-  routes: constantRoutes
-});
diff --git a/energy_management_ui/src/settings.js b/energy_management_ui/src/settings.js
deleted file mode 100644
index 5083dd1..0000000
--- a/energy_management_ui/src/settings.js
+++ /dev/null
@@ -1,31 +0,0 @@
-module.exports = {
-  title: "缁煎悎鑳芥簮绠$悊",
-
-  /**
-   * 鏄惁绯荤粺甯冨眬閰嶇疆
-   */
-  showSettings: false,
-
-  /**
-   * 鏄惁鏄剧ず tagsView
-   */
-  tagsView: true,
-
-  /**
-   * 鏄惁鍥哄畾澶撮儴
-   */
-  fixedHeader: true,
-
-  /**
-   * 鏄惁鏄剧ずlogo
-   */
-  sidebarLogo: true,
-
-  /**
-   * @type {string | array} 'production' | ['production', 'development']
-   * @description Need show err logs component.
-   * The default is only used in the production env
-   * If you want to also use it in dev, you can pass ['production', 'development']
-   */
-  errorLog: "production"
-};
diff --git a/energy_management_ui/src/store/getters.js b/energy_management_ui/src/store/getters.js
deleted file mode 100644
index df51465..0000000
--- a/energy_management_ui/src/store/getters.js
+++ /dev/null
@@ -1,15 +0,0 @@
-const getters = {
-  sidebar: state => state.app.sidebar,
-  size: state => state.app.size,
-  device: state => state.app.device,
-  visitedViews: state => state.tagsView.visitedViews,
-  cachedViews: state => state.tagsView.cachedViews,
-  token: state => state.user.token,
-  avatar: state => state.user.avatar,
-  name: state => state.user.name,
-  introduction: state => state.user.introduction,
-  roles: state => state.user.roles,
-  permissions: state => state.user.permissions,
-  permission_routes: state => state.permission.routes
-}
-export default getters
diff --git a/energy_management_ui/src/store/index.js b/energy_management_ui/src/store/index.js
deleted file mode 100644
index 53b8437..0000000
--- a/energy_management_ui/src/store/index.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import Vue from 'vue'
-import Vuex from 'vuex'
-import app from './modules/app'
-import user from './modules/user'
-import tagsView from './modules/tagsView'
-import permission from './modules/permission'
-import settings from './modules/settings'
-import getters from './getters'
-
-Vue.use(Vuex)
-
-const store = new Vuex.Store({
-  modules: {
-    app,
-    user,
-    tagsView,
-    permission,
-    settings
-  },
-  getters
-})
-
-export default store
diff --git a/energy_management_ui/src/store/modules/app.js b/energy_management_ui/src/store/modules/app.js
deleted file mode 100644
index 45d89bb..0000000
--- a/energy_management_ui/src/store/modules/app.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import Cookies from 'js-cookie'
-
-const state = {
-  sidebar: {
-    opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true,
-    withoutAnimation: false
-  },
-  device: 'desktop',
-  size: Cookies.get('size') || 'medium'
-}
-
-const mutations = {
-  TOGGLE_SIDEBAR: state => {
-    state.sidebar.opened = !state.sidebar.opened
-    state.sidebar.withoutAnimation = false
-    if (state.sidebar.opened) {
-      Cookies.set('sidebarStatus', 1)
-    } else {
-      Cookies.set('sidebarStatus', 0)
-    }
-  },
-  CLOSE_SIDEBAR: (state, withoutAnimation) => {
-    Cookies.set('sidebarStatus', 0)
-    state.sidebar.opened = false
-    state.sidebar.withoutAnimation = withoutAnimation
-  },
-  TOGGLE_DEVICE: (state, device) => {
-    state.device = device
-  },
-  SET_SIZE: (state, size) => {
-    state.size = size
-    Cookies.set('size', size)
-  }
-}
-
-const actions = {
-  toggleSideBar({ commit }) {
-    commit('TOGGLE_SIDEBAR')
-  },
-  closeSideBar({ commit }, { withoutAnimation }) {
-    commit('CLOSE_SIDEBAR', withoutAnimation)
-  },
-  toggleDevice({ commit }, device) {
-    commit('TOGGLE_DEVICE', device)
-  },
-  setSize({ commit }, size) {
-    commit('SET_SIZE', size)
-  }
-}
-
-export default {
-  namespaced: true,
-  state,
-  mutations,
-  actions
-}
diff --git a/energy_management_ui/src/store/modules/permission.js b/energy_management_ui/src/store/modules/permission.js
deleted file mode 100644
index 26299d4..0000000
--- a/energy_management_ui/src/store/modules/permission.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import { constantRoutes } from "@/router";
-import { getRouters } from "@/api/menu";
-import Layout from "@/layout/index";
-import RouteView from "@/layout/RouteView";
-
-const permission = {
-  state: {
-    routes: [],
-    addRoutes: []
-  },
-  mutations: {
-    SET_ROUTES: (state, routes) => {
-      state.addRoutes = routes;
-      state.routes = constantRoutes.concat(routes);
-    }
-  },
-  actions: {
-    // 鐢熸垚璺敱
-    GenerateRoutes({ commit }) {
-      return new Promise(resolve => {
-        // 鍚戝悗绔姹傝矾鐢辨暟鎹�
-        getRouters().then(res => {
-          const accessedRoutes = filterAsyncRouter(res.data);
-          accessedRoutes.push({ path: "*", redirect: "/404", hidden: true });
-          commit("SET_ROUTES", accessedRoutes);
-          resolve(accessedRoutes);
-        });
-      });
-    }
-  }
-};
-
-// 閬嶅巻鍚庡彴浼犳潵鐨勮矾鐢卞瓧绗︿覆锛岃浆鎹负缁勪欢瀵硅薄
-function filterAsyncRouter(asyncRouterMap) {
-  return asyncRouterMap.filter(route => {
-    if (route.component) {
-      // Layout缁勪欢鐗规畩澶勭悊
-      if (route.component === "Layout") {
-        route.component = Layout;
-      } else if (route.component === "RouteView") {
-        route.component = RouteView;
-      } else {
-        route.component = loadView(route.component);
-      }
-    }
-    if (route.children != null && route.children && route.children.length) {
-      route.children = filterAsyncRouter(route.children);
-    }
-    return true;
-  });
-}
-
-// export const loadView = (view) => { // 璺敱鎳掑姞杞�
-//   return () => import(`@/views/${view}`)
-// }
-export const loadView = view => {
-  // 璺敱鎳掑姞杞�
-  return resolve => require([`@/views/${view}`], resolve);
-};
-
-export default permission;
diff --git a/energy_management_ui/src/store/modules/settings.js b/energy_management_ui/src/store/modules/settings.js
deleted file mode 100644
index a1152a9..0000000
--- a/energy_management_ui/src/store/modules/settings.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import variables from '@/assets/styles/element-variables.scss'
-import defaultSettings from '@/settings'
-
-const { showSettings, tagsView, fixedHeader, sidebarLogo } = defaultSettings
-
-const state = {
-  theme: variables.theme,
-  showSettings: showSettings,
-  tagsView: tagsView,
-  fixedHeader: fixedHeader,
-  sidebarLogo: sidebarLogo
-}
-
-const mutations = {
-  CHANGE_SETTING: (state, { key, value }) => {
-    if (state.hasOwnProperty(key)) {
-      state[key] = value
-    }
-  }
-}
-
-const actions = {
-  changeSetting({ commit }, data) {
-    commit('CHANGE_SETTING', data)
-  }
-}
-
-export default {
-  namespaced: true,
-  state,
-  mutations,
-  actions
-}
-
diff --git a/energy_management_ui/src/store/modules/tagsView.js b/energy_management_ui/src/store/modules/tagsView.js
deleted file mode 100644
index 3e2c170..0000000
--- a/energy_management_ui/src/store/modules/tagsView.js
+++ /dev/null
@@ -1,165 +0,0 @@
-const state = {
-  visitedViews: [],
-  cachedViews: []
-}
-
-const mutations = {
-  ADD_VISITED_VIEW: (state, view) => {
-    if (state.visitedViews.some(v => v.path === view.path)) return
-    state.visitedViews.push(
-      Object.assign({}, view, {
-        title: view.meta.title || 'no-name'
-      })
-    )
-  },
-  ADD_CACHED_VIEW: (state, view) => {
-    if (state.cachedViews.includes(view.name)) return
-    if (!view.meta.noCache) {
-      state.cachedViews.push(view.name)
-    }
-  },
-
-  DEL_VISITED_VIEW: (state, view) => {
-    for (const [i, v] of state.visitedViews.entries()) {
-      if (v.path === view.path) {
-        state.visitedViews.splice(i, 1)
-        break
-      }
-    }
-  },
-  DEL_CACHED_VIEW: (state, view) => {
-    for (const i of state.cachedViews) {
-      if (i === view.name) {
-        const index = state.cachedViews.indexOf(i)
-        state.cachedViews.splice(index, 1)
-        break
-      }
-    }
-  },
-
-  DEL_OTHERS_VISITED_VIEWS: (state, view) => {
-    state.visitedViews = state.visitedViews.filter(v => {
-      return v.meta.affix || v.path === view.path
-    })
-  },
-  DEL_OTHERS_CACHED_VIEWS: (state, view) => {
-    for (const i of state.cachedViews) {
-      if (i === view.name) {
-        const index = state.cachedViews.indexOf(i)
-        state.cachedViews = state.cachedViews.slice(index, index + 1)
-        break
-      }
-    }
-  },
-
-  DEL_ALL_VISITED_VIEWS: state => {
-    // keep affix tags
-    const affixTags = state.visitedViews.filter(tag => tag.meta.affix)
-    state.visitedViews = affixTags
-  },
-  DEL_ALL_CACHED_VIEWS: state => {
-    state.cachedViews = []
-  },
-
-  UPDATE_VISITED_VIEW: (state, view) => {
-    for (let v of state.visitedViews) {
-      if (v.path === view.path) {
-        v = Object.assign(v, view)
-        break
-      }
-    }
-  }
-}
-
-const actions = {
-  addView({ dispatch }, view) {
-    dispatch('addVisitedView', view)
-    dispatch('addCachedView', view)
-  },
-  addVisitedView({ commit }, view) {
-    commit('ADD_VISITED_VIEW', view)
-  },
-  addCachedView({ commit }, view) {
-    commit('ADD_CACHED_VIEW', view)
-  },
-
-  delView({ dispatch, state }, view) {
-    return new Promise(resolve => {
-      dispatch('delVisitedView', view)
-      dispatch('delCachedView', view)
-      resolve({
-        visitedViews: [...state.visitedViews],
-        cachedViews: [...state.cachedViews]
-      })
-    })
-  },
-  delVisitedView({ commit, state }, view) {
-    return new Promise(resolve => {
-      commit('DEL_VISITED_VIEW', view)
-      resolve([...state.visitedViews])
-    })
-  },
-  delCachedView({ commit, state }, view) {
-    return new Promise(resolve => {
-      commit('DEL_CACHED_VIEW', view)
-      resolve([...state.cachedViews])
-    })
-  },
-
-  delOthersViews({ dispatch, state }, view) {
-    return new Promise(resolve => {
-      dispatch('delOthersVisitedViews', view)
-      dispatch('delOthersCachedViews', view)
-      resolve({
-        visitedViews: [...state.visitedViews],
-        cachedViews: [...state.cachedViews]
-      })
-    })
-  },
-  delOthersVisitedViews({ commit, state }, view) {
-    return new Promise(resolve => {
-      commit('DEL_OTHERS_VISITED_VIEWS', view)
-      resolve([...state.visitedViews])
-    })
-  },
-  delOthersCachedViews({ commit, state }, view) {
-    return new Promise(resolve => {
-      commit('DEL_OTHERS_CACHED_VIEWS', view)
-      resolve([...state.cachedViews])
-    })
-  },
-
-  delAllViews({ dispatch, state }, view) {
-    return new Promise(resolve => {
-      dispatch('delAllVisitedViews', view)
-      dispatch('delAllCachedViews', view)
-      resolve({
-        visitedViews: [...state.visitedViews],
-        cachedViews: [...state.cachedViews]
-      })
-    })
-  },
-  delAllVisitedViews({ commit, state }) {
-    return new Promise(resolve => {
-      commit('DEL_ALL_VISITED_VIEWS')
-      resolve([...state.visitedViews])
-    })
-  },
-  delAllCachedViews({ commit, state }) {
-    return new Promise(resolve => {
-      commit('DEL_ALL_CACHED_VIEWS')
-      resolve([...state.cachedViews])
-    })
-  },
-
-  updateVisitedView({ commit }, view) {
-    commit('UPDATE_VISITED_VIEW', view)
-  }
-}
-
-export default {
-  namespaced: true,
-  state,
-  mutations,
-  actions
-}
diff --git a/energy_management_ui/src/store/modules/user.js b/energy_management_ui/src/store/modules/user.js
deleted file mode 100644
index 477cfc4..0000000
--- a/energy_management_ui/src/store/modules/user.js
+++ /dev/null
@@ -1,114 +0,0 @@
-import {
-  login,
-  logout,
-  getInfo
-} from '@/api/login'
-import {
-  getToken,
-  setToken,
-  removeToken
-} from '@/utils/auth'
-
-const user = {
-  state: {
-    token: getToken(),
-    name: '',
-    avatar: '',
-    roles: [],
-    permissions: []
-  },
-
-  mutations: {
-    SET_TOKEN: (state, token) => {
-      state.token = token
-    },
-    SET_NAME: (state, name) => {
-      state.name = name
-    },
-    SET_AVATAR: (state, avatar) => {
-      state.avatar = avatar
-    },
-    SET_ROLES: (state, roles) => {
-      state.roles = roles
-    },
-    SET_PERMISSIONS: (state, permissions) => {
-      state.permissions = permissions
-    }
-  },
-
-  actions: {
-    // 鐧诲綍
-    Login({
-      commit
-    }, userInfo) {
-      const username = userInfo.username.trim()
-      const password = userInfo.password
-      const code = userInfo.code
-      const uuid = userInfo.uuid
-      return new Promise((resolve, reject) => {
-        login(username, password, code, uuid).then(res => {
-          setToken(res.token)
-          commit('SET_TOKEN', res.token)
-          resolve()
-        }).catch(error => {
-          reject(error)
-        })
-      })
-    },
-
-    // 鑾峰彇鐢ㄦ埛淇℃伅
-    GetInfo({
-      commit,
-      state
-    }) {
-      return new Promise((resolve, reject) => {
-        getInfo(state.token).then(res => {
-          const user = res.user
-          const avatar = user.avatar == "" ? require("@/assets/image/touxiang.png") : process.env.VUE_APP_BASE_API + user.avatar;
-          if (res.roles && res.roles.length > 0) { // 楠岃瘉杩斿洖鐨剅oles鏄惁鏄竴涓潪绌烘暟缁�
-            commit('SET_ROLES', res.roles)
-            commit('SET_PERMISSIONS', res.permissions)
-          } else {
-            commit('SET_ROLES', ['ROLE_DEFAULT'])
-          }
-          commit('SET_NAME', user.userName)
-          commit('SET_AVATAR', avatar)
-          resolve(res)
-        }).catch(error => {
-          reject(error)
-        })
-      })
-    },
-
-    // 閫�鍑虹郴缁�
-    LogOut({
-      commit,
-      state
-    }) {
-      return new Promise((resolve, reject) => {
-        logout(state.token).then(() => {
-          commit('SET_TOKEN', '')
-          commit('SET_ROLES', [])
-          commit('SET_PERMISSIONS', [])
-          removeToken()
-          resolve()
-        }).catch(error => {
-          reject(error)
-        })
-      })
-    },
-
-    // 鍓嶇 鐧诲嚭
-    FedLogOut({
-      commit
-    }) {
-      return new Promise(resolve => {
-        commit('SET_TOKEN', '')
-        removeToken()
-        resolve()
-      })
-    }
-  }
-}
-
-export default user
diff --git a/energy_management_ui/src/utils/auth.js b/energy_management_ui/src/utils/auth.js
deleted file mode 100644
index 08a43d6..0000000
--- a/energy_management_ui/src/utils/auth.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import Cookies from 'js-cookie'
-
-const TokenKey = 'Admin-Token'
-
-export function getToken() {
-  return Cookies.get(TokenKey)
-}
-
-export function setToken(token) {
-  return Cookies.set(TokenKey, token)
-}
-
-export function removeToken() {
-  return Cookies.remove(TokenKey)
-}
diff --git a/energy_management_ui/src/utils/index.js b/energy_management_ui/src/utils/index.js
deleted file mode 100644
index ca74f5b..0000000
--- a/energy_management_ui/src/utils/index.js
+++ /dev/null
@@ -1,344 +0,0 @@
-/**
- * 琛ㄦ牸鏃堕棿鏍煎紡鍖�
- */
-export function formatDate(cellValue) {
-  if (cellValue == null || cellValue == "") return "";
-  var date = new Date(cellValue);
-  var year = date.getFullYear();
-  var month =
-    date.getMonth() + 1 < 10
-      ? "0" + (date.getMonth() + 1)
-      : date.getMonth() + 1;
-  var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
-  var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
-  var minutes =
-    date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
-  var seconds =
-    date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
-  return (
-    year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds
-  );
-}
-
-/**
- * @param {number} time
- * @param {string} option
- * @returns {string}
- */
-export function formatTime(time, option) {
-  if (("" + time).length === 10) {
-    time = parseInt(time) * 1000;
-  } else {
-    time = +time;
-  }
-  const d = new Date(time);
-  const now = Date.now();
-
-  const diff = (now - d) / 1000;
-
-  if (diff < 30) {
-    return "鍒氬垰";
-  } else if (diff < 3600) {
-    // less 1 hour
-    return Math.ceil(diff / 60) + "鍒嗛挓鍓�";
-  } else if (diff < 3600 * 24) {
-    return Math.ceil(diff / 3600) + "灏忔椂鍓�";
-  } else if (diff < 3600 * 24 * 2) {
-    return "1澶╁墠";
-  }
-  if (option) {
-    return parseTime(time, option);
-  } else {
-    return (
-      d.getMonth() +
-      1 +
-      "鏈�" +
-      d.getDate() +
-      "鏃�" +
-      d.getHours() +
-      "鏃�" +
-      d.getMinutes() +
-      "鍒�"
-    );
-  }
-}
-
-/**
- * @param {string} url
- * @returns {Object}
- */
-export function getQueryObject(url) {
-  url = url == null ? window.location.href : url;
-  const search = url.substring(url.lastIndexOf("?") + 1);
-  const obj = {};
-  const reg = /([^?&=]+)=([^?&=]*)/g;
-  search.replace(reg, (rs, $1, $2) => {
-    const name = decodeURIComponent($1);
-    let val = decodeURIComponent($2);
-    val = String(val);
-    obj[name] = val;
-    return rs;
-  });
-  return obj;
-}
-
-/**
- * @param {string} input value
- * @returns {number} output value
- */
-export function byteLength(str) {
-  // returns the byte length of an utf8 string
-  let s = str.length;
-  for (var i = str.length - 1; i >= 0; i--) {
-    const code = str.charCodeAt(i);
-    if (code > 0x7f && code <= 0x7ff) s++;
-    else if (code > 0x7ff && code <= 0xffff) s += 2;
-    if (code >= 0xdc00 && code <= 0xdfff) i--;
-  }
-  return s;
-}
-
-/**
- * @param {Array} actual
- * @returns {Array}
- */
-export function cleanArray(actual) {
-  const newArray = [];
-  for (let i = 0; i < actual.length; i++) {
-    if (actual[i]) {
-      newArray.push(actual[i]);
-    }
-  }
-  return newArray;
-}
-
-/**
- * @param {Object} json
- * @returns {Array}
- */
-export function param(json) {
-  if (!json) return "";
-  return cleanArray(
-    Object.keys(json).map(key => {
-      if (json[key] === undefined) return "";
-      return encodeURIComponent(key) + "=" + encodeURIComponent(json[key]);
-    })
-  ).join("&");
-}
-
-/**
- * @param {string} url
- * @returns {Object}
- */
-export function param2Obj(url) {
-  const search = url.split("?")[1];
-  if (!search) {
-    return {};
-  }
-  return JSON.parse(
-    '{"' +
-      decodeURIComponent(search)
-        .replace(/"/g, '\\"')
-        .replace(/&/g, '","')
-        .replace(/=/g, '":"')
-        .replace(/\+/g, " ") +
-      '"}'
-  );
-}
-
-/**
- * @param {string} val
- * @returns {string}
- */
-export function html2Text(val) {
-  const div = document.createElement("div");
-  div.innerHTML = val;
-  return div.textContent || div.innerText;
-}
-
-/**
- * Merges two objects, giving the last one precedence
- * @param {Object} target
- * @param {(Object|Array)} source
- * @returns {Object}
- */
-export function objectMerge(target, source) {
-  if (typeof target !== "object") {
-    target = {};
-  }
-  if (Array.isArray(source)) {
-    return source.slice();
-  }
-  Object.keys(source).forEach(property => {
-    const sourceProperty = source[property];
-    if (typeof sourceProperty === "object") {
-      target[property] = objectMerge(target[property], sourceProperty);
-    } else {
-      target[property] = sourceProperty;
-    }
-  });
-  return target;
-}
-
-/**
- * @param {HTMLElement} element
- * @param {string} className
- */
-export function toggleClass(element, className) {
-  if (!element || !className) {
-    return;
-  }
-  let classString = element.className;
-  const nameIndex = classString.indexOf(className);
-  if (nameIndex === -1) {
-    classString += "" + className;
-  } else {
-    classString =
-      classString.substr(0, nameIndex) +
-      classString.substr(nameIndex + className.length);
-  }
-  element.className = classString;
-}
-
-/**
- * @param {string} type
- * @returns {Date}
- */
-export function getTime(type) {
-  if (type === "start") {
-    return new Date().getTime() - 3600 * 1000 * 24 * 90;
-  } else {
-    return new Date(new Date().toDateString());
-  }
-}
-
-/**
- * @param {Function} func
- * @param {number} wait
- * @param {boolean} immediate
- * @return {*}
- */
-export function debounce(func, wait, immediate) {
-  let timeout, args, context, timestamp, result;
-
-  const later = function() {
-    // 鎹笂涓�娆¤Е鍙戞椂闂撮棿闅�
-    const last = +new Date() - timestamp;
-
-    // 涓婃琚寘瑁呭嚱鏁拌璋冪敤鏃堕棿闂撮殧 last 灏忎簬璁惧畾鏃堕棿闂撮殧 wait
-    if (last < wait && last > 0) {
-      timeout = setTimeout(later, wait - last);
-    } else {
-      timeout = null;
-      // 濡傛灉璁惧畾涓篿mmediate===true锛屽洜涓哄紑濮嬭竟鐣屽凡缁忚皟鐢ㄨ繃浜嗘澶勬棤闇�璋冪敤
-      if (!immediate) {
-        result = func.apply(context, args);
-        if (!timeout) context = args = null;
-      }
-    }
-  };
-
-  return function(...args) {
-    context = this;
-    timestamp = +new Date();
-    const callNow = immediate && !timeout;
-    // 濡傛灉寤舵椂涓嶅瓨鍦紝閲嶆柊璁惧畾寤舵椂
-    if (!timeout) timeout = setTimeout(later, wait);
-    if (callNow) {
-      result = func.apply(context, args);
-      context = args = null;
-    }
-
-    return result;
-  };
-}
-
-/**
- * This is just a simple version of deep copy
- * Has a lot of edge cases bug
- * If you want to use a perfect deep copy, use lodash's _.cloneDeep
- * @param {Object} source
- * @returns {Object}
- */
-export function deepClone(source) {
-  if (!source && typeof source !== "object") {
-    throw new Error("error arguments", "deepClone");
-  }
-  const targetObj = source.constructor === Array ? [] : {};
-  Object.keys(source).forEach(keys => {
-    if (source[keys] && typeof source[keys] === "object") {
-      targetObj[keys] = deepClone(source[keys]);
-    } else {
-      targetObj[keys] = source[keys];
-    }
-  });
-  return targetObj;
-}
-
-/**
- * @param {Array} arr
- * @returns {Array}
- */
-export function uniqueArr(arr) {
-  return Array.from(new Set(arr));
-}
-
-/**
- * @returns {string}
- */
-export function createUniqueString() {
-  const timestamp = +new Date() + "";
-  const randomNum = parseInt((1 + Math.random()) * 65536) + "";
-  return (+(randomNum + timestamp)).toString(32);
-}
-
-/**
- * Check if an element has a class
- * @param {HTMLElement} elm
- * @param {string} cls
- * @returns {boolean}
- */
-export function hasClass(ele, cls) {
-  return !!ele.className.match(new RegExp("(\\s|^)" + cls + "(\\s|$)"));
-}
-
-/**
- * Add class to element
- * @param {HTMLElement} elm
- * @param {string} cls
- */
-export function addClass(ele, cls) {
-  if (!hasClass(ele, cls)) ele.className += " " + cls;
-}
-
-/**
- * Remove class from element
- * @param {HTMLElement} elm
- * @param {string} cls
- */
-export function removeClass(ele, cls) {
-  if (hasClass(ele, cls)) {
-    const reg = new RegExp("(\\s|^)" + cls + "(\\s|$)");
-    ele.className = ele.className.replace(reg, " ");
-  }
-}
-
-export function getTimePeriod(num) {
-  let s1 = "";
-  let s2 = "";
-  let e1 = "";
-  let e2 = "";
-
-  if (num % 2 === 0) {
-    s2 = "30";
-    s1 = ~~(num / 2 - 1) < 10 ? "0" + ~~(num / 2 - 1) : ~~(num / 2 - 1);
-    e1 = ~~(num / 2) < 10 ? "0" + ~~(num / 2) : ~~(num / 2);
-    e2 = "00";
-  } else {
-    s1 = ~~(num / 2) < 10 ? "0" + ~~(num / 2) : ~~(num / 2);
-    s2 = "00";
-    e1 = s1;
-    e2 = "30";
-  }
-  return s1 + ":" + s2 + "-" + e1 + ":" + e2;
-}
diff --git a/energy_management_ui/src/utils/jsencrypt.js b/energy_management_ui/src/utils/jsencrypt.js
deleted file mode 100644
index 83db480..0000000
--- a/energy_management_ui/src/utils/jsencrypt.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import JSEncrypt from 'jsencrypt/bin/jsencrypt'
-
-// 瀵嗛挜瀵圭敓鎴� http://web.chacuo.net/netrsakeypair
-
-const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANL378k3RiZHWx5AfJqdH9xRNBmD9wGD\n' +
-  '2iRe41HdTNF8RUhNnHit5NpMNtGL0NPTSSpPjjI1kJfVorRvaQerUgkCAwEAAQ=='
-
-const privateKey = 'MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8\n' +
-  'mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9p\n' +
-  'B6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue\n' +
-  '/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZ\n' +
-  'UBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6\n' +
-  'vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha\n' +
-  '4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3\n' +
-  'tTbklZkD2A=='
-
-// 鍔犲瘑
-export function encrypt(txt) {
-  const encryptor = new JSEncrypt()
-  encryptor.setPublicKey(publicKey) // 璁剧疆鍏挜
-  return encryptor.encrypt(txt) // 瀵归渶瑕佸姞瀵嗙殑鏁版嵁杩涜鍔犲瘑
-}
-
-// 瑙e瘑
-export function decrypt(txt) {
-  const encryptor = new JSEncrypt()
-  encryptor.setPrivateKey(privateKey)
-  return encryptor.decrypt(txt)
-}
-
diff --git a/energy_management_ui/src/utils/permission.js b/energy_management_ui/src/utils/permission.js
deleted file mode 100644
index 591e1c1..0000000
--- a/energy_management_ui/src/utils/permission.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import store from '@/store'
-
-/**
- * @param {Array} value
- * @returns {Boolean}
- */
-export default function checkPermission(value) {
-  if (value && value instanceof Array && value.length > 0) {
-    const roles = store.getters && store.getters.roles
-    const permissionRoles = value
-
-    const hasPermission = roles.some(role => {
-      return permissionRoles.includes(role)
-    })
-
-    if (!hasPermission) {
-      return false
-    }
-    return true
-  } else {
-    console.error(`need roles! Like v-permission="['admin','editor']"`)
-    return false
-  }
-}
diff --git a/energy_management_ui/src/utils/request.js b/energy_management_ui/src/utils/request.js
deleted file mode 100644
index 147ef09..0000000
--- a/energy_management_ui/src/utils/request.js
+++ /dev/null
@@ -1,65 +0,0 @@
-import axios from 'axios'
-import { Notification, MessageBox, Message } from 'element-ui'
-import store from '@/store'
-import { getToken } from '@/utils/auth'
-
-axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
-// 鍒涘缓axios瀹炰緥
-const service = axios.create({
-  // axios涓姹傞厤缃湁baseURL閫夐」锛岃〃绀鸿姹俇RL鍏叡閮ㄥ垎
-  baseURL: process.env.VUE_APP_BASE_API,
-  // 瓒呮椂
-  timeout: 500000
-})
-// request鎷︽埅鍣�
-service.interceptors.request.use(
-  config => {
-    if (getToken()) {
-      config.headers['Authorization'] = 'Bearer ' + getToken() // 璁╂瘡涓姹傛惡甯﹁嚜瀹氫箟token 璇锋牴鎹疄闄呮儏鍐佃嚜琛屼慨鏀�
-    }
-    return config
-  },
-  error => {
-    console.log(error)
-    Promise.reject(error)
-  }
-)
-
-// 鍝嶅簲鎷︽埅鍣�
-service.interceptors.response.use(res => {
-    const code = res.data.code
-    if (code === 401) {
-      MessageBox.confirm(
-        '鐧诲綍鐘舵�佸凡杩囨湡锛屾偍鍙互缁х画鐣欏湪璇ラ〉闈紝鎴栬�呴噸鏂扮櫥褰�',
-        '绯荤粺鎻愮ず',
-        {
-          confirmButtonText: '閲嶆柊鐧诲綍',
-          cancelButtonText: '鍙栨秷',
-          type: 'warning'
-        }
-      ).then(() => {
-        store.dispatch('LogOut').then(() => {
-          location.reload() // 涓轰簡閲嶆柊瀹炰緥鍖杤ue-router瀵硅薄 閬垮厤bug
-        })
-      })
-    } else if (code !== 200) {
-      Notification.error({
-        title: res.data.msg
-      })
-      return Promise.reject('error')
-    } else {
-      return res.data
-    }
-  },
-  error => {
-    console.log('err' + error)
-    Message({
-      message: error.message,
-      type: 'error',
-      duration: 5 * 1000
-    })
-    return Promise.reject(error)
-  }
-)
-
-export default service
diff --git a/energy_management_ui/src/utils/ruoyi.js b/energy_management_ui/src/utils/ruoyi.js
deleted file mode 100644
index 7782d56..0000000
--- a/energy_management_ui/src/utils/ruoyi.js
+++ /dev/null
@@ -1,133 +0,0 @@
-/**
- * 閫氱敤js鏂规硶灏佽澶勭悊
- * Copyright (c) 2019 ruoyi
- */
-
-const baseURL = process.env.VUE_APP_BASE_API
-
-// 鏃ユ湡鏍煎紡鍖�
-export function parseTime(time, pattern) {
-  if (arguments.length === 0 || !time) {
-    return null
-  }
-  const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
-  let date
-  if (typeof time === 'object') {
-    date = time
-  } else {
-    if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
-      time = parseInt(time)
-    }
-    if ((typeof time === 'number') && (time.toString().length === 10)) {
-      time = time * 1000
-    }
-    date = new Date(time)
-  }
-  const formatObj = {
-    y: date.getFullYear(),
-    m: date.getMonth() + 1,
-    d: date.getDate(),
-    h: date.getHours(),
-    i: date.getMinutes(),
-    s: date.getSeconds(),
-    a: date.getDay()
-  }
-  const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
-    let value = formatObj[key]
-    // Note: getDay() returns 0 on Sunday
-    if (key === 'a') {
-      return ['鏃�', '涓�', '浜�', '涓�', '鍥�', '浜�', '鍏�'][value]
-    }
-    if (result.length > 0 && value < 10) {
-      value = '0' + value
-    }
-    return value || 0
-  })
-  return time_str
-}
-
-// 琛ㄥ崟閲嶇疆
-export function resetForm(refName) {
-  if (this.$refs[refName]) {
-    this.$refs[refName].resetFields();
-  }
-}
-
-// 娣诲姞鏃ユ湡鑼冨洿
-export function addDateRange(params, dateRange) {
-  var search = params;
-  search.beginTime = "";
-  search.endTime = "";
-  if (null != dateRange && '' != dateRange) {
-    search.beginTime = this.dateRange[0];
-    search.endTime = this.dateRange[1];
-  }
-  return search;
-}
-
-// 鍥炴樉鏁版嵁瀛楀吀
-export function selectDictLabel(datas, value) {
-  var actions = [];
-  Object.keys(datas).map((key) => {
-    if (datas[key].dictValue == ('' + value)) {
-      actions.push(datas[key].dictLabel);
-      return false;
-    }
-  })
-  return actions.join('');
-}
-
-// 閫氱敤涓嬭浇鏂规硶
-export function download(fileName) {
-  window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true;
-}
-
-// 閫氱敤涓嬭浇鏂规硶 showfileName锛氫笅杞藉悗鐨勬枃浠跺悕绉板甫鎵╁睍鍚�;filePath:瑕佷笅杞芥枃浠剁殑缁濆璺緞,甯︾潃鏂囦欢鍚嶅拰鎵╁睍鍚嶏紱deleteflage涓嬭浇瀹屾垚鍚庢槸鍚﹀垹闄ゆ枃浠�
-export function fileDownload(showfileName, filePath, deleteflage) {
-  window.location.href = baseURL + "/common/downloadAssign?showFileName=" + encodeURI(showfileName) + "&filePath=" + encodeURI(filePath) + "&delete=" + deleteflage;
-}
-
-// 瀛楃涓叉牸寮忓寲(%s )
-export function sprintf(str) {
-  var args = arguments, flag = true, i = 1;
-  str = str.replace(/%s/g, function () {
-    var arg = args[i++];
-    if (typeof arg === 'undefined') {
-      flag = false;
-      return '';
-    }
-    return arg;
-  });
-  return flag ? str : '';
-}
-
-// 杞崲瀛楃涓诧紝undefined,null绛夎浆鍖栦负""
-export function praseStrEmpty(str) {
-  if (!str || str == "undefined" || str == "null") {
-    return "";
-  }
-  return str;
-}
-
-export function hideCheckAll(row) {
-  if (row.columnIndex === 0) {//浣犻渶瑕佸垽鏂殑鏉′欢
-    return 'disabledCheck'
-  }
-}
-
-export function selectTimeTypeLabel(timeType) {
-  switch (timeType) {
-    case 'HOUR':
-      return "灏忔椂";
-    case 'SCHEDULING':
-      return "鐝粍";
-    case 'DAY':
-      return "澶�";
-    case 'MONTH':
-      return "鏈�";
-    case 'YEAR':
-      return "骞�";
-    default:
-      return "";
-  }
-}
diff --git a/energy_management_ui/src/utils/scroll-to.js b/energy_management_ui/src/utils/scroll-to.js
deleted file mode 100644
index c5d8e04..0000000
--- a/energy_management_ui/src/utils/scroll-to.js
+++ /dev/null
@@ -1,58 +0,0 @@
-Math.easeInOutQuad = function(t, b, c, d) {
-  t /= d / 2
-  if (t < 1) {
-    return c / 2 * t * t + b
-  }
-  t--
-  return -c / 2 * (t * (t - 2) - 1) + b
-}
-
-// requestAnimationFrame for Smart Animating http://goo.gl/sx5sts
-var requestAnimFrame = (function() {
-  return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60) }
-})()
-
-/**
- * Because it's so fucking difficult to detect the scrolling element, just move them all
- * @param {number} amount
- */
-function move(amount) {
-  document.documentElement.scrollTop = amount
-  document.body.parentNode.scrollTop = amount
-  document.body.scrollTop = amount
-}
-
-function position() {
-  return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop
-}
-
-/**
- * @param {number} to
- * @param {number} duration
- * @param {Function} callback
- */
-export function scrollTo(to, duration, callback) {
-  const start = position()
-  const change = to - start
-  const increment = 20
-  let currentTime = 0
-  duration = (typeof (duration) === 'undefined') ? 500 : duration
-  var animateScroll = function() {
-    // increment the time
-    currentTime += increment
-    // find the value with the quadratic in-out easing function
-    var val = Math.easeInOutQuad(currentTime, start, change, duration)
-    // move the document.body
-    move(val)
-    // do the animation unless its over
-    if (currentTime < duration) {
-      requestAnimFrame(animateScroll)
-    } else {
-      if (callback && typeof (callback) === 'function') {
-        // the animation is done so lets callback
-        callback()
-      }
-    }
-  }
-  animateScroll()
-}
diff --git a/energy_management_ui/src/utils/validate.js b/energy_management_ui/src/utils/validate.js
deleted file mode 100644
index 10c1019..0000000
--- a/energy_management_ui/src/utils/validate.js
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * @param {string} path
- * @returns {Boolean}
- */
-export function isExternal(path) {
-  return /^(https?:|mailto:|tel:)/.test(path)
-}
-
-/**
- * @param {string} str
- * @returns {Boolean}
- */
-export function validUsername(str) {
-  const valid_map = ['admin', 'editor']
-  return valid_map.indexOf(str.trim()) >= 0
-}
-
-/**
- * @param {string} url
- * @returns {Boolean}
- */
-export function validURL(url) {
-  const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
-  return reg.test(url)
-}
-
-/**
- * @param {string} str
- * @returns {Boolean}
- */
-export function validLowerCase(str) {
-  const reg = /^[a-z]+$/
-  return reg.test(str)
-}
-
-/**
- * @param {string} str
- * @returns {Boolean}
- */
-export function validUpperCase(str) {
-  const reg = /^[A-Z]+$/
-  return reg.test(str)
-}
-
-/**
- * @param {string} str
- * @returns {Boolean}
- */
-export function validAlphabets(str) {
-  const reg = /^[A-Za-z]+$/
-  return reg.test(str)
-}
-
-/**
- * @param {string} email
- * @returns {Boolean}
- */
-export function validEmail(email) {
-  const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
-  return reg.test(email)
-}
-
-/**
- * @param {string} str
- * @returns {Boolean}
- */
-export function isString(str) {
-  if (typeof str === 'string' || str instanceof String) {
-    return true
-  }
-  return false
-}
-
-/**
- * @param {Array} arg
- * @returns {Boolean}
- */
-export function isArray(arg) {
-  if (typeof Array.isArray === 'undefined') {
-    return Object.prototype.toString.call(arg) === '[object Array]'
-  }
-  return Array.isArray(arg)
-}
-
-export function specialKey(str){
-  const reg = /^\w{3,20}$/;
-  return reg.test(str)
-}
diff --git a/energy_management_ui/src/utils/vueToPdf/htmlToPdf.js b/energy_management_ui/src/utils/vueToPdf/htmlToPdf.js
deleted file mode 100644
index 2a698d6..0000000
--- a/energy_management_ui/src/utils/vueToPdf/htmlToPdf.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import html2pdf from 'html2pdf.js';
-
-export default {
-  install(Vue, options) {
-    Vue.prototype.htmlToPdf = function (refs, fileName = '瀵煎嚭pdf') {
-      let element = refs
-      let opt = {
-        margin: 40,
-        filename: `${fileName}.pdf`,
-        image: {
-          type: 'jpeg',
-          quality: 1
-        },
-        html2canvas: {
-          scale: 1,
-          allowTaint: true,
-          useCORS: true
-        },
-        pagebreak: {
-          mode: 'avoid-all',
-          after: '.avoidThisRow'
-        }, // 鏅鸿兘鍒嗛〉锛岄槻姝㈣鎴柇
-        enableLinks: true, // 鏀寔鏂囨湰涓斁閾炬帴锛屽彲鐐瑰嚮璺宠浆
-        jsPDF: {
-          unit: 'pt',
-          format: 'a2',
-        }
-      }
-      html2pdf(element, opt)
-    };
-  }
-};
diff --git a/energy_management_ui/src/utils/zipdownload.js b/energy_management_ui/src/utils/zipdownload.js
deleted file mode 100644
index 363c45a..0000000
--- a/energy_management_ui/src/utils/zipdownload.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import axios from 'axios'
-import { getToken } from '@/utils/auth'
-
-const mimeMap = {
-  xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
-  zip: 'application/zip'
-}
-
-const baseUrl = process.env.VUE_APP_BASE_API
-export function downLoadZip(str, filename) {
-  var url = baseUrl + str
-  axios({
-    method: 'get',
-    url: url,
-    responseType: 'blob',
-    headers: { 'Authorization': 'Bearer ' + getToken() }
-  }).then(res => {
-    resolveBlob(res, mimeMap.zip)
-  })
-}
-/**
- * 瑙f瀽blob鍝嶅簲鍐呭骞朵笅杞�
- * @param {*} res blob鍝嶅簲鍐呭
- * @param {String} mimeType MIME绫诲瀷
- */
-export function resolveBlob(res, mimeType) {
-  const aLink = document.createElement('a')
-  var blob = new Blob([res.data], { type: mimeType })
-  // //浠巖esponse鐨刪eaders涓幏鍙杅ilename, 鍚庣response.setHeader("Content-disposition", "attachment; filename=xxxx.docx") 璁剧疆鐨勬枃浠跺悕;
-  var patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*')
-  var contentDisposition = decodeURI(res.headers['content-disposition'])
-  var result = patt.exec(contentDisposition)
-  var fileName = result[1]
-  fileName = fileName.replace(/\"/g, '')
-  aLink.href = URL.createObjectURL(blob)
-  aLink.setAttribute('download', fileName) // 璁剧疆涓嬭浇鏂囦欢鍚嶇О
-  document.body.appendChild(aLink)
-  aLink.click()
-  document.body.appendChild(aLink)
-}
diff --git a/energy_management_ui/src/views/alarm/LiChart.vue b/energy_management_ui/src/views/alarm/LiChart.vue
deleted file mode 100644
index 05993f0..0000000
--- a/energy_management_ui/src/views/alarm/LiChart.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-<template>
-  <div :class="className" :style="{height:height,width:width}" />
-</template>
-
-<script>
-import echarts from 'echarts'
-require('echarts/theme/macarons') // echarts theme
-/*import resize from './mixins/resize'*/
-
-export default {
-  /*mixins: [resize],*/
-  props: {
-    className: {
-      type: String,
-      default: 'chart'
-    },
-    width: {
-      type: String,
-      default: '100%'
-    },
-    height: {
-      type: String,
-      default: '350px'
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    }
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val)
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart()
-    })
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return
-    }
-    this.chart.dispose()
-    this.chart = null
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, 'macarons')
-      this.setOptions(this.chartData)
-    },
-    setOptions({ expectedData, actualData } = {}) {
-      this.chart.setOption({
-
-        title: {
-          text: '鎶ヨ鏇茬嚎'
-        },
-        tooltip: {
-          trigger: 'axis'
-        },
-        legend: {
-          data: ['涓婇檺鍊�', '涓嬮檺鍊�' ,'鎶ヨ鍊�']
-        },
-        grid: {
-          left: '3%',
-          right: '4%',
-          bottom: '3%',
-          containLabel: true
-        },
-        toolbox: {
-          feature: {
-            saveAsImage: {}
-          }
-        },
-        xAxis: {
-          type: 'category',
-          boundaryGap: false,
-          data: ['0鐐�', '1鐐�', '2鐐�', '3鐐�', '4鐐�', '5鐐�', '6鐐�']
-        },
-        yAxis: {
-          type: 'value'
-        },
-        series: [
-          {
-            name: '涓婇檺鍊�',
-            type: 'line',
-            stack: '鎬婚噺',
-            data: [150, 150, 150, 150, 150, 150, 150]
-          },
-          {
-            name: '涓嬮檺鍊�',
-            type: 'line',
-            stack: '鎬婚噺',
-            data: [120, 120, 120, 120, 120, 120, 120]
-          },
-          {
-            name: '鎶ヨ鍊�',
-            type: 'line',
-            stack: '鎬婚噺',
-            data: [182, 182, 191, 234, 290, 330, 310]
-          },
-        ]
-      })
-    }
-  }
-}
-</script>
diff --git a/energy_management_ui/src/views/alarm/collectionIndex.vue b/energy_management_ui/src/views/alarm/collectionIndex.vue
deleted file mode 100644
index d29ad22..0000000
--- a/energy_management_ui/src/views/alarm/collectionIndex.vue
+++ /dev/null
@@ -1,345 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-      class="query-form"
-    >
-      <el-form-item label="鎸囨爣缂栫爜" prop="code">
-        <el-input
-          v-model="queryParams.code"
-          placeholder="璇疯緭鍏ユ寚鏍囩紪鐮�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-          style="width:160px"
-        />
-      </el-form-item>
-
-      <el-form-item label="鎸囨爣鍚嶇О" prop="name">
-        <el-input
-          v-model="queryParams.name"
-          placeholder="璇疯緭鍏ユ寚鏍囧悕绉�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-          style="width:160px"
-        />
-      </el-form-item>
-      <el-form-item label="鏃堕棿">
-        <el-date-picker
-          v-model="dateRange"
-          size="small"
-          style="width: 240px"
-          value-format="yyyy-MM-dd"
-          type="daterange"
-          range-separator="-"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡"
-        ></el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >鎼滅储</el-button
-        >
-      </el-form-item>
-    </el-form>
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click=""
-          v-hasPermi="['']"
-          >瀵煎嚭
-        </el-button>
-      </el-col>
-    </el-row>
-    <el-table
-      :data="tableData"
-      v-loading="loading"
-      border
-      @selection-change=""
-      @cell-click="openDlg"
-    >
-      <el-table-column label="鎸囨爣缂栫爜" align="center" prop="name" />
-      <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="number" />
-      <el-table-column label="瀹為檯鍊�" align="center" prop="value" />
-      <el-table-column label="涓嬮檺鍊�" align="center" prop="values" />
-      <el-table-column label="涓婇檺鍊�" align="center" prop="code" />
-      <el-table-column label="鎶ヨ娆℃暟" align="center" prop="what">
-        <template slot-scope="scope">
-          <div style="color:blue;text-decoration:underline ;cursor:pointer">
-            {{ scope.row.what }}
-          </div>
-        </template>
-      </el-table-column>
-    </el-table>
-    <!--寮规-->
-    <el-dialog
-      :title="title"
-      :visible.sync="open"
-      width="1000px"
-      :close-on-click-modal="false"
-    >
-      <el-row style="padding:16px 16px 0;margin-bottom:32px;">
-        <line-chart :chart-data="lineChartData" />
-      </el-row>
-      <el-table :data="tableData" :show-header="hiddenTableHeader" border="1px">
-        <el-table-column label="鎶ヨ鏃堕棿" prop="one" />
-        <el-table-column label="鎶ヨ鍊�" prop="two" />
-        <el-table-column label="瀹為檯鍊�" prop="three" />
-        <el-table-column label="瀹為檯鍊�" prop="four" />
-        <el-table-column label="瀹為檯鍊�" prop="five" />
-        <el-table-column label="瀹為檯鍊�" prop="six" />
-        <el-table-column label="瀹為檯鍊�" prop="seven" />
-        <el-table-column label="瀹為檯鍊�" prop="eieght" />
-      </el-table>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-const lineChartData = {
-  newVisitis: {}
-};
-import {
-  addEnergyindex,
-  delEnergyindex,
-  exportEnergyindex,
-  getEnergyindex,
-  listEnergyindex,
-  updateEnergyindex
-} from "@/api/basicsetting/energyindex";
-import LineChart from "./LiChart";
-
-export default {
-  name: "energyIndex",
-  components: {
-    LineChart
-  },
-  data() {
-    return {
-      hiddenTableHeader: false,
-      lineChartData: lineChartData.newVisitis,
-      // 閬僵灞�
-      loading: false,
-      // 閫変腑鏁扮粍
-      ids: [],
-      dateRange: [],
-      names: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-      List: [],
-      energyindexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      indexIdOptions: [],
-      // 鎸囨爣鍚嶇О瀛楀吀
-      nameOptions: [],
-      // 鎸囨爣缂栫爜瀛楀吀
-      codeOptions: [],
-      // 绯荤粺鎸囨爣鍒嗙被锛�1-鑳芥簮绫伙紝2-浜у搧绫伙紝3-鑳芥晥绫伙紝4-缁忚惀绫伙紝5-鍏朵粬瀛楀吀
-      indexCategoryOptions: [],
-      // 澶囨敞瀛楀吀
-      remarkOptions: [],
-      // 鍗曚綅瀛楀吀
-      unitIdOptions: [],
-      // 鏌ヨ鍙傛暟
-      lineChartData: {
-        newVisitis: null
-      },
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        code: undefined,
-        indexCategory: undefined,
-        nodeId: undefined
-      },
-
-      tableData: [],
-      datas: [
-        {
-          name: "BUG",
-          number: "98013",
-          value: "500",
-          values: "450",
-          code: "480",
-          what: "5",
-          one: "鎶ヨ鏃堕棿",
-          two: "0鐐�",
-          three: "1鐐�",
-          four: "2鐐�",
-          five: "3鐐�",
-          six: "4鐐�",
-          seven: "5鐐�",
-          eieght: "6鐐�"
-        },
-        {
-          name: "BUG",
-          number: "98013",
-          value: "500",
-          values: "450",
-          code: "480",
-          what: "5",
-          one: "鎶ヨ闄愬��",
-          two: "210",
-          three: "172",
-          four: "181",
-          five: "224",
-          six: "280",
-          seven: "310",
-          eieght: "300"
-        },
-        {
-          name: "BUG",
-          number: "98013",
-          value: "500",
-          values: "450",
-          code: "480",
-          what: "5",
-          one: "鎶ヨ鏃跺��",
-          two: "300",
-          three: "182",
-          four: "191",
-          five: "234",
-          six: "290",
-          seven: "330",
-          eieght: "310"
-        }
-      ],
-
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        name: [
-          { required: true, message: "鎸囨爣鍚嶇О涓嶈兘涓虹┖", trigger: "blur" },
-          { min: 2, max: 20, message: "闀垮害鍦� 2 鍒� 20 涓瓧绗�", trigger: "blur" }
-        ],
-        code: [
-          { required: true, message: "鎸囨爣缂栫爜涓嶈兘涓虹┖", trigger: "blur" },
-          {
-            min: 2,
-            max: 20,
-            message: "闀垮害鍦� 2 鍒� 20 涓瓧绗�",
-            trigger: "blur"
-          },
-          {
-            pattern: /^[a-zA-Z][A-Za-z0-9_-]+$/,
-            message: "蹇呴』涓烘暟瀛椼�佸瓧姣嶃��- 鎴朹 锛屼笖棣栧瓧绗﹀彧鑳戒负瀛楁瘝"
-          }
-        ],
-        indexCategory: [
-          { required: true, message: "璇烽�夋嫨鎸囨爣鍒嗙被", trigger: "blur" }
-        ]
-      },
-      currentNode: undefined,
-      indexCategoryDefaultVal: undefined,
-      unitDefaultVal: undefined
-    };
-  },
-
-  created() {
-    /*  this.getList();*/
-    this.getDicts("sys_index_category").then(response => {
-      this.indexCategoryOptions = response.data;
-      this.indexCategoryDefaultVal = this.indexCategoryOptions.find(
-        f => f.isDefault === "Y"
-      );
-    });
-    this.getDicts("sys_unit").then(response => {
-      this.unitIdOptions = response.data;
-      this.unitDefaultVal = this.unitIdOptions.find(f => f.isDefault === "Y");
-    });
-    setInterval(this.getList(), 30000);
-
-    this.bpy();
-  },
-  methods: {
-    /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-    getList(modelNode) {
-      this.currentNode = modelNode;
-      if (modelNode) {
-        this.loading = true;
-        this.queryParams.nodeId = modelNode.id;
-        listEnergyindex(this.queryParams).then(response => {
-          this.energyindexList = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        });
-      } else {
-        this.energyindexList = [];
-      }
-    },
-    bpy() {
-      this.tableData = this.datas;
-    },
-    /** 鏌ョ湅鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const indexId = row.indexId || this.ids;
-      /*  getEnergyindex(indexId).then(response => {
-            this.form = response.data;
-    this.title = "寮傚父淇℃伅"+  response.data.name ;
-          });*/
-
-      this.open = true;
-      /*  this.title = "鎶ヨ鏄庣粏";*/
-    },
-    // 绯荤粺鎸囨爣鍒嗙被锛�1-鑳芥簮绫伙紝2-浜у搧绫伙紝3-鑳芥晥绫伙紝4-缁忚惀绫伙紝5-鍏朵粬瀛楀吀缈昏瘧
-    indexCategoryFormat(row, column) {
-      return this.selectDictLabel(this.indexCategoryOptions, row.indexCategory);
-    },
-
-    // 鍗曚綅瀛楀吀缈昏瘧
-    unitIdFormat(row, column) {
-      return this.selectDictLabel(this.unitIdOptions, row.unitId);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        indexId: undefined,
-        name: undefined,
-        code: undefined,
-        indexCategory: undefined,
-        remark: undefined,
-        unitId: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList(this.currentNode);
-    },
-    openDlg() {
-      this.open = true;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/alarm/index.vue b/energy_management_ui/src/views/alarm/index.vue
deleted file mode 100644
index 425be7c..0000000
--- a/energy_management_ui/src/views/alarm/index.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            <el-select v-model="modelData" placeholder="璇烽�夋嫨妯″瀷"
-                       style="width:220px"
-                       size="small"
-                       @change="changeModel">
-              <el-option
-                v-for="model in modelInfoOptions"
-                :key="model.modelCode"
-                :label="model.modelName"
-                :value="model.modelCode"
-              />
-            </el-select>
-           <!-- <el-button icon="el-icon-setting" circle title="绠$悊妯″瀷" style="float:right;padding:8px"
-                       @click="manageModel"></el-button>-->
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <el-main style="padding:0">
-          <CollectionSetting ref="CollectionSetting"></CollectionSetting>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import CollectionSetting from "./indexCollectionSetting";
-  import ModelNode from "../basicsetting/modelNode/modelNode";
-  import {listModel} from "@/api/basicsetting/model";
-
-
-
-  export default {
-    components: {CollectionSetting, ModelNode},
-    created() {
-      listModel({isShow: 1}).then(response => {
-        this.modelInfoOptions = response.data;
-        if (this.modelInfoOptions.length > 0) {
-          this.modelData = this.modelInfoOptions[0].modelCode;
-          this.$refs.modelNode.getList(this.modelData);
-        }
-      });
-    },
-
-    data() {
-      return {
-        modelData: '',
-        modelInfoOptions: []
-      }
-    },
-    methods: {
-      changeNode: function (node) {
-        this.$refs.CollectionSetting.modelNodeChange(node);
-      },
-      manageModel: function () {
-        this.$router.push('/model');
-      },
-      changeModel: function (item) {
-        this.$refs.modelNode.getList(item);
-      },
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/alarm/indexCollectionSetting.vue b/energy_management_ui/src/views/alarm/indexCollectionSetting.vue
deleted file mode 100644
index 4a1f933..0000000
--- a/energy_management_ui/src/views/alarm/indexCollectionSetting.vue
+++ /dev/null
@@ -1,324 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-card class="box-card">
-      <div slot="header" class="clearfix">
-        <span>{{currentNode?currentNode.label:''}}--鑺傜偣璁剧疆</span>
-      </div>
-      <el-tabs>
-        <el-tab-pane :disabled="disabledSetting">
-          <span slot="label"><i class="el-icon-reading"></i>瀹炴椂鏁版嵁</span>
-          <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" class="query-form">
-            <el-form-item label="鎸囨爣缂栫爜" prop="code">
-              <el-input
-                v-model="queryParams.code"
-                placeholder="璇疯緭鍏ユ寚鏍囩紪鐮�"
-                clearable
-                size="small"
-                @keyup.enter.native="handleQuery"
-                style="width:160px"
-              />
-            </el-form-item>
-            <el-form-item label="鎸囨爣鍚嶇О" prop="name">
-              <el-input
-                v-model="queryParams.name"
-                placeholder="璇疯緭鍏ユ寚鏍囧悕绉�"
-                clearable
-                size="small"
-                @keyup.enter.native="handleQuery"
-                style="width:160px"
-              />
-            </el-form-item>
-            <el-form-item label="鏃堕棿">
-              <el-date-picker
-                v-model="dateRange"
-                size="small"
-                style="width: 240px"
-                value-format="yyyy-MM-dd"
-                type="daterange"
-                range-separator="-"
-                start-placeholder="寮�濮嬫棩鏈�"
-                end-placeholder="缁撴潫鏃ユ湡"
-              ></el-date-picker>
-            </el-form-item>
-              <el-form-item>
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-            </el-form-item>
-          </el-form>
-          <el-table   :data="tableData"  v-loading="loading"    border @selection-change=""  >
-            <el-table-column label="鎸囨爣缂栫爜"  align="center"  prop="name"/>
-            <el-table-column label="鎸囨爣鍚嶇О"  align="center"  prop="number"/>
-            <el-table-column label="瀹為檯鍊�"  align="center"  prop="value"/>
-            <el-table-column label="涓嬮檺鍊�"  align="center"  prop="values"/>
-            <el-table-column label="涓婇檺鍊�"  align="center"  prop="code"/>
-            <el-table-column label="鎶ヨ鏃堕棿"  align="center"  prop="time"/>
-          </el-table>
-        </el-tab-pane>
-        <el-tab-pane :disabled="disabledSetting">
-          <span slot="label"><i class="el-icon-s-data"></i>鍘嗗彶鏁版嵁</span>
-          <CollectionIndex ref="CollectionIndex"></CollectionIndex>
-        </el-tab-pane>
-      </el-tabs>
-    </el-card>
-  </div>
-</template>
-<script>
-  import {
-    delDevice,
-    delEnergy,
-    delIndex,
-    delProduct,
-    getSettingDevice,
-    getSettingEnergy,
-    getSettingIndex,
-    getSettingProduct,
-    setNodeToIndex,
-    setDevice,
-    setEnergy,
-    setProduct
-  } from '@/api/basicsetting/modelNode'
-  import CollectionIndex from "./collectionIndex";
-  import {List} from "@/api/basicsetting/state"
-
-
-  export default {
-    name: "collectionIndex",
-    components: {CollectionIndex},
-    data() {
-      return {
-        dateRange:'',
-        currentNode: '',
-        deviceDialog: false,
-        energyDialog: false,
-        productDialog: false,
-        collectIndexDialog: false,
-        indexLoading: false,
-        deviceLoading: false,
-        energyLoading: false,
-        productLoading: false,
-        settingEnergyList: [],
-        settingDeviceList: [],
-        settingProductList: [],
-        settingIndexList: [],
-        disabledSetting: true,
-        nodeId:undefined,
-        loading: false,
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          name: undefined,
-          code: undefined,
-          indexCategory: undefined,
-          nodeId: undefined
-        },
-
-
-        tableData: [],
-        datab :[{
-          name : 'BUG',
-          number : '98013',
-          value : '500',
-          values :'450',
-          code :'480',
-          time :'2020-3-12'
-        },
-          {
-            name : '98014',
-            number : '鐬椂娴侀噺',
-            value : '1000',
-            values :'960',
-            code :'980',
-            time :'2020-3-15'
-          }
-        ],
-
-      }
-    },
-    created() {
-      this.bpq()
-    },
-    methods: {
-      modelNodeChange(modelNode) {
-        this.nodeId = modelNode.id;
-        this.getList(this.nodeId);
-        this.settingDeviceList = [];
-        this.settingIndexList = [];
-        this.disabledSetting = modelNode === undefined || modelNode === '' || modelNode === null;
-        if (modelNode) {
-          this.currentNode = modelNode;
-          this.deviceLoading = true;
-          getSettingDevice(modelNode.id).then((response) => {
-            if (response.code === 200) {
-              this.settingDeviceList = response.data;
-            } else {
-              this.$message.error(response.msg);
-            }
-            this.deviceLoading = false;
-          });
-
-          this.energyLoading = true;
-          getSettingEnergy(modelNode.id).then((response) => {
-            if (response.code === 200) {
-              this.settingEnergyList = response.data;
-            } else {
-              this.$message.error(response.msg);
-            }
-            this.energyLoading = false;
-          });
-
-          this.productLoading = true;
-          getSettingProduct(modelNode.id).then((response) => {
-            if (response.code === 200) {
-              this.settingProductList = response.data;
-            } else {
-              this.$message.error(response.msg);
-            }
-            this.productLoading = false;
-          });
-
-          this.indexLoading = true;
-          getSettingIndex(modelNode.id).then((response) => {
-            if (response.code === 200) {
-              this.settingIndexList = response.data;
-            } else {
-              this.$message.error(response.msg);
-            }
-            this.indexLoading = false;
-          });
-
-          // this.$refs.energyIndex.getList(modelNode);
-        }
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.getList(this.currentNode);
-      },
-
-      getList(e)
-      {
-        List("STATISTIC",e).then((response) => {
-          if (response.code === 200) {
-            this.settingIndexList = response.data;
-          } else {
-            this.$message.error(response.msg);
-          }
-          this.indexLoading = false;
-        });
-
-      },
-      deviceSetting() {
-        this.deviceDialog = true;
-      },
-      energySetting() {
-        this.energyDialog = true;
-      },
-      productSetting() {
-        this.productDialog = true;
-      },
-      collectIndexSetting() {
-        this.collectIndexDialog = true;
-      },
-      showDeviceDialog() {
-        this.$nextTick(() => {
-          this.$refs.deviceSetting.init(this.settingDeviceList);
-        })
-      },
-      showEnergyDialog() {
-        this.$nextTick(() => {
-          this.$refs.energySetting.init(this.settingEnergyList);
-        })
-      },
-      showProductDialog() {
-        this.$nextTick(() => {
-          this.$refs.productSetting.init(this.settingProductList);
-        })
-      },
-      showCollectIndexDialog() {
-        this.$nextTick(() => {
-          this.$refs.collectIndexSetting.init(this.currentNode, this.settingIndexList);
-        })
-      },
-      deviceConfirmSelect(selectedDevice) {
-        this.settingDeviceList = selectedDevice;
-        let deviceIds = selectedDevice.map(item => item.id);
-        setDevice(this.currentNode.id, deviceIds).then((response) => {
-          if (response.code !== 200) {
-            this.$message.error(response.msg);
-          }
-        });
-      },
-      energyConfirmSelect(selectedEnergy) {
-        this.settingEnergyList = selectedEnergy;
-        let energyIds = selectedEnergy.map(item => item.enerid);
-        setEnergy(this.currentNode.id, energyIds).then((response) => {
-          if (response.code !== 200) {
-            this.$message.error(response.msg);
-          }
-        });
-      },
-      productConfirmSelect(selectedProduct) {
-        this.settingProductList = selectedProduct;
-        let productIds = selectedProduct.map(item => item.productid);
-        setProduct(this.currentNode.id, productIds).then((response) => {
-          if (response.code !== 200) {
-            this.$message.error(response.msg);
-          }
-        });
-      },
-      collectIndexConfirmSelect(selectedIndex) {
-        this.settingIndexList = selectedIndex;
-        let indexIds = selectedIndex.map(item => item.indexId);
-        setNodeToIndex(this.currentNode.id, indexIds).then((response) => {
-          if (response.code !== 200) {
-            this.$message.error(response.msg);
-          }
-        });
-      },
-      handleSelectionChange() {
-      },
-      delDevice(row) {
-        delDevice(this.currentNode.id, row.id).then((response) => {
-          if (response.code === 200) {
-            this.settingDeviceList = this.settingDeviceList.filter(f => f.id !== row.id);
-          } else {
-            this.$message.error(response.msg);
-          }
-        });
-      },
-      delEnergy(row) {
-        delEnergy(this.currentNode.id, row.enerid).then((response) => {
-          if (response.code === 200) {
-            this.settingEnergyList = this.settingEnergyList.filter(f => f.enerid !== row.enerid);
-          } else {
-            this.$message.error(response.msg);
-          }
-        });
-      },
-      delProduct(row) {
-        delProduct(this.currentNode.id, row.productid).then((response) => {
-          if (response.code === 200) {
-            this.settingProductList = this.settingProductList.filter(f => f.productid !== row.productid);
-          } else {
-            this.$message.error(response.msg);
-          }
-        });
-      },
-      bpq(){
-        this.tableData=this.datab;
-      },
-      delIndex(row) {
-        delIndex(this.currentNode.id, row.indexId).then((response) => {
-          if (response.code === 200) {
-            this.settingIndexList = this.settingIndexList.filter(f => f.indexId !== row.indexId);
-          } else {
-            this.$message.error(response.msg);
-          }
-        });
-      }
-    }
-  }
-</script>
-
-<style scoped>
-
-</style>
diff --git a/energy_management_ui/src/views/alarmItem/cjdIndex.vue b/energy_management_ui/src/views/alarmItem/cjdIndex.vue
deleted file mode 100644
index 422a599..0000000
--- a/energy_management_ui/src/views/alarmItem/cjdIndex.vue
+++ /dev/null
@@ -1,685 +0,0 @@
-<template>
-  <div class="app-container item-style" style="padding:0">
-    <!--<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" class="query-form">-->
-      <!--<el-form-item label="鎸囨爣鍚嶇О" prop="name">-->
-        <!--<el-input-->
-          <!--v-model="queryParams.name"-->
-          <!--placeholder="璇疯緭鍏ユ寚鏍囧悕绉�"-->
-          <!--clearable-->
-          <!--size="small"-->
-          <!--@keyup.enter.native="handleQuery"-->
-          <!--style="width:160px"-->
-        <!--/>-->
-      <!--</el-form-item>-->
-      <!--<el-form-item label="鎸囨爣缂栫爜" prop="code">-->
-        <!--<el-input-->
-          <!--v-model="queryParams.code"-->
-          <!--placeholder="璇疯緭鍏ユ寚鏍囩紪鐮�"-->
-          <!--clearable-->
-          <!--size="small"-->
-          <!--@keyup.enter.native="handleQuery"-->
-          <!--style="width:160px"-->
-        <!--/>-->
-      <!--</el-form-item>-->
-      <!--<el-form-item label="鎸囨爣鍒嗙被" prop="indexCategory">-->
-        <!--<el-select v-model="queryParams.indexCategory" placeholder="璇烽�夋嫨鎸囨爣鍒嗙被" clearable-->
-                   <!--style="width:150px"-->
-                   <!--size="small">-->
-          <!--<el-option-->
-            <!--v-for="dict in indexCategoryOptions"-->
-            <!--:key="dict.dictValue"-->
-            <!--:label="dict.dictLabel"-->
-            <!--:value="dict.dictValue"-->
-          <!--/>-->
-        <!--</el-select>-->
-      <!--</el-form-item>-->
-      <!--<el-form-item>-->
-        <!--<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>-->
-      <!--</el-form-item>-->
-    <!--</el-form>-->
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          size="mini"
-          :disabled="multiple"
-          @click='updateStateBtn("1")'
-          v-hasPermi="['system:alarmitem:edit']"
-        >鍚敤
-        </el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          size="mini"
-          :disabled="multiple"
-          @click='updateStateBtn("2")'
-          v-hasPermi="['energyindex:energyindex:remove']"
-        >鍋滄
-        </el-button>
-      </el-col>
-      <!--<el-col :span="1.5">-->
-        <!--<el-button-->
-          <!--type="success"-->
-          <!--size="mini"-->
-          <!--:disabled="single"-->
-          <!--@click="save"-->
-          <!--v-hasPermi="['energyindex:energyindex:edit']"-->
-          <!--&gt;淇濆瓨-->
-        <!--</el-button>-->
-      <!--</el-col>-->
-    </el-row>
-
-    <!--琛ㄦ牸-->
-    <el-form :rules="model.rules" :model="model"  ref="form">
-      <el-table v-loading="loading" :data="model.energyindexList" border @selection-change="handleSelectionChange" :default-sort = "{prop: 'date', order: 'descending'}">
-        <el-table-column type="selection" width="55" align="center"/>
-        <el-table-column label="閲囬泦鐐瑰悕绉�" align="center" prop="name"/>
-        <el-table-column label="閲囬泦鐐圭紪鐮�" align="center" prop="code"/>
-        <el-table-column label="鍚仠鐘舵��" align="center" prop="indexCategory" class-name="small-padding fixed-width">
-        </el-table-column>
-        <el-table-column label="鎿嶄綔" width="150" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="earlyWarning(scope.row)"
-              v-hasPermi="['basicsetting:template:edit']"
-            >鎶ヨ
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-    </el-form>
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 娣诲姞鎴栦慨鏀规寚鏍囦俊鎭璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" :close-on-click-modal="false">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="鎸囨爣鍚嶇О" prop="name">
-          <el-input v-model="form.name" placeholder="璇疯緭鍏ユ寚鏍囧悕绉�"/>
-        </el-form-item>
-        <el-form-item label="鎸囨爣缂栫爜" prop="code">
-          <el-input v-model="form.code" placeholder="璇疯緭鍏ユ寚鏍囩紪鐮�"/>
-        </el-form-item>
-        <el-form-item label="鎸囨爣鍒嗙被">
-          <el-select v-model="form.indexCategory" placeholder="璇烽�夋嫨鎸囨爣鍒嗙被" prop="indexCategory">
-            <el-option
-              v-for="dict in indexCategoryOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鍗曚綅">
-          <el-select v-model="form.unitId" placeholder="璇烽�夋嫨鍗曚綅">
-            <el-option
-              v-for="dict in unitIdOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-
-    <!--鎶ヨ鐣岄潰start-->
-    <!-- 娣诲姞鎴栦慨鏀规寚鏍囦俊鎭璇濇 -->
-    <el-dialog :title="settingModel.title" :visible.sync="settingModel.open" width="800px" :close-on-click-modal="false"  @close='closeYjDialog'>
-      <el-form ref="settingForm" :model="settingModel" :rules="settingModel.rules" label-width="80px">
-        <el-form-item label="鎶ヨ绾у埆">
-          <el-select v-model="alarmLevel" placeholder="鎶ヨ绾у埆" clearable
-                     style="width:150px"
-                     size="small">
-            <el-option
-              v-for="dict in settingModel.alarmLevelOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            />
-          </el-select>
-        </el-form-item>
-        <el-table v-loading="loading" :data="settingModel.settingOptions" border @selection-change="handleSelectionChange"
-                  :default-sort = "{prop: 'date', order: 'descending'}" :span-method="arraySpanMethod">
-          <!--<el-table-column type="selection" width="55" align="center"/>-->
-          <el-table-column label="鏃舵" align="center" prop="timeSlotName"/>
-          <el-table-column label="闄愬�肩被鍨�" align="center" prop="limitTypeName" width="120"/>
-          <el-table-column label="鎶ヨ闄愬埗绫诲瀷" align="center" prop="alarmType" width="120"  :formatter="typeFormat"/>
-          <el-table-column label="闄愬��" align="center" prop="limitVal">
-            <template slot-scope="scope">
-              <el-form-item :prop="'settingOptions.' + scope.$index + '.limitVal'" :rules='settingModel.rules.numRule'>
-                <el-input style="width:200px"  v-model="scope.row.limitVal"></el-input>
-              </el-form-item>
-            </template>
-          </el-table-column>
-        </el-table>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="settingSubmitForm">纭� 瀹�</el-button>
-        <el-button @click="yjSetCancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-    <!--棰勮鐣岄潰end-->
-  </div>
-</template>
-
-<script>
-  import {getSetting,listSet,updateSet,getSettingIndex,getStartStop,updateDialogForm,getSettingCount} from "@/api/alarmItem/alarmItem"
-  import {listLimitType} from "@/api/basicsetting/limitType"
-  const  myModelNode = undefined;
-  export default {
-    name: 'EnergyIndex',
-    data() {
-      const checkNum = (rule, value, callback) => {
-        let reg =  /(^([-]?)[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^([-]?)(0){1}$)|(^([-]?)[0-9]\.[0-9]([0-9])?$)/;
-        if (!reg.test(value)&&value!="") {
-          callback(new Error('鏁板瓧鍙�2浣嶅皬鏁�'));
-        } else {
-          callback();
-        }
-      };
-      return {
-        // 閬僵灞�
-        loading: false,
-        // 閫変腑鏁扮粍
-        ids: [],
-        names: [],
-        // 闈炲崟涓鐢�
-        single: true,
-        // 闈炲涓鐢�
-        multiple: true,
-        // 鎬绘潯鏁�
-        total: 0,
-        //table
-        // 琛ㄥ崟鍙傛暟
-        form:{
-          supplier2:"",
-          type:"",
-          desc:"",
-          input:"",
-          min:"",
-          max:""
-        },
-        //閰嶇疆琛ㄤ娇鐢ㄦā鍨�
-        settingModel:{
-          title:"",
-          open:false,
-          settingOptions:[
-            // {
-            //   interval:",
-            //   limit:"",
-            //   limit_value:"",
-            // },
-          ],
-          // 鏃舵鏁扮粍
-          timeSlotOptions:[],
-          limitTypeOptions:[],
-          //鎶ヨ绾у埆
-          alarmLevelOptions:[],
-          //鍝嶅簲
-          resposeList:[],
-          stateById:"",
-          rules: {
-            numRule: [
-              {type:"number",validator: checkNum,trigger: "change"},
-            ],
-          },
-        },
-        model:{
-          // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-          energyindexList: [],
-          rules: {
-            numRule: [
-              {type:"number",validator: checkNum,trigger: "change"},
-              // {pattern: /^\d+(\.\d{0,2})?$/, message: '鏁板瓧鍙�2浣嶅皬鏁�', trigger: "change"}
-            ],
-          },
-        },
-        //涓昏〃閫変腑鐨勫惎鍋滅姸鎬佹暟缁�
-        startStopOptions:[],
-
-        editModeEnabled:true,
-        // 寮瑰嚭灞傛爣棰�
-        title: "",
-        // 鏄惁鏄剧ず寮瑰嚭灞�
-        open: false,
-        // 涓婚敭瀛楀吀
-        indexIdOptions: [],
-        // 鎸囨爣鍚嶇О瀛楀吀
-        nameOptions: [],
-        // 鎸囨爣缂栫爜瀛楀吀
-        codeOptions: [],
-        // 绯荤粺鎸囨爣鍒嗙被锛�1-鑳芥簮绫伙紝2-浜у搧绫伙紝3-鑳芥晥绫伙紝4-缁忚惀绫伙紝5-鍏朵粬瀛楀吀
-        indexCategoryOptions: [],
-        // 澶囨敞瀛楀吀
-        remarkOptions: [],
-        // 鍗曚綅瀛楀吀
-        unitIdOptions: [],
-        //鎶ヨ绾у埆
-        alarmLevel:"",
-        // 榛樿鍊�
-        dictDefaultVal:undefined,
-        // 鏌ヨ鍙傛暟
-        hbCount:0,
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          name: undefined,
-          code: undefined,
-          indexCategory: undefined,
-          nodeId: undefined,
-          //鎸囨爣index
-          indexType:"COLLECT"
-        },
-        // 琛ㄥ崟鏍¢獙
-        rules: {
-          name: [
-            {required: true, message: "鎸囨爣鍚嶇О涓嶈兘涓虹┖", trigger: "blur"},
-            {min: 2, max: 20, message: '闀垮害鍦� 2 鍒� 20 涓瓧绗�', trigger: 'blur'}
-          ], code: [
-            {required: true, message: "鎸囨爣缂栫爜涓嶈兘涓虹┖", trigger: "blur"},
-            {min: 2, max: 20, message: '闀垮害鍦� 2 鍒� 20 涓瓧绗�', trigger: 'blur'},
-            {pattern: /^[a-zA-Z][A-Za-z0-9_-]+$/, message: '蹇呴』涓烘暟瀛椼�佸瓧姣嶃��- 鎴朹 锛屼笖棣栧瓧绗﹀彧鑳戒负瀛楁瘝'}
-          ], indexCategory: [
-            {required: true, message: "璇烽�夋嫨鎸囨爣鍒嗙被", trigger: "blur"}
-          ]
-        },
-        currentNode: undefined,
-        indexCategoryDefaultVal: undefined,
-        unitDefaultVal: undefined
-      };
-    },
-    created() {
-      // this.getList();
-      this.getDicts("warn_time_slot").then(response => {
-        this.settingModel.timeSlotOptions = response.data;
-      });
-      listLimitType(this.queryParams).then(response => {
-        this.hbCount = response.rows.length;
-        this.settingModel.limitTypeOptions = response.rows;
-      });
-      this.getDicts("alarm_type").then(response => {
-        this.settingModel.alarmTypeOptions = response.data;
-      });
-      this.getDicts("alarm_level").then(response => {
-        this.settingModel.alarmLevelOptions = response.data;
-        this.dictDefaultVal = this.settingModel.alarmLevelOptions.find(f => f.isDefault === 'Y');
-      });
-    },
-    methods: {
-      /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-      setModelNode(modelNode)
-      {
-        this.myModelNode=modelNode;
-        this.currentNode = modelNode;
-        this.getList();
-      },
-      /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-      getList() {
-        if (this.myModelNode) {
-          this.loading = true;
-          this.queryParams.nodeId = this.myModelNode.id;
-          //鎺ュ彛
-          getSettingIndex(this.queryParams).then(response => {
-            // console.log("涓昏〃=="+JSON.stringify(response));
-            this.model.energyindexList = response.data;
-            this.initstartstop();
-            this.loading = false;
-          });
-        } else {
-          this.energyindexList = [];
-        }
-      },
-      // 绯荤粺鎸囨爣鍒嗙被锛�1-鑳芥簮绫伙紝2-浜у搧绫伙紝3-鑳芥晥绫伙紝4-缁忚惀绫伙紝5-鍏朵粬瀛楀吀缈昏瘧
-      indexCategoryFormat(row, column) {
-        return this.selectDictLabel(this.indexCategoryOptions, row.indexCategory);
-      },
-      initstartstop()
-      {
-        for(let i=0;i<this.model.energyindexList.length;i++)
-        {
-          let ndy ="";
-          getStartStop(this.model.energyindexList[i].indexId).then(response => {
-            if(response.code=='200')
-            {
-              if(response.msg=="1")
-              {
-                this.model.energyindexList[i].indexCategory= "鍚姩";
-              }else if(response.msg=="2")
-              {
-                this.model.energyindexList[i].indexCategory= "鍋滄";
-              }else {
-                this.model.energyindexList[i].indexCategory= "灏氭湭璁剧疆";
-              }
-            }else
-            {
-              this.model.energyindexList[i].indexCategory= "";
-            }
-          });
-        }
-      },
-      // 鍗曚綅瀛楀吀缈昏瘧
-      startStopFormat(row, column) {
-        //鍙栧惎鍋滅姸鎬�
-        let ndy ="";
-        // getStartStop(row.indexId).then(response => {
-        //   if(response.code=='200')
-        //   {
-        //     if(response.msg=="1")
-        //     {
-        //       ndy= "鍚姩";
-        //     }else if(response.msg=="2")
-        //     {
-        //       ndy= "鍋滄";
-        //     }else {
-        //       ndy= "灏氭湭璁剧疆";
-        //     }
-        //   }else
-        //   {
-        //     ndy= "www";
-        //   }
-        // });
-        return ndy;
-      },
-      // 鍗曚綅瀛楀吀缈昏瘧
-      unitIdFormat(row, column) {
-        return this.selectDictLabel(this.unitIdOptions, row.unitId);
-      },
-      // 鍙栨秷鎸夐挳
-      cancel() {
-        this.open = false;
-        this.reset();
-      },
-      // 琛ㄥ崟閲嶇疆
-      reset() {
-        this.form = {
-          indexId: undefined,
-          name: undefined,
-          code: undefined,
-          indexCategory: undefined,
-          remark: undefined,
-          unitId: undefined
-        };
-        this.resetForm("form");
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.getList(this.currentNode);
-      },
-      // 澶氶�夋閫変腑鏁版嵁
-      handleSelectionChange(selection) {
-        this.ids = selection.map(item => item.indexId);
-        this.names = selection.map(item => item.name);
-        this.single = selection.length !== 1;
-        this.multiple = !selection.length
-        this.startStopOptions = selection.map(item => item.indexCategory);
-        this.codeOptions = selection.map(item => item.code);
-      },
-      /** 鏂板鎸夐挳鎿嶄綔 */
-      handleAdd() {
-        this.reset();
-        if (this.indexCategoryDefaultVal) {
-          this.form.indexCategory = this.indexCategoryDefaultVal.dictValue;
-        }
-        if (this.unitDefaultVal) {
-          this.form.unitId = this.unitDefaultVal.dictValue;
-        }
-        this.open = true;
-        this.title = "娣诲姞鎸囨爣淇℃伅";
-      },
-      /** 淇敼鎸夐挳鎿嶄綔 */
-      handleUpdate(row) {
-        this.reset();
-        // const indexId = row.indexId || this.ids;
-        // getEnergyindex(indexId).then(response => {
-        //   this.form = response.data;
-        //   this.open = true;
-        //   this.title = "淇敼" + response.data.name + "鎸囨爣淇℃伅";
-        // });
-      },
-      /** 鎻愪氦鎸夐挳 */
-      submitForm: function () {
-        this.$refs["form"].validate(valid => {
-          if (valid) {
-            if (this.form.indexId !== undefined) {
-              updateEnergyindex(this.form).then(response => {
-                if (response.code === 200) {
-                  this.msgSuccess("淇敼鎴愬姛");
-                  this.open = false;
-                  this.getList(this.currentNode);
-                } else {
-                  this.msgError(response.msg);
-                }
-              });
-            } else {
-              addEnergyindex(this.currentNode.id, this.form).then(response => {
-                if (response.code === 200) {
-                  this.msgSuccess("鏂板鎴愬姛");
-                  this.open = false;
-                  this.getList(this.currentNode);
-                } else {
-                  this.msgError(response.msg);
-                }
-              });
-            }
-          }
-        });
-      },
-      /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-      handleDelete(row) {
-        const indexIds = row.indexId || this.ids;
-        const indexNames = row.name || this.names;
-        this.$confirm('鏄惁纭鍒犻櫎鎸囨爣鍚嶄负"' + indexNames + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function () {
-          return delEnergyindex(indexIds);
-        }).then(() => {
-          this.getList(this.currentNode);
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function () {
-        });
-      },
-      /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-      handleExport() {
-        const queryParams = this.queryParams;
-        this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夋寚鏍囦俊鎭暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function () {
-          return exportEnergyindex(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function () {
-        });
-      },
-      //淇濆瓨
-      save (row) {
-        this.$refs["form"].validate((valid,model)=>{
-          const indexId = row.indexId || this.ids;
-        })
-      },
-      updateStateBtn(flag){
-        let stateName = "";
-        if("1"==flag){
-          stateName = "鍚姩"
-        }else {
-          stateName = "鍋滄"
-        }
-        getSettingCount(this.ids).then(response => {
-          let unStartStopArrName = [];
-          let startStopArrIds = [];
-          for(let i =0;i<response.data.length;i++){
-            if(0==response.data[i]){
-              unStartStopArrName.push(this.codeOptions[i])
-            }else {
-              startStopArrIds.push(this.ids[i]);
-            }
-          }
-          if(unStartStopArrName.length>0){
-            var bh = unStartStopArrName.join("锛�");
-            this.$confirm('閫変腑瀛樺湪鏈缃檺鍊肩殑浠櫒璁惧'+bh+'锛屾殏鏃犳硶'+stateName+'锛�', "璀﹀憡", {
-              confirmButtonText: "纭畾",
-              cancelButtonText: "鍙栨秷",
-              type: "warning"
-            }).catch(function() {});
-          }else {
-            if(startStopArrIds.length>0) {
-              updateSet(startStopArrIds || "", flag).then(response => {
-                if (response.code === 200) {
-                  this.initstartstop();
-                  this.msgSuccess("鎴愬姛");
-                } else {
-                  this.msgError(response.msg);
-                }
-              });
-            }
-          }
-        })
-      },
-      handleUpdate(e){
-        this.settingModel.open=true;
-        this.settingModel.title = "鎸囨爣缂栧彿锛�"+e.code;
-      },
-      yjSetSubmitForm(){
-        this.settingModel.open=false;
-        this.settingModel.settingOptions=[];
-      },
-      yjSetCancel(){
-        this.settingModel.open=false;
-        this.settingModel.settingOptions=[];
-      },
-      arraySpanMethod({ row, column, rowIndex, columnIndex }){
-        if (columnIndex === 0) {
-          if (rowIndex % this.hbCount === 0) {
-            return {
-              rowspan: this.hbCount,
-              colspan: 1
-            };
-          } else {
-            return {
-              rowspan: 0,
-              colspan: 0
-            };
-          }
-        }
-      },
-      //棰勮缂栬緫
-      earlyWarning(e){
-        // console.log(JSON.stringify(e));
-        // if (this.dictDefaultVal) {
-        //   this.alarmLevel = this.dictDefaultVal.dictValue;
-        // }
-        getSetting(e.indexId).then(response => {
-          this.settingModel.resposeList = response.data;
-          this.alarmLevel = this.settingModel.resposeList.length>0?this.settingModel.resposeList[0].alarmLevel:this.dictDefaultVal.dictValue;
-          var data = {};
-          if("鍚姩"==e.indexCategory){
-            this.settingModel.stateById ="1";
-          }else if("鍋滄"==e.indexCategory){
-            this.settingModel.stateById ="2";
-          }else {
-            this.settingModel.stateById ="";
-          }
-          for(let j = 0;j<this.settingModel.timeSlotOptions.length;j++){
-            if("瀹炴椂"==this.settingModel.timeSlotOptions[j].dictLabel){
-              for(let i = 0;i<this.settingModel.limitTypeOptions.length;i++){
-                data = {
-                  indexId:e.indexId,
-                  //鏃舵鍚嶇О
-                  timeSlotName:this.settingModel.timeSlotOptions[j].dictLabel,
-                  //鏃舵鍊�
-                  timeSlotVal:this.settingModel.timeSlotOptions[j].dictValue,
-                  //闄愬�肩被鍨嬪悕绉�
-                  limitTypeName:this.settingModel.limitTypeOptions[i].limitName,
-                  //闄愬�肩被鍨嬪��
-                  limitTypeVal:this.settingModel.limitTypeOptions[i].limitCode,
-                  //闄愬�肩殑鍊�
-                  limitVal:"",
-                  //涓婚敭
-                  id:"",
-                  //鍚仠鐘舵��
-                  state:this.settingModel.stateById,
-                  //鎶ヨ闄愬埗绫诲瀷
-                  alarmType:this.settingModel.limitTypeOptions[i].alarmType,
-                  //鎶ヨ绾у埆
-                  alarmLevel:"",
-                  //nodeid
-                  nodeId:this.currentNode.id
-                }
-                this.settingModel.settingOptions.push(data);
-              }
-            }else {
-              continue;
-            }
-          }
-          let a = this.settingModel.settingOptions;
-          let b = this.settingModel.resposeList;
-
-          for(let j = 0;j<a.length;j++){
-            for(let i in b){
-              if(a[j].timeSlotVal==b[i].timeSlot&&a[j].limitTypeVal==b[i].limitType){
-                a[j].limitVal =  b[i].limitVal;
-              }
-            }
-          }
-          this.settingModel.open=true;
-          this.settingModel.title = "鎸囨爣缂栧彿锛�"+e.code;
-        });
-      },
-      //琛ㄥ崟鎻愪氦
-      settingSubmitForm(){
-        for(let i = 0;i<this.settingModel.settingOptions.length;i++){
-          this.settingModel.settingOptions[i].alarmLevel = this.alarmLevel;
-        }
-        console.log(JSON.stringify(this.settingModel.settingOptions));
-        this.$refs["settingForm"].validate(valid => {
-          if (valid) {
-          updateDialogForm(this.settingModel.settingOptions||"").then(response => {
-            if (response.code === 200) {
-              this.msgSuccess("淇敼鎴愬姛");
-              this.open = false;
-              // this.getList();
-              this.settingModel.settingOptions=[];
-              this.settingModel.open=false;
-            } else {
-              this.msgError(response.msg);
-            }
-          });
-            this.settingModel.open=false;
-          }
-        });
-      },
-      closeYjDialog(){
-        this.settingModel.settingOptions = [];
-        return false;
-      },
-      // 瀛楀吀缈昏瘧
-      typeFormat(row, column) {
-        return this.selectDictLabel(this.settingModel.alarmTypeOptions, row.alarmType);
-      },
-    }
-  };
-</script>
-<style>
-  .item-style .el-form-item__content{
-    margin-left: 0px!important;
-  }
-</style>
diff --git a/energy_management_ui/src/views/alarmItem/index.vue b/energy_management_ui/src/views/alarmItem/index.vue
deleted file mode 100644
index 0ca06a9..0000000
--- a/energy_management_ui/src/views/alarmItem/index.vue
+++ /dev/null
@@ -1,79 +0,0 @@
-<template>
-  <el-row type="flex">
-    <el-col :style="{width:isCollapse?'0': '280px',position:'relative'}" v-show="!isCollapse">
-      <basic-container title="棰勬姤璀︾鐞�" :bodyStyle="bodyStyle">
-        <ModelNode ref="modelNode" @changeNode="changeNode"
-                   :modelCode="modelCode"
-                   :showOpt="false"/>
-      </basic-container>
-      <img src="~@/assets/image/rectangle.png" alt=""
-           class="shrink-col-block"
-           @click="toggleCollapse">
-    </el-col>
-    <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse"/>
-    <el-col :style="{width:isCollapse? 'calc(100% - 48px)':'calc(100% - 280px)',paddingLeft:isCollapse? 0:'14px'}">
-      <basic-container :title="currentNode ? currentNode.label+'--鑺傜偣閰嶇疆' : '鑺傜偣閰嶇疆'" :bodyStyle="bodyStyleRight">
-        <WarnSetting ref="WarnSetting"/>
-      </basic-container>
-    </el-col>
-  </el-row>
-
-</template>
-
-<script>
-import WarnSetting from "./modelWarnSetting";
-import ModelNode from "../basicsetting/modelNode/modelNode";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from '@/components/shrink/index.vue'
-
-export default {
-  components: {WarnSetting, ModelNode,ShrinkCol},
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  mixins: [mixins],
-  data() {
-    return {
-      modelData: '',
-      modelInfoOptions: [],
-      modelCode: undefined,
-      isCollapse: false,
-      bodyStyleRight: {},
-      currentNode: ''
-    }
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 155 + 'px';
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 155 + 'px'
-      };
-    },
-    changeNode: function (node) {
-      if (node) {
-        this.currentNode = node;
-      }
-      this.$refs.WarnSetting.modelNodeChange(node);
-    },
-    manageModel: function () {
-      this.$router.push('/model');
-    },
-    changeModel: function (item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.shrink-col-block {
-  position: absolute;
-  top: 20px;
-  right: 16px;
-  cursor: pointer;
-}
-</style>
diff --git a/energy_management_ui/src/views/alarmItem/modelWarnSetting.vue b/energy_management_ui/src/views/alarmItem/modelWarnSetting.vue
deleted file mode 100644
index 92ddf5f..0000000
--- a/energy_management_ui/src/views/alarmItem/modelWarnSetting.vue
+++ /dev/null
@@ -1,121 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-tabs>
-      <el-tab-pane :disabled="disabledSetting">
-        <span slot="label"><i class="el-icon-setting"></i> 閲囬泦鐐圭鐞�</span>
-        <cjdIndex ref="cjdIndex"></cjdIndex>
-      </el-tab-pane>
-      <el-tab-pane :disabled="disabledSetting">
-        <span slot="label"><i class="el-icon-setting"></i> 缁熻鎸囨爣绠$悊</span>
-        <zbIndex ref="zbIndex"></zbIndex>
-      </el-tab-pane>
-    </el-tabs>
-  </div>
-</template>
-
-<script>
-import {
-  delDevice,
-  delEnergy,
-  delIndex,
-  delProduct,
-  getSettingDevice,
-  getSettingEnergy,
-  getSettingIndex,
-  getSettingProduct,
-  setCollectIndex,
-  setDevice,
-  setEnergy,
-  setProduct
-} from "@/api/basicsetting/modelNode";
-import zbIndex from "./zbIndex";
-import cjdIndex from "./cjdIndex";
-
-export default {
-  name: "modelWarnSetting",
-  components: { zbIndex, cjdIndex },
-  data() {
-    return {
-      currentNode: "",
-      deviceDialog: false,
-      energyDialog: false,
-      productDialog: false,
-      collectIndexDialog: false,
-      indexLoading: false,
-      deviceLoading: false,
-      energyLoading: false,
-      productLoading: false,
-      settingEnergyList: [],
-      settingDeviceList: [],
-      settingProductList: [],
-      settingIndexList: [],
-      disabledSetting: true
-    };
-  },
-  methods: {
-    modelNodeChange(modelNode) {
-      this.settingDeviceList = [];
-      this.settingIndexList = [];
-      this.disabledSetting =
-        modelNode === undefined || modelNode === "" || modelNode === null;
-      this.$refs.zbIndex.setModelNode(modelNode);
-      this.$refs.cjdIndex.setModelNode(modelNode);
-      if (modelNode) {
-        this.currentNode = modelNode;
-        this.deviceLoading = true;
-        getSettingDevice(modelNode.id).then(response => {
-          if (response.code === 200) {
-            this.settingDeviceList = response.data;
-          } else {
-            this.$message.error(response.msg);
-          }
-          this.deviceLoading = false;
-        });
-
-        this.energyLoading = true;
-        getSettingEnergy(modelNode.id).then(response => {
-          if (response.code === 200) {
-            this.settingEnergyList = response.data;
-          } else {
-            this.$message.error(response.msg);
-          }
-          this.energyLoading = false;
-        });
-
-        this.productLoading = true;
-        getSettingProduct(modelNode.id).then(response => {
-          if (response.code === 200) {
-            this.settingProductList = response.data;
-          } else {
-            this.$message.error(response.msg);
-          }
-          this.productLoading = false;
-        });
-
-        this.indexLoading = true;
-        getSettingIndex(modelNode.id).then(response => {
-          if (response.code === 200) {
-            this.settingIndexList = response.data;
-          } else {
-            this.$message.error(response.msg);
-          }
-          this.indexLoading = false;
-        });
-      }
-    },
-    collectIndexSetting() {
-      this.collectIndexDialog = true;
-    },
-    showCollectIndexDialog() {
-      this.$nextTick(() => {
-        this.$refs.collectIndexSetting.init(
-          this.currentNode,
-          this.settingIndexList
-        );
-      });
-    }
-  }
-};
-</script>
-
-<style scoped></style>
diff --git a/energy_management_ui/src/views/alarmItem/zbIndex.vue b/energy_management_ui/src/views/alarmItem/zbIndex.vue
deleted file mode 100644
index b279b39..0000000
--- a/energy_management_ui/src/views/alarmItem/zbIndex.vue
+++ /dev/null
@@ -1,598 +0,0 @@
-<template>
-  <div class="app-container item-style" style="padding:0">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" class="query-form">
-      <!--<el-form-item label="鎸囨爣鍚嶇О" prop="name">-->
-        <!--<el-input-->
-          <!--v-model="queryParams.name"-->
-          <!--placeholder="璇疯緭鍏ユ寚鏍囧悕绉�"-->
-          <!--clearable-->
-          <!--size="small"-->
-          <!--@keyup.enter.native="handleQuery"-->
-          <!--style="width:160px"-->
-        <!--/>-->
-      <!--</el-form-item>-->
-      <!--<el-form-item label="鎸囨爣缂栫爜" prop="code">-->
-        <!--<el-input-->
-          <!--v-model="queryParams.code"-->
-          <!--placeholder="璇疯緭鍏ユ寚鏍囩紪鐮�"-->
-          <!--clearable-->
-          <!--size="small"-->
-          <!--@keyup.enter.native="handleQuery"-->
-          <!--style="width:160px"-->
-        <!--/>-->
-      <!--</el-form-item>-->
-      <!--<el-form-item label="鎸囨爣鍒嗙被" prop="indexCategory">-->
-        <!--<el-select v-model="queryParams.indexCategory" placeholder="璇烽�夋嫨鎸囨爣鍒嗙被" clearable-->
-                   <!--style="width:150px"-->
-                   <!--size="small">-->
-          <!--<el-option-->
-            <!--v-for="dict in indexCategoryOptions"-->
-            <!--:key="dict.dictValue"-->
-            <!--:label="dict.dictLabel"-->
-            <!--:value="dict.dictValue"-->
-          <!--/>-->
-        <!--</el-select>-->
-      <!--</el-form-item>-->
-      <!--<el-form-item>-->
-        <!--<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>-->
-      <!--</el-form-item>-->
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          size="mini"
-          :disabled="multiple"
-          @click='updateStateBtn("1")'
-          v-hasPermi="['system:alarmitem:edit']"
-        >鍚敤
-        </el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          size="mini"
-          :disabled="multiple"
-          @click='updateStateBtn("2")'
-          v-hasPermi="['energyindex:energyindex:remove']"
-        >鍋滄
-        </el-button>
-      </el-col>
-    </el-row>
-
-    <!--琛ㄦ牸-->
-    <el-form :rules="model.rules" :model="model"  ref="form">
-      <el-table v-loading="loading" :data="model.energyindexList" border @selection-change="handleSelectionChange"
-                :default-sort = "{prop: 'date', order: 'descending'}">
-        <el-table-column type="selection" width="55" align="center"/>
-        <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="name"/>
-        <el-table-column label="鎸囨爣缂栫爜" align="center" prop="code"/>
-        <el-table-column label="鍚仠鐘舵��" align="center" prop="indexCategory" class-name="small-padding fixed-width">
-        </el-table-column>
-        <el-table-column label="鎿嶄綔" width="150" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="earlyWarning(scope.row)"
-              v-hasPermi="['system:set:query1']"
-            >鎶ヨ
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-    </el-form>
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-
-    <!--鎶ヨ鐣岄潰start-->
-    <!-- 娣诲姞鎴栦慨鏀规寚鏍囦俊鎭璇濇 -->
-    <el-dialog :title="settingModel.title" :visible.sync="settingModel.open" width="800px" :close-on-click-modal="false"  @close='closeYjDialog'>
-      <el-form ref="alarmSetForm" :model="settingModel" :rules="settingModel.rules" label-width="80px">
-        <el-table v-loading="loading" :data="settingModel.settingOptions" border @selection-change="handleSelectionChange"
-                  :default-sort = "{prop: 'date', order: 'descending'}" :span-method="arraySpanMethod" max-height="500">
-          <!--<el-table-column type="selection" width="55" align="center"/>-->
-          <el-table-column label="鏃舵" align="center" prop="timeSlotName"/>
-          <el-table-column label="闄愬�肩被鍨�" align="center" prop="limitTypeName" width="120"/>
-          <el-table-column label="鎶ヨ闄愬埗绫诲瀷" align="center" prop="alarmType" width="120"  :formatter="typeFormat" />
-          <el-table-column label="闄愬��" align="center" prop="limitVal">
-            <template slot-scope="scope">
-              <el-form-item :prop="'settingOptions.' + scope.$index + '.limitVal'" :rules='settingModel.rules.numRule'>
-                <el-input style="width:200px"  v-model="scope.row.limitVal"></el-input>
-              </el-form-item>
-            </template>
-          </el-table-column>
-        </el-table>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="settingSubmitForm" v-hasPermi="['system:alarmitem:edit']">纭� 瀹�</el-button>
-        <el-button @click="yjSetCancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-    <!--棰勮鐣岄潰end-->
-  </div>
-</template>
-
-<script>
-  import {getSetting,listSet,updateSet,getSettingIndex,getStartStop,updateDialogForm,getSettingCount} from "@/api/alarmItem/alarmItem"
-  import {listLimitType} from "@/api/basicsetting/limitType"
-  // import {getSettingIndex} from "@/api/basicsetting/modelNode"
-  const  myModelNode = undefined;
-  export default {
-    name: 'EnergyIndex',
-    data() {
-      const checkNum = (rule, value, callback) => {
-        let reg =  /(^([-]?)[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^([-]?)(0){1}$)|(^([-]?)[0-9]\.[0-9]([0-9])?$)/;
-        if (!reg.test(value)&&value!="") {
-          callback(new Error('鏁板瓧鍙�2浣嶅皬鏁�'));
-        } else {
-          callback();
-        }
-      };
-      return {
-        // 閬僵灞�
-        loading: false,
-        // 閫変腑鏁扮粍
-        ids: [],
-        names: [],
-        // 闈炲崟涓鐢�
-        single: true,
-        // 闈炲涓鐢�
-        multiple: true,
-        // 鎬绘潯鏁�
-        total: 0,
-        //table
-        // 琛ㄥ崟鍙傛暟
-        form:{
-          supplier2:"",
-          type:"",
-          desc:"",
-          input:""
-        },
-        //閰嶇疆琛ㄤ娇鐢ㄦā鍨�
-        settingModel:{
-          title:"",
-          open:false,
-          settingOptions:[
-            // {
-            //   timeSlotName:undefined,
-            //   limitTypeName:undefined,
-            //   limitVal:undefined,
-            // },
-          ],
-          // 鏃舵鏁扮粍
-          timeSlotOptions:[],
-          limitTypeOptions:[],
-          alarmTypeOptions:[],
-          //鍝嶅簲
-          resposeList:[],
-          stateById:"",
-          rules: {
-            numRule: [
-              {type:"number",validator: checkNum,trigger: "change"},
-            ],
-          },
-        },
-        //涓昏〃浣跨敤妯″瀷
-        model:{
-          // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-          energyindexList: [],
-          rules: {
-            numRule: [
-              {type:"number",validator: checkNum,trigger: "change"},
-            ],
-          },
-        },
-        //涓昏〃閫変腑鐨勫惎鍋滅姸鎬佹暟缁�
-        startStopOptions:[],
-
-        editModeEnabled:true,
-        // 寮瑰嚭灞傛爣棰�
-        title: "",
-        // 鏄惁鏄剧ず寮瑰嚭灞�
-        open: false,
-        // 涓婚敭瀛楀吀
-        indexIdOptions: [],
-        // 鎸囨爣鍚嶇О瀛楀吀
-        nameOptions: [],
-        // 鎸囨爣缂栫爜瀛楀吀
-        codeOptions: [],
-        // 绯荤粺鎸囨爣鍒嗙被锛�1-鑳芥簮绫伙紝2-浜у搧绫伙紝3-鑳芥晥绫伙紝4-缁忚惀绫伙紝5-鍏朵粬瀛楀吀
-        indexCategoryOptions: [],
-        // 澶囨敞瀛楀吀
-        remarkOptions: [],
-        // 鍗曚綅瀛楀吀
-        unitIdOptions: [],
-        //鍚堝苟琛�
-        hbList:[],
-        hbCount:0,
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          name: undefined,
-          code: undefined,
-          indexCategory: undefined,
-          nodeId: undefined,
-          //鎸囨爣index
-          indexType:"STATISTIC"
-        },
-        // 琛ㄥ崟鏍¢獙
-        rules: {
-          name: [
-            {required: true, message: "鎸囨爣鍚嶇О涓嶈兘涓虹┖", trigger: "blur"},
-            {min: 2, max: 20, message: '闀垮害鍦� 2 鍒� 20 涓瓧绗�', trigger: 'blur'}
-          ], code: [
-            {required: true, message: "鎸囨爣缂栫爜涓嶈兘涓虹┖", trigger: "blur"},
-            {min: 2, max: 20, message: '闀垮害鍦� 2 鍒� 20 涓瓧绗�', trigger: 'blur'},
-            {pattern: /^[a-zA-Z][A-Za-z0-9_-]+$/, message: '蹇呴』涓烘暟瀛椼�佸瓧姣嶃��- 鎴朹 锛屼笖棣栧瓧绗﹀彧鑳戒负瀛楁瘝'}
-          ], indexCategory: [
-            {required: true, message: "璇烽�夋嫨鎸囨爣鍒嗙被", trigger: "blur"}
-          ]
-        },
-        currentNode: undefined,
-        indexCategoryDefaultVal: undefined,
-        unitDefaultVal: undefined
-      };
-    },
-    created() {
-      this.getDicts("warn_time_slot").then(response => {
-        this.settingModel.timeSlotOptions = response.data;
-      });
-      listLimitType(this.queryParams).then(response => {
-        this.hbCount = response.rows.length;
-        this.settingModel.limitTypeOptions = response.rows;
-      });
-      this.getDicts("alarm_type").then(response => {
-        this.settingModel.alarmTypeOptions = response.data;
-      });
-    },
-    methods: {
-      /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-      setModelNode(modelNode)
-      {
-        this.myModelNode=modelNode;
-        this.currentNode = modelNode;
-        this.getList();
-      },
-      getList() {
-        // console.log(this.myModelNode)
-        if (this.myModelNode) {
-        this.loading = true;
-        this.queryParams.nodeId = this.myModelNode.id;
-        //鎺ュ彛
-        getSettingIndex(this.queryParams).then(response => {
-          this.model.energyindexList = response.data;
-          this.initstartstop();
-          this.loading = false;
-        });
-        } else {
-          this.energyindexList = [];
-        }
-      },
-      // 绯荤粺鎸囨爣鍒嗙被锛�1-鑳芥簮绫伙紝2-浜у搧绫伙紝3-鑳芥晥绫伙紝4-缁忚惀绫伙紝5-鍏朵粬瀛楀吀缈昏瘧
-      indexCategoryFormat(row, column) {
-        return this.selectDictLabel(this.indexCategoryOptions, row.indexCategory);
-      },
-      initstartstop()
-      {
-          for(let i=0;i<this.model.energyindexList.length;i++)
-          {
-            let ndy ="";
-            getStartStop(this.model.energyindexList[i].indexId).then(response => {
-              if(response.code=='200')
-              {
-                if(response.msg=="1")
-                {
-                  this.model.energyindexList[i].indexCategory= "鍚姩";
-                }else if(response.msg=="2")
-                {
-                  this.model.energyindexList[i].indexCategory= "鍋滄";
-                }else {
-                  this.model.energyindexList[i].indexCategory= "灏氭湭璁剧疆";
-                }
-              }else
-              {
-                this.model.energyindexList[i].indexCategory= "";
-              }
-            });
-          }
-      },
-      // 鍗曚綅瀛楀吀缈昏瘧
-      startStopFormat(row, column) {
-          //鍙栧惎鍋滅姸鎬�
-        let ndy ="";
-        // getStartStop(row.indexId).then(response => {
-        //   if(response.code=='200')
-        //   {
-        //     if(response.msg=="1")
-        //     {
-        //       ndy= "鍚姩";
-        //     }else if(response.msg=="2")
-        //     {
-        //       ndy= "鍋滄";
-        //     }else {
-        //       ndy= "灏氭湭璁剧疆";
-        //     }
-        //   }else
-        //   {
-        //     ndy= "www";
-        //   }
-        // });
-        return ndy;
-      },
-      // 鍙栨秷鎸夐挳
-      cancel() {
-        this.open = false;
-        this.reset();
-      },
-      // 琛ㄥ崟閲嶇疆
-      reset() {
-        this.form = {
-          indexId: undefined,
-          name: undefined,
-          code: undefined,
-          indexCategory: undefined,
-          remark: undefined,
-          unitId: undefined
-        };
-        this.resetForm("form");
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.getList(this.currentNode);
-      },
-      // 澶氶�夋閫変腑鏁版嵁
-      handleSelectionChange(selection) {
-        this.ids = selection.map(item => item.indexId);
-        this.names = selection.map(item => item.name);
-        this.single = selection.length !== 1;
-        this.multiple = !selection.length
-        // console.log(JSON.stringify(selection));
-        this.startStopOptions = selection.map(item => item.indexCategory);
-        this.codeOptions = selection.map(item => item.code);
-      },
-      /** 鏂板鎸夐挳鎿嶄綔 */
-      handleAdd() {
-        this.reset();
-        if (this.indexCategoryDefaultVal) {
-          this.form.indexCategory = this.indexCategoryDefaultVal.dictValue;
-        }
-
-        if (this.unitDefaultVal) {
-          this.form.unitId = this.unitDefaultVal.dictValue;
-        }
-
-        this.open = true;
-        this.title = "娣诲姞鎸囨爣淇℃伅";
-      },
-      /** 淇敼鎸夐挳鎿嶄綔 */
-      handleUpdate(row) {
-        this.reset();
-        // const indexId = row.indexId || this.ids;
-        // getEnergyindex(indexId).then(response => {
-        //   this.form = response.data;
-        //   this.open = true;
-        //   this.title = "淇敼" + response.data.name + "鎸囨爣淇℃伅";
-        // });
-      },
-      /** 鎻愪氦鎸夐挳 */
-      submitForm: function () {
-        this.$refs["form"].validate(valid => {
-          if (valid) {
-            if (this.form.indexId !== undefined) {
-              updateEnergyindex(this.form).then(response => {
-                if (response.code === 200) {
-                  this.msgSuccess("淇敼鎴愬姛");
-                  this.open = false;
-                  this.getList(this.currentNode);
-                } else {
-                  this.msgError(response.msg);
-                }
-              });
-            } else {
-              addEnergyindex(this.currentNode.id, this.form).then(response => {
-                if (response.code === 200) {
-                  this.msgSuccess("鏂板鎴愬姛");
-                  this.open = false;
-                  this.getList(this.currentNode);
-                } else {
-                  this.msgError(response.msg);
-                }
-              });
-            }
-          }
-        });
-      },
-      /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-      handleDelete(row) {
-        const indexIds = row.indexId || this.ids;
-        const indexNames = row.name || this.names;
-        this.$confirm('鏄惁纭鍒犻櫎鎸囨爣鍚嶄负"' + indexNames + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function () {
-          return delEnergyindex(indexIds);
-        }).then(() => {
-          this.getList(this.currentNode);
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function () {
-        });
-      },
-      /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-      handleExport() {
-        const queryParams = this.queryParams;
-        this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夋寚鏍囦俊鎭暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function () {
-          return exportEnergyindex(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function () {
-        });
-      },
-      //淇濆瓨
-      save (row) {
-        this.$refs["form"].validate((valid,model)=>{
-          const indexId = row.indexId || this.ids;
-        })
-      },
-      updateStateBtn(flag){
-        let stateName = "";
-        if("1"==flag){
-          stateName = "鍚姩"
-        }else {
-          stateName = "鍋滄"
-        }
-        getSettingCount(this.ids).then(response => {
-          let unStartStopArrName = [];
-          let startStopArrIds = [];
-          for(let i =0;i<response.data.length;i++){
-            if(0==response.data[i]){
-              unStartStopArrName.push(this.codeOptions[i])
-            }else {
-              startStopArrIds.push(this.ids[i]);
-            }
-          }
-          if(unStartStopArrName.length>0){
-            var bh = unStartStopArrName.join("锛�");
-            this.$confirm('閫変腑瀛樺湪鏈缃檺鍊肩殑浠櫒璁惧'+bh+'锛屾殏鏃犳硶'+stateName+'锛�', "璀﹀憡", {
-              confirmButtonText: "纭畾",
-              cancelButtonText: "鍙栨秷",
-              type: "warning"
-            }).catch(function() {});
-          }else {
-            if(startStopArrIds.length>0) {
-              updateSet(startStopArrIds || "", flag).then(response => {
-                if (response.code === 200) {
-                  this.initstartstop();
-                  this.msgSuccess("鎴愬姛");
-                } else {
-                  this.msgError(response.msg);
-                }
-              });
-            }
-          }
-        })
-      },
-      //棰勮缂栬緫
-      earlyWarning(e){
-        getSetting(e.indexId).then(response => {
-          this.settingModel.resposeList = response.data;
-          var data = {};
-          if("鍚姩"==e.indexCategory){
-            this.settingModel.stateById ="1";
-          }else if("鍋滄"==e.indexCategory){
-            this.settingModel.stateById ="2";
-          }else {
-            this.settingModel.stateById ="";
-          }
-          for(let j = 0;j<this.settingModel.timeSlotOptions.length;j++){
-            if("瀹炴椂"!=this.settingModel.timeSlotOptions[j].dictLabel){
-              for(let i = 0;i<this.settingModel.limitTypeOptions.length;i++){
-                data = {
-                  indexId:e.indexId,
-                  //鏃舵鍚嶇О
-                  timeSlotName:this.settingModel.timeSlotOptions[j].dictLabel,
-                  //鏃舵鍊�
-                  timeSlotVal:this.settingModel.timeSlotOptions[j].dictValue,
-                  //闄愬�肩被鍨嬪悕绉�
-                  limitTypeName:this.settingModel.limitTypeOptions[i].limitName,
-                  //闄愬�肩被鍨嬪��
-                  limitTypeVal:this.settingModel.limitTypeOptions[i].limitCode,
-                  //闄愬�肩殑鍊�
-                  limitVal:"",
-                  //涓婚敭
-                  id:"",
-                  //鍚仠鐘舵��
-                  state:this.settingModel.stateById,
-                  //鎶ヨ闄愬埗绫诲瀷
-                  alarmType:this.settingModel.limitTypeOptions[i].alarmType,
-                  //nodeid
-                  nodeId:this.currentNode.id
-                }
-                this.settingModel.settingOptions.push(data);
-              }
-            }else {
-              continue;
-            }
-          }
-          let a = this.settingModel.settingOptions;
-          let b = this.settingModel.resposeList;
-          for(let j = 0;j<a.length;j++){
-            for(let i in b){
-              if(a[j].timeSlotVal==b[i].timeSlot&&a[j].limitTypeVal==b[i].limitType){
-                a[j].limitVal =  b[i].limitVal;
-              }
-            }
-          }
-          this.settingModel.open=true;
-          this.settingModel.title = "鎸囨爣缂栧彿锛�"+e.code;
-        });
-      },
-      //琛ㄥ崟鎻愪氦
-      settingSubmitForm(){
-        this.$refs["alarmSetForm"].validate(valid => {
-          if (valid) {
-            updateDialogForm(this.settingModel.settingOptions||"").then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                // this.getList();
-                this.settingModel.settingOptions=[];
-                this.settingModel.open=false;
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-            this.settingModel.open=false;
-          }
-        });
-      },
-      yjSetCancel(){
-        this.settingModel.open=false;
-        this.settingModel.settingOptions=[];
-      },
-      arraySpanMethod({ row, column, rowIndex, columnIndex }){
-        if (columnIndex === 0) {
-          if (rowIndex % this.hbCount === 0) {
-            return {
-              rowspan: this.hbCount,
-              colspan: 1
-            };
-          } else {
-            return {
-              rowspan: 0,
-              colspan: 0
-            };
-          }
-        }
-      },
-      closeYjDialog(){
-        this.settingModel.settingOptions = [];
-        return false;
-      },
-      // 瀛楀吀缈昏瘧
-      typeFormat(row, column) {
-        return this.selectDictLabel(this.settingModel.alarmTypeOptions, row.alarmType);
-      },
-    }
-  };
-</script>
-<style>
-  .item-style .el-form-item__content{
-    margin-left: 0px!important;
-  }
-</style>
diff --git a/energy_management_ui/src/views/basicSetup/equipmentfile/configure.vue b/energy_management_ui/src/views/basicSetup/equipmentfile/configure.vue
deleted file mode 100644
index 0a835bc..0000000
--- a/energy_management_ui/src/views/basicSetup/equipmentfile/configure.vue
+++ /dev/null
@@ -1,205 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <div slot="header" class="clearfix">
-      <el-button style="float: right; padding: 8px; margin-left:8px" type="text"
-                 icon="el-icon-setting"
-                 @click="saveSetting">
-        淇濆瓨閰嶇疆
-      </el-button>
-      <el-button style="float: right; padding: 8px; margin-left:8px" type="text"
-                 icon="el-icon-setting"
-                 @click="reset()">
-        閲嶆柊閫夋嫨搴曞浘
-      </el-button>
-    </div>
-    <el-row>
-      <el-col :span="18">
-        <el-upload
-            v-if="filePath==='绌鸿妭鐐�'"
-            class="configure-upload"
-            drag
-            ref="upload"
-            :limit="1"
-            :headers="uploadData.headers"
-            :action="uploadData.url"
-            :with-credentials="true"
-            :on-success="handleFileSuccess"
-            :show-file-list="false">
-          <i class="el-icon-upload"></i>
-          <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
-        </el-upload>
-        <div id="svgHtml" v-if="filePath !== '绌鸿妭鐐�'">
-          <div v-html="svgHtml"/>
-        </div>
-      </el-col>
-      <el-col :span="6" style="height: calc(100vh - 165px); overflow: auto">
-        <el-table :data="tags" border>
-          <el-table-column label="鍙傛暟" align="center" prop="param"/>
-          <el-table-column label="閲囬泦鐐�" align="center" prop="tag">
-            <template slot-scope="scope">
-              <el-autocomplete popper-class="my-autocomplete"
-                               v-model="scope.row['tag']"
-                               :fetch-suggestions="querySearch"
-                               placeholder="璇疯緭鍏ユ寚鏍囩紪鐮�">
-                <template slot-scope="{ item }">
-                  <div class="name">{{ item.value }}</div>
-                  <span class="addr">{{ item.name }}</span>
-                </template>
-              </el-autocomplete>
-            </template>
-          </el-table-column>
-        </el-table>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-<script>
-import {
-  getAllCollectTag,
-  getConfigure,
-  saveSetting,
-  updateEquipmentfile
-} from "@/api/basicSetup/equipmentfile";
-import {getToken} from "@/utils/auth";
-
-export default {
-  name: "ConfigureView",
-  data() {
-    return {
-      currentNode: '',
-      form: {
-        nodeId: '',
-        fileName: '',
-        svgType:''
-      },
-      filePath: '绌鸿妭鐐�',
-      svgHtml: '',
-      tags: [],
-      uploadData: {
-        headers: {
-          Authorization: "Bearer " + getToken()
-        },
-        url: process.env.VUE_APP_BASE_API + "/basicSetup/equipmentfile/upload"
-      },
-    }
-  },
-  methods: {
-    changeModelNode(modelNode) {
-      this.currentNode = modelNode;
-      this.filePath = '绌鸿妭鐐�';
-      getConfigure(modelNode.id).then(response => {
-        this.tags = [];
-        this.svgHtml = '';
-        if (response.code === 200) {
-          if (response.data) {
-            this.filePath = process.env.VUE_APP_BASE_API + response.data.filePath;
-            this.tags = response.data.infoList;
-            this.getSvg();
-          }
-        } else {
-          this.msgError(response.msg);
-        }
-      });
-    },
-    // 鍒濆鍖杝vg
-    getSvg() {
-      /* 鍒涘缓xhr瀵硅薄 */
-      const xhr = new XMLHttpRequest();
-      xhr.open("GET", this.filePath, true);
-      xhr.send();
-      /* 鐩戝惉xhr瀵硅薄 */
-      xhr.addEventListener("load", () => {
-        this.svgHtml = xhr.responseText;
-        let values = xhr.responseXML.getElementsByTagName('text');
-        let tagTemps =[];
-        for (let i = 0; i < values.length; i++) {
-          if (values[i].getAttribute("id") != undefined)
-            tagTemps.push({
-              "param": values[i].textContent,
-              "tag": "",
-              "tagType":"COLLECT"
-            });
-        }
-        console.log(this.tags.length,tagTemps.length);
-        if (this.tags.length === 0 || this.tags.length!=tagTemps.length) {
-          this.tags=[];
-          this.tags=tagTemps;
-          console.log("222",this.tags.length,tagTemps.length);
-        }
-      });
-    },
-    //涓婁紶鎴愬姛鍚�
-    handleFileSuccess(response, file, fileList) {
-      if (response.code === 200) {
-        this.$refs.upload.clearFiles();
-        this.form.nodeId = this.currentNode.id;
-        this.form.filePath = response.msg;
-        this.form.svgType = 'COLLECT';
-        updateEquipmentfile(this.form).then(result => {
-          if (result.code === 200) {
-            this.filePath = process.env.VUE_APP_BASE_API + response.msg;
-            this.tags=[];
-            this.getSvg();
-          } else {
-            this.msgError(result.msg);
-          }
-        });
-      } else {
-        this.msgError(response.msg);
-      }
-    },
-    querySearch(queryString, cb) {
-      if (queryString) {
-        getAllCollectTag({codeOrName: queryString, indexType: 'COLLECT'}).then(response => {
-          // 璋冪敤 callback 杩斿洖寤鸿鍒楄〃鐨勬暟鎹�
-          let result = response.data;
-          let values = [];
-          result.forEach(item => {
-            values.push({
-              value: item.code,
-              name: item.name
-            })
-          });
-          cb(values);
-        });
-      }
-    },
-    saveSetting() {
-      saveSetting(this.currentNode.id, this.tags).then(response => {
-        if (response.code === 200) {
-          this.$message.success(response.msg);
-        } else {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    reset() {
-      this.filePath = '绌鸿妭鐐�';
-    }
-  }
-}
-</script>
-<style scoped lang="scss">
-.el-autocomplete {
-  width: 100%;
-}
-
-.my-autocomplete li {
-  line-height: normal;
-  padding: 7px;
-}
-
-.my-autocomplete li .name {
-  text-overflow: ellipsis;
-  overflow: hidden;
-}
-
-.my-autocomplete li .addr {
-  font-size: 12px;
-  color: #b4b4b4;
-}
-
-.my-autocomplete li .highlighted .addr {
-  color: #ddd;
-}
-</style>
diff --git a/energy_management_ui/src/views/basicSetup/equipmentfile/configureChart.vue b/energy_management_ui/src/views/basicSetup/equipmentfile/configureChart.vue
deleted file mode 100644
index 60a040c..0000000
--- a/energy_management_ui/src/views/basicSetup/equipmentfile/configureChart.vue
+++ /dev/null
@@ -1,112 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col :style="{width:isCollapse?'0px': '280px',position:'relative',display:'none'}" v-show="!isCollapse">
-        <basic-container title="绯荤粺鍥�" :bodyStyle="bodyStyle">
-          <ModelNode ref="modelNode" @changeNode="changeNode"
-                     :modelCode="modelCode"
-                     :showOpt="false"/>
-        </basic-container>
-        <img src="~@/assets/image/rectangle.png" alt=""
-             class="shrink-col-block"
-             @click="toggleCollapse">
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse"/>
-      <!--      <el-col :style="{width:isCollapse? 'calc(100% - 48px)':'calc(100% - 280px)',paddingLeft:isCollapse? 0:'14px'}">     -->
-      <el-col>
-        <basic-container :bodyStyle="bodyStyleRight">
-          <el-tabs @tab-click="handleClick" style="width: 100%;height: 100%">
-            <el-tab-pane style="width: 100%;height: 100%">
-              <span slot="label"><i class="el-icon-pie-chart"></i> 绯荤粺鍥�</span>
-              <ConfigureChartView ref="configureChartView"/>
-            </el-tab-pane>
-            <el-tab-pane>
-              <span slot="label"><i class="el-icon-pie-chart"></i> 鏁版嵁鍒楄〃</span>
-              <DataList ref="dataList"></DataList>
-            </el-tab-pane>
-            <el-tab-pane name="third">
-              <span slot="label"><i class="el-icon-pie-chart"></i> 瓒嬪娍鍥�</span>
-              <trend-line-chart ref="trendLineChart"></trend-line-chart>
-            </el-tab-pane>
-          </el-tabs>
-        </basic-container>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-<script>
-import ModelNode from '../../basicsetting/modelNode/modelNode'
-import HistoryAlarmNote from '../../energyAlarm/historicalAlarm/historyAlarmNote'
-import ConfigureChartView from './view'
-import DataList from './dataList'
-import {getConfigure} from '@/api/basicSetup/equipmentfile'
-import realTimeIndex from '../../energyStatistics/energyStatisticsTrend/realTimeIndex'
-import TrendLineChart from './trendLineChart'
-import mixins from '@/layout/mixin/getHeight'
-import ShrinkCol from '@/components/shrink/index.vue'
-
-export default {
-  components: {DataList, ConfigureChartView, ModelNode, HistoryAlarmNote, realTimeIndex, TrendLineChart, ShrinkCol},
-  created() {
-    this.modelCode = this.$route.query.modelCode
-  },
-  mixins: [mixins],
-  data() {
-    return {
-      modelCode: undefined,
-      activeName: '',
-      isCollapse: false,
-      bodyStyleRight: {}
-    }
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 155 + 'px'
-      this.bodyStyleRight = {
-        height: window.innerHeight - 100 + 'px'
-      }
-    },
-    changeNode(node) {
-      console.log('changeNode', node)
-      // this.modelCode = node.id
-      this.$refs.configureChartView.show(node.id)
-      getConfigure(node.id).then(response => {
-        if (response.code === 200) {
-          let tagCodes = []
-          if (response.data) {
-            response.data.infoList.forEach(tag => {
-              tagCodes.push(tag.tag)
-            })
-          }
-          this.$refs.dataList.show(tagCodes)
-        } else {
-          this.msgError(response.msg)
-        }
-      })
-      this.$refs.trendLineChart.modelNodeChange(node.id)
-      //}
-    },
-    handleClick(tab, event) {
-      this.activeName = tab.name
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse
-    }
-  }
-}
-</script>
-<style scoped lang="scss">
- ::v-deep .el-tabs__content {
-  overflow: auto;
-  height: 96%;
-  width: 100%;
-}
-
-.shrink-col-block {
-  position: absolute;
-  top: 20px;
-  right: 16px;
-  cursor: pointer;
-}
-</style>
diff --git a/energy_management_ui/src/views/basicSetup/equipmentfile/dataList.vue b/energy_management_ui/src/views/basicSetup/equipmentfile/dataList.vue
deleted file mode 100644
index 5e4dc5f..0000000
--- a/energy_management_ui/src/views/basicSetup/equipmentfile/dataList.vue
+++ /dev/null
@@ -1,121 +0,0 @@
-<template>
-  <div class="dataList-right">
-    <el-table
-        :data="tagValues"
-        border
-        :height="height"
-        ref="table"
-    >
-      <el-table-column
-          prop="tagName"
-          align="center"
-          label="鎸囨爣鍚嶇О">
-      </el-table-column>
-      <el-table-column
-          prop="meteName"
-          align="center"
-          label="琛ㄥ叿鍚嶇О">
-      </el-table-column>
-      <el-table-column
-          prop="value"
-          align="center"
-          label="閲囬泦鍊�">
-        <template slot-scope="scope">
-          <span v-html="showValue(scope.row['value'])"></span>
-        </template>
-      </el-table-column>
-      <el-table-column
-          prop="unitId"
-          align="center"
-          :formatter="unitIdFormat"
-          label="鍗曚綅">
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-import {getLiveData} from "@/api/basicSetup/equipmentfile";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: "DataList",
-  props: ["indexCodes"],
-  mixins: [mixins],
-  created() {
-    if (this.$props.indexCodes) {
-      this.tagCodes = this.$props.indexCodes;
-    }
-
-    this.getDicts("sys_unit").then(response => {
-      this.unitIdOptions = response.data;
-    });
-  },
-  data() {
-    return {
-      tagValues: [],
-      tagCodes: [],
-      timer: null,
-      unitIdOptions: [],
-      height: null
-    }
-  },
-  mounted() {
-    clearInterval(this.timer);
-    this.refreshData()
-  },
-  beforeDestroy() {
-    clearInterval(this.timer)
-  },
-  methods: {
-    setCharts() {
-      this.height = window.innerHeight - 240
-    },
-    show(tagCodes) {
-      this.tagValues = [];
-      this.tagCodes = tagCodes;
-      this.refresh();
-    },
-    refreshData() {
-      this.timer = setInterval(() => {
-        this.refresh();
-      }, 3000);
-    },
-    refresh() {
-      let that = this
-      this.$nextTick(() => {
-        that.$refs.table.doLayout()
-      })
-      if (this.tagCodes.length === 0) {
-        return;
-      }
-
-      getLiveData(this.tagCodes).then(response => {
-        if (response.code === 200) {
-          this.tagValues = response.data;
-          this.$nextTick(() => {
-            that.$refs.table && that.$refs.table.doLayout()
-          })
-        }
-      });
-    },
-    showValue(value) {
-      if (value) {
-        return value.toFixed(2);
-      }
-      return '';
-    },
-    // 鍗曚綅瀛楀吀缈昏瘧
-    unitIdFormat(row, column) {
-      return this.selectDictLabel(this.unitIdOptions, row.unitId);
-    },
-  }
-}
-</script>
-
-<style scoped lang="scss">
-.dataList-right {
-  height: 100%;
-  overflow: hidden;
-}
-</style>
diff --git a/energy_management_ui/src/views/basicSetup/equipmentfile/index.vue b/energy_management_ui/src/views/basicSetup/equipmentfile/index.vue
deleted file mode 100644
index 28c1989..0000000
--- a/energy_management_ui/src/views/basicSetup/equipmentfile/index.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-  <el-row type="flex">
-    <el-col :style="{width:isCollapse?'0': '280px',position:'relative'}" v-show="!isCollapse">
-      <basic-container title="缁勬�佸浘閰嶇疆" :bodyStyle="bodyStyle">
-        <ModelNode ref="modelNode" @changeNode="changeNode"
-                   :modelCode="modelCode"
-                   :showOpt="false"/>
-      </basic-container>
-      <img src="~@/assets/image/rectangle.png" alt=""
-           class="shrink-col-block"
-           @click="toggleCollapse">
-    </el-col>
-    <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse"/>
-    <el-col :style="{width:isCollapse? 'calc(100% - 48px)':'calc(100% - 280px)',paddingLeft:isCollapse? 0:'14px'}">
-      <basic-container :title="currentNode ? currentNode.label+'--鑺傜偣閰嶇疆' : '鑺傜偣閰嶇疆'" :bodyStyle="bodyStyleRight">
-        <ConfigureView ref="configureView"/>
-      </basic-container>
-    </el-col>
-  </el-row>
-</template>
-
-<script>
-  import ModelNode from "../../basicsetting/modelNode/modelNode";
-  import ConfigureView from "./configure";
-  import mixins from "@/layout/mixin/getHeight";
-  import ShrinkCol from '@/components/shrink/index.vue'
-
-  export default {
-    components: {ConfigureView, ModelNode,ShrinkCol},
-    created() {
-      this.modelCode = this.$route.query.modelCode;
-    },
-    mixins: [mixins],
-    data() {
-      return {
-        modelCode: undefined,
-        isCollapse: false,
-        bodyStyleRight: {},
-        currentNode:''
-      }
-    },
-    methods: {
-      setCharts() {
-        this.bodyStyle.height = window.innerHeight - 155 + 'px';
-        this.bodyStyleRight = {
-          ...this.bodyStyle,
-          height: window.innerHeight - 155 + 'px'
-        };
-      },
-      changeNode(node) {
-        if (node) {
-          this.currentNode = node;
-        }
-        this.$refs.configureView.changeModelNode(node);
-      },
-      // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-      toggleCollapse () {
-        this.isCollapse = !this.isCollapse
-      }
-    }
-  };
-</script>
-<style scoped lang="scss">
-.shrink-col-block {
-  position: absolute;
-  top: 20px;
-  right: 16px;
-  cursor: pointer;
-}
-</style>
diff --git a/energy_management_ui/src/views/basicSetup/equipmentfile/tableDialog.vue b/energy_management_ui/src/views/basicSetup/equipmentfile/tableDialog.vue
deleted file mode 100644
index 1474e0a..0000000
--- a/energy_management_ui/src/views/basicSetup/equipmentfile/tableDialog.vue
+++ /dev/null
@@ -1,98 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-date-picker
-        style="margin-right: 5px"
-        v-model="time"
-        type="datetime"
-        format="yyyy-MM-dd HH"
-        :clearable="false"
-        popper-class="pickerDeleteMinutes"
-        @change="changeTime"
-    >
-    </el-date-picker>
-    <el-button type="primary" icon="el-icon-search" size="mini" @click="historyDataSelect">鏌ヨ</el-button>
-    <div style="margin:10px 5px 20px 0;color:#9e9a9a;font-size: 12px">鏍煎紡锛氬勾-鏈�-鏃� 鏃�</div>
-    <el-table
-        ref="dataTable"
-        :data="tableData"
-        border
-        height="300px"
-    >
-      <el-table-column
-          prop="dataTime"
-          align="center"
-          label="鏃ユ湡">
-      </el-table-column>
-      <el-table-column
-          prop="value"
-          align="center"
-          label="褰撳墠鍊�">
-      </el-table-column>
-      <el-table-column
-          prop="unitId"
-          align="center"
-          label="鍗曚綅">
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-import { getRealTimeTableData } from '@/api/energyAlarm/realTimeAlarm/liveHistoryAssembly'
-import moment from 'moment'
-
-let timers
-export default {
-  props: ['code', 'open'],
-  data() {
-    return {
-      tableData: [],
-      time: null
-    }
-  },
-  watch: {
-    open: {
-      immediate: true,
-      handler(val) {
-        this.time = val ? new Date() : null
-        val && this.historyDataSelect()
-        timers = val ? setInterval(this.setTimer, 50) : clearInterval(timers)
-      }
-    }
-  },
-  beforeDestroy() {
-    // 椤甸潰閿�姣佹椂 瑕佸仠姝㈣鏃跺櫒锛屽惁鍒欓�夐」鍗″垏鎹㈣鏃跺櫒涓嶅仠姝紝浼氳秺鏉ヨ秺蹇紝澶氫釜绾跨▼
-    clearInterval(timers)
-  },
-  methods: {
-    setTimer() {
-      let that = this
-      this.$nextTick(() => {
-        that.$refs.dataTable && that.$refs.dataTable.doLayout()
-      })
-    },
-    changeTime() {
-      this.historyDataSelect()
-    },
-    historyDataSelect() {
-      getRealTimeTableData(this.code, moment(this.time).format('yyyy-MM-DD HH')).then((res) => {
-        if (res.code === 200) {
-          this.tableData = res.data
-        }
-      })
-    }
-  }
-}
-</script>
-
-<style lang="scss">
-.pickerDeleteMinutes {
-  .el-scrollbar:nth-of-type(2) {
-    display: none !important;
-  }
-
-  .el-time-spinner {
-    text-align: center;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/basicSetup/equipmentfile/trendLineChart.vue b/energy_management_ui/src/views/basicSetup/equipmentfile/trendLineChart.vue
deleted file mode 100644
index 962cab4..0000000
--- a/energy_management_ui/src/views/basicSetup/equipmentfile/trendLineChart.vue
+++ /dev/null
@@ -1,447 +0,0 @@
-<template>
-  <div class="trendLineChart-right">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-      class="query-form"
-      style="margin-bottom: 20px"
-    >
-      <el-select v-model="value" placeholder="璇烽�夋嫨" style="width: 120px">
-        <el-option
-          v-for="item in options"
-          :key="item.value"
-          :label="item.label"
-          :value="item.value"
-        >
-        </el-option>
-      </el-select>
-      <el-form-item label="" prop="minute" :rules="rules.numRule">
-        鏈�鏂�
-        <el-input
-          v-model="queryParams.minute"
-          :min="1"
-          :max="120"
-          style="width: 120px"
-          type="number"
-        ></el-input>
-        鍒嗛挓
-      </el-form-item>
-
-      <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >鏌ヨ</el-button
-        >
-      </el-form-item>
-    </el-form>
-    <div class="tableStyle" v-if="value == 'tableOpen'">
-      <el-table
-        :data="tableData"
-        ref="dataTable"
-        border
-        style="margin-top: 20px"
-        :height="height"
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column type="selection" align="center"></el-table-column>
-        <el-table-column prop="statusName" align="center" label="鍧愭爣杞�">
-          <template slot-scope="scope">
-            <el-select
-              v-model="scope.row.yValue"
-              @change="selectNumber(scope.row, scope.$index)"
-            >
-              <el-option
-                v-for="(item, index) in addTableSelect"
-                :key="item.yValue"
-                :label="item.yLable"
-                :value="item.yValue"
-              ></el-option>
-            </el-select>
-          </template>
-        </el-table-column>
-        <el-table-column prop="meteName" align="center" label="琛ㄥ叿鍚嶇О">
-        </el-table-column>
-        <el-table-column prop="indexName" align="center" label="鐐逛綅鍚嶇О" />
-        <el-table-column
-          prop="indexUnit"
-          align="center"
-          label="鍗曚綅"
-          :formatter="unitFormat"
-        />
-        <el-table-column prop="value" align="center" label="褰撳墠鍊�">
-        </el-table-column>
-        <el-table-column label="鎿嶄綔" align="center" width="200">
-          <template slot-scope="scope">
-            <el-button
-              type="primary"
-              icon="el-icon-search"
-              size="mini"
-              @click="openDialog(scope.row, 'line')"
-              >瓒嬪娍鍥�
-            </el-button>
-            <el-button
-              type="primary"
-              icon="el-icon-search"
-              size="mini"
-              @click="openDialog(scope.row, 'table')"
-              >鏁版嵁
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-    </div>
-    <component
-      ref="lincharVue"
-      :is="vuename"
-      :chart-data="liveLineChartData"
-      style="margin-top: 20px"
-    ></component>
-    <!--鍘嗗彶鏇茬嚎dialog-->
-    <el-dialog
-      :title="title"
-      :visible.sync="open"
-      width="1000px"
-      :close-on-click-modal="false"
-      @close="closeDialog"
-    >
-      <el-row style="padding:16px 16px 0;margin-bottom:32px;">
-        <history-alarm-view
-          ref="historyAlarmView"
-          :code="code"
-          :activeName="activeName"
-          v-if="dialogType === 'line'"
-        />
-        <TableDialog :code="code" v-else :open="open" />
-      </el-row>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="cancelDialog">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {
-  getTrendSettingIndexLineData,
-  getSvgTrendSettingIndex
-} from "@/api/dataMonitoring/realTimeTrend/realTimeTrend";
-import historyAlarmView from "../../energyAlarm/realTimeAlarm/historyAlarmView";
-import mixins from "@/layout/mixin/getHeight";
-import TableDialog from "./tableDialog";
-
-let timers;
-export default {
-  name: "energyIndex",
-  components: {
-    lincharVue: () =>
-      import("../../dataMonitoring/realTimeTrend/LineChart.vue"),
-    historyAlarmView,
-    TableDialog
-  },
-  mixins: [mixins],
-  data() {
-    const checkNum = (rule, value, callback) => {
-      let reg = /(^([-]?)[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^([-]?)(0){1}$)|(^([-]?)[0-9]\.[0-9]([0-9])?$)/;
-      if ("" === value && !reg.test(value)) {
-        callback(new Error("鍒嗛挓闇�鏁板瓧骞朵笖涓嶈兘涓虹┖"));
-      } else if (0 > value || 120 < value) {
-        callback(new Error("鏁板瓧鑼冨洿1~120鐨勬鏁存暟"));
-      } else {
-        callback();
-      }
-    };
-    return {
-      value: "tableOpen",
-      yValue: "",
-      minute: undefined,
-      count: undefined,
-      pickerOptions: {
-        /*  value1: [new Date(2000, 10, 10, 10, 10), new Date(2000, 10, 11, 10, 10)],*/
-      },
-      timeArr: [],
-      deviceCategory: undefined,
-      // 閬僵灞�
-      loading: false,
-      // 閫変腑鏁扮粍
-      ids: [],
-      dateRange: [],
-      names: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 10,
-      // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-      List: [],
-      energyindexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: null,
-      dialogType: null,
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      indexIdOptions: [],
-      // 鎸囨爣鍚嶇О瀛楀吀
-      nameOptions: [],
-      // 鎸囨爣缂栫爜瀛楀吀
-      codeOptions: [],
-      // 绯荤粺鎸囨爣鍒嗙被锛�1-鑳芥簮绫伙紝2-浜у搧绫伙紝3-鑳芥晥绫伙紝4-缁忚惀绫伙紝5-鍏朵粬瀛楀吀
-      indexCategoryOptions: [],
-      // 澶囨敞瀛楀吀
-      remarkOptions: [],
-      // 鍗曚綅瀛楀吀
-      unitIdOptions: [],
-      queryParams: {
-        minute: undefined,
-        nodeId: undefined,
-        //鎸囨爣index
-        indexType: "COLLECT",
-        params: [
-          {
-            minute: undefined,
-            count: undefined
-          }
-        ]
-      },
-      tableData: [],
-      lineData: [],
-      //閫変腑code
-      codes: [],
-      // //閫変腑鎸囨爣鍚嶇О
-      indexNames: [],
-      datas: [],
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        numRule: [{ type: "number", validator: checkNum, trigger: "change" }]
-      },
-      options: [
-        {
-          value: "tableOpen",
-          label: "鍙傛暟鎵撳紑"
-        },
-        {
-          value: "tableClose",
-          label: "鍙傛暟鏀剁缉"
-        }
-      ],
-      addTableSelect: [],
-      liveLineChartData: {
-        datas: [],
-        legendArr: [],
-        timeList: [],
-        legendNameArr: []
-      },
-      selectYaxis: [],
-      activeName: "second",
-      code: undefined,
-      rows: [],
-      //鍗曚綅
-      unitOptions: [],
-      currentNode: undefined,
-      indexCategoryDefaultVal: undefined,
-      unitDefaultVal: undefined,
-      intervalTime: undefined,
-      timer: undefined,
-      vuename: "",
-      height: null
-    };
-  },
-  created() {
-    this.getConfigKey("dataMonitoring.realTimeTrend.pastMinute").then(
-      response => {
-        this.queryParams.minute = response.msg;
-      }
-    );
-    this.getConfigKey("dataMonitoring.realTimeTrend.piontCount").then(
-      response => {
-        this.count = response.msg;
-      }
-    );
-    this.getDicts("sys_unit").then(response => {
-      this.unitOptions = response.data;
-    });
-  },
-  mounted() {
-    clearInterval(this.timer);
-    clearInterval(timers);
-    timers = setInterval(this.setTimer, 50);
-    this.getConfigKey("dataMonitoring.realTimeTrend.intervalTime").then(
-      response => {
-        if (response.code === 200) {
-          this.intervalTime = response.msg;
-          this.timer = setInterval(this.getLineDataList, this.intervalTime);
-        }
-      }
-    );
-  },
-  beforeDestroy() {
-    // 椤甸潰閿�姣佹椂 瑕佸仠姝㈣鏃跺櫒锛屽惁鍒欓�夐」鍗″垏鎹㈣鏃跺櫒涓嶅仠姝紝浼氳秺鏉ヨ秺蹇紝澶氫釜绾跨▼
-    clearInterval(this.timer);
-    clearInterval(timers);
-  },
-  methods: {
-    setTimer() {
-      let that = this;
-      this.$nextTick(() => {
-        that.$refs.dataTable && that.$refs.dataTable.doLayout();
-      });
-    },
-    setCharts() {
-      this.height = window.innerHeight - 300 + "px";
-    },
-    modelNodeChange(modelNode) {
-      this.queryParams.nodeId = modelNode;
-      this.getList();
-      this.disabledSetting =
-        modelNode === undefined || modelNode === "" || modelNode === null;
-      if (modelNode) {
-        this.currentNode = modelNode;
-      }
-      if (this.$refs.lincharVue != undefined && this.$refs.lincharVue != null) {
-        this.$refs.lincharVue.closeLineChar();
-      }
-    },
-    /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-    getList() {
-      this.$refs["queryForm"].validate(valid => {
-        if (valid) {
-          this.loading = true;
-          var search = this.queryParams;
-          search.params[0].minute = this.queryParams.minute;
-          search.params[0].count = this.count;
-          //琛ㄦ牸鏁版嵁
-          getSvgTrendSettingIndex(search).then(response => {
-            this.tableData = response.data;
-            this.total = response.total;
-            this.addTableSelect = [];
-            //琛ㄦ牸涓嬫媺閫夋嫨
-            for (let j = 0; j < 5 && j < this.tableData.length; j++) {
-              let optionItem = {
-                yValue: "y" + j,
-                yLable: "Y" + j
-              };
-              this.addTableSelect.push(optionItem);
-            }
-            this.loading = false;
-          });
-        }
-      });
-    },
-
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    getTime() {
-      //鏄剧ず鏃堕棿
-      //this.timeArr = [this.startTime,this.endTime];
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.drawChars(selection);
-      // if(selection.length > 1){  //鍗曢�夋椂涓�1锛岄渶瑕侀�夋嫨n椤规敼鏁板�间负n灏卞彲浠�
-      //   this.$refs.dataTable.toggleRowSelection(selection[0],false);//瓒呭嚭鎸囧畾閫夋嫨涓暟鍚庯紝鎶婄涓�涓�変腑鐨剆election璁句负false
-      //   selection.splice(0,1);//鍚屾椂瑕佹妸閫変腑绗竴椤圭Щ闄�
-      // }
-    },
-    drawChars(selection) {
-      this.codes = selection.map(item => item.code);
-      this.indexNames = selection.map(item => item.indexName);
-      this.selectYaxis = selection.map(item =>
-        item.yValue ? item.yValue : ""
-      );
-      if (this.codes.length > 0) {
-        this.cleanLineData();
-        this.vuename = "lincharVue";
-        this.getLineDataList();
-      } else {
-        this.cleanLineData();
-        if (
-          this.$refs.lincharVue != undefined &&
-          this.$refs.lincharVue != null
-        ) {
-          this.$refs.lincharVue.closeLineChar();
-        }
-      }
-    },
-    getLineDataList() {
-      let that = this;
-      this.$nextTick(() => {
-        that.$refs.dataTable.doLayout();
-      });
-      if (this.codes.length > 0) {
-        this.cleanLineData();
-        //鎶樼嚎鍥炬暟鎹�
-        getTrendSettingIndexLineData(
-          this.codes,
-          this.queryParams.minute,
-          this.count
-        ).then(response => {
-          //鏁版嵁娣诲姞
-          this.liveLineChartData.datas = response.data;
-          this.$nextTick(() => {
-            that.$refs.dataTable.doLayout();
-          });
-          // x杞存椂闂存坊鍔�
-          for (let i = 0; i < this.liveLineChartData.datas[0].length; i++) {
-            this.liveLineChartData.timeList.push(
-              this.liveLineChartData.datas[0][i].showDataTime
-            );
-          }
-          //鏇茬嚎鍚嶇О娣诲姞
-          this.liveLineChartData.legendNameArr = this.indexNames;
-          this.liveLineChartData.legendArr = this.selectYaxis;
-        });
-      }
-    },
-    selectNumber(row, index) {
-      let selection = this.$refs.dataTable.selection;
-      this.drawChars(selection);
-    },
-    cleanLineData() {
-      this.liveLineChartData.legendArr = [];
-      this.liveLineChartData.timeList = [];
-      this.liveLineChartData.datas = [];
-      this.liveLineChartData.legendNameArr = [];
-    },
-    closeDialog() {
-      this.activeName = "";
-    },
-    openDialog(e, type) {
-      this.dialogType = type;
-      if (e) {
-        this.code = e.code;
-        this.open = true;
-        this.activeName = "second";
-        this.title = type === "line" ? "鍘嗗彶鏇茬嚎鏌ヨ" : "鍘嗗彶鏁版嵁";
-      }
-    },
-    cancelDialog() {
-      this.open = false;
-    },
-    // 鍗曚綅瀛楀吀缈昏瘧
-    unitFormat(row, column) {
-      return this.selectDictLabel(this.unitOptions, row.indexUnit);
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.tableStyle .el-table__header-wrapper .el-checkbox {
-  display: none;
-}
-
-.trendLineChart-right {
-  height: 100%;
-  overflow: hidden;
-}
-</style>
diff --git a/energy_management_ui/src/views/basicSetup/equipmentfile/view.vue b/energy_management_ui/src/views/basicSetup/equipmentfile/view.vue
deleted file mode 100644
index dc08043..0000000
--- a/energy_management_ui/src/views/basicSetup/equipmentfile/view.vue
+++ /dev/null
@@ -1,117 +0,0 @@
-<template>
-  <div v-html="svgHtml"/>
-</template>
-
-<script>
-import {getConfigure, getLiveData} from "@/api/basicSetup/equipmentfile";
-
-export default {
-  props: ["nodeId"],
-  created() {
-    let nodeId = this.$props.nodeId;
-    if (nodeId) {
-      this.show(nodeId);
-    }
-  },
-  data() {
-    return {
-      svgHtml: null,
-      filePath: null,
-      tags: null,
-      tagCodes: [],
-      valueItems: null,
-      timer: null
-    }
-  },
-  mounted() {
-    clearInterval(this.timer);
-    this.refreshData()
-  },
-  methods: {
-    show(nodeId) {
-      console.log(nodeId)
-      this.tagCodes = [];
-      this.filePath = '';
-      getConfigure(nodeId).then(response => {
-        this.tags = [];
-        this.svgHtml = '';
-        if (response.code === 200) {
-          if (response.data) {
-            this.filePath = process.env.VUE_APP_BASE_API + response.data.filePath;
-            this.tags = response.data.infoList;
-            this.getSvg();
-            this.refresh();
-          }
-        } else {
-          this.msgError(response.msg);
-        }
-      });
-    },
-    getSvg() {
-      const xhr = new XMLHttpRequest();
-      xhr.open("GET", this.filePath, true);
-      xhr.send();
-      xhr.addEventListener("load", () => {
-        const resXML = xhr.responseXML;
-        let svgDom = resXML.documentElement.cloneNode(true);
-        let values = svgDom.getElementsByTagName('text');
-        for (let i = 0; i < values.length; i++) {
-          let tag = this.tags.filter(f => f.param === values[i].textContent);
-          if (tag && tag.length > 0) {
-            let tagCode = tag[0].tag;
-            values[i].textContent = '';
-            if (tagCode) {
-              values[i].setAttribute("id", tagCode);
-              this.tagCodes.push(tagCode)
-            }
-          }
-        }
-
-        let oSerializer = new XMLSerializer();
-        this.svgHtml = oSerializer.serializeToString(svgDom);
-      });
-    },
-    refreshData() {
-      this.timer = setInterval(() => {
-        this.refresh();
-      }, 3000);
-    },
-    refresh() {
-      if (this.tagCodes.length === 0) {
-        return;
-      }
-
-      getLiveData(this.tagCodes).then(response => {
-        if (response.code === 200) {
-          if (response.data) {
-            response.data.forEach(tagValue => {
-              let value = '';
-              if (tagValue.value) {
-                value = parseFloat(tagValue.value).toFixed(2);
-              } else {
-                value = "0";
-              }
-
-              let el = document.getElementById(tagValue.tagCode);
-              if (el) {
-                el.textContent = value;
-              }
-            });
-            //杩欏潡鏄崟鐙姞鐨� 鐢ㄦ潵澶勭悊 娌℃湁鎸囨爣鎴栬�呮寚鏍囨病鏈夌粨鏋滅殑 閮借缃�0
-            let allText = document.getElementsByTagName("text");
-            for (let i = 0; i < allText.length; i++) {
-              // console.log(i + "textContent=" + allText[i].textContent);
-              if (allText[i].textContent == null || allText[i].textContent == "") {
-                allText[i].textContent = "0";
-              }
-            }
-          }
-        }
-      });
-    }
-  },
-  beforeDestroy() {
-    clearInterval(this.timer)
-  }
-}
-</script>
diff --git a/energy_management_ui/src/views/basicSetup/parameters/basicIndex.vue b/energy_management_ui/src/views/basicSetup/parameters/basicIndex.vue
deleted file mode 100644
index d4fd5c9..0000000
--- a/energy_management_ui/src/views/basicSetup/parameters/basicIndex.vue
+++ /dev/null
@@ -1,344 +0,0 @@
-<style scoped lang="scss">
-  .el-header {
-    background-color: #B3C0D1;
-    color: #333;
-    line-height: 60px;
-  }
-
-  .el-aside {
-    color: #333;
-  }
-
-  .el-scrollbar .el-scrollbar__wrap {
-    overflow-x: hidden;
-  }
-</style>
-<template>
-  <div class="app-container" style="padding:0">
-    <el-card class="box-card">
-      <div slot="header" class="clearfix">
-        <el-row :gutter="20">
-          <el-col :span="16">
-            <div class="grid-content bg-purple">{{titleName}} 鈥斺�� 璁捐</div>
-          </el-col>
-          <el-col :span="7">
-            <div class="grid-content bg-purple">
-              <el-button type="button" plain @click="addTable">鏂板琛ㄦ牸</el-button>
-              <el-button type="primary" @click="submitForm">淇� 瀛�</el-button>
-            </div>
-          </el-col>
-        </el-row>
-      </div>
-      <el-container>
-        <el-main><!---->
-          <div class="demo-input-size">
-            <el-form refs="form" :model="form" >
-              <template v-for='(config,tableIndex) in configInfos' >
-                <el-row :gutter="20">
-                  <el-col :span="6">
-                    <el-form-item prop="title">
-                      <el-input style="border: 0" v-model="config.tableName"></el-input>
-                    </el-form-item>
-                  </el-col>
-                  <el-col :span="18">
-                    <div class="grid-content bg-purple">
-                      <el-button type="button" plain @click="addRow(tableIndex)">澧炲姞琛�</el-button>
-                      <el-button type="button" plain @click="addColumn(tableIndex)">澧炲姞鍒�</el-button>
-                      <el-button type="button" plain @click="deleteTable(tableIndex)">鍒犻櫎琛ㄦ牸</el-button>
-                    </div>
-                  </el-col>
-                </el-row>
-                <el-table :data="config.tableRow" ref="multipleTable" tooltip-effect="dark" style="width: 100%;margin-bottom: 20px" border @header-click="deleteCol" @cell-dblclick="showPTable2"  :row-class-name="tableRowClassName">
-                  <template v-for='(col,columnIndex) in config.tableColumn'>
-                    <el-table-column :show-overflow-tooltip="true" :prop="col.item" :label="col.name" :key="col.item" :index="tableIndex" :type="numToStr(columnIndex)" :current-row-key="2">
-                      <template scope="scope">
-                        <el-input size="mini" v-model="scope.row[col.item]" v-if="columnIndex===0" ></el-input>
-                        <el-input size="mini" v-model="scope.row[col.item]" v-if="columnIndex !=0" ref="nav" style="width: 80%"></el-input>
-                        <!--<el-button v-if="columnIndex !=0" @click.native.prevent="collectIndexSetting(columnIndex,tableIndex,scope.$index)" style="width: 100px">閫夋嫨</el-button>-->
-                      </template>
-                    </el-table-column>
-                  </template>
-                  <el-table-column fixed="right" label="鎿嶄綔">
-                  <template slot-scope="scope">
-                    <el-button @click.native.prevent="deleteRow(tableIndex,scope.$index)" size="small"> 绉婚櫎 </el-button>
-                  </template>
-                </el-table-column>
-                </el-table>
-              </template>
-            </el-form>
-          </div>
-        </el-main>
-      </el-container>
-    </el-card>
-    <!--鏂板鍒楀悕绉�-->
-    <el-dialog :title="title" :visible.sync="dialogFormVisible" width="300px">
-      <el-form :model="forms" label-width="80px">
-        <el-row>
-          <el-col :span="24">
-            <el-form-item label="鍒楀悕绉�" prop="column">
-              <el-input v-model="forms.column"></el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitColumn">纭� 瀹�</el-button>
-      </div>
-    </el-dialog>
-    <el-drawer title="閫夋嫨閲囬泦鎸囨爣" :visible.sync="collectIndexDialog" direction="rtl"
-               size="55%"> <!--@open="showCollectIndexDialog"-->
-      <StatisticIndexSetting ref="collectIndexSetting" indexType="COLLECT" @statisticIndexConfirmSelect="collectIndexConfirmSelect"></StatisticIndexSetting>
-    </el-drawer>
-  </div>
-</template>
-<script>
-  import {listParameters, getParameters, getAllCollectTag, updateParameters} from "@/api/basicSetup/parameters";
-  /*import CollectIndexSetting from "../../basicsetting/nodeSetting/collectIndexSetting"*/;
-  import {setNodeToIndex} from '@/api/basicsetting/modelNode'
-  /*import StatisticIndexSetting from "../../basicsetting/nodeSetting/statisticIndexSetting";*/
-  import StatisticIndexSetting from "./standard_statistic";
-  export default {
-    name: 'basicIndex',
-    components: {StatisticIndexSetting},
-    data() {
-      return {
-        // 缃╁眰閬�
-        loading: true,
-        // 閫変腑鏁扮粍
-        ids: [],
-        // 闈炲崟涓鐢�
-        single: true,
-        // 闈炲涓鐢�
-        multiple: true,
-        // 鎬绘潯鏁�
-        total: 0,
-        // parameters琛ㄦ牸鏁版嵁
-        parametersList: [],
-        // 寮瑰嚭灞傛爣棰�
-        title: "",
-        // 鏄惁鏄剧ず寮瑰嚭灞�
-        open: false,
-        opens: false,
-        dialogFormVisible: false,
-        collectIndexDialog: false,
-        codeOptions: [],
-        // 鏁版嵁灞曠ず绫诲瀷锛�1-瀹炴椂鏁版嵁锛�2-闃舵鏁版嵁瀛楀吀
-        dataTypeOptions: [],
-        // 鏄惁鏄剧ず鎶ヨ瀛楀吀
-        showAlarmOptions: [],
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          id: undefined,
-          name: undefined,
-          code: undefined,
-          categoryName: undefined,
-          categoryCode: undefined,
-          dataType: undefined,
-          showAlarm: undefined
-        },
-        titleName: "",
-        // 琛ㄥ崟鍙傛暟
-        form: {},
-        forms:{},
-        i: -1,
-        // 琛ㄥ崟鏍¢獙
-        rules: {
-          id: [{required: true, message: "鏄惁鏄剧ず鎶ヨ涓嶈兘涓虹┖", trigger: "blur"}],
-          name: [{required: true, message: "鏍囧噯鍙傛暟绫诲埆鍚嶇О涓嶈兘涓虹┖", trigger: "blur"}],
-        },
-        configInfos: [],
-        tableInfos:{},
-        settingCollectIndexList: [],
-        row_number:"",
-        table_number:"",
-        column_number:"",
-        currentNode:"",
-      };
-    },
-    created() {},
-    methods: {
-      tableRowClassName ({row, rowIndex}) {
-       //鎶婃瘡涓�琛岀殑绱㈠紩鏀捐繘row
-        row.index = rowIndex;
-      },
-      showPTable2(row, column){
-        if(column.type>0){
-          let key = column.property;
-          this.row_number=row.index;
-          this.table_number=column.index
-          this.column_number=key
-          this.collectIndexDialog = true;
-          this.$nextTick(() => {
-            this.$refs.collectIndexSetting.init(this.queryParams.id, this.settingCollectIndexList);
-          })
-
-        }
-      },
-      collectIndexConfirmSelect(selectedIndex) {
-        //this.settingCollectIndexList = selectedIndex[0];
-        console.log(selectedIndex)
-        this.configInfos[this.table_number].tableRow[this.row_number][this.column_number] = selectedIndex.code;
-        /*let indexIds = selectedIndex.indexId
-        setNodeToIndex(this.queryParams.id, indexIds, "COLLECT").then((response) => {
-          if (response.code !== 200) {
-            this.$message.error(response.msg);
-          }
-        });*/
-      },
-      getList(data) {
-        this.titleName = data.label;
-        this.queryParams.id = data.id;
-        this.currentNode=data;
-        this.loading = true;
-        this.configInfos=[];
-        listParameters(this.queryParams).then(response => {
-          this.parametersList = response.rows;
-          if(this.parametersList.length >0){
-            if(this.parametersList[0].configInfo =="null" ||this.parametersList[0].configInfo==null ||this.parametersList[0].configInfo==""){
-              this.configInfos=[];
-            }else{
-              this.configInfos=JSON.parse(this.parametersList[0].configInfo);
-            }
-          }
-          this.loading = false;
-        });
-      },
-      // 鏁版嵁灞曠ず绫诲瀷锛�1-瀹炴椂鏁版嵁锛�2-闃舵鏁版嵁瀛楀吀缈昏瘧
-      dataTypeFormat(row, column) {
-        return this.selectDictLabel(this.dataTypeOptions, row.dataType);
-      },
-      // 鏄惁鏄剧ず鎶ヨ瀛楀吀缈昏瘧
-      showAlarmFormat(row, column) {
-        return this.selectDictLabel(this.showAlarmOptions, row.showAlarm);
-      },
-      // 鍙栨秷鎸夐挳
-      cancel() {
-        this.open = false;
-        this.opens = false;
-        this.reset();
-      },
-      // 琛ㄥ崟閲嶇疆
-      reset() {
-        this.form = {
-          id: undefined,
-          name: undefined,
-          configInfo: undefined,
-          remark: undefined,
-          code: undefined,
-          dataType: undefined,
-          showAlarm: undefined,
-          column: undefined
-        };
-        this.resetForm("form");
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        //this.getList();
-      },
-      /** 閲嶇疆鎸夐挳鎿嶄綔 */
-      resetQuery() {
-        this.resetForm("queryForm");
-        this.handleQuery();
-      },
-      // 澶氶�夋閫変腑鏁版嵁
-      handleSelectionChange(selection) {
-        this.ids = selection.map(item => item.id)
-        this.single = selection.length != 1
-        this.multiple = !selection.length
-      },
-      /** 鏂板鎸夐挳鎿嶄綔 */
-      handleAdd() {
-        this.reset();
-        this.open = true;
-        this.title = "娣诲姞鏍囧噯鍙傛暟";
-      },
-      dialogTable() {
-        this.reset();
-        this.opens = true;
-        this.title = "娣诲姞鎸囨爣";
-      },
-      /** 淇敼鎸夐挳鎿嶄綔 */
-      handleUpdate(row) {
-        this.reset();
-        const id = row.id || this.ids
-        getParameters(id).then(response => {
-          this.form = response.data;
-          this.open = true;
-          this.title = "淇敼鏍囧噯鍙傛暟";
-        });
-      },
-      /** 淇濆瓨鎸夐挳 */
-      submitForm: function () {
-        this.form.id=this.queryParams.id;
-        this.form.name=this.titleName;
-        if (this.form.id != undefined) {
-          this.form.configInfo= JSON.stringify(this.configInfos);
-          updateParameters(this.form).then(response => {
-            if (response.code === 200) {
-              this.msgSuccess("淇濆瓨鎴愬姛");
-              this.getList(this.currentNode);
-            } else {
-              this.msgError(response.msg);
-            }
-          });
-        }
-      },
-      //娣诲姞琛ㄦ牸
-      addTable: function () {
-        let tableConfig = {
-          tableName: '',
-          tableRow: [],
-          tableColumn: []
-        };
-        this.configInfos.push(tableConfig);
-      },
-      addRow: function (tableIndex) {
-        let tableInfo = this.configInfos[tableIndex];
-        let row = {};
-        for (let i = 0; i < tableInfo.tableColumn.length; i++) {
-          row[tableInfo.tableColumn[i].item] = '';
-        }
-        tableInfo.tableRow.push(row);
-      },
-      deleteRow: function (tableIndex, rowIndex) {
-        let tableInfo = this.configInfos[tableIndex];
-        tableInfo.tableRow.splice(rowIndex, 1);
-      },
-      numToStr(num) {
-        num = num.toString()
-        return num
-      },
-        deleteCol: function (column) {
-        let tableInfo = this.configInfos[column.index];
-        let num=column.type;
-        tableInfo.tableColumn.splice(num, 1);
-      },
-      addColumn: function (tableIndex) {
-        this.forms = {
-          column: undefined,
-        };
-        this.resetForm("forms");
-        this.dialogFormVisible = true;
-        this.title = "娣诲姞鍒楁爣棰�";
-        this.tableInfos = this.configInfos[tableIndex];
-      },
-      submitColumn: function () {
-        this.dialogFormVisible = false;
-        let tableInfo = this.tableInfos;
-        let tableColInfo = {
-          name: this.forms.column,
-          item: 'colName' + tableInfo.tableColumn.length
-          /*name: '杞﹂棿' + tableInfo.tableColumn.length,
-          item: 'colName' + tableInfo.tableColumn.length*/
-        };
-        tableInfo.tableColumn.push(tableColInfo)
-      },
-      deleteTable: function (tableIndex) {
-        this.configInfos.splice(tableIndex, 1);
-      },
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/basicSetup/parameters/index.vue b/energy_management_ui/src/views/basicSetup/parameters/index.vue
deleted file mode 100644
index a7d3a03..0000000
--- a/energy_management_ui/src/views/basicSetup/parameters/index.vue
+++ /dev/null
@@ -1,298 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" :width="isCollapse?'0px':'20%'">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            鏍囧噯鍙傛暟閰嶇疆
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false" :modelCode="modelCode"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <div style="cursor:pointer;" @click="toggleCollapse">
-          <img src="@/assets/image/configureChart.png" style="width: 100%;height: 100%">
-        </div>
-        <el-main style="padding:0">
-          <basicIndex ref="basicIndex"></basicIndex>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import basicIndex from "./basicIndex";
-  import ModelNode from "../../basicsetting/modelNode/modelNode";
-
-  export default {
-    components: { ModelNode,basicIndex},
-    created() {
-      this.modelCode=this.$route.query.modelCode;
-    },
-    data() {
-      return {
-        modelCode:undefined,
-        isCollapse: false,
-      }
-    },
-    methods: {
-      changeNode: function (node) {
-        this.$refs.basicIndex.getList(node);
-      },
-      manageModel: function () {
-        this.$router.push('/model');
-      },
-      changeModel: function (item) {
-        this.$refs.modelNode.getList(item);
-      },
-      // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-      toggleCollapse () {
-        this.isCollapse = !this.isCollapse
-      }
-    }
-  };
-</script>
-
-<!--
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" style="width: 20%">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix">
-            <span>鍔熻兘椤�</span>
-            <span class="node-opt" style="float: right;">
-              <el-link title="鏂板"  icon="el-icon-plus" @click="handleAdd"></el-link>
-              <el-link title="淇敼" icon="el-icon-edit" @click="handleEdit"></el-link>
-              <el-link title="鍒犻櫎"icon="el-icon-delete" @click="handleDel"></el-link>
-            </span>
-          </div>
-          <el-menu default-active="2" class="el-menu-vertical-demo">
-             <template v-for="(item,index) in parametersList">
-              <el-menu-item v-on:click.native="changeNode(item.id,item.name)"  :max="max">
-               &lt;!&ndash;<el-checkbox :key="item.id" @change="checked=>handleChange(checked,item.id)"></el-checkbox>&ndash;&gt;
-                <span slot="title">{{item.name}}</span>
-              </el-menu-item>
-           </template>
-          </el-menu>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <el-main style="padding:0">
-          <basicIndex ref="basicIndex"></basicIndex>
-        </el-main>
-      </el-container>
-    </el-container>
-    &lt;!&ndash; 娣诲姞鎴栦慨鏀规爣鍑嗗弬鏁伴厤缃璇濇 &ndash;&gt;
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-row>
-          <el-col :span="24">
-            <el-form-item label="绫诲埆鍚嶇О" prop="name">
-              <el-input v-model="form.name" placeholder="璇疯緭鍏ョ被鍒悕绉�" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="绫诲埆缂栫爜" prop="code">
-              <el-input v-model="form.code" placeholder="绫诲埆缂栫爜" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="鏄惁鎶ヨ" prop="showAlarm">
-              <el-input v-model="form.showAlarm" placeholder="鏄惁鏄剧ず鎶ヨ" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="鏁版嵁绫诲瀷" prop="dataType">
-              <el-select v-model="form.dataType" placeholder="璇烽�夋嫨鏁版嵁绫诲瀷">
-                <el-option
-                  v-for="dict in dataTypeOptions"
-                  :key="dict.dictValue"
-                  :label="dict.dictLabel"
-                  :value="dict.dictValue"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-<script>
-  import basicIndex from "./basicIndex";
-  import { listParameters, getParameters, addParameters, updateParameters,delParameters} from "@/api/basicSetup/parameters";
-  export default {
-    components: {basicIndex},
-    data() {
-      return {
-        // 缃╁眰閬�
-        loading: true,
-        // 閫変腑鏁扮粍
-        ids: [],
-        id:undefined,
-        max:1,
-        // 闈炲崟涓鐢�
-        single: true,
-        // 闈炲涓鐢�
-        multiple: true,
-        // 鎬绘潯鏁�
-        total: 0,
-        // parameters琛ㄦ牸鏁版嵁
-        parametersList: [],
-        // 寮瑰嚭灞傛爣棰�
-        title: "",
-        // 鏄惁鏄剧ず寮瑰嚭灞�
-        open: false,
-        opens: false,
-        // 鏁版嵁灞曠ず绫诲瀷锛�1-瀹炴椂鏁版嵁锛�2-闃舵鏁版嵁瀛楀吀
-        dataTypeOptions: [],
-        // 鏄惁鏄剧ず鎶ヨ瀛楀吀
-        showAlarmOptions: [],
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          name: undefined,
-          code: undefined,
-          categoryName: undefined,
-          categoryCode: undefined,
-          dataType: undefined,
-          showAlarm: undefined
-        },
-        // 琛ㄥ崟鍙傛暟
-        form: {},
-
-        // 琛ㄥ崟鏍¢獙
-        rules: {
-          name: [{ required: true, message: "鏍囧噯鍙傛暟绫诲埆鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }],
-          code: [{ required: true, message: "鏍囧噯鍙傛暟缂栫爜涓嶈兘涓虹┖", trigger: "blur" }],
-        },
-      };
-    },
-    created() {
-      this.getList();
-      this.getDicts("data_type").then(response => {
-        this.dataTypeOptions = response.data;
-      });
-    },
-    methods: {
-      getList(){
-        this.loading = true;
-        listParameters(this.queryParams).then(response => {
-          this.parametersList = response.rows;
-          this.$refs.basicIndex.getList(this.parametersList[0]);
-          //this.total = response.total;
-          this.loading = false;
-        });
-      },
-      // 鏁版嵁灞曠ず绫诲瀷锛�1-瀹炴椂鏁版嵁锛�2-闃舵鏁版嵁瀛楀吀缈昏瘧
-      dataTypeFormat(row, column) {
-        return this.selectDictLabel(this.dataTypeOptions, row.dataType);
-      },
-      // 鏄惁鏄剧ず鎶ヨ瀛楀吀缈昏瘧
-      showAlarmFormat(row, column) {
-        return this.selectDictLabel(this.showAlarmOptions, row.showAlarm);
-      },
-      // 鍙栨秷鎸夐挳
-      cancel() {
-        this.open = false;
-        this.reset();
-      },
-      // 琛ㄥ崟閲嶇疆
-      reset() {
-        this.form = {
-          id: undefined,
-          name: undefined,
-          configInfo: undefined,
-          code: undefined,
-          dataType: undefined,
-          showAlarm: undefined,
-        };
-        this.resetForm("form");
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.getList();
-      },
-      /** 閲嶇疆鎸夐挳鎿嶄綔 */
-      resetQuery() {
-        this.resetForm("queryForm");
-        this.handleQuery();
-      },
-
-      handleChange(boolean,item){
-        if(boolean){
-          this.id =item;
-        }
-      },
-      /** 鏂板鎸夐挳鎿嶄綔 */
-      handleAdd() {
-        this.reset();
-        this.open = true;
-        this.title = "娣诲姞鏍囧噯鍙傛暟";
-      },
-      handleEdit() {
-        this.reset();
-        const id =this.id;
-        getParameters(id).then(response => {
-          this.form = response.data;
-          this.open = true;
-          this.title = "淇敼鏍囧噯鍙傛暟";
-        });
-      },
-      /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-      handleDel() {
-        const ids =this.id;
-        this.$confirm('鏄惁纭鍒犻櫎鏍囧噯鍙傛暟缂栧彿涓�"' + ids + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return delParameters(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-      },
-      /** 淇濆瓨鎸夐挳 */
-      submitForm: function() {
-        this.$refs["form"].validate(valid => {
-          if (valid) {
-            if (this.form.id != undefined) {
-              updateParameters(this.form).then(response => {
-                if (response.code === 200) {
-                  this.msgSuccess("淇濆瓨鎴愬姛");
-                  this.open = false;
-                  this.getList();
-                } else {
-                  this.msgError(response.msg);
-                }
-              });
-            } else {
-              addParameters(this.form).then(response => {
-                if (response.code === 200) {
-                  this.msgSuccess("淇濆瓨鎴愬姛");
-                  this.open = false;
-                  this.getList();
-                } else {
-                  this.msgError(response.msg);
-                }
-              });
-            }
-          }
-        });
-      },
-      changeNode(data) {
-        this.$refs.basicIndex.getList(data);
-      }
-  }
-  };
-</script>
--->
diff --git a/energy_management_ui/src/views/basicSetup/parameters/index1.vue b/energy_management_ui/src/views/basicSetup/parameters/index1.vue
deleted file mode 100644
index 7e482cc..0000000
--- a/energy_management_ui/src/views/basicSetup/parameters/index1.vue
+++ /dev/null
@@ -1,555 +0,0 @@
-<style>
-  .demo-table-expand {
-    font-size: 0;
-  }
-  .demo-table-expand label {
-    width: 90px;
-    color: #99a9bf;
-  }
-  .demo-table-expand .el-form-item {
-    margin-right: 0;
-    margin-bottom: 0;
-    width: 50%;
-  }
-</style>
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="168px">
-      <el-form-item label="鏍囧噯鍙傛暟绫诲埆鍚嶇О" prop="categoryName">
-        <el-input
-          v-model="queryParams.categoryName"
-          placeholder="璇疯緭鍏ユ爣鍑嗗弬鏁扮被鍒悕绉�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鏍囧噯鍙傛暟绫诲埆缂栫爜" prop="categoryCode">
-        <el-input
-          v-model="queryParams.categoryCode"
-          placeholder="璇疯緭鍏ユ爣鍑嗗弬鏁扮被鍒紪鐮�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鏁版嵁灞曠ず绫诲瀷" prop="dataType">
-        <el-select v-model="queryParams.dataType" placeholder="璇烽�夋嫨鏁版嵁灞曠ず绫诲瀷" clearable size="small">
-          <el-option
-            v-for="dict in dataTypeOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['basicSetup:category:add']"
-        >鏂板</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['basicSetup:category:edit']"
-        >淇敼</el-button>
-      </el-col>
-    </el-row>
-
-    <template>
-      <el-table v-loading="loading" :data="categoryList" style="width: 100%"  @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center" prop="id"/>
-        <el-table-column type="expand" >
-          <template slot-scope="props">
-          <table cellspacing="0" cellpadding="0" border="0" class="el-table__body" style="width: 90%;border: 1px solid #ddd;margin-bottom: 20px"
-                 v-for="(item,index) in parametersList"
-                 v-if="item.categoryId === props.row.id">
-            <thead class="has-gutter" style="background: #e7eaec">
-            <tr class="">
-              <th colspan="1" rowspan="1" class="el-table_4_column_24  is-center is-leaf">
-                <div class="cell">鍚嶇О</div>
-              </th>
-              <th colspan="1" rowspan="1" class="el-table_4_column_25  is-center is-leaf" v-for="(items,indexs) in JSON.parse(item.name)" v-bind:key="items.id">
-                <div class="cell">{{items.name}}</div>
-              </th>
-              <th colspan="1" rowspan="1" class="el-table_4_column_26  is-center is-leaf">
-                <div class="cell">鎿嶄綔</div>
-              </th>
-              <th class="gutter" style="width: 0px; display: none;"></th>
-            </tr>
-            </thead>
-            <tbody>
-            <tr class="el-table__row expanded" v-for="(items,indexs) in JSON.parse(item.configInfo)" v-bind:key="items.id" style="border: 1px solid #ddd">
-              <td rowspan="1" colspan="1" class="el-table_1_column_3 is-center " >
-                <div class="cell">{{items.value}}</div>
-              </td>
-              <td rowspan="1" colspan="1" class="el-table_1_column_3 is-center " >
-                <div class="cell">娴嬭瘯1</div>
-              </td>
-              <td rowspan="1" colspan="1" class="el-table_1_column_3 is-center " >
-                <div class="cell">娴嬭瘯2</div>
-              </td>
-              <td rowspan="1" colspan="1" class="el-table_1_column_7 is-center small-padding fixed-width">
-                <div class="cell">
-                  <button type="button" class="el-button el-button&#45;&#45;text el-button&#45;&#45;mini" @click="handleRevise(item.id)">
-                    <i class="el-icon-edit"></i>
-                    <span>淇敼</span>
-                  </button>
-                </div>
-              </td>
-            </tr>
-            </tbody>
-          </table>
-          </template>
-        </el-table-column>
-        <el-table-column label="鏍囧噯鍙傛暟绫诲埆鍚嶇О" align="center" prop="categoryName"/>
-        <el-table-column label="鏍囧噯鍙傛暟绫诲埆缂栫爜" align="center" prop="categoryCode"/>
-        <el-table-column label="鏁版嵁灞曠ず绫诲瀷" align="center" prop="dataType" :formatter="dataTypeFormat"/>
-        <el-table-column label="鏄惁鏄剧ず鎶ヨ" align="center" prop="showAlarm"/>
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-plus"
-              @click="handleSave(scope.row)"
-              v-hasPermi="['basicSetup:parameters:add']"
-            >鏂板</el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="handleUpdate(scope.row)"
-              v-hasPermi="['basicSetup:category:edit']"
-            >淇敼</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-    </template>
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-    <!-- 娣诲姞鎴栦慨鏀规爣鍑嗗弬鏁伴厤缃璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-row>
-          <el-col :span="24">
-            <el-form-item label="绫诲埆鍚嶇О" prop="categoryName">
-              <el-input v-model="form.categoryName" placeholder="璇疯緭鍏ョ被鍒悕绉�" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="绫诲埆缂栫爜" prop="categoryCode">
-              <el-input v-model="form.categoryCode" placeholder="绫诲埆缂栫爜" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="鏄惁鎶ヨ" prop="showAlarm">
-              <el-input v-model="form.showAlarm" placeholder="鏄惁鏄剧ず鎶ヨ" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="鏁版嵁绫诲瀷" prop="dataType">
-              <el-select v-model="form.dataType" placeholder="璇烽�夋嫨鏁版嵁绫诲瀷">
-                <el-option
-                  v-for="dict in dataTypeOptions"
-                  :key="dict.dictValue"
-                  :label="dict.dictLabel"
-                  :value="dict.dictValue"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-    <!--&lt;!&ndash; 娣诲姞鎴栦慨鏀筨asicSetup瀵硅瘽妗� &ndash;&gt;-->
-    <el-dialog :title="title" :visible.sync="opens" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-row  v-for='(form,index) in lists' v-bind:key='form.id'>
-          <el-col :span="15">
-            <el-form-item label="鏍囬" prop="names">
-              <el-input v-model="form.name" placeholder="璇疯緭鍏�" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="9">
-            <el-button type="button" plain @click="addEl">娣诲姞</el-button>
-            <el-button type="button" @click="del(index)">鍒犻櫎</el-button>
-          </el-col>
-        </el-row>
-        <el-row  v-for='(form,index) in list' v-bind:key='form.id'>
-          <el-col :span="15">
-            <el-form-item label="鍊�" prop="value">
-              <el-input v-model="form.value" placeholder="璇疯緭鍏�" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="9">
-            <el-button type="button" plain @click="addE2">娣诲姞</el-button>
-            <el-button type="button" @click="del2(index)">鍒犻櫎</el-button>
-          </el-col>
-        </el-row>
-        <el-input type="hidden"  v-model="form.categoryId"></el-input>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitFormC">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-  import { listParameters, getParameters, addParameters, updateParameters} from "@/api/basicSetup/parameters";
-  import { listCategory, getCategory,  addCategory, updateCategory } from "@/api/basicSetup/category";
-  export default {
-    data() {
-      return {
-        // 缃╁眰閬�
-        loading: true,
-        // 閫変腑鏁扮粍
-        ids: [],
-        // 闈炲崟涓鐢�
-        single: true,
-        // 闈炲涓鐢�
-        multiple: true,
-        // 鎬绘潯鏁�
-        total: 0,
-        // parameters琛ㄦ牸鏁版嵁
-        parametersList: [],
-        categoryList: [],
-        // 寮瑰嚭灞傛爣棰�
-        title: "",
-        // 鏄惁鏄剧ず寮瑰嚭灞�
-        open: false,
-        opens: false,
-        // 鏄惁鏄剧ず鎶ヨ瀛楀吀
-        idOptions: [],
-        // 鏍囧噯鍙傛暟绫诲埆鍚嶇О瀛楀吀
-        nameOptions: [],
-        // 璁捐鍐呭瀛楀吀
-        configInfoOptions: [],
-        // 璁捐鍐呭瀛楀吀
-        createByOptions: [],
-        // 璁捐鍐呭瀛楀吀
-        createTimeOptions: [],
-        // 璁捐鍐呭瀛楀吀
-        updateByOptions: [],
-        // 璁捐鍐呭瀛楀吀
-        updateTimeOptions: [],
-        // 璁捐鍐呭瀛楀吀
-        remarkOptions: [],
-        // 鏍囧噯鍙傛暟绫诲埆缂栫爜瀛楀吀
-        codeOptions: [],
-        // 鏁版嵁灞曠ず绫诲瀷锛�1-瀹炴椂鏁版嵁锛�2-闃舵鏁版嵁瀛楀吀
-        dataTypeOptions: [],
-        // 鏄惁鏄剧ず鎶ヨ瀛楀吀
-        showAlarmOptions: [],
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          name: undefined,
-          code: undefined,
-          categoryName: undefined,
-          categoryCode: undefined,
-          dataType: undefined,
-          showAlarm: undefined,
-          categoryId: undefined
-        },
-        // 琛ㄥ崟鍙傛暟
-        form: {},
-        lists: [
-          { name: ""}
-        ],
-        list: [
-          {value: ""}
-        ],
-        // 琛ㄥ崟鏍¢獙
-        rules: {
-          id: [{ required: true, message: "鏄惁鏄剧ず鎶ヨ涓嶈兘涓虹┖", trigger: "blur" }],
-          name: [{ required: true, message: "鏍囧噯鍙傛暟绫诲埆鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }], }
-      };
-    },
-    created() {
-      this.getList();
-      this.getLists();
-      this.getDicts("${column.dictType}").then(response => {
-        this.idOptions = response.data;
-      });
-      this.getDicts("${column.dictType}").then(response => {
-        this.nameOptions = response.data;
-      });
-      this.getDicts("${column.dictType}").then(response => {
-        this.configInfoOptions = response.data;
-      });
-      this.getDicts("${column.dictType}").then(response => {
-        this.createByOptions = response.data;
-      });
-      this.getDicts("${column.dictType}").then(response => {
-        this.createTimeOptions = response.data;
-      });
-      this.getDicts("${column.dictType}").then(response => {
-        this.updateByOptions = response.data;
-      });
-      this.getDicts("${column.dictType}").then(response => {
-        this.updateTimeOptions = response.data;
-      });
-      this.getDicts("${column.dictType}").then(response => {
-        this.remarkOptions = response.data;
-      });
-      this.getDicts("${column.dictType}").then(response => {
-        this.codeOptions = response.data;
-      });
-      this.getDicts("data_type").then(response => {
-        this.dataTypeOptions = response.data;
-      });
-      this.getDicts("${column.dictType}").then(response => {
-        this.showAlarmOptions = response.data;
-      });
-    },
-    methods: {
-      /** 鏌ヨparameters鍒楄〃 */
-      getList() {
-        this.loading = true;
-        listCategory(this.queryParams).then(response => {
-          this.categoryList = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        });
-      },
-      getLists(){
-        this.loading = true;
-        listParameters(this.queryParams).then(response => {
-          this.parametersList = response.rows;
-          //this.total = response.total;
-          this.loading = false;
-        });
-      },
-      // 鏍囧噯鍙傛暟绫诲埆鍚嶇О瀛楀吀缈昏瘧
-      idFormat(row, column) {
-        return this.selectDictLabel(this.idOptions, row.id);
-      },
-      // 鏍囧噯鍙傛暟绫诲埆鍚嶇О瀛楀吀缈昏瘧
-      nameFormat(row, column) {
-        return this.selectDictLabel(this.nameOptions, row.name);
-      },
-      // 璁捐鍐呭瀛楀吀缈昏瘧
-      configInfoFormat(row, column) {
-        return this.selectDictLabel(this.configInfoOptions, row.configInfo);
-      },
-      // 璁捐鍐呭瀛楀吀缈昏瘧
-      createByFormat(row, column) {
-        return this.selectDictLabel(this.createByOptions, row.createBy);
-      },
-      // 璁捐鍐呭瀛楀吀缈昏瘧
-      createTimeFormat(row, column) {
-        return this.selectDictLabel(this.createTimeOptions, row.createTime);
-      },
-      // 璁捐鍐呭瀛楀吀缈昏瘧
-      updateByFormat(row, column) {
-        return this.selectDictLabel(this.updateByOptions, row.updateBy);
-      },
-      // 璁捐鍐呭瀛楀吀缈昏瘧
-      updateTimeFormat(row, column) {
-        return this.selectDictLabel(this.updateTimeOptions, row.updateTime);
-      },
-      // 璁捐鍐呭瀛楀吀缈昏瘧
-      remarkFormat(row, column) {
-        return this.selectDictLabel(this.remarkOptions, row.remark);
-      },
-      // 鏍囧噯鍙傛暟绫诲埆缂栫爜瀛楀吀缈昏瘧
-      codeFormat(row, column) {
-        return this.selectDictLabel(this.codeOptions, row.code);
-      },
-      // 鏁版嵁灞曠ず绫诲瀷锛�1-瀹炴椂鏁版嵁锛�2-闃舵鏁版嵁瀛楀吀缈昏瘧
-      dataTypeFormat(row, column) {
-        return this.selectDictLabel(this.dataTypeOptions, row.dataType);
-      },
-      // 鏄惁鏄剧ず鎶ヨ瀛楀吀缈昏瘧
-      showAlarmFormat(row, column) {
-        return this.selectDictLabel(this.showAlarmOptions, row.showAlarm);
-      },
-      // 鍙栨秷鎸夐挳
-      cancel() {
-        this.open = false;
-        this.opens = false;
-        this.reset();
-      },
-      // 琛ㄥ崟閲嶇疆
-      reset() {
-        this.form = {
-          id: undefined,
-          name: undefined,
-          configInfo: undefined,
-          createBy: undefined,
-          createTime: undefined,
-          updateBy: undefined,
-          updateTime: undefined,
-          remark: undefined,
-          code: undefined,
-          dataType: undefined,
-          showAlarm: undefined,
-          categoryName: undefined,
-          categoryCode: undefined
-        };
-        this.resetForm("form");
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.getList();
-      },
-      /** 閲嶇疆鎸夐挳鎿嶄綔 */
-      resetQuery() {
-        this.resetForm("queryForm");
-        this.handleQuery();
-      },
-      // 澶氶�夋閫変腑鏁版嵁
-      handleSelectionChange(selection) {
-        this.ids = selection.map(item => item.id)
-        this.single = selection.length!=1
-        this.multiple = !selection.length
-      },
-      /** 鏂板鎸夐挳鎿嶄綔 */
-      handleAdd() {
-        this.reset();
-        this.open = true;
-        this.title = "娣诲姞鏍囧噯鍙傛暟绫诲埆";
-      },
-      /** 淇敼鎸夐挳鎿嶄綔 */
-      handleUpdate(row) {
-        this.reset();
-        const id = row.id || this.ids
-        getCategory(id).then(response => {
-          this.form = response.data;
-          this.open = true;
-          this.title = "淇敼鏍囧噯鍙傛暟绫诲埆";
-        });
-      },
-      handleSave (row) {
-        this.opens = true;
-        this.reset();
-        const id = row.id || this.ids
-        this.form.categoryId=id;
-        this.opens = true;
-        this.title = "鏂板鏍囧噯鍙傛暟";
-      },
-
-      handleRevise(row){
-        this.opens = true;
-        this.reset();
-        getParameters(row).then(response => {
-          this.form = response.data;
-          this.list= JSON.parse(this.form.configInfo);
-          this.lists= JSON.parse(this.form.name);
-          console.log(response.data);
-          this.opens = true;
-          this.title = "淇敼鏍囧噯鍙傛暟";
-        });
-      },
-      /** 鎻愪氦鎸夐挳 */
-      submitFormC: function() {
-        this.$refs["form"].validate(valid => {
-          if (valid) {
-            if (this.form.id != undefined) {
-              this.form.name=JSON.stringify(this.lists);
-              this.form.configInfo=JSON.stringify(this.list);
-              updateParameters(this.form).then(response => {
-                if (response.code === 200) {
-                  this.msgSuccess("淇敼鎴愬姛");
-                  this.opens = false;
-                  this.getList();
-                  this.getLists();
-                } else {
-                  this.msgError(response.msg);
-                }
-              });
-            } else {
-              this.form.name=JSON.stringify(this.lists);
-              this.form.configInfo=JSON.stringify(this.list);
-              addParameters(this.form).then(response => {
-                if (response.code === 200) {
-                  this.msgSuccess("鏂板鎴愬姛");
-                  this.opens = false;
-                  this.getList();
-                  this.getLists();
-                } else {
-                  this.msgError(response.msg);
-                }
-              });
-            }
-          }
-        });
-      },
-      /** 鎻愪氦鎸夐挳 */
-      submitForm: function() {
-        this.$refs["form"].validate(valid => {
-          if (valid) {
-            if (this.form.id != undefined) {
-              updateCategory(this.form).then(response => {
-                if (response.code === 200) {
-                  this.msgSuccess("淇敼鎴愬姛");
-                  this.open = false;
-                  this.getList();
-                } else {
-                  this.msgError(response.msg);
-                }
-              });
-            } else {
-              addCategory(this.form).then(response => {
-                if (response.code === 200) {
-                  this.msgSuccess("鏂板鎴愬姛");
-                  this.open = false;
-                  this.getList();
-                } else {
-                  this.msgError(response.msg);
-                }
-              });
-            }
-          }
-        });
-      },
-      addEl: function () {
-        let cope = {
-          name: " ",
-        }
-        this.lists.push(cope);
-      },
-      del: function(index) {
-        this.lists.splice(index, 1);
-      },
-      addE2: function () {
-        let cope = {
-          value: " ",
-        }
-        this.list.push(cope);
-      },
-      del2: function(index) {
-        this.list.splice(index, 1);
-      },
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/basicSetup/parameters/standard.vue b/energy_management_ui/src/views/basicSetup/parameters/standard.vue
deleted file mode 100644
index 22ccd11..0000000
--- a/energy_management_ui/src/views/basicSetup/parameters/standard.vue
+++ /dev/null
@@ -1,94 +0,0 @@
-<template>
-  <div class="app-container">
-    <template v-for='(config) in parametersList' >
-    <el-row :gutter="20">
-      <el-col :span="24">{{config.tableName}}</el-col>
-    </el-row>
-    <el-table v-loading="loading" :data="config.tablerowdata" style="width: 100%;margin: 10px 0" border>
-      <template v-for='(col) in config.tablecolumn'>
-        <el-table-column :show-overflow-tooltip="true" :prop="col.item" :label="col.name" :key="col.item"/>
-      </template>
-    </el-table>
-      </template>
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-  </div>
-</template>
-
-<script>
-  import {getListSee} from "@/api/basicSetup/parameters";
-  export default {
-    data() {
-      return {
-        // 缃╁眰閬�
-        loading: true,
-        // 閫変腑鏁扮粍
-        ids: [],
-        // 鎬绘潯鏁�
-        total: 0,
-        // parameters琛ㄦ牸鏁版嵁
-        parametersList: [],
-        categoryList: [],
-        // 鏁版嵁灞曠ず绫诲瀷锛�1-瀹炴椂鏁版嵁锛�2-闃舵鏁版嵁瀛楀吀
-        dataTypeOptions: [],
-        // 鏄惁鏄剧ず鎶ヨ瀛楀吀
-        showAlarmOptions: [],
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          name: undefined,
-          code: undefined,
-          categoryName: undefined,
-          categoryCode: undefined,
-          dataType: undefined,
-          showAlarm: undefined,
-          categoryId: undefined
-        },
-        currentNode:"",
-        titleName:"",
-        titleId:""
-      };
-    },
-    created() {
-      this.modelCode=this.$route.query.modelCode;
-      //this.getList();
-      this.getDicts("data_type").then(response => {
-        this.dataTypeOptions = response.data;
-      });
-      this.getDicts("${column.dictType}").then(response => {
-        this.showAlarmOptions = response.data;
-      });
-    },
-    methods: {
-      /** 鏌ヨparameters鍒楄〃 */
-      getList(node) {
-        this.titleName = node.label;
-        this.titleId = node.id;
-        this.currentNode=node;
-        this.loading = true;
-        getListSee(this.titleId).then(response => {
-          /*this.parametersList = JSON.parse(response.data.tableList);*/
-          this.parametersList=response.data;
-          console.log(this.parametersList);
-          /*this.total = response.total;*/
-          this.loading = false;
-        });
-      },
-      // 鏁版嵁灞曠ず绫诲瀷锛�1-瀹炴椂鏁版嵁锛�2-闃舵鏁版嵁瀛楀吀缈昏瘧
-      dataTypeFormat(row, column) {
-        return this.selectDictLabel(this.dataTypeOptions, row.dataType);
-      },
-      // 鏄惁鏄剧ず鎶ヨ瀛楀吀缈昏瘧
-      showAlarmFormat(row, column) {
-        return this.selectDictLabel(this.showAlarmOptions, row.showAlarm);
-      },
-
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/basicSetup/parameters/standard_statistic.vue b/energy_management_ui/src/views/basicSetup/parameters/standard_statistic.vue
deleted file mode 100644
index 8380f78..0000000
--- a/energy_management_ui/src/views/basicSetup/parameters/standard_statistic.vue
+++ /dev/null
@@ -1,156 +0,0 @@
-
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" style="width: 260px">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            鎸囨爣搴�
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode"
-                     modelCode="statistic_index_model"
-                     :showOpt="false" :auth="false"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <el-main style="padding:8px">
-          <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px"
-                   class="query-form">
-            <el-form-item label="" prop="indexCategory">
-              <el-select v-model="queryParams.indexCategory" placeholder="璇烽�夋嫨鎸囨爣鍒嗙被" clearable
-                         style="width:160px"
-                         size="small"
-                         @change="handleQuery">
-                <el-option
-                  v-for="dict in indexCategoryOptions"
-                  :key="dict.dictValue"
-                  :label="dict.dictLabel"
-                  :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-            <el-form-item label="" prop="name">
-              <el-input
-                v-model="queryParams.name"
-                placeholder="璇疯緭鍏ユ寚鏍囧悕绉�/缂栫爜"
-                clearable
-                size="small"
-                @input="handleQuery"
-                @clear="handleQuery"
-                style="width:190px"
-              />
-            </el-form-item>
-          </el-form>
-
-          <el-table v-loading="loading" :data="energyindexList" border @current-change="handleCurrentChange" highlight-current-row ref="energySettingTable">
-            <el-table-column label="鎸囨爣缂栫爜" align="center" prop="code"/>
-            <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="name"/>
-            <el-table-column label="鍗曚綅" align="center" prop="unitId" :formatter="unitIdFormat"/>
-          </el-table>
-
-          <pagination
-            v-show="total>0"
-            :total="total"
-            :page.sync="queryParams.pageNum"
-            :limit.sync="queryParams.pageSize"
-            @pagination="getList"
-          />
-
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import {listEnergyindex} from "@/api/basicsetting/energyindex";
-  import ModelNode from "../../basicsetting/modelNode/modelNode";
-
-  export default {
-    name: "StatisticIndexSetting",
-    components: {ModelNode},
-    props: ["indexType"],
-    data() {
-      return {
-        // 鎬绘潯鏁�
-        total: 0,
-        // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-        energyindexList: [],
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          name: undefined,
-          code: undefined,
-          indexCategory: undefined,
-          nodeId: undefined,
-          indexType: ''
-        },
-        indexCategoryOptions: [],
-        unitIdOptions: [],
-        currentNode: undefined,
-        loading: false,
-        selectedStatisticIndex: []
-      }
-    },
-    created() {
-      this.getDicts("sys_index_category").then(response => {
-        this.indexCategoryOptions = response.data;
-      });
-      this.getDicts("sys_unit").then(response => {
-        this.unitIdOptions = response.data;
-      });
-    },
-    methods: {
-      init(modelNode, currentSelected) {
-        this.selectedStatisticIndex = currentSelected;
-      },
-      changeNode: function (modelNode) {
-        this.getList(modelNode);
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.getList(this.currentNode);
-      },
-      /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-      getList(modelNode) {
-        this.currentNode = modelNode;
-        if (modelNode) {
-          this.loading = true;
-          this.queryParams.nodeId = modelNode.id;
-          this.queryParams.indexType = this.$props.indexType;
-          listEnergyindex(this.queryParams).then(response => {
-            this.energyindexList = response.rows;
-            this.total = response.total;
-            this.loading = false;
-            this.$nextTick(function () {
-              this.$refs.energySettingTable.data.forEach(rowData => {
-                let exist = this.selectedStatisticIndex.filter(
-                  f => f.indexId === rowData.indexId).length;
-                if (exist > 0) {
-                  this.$refs.energySettingTable.toggleRowSelection(rowData, true);
-                }
-              });
-            });
-          });
-        } else {
-          this.energyindexList = [];
-        }
-      },
-      // 鍗曚綅瀛楀吀缈昏瘧
-      unitIdFormat(row, column) {
-        return this.selectDictLabel(this.unitIdOptions, row.unitId);
-      },
-      handleCurrentChange(val) {
-        this.currentRow = val;
-        this.$emit('statisticIndexConfirmSelect', this.currentRow);
-      }
-    }
-  }
-</script>
-
-<style scoped>
-
-</style>
-
diff --git a/energy_management_ui/src/views/basicsetting/dataAuthSetting/dataAuthModelNode.vue b/energy_management_ui/src/views/basicsetting/dataAuthSetting/dataAuthModelNode.vue
deleted file mode 100644
index 9115b01..0000000
--- a/energy_management_ui/src/views/basicsetting/dataAuthSetting/dataAuthModelNode.vue
+++ /dev/null
@@ -1,214 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <span>{{ selectedName }} 鏉冮檺閰嶇疆锛岄�夋嫨妯″瀷锛�</span>
-      <el-select v-model="modelData" placeholder="璇烽�夋嫨妯″瀷"
-                 style="width:220px"
-                 size="small"
-                 @change="changeModel">
-        <el-option
-            v-for="model in modelInfoOptions"
-            :key="model.modelCode"
-            :label="model.modelName"
-            :value="model.modelCode"
-        />
-      </el-select>
-      <el-button type="primary" class="fr" @click="saveSetting">淇濆瓨鏉冮檺</el-button>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-input
-          placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�"
-          prefix-icon="el-icon-search"
-          v-model="filterText">
-      </el-input>
-      <el-tree
-          class="modelnode-tree"
-          node-key="id"
-          highlight-current
-          empty-text="娌℃湁鏌ヨ鍒版暟鎹�"
-          show-checkbox
-          :data="modelNodeData"
-          :filter-node-method="filterNode"
-          :default-expanded-keys="treeExpandData"
-          :expand-on-click-node="false"
-          :check-strictly="strictly"
-          @check-change="checkChange"
-          ref="dataAuthTree">
-         <span class="custom-tree-node" slot-scope="{ node, data }">
-              <el-tooltip class="item" effect="dark" :content="node.label" placement="top-end">
-                 <span>{{ node.label.length > 4 ? node.label.slice(0, 4) + '...' : node.label }}</span>
-                  <span class="tree-text-node-common">{{ node.label }}</span>
-              </el-tooltip>
-        <span class="node-opt" v-if="data.children && data.children.length>0">
-          <el-button
-              type="text"
-              size="mini"
-              @click="() => checkAllChildren(data)">
-            鍏ㄩ��
-          </el-button>
-          <el-button
-              type="text"
-              size="mini"
-              @click="() => uncheckAllChildren(data)">
-            鍙栨秷鍏ㄩ��
-          </el-button>
-        </span>
-      </span>
-      </el-tree>
-    </basic-container>
-  </div>
-</template>
-
-<script>
-import {listModel} from "../../../api/basicsetting/model";
-import {modelNodeTree} from "../../../api/basicsetting/modelNode";
-import {selectSettingAuth, setDataAuth} from "../../../api/dataAuth/authSetting";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: "dataAuthModelNode",
-  mixins: [mixins],
-  watch: {
-    filterText(val) {
-      this.$refs.modelNodeTree.filter(val);
-    }
-  },
-  created() {
-    listModel({isShow: 1}).then(response => {
-      this.modelInfoOptions = response.data;
-      if (this.modelInfoOptions.length > 0) {
-        this.modelData = this.modelInfoOptions[0].modelCode;
-        this.changeModel(this.modelData);
-      }
-    });
-  },
-  data() {
-    return {
-      modelData: null,
-      modelInfoOptions: [],
-      modelNodeData: [],
-      treeExpandData: [],
-      filterText: null,
-      userOrRoleId: null,
-      authType: 'user',
-      settingAuthIds: [],
-      selectedName: '',
-      currentModelCode: '',
-      strictly: true,
-      currentCheckedIds: []
-    }
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 205 + 'px';
-    },
-    changeModel(modelCode) {
-      this.loading = true;
-      this.currentModelCode = modelCode;
-      modelNodeTree({modelCode: modelCode}).then(response => {
-        this.modelNodeData = response.data;
-        this.loading = false;
-        if (this.modelNodeData.length > 0) {
-          this.treeExpandData.push(this.modelNodeData[0].id);
-        }
-        this.$nextTick(() => {
-          if (this.modelNodeData.length > 0) {
-            this.$refs.dataAuthTree.setCurrentKey(this.modelNodeData[0].id);
-          }
-        })
-      });
-
-      this.getAuthSetting();
-    },
-    changeSelected(id, name, authType) {
-      this.userOrRoleId = id;
-      this.selectedName = name;
-      this.authType = authType;
-      this.getAuthSetting();
-    },
-    filterNode(value, data) {
-      if (!value) {
-        return true;
-      }
-      return data.label.indexOf(value) !== -1;
-    },
-    getAuthSetting() {
-      if (this.userOrRoleId) {
-        selectSettingAuth(this.userOrRoleId, this.currentModelCode, this.authType)
-            .then(response => {
-              if (response.code === 200) {
-                this.currentCheckedIds = response.data;
-                this.$refs.dataAuthTree.setCheckedKeys(this.currentCheckedIds);
-              }
-            });
-      } else {
-        this.currentCheckedIds = []
-        this.$refs.dataAuthTree.setCheckedKeys([]);
-      }
-    },
-    saveSetting() {
-      if (!this.userOrRoleId) {
-        debugger
-        this.$message.warning("璇烽�夋嫨" + (this.authType === 'user' ? '鐢ㄦ埛' : '瑙掕壊'))
-        return;
-      }
-
-      let checkedNodes = this.$refs.dataAuthTree.getCheckedNodes(false, true);
-      let ids = checkedNodes.map(node => node.id);
-      setDataAuth(this.userOrRoleId, this.currentModelCode, this.authType, ids)
-          .then(response => {
-            if (response.code === 200) {
-              this.$message.success("璁剧疆鎴愬姛锛�");
-            } else {
-              this.$message.error("璁剧疆澶辫触锛�")
-            }
-          });
-    },
-    getAllChildren(node) {
-      const childNodes = node.root ? node.root.children : node.children;
-      if (childNodes && childNodes.length > 0) {
-        childNodes.forEach(child => {
-          if (this.currentCheckedIds.indexOf(child.id) < 0) {
-            this.currentCheckedIds.push(child.id);
-          }
-          if (child.children && child.children.length > 0) {
-            this.getAllChildren(child);
-          }
-        });
-      }
-    },
-    removeChildren(node) {
-      const childNodes = node.root ? node.root.children : node.children;
-      if (childNodes && childNodes.length > 0) {
-        childNodes.forEach(child => {
-          this.currentCheckedIds.splice(this.currentCheckedIds.indexOf(child.id), 1);
-          if (child.children && child.children.length > 0) {
-            this.removeChildren(child);
-          }
-        });
-      }
-    },
-    checkAllChildren(node) {
-      if (this.currentCheckedIds.indexOf(node.id) < 0) {
-        this.currentCheckedIds.push(node.id);
-      }
-      this.getAllChildren(node);
-      this.$refs.dataAuthTree.setCheckedKeys(this.currentCheckedIds);
-    },
-    uncheckAllChildren(node) {
-      this.currentCheckedIds.splice(this.currentCheckedIds.indexOf(node.id), 1);
-      this.removeChildren(node);
-      this.$refs.dataAuthTree.setCheckedKeys(this.currentCheckedIds);
-    },
-    checkChange(node, currentState) {
-      if (currentState) {
-        if (this.currentCheckedIds.indexOf(node.id) < 0) {
-          this.currentCheckedIds.push(node.id);
-        }
-      } else {
-        this.currentCheckedIds.splice(this.currentCheckedIds.indexOf(node.id), 1);
-      }
-    }
-  }
-}
-</script>
diff --git a/energy_management_ui/src/views/basicsetting/dataAuthSetting/index.vue b/energy_management_ui/src/views/basicsetting/dataAuthSetting/index.vue
deleted file mode 100644
index 4566256..0000000
--- a/energy_management_ui/src/views/basicsetting/dataAuthSetting/index.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-<template>
-  <el-row type="flex">
-    <el-col class="page-left">
-      <div>
-        <basic-container>
-          <el-select v-model="authType" placeholder="璇烽�夋嫨"
-                     style="width:300px"
-                     size="small"
-                     @change="changeSettingType">
-            <el-option key="user" label="鐢ㄦ埛鏉冮檺璁剧疆" value="user"/>
-            <el-option key="role" label="瑙掕壊鏉冮檺璁剧疆" value="role"/>
-          </el-select>
-        </basic-container>
-      </div>
-      <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-        <user-select ref="userDataSelect" v-if="authType === 'user'"
-                     @changeSelected="changeSelected"></user-select>
-        <role-select ref="roleDataSelect" v-if="authType === 'role'"
-                     @changeSelected="changeSelected"></role-select>
-      </basic-container>
-    </el-col>
-    <el-col class="page-right">
-      <data-auth-model-node ref="dataAuthModelNode"/>
-    </el-col>
-  </el-row>
-</template>
-
-<script>
-import UserSelect from "./userSelect";
-import RoleSelect from "./roleSelect";
-import DataAuthModelNode from "./dataAuthModelNode";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  mixins: [mixins],
-  name: "dataAuthSetting",
-  components: {DataAuthModelNode, RoleSelect, UserSelect},
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 205 + 'px';
-    },
-    changeSettingType() {
-      this.$refs.dataAuthModelNode.changeSelected('', '', this.authType);
-    },
-    changeSelected(id, name) {
-      this.$refs.dataAuthModelNode.changeSelected(id, name, this.authType);
-    }
-  },
-  data() {
-    return {
-      authType: 'user'
-    }
-  }
-}
-</script>
-
-<style scoped lang="scss">
-.page-left {
-  width: 45%;
-}
-
-.page-right {
-  width: 55%;
-  padding-left: 14px;
-}
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/dataAuthSetting/roleSelect.vue b/energy_management_ui/src/views/basicsetting/dataAuthSetting/roleSelect.vue
deleted file mode 100644
index 46edc5a..0000000
--- a/energy_management_ui/src/views/basicsetting/dataAuthSetting/roleSelect.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-<template>
-  <div>
-    <el-table v-loading="loading" :data="roleList" border
-              :highlight-current-row="true"
-              :height="height"
-              ref="roleDataTable"
-              @row-click="handleRowClick"
-    >
-      <el-table-column label="瑙掕壊鍚嶇О" prop="roleName" :show-overflow-tooltip="true"/>
-      <el-table-column label="鏉冮檺瀛楃" prop="roleKey" :show-overflow-tooltip="true"/>
-    </el-table>
-
-    <pagination
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-    />
-  </div>
-</template>
-
-<script>
-import {listRole} from "../../../api/system/role";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: "roleSelect",
-  mixins: [mixins],
-  created() {
-    this.getList();
-  },
-  methods: {
-    setCharts() {
-      this.height = window.innerHeight - 405 + 'px';
-    },
-    getList() {
-      this.loading = true;
-      listRole(this.queryParams).then(response => {
-            this.roleList = response.rows;
-            this.total = response.total;
-            this.loading = false;
-          }
-      );
-    },
-    handleRowClick(row, column, event) {
-      this.$emit("changeSelected", row.roleId, row.roleName);
-    },
-  },
-  data() {
-    return {
-      roleList: null,
-      total: 0,
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10
-      },
-      loading: false,
-      ids: [],
-      height: null
-    }
-  }
-}
-</script>
-
-<style scoped>
-
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/dataAuthSetting/userSelect.vue b/energy_management_ui/src/views/basicsetting/dataAuthSetting/userSelect.vue
deleted file mode 100644
index 915bd8b..0000000
--- a/energy_management_ui/src/views/basicsetting/dataAuthSetting/userSelect.vue
+++ /dev/null
@@ -1,69 +0,0 @@
-<template>
-  <div>
-    <el-table v-loading="loading" :data="userList" border
-              :highlight-current-row="true"
-              ref="userDataTable"
-              :height="height"
-              @row-click="handleRowClick"
-    >
-      <el-table-column label="鐢ㄦ埛鍚嶇О" align="center" prop="userName" :show-overflow-tooltip="true"/>
-      <el-table-column label="鐢ㄦ埛鏄电О" align="center" prop="nickName" :show-overflow-tooltip="true"/>
-      <el-table-column label="閮ㄩ棬" align="center" prop="dept.deptName"
-                       :show-overflow-tooltip="true"/>
-    </el-table>
-
-    <pagination
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-    />
-  </div>
-</template>
-
-<script>
-import {listUser} from "../../../api/system/user";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: "userSelect",
-  mixins: [mixins],
-  created() {
-    this.getList();
-  },
-  methods: {
-    setCharts() {
-      this.height = window.innerHeight - 405 + 'px';
-    },
-    getList() {
-      this.loading = true;
-      listUser(this.queryParams).then(response => {
-            this.userList = response.rows;
-            this.total = response.total;
-            this.loading = false;
-          }
-      );
-    },
-    handleRowClick(row, column, event) {
-      this.$emit("changeSelected", row.userId, row.userName);
-    },
-  },
-  data() {
-    return {
-      userList: null,
-      total: 0,
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10
-      },
-      loading: false,
-      ids: [],
-      height: null
-    }
-  }
-}
-</script>
-
-<style scoped>
-
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/device/deviceStorage.vue b/energy_management_ui/src/views/basicsetting/device/deviceStorage.vue
deleted file mode 100644
index b9f5fd8..0000000
--- a/energy_management_ui/src/views/basicsetting/device/deviceStorage.vue
+++ /dev/null
@@ -1,194 +0,0 @@
-<template>
-  <div class="app-container" style="padding-top: 0">
-    <el-form label-position="top" label-width="110px" :model="deviceFormlaData">
-      <el-form-item style="margin-bottom: 0">
-        <el-button size="mini" @click="saveDeviceStorage" class="fr" type="primary">淇濆瓨鏁版嵁瀛樺偍
-        </el-button>
-      </el-form-item>
-      <el-form-item>
-        <div slot="label">鎸囨爣璁$畻鍏紡&nbsp;&nbsp;&nbsp;&nbsp;
-          <el-button size="mini" @click="selectCalcFunction">閫夋嫨璁$畻鍑芥暟</el-button>
-        </div>
-        <el-input type="textarea" rows="3" v-model="deviceFormlaData.deviceFormula.formulaText"
-                  id="formulaText"
-                  @blur="parseFormula"></el-input>
-      </el-form-item>
-      <el-form-item>
-        <el-table :data="deviceFormlaData.deviceFormula.deviceFormulaParams" style="width: 100%"
-                  border>
-          <el-table-column label="鍙傛暟鍚�" prop="paramName" width="200"></el-table-column>
-          <el-table-column label="鍙傛暟鍊�" prop="paramValue">
-            <template slot-scope="scope">
-              <el-autocomplete popper-class="my-autocomplete"
-                               v-model="scope.row['paramValue']"
-                               :fetch-suggestions="querySearch"
-                               placeholder="璇疯緭鍏ユ寚鏍囩紪鐮�">
-                <template slot-scope="{ item }">
-                  <div class="name">{{ item.value }}</div>
-                  <span class="addr">{{ item.name }}</span>
-                </template>
-              </el-autocomplete>
-            </template>
-          </el-table-column>
-        </el-table>
-      </el-form-item>
-    </el-form>
-    <el-drawer title="閫夋嫨璁$畻鍑芥暟" :visible.sync="calcFunctionShow" direction="rtl"
-               @open="showCalcFunctionDialog"
-               size="35%">
-      <CalcFunction ref="calcFunction" :showOpt="false"
-                    @confirmCalcFunction="confirmCalcFunction"></CalcFunction>
-    </el-drawer>
-  </div>
-</template>
-<style type="text/css">
-  .el-autocomplete {
-    width: 100%;
-  }
-
-  .my-autocomplete li {
-    line-height: normal;
-    padding: 7px;
-  }
-
-  .my-autocomplete li .name {
-    text-overflow: ellipsis;
-    overflow: hidden;
-  }
-
-  .my-autocomplete li .addr {
-    font-size: 12px;
-    color: #b4b4b4;
-  }
-
-  .my-autocomplete li .highlighted .addr {
-    color: #ddd;
-  }
-</style>
-<script>
-  import CalcFunction from "../function/index";
-  import {
-    getNodeIndex,//杩欎釜鏄幏鍙栧綋鍓嶆ā鍨嬭妭鐐逛笅鐨勬墍鏈夐噰闆嗙偣鎴栨寚鏍�
-    parseFormula,//杩欎釜鏄绠楀叕寮忚В鏋愭柟娉�
-  } from "@/api/basicsetting/indexStorage";
-  import {
-    getDeviceStorage,//杩欎釜鏄幏鍙栧綋鍓� 妯″瀷鑺傜偣涓�   鎸囧畾鐘舵�佷笅鐨�   璁惧鐘舵�佸叕寮忛厤缃俊鎭�
-    saveDeviceStorage,//杩欎釜鏄繚瀛橀厤缃柟娉曪紝浼氭浛鎹㈡帀
-  } from "@/api/basicsetting/deviceStorage";
-  const  deviceCbk=undefined;
-  export default {
-    name: "IndexStorage",
-    props: ["nodeId"],
-    components: {CalcFunction},
-    data() {
-      return {
-        deviceFormlaData: undefined,
-        calcFunctionShow: false,
-        nodeIndex: [],
-        stateId: ''
-      }
-    },
-    created() {
-      this.initData();
-    },
-    methods: {
-      initData() {
-        this.deviceFormlaData = {
-          deviceFormula: {
-            id: '',
-            deviceId: '',
-            stateId: '',
-            formulaText: '',
-            calcText: '',
-            deviceFormulaParams: [],
-          }
-        }
-      },
-      showCalcFunctionDialog() {
-      },
-      selectCalcFunction() {
-        this.calcFunctionShow = true;
-      },
-      confirmCalcFunction(funcText) {
-        this.calcFunctionShow = false;
-        const elInput = document.getElementById('formulaText'); //鏍规嵁id閫夋嫨鍣ㄩ�変腑瀵硅薄
-        const startPos = elInput.selectionStart;// input 绗�0涓瓧绗﹀埌閫変腑鐨勫瓧绗�
-        const endPos = elInput.selectionEnd;// 閫変腑鐨勫瓧绗﹀埌鏈�鍚庣殑瀛楃
-        if (startPos === undefined || endPos === undefined) {
-          return;
-        }
-        const txt = elInput.value;
-        // 灏嗚〃鎯呮坊鍔犲埌閫変腑鐨勫厜鏍囦綅缃�
-        const result = txt.substring(0, startPos) + funcText + txt.substring(endPos);
-        elInput.value = result;// 璧嬪�肩粰input鐨剉alue
-        // 閲嶆柊瀹氫箟鍏夋爣浣嶇疆
-        elInput.focus();
-        elInput.selectionStart = startPos + funcText.length;
-        elInput.selectionEnd = startPos + funcText.length;
-        this.deviceFormlaData.deviceFormula.formulaText = result;
-      },
-      parseFormula() {
-        parseFormula({"calcText": this.deviceFormlaData.deviceFormula.formulaText}).then(
-          response => {
-            let newParamData = response.data;
-            let paramData = this.deviceFormlaData.deviceFormula.deviceFormulaParams.filter(f => {
-              let exist = newParamData.find(param => param === f.paramName);
-              return exist && exist.length > 0;
-            });
-
-            newParamData.forEach(item => {
-              let exist = paramData.find(param => param.paramName === item);
-              if (!exist || exist.length === 0) {
-                paramData.push({
-                  "paramName": item,
-                  "paramValue": ''
-                })
-              }
-            });
-
-            this.deviceFormlaData.deviceFormula.deviceFormulaParams = paramData;
-          });
-      },
-      querySearch(queryString, cb) {
-        let nodeIndex = this.nodeIndex;
-        let results = queryString ? nodeIndex.filter((index) => {
-          return index.code.toLowerCase().indexOf(queryString.toLowerCase()) === 0 ||
-            index.name.toLowerCase().indexOf(queryString.toLowerCase()) === 0
-        }) : nodeIndex;
-        // 璋冪敤 callback 杩斿洖寤鸿鍒楄〃鐨勬暟鎹�
-        let values = [];
-        results.forEach(item => {
-          values.push({
-            value: item.code,
-            name: item.name
-          })
-        });
-        cb(values);
-      },
-      saveDeviceStorage() {
-        saveDeviceStorage(this.nodeId, this.stateId,this.deviceFormlaData).then((response) => {
-          if (response.code === 200) {
-            this.$message.success("鏁版嵁瀛樺偍鎴愬姛锛�");
-            getDeviceStorage(this.nodeId,this.stateId).then(response => this.deviceFormlaData = response.data);
-            this.deviceCbk();
-          } else {
-            this.$message.error("鏁版嵁瀛樺偍澶辫触锛�");
-          }
-        });
-      },
-      getIndexStorage(stateId,cbk) {
-        this.deviceCbk = cbk;
-        this.initData();
-        this.stateId = stateId;
-        getNodeIndex(this.nodeId).then((response) => {
-          this.nodeIndex = response.data;
-        });
-        getDeviceStorage(this.nodeId,stateId).then(response => this.deviceFormlaData = response.data);
-      }
-    }
-  }
-</script>
-
-<style scoped>
-
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/device/deviceTabSetting.vue b/energy_management_ui/src/views/basicsetting/device/deviceTabSetting.vue
deleted file mode 100644
index f85adac..0000000
--- a/energy_management_ui/src/views/basicsetting/device/deviceTabSetting.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-card class="box-card">
-      <div slot="header" class="clearfix">
-        <span>{{currentNode?currentNode.label+'--鑺傜偣閰嶇疆':'鑺傜偣閰嶇疆'}}</span>
-      </div>
-
-      <el-tabs>
-        <el-tab-pane :disabled="disabledSetting">
-          <span slot="label"><i class="el-icon-setting"></i> 鐘舵�佺鐞�</span>
-          <devicestartstop ref="devicestartstop"></devicestartstop>
-        </el-tab-pane>
-<!--        <el-tab-pane :disabled="disabledSetting">-->
-<!--          <span slot="label"><i class="el-icon-setting"></i> 缁熻鎸囨爣绠$悊</span>-->
-<!--          <zbIndex ref="zbIndex"></zbIndex>-->
-<!--        </el-tab-pane>-->
-      </el-tabs>
-    </el-card>
-  </div>
-</template>
-
-<script>
-  import {
-    getModelNode,
-  } from '@/api/basicsetting/modelNode'
-  import devicestartstop from "./devicestartstop";
-  export default {
-    name: "modelTabSetting",
-    components:{devicestartstop},
-    data() {
-      return {
-        currentNode: '',
-        deviceDialog: false,
-        energyDialog: false,
-        productDialog: false,
-        collectIndexDialog: false,
-        indexLoading: false,
-        deviceLoading: false,
-        energyLoading: false,
-        productLoading: false,
-        settingEnergyList: [],
-        settingDeviceList: [],
-        settingProductList: [],
-        settingIndexList: [],
-        disabledSetting: true
-      }
-    },
-    methods: {
-      modelNodeChange(modelNode) {
-        this.settingDeviceList = [];
-        this.settingIndexList = [];
-        this.disabledSetting = modelNode === undefined || modelNode === '' || modelNode === null;
-        if (modelNode) {
-          this.currentNode = modelNode;
-          getModelNode(modelNode.id).then((response) => {
-            if (response.code === 200) {
-              this.$refs.devicestartstop.setModelNode(response.data);
-            } else {
-              this.$message.error(response.msg);
-            }
-          });
-        }
-      }
-    }
-  }
-</script>
-
-<style scoped>
-
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/device/devicestartstop.vue b/energy_management_ui/src/views/basicsetting/device/devicestartstop.vue
deleted file mode 100644
index c287200..0000000
--- a/energy_management_ui/src/views/basicsetting/device/devicestartstop.vue
+++ /dev/null
@@ -1,191 +0,0 @@
-<template>
-  <div class="app-container item-style" style="padding:0">
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          size="mini"
-          :disabled="multiple"
-          @click='updateStateBtn("Y")'
-          v-hasPermi="['system:alarmitem:edit']"
-        >鍚敤
-        </el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          size="mini"
-          :disabled="multiple"
-          @click='updateStateBtn("P")'
-          v-hasPermi="['energyindex:energyindex:remove']"
-        >鍋滄
-        </el-button>
-      </el-col>
-    </el-row>
-
-    <!--琛ㄦ牸-->
-      <el-table v-loading="loading" :data="stateTable.stateTypeList" border @selection-change="handleSelectionChange" :default-sort = "{prop: 'date', order: 'descending'}">
-        <el-table-column type="selection" width="55" align="center"/>
-        <el-table-column label="璁惧鐘舵��" align="center" prop="stateType.stateName"/>
-        <el-table-column label="鐘舵�佺紪鐮�" align="center" prop="stateType.stateCode"/>
-        <el-table-column label="鑹插彿" align="center" prop="stateType.colorNumber"  >
-          <template slot-scope="scope">
-            <el-tag :color="scope.row.stateType.colorNumber"  disable-transitions></el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column label="鍚仠鐘舵��" align="center" prop="isEnable" class-name="small-padding fixed-width" :formatter="isEnableFormat">
-        </el-table-column>
-        <el-table-column label="鎿嶄綔" width="150" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="stateSet(scope.row)"
-              v-hasPermi="['basicsetting:template:edit']"
-            >閰嶇疆
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <el-drawer title="閰嶇疆璁惧鐘舵��" :visible.sync="deviceStorageShow" direction="rtl"
-               @open="showIndexStorageDialog"
-               size="45%"
-               :wrapperClosable="false">
-      <DeviceStorage ref="deviceStorage"
-                    :nodeId="currentNode===undefined?'':currentNode.nodeId"></DeviceStorage>
-    </el-drawer>
-  </div>
-</template>
-
-<script>
-  import {getDeviceStateByNodeIds,setIsEnable} from "@/api/basicsetting/deviceStorage"
-  import DeviceStorage from "./deviceStorage";
-  export default {
-    name: 'EnergyIndex',
-    components: {DeviceStorage},
-    data() {
-      return {
-        // 閬僵灞�
-        loading: false,
-        // 閫変腑鏁扮粍
-        ids: [],
-        names: [],
-        isEnables: [],
-        // 闈炲崟涓鐢�
-        single: true,
-        // 闈炲涓鐢�
-        multiple: true,
-        // 鎬绘潯鏁�
-        total: 0,
-        stateTable:{
-          // 璁惧鐘舵�佹暟鎹�
-          stateTypeList: [],
-          rules: {
-          },
-        },
-        //涓昏〃閫変腑鐨勫惎鍋滅姸鎬佹暟缁�
-        isEnableOptions:[],
-        // 寮瑰嚭灞傛爣棰�
-        title: "",
-        // 鏄惁鏄剧ず寮瑰嚭灞�
-        open: false,
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          deviceId:undefined,
-        },
-        currentNode: undefined,
-        indexCategoryDefaultVal: undefined,
-        unitDefaultVal: undefined,
-        myModelNode: undefined,
-        deviceStorageShow:false
-      };
-    },
-    created() {
-      this.getDicts("sys_is_enable").then(response => {
-        this.isEnableOptions = response.data;
-      });
-    },
-    methods: {
-      /** 鎺ユ敹妯″瀷鏍戠殑鍙傛暟  鑺傜偣锛岃妭鐐圭被鍨� */
-      setModelNode(modelNode)
-      {
-        this.myModelNode=modelNode;
-        this.currentNode = modelNode;
-        this.getList();
-      },
-      /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-      getList() {
-        //鑺傜偣鏈夋晥涓旀槸
-        let   device_category=this.$route.query.device_category;
-        if (this.myModelNode && this.myModelNode.nodeCategory==device_category) {
-          this.loading = true;
-          this.queryParams.deviceId = this.myModelNode.nodeId;
-          //鍒濆鍖栬澶囩殑鐘舵�佸垪琛�
-          getDeviceStateByNodeIds(this.queryParams).then(response => {
-            this.stateTable.stateTypeList = response.rows;
-            this.loading = false;
-          });
-        } else {
-          this.stateTable.stateTypeList = [];
-        }
-      },
-      // 鏄惁鍚敤璁剧疆鐘舵�� 瀛楀吀缈昏瘧
-      isEnableFormat(row, column) {
-        return this.selectDictLabel(this.isEnableOptions, row.isEnable);
-      },
-      // 澶氶�夋閫変腑鏁版嵁
-      handleSelectionChange(selection) {
-        this.ids = selection.map(item => item.stateType.stateId);
-        this.names = selection.map(item => item.stateType.stateName);
-        this.isEnables = selection.map(item => item.isEnable);
-        this.multiple = !selection.length
-      },
-      updateStateBtn(isEnable){
-        let nDevice = this.names.filter((item,index)=>{return this.isEnables[index]=='N'});
-        if(nDevice!=null&&nDevice!="")
-        {
-          this.$confirm('銆�'+nDevice+'銆戞湭閰嶇疆鍏紡锛屼笉鑳借繘琛屾搷浣滐紒', "璀﹀憡", {
-            confirmButtonText: "纭畾",
-            type: "warning"
-          }).catch(function() {});
-        }else {//鏇存柊璁惧鐘舵�佺殑鍚仠璁剧疆
-          setIsEnable(this.myModelNode.nodeId,isEnable,this.ids).then(response => {
-            if (response.code === 200) {
-              this.getList();
-              this.multiple = false;
-              this.msgSuccess("鎴愬姛");
-            } else {
-              this.msgError(response.msg);
-            }
-          });
-        }
-      },
-      //璁惧鐘舵�佺殑璁$畻鍏紡閰嶇疆灞曞紑
-      stateSet(row){
-        this.deviceStorageShow = true;
-        this.$nextTick(() => {
-          //璁惧鐘舵�侀〉闈㈡暟鎹垵濮嬪寲 浼犲叆鐘舵�両D
-          this.$refs.deviceStorage.getIndexStorage(row.stateType.stateId,this.getList);
-        })
-      },
-      showIndexStorageDialog() {
-      },
-    }
-  };
-</script>
-<style>
-  .item-style .el-form-item__content{
-    margin-left: 0px!important;
-  }
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/device/index.vue b/energy_management_ui/src/views/basicsetting/device/index.vue
deleted file mode 100644
index ec93763..0000000
--- a/energy_management_ui/src/views/basicsetting/device/index.vue
+++ /dev/null
@@ -1,82 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-containercard title="璁惧鍚仠绠$悊" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :modelCode="modelCode"
-            :showOpt="false"
-          ></ModelNode>
-        </basic-containercard>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <basic-container class="search-wrapper" :style="bodyStyleRight">
-          <deviceTabSetting ref="deviceTabSetting"></deviceTabSetting>
-        </basic-container>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import deviceTabSetting from "./deviceTabSetting";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import ShrinkCol from "@/components/shrink/index.vue";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  components: { deviceTabSetting, ModelNode, ShrinkCol },
-  mixins: [mixins],
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  data() {
-    return {
-      bodyStyleRight: {},
-      modelData: "",
-      modelInfoOptions: [],
-      modelCode: undefined,
-      isCollapse: false
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 155 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 105 + "px"
-      };
-    },
-    changeNode: function(node) {
-      this.$refs.deviceTabSetting.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/basicsetting/energyIndex/energyIndex.vue b/energy_management_ui/src/views/basicsetting/energyIndex/energyIndex.vue
deleted file mode 100644
index fe5ab27..0000000
--- a/energy_management_ui/src/views/basicsetting/energyIndex/energyIndex.vue
+++ /dev/null
@@ -1,630 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0 0 30px 0">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="0"
-      class="query-form"
-    >
-      <el-row :gutter="24">
-        <el-col :span="5">
-          <el-form-item>
-            <el-select
-              v-model="queryParams.indexCategory"
-              placeholder="璇烽�夋嫨鎸囨爣鍒嗙被"
-              clearable
-              size="small"
-              @change="handleQuery"
-            >
-              <el-option
-                v-for="dict in indexCategoryOptions"
-                :key="dict.dictValue"
-                :label="dict.dictLabel"
-                :value="dict.dictValue"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="5">
-          <el-form-item>
-            <el-input
-              v-model="queryParams.name"
-              placeholder="璇疯緭鍏ユ寚鏍囧悕绉�/缂栫爜"
-              clearable
-              size="small"
-              @input="handleQuery"
-              @clear="handleQuery"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="14">
-          <el-form-item class="fr">
-            <el-button
-              type="primary"
-              icon="el-icon-plus"
-              size="mini"
-              @click="handleAdd"
-              v-hasPermi="['energyindex:energyindex:add']"
-              >鏂板
-            </el-button>
-            <el-button
-              type="success"
-              icon="el-icon-edit"
-              size="mini"
-              :disabled="single"
-              @click="handleUpdate"
-              v-hasPermi="['energyindex:energyindex:edit']"
-              >淇敼
-            </el-button>
-            <el-button
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              :disabled="multiple"
-              @click="handleDelete"
-              v-hasPermi="['energyindex:energyindex:remove']"
-              >鍒犻櫎
-            </el-button>
-            <el-button
-              type="info"
-              icon="el-icon-upload2"
-              size="mini"
-              @click="handleImport"
-              >瀵煎叆
-            </el-button>
-            <el-button
-              type="text"
-              icon="el-icon-setting"
-              @click="collectIndexSetting"
-              v-if="!statisticIndex"
-            >
-              閰嶇疆閲囬泦鐐�
-            </el-button>
-          </el-form-item>
-        </el-col>
-      </el-row>
-    </el-form>
-
-    <el-table
-      v-loading="loading"
-      :data="energyindexList"
-      border
-      @selection-change="handleSelectionChange"
-    >
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="鎸囨爣缂栫爜" align="center" prop="code" />
-      <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="name" />
-      <el-table-column
-        label="绯荤粺鎸囨爣鍒嗙被"
-        align="center"
-        prop="indexCategory"
-        :formatter="indexCategoryFormat"
-      />
-      <el-table-column
-        label="鍗曚綅"
-        align="center"
-        prop="unitId"
-        :formatter="unitIdFormat"
-      />
-      <el-table-column
-        label="鎿嶄綔"
-        width="200"
-        align="center"
-        class-name="small-padding fixed-width"
-      >
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['energyindex:energyindex:edit']"
-            >淇敼
-          </el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="dataStorage(scope.row)"
-            v-hasPermi="['energyindex:energyindex:edit']"
-            v-if="statisticIndex"
-            >瀛樺偍
-          </el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['energyindex:energyindex:remove']"
-            >鍒犻櫎
-          </el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total > 0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="paginationQuery"
-    />
-
-    <!-- 娣诲姞鎴栦慨鏀规寚鏍囦俊鎭璇濇 -->
-    <el-dialog
-      :title="title"
-      :visible.sync="open"
-      width="500px"
-      :close-on-click-modal="false"
-    >
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="鎸囨爣鍚嶇О" prop="name">
-          <el-input v-model="form.name" placeholder="璇疯緭鍏ユ寚鏍囧悕绉�" />
-        </el-form-item>
-        <el-form-item label="鎸囨爣缂栫爜" prop="code">
-          <el-input v-model="form.code" placeholder="璇疯緭鍏ユ寚鏍囩紪鐮�" />
-        </el-form-item>
-        <el-form-item label="鎸囨爣鍒嗙被">
-          <el-select
-            v-model="form.indexCategory"
-            placeholder="璇烽�夋嫨鎸囨爣鍒嗙被"
-            prop="indexCategory"
-          >
-            <el-option
-              v-for="dict in indexCategoryOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鍗曚綅">
-          <el-select v-model="form.unitId" placeholder="璇烽�夋嫨鍗曚綅">
-            <el-option
-              v-for="dict in unitIdOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="椤哄簭鍙�">
-          <el-input-number
-            v-model="form.orderNum"
-            controls-position="right"
-            :min="0"
-          />
-        </el-form-item>
-        <el-form-item label="璁惧">
-          <el-select v-model="form.equipment" placeholder="璇烽�夋嫨璁惧">
-            <el-option
-              v-for="dict in fcilityArchives"
-              :key="dict.id"
-              :label="dict.facilityName"
-              :value="dict.id"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鑳芥簮鍝佺">
-          <el-select v-model="form.energyId" placeholder="璇烽�夋嫨鑳芥簮鍝佺">
-            <el-option
-              v-for="dict in energyIdList"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-
-    <el-drawer
-      title="閰嶇疆鎸囨爣瀛樺偍"
-      :visible.sync="indexStorageShow"
-      direction="rtl"
-      @open="showIndexStorageDialog"
-      size="45%"
-      :wrapperClosable="false"
-    >
-      <IndexStorage
-        ref="indexStorage"
-        :nodeId="currentNode === undefined ? '' : currentNode.id"
-      ></IndexStorage>
-    </el-drawer>
-    <!--閫夋嫨閲囬泦鎸囨爣-->
-    <el-drawer
-      title="閫夋嫨閲囬泦鎸囨爣"
-      :visible.sync="collectIndexDialog"
-      direction="rtl"
-      @open="showCollectIndexDialog"
-      size="45%"
-    >
-      <CollectIndexSetting
-        ref="collectIndexSetting"
-        @collectIndexConfirmSelect="collectIndexConfirmSelect"
-      ></CollectIndexSetting>
-    </el-drawer>
-
-    <!-- 瀵煎叆瀵硅瘽妗� -->
-    <el-dialog
-      :title="upload.title"
-      :visible.sync="upload.open"
-      :destroy-on-close="true"
-      width="400px"
-    >
-      <el-upload
-        ref="upload"
-        :limit="1"
-        accept=".xlsx, .xls"
-        :headers="upload.headers"
-        :action="upload.url + '?updateSupport=' + upload.updateSupport"
-        :disabled="upload.isUploading"
-        :on-progress="handleFileUploadProgress"
-        :on-success="handleFileSuccess"
-        :auto-upload="false"
-        drag
-      >
-        <i class="el-icon-upload"></i>
-        <div class="el-upload__text">
-          灏嗘枃浠舵嫋鍒版澶勶紝鎴�
-          <em>鐐瑰嚮涓婁紶</em>
-        </div>
-        <div class="el-upload__tip" slot="tip">
-          <el-checkbox v-model="upload.updateSupport" />
-          鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹�
-          <el-link type="info" style="font-size:12px" @click="importTemplate"
-            >涓嬭浇妯℃澘</el-link
-          >
-        </div>
-        <div class="el-upload__tip" style="color:red" slot="tip">
-          鎻愮ず锛氫粎鍏佽瀵煎叆鈥渪ls鈥濇垨鈥渪lsx鈥濇牸寮忔枃浠讹紒
-        </div>
-      </el-upload>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button>
-        <el-button @click="upload.open = false">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {
-  addEnergyindex,
-  delEnergyindex,
-  exportEnergyindex,
-  getEnergyindex,
-  importTemplate,
-  listEnergyindex,
-  updateEnergyindex
-} from "../../../api/basicsetting/energyindex";
-import { getToken } from "@/utils/auth";
-import { setNodeToIndex } from "@/api/basicsetting/modelNode";
-import IndexStorage from "./indexStorage";
-import CollectIndexSetting from "../nodeSetting/collectIndexSetting";
-import { getPointFacility } from "@/api/comprehensiveStatistics/comprehensive";
-
-export default {
-  name: "EnergyIndex",
-  components: { CollectIndexSetting, IndexStorage },
-  props: ["indexType"],
-  data() {
-    return {
-      // 閬僵灞�
-      loading: false,
-      // 閫変腑鏁扮粍
-      ids: [],
-      names: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-      energyindexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      indexIdOptions: [],
-      // 鎸囨爣鍚嶇О瀛楀吀
-      nameOptions: [],
-      // 鎸囨爣缂栫爜瀛楀吀
-      codeOptions: [],
-      // 绯荤粺鎸囨爣鍒嗙被锛�1-鑳芥簮绫伙紝2-浜у搧绫伙紝3-鑳芥晥绫伙紝4-缁忚惀绫伙紝5-鍏朵粬瀛楀吀
-      indexCategoryOptions: [],
-      // 澶囨敞瀛楀吀
-      remarkOptions: [],
-      // 鍗曚綅瀛楀吀
-      unitIdOptions: [],
-      energyIdList: [], //鑳芥簮鍝佺
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        indexCategory: undefined,
-        nodeId: undefined,
-        indexType: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        name: [
-          { required: true, message: "鎸囨爣鍚嶇О涓嶈兘涓虹┖", trigger: "blur" },
-          { min: 2, max: 20, message: "闀垮害鍦� 2 鍒� 20 涓瓧绗�", trigger: "blur" }
-        ],
-        code: [
-          { required: true, message: "鎸囨爣缂栫爜涓嶈兘涓虹┖", trigger: "blur" },
-          {
-            min: 2,
-            max: 20,
-            message: "闀垮害鍦� 2 鍒� 30 涓瓧绗�",
-            trigger: "blur"
-          },
-          {
-            pattern: /^[a-zA-Z][A-Za-z0-9#_-]+$/,
-            message: "蹇呴』涓烘暟瀛椼�佸瓧姣嶃��#銆�- 鎴朹 锛屼笖棣栧瓧绗﹀彧鑳戒负瀛楁瘝"
-          }
-        ],
-        indexCategory: [
-          { required: true, message: "璇烽�夋嫨鎸囨爣鍒嗙被", trigger: "blur" }
-        ]
-      },
-      currentNode: undefined,
-      indexCategoryDefaultVal: undefined,
-      unitDefaultVal: undefined,
-      indexStorageShow: false,
-      statisticIndex: true,
-      collectIndexDialog: false,
-      fcilityArchives: [],
-      upload: {
-        open: false,
-        title: "",
-        // 鏄惁绂佺敤涓婁紶
-        isUploading: false,
-        // 鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹�
-        updateSupport: 0,
-        // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-        headers: { Authorization: "Bearer " + getToken() },
-        // 涓婁紶鐨勫湴鍧�
-        url:
-          process.env.VUE_APP_BASE_API + "/basicsetting/energyindex/importData"
-      }
-    };
-  },
-  created() {
-    this.getDicts("sys_index_category").then(response => {
-      this.indexCategoryOptions = response.data;
-      this.indexCategoryDefaultVal = this.indexCategoryOptions.find(
-        f => f.isDefault === "Y"
-      );
-    });
-    this.getDicts("sys_unit").then(response => {
-      this.unitIdOptions = response.data;
-      this.unitDefaultVal = this.unitIdOptions.find(f => f.isDefault === "Y");
-    });
-    this.statisticIndex = this.$props.indexType === "STATISTIC";
-    this.getDicts("energy_type").then(response => {
-      this.energyIdList = response.data;
-    });
-  },
-  methods: {
-    paginationQuery() {
-      this.getList(this.currentNode);
-    },
-    /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-    getList(modelNode) {
-      this.currentNode = modelNode;
-      if (modelNode) {
-        this.loading = true;
-        this.queryParams.nodeId = modelNode.id;
-        this.queryParams.indexType = this.$props.indexType;
-        listEnergyindex(this.queryParams).then(response => {
-          this.energyindexList = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        });
-      } else {
-        this.energyindexList = [];
-      }
-    },
-    // 绯荤粺鎸囨爣鍒嗙被锛�1-鑳芥簮绫伙紝2-浜у搧绫伙紝3-鑳芥晥绫伙紝4-缁忚惀绫伙紝5-鍏朵粬瀛楀吀缈昏瘧
-    indexCategoryFormat(row, column) {
-      return this.selectDictLabel(this.indexCategoryOptions, row.indexCategory);
-    },
-    // 鍗曚綅瀛楀吀缈昏瘧
-    unitIdFormat(row, column) {
-      return this.selectDictLabel(this.unitIdOptions, row.unitId);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        indexId: undefined,
-        name: undefined,
-        code: undefined,
-        indexType: undefined,
-        indexCategory: undefined,
-        remark: undefined,
-        unitId: undefined,
-        orderNum: 0
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList(this.currentNode);
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.indexId);
-      this.names = selection.map(item => item.name);
-      this.single = selection.length !== 1;
-      this.multiple = !selection.length;
-    },
-    getFacilityArchivesList() {
-      getPointFacility().then(response => {
-        this.fcilityArchives = response.data;
-        console.log(this.fcilityArchives);
-      });
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.getFacilityArchivesList();
-      if (this.indexCategoryDefaultVal) {
-        this.form.indexCategory = this.indexCategoryDefaultVal.dictValue;
-      }
-
-      if (this.unitDefaultVal) {
-        this.form.unitId = this.unitDefaultVal.dictValue;
-      }
-      this.open = true;
-      this.title = "娣诲姞鎸囨爣淇℃伅";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      this.getFacilityArchivesList();
-      const indexId = row.indexId || this.ids;
-      getEnergyindex(indexId).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼" + response.data.name + "鎸囨爣淇℃伅";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.indexId !== undefined) {
-            updateEnergyindex(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList(this.currentNode);
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            this.form.indexType = this.$props.indexType;
-            addEnergyindex(this.currentNode.id, this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList(this.currentNode);
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const indexIds = row.indexId || this.ids;
-      const indexNames = row.name || this.names;
-      this.$confirm(
-        '鏄惁纭鍒犻櫎鎸囨爣鍚嶄负"' + indexNames + '"鐨勬暟鎹」?',
-        "璀﹀憡",
-        {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }
-      )
-        .then(() => {
-          return delEnergyindex(this.currentNode.id, indexIds);
-        })
-        .then(() => {
-          this.getList(this.currentNode);
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        })
-        .catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夋寚鏍囦俊鎭暟鎹」?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportEnergyindex(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-    dataStorage(row) {
-      this.indexStorageShow = true;
-      this.$nextTick(() => {
-        this.$refs.indexStorage.getIndexStorage(row.indexId);
-      });
-    },
-    showIndexStorageDialog() {},
-    collectIndexSetting() {
-      this.collectIndexDialog = true;
-    },
-    showCollectIndexDialog() {
-      this.$nextTick(() => {
-        this.$refs.collectIndexSetting.init(this.currentNode);
-      });
-    },
-    collectIndexConfirmSelect(selectedIndex) {
-      let indexIds = selectedIndex.map(item => item.indexId);
-      setNodeToIndex(this.currentNode.id, indexIds, "COLLECT")
-        .then(response => {
-          if (response.code !== 200) {
-            this.$message.error(response.msg);
-          }
-        })
-        .then(() => {
-          this.getList(this.currentNode);
-        });
-    },
-    handleImport() {
-      this.upload.title = "鎸囨爣瀵煎叆";
-      this.upload.open = true;
-    }, // 鏂囦欢涓婁紶涓鐞�
-    handleFileUploadProgress(event, file, fileList) {
-      this.upload.isUploading = true;
-    },
-    // 鏂囦欢涓婁紶鎴愬姛澶勭悊
-    handleFileSuccess(response, file, fileList) {
-      this.upload.open = false;
-      this.upload.isUploading = false;
-      this.$refs.upload.clearFiles();
-      this.$alert(response.msg, "瀵煎叆缁撴灉", { dangerouslyUseHTMLString: true });
-      this.getList(this.currentNode);
-    },
-    /** 涓嬭浇妯℃澘鎿嶄綔 */
-    importTemplate() {
-      importTemplate().then(response => {
-        this.download(response.msg);
-      });
-    },
-    submitFileForm() {
-      this.$refs.upload.submit();
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/basicsetting/energyIndex/index.vue b/energy_management_ui/src/views/basicsetting/energyIndex/index.vue
deleted file mode 100644
index b5bcebb..0000000
--- a/energy_management_ui/src/views/basicsetting/energyIndex/index.vue
+++ /dev/null
@@ -1,91 +0,0 @@
-<template>
-  <el-row type="flex">
-    <el-col
-      :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-      v-show="!isCollapse"
-    >
-      <basic-container title="鎸囨爣搴撶鐞�" :bodyStyle="bodyStyle">
-        <ModelNode
-          ref="modelNode"
-          @changeNode="changeNode"
-          modelCode="statistic_index_model"
-          :showOpt="true"
-          :auth="false"
-        />
-      </basic-container>
-      <img
-        src="~@/assets/image/rectangle.png"
-        alt=""
-        class="shrink-col-block"
-        @click="toggleCollapse"
-      />
-    </el-col>
-    <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-    <el-col
-      :style="{
-        width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-        paddingLeft: isCollapse ? 0 : '14px'
-      }"
-    >
-      <basic-container
-        :title="currentNode ? currentNode.label + '--鑺傜偣閰嶇疆' : '鑺傜偣閰嶇疆'"
-        :bodyStyle="bodyStyleRight"
-      >
-        <IndexNodeSetting ref="modelNodeSetting" />
-      </basic-container>
-    </el-col>
-  </el-row>
-</template>
-<script>
-import ModelNode from "../modelNode/modelNode";
-import IndexNodeSetting from "./indexNodeSetting";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from "@/components/shrink/index.vue";
-
-export default {
-  components: { IndexNodeSetting, ModelNode, ShrinkCol },
-  mixins: [mixins],
-  created() {},
-  data() {
-    return {
-      modelData: "",
-      isCollapse: false,
-      bodyStyleRight: {},
-      currentNode: ""
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 185 + "px"
-      };
-    },
-    changeNode: function(node) {
-      if (node) {
-        this.currentNode = node;
-      }
-      this.$refs.modelNodeSetting.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.shrink-col-block {
-  position: absolute;
-  top: 20px;
-  right: 16px;
-  cursor: pointer;
-}
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/energyIndex/indexNodeSetting.vue b/energy_management_ui/src/views/basicsetting/energyIndex/indexNodeSetting.vue
deleted file mode 100644
index 891b6f6..0000000
--- a/energy_management_ui/src/views/basicsetting/energyIndex/indexNodeSetting.vue
+++ /dev/null
@@ -1,290 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-tabs>
-      <el-tab-pane :disabled="disabledSetting">
-        <span slot="label"><i class="el-icon-setting"></i> 鑳芥簮銆佷骇鍝併�佽澶囬厤缃�</span>
-        <el-collapse>
-          <el-collapse-item title="鑳芥簮閰嶇疆淇℃伅" :disabled="disabledSetting">
-            <el-button style="float: right; padding: 8px; margin-left:8px" type="text"
-                       icon="el-icon-setting"
-                       @click="energySetting">
-              閰嶇疆鑳芥簮
-            </el-button>
-            <el-table v-loading="energyLoading" :data="settingEnergyList" border
-                      @selection-change="handleSelectionChange">
-              <el-table-column label="鑳芥簮缂栫爜" align="center" prop="enersno"/>
-              <el-table-column label="鑳芥簮鍚嶇О" align="center" prop="enername"/>
-              <el-table-column label="鎿嶄綔" width="70" align="center"
-                               class-name="small-padding fixed-width">
-                <template slot-scope="scope">
-                  <el-button
-                      size="mini"
-                      type="text"
-                      icon="el-icon-delete"
-                      @click="delEnergy(scope.row)"
-                  ></el-button>
-                </template>
-              </el-table-column>
-            </el-table>
-          </el-collapse-item>
-          <el-collapse-item title="浜у搧閰嶇疆淇℃伅" :disabled="disabledSetting">
-            <el-button style="float: right; padding: 8px; margin-left:8px" type="text"
-                       icon="el-icon-setting"
-                       @click="productSetting">
-              閰嶇疆浜у搧
-            </el-button>
-            <el-table v-loading="productLoading" :data="settingProductList" border
-                      @selection-change="handleSelectionChange">
-              <el-table-column label="浜у搧缂栫爜" align="center" prop="productsno"/>
-              <el-table-column label="浜у搧鍚嶇О" align="center" prop="productname"/>
-              <el-table-column label="鎿嶄綔" width="70" align="center"
-                               class-name="small-padding fixed-width">
-                <template slot-scope="scope">
-                  <el-button
-                      size="mini"
-                      type="text"
-                      icon="el-icon-delete"
-                      @click="delProduct(scope.row)"
-                  ></el-button>
-                </template>
-              </el-table-column>
-            </el-table>
-          </el-collapse-item>
-          <el-collapse-item title="璁惧閰嶇疆淇℃伅" :disabled="disabledSetting">
-            <el-button style="float: right; padding: 8px; margin-bottom:8px" type="text"
-                       icon="el-icon-setting"
-                       @click="deviceSetting">
-              閰嶇疆璁惧
-            </el-button>
-            <el-table v-loading="deviceLoading" :data="settingDeviceList" border
-                      @selection-change="handleSelectionChange">
-              <el-table-column label="鍣ㄥ叿缂栫爜" align="center" prop="code"/>
-              <el-table-column label="鍣ㄥ叿鍚嶇О" align="center" prop="meterName"/>
-              <el-table-column label="鎿嶄綔" width="70" align="center"
-                               class-name="small-padding fixed-width">
-                <template slot-scope="scope">
-                  <el-button
-                      size="mini"
-                      type="text"
-                      icon="el-icon-delete"
-                      @click="delDevice(scope.row)"
-                  ></el-button>
-                </template>
-              </el-table-column>
-            </el-table>
-          </el-collapse-item>
-        </el-collapse>
-      </el-tab-pane>
-      <el-tab-pane :disabled="disabledSetting">
-        <span slot="label"><i class="el-icon-setting"></i> 缁熻鎸囨爣绠$悊</span>
-        <EnergyIndex ref="energyIndex" indexType="STATISTIC"></EnergyIndex>
-      </el-tab-pane>
-      <el-tab-pane :disabled="disabledSetting">
-        <span slot="label"><i class="el-icon-setting"></i> 閲囬泦鐐圭鐞�</span>
-        <EnergyIndex ref="collectIndex" indexType="COLLECT"></EnergyIndex>
-      </el-tab-pane>
-    </el-tabs>
-    <!--閫夋嫨璁惧-->
-    <el-drawer title="閫夋嫨璁惧" :visible.sync="deviceDialog" direction="rtl" @open="showDeviceDialog"
-               size="45%">
-      <DeviceSetting ref="deviceSetting" @deviceConfirmSelect="deviceConfirmSelect"></DeviceSetting>
-    </el-drawer>
-    <!--閫夋嫨鑳芥簮-->
-    <el-drawer title="閫夋嫨鑳芥簮" :visible.sync="energyDialog" direction="rtl" @open="showEnergyDialog"
-               size="45%">
-      <EnergySetting ref="energySetting" @energyConfirmSelect="energyConfirmSelect"></EnergySetting>
-    </el-drawer>
-    <!--閫夋嫨浜у搧-->
-    <el-drawer title="閫夋嫨浜у搧" :visible.sync="productDialog" direction="rtl" @open="showProductDialog"
-               size="45%">
-      <ProductSetting ref="productSetting"
-                      @productConfirmSelect="productConfirmSelect"></ProductSetting>
-    </el-drawer>
-  </div>
-</template>
-
-<script>
-import {
-  delDevice,
-  delEnergy,
-  delProduct,
-  getSettingDevice,
-  getSettingEnergy,
-  getSettingIndex,
-  getSettingProduct,
-  setDevice,
-  setEnergy,
-  setProduct
-} from '@/api/basicsetting/modelNode'
-import DeviceSetting from "../nodeSetting/deviceSetting";
-import EnergySetting from "../nodeSetting/energySetting";
-import ProductSetting from "../nodeSetting/productSetting";
-import EnergyIndex from "./energyIndex";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: "IndexNodeSetting",
-  components: {EnergyIndex, ProductSetting, EnergySetting, DeviceSetting},
-  mixins: [mixins],
-  data() {
-    return {
-      currentNode: '',
-      deviceDialog: false,
-      energyDialog: false,
-      productDialog: false,
-      indexLoading: false,
-      deviceLoading: false,
-      energyLoading: false,
-      productLoading: false,
-      settingEnergyList: [],
-      settingDeviceList: [],
-      settingProductList: [],
-      disabledSetting: true,
-      bodyStyleRight: {}
-    }
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 155 + 'px';
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 155 + 'px'
-      };
-    },
-    modelNodeChange(modelNode) {
-      this.settingDeviceList = [];
-      this.disabledSetting = modelNode === undefined || modelNode === '' || modelNode === null;
-      if (modelNode) {
-        this.currentNode = modelNode;
-        this.deviceLoading = true;
-        getSettingDevice(modelNode.id).then((response) => {
-          if (response.code === 200) {
-            this.settingDeviceList = response.data;
-          } else {
-            this.$message.error(response.msg);
-          }
-          this.deviceLoading = false;
-        });
-
-        this.energyLoading = true;
-        getSettingEnergy(modelNode.id).then((response) => {
-          if (response.code === 200) {
-            this.settingEnergyList = response.data;
-          } else {
-            this.$message.error(response.msg);
-          }
-          this.energyLoading = false;
-        });
-
-        this.productLoading = true;
-        getSettingProduct(modelNode.id).then((response) => {
-          if (response.code === 200) {
-            this.settingProductList = response.data;
-          } else {
-            this.$message.error(response.msg);
-          }
-          this.productLoading = false;
-        });
-
-        this.indexLoading = true;
-        getSettingIndex(modelNode.id).then((response) => {
-          if (response.code === 200) {
-            this.settingIndexList = response.data;
-          } else {
-            this.$message.error(response.msg);
-          }
-          this.indexLoading = false;
-        });
-
-        this.$refs.energyIndex.getList(modelNode);
-        this.$refs.collectIndex.getList(modelNode);
-      }
-    },
-    deviceSetting() {
-      this.deviceDialog = true;
-    },
-    energySetting() {
-      this.energyDialog = true;
-    },
-    productSetting() {
-      this.productDialog = true;
-    },
-    showDeviceDialog() {
-      this.$nextTick(() => {
-        this.$refs.deviceSetting.init(this.settingDeviceList);
-      })
-    },
-    showEnergyDialog() {
-      this.$nextTick(() => {
-        this.$refs.energySetting.init(this.settingEnergyList);
-      })
-    },
-    showProductDialog() {
-      this.$nextTick(() => {
-        this.$refs.productSetting.init(this.settingProductList);
-      })
-    },
-    deviceConfirmSelect(selectedDevice) {
-      this.settingDeviceList = selectedDevice;
-      let deviceIds = selectedDevice.map(item => item.id);
-      setDevice(this.currentNode.id, deviceIds).then((response) => {
-        if (response.code !== 200) {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    energyConfirmSelect(selectedEnergy) {
-      this.settingEnergyList = selectedEnergy;
-      let energyIds = selectedEnergy.map(item => item.enerid);
-      setEnergy(this.currentNode.id, energyIds).then((response) => {
-        if (response.code !== 200) {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    productConfirmSelect(selectedProduct) {
-      this.settingProductList = selectedProduct;
-      let productIds = selectedProduct.map(item => item.productid);
-      setProduct(this.currentNode.id, productIds).then((response) => {
-        if (response.code !== 200) {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    handleSelectionChange() {
-    },
-    delDevice(row) {
-      delDevice(this.currentNode.id, row.id).then((response) => {
-        if (response.code === 200) {
-          this.settingDeviceList = this.settingDeviceList.filter(f => f.id !== row.id);
-        } else {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    delEnergy(row) {
-      delEnergy(this.currentNode.id, row.enerid).then((response) => {
-        if (response.code === 200) {
-          this.settingEnergyList = this.settingEnergyList.filter(f => f.enerid !== row.enerid);
-        } else {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    delProduct(row) {
-      delProduct(this.currentNode.id, row.productid).then((response) => {
-        if (response.code === 200) {
-          this.settingProductList = this.settingProductList.filter(
-              f => f.productid !== row.productid);
-        } else {
-          this.$message.error(response.msg);
-        }
-      });
-    }
-  }
-}
-</script>
-
-<style scoped>
-
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/energyIndex/indexStorage.vue b/energy_management_ui/src/views/basicsetting/energyIndex/indexStorage.vue
deleted file mode 100644
index f820f0f..0000000
--- a/energy_management_ui/src/views/basicsetting/energyIndex/indexStorage.vue
+++ /dev/null
@@ -1,209 +0,0 @@
-<template>
-  <div class="app-container" style="    margin-top: -15px;    padding: 0;">
-    <el-card class="index-storage-container"
-             shadow="never">
-      <el-form label-position="top" label-width="110px" :model="indexStorageData">
-        <el-form-item style="margin-bottom: 0">
-          <el-button size="mini" @click="saveIndexStorage" class="fr" type="primary">淇濆瓨鏁版嵁瀛樺偍
-          </el-button>
-        </el-form-item>
-        <el-form-item>
-          <div slot="label">鎸囨爣璁$畻鍏紡&nbsp;&nbsp;&nbsp;&nbsp;
-            <el-button size="mini" @click="selectCalcFunction">閫夋嫨璁$畻鍑芥暟</el-button>
-          </div>
-          <el-input type="textarea" rows="3" v-model="indexStorageData.indexFormula.formulaText"
-                    id="formulaText"
-                    @blur="parseFormula"></el-input>
-        </el-form-item>
-        <el-form-item>
-          <el-table :data="indexStorageData.indexFormula.indexFormulaParams" style="width: 100%"
-                    border>
-            <el-table-column label="鍙傛暟鍚�" prop="paramName" width="200"></el-table-column>
-            <el-table-column label="鍙傛暟鍊�" prop="paramValue">
-              <template slot-scope="scope">
-                <el-autocomplete popper-class="my-autocomplete"
-                                 v-model="scope.row['paramValue']"
-                                 :fetch-suggestions="querySearch"
-                                 placeholder="璇疯緭鍏ユ寚鏍囩紪鐮�">
-                  <template slot-scope="{ item }">
-                    <div class="name">{{ item.value }}</div>
-                    <span class="addr">{{ item.name }}</span>
-                  </template>
-                </el-autocomplete>
-              </template>
-            </el-table-column>
-          </el-table>
-        </el-form-item>
-      </el-form>
-      <el-card class="box-card" header="鏁版嵁瀛樺偍">
-        <el-form label-width="110px">
-          <el-form-item v-for="period in indexStorageData.indexStorage">
-            <div slot="label">{{getTimeLabel(period.timeType)}} 鏁版嵁</div>
-            <el-radio-group v-model="period.calcType">
-              <el-radio-button label="CALC">鑷姩璁$畻</el-radio-button>
-              <el-radio-button label="INPUT">鎵嬪伐褰曞叆</el-radio-button>
-            </el-radio-group>
-          </el-form-item>
-        </el-form>
-      </el-card>
-      <el-drawer title="閫夋嫨璁$畻鍑芥暟" :visible.sync="calcFunctionShow" direction="rtl"
-                 @open="showCalcFunctionDialog"
-                 size="35%">
-        <CalcFunction ref="calcFunction" :showOpt="false"
-                      @confirmCalcFunction="confirmCalcFunction"></CalcFunction>
-      </el-drawer>
-    </el-card>
-  </div>
-</template>
-<script>
-  import CalcFunction from "../function/index";
-  import {
-    getIndexStorage,
-    getNodeIndex,
-    parseFormula,
-    saveIndexStorage
-  } from "@/api/basicsetting/indexStorage";
-
-  export default {
-    name: "IndexStorage",
-    props: ["nodeId"],
-    components: {CalcFunction},
-    data() {
-      return {
-        indexStorageData: undefined,
-        calcFunctionShow: false,
-        nodeIndex: [],
-        indexId: ''
-      }
-    },
-    created() {
-      this.initData();
-    },
-    methods: {
-      initData() {
-        this.indexStorageData = {
-          indexFormula: {
-            id: '',
-            indexId: '',
-            formulaText: '',
-            indexFormulaParams: [],
-          },
-          indexStorage: []
-        }
-      },
-      showCalcFunctionDialog() {
-      },
-      selectCalcFunction() {
-        this.calcFunctionShow = true;
-      },
-      confirmCalcFunction(funcText) {
-        this.calcFunctionShow = false;
-        const elInput = document.getElementById('formulaText'); //鏍规嵁id閫夋嫨鍣ㄩ�変腑瀵硅薄
-        const startPos = elInput.selectionStart;// input 绗�0涓瓧绗﹀埌閫変腑鐨勫瓧绗�
-        const endPos = elInput.selectionEnd;// 閫変腑鐨勫瓧绗﹀埌鏈�鍚庣殑瀛楃
-        if (startPos === undefined || endPos === undefined) {
-          return;
-        }
-        const txt = elInput.value;
-        // 灏嗚〃鎯呮坊鍔犲埌閫変腑鐨勫厜鏍囦綅缃�
-        const result = txt.substring(0, startPos) + funcText + txt.substring(endPos);
-        elInput.value = result;// 璧嬪�肩粰input鐨剉alue
-        // 閲嶆柊瀹氫箟鍏夋爣浣嶇疆
-        elInput.focus();
-        elInput.selectionStart = startPos + funcText.length;
-        elInput.selectionEnd = startPos + funcText.length;
-        this.indexStorageData.indexFormula.formulaText = result;
-      },
-      parseFormula() {
-        parseFormula({"calcText": this.indexStorageData.indexFormula.formulaText}).then(
-            response => {
-              let newParamData = response.data;
-              let paramData = this.indexStorageData.indexFormula.indexFormulaParams.filter(f => {
-                let exist = newParamData.find(param => param === f.paramName);
-                return exist && exist.length > 0;
-              });
-
-              newParamData.forEach(item => {
-                let exist = paramData.find(param => param.paramName === item);
-                if (!exist || exist.length === 0) {
-                  paramData.push({
-                    "paramName": item,
-                    "paramValue": ''
-                  })
-                }
-              });
-
-              this.indexStorageData.indexFormula.indexFormulaParams = paramData;
-            });
-      },
-      querySearch(queryString, cb) {
-        let nodeIndex = this.nodeIndex;
-        let results = queryString ? nodeIndex.filter((index) => {
-          return index.code.toLowerCase().indexOf(queryString.toLowerCase()) === 0 ||
-              index.name.toLowerCase().indexOf(queryString.toLowerCase()) === 0
-        }) : nodeIndex;
-        // 璋冪敤 callback 杩斿洖寤鸿鍒楄〃鐨勬暟鎹�
-        let values = [];
-        results.forEach(item => {
-          values.push({
-            value: item.code,
-            name: item.name
-          })
-        });
-        cb(values);
-      },
-      saveIndexStorage() {
-        saveIndexStorage(this.indexId, this.indexStorageData).then((response) => {
-          if (response.code === 200) {
-            this.$message.success("鏁版嵁瀛樺偍鎴愬姛锛�");
-          } else {
-            this.$message.error("鏁版嵁瀛樺偍澶辫触锛�");
-          }
-        });
-      },
-      getIndexStorage(indexId) {
-        this.initData();
-        this.indexId = indexId;
-        getNodeIndex(this.nodeId).then((response) => {
-          this.nodeIndex = response.data;
-        });
-
-        getIndexStorage(indexId).then(response => this.indexStorageData = response.data);
-        // getCalcPeriod().then(response => this.indexStorageData.indexStorage = response.data);
-      },
-      getTimeLabel(timeType) {
-        return this.selectTimeTypeLabel(timeType);
-      }
-    }
-  }
-</script>
-
-<style scoped lang="scss">
-  .el-autocomplete {
-    width: 100%;
-  }
-
-  .my-autocomplete li {
-    line-height: normal;
-    padding: 7px;
-  }
-
-  .my-autocomplete li .name {
-    text-overflow: ellipsis;
-    overflow: hidden;
-  }
-
-  .my-autocomplete li .addr {
-    font-size: 12px;
-    color: #b4b4b4;
-  }
-
-  .my-autocomplete li .highlighted .addr {
-    color: #ddd;
-  }
-
-  .index-storage-container {
-    height: calc(100vh - 60px);
-    overflow: auto;
-  }
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/function/index.vue b/energy_management_ui/src/views/basicsetting/function/index.vue
deleted file mode 100644
index 5c8833d..0000000
--- a/energy_management_ui/src/views/basicsetting/function/index.vue
+++ /dev/null
@@ -1,252 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form :model="queryParams" ref="queryForm" label-width="72px" class="special-form">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="鍑芥暟鍚�" prop="funcName">
-              <el-input
-                  v-model="queryParams.funcName"
-                  placeholder="璇疯緭鍏ュ嚱鏁板悕"
-                  clearable
-                  size="small"
-                  @input="handleQuery"
-                  @clear="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-table :height="height" v-loading="loading" :data="functionList"
-                border
-                @row-click="handleCurrentChange"
-                highlight-current-row>
-        <el-table-column label="鍑芥暟鍚�" align="center" prop="funcName" width="200"/>
-        <el-table-column label="鍑芥暟鏂囨湰" align="center" prop="funcText" v-if="this.funcOpt"/>
-        <el-table-column label="浠嬬粛" align="center" prop="info"/>
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width" width="150"
-                         v-if="this.funcOpt">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['basicsetting:function:edit']"
-                v-if="false"
-            >淇敼
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-delete"
-                @click="handleDelete(scope.row)"
-                v-hasPermi="['basicsetting:function:remove']"
-            >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-    </basic-container>
-    <!-- 娣诲姞鎴栦慨鏀硅绠楀嚱鏁板璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="鍑芥暟鍚�" prop="funcName">
-          <el-input v-model="form.funcName" placeholder="璇疯緭鍏ュ嚱鏁板悕"/>
-        </el-form-item>
-        <el-form-item label="鍑芥暟鏂囨湰" prop="funcText">
-          <el-input v-model="form.funcText" placeholder="璇疯緭鍏ュ嚱鏁版枃鏈�"/>
-        </el-form-item>
-        <el-form-item label="浠嬬粛" prop="info">
-          <el-input v-model="form.info" placeholder="璇疯緭鍏ヤ粙缁�"/>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {
-  listFunction,
-  getFunction,
-  delFunction,
-  addFunction,
-  updateFunction,
-  exportFunction
-} from "@/api/basicsetting/function";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: "CalcFunction",
-  props: ["showOpt"],
-  mixins: [mixins],
-  data() {
-    return {
-      height: null,
-      // 閬僵灞�
-      loading: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 璁$畻鍑芥暟琛ㄦ牸鏁版嵁
-      functionList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        funcName: undefined,
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {},
-      funcOpt: true
-    };
-  },
-  created() {
-    this.getList();
-    this.funcOpt = this.$props.showOpt !== undefined ? this.$props.showOpt : true;
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 320;
-    },
-    /** 鏌ヨ璁$畻鍑芥暟鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listFunction(this.queryParams).then(response => {
-        this.functionList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        info: undefined,
-        funcName: undefined,
-        funcText: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleCurrentChange(currentRow) {
-      if (!this.funcOpt) {
-        this.$emit('confirmCalcFunction', currentRow.funcText);
-      }
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞璁$畻鍑芥暟";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      getFunction(row.id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼璁$畻鍑芥暟";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id !== undefined) {
-            updateFunction(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addFunction(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      this.$confirm('鏄惁纭鍒犻櫎璁$畻鍑芥暟涓�"' + row.funcName + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delFunction(row.id);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夎绠楀嚱鏁版暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportFunction(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    }
-  }
-};
-</script>
-
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/limitType/index.vue b/energy_management_ui/src/views/basicsetting/limitType/index.vue
deleted file mode 100644
index e57cb7d..0000000
--- a/energy_management_ui/src/views/basicsetting/limitType/index.vue
+++ /dev/null
@@ -1,441 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form
-        :model="queryParams"
-        ref="queryForm"
-        label-width="120px"
-        class="special-form"
-      >
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="闄愬�肩被鍨嬪悕绉�" prop="limitName">
-              <el-input
-                v-model="queryParams.limitName"
-                placeholder="璇疯緭鍏ラ檺鍊肩被鍨嬪悕绉�"
-                clearable
-                size="small"
-                @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="18">
-            <el-form-item class="operation">
-              <el-button
-                type="primary"
-                icon="el-icon-search"
-                size="mini"
-                @click="handleQuery"
-                >鎼滅储</el-button
-              >
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-                >閲嶇疆</el-button
-              >
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-            type="primary"
-            icon="el-icon-plus"
-            size="mini"
-            @click="handleAdd"
-            v-hasPermi="['basicsetting:limitType:add']"
-            >鏂板
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            type="success"
-            icon="el-icon-edit"
-            size="mini"
-            :disabled="single"
-            @click="handleUpdate"
-            v-hasPermi="['basicsetting:limitType:edit']"
-            >淇敼
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            type="danger"
-            icon="el-icon-delete"
-            size="mini"
-            :disabled="multiple"
-            @click="handleDelete"
-            v-hasPermi="['basicsetting:limitType:remove']"
-            >鍒犻櫎
-          </el-button>
-        </el-col>
-        <!--      <el-col :span="1.5">-->
-        <!--        <el-button-->
-        <!--          type="warning"-->
-        <!--          icon="el-icon-download"-->
-        <!--          size="mini"-->
-        <!--          @click="handleExport"-->
-        <!--          v-hasPermi="['basicsetting:limitType:export']"-->
-        <!--        >瀵煎嚭</el-button>-->
-        <!--      </el-col>-->
-      </el-row>
-      <el-table
-        v-loading="loading"
-        :data="limitTypeList"
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="闄愬�肩被鍨嬪悕绉�" align="center" prop="limitName" />
-        <el-table-column label="闄愬�肩被鍨嬬紪鍙�" align="center" prop="limitCode" />
-        <el-table-column
-          label="鎶ヨ闄愬埗绫诲瀷"
-          align="center"
-          prop="alarmType"
-          :formatter="typeFormat"
-        />
-        <el-table-column label="鑹插彿" align="center" prop="colorNumber">
-          <template slot-scope="scope">
-            <el-tag :color="scope.row.colorNumber" disable-transitions></el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column
-          label="姣旇緝杩愮畻绗�"
-          align="center"
-          prop="comparatorOperator"
-        />
-        <el-table-column
-          label="鎿嶄綔"
-          align="center"
-          class-name="small-padding fixed-width"
-        >
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="handleUpdate(scope.row)"
-              v-hasPermi="['basicsetting:limitType:edit']"
-              >淇敼
-            </el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['basicsetting:limitType:remove']"
-              >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-    </basic-container>
-    <!-- 娣诲姞鎴栦慨鏀规姤璀﹂檺鍊肩被鍨嬬淮鎶ゅ璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
-        <el-form-item label="闄愬�肩被鍨嬪悕绉�" prop="limitName">
-          <el-input v-model="form.limitName" placeholder="璇疯緭鍏ラ檺鍊肩被鍨嬪悕绉�" />
-        </el-form-item>
-        <el-form-item label="闄愬�肩被鍨嬬紪鍙�" prop="limitCode">
-          <el-input v-model="form.limitCode" placeholder="璇疯緭鍏ラ檺鍊肩被鍨嬬紪鐮�" />
-        </el-form-item>
-        <el-form-item label="鎶ヨ闄愬埗绫诲瀷" prop="alarmType">
-          <el-select
-            v-model="form.alarmType"
-            placeholder="璇烽�夋嫨鎶ヨ闄愬埗绫诲瀷"
-            clearable
-            size="small"
-          >
-            <el-option
-              v-for="item in alarmTypeList"
-              :key="item.dictValue"
-              :label="item.dictLabel"
-              :value="item.dictValue"
-            >
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鑹插彿" prop="colorNumber">
-          <el-color-picker
-            v-model="form.colorNumber"
-            color-format="hex"
-            :predefine="predefineColors"
-          >
-          </el-color-picker>
-        </el-form-item>
-        <el-form-item label="姣旇緝杩愮畻绗�" prop="comparatorOperator">
-          <el-select
-            v-model="form.comparatorOperator"
-            placeholder="姣旇緝杩愮畻绗�"
-            clearable
-            size="small"
-          >
-            <el-option label="澶т簬" value=">" />
-            <el-option label="澶т簬绛変簬" value=">=" />
-            <el-option label="灏忎簬" value="<" />
-            <el-option label="灏忎簬绛変簬" value="<=" />
-            <el-option label="绛変簬" value="=" />
-          </el-select>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {
-  listLimitType,
-  getLimitType,
-  delLimitType,
-  addLimitType,
-  updateLimitType,
-  exportLimitType
-} from "@/api/basicsetting/limitType";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  mixins: [mixins],
-  data() {
-    return {
-      height: null,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鎶ヨ闄愬�肩被鍨嬬淮鎶よ〃鏍兼暟鎹�
-      limitTypeList: [],
-
-      alarmTypeList: [],
-      alarmTypeDefaultVal: "",
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        limitName: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        limitName: [
-          { required: true, message: "闄愬�肩被鍨嬪悕绉颁笉鑳戒负绌�", trigger: "blur" }
-        ],
-        limitCode: [
-          { required: true, message: "闄愬�肩被鍨嬬紪鐮佷笉鑳戒负绌�", trigger: "blur" }
-        ]
-      },
-      //鑹插彿閫夋嫨鍣�
-      predefineColors: [
-        "#ff4500",
-        "#ff8c00",
-        "#ffd700",
-        "#90ee90",
-        "#00ced1",
-        "#1e90ff",
-        "#c71585"
-      ]
-    };
-  },
-  created() {
-    this.getDicts("alarm_type").then(response => {
-      this.alarmTypeList = response.data;
-      this.alarmTypeDefaultVal = this.alarmTypeList.find(
-        f => f.isDefault === "Y"
-      );
-    });
-    this.getList();
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 220 + "px",
-        overflow: "hidden"
-      };
-      // this.height = window.innerHeight - 370;
-    },
-    /** 鏌ヨ鎶ヨ闄愬�肩被鍨嬬淮鎶ゅ垪琛� */
-    getList() {
-      this.loading = true;
-      listLimitType(this.queryParams).then(response => {
-        this.limitTypeList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 瀛楀吀缈昏瘧
-    typeFormat(row, column) {
-      return this.selectDictLabel(this.alarmTypeList, row.alarmType);
-    },
-    // 鑹插彿鏍煎紡鍖�
-    colorNumberFormat(row, column) {
-      return "";
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        limitName: undefined,
-        limitCode: undefined,
-        colorNumber: undefined,
-        comparatorOperator: undefined,
-        alarmType: undefined,
-        createTime: undefined,
-        createBy: undefined,
-        updateTime: undefined,
-        updateBy: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id);
-      this.limitName = selection.map(item => item.limitName);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-      console.log(JSON.stringify(selection));
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.form.comparatorOperator = ">";
-      this.title = "娣诲姞鎶ヨ闄愬�肩被鍨嬬淮鎶�";
-      this.form.alarmType = this.alarmTypeDefaultVal.dictValue;
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids;
-      getLimitType(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼鎶ヨ闄愬�肩被鍨嬬淮鎶�";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          // console.log(JSON.stringify(this.form))
-          if (this.form.id != undefined) {
-            updateLimitType(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addLimitType(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$confirm(
-        '鏄惁纭鍒犻櫎鎶ヨ闄愬�肩被鍨嬬淮鎶ゅ悕绉颁负"' + ids + '"鐨勬暟鎹」?',
-        "璀﹀憡",
-        {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }
-      )
-        .then(function() {
-          return delLimitType(ids);
-        })
-        .then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        })
-        .catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夋姤璀﹂檺鍊肩被鍨嬬淮鎶ゆ暟鎹」?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportLimitType(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-    initAlarmType() {
-      for (let i = 0; i < this.model.energyindexList.length; i++) {
-        let ndy = "";
-        getAlarmType(this.model.energyindexList[i].indexId).then(response => {
-          if (response.code == "200") {
-            if (response.msg == "1") {
-              this.model.energyindexList[i].indexCategory = "鍚姩";
-            } else if (response.msg == "2") {
-              this.model.energyindexList[i].indexCategory = "鍋滄";
-            } else {
-              this.model.energyindexList[i].indexCategory = "灏氭湭璁剧疆";
-            }
-          } else {
-            this.model.energyindexList[i].indexCategory = "";
-          }
-        });
-      }
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/model/index.vue b/energy_management_ui/src/views/basicsetting/model/index.vue
deleted file mode 100644
index d11a322..0000000
--- a/energy_management_ui/src/views/basicsetting/model/index.vue
+++ /dev/null
@@ -1,216 +0,0 @@
-<template>
-  <div>
-    <basic-container :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-              type="primary"
-              icon="el-icon-plus"
-              size="mini"
-              @click="handleAdd"
-              v-hasPermi="['basicsetting:model:add']"
-          >鏂板
-          </el-button>
-        </el-col>
-      </el-row>
-
-      <el-table v-loading="loading" :data="modelList" border :height="height">
-        <el-table-column label="搴忓彿" type="index" width="55" align="center"/>
-        <el-table-column label="妯″瀷缂栫爜" align="center" prop="modelCode"/>
-        <el-table-column label="妯″瀷鍚嶇О" align="center" prop="modelName"/>
-        <el-table-column label="绫诲瀷" align="center" prop="modelType" :formatter="modelTypeFormat"/>
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width" width="120px">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['basicsetting:model:edit']"
-            >淇敼
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-delete"
-                @click="handleDelete(scope.row)"
-                v-hasPermi="['basicsetting:model:remove']"
-                v-if="scope.row.isShow===1"
-            >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-    </basic-container>
-    <!-- 娣诲姞鎴栦慨鏀规ā鍨嬪璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" :close-on-click-modal="false">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="妯″瀷缂栫爜" prop="modelCode">
-          <el-input v-model="form.modelCode" placeholder="璇疯緭鍏ユā鍨嬬紪鐮�" v-if="addOpt"/>
-          <span v-if="!addOpt">{{ this.form.modelCode }}</span>
-        </el-form-item>
-        <el-form-item label="妯″瀷鍚嶇О" prop="modelName">
-          <el-input v-model="form.modelName" placeholder="璇疯緭鍏ユā鍨嬪悕绉�"/>
-        </el-form-item>
-        <el-form-item label="妯″瀷绫诲瀷" prop="modelType">
-          <el-select v-model="form.modelType" placeholder="璇烽�夋嫨妯″瀷绫诲瀷" v-if="addOpt">
-            <el-option
-                v-for="dict in modelTypeOptions"
-                :key="dict.dictValue"
-                :label="dict.dictLabel"
-                :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-          <span v-if="!addOpt">{{ this.selectDictLabel(this.modelTypeOptions, this.form.modelType) }}</span>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {addModel, delModel, getModel, listModel, updateModel} from "@/api/basicsetting/model";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  mixins: [mixins],
-  data() {
-    return {
-      height:null,
-      // 閬僵灞�
-      loading: true,
-      // 妯″瀷琛ㄦ牸鏁版嵁
-      modelList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏌ヨ鍙傛暟
-      queryParams: {},
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        modelCode: [
-          {required: true, message: "妯″瀷缂栫爜涓嶈兘涓虹┖", trigger: "blur"},
-          {min: 2, max: 20, message: '闀垮害鍦� 2 鍒� 20 涓瓧绗�', trigger: 'blur'},
-          {pattern: /^[a-zA-Z][A-Za-z0-9_-]+$/, message: '蹇呴』涓烘暟瀛椼�佸瓧姣嶃��- 鎴朹 锛屼笖棣栧瓧绗﹀彧鑳戒负瀛楁瘝'}
-        ], modelName: [
-          {required: true, message: "妯″瀷鍚嶇О涓嶈兘涓虹┖", trigger: "blur"},
-          {min: 2, max: 20, message: '闀垮害鍦� 2 鍒� 20 涓瓧绗�', trigger: 'blur'}
-        ], modelType: [
-          {required: true, message: "蹇呴』閫夋嫨妯″瀷绫诲瀷", trigger: "blur"}
-        ],
-      },
-      addOpt: true,
-      modelTypeOptions: [],
-      dictDefaultVal: undefined
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("sys_model_type").then(response => {
-      this.modelTypeOptions = response.data;
-      this.dictDefaultVal = this.modelTypeOptions.find(f => f.isDefault === 'Y');
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 190 + 'px';
-      this.height = window.innerHeight - 290;
-    },
-    /** 鏌ヨ妯″瀷鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listModel(this.queryParams).then(response => {
-        this.modelList = response.data;
-        this.loading = false;
-      });
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        modelCode: undefined,
-        modelName: undefined,
-        isShow: undefined,
-        modelType: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      if (this.dictDefaultVal) {
-        this.form.modelType = this.dictDefaultVal.dictValue;
-      }
-      this.addOpt = true;
-      this.open = true;
-      this.title = "娣诲姞妯″瀷";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      this.addOpt = false;
-      getModel(row.modelCode).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼妯″瀷";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (!this.addOpt) {
-            updateModel(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addModel(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      this.$confirm('鏄惁纭鍒犻櫎妯″瀷缂栧彿涓�"' + row.modelCode + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delModel(row.modelCode);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    modelTypeFormat(row, column) {
-      return this.selectDictLabel(this.modelTypeOptions, row.modelType);
-    },
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/basicsetting/modelNode/index.vue b/energy_management_ui/src/views/basicsetting/modelNode/index.vue
deleted file mode 100644
index 8ac5848..0000000
--- a/energy_management_ui/src/views/basicsetting/modelNode/index.vue
+++ /dev/null
@@ -1,139 +0,0 @@
-<template>
-  <el-row type="flex">
-    <el-col
-      :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-      v-show="!isCollapse"
-    >
-      <basic-container title="鏁版嵁妯″瀷绠$悊" :bodyStyle="bodyStyle">
-        <el-row :gutter="24">
-          <el-col :span="20">
-            <el-select
-              v-model="modelData"
-              placeholder="璇烽�夋嫨妯″瀷"
-              size="small"
-              filterable
-              @change="changeModel"
-            >
-              <el-option
-                v-for="model in modelInfoOptions"
-                :key="model.modelCode"
-                :label="model.modelName"
-                :value="model.modelCode"
-              />
-            </el-select>
-          </el-col>
-          <el-col :span="4" style="margin-bottom: 16px">
-            <el-button
-              icon="el-icon-setting"
-              circle
-              title="绠$悊妯″瀷"
-              style="float:right;padding:8px"
-              @click="manageModel"
-            ></el-button>
-          </el-col>
-        </el-row>
-        <ModelNode
-          ref="modelNode"
-          @changeNode="changeNode"
-          :auth="false"
-        ></ModelNode>
-      </basic-container>
-      <img
-        src="~@/assets/image/rectangle.png"
-        alt=""
-        class="shrink-col-block"
-        @click="toggleCollapse"
-      />
-    </el-col>
-    <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-    <el-col
-      :style="{
-        width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-        paddingLeft: isCollapse ? 0 : '14px'
-      }"
-    >
-      <basic-container
-        :title="currentNode ? currentNode.label + '--鑺傜偣閰嶇疆' : '鑺傜偣閰嶇疆'"
-        :bodyStyle="bodyStyleRight"
-      >
-        <ModelNodeSetting ref="modelNodeSetting" />
-      </basic-container>
-    </el-col>
-  </el-row>
-</template>
-<script>
-import ModelNode from "../modelNode/modelNode";
-import { listModel } from "@/api/basicsetting/model";
-import ModelNodeSetting from "./modelNodeSetting";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from "@/components/shrink/index.vue";
-
-export default {
-  components: { ModelNodeSetting, ModelNode, ShrinkCol },
-  created() {
-    listModel({ isShow: 1 }).then(response => {
-      this.modelInfoOptions = response.data;
-      if (this.modelInfoOptions.length > 0) {
-        this.modelData = this.modelInfoOptions[0].modelCode;
-        this.$refs.modelNode.getList(this.modelData);
-      }
-    });
-  },
-  mixins: [mixins],
-  data() {
-    return {
-      modelData: "",
-      modelInfoOptions: [],
-      isCollapse: false,
-      bodyStyleRight: {},
-      currentNode: ""
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 185 + "px"
-      };
-    },
-    changeNode: function(node) {
-      if (node) {
-        this.currentNode = node;
-      }
-      this.$refs.modelNodeSetting.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-@import "~@/assets/styles/variables.scss";
-.shrink-col-block {
-  position: absolute;
-  top: 20px;
-  right: 16px;
-  cursor: pointer;
-}
-::v-deep {
-  .el-tabs__item {
-    color: #fff;
-  }
-  .el-tabs__item.is-active {
-    color: $primary-color;
-  }
-  .el-collapse-item__header {
-    background-color: #061844;
-    color: #fff;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/modelNode/modelNode.vue b/energy_management_ui/src/views/basicsetting/modelNode/modelNode.vue
deleted file mode 100644
index 4331649..0000000
--- a/energy_management_ui/src/views/basicsetting/modelNode/modelNode.vue
+++ /dev/null
@@ -1,435 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-input
-      placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�"
-      prefix-icon="el-icon-search"
-      v-model="filterText"
-    >
-    </el-input>
-
-    <el-link
-      icon="el-icon-plus"
-      style="margin-top: 8px;width:100%"
-      @click="addNode"
-      v-if="nodeShowOpt && this.modelNodeData.length === 0"
-      >娣诲姞鏍硅妭鐐�
-    </el-link>
-    <el-tree
-      class="modelnode-tree"
-      :data="modelNodeData"
-      node-key="id"
-      highlight-current
-      :filter-node-method="filterNode"
-      :default-expanded-keys="treeExpandData"
-      :expand-on-click-node="false"
-      empty-text=""
-      ref="modelNodeTree"
-      @node-drop="handleDrop"
-      :allow-drop="allowDrop"
-      @node-click="changeNode"
-      :draggable="nodeShowOpt"
-      accordion
-    >
-      <span class="custom-tree-node" slot-scope="{ node, data }">
-        <span v-if="nodeShowOpt" id="a">
-          <el-tooltip
-            v-if="node.label.length > 8"
-            class="item"
-            effect="dark"
-            :content="node.label"
-            placement="top-end"
-          >
-            <span>{{ node.label.slice(0, 8) + "..." }}</span>
-          </el-tooltip>
-          <span v-else id="b">{{ node.label }}</span>
-        </span>
-        <span v-else id="c">
-          <el-tooltip
-            v-if="node.label.length > 11"
-            class="item"
-            effect="dark"
-            :content="node.label"
-            placement="top-end"
-          >
-            <span>
-              {{ node.label.slice(0, 11) + "..." }}
-            </span>
-          </el-tooltip>
-          <span v-else id="d">{{ node.label }}</span>
-        </span>
-        <span class="node-opt" v-if="nodeShowOpt">
-          <el-link
-            title="鏂板涓嬬骇鑺傜偣"
-            icon="el-icon-plus"
-            @click="() => addNode(node, data)"
-          >
-          </el-link>
-          <el-link
-            title="淇敼鑺傜偣"
-            icon="el-icon-edit"
-            @click="() => editNode(node, data)"
-          >
-          </el-link>
-          <el-link
-            title="鍒犻櫎鑺傜偣"
-            icon="el-icon-delete"
-            @click="() => delNode(node, data)"
-          >
-          </el-link>
-        </span>
-      </span>
-    </el-tree>
-    <!-- 娣诲姞鎴栦慨鏀规ā鍨嬭妭鐐瑰璇濇 -->
-    <el-dialog
-      :title="title"
-      :visible.sync="open"
-      width="500px"
-      :close-on-click-modal="false"
-    >
-      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
-        <el-form-item label="鐖剁骇鑺傜偣" v-if="addOpt">
-          <span>{{ currentNode ? currentNode.name : "" }}</span>
-        </el-form-item>
-        <el-form-item label="鎸囨爣鑺傜偣缂栫爜" prop="code">
-          <el-input
-            v-if="addOpt"
-            v-model="form.code"
-            placeholder="璇疯緭鍏ョ紪鐮�"
-          />
-          <span v-if="!addOpt">{{ form.code }}</span>
-        </el-form-item>
-        <el-form-item label="鎸囨爣鑺傜偣鍚嶇О" prop="name">
-          <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" />
-        </el-form-item>
-        <el-form-item label="鑺傜偣绫诲瀷" prop="nodeType">
-          <el-select
-            v-model="form.nodeCategory"
-            placeholder="璇烽�夎妭鐐圭被鍨�"
-            prop="nodeCategory"
-            clearable
-          >
-            <el-option
-              v-for="dict in nodeCategoryOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {
-  addModelNode,
-  delModelNode,
-  getModelNode,
-  hasEnergyIndex,
-  modelNodeTree,
-  updateModelNode,
-  updateModelNodeOrder
-} from "../../../api/basicsetting/modelNode";
-
-export default {
-  name: "ModelNode",
-  props: ["modelCode", "showOpt", "auth", "isSelectFirstLeaf"],
-  watch: {
-    filterText(val) {
-      this.$refs.modelNodeTree.filter(val);
-    }
-  },
-  data() {
-    return {
-      filterText: "",
-      // 閬僵灞�
-      loading: true,
-      // 妯″瀷鑺傜偣琛ㄦ牸鏁版嵁
-      modelNodeData: [],
-      nodeCategoryOptions: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      currentNode: undefined,
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        code: [
-          { required: true, message: "缂栫爜涓嶈兘涓虹┖", trigger: "blur" },
-          {
-            min: 2,
-            max: 20,
-            message: "闀垮害鍦� 2 鍒� 20 涓瓧绗�",
-            trigger: "blur"
-          },
-          {
-            pattern: /^[a-zA-Z][A-Za-z0-9_-]+$/,
-            message: "蹇呴』涓烘暟瀛椼�佸瓧姣嶃��- 鎴朹 锛屼笖棣栧瓧绗﹀彧鑳戒负瀛楁瘝"
-          }
-        ],
-        name: [
-          { required: true, message: "鍚嶇О涓嶈兘涓虹┖", trigger: "blur" },
-          { min: 2, max: 15, message: "闀垮害鍦� 2 鍒� 15 涓瓧绗�", trigger: "blur" }
-        ]
-      },
-      addOpt: true,
-      currentSelectNode: undefined,
-      treeExpandData: [],
-      currentModelCode: "",
-      nodeCategoryDefaultVal: "",
-      nodeShowOpt: true,
-      withAuth: false,
-      isFirstLeafNode: false // 閫変腑绗竴涓彾瀛愮粨鐐�
-    };
-  },
-  created() {
-    console.log("this.$props", this.$props);
-    let modelCode = this.$props.modelCode;
-    if (this.$props.auth !== undefined) {
-      this.withAuth = this.$props.auth;
-    }
-
-    if (modelCode) {
-      this.getList(modelCode);
-    }
-
-    this.nodeShowOpt =
-      this.$props.showOpt !== undefined ? this.$props.showOpt : true;
-    this.isFirstLeafNode =
-      this.$props.isSelectFirstLeaf !== undefined
-        ? this.$props.isSelectFirstLeaf
-        : false;
-  },
-  methods: {
-    filterNode(value, data) {
-      if (!value) {
-        return true;
-      }
-      return data.label.indexOf(value) !== -1;
-    },
-    /** 鏌ヨ妯″瀷鑺傜偣鍒楄〃 */
-    getList(modelCode) {
-      console.log("鏌ヨ妯″瀷鑺傜偣鍒楄〃", modelCode, this.modelCode);
-      this.currentModelCode = modelCode;
-      this.loading = true;
-
-      this.getDicts("sys_node_category").then(response => {
-        this.nodeCategoryOptions = response.data;
-        this.nodeCategoryDefaultVal = this.nodeCategoryOptions.find(
-          f => f.isDefault === "Y"
-        );
-      });
-
-      modelNodeTree({ modelCode: modelCode }, this.withAuth).then(response => {
-        this.modelNodeData = response.data;
-        this.loading = false;
-        let chooseNode = null;
-        if (this.modelNodeData.length > 0) {
-          // 閫変腑绗竴涓彾瀛愮粨鐐�
-          if (
-            this.modelNodeData[0].children &&
-            this.modelNodeData[0].children.length !== 0 &&
-            this.isFirstLeafNode
-          ) {
-            if (
-              this.modelNodeData[0].children[0].children &&
-              this.modelNodeData[0].children[0].children.length !== 0
-            ) {
-              chooseNode = this.modelNodeData[0].children[0].children[0];
-            } else {
-              chooseNode = this.modelNodeData[0].children[0];
-            }
-          } else {
-            chooseNode = this.modelNodeData[0];
-          }
-
-          this.treeExpandData.push(chooseNode.id);
-          this.$emit("changeNode", chooseNode);
-          this.$nextTick(() => {
-            this.$refs.modelNodeTree.setCurrentKey(chooseNode.id);
-          });
-        } else {
-          this.$emit("changeNode", "");
-        }
-      });
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.currentNode = undefined;
-      this.form = {
-        nodeId: undefined,
-        code: undefined,
-        name: undefined,
-        parentId: undefined,
-        address: undefined,
-        modelCode: undefined,
-        nodeCategory: undefined
-      };
-      this.resetForm("form");
-    },
-    addNode(node, data) {
-      this.reset();
-      this.addOpt = true;
-      if (data) {
-        this.currentSelectNode = data;
-        getModelNode(data.id).then(response => {
-          this.open = true;
-          this.title = "娣诲姞妯″瀷鑺傜偣";
-          this.currentNode = response.data;
-        });
-      } else {
-        this.open = true;
-      }
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    editNode(node, data) {
-      this.currentSelectNode = data;
-      this.reset();
-      this.addOpt = false;
-      getModelNode(data.id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼妯″瀷鑺傜偣";
-      });
-    },
-    delNode(node, data) {
-      if (data.children && data.children.length > 0) {
-        this.msgWarning("鍖呭惈瀛愯妭鐐癸紝涓嶈兘杩涜鍒犻櫎锛�");
-        return;
-      }
-
-      hasEnergyIndex(data.id).then(response => {
-        if (response.data) {
-          this.msgWarning("褰撳墠鑺傜偣涓嬪瓨鍦ㄦ寚鏍囷紝涓嶈兘杩涜鍒犻櫎锛�");
-        } else {
-          this.$confirm('鏄惁纭鍒犻櫎鍚嶄负"' + data.label + '"鐨勮妭鐐�?', "璀﹀憡", {
-            confirmButtonText: "纭畾",
-            cancelButtonText: "鍙栨秷",
-            type: "warning"
-          })
-            .then(function() {
-              return delModelNode(data.id);
-            })
-            .then(() => {
-              let parent = node.parent;
-              let children = parent.data.children || parent.data;
-              let index = children.findIndex(d => d.id === data.id);
-              children.splice(index, 1);
-
-              this.$nextTick(() => {
-                if (parent.data && parent.data.id) {
-                  this.$emit("changeNode", parent.data);
-                } else {
-                  this.$emit("changeNode", null);
-                }
-              });
-
-              this.msgSuccess("鍒犻櫎鎴愬姛");
-            })
-            .catch(function() {});
-        }
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.nodeId !== undefined) {
-            updateModelNode(this.form).then(response => {
-              if (response.code === 200) {
-                this.currentSelectNode.label = this.form.name;
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            this.form.parentId = this.currentNode
-              ? this.currentNode.nodeId
-              : "";
-            this.form.address =
-              (this.currentNode ? this.currentNode.address : "") +
-              this.form.code +
-              ",";
-            this.form.modelCode = this.currentModelCode;
-            addModelNode(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                const addedNode = response.data;
-                const newChild = {
-                  id: addedNode.nodeId,
-                  label: addedNode.name,
-                  children: []
-                };
-                if (this.currentSelectNode) {
-                  if (!this.currentSelectNode.children) {
-                    this.$set(this.currentSelectNode, "children", []);
-                  }
-                  this.currentSelectNode.children.push(newChild);
-                } else {
-                  this.modelNodeData.push(newChild);
-                }
-
-                this.treeExpandData.push(addedNode.nodeId);
-                this.$nextTick(() => {
-                  this.$refs.modelNodeTree.setCurrentNode(newChild);
-                  this.$emit("changeNode", newChild);
-                });
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    allowDrop(draggingNode, dropNode, ev) {
-      return dropNode.level !== 1;
-    },
-    handleDrop(draggingNode, dropNode, dropType, ev) {
-      let updateData = {
-        nodeId: draggingNode.data.id,
-        parentId: dropNode.parent.data.id,
-        children: []
-      };
-      for (let item of dropNode.parent.childNodes) {
-        updateData.children.push(item.data.id);
-      }
-      updateModelNodeOrder(updateData).then();
-    },
-    changeNode(data, node, ev) {
-      this.$emit("changeNode", data);
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-::v-deep {
-  .el-tree-node__content {
-    margin-top: 10px;
-    height: 35px;
-  }
-
-  .el-tree--highlight-current
-    .el-tree-node.is-current
-    > .el-tree-node__content {
-    background-color: #213d7a;
-    border: 1px solid #3d5b9b;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/modelNode/modelNodeSetting.vue b/energy_management_ui/src/views/basicsetting/modelNode/modelNodeSetting.vue
deleted file mode 100644
index 6ef6d48..0000000
--- a/energy_management_ui/src/views/basicsetting/modelNode/modelNodeSetting.vue
+++ /dev/null
@@ -1,397 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-tabs>
-      <el-tab-pane :disabled="disabledSetting">
-        <span slot="label"><i class="el-icon-setting"></i> 鑳芥簮銆佷骇鍝併�佽澶囬厤缃�</span>
-        <el-collapse>
-          <el-collapse-item title="鑳芥簮閰嶇疆淇℃伅" :disabled="disabledSetting">
-            <el-button style="float: right; padding: 8px; margin-left:8px" type="text"
-                       icon="el-icon-setting"
-                       @click="energySetting">
-              閰嶇疆鑳芥簮
-            </el-button>
-            <el-table v-loading="energyLoading" :data="settingEnergyList" border
-                      @selection-change="handleSelectionChange">
-              <el-table-column label="鑳芥簮缂栫爜" align="center" prop="enersno"/>
-              <el-table-column label="鑳芥簮鍚嶇О" align="center" prop="enername"/>
-              <el-table-column label="鎿嶄綔" width="70" align="center"
-                               class-name="small-padding fixed-width">
-                <template slot-scope="scope">
-                  <el-button
-                      size="mini"
-                      type="text"
-                      icon="el-icon-delete"
-                      @click="delEnergy(scope.row)"
-                  ></el-button>
-                </template>
-              </el-table-column>
-            </el-table>
-          </el-collapse-item>
-          <el-collapse-item title="浜у搧閰嶇疆淇℃伅" :disabled="disabledSetting">
-            <el-button style="float: right; padding: 8px; margin-left:8px" type="text"
-                       icon="el-icon-setting"
-                       @click="productSetting">
-              閰嶇疆浜у搧
-            </el-button>
-            <el-table v-loading="productLoading" :data="settingProductList" border
-                      @selection-change="handleSelectionChange">
-              <el-table-column label="浜у搧缂栫爜" align="center" prop="productsno"/>
-              <el-table-column label="浜у搧鍚嶇О" align="center" prop="productname"/>
-              <el-table-column label="鎿嶄綔" width="70" align="center"
-                               class-name="small-padding fixed-width">
-                <template slot-scope="scope">
-                  <el-button
-                      size="mini"
-                      type="text"
-                      icon="el-icon-delete"
-                      @click="delProduct(scope.row)"
-                  ></el-button>
-                </template>
-              </el-table-column>
-            </el-table>
-          </el-collapse-item>
-          <el-collapse-item title="璁惧閰嶇疆淇℃伅" :disabled="disabledSetting">
-            <el-button style="float: right; padding: 8px; margin-bottom:8px" type="text"
-                       icon="el-icon-setting"
-                       @click="deviceSetting">
-              閰嶇疆璁惧
-            </el-button>
-            <el-table v-loading="deviceLoading" :data="settingDeviceList" border
-                      @selection-change="handleSelectionChange">
-              <el-table-column label="鍣ㄥ叿缂栫爜" align="center" prop="code"/>
-              <el-table-column label="鍣ㄥ叿鍚嶇О" align="center" prop="meterName"/>
-              <el-table-column label="鎿嶄綔" width="70" align="center"
-                               class-name="small-padding fixed-width">
-                <template slot-scope="scope">
-                  <el-button
-                      size="mini"
-                      type="text"
-                      icon="el-icon-delete"
-                      @click="delDevice(scope.row)"
-                  ></el-button>
-                </template>
-              </el-table-column>
-            </el-table>
-          </el-collapse-item>
-        </el-collapse>
-      </el-tab-pane>
-      <el-tab-pane :disabled="disabledSetting">
-        <span slot="label"><i class="el-icon-setting"></i> 缁熻鎸囨爣</span>
-        <el-button style="float: right; padding: 8px; margin-bottom:8px" type="text"
-                   icon="el-icon-setting"
-                   @click="statisticIndexSetting">
-          閰嶇疆缁熻鎸囨爣
-        </el-button>
-        <el-table border v-loading="indexLoading" :data="settingStatisticIndexList"
-                  @select="handleSelectionChange">
-          <el-table-column label="鎸囨爣缂栫爜" align="center" prop="code"/>
-          <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="name"/>
-          <el-table-column label="鎿嶄綔" width="70" align="center"
-                           class-name="small-padding fixed-width">
-            <template slot-scope="scope">
-              <el-button
-                  size="mini"
-                  type="text"
-                  icon="el-icon-delete"
-                  @click="delIndex(scope.row,'statistic')"
-              ></el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-      </el-tab-pane>
-      <el-tab-pane :disabled="disabledSetting">
-        <span slot="label"><i class="el-icon-setting"></i> 閲囬泦鎸囨爣</span>
-        <el-button style="float: right; padding: 8px; margin-bottom:8px" type="text"
-                   icon="el-icon-setting"
-                   @click="collectIndexSetting">
-          閰嶇疆閲囬泦鐐�
-        </el-button>
-        <el-table border v-loading="indexLoading" :data="settingCollectIndexList"
-                  @select="handleSelectionChange">
-          <el-table-column label="鎸囨爣缂栫爜" align="center" prop="code"/>
-          <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="name"/>
-          <el-table-column label="鎿嶄綔" width="70" align="center"
-                           class-name="small-padding fixed-width">
-            <template slot-scope="scope">
-              <el-button
-                  size="mini"
-                  type="text"
-                  icon="el-icon-delete"
-                  @click="delIndex(scope.row,'collect')"
-              ></el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-      </el-tab-pane>
-    </el-tabs>
-    <!--閫夋嫨璁惧-->
-    <el-drawer title="閫夋嫨璁惧" :visible.sync="deviceDialog" direction="rtl" @open="showDeviceDialog"
-               size="45%">
-      <DeviceSetting ref="deviceSetting" @deviceConfirmSelect="deviceConfirmSelect"></DeviceSetting>
-    </el-drawer>
-    <!--閫夋嫨鑳芥簮-->
-    <el-drawer title="閫夋嫨鑳芥簮" :visible.sync="energyDialog" direction="rtl" @open="showEnergyDialog"
-               size="45%">
-      <EnergySetting ref="energySetting" @energyConfirmSelect="energyConfirmSelect"></EnergySetting>
-    </el-drawer>
-    <!--閫夋嫨浜у搧-->
-    <el-drawer title="閫夋嫨浜у搧" :visible.sync="productDialog" direction="rtl" @open="showProductDialog"
-               size="45%">
-      <ProductSetting ref="productSetting"
-                      @productConfirmSelect="productConfirmSelect"></ProductSetting>
-    </el-drawer>
-    <!--閫夋嫨缁熻鎸囨爣-->
-    <el-drawer title="閫夋嫨缁熻鎸囨爣" :visible.sync="statisticIndexDialog" direction="rtl"
-               @open="showStatisticIndexDialog"
-               size="55%">
-      <StatisticIndexSetting ref="statisticIndexSetting" indexType="STATISTIC"
-                             @statisticIndexConfirmSelect="statisticIndexConfirmSelect"></StatisticIndexSetting>
-    </el-drawer>
-    <!--閫夋嫨閲囬泦鎸囨爣-->
-    <el-drawer title="閫夋嫨閲囬泦鎸囨爣" :visible.sync="collectIndexDialog" direction="rtl"
-               @open="showCollectIndexDialog"
-               size="55%">
-      <StatisticIndexSetting ref="collectIndexSetting" indexType="COLLECT"
-                             @statisticIndexConfirmSelect="collectIndexConfirmSelect"></StatisticIndexSetting>
-    </el-drawer>
-  </div>
-</template>
-
-<script>
-import {
-  delDevice,
-  delEnergy,
-  delIndex,
-  delProduct,
-  getSettingDevice,
-  getSettingEnergy,
-  getSettingIndex,
-  getSettingProduct,
-  setDevice,
-  setEnergy,
-  setNodeToIndex,
-  setProduct
-} from '@/api/basicsetting/modelNode'
-import DeviceSetting from "../nodeSetting/deviceSetting";
-import EnergySetting from "../nodeSetting/energySetting";
-import ProductSetting from "../nodeSetting/productSetting";
-import CollectIndexSetting from "../nodeSetting/collectIndexSetting";
-import StatisticIndexSetting from "../nodeSetting/statisticIndexSetting";
-
-export default {
-  name: "ModelNodeSetting",
-  components: {
-    StatisticIndexSetting,
-    CollectIndexSetting,
-    ProductSetting,
-    EnergySetting,
-    DeviceSetting
-  },
-  data() {
-    return {
-      currentNode: '',
-      deviceDialog: false,
-      energyDialog: false,
-      productDialog: false,
-      collectIndexDialog: false,
-      statisticIndexDialog: false,
-      indexLoading: false,
-      deviceLoading: false,
-      energyLoading: false,
-      productLoading: false,
-      settingEnergyList: [],
-      settingDeviceList: [],
-      settingProductList: [],
-      settingCollectIndexList: [],
-      settingStatisticIndexList: [],
-      disabledSetting: true
-    }
-  },
-  methods: {
-    modelNodeChange(modelNode) {
-      this.settingDeviceList = [];
-      this.settingCollectIndexList = [];
-      this.settingStatisticIndexList = [];
-      this.disabledSetting = modelNode === undefined || modelNode === '' || modelNode === null;
-      if (modelNode) {
-        this.currentNode = modelNode;
-        this.deviceLoading = true;
-        getSettingDevice(modelNode.id).then((response) => {
-          if (response.code === 200) {
-            this.settingDeviceList = response.data;
-          } else {
-            this.$message.error(response.msg);
-          }
-          this.deviceLoading = false;
-        });
-
-        this.energyLoading = true;
-        getSettingEnergy(modelNode.id).then((response) => {
-          if (response.code === 200) {
-            this.settingEnergyList = response.data;
-          } else {
-            this.$message.error(response.msg);
-          }
-          this.energyLoading = false;
-        });
-
-        this.productLoading = true;
-        getSettingProduct(modelNode.id).then((response) => {
-          if (response.code === 200) {
-            this.settingProductList = response.data;
-          } else {
-            this.$message.error(response.msg);
-          }
-          this.productLoading = false;
-        });
-
-        this.indexLoading = true;
-        getSettingIndex(modelNode.id).then((response) => {
-          if (response.code === 200) {
-            let result = response.data;
-            this.settingCollectIndexList = result.filter(f => f.indexType === 'COLLECT');
-            this.settingStatisticIndexList = result.filter(f => f.indexType === 'STATISTIC');
-          } else {
-            this.$message.error(response.msg);
-          }
-          this.indexLoading = false;
-        });
-      }
-    },
-    deviceSetting() {
-      this.deviceDialog = true;
-    },
-    energySetting() {
-      this.energyDialog = true;
-    },
-    productSetting() {
-      this.productDialog = true;
-    },
-    collectIndexSetting() {
-      this.collectIndexDialog = true;
-    },
-    statisticIndexSetting() {
-      this.statisticIndexDialog = true;
-    },
-    showDeviceDialog() {
-      this.$nextTick(() => {
-        this.$refs.deviceSetting.init(this.settingDeviceList);
-      })
-    },
-    showEnergyDialog() {
-      this.$nextTick(() => {
-        this.$refs.energySetting.init(this.settingEnergyList);
-      })
-    },
-    showProductDialog() {
-      this.$nextTick(() => {
-        this.$refs.productSetting.init(this.settingProductList);
-      })
-    },
-    showCollectIndexDialog() {
-      this.$nextTick(() => {
-        this.$refs.collectIndexSetting.init(this.currentNode, this.settingCollectIndexList);
-      })
-    },
-    showStatisticIndexDialog() {
-      this.$nextTick(() => {
-        this.$refs.statisticIndexSetting.init(this.currentNode, this.settingStatisticIndexList);
-      })
-    },
-    deviceConfirmSelect(selectedDevice) {
-      this.settingDeviceList = selectedDevice;
-      let deviceIds = selectedDevice.map(item => item.id);
-      setDevice(this.currentNode.id, deviceIds).then((response) => {
-        if (response.code !== 200) {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    energyConfirmSelect(selectedEnergy) {
-      this.settingEnergyList = selectedEnergy;
-      let energyIds = selectedEnergy.map(item => item.enerid);
-      setEnergy(this.currentNode.id, energyIds).then((response) => {
-        if (response.code !== 200) {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    productConfirmSelect(selectedProduct) {
-      this.settingProductList = selectedProduct;
-      let productIds = selectedProduct.map(item => item.productid);
-      setProduct(this.currentNode.id, productIds).then((response) => {
-        if (response.code !== 200) {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    collectIndexConfirmSelect(selectedIndex) {
-      this.settingCollectIndexList = selectedIndex;
-      let indexIds = selectedIndex.map(item => item.indexId);
-      setNodeToIndex(this.currentNode.id, indexIds, "COLLECT").then((response) => {
-        if (response.code !== 200) {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    statisticIndexConfirmSelect(selectedIndex) {
-      this.settingStatisticIndexList = selectedIndex;
-      let indexIds = selectedIndex.map(item => item.indexId);
-      setNodeToIndex(this.currentNode.id, indexIds, "STATISTIC").then((response) => {
-        if (response.code !== 200) {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    handleSelectionChange() {
-    },
-    delDevice(row) {
-      delDevice(this.currentNode.id, row.id).then((response) => {
-        if (response.code === 200) {
-          this.settingDeviceList = this.settingDeviceList.filter(f => f.id !== row.id);
-        } else {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    delEnergy(row) {
-      delEnergy(this.currentNode.id, row.enerid).then((response) => {
-        if (response.code === 200) {
-          this.settingEnergyList = this.settingEnergyList.filter(f => f.enerid !== row.enerid);
-        } else {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    delProduct(row) {
-      delProduct(this.currentNode.id, row.productid).then((response) => {
-        if (response.code === 200) {
-          this.settingProductList = this.settingProductList.filter(
-              f => f.productid !== row.productid);
-        } else {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    delIndex(row, type) {
-      delIndex(this.currentNode.id, row.indexId).then((response) => {
-        if (response.code === 200) {
-          if (type === 'collect') {
-            this.settingCollectIndexList = this.settingCollectIndexList.filter(
-                f => f.indexId !== row.indexId);
-          } else if (type === 'statistic') {
-            this.settingStatisticIndexList = this.settingStatisticIndexList.filter(
-                f => f.indexId !== row.indexId);
-          }
-        } else {
-          this.$message.error(response.msg);
-        }
-      });
-    }
-  }
-}
-</script>
-
-<style scoped>
-
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/nodeSetting/collectIndexSetting.vue b/energy_management_ui/src/views/basicsetting/nodeSetting/collectIndexSetting.vue
deleted file mode 100644
index cfaa986..0000000
--- a/energy_management_ui/src/views/basicsetting/nodeSetting/collectIndexSetting.vue
+++ /dev/null
@@ -1,126 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="" prop="meterType" style="float: right">
-        <el-select v-model="queryParams.deviceId" size="small"
-                   @change="getList">
-          <el-option
-            v-for="device in settingDeviceList"
-            :key="device.id"
-            :label="device.meterName"
-            :value="device.id"
-          />
-        </el-select>
-      </el-form-item>
-    </el-form>
-
-    <el-table border v-loading="loading" :data="collectIndexList" @select="handleSelectionChange"
-              :header-cell-class-name="hideCheckAll"
-              ref="energySettingTable">
-      <el-table-column type="selection" width="55" align="center"/>
-      <el-table-column label="缂栫爜" align="center" prop="code"/>
-      <el-table-column label="鍚嶇О" align="center" prop="name"/>
-      <el-table-column label="鍗曚綅" align="center" prop="unitId" :formatter="unitIdFormat"/>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-  </div>
-</template>
-
-<script>
-  import {listCollectIndex} from "@/api/basicsetting/energyindex";
-  import {getSettingDevice, getSettingCollectIndex} from '@/api/basicsetting/modelNode'
-
-  export default {
-    name: "CollectIndexSetting",
-    data() {
-      return {
-        collectIndexList: [],
-        selectedCollectIndex: [],
-        settingDeviceList: [],
-        loading: false,
-        // 鎬绘潯鏁�
-        total: 0,
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          deviceId: undefined,
-        },
-        // 鍗曚綅瀛楀吀
-        unitIdOptions: []
-      }
-    },
-    created() {
-      this.getDicts("sys_unit").then(response => {
-        this.unitIdOptions = response.data;
-      });
-    },
-    methods: {
-      init(modelNode) {
-        getSettingCollectIndex(modelNode.id).then((response) => {
-          this.selectedCollectIndex = response.data;
-        }).then(() => {
-          getSettingDevice(modelNode.id).then((response) => {
-            if (response.code === 200) {
-              this.settingDeviceList = response.data;
-              if (this.settingDeviceList && this.settingDeviceList.length > 0) {
-                this.queryParams.deviceId = this.settingDeviceList[0].id;
-              }
-            } else {
-              this.$message.error(response.msg);
-            }
-
-            this.getList();
-          });
-        });
-      },
-      getList() {
-        this.loading = true;
-        listCollectIndex(this.queryParams).then(response => {
-          this.collectIndexList = response.rows;
-          this.total = response.total;
-          this.loading = false;
-          this.$nextTick(function () {
-            this.$refs.energySettingTable.data.forEach(rowData => {
-              let exist = this.selectedCollectIndex.filter(
-                f => f.indexId === rowData.indexId).length;
-              if (exist > 0) {
-                this.$refs.energySettingTable.toggleRowSelection(rowData, true);
-              }
-            });
-          });
-        });
-      },
-      // 澶氶�夋閫変腑鏁版嵁
-      handleSelectionChange(selection, row) {
-        let rowStatus = selection.filter(f => f.indexId === row.indexId).length;
-        if (rowStatus > 0) {
-          this.selectedCollectIndex.push({
-            "indexId": row.indexId,
-            "code": row.code,
-            "name": row.name
-          });
-        } else {
-          this.selectedCollectIndex = this.selectedCollectIndex.filter(
-            f => f.indexId !== row.indexId);
-        }
-
-        this.$emit('collectIndexConfirmSelect', this.selectedCollectIndex);
-      },
-      unitIdFormat(row) {
-        return this.selectDictLabel(this.unitIdOptions, row.unitId);
-      }
-    }
-  }
-</script>
-
-<style scoped>
-
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/nodeSetting/deviceSetting.vue b/energy_management_ui/src/views/basicsetting/nodeSetting/deviceSetting.vue
deleted file mode 100644
index cfdbeea..0000000
--- a/energy_management_ui/src/views/basicsetting/nodeSetting/deviceSetting.vue
+++ /dev/null
@@ -1,141 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="" prop="code" style="float: right">
-        <el-input
-          v-model="queryParams.code"
-          placeholder="杈撳叆缂栫爜鏌ヨ"
-          clearable
-          size="small"
-          @input="handleQuery"
-          @clear="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="" prop="meterType" style="float: right">
-        <el-select v-model="queryParams.meterType" placeholder="閫夋嫨绉嶇被鏌ヨ" clearable size="small"
-                   @change="handleQuery">
-          <el-option
-            v-for="dict in meterTypeOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-    </el-form>
-
-    <el-table border v-loading="loading" :data="implementList" @select="handleSelectionChange"
-              :header-cell-class-name="hideCheckAll"
-              ref="deviceSettingTable">
-      <el-table-column type="selection" width="55" align="center"/>
-      <el-table-column label="鍣ㄥ叿缂栫爜" align="center" prop="code"/>
-      <el-table-column label="鍣ㄥ叿鍚嶇О" align="center" prop="meterName"/>
-      <el-table-column label="鍣ㄥ叿绉嶇被" align="center" prop="meterType" :formatter="meterTypeFormat"/>
-      <el-table-column label="瑙勬牸鍨嬪彿" align="center" prop="modelNumber"/>
-      <el-table-column label="瀹夎浣嶇疆" align="center" prop="installactionLocation"/>
-      <el-table-column label="鐘舵��" align="center" prop="meterStatus" :formatter="meterStatusFormat"/>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-  </div>
-</template>
-
-<script>
-  import {listImplement,} from "@/api/meter/implement";
-
-  export default {
-    name: "DeviceSetting",
-    data() {
-      return {
-        // 閬僵灞�
-        loading: true,
-        // 閫変腑鏁扮粍
-        selectedDevice: [],
-        // 鎬绘潯鏁�
-        total: 0,
-        // 璁¢噺鍣ㄥ叿妗f缁存姢琛ㄦ牸鏁版嵁
-        implementList: [],
-        // 绉嶇被瀛楀吀
-        meterTypeOptions: [],
-        // 鐘舵�佸瓧鍏�
-        meterStatusOptions: [],
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          code: undefined,
-          meterType: undefined,
-        }
-      };
-    },
-    methods: {
-      init(currentSelected) {
-        this.queryParams = {
-          pageNum: 1,
-          pageSize: 10,
-          code: undefined,
-          meterType: undefined,
-        };
-        this.selectedDevice = currentSelected;
-        this.getList();
-        this.getDicts("sys_device_type").then(response => {
-          this.meterTypeOptions = response.data;
-        });
-        this.getDicts("meter_status").then(response => {
-          this.meterStatusOptions = response.data;
-        });
-      },
-      /** 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃 */
-      getList() {
-        this.loading = true;
-        listImplement(this.queryParams).then(response => {
-          this.implementList = response.rows;
-          this.total = response.total;
-          this.loading = false;
-          this.$nextTick(function () {
-            this.$refs.deviceSettingTable.data.forEach(rowData => {
-              let exist = this.selectedDevice.filter(f => f.id === rowData.id).length;
-              if (exist > 0) {
-                this.$refs.deviceSettingTable.toggleRowSelection(rowData, true);
-              }
-            });
-          });
-        });
-      },
-      // 绉嶇被瀛楀吀缈昏瘧
-      meterTypeFormat(row, column) {
-        return this.selectDictLabel(this.meterTypeOptions, row.meterType);
-      },
-      // 鐘舵�佸瓧鍏哥炕璇�
-      meterStatusFormat(row, column) {
-        return this.selectDictLabel(this.meterStatusOptions, row.meterStatus);
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.getList();
-      },
-      // 澶氶�夋閫変腑鏁版嵁
-      handleSelectionChange(selection, row) {
-        let rowStatus = selection.filter(f => f.id === row.id).length;
-        if (rowStatus > 0) {
-          this.selectedDevice.push({
-            "id": row.id,
-            "code": row.code,
-            "meterName": row.meterName
-          });
-        } else {
-          this.selectedDevice = this.selectedDevice.filter(f => f.id !== row.id);
-        }
-
-        this.$emit('deviceConfirmSelect', this.selectedDevice);
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/basicsetting/nodeSetting/energySetting.vue b/energy_management_ui/src/views/basicsetting/nodeSetting/energySetting.vue
deleted file mode 100644
index 48b8321..0000000
--- a/energy_management_ui/src/views/basicsetting/nodeSetting/energySetting.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-table border v-loading="loading" :data="energyList" @select="handleSelectionChange"
-              :header-cell-class-name="hideCheckAll"
-              ref="energySettingTable">
-      <el-table-column type="selection" width="55" align="center"/>
-      <el-table-column label="鑳芥簮缂栧彿" align="center" prop="enersno"/>
-      <el-table-column label="鑳芥簮鍚嶇О" align="center" prop="enername"/>
-      <el-table-column label="璁¢噺鍗曚綅" align="center" prop="muidName"/>
-      <el-table-column label="鑳芥簮绫诲埆" align="center" prop="enerclassname"/>
-    </el-table>
-  </div>
-</template>
-
-<script>
-  import {listEnergy} from "@/api/enerInfoManage/energy";
-
-  export default {
-    name: "EnergySetting",
-    data() {
-      return {
-        energyList: [],
-        selectedEnergy: [],
-        loading: false
-      }
-    },
-    methods: {
-      init(currentSelected) {
-        this.selectedEnergy = currentSelected;
-        this.getList();
-      },
-      getList() {
-        this.loading = true;
-
-        listEnergy({}).then(response => {
-          this.energyList = response.rows;
-          this.loading = false;
-          this.$nextTick(function () {
-            this.$refs.energySettingTable.data.forEach(rowData => {
-              let exist = this.selectedEnergy.filter(f => f.enerid === rowData.enerid).length;
-              if (exist > 0) {
-                this.$refs.energySettingTable.toggleRowSelection(rowData, true);
-              }
-            });
-          });
-        });
-      },
-      // 澶氶�夋閫変腑鏁版嵁
-      handleSelectionChange(selection, row) {
-        debugger
-        let rowStatus = selection.filter(f => f.enerid === row.enerid).length;
-        if (rowStatus > 0) {
-          this.selectedEnergy.push({
-            "enerid": row.enerid,
-            "enersno": row.enersno,
-            "enername": row.enername
-          });
-        } else {
-          this.selectedEnergy = this.selectedEnergy.filter(f => f.ennerid !== row.ennerid);
-        }
-
-        this.$emit('energyConfirmSelect', this.selectedEnergy);
-      }
-    }
-  }
-</script>
-
-<style scoped>
-
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/nodeSetting/productSetting.vue b/energy_management_ui/src/views/basicsetting/nodeSetting/productSetting.vue
deleted file mode 100644
index 688261b..0000000
--- a/energy_management_ui/src/views/basicsetting/nodeSetting/productSetting.vue
+++ /dev/null
@@ -1,76 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-table border v-loading="loading" :data="productList" @select="handleSelectionChange"
-              :header-cell-class-name="hideCheckAll"
-              ref="productSettingTable">
-      <el-table-column type="selection" width="55" align="center"/>
-      <el-table-column label="浜у搧缂栧彿" align="center" prop="productsno"/>
-      <el-table-column label="浜у搧鍚嶇О" align="center" prop="productname"/>
-      <el-table-column label="璁¢噺鍗曚綅" align="center" prop="muid" :formatter="muidFormat"/>
-    </el-table>
-  </div>
-</template>
-
-<script>
-  import {listProduct} from "@/api/enerInfoManage/product";
-
-  export default {
-    name: "ProductSetting",
-    data() {
-      return {
-        productList: [],
-        selectedProduct: [],
-        loading: false,
-        muidOptions: []
-      }
-    },
-    methods: {
-      init(currentSelected) {
-        this.selectedProduct = currentSelected;
-        this.getList();
-        this.getDicts("sys_unit").then(response => {
-          this.muidOptions = response.data;
-        });
-      },
-      getList() {
-        this.loading = true;
-
-        listProduct({}).then(response => {
-          this.productList = response.rows;
-          this.loading = false;
-          this.$nextTick(function () {
-            this.$refs.productSettingTable.data.forEach(rowData => {
-              let exist = this.selectedProduct.filter(f => f.productid === rowData.productid).length;
-              if (exist > 0) {
-                this.$refs.productSettingTable.toggleRowSelection(rowData, true);
-              }
-            });
-          });
-        });
-      },
-      // 澶氶�夋閫変腑鏁版嵁
-      handleSelectionChange(selection, row) {
-        let rowStatus = selection.filter(f => f.productid === row.productid).length;
-        if (rowStatus > 0) {
-          this.selectedProduct.push({
-            "productid": row.productid,
-            "productsno": row.productsno,
-            "productname": row.productname
-          });
-        } else {
-          this.selectedProduct = this.selectedProduct.filter(f => f.productid !== row.productid);
-        }
-
-        this.$emit('productConfirmSelect', this.selectedProduct);
-      },
-      // 璁¢噺鍗曚綅瀛楀吀缈昏瘧
-      muidFormat(row, column) {
-        return this.selectDictLabel(this.muidOptions, row.muid);
-      },
-    }
-  }
-</script>
-
-<style scoped>
-
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/nodeSetting/statisticIndexSetting.vue b/energy_management_ui/src/views/basicsetting/nodeSetting/statisticIndexSetting.vue
deleted file mode 100644
index 3c43c6f..0000000
--- a/energy_management_ui/src/views/basicsetting/nodeSetting/statisticIndexSetting.vue
+++ /dev/null
@@ -1,169 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" style="width: 260px">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            鎸囨爣搴�
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode"
-                     modelCode="statistic_index_model"
-                     :showOpt="false" :auth="false"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <el-main style="padding:8px">
-          <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px"
-                   class="query-form">
-            <el-form-item label="" prop="indexCategory">
-              <el-select v-model="queryParams.indexCategory" placeholder="璇烽�夋嫨鎸囨爣鍒嗙被" clearable
-                         style="width:160px"
-                         size="small"
-                         @change="handleQuery">
-                <el-option
-                  v-for="dict in indexCategoryOptions"
-                  :key="dict.dictValue"
-                  :label="dict.dictLabel"
-                  :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-            <el-form-item label="" prop="name">
-              <el-input
-                v-model="queryParams.name"
-                placeholder="璇疯緭鍏ユ寚鏍囧悕绉�/缂栫爜"
-                clearable
-                size="small"
-                @input="handleQuery"
-                @clear="handleQuery"
-                style="width:190px"
-              />
-            </el-form-item>
-          </el-form>
-
-          <el-table v-loading="loading" :data="energyindexList" border
-                    @select="handleSelectionChange"
-                    :header-cell-class-name="hideCheckAll" ref="energySettingTable">
-            <el-table-column type="selection" width="55" align="center"/>
-            <el-table-column label="鎸囨爣缂栫爜" align="center" prop="code"/>
-            <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="name"/>
-            <el-table-column label="鍗曚綅" align="center" prop="unitId" :formatter="unitIdFormat"/>
-          </el-table>
-
-          <pagination
-            v-show="total>0"
-            :total="total"
-            :page.sync="queryParams.pageNum"
-            :limit.sync="queryParams.pageSize"
-            @pagination="getList"
-          />
-
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import {listEnergyindex} from "@/api/basicsetting/energyindex";
-  import ModelNode from "../modelNode/modelNode";
-
-  export default {
-    name: "StatisticIndexSetting",
-    components: {ModelNode},
-    props: ["indexType"],
-    data() {
-      return {
-        // 鎬绘潯鏁�
-        total: 0,
-        // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-        energyindexList: [],
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          name: undefined,
-          code: undefined,
-          indexCategory: undefined,
-          nodeId: undefined,
-          indexType: ''
-        },
-        indexCategoryOptions: [],
-        unitIdOptions: [],
-        currentNode: undefined,
-        loading: false,
-        selectedStatisticIndex: []
-      }
-    },
-    created() {
-      this.getDicts("sys_index_category").then(response => {
-        this.indexCategoryOptions = response.data;
-      });
-      this.getDicts("sys_unit").then(response => {
-        this.unitIdOptions = response.data;
-      });
-    },
-    methods: {
-      init(modelNode, currentSelected) {
-        this.selectedStatisticIndex = currentSelected;
-      },
-      changeNode: function (modelNode) {
-        this.currentNode=modelNode;
-        this.getList();
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.getList();
-      },
-      /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-      getList() {
-       let modelNode = this.currentNode ;
-        if (modelNode) {
-          this.loading = true;
-          this.queryParams.nodeId = modelNode.id;
-          this.queryParams.indexType = this.$props.indexType;
-          listEnergyindex(this.queryParams).then(response => {
-            this.energyindexList = response.rows;
-            this.total = response.total;
-            this.loading = false;
-            this.$nextTick(function () {
-              this.$refs.energySettingTable.data.forEach(rowData => {
-                let exist = this.selectedStatisticIndex.filter(
-                  f => f.indexId === rowData.indexId).length;
-                if (exist > 0) {
-                  this.$refs.energySettingTable.toggleRowSelection(rowData, true);
-                }
-              });
-            });
-          });
-        } else {
-          this.energyindexList = [];
-        }
-      },
-      // 鍗曚綅瀛楀吀缈昏瘧
-      unitIdFormat(row, column) {
-        return this.selectDictLabel(this.unitIdOptions, row.unitId);
-      },
-      handleSelectionChange(selection, row) {
-        let rowStatus = selection.filter(f => f.indexId === row.indexId).length;
-        if (rowStatus > 0) {
-          this.selectedStatisticIndex.push({
-            "indexId": row.indexId,
-            "code": row.code,
-            "name": row.name
-          });
-        } else {
-          this.selectedStatisticIndex = this.selectedStatisticIndex.filter(
-            f => f.indexId !== row.indexId);
-        }
-
-        this.$emit('statisticIndexConfirmSelect', this.selectedStatisticIndex);
-      }
-    }
-  }
-</script>
-
-<style scoped>
-
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/stateIndex/index.vue b/energy_management_ui/src/views/basicsetting/stateIndex/index.vue
deleted file mode 100644
index ff9cee2..0000000
--- a/energy_management_ui/src/views/basicsetting/stateIndex/index.vue
+++ /dev/null
@@ -1,68 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            <el-select v-model="modelData" placeholder="璇烽�夋嫨妯″瀷"
-                       style="width:220px"
-                       size="small"
-                       @change="changeModel">
-              <el-option
-                v-for="model in modelInfoOptions"
-                :key="model.modelCode"
-                :label="model.modelName"
-                :value="model.modelCode"
-              />
-            </el-select>
-           <!-- <el-button icon="el-icon-setting" circle title="绠$悊妯″瀷" style="float:right;padding:8px"
-                       @click="manageModel"></el-button>-->
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <el-main style="padding:0">
-          <StateSetting ref="StateSetting"></StateSetting>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import StateSetting from "./indexStateSetting";
-  import ModelNode from "../../basicsetting/modelNode/modelNode";
-  import {listModel} from "@/api/basicsetting/model";
-
-  export default {
-    components: {StateSetting, ModelNode},
-    created() {
-      listModel({isShow: 1}).then(response => {
-        this.modelInfoOptions = response.data;
-        if (this.modelInfoOptions.length > 0) {
-          this.modelData = this.modelInfoOptions[0].modelCode;
-          this.$refs.modelNode.getList(this.modelData);
-        }
-      });
-    },
-
-    data() {
-      return {
-        modelData: '',
-        modelInfoOptions: []
-      }
-    },
-    methods: {
-      changeNode: function (node) {
-        this.$refs.StateSetting.modelNodeChange(node);
-      },
-      manageModel: function () {
-        this.$router.push('/model');
-      },
-      changeModel: function (item) {
-        this.$refs.modelNode.getList(item);
-      },
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/basicsetting/stateIndex/indexStateSetting.vue b/energy_management_ui/src/views/basicsetting/stateIndex/indexStateSetting.vue
deleted file mode 100644
index c53620a..0000000
--- a/energy_management_ui/src/views/basicsetting/stateIndex/indexStateSetting.vue
+++ /dev/null
@@ -1,247 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-card class="box-card">
-      <div slot="header" class="clearfix">
-        <span>{{currentNode?currentNode.label:''}}--鑺傜偣璁剧疆</span>
-      </div>
-      <el-tabs>
-        <el-tab-pane :disabled="disabledSetting">
-          <span slot="label"><i class="el-icon-s-data"></i>瀹炴椂鐩戞祴</span>
-              <el-table v-loading="energyLoading" :data="settingIndexList" border @selection-change="handleSelectionChange">
-                <el-table-column label="璁惧鍚嶇О"  align="center"  prop="indexId"/>
-                <el-table-column label="鎸囨爣缂栫爜"  align="center"  prop=""/>
-                <el-table-column label="鎸囨爣鍚嶇О"  align="center"  prop=""/>
-                <el-table-column label="寮�濮嬫椂闂�"  align="center"  prop=""/>
-                <el-table-column label="鐘舵��"      align="center"  prop=""/>
-            </el-table>
-        </el-tab-pane>
-        <el-tab-pane :disabled="disabledSetting">
-          <span slot="label"><i class="el-icon-reading"></i>鍘嗗彶鐩戞祴</span>
-          <StateIndex ref="stateIndex"></StateIndex>
-        </el-tab-pane>
-      </el-tabs>
-    </el-card>
-  </div>
-</template>
-<script>
-  import {
-    delDevice,
-    delEnergy,
-    delIndex,
-    delProduct,
-    getSettingDevice,
-    getSettingEnergy,
-    getSettingIndex,
-    getSettingProduct,
-    setNodeToIndex,
-    setDevice,
-    setEnergy,
-    setProduct
-  } from '@/api/basicsetting/modelNode'
-  import StateIndex from "./stateIndex";
-  import {List} from "@/api/basicsetting/state"
-
-  export default {
-    name: "stateIndex",
-    components: {StateIndex},
-    data() {
-      return {
-        currentNode: '',
-        deviceDialog: false,
-        energyDialog: false,
-        productDialog: false,
-        collectIndexDialog: false,
-        indexLoading: false,
-        deviceLoading: false,
-        energyLoading: false,
-        productLoading: false,
-        settingEnergyList: [],
-        settingDeviceList: [],
-        settingProductList: [],
-        settingIndexList: [],
-        disabledSetting: true,
-        nodeId:undefined
-      }
-    },
-    created() {
-      setInterval( this.getList() , 3000);
-
-    },
-    methods: {
-      modelNodeChange(modelNode) {
-        this.nodeId = modelNode.id;
-        this.getList(this.nodeId);
-        this.settingDeviceList = [];
-        this.settingIndexList = [];
-        this.disabledSetting = modelNode === undefined || modelNode === '' || modelNode === null;
-        if (modelNode) {
-          this.currentNode = modelNode;
-          this.deviceLoading = true;
-          getSettingDevice(modelNode.id).then((response) => {
-            if (response.code === 200) {
-              this.settingDeviceList = response.data;
-            } else {
-              this.$message.error(response.msg);
-            }
-            this.deviceLoading = false;
-          });
-
-          this.energyLoading = true;
-          getSettingEnergy(modelNode.id).then((response) => {
-            if (response.code === 200) {
-              this.settingEnergyList = response.data;
-            } else {
-              this.$message.error(response.msg);
-            }
-            this.energyLoading = false;
-          });
-
-          this.productLoading = true;
-          getSettingProduct(modelNode.id).then((response) => {
-            if (response.code === 200) {
-              this.settingProductList = response.data;
-            } else {
-              this.$message.error(response.msg);
-            }
-            this.productLoading = false;
-          });
-
-          this.indexLoading = true;
-          getSettingIndex(modelNode.id).then((response) => {
-            if (response.code === 200) {
-              this.settingIndexList = response.data;
-            } else {
-              this.$message.error(response.msg);
-            }
-            this.indexLoading = false;
-          });
-
-          // this.$refs.energyIndex.getList(modelNode);
-        }
-      },
-
-      getList(e)
-      {
-        List("STATISTIC",e).then((response) => {
-          if (response.code === 200) {
-            this.settingIndexList = response.data;
-          } else {
-            this.$message.error(response.msg);
-          }
-          this.indexLoading = false;
-        });
-
-      },
-      deviceSetting() {
-        this.deviceDialog = true;
-      },
-      energySetting() {
-        this.energyDialog = true;
-      },
-      productSetting() {
-        this.productDialog = true;
-      },
-      collectIndexSetting() {
-        this.collectIndexDialog = true;
-      },
-      showDeviceDialog() {
-        this.$nextTick(() => {
-          this.$refs.deviceSetting.init(this.settingDeviceList);
-        })
-      },
-      showEnergyDialog() {
-        this.$nextTick(() => {
-          this.$refs.energySetting.init(this.settingEnergyList);
-        })
-      },
-      showProductDialog() {
-        this.$nextTick(() => {
-          this.$refs.productSetting.init(this.settingProductList);
-        })
-      },
-      showCollectIndexDialog() {
-        this.$nextTick(() => {
-          this.$refs.collectIndexSetting.init(this.currentNode, this.settingIndexList);
-        })
-      },
-      deviceConfirmSelect(selectedDevice) {
-        this.settingDeviceList = selectedDevice;
-        let deviceIds = selectedDevice.map(item => item.id);
-        setDevice(this.currentNode.id, deviceIds).then((response) => {
-          if (response.code !== 200) {
-            this.$message.error(response.msg);
-          }
-        });
-      },
-      energyConfirmSelect(selectedEnergy) {
-        this.settingEnergyList = selectedEnergy;
-        let energyIds = selectedEnergy.map(item => item.enerid);
-        setEnergy(this.currentNode.id, energyIds).then((response) => {
-          if (response.code !== 200) {
-            this.$message.error(response.msg);
-          }
-        });
-      },
-      productConfirmSelect(selectedProduct) {
-        this.settingProductList = selectedProduct;
-        let productIds = selectedProduct.map(item => item.productid);
-        setProduct(this.currentNode.id, productIds).then((response) => {
-          if (response.code !== 200) {
-            this.$message.error(response.msg);
-          }
-        });
-      },
-      collectIndexConfirmSelect(selectedIndex) {
-        this.settingIndexList = selectedIndex;
-        let indexIds = selectedIndex.map(item => item.indexId);
-        setNodeToIndex(this.currentNode.id, indexIds).then((response) => {
-          if (response.code !== 200) {
-            this.$message.error(response.msg);
-          }
-        });
-      },
-      handleSelectionChange() {
-      },
-      delDevice(row) {
-        delDevice(this.currentNode.id, row.id).then((response) => {
-          if (response.code === 200) {
-            this.settingDeviceList = this.settingDeviceList.filter(f => f.id !== row.id);
-          } else {
-            this.$message.error(response.msg);
-          }
-        });
-      },
-      delEnergy(row) {
-        delEnergy(this.currentNode.id, row.enerid).then((response) => {
-          if (response.code === 200) {
-            this.settingEnergyList = this.settingEnergyList.filter(f => f.enerid !== row.enerid);
-          } else {
-            this.$message.error(response.msg);
-          }
-        });
-      },
-      delProduct(row) {
-        delProduct(this.currentNode.id, row.productid).then((response) => {
-          if (response.code === 200) {
-            this.settingProductList = this.settingProductList.filter(f => f.productid !== row.productid);
-          } else {
-            this.$message.error(response.msg);
-          }
-        });
-      },
-      delIndex(row) {
-        delIndex(this.currentNode.id, row.indexId).then((response) => {
-          if (response.code === 200) {
-            this.settingIndexList = this.settingIndexList.filter(f => f.indexId !== row.indexId);
-          } else {
-            this.$message.error(response.msg);
-          }
-        });
-      }
-    }
-  }
-</script>
-
-<style scoped>
-
-</style>
diff --git a/energy_management_ui/src/views/basicsetting/stateIndex/stateIndex.vue b/energy_management_ui/src/views/basicsetting/stateIndex/stateIndex.vue
deleted file mode 100644
index 851d89d..0000000
--- a/energy_management_ui/src/views/basicsetting/stateIndex/stateIndex.vue
+++ /dev/null
@@ -1,193 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" class="query-form">
-      <el-form-item label="鏃堕棿鏌ヨ">
-        <el-date-picker
-          v-model="dateRange"
-          size="small"
-          style="width: 240px"
-          value-format="yyyy-MM-dd"
-          type="daterange"
-          range-separator="-"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡"
-        ></el-date-picker>
-      </el-form-item>
-      <el-form-item label="璁惧鍚嶇О" prop="code">
-        <el-input
-          v-model="queryParams.code"
-          placeholder="璇疯緭鍏ヨ澶囧悕绉�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-          style="width:160px"
-        />
-      </el-form-item>
-      <el-form-item label="鎸囨爣鍚嶇О" prop="name">
-        <el-input
-          v-model="queryParams.name"
-          placeholder="璇疯緭鍏ユ寚鏍囧悕绉�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-          style="width:160px"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-      </el-form-item>
-    </el-form>
-    <el-table   :data="List"  v-loading="loading"    border @selection-change=""  >
-      <!--<el-table-column type="selection" width="55" align="center"/>-->
-      <el-table-column label="璁惧鍚嶇О"  align="center"  prop="" >111111111</el-table-column>
-      <el-table-column label="鎸囨爣缂栫爜"  align="center"  prop="" />
-      <el-table-column label="鎸囨爣鍚嶇О"  align="center"  prop="" />
-      <el-table-column label="鏃堕棿鐐�"    align="center"  prop="" />
-      <el-table-column label="鎸佺画鏃堕棿"    align="center"  prop="" />
-      <el-table-column label="鐘舵��"      align="center"  prop="" />
-    </el-table>
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-  </div>
-</template>
-<script>
-  import {
-    addEnergyindex,
-    delEnergyindex,
-    exportEnergyindex,
-    getEnergyindex,
-    listEnergyindex,
-    updateEnergyindex
-  } from "@/api/basicsetting/energyindex";
-
-  export default {
-    name: 'energyIndex',
-    data() {
-      return {
-        // 閬僵灞�
-        loading: false,
-        // 閫変腑鏁扮粍
-        ids: [],
-        dateRange: [],
-        names: [],
-        // 闈炲崟涓鐢�
-        single: true,
-        // 闈炲涓鐢�
-        multiple: true,
-        // 鎬绘潯鏁�
-        total: 0,
-        // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-        List: [],
-        // 寮瑰嚭灞傛爣棰�
-        title: "",
-        // 鏄惁鏄剧ず寮瑰嚭灞�
-        open: false,
-        // 涓婚敭瀛楀吀
-        indexIdOptions: [],
-        // 鎸囨爣鍚嶇О瀛楀吀
-        nameOptions: [],
-        // 鎸囨爣缂栫爜瀛楀吀
-        codeOptions: [],
-        // 绯荤粺鎸囨爣鍒嗙被锛�1-鑳芥簮绫伙紝2-浜у搧绫伙紝3-鑳芥晥绫伙紝4-缁忚惀绫伙紝5-鍏朵粬瀛楀吀
-        indexCategoryOptions: [],
-        // 澶囨敞瀛楀吀
-        remarkOptions: [],
-        // 鍗曚綅瀛楀吀
-        unitIdOptions: [],
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          name: undefined,
-          code: undefined,
-          indexCategory: undefined,
-          nodeId: undefined
-        },
-        // 琛ㄥ崟鍙傛暟
-        form: {},
-        // 琛ㄥ崟鏍¢獙
-        rules: {
-          name: [
-            {required: true, message: "鎸囨爣鍚嶇О涓嶈兘涓虹┖", trigger: "blur"},
-            {min: 2, max: 20, message: '闀垮害鍦� 2 鍒� 20 涓瓧绗�', trigger: 'blur'}
-          ], code: [
-            {required: true, message: "鎸囨爣缂栫爜涓嶈兘涓虹┖", trigger: "blur"},
-            {min: 2, max: 20, message: '闀垮害鍦� 2 鍒� 20 涓瓧绗�', trigger: 'blur'},
-            {pattern: /^[a-zA-Z][A-Za-z0-9_-]+$/, message: '蹇呴』涓烘暟瀛椼�佸瓧姣嶃��- 鎴朹 锛屼笖棣栧瓧绗﹀彧鑳戒负瀛楁瘝'}
-          ], indexCategory: [
-            {required: true, message: "璇烽�夋嫨鎸囨爣鍒嗙被", trigger: "blur"}
-          ]
-        },
-        currentNode: undefined,
-        indexCategoryDefaultVal: undefined,
-        unitDefaultVal: undefined
-      };
-    },
-
-    created() {
-     /*  this.getList();*/
-      this.getDicts("sys_index_category").then(response => {
-        this.indexCategoryOptions = response.data;
-        this.indexCategoryDefaultVal = this.indexCategoryOptions.find(f => f.isDefault === 'Y');
-      });
-      this.getDicts("sys_unit").then(response => {
-        this.unitIdOptions = response.data;
-        this.unitDefaultVal = this.unitIdOptions.find(f => f.isDefault === 'Y');
-      });
-    },
-    methods: {
-      /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-      getList(modelNode) {
-        this.currentNode = modelNode;
-        if (modelNode) {
-          this.loading = true;
-          this.queryParams.nodeId = modelNode.id;
-          listEnergyindex(this.queryParams).then(response => {
-            this.List = response.rows;
-            this.total = response.total;
-            this.loading = false;
-          });
-        } else {
-          this.List = [];
-        }
-
-      },
-      // 绯荤粺鎸囨爣鍒嗙被锛�1-鑳芥簮绫伙紝2-浜у搧绫伙紝3-鑳芥晥绫伙紝4-缁忚惀绫伙紝5-鍏朵粬瀛楀吀缈昏瘧
-      indexCategoryFormat(row, column) {
-        return this.selectDictLabel(this.indexCategoryOptions, row.indexCategory);
-      },
-
-      // 鍗曚綅瀛楀吀缈昏瘧
-      unitIdFormat(row, column) {
-        return this.selectDictLabel(this.unitIdOptions, row.unitId);
-      },
-      // 鍙栨秷鎸夐挳
-      cancel() {
-        this.open = false;
-        this.reset();
-      },
-      // 琛ㄥ崟閲嶇疆
-      reset() {
-        this.form = {
-          indexId: undefined,
-          name: undefined,
-          code: undefined,
-          indexCategory: undefined,
-          remark: undefined,
-          unitId: undefined
-        };
-        this.resetForm("form");
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.getList(this.currentNode);
-      },
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/basicsetting/statetype/index.vue b/energy_management_ui/src/views/basicsetting/statetype/index.vue
deleted file mode 100644
index 834eb26..0000000
--- a/energy_management_ui/src/views/basicsetting/statetype/index.vue
+++ /dev/null
@@ -1,308 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鐘舵�佸悕绉�" prop="stateName">
-        <el-input
-          v-model="queryParams.stateName"
-          placeholder="璇疯緭鍏ョ姸鎬佸悕绉�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['basicsetting:statetype:add']"
-        >鏂板</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['basicsetting:statetype:edit']"
-        >淇敼</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['basicsetting:statetype:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-    </el-row>
-
-    <el-table v-loading="loading" :data="statetypeList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="鐘舵�佸悕绉�" align="center" prop="stateName" />
-      <el-table-column label="鐘舵�佺紪鐮�" align="center" prop="stateCode" />
-      <el-table-column label="鑹插彿" align="center" prop="colorNumber"  >
-        <template slot-scope="scope">
-          <el-tag :color="scope.row.colorNumber"  disable-transitions></el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['basicsetting:statetype:edit']"
-          >淇敼</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['basicsetting:statetype:remove']"
-          >鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 娣诲姞鎴栦慨鏀圭郴缁熺姸鎬佺淮鎶ゅ璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="鐘舵�佸悕绉�" prop="stateName">
-          <el-input v-model="form.stateName" placeholder="璇疯緭鍏ョ姸鎬佸悕绉�" />
-        </el-form-item>
-        <el-form-item label="鐘舵�佺紪鐮�" prop="stateCode">
-          <el-input v-model="form.stateCode" placeholder="璇疯緭鍏ョ姸鎬佺紪鐮�" />
-        </el-form-item>
-        <el-form-item label="鑹插彿" prop="colorNumber">
-          <el-color-picker
-            v-model="form.colorNumber"
-            color-format="hex"
-            :predefine="predefineColors">
-          </el-color-picker>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listStatetype, getStatetype, delStatetype, addStatetype, updateStatetype, exportStatetype } from "@/api/basicsetting/statetype";
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 閫変腑鍚嶅瓧鏁扮粍
-      stateNames: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 绯荤粺鐘舵�佺淮鎶よ〃鏍兼暟鎹�
-      statetypeList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鐘舵�佷富閿甶d瀛楀吀
-      stateIdOptions: [],
-      // 鐘舵�佸悕绉板瓧鍏�
-      stateNameOptions: [],
-      // 鐘舵�佺紪鐮佸瓧鍏�
-      stateCodeOptions: [],
-      // 鑹插彿瀛楀吀
-      colorNumberOptions: [],
-      // 寤虹珛鏃堕棿瀛楀吀
-      createTimeOptions: [],
-      // 寤虹珛浜哄瓧鍏�
-      createByOptions: [],
-      // 淇敼鏃堕棿瀛楀吀
-      updateTimeOptions: [],
-      // 淇敼浜哄瓧鍏�
-      updateByOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        stateName: undefined,
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        stateName: [
-          { required: true, message: "鐘舵�佸悕绉颁笉鑳戒负绌�", trigger: "blur" }
-        ],
-        stateCode: [
-          { required: true, message: "鐘舵�佸悕绉颁笉鑳戒负绌�", trigger: "blur" }
-        ],
-        colorNumber: [
-          { required: true, message: "鑹插彿涓嶈兘涓虹┖", trigger: "blur" }
-        ],
-      },
-      //鑹插彿閫夋嫨鍣�
-      predefineColors: [
-        '#ff4500',
-        '#ff8c00',
-        '#ffd700',
-        '#90ee90',
-        '#00ced1',
-        '#1e90ff',
-        '#c71585'
-      ]
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    /** 鏌ヨ绯荤粺鐘舵�佺淮鎶ゅ垪琛� */
-    getList() {
-      this.loading = true;
-      listStatetype(this.queryParams).then(response => {
-        this.statetypeList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        stateId: undefined,
-        stateName: undefined,
-        stateCode: undefined,
-        colorNumber: undefined,
-        createTime: undefined,
-        createBy: undefined,
-        updateTime: undefined,
-        updateBy: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.stateId)
-      this.stateNames = selection.map(item => item.stateName)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞绯荤粺鐘舵�佺淮鎶�";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const stateId = row.stateId || this.ids
-      getStatetype(stateId).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼绯荤粺鐘舵�佺淮鎶�";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.stateId != undefined) {
-            updateStatetype(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addStatetype(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const stateIds = row.stateId || this.ids;
-      const stateLNames = row.stateName || this.stateNames;
-      this.$confirm('鏄惁纭鍒犻櫎绯荤粺鐘舵�佺淮鎶ょ姸鎬佸悕绉颁负"' + stateLNames + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return delStatetype(stateIds);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夌郴缁熺姸鎬佺淮鎶ゆ暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return exportStatetype(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function() {});
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/basicsetting/template/index.vue b/energy_management_ui/src/views/basicsetting/template/index.vue
deleted file mode 100644
index 11a351b..0000000
--- a/energy_management_ui/src/views/basicsetting/template/index.vue
+++ /dev/null
@@ -1,437 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form
-        :model="queryParams"
-        ref="queryForm"
-        label-width="72px"
-        class="special-form"
-      >
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="鍙傛暟缂栫爜" prop="code">
-              <el-input
-                v-model="queryParams.code"
-                placeholder="璇疯緭鍏ュ弬鏁扮紪鐮�"
-                clearable
-                size="small"
-                @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鍙傛暟鍚嶇О" prop="name">
-              <el-input
-                v-model="queryParams.name"
-                placeholder="璇疯緭鍏ュ弬鏁板悕绉�"
-                clearable
-                size="small"
-                @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="璁惧绫诲瀷" prop="deviceType">
-              <el-select
-                v-model="queryParams.deviceType"
-                placeholder="璇烽�夋嫨璁惧绫诲瀷"
-                clearable
-                size="small"
-                style="width: 100%"
-              >
-                <el-option
-                  v-for="dict in deviceTypeOptions"
-                  :key="dict.dictValue"
-                  :label="dict.dictLabel"
-                  :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item class="operation">
-              <el-button
-                type="primary"
-                icon="el-icon-search"
-                size="mini"
-                @click="handleQuery"
-                >鎼滅储</el-button
-              >
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-            type="primary"
-            icon="el-icon-plus"
-            size="mini"
-            @click="handleAdd"
-            v-hasPermi="['basicsetting:template:add']"
-            >鏂板
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            type="success"
-            icon="el-icon-edit"
-            size="mini"
-            :disabled="single"
-            @click="handleUpdate"
-            v-hasPermi="['basicsetting:template:edit']"
-            >淇敼
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            type="danger"
-            icon="el-icon-delete"
-            size="mini"
-            :disabled="multiple"
-            @click="handleDelete"
-            v-hasPermi="['basicsetting:template:remove']"
-            >鍒犻櫎
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            type="warning"
-            icon="el-icon-download"
-            size="mini"
-            @click="handleExport"
-            v-hasPermi="['basicsetting:template:export']"
-            >瀵煎嚭
-          </el-button>
-        </el-col>
-      </el-row>
-      <el-table
-        :height="height"
-        v-loading="loading"
-        :data="templateList"
-        border
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="鍙傛暟缂栫爜" align="center" prop="code" />
-        <el-table-column label="鍙傛暟鍚嶇О" align="center" prop="name" />
-        <el-table-column
-          label="鍗曚綅"
-          align="center"
-          prop="unit"
-          :formatter="unitFormat"
-        />
-        <el-table-column
-          label="璁惧绫诲瀷"
-          align="center"
-          prop="deviceType"
-          :formatter="deviceTypeFormat"
-        />
-        <el-table-column
-          label="鎿嶄綔"
-          width="150"
-          align="center"
-          class-name="small-padding fixed-width"
-        >
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="handleUpdate(scope.row)"
-              v-hasPermi="['basicsetting:template:edit']"
-              >淇敼
-            </el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['basicsetting:template:remove']"
-              >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-    </basic-container>
-    <!-- 娣诲姞鎴栦慨鏀归噰闆嗗弬鏁版ā鏉垮璇濇 -->
-    <el-dialog
-      :title="title"
-      :visible.sync="open"
-      width="500px"
-      :close-on-click-modal="false"
-    >
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="鍙傛暟缂栫爜" prop="code">
-          <el-input v-model="form.code" placeholder="璇疯緭鍏ュ弬鏁扮紪鐮�" />
-        </el-form-item>
-        <el-form-item label="鍙傛暟鍚嶇О" prop="name">
-          <el-input v-model="form.name" placeholder="璇疯緭鍏ュ弬鏁板悕绉�" />
-        </el-form-item>
-        <el-form-item label="鍗曚綅" prop="unit">
-          <el-select v-model="form.unit" placeholder="璇烽�夋嫨鍗曚綅" filterable>
-            <el-option
-              v-for="dict in unitOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="璁惧绫诲瀷" prop="deviceType">
-          <el-select v-model="form.deviceType" placeholder="璇烽�夋嫨璁惧绫诲瀷">
-            <el-option
-              v-for="dict in deviceTypeOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {
-  listTemplate,
-  getTemplate,
-  delTemplate,
-  addTemplate,
-  updateTemplate,
-  exportTemplate
-} from "@/api/basicsetting/template";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  mixins: [mixins],
-  data() {
-    return {
-      height: null,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 閫変腑鐨勯」缂栫爜
-      codes: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 閲囬泦鍙傛暟妯℃澘琛ㄦ牸鏁版嵁
-      templateList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鍙傛暟鎵�灞炵被鍨嬪瓧鍏�
-      deviceTypeOptions: [],
-      unitOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        code: undefined,
-        name: undefined,
-        deviceType: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        code: [
-          { required: true, message: "璇疯緭鍙傛暟缂栫爜", trigger: "blur" },
-          {
-            min: 2,
-            max: 10,
-            message: "闀垮害鍦� 2 鍒� 10 涓瓧绗�",
-            trigger: "blur"
-          },
-          {
-            pattern: /^[a-zA-Z][A-Za-z0-9]+$/,
-            message: "蹇呴』涓烘暟瀛楁垨瀛楁瘝锛屼笖棣栧瓧绗﹀彧鑳戒负瀛楁瘝"
-          }
-        ],
-        name: [
-          { required: true, message: "璇疯緭鍙傛暟鍚嶇О", trigger: "blur" },
-          { min: 2, max: 10, message: "闀垮害鍦� 2 鍒� 10 涓瓧绗�", trigger: "blur" }
-        ],
-        deviceType: [
-          { required: true, message: "璇烽�夋嫨璁惧绫诲瀷", trigger: "blur" }
-        ]
-      },
-      dictDefaultVal: undefined
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("sys_unit").then(response => {
-      this.unitOptions = response.data;
-    });
-    this.getDicts("sys_device_type").then(response => {
-      this.deviceTypeOptions = response.data;
-      this.dictDefaultVal = this.deviceTypeOptions.find(
-        f => f.isDefault === "Y"
-      );
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + "px",
-        overflow: "hidden"
-      };
-      this.height = window.innerHeight - 370;
-    },
-    /** 鏌ヨ閲囬泦鍙傛暟妯℃澘鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listTemplate(this.queryParams).then(response => {
-        this.templateList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鍙傛暟鎵�灞炵被鍨嬪瓧鍏哥炕璇�
-    deviceTypeFormat(row, column) {
-      return this.selectDictLabel(this.deviceTypeOptions, row.deviceType);
-    },
-    unitFormat(row, column) {
-      return this.selectDictLabel(this.unitOptions, row.unit);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        code: undefined,
-        name: undefined,
-        deviceType: undefined,
-        unit: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id);
-      this.codes = selection.map(item => item.code);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      if (this.dictDefaultVal) {
-        this.form.deviceType = this.dictDefaultVal.dictValue;
-      }
-      this.open = true;
-      this.title = "娣诲姞閲囬泦鍙傛暟妯℃澘";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids;
-      getTemplate(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼閲囬泦鍙傛暟妯℃澘";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updateTemplate(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addTemplate(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      const codes = row.code || this.codes;
-      this.$confirm(
-        '鏄惁纭鍒犻櫎閲囬泦鍙傛暟妯℃澘缂栧彿涓�"' + codes + '"鐨勬暟鎹」?',
-        "璀﹀憡",
-        {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }
-      )
-        .then(function() {
-          return delTemplate(ids);
-        })
-        .then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        })
-        .catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夐噰闆嗗弬鏁版ā鏉挎暟鎹」?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportTemplate(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/benchmarking/BenchmarkingManagement/benchmarking.vue b/energy_management_ui/src/views/benchmarking/BenchmarkingManagement/benchmarking.vue
deleted file mode 100644
index 86e34b6..0000000
--- a/energy_management_ui/src/views/benchmarking/BenchmarkingManagement/benchmarking.vue
+++ /dev/null
@@ -1,204 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鎶ヨ〃绫诲瀷">
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio v-for="dict in dateTypeOptions" :key="dict.dictValue" :label="dict.dictValue" >{{dict.dictLabel}}</el-radio>
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item label="缁熻鍖洪棿">
-        <el-date-picker clearable size="small" style="width: 200px"
-                        v-model="queryParams.dateTime"
-                        type="date"
-                        value-format="yyyy-MM-dd"
-                        placeholder="閫夋嫨鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['energyEenchmarking:energyEenchmarking:add']"
-        >淇濆瓨</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-table v-loading="loading" :data="energyEenchmarkingList" @selection-change="handleSelectionChange" ref="multipleTable">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="鍗曚綅鍚嶇О" align="center" prop="label">{{label}}</el-table-column>
-      <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="indexName"  />
-      <el-table-column label="鎸囨爣鍗曚綅" align="center" prop="unitId" :formatter="unitIdFormat" />
-      <el-table-column label="鏍囨潌鍊�" align="center" prop="value">
-        <template scope="scope">
-          <el-input size="mini"  v-model="scope.row.value"></el-input>
-        </template>
-      </el-table-column>
-      <el-table-column label="瀹為檯鍊�" align="center" prop="actualValue">
-        <template scope="scope">
-          <el-input size="mini"  v-model="scope.row.actualValue"></el-input>
-        </template>
-      </el-table-column>
-      <el-table-column label="鏍囨潌鑼冨洿" align="center" >
-        <template scope="scope">
-          <el-select v-model="scope.row.benchmarkingRange" placeholder="璇烽�夋嫨鏍囨潌鑼冨洿" clearable prop="benchmarkingRange">
-            <el-option
-              v-for="dict in benchmarkingRangeOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            />
-          </el-select>
-        </template>
-      </el-table-column>
-      <el-table-column label="鏍囨潌绫诲瀷" align="center" >
-        <template scope="scope" prop="benchmarkingType" :formatter="benchmarkingTypeFormat">
-          <el-select v-model="scope.row.benchmarkingType" placeholder="璇烽�夋嫨鏍囨潌绫诲瀷" clearable prop="benchmarkingType"  >
-            <el-option
-              v-for="dict in benchmarkingTypeOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            />
-          </el-select>
-        </template>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-  import { listBenchmarkingManagement,addBenchmarkingManagement} from "@/api/benchmarking/BenchmarkingManagement";
-
-  export default {
-  name: 'enchmarking',
-  name: 'Index',
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // energy_benchmarking琛ㄦ牸鏁版嵁
-      energyEenchmarkingList: [],
-      // 鏈夋晥鏈熷瓧鍏�
-      unitIdOptions:[],
-      dateTypeOptions:[],
-      // 鏍囨潌鑼冨洿瀛楀吀
-      benchmarkingRangeOptions: [],
-      // 鏍囨潌绫诲瀷瀛楀吀
-      benchmarkingTypeOptions: [],
-      dateRange:[],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        dateTime: undefined,
-        indexId: undefined,
-        timeType:"DAY"
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      label:"",
-
-    };
-  },
-  created() {
-    //this.getList();
-    this.getTime();
-    this.getDicts("sys_unit").then(response => {
-      this.unitIdOptions = response.data;
-    });
-    this.getDicts("energyPlan").then(response => {
-      this.dateTypeOptions = response.data;
-      this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-    });
-    this.getDicts("benchmarkingRange").then(response => {
-      this.benchmarkingRangeOptions = response.data;
-    });
-    this.getDicts("benchmarkingType").then(response => {
-      this.benchmarkingTypeOptions = response.data;
-    })
-  },
-    methods: {
-      /** 鏌ヨenergy_benchmarking鍒楄〃 */
-      modelNodeChange(modelNode) {
-        this.queryParams.indexId=modelNode.id;
-        this.label=modelNode.label;
-        this.getList(this.queryParams)
-      },
-      getList() {
-        this.loading = true;
-        listBenchmarkingManagement(this.queryParams).then(response => {
-          this.energyEenchmarkingList=response.data
-          this.loading = false;
-        });
-      },
-      // 鍗曚綅瀛楀吀缈昏瘧
-      unitIdFormat(row, column) {
-        return this.selectDictLabel(this.unitIdOptions, row.unitId);
-      },
-      benchmarkingTypeFormat(row, column) {
-        return this.selectDictLabel(this.benchmarkingTypeOptions, row.benchmarkingType);
-      },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.$nextTick(() => {
-        this.$refs['multipleTable'].data.forEach(rowData => {
-          rowData.timeType=this.queryParams.timeType
-          rowData.dateTime=this.queryParams.dateTime
-        });
-        this.form.configInfo=JSON.stringify( this.$refs['multipleTable'].data);
-        console.log(this.form.configInfo);
-        addBenchmarkingManagement(this.form.configInfo).then(response => {
-          if (response.code === 200) {
-            this.msgSuccess("淇濆瓨鎴愬姛");
-            this.getList();
-          } else {
-            this.msgError(response.msg);
-          }
-        })
-      });
-    },
-    getTime(){
-      var date = new Date()
-      var year = date.getFullYear()
-      var month = date.getMonth() + 1
-      var date = date.getDate()
-      month = month < 10 ? '0' + month : month
-      date = date < 10 ? '0' + date : date
-      this.queryParams.dateTime = year + '-' + month + '-' + date
-    },
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/benchmarking/BenchmarkingManagement/index.vue b/energy_management_ui/src/views/benchmarking/BenchmarkingManagement/index.vue
deleted file mode 100644
index 3ec2ce8..0000000
--- a/energy_management_ui/src/views/benchmarking/BenchmarkingManagement/index.vue
+++ /dev/null
@@ -1,56 +0,0 @@
-
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" :width="isCollapse?'0px':'20%'">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            鏍囨潌绠$悊
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false" :modelCode="modelCode"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <div style="cursor:pointer;" @click="toggleCollapse">
-          <img src="@/assets/image/configureChart.png" style="width: 100%;height: 100%">
-        </div>
-        <el-main style="padding:0">
-          <benchmarking ref="benchmarking" style="padding:10px"></benchmarking>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import benchmarking from "./benchmarking";
-  import ModelNode from "../../basicsetting/modelNode/modelNode";
-
-  export default {
-    components: {ModelNode,benchmarking},
-    created() {
-      this.modelCode=this.$route.query.modelCode;
-    },
-    data() {
-      return {
-        modelCode:undefined,
-        isCollapse: false,
-      }
-    },
-    methods: {
-      changeNode: function (node) {
-        this.$refs.benchmarking.modelNodeChange(node);
-      },
-      manageModel: function () {
-        this.$router.push('/model');
-      },
-      changeModel: function (item) {
-        this.$refs.modelNode.getList(item);
-      },
-      // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-      toggleCollapse () {
-        this.isCollapse = !this.isCollapse
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/benchmarking/phaseBenchmarking/LineChart.vue b/energy_management_ui/src/views/benchmarking/phaseBenchmarking/LineChart.vue
deleted file mode 100644
index b061d95..0000000
--- a/energy_management_ui/src/views/benchmarking/phaseBenchmarking/LineChart.vue
+++ /dev/null
@@ -1,142 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons");
-import resize from "../../dashboard/mixins/resize";
-const animationDuration = 6000;
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    chartData: {
-      type: Object
-    }
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  data() {
-    return {
-      chart: null,
-      seriesData: []
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, expecteData } = {}) {
-      this.chart.setOption({
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        title: {
-          x: "center",
-          y: "top",
-          textStyle: {
-            color: "#333"
-          }
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        grid: {
-          top: 40,
-          left: "2%",
-          right: "2%",
-          bottom: "3%",
-          containLabel: true
-        },
-        legend: {
-          data: ["鏍囨潌鍊�", "瀹為檯鍊�"],
-          left: "60%",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        xAxis: [
-          {
-            type: "category",
-            data: actualData,
-            axisPointer: {
-              type: "shadow"
-            }
-          }
-        ],
-        yAxis: [
-          {
-            //name: '缁煎悎鑳借��',
-            type: "value",
-            nameTextStyle: {
-              color: "#333"
-            },
-            axisLabel: {
-              formatter: "{value}"
-            },
-            axisTick: {
-              show: false
-            }
-          }
-        ],
-        series: [
-          {
-            name: "鏍囨潌鍊�",
-            type: "bar",
-            data: expectedData,
-            //stack: 'vistors',
-            animationDuration: 2800,
-            animationEasing: "quadraticOut"
-          },
-          {
-            name: "瀹為檯鍊�",
-            type: "bar",
-            data: expecteData,
-            animationDuration: 2800,
-            animationEasing: "quadraticOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/benchmarking/phaseBenchmarking/index.vue b/energy_management_ui/src/views/benchmarking/phaseBenchmarking/index.vue
deleted file mode 100644
index 9778c7f..0000000
--- a/energy_management_ui/src/views/benchmarking/phaseBenchmarking/index.vue
+++ /dev/null
@@ -1,56 +0,0 @@
-
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" :width="isCollapse?'0px':'20%'">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            闃舵瀵规爣
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false" :modelCode="modelCode"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <div style="cursor:pointer;" @click="toggleCollapse">
-          <img src="@/assets/image/configureChart.png" style="width: 100%;height: 100%">
-        </div>
-        <el-main style="padding:0">
-          <phaseBenchmarking ref="phaseBenchmarking" style="padding:10px"></phaseBenchmarking>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import phaseBenchmarking from "./phaseBenchmarking";
-  import ModelNode from "../../basicsetting/modelNode/modelNode";
-
-  export default {
-    components: {ModelNode,phaseBenchmarking},
-    created() {
-      this.modelCode=this.$route.query.modelCode;
-    },
-    data() {
-      return {
-        modelCode:undefined,
-        isCollapse: false,
-      }
-    },
-    methods: {
-      changeNode: function (node) {
-        this.$refs.phaseBenchmarking.modelNodeChange(node);
-      },
-      manageModel: function () {
-        this.$router.push('/model');
-      },
-      changeModel: function (item) {
-        this.$refs.modelNode.getList(item);
-      },
-      // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-      toggleCollapse () {
-        this.isCollapse = !this.isCollapse
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/benchmarking/phaseBenchmarking/phaseBenchmarking.vue b/energy_management_ui/src/views/benchmarking/phaseBenchmarking/phaseBenchmarking.vue
deleted file mode 100644
index b2932a3..0000000
--- a/energy_management_ui/src/views/benchmarking/phaseBenchmarking/phaseBenchmarking.vue
+++ /dev/null
@@ -1,209 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item label="鎶ヨ〃绫诲瀷">
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio
-            v-for="dict in dateTypeOptions"
-            :key="dict.dictValue"
-            :label="dict.dictValue"
-            @change="handleTime(dict.dictValue)"
-            >{{ dict.dictLabel }}</el-radio
-          >
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item label="缁熻鍖洪棿">
-        <el-date-picker
-          v-model="dateRange"
-          :type="dateTypes"
-          :value-format="valueFormat"
-          range-separator="鑷�"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡"
-        >
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="鎸囨爣鍚嶇О">
-        <el-select v-model="queryParams.indexId" placeholder="璇烽�夋嫨鎸囨爣">
-          <el-option
-            style="width: 150px"
-            v-for="dict in arraylist"
-            :key="dict.indexId"
-            :label="dict.name"
-            :value="dict.indexId"
-          ></el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >鎼滅储</el-button
-        >
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-          >閲嶇疆</el-button
-        >
-      </el-form-item>
-    </el-form>
-    <el-row style="padding:16px 16px 0;margin-bottom:32px;">
-      <line-chart ref="LineChart" :chart-data="lineChartData" />
-    </el-row>
-    <el-table :data="energyEenchmarkingList">
-      <el-table-column label="鏃ユ湡" align="center" prop="dateTime">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.dateTime) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="indexName" />
-      <el-table-column
-        label="鎸囨爣鍗曚綅"
-        align="center"
-        prop="unitId"
-        :formatter="unitIdFormat"
-      />
-      <el-table-column label="鏍囨潌鍊�" align="center" prop="value" />
-      <el-table-column label="瀹為檯鍊�" align="center" prop="actualValue" />
-    </el-table>
-  </div>
-</template>
-
-<script>
-import { listPhaseBenchmarking } from "@/api/benchmarking/phaseBenchmarking";
-import LineChart from "./LineChart";
-import { getSettingIndex } from "@/api/basicsetting/modelNode";
-export default {
-  components: { LineChart },
-  name: "enchmarking",
-  name: "Index",
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      dateRange: [],
-      // energy_benchmarking琛ㄦ牸鏁版嵁
-      energyEenchmarkingList: [],
-      arraylist: [],
-      // 鏈夋晥鏈熷瓧鍏�
-      unitIdOptions: [],
-      dateTypeOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        dateTime: undefined,
-        indexId: undefined,
-        timeType: "DAY"
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      label: "",
-      lineChartData: {},
-      dateTypes: "daterange",
-      valueFormat: "yyyy-MM-dd"
-    };
-  },
-  created() {
-    //this.getList();
-    this.getTime();
-    this.getDicts("sys_unit").then(response => {
-      this.unitIdOptions = response.data;
-    });
-    this.getDicts("energyPlan").then(response => {
-      this.dateTypeOptions = response.data;
-      this.queryParams.timeType = this.dateTypeOptions.find(
-        f => f.isDefault === "Y"
-      ).dictValue;
-    });
-  },
-  methods: {
-    /** 鏌ヨenergy_benchmarking鍒楄〃 */
-    modelNodeChange(modelNode) {
-      this.queryParams.indexId = modelNode.id;
-      this.label = modelNode.label;
-      this.getList(this.queryParams);
-      //鑾峰彇妯″瀷鑾峰彇鎸囨爣
-      getSettingIndex(modelNode.id).then(response => {
-        if (response.data.length > 0) {
-          this.arraylist = response.data;
-          this.queryParams.indexId = this.arraylist[0].indexId;
-        }
-      });
-    },
-    getList() {
-      listPhaseBenchmarking(
-        this.addDateRange(this.queryParams, this.dateRange)
-      ).then(response => {
-        this.energyEenchmarkingList = response.data;
-        let actualData = [];
-        let expectedData = [];
-        let expecteData = [];
-        let title = [];
-        this.energyEenchmarkingList.forEach(item => {
-          actualData.push(this.parseTime(item.dateTime));
-          expectedData.push(item.value);
-          expecteData.push(item.actualValue);
-        });
-        this.lineChartData.actualData = actualData;
-        this.lineChartData.expectedData = expectedData;
-        this.lineChartData.expecteData = expecteData;
-        this.$refs.LineChart.initChart(this.lineChartData);
-      });
-    },
-    // 鍗曚綅瀛楀吀缈昏瘧
-    unitIdFormat(row, column) {
-      return this.selectDictLabel(this.unitIdOptions, row.unitId);
-    },
-
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    getTime() {
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      let startTime = year + "-" + month + "-" + (date - 1);
-      let endTime = year + "-" + month + "-" + date;
-      this.dateRange = [startTime, endTime];
-    },
-    handleTime(date) {
-      if (date == "YEAR") {
-        (this.dateTypes = "year"), (this.valueFormat = "yyyy");
-      } else if (date == "MONTH") {
-        (this.dateTypes = "monthrange"), (this.valueFormat = "yyyy-MM");
-      } else {
-        (this.dateTypes = "daterange"), (this.valueFormat = "yyyy-MM-dd");
-      }
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/benchmarking/realTimeBenchmarking/LineChart.vue b/energy_management_ui/src/views/benchmarking/realTimeBenchmarking/LineChart.vue
deleted file mode 100644
index b061d95..0000000
--- a/energy_management_ui/src/views/benchmarking/realTimeBenchmarking/LineChart.vue
+++ /dev/null
@@ -1,142 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons");
-import resize from "../../dashboard/mixins/resize";
-const animationDuration = 6000;
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    chartData: {
-      type: Object
-    }
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  data() {
-    return {
-      chart: null,
-      seriesData: []
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, expecteData } = {}) {
-      this.chart.setOption({
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        title: {
-          x: "center",
-          y: "top",
-          textStyle: {
-            color: "#333"
-          }
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        grid: {
-          top: 40,
-          left: "2%",
-          right: "2%",
-          bottom: "3%",
-          containLabel: true
-        },
-        legend: {
-          data: ["鏍囨潌鍊�", "瀹為檯鍊�"],
-          left: "60%",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        xAxis: [
-          {
-            type: "category",
-            data: actualData,
-            axisPointer: {
-              type: "shadow"
-            }
-          }
-        ],
-        yAxis: [
-          {
-            //name: '缁煎悎鑳借��',
-            type: "value",
-            nameTextStyle: {
-              color: "#333"
-            },
-            axisLabel: {
-              formatter: "{value}"
-            },
-            axisTick: {
-              show: false
-            }
-          }
-        ],
-        series: [
-          {
-            name: "鏍囨潌鍊�",
-            type: "bar",
-            data: expectedData,
-            //stack: 'vistors',
-            animationDuration: 2800,
-            animationEasing: "quadraticOut"
-          },
-          {
-            name: "瀹為檯鍊�",
-            type: "bar",
-            data: expecteData,
-            animationDuration: 2800,
-            animationEasing: "quadraticOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/benchmarking/realTimeBenchmarking/index.vue b/energy_management_ui/src/views/benchmarking/realTimeBenchmarking/index.vue
deleted file mode 100644
index 186cdec..0000000
--- a/energy_management_ui/src/views/benchmarking/realTimeBenchmarking/index.vue
+++ /dev/null
@@ -1,56 +0,0 @@
-
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" :width="isCollapse?'0px':'20%'">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            瀹炴椂瀵规爣
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false" :modelCode="modelCode"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <div style="cursor:pointer;" @click="toggleCollapse">
-          <img src="@/assets/image/configureChart.png" style="width: 100%;height: 100%">
-        </div>
-        <el-main style="padding:0">
-          <realTimeBenchmarking ref="realTimeBenchmarking" style="padding:10px"></realTimeBenchmarking>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import realTimeBenchmarking from "./realTimeBenchmarking";
-  import ModelNode from "../../basicsetting/modelNode/modelNode";
-
-  export default {
-    components: {ModelNode,realTimeBenchmarking},
-    created() {
-      this.modelCode=this.$route.query.modelCode;
-    },
-    data() {
-      return {
-        modelCode:undefined,
-        isCollapse: false,
-      }
-    },
-    methods: {
-      changeNode: function (node) {
-        this.$refs.realTimeBenchmarking.modelNodeChange(node);
-      },
-      manageModel: function () {
-        this.$router.push('/model');
-      },
-      changeModel: function (item) {
-        this.$refs.modelNode.getList(item);
-      },
-      // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-      toggleCollapse () {
-        this.isCollapse = !this.isCollapse
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/benchmarking/realTimeBenchmarking/realTimeBenchmarking.vue b/energy_management_ui/src/views/benchmarking/realTimeBenchmarking/realTimeBenchmarking.vue
deleted file mode 100644
index 70a4e0b..0000000
--- a/energy_management_ui/src/views/benchmarking/realTimeBenchmarking/realTimeBenchmarking.vue
+++ /dev/null
@@ -1,113 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-row style="padding:16px 16px 0;margin-bottom:32px;">
-      <line-chart ref="LineChart" :chart-data="lineChartData" />
-    </el-row>
-    <el-table :data="energyEenchmarkingList">
-      <el-table-column label="鍗曚綅鍚嶇О" align="center" prop="label">{{
-        label
-      }}</el-table-column>
-      <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="indexName" />
-      <el-table-column
-        label="鎸囨爣鍗曚綅"
-        align="center"
-        prop="unitId"
-        :formatter="unitIdFormat"
-      />
-      <el-table-column label="鏍囨潌鍊�" align="center" prop="value" />
-      <el-table-column label="瀹為檯鍊�" align="center" prop="actualValue" />
-    </el-table>
-  </div>
-</template>
-
-<script>
-import { listRealTimeListrealTime } from "@/api/benchmarking/phaseBenchmarking";
-import LineChart from "./LineChart";
-export default {
-  components: { LineChart },
-  name: "enchmarking",
-  name: "Index",
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // energy_benchmarking琛ㄦ牸鏁版嵁
-      energyEenchmarkingList: [],
-      // 鏈夋晥鏈熷瓧鍏�
-      unitIdOptions: [],
-      dateTypeOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        dateTime: undefined,
-        indexId: undefined,
-        timeType: "DAY"
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      label: "",
-      lineChartData: {}
-    };
-  },
-  created() {
-    //this.getList();
-    this.getTime();
-    this.getDicts("sys_unit").then(response => {
-      this.unitIdOptions = response.data;
-    });
-    this.getDicts("energyPlan").then(response => {
-      this.dateTypeOptions = response.data;
-      this.queryParams.timeType = this.dateTypeOptions.find(
-        f => f.isDefault === "Y"
-      ).dictValue;
-    });
-  },
-  methods: {
-    /** 鏌ヨenergy_benchmarking鍒楄〃 */
-    modelNodeChange(modelNode) {
-      this.queryParams.indexId = modelNode.id;
-      this.label = modelNode.label;
-      this.getList(this.queryParams);
-    },
-    getList() {
-      listRealTimeListrealTime(this.queryParams).then(response => {
-        this.energyEenchmarkingList = response.data;
-        let actualData = [];
-        let expectedData = [];
-        let expecteData = [];
-        this.energyEenchmarkingList.forEach(item => {
-          actualData.push(item.indexName);
-          expectedData.push(item.value);
-          expecteData.push(item.actualValue);
-        });
-        this.lineChartData.actualData = actualData;
-        this.lineChartData.expectedData = expectedData;
-        this.lineChartData.expecteData = expecteData;
-        this.$refs.LineChart.initChart(this.lineChartData);
-      });
-    },
-    // 鍗曚綅瀛楀吀缈昏瘧
-    unitIdFormat(row, column) {
-      return this.selectDictLabel(this.unitIdOptions, row.unitId);
-    },
-    getTime() {
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      this.queryParams.dateTime = year + "-" + month + "-" + date;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/components/icons/element-icons.js b/energy_management_ui/src/views/components/icons/element-icons.js
deleted file mode 100644
index df72201..0000000
--- a/energy_management_ui/src/views/components/icons/element-icons.js
+++ /dev/null
@@ -1,74 +0,0 @@
-const elementIcons = [
-  'info',
-  'error',
-  'success',
-  'warning',
-  'question',
-  'back',
-  'arrow-left',
-  'arrow-down',
-  'arrow-right',
-  'arrow-up',
-  'caret-left',
-  'caret-bottom',
-  'caret-top',
-  'caret-right',
-  'd-arrow-left',
-  'd-arrow-right',
-  'minus',
-  'plus',
-  'remove',
-  'circle-plus',
-  'remove-outline',
-  'circle-plus-outline',
-  'close',
-  'check',
-  'circle-close',
-  'circle-check',
-  'circle-close-outline',
-  'circle-check-outline',
-  'zoom-out',
-  'zoom-in',
-  'd-caret',
-  'sort',
-  'sort-down',
-  'sort-up',
-  'tickets',
-  'document',
-  'goods',
-  'sold-out',
-  'news',
-  'message',
-  'date',
-  'printer',
-  'time',
-  'bell',
-  'mobile-phone',
-  'service',
-  'view',
-  'menu',
-  'more',
-  'more-outline',
-  'star-on',
-  'star-off',
-  'location',
-  'location-outline',
-  'phone',
-  'phone-outline',
-  'picture',
-  'picture-outline',
-  'delete',
-  'search',
-  'edit',
-  'edit-outline',
-  'rank',
-  'refresh',
-  'share',
-  'setting',
-  'upload',
-  'upload2',
-  'download',
-  'loading'
-]
-
-export default elementIcons
diff --git a/energy_management_ui/src/views/components/icons/index.vue b/energy_management_ui/src/views/components/icons/index.vue
deleted file mode 100644
index d3c9a71..0000000
--- a/energy_management_ui/src/views/components/icons/index.vue
+++ /dev/null
@@ -1,87 +0,0 @@
-<template>
-  <div class="icons-container">
-    <aside>
-      <a href="#" target="_blank">Add and use
-      </a>
-    </aside>
-    <el-tabs type="border-card">
-      <el-tab-pane label="Icons">
-        <div v-for="item of svgIcons" :key="item">
-          <el-tooltip placement="top">
-            <div slot="content">
-              {{ generateIconCode(item) }}
-            </div>
-            <div class="icon-item">
-              <svg-icon :icon-class="item" class-name="disabled" />
-              <span>{{ item }}</span>
-            </div>
-          </el-tooltip>
-        </div>
-      </el-tab-pane>
-      <el-tab-pane label="Element-UI Icons">
-        <div v-for="item of elementIcons" :key="item">
-          <el-tooltip placement="top">
-            <div slot="content">
-              {{ generateElementIconCode(item) }}
-            </div>
-            <div class="icon-item">
-              <i :class="'el-icon-' + item" />
-              <span>{{ item }}</span>
-            </div>
-          </el-tooltip>
-        </div>
-      </el-tab-pane>
-    </el-tabs>
-  </div>
-</template>
-
-<script>
-import svgIcons from './svg-icons'
-import elementIcons from './element-icons'
-
-export default {
-  name: 'Icons',
-  data() {
-    return {
-      svgIcons,
-      elementIcons
-    }
-  },
-  methods: {
-    generateIconCode(symbol) {
-      return `<svg-icon icon-class="${symbol}" />`
-    },
-    generateElementIconCode(symbol) {
-      return `<i class="el-icon-${symbol}" />`
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.icons-container {
-  margin: 10px 20px 0;
-  overflow: hidden;
-
-  .icon-item {
-    margin: 20px;
-    height: 85px;
-    text-align: center;
-    width: 100px;
-    float: left;
-    font-size: 30px;
-    color: #24292e;
-    cursor: pointer;
-  }
-
-  span {
-    display: block;
-    font-size: 16px;
-    margin-top: 10px;
-  }
-
-  .disabled {
-    pointer-events: none;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/components/icons/svg-icons.js b/energy_management_ui/src/views/components/icons/svg-icons.js
deleted file mode 100644
index 724cd8e..0000000
--- a/energy_management_ui/src/views/components/icons/svg-icons.js
+++ /dev/null
@@ -1,10 +0,0 @@
-const req = require.context('../../../assets/icons/svg', false, /\.svg$/)
-const requireAll = requireContext => requireContext.keys()
-
-const re = /\.\/(.*)\.svg/
-
-const svgIcons = requireAll(req).map(i => {
-  return i.match(re)[1]
-})
-
-export default svgIcons
diff --git a/energy_management_ui/src/views/comprehensiveStatistics/comprehensiveStatistics/BarChart.vue b/energy_management_ui/src/views/comprehensiveStatistics/comprehensiveStatistics/BarChart.vue
deleted file mode 100644
index cc9a0a7..0000000
--- a/energy_management_ui/src/views/comprehensiveStatistics/comprehensiveStatistics/BarChart.vue
+++ /dev/null
@@ -1,112 +0,0 @@
-<template>
-  <div :class="className" :style="{height:height,width:width}" />
-</template>
-
-<script>
-  import echarts from 'echarts'
-  require('echarts/theme/macarons') // echarts theme
-  import resize from '../../dashboard/mixins/resize'
-
-  export default {
-    mixins: [resize],
-    props: {
-      className: {
-        type: String,
-        default: 'chart'
-      },
-      width: {
-        type: String,
-        default: '100%'
-      },
-      height: {
-        type: String,
-        default: '300px'
-      },
-      autoResize: {
-        type: Boolean,
-        default: true
-      },
-      chartData: {
-        type: Object,
-        required: true
-      }
-    },
-    data() {
-      return {
-        chart: null
-      }
-    },
-    watch: {
-      chartData: {
-        deep: true,
-        handler(val) {
-          this.setOptions(val)
-        }
-      }
-    },
-    mounted() {
-      this.$nextTick(() => {
-        this.initChart()
-      })
-    },
-    beforeDestroy() {
-      if (!this.chart) {
-        return
-      }
-      this.chart.dispose()
-      this.chart = null
-    },
-    methods: {
-      initChart() {
-        this.chart = echarts.init(this.$el, 'macarons')
-        this.setOptions(this.chartData)
-      },
-      setOptions({ expectedData, actualData,title } = {}) {
-        this.chart.setOption({
-          title: {
-            text: title,
-            left: 'left',
-            textStyle: {
-              color: '#606266',
-            }
-          },
-          tooltip: {
-            trigger: 'axis',
-            axisPointer: { // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-              type: 'shadow' // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-            }
-          },
-          grid: {
-            top: 30,
-            left: '2%',
-            right: '2%',
-            bottom: '3%',
-            containLabel: true
-          },
-          xAxis: [{
-            type: 'category',
-            data: actualData,
-            axisTick: {
-              alignWithLabel: true
-            }
-          }],
-          yAxis: [{
-            type: 'value',
-            axisTick: {
-              show: false
-            }
-          }],
-          series: [{
-            name: title,
-            type: 'bar',
-            stack: 'vistors',
-            barWidth: '60%',
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: 'cubicInOut'
-          }]
-        });
-      }
-    }
-  }
-</script>
diff --git a/energy_management_ui/src/views/comprehensiveStatistics/comprehensiveStatistics/LineChart.vue b/energy_management_ui/src/views/comprehensiveStatistics/comprehensiveStatistics/LineChart.vue
deleted file mode 100644
index 4354cf8..0000000
--- a/energy_management_ui/src/views/comprehensiveStatistics/comprehensiveStatistics/LineChart.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: title,
-          left: "left",
-          textStyle: {
-            color: "#606266"
-          }
-        },
-        xAxis: {
-          data: actualData,
-          type: "category"
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 40,
-          containLabel: true
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "cross"
-          },
-          padding: [5, 10]
-        },
-        yAxis: {
-          axisTick: {
-            show: false
-          }
-        },
-        legend: {
-          data: [],
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        series: [
-          {
-            name: title,
-            itemStyle: {
-              normal: {
-                color: "#FF005A",
-                lineStyle: {
-                  color: "#FF005A",
-                  width: 2
-                }
-              }
-            },
-            smooth: true,
-            type: "line",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/comprehensiveStatistics/comprehensiveStatistics/comprehensive.vue b/energy_management_ui/src/views/comprehensiveStatistics/comprehensiveStatistics/comprehensive.vue
deleted file mode 100644
index d31dcaa..0000000
--- a/energy_management_ui/src/views/comprehensiveStatistics/comprehensiveStatistics/comprehensive.vue
+++ /dev/null
@@ -1,558 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item label="鑳芥簮绫诲瀷">
-        <el-select
-          v-model="queryParams.indexStorageId"
-          placeholder="璇烽�夋嫨鑳芥簮鍝佺"
-        >
-          <el-option
-            v-for="dict in indexCategoryOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          ></el-option>
-        </el-select>
-      </el-form-item>
-      <!--<el-form-item label="鎶ヨ〃绫诲瀷" >
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio v-for="dict in dateTypeOptions" :key="dict.dictValue" :label="dict.dictValue" @change="handleTime(dict.dictValue)">{{dict.dictLabel}}</el-radio>
-        </el-radio-group>
-      </el-form-item>-->
-      <el-form-item label="缁熻鏃堕棿">
-        <el-date-picker
-          clearable
-          size="small"
-          style="width: 200px"
-          v-model="queryParams.dataTime"
-          :type="dateTypes"
-          :value-format="valueFormat"
-          placeholder="閫夋嫨鏃ユ湡"
-        >
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >鏌ヨ</el-button
-        >
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-          >閲嶇疆</el-button
-        >
-        <!--<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport">瀵煎嚭</el-button>-->
-      </el-form-item>
-    </el-form>
-    <el-table
-      :data="energyList"
-      border
-      style="width: 100%; margin-top: 20px"
-      class="tableList"
-    >
-      <el-table-column label="鏇茬嚎閫夋嫨">
-        <template slot-scope="scope">
-          <el-button
-            icon="el-icon-search"
-            circle
-            @click="selectChange(scope.row.indexId)"
-            style="font-size: 10px"
-          ></el-button>
-        </template>
-      </el-table-column>
-      <el-table-column
-        prop="indexName"
-        align="center"
-        label="鑳芥簮鍚嶇О"
-        min-width="240px"
-      ></el-table-column>
-      <el-table-column label="1鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value1)
-        }}</template></el-table-column
-      >
-      <el-table-column label="2鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value2)
-        }}</template></el-table-column
-      >
-      <el-table-column label="3鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value3)
-        }}</template></el-table-column
-      >
-      <el-table-column label="4鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value4)
-        }}</template></el-table-column
-      >
-      <el-table-column label="5鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value5)
-        }}</template></el-table-column
-      >
-      <el-table-column label="6鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value6)
-        }}</template></el-table-column
-      >
-      <el-table-column label="7鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value7)
-        }}</template></el-table-column
-      >
-      <el-table-column label="8鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value8)
-        }}</template></el-table-column
-      >
-      <el-table-column label="9鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value9)
-        }}</template></el-table-column
-      >
-      <el-table-column label="10鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value10)
-        }}</template></el-table-column
-      >
-      <el-table-column label="11鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value11)
-        }}</template></el-table-column
-      >
-      <el-table-column label="12鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value12)
-        }}</template></el-table-column
-      >
-      <el-table-column label="13鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value13)
-        }}</template></el-table-column
-      >
-      <el-table-column label="14鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value14)
-        }}</template></el-table-column
-      >
-      <el-table-column label="15鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value15)
-        }}</template></el-table-column
-      >
-      <el-table-column label="16鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value16)
-        }}</template></el-table-column
-      >
-      <el-table-column label="17鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value17)
-        }}</template></el-table-column
-      >
-      <el-table-column label="18鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value18)
-        }}</template></el-table-column
-      >
-      <el-table-column label="19鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value19)
-        }}</template></el-table-column
-      >
-      <el-table-column label="10鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value20)
-        }}</template></el-table-column
-      >
-      <el-table-column label="21鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value21)
-        }}</template></el-table-column
-      >
-      <el-table-column label="22鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value22)
-        }}</template></el-table-column
-      >
-      <el-table-column label="23鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value23)
-        }}</template></el-table-column
-      >
-      <el-table-column label="24鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value24)
-        }}</template></el-table-column
-      >
-    </el-table>
-    <!--<div class="el-table el-table&#45;&#45;fit el-table&#45;&#45;scrollable-x el-table&#45;&#45;enable-row-hover el-table&#45;&#45;medium" >
-      <div class="el-table__body-wrapper is-scrolling-left">
-        <table class="el-table__body tableList" cellspacing="0" cellpadding="0" style="width: 1400px;" >
-          <tr v-for="item in tableHead">
-            <td>鏇茬嚎閫夋嫨</td>
-            <td>鑳芥簮鎸囨爣鍚嶇О</td>
-            <td v-if="item.value1 !=null">{{item.value1}}</td>
-            <td v-if="item.value2 !=null">{{item.value2}}</td>
-            <td v-if="item.value3 !=null">{{item.value3}}</td>
-            <td v-if="item.value4 !=null">{{item.value4}}</td>
-            <td v-if="item.value5 !=null">{{item.value5}}</td>
-            <td v-if="item.value6 !=null">{{item.value6}}</td>
-            <td v-if="item.value7 !=null">{{item.value7}}</td>
-            <td v-if="item.value8 !=null">{{item.value8}}</td>
-            <td v-if="item.value9 !=null">{{item.value9}}</td>
-            <td v-if="item.value10 !=null">{{item.value10}}</td>
-            <td v-if="item.value11 !=null">{{item.value11}}</td>
-            <td v-if="item.value12 !=null">{{item.value12}}</td>
-            <td v-if="item.value13 !=null">{{item.value13}}</td>
-            <td v-if="item.value14 !=null">{{item.value14}}</td>
-            <td v-if="item.value15 !=null">{{item.value15}}</td>
-            <td v-if="item.value16 !=null">{{item.value16}}</td>
-            <td v-if="item.value17 !=null">{{item.value17}}</td>
-            <td v-if="item.value18 !=null">{{item.value18}}</td>
-            <td v-if="item.value19 !=null">{{item.value19}}</td>
-            <td v-if="item.value20 !=null">{{item.value20}}</td>
-            <td v-if="item.value21 !=null">{{item.value21}}</td>
-            <td v-if="item.value22 !=null">{{item.value22}}</td>
-            <td v-if="item.value23 !=null">{{item.value23}}</td>
-            <td v-if="item.value24 !=null">{{item.value24}}</td>
-            <td v-if="item.value25 !=null">{{item.value25}}</td>
-            <td v-if="item.value26 !=null">{{item.value26}}</td>
-            <td v-if="item.value27 !=null">{{item.value27}}</td>
-            <td v-if="item.value28 !=null">{{item.value28}}</td>
-            <td v-if="item.value29 !=null">{{item.value29}}</td>
-            <td v-if="item.value30 !=null">{{item.value30}}</td>
-            <td v-if="item.value31 !=null">{{item.value31}}</td>
-          </tr>
-          <tr  v-for="(item ,index) in tableData">
-            <td><el-button icon="el-icon-search" circle @click="selectChange(item.indexId)" style="font-size: 10px"></el-button></td>
-            <td>{{item.indexName}}</td>
-            <td v-if="item.value1 !=null">{{numFilter(item.value1)}}</td>
-            <td v-if="item.value2 !=null">{{numFilter(item.value2)}}</td>
-            <td v-if="item.value3 !=null">{{numFilter(item.value3)}}</td>
-            <td v-if="item.value4 !=null">{{numFilter(item.value4)}}</td>
-            <td v-if="item.value5 !=null">{{numFilter(item.value5)}}</td>
-            <td v-if="item.value6 !=null">{{numFilter(item.value6)}}</td>
-            <td v-if="item.value7 !=null">{{numFilter(item.value7)}}</td>
-            <td v-if="item.value8 !=null">{{numFilter(item.value8)}}</td>
-            <td v-if="item.value9 !=null">{{numFilter(item.value9)}}</td>
-            <td v-if="item.value10 !=null">{{numFilter(item.value10)}}</td>
-            <td v-if="item.value11 !=null">{{numFilter(item.value11)}}</td>
-            <td v-if="item.value12 !=null">{{numFilter(item.value12)}}</td>
-            <td v-if="item.value13 !=null">{{numFilter(item.value13)}}</td>
-            <td v-if="item.value14 !=null">{{numFilter(item.value14)}}</td>
-            <td v-if="item.value15 !=null">{{numFilter(item.value15)}}</td>
-            <td v-if="item.value16 !=null">{{numFilter(item.value16)}}</td>
-            <td v-if="item.value17 !=null">{{numFilter(item.value17)}}</td>
-            <td v-if="item.value18 !=null">{{numFilter(item.value18)}}</td>
-            <td v-if="item.value19 !=null">{{numFilter(item.value19)}}</td>
-            <td v-if="item.value20 !=null">{{numFilter(item.value20)}}</td>
-            <td v-if="item.value21 !=null">{{numFilter(item.value21)}}</td>
-            <td v-if="item.value22 !=null">{{numFilter(item.value22)}}</td>
-            <td v-if="item.value23 !=null">{{numFilter(item.value23)}}</td>
-            <td v-if="item.value24 !=null">{{numFilter(item.value24)}}</td>
-            <td v-if="item.value25 !=null">{{numFilter(item.value25)}}</td>
-            <td v-if="item.value26 !=null">{{numFilter(item.value26)}}</td>
-            <td v-if="item.value27 !=null">{{numFilter(item.value27)}}</td>
-            <td v-if="item.value28 !=null">{{numFilter(item.value28)}}</td>
-            <td v-if="item.value29 !=null">{{numFilter(item.value29)}}</td>
-            <td v-if="item.value30 !=null">{{numFilter(item.value30)}}</td>
-            <td v-if="item.value31 !=null">{{numFilter(item.value31)}}</td>
-          </tr>
-        </table>
-      </div>
-    </div>-->
-    <el-row :gutter="32" style="margin:30px 0">
-      <el-col :xs="24" :sm="24" :lg="12">
-        <div class="chart-wrapper">
-          <line-chart ref="LineChart" :chart-data="lineChartData" />
-        </div>
-      </el-col>
-      <el-col :xs="24" :sm="24" :lg="12">
-        <div class="chart-wrapper">
-          <bar-chart ref="BarChart" :chart-data="lineChartData" />
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import {
-  getDataList,
-  exportList,
-  getlistChart
-} from "@/api/comprehensiveStatistics/comprehensive";
-import LineChart from "./LineChart";
-import BarChart from "./BarChart";
-export default {
-  components: {
-    LineChart,
-    BarChart
-  },
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      checked: false,
-      dateRange: [],
-      dateTypeOptions: [],
-      energyList: [],
-      tableData: [],
-      tableHead: [],
-      indexCategoryOptions: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        indexCode: undefined,
-        indexId: undefined,
-        dataTime: undefined,
-        timeType: "HOUR",
-        indexType: undefined,
-        indexStorageId: undefined
-      },
-      skinName: "",
-      dateTypes: "date",
-      valueFormat: "yyyy-MM-dd",
-      lineChartData: { expectedData: [], actualData: [] }
-    };
-  },
-  created() {
-    this.getDicts("report_form").then(response => {
-      this.dateTypeOptions = response.data;
-      this.queryParams.timeType = this.dateTypeOptions.find(
-        f => f.isDefault === "Y"
-      ).dictValue;
-    });
-    this.getConfigKey("comprehensive").then(response => {
-      this.skinName = response.msg;
-    });
-    this.getDicts("energy_type").then(response => {
-      this.indexCategoryOptions = response.data;
-      //this.queryParams.indexStorageId = this.indexCategoryOptions.find(f => f.isDefault === 'Y');
-    });
-    this.getList();
-    this.getTime();
-  },
-  methods: {
-    getList() {
-      this.queryParams.indexCode = this.$route.query.modelCode;
-      getDataList(this.queryParams).then(response => {
-        /*this.tableData=response.data.tabledata;
-        this.tableHead=response.data.tablehead;*/
-        this.energyList = response.data;
-      });
-    },
-    selectChange(data) {
-      this.queryParams.indexId = data;
-      getlistChart(this.queryParams).then(response => {
-        let actualData = [];
-        let expectedData = [];
-        let title = "";
-        response.data.forEach(item => {
-          expectedData.push(this.numFilter(item.value));
-          actualData.push(
-            item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length)
-          );
-          title = item.indexName;
-        });
-        this.lineChartData.actualData = actualData;
-        this.lineChartData.expectedData = expectedData;
-        this.lineChartData.title = title;
-        this.$refs.LineChart.initChart(this.lineChartData);
-        this.$refs.BarChart.initChart(this.lineChartData);
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-      this.selectChange();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭缁煎悎鑳借��?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportList(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-    getSummaries(param) {
-      const { columns, data } = param;
-      const sums = [];
-      columns.forEach((column, index) => {
-        if (index === 0) {
-          sums[index] = "";
-          return;
-        }
-        if (index === 1) {
-          sums[index] = "鍚堣";
-          return;
-        }
-        const values = data.map(item => Number(item[column.property]));
-        if (!values.every(value => isNaN(value))) {
-          sums[index] = values.reduce((prev, curr) => {
-            const value = Number(curr);
-            if (!isNaN(value)) {
-              return prev + curr;
-            } else {
-              return prev;
-            }
-          }, 0);
-          //sums[index];
-          sums[index] = this.numFilter(sums[index]);
-        } else {
-          sums[index] = "0";
-        }
-      });
-      return sums;
-    },
-    numFilter(value) {
-      // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = "";
-      if (!isNaN(value) && value !== "") {
-        realVal = parseFloat(value).toFixed(this.skinName);
-      } else {
-        realVal = "0";
-      }
-      return realVal;
-    },
-    getTime() {
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      this.queryParams.dataTime = year + "-" + month + "-" + date;
-      /*let startTime = year + '-' + month + '-' + date
-      let endTime = year + '-' + month + '-' + (date + 1)
-      this.dateRange = [startTime, endTime]*/
-    },
-
-    handleTime(date) {
-      if (date == "MONTH") {
-        (this.dateTypes = "year"), (this.valueFormat = "yyyy");
-      } else if (date == "DAY") {
-        (this.dateTypes = "month"), (this.valueFormat = "yyyy-MM");
-      } else {
-        (this.dateTypes = "date"), (this.valueFormat = "yyyy-MM-dd");
-      }
-    }
-  }
-};
-</script>
-<style lang="scss" scoped>
-.el-table__body {
-  border: 1px solid #000000 !important;
-}
-.el-table th.is-leaf,
-.el-table td {
-  border-bottom: 1px solid #000000 !important;
-  border-right: 1px solid #000000 !important;
-}
-.tableList tr td {
-  text-align: center;
-}
-.dashboard-editor-container {
-  padding: 32px;
-  // background-color: rgb(240, 242, 245);
-  position: relative;
-  .chart-wrapper {
-    padding: 16px 16px 0;
-    margin-bottom: 32px;
-  }
-}
-
-@media (max-width: 1024px) {
-  .chart-wrapper {
-    padding: 8px;
-  }
-}
-.live {
-  position: fixed;
-  right: 0px;
-  top: 70px;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  width: 100px;
-  height: 60px;
-  background-color: red;
-  animation: fade 600ms infinite;
-  -webkit-animation: fade 600ms infinite;
-}
-.live_content {
-  font-size: 18px;
-  color: white;
-  font-weight: bold;
-}
-.live_number {
-  font-size: 32px;
-  color: white;
-  font-weight: bolder;
-}
-@keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-@-webkit-keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/comprehensiveStatistics/comprehensiveStatistics/index.vue b/energy_management_ui/src/views/comprehensiveStatistics/comprehensiveStatistics/index.vue
deleted file mode 100644
index 131beec..0000000
--- a/energy_management_ui/src/views/comprehensiveStatistics/comprehensiveStatistics/index.vue
+++ /dev/null
@@ -1,57 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" :width="isCollapse?'0px':'280px'">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            缁煎悎鎸囨爣
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false" :modelCode="modelCode"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <div style="cursor:pointer;" @click="toggleCollapse">
-          <img src="@/assets/image/configureChart.png" style="width: 100%;height: 100%">
-        </div>
-        <el-main style="padding:0">
-          <comprehensive ref="comprehensive"></comprehensive>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import comprehensive from "./comprehensive";
-  import ModelNode from "../../basicsetting/modelNode/modelNode";
-
-  export default {
-    components: {comprehensive, ModelNode},
-    data() {
-      return {
-        modelData: '',
-        modelCode: undefined,
-        modelInfoOptions: [],
-        isCollapse: false,
-      }
-    },
-    created() {
-      this.modelCode=this.$route.query.modelCode;
-    },
-    methods: {
-      changeNode: function (node) {
-        this.$refs.comprehensive.modelNodeChange(node);
-      },
-      manageModel: function () {
-        this.$router.push('/model');
-      },
-      changeModel: function (item) {
-        this.$refs.modelNode.getList(item);
-      },
-      // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-      toggleCollapse () {
-        this.isCollapse = !this.isCollapse
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/comprehensiveStatistics/comprehensiveStatistics/workshop.vue b/energy_management_ui/src/views/comprehensiveStatistics/comprehensiveStatistics/workshop.vue
deleted file mode 100644
index a2722dd..0000000
--- a/energy_management_ui/src/views/comprehensiveStatistics/comprehensiveStatistics/workshop.vue
+++ /dev/null
@@ -1,133 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鎶ヨ〃绫诲瀷" >
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio v-for="dict in dateTypeOptions" :key="dict.dictValue" :label="dict.dictValue">{{dict.dictLabel}}</el-radio>
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item label="缁熻鍖洪棿" prop="dataTime">
-        <el-date-picker v-model="queryParams.dataTime" type="date" placeholder="閫夋嫨鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="缁熻鑼冨洿" prop="indexCode">
-        <el-select v-model="queryParams.indexCode" placeholder="璇烽�夋嫨缁熻鑼冨洿" clearable size="small">
-          <el-option
-            v-for="dict in statisticalRangeOptions"
-            :key="dict.id"
-            :label="dict.label"
-            :value="dict.id"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌ヨ</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-    <el-table :data="energyList" show-summary @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="80" align="center" />
-      <el-table-column label="鍚嶇О" align="center" prop="name"/>
-      <el-table-column label="鐢佃�楅噺(鍗冪摝鏃�)" align="center" prop="electricityQuantity" />
-      <el-table-column label="姘磋�楅噺锛堢珛鏂圭背锛�" align="center" prop="waterQuantity" />
-    </el-table>
-  </div>
-</template>
-
-<script>
-  import {modelNodeTree} from "../../../api/basicsetting/modelNode";
-  import {energyList} from "@/api/comprehensiveStatistics/comprehensive";
-  export default {
-    data() {
-      return {
-        // 閬僵灞�
-        //loading: true,
-        // 閫変腑鏁扮粍
-        ids: [],
-        // 闈炲崟涓鐢�
-        single: true,
-        // 闈炲涓鐢�
-        multiple: true,
-        // 鎬绘潯鏁�
-        total: 0,
-        dateTypeOptions:[],
-        energyList: [],
-        // 寮瑰嚭灞傛爣棰�
-        title: "",
-        // 鏄惁鏄剧ず寮瑰嚭灞�
-        open: false,
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          indexCode: undefined,
-          dataTime:undefined,
-          timeType:"DAY",
-        },
-        statisticalRangeOptions:[],
-      };
-    },
-    created() {
-      this.getList();
-      this.getTime();
-      this.getDicts("statisticalType").then(response => {
-        this.dateTypeOptions = response.data;
-        this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-      });
-    },
-    methods: {
-      getList() {
-        modelNodeTree({modelCode: this.$route.query.modelCode}).then(response => {
-          this.statisticalRangeOptions = response.data[0].children;
-          energyList(this.queryParams).then(response => {
-            this.energyList=response.data;
-          })
-        });
-      },
-      getTime(){
-        var date = new Date()
-        var year = date.getFullYear()
-        var month = date.getMonth() + 1
-        var date = date.getDate()
-        month = month < 10 ? '0' + month : month
-        date = date < 10 ? '0' + date : date
-        this.queryParams.dataTime = year + '-' + month + '-' + date
-      },
-      // 鍙栨秷鎸夐挳
-      cancel() {
-        this.open = false;
-        this.reset();
-      },
-      // 琛ㄥ崟閲嶇疆
-      reset() {
-        this.form = {
-          id: undefined,
-          name: undefined,
-          codeId: undefined,
-          unit: undefined,
-          range: undefined,
-          type: undefined,
-          value: undefined,
-          termValidity: undefined
-        };
-        this.resetForm("form");
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.getList();
-      },
-      /** 閲嶇疆鎸夐挳鎿嶄綔 */
-      resetQuery() {
-        this.resetForm("queryForm");
-        this.handleQuery();
-      },
-      // 澶氶�夋閫変腑鏁版嵁
-      handleSelectionChange(selection) {
-        this.ids = selection.map(item => item.id)
-        this.single = selection.length!=1
-        this.multiple = !selection.length
-      },
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/comprehensiveStatistics/dailyComprehensive/BarChart.vue b/energy_management_ui/src/views/comprehensiveStatistics/dailyComprehensive/BarChart.vue
deleted file mode 100644
index 8fc78de..0000000
--- a/energy_management_ui/src/views/comprehensiveStatistics/dailyComprehensive/BarChart.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "320px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: title,
-          left: "left",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 40,
-          containLabel: true
-        },
-        xAxis: [
-          {
-            type: "category",
-            data: actualData,
-            axisTick: {
-              alignWithLabel: true
-            }
-          }
-        ],
-        yAxis: [
-          {
-            type: "value",
-            axisTick: {
-              show: false
-            }
-          }
-        ],
-        series: [
-          {
-            name: title,
-            type: "bar",
-            stack: "vistors",
-            barWidth: "60%",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/comprehensiveStatistics/dailyComprehensive/LineChart.vue b/energy_management_ui/src/views/comprehensiveStatistics/dailyComprehensive/LineChart.vue
deleted file mode 100644
index 0a7ef18..0000000
--- a/energy_management_ui/src/views/comprehensiveStatistics/dailyComprehensive/LineChart.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "320px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: title,
-          left: "left",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        xAxis: {
-          data: actualData,
-          type: "category"
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 40,
-          containLabel: true
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "cross"
-          },
-          padding: [5, 10]
-        },
-        yAxis: {
-          axisTick: {
-            show: false
-          }
-        },
-        legend: {
-          data: [],
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        series: [
-          {
-            name: title,
-            itemStyle: {
-              normal: {
-                color: "#FF005A",
-                lineStyle: {
-                  color: "#FF005A",
-                  width: 2
-                }
-              }
-            },
-            smooth: true,
-            type: "line",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/comprehensiveStatistics/dailyComprehensive/index.vue b/energy_management_ui/src/views/comprehensiveStatistics/dailyComprehensive/index.vue
deleted file mode 100644
index 397c465..0000000
--- a/energy_management_ui/src/views/comprehensiveStatistics/dailyComprehensive/index.vue
+++ /dev/null
@@ -1,449 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form
-        :model="queryParams"
-        ref="queryForm"
-        label-width="68px"
-        class="special-form"
-      >
-        <el-row :gutter="24">
-          <el-col :span="5">
-            <el-form-item label="鑳芥簮绫诲瀷">
-              <el-select
-                v-model="queryParams.indexStorageId"
-                size="small"
-                placeholder="璇烽�夋嫨鑳芥簮鍝佺"
-                style="width: 100%"
-                clearable
-              >
-                <el-option
-                  v-for="dict in indexCategoryOptions"
-                  :key="dict.dictValue"
-                  :label="dict.dictLabel"
-                  :value="dict.dictValue"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <!-- <el-col :span="6">
-            <el-form-item label="鎸囨爣鍚嶇О">
-              <el-input
-                v-model="queryParams.indexName"
-                placeholder="璇疯緭鍏ユ寚鏍囧悕绉�"
-                clearable
-              ></el-input>
-            </el-form-item>
-          </el-col> -->
-          <el-col :span="5">
-            <el-form-item label="缁熻鏃堕棿">
-              <el-date-picker
-                clearable
-                size="small"
-                v-model="queryParams.dataTime"
-                type="date"
-                :clearable="false"
-                style="width: 100%"
-                value-format="yyyy-MM-dd"
-                placeholder="閫夋嫨鏃ユ湡"
-              >
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item class="" label-width="0">
-              <el-button
-                type="primary"
-                icon="el-icon-search"
-                size="mini"
-                @click="handleQuery"
-                >鏌ヨ</el-button
-              >
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-                >閲嶇疆</el-button
-              >
-              <el-button
-                type="warning"
-                icon="el-icon-download"
-                size="mini"
-                @click="handleExport"
-                >瀵煎嚭</el-button
-              >
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-table
-        :data="energyList"
-        border
-        style="width: 100%;"
-        class="tableList"
-        max-height="380px"
-      >
-        <el-table-column
-          fixed
-          prop="indexName"
-          label="鎸囨爣鍚嶇О"
-          min-width="200"
-        >
-          <template slot-scope="scope">
-            <div style="width: 100%; text-align: left">
-              <el-button
-                v-if="scope.row.indexId == queryParams.indexId"
-                icon="el-icon-search"
-                circle
-                @click="selectChange(scope.row)"
-                style="color: #fff; background: #478ef7;margin-right: 8px"
-              ></el-button>
-              <el-button
-                v-else
-                icon="el-icon-search"
-                circle
-                @click="selectChange(scope.row)"
-                style="margin-right: 8px;background: #999;"
-              ></el-button>
-              <el-tooltip
-                v-if="scope.row.indexName.length > 9"
-                class="item"
-                effect="dark"
-                :content="scope.row.indexName"
-                placement="top-end"
-              >
-                <span>
-                  {{ scope.row.indexName.substr(0, 9) + "..." }}
-                </span>
-              </el-tooltip>
-              <span v-else>{{ scope.row.indexName }}</span>
-            </div>
-          </template>
-        </el-table-column>
-        <el-table-column
-          v-for="index in 24"
-          :key="index"
-          :label="index - 1 + '鏃�'"
-          align="center"
-          min-width="100"
-        >
-          <template slot-scope="scope">{{
-            numFilter(scope.row[`value${index - 1}`])
-          }}</template>
-        </el-table-column>
-      </el-table>
-      <el-row :gutter="32" style="margin:30px 0">
-        <el-col :xs="24" :sm="24" :lg="12">
-          <div class="chart-wrapper">
-            <line-chart ref="LineChart" :chart-data="lineChartData" />
-          </div>
-        </el-col>
-        <el-col :xs="24" :sm="24" :lg="12">
-          <div class="chart-wrapper">
-            <bar-chart ref="BarChart" :chart-data="lineChartData" />
-          </div>
-        </el-col>
-      </el-row>
-    </basic-container>
-  </div>
-</template>
-
-<script>
-import {
-  getDataList,
-  getlistChart
-} from "@/api/comprehensiveStatistics/dailyComprehensive/dailyComprehensive";
-import LineChart from "./LineChart";
-import BarChart from "./BarChart";
-import mixins from "@/layout/mixin/getHeight";
-import { exportList } from "@/api/reportForm/dailyReport/dailyReport";
-
-export default {
-  components: {
-    LineChart,
-    BarChart
-  },
-  mixins: [mixins],
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      checked: false,
-      dateRange: [],
-      dateTypeOptions: [],
-      energyList: [],
-      tableData: [],
-      tableHead: [],
-      indexCategoryOptions: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        indexCode: undefined,
-        indexId: undefined,
-        indexName: undefined,
-        dataTime: undefined,
-        timeType: "HOUR",
-        indexType: undefined,
-        indexStorageId: undefined
-      },
-      skinName: "",
-      dateTypes: "date",
-      valueFormat: "yyyy-MM-dd",
-      lineChartData: { expectedData: [], actualData: [] }
-    };
-  },
-  created() {
-    this.getDicts("report_form").then(response => {
-      this.dateTypeOptions = response.data;
-      this.queryParams.timeType = this.dateTypeOptions.find(
-        f => f.isDefault === "Y"
-      ).dictValue;
-    });
-    this.getConfigKey("comprehensive").then(response => {
-      this.skinName = response.msg;
-    });
-    this.getDicts("energy_type").then(response => {
-      this.indexCategoryOptions = response.data;
-    });
-    this.getList();
-    this.getTime();
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 210 + "px";
-    },
-    getList() {
-      this.queryParams.indexCode = this.$route.query.modelCode;
-      getDataList(this.queryParams).then(response => {
-        this.energyList = response.data;
-        if (response.data && response.data.length !== 0) {
-          this.selectChange(response.data[0]);
-        }
-      });
-    },
-    selectChange(row) {
-      this.queryParams.indexId = row ? row.indexId : undefined;
-      getlistChart(this.queryParams).then(response => {
-        let actualData = [];
-        let expectedData = [];
-        let title = "";
-        response.data.forEach(item => {
-          expectedData.push(this.numFilter(item.value));
-          actualData.push(
-            item.timeCode.slice(
-              item.timeCode.length - 2,
-              item.timeCode.length
-            ) + "鏃�"
-          );
-          title = item.indexName + "(" + item.unitId + ")";
-        });
-        this.lineChartData.actualData = actualData;
-        this.lineChartData.expectedData = expectedData;
-        this.lineChartData.title = title;
-        this.$refs.LineChart.initChart(this.lineChartData);
-        this.$refs.BarChart.initChart(this.lineChartData);
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-      this.selectChange();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.queryParams = {
-        pageNum: 1,
-        pageSize: 10,
-        indexCode: undefined,
-        indexId: undefined,
-        indexName: undefined,
-        dataTime: undefined,
-        timeType: "HOUR",
-        indexType: undefined,
-        indexStorageId: undefined
-      };
-      this.getTime();
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭缁煎悎鑳借��?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportList(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-    getSummaries(param) {
-      const { columns, data } = param;
-      const sums = [];
-      columns.forEach((column, index) => {
-        if (index === 0) {
-          sums[index] = "";
-          return;
-        }
-        if (index === 1) {
-          sums[index] = "鍚堣";
-          return;
-        }
-        const values = data.map(item => Number(item[column.property]));
-        if (!values.every(value => isNaN(value))) {
-          sums[index] = values.reduce((prev, curr) => {
-            const value = Number(curr);
-            if (!isNaN(value)) {
-              return prev + curr;
-            } else {
-              return prev;
-            }
-          }, 0);
-          //sums[index];
-          sums[index] = this.numFilter(sums[index]);
-        } else {
-          sums[index] = "0";
-        }
-      });
-      return sums;
-    },
-    numFilter(value) {
-      // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = "";
-      if (!isNaN(value) && value !== "" && value !== null) {
-        realVal = parseFloat(value).toFixed(this.skinName);
-      } else {
-        realVal = "--";
-      }
-      return realVal;
-    },
-    getTime() {
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      this.queryParams.dataTime = year + "-" + month + "-" + date;
-    },
-
-    handleTime(date) {
-      if (date == "MONTH") {
-        (this.dateTypes = "year"), (this.valueFormat = "yyyy");
-      } else if (date == "DAY") {
-        (this.dateTypes = "month"), (this.valueFormat = "yyyy-MM");
-      } else {
-        (this.dateTypes = "date"), (this.valueFormat = "yyyy-MM-dd");
-      }
-    }
-  }
-};
-</script>
-<style lang="scss" scoped>
-.el-form-item {
-  margin-bottom: 0;
-}
-
-.dashboard-editor-container {
-  padding: 32px;
-  background-color: rgb(240, 242, 245);
-  position: relative;
-
-  .chart-wrapper {
-    background: #fff;
-    padding: 16px 16px 0;
-    margin-bottom: 32px;
-  }
-}
-
-@media (max-width: 1024px) {
-  .chart-wrapper {
-    padding: 8px;
-  }
-}
-
-.live {
-  position: fixed;
-  right: 0px;
-  top: 70px;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  width: 100px;
-  height: 60px;
-  background-color: red;
-  animation: fade 600ms infinite;
-  -webkit-animation: fade 600ms infinite;
-}
-
-.live_content {
-  font-size: 18px;
-  color: white;
-  font-weight: bold;
-}
-
-.live_number {
-  font-size: 32px;
-  color: white;
-  font-weight: bolder;
-}
-
-@keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-@-webkit-keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-
-///deep/ .tableList {
-//  .el-table__body-wrapper .el-table__body tr.hover-row > td {
-//    background-color: red !important
-//  }
-//}
-</style>
diff --git a/energy_management_ui/src/views/comprehensiveStatistics/monthlyComprehensive/BarChart.vue b/energy_management_ui/src/views/comprehensiveStatistics/monthlyComprehensive/BarChart.vue
deleted file mode 100644
index a157885..0000000
--- a/energy_management_ui/src/views/comprehensiveStatistics/monthlyComprehensive/BarChart.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: title,
-          left: "left",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 40,
-          containLabel: true
-        },
-        xAxis: [
-          {
-            type: "category",
-            data: actualData,
-            axisTick: {
-              alignWithLabel: true
-            }
-          }
-        ],
-        yAxis: [
-          {
-            type: "value",
-            axisTick: {
-              show: false
-            }
-          }
-        ],
-        series: [
-          {
-            name: title,
-            type: "bar",
-            stack: "vistors",
-            barWidth: "60%",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/comprehensiveStatistics/monthlyComprehensive/LineChart.vue b/energy_management_ui/src/views/comprehensiveStatistics/monthlyComprehensive/LineChart.vue
deleted file mode 100644
index af2321f..0000000
--- a/energy_management_ui/src/views/comprehensiveStatistics/monthlyComprehensive/LineChart.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: title,
-          left: "left",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        xAxis: {
-          data: actualData,
-          type: "category"
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 40,
-          containLabel: true
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "cross"
-          },
-          padding: [5, 10]
-        },
-        yAxis: {
-          axisTick: {
-            show: false
-          }
-        },
-        legend: {
-          data: [],
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        series: [
-          {
-            name: title,
-            itemStyle: {
-              normal: {
-                color: "#FF005A",
-                lineStyle: {
-                  color: "#FF005A",
-                  width: 2
-                }
-              }
-            },
-            smooth: true,
-            type: "line",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/comprehensiveStatistics/monthlyComprehensive/index.vue b/energy_management_ui/src/views/comprehensiveStatistics/monthlyComprehensive/index.vue
deleted file mode 100644
index a0328e8..0000000
--- a/energy_management_ui/src/views/comprehensiveStatistics/monthlyComprehensive/index.vue
+++ /dev/null
@@ -1,441 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form
-        :model="queryParams"
-        ref="queryForm"
-        label-width="68px"
-        class="special-form"
-      >
-        <el-row :gutter="24">
-          <el-col :span="5">
-            <el-form-item label="鑳芥簮绫诲瀷">
-              <el-select
-                v-model="queryParams.indexStorageId"
-                size="small"
-                placeholder="璇烽�夋嫨鑳芥簮鍝佺"
-                style="width: 100%"
-                clearable
-              >
-                <el-option
-                  v-for="dict in indexCategoryOptions"
-                  :key="dict.dictValue"
-                  :label="dict.dictLabel"
-                  :value="dict.dictValue"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <!-- <el-col :span="6">
-            <el-form-item label="鎸囨爣鍚嶇О">
-              <el-input
-                v-model="queryParams.indexName"
-                placeholder="璇疯緭鍏ユ寚鏍囧悕绉�"
-                clearable
-              ></el-input>
-            </el-form-item>
-          </el-col> -->
-          <el-col :span="5">
-            <el-form-item label="缁熻鏃堕棿">
-              <el-date-picker
-                clearable
-                size="small"
-                style="width: 100%"
-                v-model="queryParams.dataTime"
-                type="month"
-                :clearable="false"
-                value-format="yyyy-MM"
-                placeholder="閫夋嫨鏃ユ湡"
-              >
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item class="" label-width="0">
-              <el-button
-                type="primary"
-                icon="el-icon-search"
-                size="mini"
-                @click="handleQuery"
-                >鏌ヨ</el-button
-              >
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-                >閲嶇疆</el-button
-              >
-              <el-button
-                type="warning"
-                icon="el-icon-download"
-                size="mini"
-                @click="handleExport"
-                >瀵煎嚭</el-button
-              >
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container :bodyStyle="bodyStyle" style="margin-top: 16px">
-      <el-table
-        :data="tableData"
-        border
-        style="width: 100%;"
-        class="tableList"
-        max-height="380px"
-      >
-        <el-table-column
-          prop="indexName"
-          align="left"
-          label="鎸囨爣鍚嶇О"
-          min-width="200"
-        >
-          <template slot-scope="scope">
-            <div style="width: 100%; text-align: left">
-              <el-button
-                v-if="scope.row.indexId == queryParams.indexId"
-                icon="el-icon-search"
-                circle
-                @click="selectChange(scope.row)"
-                style="color: #fff; background: #478ef7;margin-right: 4px"
-              ></el-button>
-              <el-button
-                v-else
-                icon="el-icon-search"
-                circle
-                @click="selectChange(scope.row)"
-                style="margin-right: 4px; background: #999;"
-              ></el-button>
-              <el-tooltip
-                v-if="scope.row.indexName.length > 8"
-                class="item"
-                effect="dark"
-                :content="scope.row.indexName"
-                placement="top-end"
-              >
-                <span>
-                  {{ scope.row.indexName.substr(0, 8) + "..." }}
-                </span>
-              </el-tooltip>
-              <span v-else>{{ scope.row.indexName }}</span>
-            </div>
-          </template>
-        </el-table-column>
-        <el-table-column
-          v-for="index in 31"
-          :key="index"
-          :label="`${index}鏃"
-          align="center"
-          min-width="100"
-        >
-          <template slot-scope="scope">
-            <span style="font-size: 12px">
-              {{ numFilter(scope.row[`value${index}`]) || "--" }}
-            </span>
-          </template>
-        </el-table-column>
-      </el-table>
-      <el-row :gutter="32" style="margin:30px 0">
-        <el-col :xs="24" :sm="24" :lg="12">
-          <div class="chart-wrapper">
-            <line-chart ref="LineChart" :chart-data="lineChartData" />
-          </div>
-        </el-col>
-        <el-col :xs="24" :sm="24" :lg="12">
-          <div class="chart-wrapper">
-            <bar-chart ref="BarChart" :chart-data="lineChartData" />
-          </div>
-        </el-col>
-      </el-row>
-    </basic-container>
-  </div>
-</template>
-
-<script>
-import {
-  getDataList,
-  exportList,
-  getlistChart
-} from "@/api/comprehensiveStatistics/monthlyComprehensive/monthlyComprehensive";
-import LineChart from "./LineChart";
-import BarChart from "./BarChart";
-import mixins from "@/layout/mixin/getHeight";
-import { exportListMonth } from "@/api/reportForm/dailyReport/dailyReport";
-
-export default {
-  components: {
-    LineChart,
-    BarChart
-  },
-  mixins: [mixins],
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      checked: false,
-      dateRange: [],
-      dateTypeOptions: [],
-      energyList: [],
-      tableData: [],
-      tableHead: [],
-      indexCategoryOptions: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        indexCode: undefined,
-        indexId: undefined,
-        indexName: undefined,
-        dataTime: undefined,
-        timeType: "DAY",
-        indexType: undefined,
-        indexStorageId: undefined
-      },
-      skinName: "",
-      lineChartData: { expectedData: [], actualData: [] }
-    };
-  },
-  created() {
-    this.getDicts("report_form").then(response => {
-      this.dateTypeOptions = response.data;
-      //this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-    });
-    this.getConfigKey("comprehensive").then(response => {
-      this.skinName = response.msg;
-    });
-    this.getDicts("energy_type").then(response => {
-      this.indexCategoryOptions = response.data;
-    });
-    this.getList();
-    this.getTime();
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 210 + "px";
-    },
-    getList() {
-      this.queryParams.indexCode = this.$route.query.modelCode;
-      getDataList(this.queryParams).then(response => {
-        this.tableData = response.data.tabledata;
-        // this.tableHead = response.data.tablehead;
-        if (this.tableData && this.tableData.length !== 0) {
-          this.selectChange(response.data[0]);
-        }
-      });
-    },
-    selectChange(data) {
-      this.queryParams.indexId = data.indexId;
-      getlistChart(this.queryParams).then(response => {
-        let actualData = [];
-        let expectedData = [];
-        let title = "";
-        response.data.forEach(item => {
-          expectedData.push(this.numFilter(item.value));
-          actualData.push(
-            item.timeCode.slice(
-              item.timeCode.length - 2,
-              item.timeCode.length
-            ) + "鏃�"
-          );
-          title = item.indexName + "(" + item.unitId + ")";
-        });
-        this.lineChartData.actualData = actualData;
-        this.lineChartData.expectedData = expectedData;
-        this.lineChartData.title = title;
-        console.log(actualData);
-        this.$refs.LineChart.initChart(this.lineChartData);
-        this.$refs.BarChart.initChart(this.lineChartData);
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-      this.selectChange();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.queryParams = {
-        pageNum: 1,
-        pageSize: 10,
-        indexCode: undefined,
-        indexId: undefined,
-        indexName: undefined,
-        dataTime: undefined,
-        timeType: "HOUR",
-        indexType: undefined,
-        indexStorageId: undefined
-      };
-      this.getTime();
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭缁煎悎鑳借��?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportListMonth(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-
-    numFilter(value) {
-      // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = "";
-      if (!isNaN(value) && value !== "" && value !== null) {
-        realVal = parseFloat(value).toFixed(this.skinName);
-      } else {
-        realVal = "--";
-      }
-      return realVal;
-    },
-    getTime() {
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      this.queryParams.dataTime = year + "-" + month;
-      /*let startTime = year + '-' + month + '-' + date
-      let endTime = year + '-' + month + '-' + (date + 1)
-      this.dateRange = [startTime, endTime]*/
-    },
-
-    handleTime(date) {
-      if (date == "MONTH") {
-        (this.dateTypes = "year"), (this.valueFormat = "yyyy");
-      } else if (date == "DAY") {
-        (this.dateTypes = "month"), (this.valueFormat = "yyyy-MM");
-      } else {
-        (this.dateTypes = "date"), (this.valueFormat = "yyyy-MM-dd");
-      }
-    }
-  }
-};
-</script>
-<style lang="scss" scoped>
-.el-form-item {
-  margin-bottom: 0;
-}
-
-::v-deep {
-  .el-table--scrollable-x .el-table__body-wrapper {
-    overflow-x: hidden !important;
-  }
-}
-
-// .tableList tr > td:first-child {
-//   position: sticky;
-//   left: 0;
-//   z-index: 1;
-//   background: #fff;
-// }
-
-// .tableList tr > td:nth-child(2) {
-//   position: sticky;
-//   left: 80px;
-//   z-index: 1;
-//   background: #fff;
-// }
-
-.dashboard-editor-container {
-  padding: 32px;
-  background-color: rgb(240, 242, 245);
-  position: relative;
-
-  .chart-wrapper {
-    padding: 16px 16px 0;
-    margin-bottom: 32px;
-  }
-}
-
-@media (max-width: 1024px) {
-  .chart-wrapper {
-    padding: 8px;
-  }
-}
-
-.live {
-  position: fixed;
-  right: 0px;
-  top: 70px;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  width: 100px;
-  height: 60px;
-  background-color: red;
-  animation: fade 600ms infinite;
-  -webkit-animation: fade 600ms infinite;
-}
-
-.live_content {
-  font-size: 18px;
-  color: white;
-  font-weight: bold;
-}
-
-.live_number {
-  font-size: 32px;
-  color: white;
-  font-weight: bolder;
-}
-
-@keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-@-webkit-keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-.el-table--enable-row-hover .el-table__body tr:hover > td {
-  background: #cfdcf5;
-}
-
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/comprehensiveStatistics/processEnergy/index.vue b/energy_management_ui/src/views/comprehensiveStatistics/processEnergy/index.vue
deleted file mode 100644
index d36b538..0000000
--- a/energy_management_ui/src/views/comprehensiveStatistics/processEnergy/index.vue
+++ /dev/null
@@ -1,57 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" :width="isCollapse?'0px':'280px'">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            宸ュ簭鑳芥簮浠嬭川鍗曡�楀垎鏋�
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false" :modelCode="modelCode"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <div style="cursor:pointer;" @click="toggleCollapse">
-          <img src="@/assets/image/configureChart.png" style="width: 100%;height: 100%">
-        </div>
-        <el-main style="padding:0">
-          <processEnergy ref="processEnergy"></processEnergy>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import processEnergy from "./processEnergy";
-  import ModelNode from "../../basicsetting/modelNode/modelNode";
-
-  export default {
-    components: {processEnergy, ModelNode},
-    data() {
-      return {
-        modelData: '',
-        modelCode: undefined,
-        modelInfoOptions: [],
-        isCollapse: false,
-      }
-    },
-    created() {
-      this.modelCode=this.$route.query.modelCode;
-    },
-    methods: {
-      changeNode: function (node) {
-        this.$refs.processEnergy.modelNodeChange(node);
-      },
-      manageModel: function () {
-        this.$router.push('/model');
-      },
-      changeModel: function (item) {
-        this.$refs.modelNode.getList(item);
-      },
-      // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-      toggleCollapse () {
-        this.isCollapse = !this.isCollapse
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/comprehensiveStatistics/processEnergy/processEnergy.vue b/energy_management_ui/src/views/comprehensiveStatistics/processEnergy/processEnergy.vue
deleted file mode 100644
index 4f3f133..0000000
--- a/energy_management_ui/src/views/comprehensiveStatistics/processEnergy/processEnergy.vue
+++ /dev/null
@@ -1,164 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鎶ヨ〃绫诲瀷" >
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio v-for="dict in dateTypeOptions" :key="dict.dictValue" :label="dict.dictValue">{{dict.dictLabel}}</el-radio>
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item label="缁熻鍖洪棿" prop="dataTime">
-        <el-date-picker clearable size="small" style="width: 200px"
-                        v-model="queryParams.dataTime"
-                        type="date"
-                        value-format="yyyy-MM-dd"
-                        placeholder="閫夋嫨鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌ヨ</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-    <el-table :data="energyList" show-summary :summary-method="getSummaries" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="80" align="center" />
-      <el-table-column label="鍚嶇О" align="center" prop="name"/>
-      <el-table-column label="鐢佃�楅噺(鍗冪摝鏃�)" align="center" prop="electric">
-        <template slot-scope="scope">
-          <span>{{numFilter(scope.row.electric)}}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="鐓ゆ皵锛堢珛鏂圭背锛�" align="center" prop="coal">
-        <template slot-scope="scope">
-          <span>{{numFilter(scope.row.coal)}}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="钂告苯鑰楅噺锛堝惃锛�" align="center" prop="steam">
-        <template slot-scope="scope">
-          <span>{{numFilter(scope.row.steam)}}</span>
-        </template>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-  import {getEnergyList} from "@/api/comprehensiveStatistics/comprehensive";
-  export default {
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      dateTypeOptions:[],
-      energyList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        indexCode: undefined,
-        dataTime:undefined,
-        timeType:"DAY",
-      },
-      skinName:"",
-    };
-  },
-  created() {
-    this.getList();
-    this.getTime();
-    this.getDicts("statisticalType").then(response => {
-      this.dateTypeOptions = response.data;
-      this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-    });
-    this.getConfigKey("processEnergy").then(response => {
-      this.skinName=response.msg;
-    });
-  },
-  methods: {
-    modelNodeChange(modelNode) {
-      this.queryParams.indexCode=modelNode.id;
-      this.getList(this.queryParams)
-    },
-    getList(){
-      this.queryParams.indexType=this.$route.query.modelCode;
-      getEnergyList(this.queryParams).then(response => {
-        this.energyList=response.data;
-      })
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    getSummaries(param) {
-      const { columns, data } = param;
-      const sums = [];
-      columns.forEach((column, index) => {
-        if (index === 0) {
-          sums[index] = '';
-          return;
-        }
-        if (index === 1) {
-          sums[index] = '鍚堣';
-          return;
-        }
-        const values = data.map(item => Number(item[column.property]));
-        if (!values.every(value => isNaN(value))) {
-          sums[index] = values.reduce((prev, curr) => {
-            const value = Number(curr);
-            if (!isNaN(value)) {
-              return prev + curr;
-            } else {
-              return prev;
-            }
-          }, 0);
-          //sums[index];
-          sums[index]=this.numFilter(sums[index])
-        } else {
-          sums[index] = '0';
-        }
-      });
-      return sums;
-    },
-    numFilter(value) {// 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = '' ;
-      if (!isNaN(value) && value !== '') {
-        realVal = parseFloat(value).toFixed(this.skinName)
-      } else {
-        realVal = '0'
-      }
-      return realVal
-    },
-    getTime(){
-      var date = new Date()
-      var year = date.getFullYear()
-      var month = date.getMonth() + 1
-      var date = date.getDate()-1
-      month = month < 10 ? '0' + month : month
-      date = date < 10 ? '0' + date : date
-      this.queryParams.dataTime = year + '-' + month + '-' + date
-    },
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/comprehensiveStatistics/yearComprehensive/BarChart.vue b/energy_management_ui/src/views/comprehensiveStatistics/yearComprehensive/BarChart.vue
deleted file mode 100644
index f29af8d..0000000
--- a/energy_management_ui/src/views/comprehensiveStatistics/yearComprehensive/BarChart.vue
+++ /dev/null
@@ -1,132 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: title,
-          left: "left",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 40,
-          containLabel: true
-        },
-        xAxis: [
-          {
-            type: "category",
-            data: [
-              "1鏈�",
-              "2鏈�",
-              "3鏈�",
-              "4鏈�",
-              "5鏈�",
-              "6鏈�",
-              "7鏈�",
-              "8鏈�",
-              "9鏈�",
-              "10鏈�",
-              "11鏈�",
-              "12鏈�"
-            ],
-            axisTick: {
-              alignWithLabel: true
-            }
-          }
-        ],
-        yAxis: [
-          {
-            type: "value",
-            axisTick: {
-              show: false
-            }
-          }
-        ],
-        series: [
-          {
-            name: title,
-            type: "bar",
-            stack: "vistors",
-            barWidth: "60%",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/comprehensiveStatistics/yearComprehensive/LineChart.vue b/energy_management_ui/src/views/comprehensiveStatistics/yearComprehensive/LineChart.vue
deleted file mode 100644
index 26e0e0e..0000000
--- a/energy_management_ui/src/views/comprehensiveStatistics/yearComprehensive/LineChart.vue
+++ /dev/null
@@ -1,138 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: title,
-          left: "left",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        xAxis: {
-          data: [
-            "1鏈�",
-            "2鏈�",
-            "3鏈�",
-            "4鏈�",
-            "5鏈�",
-            "6鏈�",
-            "7鏈�",
-            "8鏈�",
-            "9鏈�",
-            "10鏈�",
-            "11鏈�",
-            "12鏈�"
-          ],
-          type: "category"
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 40,
-          containLabel: true
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "cross"
-          },
-          padding: [5, 10]
-        },
-        yAxis: {
-          axisTick: {
-            show: false
-          }
-        },
-        legend: {
-          data: [],
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        series: [
-          {
-            name: title,
-            itemStyle: {
-              normal: {
-                color: "#FF005A",
-                lineStyle: {
-                  color: "#FF005A",
-                  width: 2
-                }
-              }
-            },
-            smooth: true,
-            type: "line",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/comprehensiveStatistics/yearComprehensive/index.vue b/energy_management_ui/src/views/comprehensiveStatistics/yearComprehensive/index.vue
deleted file mode 100644
index cc723bd..0000000
--- a/energy_management_ui/src/views/comprehensiveStatistics/yearComprehensive/index.vue
+++ /dev/null
@@ -1,485 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form
-        :model="queryParams"
-        ref="queryForm"
-        label-width="68px"
-        class="special-form"
-      >
-        <el-row :gutter="24">
-          <el-col :span="5">
-            <el-form-item label="鑳芥簮绫诲瀷">
-              <el-select
-                v-model="queryParams.indexStorageId"
-                size="small"
-                placeholder="璇烽�夋嫨鑳芥簮鍝佺"
-                style="width: 100%"
-                clearable
-              >
-                <el-option
-                  v-for="dict in indexCategoryOptions"
-                  :key="dict.dictValue"
-                  :label="dict.dictLabel"
-                  :value="dict.dictValue"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <!-- <el-col :span="6">
-            <el-form-item label="鎸囨爣鍚嶇О">
-              <el-input
-                v-model="queryParams.indexName"
-                placeholder="璇疯緭鍏ユ寚鏍囧悕绉�"
-                clearable
-              ></el-input>
-            </el-form-item>
-          </el-col> -->
-          <el-col :span="5">
-            <el-form-item label="缁熻鏃堕棿">
-              <el-date-picker
-                clearable
-                size="small"
-                style="width: 100%"
-                v-model="queryParams.dataTime"
-                type="year"
-                :clearable="false"
-                value-format="yyyy"
-                placeholder="閫夋嫨鏃ユ湡"
-              >
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item class="" label-width="0">
-              <el-button
-                type="primary"
-                icon="el-icon-search"
-                size="mini"
-                @click="handleQuery"
-                >鏌ヨ</el-button
-              >
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-                >閲嶇疆</el-button
-              >
-              <el-button
-                type="warning"
-                icon="el-icon-download"
-                size="mini"
-                @click="handleExport"
-                >瀵煎嚭</el-button
-              >
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container :bodyStyle="bodyStyle" style="margin-top: 16px">
-      <el-table
-        :data="energyList"
-        border
-        style="width: 100%;"
-        class="tableList"
-        max-height="380px"
-      >
-        <el-table-column
-          fixed
-          prop="indexName"
-          align="left"
-          label="鎸囨爣鍚嶇О"
-          min-width="200"
-        >
-          <template slot-scope="scope">
-            <div style="width: 100%; text-align: left">
-              <el-button
-                v-if="scope.row.indexId == queryParams.indexId"
-                icon="el-icon-search"
-                circle
-                @click="selectChange(scope.row)"
-                style="font-size: 10px; color: #fff; background: #478ef7"
-              ></el-button>
-              <el-button
-                v-else
-                icon="el-icon-search"
-                circle
-                @click="selectChange(scope.row)"
-                style="font-size: 10px;background: #999;"
-              ></el-button>
-              <span>{{ scope.row.indexName }}</span>
-            </div>
-          </template>
-        </el-table-column>
-        <el-table-column label="1鏈�" align="center">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value1)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="2鏈�" align="center">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value2)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="3鏈�" align="center">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value3)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="4鏈�" align="center">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value4)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="5鏈�" align="center">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value5)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="6鏈�" align="center">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value6)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="7鏈�" align="center">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value7)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="8鏈�" align="center">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value8)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="9鏈�" align="center">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value9)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="10鏈�" align="center">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value10)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="11鏈�" align="center">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value11)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="12鏈�" align="center">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value12)
-          }}</template>
-        </el-table-column>
-      </el-table>
-      <el-row :gutter="32" style="margin:30px 0">
-        <el-col :xs="24" :sm="24" :lg="12">
-          <div class="chart-wrapper">
-            <line-chart ref="LineChart" :chart-data="lineChartData" />
-          </div>
-        </el-col>
-        <el-col :xs="24" :sm="24" :lg="12">
-          <div class="chart-wrapper">
-            <bar-chart ref="BarChart" :chart-data="lineChartData" />
-          </div>
-        </el-col>
-      </el-row>
-    </basic-container>
-  </div>
-</template>
-
-<script>
-import {
-  getDataList,
-  exportList,
-  getlistChart
-} from "@/api/comprehensiveStatistics/yearComprehensive/yearComprehensive";
-import LineChart from "./LineChart";
-import BarChart from "./BarChart";
-import mixins from "@/layout/mixin/getHeight";
-import { exportListYear } from "@/api/reportForm/dailyReport/dailyReport";
-export default {
-  components: {
-    LineChart,
-    BarChart
-  },
-  mixins: [mixins],
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      checked: false,
-      dateRange: [],
-      dateTypeOptions: [],
-      energyList: [],
-      tableData: [],
-      tableHead: [],
-      indexCategoryOptions: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        indexCode: undefined,
-        indexId: undefined,
-        indexName: undefined,
-        dataTime: undefined,
-        timeType: "MONTH",
-        indexType: undefined,
-        indexStorageId: undefined
-      },
-      skinName: "",
-      lineChartData: { expectedData: [], actualData: [] }
-    };
-  },
-  created() {
-    this.getDicts("report_form").then(response => {
-      this.dateTypeOptions = response.data;
-      //this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-    });
-    this.getConfigKey("comprehensive").then(response => {
-      this.skinName = response.msg;
-    });
-    this.getDicts("energy_type").then(response => {
-      this.indexCategoryOptions = response.data;
-      //this.queryParams.indexStorageId = this.indexCategoryOptions.find(f => f.isDefault === 'Y');
-    });
-    this.getList();
-    this.getTime();
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 210 + "px";
-    },
-    getList() {
-      this.queryParams.indexCode = this.$route.query.modelCode;
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      if (this.queryParams.dataTime == undefined) {
-        this.queryParams.dataTime = year + "-" + month;
-      }
-      let times = this.queryParams.dataTime.slice(0, 4);
-      this.queryParams.beginTime = times + "-01-01 00:00:00";
-      this.queryParams.endTime = times + "-12-31 00:00:00";
-      getDataList(this.queryParams).then(response => {
-        /*this.tableData=response.data.tabledata;
-        this.tableHead=response.data.tablehead;*/
-        this.energyList = response.data;
-        if (response.data && response.data.length !== 0) {
-          this.selectChange(response.data[0]);
-        }
-      });
-    },
-    selectChange(row) {
-      this.queryParams.indexId = row ? row.indexId : undefined;
-      getlistChart(this.queryParams).then(response => {
-        let actualData = [];
-        let expectedData = [];
-        let title = "";
-        response.data.forEach(item => {
-          expectedData.push(this.numFilter(item.value));
-          //actualData.push(item.timeCode.slice(item.timeCode.length-2,item.timeCode.length)+"鏈�");
-          title = item.indexName + "(" + item.unitId + ")";
-        });
-        console.log(actualData);
-        this.lineChartData.actualData = actualData;
-        this.lineChartData.expectedData = expectedData;
-        this.lineChartData.title = title;
-        this.$refs.LineChart.initChart(this.lineChartData);
-        this.$refs.BarChart.initChart(this.lineChartData);
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-      // this.selectChange();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.queryParams = {
-        pageNum: 1,
-        pageSize: 10,
-        indexCode: undefined,
-        indexName: undefined,
-        indexId: undefined,
-        dataTime: undefined,
-        timeType: "HOUR",
-        indexType: undefined,
-        indexStorageId: undefined
-      };
-      this.getTime();
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭缁煎悎鑳借��?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportListYear(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-    getSummaries(param) {
-      const { columns, data } = param;
-      const sums = [];
-      columns.forEach((column, index) => {
-        if (index === 0) {
-          sums[index] = "";
-          return;
-        }
-        if (index === 1) {
-          sums[index] = "鍚堣";
-          return;
-        }
-        const values = data.map(item => Number(item[column.property]));
-        if (!values.every(value => isNaN(value))) {
-          sums[index] = values.reduce((prev, curr) => {
-            const value = Number(curr);
-            if (!isNaN(value)) {
-              return prev + curr;
-            } else {
-              return prev;
-            }
-          }, 0);
-          //sums[index];
-          sums[index] = this.numFilter(sums[index]);
-        } else {
-          sums[index] = "0";
-        }
-      });
-      return sums;
-    },
-    numFilter(value) {
-      // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = "";
-      if (!isNaN(value) && value !== "" && value !== null) {
-        realVal = parseFloat(value).toFixed(this.skinName);
-      } else {
-        realVal = "--";
-      }
-      return realVal;
-    },
-    getTime() {
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      this.queryParams.dataTime = year + "-" + month;
-    },
-
-    handleTime(date) {
-      if (date == "MONTH") {
-        (this.dateTypes = "year"), (this.valueFormat = "yyyy");
-      } else if (date == "DAY") {
-        (this.dateTypes = "month"), (this.valueFormat = "yyyy-MM");
-      } else {
-        (this.dateTypes = "date"), (this.valueFormat = "yyyy-MM-dd");
-      }
-    }
-  }
-};
-</script>
-<style lang="scss" scoped>
-.el-form-item {
-  margin-bottom: 0;
-}
-
-.dashboard-editor-container {
-  padding: 32px;
-  background-color: rgb(240, 242, 245);
-  position: relative;
-
-  .chart-wrapper {
-    padding: 16px 16px 0;
-    margin-bottom: 32px;
-  }
-}
-
-@media (max-width: 1024px) {
-  .chart-wrapper {
-    padding: 8px;
-  }
-}
-
-.live {
-  position: fixed;
-  right: 0px;
-  top: 70px;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  width: 100px;
-  height: 60px;
-  background-color: red;
-  animation: fade 600ms infinite;
-  -webkit-animation: fade 600ms infinite;
-}
-
-.live_content {
-  font-size: 18px;
-  color: white;
-  font-weight: bold;
-}
-
-.live_number {
-  font-size: 32px;
-  color: white;
-  font-weight: bolder;
-}
-
-@keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-@-webkit-keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/comreport/frreport/reportiframe.vue b/energy_management_ui/src/views/comreport/frreport/reportiframe.vue
deleted file mode 100644
index 13a231d..0000000
--- a/energy_management_ui/src/views/comreport/frreport/reportiframe.vue
+++ /dev/null
@@ -1,47 +0,0 @@
-<template>
-  <div class="app-container":style="'height:'+ height">
-    <iframe :src="srcUrl" frameborder="no" style="width: 100%;height: 100%" scrolling="auto" />
-  </div>
-</template>
-
-<script>
-  //import { getUserProfile } from "@/api/system/user";
-    export default {
-      data() {
-        return {
-          user: {},
-          srcUrl:"",
-          height: document.documentElement.clientHeight - 94.5 + "px;",
-          loading: false
-        }
-      },
-      created() {
-        this.getUser();
-      },
-      mounted: function() {
-        const that = this;
-        window.onresize = function temp() {
-          that.height = document.documentElement.clientHeight - 94.5 + "px;";
-        };
-      },
-      methods: {
-        //鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛淇℃伅骞朵綔涓哄弬鏁颁紶鍏ユ姤琛�
-        getUser() {
-          let reg=new RegExp('amp;','g');
-          let tourl = this.$route.query.modelCode.replace(reg,"");
-          //tourl+="&username="+this.user.userName;
-          // console.log("璺宠浆url="+tourl);
-          this.srcUrl=tourl;
-          // getUserProfile().then(response => {
-          //   this.user = response.data;
-          //   // console.log("鐢ㄦ埛璐﹀彿="+this.user.userName);
-          //   let reg=new RegExp('amp;','g');
-          //   let tourl = this.$route.query.modelCode.replace(reg,"");
-          //   tourl+="&username="+this.user.userName;
-          //   // console.log("璺宠浆url="+tourl);
-          //   this.srcUrl=tourl;
-          // });
-        }
-      }
-    }
-</script>
diff --git a/energy_management_ui/src/views/costaccounting/frreport/reportiframe.vue b/energy_management_ui/src/views/costaccounting/frreport/reportiframe.vue
deleted file mode 100644
index 39f2dca..0000000
--- a/energy_management_ui/src/views/costaccounting/frreport/reportiframe.vue
+++ /dev/null
@@ -1,42 +0,0 @@
-<template>
-  <div class="app-container":style="'height:'+ height">
-    <iframe :src="srcUrl" frameborder="no" style="width: 100%;height: 100%" scrolling="auto" />
-  </div>
-</template>
-
-<script>
-  import { getUserProfile } from "@/api/system/user";
-    export default {
-      data() {
-        return {
-          user: {},
-          srcUrl:"",
-          height: document.documentElement.clientHeight - 94.5 + "px;",
-          loading: false
-        }
-      },
-      created() {
-        this.getUser();
-      },
-      mounted: function() {
-        const that = this;
-        window.onresize = function temp() {
-          that.height = document.documentElement.clientHeight - 94.5 + "px;";
-        };
-      },
-      methods: {
-        //鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛淇℃伅骞朵綔涓哄弬鏁颁紶鍏ユ姤琛�
-        getUser() {
-          getUserProfile().then(response => {
-            this.user = response.data;
-            // console.log("鐢ㄦ埛璐﹀彿="+this.user.userName);
-            let reg=new RegExp('amp;','g');
-            let tourl = this.$route.query.modelCode.replace(reg,"");
-            //tourl+="&username="+this.user.userName;
-            // console.log("璺宠浆url="+tourl);
-            this.srcUrl=tourl;
-          });
-        }
-      }
-    }
-</script>
diff --git a/energy_management_ui/src/views/dashboard/BarChart.vue b/energy_management_ui/src/views/dashboard/BarChart.vue
deleted file mode 100644
index 294d1ce..0000000
--- a/energy_management_ui/src/views/dashboard/BarChart.vue
+++ /dev/null
@@ -1,167 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "./mixins/resize";
-import moment from "moment";
-
-const animationDuration = 6000;
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "310px"
-    },
-    chartData: {
-      type: Object,
-      default: () => {}
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-
-      // this.chart.setOption({
-      //   tooltip: {
-      //     trigger: 'axis',
-      //     axisPointer: { // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-      //       type: 'shadow' // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-      //     }
-      //   },
-      //   grid: {
-      //     top: 10,
-      //     left: '2%',
-      //     right: '2%',
-      //     bottom: '3%',
-      //     containLabel: true
-      //   },
-      //   xAxis: [{
-      //     type: 'category',
-      //     data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
-      //     axisTick: {
-      //       alignWithLabel: true
-      //     }
-      //   }],
-      //   yAxis: [{
-      //     type: 'value',
-      //     axisTick: {
-      //       show: false
-      //     }
-      //   }],
-      //   series: [{
-      //     name: 'pageA',
-      //     type: 'bar',
-      //     stack: 'vistors',
-      //     barWidth: '60%',
-      //     data: [79, 52, 200, 334, 390, 330, 220],
-      //     animationDuration
-      //   }, {
-      //     name: 'pageB',
-      //     type: 'bar',
-      //     stack: 'vistors',
-      //     barWidth: '60%',
-      //     data: [80, 52, 200, 334, 390, 330, 220],
-      //     animationDuration
-      //   }, {
-      //     name: 'pageC',
-      //     type: 'bar',
-      //     stack: 'vistors',
-      //     barWidth: '60%',
-      //     data: [30, 52, 200, 334, 390, 330, 220],
-      //     animationDuration
-      //   }]
-      // })
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, xData, type } = {}) {
-      let option = {
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "shadow"
-          }
-        },
-        legend: {
-          right: "1",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        grid: {
-          left: "1",
-          right: "3%",
-          bottom: "3%",
-          containLabel: true
-        },
-        xAxis: {
-          type: "category",
-          data: xData
-        },
-        yAxis: {
-          type: "value",
-          boundaryGap: [0, 0.01],
-          splitLine: {
-            lineStyle: {
-              color: "rgba(32, 121, 160, 0.5)" // y杞村垎鍓茬嚎棰滆壊
-            }
-          }
-        },
-        series: [
-          {
-            name: moment(new Date())
-              .subtract(1, "day")
-              .format("yyyy-MM-DD"),
-            type: "bar",
-            data: expectedData,
-            color: "#e6e6e6"
-          },
-          {
-            name: moment(new Date()).format("yyyy-MM-DD"),
-            type: "bar",
-            data: actualData
-          }
-        ]
-      };
-      this.chart.setOption(option);
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/dashboard/LineChart.vue b/energy_management_ui/src/views/dashboard/LineChart.vue
deleted file mode 100644
index 9eb7cc2..0000000
--- a/energy_management_ui/src/views/dashboard/LineChart.vue
+++ /dev/null
@@ -1,141 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "./mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData } = {}) {
-      this.chart.setOption({
-        xAxis: {
-          data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
-          boundaryGap: false,
-          axisTick: {
-            show: false
-          }
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 30,
-          containLabel: true
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "cross"
-          },
-          padding: [5, 10]
-        },
-        yAxis: {
-          axisTick: {
-            show: false
-          }
-        },
-        legend: {
-          data: ["expected", "actual"],
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        series: [
-          {
-            name: "expected",
-            itemStyle: {
-              normal: {
-                color: "#FF005A",
-                lineStyle: {
-                  color: "#FF005A",
-                  width: 2
-                }
-              }
-            },
-            smooth: true,
-            type: "line",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          },
-          {
-            name: "actual",
-            smooth: true,
-            type: "line",
-            itemStyle: {
-              normal: {
-                color: "#3888fa",
-                lineStyle: {
-                  color: "#3888fa",
-                  width: 2
-                },
-                areaStyle: {
-                  color: "#f3f8ff"
-                }
-              }
-            },
-            data: actualData,
-            animationDuration: 2800,
-            animationEasing: "quadraticOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/dashboard/PanelGroup.vue b/energy_management_ui/src/views/dashboard/PanelGroup.vue
deleted file mode 100644
index 3724515..0000000
--- a/energy_management_ui/src/views/dashboard/PanelGroup.vue
+++ /dev/null
@@ -1,200 +0,0 @@
-<template>
-  <el-row :gutter="40" class="panel-group">
-    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
-      <div class="card-panel" @click="handleSetLineChartData('newVisitis')">
-        <div class="card-panel-icon-wrapper icon-people">
-          <svg-icon icon-class="peoples" class-name="card-panel-icon" />
-        </div>
-        <div class="card-panel-description">
-          <div class="card-panel-text">
-            璁垮
-          </div>
-          <count-to
-            :start-val="0"
-            :end-val="102400"
-            :duration="2600"
-            class="card-panel-num"
-          />
-        </div>
-      </div>
-    </el-col>
-    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
-      <div class="card-panel" @click="handleSetLineChartData('messages')">
-        <div class="card-panel-icon-wrapper icon-message">
-          <svg-icon icon-class="message" class-name="card-panel-icon" />
-        </div>
-        <div class="card-panel-description">
-          <div class="card-panel-text">
-            娑堟伅
-          </div>
-          <count-to
-            :start-val="0"
-            :end-val="81212"
-            :duration="3000"
-            class="card-panel-num"
-          />
-        </div>
-      </div>
-    </el-col>
-    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
-      <div class="card-panel" @click="handleSetLineChartData('purchases')">
-        <div class="card-panel-icon-wrapper icon-money">
-          <svg-icon icon-class="money" class-name="card-panel-icon" />
-        </div>
-        <div class="card-panel-description">
-          <div class="card-panel-text">
-            閲戦
-          </div>
-          <count-to
-            :start-val="0"
-            :end-val="9280"
-            :duration="3200"
-            class="card-panel-num"
-          />
-        </div>
-      </div>
-    </el-col>
-    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
-      <div class="card-panel" @click="handleSetLineChartData('shoppings')">
-        <div class="card-panel-icon-wrapper icon-shopping">
-          <svg-icon icon-class="shopping" class-name="card-panel-icon" />
-        </div>
-        <div class="card-panel-description">
-          <div class="card-panel-text">
-            璁㈠崟
-          </div>
-          <count-to
-            :start-val="0"
-            :end-val="13600"
-            :duration="3600"
-            class="card-panel-num"
-          />
-        </div>
-      </div>
-    </el-col>
-  </el-row>
-</template>
-
-<script>
-import CountTo from "vue-count-to";
-
-export default {
-  components: {
-    CountTo
-  },
-  methods: {
-    handleSetLineChartData(type) {
-      this.$emit("handleSetLineChartData", type);
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.panel-group {
-  margin-top: 18px;
-
-  .card-panel-col {
-    margin-bottom: 32px;
-  }
-
-  .card-panel {
-    height: 108px;
-    cursor: pointer;
-    font-size: 12px;
-    position: relative;
-    overflow: hidden;
-    color: #666;
-    box-shadow: 4px 4px 40px rgba(0, 0, 0, 0.05);
-    border-color: rgba(0, 0, 0, 0.05);
-
-    &:hover {
-      .card-panel-icon-wrapper {
-        color: #fff;
-      }
-
-      .icon-people {
-        background: #40c9c6;
-      }
-
-      .icon-message {
-        background: #36a3f7;
-      }
-
-      .icon-money {
-        background: #f4516c;
-      }
-
-      .icon-shopping {
-        background: #34bfa3;
-      }
-    }
-
-    .icon-people {
-      color: #40c9c6;
-    }
-
-    .icon-message {
-      color: #36a3f7;
-    }
-
-    .icon-money {
-      color: #f4516c;
-    }
-
-    .icon-shopping {
-      color: #34bfa3;
-    }
-
-    .card-panel-icon-wrapper {
-      float: left;
-      margin: 14px 0 0 14px;
-      padding: 16px;
-      transition: all 0.38s ease-out;
-      border-radius: 6px;
-    }
-
-    .card-panel-icon {
-      float: left;
-      font-size: 48px;
-    }
-
-    .card-panel-description {
-      float: right;
-      font-weight: bold;
-      margin: 26px;
-      margin-left: 0px;
-
-      .card-panel-text {
-        line-height: 18px;
-        color: rgba(0, 0, 0, 0.45);
-        font-size: 16px;
-        margin-bottom: 12px;
-      }
-
-      .card-panel-num {
-        font-size: 20px;
-      }
-    }
-  }
-}
-
-@media (max-width: 550px) {
-  .card-panel-description {
-    display: none;
-  }
-
-  .card-panel-icon-wrapper {
-    float: none !important;
-    width: 100%;
-    height: 100%;
-    margin: 0 !important;
-
-    .svg-icon {
-      display: block;
-      margin: 14px auto !important;
-      float: none !important;
-    }
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/dashboard/PieChart.vue b/energy_management_ui/src/views/dashboard/PieChart.vue
deleted file mode 100644
index bb53dfe..0000000
--- a/energy_management_ui/src/views/dashboard/PieChart.vue
+++ /dev/null
@@ -1,122 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "./mixins/resize";
-import { color } from "echarts/lib/export";
-
-export default {
-  mixins: [resize],
-  props: {
-    pieTitle: {
-      type: String,
-      default: "chart"
-    },
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    chartData: {
-      type: Array,
-      default: () => []
-    },
-    legend: {
-      type: String,
-      default: ""
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions(val) {
-      this.chart.setOption({
-        tooltip: {
-          trigger: "item",
-          // formatter: "{a} <br/>{b} : {c} ({d}%)"
-          formatter: a => {
-            return `${a.seriesName} <br/> ${a.data.name} : ${a.data.value} ${
-              a.data.unit
-            } (${a.percent}%)`;
-          }
-        },
-        legend: {
-          left: this.legend == "right" ? "auto" : "center",
-          top: "0",
-          right: this.legend == "right" ? "40" : "auto",
-          orient: this.legend == "right" ? "vertical" : "horizontal",
-          textStyle: {
-            color: "#fff"
-          }
-          // data: ["Industries", "Technology", "Forex", "Gold", "Forecasts"]
-        },
-        label: {
-          alignTo: "edge",
-          // formatter: "{b}:{c}"
-          formatter: a => {
-            return `${a.name} : ${a.data.value}${
-              a.data.value > 0 ? a.data.unit || "" : ""
-            } (${a.percent}%)`;
-          },
-          fontSize: this.legend == "right" ? "16" : "14"
-          // minMargin: 5,
-          // edgeDistance: 10,
-          // lineHeight: 5
-        },
-        series: [
-          {
-            name: this.pieTitle,
-            type: "pie",
-            // top: "-100",
-            // left: 0,
-            // roseType: 'radius',
-            // radius: ["50%", "80%"],
-            radius: this.legend == "right" ? ["50%", "80%"] : [40, 75],
-            // center: ["50%", "38%"],
-            data: val
-            // animationEasing: "cubicInOut",
-            // animationDuration: 2600
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/dashboard/RaddarChart.vue b/energy_management_ui/src/views/dashboard/RaddarChart.vue
deleted file mode 100644
index a748653..0000000
--- a/energy_management_ui/src/views/dashboard/RaddarChart.vue
+++ /dev/null
@@ -1,122 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "./mixins/resize";
-
-const animationDuration = 3000;
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-
-      this.chart.setOption({
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        radar: {
-          radius: "66%",
-          center: ["50%", "42%"],
-          splitNumber: 8,
-          splitArea: {
-            areaStyle: {
-              color: "rgba(127,95,132,.3)",
-              opacity: 1,
-              shadowBlur: 45,
-              shadowColor: "rgba(0,0,0,.5)",
-              shadowOffsetX: 0,
-              shadowOffsetY: 15
-            }
-          },
-          indicator: [
-            { name: "Sales", max: 10000 },
-            { name: "Administration", max: 20000 },
-            { name: "Information Techology", max: 20000 },
-            { name: "Customer Support", max: 20000 },
-            { name: "Development", max: 20000 },
-            { name: "Marketing", max: 20000 }
-          ]
-        },
-        legend: {
-          left: "center",
-          bottom: "10",
-          data: ["Allocated Budget", "Expected Spending", "Actual Spending"],
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        series: [
-          {
-            type: "radar",
-            symbolSize: 0,
-            areaStyle: {
-              normal: {
-                shadowBlur: 13,
-                shadowColor: "rgba(0,0,0,.2)",
-                shadowOffsetX: 0,
-                shadowOffsetY: 10,
-                opacity: 1
-              }
-            },
-            data: [
-              {
-                value: [5000, 7000, 12000, 11000, 15000, 14000],
-                name: "Allocated Budget"
-              },
-              {
-                value: [4000, 9000, 15000, 15000, 13000, 11000],
-                name: "Expected Spending"
-              },
-              {
-                value: [5500, 11000, 12000, 15000, 12000, 12000],
-                name: "Actual Spending"
-              }
-            ],
-            animationDuration: animationDuration
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/dashboard/mixins/resize.js b/energy_management_ui/src/views/dashboard/mixins/resize.js
deleted file mode 100644
index ae02e64..0000000
--- a/energy_management_ui/src/views/dashboard/mixins/resize.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import { debounce } from '@/utils'
-
-export default {
-  data() {
-    return {
-      $_sidebarElm: null
-    }
-  },
-  mounted() {
-    this.$_initResizeEvent()
-    this.$_initSidebarResizeEvent()
-  },
-  beforeDestroy() {
-    this.$_destroyResizeEvent()
-    this.$_destroySidebarResizeEvent()
-  },
-  activated() {
-    this.$_initResizeEvent()
-    this.$_initSidebarResizeEvent()
-  },
-  deactivated() {
-    this.$_destroyResizeEvent()
-    this.$_destroySidebarResizeEvent()
-  },
-  methods: {
-    $_resizeHandler() {
-      return debounce(() => {
-        if (this.chart) {
-          this.chart.resize()
-        }
-      }, 100)()
-    },
-    $_initResizeEvent() {
-      window.addEventListener('resize', this.$_resizeHandler)
-    },
-    $_destroyResizeEvent() {
-      window.removeEventListener('resize', this.$_resizeHandler)
-    },
-    $_sidebarResizeHandler(e) {
-      if (e.propertyName === 'width') {
-        this.$_resizeHandler()
-      }
-    },
-    $_initSidebarResizeEvent() {
-      this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
-      this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
-    },
-    $_destroySidebarResizeEvent() {
-      this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
-    }
-  }
-}
diff --git a/energy_management_ui/src/views/dataEntry/stagseDataEntry/index.vue b/energy_management_ui/src/views/dataEntry/stagseDataEntry/index.vue
deleted file mode 100644
index 97851ab..0000000
--- a/energy_management_ui/src/views/dataEntry/stagseDataEntry/index.vue
+++ /dev/null
@@ -1,84 +0,0 @@
-<template>
-  <el-row type="flex">
-    <el-col :style="{width:isCollapse?'0': '280px',position:'relative'}" v-show="!isCollapse">
-      <basic-container title="闃舵鏁版嵁褰曞叆" :bodyStyle="bodyStyle">
-        <ModelNode ref="modelNode" @changeNode="changeNode"
-                   :modelCode="modelCode"
-                   :showOpt="true"
-                   :auth="false"/>
-      </basic-container>
-      <img src="~@/assets/image/rectangle.png" alt=""
-           class="shrink-col-block"
-           @click="toggleCollapse">
-    </el-col>
-    <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse"/>
-    <el-col :style="{width:isCollapse? 'calc(100% - 48px)':'calc(100% - 280px)',paddingLeft:isCollapse? 0:'14px'}">
-      <basic-container :bodyStyle="bodyStyleRight">
-        <el-tabs>
-          <el-tab-pane>
-            <span slot="label"> 闃舵鏁版嵁褰曞叆</span>
-            <stagseDataEntry ref="stagseDataEntry"></stagseDataEntry>
-          </el-tab-pane>
-          <!--<el-tab-pane>
-            <span slot="label"> 闃舵鏁版嵁淇敼</span>
-            <stagseDataEdit ref="stagseDataEdit"></stagseDataEdit>
-          </el-tab-pane>-->
-        </el-tabs>
-      </basic-container>
-    </el-col>
-  </el-row>
-</template>
-<script>
-import ModelNode from "../../basicsetting/modelNode/modelNode"
-import stagseDataEntry from "./stagseDataEntry";
-import stagseDataEdit from "./stagseDataEdit";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from '@/components/shrink/index.vue'
-
-export default {
-  components: {ModelNode, stagseDataEntry, stagseDataEdit,ShrinkCol},
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  mixins: [mixins],
-  data() {
-    return {
-      modelData: '',
-      modelCode: undefined,
-      isCollapse: false,
-      bodyStyleRight: {}
-    }
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 155 + 'px'
-      this.bodyStyleRight = {
-        height: window.innerHeight - 100 + 'px',
-        overflow: 'hidden'
-      };
-    },
-    changeNode: function (node) {
-      this.$refs.stagseDataEntry.modelNodeChange(node);
-      //this.$refs.stagseDataEdit.modelNodeChange(node);
-    },
-    manageModel: function () {
-      this.$router.push('/model');
-    },
-    changeModel: function (item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.shrink-col-block {
-  position: absolute;
-  top: 20px;
-  right: 16px;
-  cursor: pointer;
-}
-</style>
diff --git a/energy_management_ui/src/views/dataEntry/stagseDataEntry/stagseDataEdit.vue b/energy_management_ui/src/views/dataEntry/stagseDataEntry/stagseDataEdit.vue
deleted file mode 100644
index 0ffb9e6..0000000
--- a/energy_management_ui/src/views/dataEntry/stagseDataEntry/stagseDataEdit.vue
+++ /dev/null
@@ -1,192 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鏃ユ湡绫诲瀷" prop="timeType">
-        <el-select v-model="queryParams.timeType" placeholder="鏃ユ湡绫诲瀷" clearable size="small" style="width: 100px"
-                   @change="handleTime">
-          <el-option
-            v-for="dict in entryDataTimeOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="閫夋嫨鏃堕棿" prop="dataTime">
-        <el-date-picker size="small" style="width: 200px"
-                        v-model="queryParams.dataTime"
-                        :type="dateTypes"
-                        :value-format="valueFormat"
-                        :format="showFormat"
-                        @change="handleQuery"
-                        :clearable="false"
-                        placeholder="閫夋嫨鏃堕棿">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          v-hasPermi="['dataEntry:stagseDataEntry:add']"
-          @click="handleAdd"
-        >淇濆瓨閰嶇疆
-        </el-button>
-      </el-form-item>
-    </el-form>
-    <el-form refs="form" :model="form">
-      <el-table v-loading="loading" :data="stagseDataEntryList" border ref="multipleTable">
-        <el-table-column label="鎸囨爣缂栫爜" align="center" prop="code"></el-table-column>
-        <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="name"></el-table-column>
-        <el-table-column label="鎸囨爣鍗曚綅" align="center" prop="unitId"></el-table-column>
-        <el-table-column label="鏃堕棿" align="center" prop="dataTime">
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.dataTime) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="鍊�" align="center">
-          <template slot-scope="scope">
-            <el-input size="mini" v-model="scope.row.value"></el-input>
-            <el-input type="hidden" v-model="scope.row.timeType"></el-input>
-            <el-input type="hidden" v-model="scope.row.indexId"></el-input>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        v-show="total>0"
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-    </el-form>
-  </div>
-</template>
-
-<script>
-import {listStagseDataEdit, addStagseDataEntry} from "@/api/dataEntry/stagseDataEntry";
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      dateRange: [],
-      form: {},
-      // stagseDataEntry琛ㄦ牸鏁版嵁
-      stagseDataEntryList: [],
-      list: [],
-      entryDataTimeOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        indexId: undefined,
-        dataTime: undefined,
-        beginTime: undefined,
-        endTime: undefined,
-        nodeId: undefined,
-        timeType: "HOUR",
-        calcType: undefined,
-      },
-      dateTypes: "date",
-      valueFormat: "yyyy-MM-dd HH",
-      showFormat: "yyyy-MM-dd HH",
-      configInfo: [],
-      currentNode: ""
-    };
-  },
-  created() {
-    this.getDicts("entryDataTime").then(response => {
-      this.entryDataTimeOptions = response.data;
-      this.queryParams.timeType = this.entryDataTimeOptions.find(f => f.isDefault === 'Y').dictValue;
-      console.log(response.data)
-      debugger
-      this.setTime();
-    });
-  },
-  methods: {
-    /** 鏌ヨstagseDataEntry鍒楄〃 */
-    modelNodeChange(modelNode) {
-      this.currentNode = modelNode.id;
-      //this.getList();
-      this.loading = false;
-    },
-    getList() {
-      this.loading = true;
-      this.queryParams.nodeId = this.currentNode;
-      this.queryParams.calcType = "INPUT";
-      this.queryParams.beginTime = this.dateRange[0];
-      this.queryParams.endTime = this.dateRange[1];
-      listStagseDataEdit(this.queryParams).then(response => {
-        this.stagseDataEntryList = response.rows;
-        this.loading = false;
-      });
-    },
-    handleAdd() {
-      this.$nextTick(() => {
-        this.form.configInfo = JSON.stringify(this.$refs['multipleTable'].data);
-        console.log(this.form.configInfo);
-        addStagseDataEntry(this.form.configInfo,).then(response => {
-          if (response.code === 200) {
-            this.msgSuccess("淇濆瓨閰嶇疆鎴愬姛");
-            this.getList();
-          } else {
-            this.msgError(response.msg);
-          }
-        })
-      });
-    },
-    handleTime(selVal) {
-      if (selVal == 'YEAR') {
-        this.dateTypes = 'year';
-        this.valueFormat = 'yyyy';
-        this.showFormat = 'yyyy';
-      } else if (selVal == 'MONTH') {
-        this.dateTypes = 'month';
-        this.valueFormat = 'yyyy-MM';
-        this.showFormat = 'yyyy-MM';
-        //this.queryParams.dataTime=(new Date().getFullYear())+'-' +((new Date().getMonth() + 1)>9?(new Date().getMonth() + 1):"0"+(new Date().getMonth() + 1));
-      } else if (selVal == 'DAY') {
-        this.dateTypes = 'date';
-        this.valueFormat = 'yyyy-MM-dd';
-        this.showFormat = 'yyyy-MM-dd';
-        //this.queryParams.dataTime=(new Date().getFullYear())+'-' +((new Date().getMonth() + 1)>9?(new Date().getMonth() + 1):"0"+(new Date().getMonth() + 1))+'-'+(new Date().getDate()>9?new Date().getDate():"0"+new Date().getDate());
-      } else if (selVal == 'HOUR') {
-        this.dateTypes = 'datetime';
-        this.valueFormat = 'yyyy-MM-dd HH';
-        this.showFormat = 'yyyy-MM-dd HH';
-      }
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.queryParams.id = this.queryParams.nodeId;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.dateRange = [];
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    getTime() {
-      debugger
-      let nowDate = new Date();
-      let date = {
-        year: nowDate.getFullYear(),
-        month: nowDate.getMonth() + 1,
-        day: nowDate.getDate(),
-      }
-      let h = nowDate.getHours();
-      h = h < 10 ? ('0' + h) : h;
-      this.queryParams.dataTime = date.year + '-' + this.gshRq(date.month) + '-' + this.gshRq(date.day) + " " + h;
-      console.log(this.queryParams)
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/dataEntry/stagseDataEntry/stagseDataEntry.vue b/energy_management_ui/src/views/dataEntry/stagseDataEntry/stagseDataEntry.vue
deleted file mode 100644
index bbede8e..0000000
--- a/energy_management_ui/src/views/dataEntry/stagseDataEntry/stagseDataEntry.vue
+++ /dev/null
@@ -1,230 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" label-width="68px" class="special-form" style="margin-bottom: 8px">
-      <el-row :gutter="24">
-        <el-col :span="8">
-          <el-form-item label="鏃ユ湡绫诲瀷" prop="timeType">
-            <el-select v-model="queryParams.timeType" placeholder="鏃ユ湡绫诲瀷" size="small" style="width: 100%"
-                       @change="handleTime">
-              <el-option
-                  v-for="dict in entryDataTimeOptions"
-                  :key="dict.dictValue"
-                  :label="dict.dictLabel"
-                  :value="dict.dictValue"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="閫夋嫨鏃堕棿" prop="dataTime">
-            <el-date-picker size="small" style="width:100%"
-                            v-model="queryParams.dataTime"
-                            :type="dateTypes"
-                            :value-format="valueFormat"
-                            :format="showFormat"
-                            @change="handleQuery"
-                            :clearable="false"
-                            placeholder="閫夋嫨鏃堕棿">
-            </el-date-picker>
-
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item class="operation" label-width="0px">
-            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-            <el-button
-                type="primary"
-                icon="el-icon-plus"
-                size="mini"
-                v-hasPermi="['dataEntry:stagseDataEntry:add']"
-                @click="handleAdd"
-            >淇濆瓨閰嶇疆
-            </el-button>
-          </el-form-item>
-        </el-col>
-      </el-row>
-    </el-form>
-    <el-form refs="form" :model="form">
-      <el-table v-loading="loading" :data="stagseDataEntryList" border ref="multipleTable"
-                :height="height"
-      >
-        <el-table-column label="搴忓彿" align="center" type="index" width="50"></el-table-column>
-        <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="name" min-width="150px"/>
-        <el-table-column label="鎸囨爣缂栫爜" align="center" prop="code"/>
-        <el-table-column label="鎸囨爣绫诲瀷" align="center" prop="categoryName"/>
-        <el-table-column label="鑳芥簮鍝佺" align="center" prop="energyName"/>
-        <el-table-column label="鍊�" align="center" prop="value" min-width="170px">
-          <template slot-scope="scope">
-            <el-input-number v-model="scope.row.value" size="small" controls-position="right" @change="checkNum(scope.row.value)" placeholder="璇疯緭鍏ュ��"
-                             clearable></el-input-number>
-          </template>
-        </el-table-column>
-        <el-table-column label="鍗曚綅" align="center" prop="unit"/>
-        <el-table-column label="鎵�灞炴棩鏈�" align="center" prop="dataTimeStr"/>
-        <el-table-column label="褰曞叆鏃堕棿" align="center" prop="createTimeStr"/>
-        <el-table-column label="褰曞叆浜�" align="center" prop="createBy"/>
-      </el-table>
-    </el-form>
-  </div>
-</template>
-
-<script>
-import {listStagseDataEntry, addStagseDataEntry} from "@/api/dataEntry/stagseDataEntry";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  mixins: [mixins],
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      form: {},
-      // stagseDataEntry琛ㄦ牸鏁版嵁
-      stagseDataEntryList: [],
-      list: [],
-      entryDataTimeOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        indexId: undefined,
-        dataTime: undefined,
-        beginTime: undefined,
-        endTime: undefined,
-        nodeId: undefined,
-        timeType: "HOUR",
-        calcType: undefined,
-      },
-      dateTypes: "datetime",
-      valueFormat: "yyyy-MM-dd HH",
-      showFormat: "yyyy-MM-dd HH",
-      configInfo: [],
-      dateRange: [],
-      hourList: "",
-      currentNode: "",
-      height: null
-    };
-  },
-  created() {
-    this.getDicts("entryDataTime").then(response => {
-      this.entryDataTimeOptions = response.data;
-      this.queryParams.timeType = this.entryDataTimeOptions.find(f => f.isDefault === 'Y').dictValue;
-    });
-    this.setTime();
-    //this.queryParams.dataTime=(new Date().getFullYear())+'-' +((new Date().getMonth() + 1)>9?(new Date().getMonth() + 1):"0"+(new Date().getMonth() + 1))+'-'+(new Date().getDate()>9?new Date().getDate():"0"+new Date().getDate());
-  },
-  methods: {
-    setCharts() {
-      this.height = window.innerHeight - 275 + 'px';
-    },
-    /** 鏌ヨstagseDataEntry鍒楄〃 */
-    modelNodeChange(modelNode) {
-      this.currentNode = modelNode.id;
-      this.getList();
-      this.loading = false;
-    },
-    getList() {
-      this.loading = true;
-      this.queryParams.nodeId = this.currentNode;
-      this.queryParams.dataTimeStr = this.queryParams.dataTime;
-      this.queryParams.calcType = "INPUT";
-      listStagseDataEntry(this.queryParams).then(response => {
-        this.stagseDataEntryList = response.rows;
-        this.loading = false;
-      });
-    },
-    checkNum(value) {
-      let reg = /(^(-?([1-9]{1}\d*)|(0{1}))(\.\d{1,2,3})?$)/;
-      if (undefined == value || "" == value) {
-        this.$notify.error({
-          title: '閿欒',
-          message: '鍊间笉鑳戒负绌�'
-        });
-      } else if (!reg.test(value)) {
-        this.$notify.error({
-          title: '閿欒',
-          message: '鍊兼渶澶氫繚鐣�3浣嶅皬鏁�'
-        });
-      }
-    },
-    handleAdd() {
-      this.$nextTick(() => {
-        this.form.configInfo = JSON.stringify(this.$refs['multipleTable'].data);
-        addStagseDataEntry(this.form.configInfo).then(response => {
-          if (response.code === 200) {
-            this.msgSuccess("淇濆瓨閰嶇疆鎴愬姛");
-            this.getList();
-          } else {
-            this.msgError(response.msg);
-          }
-        })
-      });
-    },
-    handleTime(selVal) {
-      let nowDate = new Date();
-      let date = {
-        year: nowDate.getFullYear(),
-        month: nowDate.getMonth() + 1,
-        day: nowDate.getDate(),
-      }
-      let h = nowDate.getHours();
-      h = h < 10 ? ('0' + h) : h;
-      if (selVal == 'YEAR') {
-        this.dateTypes = 'year';
-        this.valueFormat = 'yyyy';
-        this.showFormat = 'yyyy';
-        this.queryParams.dataTime = date.year + ""
-      } else if (selVal == 'MONTH') {
-        this.dateTypes = 'month';
-        this.valueFormat = 'yyyy-MM';
-        this.showFormat = 'yyyy-MM';
-        this.queryParams.dataTime = date.year + '-' + this.gshRq(date.month);
-      } else if (selVal == 'DAY') {
-        this.dateTypes = 'date';
-        this.valueFormat = 'yyyy-MM-dd';
-        this.showFormat = 'yyyy-MM-dd';
-        this.queryParams.dataTime = date.year + '-' + this.gshRq(date.month) + '-' + this.gshRq(date.day);
-      } else if (selVal == 'HOUR') {
-        this.dateTypes = 'datetime';
-        this.valueFormat = 'yyyy-MM-dd HH';
-        this.showFormat = 'yyyy-MM-dd HH';
-        this.setTime()
-      }
-      this.handleQuery()
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.queryParams.id = this.queryParams.nodeId;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.dateRange = [];
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    gshRq(rq) {
-      return ((rq * 1) < 10) ? '0' + rq : rq;
-    },
-    setTime() {
-      let nowDate = new Date();
-      let date = {
-        year: nowDate.getFullYear(),
-        month: nowDate.getMonth() + 1,
-        day: nowDate.getDate(),
-      }
-      let h = nowDate.getHours();
-      h = h < 10 ? ('0' + h) : h;
-      this.queryParams.dataTime = date.year + '-' + this.gshRq(date.month) + '-' + this.gshRq(date.day) + " " + h;
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/dataEntry/stagseDataEntryEdit/index.vue b/energy_management_ui/src/views/dataEntry/stagseDataEntryEdit/index.vue
deleted file mode 100644
index bde374a..0000000
--- a/energy_management_ui/src/views/dataEntry/stagseDataEntryEdit/index.vue
+++ /dev/null
@@ -1,53 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" :width="isCollapse?'0px':'280px'">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            鎸囨爣搴撶鐞�
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode"
-                     modelCode="statistic_index_model"
-                     :showOpt="false" :auth="false"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <div style="cursor:pointer;" @click="toggleCollapse">
-          <img src="@/assets/image/configureChart.png" style="width: 100%;height: 100%">
-        </div>
-        <el-main style="padding:0">
-          <stagseDataEntry ref="stagseDataEntry"></stagseDataEntry>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-<script>
-  import ModelNode from "../../basicsetting/modelNode/modelNode"
-  import stagseDataEntry from "./stagseDataEntryEdit";
-  export default {
-    components: {ModelNode,stagseDataEntry},
-    created() {},
-    data() {
-      return {
-        modelData: '',
-        isCollapse: false,
-      }
-    },
-    methods: {
-      changeNode: function (node) {
-        this.$refs.stagseDataEntry.modelNodeChange(node);
-      },
-      manageModel: function () {
-        this.$router.push('/model');
-      },
-      changeModel: function (item) {
-        this.$refs.modelNode.getList(item);
-      },
-      // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-      toggleCollapse () {
-        this.isCollapse = !this.isCollapse
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/dataEntry/stagseDataEntryEdit/stagseDataEntryEdit.vue b/energy_management_ui/src/views/dataEntry/stagseDataEntryEdit/stagseDataEntryEdit.vue
deleted file mode 100644
index 70f0628..0000000
--- a/energy_management_ui/src/views/dataEntry/stagseDataEntryEdit/stagseDataEntryEdit.vue
+++ /dev/null
@@ -1,203 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鏃ユ湡绫诲瀷" prop="timeType">
-        <el-select v-model="queryParams.timeType" placeholder="鏃ユ湡绫诲瀷" clearable size="small" @change="handleTime">
-          <el-option
-            v-for="dict in entryDataTimeOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="閫夋嫨鎸囨爣" prop="code">
-        <el-select v-model="code" multiple style="width: 300px">
-          <el-option
-            v-for="item in list"
-            :key="item.code"
-            :label="item.name"
-            :value="item.code">
-          </el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="閫夋嫨鏃堕棿" prop="dataTime">
-        <!--<el-date-picker
-          v-model="queryParams.dataTime"
-          :type="dateTypes"
-          :value-format="valueFormat"
-          placeholder="缁撴潫鏃ユ湡">
-        </el-date-picker>-->
-        <el-date-picker
-          v-model="dateRange"
-          :type="dateTypes"
-          :value-format="valueFormat"
-          range-separator="鑷�"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          v-hasPermi="['dataEntry:stagseDataEntry:add']"
-          @click="handleAdd"
-        >淇濆瓨閰嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-    <el-form refs="form" :model="form" >
-    <el-table v-loading="loading" :data="stagseDataEntryList" border ref="multipleTable">
-      <el-table-column label="鎸囨爣缂栫爜" align="center" prop="code"></el-table-column>
-      <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="name"></el-table-column>
-      <el-table-column label="鎸囨爣鍗曚綅" align="center" prop="unitId"></el-table-column>
-      <el-table-column label="鏃堕棿" align="center" prop="dataTime" >
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.dataTime) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="鍊�" align="center">
-        <template scope="scope">
-        <el-input size="mini" v-model="scope.row.value"></el-input>
-        <el-input type="hidden" v-model="scope.row.timeType"></el-input>
-        <el-input type="hidden" v-model="scope.row.indexId"></el-input>
-      </template>
-      </el-table-column>
-    </el-table>
-    </el-form>
-  </div>
-</template>
-
-<script>
-import {addStagseDataEntry,getSettingIndex,stagseDataEntryEdit} from "@/api/dataEntry/stagseDataEntry";
-
-export default {
-  props: ["modelCode"],
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      dateRange:[],
-      form:{},
-      // stagseDataEntry琛ㄦ牸鏁版嵁
-      stagseDataEntryList: [],
-      list:[],
-      entryDataTimeOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        indexId: undefined,
-        dataTime: undefined,
-        nodeId:undefined,
-        timeType:"HOUR",
-        calcType:undefined,
-        indexCode: undefined,
-      },
-      dateTypes:"datetimerange",
-      valueFormat:"yyyy-MM-dd HH:mm:ss",
-      configInfo:[],
-      code: [],
-      currentNode:""
-    };
-  },
-  created() {
-    this.getDicts("entryDataTime").then(response => {
-      this.entryDataTimeOptions = response.data;
-      this.queryParams.timeType = this.entryDataTimeOptions.find(f => f.isDefault === 'Y').dictValue;
-    });
-    this.getTime();
-  },
-  methods: {
-    modelNodeChange(modelNode) {
-      this.currentNode = modelNode.id;
-      this.getEnergy();
-      this.code= [];
-    },
-    getEnergy(){
-      getSettingIndex(this.currentNode).then(response => {
-        let result = response.data;
-        this.list=result.filter(f => f.indexType === 'STATISTIC');
-      })
-    },
-    getList() {
-      if (this.code !=undefined && this.code.length>0) {
-        this.loading = true;
-        this.queryParams.indexCode=this.code.join(',');
-        this.queryParams.calcType="CALC";
-        this.queryParams.nodeId=this.currentNode;
-        stagseDataEntryEdit(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
-          this.stagseDataEntryList = response.data;
-          this.loading = false;
-        });
-        this.loading = false;
-      }else{
-        this.msgSuccess("璇烽�夋嫨鎸囨爣");
-      }
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList()
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.dateRange = [];
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    handleAdd(){
-      this.$nextTick(() => {
-        this.form.configInfo=JSON.stringify( this.$refs['multipleTable'].data);
-        addStagseDataEntry(this.form.configInfo).then(response => {
-          if (response.code === 200) {
-            this.msgSuccess("淇濆瓨閰嶇疆鎴愬姛");
-            this.getList();
-          } else {
-            this.msgError(response.msg);
-          }
-        })
-      });
-    },
-    handleTime(selVal){
-      if(selVal=='YEAR'){
-        this.dateTypes= 'monthrange';
-        this.valueFormat='yyyy-MM';
-      }else if(selVal=='MONTH'){
-        this.dateTypes= 'monthrange';
-        this.valueFormat='yyyy-MM';
-      }else if(selVal=='DAY'){
-        this.dateTypes= 'daterange';
-        this.valueFormat='yyyy-MM-dd';
-      }else if(selVal=='HOUR'){
-        this.dateTypes= 'datetime';
-        this.valueFormat='yyyy-MM-dd HH:mm:ss';
-      }
-    },
-    getTime(){
-      this.startTime = new Date().setHours(0, 0, 0, 0);
-      this.endTime = new Date().setHours(0, 0, 0, 0) + 24 * 60 * 60 * 1000 - 1;
-      this.dateRange = [this.formatDate(this.startTime),this.formatDate(this.endTime)];
-      this.queryParams.dataTime=this.formatDate(new Date().getTime());
-    },
-    formatDate: function (value) {
-      let date = new Date(value);
-      let y = date.getFullYear();
-      let MM = date.getMonth() + 1;
-      MM = MM < 10 ? ('0' + MM) : MM;
-      let d = date.getDate();
-      d = d < 10 ? ('0' + d) : d;
-      let h = date.getHours();
-      h = h < 10 ? ('0' + h) : h;
-      let m = date.getMinutes();
-      m = m < 10 ? ('0' + m) : m;
-      let s = date.getSeconds();
-      s = s < 10 ? ('0' + s) : s;
-      return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;
-    },
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/dataMonitoring/energyPercent/energyPercent.vue b/energy_management_ui/src/views/dataMonitoring/energyPercent/energyPercent.vue
deleted file mode 100644
index 42890e3..0000000
--- a/energy_management_ui/src/views/dataMonitoring/energyPercent/energyPercent.vue
+++ /dev/null
@@ -1,381 +0,0 @@
-<template>
-  <div>
-    <div class="dashboard-editor-container">
-      <el-card>
-        <el-form
-          :model="queryParams"
-          ref="queryForm"
-          :inline="true"
-          label-width="68px"
-        >
-          <el-form-item label="" label-width="0px">
-            <el-radio-group
-              v-model="queryParams.timeType"
-              size="small"
-              @change="handleTime"
-            >
-              <el-radio-button
-                v-for="dict in dateTypeOptions"
-                :key="dict.dictValue"
-                :label="dict.dictValue"
-                >{{ dict.dictLabel }}</el-radio-button
-              >
-            </el-radio-group>
-            <el-date-picker
-              style="margin-left: 8px"
-              :clearable="true"
-              size="small"
-              v-model="beginTime"
-              :type="dateType == 'date' ? 'date' : 'datetime'"
-              :value-format="valueFormat"
-              placeholder="寮�濮嬫棩鏈�"
-              :picker-options="{ disabledDate: disabledDateStart }"
-              :default-time="['12:00:00']"
-            ></el-date-picker>
-            -
-            <el-date-picker
-              :clearable="true"
-              size="small"
-              v-model="endTime"
-              :type="dateType == 'date' ? 'date' : 'datetime'"
-              :value-format="valueFormat"
-              placeholder="缁撴潫鏃ユ湡"
-              :picker-options="{ disabledDate: disabledDateEnd }"
-              :default-time="['12:00:00']"
-            ></el-date-picker>
-          </el-form-item>
-          <el-form-item label="鑳芥簮鍝佺">
-            <el-select
-              size="small"
-              v-model="queryParams.energyType"
-              placeholder="璇烽�夋嫨鑳芥簮"
-              @change="changeEnergyType"
-            >
-              <el-option
-                style="width: 150px"
-                v-for="dict in powerTypeOptions"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item>
-            <el-button
-              type="primary"
-              icon="el-icon-search"
-              size="mini"
-              @click="handleQuery"
-              >鏌ヨ</el-button
-            >
-            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-              >閲嶇疆</el-button
-            >
-          </el-form-item>
-        </el-form>
-      </el-card>
-    </div>
-    <div :style="bodyStyle">
-      <div>
-        <div class="table-wrapper">
-          <el-card>
-            <div slot="header" class="clearfix">
-              <span
-                >鐢▄{ queryParams.energyTypeName }}閲弡{
-                  `锛堝悎璁″��${
-                    tableData.length ? "锛�" + tableData[0].sumValue : "0"
-                  }锛塦
-                }}</span
-              >
-            </div>
-            <div>
-              <pie-chart
-                :chart-data="firstPieData"
-                height="500px"
-                legend="right"
-                pieTitle="鑳借�楀崰姣斿垎鏋�"
-              />
-            </div>
-            <el-table :data="tableData" height="400">
-              <el-table-column
-                prop="energyUnitName"
-                label="鐢ㄨ兘鍗曞厓"
-                align="center"
-                show-overflow-tooltip
-              ></el-table-column>
-              <el-table-column prop="value" :label="`娑堣�楅噺`" align="center">
-                <!-- <template slot-scope="scope">
-                  <span>{{ scope.row.value }}</span>
-                </template> -->
-              </el-table-column>
-              <el-table-column prop="ratio" label="鍗犳瘮" align="center">
-                <template slot-scope="scope">
-                  <span>{{ scope.row.ratio }}%</span>
-                </template>
-              </el-table-column>
-            </el-table>
-          </el-card>
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import mixins from "@/layout/mixin/getHeight";
-import PieChart from "../../dashboard/PieChart";
-import { getElectricityShareAnalysis } from "@/api/dataMonitoring/energyPercent/index.js";
-import { listEnergyType } from "@/api/home/home";
-import moment from "moment";
-export default {
-  mixins: [mixins],
-  components: {
-    PieChart
-  },
-  data() {
-    return {
-      pickerOptions: {
-        // 涓嶈閫夋嫨浠婂ぉ浠ュ墠鐨�
-      },
-      dateTypeOptions: [
-        // { dictValue: "YEAR", dictLabel: "骞�" },
-        // { dictValue: "MONTH", dictLabel: "鏈�" },
-        { dictValue: "DAY", dictLabel: "鏃�" },
-        { dictValue: "HOUR", dictLabel: "灏忔椂" }
-      ],
-      modelCode: "",
-      firstPieData: [],
-      timeValue: [],
-      beginTime: "",
-      endTime: "",
-      queryParams: {
-        timeType: "DAY",
-        time: "",
-        energyType: "",
-        energyTypeName: "",
-        modelCode: ""
-      },
-      powerTypeOptions: [
-        { value: "electric", label: "鐢�", modelCode: "ElectricShareAnalysis" },
-        // { value: "water", label: "姘�", modelCode: "WaterShareAnalysis" },
-        { value: "steam", label: "钂告苯", modelCode: "SteamShareAnalysis" }
-      ],
-      tableData: [],
-      dateType: "date",
-      valueFormat: ""
-    };
-  },
-  created() {
-    this.modelCode = this.$route.query.modelCode || "Composite_Indicators";
-    this.queryParams.time = moment().format("yyyy-MM-DD");
-    this.beginTime = moment()
-      .subtract("day", 30)
-      .format("yyyy-MM-DD");
-    this.endTime = moment().format("yyyy-MM-DD");
-
-    // this.getEnergyType();
-    this.changeEnergyType("electric");
-  },
-  methods: {
-    disabledDateStart(time) {
-      if (this.endTime && this.dateType == "date") {
-        let endTime = moment(this.endTime).valueOf();
-        return (
-          time.getTime() < endTime - 24 * 30 * 60 * 60 * 1000 ||
-          time.getTime() > Date.now()
-        );
-      }
-      if (this.endTime && this.dateType == "hour") {
-        let endTime = moment(this.endTime).valueOf();
-        return (
-          time.getTime() < endTime - 24 * 7 * 60 * 60 * 1000 ||
-          time.getTime() > Date.now()
-        );
-      }
-      return time.getTime() > Date.now();
-    },
-    disabledDateEnd(time) {
-      if (this.beginTime && this.dateType == "date") {
-        let beginTime = moment(this.beginTime).valueOf();
-        return (
-          time.getTime() > beginTime + 24 * 30 * 60 * 60 * 1000 ||
-          time.getTime() > Date.now()
-        );
-      }
-      if (this.beginTime && this.dateType == "hour") {
-        let beginTime = moment(this.beginTime).valueOf();
-        return (
-          time.getTime() > beginTime + 24 * 7 * 60 * 60 * 1000 ||
-          time.getTime() > Date.now()
-        );
-      }
-      return time.getTime() > Date.now();
-    },
-    changeEnergyType(e) {
-      console.log(e);
-      for (let i = 0; i < this.powerTypeOptions.length; i++) {
-        if (e == this.powerTypeOptions[i].value) {
-          this.queryParams.energyType = e;
-          this.queryParams.energyTypeName = this.powerTypeOptions[i].label;
-          this.queryParams.modelCode = this.powerTypeOptions[i].modelCode;
-        }
-      }
-      this.handleQuery();
-    },
-    handleTime(date) {
-      console.log(date, moment().year());
-      this.queryParams.timeType = date;
-      this.beginTime = "";
-      this.endTime = "";
-      if (date == "YEAR") {
-        this.dateType = "year";
-        this.valueFormat = "yyyy";
-        this.queryParams.time = moment()
-          .year()
-          .toString();
-      } else if (date == "MONTH") {
-        this.dateType = "month";
-        this.valueFormat = "yyyy-MM";
-        this.queryParams.time = moment().format("yyyy-MM");
-      } else if (date == "DAY") {
-        this.dateType = "date";
-        this.valueFormat = "yyyy-MM-dd";
-        this.queryParams.time = moment().format("yyyy-MM-DD");
-        this.beginTime = moment()
-          .subtract("day", 30)
-          .format("yyyy-MM-DD");
-        this.endTime = moment().format("yyyy-MM-DD");
-      } else {
-        this.dateType = "hour";
-        this.valueFormat = "yyyy-MM-dd HH:mm:ss";
-        this.queryParams.time = moment().format("yyyy-MM-DD HH:mm:ss");
-        this.beginTime = moment()
-          .subtract("day", 7)
-          .format("yyyy-MM-DD HH:mm:ss");
-        this.endTime = moment().format("yyyy-MM-DD HH:mm:ss");
-      }
-      this.getList();
-    },
-    getTime() {
-      let timeType = this.queryParams.timeType;
-      var date = new Date(this.queryParams.time);
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      let dataTime = [];
-      let startTime, endTime;
-      if (timeType == "YEAR") {
-        startTime = year + "-01-01 00:00:00";
-        endTime = year + "-12-31 23:59:59";
-      } else if (timeType == "MONTH") {
-        startTime = year + "-" + month + "-01 00:00:00";
-        endTime = year + "-" + month + "-31 23:59:59";
-      } else {
-        startTime = year + "-" + month + "-" + date + " 00:00:00";
-        endTime = year + "-" + month + "-" + date + " 23:59:59";
-      }
-      dataTime = [startTime, endTime];
-      return dataTime;
-    },
-    getList() {
-      // let rangeDate = this.getTime();
-      if (!this.beginTime || !this.endTime) {
-        this.$message({
-          message: "璇峰厛閫夋嫨鏌ヨ鏃ユ湡",
-          type: "warning"
-        });
-        return false;
-      }
-      let valueFormat =
-        this.dateType == "date" ? "YYYY-MM-DD" : "YYYY-MM-DD HH:mm:ss";
-      // let params = {
-      //   ...this.queryParams,
-      //   beginTime: this.dateType == "date" ? moment(this.beginTime).format('YYYY-MM-DD')
-      // }
-      getElectricityShareAnalysis({
-        ...this.queryParams,
-        // modelCode: this.modelCode,
-        // beginTime: rangeDate[0],
-        // endTime: rangeDate[1]
-        beginTime: moment(this.beginTime).format(valueFormat),
-        endTime: moment(this.endTime).format(valueFormat)
-      }).then(res => {
-        this.firstPieData = res.data
-          ? res.data.map(item => {
-              return {
-                name: item.energyUnitName,
-                value: item.value || 0,
-                unit: item.unit || ""
-              };
-            })
-          : [];
-
-        this.tableData = res.data;
-      });
-    },
-    getEnergyType() {
-      listEnergyType()
-        .then(res => {
-          if (res.code === 200) {
-            this.powerTypeOptions =
-              res.data.map(item => ({
-                ...item,
-                value: item.energy,
-                label: item.energyName
-              })) || [];
-            this.queryParams.energyType =
-              this.powerTypeOptions.length > 0
-                ? this.powerTypeOptions[0].value
-                : "";
-            this.queryParams.energyTypeName =
-              this.powerTypeOptions.length > 0
-                ? this.powerTypeOptions[0].label
-                : "";
-            this.getList();
-          }
-        })
-        .catch(e => {
-          console.log("鑾峰彇鑳芥簮绫诲瀷鍒楄〃", e);
-        });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.queryParams = {
-        time: moment().format("yyyy-MM")
-      };
-      this.handleQuery();
-    },
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 195 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 100 + "px"
-      };
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.dashboard-editor-container {
-  margin-bottom: 16px;
-  ::v-deep {
-    .el-card__body {
-      padding: 20px 12px 0 12px;
-    }
-  }
-  .pdf-wrapper {
-    width: 80%;
-    margin: 0 auto;
-  }
-  .table-wrapper {
-    margin-top: 16px;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/dataMonitoring/energyPercent/waterPercent.vue b/energy_management_ui/src/views/dataMonitoring/energyPercent/waterPercent.vue
deleted file mode 100644
index 6fe3157..0000000
--- a/energy_management_ui/src/views/dataMonitoring/energyPercent/waterPercent.vue
+++ /dev/null
@@ -1,429 +0,0 @@
-<template>
-  <div>
-    <div class="dashboard-editor-container">
-      <el-card>
-        <el-form
-          :model="queryParams"
-          ref="queryForm"
-          :inline="true"
-          label-width="68px"
-        >
-          <el-form-item label="" label-width="0px">
-            <el-radio-group
-              v-model="queryParams.timeType"
-              size="small"
-              @change="handleTime"
-            >
-              <el-radio-button
-                v-for="dict in dateTypeOptions"
-                :key="dict.dictValue"
-                :label="dict.dictValue"
-                >{{ dict.dictLabel }}</el-radio-button
-              >
-            </el-radio-group>
-            <el-date-picker
-              style="margin-left: 8px"
-              :clearable="true"
-              size="small"
-              v-model="beginTime"
-              :type="dateType == 'date' ? 'date' : 'datetime'"
-              :value-format="valueFormat"
-              placeholder="寮�濮嬫棩鏈�"
-              :picker-options="{ disabledDate: disabledDateStart }"
-              :default-time="['12:00:00']"
-            ></el-date-picker>
-            -
-            <el-date-picker
-              :clearable="true"
-              size="small"
-              v-model="endTime"
-              :type="dateType == 'date' ? 'date' : 'datetime'"
-              :value-format="valueFormat"
-              placeholder="缁撴潫鏃ユ湡"
-              :picker-options="{ disabledDate: disabledDateEnd }"
-              :default-time="['12:00:00']"
-            ></el-date-picker>
-          </el-form-item>
-          <!-- <el-form-item label="鑳芥簮鍝佺">
-            <el-select
-              size="small"
-              v-model="queryParams.energyType"
-              placeholder="璇烽�夋嫨鑳芥簮"
-              @change="changeEnergyType"
-            >
-              <el-option
-                style="width: 150px"
-                v-for="dict in powerTypeOptions"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
-              ></el-option>
-            </el-select>
-          </el-form-item> -->
-          <el-form-item>
-            <el-button
-              type="primary"
-              icon="el-icon-search"
-              size="mini"
-              @click="handleQuery"
-              >鏌ヨ</el-button
-            >
-            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-              >閲嶇疆</el-button
-            >
-          </el-form-item>
-        </el-form>
-      </el-card>
-    </div>
-    <div :style="bodyStyle">
-      <div>
-        <div class="table-wrapper">
-          <el-tabs
-            v-model="queryParams.energyType"
-            class="demo-tabs"
-            @tab-click="changeTabs"
-          >
-            <el-tab-pane
-              v-for="dict in powerTypeOptions"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value"
-              :name="dict.value"
-            ></el-tab-pane>
-          </el-tabs>
-          <el-card shadow="never">
-            <div slot="header" class="clearfix">
-              <span
-                >鐢▄{ queryParams.energyTypeName }}閲弡{
-                  `锛堝悎璁″��${
-                    tableData.length ? "锛�" + tableData[0].sumValue : "0"
-                  }锛塦
-                }}</span
-              >
-            </div>
-            <div>
-              <pie-chart
-                :chart-data="firstPieData"
-                height="500px"
-                legend="right"
-                pieTitle="鑳借�楀崰姣斿垎鏋�"
-              />
-            </div>
-            <el-table :data="tableData" height="400">
-              <el-table-column
-                prop="energyUnitName"
-                label="鐢ㄨ兘鍗曞厓"
-                align="center"
-                show-overflow-tooltip
-              ></el-table-column>
-              <el-table-column prop="value" :label="`娑堣�楅噺`" align="center">
-                <!-- <template slot-scope="scope">
-                  <span>{{ scope.row.value }}</span>
-                </template> -->
-              </el-table-column>
-              <el-table-column prop="ratio" label="鍗犳瘮" align="center">
-                <template slot-scope="scope">
-                  <span>{{ scope.row.ratio }}%</span>
-                </template>
-              </el-table-column>
-            </el-table>
-          </el-card>
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import mixins from "@/layout/mixin/getHeight";
-import PieChart from "../../dashboard/PieChart";
-import { getElectricityShareAnalysis } from "@/api/dataMonitoring/energyPercent/index.js";
-import { listEnergyType } from "@/api/home/home";
-import moment from "moment";
-export default {
-  mixins: [mixins],
-  components: {
-    PieChart
-  },
-  data() {
-    return {
-      pickerOptions: {
-        // 涓嶈閫夋嫨浠婂ぉ浠ュ墠鐨�
-      },
-      dateTypeOptions: [
-        // { dictValue: "YEAR", dictLabel: "骞�" },
-        // { dictValue: "MONTH", dictLabel: "鏈�" },
-        { dictValue: "DAY", dictLabel: "鏃�" },
-        { dictValue: "HOUR", dictLabel: "灏忔椂" }
-      ],
-      modelCode: "",
-      firstPieData: [],
-      timeValue: [],
-      beginTime: "",
-      endTime: "",
-      queryParams: {
-        timeType: "DAY",
-        time: "",
-        energyType: "water",
-        energyTypeName: "",
-        modelCode: ""
-      },
-      powerTypeOptions: [
-        { value: "water", label: "鎬绘按琛�", modelCode: "WaterShareAnalysis" },
-        {
-          value: "water1",
-          label: "鐢熸椿姘�",
-          modelCode: "WaterShareAnalysis_1"
-        },
-        {
-          value: "water2",
-          label: "宸ヨ壓姘寸",
-          modelCode: "WaterShareAnalysis_2"
-        }
-      ],
-      tableData: [],
-      dateType: "date",
-      valueFormat: ""
-    };
-  },
-  created() {
-    this.modelCode = this.$route.query.modelCode || "WaterShareAnalysis";
-    this.queryParams.time = moment().format("yyyy-MM-DD");
-    this.beginTime = moment()
-      .subtract("day", 30)
-      .format("yyyy-MM-DD");
-    this.endTime = moment().format("yyyy-MM-DD");
-
-    // this.changeEnergyType("water");
-    this.changeTabs({ index: 0 });
-  },
-  methods: {
-    disabledDateStart(time) {
-      if (this.endTime && this.dateType == "date") {
-        let endTime = moment(this.endTime).valueOf();
-        return (
-          time.getTime() < endTime - 24 * 30 * 60 * 60 * 1000 ||
-          time.getTime() > Date.now()
-        );
-      }
-      if (this.endTime && this.dateType == "hour") {
-        let endTime = moment(this.endTime).valueOf();
-        return (
-          time.getTime() < endTime - 24 * 7 * 60 * 60 * 1000 ||
-          time.getTime() > Date.now()
-        );
-      }
-      return time.getTime() > Date.now();
-    },
-    disabledDateEnd(time) {
-      if (this.beginTime && this.dateType == "date") {
-        let beginTime = moment(this.beginTime).valueOf();
-        return (
-          time.getTime() > beginTime + 24 * 30 * 60 * 60 * 1000 ||
-          time.getTime() > Date.now()
-        );
-      }
-      if (this.beginTime && this.dateType == "hour") {
-        let beginTime = moment(this.beginTime).valueOf();
-        return (
-          time.getTime() > beginTime + 24 * 7 * 60 * 60 * 1000 ||
-          time.getTime() > Date.now()
-        );
-      }
-      return time.getTime() > Date.now();
-    },
-    changeEnergyType(e) {
-      console.log(e);
-      for (let i = 0; i < this.powerTypeOptions.length; i++) {
-        if (e == this.powerTypeOptions[i].value) {
-          this.queryParams.energyType = e;
-          this.queryParams.energyTypeName = this.powerTypeOptions[i].label;
-          this.queryParams.modelCode = this.powerTypeOptions[i].modelCode;
-        }
-      }
-      this.handleQuery();
-    },
-    changeTabs(tab, e) {
-      let index = tab.index;
-      // this.queryParams.energyType = index;
-      this.queryParams.energyTypeName = this.powerTypeOptions[index].label;
-      this.queryParams.modelCode = this.powerTypeOptions[index].modelCode;
-      this.handleQuery();
-    },
-    handleTime(date) {
-      console.log(date, moment().year());
-      this.queryParams.timeType = date;
-      this.beginTime = "";
-      this.endTime = "";
-      if (date == "YEAR") {
-        this.dateType = "year";
-        this.valueFormat = "yyyy";
-        this.queryParams.time = moment()
-          .year()
-          .toString();
-      } else if (date == "MONTH") {
-        this.dateType = "month";
-        this.valueFormat = "yyyy-MM";
-        this.queryParams.time = moment().format("yyyy-MM");
-      } else if (date == "DAY") {
-        this.dateType = "date";
-        this.valueFormat = "yyyy-MM-dd";
-        this.queryParams.time = moment().format("yyyy-MM-DD");
-        this.beginTime = moment()
-          .subtract("day", 30)
-          .format("yyyy-MM-DD");
-        this.endTime = moment().format("yyyy-MM-DD");
-      } else {
-        this.dateType = "hour";
-        this.valueFormat = "yyyy-MM-dd HH:mm:ss";
-        this.queryParams.time = moment().format("yyyy-MM-DD HH:mm:ss");
-        this.beginTime = moment()
-          .subtract("day", 7)
-          .format("yyyy-MM-DD HH:mm:ss");
-        this.endTime = moment().format("yyyy-MM-DD HH:mm:ss");
-      }
-      this.getList();
-    },
-    getTime() {
-      let timeType = this.queryParams.timeType;
-      var date = new Date(this.queryParams.time);
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      let dataTime = [];
-      let startTime, endTime;
-      if (timeType == "YEAR") {
-        startTime = year + "-01-01 00:00:00";
-        endTime = year + "-12-31 23:59:59";
-      } else if (timeType == "MONTH") {
-        startTime = year + "-" + month + "-01 00:00:00";
-        endTime = year + "-" + month + "-31 23:59:59";
-      } else {
-        startTime = year + "-" + month + "-" + date + " 00:00:00";
-        endTime = year + "-" + month + "-" + date + " 23:59:59";
-      }
-      dataTime = [startTime, endTime];
-      return dataTime;
-    },
-    getList() {
-      // let rangeDate = this.getTime();
-      if (!this.beginTime || !this.endTime) {
-        this.$message({
-          message: "璇峰厛閫夋嫨鏌ヨ鏃ユ湡",
-          type: "warning"
-        });
-        return false;
-      }
-      let valueFormat =
-        this.dateType == "date" ? "YYYY-MM-DD" : "YYYY-MM-DD HH:mm:ss";
-      // let params = {
-      //   ...this.queryParams,
-      //   beginTime: this.dateType == "date" ? moment(this.beginTime).format('YYYY-MM-DD')
-      // }
-      getElectricityShareAnalysis({
-        ...this.queryParams,
-        // modelCode: this.modelCode,
-        // beginTime: rangeDate[0],
-        // endTime: rangeDate[1]
-        beginTime: moment(this.beginTime).format(valueFormat),
-        endTime: moment(this.endTime).format(valueFormat)
-      }).then(res => {
-        this.firstPieData = res.data
-          ? res.data.map(item => {
-              return {
-                name: item.energyUnitName,
-                value: item.value || 0,
-                unit: item.unit || ""
-              };
-            })
-          : [];
-
-        this.tableData = res.data;
-      });
-    },
-    getEnergyType() {
-      listEnergyType()
-        .then(res => {
-          if (res.code === 200) {
-            this.powerTypeOptions =
-              res.data.map(item => ({
-                ...item,
-                value: item.energy,
-                label: item.energyName
-              })) || [];
-            this.queryParams.energyType =
-              this.powerTypeOptions.length > 0
-                ? this.powerTypeOptions[0].value
-                : "";
-            this.queryParams.energyTypeName =
-              this.powerTypeOptions.length > 0
-                ? this.powerTypeOptions[0].label
-                : "";
-            this.getList();
-          }
-        })
-        .catch(e => {
-          console.log("鑾峰彇鑳芥簮绫诲瀷鍒楄〃", e);
-        });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.queryParams = {
-        time: moment().format("yyyy-MM")
-      };
-      this.handleQuery();
-    },
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 195 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 100 + "px"
-      };
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-@import "~@/assets/styles/variables.scss";
-.dashboard-editor-container {
-  margin-bottom: 16px;
-  ::v-deep {
-    .el-card__body {
-      padding: 20px 12px 0 12px;
-    }
-  }
-  .pdf-wrapper {
-    width: 80%;
-    margin: 0 auto;
-  }
-  .table-wrapper {
-    margin-top: 16px;
-    // background: #fff;
-  }
-}
-.table-wrapper {
-  padding-top: 0px;
-  background: #061844;
-  .demo-tabs {
-    padding: 0 16px;
-  }
-  ::v-deep {
-    .el-card {
-      border: none;
-    }
-    .el-tabs__item {
-      color: #fff;
-    }
-    .el-tabs__item.is-active {
-      color: $primary-color;
-    }
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/dataMonitoring/historyDataTrend/historyMonitoringSetting.vue b/energy_management_ui/src/views/dataMonitoring/historyDataTrend/historyMonitoringSetting.vue
deleted file mode 100644
index 749bc4d..0000000
--- a/energy_management_ui/src/views/dataMonitoring/historyDataTrend/historyMonitoringSetting.vue
+++ /dev/null
@@ -1,355 +0,0 @@
-<template>
-  <div class="" style="width: 100%">
-    <div class="search-wrapper">
-      <el-select
-        v-model="queryParams.indexId"
-        placeholder="璇烽�夋嫨鐐逛綅"
-        style="width:200px;margin-right: 6px"
-        size="small"
-      >
-        <el-option
-          v-for="i in indexList"
-          :key="i.indexId"
-          :label="i.indexName"
-          :value="i.indexId"
-        />
-      </el-select>
-      <el-radio-group
-        size="small"
-        v-model="queryParams.timeType"
-        @change="changeRadio"
-      >
-        <el-radio-button label="DAY">鏃�</el-radio-button>
-        <el-radio-button label="HOUR">灏忔椂</el-radio-button>
-      </el-radio-group>
-      <el-date-picker
-        size="small"
-        style="width: 160px;margin-left: 6px"
-        v-model="queryParams.dataTime"
-        type="date"
-        :clearable="false"
-        placeholder="閫夋嫨鏃ユ湡"
-        value-format="yyyy-MM-dd"
-      >
-      </el-date-picker>
-      <el-select
-        v-show="queryParams.timeType == 'HOUR'"
-        v-model="queryParams.hourTime"
-        placeholder="璇烽�夋嫨"
-        style="width:80px;margin-left: 6px"
-        size="small"
-        clearable
-      >
-        <el-option
-          v-for="i in 25"
-          :key="i"
-          :label="i < 11 ? '0' + (i - 1) + '鏃�' : i - 1 + '鏃�'"
-          :value="i - 1"
-        />
-      </el-select>
-      <el-button
-        type="primary"
-        icon="el-icon-search"
-        size="small"
-        @click="handleQuery"
-        style="margin-left: 6px"
-        >鏌ヨ</el-button
-      >
-      <el-button icon="el-icon-refresh" size="small" @click="resetQuery"
-        >閲嶇疆</el-button
-      >
-      <el-button
-        type="warning"
-        icon="el-icon-download"
-        size="mini"
-        @click="handleExport"
-        >瀵煎嚭</el-button
-      >
-    </div>
-    <basic-container :bodyStyle="bodyStyle">
-      <div>
-        <el-table
-          :data="tableData"
-          border
-          max-height="380px"
-          v-loading="loading"
-        >
-          <el-table-column
-            prop="indexName"
-            label="鐐逛綅鍚嶇О"
-            align="center"
-            show-overflow-tooltip
-          ></el-table-column>
-          <el-table-column
-            prop="value"
-            label="鐐逛綅鍊�"
-            align="center"
-          ></el-table-column>
-          <el-table-column
-            prop="usedValue"
-            label="浣跨敤鍊�"
-            align="center"
-          ></el-table-column>
-          <el-table-column
-            prop="dataTime"
-            label="鏃堕棿"
-            align="center"
-          ></el-table-column>
-          <!-- <el-table-column
-          prop="ratio"
-          label="鍚屾瘮"
-          align="center"
-        ></el-table-column> -->
-        </el-table>
-      </div>
-      <div style="margin-top: 30px">
-        <el-button-group>
-          <el-button
-            :type="lineValue == 'usedValue' ? 'default' : 'primary'"
-            @click="handleLine('value')"
-            >鐐逛綅鍊�</el-button
-          >
-          <el-button
-            :type="lineValue == 'usedValue' ? 'primary' : 'default'"
-            @click="handleLine('usedValue')"
-            >浣跨敤鍊�</el-button
-          >
-        </el-button-group>
-        <div id="lineChartId" :style="{ height: '350px', width: '100%' }" />
-      </div>
-    </basic-container>
-  </div>
-</template>
-
-<script>
-import moment from "moment";
-import {
-  getCodeList,
-  getIndexList,
-  exportHistoryDataTrend
-} from "@/api/dataMonitoring/historyDataTrend/historyDataTrend";
-import echarts from "echarts";
-// require("echarts/theme/macarons"); // echarts theme
-export default {
-  name: "historyMonitoringSetting",
-  data() {
-    return {
-      valueFormat: "yyyy-MM-dd",
-      currentNode: undefined,
-      queryParams: {
-        nodeId: undefined,
-        indexId: "",
-        pickerType: "date",
-        dataTime: undefined,
-        timeType: "DAY", // YEAR,MONTH,DAY,HOUR
-        hourTime: 0
-      },
-      chart: null,
-      chartData: {
-        xData: [],
-        legendArr: [],
-        titleName: ""
-      },
-      indexList: [],
-      tableData: [],
-      lineValue: "usedValue",
-      pickerType: "date"
-    };
-  },
-  props: {
-    bodyStyle: {
-      type: Object,
-      default: () => {}
-    }
-  },
-  mounted() {
-    this.pickerType = "date";
-    this.valueFormat = "yyyy-MM-dd";
-    this.queryParams.dataTime = moment().format("yyyy-MM-DD");
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    changeRadio(e) {
-      if (e == "DAY") {
-        this.pickerType = "date";
-        this.valueFormat = "yyyy-MM-dd";
-        this.queryParams.dataTime = moment().format("yyyy-MM-DD");
-      } else {
-        this.pickerType = "datetime";
-        this.valueFormat = "yyyy-MM-dd HH:mm:ss";
-        // this.queryParams.dataTime = moment().format("yyyy-MM-DD HH:mm:ss");
-        this.queryParams.dataTime = moment().format("yyyy-MM-DD");
-        this.queryParams.hourTime = moment().hour();
-      }
-      this.getList();
-    },
-
-    modelNodeChange(modelNode) {
-      this.queryParams.nodeId = modelNode.id;
-      this.disabledSetting =
-        modelNode === undefined || modelNode === "" || modelNode === null;
-      if (modelNode) {
-        this.currentNode = modelNode;
-        this.getIndexList();
-      }
-    },
-    // 鑾峰彇鐐逛綅鍒楄〃
-    getIndexList() {
-      getIndexList(this.queryParams.nodeId).then(res => {
-        this.indexList = res.data;
-        this.queryParams.indexId = res.data[0].indexId;
-        this.getList();
-      });
-    },
-    handleQuery() {
-      this.getList();
-    },
-    getList() {
-      let query = this.queryParams;
-      if (this.queryParams.timeType == "HOUR") {
-        let dataTime = moment(this.queryParams.dataTime).format("yyyy-MM-DD");
-        let hour =
-          this.queryParams.hourTime < 10
-            ? "0" + this.queryParams.hourTime
-            : this.queryParams.hourTime;
-        query.dataTime = dataTime + " " + hour + ":00:00";
-      } else {
-        query.dataTime = moment(this.queryParams.dataTime).format("yyyy-MM-DD");
-      }
-      console.log("query", query);
-      this.loading = true;
-      getCodeList(this.queryParams).then(response => {
-        this.tableData = response.data;
-        this.total = response.total;
-        this.loading = false;
-        // chart
-        let titleName = this.tableData.length
-          ? this.tableData[0].indexName
-          : "";
-        let xData = this.tableData.map(item => {
-          return this.queryParams.timeType == "DAY"
-            ? moment(item.dataTime).hour() + "鏃�"
-            : moment(item.dataTime).hour() +
-                ":" +
-                moment(item.dataTime).minute();
-        });
-        this.lineValue = "usedValue";
-        let legendArr = this.tableData.map(item => {
-          return item.usedValue === "--" ? null : item.usedValue;
-        });
-        this.chartData = {
-          xData,
-          legendArr,
-          titleName
-        };
-        this.$nextTick(() => {
-          this.initChart();
-        });
-      });
-    },
-    handleLine(type) {
-      this.lineValue = type;
-      let legendArr = this.tableData.map(item => {
-        return item[type] === "--" ? null : item[type];
-      });
-      this.chartData = {
-        ...this.chartData,
-        legendArr
-      };
-      this.setOptions(this.chartData);
-    },
-    resetQuery() {
-      this.queryParams.timeType = "DAY";
-      this.pickerType = "date";
-      this.valueFormat = "yyyy-MM-dd";
-      this.queryParams.dataTime = moment().format("yyyy-MM-DD");
-      this.handleQuery();
-    },
-    initChart() {
-      let chartDom = document.getElementById("lineChartId");
-      this.chart = echarts.init(chartDom);
-      this.setOptions(this.chartData);
-    },
-    setOptions({ xData, legendArr, titleName } = {}) {
-      this.chart.clear();
-      let option = {
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "shadow"
-          }
-        },
-        legend: {
-          right: "center",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        grid: {
-          left: "1",
-          right: "3%",
-          bottom: "3%",
-          containLabel: true
-        },
-        xAxis: {
-          type: "category",
-          data: xData
-        },
-        yAxis: {
-          type: "value",
-          boundaryGap: [0, 0.01],
-          splitLine: {
-            lineStyle: {
-              color: "rgba(32, 121, 160, 0.5)" // y杞村垎鍓茬嚎棰滆壊
-            }
-          }
-        },
-        series: [
-          {
-            name: titleName,
-            type: "line",
-            data: legendArr,
-            color: "#e6e6e6"
-          }
-        ]
-      };
-      this.chart.setOption(option);
-    },
-    handleExport() {
-      let query = this.queryParams;
-      if (this.queryParams.timeType == "HOUR") {
-        let dataTime = moment(this.queryParams.dataTime).format(
-          "yyyy-MM-DD HH"
-        );
-        query.dataTime = dataTime + ":00:00";
-      }
-      console.log("query", query);
-      exportHistoryDataTrend(query).then(response => {
-        this.download(response.msg);
-      });
-    }
-  }
-};
-</script>
-
-<style scoped lang="scss">
-.search-wrapper {
-  display: flex;
-  justify-content: flex-start;
-  align-items: center;
-  height: 100px;
-  z-index: 1000;
-  background: #061844;
-  border-radius: 4px;
-  margin-bottom: 12px;
-  padding: 0 24px;
-  box-shadow: 0 7px 14px 0 rgba(0, 0, 0, 0.1);
-  margin-top: 6px;
-}
-</style>
diff --git a/energy_management_ui/src/views/dataMonitoring/historyDataTrend/index.vue b/energy_management_ui/src/views/dataMonitoring/historyDataTrend/index.vue
deleted file mode 100644
index 1100e86..0000000
--- a/energy_management_ui/src/views/dataMonitoring/historyDataTrend/index.vue
+++ /dev/null
@@ -1,96 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="鍘嗗彶鏁版嵁鏌ヨ" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :showOpt="false"
-            :modelCode="modelCode"
-            :isSelectFirstLeaf="true"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <div>
-          <history-monitoring-setting
-            ref="historyMonitoringSetting"
-            :bodyStyle="bodyStyleRight"
-          ></history-monitoring-setting>
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-// import trendSetting from "./trendSetting";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from "@/components/shrink/index.vue";
-import historyMonitoringSetting from "./historyMonitoringSetting";
-
-export default {
-  components: { ModelNode, ShrinkCol, historyMonitoringSetting },
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  mixins: [mixins],
-  data() {
-    return {
-      modelData: "",
-      modelInfoOptions: [],
-      modelCode: undefined,
-      deviceCategory: "",
-      isCollapse: false,
-      bodyStyleRight: {}
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 248 + "px"
-      };
-    },
-    changeNode: function(node) {
-      this.$refs.historyMonitoringSetting.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
-<style scoped>
-.shrink-col-block {
-  position: absolute;
-  top: 20px;
-  right: 16px;
-  cursor: pointer;
-}
-</style>
diff --git a/energy_management_ui/src/views/dataMonitoring/realTimeTrend/LineChart copy.vue b/energy_management_ui/src/views/dataMonitoring/realTimeTrend/LineChart copy.vue
deleted file mode 100644
index 242556d..0000000
--- a/energy_management_ui/src/views/dataMonitoring/realTimeTrend/LineChart copy.vue
+++ /dev/null
@@ -1,107 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-// import resize from './mixins/resize'
-
-export default {
-  // mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object
-      // required: true
-    }
-  },
-  data() {
-    return {
-      chart: null,
-      alarmLimitName: undefined
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ datas, timeList, title } = {}) {
-      let option = {
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "shadow"
-          }
-        },
-        legend: {
-          right: "1"
-        },
-        grid: {
-          left: "1",
-          right: "3%",
-          bottom: "3%",
-          containLabel: true
-        },
-        xAxis: {
-          type: "category",
-          data: timeList
-        },
-        yAxis: {
-          type: "value",
-          boundaryGap: [0, 0.01]
-        },
-        series: [
-          {
-            name: title,
-            type: "line",
-            data: datas,
-            color: "#FF005A"
-          }
-        ]
-      };
-      this.chart.setOption(option);
-    },
-
-    closeLineChar() {
-      this.chart.clear();
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/dataMonitoring/realTimeTrend/LineChart.vue b/energy_management_ui/src/views/dataMonitoring/realTimeTrend/LineChart.vue
deleted file mode 100644
index b6ea814..0000000
--- a/energy_management_ui/src/views/dataMonitoring/realTimeTrend/LineChart.vue
+++ /dev/null
@@ -1,121 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-// import resize from './mixins/resize'
-
-export default {
-  // mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object
-      // required: true
-    }
-  },
-  data() {
-    return {
-      chart: null,
-      alarmLimitName: undefined
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ datas, timeList, titleList } = {}) {
-      if (datas.length === 0) {
-        this.chart.clear();
-        return;
-      }
-      let option = {
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "shadow"
-          }
-        },
-        legend: {
-          right: "1",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        grid: {
-          left: "1",
-          right: "3%",
-          bottom: "3%",
-          containLabel: true
-        },
-        xAxis: {
-          type: "category",
-          data: timeList
-        },
-        yAxis: {
-          type: "value",
-          boundaryGap: [0, 0.01]
-        },
-        series: datas.map((item, index) => {
-          return {
-            name: titleList[index],
-            type: "line",
-            data: item.value
-          };
-        })
-        // [
-        //   {
-        //     name: title,
-        //     type: "line",
-        //     data: datas,
-        //     color: "#FF005A"
-        //   }
-        // ]
-      };
-      this.chart.setOption(option);
-    },
-
-    closeLineChar() {
-      this.chart.clear();
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/dataMonitoring/realTimeTrend/index.vue b/energy_management_ui/src/views/dataMonitoring/realTimeTrend/index.vue
deleted file mode 100644
index c249949..0000000
--- a/energy_management_ui/src/views/dataMonitoring/realTimeTrend/index.vue
+++ /dev/null
@@ -1,92 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="瀹炴椂瓒嬪娍鐩戞祴" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :showOpt="false"
-            :modelCode="modelCode"
-            :isSelectFirstLeaf="true"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <div>
-          <trend-setting ref="trendSetting" :bodyStyle="bodyStyleRight" />
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import trendSetting from "./trendSetting";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from "@/components/shrink/index.vue";
-
-export default {
-  components: { ModelNode, trendSetting, ShrinkCol },
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  mixins: [mixins],
-  data() {
-    return {
-      modelData: "",
-      modelInfoOptions: [],
-      modelCode: undefined,
-      deviceCategory: "",
-      isCollapse: false,
-      bodyStyleRight: {}
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 130 + "px"
-      };
-    },
-    changeNode: function(node) {
-      this.$refs.trendSetting.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
-<style scoped>
-.shrink-col-block {
-  position: absolute;
-  top: 20px;
-  right: 16px;
-  cursor: pointer;
-}
-</style>
diff --git a/energy_management_ui/src/views/dataMonitoring/realTimeTrend/trendSetting.vue b/energy_management_ui/src/views/dataMonitoring/realTimeTrend/trendSetting.vue
deleted file mode 100644
index 058fce3..0000000
--- a/energy_management_ui/src/views/dataMonitoring/realTimeTrend/trendSetting.vue
+++ /dev/null
@@ -1,281 +0,0 @@
-<template>
-  <basic-container :bodyStyle="bodyStyle" class="realTimeTrend-right">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      label-width="68px"
-      class="special-form"
-      style="margin-bottom: 20px"
-    >
-      <el-row :gutter="24">
-        <el-col :span="24">
-          <el-form-item class="operation" style="text-align: right">
-            <el-button
-              type="primary"
-              icon="el-icon-search"
-              size="mini"
-              @click="handleQuery"
-              >鏌ヨ</el-button
-            >
-            <el-button
-              type="warning"
-              icon="el-icon-download"
-              size="mini"
-              @click="handleExport"
-              >瀵煎嚭</el-button
-            >
-          </el-form-item>
-        </el-col>
-      </el-row>
-    </el-form>
-    <div class="tableStyle">
-      <el-table
-        :data="tableData"
-        ref="dataTable"
-        border
-        style="width: 100%; margin-top: 20px"
-        :max-height="height"
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column
-          type="selection"
-          align="center"
-          width="50"
-        ></el-table-column>
-        <!-- <el-table-column label="鏇茬嚎閫夋嫨" width="100" align="center">
-          <template slot-scope="scope">
-            <el-button
-              v-if="scope.row.code == queryParams.indexCode"
-              icon="el-icon-search"
-              circle
-              @click="selectChange(scope.row)"
-              style="font-size: 10px; color: #fff; background: #478ef7"
-            ></el-button>
-            <el-button
-              v-else
-              icon="el-icon-search"
-              circle
-              @click="selectChange(scope.row)"
-              style="font-size: 10px"
-            ></el-button>
-          </template>
-        </el-table-column> -->
-        <el-table-column prop="indexName" align="center" label="鐐逛綅鍚嶇О" />
-        <el-table-column prop="value" align="center" label="褰撳墠鍊�" />
-        <el-table-column prop="indexUnit" align="center" label="鍗曚綅" />
-        <el-table-column prop="timeString" align="center" label="鏃堕棿" />
-      </el-table>
-    </div>
-    <real-time-line
-      ref="liveLineChart"
-      :chart-data="{
-        ...liveLineChartData,
-        titleList: queryParams.indexName
-      }"
-      style="margin-top: 20px"
-    />
-  </basic-container>
-</template>
-
-<script>
-import {
-  getTrendSettingIndex,
-  getTrendSettingIndexLineData,
-  exportRealTimeTrend
-} from "@/api/dataMonitoring/realTimeTrend/realTimeTrend";
-import realTimeLine from "./LineChart";
-import mixins from "@/layout/mixin/getHeight";
-import moment from "moment";
-
-export default {
-  name: "energyIndex",
-  components: { realTimeLine },
-  mixins: [mixins],
-  props: {
-    bodyStyle: {
-      type: Object,
-      default: () => {}
-    }
-  },
-  data() {
-    return {
-      timeArr: [],
-      currentNode: "",
-      // 閬僵灞�
-      loading: false,
-      // 閫変腑鏁扮粍
-      ids: [],
-      dateRange: [],
-      names: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 鎬绘潯鏁�
-      total: 10,
-      // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-      List: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "鍘嗗彶鏇茬嚎鏌ヨ",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      queryParams: {
-        indexCode: "",
-        nodeId: undefined
-      },
-      tableData: [],
-      lineData: [],
-      //閫変腑code
-      codes: [],
-      // //閫変腑鎸囨爣鍚嶇О
-      indexNames: [],
-      datas: [],
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      addTableSelect: [],
-      liveLineChartData: {
-        datas: [],
-        timeList: [],
-        title: ""
-      },
-      height: 400,
-      rows: [],
-      code: "",
-      activeName: "",
-      multipleSelection: []
-    };
-  },
-  created() {},
-  beforeDestroy() {
-    //椤甸潰閿�姣佹椂 瑕佸仠姝㈣鏃跺櫒锛屽惁鍒欓�夐」鍗″垏鎹㈣鏃跺櫒涓嶅仠姝紝浼氳秺鏉ヨ秺蹇紝澶氫釜绾跨▼
-    if (this.timer) {
-      clearInterval(this.timer);
-      this.timer = null;
-    }
-  },
-  methods: {
-    setCharts() {
-      // this.height = window.innerHeight - 220 + "px";
-    },
-    modelNodeChange(modelNode) {
-      // this.$refs.liveLineChart.closeLineChar();
-      this.queryParams.nodeId = modelNode.id;
-      this.getList();
-      this.disabledSetting =
-        modelNode === undefined || modelNode === "" || modelNode === null;
-      if (modelNode) {
-        this.currentNode = modelNode;
-      }
-    },
-    /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-    getList() {
-      this.loading = true;
-      var search = this.queryParams;
-      //琛ㄦ牸鏁版嵁
-      getTrendSettingIndex(search).then(response => {
-        this.tableData = response.data;
-        this.total = response.total;
-        this.loading = false;
-        this.cleanLineData();
-        // if (this.tableData && this.tableData.length !== 0) {
-        //   this.selectChange(this.tableData[0]);
-        // }
-      });
-    },
-
-    selectChange(row) {
-      this.queryParams.indexCode = row ? row.code : undefined;
-      this.liveLineChartData.title = row ? row.indexName : "";
-      this.getLineDataList();
-    },
-
-    handleSelectionChange(val) {
-      this.multipleSelection = val;
-      this.queryParams.indexCode = val.map(item => {
-        return item.code;
-      });
-      this.queryParams.indexName = val.map(item => {
-        return item.indexName;
-      });
-      if (val.length) {
-        this.getLineDataList();
-      } else {
-        this.cleanLineData();
-      }
-    },
-
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-
-    getLineDataList() {
-      this.cleanLineData();
-      //鎶樼嚎鍥炬暟鎹�
-      getTrendSettingIndexLineData(
-        this.queryParams.indexCode,
-        this.queryParams.minute || 20,
-        this.count || 10
-      ).then(response => {
-        //鏁版嵁娣诲姞
-        this.liveLineChartData.datas = response.data.map(item => {
-          return {
-            value: item.map(val => {
-              return val.value;
-            }),
-            time: item.map(val => {
-              return moment(val.showDataTime).format("HH:mm");
-            })
-          };
-        });
-        // x杞存椂闂存坊鍔�
-        this.liveLineChartData.timeList = response.data[0].map(item => {
-          return moment(item.showDataTime).format("HH:mm");
-        });
-      });
-    },
-
-    cleanLineData() {
-      this.liveLineChartData.timeList = [];
-      this.liveLineChartData.datas = [];
-    },
-    closeDialog() {
-      this.activeName = "";
-    },
-    openDialog(e) {
-      if (e) {
-        this.code = e.code;
-        this.open = true;
-        this.activeName = "second";
-      }
-    },
-    cancelDialog() {
-      this.open = false;
-    },
-    // 鍗曚綅瀛楀吀缈昏瘧
-    unitFormat(row, column) {
-      return this.selectDictLabel(this.unitOptions, row.indexUnit);
-    },
-    handleExport() {
-      exportRealTimeTrend({
-        nodeId: this.queryParams.nodeId
-      }).then(response => {
-        this.download(response.msg);
-      });
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.realTimeTrend-right {
-  height: 100%;
-  overflow: hidden;
-}
-
-.tableStyle .el-table__header-wrapper .el-checkbox {
-  display: none;
-}
-
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/demo/index.vue b/energy_management_ui/src/views/demo/index.vue
deleted file mode 100644
index 529d32b..0000000
--- a/energy_management_ui/src/views/demo/index.vue
+++ /dev/null
@@ -1,297 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鍚嶇О" prop="name">
-        <el-input
-          v-model="queryParams.name"
-          placeholder="璇疯緭鍏ュ悕绉�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="缂栫爜" prop="code">
-        <el-input
-          v-model="queryParams.code"
-          placeholder="璇疯緭鍏ョ紪鐮�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鏃ユ湡" prop="createDate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.createDate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="閫夋嫨鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['system:demo:add']"
-        >鏂板</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['system:demo:edit']"
-        >淇敼</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['system:demo:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['system:demo:export']"
-        >瀵煎嚭</el-button>
-      </el-col>
-    </el-row>
-
-    <el-table v-loading="loading" :data="demoList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="涓婚敭" align="center" prop="id" />
-      <el-table-column label="鍚嶇О" align="center" prop="name" />
-      <el-table-column label="缂栫爜" align="center" prop="code" />
-      <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createDate" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.createDate) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="澶囨敞" align="center" prop="remark" />
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['system:demo:edit']"
-          >淇敼</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['system:demo:remove']"
-          >鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 娣诲姞鎴栦慨鏀广�愯濉啓鍔熻兘鍚嶇О銆戝璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="鍚嶇О" prop="name">
-          <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" />
-        </el-form-item>
-        <el-form-item label="缂栫爜" prop="code">
-          <el-input v-model="form.code" placeholder="璇疯緭鍏ョ紪鐮�" />
-        </el-form-item>
-        <el-form-item label="鏃ユ湡" prop="createDate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.createDate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="閫夋嫨鏃ユ湡">
-          </el-date-picker>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listDemo, getDemo, delDemo, addDemo, updateDemo, exportDemo } from "@/api/demo/demo";
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 銆愯濉啓鍔熻兘鍚嶇О銆戣〃鏍兼暟鎹�
-      demoList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        code: undefined,
-        createDate: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-      }
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    /** 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� */
-    getList() {
-      this.loading = true;
-      listDemo(this.queryParams).then(response => {
-        this.demoList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        name: undefined,
-        code: undefined,
-        remark: undefined,
-        createDate: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞銆愭祴璇曟暟鎹��";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getDemo(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼銆愭祴璇曟暟鎹��";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updateDemo(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addDemo(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎銆愭祴璇曟暟鎹�戠紪鍙蜂负"' + ids + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return delDemo(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夈�愭祴璇曟暟鎹�戞暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return exportDemo(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function() {});
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/electricityPrice/electricity/history.vue b/energy_management_ui/src/views/electricityPrice/electricity/history.vue
deleted file mode 100644
index 6f7f8e2..0000000
--- a/energy_management_ui/src/views/electricityPrice/electricity/history.vue
+++ /dev/null
@@ -1,123 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="120px">
-      <el-form-item label="鐢熸晥鏃堕棿" prop="effectiveName">
-        <el-select v-model="queryParams.effectiveDate" placeholder="璇烽�夋嫨鐢熸晥鏃堕棿" clearable size="small">
-          <el-option
-            v-for="dict in list"
-            :key="changeTime(parseTime(dict.effectiveDate))"
-            :label="changeTime(parseTime(dict.effectiveDate))"
-            :value="changeTime(parseTime(dict.effectiveDate))"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-    <el-table v-loading="loading" :data="electricityList">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="鏃舵鍚嶇О" align="center" prop="effectiveName" :formatter="effectiveNameFormat" />
-      <el-table-column label="鍗曚环" align="center" prop="price"/>
-      <el-table-column label="鏃舵寮�濮嬫椂闂�" align="center" prop="beginDate" width="180"/>
-      <el-table-column label="鏃舵缁撴潫鏃堕棿" align="center" prop="endDate" width="180"/>
-    </el-table>
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-  </div>
-</template>
-
-<script>
-  import { listHistory, listDate } from "@/api/electricityPrice/electricity";
-  export default {
-    data() {
-      return {
-        // 鎬绘潯鏁�
-        total: 0,
-        // electricityPrice琛ㄦ牸鏁版嵁
-        electricityList: [],
-        list:[],
-        // 鏃舵鍚嶇О瀛楀吀
-        effectiveNameOptions: [],
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          effectiveDate: undefined,
-        },
-      };
-    },
-    created() {
-      this.getList();
-      this.getLists();
-      this.getDicts("electricity_price").then(response => {
-        this.effectiveNameOptions = response.data;
-      });
-    },
-    methods: {
-      /** 鏌ヨelectricityPrice鍒楄〃 */
-      getList() {
-        this.loading = true;
-        listHistory(this.queryParams).then(response => {
-          this.electricityList = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        });
-      },
-      getLists() {
-        this.loading = true;
-        listDate(this.queryParams).then(response => {
-          this.list = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        });
-      },
-      // 鏃舵鍚嶇О瀛楀吀缈昏瘧
-      effectiveNameFormat(row, column) {
-        return this.selectDictLabel(this.effectiveNameOptions, row.effectiveName);
-      },
-      // 鍙栨秷鎸夐挳
-      cancel() {
-        this.open = false;
-        this.time = false;
-        this.openPrice = false;
-        this.reset();
-      },
-      // 琛ㄥ崟閲嶇疆
-      reset() {
-        this.form = {
-          id: undefined,
-          effectiveDate: undefined,
-          priceId: undefined,
-          beginDate: undefined,
-          endDate: undefined,
-          effectiveName: undefined
-        };
-        this.resetForm("form");
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.getList();
-      },
-      /** 閲嶇疆鎸夐挳鎿嶄綔 */
-      resetQuery() {
-        this.resetForm("queryForm");
-        this.handleQuery();
-      },
-    changeTime(time) {
-      if (time !== null && time !== undefined && time !== "") {
-        return time.substring(0, 10);
-      } else {
-        return "";
-      }
-    }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/electricityPrice/electricity/index.vue b/energy_management_ui/src/views/electricityPrice/electricity/index.vue
deleted file mode 100644
index 132c2a5..0000000
--- a/energy_management_ui/src/views/electricityPrice/electricity/index.vue
+++ /dev/null
@@ -1,546 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="forms" label-width="100px">
-      <el-row :gutter="24" class="mb8">
-        <el-col :span="16">
-          <el-form-item
-            prop="effective_date"
-            label="鐢熸晥鏃堕棿锛�"
-            label-width="100px"
-          >
-            <!--{{changeTime(parseTime(effective_date))}}-->
-            <el-date-picker
-              clearable
-              size="small"
-              style="width: 200px"
-              v-model="forms.effectiveDate"
-              type="date"
-              value-format="yyyy-MM-dd"
-              :picker-options="pickerOptions"
-              placeholder="璁剧疆鐢熸晥鏃堕棿"
-            >
-            </el-date-picker>
-            <!-- <el-input :disabled="isDisabled" v-model="item.effectiveDate"></el-input>-->
-            <!--<el-button size="mini" @click="addDate">璁剧疆鐢熸晥鏃堕棿</el-button>-->
-          </el-form-item>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            type="primary"
-            size="mini"
-            @click="handleAdd()"
-            v-hasPermi="['electricityPrice:electricity:add']"
-            >鏂板鏃舵</el-button
-          >
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            plain
-            size="mini"
-            @click="handlePrice()"
-            v-hasPermi="['electricityPrice:price:add']"
-            >璁剧疆鍗曚环</el-button
-          >
-        </el-col>
-        <el-col :span="1.5">
-          <router-link :to="'/electricityPrice/listHistory'" class="link-type">
-            <el-button plain size="mini">鏌ョ湅鍘嗗彶</el-button>
-          </router-link>
-        </el-col>
-      </el-row>
-      <el-table
-        v-loading="loading"
-        :data="electricityList"
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column
-          label="鏃舵鍚嶇О"
-          align="center"
-          prop="effectiveName"
-          :formatter="effectiveNameFormat"
-        />
-        <el-table-column label="鍗曚环" align="center" prop="price" />
-        <el-table-column
-          label="鏃舵寮�濮嬫椂闂�"
-          align="center"
-          prop="beginDate"
-          width="180"
-        />
-        <el-table-column
-          label="鏃舵缁撴潫鏃堕棿"
-          align="center"
-          prop="endDate"
-          width="180"
-        />
-        <el-table-column
-          label="鎿嶄綔"
-          align="center"
-          class-name="small-padding fixed-width"
-        >
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['electricityPrice:electricity:remove']"
-              >鍒犻櫎</el-button
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-    </el-form>
-    <pagination
-      v-show="total > 0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-    <!-- 娣诲姞鎴栦慨鏀筫lectricityPrice瀵硅瘽妗� -->
-    <el-dialog :title="title" :visible.sync="time" width="500px">
-      <el-form
-        ref="form"
-        :model="form"
-        :rulesTime="rulesTime"
-        label-width="120px"
-      >
-        <el-form-item label="鐢熸晥鏃ユ湡" prop="effectiveDate">
-          <el-date-picker
-            clearable
-            size="small"
-            style="width: 200px"
-            v-model="form.effectiveDate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            :picker-options="pickerOptions"
-            placeholder="閫夋嫨鐢熸晥鏃ユ湡"
-          >
-          </el-date-picker>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-    <!-- 娣诲姞鎴栦慨鏀筫lectricityPrice瀵硅瘽妗� -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
-        <el-form-item label="鐢熸晥鏃堕棿" prop="effectiveDate">{{
-          changeTime(parseTime(form.effectiveDate))
-        }}</el-form-item>
-        <el-form-item label="鏃舵鍚嶇О" prop="effectiveName">
-          <el-select v-model="form.effectiveName" placeholder="璇烽�夋嫨鏃舵鍚嶇О">
-            <el-option
-              v-for="dict in effectiveNameOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鏃舵寮�濮嬫椂闂�" prop="beginDate">
-          <el-time-picker
-            v-model="form.beginDate"
-            class="date-box"
-            format="HH:mm"
-            value-format="HH:mm"
-            placeholder="閫夋嫨鏃舵寮�濮嬫椂闂�"
-          >
-          </el-time-picker>
-        </el-form-item>
-        <el-form-item label="鏃舵缁撴潫鏃堕棿" prop="endDate">
-          <el-time-picker
-            v-model="form.endDate"
-            class="date-box"
-            format="HH:mm"
-            value-format="HH:mm"
-            placeholder="閫夋嫨鏃舵寮�濮嬫椂闂�"
-          ></el-time-picker>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-    <!-- 娣诲姞鎴栦慨鏀筫lectricity瀵硅瘽妗� -->
-    <el-dialog :title="title" :visible.sync="openPrice" width="500px">
-      <el-form ref="formPrice" :model="formPrice" :rulesPrice="rulesPrice">
-        <el-input type="hidden" v-model="formPrice.effectiveDate"></el-input>
-        <el-table
-          :data="effective_name"
-          ref="multipleTable"
-          tooltip-effect="dark"
-        >
-          <el-table-column
-            align="center"
-            property="dictLabel"
-            label="鏃舵鍚嶇О"
-          ></el-table-column>
-          <el-table-column align="center" property="price" label="鍗曚环(鍏�)">
-            <template scope="scope">
-              <el-input
-                step="0.1"
-                v-model="scope.row.price"
-                placeholder="璇疯緭鍏ュ崟浠�(鍏�)"
-              ></el-input>
-            </template>
-          </el-table-column>
-        </el-table>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitPrice">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {
-  listElectricity,
-  getElectricity,
-  delElectricity,
-  addElectricity,
-  updateElectricity,
-  exportElectricity,
-  listDate
-} from "@/api/electricityPrice/electricity";
-
-import {
-  listPrice,
-  getPrice,
-  delPrice,
-  addPrice,
-  updatePrice,
-  EdictType,
-  dictTypeList
-} from "@/api/electricityPrice/price";
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // electricityPrice琛ㄦ牸鏁版嵁
-      electricityList: [],
-      list: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      time: false,
-      openPrice: false,
-      // 鏃舵鍚嶇О瀛楀吀
-      effectiveNameOptions: [],
-      effective_name: [],
-      ifeffective: [],
-      effective: {
-        dictLabel: "",
-        dictValue: "",
-        price: ""
-      },
-      dictType: "",
-      effective_date: "",
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        effectiveDate: undefined,
-        priceId: undefined,
-        beginDate: undefined,
-        endDate: undefined,
-        effectiveName: undefined,
-        dictType: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      forms: {},
-      formPrice: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        effectiveDate: [
-          { required: true, message: "鐢熸晥鏃ユ湡涓嶈兘涓虹┖", trigger: "blur" }
-        ],
-        beginDate: [
-          { required: true, message: "鏃舵寮�濮嬫椂闂翠笉鑳戒负绌�", trigger: "blur" }
-        ],
-        endDate: [
-          { required: true, message: "鏃舵缁撴潫鏃堕棿涓嶈兘涓虹┖", trigger: "blur" }
-        ],
-        effectiveName: [
-          { required: true, message: "鏃舵鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
-        ]
-      },
-      rulesTime: {
-        effectiveDate: [
-          { required: true, message: "鐢熸晥鏃ユ湡涓嶈兘涓虹┖", trigger: "blur" }
-        ]
-      },
-      rulesPrice: {
-        timePeriod: [
-          { required: true, message: "鏃舵涓嶈兘涓虹┖", trigger: "blur" }
-        ],
-        price: [{ required: true, message: "鍗曚环涓嶈兘涓虹┖", trigger: "blur" }]
-      },
-      pickerOptions: {
-        // 涓嶈閫夋嫨浠婂ぉ浠ュ墠鐨�
-        disabledDate(time) {
-          return time.getTime() < Date.now() - 24 * 60 * 60 * 1000;
-        }
-      }
-    };
-  },
-
-  created() {
-    this.getList();
-    this.getLists();
-    this.getDicts("electricity_price").then(response => {
-      this.effectiveNameOptions = response.data;
-    });
-  },
-  methods: {
-    /** 鏌ヨelectricityPrice鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listDate(this.queryParams).then(response => {
-        this.list = response.rows;
-        if (this.list.length > 0) {
-          this.forms.effectiveDate = this.list[0].effectiveDate;
-          this.effective_date = this.list[0].effectiveDate;
-        }
-        this.loading = false;
-      });
-    },
-    getLists() {
-      listElectricity(this.queryParams).then(response => {
-        this.electricityList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鏃舵鍚嶇О瀛楀吀缈昏瘧
-    effectiveNameFormat(row, column) {
-      return this.selectDictLabel(this.effectiveNameOptions, row.effectiveName);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.time = false;
-      this.openPrice = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        effectiveDate: undefined,
-        priceId: undefined,
-        beginDate: undefined,
-        endDate: undefined,
-        effectiveName: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      console.log(selection);
-      this.ids = selection.map(item => item.id);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.queryParams.effectiveDate = this.forms.effectiveDate;
-      listPrice(this.queryParams).then(response => {
-        this.reset();
-        this.ifeffective = response.rows;
-        if (this.ifeffective.length > 0) {
-          this.form.effectiveDate = this.forms.effectiveDate;
-          this.open = true;
-          this.title = "娣诲姞鏂板鏃舵";
-        } else {
-          this.msgSuccess("璇峰厛璁剧疆浠锋牸");
-        }
-      });
-    },
-    handlePrice() {
-      this.queryParams.effectiveDate = this.forms.effectiveDate.substring(
-        0,
-        10
-      );
-      (this.queryParams.dictType = "electricity_price"),
-        dictTypeList(this.queryParams).then(response => {
-          this.reset();
-          this.formPrice.effectiveDate = this.forms.effectiveDate;
-          this.effective_name = response.data;
-          this.openPrice = true;
-          this.title = "璁剧疆鍗曚环";
-        });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitPrice: function() {
-      this.formPrice.effectiveDate;
-      this.$nextTick(() => {
-        this.formPrice.TimeJson = this.$refs["multipleTable"].data;
-        let tourId = "";
-        let tourLabels = "";
-        let tourValue = "";
-        let tourPrice = "";
-        for (let i = 0; i < this.formPrice.TimeJson.length; i++) {
-          tourLabels += this.formPrice.TimeJson[i].dictLabel + ",";
-          tourValue += this.formPrice.TimeJson[i].dictValue + ",";
-          tourPrice += this.formPrice.TimeJson[i].price + ",";
-          tourId += this.formPrice.TimeJson[i].id + ",";
-        }
-        this.formPrice.dictLabel = tourLabels.substring(
-          0,
-          tourLabels.lastIndexOf(",")
-        );
-        this.formPrice.dictValue = tourValue.substring(
-          0,
-          tourValue.lastIndexOf(",")
-        );
-        this.formPrice.price = tourPrice.substring(
-          0,
-          tourPrice.lastIndexOf(",")
-        );
-        this.formPrice.id = tourId.substring(0, tourId.lastIndexOf(","));
-        //console.log(this.formPrice.TimeJson[0].id);
-        if (this.formPrice.TimeJson[0].id != undefined) {
-          updatePrice(this.formPrice).then(response => {
-            if (response.code === 200) {
-              this.msgSuccess("淇敼鎴愬姛");
-              this.openPrice = false;
-            } else {
-              this.msgError(response.msg);
-            }
-          });
-        } else {
-          addPrice(this.formPrice).then(response => {
-            if (response.code === 200) {
-              this.msgSuccess("鏂板鎴愬姛");
-              this.openPrice = false;
-            } else {
-              this.msgError(response.msg);
-            }
-          });
-        }
-      });
-      this.loading = false;
-    },
-    addDate() {
-      this.reset();
-      this.time = true;
-      this.title = "娣诲姞鐢熸晥鏃ユ湡";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate() {
-      this.reset();
-      const id = this.ids;
-      getElectricity(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼鏂板鏃舵";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updateElectricity(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-                this.getLists();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addElectricity(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-                this.getLists();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$confirm(
-        '鏄惁纭鍒犻櫎鏂板鏃舵缂栧彿涓�"' + ids + '"鐨勬暟鎹」?',
-        "璀﹀憡",
-        {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }
-      )
-        .then(function() {
-          return delElectricity(ids);
-        })
-        .then(() => {
-          this.getList();
-          this.getLists();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        })
-        .catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭鎵�鏈塭lectricityPrice鏁版嵁椤�?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportElectricity(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-    changeTime(time) {
-      if (time !== null && time !== undefined && time !== "") {
-        return time.substring(0, 10);
-      } else {
-        return "";
-      }
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/electricityPrice/statistics/electricityIndex.vue b/energy_management_ui/src/views/electricityPrice/statistics/electricityIndex.vue
deleted file mode 100644
index 258cccc..0000000
--- a/energy_management_ui/src/views/electricityPrice/statistics/electricityIndex.vue
+++ /dev/null
@@ -1,234 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item>
-        <el-radio-group v-model="queryParams.eierarchyFlag">
-          <el-radio label="B" style="margin-right: 10px!important;" onselect="true">鏈骇</el-radio>
-          <el-radio label="ALL">鍖呭惈涓嬬骇</el-radio>
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item label="鏃ユ湡" label-width="40px">
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio style="margin-right: 10px" v-for="dict in dateTypeOptions" :key="dict.dictValue" :label="dict.dictValue" @change="handleTime(dict.dictValue)">{{dict.dictLabel}}</el-radio>
-        </el-radio-group>
-        <el-date-picker
-          v-model="queryParams.beginTime"
-          :type="dateTypes"
-          style="width: 150px"
-          :value-format="valueFormat"
-          placeholder="寮�濮嬫棩鏈�">
-        </el-date-picker>
-        鍒�
-        <el-date-picker
-          v-model="queryParams.endTime"
-          :type="dateTypes"
-          style="width: 150px"
-          :value-format="valueFormat"
-          placeholder="缁撴潫鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-        <!--<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport">瀵煎嚭</el-button>-->
-      </el-form-item>
-    </el-form>
-    <el-row :gutter="32">
-      <el-col :xs="24" :sm="24" :lg="24" >
-        <el-table border style="width: 100%" :data=tabledata>
-          <el-table-column prop="name" label="鍚嶇О/鏃ユ湡" width="150"></el-table-column>
-          <template v-for="item in  tablehead ">
-            <el-table-column :label=item.lable :prop=item.prop>
-              <template v-for="(child,index) in item.childNodes">
-                <el-table-column :label=child.lable>
-                  <el-table-column :label=child.value :prop=child.valueProp></el-table-column>
-                  <el-table-column :label=child.price :prop=child.priceProp></el-table-column>
-                </el-table-column>
-              </template>
-            </el-table-column>
-          </template>
-        </el-table>
-      </el-col>
-    </el-row>
-    <el-row :gutter="32">
-      <el-col :xs="24" :sm="24" :lg="24" >
-        <div class="chart-wrapper" style="margin-top: 20px;">
-          <pie-chart ref="pieChart" :chart-data="pieChartData"/>
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-<script>
-  import { getStatisticsList,getDataStatistics} from "@/api/electricityPrice/statistics";
-  import pieChart from './pieChart'
-  export default {
-    components: {pieChart},
-    data() {
-      return {
-        tablehead:[],
-        tabledata:[],
-        dateTypeOptions:[],
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          beginTime: undefined,
-          endTime: undefined,
-          timeType:"MONTH",
-          eierarchyFlag:"B",
-          nodeId:undefined,
-          nodeName:undefined,
-        },
-        dateTypes: 'date',
-        valueFormat:'yyyy-MM-dd',
-        pieChartData:{},
-        resultList:[],
-        skinName:"",
-      }
-    },
-    created() {
-      this.getDicts("electricDate").then(response => {
-        this.dateTypeOptions = response.data;
-        this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-      });
-      this.getConfigKey("peak_valley_statistics").then(response => {
-        this.skinName=response.msg;
-      });
-      this.getTime();
-    },
-    methods: {
-      modelNodeChange(node){
-        this.queryParams.nodeId=node.id;
-        this.queryParams.nodeName=node.label;
-        this.getList();
-      },
-      getList() {
-        if(this.queryParams.timeType=="YEAR"){
-          this.queryParams.beginTime=this.queryParams.beginTime.substring(0, 7)+"-01"
-          this.queryParams.endTime=this.getCurrentMonthLast(this.queryParams.endTime);
-        }
-        getStatisticsList(this.queryParams).then(response => {
-          this.tablehead=response.data.tablehead;
-          this.tabledata=response.data.tabledataMap;
-        });
-        getDataStatistics(this.queryParams).then(response => {
-          this.resultList=response.data.tabledataMap;
-          let legend=[];
-          let data=[];
-          this.resultList.forEach(item => {
-            if(item.name !=undefined || item.value !=undefined){
-              legend.push(item.name);
-              data.push({"value":this.numFilter(item.value),"name":item.name});
-            }
-          });
-          this.pieChartData.legend=legend;
-          this.pieChartData.data=data;
-          this.$refs.pieChart.initChart(this.pieChartData);
-        });
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.getList();
-      },
-      /** 閲嶇疆鎸夐挳鎿嶄綔 */
-      resetQuery() {
-        this.resetForm("queryForm");
-        this.handleQuery();
-      },
-      numFilter(value) {// 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-        let realVal = '' ;
-        if (!isNaN(value) && value !== '') {
-          realVal = parseFloat(value).toFixed(this.skinName)
-        } else {
-          realVal = '0.00'
-        }
-        return realVal
-      },
-      handleTime(date){
-        if(date=='YEAR'){
-          this.dateTypes= 'month',
-          this.valueFormat='yyyy-MM'
-        }else if(date=='MONTH'){
-          this.dateTypes= 'date',
-          this.valueFormat='yyyy-MM-dd'
-        }
-      },
-      getTime(){
-        var  myDate = new Date();
-        var monthFirst = new Date(myDate.getFullYear(), parseInt(myDate.getMonth()));
-        this.queryParams.beginTime=this.formatDate(monthFirst);
-        //this.queryParams.endTime=this.formatDate(monthFirst);
-        this.queryParams.endTime=this.getCurrentMonthLast(monthFirst)
-      },
-      //鑾峰彇鏈堜唤鏈�鍚庝竴澶�
-      getCurrentMonthLast (endTime) {
-        var date = new Date(endTime)
-        var year = date.getFullYear()
-        var month = date.getMonth() + 1
-        month = month < 10 ? '0' + month : month
-        var day = new Date(year, month, 0)
-        let endTimes="";
-        endTimes = year + '-' + month + '-' + day.getDate()
-        return endTimes;
-      },
-      formatDate: function (value) {
-        let date = new Date(value);
-        let y = date.getFullYear();
-        let MM = date.getMonth() + 1;
-        MM = MM < 10 ? ('0' + MM) : MM;
-        let d = date.getDate();
-        d = d < 10 ? ('0' + d) : d;
-        let h = date.getHours();
-        h = h < 10 ? ('0' + h) : h;
-        let m = date.getMinutes();
-        m = m < 10 ? ('0' + m) : m;
-        let s = date.getSeconds();
-        s = s < 10 ? ('0' + s) : s;
-        return y + '-' + MM;
-      },
-    }
-  }
-</script>
-<style lang="scss">
-  .el-table td,.el-table th{
-    text-align: center !important;
-  }
-  .el-table thead.is-group th {
-    background: #fff;
-  }
-  .el-table thead.is-group tr:first-of-type th:first-of-type:before {
-    content: '鍚嶇О';
-    text-align: center;
-    position: absolute;
-    width: 152px;
-    height: 1px;
-    bottom: 30px;
-    right: 0;
-  }
-  .el-table thead.is-group tr:first-of-type th:first-of-type:after {
-    content: '鏃ユ湡';
-    text-align: center;
-    position: absolute;
-    width: 152px;
-    top: 10px;
-    left: 0;
-  }
-  .el-table thead.is-group tr:first-of-type th:first-of-type .cell {
-    position: absolute;
-    top: 0;
-    left: 0;
-    width: 152px;
-    height: 1px;
-    background-color: #EBEEF5;
-    display: block;
-    text-align: center;
-    transform: rotate(38deg);
-    transform-origin: top left;
-    -ms-transform: rotate(38deg);
-    -ms-transform-origin: top left;
-    -webkit-transform: rotate(38deg);
-    -webkit-transform-origin: top left;
-  }
-</style>
diff --git a/energy_management_ui/src/views/electricityPrice/statistics/electricityIndexNew.vue b/energy_management_ui/src/views/electricityPrice/statistics/electricityIndexNew.vue
deleted file mode 100644
index 075a6ea..0000000
--- a/energy_management_ui/src/views/electricityPrice/statistics/electricityIndexNew.vue
+++ /dev/null
@@ -1,181 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item label="缁熻鏃堕棿">
-        <el-date-picker
-          clearable
-          size="small"
-          style="width: 100%"
-          v-model="queryParams.queryTime"
-          type="month"
-          :clearable="false"
-          value-format="yyyy-MM"
-          placeholder="閫夋嫨鏈堜唤"
-        >
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >鎼滅储</el-button
-        >
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-          >閲嶇疆</el-button
-        >
-        <!--<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport">瀵煎嚭</el-button>-->
-      </el-form-item>
-    </el-form>
-    <el-row :gutter="32">
-      <el-col :xs="24" :sm="24" :lg="24">
-        <el-table border style="width: 100%" :data="tabledata">
-          <el-table-column
-            prop="time"
-            label="鏃ユ湡"
-            width="150"
-          ></el-table-column>
-          <el-table-column label="灏栨椂娈�">
-            <el-table-column label="鐢甸噺" prop="sharpPower" />
-            <el-table-column label="璐圭敤" prop="sharpFee" />
-          </el-table-column>
-          <el-table-column label="宄版椂娈�">
-            <el-table-column label="鐢甸噺" prop="peakPower" />
-            <el-table-column label="璐圭敤" prop="peakFee" />
-          </el-table-column>
-          <el-table-column label="骞虫椂娈�">
-            <el-table-column label="鐢甸噺" prop="flatPower" />
-            <el-table-column label="璐圭敤" prop="flatFee" />
-          </el-table-column>
-          <el-table-column label="璋锋椂娈�">
-            <el-table-column label="鐢甸噺" prop="valleyPower" />
-            <el-table-column label="璐圭敤" prop="valleyFee" />
-          </el-table-column>
-        </el-table>
-      </el-col>
-    </el-row>
-    <!-- <el-row :gutter="32">
-      <el-col :xs="24" :sm="24" :lg="24" >
-        <div class="chart-wrapper" style="margin-top: 20px;">
-          <pie-chart ref="pieChart" :chart-data="pieChartData"/>
-        </div>
-      </el-col>
-    </el-row> -->
-  </div>
-</template>
-<script>
-import { getElectricityDataItemStatistics } from "@/api/electricityPrice/statistics";
-import pieChart from "./pieChart";
-export default {
-  components: { pieChart },
-  data() {
-    return {
-      tablehead: [],
-      tabledata: [],
-      dateTypeOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        timeType: "MONTH",
-        queryTime: "",
-        nodeId: undefined,
-        modelCode: undefined
-      },
-      pieChartData: {},
-      resultList: [],
-      skinName: ""
-    };
-  },
-  created() {
-    this.queryParams.queryTime = this.formatDate(new Date());
-  },
-  methods: {
-    modelNodeChange(node) {
-      this.queryParams.nodeId = node.id;
-      this.queryParams.nodeName = node.label;
-      this.getList();
-    },
-    getList() {
-      let params = {
-        ...this.queryParams,
-        timeType: "MONTH",
-        // modelCode: this.$route.query.modelCode
-        modelCode: "PEAK_VALLEY"
-      };
-      getElectricityDataItemStatistics(params).then(response => {
-        this.tabledata = response.data;
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    numFilter(value) {
-      // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = "";
-      if (!isNaN(value) && value !== "") {
-        realVal = parseFloat(value).toFixed(this.skinName);
-      } else {
-        realVal = "0.00";
-      }
-      return realVal;
-    },
-
-    getTime() {
-      var myDate = new Date();
-      var monthFirst = new Date(
-        myDate.getFullYear(),
-        parseInt(myDate.getMonth())
-      );
-      this.queryParams.beginTime = this.formatDate(monthFirst);
-      //this.queryParams.endTime=this.formatDate(monthFirst);
-      this.queryParams.endTime = this.getCurrentMonthLast(monthFirst);
-    },
-    //鑾峰彇鏈堜唤鏈�鍚庝竴澶�
-    getCurrentMonthLast(endTime) {
-      var date = new Date(endTime);
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      month = month < 10 ? "0" + month : month;
-      var day = new Date(year, month, 0);
-      let endTimes = "";
-      endTimes = year + "-" + month + "-" + day.getDate();
-      return endTimes;
-    },
-    formatDate: function(value) {
-      let date = new Date(value);
-      let y = date.getFullYear();
-      let MM = date.getMonth() + 1;
-      MM = MM < 10 ? "0" + MM : MM;
-      let d = date.getDate();
-      d = d < 10 ? "0" + d : d;
-      let h = date.getHours();
-      h = h < 10 ? "0" + h : h;
-      let m = date.getMinutes();
-      m = m < 10 ? "0" + m : m;
-      let s = date.getSeconds();
-      s = s < 10 ? "0" + s : s;
-      return y + "-" + MM;
-    }
-  }
-};
-</script>
-<style lang="scss">
-.el-table td,
-.el-table th {
-  text-align: center !important;
-}
-</style>
diff --git a/energy_management_ui/src/views/electricityPrice/statistics/index.vue b/energy_management_ui/src/views/electricityPrice/statistics/index.vue
deleted file mode 100644
index f7a9462..0000000
--- a/energy_management_ui/src/views/electricityPrice/statistics/index.vue
+++ /dev/null
@@ -1,83 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="宄板钩璋锋暟鎹粺璁�" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :showOpt="false"
-            :modelCode="modelCode"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <basic-container :bodyStyle="bodyStyleRight">
-          <electricityIndexNew
-            ref="electricityIndex"
-            style="padding:10px"
-          ></electricityIndexNew>
-        </basic-container>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import electricityIndexNew from "./electricityIndexNew";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from "@/components/shrink/index.vue";
-
-export default {
-  components: { ModelNode, electricityIndexNew, ShrinkCol },
-  mixins: [mixins],
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  data() {
-    return {
-      bodyStyleRight: {},
-      modelCode: undefined,
-      isCollapse: false
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 130 + "px"
-      };
-    },
-    changeNode: function(node) {
-      this.$refs.electricityIndex.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/electricityPrice/statistics/mixins/resize.js b/energy_management_ui/src/views/electricityPrice/statistics/mixins/resize.js
deleted file mode 100644
index ae02e64..0000000
--- a/energy_management_ui/src/views/electricityPrice/statistics/mixins/resize.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import { debounce } from '@/utils'
-
-export default {
-  data() {
-    return {
-      $_sidebarElm: null
-    }
-  },
-  mounted() {
-    this.$_initResizeEvent()
-    this.$_initSidebarResizeEvent()
-  },
-  beforeDestroy() {
-    this.$_destroyResizeEvent()
-    this.$_destroySidebarResizeEvent()
-  },
-  activated() {
-    this.$_initResizeEvent()
-    this.$_initSidebarResizeEvent()
-  },
-  deactivated() {
-    this.$_destroyResizeEvent()
-    this.$_destroySidebarResizeEvent()
-  },
-  methods: {
-    $_resizeHandler() {
-      return debounce(() => {
-        if (this.chart) {
-          this.chart.resize()
-        }
-      }, 100)()
-    },
-    $_initResizeEvent() {
-      window.addEventListener('resize', this.$_resizeHandler)
-    },
-    $_destroyResizeEvent() {
-      window.removeEventListener('resize', this.$_resizeHandler)
-    },
-    $_sidebarResizeHandler(e) {
-      if (e.propertyName === 'width') {
-        this.$_resizeHandler()
-      }
-    },
-    $_initSidebarResizeEvent() {
-      this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
-      this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
-    },
-    $_destroySidebarResizeEvent() {
-      this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
-    }
-  }
-}
diff --git a/energy_management_ui/src/views/electricityPrice/statistics/pieChart.vue b/energy_management_ui/src/views/electricityPrice/statistics/pieChart.vue
deleted file mode 100644
index 92ed64e..0000000
--- a/energy_management_ui/src/views/electricityPrice/statistics/pieChart.vue
+++ /dev/null
@@ -1,103 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "./mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    chartData: {
-      type: Object
-      //required: true
-    }
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ legend, data } = {}) {
-      this.chart.setOption({
-        title: {
-          text: "鏁版嵁鍒嗘瀽",
-          left: "left",
-          textStyle: {
-            color: "#606266"
-          }
-        },
-        tooltip: {
-          trigger: "item",
-          formatter: "{a} <br/>{b} : {c} ({d}%)"
-        },
-        legend: {
-          //bottom: 10,
-          top: "30",
-          orient: "vertical",
-          left: "10",
-          data: legend,
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        series: [
-          {
-            type: "pie",
-            radius: "65%",
-            center: ["50%", "50%"],
-            selectedMode: "single",
-            data: data,
-            emphasis: {
-              itemStyle: {
-                shadowBlur: 10,
-                shadowOffsetX: 0,
-                shadowColor: "rgba(0, 0, 0, 0.5)"
-              }
-            }
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/enerInfoManage/enerclass/index.vue b/energy_management_ui/src/views/enerInfoManage/enerclass/index.vue
deleted file mode 100644
index 20377eb..0000000
--- a/energy_management_ui/src/views/enerInfoManage/enerclass/index.vue
+++ /dev/null
@@ -1,359 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form :model="queryParams" ref="queryForm" label-width="72px" class="special-form">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="鑳芥簮绫诲瀷" prop="enerclassname">
-              <el-input
-                  v-model="queryParams.enerclassname"
-                  placeholder="璇疯緭鍏ヨ兘婧愮被鍒悕绉�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="18">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-              type="primary"
-              icon="el-icon-plus"
-              size="mini"
-              @click="handleAdd"
-              v-hasPermi="['enerInfoManage:enerclass:add']"
-          >鏂板
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="success"
-              icon="el-icon-edit"
-              size="mini"
-              :disabled="single"
-              @click="handleUpdate"
-              v-hasPermi="['enerInfoManage:enerclass:edit']"
-          >淇敼
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              :disabled="multiple"
-              @click="handleDelete"
-              v-hasPermi="['enerInfoManage:enerclass:remove']"
-          >鍒犻櫎
-          </el-button>
-        </el-col>
-        <!--      <el-col :span="1.5">-->
-        <!--        <el-button-->
-        <!--          type="warning"-->
-        <!--          icon="el-icon-download"-->
-        <!--          size="mini"-->
-        <!--          @click="handleExport"-->
-        <!--          v-hasPermi="['enerInfoManage:enerclass:export']"-->
-        <!--        >瀵煎嚭</el-button>-->
-        <!--      </el-col>-->
-      </el-row>
-      <el-table :height="height" v-loading="loading" :data="enerclassList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center"/>
-        <el-table-column label="鑳芥簮绫诲埆鍚嶇О" align="center" prop="enerclassname"/>
-        <el-table-column label="鎿嶄綔浜�" align="center" prop="oprMan"/>
-        <el-table-column label="鎿嶄綔鏃堕棿" align="center" prop="oprTime" width="180">
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.oprTime) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="鏇存柊浜�" align="center" prop="modMan"/>
-        <el-table-column label="鏇存柊鏃堕棿" align="center" prop="modTime" width="180">
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.modTime) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="澶囨敞" align="center" prop="note"/>
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['enerInfoManage:enerclass:edit']"
-            >淇敼
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-delete"
-                @click="handleDelete(scope.row)"
-                v-hasPermi="['enerInfoManage:enerclass:remove']"
-            >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-    </basic-container>
-    <!-- 娣诲姞鎴栦慨鏀硅兘婧愬搧绉嶈缃璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="鑳芥簮绫诲瀷" prop="enerclassname">
-          <el-input v-model="form.enerclassname" placeholder="璇疯緭鍏ヨ兘婧愮被鍒悕绉�"/>
-        </el-form-item>
-        <el-form-item label="澶囨敞" prop="note">
-          <el-input v-model="form.note" placeholder="璇疯緭鍏ュ娉�"/>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {
-  listEnerclass,
-  getEnerclass,
-  delEnerclass,
-  addEnerclass,
-  updateEnerclass,
-  exportEnerclass
-} from "@/api/enerInfoManage/enerclass";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  mixins: [mixins],
-  data() {
-    return {
-      height: null,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鑳芥簮鍝佺璁剧疆琛ㄦ牸鏁版嵁
-      enerclassList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鑳芥簮绫诲埆ID瀛楀吀
-      enerclassidOptions: [],
-      // 鑳芥簮绫诲埆鍚嶇О瀛楀吀
-      enerclassnameOptions: [],
-      // 鎿嶄綔浜哄瓧鍏�
-      oprManOptions: [],
-      // 鎿嶄綔鏃堕棿瀛楀吀
-      oprTimeOptions: [],
-      // 鏇存柊浜哄瓧鍏�
-      modManOptions: [],
-      // 鏇存柊鏃堕棿瀛楀吀
-      modTimeOptions: [],
-      // 澶囨敞瀛楀吀
-      noteOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        enerclassname: undefined,
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        enerclassname: [
-          {required: true, message: "鑳芥簮绫诲埆鍚嶇О涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-      }
-    };
-  },
-  created() {
-    this.getList();
-
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 370;
-    },
-    /** 鏌ヨ鑳芥簮鍝佺璁剧疆鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listEnerclass(this.queryParams).then(response => {
-        this.enerclassList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鑳芥簮绫诲埆ID瀛楀吀缈昏瘧
-    enerclassidFormat(row, column) {
-      return this.selectDictLabel(this.enerclassidOptions, row.enerclassid);
-    },
-    // 鑳芥簮绫诲埆鍚嶇О瀛楀吀缈昏瘧
-    enerclassnameFormat(row, column) {
-      return this.selectDictLabel(this.enerclassnameOptions, row.enerclassname);
-    },
-    // 鎿嶄綔浜哄瓧鍏哥炕璇�
-    oprManFormat(row, column) {
-      return this.selectDictLabel(this.oprManOptions, row.oprMan);
-    },
-    // 鎿嶄綔鏃堕棿瀛楀吀缈昏瘧
-    oprTimeFormat(row, column) {
-      return this.selectDictLabel(this.oprTimeOptions, row.oprTime);
-    },
-    // 鏇存柊浜哄瓧鍏哥炕璇�
-    modManFormat(row, column) {
-      return this.selectDictLabel(this.modManOptions, row.modMan);
-    },
-    // 鏇存柊鏃堕棿瀛楀吀缈昏瘧
-    modTimeFormat(row, column) {
-      return this.selectDictLabel(this.modTimeOptions, row.modTime);
-    },
-    // 澶囨敞瀛楀吀缈昏瘧
-    noteFormat(row, column) {
-      return this.selectDictLabel(this.noteOptions, row.note);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        enerclassid: undefined,
-        enerclassname: undefined,
-        oprMan: undefined,
-        oprTime: undefined,
-        modMan: undefined,
-        modTime: undefined,
-        note: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.enerclassid)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞鑳芥簮鍝佺璁剧疆";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const enerclassid = row.enerclassid || this.ids
-      getEnerclass(enerclassid).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼鑳芥簮鍝佺璁剧疆";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.enerclassid != undefined) {
-            updateEnerclass(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addEnerclass(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const enerclassname = row.enerclassname || this.enerclassname;
-      const enerclassids = row.enerclassid || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎鑳芥簮绫诲瀷鍚嶇О涓�"' + enerclassname + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delEnerclass(enerclassids);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夎兘婧愬搧绉嶈缃暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportEnerclass(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/enerInfoManage/enercoefficient/index.vue b/energy_management_ui/src/views/enerInfoManage/enercoefficient/index.vue
deleted file mode 100644
index a03f054..0000000
--- a/energy_management_ui/src/views/enerInfoManage/enercoefficient/index.vue
+++ /dev/null
@@ -1,330 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form :model="queryParams" ref="queryForm" label-width="72px" class="special-form">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="鑳芥簮鍚嶇О" prop="enername">
-              <el-input
-                  v-model="queryParams.enername"
-                  placeholder="璇疯緭鍏ヨ兘婧愬悕绉�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="18">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-table :height="height" v-loading="loading" :data="enercoefficientList"
-                @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center"/>
-        <el-table-column label="鑳芥簮鍚嶇О" align="center" prop="enername"/>
-        <el-table-column label="绛変环鎶樻爣绯绘暟" align="center" prop="coefficient"/>
-        <el-table-column label="褰撻噺鎶樻爣绯绘暟" align="center" prop="coefficient2"/>
-        <el-table-column label="鎵ц鏃ユ湡" align="center" prop="execdate" width="180">
-          <template slot-scope="scope">
-            <span>{{ changeTime(parseTime(scope.row.execdate)) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="澶囨敞" align="center" prop="note"/>
-        <!--      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">-->
-        <!--        <template slot-scope="scope">-->
-        <!--          <el-button-->
-        <!--            size="mini"-->
-        <!--            type="text"-->
-        <!--            icon="el-icon-edit"-->
-        <!--            @click="handleUpdate(scope.row)"-->
-        <!--            v-hasPermi="['enerInfoManage:enercoefficient:edit']"-->
-        <!--          >淇敼</el-button>-->
-        <!--          <el-button-->
-        <!--            size="mini"-->
-        <!--            type="text"-->
-        <!--            icon="el-icon-delete"-->
-        <!--            @click="handleDelete(scope.row)"-->
-        <!--            v-hasPermi="['enerInfoManage:enercoefficient:remove']"-->
-        <!--          >鍒犻櫎</el-button>-->
-        <!--        </template>-->
-        <!--      </el-table-column>-->
-      </el-table>
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-    </basic-container>
-
-    <!--    <el-row :gutter="10" class="mb8">-->
-    <!--      <el-col :span="1.5">-->
-    <!--        <el-button-->
-    <!--          type="primary"-->
-    <!--          icon="el-icon-plus"-->
-    <!--          size="mini"-->
-    <!--          @click="handleAdd"-->
-    <!--          v-hasPermi="['enerInfoManage:enercoefficient:add']"-->
-    <!--        >鏂板</el-button>-->
-    <!--      </el-col>-->
-    <!--      <el-col :span="1.5">-->
-    <!--        <el-button-->
-    <!--          type="success"-->
-    <!--          icon="el-icon-edit"-->
-    <!--          size="mini"-->
-    <!--          :disabled="single"-->
-    <!--          @click="handleUpdate"-->
-    <!--          v-hasPermi="['enerInfoManage:enercoefficient:edit']"-->
-    <!--        >淇敼</el-button>-->
-    <!--      </el-col>-->
-    <!--      <el-col :span="1.5">-->
-    <!--        <el-button-->
-    <!--          type="danger"-->
-    <!--          icon="el-icon-delete"-->
-    <!--          size="mini"-->
-    <!--          :disabled="multiple"-->
-    <!--          @click="handleDelete"-->
-    <!--          v-hasPermi="['enerInfoManage:enercoefficient:remove']"-->
-    <!--        >鍒犻櫎</el-button>-->
-    <!--      </el-col>-->
-    <!--      <el-col :span="1.5">-->
-    <!--        <el-button-->
-    <!--          type="warning"-->
-    <!--          icon="el-icon-download"-->
-    <!--          size="mini"-->
-    <!--          @click="handleExport"-->
-    <!--          v-hasPermi="['enerInfoManage:enercoefficient:export']"-->
-    <!--        >瀵煎嚭</el-button>-->
-    <!--      </el-col>-->
-    <!--    </el-row>-->
-
-
-    <!-- 娣诲姞鎴栦慨鏀硅兘婧愭姌鏍囩郴鏁板璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {
-  listEnercoefficient,
-  getEnercoefficient,
-  delEnercoefficient,
-  addEnercoefficient,
-  updateEnercoefficient,
-  exportEnercoefficient
-}
-  from "@/api/enerInfoManage/enercoefficient";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  mixins: [mixins],
-  data() {
-    return {
-      height: null,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鑳芥簮鎶樻爣绯绘暟琛ㄦ牸鏁版嵁
-      enercoefficientList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鎶樻爣绯绘暟ID瀛楀吀
-      ecidOptions: [],
-      // 鑳芥簮ID瀛楀吀
-      eneridOptions: [],
-      // 绛変环鎶樻爣绯绘暟瀛楀吀
-      coefficientOptions: [],
-      // 褰撻噺鎶樻爣绯绘暟瀛楀吀
-      coefficient2Options: [],
-      // 鎵ц鏃ユ湡瀛楀吀
-      execdateOptions: [],
-      // 鎿嶄綔浜哄瓧鍏�
-      oprManOptions: [],
-      // 鎿嶄綔鏃堕棿瀛楀吀
-      oprTimeOptions: [],
-      // 鏇存柊浜哄瓧鍏�
-      modManOptions: [],
-      // 鏇存柊鏃堕棿瀛楀吀
-      modTimeOptions: [],
-      // 澶囨敞瀛楀吀
-      noteOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        enername: undefined,
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {}
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 320;
-    },
-    /** 鏌ヨ鑳芥簮鎶樻爣绯绘暟鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listEnercoefficient(this.queryParams).then(response => {
-        this.enercoefficientList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        ecid: undefined,
-        enerid: undefined,
-        coefficient: undefined,
-        coefficient2: undefined,
-        execdate: undefined,
-        oprMan: undefined,
-        oprTime: undefined,
-        modMan: undefined,
-        modTime: undefined,
-        note: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.ecid)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞鑳芥簮鎶樻爣绯绘暟";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const ecid = row.ecid || this.ids
-      getEnercoefficient(ecid).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼鑳芥簮鎶樻爣绯绘暟";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.ecid != undefined) {
-            updateEnercoefficient(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addEnercoefficient(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ecids = row.ecid || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎鑳芥簮鎶樻爣绯绘暟缂栧彿涓�"' + ecids + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delEnercoefficient(ecids);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夎兘婧愭姌鏍囩郴鏁版暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportEnercoefficient(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    },
-    changeTime(time) {
-      if (time !== null && time !== undefined && time !== "") {
-        return time.substring(0, 10);
-      } else {
-        return "";
-      }
-    }
-  }
-};
-</script>
-
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/enerInfoManage/energy/index.vue b/energy_management_ui/src/views/enerInfoManage/energy/index.vue
deleted file mode 100644
index ac66205..0000000
--- a/energy_management_ui/src/views/enerInfoManage/energy/index.vue
+++ /dev/null
@@ -1,629 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form :model="queryParams" ref="queryForm" label-width="72px" class="special-form">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="鑳芥簮鍚嶇О" prop="enername">
-              <el-input
-                  v-model="queryParams.enername"
-                  placeholder="璇疯緭鍏ヨ兘婧愬悕绉�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鑳芥簮绫诲瀷" prop="enerclassname">
-              <el-select
-                  v-model="queryParams.enerclassname"
-                  placeholder="鑳芥簮绫诲瀷鍚嶇О"
-                  clearable
-                  size="small"
-                  style="width: 100%"
-              >
-                <el-option
-                    v-for="SysEnergy in enerclassnameOptions"
-                    :key="SysEnergy.enerclassid"
-                    :label="SysEnergy.dictLabel"
-                    :value="SysEnergy.enerclassname"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-              type="primary"
-              icon="el-icon-plus"
-              size="mini"
-              @click="handleAdd"
-              v-hasPermi="['enerInfoManage:energy:add']"
-          >鏂板
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="success"
-              icon="el-icon-edit"
-              size="mini"
-              :disabled="single"
-              @click="handleUpdate"
-              v-hasPermi="['enerInfoManage:energy:edit']"
-          >淇敼
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              :disabled="multiple"
-              @click="handleDelete"
-              v-hasPermi="['enerInfoManage:energy:remove']"
-          >鍒犻櫎
-          </el-button>
-        </el-col>
-        <!--      <el-col :span="1.5">-->
-        <!--        <el-button-->
-        <!--          type="warning"-->
-        <!--          icon="el-icon-download"-->
-        <!--          size="mini"-->
-        <!--          @click="handleExport"-->
-        <!--          v-hasPermi="['enerInfoManage:energy:export']"-->
-        <!--        >瀵煎嚭</el-button>-->
-        <!--      </el-col>-->
-        <el-col :span="1.5">
-          <el-button
-              type="primary"
-              icon="el-icon-edit"
-              :disabled="single"
-              size="mini"
-              @click="Updateenergyprice"
-              v-hasPermi="['enerInfoManage:energy:updateEnergyPrice']"
-          >鍗曚环璁剧疆
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="primary"
-              icon="el-icon-edit"
-              :disabled="single"
-              size="mini"
-              @click="Updateenergycoefficient"
-              v-hasPermi="['enerInfoManage:energy:updateEnergycoefficient']"
-          >鎶樻爣绯绘暟璁剧疆
-          </el-button>
-        </el-col>
-      </el-row>
-      <el-table :height="height" v-loading="loading" :data="energyList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center" fixed="left"/>
-        <el-table-column label="鑳芥簮鍚嶇О" align="center" prop="enername" fixed="left" show-overflow-tooltip/>
-        <el-table-column label="璁¢噺鍗曚綅" align="center" prop="muidName"/>
-        <el-table-column label="鑳芥簮绫诲埆" align="center" prop="enerclassname"/>
-        <el-table-column label="鑳芥簮缂栧彿" align="center" prop="enersno"/>
-        <el-table-column label="鏄惁瀛樺偍" align="center" prop="isstorageString"/>
-        <el-table-column label="鎿嶄綔浜�" align="center" prop="oprMan"/>
-        <el-table-column label="鎿嶄綔鏃堕棿" align="center" prop="oprTime" width="180">
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.oprTime) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="淇敼浜�" align="center" prop="modMan"/>
-        <el-table-column label="淇敼鏃堕棿" align="center" prop="modTime" width="180">
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.modTime) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="澶囨敞" align="center" prop="note"/>
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width" fixed="right"
-                         width="120">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['enerInfoManage:energy:edit']"
-            >淇敼
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-delete"
-                @click="handleDelete(scope.row)"
-                v-hasPermi="['enerInfoManage:energy:remove']"
-            >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-    </basic-container>
-    <!-- 娣诲姞鎴栦慨鏀筫nergy瀵硅瘽妗� -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="鑳芥簮鍚嶇О" prop="enername">
-          <el-input v-model="form.enername" placeholder="璇疯緭鍏ヨ兘婧愬悕绉�"/>
-        </el-form-item>
-        <el-form-item label="璁¢噺鍗曚綅" prop="muidStringOptions">
-          <el-select
-              v-model="form.muidString"
-              placeholder="璁¢噺鍗曚綅鍚嶇О"
-              clearable
-              size="small"
-              style="width: 240px"
-          >
-            <el-option
-                v-for="SysEnergy in muidStringOptions"
-                :key="SysEnergy.dictLabel"
-                :label="SysEnergy.dictLabel"
-                :value="SysEnergy.dictCode"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鑳芥簮缂栧彿" prop="enersno">
-          <el-input v-model="form.enersno" placeholder="璇疯緭鍏ヨ兘婧愮紪鍙�"/>
-        </el-form-item>
-        <el-form-item label="鑳芥簮绫诲瀷" prop="enerclassname">
-          <el-select
-              v-model="form.enerclassname"
-              placeholder="鑳芥簮绫诲瀷鍚嶇О"
-              clearable
-              size="small"
-              style="width: 240px"
-          >
-            <el-option
-                v-for="SysEnergy in enerclassnameOptions"
-                :key="SysEnergy.enerclassname"
-                :label="SysEnergy.dictLabel"
-                :value="SysEnergy.enerclassname"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鏄惁瀛樺偍" prop="isstorageString">
-          <el-select
-              v-model="form.isstorageString"
-              placeholder="鏄惁瀛樺偍"
-              clearable
-              size="small"
-              style="width: 240px"
-          >
-            <el-option
-                value="鏄�"
-            >鏄�
-            </el-option>
-            <el-option
-                value="鍚�"
-            >鍚�
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="澶囨敞" prop="note">
-          <el-input v-model="form.note" placeholder="璇疯緭鍏ュ娉�"/>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-    <!-- 鍗曚环璁剧疆瀵硅瘽妗� -->
-    <el-dialog :title="title" :visible.sync="openenergyprice" width="500px">
-      <el-form ref="priceForm" :model="priceForm" :rules="pricerules" label-width="80px">
-        <el-form-item label="浠锋牸" prop="price">
-          <el-input type="number" v-model="priceForm.price" placeholder="璇疯緭鍏ュ崟浠�"/>
-        </el-form-item>
-        <el-form-item label="鎵ц鏃ユ湡">
-          <el-date-picker
-              v-model="priceForm.execdate"
-              size="small"
-              style="width: 240px"
-              value-format="yyyy-MM-dd"
-              type="date"
-          ></el-date-picker>
-        </el-form-item>
-        <el-form-item label="澶囨敞" prop="pricenote">
-          <el-input v-model="priceForm.pricenote" placeholder="璇疯緭鍏ュ娉�"/>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="priceSubmitForm">淇� 瀛�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-    <!-- 鎶樻爣绯绘暟璁剧疆瀵硅瘽妗� -->
-    <el-dialog :title="title" :visible.sync="openenergyCoefficient" width="500px">
-      <el-form ref="CoefficientForm" :model="CoefficientForm" :rules="Coefficientrules" label-width="80px">
-        <el-form-item label="绛変环鎶樻爣绯绘暟" prop="coefficient">
-          <el-input type="number" v-model="CoefficientForm.coefficient" placeholder="璇疯緭鍏ョ瓑浠锋姌鏍囩郴鏁�"/>
-        </el-form-item>
-        <el-form-item label="褰撻噺鎶樻爣绯绘暟" prop="coefficient2">
-          <el-input type="number" v-model="CoefficientForm.coefficient2" placeholder="璇疯緭鍏ュ綋閲忔姌鏍囩郴鏁�"/>
-        </el-form-item>
-        <el-form-item label="鎵ц鏃ユ湡">
-          <el-date-picker
-              v-model="CoefficientForm.coefficientexecdate"
-              size="small"
-              style="width: 240px"
-              value-format="yyyy-MM-dd"
-              type="date"
-          ></el-date-picker>
-        </el-form-item>
-        <el-form-item label="澶囨敞" prop="coefficientnote">
-          <el-input v-model="CoefficientForm.coefficientnote" placeholder="璇疯緭鍏ュ娉�"/>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="coefficientSubmitForm">淇� 瀛�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {
-  listEnergy, getEnergy, delEnergy, addEnergy, updateEnergy, exportEnergy, classselect,
-  updateEnergyPrice, updateEnergyCoefficient
-} from "@/api/enerInfoManage/energy";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  mixins: [mixins],
-  data() {
-    return {
-      height: null,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // energy琛ㄦ牸鏁版嵁
-      energyList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      //鏄惁鏄剧ず璁剧疆鍗曚环灞�
-      openenergyprice: false,
-      //鏄惁鏄剧ず璁剧疆鎶樻爣绯绘暟灞�
-      openenergyCoefficient: false,
-      // 鎿嶄綔浜哄瓧鍏�
-      oprManOptions: [],
-      // 鎿嶄綔鏃堕棿瀛楀吀
-      oprTimeOptions: [],
-      // 淇敼浜哄瓧鍏�
-      modManOptions: [],
-      // 淇敼鏃堕棿瀛楀吀
-      modTimeOptions: [],
-      // 鑳芥簮ID瀛楀吀
-      eneridOptions: [],
-      // 鑳芥簮鍚嶇О瀛楀吀
-      enernameOptions: [],
-      // 璁¢噺鍗曚綅ID瀛楀吀
-      muidStringOptions: [],
-      // 鑳芥簮绫诲埆ID瀛楀吀
-      enerclassidOptions: [],
-      // 鑳芥簮缂栧彿瀛楀吀
-      enersnoOptions: [],
-      // 鏄惁瀛樺偍瀛楀吀
-      isstorageStringOptions: undefined,
-      priceOptions: undefined,
-      // 澶囨敞瀛楀吀
-      noteOptions: [],
-      unitDefaultVal: undefined,
-      //鑳芥簮绫诲瀷瀛楀吀
-      enerclassnameOptions: undefined,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        enername: undefined,
-        enerclassname: undefined,
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      //price琛ㄥ崟鍙傛暟
-      priceForm: {},
-      //鎶樻爣绯绘暟琛ㄥ崟鍙傛暟
-      CoefficientForm: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        enername: [
-          {required: true, message: "鑳芥簮鍚嶇О涓嶈兘涓虹┖", trigger: "blur"}
-        ], muidString: [
-          {required: true, message: "璁¢噺鍗曚綅ID涓嶈兘涓虹┖", trigger: "blur"}
-        ], enerclassname: [
-          {required: true, message: "鑳芥簮绫诲埆涓嶈兘涓虹┖", trigger: "blur"}
-        ], enersno: [
-          {required: true, message: "鑳芥簮缂栧彿涓嶈兘涓虹┖", trigger: "blur"}
-        ], isstorageString: [
-          {required: true, message: "鏄惁瀛樺偍涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-      },
-      pricerules: {
-        price: [
-          {required: true, message: "鍗曚环涓嶈兘涓虹┖", trigger: "blur"},
-        ], execdate: [
-          {required: true, message: "鎵ц鏃ユ湡涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-      },
-      Coefficientrules: {
-        coefficient: [
-          {required: true, message: "鎶樻爣绯绘暟涓嶈兘涓虹┖", trigger: "blur"},
-        ], coefficient2: [
-          {required: true, message: "鎶樻爣绯绘暟涓嶈兘涓虹┖", trigger: "blur"},
-        ], coefficientexecdate: [
-          {required: true, message: "鎵ц鏃ユ湡涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-      },
-    };
-  },
-  created() {
-    this.getList();
-    this.getclassselect();
-    this.getDicts("sys_unit").then(response => {
-      this.muidStringOptions = response.data;
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 370;
-    },
-    //琛ㄥ崟鏍¢獙鏄惁涓烘暟瀛�
-
-    /** 鏌ヨenergy鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listEnergy(this.queryParams).then(response => {
-        this.energyList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.openenergyprice = false;
-      this.openenergyCoefficient = false;
-      this.reset();
-      this.priceReset();
-      this.coefficientReset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        oprMan: undefined,
-        oprTime: undefined,
-        modMan: undefined,
-        modTime: undefined,
-        enerid: undefined,
-        enername: undefined,
-        muidString: undefined,
-        enerclassid: undefined,
-        enersno: undefined,
-        isstorageString: undefined,
-        note: undefined,
-        price: undefined,
-        execdate: undefined,
-        pricenote: undefined,
-      };
-      this.resetForm("form");
-    },
-    priceReset(enerid) {
-      this.priceForm = {
-        enerid: enerid[0],
-        price: undefined,
-        execdate: undefined,
-        pricenote: undefined,
-      };
-      this.resetForm("priceForm");
-    },
-    coefficientReset() {
-      this.form = {
-        coefficient: undefined,
-        coefficient2: undefined,
-        coefficientexecdate: undefined,
-        coefficientnote: undefined,
-      };
-      this.resetForm("CoefficientForm");
-    },
-
-    /** 鏌ヨ鑳芥簮绫诲瀷涓嬫媺缁撴瀯 */
-    getclassselect() {
-      classselect().then(response => {
-        this.enerclassnameOptions = response.data;
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.enerid)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞鑳芥簮";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const enerid = row.enerid || this.ids;
-      getEnergy(enerid).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼鑳芥簮淇℃伅";
-      });
-    },
-    /** 璁剧疆鍗曚环鎸夐挳鎿嶄綔 */
-    Updateenergyprice(row) {
-      this.reset();
-      const enerid = row.enerid || this.ids;
-      this.priceReset(enerid);
-      //鑳藉湪杩欓噷缁檈nerid璧嬪�煎悧锛�
-      this.openenergyprice = true;
-      this.title = "鑳芥簮鍗曚环璁剧疆";
-    },
-    // 璁剧疆鎶樻爣绯绘暟鎿嶄綔鎸夐挳
-    Updateenergycoefficient(row) {
-      this.coefficientReset();
-      const enerid = row.enerid || this.ids;
-      getEnergy(enerid).then(response => {
-        this.CoefficientForm = response.data;
-        this.openenergyCoefficient = true;
-        this.title = "鑳芥簮鎶樻爣绯绘暟淇℃伅";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.enerid != undefined) {
-            updateEnergy(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addEnergy(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** price鎻愪氦鎸夐挳 */
-    priceSubmitForm: function () {
-      console.log("1111");
-      this.$refs['priceForm'].validate(valid => {
-        console.log("222");
-        if (valid) {
-          console.log("333");
-          console.log("this.priceForm.enerid=" + this.priceForm.enerid);
-          //妯℃澘鐢熸垚鐨勬彁浜� 杩欎箞鍐欏簲璇ヨ繕鏈変竴涓猠lse锛屾剰鎬濇槸 褰� 鏈� id璇存槑鏄仛鏇存柊鎿嶄綔锛屾病鏈塈d鏄仛鍒犻櫎鎿嶄綔锛岃繖涓猧d鏄寚瑕佹搷浣滅殑琛ㄧ殑涓婚敭
-          //浣犺繖閲屽氨寰楄�冭檻涓� 棣栧厛  鍗曚环瑕佸拰浣犲垰鎵嶅垪琛ㄤ腑閫夋嫨鐨勬暟鎹叧鑱旓紝涔熷氨鏄綘杩欓噷瑕佹湁涓や釜Id
-          //1銆� 涓昏〃鐨処d   2銆佸瓧琛↖d..   褰撶劧鎴戜笉鐭ラ亾浣犺繖鏄笉鏄敤鐨勪富瀛愯〃杩樻槸浠�涔堬紝濡傛灉鏄竴涓〃锛岄偅灏辩敤涓�涓猧d锛岀劧鍚庝綘杩欐槸鍋� 鏂板 杩樻槸 鏇存柊锛岀湅浣犱笟鍔″畾
-          if (this.priceForm.enerid != undefined) {//灏辫繖閲岋紝浣犺繖閲宔nerid 鏈夊�� 鎴栬�� 鍏朵粬浠�涔堬紝杩欓噷浣犳槸瑕佸仛 鏇存柊 杩樻槸 鏂板锛岃繖涓垽鏂鍐欏浜嗐�傜煡閬撳惂銆傚墿涓嬩綘鑷繁鎵�
-            console.log("444");
-            updateEnergyPrice(this.priceForm).then(response => {
-              console.log("555");
-              if (response.code === 200) {
-                this.msgSuccess("淇濆瓨鎴愬姛");
-                this.openenergyprice = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    //鎶樻爣绯绘暟淇濆瓨
-    coefficientSubmitForm: function () {
-      this.$refs["CoefficientForm"].validate(valid => {
-        if (valid) {
-          if (this.CoefficientForm.enerid != undefined) {
-            updateEnergyCoefficient(this.CoefficientForm).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇濆瓨鎴愬姛");
-                this.openenergyCoefficient = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            }).catch(function () {
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const enerids = row.enerid || this.ids;
-      const enername = row.enername;
-      this.$confirm('鏄惁纭鍒犻櫎鑳芥簮鍚嶇О涓�"' + enername + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delEnergy(enerids);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈塭nergy鏁版嵁椤�?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportEnergy(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    }
-  }
-};
-</script>
-
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/enerInfoManage/price/index.vue b/energy_management_ui/src/views/enerInfoManage/price/index.vue
deleted file mode 100644
index ac481ff..0000000
--- a/energy_management_ui/src/views/enerInfoManage/price/index.vue
+++ /dev/null
@@ -1,320 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form :model="queryParams" ref="queryForm" label-width="72px" class="special-form">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="鑳芥簮鍚嶇О" prop="enername">
-              <el-input
-                  v-model="queryParams.enername"
-                  placeholder="璇疯緭鍏ヨ兘婧愬悕绉�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="18">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-table :height="height" v-loading="loading" :data="priceList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center"/>
-        <el-table-column label="鑳芥簮鍚嶇О" align="center" prop="enername"/>
-        <el-table-column label="鍗曚环" align="center" prop="price"/>
-        <el-table-column label="鎵ц鏃ユ湡" align="center" prop="execdate" width="180">
-          <template slot-scope="scope">
-            <span>{{ changeTime(parseTime(scope.row.execdate)) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="澶囨敞" align="center" prop="note"/>
-        <!--      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">-->
-        <!--        <template slot-scope="scope">-->
-        <!--          <el-button-->
-        <!--            size="mini"-->
-        <!--            type="text"-->
-        <!--            icon="el-icon-edit"-->
-        <!--            @click="handleUpdate(scope.row)"-->
-        <!--            v-hasPermi="['price:price:edit']"-->
-        <!--          >淇敼</el-button>-->
-        <!--          <el-button-->
-        <!--            size="mini"-->
-        <!--            type="text"-->
-        <!--            icon="el-icon-delete"-->
-        <!--            @click="handleDelete(scope.row)"-->
-        <!--            v-hasPermi="['price:price:remove']"-->
-        <!--          >鍒犻櫎</el-button>-->
-        <!--        </template>-->
-        <!--      </el-table-column>-->
-      </el-table>
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-    </basic-container>
-
-    <!--    <el-row :gutter="10" class="mb8">-->
-    <!--      <el-col :span="1.5">-->
-    <!--        <el-button-->
-    <!--          type="primary"-->
-    <!--          icon="el-icon-plus"-->
-    <!--          size="mini"-->
-    <!--          @click="handleAdd"-->
-    <!--          v-hasPermi="['price:price:add']"-->
-    <!--        >鏂板</el-button>-->
-    <!--      </el-col>-->
-    <!--      <el-col :span="1.5">-->
-    <!--        <el-button-->
-    <!--          type="success"-->
-    <!--          icon="el-icon-edit"-->
-    <!--          size="mini"-->
-    <!--          :disabled="single"-->
-    <!--          @click="handleUpdate"-->
-    <!--          v-hasPermi="['price:price:edit']"-->
-    <!--        >淇敼</el-button>-->
-    <!--      </el-col>-->
-    <!--      <el-col :span="1.5">-->
-    <!--        <el-button-->
-    <!--          type="danger"-->
-    <!--          icon="el-icon-delete"-->
-    <!--          size="mini"-->
-    <!--          :disabled="multiple"-->
-    <!--          @click="handleDelete"-->
-    <!--          v-hasPermi="['price:price:remove']"-->
-    <!--        >鍒犻櫎</el-button>-->
-    <!--      </el-col>-->
-    <!--      <el-col :span="1.5">-->
-    <!--        <el-button-->
-    <!--          type="warning"-->
-    <!--          icon="el-icon-download"-->
-    <!--          size="mini"-->
-    <!--          @click="handleExport"-->
-    <!--          v-hasPermi="['price:price:export']"-->
-    <!--        >瀵煎嚭</el-button>-->
-    <!--      </el-col>-->
-    <!--    </el-row>-->
-
-
-    <!-- 娣诲姞鎴栦慨鏀瑰崟浠疯缃璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {listPrice, getPrice, delPrice, addPrice, updatePrice, exportPrice} from "@/api/enerInfoManage/price";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  mixins: [mixins],
-  data() {
-    return {
-      height:null,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鍗曚环璁剧疆琛ㄦ牸鏁版嵁
-      priceList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鍗曚环ID瀛楀吀
-      priceidOptions: [],
-      // ObjectID_瀵硅薄ID锛氳兘婧怚D銆佸師鏂橧D鎴栦骇鍝両D瀛楀吀
-      objectidOptions: [],
-      // ObjectType_瀵硅薄绫诲瀷1=鑳芥簮(Energy琛�)锛�2=鍘熸枡(Material琛�)锛�3=浜у搧(Product琛�)瀛楀吀
-      objecttypeOptions: [],
-      // 鍗曚环瀛楀吀
-      priceOptions: [],
-      // 鎵ц鏃ユ湡瀛楀吀
-      execdateOptions: [],
-      // 鎿嶄綔浜哄瓧鍏�
-      oprManOptions: [],
-      // 鎿嶄綔鏃堕棿瀛楀吀
-      oprTimeOptions: [],
-      // 鏇存柊浜哄瓧鍏�
-      modManOptions: [],
-      // 鏇存柊鏃堕棿瀛楀吀
-      modTimeOptions: [],
-      // 澶囨敞瀛楀吀
-      noteOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        objectid: undefined,
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {}
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 320;
-    },
-    /** 鏌ヨ鍗曚环璁剧疆鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listPrice(this.queryParams).then(response => {
-        this.priceList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        priceid: undefined,
-        objectid: undefined,
-        objecttype: undefined,
-        price: undefined,
-        execdate: undefined,
-        oprMan: undefined,
-        oprTime: undefined,
-        modMan: undefined,
-        modTime: undefined,
-        note: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.priceid)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞鍗曚环璁剧疆";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const priceid = row.priceid || this.ids
-      getPrice(priceid).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼鍗曚环璁剧疆";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.priceid != undefined) {
-            updatePrice(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addPrice(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const priceids = row.priceid || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎鍗曚环璁剧疆缂栧彿涓�"' + priceids + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delPrice(priceids);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夊崟浠疯缃暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportPrice(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    },
-    changeTime(time) {
-      if (time !== null && time !== undefined && time !== "") {
-        return time.substring(0, 10);
-      } else {
-        return "";
-      }
-    }
-  }
-};
-</script>
-
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/enerInfoManage/product/index.vue b/energy_management_ui/src/views/enerInfoManage/product/index.vue
deleted file mode 100644
index e695e93..0000000
--- a/energy_management_ui/src/views/enerInfoManage/product/index.vue
+++ /dev/null
@@ -1,470 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form :model="queryParams" ref="queryForm" label-width="72px" class="special-form">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="浜у搧鍚嶇О" prop="productname">
-              <el-input
-                  v-model="queryParams.productname"
-                  placeholder="璇疯緭鍏ヤ骇鍝佸悕绉�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="18">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-              type="primary"
-              icon="el-icon-plus"
-              size="mini"
-              @click="handleAdd"
-              v-hasPermi="['enerInfoManage:product:add']"
-          >鏂板
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="success"
-              icon="el-icon-edit"
-              size="mini"
-              :disabled="single"
-              @click="handleUpdate"
-              v-hasPermi="['enerInfoManage:product:edit']"
-          >淇敼
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              :disabled="multiple"
-              @click="handleDelete"
-              v-hasPermi="['enerInfoManage:product:remove']"
-          >鍒犻櫎
-          </el-button>
-        </el-col>
-        <!--      <el-col :span="1.5">-->
-        <!--        <el-button-->
-        <!--          type="warning"-->
-        <!--          icon="el-icon-download"-->
-        <!--          size="mini"-->
-        <!--          @click="handleExport"-->
-        <!--          v-hasPermi="['enerInfoManage:product:export']"-->
-        <!--        >瀵煎嚭</el-button>-->
-        <!--      </el-col>-->
-      </el-row>
-      <el-table :height="height" v-loading="loading" :data="productList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center"/>
-        <el-table-column label="浜у搧鍚嶇О" align="center" prop="productname"/>
-        <el-table-column label="浜у搧缂栧彿" align="center" prop="productsno"/>
-        <el-table-column label="璁¢噺鍗曚綅" align="center" prop="muid" :formatter="muidFormat"/>
-        <el-table-column label="鐖剁骇浜у搧" align="center" prop="superidname"/>
-        <el-table-column label="鏄惁涓哄瓙绾�" align="center" prop="issub" :formatter="issubFormat"/>
-        <el-table-column label="鎶樼畻绯绘暟" align="center" prop="procofficient"/>
-        <el-table-column label="鏄惁鏄剧ず" align="center" prop="isshow" :formatter="isshowFormat"/>
-        <el-table-column label="鏄惁涓昏浜у搧" align="center" prop="iscpnyproduct" :formatter="iscpnyproductFormat"/>
-        <el-table-column label="浠锋牸" align="center" prop="price"/>
-        <el-table-column label="澶囨敞" align="center" prop="note"/>
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width" fixed="right">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['enerInfoManage:product:edit']"
-            >淇敼
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-delete"
-                @click="handleDelete(scope.row)"
-                v-hasPermi="['enerInfoManage:product:remove']"
-            >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-    </basic-container>
-    <!-- 娣诲姞鎴栦慨鏀逛骇鍝佸璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
-        <el-form-item label="浜у搧鍚嶇О" prop="productname">
-          <el-input v-model="form.productname" placeholder="璇疯緭鍏ヤ骇鍝佸悕绉�"/>
-        </el-form-item>
-        <el-form-item label="浜у搧缂栧彿" prop="productsno">
-          <el-input v-model="form.productsno" placeholder="璇疯緭鍏ヤ骇鍝佺紪鍙�"/>
-        </el-form-item>
-        <el-form-item label="璁¢噺鍗曚綅" prop="muid">
-          <el-select v-model="form.muid" placeholder="璇烽�夋嫨璁¢噺鍗曚綅">
-            <el-option
-                v-for="dict in muidOptions"
-                :key="dict.dictValue"
-                :label="dict.dictLabel"
-                :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鏄惁涓哄瓙绾�" prop="issub">
-          <el-select v-model="form.issub" placeholder="璇烽�夋嫨鏄惁涓哄瓙绾�" @change="obtainValue">
-            <el-option
-                v-for="dict in issubOptions"
-                :key="dict.dictValue"
-                :label="dict.dictLabel"
-                :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <div v-show="fatherCp">
-          <el-form-item label="鐖剁骇浜у搧" prop="superid">
-            <el-select
-                v-model="form.superid"
-                placeholder="鐖剁骇浜у搧鍚嶇О"
-                clearable
-                size="small"
-                style="width: 240px"
-            >
-              <el-option
-                  v-for="product in superNameOptions"
-                  :key="product.productname"
-                  :label="product.productname"
-                  :value="product.productid"
-              />
-            </el-select>
-          </el-form-item>
-        </div>
-        <el-form-item label="鎶樼畻绯绘暟" prop="procofficient">
-          <el-input v-model="form.procofficient" placeholder="璇疯緭鍏ユ姌绠楃郴鏁�"/>
-        </el-form-item>
-        <el-form-item label="鏄惁鏄剧ず" prop="isshow">
-          <el-select v-model="form.isshow" placeholder="璇烽�夋嫨鏄惁鏄剧ず">
-            <el-option
-                v-for="dict in isshowOptions"
-                :key="dict.dictValue"
-                :label="dict.dictLabel"
-                :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鏄惁涓昏浜у搧" prop="iscpnyproduct">
-          <el-select v-model="form.iscpnyproduct" placeholder="璇烽�夋嫨鏄惁涓昏浜у搧">
-            <el-option
-                v-for="dict in iscpnyproductOptions"
-                :key="dict.dictValue"
-                :label="dict.dictLabel"
-                :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="浠锋牸" prop="price">
-          <el-input type="number" v-model="form.price" placeholder="璇疯緭鍏ュ崟浠�"/>
-        </el-form-item>
-        <el-form-item label="澶囨敞" prop="note">
-          <el-input v-model="form.note" placeholder="璇疯緭鍏ュ娉�"/>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {listProduct, getProduct, delProduct, addProduct, updateProduct, exportProduct, getFatherCP}
-  from "@/api/enerInfoManage/product";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  mixins: [mixins],
-  data() {
-    return {
-      height:null,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 浜у搧琛ㄦ牸鏁版嵁
-      productList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      fatherCp: false,
-      // 浜у搧ID瀛楀吀
-      productidOptions: [],
-      // 浜у搧鍚嶇О瀛楀吀
-      productnameOptions: [],
-      // 浜у搧缂栧彿瀛楀吀
-      productsnoOptions: [],
-      // 璁¢噺鍗曚綅瀛楀吀
-      muidOptions: [],
-      // 鐖剁骇浜у搧ID瀛楀吀
-      superNameOptions: [],
-      // 鏄惁涓哄瓙绾у瓧鍏�
-      issubOptions: [],
-      // 鎶樼畻绯绘暟瀛楀吀
-      procofficientOptions: [],
-      // 鏄惁鏄剧ず瀛楀吀
-      isshowOptions: [],
-      // 鏄惁涓昏浜у搧瀛楀吀
-      iscpnyproductOptions: [],
-      // 鎿嶄綔浜哄瓧鍏�
-      oprManOptions: [],
-      // 鎿嶄綔鏃堕棿瀛楀吀
-      oprTimeOptions: [],
-      // 鏇存柊浜哄瓧鍏�
-      modManOptions: [],
-      // 鏇存柊鏃堕棿瀛楀吀
-      modTimeOptions: [],
-      // 澶囨敞瀛楀吀
-      noteOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        productname: undefined,
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        productname: [
-          {required: true, message: "浜у搧鍚嶇О涓嶈兘涓虹┖", trigger: "blur"}
-        ], productsno: [
-          {required: true, message: "浜у搧缂栧彿涓嶈兘涓虹┖", trigger: "blur"}
-        ], muid: [
-          {required: true, message: "璁¢噺鍗曚綅涓嶈兘涓虹┖", trigger: "blur"}
-        ], issub: [
-          {required: true, message: "鏄惁涓哄瓙绾т笉鑳戒负绌�", trigger: "blur"}
-        ], procofficient: [
-          {required: true, message: "鎶樼畻绯绘暟涓嶈兘涓虹┖", trigger: "blur"}
-        ], isshow: [
-          {required: true, message: "鏄惁鏄剧ず涓嶈兘涓虹┖", trigger: "blur"}
-        ], iscpnyproduct: [
-          {required: true, message: "鏄惁涓昏浜у搧涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-      }
-    };
-  },
-  created() {
-    this.getList();
-    this.getFatherCP();
-    this.getDicts("sys_unit").then(response => {
-      this.muidOptions = response.data;
-    });
-    this.getDicts("sys_yes_no").then(response => {
-      this.issubOptions = response.data;
-    });
-    this.getDicts("sys_yes_no").then(response => {
-      this.isshowOptions = response.data;
-    });
-    this.getDicts("sys_yes_no").then(response => {
-      this.iscpnyproductOptions = response.data;
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 370;
-    },
-    /** 鏌ヨ浜у搧鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listProduct(this.queryParams).then(response => {
-        this.productList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 璁¢噺鍗曚綅瀛楀吀缈昏瘧
-    muidFormat(row, column) {
-      return this.selectDictLabel(this.muidOptions, row.muid);
-    },
-    // 鏄惁涓哄瓙绾у瓧鍏哥炕璇�
-    issubFormat(row, column) {
-      return this.selectDictLabel(this.issubOptions, row.issub);
-    },
-    // 鏄惁鏄剧ず瀛楀吀缈昏瘧
-    isshowFormat(row, column) {
-      return this.selectDictLabel(this.isshowOptions, row.isshow);
-    },
-    // 鏄惁涓昏浜у搧瀛楀吀缈昏瘧
-    iscpnyproductFormat(row, column) {
-      return this.selectDictLabel(this.iscpnyproductOptions, row.iscpnyproduct);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        productid: undefined,
-        productname: undefined,
-        productsno: undefined,
-        muid: undefined,
-        superid: undefined,
-        issub: undefined,
-        procofficient: undefined,
-        isshow: undefined,
-        iscpnyproduct: undefined,
-        oprMan: undefined,
-        oprTime: undefined,
-        modMan: undefined,
-        modTime: undefined,
-        price: undefined,
-        note: undefined
-      };
-      this.resetForm("form");
-    },
-    obtainValue(value) {
-      if (value === "Y") {
-        this.fatherCp = true;
-      } else {
-        this.fatherCp = false;
-        this.form.superid = undefined;
-      }
-    },
-    getFatherCP() {
-      listProduct().then(response => {
-        this.superNameOptions = response.rows;
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.productid)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞浜у搧";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const productid = row.productid || this.ids
-      getProduct(productid).then(response => {
-        this.form = response.data;
-        this.open = true;
-        if (this.form.issub === 'Y') {
-          this.fatherCp = true;
-        } else {
-          this.fatherCp = false;
-          this.form.superid = undefined;
-        }
-        this.title = "淇敼浜у搧";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.productid != undefined) {
-            updateProduct(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addProduct(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const productids = row.productid || this.ids;
-      const productnames = row.productname || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎浜у搧鍚嶄负"' + productnames + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delProduct(productids);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈変骇鍝佹暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportProduct(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    }
-  }
-};
-</script>
-
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/energyAlarm/historicalAlarm/LChart.vue b/energy_management_ui/src/views/energyAlarm/historicalAlarm/LChart.vue
deleted file mode 100644
index 56b2573..0000000
--- a/energy_management_ui/src/views/energyAlarm/historicalAlarm/LChart.vue
+++ /dev/null
@@ -1,210 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-/*import resize from './mixins/resize'*/
-
-export default {
-  /*mixins: [resize],*/
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData } = {}) {
-      this.chart.setOption({
-        xAxis: {
-          data: [
-            "04:00",
-            "05:00",
-            "06:00",
-            "07:00",
-            "08:00",
-            "09:00",
-            "10:00",
-            "11:00",
-            "12:00",
-            "13:00",
-            "14:00",
-            "15:00",
-            "16:00",
-            "17:00",
-            "18:00",
-            "19:00",
-            "20:00",
-            "21:00",
-            "22:00",
-            "23:00"
-          ],
-          boundaryGap: false,
-          axisTick: {
-            show: false
-          }
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 30,
-          containLabel: true
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "cross"
-          },
-          padding: [5, 10]
-        },
-        yAxis: {
-          axisTick: {
-            show: false
-          }
-        },
-        legend: {
-          data: ["棰勮鍊�", "闄愬��"],
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        series: [
-          {
-            name: "棰勮鍊�",
-            itemStyle: {
-              normal: {
-                color: "#FF005A",
-                lineStyle: {
-                  color: "#FF005A",
-                  width: 2
-                }
-              }
-            },
-            smooth: true,
-            type: "line",
-            data: [
-              200,
-              200,
-              200,
-              200,
-              200,
-              200,
-              200,
-              200,
-              200,
-              200,
-              200,
-              200,
-              200,
-              200,
-              200,
-              200,
-              200,
-              200,
-              200,
-              200,
-              200,
-              200,
-              200
-            ],
-            animationDuration: 1000,
-            animationEasing: "cubicInOut"
-          },
-          {
-            name: "闄愬��",
-            smooth: true,
-            type: "line",
-            itemStyle: {
-              normal: {
-                color: "#3888fa",
-                lineStyle: {
-                  color: "#3888fa",
-                  width: 2
-                },
-                areaStyle: {
-                  color: "#f3f8ff"
-                }
-              }
-            },
-            data: [
-              200,
-              200,
-              181,
-              224,
-              210,
-              172,
-              181,
-              224,
-              210,
-              172,
-              181,
-              224,
-              210,
-              172,
-              181,
-              224,
-              210,
-              172,
-              181,
-              224,
-              210,
-              172,
-              181
-            ],
-            animationDuration: 800,
-            animationEasing: "quadraticOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyAlarm/historicalAlarm/historyAlarmNote.vue b/energy_management_ui/src/views/energyAlarm/historicalAlarm/historyAlarmNote.vue
deleted file mode 100644
index 7eac573..0000000
--- a/energy_management_ui/src/views/energyAlarm/historicalAlarm/historyAlarmNote.vue
+++ /dev/null
@@ -1,386 +0,0 @@
-<!-- 瀹炴椂妫�娴� 缁勬�佸浘 鍔熻兘 鐨勫 sheet椤� 涓� 鎶ヨ璁板綍  灞曠ず 娴嬬偣 鎶ヨ淇℃伅 鐨刅UE缁勪欢-->
-<template>
-  <div class="app-container" style="padding:0">
-    <el-card class="box-card">
-      <el-form
-        :model="queryParams"
-        ref="queryForm"
-        :inline="true"
-        label-width="68px"
-        class="query-form"
-      >
-        <el-form-item label="闄愬�肩被鍨�" prop="limitType">
-          <el-select
-            v-model="queryParams.limitType"
-            placeholder="闄愬�肩被鍨�"
-            clearable
-          >
-            <el-option
-              v-for="dict in limitTypeOptions"
-              :key="dict.limitCode"
-              :label="dict.limitName"
-              :value="dict.limitCode"
-            >
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鎶ヨ绾у埆" prop="alarmLevel">
-          <el-select
-            v-model="queryParams.alarmLevel"
-            placeholder="鎶ヨ绾у埆"
-            clearable
-          >
-            <el-option
-              v-for="dict in alarmLevelOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            >
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鎸囨爣鍚嶇О" prop="indexName">
-          <el-input
-            v-model="queryParams.indexName"
-            placeholder="璇疯緭鍏ユ寚鏍囧悕绉�"
-            clearable
-            size="small"
-            @keyup.enter.native="handleQuery"
-            style="width:160px"
-          />
-        </el-form-item>
-        <el-form-item label="璧锋鏃堕棿">
-          <el-date-picker
-            v-model="dateRange"
-            type="datetimerange"
-            value-format="yyyy-MM-dd HH:mm:ss"
-            range-separator="鑷�"
-            start-placeholder="寮�濮嬫棩鏈�"
-            end-placeholder="缁撴潫鏃ユ湡"
-          >
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item>
-          <el-button
-            type="primary"
-            icon="el-icon-search"
-            size="mini"
-            @click="handleQuery"
-            >鏌ヨ</el-button
-          >
-        </el-form-item>
-      </el-form>
-      <el-row :gutter="10" class="mb8">
-        <!--        <el-col :span="1.5">-->
-        <!--          <el-button-->
-        <!--            type="warning"-->
-        <!--            icon="el-icon-download"-->
-        <!--            size="mini"-->
-        <!--            @click="handleExport"-->
-        <!--            v-hasPermi="['energyAlarm:historicalAlarm:export']"-->
-        <!--          >瀵煎嚭-->
-        <!--          </el-button>-->
-        <!--        </el-col>-->
-      </el-row>
-      <el-form>
-        <el-table
-          :data="JkHistoryAlarmList"
-          v-loading="loading"
-          border
-          @selection-change=""
-          @cell-click="openDialog"
-        >
-          <el-table-column label="搴忓彿" type="index" align="center" />
-          <el-table-column label="鎸囨爣缂栫爜" align="center" prop="code" />
-          <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="indexName">
-            <template slot-scope="scope">
-              <div style="color:blue;text-decoration:underline ;cursor:pointer">
-                {{ scope.row.indexName }}
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column label="鎸囨爣鍗曚綅" align="center" prop="unitId" />
-          <el-table-column label="鎶ヨ绾у埆" align="center" prop="alarmLevel" />
-          <el-table-column label="闄愬�肩被鍨�" align="center" prop="limitType" />
-          <el-table-column label="闄愬��" align="center" prop="limitingValue" />
-          <el-table-column
-            label="鎶ヨ鏃堕棿璧�"
-            align="center"
-            prop="alarmBeginTime"
-          />
-          <el-table-column
-            label="鎶ヨ鏃堕棿姝�"
-            align="center"
-            prop="alarmEndTime"
-          />
-          <el-table-column label="鎶ヨ鍊�" align="center" prop="alarmValue" />
-          <el-table-column
-            label="鎸佺画鏃堕暱(鍒嗛挓)"
-            align="center"
-            prop="duration"
-            width="96px"
-          />
-        </el-table>
-      </el-form>
-      <pagination
-        v-show="total > 0"
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-      <!--寮规-->
-      <el-dialog
-        :title="title"
-        :visible.sync="open"
-        width="1000px"
-        :close-on-click-modal="false"
-      >
-        <el-row style="margin-bottom:32px;">
-          <el-tabs v-model="activeName" @tab-click="handleClick">
-            <el-tab-pane label="鍘嗗彶鏁版嵁鏇茬嚎鍥�" name="second">
-              <history-alarm-view
-                ref="historyAlarmView"
-                :code="code"
-                :activeName="activeName"
-                :limitVal="limitVal"
-              ></history-alarm-view>
-            </el-tab-pane>
-            <el-tab-pane label="鍘嗗彶鏁版嵁鏌ヨ" name="third">
-              <history-alarm-table
-                ref="historyAlarmTable"
-                :code="code"
-                :indexName="indexName"
-                :activeName="activeName"
-                :indexUnit="indexUnit"
-                :limitVal="limitVal"
-              ></history-alarm-table>
-            </el-tab-pane>
-          </el-tabs>
-        </el-row>
-        <div slot="footer" class="dialog-footer">
-          <el-button @click="cancel">鍙� 娑�</el-button>
-        </div>
-      </el-dialog>
-    </el-card>
-  </div>
-</template>
-
-<script>
-import {
-  listHistoryAlarmNote,
-  exportHistoricalAlarm
-} from "@/api/basicsetting/historyAlarm";
-import { listLimitType } from "@/api/basicsetting/limitType";
-import historyAlarmView from "../realTimeAlarm/historyAlarmView";
-import historyAlarmTable from "../realTimeAlarm/historyAlarmTable";
-
-export default {
-  components: { historyAlarmView, historyAlarmTable },
-  name: "historyAlarmNote",
-  props: ["svgId", "tagId"],
-  data() {
-    return {
-      num: 20,
-      num1: 5,
-      code: undefined,
-      value: "",
-      options: undefined,
-      radio: "B",
-      activeName: "second",
-      indexId: undefined,
-      indexName: undefined,
-      indexUnit: undefined,
-      limitVal: undefined,
-      hiddenTableHeader: false,
-      limitTypeOptions: [],
-      alarmLevelOptions: [],
-      resposeList: [],
-      // 閬僵灞�
-      loading: false,
-      // 閫変腑鏁扮粍
-      ids: [],
-      dateRange: [],
-      names: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 10,
-      // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-      List: [],
-      energyindexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      JkHistoryAlarmList: [],
-      title: "鍘嗗彶鏁版嵁鏌ヨ",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      indexIdOptions: [],
-      // 鎸囨爣鍚嶇О瀛楀吀
-      nameOptions: [],
-      // 鎸囨爣缂栫爜瀛楀吀
-      codeOptions: [],
-      // 鍗曚綅瀛楀吀
-      unitIdOptions: [],
-      // 鏌ヨ鍙傛暟
-      lineChartData: {
-        newVisitis: null
-      },
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        indexType: "COLLECT",
-        code: undefined,
-        indexName: undefined,
-        limitType: undefined,
-        alarmLevel: undefined,
-        nodeId: undefined,
-        beginTime: undefined,
-        endTime: undefined,
-        svgId: undefined,
-        nodeId: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      indexCategoryDefaultVal: undefined,
-      unitDefaultVal: undefined
-    };
-  },
-  created() {
-    if (this.$props.tagId) {
-      this.queryParams.nodeId = this.$props.tagId;
-    }
-    //this.queryParams.svgId=this.svgId;
-    this.getDicts("alarm_level").then(response => {
-      this.alarmLevelOptions = response.data;
-    });
-    this.getDicts("sys_unit").then(response => {
-      this.unitIdOptions = response.data;
-    });
-    listLimitType(this.queryParams).then(response => {
-      this.limitTypeOptions = response.rows;
-    });
-  },
-  methods: {
-    show(nodeId) {
-      this.queryParams.nodeId = nodeId;
-      this.getList();
-    },
-    getList() {
-      this.loading = true;
-      listHistoryAlarmNote(
-        this.addDateRange(this.queryParams, this.dateRange)
-      ).then(response => {
-        this.JkHistoryAlarmList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    /** 鏌ョ湅鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const indexId = row.indexId || this.ids;
-      this.open = true;
-    },
-    // 鍗曚綅瀛楀吀缈昏瘧
-    unitIdFormat(row, column) {
-      return this.selectDictLabel(this.unitIdOptions, row.unitId);
-    },
-    // 鎶ヨ绾у埆瀛楀吀缈昏瘧
-    alarmLevelFormat(row, column) {
-      return this.selectDictLabel(this.alarmLevelOptions, row.alarmLevel);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        indexId: undefined,
-        name: undefined,
-        code: undefined,
-        indexCategory: undefined,
-        remark: undefined,
-        unitId: undefined
-      };
-      this.resetForm("form");
-    },
-    // modelNodeChange(modelNode) {
-    //   this.queryParams.nodeId = modelNode.id;
-    //   this.getList();
-    // },
-    formatDate: function(value) {
-      let date = new Date(value);
-      let y = date.getFullYear();
-      let MM = date.getMonth() + 1;
-      MM = MM < 10 ? "0" + MM : MM;
-      let d = date.getDate();
-      d = d < 10 ? "0" + d : d;
-      let h = date.getHours();
-      h = h < 10 ? "0" + h : h;
-      let m = date.getMinutes();
-      m = m < 10 ? "0" + m : m;
-      let s = date.getSeconds();
-      s = s < 10 ? "0" + s : s;
-      return y + "-" + MM + "-" + d + " " + h + ":" + m + ":" + s;
-    },
-
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.dateRange = [];
-      this.resetForm("queryForm");
-    },
-
-    handleSelectionChange() {},
-    openDialog(row, column, event, cell) {
-      if ("indexName" == column.property) {
-        this.open = true;
-      }
-      this.code = row.code;
-      this.indexName = row.indexName;
-      this.indexId = row.indexId;
-      this.activeName = "second";
-      this.indexUnit = row.unitId;
-      this.limitVal = row.limitingValue;
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夋姤璀︽暟鎹」?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportHistoricalAlarm(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-    //闄愬埗绫诲瀷缈昏瘧
-    limitTypeFormat(row, column) {
-      var actions = [];
-      Object.keys(this.limitTypeOptions).map(key => {
-        if (this.limitTypeOptions[key].limitCode == "" + row.limitType) {
-          actions.push(this.limitTypeOptions[key].limitName);
-        }
-      });
-      return actions.join("");
-    },
-    handleClick(tab, event) {
-      this.activeName = tab.name;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyAlarm/historicalAlarm/index.vue b/energy_management_ui/src/views/energyAlarm/historicalAlarm/index.vue
deleted file mode 100644
index 86b6092..0000000
--- a/energy_management_ui/src/views/energyAlarm/historicalAlarm/index.vue
+++ /dev/null
@@ -1,77 +0,0 @@
-<template>
-  <el-row type="flex">
-    <el-col :style="{width:isCollapse?'0': '280px',position:'relative'}" v-show="!isCollapse">
-      <basic-container title="鍘嗗彶鎶ヨ" :bodyStyle="bodyStyle">
-        <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false" :modelCode="modelCode"></ModelNode>
-      </basic-container>
-      <img src="~@/assets/image/rectangle.png" alt=""
-           class="shrink-col-block"
-           @click="toggleCollapse">
-    </el-col>
-    <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse"/>
-    <el-col :style="{width:isCollapse? 'calc(100% - 48px)':'calc(100% - 280px)',paddingLeft:isCollapse? 0:'14px'}">
-      <basic-container :title="currentNode ? currentNode.label+'--鑺傜偣閰嶇疆' : '鑺傜偣閰嶇疆'" :bodyStyle="bodyStyleRight">
-        <RealIndex ref="RealIndex"></RealIndex>
-      </basic-container>
-    </el-col>
-  </el-row>
-</template>
-
-<script>
-import RealIndex from "./realIndex";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from '@/components/shrink/index.vue'
-
-
-export default {
-  components: {RealIndex, ModelNode,ShrinkCol},
-  mixins: [mixins],
-  data() {
-    return {
-      modelData: '',
-      modelCode: undefined,
-      modelInfoOptions: [],
-      isCollapse: false,
-      bodyStyleRight: {},
-      currentNode: ''
-    }
-  },
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight -155 + 'px'
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 155 + 'px'
-      };
-    },
-    changeNode: function (node) {
-      if (node) {
-        this.currentNode = node
-      }
-      this.$refs.RealIndex.modelNodeChange(node);
-    },
-    manageModel: function () {
-      this.$router.push('/model');
-    },
-    changeModel: function (item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.shrink-col-block {
-  position: absolute;
-  top: 20px;
-  right: 16px;
-  cursor: pointer;
-}
-</style>
diff --git a/energy_management_ui/src/views/energyAlarm/historicalAlarm/realIndex.vue b/energy_management_ui/src/views/energyAlarm/historicalAlarm/realIndex.vue
deleted file mode 100644
index a1e0cc3..0000000
--- a/energy_management_ui/src/views/energyAlarm/historicalAlarm/realIndex.vue
+++ /dev/null
@@ -1,460 +0,0 @@
-<template>
-  <div class="historicalAlarm-right">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-      class="query-form"
-    >
-      <el-form-item>
-        <el-radio-group v-model="queryParams.eierarchyFlag">
-          <el-radio
-            label="B"
-            style="margin-right: 10px!important;"
-            onselect="true"
-            >鏈骇</el-radio
-          >
-          <el-radio label="ALL">鍖呭惈涓嬬骇</el-radio>
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item label="闄愬�肩被鍨�" prop="limitType">
-        <el-select
-          v-model="queryParams.limitType"
-          placeholder="闄愬�肩被鍨�"
-          clearable
-        >
-          <el-option
-            v-for="dict in limitTypeOptions"
-            :key="dict.limitCode"
-            :label="dict.limitName"
-            :value="dict.limitCode"
-          >
-          </el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="鎶ヨ绾у埆" prop="alarmLevel">
-        <el-select
-          v-model="queryParams.alarmLevel"
-          placeholder="鎶ヨ绾у埆"
-          clearable
-        >
-          <el-option
-            v-for="dict in alarmLevelOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          >
-          </el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="鎸囨爣鍚嶇О" prop="indexName">
-        <el-input
-          v-model="queryParams.indexName"
-          placeholder="璇疯緭鍏ユ寚鏍囧悕绉�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-          style="width:160px"
-        />
-      </el-form-item>
-      <el-form-item label="璧锋鏃堕棿">
-        <el-date-picker
-          v-model="dateRange"
-          type="datetimerange"
-          value-format="yyyy-MM-dd HH:mm:ss"
-          range-separator="鑷�"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡"
-        >
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >鏌ヨ</el-button
-        >
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['energyAlarm:historicalAlarm:export']"
-          >瀵煎嚭
-        </el-button>
-      </el-form-item>
-    </el-form>
-    <el-form>
-      <el-table
-        :data="JkHistoryAlarmList"
-        v-loading="loading"
-        border
-        @selection-change=""
-        @cell-click="openDialog"
-        :height="height"
-      >
-        <el-table-column label="搴忓彿" type="index" align="center" />
-        <el-table-column label="鍗曚綅鍚嶇О" align="center" prop="modelName" />
-        <el-table-column label="鎸囨爣缂栫爜" align="center" prop="code" />
-        <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="indexName">
-          <template slot-scope="scope">
-            <div style="color:blue;text-decoration:underline ;cursor:pointer">
-              {{ scope.row.indexName }}
-            </div>
-          </template>
-        </el-table-column>
-        <el-table-column
-          label="鎸囨爣鍗曚綅"
-          align="center"
-          prop="unitId"
-          :formatter="unitIdFormat"
-        />
-        <el-table-column
-          label="鎶ヨ绾у埆"
-          align="center"
-          prop="alarmLevel"
-          :formatter="alarmLevelFormat"
-        />
-        <el-table-column
-          label="闄愬�肩被鍨�"
-          align="center"
-          prop="limitType"
-          :formatter="limitTypeFormat"
-        />
-        <el-table-column label="闄愬��" align="center" prop="limitingValue" />
-        <el-table-column
-          label="鎶ヨ鏃堕棿璧�"
-          align="center"
-          prop="alarmBeginTime"
-        />
-        <el-table-column
-          label="鎶ヨ鏃堕棿姝�"
-          align="center"
-          prop="alarmEndTime"
-        />
-        <el-table-column label="棰勮鍊�" align="center" prop="alarmValue" />
-        <el-table-column
-          label="鎸佺画鏃堕暱(鍒嗛挓)"
-          align="center"
-          prop="duration"
-          width="96px"
-        />
-      </el-table>
-    </el-form>
-    <pagination
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-    <!--寮规-->
-    <el-dialog
-      :title="title"
-      :visible.sync="open"
-      width="1000px"
-      :close-on-click-modal="false"
-    >
-      <el-row style="margin-bottom:32px;">
-        <el-tabs v-model="activeName" @tab-click="handleClick">
-          <el-tab-pane label="鍘嗗彶鏁版嵁鏇茬嚎鍥�" name="second">
-            <history-alarm-view
-              ref="historyAlarmView"
-              :code="code"
-              :activeName="activeName"
-              :limitVal="limitVal"
-            ></history-alarm-view>
-          </el-tab-pane>
-          <el-tab-pane label="鍘嗗彶鏁版嵁鏌ヨ" name="third">
-            <history-alarm-table
-              ref="historyAlarmTable"
-              :code="code"
-              :indexName="indexName"
-              :activeName="activeName"
-              :indexUnit="indexUnit"
-              :limitVal="limitVal"
-            ></history-alarm-table>
-          </el-tab-pane>
-        </el-tabs>
-      </el-row>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {
-  listHistoryAlarm,
-  exportHistoricalAlarm,
-  getHistoricalAlarm
-} from "@/api/basicsetting/historyAlarm";
-import { listLimitType } from "@/api/basicsetting/limitType";
-import historyAlarmView from "../realTimeAlarm/historyAlarmView";
-import historyAlarmTable from "../realTimeAlarm/historyAlarmTable";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  components: { historyAlarmView, historyAlarmTable },
-  name: "historyAlarm",
-  mixins: [mixins],
-  data() {
-    return {
-      num: 20,
-      num1: 5,
-      pickerOptions: {
-        /*  value1: [new Date(2000, 10, 10, 10, 10), new Date(2000, 10, 11, 10, 10)],*/
-      },
-      code: undefined,
-      value: "",
-      options: undefined,
-      // handleClick:'simple',
-      radio: "B",
-      activeName: "second",
-      indexId: undefined,
-      indexName: undefined,
-      indexUnit: undefined,
-      limitVal: undefined,
-      hiddenTableHeader: false,
-      /* lineChartData: lineChartData.newVisitis,*/
-      limitTypeOptions: [],
-      alarmLevelOptions: [],
-      resposeList: [],
-      /* formatDate:undefined,*/
-      // 閬僵灞�
-      loading: false,
-      // 閫変腑鏁扮粍
-      ids: [],
-      dateRange: [],
-      names: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 10,
-      // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-      List: [],
-      energyindexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      JkHistoryAlarmList: [],
-      title: "鍘嗗彶鏁版嵁鏌ヨ",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      indexIdOptions: [],
-      // 鎸囨爣鍚嶇О瀛楀吀
-      nameOptions: [],
-      // 鎸囨爣缂栫爜瀛楀吀
-      codeOptions: [],
-      // 鍗曚綅瀛楀吀
-      unitIdOptions: [],
-      // 鏌ヨ鍙傛暟
-      lineChartData: {
-        newVisitis: null
-      },
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        eierarchyFlag: "B",
-        indexType: "COLLECT",
-        code: undefined,
-        indexName: undefined,
-        /* unitId: undefined,*/
-        limitType: undefined,
-        alarmLevel: undefined,
-        /*alarmValue:undefined,*/
-        /* limitingValue:undefined,*/
-        nodeId: undefined,
-        beginTime: undefined,
-        endTime: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      currentNode: undefined,
-      indexCategoryDefaultVal: undefined,
-      unitDefaultVal: undefined,
-      height: null
-    };
-  },
-  created() {
-    this.getDicts("alarm_level").then(response => {
-      this.alarmLevelOptions = response.data;
-    });
-    this.getDicts("sys_unit").then(response => {
-      this.unitIdOptions = response.data;
-    });
-    listLimitType(this.queryParams).then(response => {
-      this.limitTypeOptions = response.rows;
-    });
-    this.getTime();
-  },
-  methods: {
-    setCharts() {
-      this.height = window.innerHeight - 370 + "px";
-    },
-    getList() {
-      this.loading = true;
-      listHistoryAlarm(
-        this.addDateRange(this.queryParams, this.dateRange)
-      ).then(response => {
-        this.JkHistoryAlarmList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    /** 鏌ョ湅鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const indexId = row.indexId || this.ids;
-      this.open = true;
-      /*this.title = "鍘嗗彶鏁版嵁鏌ヨ";*/
-    },
-    // 鍗曚綅瀛楀吀缈昏瘧
-    unitIdFormat(row, column) {
-      return this.selectDictLabel(this.unitIdOptions, row.unitId);
-    },
-    /*      // 闄愬�肩被鍨嬪瓧鍏哥炕璇�
-          limitTypeFormat(row, column) {
-            return this.selectDictLabel(this.limitTypeOptions, row.limitType);
-          },*/
-    // 鎶ヨ绾у埆瀛楀吀缈昏瘧
-    alarmLevelFormat(row, column) {
-      return this.selectDictLabel(this.alarmLevelOptions, row.alarmLevel);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        indexId: undefined,
-        name: undefined,
-        code: undefined,
-        indexCategory: undefined,
-        remark: undefined,
-        unitId: undefined
-      };
-      this.resetForm("form");
-    },
-    modelNodeChange(modelNode) {
-      this.queryParams.nodeId = modelNode.id;
-      this.settingDeviceList = [];
-      this.settingIndexList = [];
-      this.disabledSetting =
-        modelNode === undefined || modelNode === "" || modelNode === null;
-      if (modelNode) {
-        this.currentNode = modelNode;
-        this.deviceLoading = true;
-        this.energyLoading = true;
-        this.productLoading = true;
-        this.indexLoading = true;
-      }
-      this.getList();
-    },
-    // formatDate: function (value) {
-    //   let date = new Date(value);
-    //   let y = date.getFullYear();
-    //   let MM = date.getMonth() + 1;
-    //   MM = MM < 10 ? ('0' + MM) : MM;
-    //   let d = date.getDate();
-    //   d = d < 10 ? ('0' + d) : d;
-    //   let h = date.getHours();
-    //   h = h < 10 ? ('0' + h) : h;
-    //   let m = date.getMinutes();
-    //   m = m < 10 ? ('0' + m) : m;
-    //   let s = date.getSeconds();
-    //   s = s < 10 ? ('0' + s) : s;
-    //   return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;
-    // },
-
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.dateRange = [];
-      this.resetForm("queryForm");
-    },
-
-    handleSelectionChange() {},
-    openDialog(row, column, event, cell) {
-      if ("indexName" == column.property) {
-        this.open = true;
-        this.code = row.code;
-        this.indexName = row.indexName;
-        this.indexId = row.indexId;
-        this.activeName = "second";
-        this.indexUnit = this.selectDictLabel(this.unitIdOptions, row.unitId);
-        this.limitVal = row.limitingValue;
-      }
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夋姤璀︽暟鎹」?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportHistoricalAlarm(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-    //闄愬埗绫诲瀷缈昏瘧
-    limitTypeFormat(row, column) {
-      var actions = [];
-      Object.keys(this.limitTypeOptions).map(key => {
-        if (this.limitTypeOptions[key].limitCode == "" + row.limitType) {
-          actions.push(this.limitTypeOptions[key].limitName);
-        }
-      });
-      return actions.join("");
-    },
-    handleClick(tab, event) {
-      this.activeName = tab.name;
-    },
-    getTime() {
-      var myDate = new Date();
-      var monthFirst = new Date(
-        myDate.getFullYear(),
-        parseInt(myDate.getMonth()),
-        1
-      );
-      this.dateRange = [this.formatDate(monthFirst), this.formatDate(myDate)];
-    },
-    formatDate: function(value) {
-      let date = new Date(value);
-      let y = date.getFullYear();
-      let MM = date.getMonth() + 1;
-      MM = MM < 10 ? "0" + MM : MM;
-      let d = date.getDate();
-      d = d < 10 ? "0" + d : d;
-      let h = date.getHours();
-      h = h < 10 ? "0" + h : h;
-      let m = date.getMinutes();
-      m = m < 10 ? "0" + m : m;
-      let s = date.getSeconds();
-      s = s < 10 ? "0" + s : s;
-      return y + "-" + MM + "-" + d + " " + h + ":" + m + ":" + s;
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.historicalAlarm-right {
-  height: 100%;
-  overflow: hidden;
-}
-</style>
diff --git a/energy_management_ui/src/views/energyAlarm/realTimeAlarm/LineChart.vue b/energy_management_ui/src/views/energyAlarm/realTimeAlarm/LineChart.vue
deleted file mode 100644
index 4189cc0..0000000
--- a/energy_management_ui/src/views/energyAlarm/realTimeAlarm/LineChart.vue
+++ /dev/null
@@ -1,148 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-// import resize from './mixins/resize'
-
-export default {
-  // mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object
-      // required: true
-    }
-  },
-  data() {
-    return {
-      chart: null,
-      alarmLimitName: undefined
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, timeList } = {}) {
-      if (expectedData.length > 0) {
-        this.alarmLimitName = "鎶ヨ闄愬��";
-      } else {
-        this.alarmLimitName = " ";
-      }
-      this.chart.setOption({
-        xAxis: {
-          data: timeList,
-          boundaryGap: false,
-          axisTick: {
-            show: false
-          }
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 30,
-          containLabel: true
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "cross"
-          },
-          padding: [5, 10]
-        },
-        yAxis: {
-          axisTick: {
-            show: false
-          }
-        },
-        legend: {
-          data: [this.alarmLimitName, "瀹炴椂鍊�"],
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        series: [
-          {
-            symbol: "none",
-            name: "鎶ヨ闄愬��",
-            itemStyle: {
-              normal: {
-                color: "#FF005A",
-                lineStyle: {
-                  color: "#FF005A",
-                  width: 2
-                }
-              }
-            },
-            smooth: true,
-            type: "line",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          },
-          {
-            name: "瀹炴椂鍊�",
-            smooth: true,
-            type: "line",
-            itemStyle: {
-              normal: {
-                color: "#3888fa",
-                lineStyle: {
-                  color: "#3888fa",
-                  width: 2
-                },
-                areaStyle: {
-                  color: "#f3f8ff"
-                }
-              }
-            },
-            data: actualData,
-            animationDuration: 2800,
-            animationEasing: "quadraticOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyAlarm/realTimeAlarm/historyAlarmTable.vue b/energy_management_ui/src/views/energyAlarm/realTimeAlarm/historyAlarmTable.vue
deleted file mode 100644
index bf7a5a4..0000000
--- a/energy_management_ui/src/views/energyAlarm/realTimeAlarm/historyAlarmTable.vue
+++ /dev/null
@@ -1,198 +0,0 @@
-<template>
-  <div class="app-container pastTable" style="padding:0">
-    <el-form :model="pastQueryParams" ref="historyTable" :inline="true" label-width="68px" class="query-form" style="margin-bottom: 20px">
-      <el-form-item>
-        <el-date-picker
-          v-model="timeArr"
-          type="datetimerange"
-          :clearable="false"
-          value-format="timestamp"
-          range-separator="鑷�"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="" prop="total" :rules="rules.numRule">
-        鏄剧ず <el-input v-model="pastQueryParams.total" :min="1" :max="1000" style="width: 120px" type="number"></el-input> 涓��
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="historyDataSelect">鏌ヨ</el-button>
-      </el-form-item>
-    </el-form>
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-document"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['energyAlarm:realTimeAlarm:list']"
-        >瀵煎嚭Excel
-        </el-button>
-      </el-col>
-    </el-row>
-    <el-table :data="tableData" v-loading="loading" border @selection-change="" max-height="350">
-      <el-table-column label="鎶ヨ鏃堕棿" align="center" prop="showDataTime"/>
-      <el-table-column label="鎸囨爣缂栫爜" align="center" prop="tagCode"/>
-      <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="indexName"/>
-      <el-table-column label="鎸囨爣鍗曚綅" align="center" prop="unitName"/>
-      <el-table-column label="瀹炴椂鍊�" align="center" prop="value"/>
-    </el-table>
-    <!--<pagination-->
-      <!--v-show="total>0"-->
-      <!--:total="total"-->
-      <!--:page.sync="pastQueryParams.pageNum"-->
-      <!--:limit.sync="pastQueryParams.pageSize"-->
-    <!--/>-->
-  </div>
-</template>
-
-<script>
-  import {getHistoryData,exportHistoryTable} from "@/api/energyAlarm/realTimeAlarm/liveHistoryAssembly"
-    export default {
-      props: ["code","activeName","indexName","indexUnit"],
-      name: "historyAlarmTable",
-      data(){
-        const checkNum = (rule, value, callback) => {
-          let reg =  /(^([-]?)[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^([-]?)(0){1}$)|(^([-]?)[0-9]\.[0-9]([0-9])?$)/;
-          if (""==value&&!reg.test(value)) {
-            callback(new Error('涓暟闇�鏁板瓧骞朵笖涓嶈兘涓虹┖'));
-          } else if(0>value||1000<value){
-            callback(new Error('鏁板瓧鑼冨洿1~1000鐨勬鏁存暟'));
-          }else{
-            callback();
-          }
-        };
-        return{
-          loading: false,
-          total:10,
-          startTime:undefined,
-          endTime:undefined,
-          timeArr:undefined,
-          interval:undefined,
-          resposeList:[],
-          //鍘嗗彶
-          pastQueryParams:{
-            time:undefined,
-            total:60,
-            code:undefined,
-            indexId:undefined,
-            pageNum:1,
-            pageSize:10,
-          },
-          tableData:[],
-          rules:{
-            numRule: [
-              {type:"number",validator: checkNum,trigger: "change"},
-            ],
-          }
-        }
-      },
-      created() {
-        // this.getTime();
-        // this.historyDataSelect();
-        this.getConfigKey("energyAlarm.historyTimeAlarm.pastHour").then(response => {
-          this.interval = response.msg;
-          this.getConfigKey("energyAlarm.historyTimeAlarm.pointCount").then(response => {
-            this.pastQueryParams.total = response.msg;
-            this.getTime();
-          });
-        });
-      },
-      mounted(){
-        this.getTime();
-        // this.historyDataSelect();
-      },
-      watch:{
-        activeName:function (a,b) {
-          if("third"==a){
-            this.getTime();
-            this.historyDataSelect();
-          }
-        }
-      },
-      methods:{
-        historyDataSelect(){
-          this.$refs["historyTable"].validate(valid => {
-            if (valid) {
-              this.tableData = [];
-              let start = undefined;
-              let end = undefined;
-              if (this.timeArr) {
-                start = this.timeArr[0];
-                end = this.timeArr[1];
-              }
-              getHistoryData(this.code, this.formatDate(start), this.formatDate(end), this.pastQueryParams.total.toString()).then(response => {
-
-                for (let i = 0; i < response.data.length; i++) {
-                  let item = {
-                    showDataTime: response.data[i].showDataTime,
-                    tagCode: response.data[i].tagCode,
-                    indexName: this.indexName,
-                    unitName: this.indexUnit,
-                    value: response.data[i].value
-                  };
-                  this.tableData.push(item);
-                }
-              });
-            }
-          })
-        },
-        getTime(){
-          this.startTime = new Date().getTime()- 1000*60*60*this.interval;
-          this.endTime = new Date();
-          //鏄剧ず鏃堕棿
-          this.timeArr = [this.startTime,this.endTime];
-        },
-        formatDate: function (value) {
-          let date = new Date(value);
-          let y = date.getFullYear();
-          let MM = date.getMonth() + 1;
-          MM = MM < 10 ? ('0' + MM) : MM;
-          let d = date.getDate();
-          d = d < 10 ? ('0' + d) : d;
-          let h = date.getHours();
-          h = h < 10 ? ('0' + h) : h;
-          let m = date.getMinutes();
-          m = m < 10 ? ('0' + m) : m;
-          let s = date.getSeconds();
-          s = s < 10 ? ('0' + s) : s;
-          return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;
-        },
-        cleanTable(){
-          this.tableData = [];
-        },
-        /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-        handleExport() {
-          this.$refs["historyTable"].validate(valid => {
-            if (valid) {
-              var me = this;
-              let start = undefined;
-              let end = undefined;
-              if (this.timeArr) {
-                start = this.timeArr[0];
-                end = this.timeArr[1];
-              }
-              // const queryParams = this.queryParams;
-              this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夐噰闆嗗弬鏁版ā鏉挎暟鎹」?', "璀﹀憡", {
-                confirmButtonText: "纭畾",
-                cancelButtonText: "鍙栨秷",
-                type: "warning"
-              }).then(function () {
-                return exportHistoryTable(me.code, me.formatDate(start), me.formatDate(end), me.pastQueryParams.total.toString(), me.indexName, me.indexUnit);
-              }).then(response => {
-                this.download(response.msg);
-              }).catch(function () {
-              });
-            }
-          })
-        }
-      },
-    }
-</script>
-
-<style scoped>
-  .pastTable .pagination-container{
-    height: 40px!important;
-  }
-</style>
diff --git a/energy_management_ui/src/views/energyAlarm/realTimeAlarm/historyAlarmView.vue b/energy_management_ui/src/views/energyAlarm/realTimeAlarm/historyAlarmView.vue
deleted file mode 100644
index 490338c..0000000
--- a/energy_management_ui/src/views/energyAlarm/realTimeAlarm/historyAlarmView.vue
+++ /dev/null
@@ -1,162 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-form :model="pastQueryParams" ref="historyView" :inline="true" label-width="68px" class="query-form"
-             style="margin-bottom: 20px">
-      <el-form-item>
-        <el-date-picker
-            v-model="timeArr"
-            type="datetimerange"
-            :clearable="false"
-            value-format="timestamp"
-            range-separator="鑷�"
-            start-placeholder="寮�濮嬫棩鏈�"
-            end-placeholder="缁撴潫鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="" prop="total" :rules="rules.numRule">
-        鏄剧ず
-        <el-input v-model="pastQueryParams.total" :min="1" :max="1000" style="width: 120px" type="number"></el-input>
-        涓��
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="historyDataSelect">鏌ヨ</el-button>
-      </el-form-item>
-    </el-form>
-    <past-line-chart v-if="'second'==activeName" ref="pastLineChart" :chart-data="historyLineChartData"/>
-  </div>
-</template>
-
-<script>
-import pastLineChart from "./LineChart";
-import {getHistoryData} from "@/api/energyAlarm/realTimeAlarm/liveHistoryAssembly"
-
-export default {
-  components: {pastLineChart},
-  props: ["code", "activeName", "limitVal"],
-  name: "historyAlarmView",
-  data() {
-    const checkNum = (rule, value, callback) => {
-      let reg = /(^([-]?)[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^([-]?)(0){1}$)|(^([-]?)[0-9]\.[0-9]([0-9])?$)/;
-      if ("" == value && !reg.test(value)) {
-        callback(new Error('涓暟闇�鏁板瓧骞朵笖涓嶈兘涓虹┖'));
-      } else if (0 > value || 1000 < value) {
-        callback(new Error('鏁板瓧鑼冨洿1~1000鐨勬鏁存暟'));
-      } else {
-        callback();
-      }
-    };
-    return {
-      // activeName:"second",
-      historyLineChartData: {
-        expectedData: [],
-        actualData: [],
-        timeList: []
-      },
-      //鍘嗗彶
-      pastQueryParams: {
-        time: undefined,
-        total: 60,
-        code: undefined,
-        indexId: undefined
-      },
-      startTime: undefined,
-      endTime: undefined,
-      timeArr: undefined,
-      //鏃堕棿闂撮殧(灏忔椂)
-      interval: undefined,
-      rules: {
-        numRule: [
-          {type: "number", validator: checkNum, trigger: "change"},
-        ],
-      }
-    }
-  },
-  created() {
-    this.getConfigKey("energyAlarm.historyTimeAlarm.pastHour").then(response => {
-      this.interval = response.msg;
-      this.getConfigKey("energyAlarm.historyTimeAlarm.pointCount").then(response => {
-        this.pastQueryParams.total = response.msg;
-        this.getTime();
-        this.historyDataSelect();
-      });
-    });
-    // this.getTime();
-  },
-  beforeUpdate() {
-
-  },
-  beforeDestroy() {
-    this.cleanData();
-  },
-  watch: {
-    activeName: function (newData, oldData) {
-      if ("second" == newData) {
-        this.getTime();
-        this.historyDataSelect();
-      } else {
-        this.cleanData();
-      }
-    }
-  },
-  methods: {
-    historyDataSelect() {
-      this.$refs["historyView"].validate(valid => {
-        this.cleanData();
-        if (valid) {
-          let start = undefined;
-          let end = undefined;
-          if (this.timeArr) {
-            start = this.timeArr[0];
-            end = this.timeArr[1];
-          }
-          getHistoryData(this.code, this.formatDate(start), this.formatDate(end), this.pastQueryParams.total.toString()).then(response => {
-            this.resposeList = response.data;
-            let aa = [];
-            for (let i = 0; i < this.resposeList.length; i++) {
-              this.historyLineChartData.actualData.push(this.resposeList[i].value);
-              if (this.limitVal) {
-                this.historyLineChartData.expectedData.push(this.limitVal);
-              }
-              aa.push(this.resposeList[i].showDataTime)
-            }
-            this.historyLineChartData.timeList = aa;
-            if ("second" == this.activeName) {
-              this.$refs.pastLineChart.initChart(this.historyLineChartData)
-            }
-          });
-        }
-      })
-    },
-    getTime() {
-      this.startTime = new Date().getTime() - 1000 * 60 * 60 * this.interval;
-      this.endTime = new Date();
-      //鏄剧ず鏃堕棿
-      this.timeArr = [this.startTime, this.endTime];
-    },
-    formatDate: function (value) {
-      let date = new Date(value);
-      let y = date.getFullYear();
-      let MM = date.getMonth() + 1;
-      MM = MM < 10 ? ('0' + MM) : MM;
-      let d = date.getDate();
-      d = d < 10 ? ('0' + d) : d;
-      let h = date.getHours();
-      h = h < 10 ? ('0' + h) : h;
-      let m = date.getMinutes();
-      m = m < 10 ? ('0' + m) : m;
-      let s = date.getSeconds();
-      s = s < 10 ? ('0' + s) : s;
-      return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;
-    },
-    cleanData() {
-      this.historyLineChartData.actualData = [];
-      this.historyLineChartData.expectedData = [];
-      this.historyLineChartData.timeList = [];
-    }
-  },
-}
-</script>
-
-<style scoped>
-
-</style>
diff --git a/energy_management_ui/src/views/energyAlarm/realTimeAlarm/index.vue b/energy_management_ui/src/views/energyAlarm/realTimeAlarm/index.vue
deleted file mode 100644
index 276a9b8..0000000
--- a/energy_management_ui/src/views/energyAlarm/realTimeAlarm/index.vue
+++ /dev/null
@@ -1,95 +0,0 @@
-<template>
-  <el-row type="flex">
-    <el-col
-      :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-      v-show="!isCollapse"
-    >
-      <basic-container title="瀹炴椂鎶ヨ" :bodyStyle="bodyStyle">
-        <ModelNode
-          ref="modelNode"
-          @changeNode="changeNode"
-          :showOpt="false"
-          :modelCode="modelCode"
-        />
-      </basic-container>
-      <img
-        src="~@/assets/image/rectangle.png"
-        alt=""
-        class="shrink-col-block"
-        @click="toggleCollapse"
-      />
-    </el-col>
-    <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-    <el-col
-      :style="{
-        width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-        paddingLeft: isCollapse ? 0 : '14px'
-      }"
-    >
-      <basic-container
-        :title="currentNode ? currentNode.label + '--鑺傜偣閰嶇疆' : '鑺傜偣閰嶇疆'"
-        :bodyStyle="bodyStyleRight"
-      >
-        <realTimeSetting ref="realTimeSetting" />
-      </basic-container>
-    </el-col>
-  </el-row>
-</template>
-
-<script>
-import realTimeSetting from "./modelRealTimeAlarmSetting";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from "@/components/shrink/index.vue";
-
-export default {
-  components: { realTimeSetting, ModelNode, ShrinkCol },
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  mixins: [mixins],
-  data() {
-    return {
-      modelData: "",
-      modelInfoOptions: [],
-      modelCode: undefined,
-      isCollapse: false,
-      bodyStyleRight: {},
-      currentNode: ""
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 185 + "px"
-      };
-    },
-    changeNode: function(node) {
-      if (node) {
-        this.currentNode = node;
-      }
-      this.$refs.realTimeSetting.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      // this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.shrink-col-block {
-  position: absolute;
-  top: 20px;
-  right: 16px;
-  cursor: pointer;
-}
-</style>
diff --git a/energy_management_ui/src/views/energyAlarm/realTimeAlarm/liveAlarmView.vue b/energy_management_ui/src/views/energyAlarm/realTimeAlarm/liveAlarmView.vue
deleted file mode 100644
index 9016d97..0000000
--- a/energy_management_ui/src/views/energyAlarm/realTimeAlarm/liveAlarmView.vue
+++ /dev/null
@@ -1,112 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-form :model="liveQueryParams" ref="liveView" :inline="true" label-width="68px" class="query-form" style="margin-bottom: 20px">
-      <el-form-item label="" prop="minute" :rules="rules.numRule">
-      鏈�鏂� <el-input v-model="liveQueryParams.minute" :min="1" :max="120" style="width: 120px" type="number"></el-input> 鍒嗛挓
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="liveDataSelect">鏌ヨ</el-button>
-      </el-form-item>
-    </el-form>
-    <live-line-chart v-if="'first'===activeName" ref="liveLineChart" :chart-data="liveLineChartData"/>
-  </div>
-</template>
-
-<script>
-  import liveLineChart from "./LineChart";
-  import {getRealTimeData} from "@/api/energyAlarm/realTimeAlarm/liveHistoryAssembly"
-    export default {
-      name: "liveAlarmView",
-      components: {liveLineChart},
-      props:["code","activeName","limitVal"],
-      data(){
-        const checkNum = (rule, value, callback) => {
-          let reg =  /(^([-]?)[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^([-]?)(0){1}$)|(^([-]?)[0-9]\.[0-9]([0-9])?$)/;
-          if (""===value&&!reg.test(value)) {
-            callback(new Error('鍒嗛挓闇�鏁板瓧骞朵笖涓嶈兘涓虹┖'));
-          } else if(0>value||120<value){
-            callback(new Error('鏁板瓧鑼冨洿1~120鐨勬鏁存暟'));
-          }else{
-            callback();
-          }
-        };
-        return{
-          liveLineChartData:{
-            expectedData: [],
-            actualData: [],
-            timeList:[],
-          },
-          //瀹炴椂
-          liveQueryParams:{
-            time:undefined,
-            minute:undefined,
-            code:undefined,
-            indexId:undefined
-          },
-          pointCount:undefined,
-          resposeList:undefined,
-          rules:{
-            numRule: [
-              {type:"number",validator: checkNum,trigger: "change"},
-            ],
-          }
-        }
-      },
-      created(){
-        this.getConfigKey("energyAlarm.realTimeAlarm.pointCount").then(response => {
-          this.pointCount = response.msg;
-          this.getConfigKey("energyAlarm.realTimeAlarm.pastMinute").then(response => {
-            this.liveQueryParams.minute = response.msg;
-            this.liveDataSelect();
-          });
-        });
-      },
-      beforeUpdate(){
-
-      },
-      beforeDestroy() {
-        this.cleanData();
-      },
-      watch:{
-        activeName:function (newData,oldData) {
-          if("first"===newData){
-             this.liveDataSelect();
-          }else {
-            this.cleanData();
-          }
-        }
-      },
-      methods:{
-        liveDataSelect(){
-          this.$refs["liveView"].validate(valid => {
-            this.cleanData();
-            if (valid) {
-              getRealTimeData(this.code, this.liveQueryParams.minute.toString(), this.pointCount.toString()).then(response => {
-                this.resposeList = response.data;
-                let aa = [];
-                for (let i = 0; i < this.resposeList.length; i++) {
-                  this.liveLineChartData.actualData.push(this.resposeList[i].value);
-                  this.liveLineChartData.timeList.push(this.resposeList[i].showDataTime);
-                  if(this.limitVal){
-                    this.liveLineChartData.expectedData.push(this.limitVal);
-                  }
-                }
-                if ("first" === this.activeName) {
-                  this.$refs.liveLineChart.initChart(this.liveLineChartData);
-                }
-              });
-            }
-          })
-        },
-        cleanData(){
-          this.liveLineChartData.actualData = [];
-          this.liveLineChartData.expectedData = [];
-          this.liveLineChartData.timeList = [];
-        }
-      }
-    }
-</script>
-
-<style scoped>
-
-</style>
diff --git a/energy_management_ui/src/views/energyAlarm/realTimeAlarm/modelRealTimeAlarmSetting.vue b/energy_management_ui/src/views/energyAlarm/realTimeAlarm/modelRealTimeAlarmSetting.vue
deleted file mode 100644
index 66ab786..0000000
--- a/energy_management_ui/src/views/energyAlarm/realTimeAlarm/modelRealTimeAlarmSetting.vue
+++ /dev/null
@@ -1,399 +0,0 @@
-<template>
-  <div class="modelRealTimeAlarmSetting-right">
-    <el-tabs>
-      <el-tab-pane :disabled="disabledSetting">
-        <span slot="label"><i class="el-icon-setting"></i>瀹炴椂鎶ヨ</span>
-        <el-form
-          :model="queryParams"
-          ref="queryForm"
-          :inline="true"
-          label-width="68px"
-          class="query-form"
-        >
-          <el-form-item>
-            <el-radio-group v-model="queryParams.eierarchyFlag">
-              <el-radio
-                label="B"
-                style="margin-right: 10px!important;"
-                onselect="true"
-                >鏈骇</el-radio
-              >
-              <el-radio label="ALL">鍖呭惈涓嬬骇</el-radio>
-            </el-radio-group>
-          </el-form-item>
-          <el-form-item label="闄愬�煎悕绉�" prop="limitValName">
-            <el-select
-              v-model="queryParams.limitType"
-              placeholder="闄愬�煎悕绉�"
-              clearable
-              style="width:100px"
-              size="mini"
-            >
-              <el-option
-                v-for="dict in limitTypeOptions"
-                :key="dict.limitCode"
-                :label="dict.limitName"
-                :value="dict.limitCode"
-              />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="鎶ヨ绾у埆" prop="alarmLevel">
-            <el-select
-              v-model="queryParams.alarmLevel"
-              placeholder="鎶ヨ绾у埆"
-              clearable
-              style="width:100px"
-              size="mini"
-            >
-              <el-option
-                v-for="dict in alarmLevelOptions"
-                :key="dict.dictValue"
-                :label="dict.dictLabel"
-                :value="dict.dictValue"
-              />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="鎸囨爣鍚嶇О">
-            <el-input
-              style="width: 120px"
-              v-model="queryParams.indexName"
-              placeholder="鎸囨爣鍚嶇О"
-              clearable
-              size="mini"
-              @keyup.enter.native="handleQuery"
-            />
-          </el-form-item>
-          <el-form-item>
-            <el-button
-              type="primary"
-              icon="el-icon-search"
-              size="mini"
-              @click="selectList"
-              >鏌ヨ</el-button
-            >
-            <!--<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>-->
-          </el-form-item>
-        </el-form>
-        <!--琛ㄦ牸-->
-        <el-form :model="model" ref="form" class="mainTable">
-          <el-table
-            v-loading="loading"
-            :data="model.tableOptions"
-            border
-            @selection-change="handleSelectionChange"
-            :default-sort="{ prop: 'date', order: 'descending' }"
-            @cell-click="openDialog"
-            :height="height"
-          >
-            <el-table-column
-              type="selection"
-              width="55"
-              align="center"
-              show-overflow-tooltip
-            />
-            <el-table-column
-              label="搴忓彿"
-              type="index"
-              align="center"
-              show-overflow-tooltip
-            />
-            <el-table-column
-              label="鍗曚綅鍚嶇О"
-              align="center"
-              width="100"
-              prop="modelName"
-              show-overflow-tooltip
-            />
-            <el-table-column
-              label="鎸囨爣缂栫爜"
-              align="center"
-              prop="code"
-              show-overflow-tooltip
-            />
-            <el-table-column
-              label="鎸囨爣鍚嶇О"
-              align="center"
-              width="100"
-              prop="indexName"
-              show-overflow-tooltip
-            >
-              <template slot-scope="scope">
-                <div
-                  style="color:blue;text-decoration:underline;cursor:pointer"
-                >
-                  {{ scope.row.indexName }}
-                </div>
-              </template>
-            </el-table-column>
-            <el-table-column
-              label="鎸囨爣鍗曚綅"
-              align="center"
-              prop="unitId"
-              :formatter="unitFormat"
-              show-overflow-tooltip
-            />
-            <el-table-column
-              label="鎶ヨ绾у埆"
-              align="center"
-              prop="alarmLevel"
-              width="100"
-              :formatter="alarmLevelFormat"
-              show-overflow-tooltip
-            />
-            <el-table-column
-              label="闄愬�肩被鍨�"
-              align="center"
-              prop="limitType"
-              width="100"
-              :formatter="limitTypeFormat"
-              show-overflow-tooltip
-            />
-            <el-table-column
-              label="闄愬��"
-              align="center"
-              prop="limitingValue"
-              show-overflow-tooltip
-            />
-            <el-table-column
-              label="鎶ヨ寮�濮嬫椂闂�"
-              align="center"
-              prop="alarmBeginTime"
-              width="180"
-              show-overflow-tooltip
-            />
-            <el-table-column
-              label="鎶ヨ鍊�"
-              align="center"
-              prop="alarmValue"
-              show-overflow-tooltip
-            />
-          </el-table>
-          <pagination
-            :total="total"
-            :page.sync="queryParams.pageNum"
-            :limit.sync="queryParams.pageSize"
-            @pagination="getList"
-          />
-        </el-form>
-      </el-tab-pane>
-    </el-tabs>
-    <el-dialog
-      :title="title"
-      :visible.sync="open"
-      width="1000px"
-      :close-on-click-modal="false"
-      @close="closeDialog"
-    >
-      <el-row style="padding:16px 16px 0;margin-bottom:32px;">
-        <el-tabs v-model="activeName" @tab-click="handleClick">
-          <el-tab-pane label="瀹炴椂鏁版嵁鏇茬嚎鍥�" name="first">
-            <live-alarm-view
-              ref="liveAlarmView"
-              :code="code"
-              :activeName="activeName"
-              :limitVal="limitVal"
-            ></live-alarm-view>
-          </el-tab-pane>
-          <el-tab-pane label="鍘嗗彶鏁版嵁鏇茬嚎鍥�" name="second">
-            <history-alarm-view
-              ref="historyAlarmView"
-              :code="code"
-              :activeName="activeName"
-              :limitVal="limitVal"
-            ></history-alarm-view>
-          </el-tab-pane>
-          <el-tab-pane label="鍘嗗彶鏁版嵁鏌ヨ" name="third">
-            <history-alarm-table
-              ref="historyAlarmTable"
-              :code="code"
-              :indexName="indexName"
-              :activeName="activeName"
-              :indexUnit="indexUnit"
-            ></history-alarm-table>
-          </el-tab-pane>
-        </el-tabs>
-      </el-row>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="cancelDialog">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { getRealTimeAlarmList } from "@/api/energyAlarm/realTimeAlarm/realTimeAlarm";
-import { listLimitType } from "@/api/basicsetting/limitType";
-import liveAlarmView from "./liveAlarmView";
-import historyAlarmView from "./historyAlarmView";
-import historyAlarmTable from "./historyAlarmTable";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  components: { liveAlarmView, historyAlarmView, historyAlarmTable },
-  name: "modelMonitorSetting",
-  mixins: [mixins],
-  data() {
-    return {
-      // 閬僵灞�
-      loading: false,
-      radio: "",
-      title: "瀹炴椂鏁版嵁鏌ヨ",
-      open: false,
-      total: 10,
-      activeName: "first",
-      code: undefined,
-      indexId: undefined,
-      indexName: undefined,
-      indexUnit: undefined,
-      //璁℃椂鍣ㄥ璞�
-      timer: "",
-      //璁℃椂鍣ㄩ棿闅�
-      intervalTime: 30000,
-      currentNode: "",
-      deviceDialog: false,
-      energyDialog: false,
-      productDialog: false,
-      collectIndexDialog: false,
-      indexLoading: false,
-      limitTypeOptions: [],
-      disabledSetting: true,
-      limitValName: [],
-      limitVal: undefined,
-      queryParams: {
-        eierarchyFlag: "ALL",
-        alarmLevel: undefined,
-        indexName: undefined,
-        nodeId: undefined, //
-        limitType: undefined,
-        indexType: "COLLECT",
-        pageNum: 1,
-        pageSize: 10
-      },
-      height: null,
-      //鎶ヨ绾у埆
-      alarmLevelOptions: [],
-      //鍗曚綅
-      unitOptions: [],
-      //琛ㄦ牸妯″瀷
-      model: {
-        tableOptions: []
-      }
-    };
-  },
-  created() {
-    this.getDicts("alarm_level").then(response => {
-      this.alarmLevelOptions = response.data;
-    });
-    listLimitType(this.queryParams).then(response => {
-      this.limitTypeOptions = response.rows;
-    });
-    this.getDicts("sys_unit").then(response => {
-      this.unitOptions = response.data;
-    });
-  },
-  mounted() {
-    this.getConfigKey("energyAlarm.realTimeAlarm.intervalTime").then(
-      response => {
-        this.intervalTime = response.msg;
-        this.timer = setInterval(this.getList, this.intervalTime);
-      }
-    );
-  },
-  beforeDestroy() {
-    //椤甸潰閿�姣佹椂 瑕佸仠姝㈣鏃跺櫒锛屽惁鍒欓�夐」鍗″垏鎹㈣鏃跺櫒涓嶅仠姝紝浼氳秺鏉ヨ秺蹇紝澶氫釜绾跨▼
-    if (this.timer) {
-      clearInterval(this.timer);
-    }
-  },
-  methods: {
-    setCharts() {
-      this.height = window.innerHeight - 390 + "px";
-    },
-    modelNodeChange(modelNode) {
-      this.queryParams.nodeId = modelNode.id;
-      this.disabledSetting =
-        modelNode === undefined || modelNode === "" || modelNode === null;
-      if (modelNode) {
-        this.currentNode = modelNode;
-        this.getList();
-      }
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.indexId);
-      this.names = selection.map(item => item.name);
-      this.single = selection.length !== 1;
-      this.multiple = !selection.length;
-    },
-
-    getList() {
-      /** 鏌ヨ鎶ヨ闄愬�肩被鍨嬬淮鎶ゅ垪琛� */
-      this.loading = true;
-      getRealTimeAlarmList(this.queryParams).then(response => {
-        this.model.tableOptions = response.data;
-        this.total = response.data.length;
-        this.loading = false;
-      });
-    },
-    openDialog(row, column, event, cell) {
-      if ("indexName" == column.property) {
-        this.open = true;
-        this.code = row.code;
-        this.indexName = row.indexName;
-        this.indexId = row.indexId;
-        this.activeName = "first";
-        this.indexUnit = this.selectDictLabel(this.unitOptions, row.unitId);
-        this.limitVal = row.limitingValue;
-      }
-    },
-    cancelDialog() {
-      this.open = false;
-      this.$refs.historyAlarmTable.cleanTable();
-    },
-    handleClick(tab, event) {
-      this.activeName = tab.name;
-    },
-    selectList() {
-      this.getList();
-    },
-    closeDialog() {
-      this.activeName = "";
-      this.$refs.historyAlarmTable.cleanTable();
-    },
-    // 鎶ヨ绾у埆瀛楀吀缈昏瘧
-    alarmLevelFormat(row, column) {
-      return this.selectDictLabel(this.alarmLevelOptions, row.alarmLevel);
-    },
-    // 鍗曚綅瀛楀吀缈昏瘧
-    unitFormat(row, column) {
-      return this.selectDictLabel(this.unitOptions, row.unitId);
-    },
-    // 闄愬�肩被鍨嬪瓧鍏哥炕璇�
-    limitTypeFormat(row, column) {
-      var actions = [];
-      Object.keys(this.limitTypeOptions).map(key => {
-        if (this.limitTypeOptions[key].limitCode == "" + row.limitType) {
-          actions.push(this.limitTypeOptions[key].limitName);
-        }
-      });
-      return actions.join("");
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.selectList();
-    }
-  }
-};
-</script>
-
-<style scoped lang="scss">
-.modelRealTimeAlarmSetting-right {
-  height: 100%;
-  overflow: hidden;
-}
-
-.mainTable .pagination-container {
-  height: 40px !important;
-}
-</style>
diff --git a/energy_management_ui/src/views/energyAssistInput/energyDayConsumeInput/energyDayConsumeInput.vue b/energy_management_ui/src/views/energyAssistInput/energyDayConsumeInput/energyDayConsumeInput.vue
deleted file mode 100644
index 0bf4f95..0000000
--- a/energy_management_ui/src/views/energyAssistInput/energyDayConsumeInput/energyDayConsumeInput.vue
+++ /dev/null
@@ -1,204 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-form :model="queryParams" ref="queryForm"  label-width="72px" class="special-form">
-      <el-row :gutter="24">
-        <el-col :span="6">
-          <el-date-picker size="small" style="width: 100%"
-                          v-model="queryParams.date"
-                          :type="dateTypes"
-                          :value-format="valueFormat"
-                          :format="showFormat"
-                          @change="handleQuery"
-                          :clearable="false"
-                          placeholder="閫夋嫨鏃ユ湡">
-          </el-date-picker>
-        </el-col>
-        <el-col :span="18">
-          <el-form-item class="operation">
-            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌ヨ</el-button>
-            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleSave">淇濆瓨</el-button>
-          </el-form-item>
-        </el-col>
-      </el-row>
-    </el-form>
-    <div>
-      <el-table :data="energyConsumeInputList" ref="dataList" v-loading="loading" border
-                style="width: 100%; margin-top: 20px"
-                :height="height">
-        <el-table-column label="搴忓彿" align="center" type="index" width="50"></el-table-column>
-        <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="name" min-width="150px"/>
-        <el-table-column label="鎸囨爣缂栫爜" align="center" prop="code"/>
-        <el-table-column label="鎸囨爣绫诲瀷" align="center" prop="categoryName"/>
-        <el-table-column label="鑳芥簮鍝佺" align="center" prop="energyName"/>
-        <el-table-column label="鍊�" align="center" prop="value" min-width="100px">
-          <template slot-scope="scope">
-            <el-input v-model="scope.row.value" @change="checkNum(scope.row.value)" placeholder="璇疯緭鍏ュ��"
-                      clearable></el-input>
-          </template>
-        </el-table-column>
-        <el-table-column label="鍗曚綅" align="center" prop="unit"/>
-        <el-table-column label="鎵�灞炴棩鏈�" align="center" prop="dataTimeStr"/>
-        <el-table-column label="褰曞叆鏃堕棿" align="center" prop="createTimeStr"/>
-        <el-table-column label="褰曞叆浜�" align="center" prop="createBy"/>
-      </el-table>
-    </div>
-  </div>
-</template>
-
-<script>
-import {selectConsumeInputList, saveConsumeInput} from "@/api/energyAssistInput/energyDayConsumeInput"
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: 'energyIndex',
-  mixins: [mixins],
-  data() {
-    return {
-      timeArr: [],
-      currentNode: '',
-      deviceCategory: undefined,
-      // 閬僵灞�
-      loading: false,
-      // 閫変腑鏁扮粍
-      ids: [],
-      dateRange: [],
-      names: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 10,
-      // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-      List: [],
-      //鑳芥簮娑堣�楁墜鍔ㄥ綍鍏ユ暟鎹泦鍚�
-      energyConsumeInputList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      queryParams: {
-        date: undefined,
-        nodeId: "",
-        timeType: "DAY"
-      },
-      dateTypes: 'date',
-      valueFormat: "yyyy-MM-dd",
-      showFormat: "yyyy-MM-dd",
-      tableData: [],
-      datas: [],
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {},
-      height:null,
-      moNode: undefined,
-    };
-  },
-  created() {
-    this.setNowDate();
-  },
-  methods: {
-    setCharts() {
-      this.height = window.innerHeight - 365 + 'px';
-    },
-    modelNodeChange(modelNode, deviceCategory) {
-      this.moNode = modelNode;
-      this.queryParams.nodeId = modelNode.id;
-      this.deviceCategory = deviceCategory;
-      this.getList();
-    },
-    setNowDate() {
-      let nowDate = new Date();
-      let date = {
-        year: nowDate.getFullYear(),
-        month: nowDate.getMonth() + 1,
-        day: nowDate.getDate(),
-      }
-      this.queryParams.date = date.year + '-' + this.gshRq(date.month) + '-' + this.gshRq(date.day);
-    },
-    gshRq(rq) {
-      return ((rq * 1) < 10) ? '0' + rq : rq;
-    },
-    /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-    getList() {
-      this.loading = true;
-      selectConsumeInputList(this.queryParams).then(response => {
-        this.energyConsumeInputList = response.rows;
-        this.loading = false;
-      });
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        indexId: undefined,
-        name: undefined,
-        code: undefined,
-        indexCategory: undefined,
-        remark: undefined,
-        unitId: undefined
-      };
-      this.resetForm("form");
-    },
-
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.getList();
-    },
-    /** 淇濆瓨鎸夐挳鎿嶄綔 */
-    async handleSave() {
-      console.log("this.energyConsumeInputList");
-      console.log(this.energyConsumeInputList);
-      for (let i = 0; i < this.energyConsumeInputList.length; i++) {
-        let item = this.energyConsumeInputList[i];
-        let reg = /(^(-?([1-9]{1}\d*)|(0{1}))(\.\d{1,2,3})?$)/;
-        let value = item.value
-        console.log("i---" + i)
-        if (undefined == value || "" == value) {
-          this.$notify.error({
-            title: '閿欒',
-            message: '绗�' + (i + 1) + '琛屽�间笉鑳戒负绌�'
-          });
-          return false
-        } else if (!reg.test(value)) {
-          this.$notify.error({
-            title: '閿欒',
-            message: '绗�' + (i + 1) + '琛屽�煎繀椤讳负鏁板瓧涓旀渶澶氫繚鐣�3浣嶅皬鏁�'
-          });
-          return false
-        }
-      }
-      this.loading = true;
-      let res = await saveConsumeInput({models: this.energyConsumeInputList});
-      this.loading = false;
-      this.getList();
-    },
-    getTime() {
-      this.startTime = new Date().setHours(0, 0, 0, 0);
-      this.endTime = new Date().setHours(0, 0, 0, 0) + 24 * 60 * 60 * 1000 - 1;
-      //鏄剧ず鏃堕棿
-      this.timeArr = [this.startTime, this.endTime];
-    },
-    checkNum(value) {
-      let reg = /(^(-?([1-9]{1}\d*)|(0{1}))(\.\d{1,2,3})?$)/;
-      if (undefined == value || "" == value) {
-        this.$notify.error({
-          title: '閿欒',
-          message: '鍊间笉鑳戒负绌�'
-        });
-      } else if (!reg.test(value)) {
-        this.$notify.error({
-          title: '閿欒',
-          message: '鍊煎繀椤讳负鏁板瓧涓旀渶澶氫繚鐣�3浣嶅皬鏁�'
-        });
-      }
-    }
-  }
-}
-;
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/energyAssistInput/energyDayConsumeInput/index.vue b/energy_management_ui/src/views/energyAssistInput/energyDayConsumeInput/index.vue
deleted file mode 100644
index a42fe5e..0000000
--- a/energy_management_ui/src/views/energyAssistInput/energyDayConsumeInput/index.vue
+++ /dev/null
@@ -1,65 +0,0 @@
-<template>
-  <el-row type="flex">
-    <el-col class="page-left">
-      <basic-container title="姣忔棩鑳芥簮娑堣�楁墜鍔ㄥ綍鍏�" :bodyStyle="bodyStyle">
-        <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false" :auth="false"
-                   :modelCode="modelCode"></ModelNode>
-      </basic-container>
-    </el-col>
-    <el-col class="page-right">
-      <basic-container title="姣忔棩鑳芥簮娑堣�楁墜鍔ㄥ綍鍏�" :bodyStyle="bodyStyleRight">
-        <energyDayConsumeInput ref="energyDayConsumeInput"></energyDayConsumeInput>
-      </basic-container>
-    </el-col>
-  </el-row>
-</template>
-
-<script>
-import energyDayConsumeInput from "./energyDayConsumeInput";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  components: {energyDayConsumeInput, ModelNode},
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-    this.deviceCategory = this.$route.query.device_category;
-  },
-  mixins: [mixins],
-  data() {
-    return {
-      modelData: '',
-      modelInfoOptions: [],
-      modelCode: undefined,
-      deviceCategory: undefined,
-      isCollapse: false,
-      bodyStyleRight: {}
-    }
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight -155 + 'px'
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 155 + 'px'
-      };
-    },
-    changeNode: function (node) {
-      this.$refs.energyDayConsumeInput.modelNodeChange(node, this.deviceCategory);
-    },
-    manageModel: function () {
-      this.$router.push('/model');
-    },
-    changeModel: function (item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-@import "~@/assets/styles/left-right-layout.scss";
-</style>
diff --git a/energy_management_ui/src/views/energyAssistInput/energyMonthConsumeInput/energyMonthConsumeInput.vue b/energy_management_ui/src/views/energyAssistInput/energyMonthConsumeInput/energyMonthConsumeInput.vue
deleted file mode 100644
index 1c30527..0000000
--- a/energy_management_ui/src/views/energyAssistInput/energyMonthConsumeInput/energyMonthConsumeInput.vue
+++ /dev/null
@@ -1,204 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-form :model="queryParams" ref="queryForm" label-width="68px" class="special-form">
-      <el-row :gutter="24">
-        <el-col :span="6">
-          <el-date-picker size="small" style="width: 100%"
-                          v-model="queryParams.date"
-                          :type="dateTypes"
-                          :value-format="valueFormat"
-                          :format="showFormat"
-                          @change="handleQuery"
-                          :clearable="false"
-                          placeholder="閫夋嫨鏃ユ湡">
-          </el-date-picker>
-        </el-col>
-        <el-col :span="18">
-          <el-form-item class="operation">
-            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌ヨ</el-button>
-            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleSave">淇濆瓨</el-button>
-          </el-form-item>
-        </el-col>
-      </el-row>
-    </el-form>
-    <div>
-      <el-table :data="energyConsumeInputList" ref="dataList" v-loading="loading" border
-                style="width: 100%; margin-top: 20px"
-                :height="height">
-        <el-table-column label="搴忓彿" align="center" type="index" width="50"></el-table-column>
-        <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="name" min-width="150px"/>
-        <el-table-column label="鎸囨爣缂栫爜" align="center" prop="code"/>
-        <el-table-column label="鎸囨爣绫诲瀷" align="center" prop="categoryName"/>
-        <el-table-column label="鑳芥簮鍝佺" align="center" prop="energyName"/>
-        <el-table-column label="鍊�" align="center" prop="value" min-width="100px">
-          <template slot-scope="scope">
-            <el-input v-model="scope.row.value" @change="checkNum(scope.row.value)" placeholder="璇疯緭鍏ュ��"
-                      clearable></el-input>
-          </template>
-        </el-table-column>
-        <el-table-column label="鍗曚綅" align="center" prop="unit"/>
-        <el-table-column label="鎵�灞炴棩鏈�" align="center" prop="dataTimeStr"/>
-        <el-table-column label="褰曞叆鏃堕棿" align="center" prop="createTimeStr"/>
-        <el-table-column label="褰曞叆浜�" align="center" prop="createBy"/>
-      </el-table>
-    </div>
-  </div>
-</template>
-
-<script>
-import {selectConsumeInputList, saveConsumeInput} from "@/api/energyAssistInput/energyMonthConsumeInput"
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: 'energyIndex',
-  mixins: [mixins],
-  data() {
-    return {
-      timeArr: [],
-      currentNode: '',
-      deviceCategory: undefined,
-      // 閬僵灞�
-      loading: false,
-      // 閫変腑鏁扮粍
-      ids: [],
-      dateRange: [],
-      names: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 10,
-      // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-      List: [],
-      //鑳芥簮娑堣�楁墜鍔ㄥ綍鍏ユ暟鎹泦鍚�
-      energyConsumeInputList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      queryParams: {
-        date: undefined,
-        nodeId: "",
-        timeType: "MONTH"
-      },
-      dateTypes: 'month',
-      valueFormat: "yyyy-MM-dd",
-      showFormat: "yyyy-MM-dd",
-      tableData: [],
-      datas: [],
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {},
-      moNode: undefined,
-      height: null,
-    };
-  },
-  created() {
-    this.setNowDate();
-  },
-  methods: {
-    setCharts() {
-      this.height = window.innerHeight - 365 + 'px';
-    },
-    modelNodeChange(modelNode, deviceCategory) {
-      this.moNode = modelNode;
-      this.queryParams.nodeId = modelNode.id;
-      this.deviceCategory = deviceCategory;
-      this.getList();
-    },
-    setNowDate() {
-      let nowDate = new Date();
-      let date = {
-        year: nowDate.getFullYear(),
-        month: nowDate.getMonth() + 1,
-        day: nowDate.getDate(),
-      }
-      this.queryParams.date = date.year + '-' + this.gshRq(date.month) + '-' + this.gshRq(date.day);
-    },
-    gshRq(rq) {
-      return ((rq * 1) < 10) ? '0' + rq : rq;
-    },
-    /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-    getList() {
-      this.loading = true;
-      selectConsumeInputList(this.queryParams).then(response => {
-        this.energyConsumeInputList = response.rows;
-        this.loading = false;
-      });
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        indexId: undefined,
-        name: undefined,
-        code: undefined,
-        indexCategory: undefined,
-        remark: undefined,
-        unitId: undefined
-      };
-      this.resetForm("form");
-    },
-
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.getList();
-    },
-    /** 淇濆瓨鎸夐挳鎿嶄綔 */
-    async handleSave() {
-      console.log("this.energyConsumeInputList");
-      console.log(this.energyConsumeInputList);
-      for (let i = 0; i < this.energyConsumeInputList.length; i++) {
-        let item = this.energyConsumeInputList[i];
-        let reg = /(^(-?([1-9]{1}\d*)|(0{1}))(\.\d{1,2,3})?$)/;
-        let value = item.value
-        console.log("i---" + i)
-        if (undefined == value || "" == value) {
-          this.$notify.error({
-            title: '閿欒',
-            message: '绗�' + (i + 1) + '琛屽�间笉鑳戒负绌�'
-          });
-          return false
-        } else if (!reg.test(value)) {
-          this.$notify.error({
-            title: '閿欒',
-            message: '绗�' + (i + 1) + '琛屽�煎繀椤讳负鏁板瓧涓旀渶澶氫繚鐣�3浣嶅皬鏁�'
-          });
-          return false
-        }
-      }
-      this.loading = true;
-      let res = await saveConsumeInput({models: this.energyConsumeInputList});
-      this.loading = false;
-      this.getList();
-    },
-    getTime() {
-      this.startTime = new Date().setHours(0, 0, 0, 0);
-      this.endTime = new Date().setHours(0, 0, 0, 0) + 24 * 60 * 60 * 1000 - 1;
-      //鏄剧ず鏃堕棿
-      this.timeArr = [this.startTime, this.endTime];
-    },
-    checkNum(value) {
-      let reg = /(^(-?([1-9]{1}\d*)|(0{1}))(\.\d{1,2,3})?$)/;
-      if (undefined == value || "" == value) {
-        this.$notify.error({
-          title: '閿欒',
-          message: '鍊间笉鑳戒负绌�'
-        });
-      } else if (!reg.test(value)) {
-        this.$notify.error({
-          title: '閿欒',
-          message: '鍊煎繀椤讳负鏁板瓧涓旀渶澶氫繚鐣�3浣嶅皬鏁�'
-        });
-      }
-    }
-  }
-}
-;
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/energyAssistInput/energyMonthConsumeInput/index.vue b/energy_management_ui/src/views/energyAssistInput/energyMonthConsumeInput/index.vue
deleted file mode 100644
index af73cc1..0000000
--- a/energy_management_ui/src/views/energyAssistInput/energyMonthConsumeInput/index.vue
+++ /dev/null
@@ -1,65 +0,0 @@
-<template>
-  <el-row type="flex">
-    <el-col class="page-left">
-      <basic-container title="鏈堝害鑳芥簮娑堣�楁墜鍔ㄥ綍鍏�" :bodyStyle="bodyStyle">
-        <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false" :auth="false"
-                   :modelCode="modelCode"></ModelNode>
-      </basic-container>
-    </el-col>
-    <el-col class="page-right">
-      <basic-container title="鏈堝害鑳芥簮娑堣�楁墜鍔ㄥ綍鍏�" :bodyStyle="bodyStyleRight">
-        <energyMonthConsumeInput ref="energyMonthConsumeInput"></energyMonthConsumeInput>
-      </basic-container>
-    </el-col>
-  </el-row>
-</template>
-
-<script>
-import energyMonthConsumeInput from "./energyMonthConsumeInput";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  mixins: [mixins],
-  components: {energyMonthConsumeInput, ModelNode},
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-    this.deviceCategory = this.$route.query.device_category;
-  },
-  data() {
-    return {
-      modelData: '',
-      modelInfoOptions: [],
-      modelCode: undefined,
-      deviceCategory: undefined,
-      isCollapse: false,
-      bodyStyleRight: {}
-    }
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight -155 + 'px'
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 155 + 'px'
-      };
-    },
-    changeNode: function (node) {
-      this.$refs.energyMonthConsumeInput.modelNodeChange(node, this.deviceCategory);
-    },
-    manageModel: function () {
-      this.$router.push('/model');
-    },
-    changeModel: function (item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-@import "~@/assets/styles/left-right-layout.scss";
-</style>
diff --git a/energy_management_ui/src/views/energyAssistInput/energyYearConsumeInput/energyYearConsumeInput.vue b/energy_management_ui/src/views/energyAssistInput/energyYearConsumeInput/energyYearConsumeInput.vue
deleted file mode 100644
index e2b8432..0000000
--- a/energy_management_ui/src/views/energyAssistInput/energyYearConsumeInput/energyYearConsumeInput.vue
+++ /dev/null
@@ -1,208 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" class="special-form">
-      <el-row :gutter="24">
-        <el-col :span="6">
-          <el-date-picker size="small" style="width: 200px"
-                          v-model="queryParams.date"
-                          :type="dateTypes"
-                          :value-format="valueFormat"
-                          :format="showFormat"
-                          @change="handleQuery"
-                          :clearable="false"
-                          placeholder="閫夋嫨鏃ユ湡">
-          </el-date-picker>
-        </el-col>
-        <el-col :span="18">
-          <el-form-item class="operation">
-            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">
-              鏌ヨ
-            </el-button>
-            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleSave">淇濆瓨</el-button>
-          </el-form-item>
-        </el-col>
-      </el-row>
-    </el-form>
-    <div>
-      <el-table :data="energyConsumeInputList" ref="dataList" v-loading="loading" border
-                style="width: 100%; margin-top: 20px"
-                :height="height">
-        <el-table-column label="搴忓彿" align="center" type="index" width="50"></el-table-column>
-        <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="name" min-width="150px"/>
-        <el-table-column label="鎸囨爣缂栫爜" align="center" prop="code"/>
-        <el-table-column label="鎸囨爣绫诲瀷" align="center" prop="categoryName"/>
-        <el-table-column label="鑳芥簮鍝佺" align="center" prop="energyName"/>
-        <el-table-column label="鍊�" align="center" prop="value" min-width="100px">
-          <template slot-scope="scope">
-            <el-input v-model="scope.row.value" @change="checkNum(scope.row.value)" placeholder="璇疯緭鍏ュ��"
-                      clearable></el-input>
-          </template>
-        </el-table-column>
-        <el-table-column label="鍗曚綅" align="center" prop="unit"/>
-        <el-table-column label="鎵�灞炴棩鏈�" align="center" prop="dataTimeStr"/>
-        <el-table-column label="褰曞叆鏃堕棿" align="center" prop="createTimeStr"/>
-        <el-table-column label="褰曞叆浜�" align="center" prop="createBy"/>
-      </el-table>
-    </div>
-  </div>
-</template>
-
-<script>
-import {selectConsumeInputList, saveConsumeInput} from "@/api/energyAssistInput/energyYearConsumeInput"
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: 'energyIndex',
-  mixins: [mixins],
-  data() {
-    return {
-      timeArr: [],
-      currentNode: '',
-      deviceCategory: undefined,
-      // 閬僵灞�
-      loading: false,
-      // 閫変腑鏁扮粍
-      ids: [],
-      dateRange: [],
-      names: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 10,
-      // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-      List: [],
-      //鑳芥簮娑堣�楁墜鍔ㄥ綍鍏ユ暟鎹泦鍚�
-      energyConsumeInputList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      queryParams: {
-        date: undefined,
-        nodeId: "",
-        timeType: "YEAR"
-      },
-      dateTypes: "year",
-      valueFormat: "yyyy",
-      showFormat: "yyyy",
-      tableData: [],
-      datas: [],
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {},
-      moNode: undefined,
-      height: null,
-    };
-  },
-  created() {
-    this.setNowDate();
-  },
-  methods: {
-    setCharts() {
-      this.height = window.innerHeight - 365 + 'px';
-    },
-    modelNodeChange(modelNode, deviceCategory) {
-      this.moNode = modelNode;
-      this.queryParams.nodeId = modelNode.id;
-      this.deviceCategory = deviceCategory;
-      this.getList();
-    },
-    setNowDate() {
-      let nowDate = new Date();
-      let date = {
-        year: nowDate.getFullYear(),
-        month: nowDate.getMonth() + 1,
-        day: nowDate.getDate(),
-      }
-      console.log(date)
-      this.queryParams.date = date.year + '';
-    },
-    gshRq(rq) {
-      return ((rq * 1) < 10) ? '0' + rq : rq;
-    },
-    /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-    getList() {
-      this.loading = true;
-      selectConsumeInputList(this.queryParams).then(response => {
-        this.energyConsumeInputList = response.rows;
-        this.loading = false;
-      });
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        indexId: undefined,
-        name: undefined,
-        code: undefined,
-        indexCategory: undefined,
-        remark: undefined,
-        unitId: undefined
-      };
-      this.resetForm("form");
-    },
-
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.getList();
-    },
-    /** 淇濆瓨鎸夐挳鎿嶄綔 */
-    async handleSave() {
-      console.log("this.energyConsumeInputList");
-      console.log(this.energyConsumeInputList);
-      for (let i = 0; i < this.energyConsumeInputList.length; i++) {
-        let item = this.energyConsumeInputList[i];
-        let reg = /(^(-?([1-9]{1}\d*)|(0{1}))(\.\d{1,2,3})?$)/;
-        let value = item.value
-        console.log("i---" + i)
-        if (undefined == value || "" == value) {
-          this.$notify.error({
-            title: '閿欒',
-            message: '绗�' + (i + 1) + '琛屽�间笉鑳戒负绌�'
-          });
-          return false
-        } else if (!reg.test(value)) {
-          this.$notify.error({
-            title: '閿欒',
-            message: '绗�' + (i + 1) + '琛屽�煎繀椤讳负鏁板瓧涓旀渶澶氫繚鐣�3浣嶅皬鏁�'
-          });
-          return false
-        }
-      }
-      this.loading = true;
-      let res = await saveConsumeInput({models: this.energyConsumeInputList});
-      this.loading = false;
-      this.getList();
-    },
-    getTime() {
-      this.startTime = new Date().setHours(0, 0, 0, 0);
-      this.endTime = new Date().setHours(0, 0, 0, 0) + 24 * 60 * 60 * 1000 - 1;
-      //鏄剧ず鏃堕棿
-      this.timeArr = [this.startTime, this.endTime];
-    },
-    checkNum(value) {
-      let reg = /(^(-?([1-9]{1}\d*)|(0{1}))(\.\d{1,2,3})?$)/;
-      if (undefined == value || "" == value) {
-        this.$notify.error({
-          title: '閿欒',
-          message: '鍊间笉鑳戒负绌�'
-        });
-      } else if (!reg.test(value)) {
-        this.$notify.error({
-          title: '閿欒',
-          message: '鍊煎繀椤讳负鏁板瓧涓旀渶澶氫繚鐣�3浣嶅皬鏁�'
-        });
-      }
-    }
-  }
-}
-;
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
-
diff --git a/energy_management_ui/src/views/energyAssistInput/energyYearConsumeInput/index.vue b/energy_management_ui/src/views/energyAssistInput/energyYearConsumeInput/index.vue
deleted file mode 100644
index 5772cdb..0000000
--- a/energy_management_ui/src/views/energyAssistInput/energyYearConsumeInput/index.vue
+++ /dev/null
@@ -1,65 +0,0 @@
-<template>
-  <el-row type="flex">
-    <el-col class="page-left">
-      <basic-container title="骞村害鑳芥簮娑堣�楁墜鍔ㄥ綍鍏�" :bodyStyle="bodyStyle">
-        <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false" :auth="false"
-                   :modelCode="modelCode"></ModelNode>
-      </basic-container>
-    </el-col>
-    <el-col class="page-right">
-      <basic-container title="骞村害鑳芥簮娑堣�楁墜鍔ㄥ綍鍏�" :bodyStyle="bodyStyleRight">
-        <energyYearConsumeInput ref="energyYearConsumeInput"></energyYearConsumeInput>
-      </basic-container>
-    </el-col>
-  </el-row>
-</template>
-
-<script>
-import energyYearConsumeInput from "./energyYearConsumeInput";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  components: {energyYearConsumeInput, ModelNode},
-  mixins: [mixins],
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-    this.deviceCategory = this.$route.query.device_category;
-  },
-  data() {
-    return {
-      modelData: '',
-      modelInfoOptions: [],
-      modelCode: undefined,
-      deviceCategory: undefined,
-      isCollapse: false,
-      bodyStyleRight: {}
-    }
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight -155 + 'px'
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 155 + 'px'
-      };
-    },
-    changeNode: function (node) {
-      this.$refs.energyYearConsumeInput.modelNodeChange(node, this.deviceCategory);
-    },
-    manageModel: function () {
-      this.$router.push('/model');
-    },
-    changeModel: function (item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-@import "~@/assets/styles/left-right-layout.scss";
-</style>
diff --git a/energy_management_ui/src/views/energyBalance/energyBalance/LineChart.vue b/energy_management_ui/src/views/energyBalance/energyBalance/LineChart.vue
deleted file mode 100644
index 61f0f91..0000000
--- a/energy_management_ui/src/views/energyBalance/energyBalance/LineChart.vue
+++ /dev/null
@@ -1,115 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "600px"
-    },
-    chartData: {
-      type: Object
-      //required: true
-    }
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ actualData, expectedData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: "鑳芥簮骞宠 鍒嗘瀽",
-          x: "left",
-          y: "top",
-          textStyle: {
-            color: "#fff",
-            fontSize: 16
-          }
-        },
-        xAxis: {
-          data: actualData,
-          type: "category"
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: "15%",
-          containLabel: true
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "cross"
-          },
-          padding: [5, 10]
-        },
-        yAxis: {
-          axisTick: {
-            show: false
-          }
-        },
-        legend: {
-          data: [],
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        series: [
-          {
-            name: title,
-            smooth: true,
-            type: "bar",
-            barWidth: "60%",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyBalance/energyBalance/PieChart.vue b/energy_management_ui/src/views/energyBalance/energyBalance/PieChart.vue
deleted file mode 100644
index 2089877..0000000
--- a/energy_management_ui/src/views/energyBalance/energyBalance/PieChart.vue
+++ /dev/null
@@ -1,140 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    chartData: {
-      type: Object
-      //required: true
-    }
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ actualData, expectedData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: "鑳芥簮骞宠 鍒嗘瀽",
-          x: "left",
-          y: "top",
-          textStyle: {
-            color: "#333"
-          }
-        },
-        tooltip: {
-          trigger: "item",
-          formatter: actualData
-        },
-        grid: {
-          top: 40,
-          left: "2%",
-          right: "2%",
-          bottom: "3%",
-          containLabel: true
-        },
-        legend: {
-          // orient 璁剧疆甯冨眬鏂瑰紡锛岄粯璁ゆ按骞冲竷灞�锛屽彲閫夊�硷細'horizontal'锛堟按骞筹級 娄 'vertical'锛堝瀭鐩达級
-          orient: "vertical",
-          // x 璁剧疆姘村钩瀹夋斁浣嶇疆锛岄粯璁ゅ叏鍥惧眳涓紝鍙�夊�硷細'center' 娄 'left' 娄 'right' 娄 {number}锛坸鍧愭爣锛屽崟浣峱x锛�
-          x: "left",
-          // y 璁剧疆鍨傜洿瀹夋斁浣嶇疆锛岄粯璁ゅ叏鍥鹃《绔紝鍙�夊�硷細'top' 娄 'bottom' 娄 'center' 娄 {number}锛坹鍧愭爣锛屽崟浣峱x锛�
-          y: "10%",
-          //left: 10,
-          itemWidth: 24, // 璁剧疆鍥句緥鍥惧舰鐨勫
-          itemHeight: 18, // 璁剧疆鍥句緥鍥惧舰鐨勯珮
-          textStyle: {
-            color: "#fff" // 鍥句緥鏂囧瓧棰滆壊
-          },
-          // itemGap璁剧疆鍚勪釜item涔嬮棿鐨勯棿闅旓紝鍗曚綅px锛岄粯璁や负10锛屾í鍚戝竷灞�鏃朵负姘村钩闂撮殧锛岀旱鍚戝竷灞�鏃朵负绾靛悜闂撮殧
-          // itemGap: 30,
-          backgroundColor: "#eee", // 璁剧疆鏁翠釜鍥句緥鍖哄煙鑳屾櫙棰滆壊
-          data: actualData
-        },
-        series: [
-          {
-            //name: '鑳芥簮',
-            type: "pie",
-            radius: ["50%", "80%"], // 璁剧疆鐜舰楗肩姸鍥撅紝 绗竴涓櫨鍒嗘暟璁剧疆鍐呭湀澶у皬锛岀浜屼釜鐧惧垎鏁拌缃鍦堝ぇ灏�
-            center: ["50%", "50%"], // 璁剧疆楗肩姸鍥句綅缃紝绗竴涓櫨鍒嗘暟璋冩按骞充綅缃紝绗簩涓櫨鍒嗘暟璋冨瀭鐩翠綅缃�
-            data: expectedData,
-            // itemStyle 璁剧疆楗肩姸鍥炬墖褰㈠尯鍩熸牱寮�
-            itemStyle: {
-              // emphasis锛氳嫳鏂囨剰鎬濇槸 寮鸿皟;鐫�閲�;锛堣疆寤撱�佸浘褰㈢瓑鐨勶級椴滄槑;绐佸嚭锛岄噸璇�
-              // emphasis锛氳缃紶鏍囨斁鍒板摢涓�鍧楁墖褰笂闈㈢殑鏃跺�欙紝鎵囧舰鏍峰紡銆侀槾褰�
-              emphasis: {
-                shadowBlur: 10,
-                shadowOffsetX: 0,
-                shadowColor: "rgba(30, 144, 255锛�0.5)"
-              }
-            },
-            // 璁剧疆鍊煎煙鐨勯偅鎸囧悜绾�
-            labelLine: {
-              normal: {
-                show: false // show璁剧疆绾挎槸鍚︽樉绀猴紝榛樿涓簍rue锛屽彲閫夊�硷細true 娄 false
-              }
-            },
-            avoidLabelOverlap: false,
-
-            // 璁剧疆鍊煎煙鐨勬爣绛�
-            label: {
-              normal: {
-                position: "inner", // 璁剧疆鏍囩浣嶇疆锛岄粯璁ゅ湪楗肩姸鍥惧 鍙�夊�硷細'outer' 娄 'inner锛堥ゼ鐘跺浘涓婏級'
-                // formatter: '{a} {b} : {c}涓� ({d}%)'   璁剧疆鏍囩鏄剧ず鍐呭 锛岄粯璁ゆ樉绀簕b}
-                // {a}鎸噑eries.name  {b}鎸噑eries.data鐨刵ame
-                // {c}鎸噑eries.data鐨剉alue  {d}%鎸囪繖涓�閮ㄥ垎鍗犳�绘暟鐨勭櫨鍒嗘瘮
-                formatter: "{b} : ({d}%)"
-              }
-            }
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyBalance/energyBalance/energyBalance.vue b/energy_management_ui/src/views/energyBalance/energyBalance/energyBalance.vue
deleted file mode 100644
index dd0f813..0000000
--- a/energy_management_ui/src/views/energyBalance/energyBalance/energyBalance.vue
+++ /dev/null
@@ -1,247 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item label="鎶ヨ〃绫诲瀷">
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio
-            v-for="dict in dateTypeOptions"
-            :key="dict.dictValue"
-            :label="dict.dictValue"
-            @change="handleTime(dict.dictValue)"
-            >{{ dict.dictLabel }}</el-radio
-          >
-        </el-radio-group>
-      </el-form-item>
-      <el-date-picker
-        clearable
-        size="small"
-        style="width: 200px"
-        v-model="queryParams.dataTime"
-        :type="dateTypes"
-        :value-format="valueFormat"
-        placeholder="閫夋嫨鏃ユ湡"
-      >
-      </el-date-picker>
-      <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >鎼滅储</el-button
-        >
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-          >閲嶇疆</el-button
-        >
-      </el-form-item>
-    </el-form>
-    <el-row :gutter="20">
-      <el-col :xs="24" :sm="24" :lg="24">
-        <div class="chart-wrapper">
-          <line-chart ref="LineChart" :chart-data="lineChartData" />
-        </div>
-      </el-col>
-    </el-row>
-    <el-table :data="list" border>
-      <el-table-column label="鍚嶇О" align="center" prop="label">{{
-        label
-      }}</el-table-column>
-      <el-table-column label="浜у嚭" align="center">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value_CC)
-        }}</template></el-table-column
-      >
-      <el-table-column label="娑堣��" align="center">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value_XH)
-        }}</template></el-table-column
-      >
-      <!-- <el-table-column label="澶栦緵" align="center"> <template slot-scope="scope">{{numFilter(scope.row.value_WG)}}</template></el-table-column> -->
-      <el-table-column label="鎹熻��" align="center">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value_SH)
-        }}</template></el-table-column
-      >
-    </el-table>
-  </div>
-</template>
-
-<script>
-import {
-  energyBalanceList,
-  energyBalanceTable
-} from "@/api/energyBalance/energyBalance";
-import LineChart from "./LineChart";
-export default {
-  components: { LineChart },
-  data() {
-    return {
-      dateTypeOptions: [],
-      list: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        indexCode: undefined,
-        timeType: "DAY",
-        dataTime: undefined
-      },
-      dateTypes: "date",
-      valueFormat: "yyyy-MM-dd",
-      skinName: "",
-      label: "",
-      lineChartData: { expectedData: [], actualData: [], label: "" }
-    };
-  },
-  created() {
-    this.getTime();
-    this.getDicts("energyBalance").then(response => {
-      this.dateTypeOptions = response.data;
-      this.queryParams.timeType = this.dateTypeOptions.find(
-        f => f.isDefault === "Y"
-      ).dictValue;
-    });
-    this.getConfigKey("energyBalance").then(response => {
-      this.skinName = response.msg;
-    });
-  },
-  methods: {
-    modelNodeChange(modelNode) {
-      this.queryParams.indexCode = modelNode.id;
-      this.label = modelNode.label;
-      this.getList(this.queryParams);
-    },
-    getList() {
-      energyBalanceList(this.queryParams).then(response => {
-        //this.plannedOutputList = response.rows;
-        let expectedData = [];
-        let actualData = [];
-        let total = "";
-        response.data.forEach(item => {
-          actualData.push(item.indexName);
-          expectedData.push({
-            name: item.indexName,
-            value: this.numFilter(item.value)
-          });
-        });
-        this.lineChartData.actualData = actualData;
-        this.lineChartData.expectedData = expectedData;
-        this.lineChartData.title = this.label;
-        this.$refs.LineChart.initChart(this.lineChartData);
-      });
-      energyBalanceTable(this.queryParams).then(response => {
-        this.list = response.data;
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    handleTime(date) {
-      if (date == "YEAR") {
-        (this.dateTypes = "year"), (this.valueFormat = "yyyy");
-      } else if (date == "MONTH") {
-        (this.dateTypes = "month"), (this.valueFormat = "yyyy-MM");
-      } else {
-        (this.dateTypes = "date"), (this.valueFormat = "yyyy-MM-dd");
-      }
-    },
-    getTime() {
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      this.queryParams.dataTime = year + "-" + month + "-" + (date - 1);
-    },
-    numFilter(value) {
-      // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = "";
-      if (!isNaN(value) && value !== "" && value !== null) {
-        realVal = parseFloat(value).toFixed(this.skinName);
-      } else {
-        realVal = "--";
-      }
-      return realVal;
-    }
-  }
-};
-</script>
-<style lang="scss" scoped>
-.dashboard-editor-container {
-  padding: 32px;
-  background-color: rgb(240, 242, 245);
-  position: relative;
-
-  .chart-wrapper {
-    background: #fff;
-    padding: 16px 16px 0;
-    margin-bottom: 32px;
-  }
-}
-
-@media (max-width: 1024px) {
-  .chart-wrapper {
-    padding: 8px;
-  }
-}
-.live {
-  position: fixed;
-  right: 0px;
-  top: 70px;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  width: 100px;
-  height: 60px;
-  background-color: red;
-  animation: fade 600ms infinite;
-  -webkit-animation: fade 600ms infinite;
-}
-.live_content {
-  font-size: 18px;
-  color: white;
-  font-weight: bold;
-}
-.live_number {
-  font-size: 32px;
-  color: white;
-  font-weight: bolder;
-}
-@keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-@-webkit-keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/energyBalance/energyBalance/index.vue b/energy_management_ui/src/views/energyBalance/energyBalance/index.vue
deleted file mode 100644
index 4f0df03..0000000
--- a/energy_management_ui/src/views/energyBalance/energyBalance/index.vue
+++ /dev/null
@@ -1,83 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="鑳芥簮骞宠 鍒嗘瀽" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :modelCode="modelCode"
-            :showOpt="false"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <div>
-          <energyBalance
-            ref="energyBalance"
-            style="padding:10px"
-          ></energyBalance>
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import energyBalance from "./energyBalance";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from "@/components/shrink/index.vue";
-
-export default {
-  mixins: [mixins],
-  components: { ModelNode, energyBalance, ShrinkCol },
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  data() {
-    return {
-      modelCode: undefined,
-      isCollapse: false,
-      bodyStyleRight: {}
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 130 + "px"
-      };
-    },
-    changeNode: function(node) {
-      this.$refs.energyBalance.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyBalance/energyBalance/pie_chart.vue b/energy_management_ui/src/views/energyBalance/energyBalance/pie_chart.vue
deleted file mode 100644
index 88ec288..0000000
--- a/energy_management_ui/src/views/energyBalance/energyBalance/pie_chart.vue
+++ /dev/null
@@ -1,106 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-
-      this.chart.setOption({
-        title: {
-          text: "杈撳嚭鑳介噺鍒嗘瀽",
-          left: "25%",
-          textAlign: "center",
-          textStyle: {
-            fontStyle: "normal",
-            color: "#333"
-          }
-        },
-        tooltip: {
-          trigger: "item",
-          formatter: "{a} <br/>{b}: {c} ({d}%)"
-        },
-        grid: {
-          left: "3%",
-          right: "4%",
-          bottom: "3%",
-          containLabel: true
-        },
-        legend: {
-          orient: "vertical",
-          left: 10,
-          top: "10%",
-          data: ["姘磋緭鍏ラ噺", "鐢佃緭鍏ラ噺"],
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        series: [
-          {
-            name: "鑳介噺杈撳嚭",
-            type: "pie",
-            radius: ["30%", "60%"],
-            avoidLabelOverlap: false,
-            label: {
-              show: false,
-              position: "center"
-            },
-            emphasis: {
-              label: {
-                show: true,
-                fontSize: "16",
-                fontWeight: "bold"
-              }
-            },
-            labelLine: {
-              show: false
-            },
-            data: [
-              { value: 340, name: "姘磋緭鍏ラ噺" },
-              { value: 150, name: "鐢佃緭鍏ラ噺" }
-            ]
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyBalance/energyLoss/PieChart.vue b/energy_management_ui/src/views/energyBalance/energyLoss/PieChart.vue
deleted file mode 100644
index 45c9519..0000000
--- a/energy_management_ui/src/views/energyBalance/energyLoss/PieChart.vue
+++ /dev/null
@@ -1,151 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "600px"
-    },
-    chartData: {
-      type: Object
-      //required: true
-    }
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ actualData, expectedData, title, total } = {}) {
-      this.chart.setOption({
-        title: {
-          text: (title || "") + " " + total,
-          x: "left",
-          y: "top",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        tooltip: {
-          trigger: "item",
-          formatter: actualData
-        },
-        grid: {
-          top: 40,
-          left: "2%",
-          right: "2%",
-          bottom: "3%",
-          containLabel: true
-        },
-        legend: {
-          // orient 璁剧疆甯冨眬鏂瑰紡锛岄粯璁ゆ按骞冲竷灞�锛屽彲閫夊�硷細'horizontal'锛堟按骞筹級 娄 'vertical'锛堝瀭鐩达級
-          orient: "vertical",
-          // x 璁剧疆姘村钩瀹夋斁浣嶇疆锛岄粯璁ゅ叏鍥惧眳涓紝鍙�夊�硷細'center' 娄 'left' 娄 'right' 娄 {number}锛坸鍧愭爣锛屽崟浣峱x锛�
-          x: "left",
-          // y 璁剧疆鍨傜洿瀹夋斁浣嶇疆锛岄粯璁ゅ叏鍥鹃《绔紝鍙�夊�硷細'top' 娄 'bottom' 娄 'center' 娄 {number}锛坹鍧愭爣锛屽崟浣峱x锛�
-          y: "10%",
-          //left: 10,
-          itemWidth: 24, // 璁剧疆鍥句緥鍥惧舰鐨勫
-          itemHeight: 18, // 璁剧疆鍥句緥鍥惧舰鐨勯珮
-          textStyle: {
-            color: "#fff" // 鍥句緥鏂囧瓧棰滆壊
-          },
-          // itemGap璁剧疆鍚勪釜item涔嬮棿鐨勯棿闅旓紝鍗曚綅px锛岄粯璁や负10锛屾í鍚戝竷灞�鏃朵负姘村钩闂撮殧锛岀旱鍚戝竷灞�鏃朵负绾靛悜闂撮殧
-          // itemGap: 30,
-          // backgroundColor: "#eee", // 璁剧疆鏁翠釜鍥句緥鍖哄煙鑳屾櫙棰滆壊
-          data: actualData
-        },
-        series: [
-          {
-            //name: '鑳芥簮',
-            type: "pie",
-            radius: ["50%", "80%"], // 璁剧疆鐜舰楗肩姸鍥撅紝 绗竴涓櫨鍒嗘暟璁剧疆鍐呭湀澶у皬锛岀浜屼釜鐧惧垎鏁拌缃鍦堝ぇ灏�
-            center: ["50%", "50%"], // 璁剧疆楗肩姸鍥句綅缃紝绗竴涓櫨鍒嗘暟璋冩按骞充綅缃紝绗簩涓櫨鍒嗘暟璋冨瀭鐩翠綅缃�
-            data: expectedData,
-            // itemStyle 璁剧疆楗肩姸鍥炬墖褰㈠尯鍩熸牱寮�
-            itemStyle: {
-              // emphasis锛氳嫳鏂囨剰鎬濇槸 寮鸿皟;鐫�閲�;锛堣疆寤撱�佸浘褰㈢瓑鐨勶級椴滄槑;绐佸嚭锛岄噸璇�
-              // emphasis锛氳缃紶鏍囨斁鍒板摢涓�鍧楁墖褰笂闈㈢殑鏃跺�欙紝鎵囧舰鏍峰紡銆侀槾褰�
-              emphasis: {
-                shadowBlur: 10,
-                shadowOffsetX: 0,
-                shadowColor: "rgba(30, 144, 255锛�0.5)"
-              },
-              normal: {
-                label: {
-                  fontSize: 25
-                }
-              }
-            },
-            // 璁剧疆鍊煎煙鐨勯偅鎸囧悜绾�
-            labelLine: {
-              normal: {
-                show: false // show璁剧疆绾挎槸鍚︽樉绀猴紝榛樿涓簍rue锛屽彲閫夊�硷細true 娄 false
-              }
-            },
-            avoidLabelOverlap: false,
-            emphasis: {
-              label: {
-                show: true,
-                fontSize: "40",
-                fontWeight: "bold"
-              }
-            },
-            // 璁剧疆鍊煎煙鐨勬爣绛�
-            label: {
-              normal: {
-                position: "inner", // 璁剧疆鏍囩浣嶇疆锛岄粯璁ゅ湪楗肩姸鍥惧 鍙�夊�硷細'outer' 娄 'inner锛堥ゼ鐘跺浘涓婏級'
-                // formatter: '{a} {b} : {c}涓� ({d}%)'   璁剧疆鏍囩鏄剧ず鍐呭 锛岄粯璁ゆ樉绀簕b}
-                // {a}鎸噑eries.name  {b}鎸噑eries.data鐨刵ame
-                // {c}鎸噑eries.data鐨剉alue  {d}%鎸囪繖涓�閮ㄥ垎鍗犳�绘暟鐨勭櫨鍒嗘瘮
-                formatter: "{b} : ({d}%)"
-              }
-            }
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyBalance/energyLoss/energyLoss.vue b/energy_management_ui/src/views/energyBalance/energyLoss/energyLoss.vue
deleted file mode 100644
index c53b326..0000000
--- a/energy_management_ui/src/views/energyBalance/energyLoss/energyLoss.vue
+++ /dev/null
@@ -1,253 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item label="鎶ヨ〃绫诲瀷">
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio
-            v-for="dict in dateTypeOptions"
-            :key="dict.dictValue"
-            :label="dict.dictValue"
-            @change="handleTime(dict.dictValue)"
-            >{{ dict.dictLabel }}</el-radio
-          >
-        </el-radio-group>
-      </el-form-item>
-      <el-date-picker
-        clearable
-        size="small"
-        style="width: 200px"
-        v-model="queryParams.dataTime"
-        :type="dateTypes"
-        :value-format="valueFormat"
-        placeholder="閫夋嫨鏃ユ湡"
-      >
-      </el-date-picker>
-      <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >鎼滅储</el-button
-        >
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-          >閲嶇疆</el-button
-        >
-      </el-form-item>
-    </el-form>
-    <el-row :gutter="20">
-      <el-col :xs="24" :sm="24" :lg="24">
-        <div class="chart-wrapper">
-          <pie-chart ref="PieChart" :chart-data="lineChartData" />
-        </div>
-      </el-col>
-    </el-row>
-    <el-table :data="list" border>
-      <el-table-column label="鍚嶇О" align="center" prop="label">{{
-        label
-      }}</el-table-column>
-      <el-table-column label="鎬婚噺" align="center"
-        ><template slot-scope="scope">{{
-          numFilter(scope.row.value_total)
-        }}</template></el-table-column
-      >
-      <!--<el-table-column label="浜у嚭" align="center"> <template slot-scope="scope">{{numFilter(scope.row.value_CC)}}</template></el-table-column>-->
-      <el-table-column label="娑堣��" align="center">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value_XH)
-        }}</template></el-table-column
-      >
-      <!-- <el-table-column label="澶栦緵" align="center"> <template slot-scope="scope">{{numFilter(scope.row.value_WG)}}</template></el-table-column> -->
-      <el-table-column label="鎹熻��" align="center">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value_SH)
-        }}</template></el-table-column
-      >
-    </el-table>
-  </div>
-</template>
-
-<script>
-import {
-  lossAnalysisList,
-  energyLossTable
-} from "@/api/energyBalance/energyBalance";
-import PieChart from "./PieChart";
-export default {
-  components: { PieChart },
-  data() {
-    return {
-      dateTypeOptions: [],
-      list: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        indexCode: undefined,
-        timeType: "DAY",
-        dataTime: undefined
-      },
-      dateTypes: "date",
-      valueFormat: "yyyy-MM-dd",
-      skinName: "",
-      label: "",
-      lineChartData: { expectedData: [], actualData: [], label: "" }
-    };
-  },
-  created() {
-    this.getTime();
-    this.getDicts("energyBalance").then(response => {
-      this.dateTypeOptions = response.data;
-      this.queryParams.timeType = this.dateTypeOptions.find(
-        f => f.isDefault === "Y"
-      ).dictValue;
-    });
-    this.getConfigKey("energyBalance").then(response => {
-      this.skinName = response.msg;
-    });
-  },
-  methods: {
-    modelNodeChange(modelNode) {
-      this.queryParams.indexCode = modelNode.id;
-      this.label = modelNode.label;
-      this.getList(this.queryParams);
-    },
-    getList() {
-      lossAnalysisList(this.queryParams).then(response => {
-        //this.plannedOutputList = response.rows;
-        let expectedData = [];
-        let actualData = [];
-        let total = "";
-        response.data.forEach(item => {
-          if (item.indexCode.indexOf("_total") == -1) {
-            actualData.push(item.indexName);
-            expectedData.push({
-              name: item.indexName,
-              value: this.numFilter(item.value)
-            });
-          } else {
-            total = this.numFilter(item.value);
-          }
-        });
-        this.lineChartData.total = total;
-        this.lineChartData.actualData = actualData;
-        this.lineChartData.expectedData = expectedData;
-        this.lineChartData.title = this.label;
-        this.$refs.PieChart.initChart(this.lineChartData);
-      });
-      energyLossTable(this.queryParams).then(response => {
-        this.list = response.data;
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    handleTime(date) {
-      if (date == "YEAR") {
-        (this.dateTypes = "year"), (this.valueFormat = "yyyy");
-      } else if (date == "MONTH") {
-        (this.dateTypes = "month"), (this.valueFormat = "yyyy-MM");
-      } else {
-        (this.dateTypes = "date"), (this.valueFormat = "yyyy-MM-dd");
-      }
-    },
-    getTime() {
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      this.queryParams.dataTime = year + "-" + month + "-" + (date - 1);
-    },
-    numFilter(value) {
-      // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = "";
-      if (!isNaN(value) && value !== "" && value !== null) {
-        realVal = parseFloat(value).toFixed(this.skinName);
-      } else {
-        realVal = "--";
-      }
-      return realVal;
-    }
-  }
-};
-</script>
-<style lang="scss" scoped>
-.dashboard-editor-container {
-  padding: 32px;
-  background-color: rgb(240, 242, 245);
-  position: relative;
-
-  .chart-wrapper {
-    background: #fff;
-    padding: 16px 16px 0;
-    margin-bottom: 32px;
-  }
-}
-
-@media (max-width: 1024px) {
-  .chart-wrapper {
-    padding: 8px;
-  }
-}
-.live {
-  position: fixed;
-  right: 0px;
-  top: 70px;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  width: 100px;
-  height: 60px;
-  background-color: red;
-  animation: fade 600ms infinite;
-  -webkit-animation: fade 600ms infinite;
-}
-.live_content {
-  font-size: 18px;
-  color: white;
-  font-weight: bold;
-}
-.live_number {
-  font-size: 32px;
-  color: white;
-  font-weight: bolder;
-}
-@keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-@-webkit-keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/energyBalance/energyLoss/index.vue b/energy_management_ui/src/views/energyBalance/energyLoss/index.vue
deleted file mode 100644
index c133de6..0000000
--- a/energy_management_ui/src/views/energyBalance/energyLoss/index.vue
+++ /dev/null
@@ -1,79 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="鑳芥簮鎹熷け鍒嗘瀽" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :modelCode="modelCode"
-            :showOpt="false"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <div>
-          <energyLoss ref="energyLoss" style="padding:10px"></energyLoss>
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import energyLoss from "./energyLoss";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from "@/components/shrink/index.vue";
-export default {
-  components: { ModelNode, energyLoss, ShrinkCol },
-  mixins: [mixins],
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  data() {
-    return {
-      modelCode: undefined,
-      isCollapse: false,
-      bodyStyleRight: {}
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 130 + "px"
-      };
-    },
-    changeNode: function(node) {
-      this.$refs.energyLoss.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyBalance/energyPic/energyPic.vue b/energy_management_ui/src/views/energyBalance/energyPic/energyPic.vue
deleted file mode 100644
index f4906b3..0000000
--- a/energy_management_ui/src/views/energyBalance/energyPic/energyPic.vue
+++ /dev/null
@@ -1,221 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-card class="box-card">
-      <div slot="header" class="clearfix">
-        <span>{{ moNode ? moNode.label : "" }}--鑳芥祦鍒嗘瀽</span>
-      </div>
-      <el-form
-        :model="queryParams"
-        ref="queryForm"
-        :inline="true"
-        label-width="68px"
-        class="query-form"
-      >
-        <el-date-picker
-          clearable
-          size="small"
-          style="width: 200px"
-          v-model="queryParams.dataTime"
-          :type="dateTypes"
-          :value-format="valueFormat"
-          placeholder="閫夋嫨鏃ユ湡"
-        >
-        </el-date-picker>
-        <el-form-item label="灏忔椂" prop="selectHour">
-          <el-select
-            v-model="queryParams.selectHour"
-            placeholder="璇烽�夋嫨灏忔椂"
-            clearable
-            size="small"
-          >
-            <el-option
-              v-for="dict in selectHourOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-button
-            type="primary"
-            icon="el-icon-search"
-            size="mini"
-            @click="handleQuery"
-            >鏌ヨ</el-button
-          >
-        </el-form-item>
-      </el-form>
-      <div>
-        <el-table
-          :data="energyPicList"
-          v-loading="loading"
-          border
-          style="width: 100%; margin-top: 20px"
-        >
-          <el-table-column
-            label="鍗曚綅鍚嶇О"
-            align="center"
-            prop="modename"
-            min-width="200px"
-          />
-          <el-table-column label="浜у嚭" align="center" prop="a1" />
-          <el-table-column label="娑堣��" align="center" prop="a2" />
-          <!-- <el-table-column label="澶栦緵" align="center" prop="a3"/> -->
-          <el-table-column label="鎹熻��" align="center" prop="a4" />
-        </el-table>
-      </div>
-      <pagination
-        v-show="total > 0"
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-    </el-card>
-  </div>
-</template>
-
-<script>
-import { selectEnergyPicList } from "@/api/energyBalance/energyPic";
-
-export default {
-  name: "energyIndex",
-
-  data() {
-    return {
-      timeArr: [],
-      currentNode: "",
-      deviceCategory: undefined,
-      // 閬僵灞�
-      loading: false,
-      // 閫変腑鏁扮粍
-      ids: [],
-      dateRange: [],
-      names: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 10,
-      // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-      List: [],
-      //鑳芥祦鍒嗘瀽鏁版嵁闆嗗悎
-      energyPicList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      selectHour: "01",
-      selectHourOptions: [
-        { dictLabel: "01", dictValue: "01", dictType: "selecthour" },
-        { dictLabel: "02", dictValue: "02", dictType: "selecthour" },
-        { dictLabel: "03", dictValue: "03", dictType: "selecthour" },
-        { dictLabel: "04", dictValue: "04", dictType: "selecthour" },
-        { dictLabel: "05", dictValue: "05", dictType: "selecthour" },
-        { dictLabel: "06", dictValue: "06", dictType: "selecthour" },
-        { dictLabel: "07", dictValue: "07", dictType: "selecthour" },
-        { dictLabel: "08", dictValue: "08", dictType: "selecthour" },
-        { dictLabel: "09", dictValue: "09", dictType: "selecthour" },
-        { dictLabel: "10", dictValue: "10", dictType: "selecthour" },
-        { dictLabel: "11", dictValue: "11", dictType: "selecthour" },
-        { dictLabel: "12", dictValue: "12", dictType: "selecthour" },
-        { dictLabel: "13", dictValue: "13", dictType: "selecthour" },
-        { dictLabel: "14", dictValue: "14", dictType: "selecthour" },
-        { dictLabel: "15", dictValue: "15", dictType: "selecthour" },
-        { dictLabel: "16", dictValue: "16", dictType: "selecthour" },
-        { dictLabel: "17", dictValue: "17", dictType: "selecthour" },
-        { dictLabel: "18", dictValue: "18", dictType: "selecthour" },
-        { dictLabel: "19", dictValue: "19", dictType: "selecthour" },
-        { dictLabel: "20", dictValue: "20", dictType: "selecthour" },
-        { dictLabel: "21", dictValue: "21", dictType: "selecthour" },
-        { dictLabel: "22", dictValue: "22", dictType: "selecthour" },
-        { dictLabel: "23", dictValue: "23", dictType: "selecthour" }
-      ],
-      queryParams: {
-        eierarchyFlag: "B",
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        value: undefined,
-        code: undefined,
-        dataTime: undefined,
-        selectHour: "01",
-        nodeid: ""
-      },
-      dateTypes: "date",
-      valueFormat: "yyyy-MM-dd",
-      tableData: [],
-      datas: [],
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {},
-      moNode: undefined
-    };
-  },
-  created() {
-    this.setNowDate();
-  },
-  methods: {
-    modelNodeChange(modelNode, deviceCategory) {
-      this.moNode = modelNode;
-      this.queryParams.nodeid = modelNode.id;
-      this.deviceCategory = deviceCategory;
-      this.getList();
-    },
-    setNowDate() {
-      let nowDate = new Date();
-      let date = {
-        year: nowDate.getFullYear(),
-        month: nowDate.getMonth() + 1,
-        day: nowDate.getDate()
-      };
-      this.queryParams.dataTime =
-        date.year + "-" + this.gshRq(date.month) + "-" + this.gshRq(date.day);
-    },
-    gshRq(rq) {
-      return rq * 1 < 10 ? "0" + rq : rq;
-    },
-    /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-    getList() {
-      this.loading = true;
-      //var search = this.queryParams;
-      selectEnergyPicList(this.queryParams).then(response => {
-        this.energyPicList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        indexId: undefined,
-        name: undefined,
-        code: undefined,
-        indexCategory: undefined,
-        remark: undefined,
-        unitId: undefined
-      };
-      this.resetForm("form");
-    },
-
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      if ("5" === this.deviceCategory) {
-        this.getList();
-      } else {
-        this.tableData = [];
-      }
-    },
-    getTime() {
-      this.startTime = new Date().setHours(0, 0, 0, 0);
-      this.endTime = new Date().setHours(0, 0, 0, 0) + 24 * 60 * 60 * 1000 - 1;
-      //鏄剧ず鏃堕棿
-      this.timeArr = [this.startTime, this.endTime];
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyBalance/energyPic/index.vue b/energy_management_ui/src/views/energyBalance/energyPic/index.vue
deleted file mode 100644
index 74b5148..0000000
--- a/energy_management_ui/src/views/energyBalance/energyPic/index.vue
+++ /dev/null
@@ -1,111 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="鑳芥祦鍒嗘瀽" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :showOpt="false"
-            :auth="false"
-            :modelCode="modelCode"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <div :style="bodyStyleRight">
-          <energyPic ref="energyPic"></energyPic>
-        </div>
-      </el-col>
-    </el-row>
-    <!-- <el-container class="split-container">
-      <el-aside class="left-content" :width="isCollapse ? '0px' : '20%'">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            鑳芥祦鍒嗘瀽
-          </div>
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :showOpt="false"
-            :auth="false"
-            :modelCode="modelCode"
-          ></ModelNode>
-          <img
-            src="~@/assets/image/rectangle.png"
-            alt=""
-            class="shrink-col-block"
-            @click="toggleCollapse"
-          />
-        </el-card>
-      </el-aside>
-      <el-container>
-        <el-main style="padding:0">
-          <energyPic ref="energyPic"></energyPic>
-        </el-main>
-      </el-container>
-    </el-container> -->
-  </div>
-</template>
-
-<script>
-import energyPic from "./energyPic";
-import ShrinkCol from "@/components/shrink/index.vue";
-import mixins from "@/layout/mixin/getHeight";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-export default {
-  components: { energyPic, ModelNode, ShrinkCol },
-  mixins: [mixins],
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-    this.deviceCategory = this.$route.query.device_category;
-  },
-  data() {
-    return {
-      modelData: "",
-      modelInfoOptions: [],
-      modelCode: undefined,
-      deviceCategory: undefined,
-      isCollapse: false,
-      bodyStyleRight: {}
-    };
-  },
-  methods: {
-    changeNode: function(node) {
-      this.$refs.energyPic.modelNodeChange(node, this.deviceCategory);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    },
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 130 + "px"
-      };
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyConsumptionAlarm/monitorAlarm/index.vue b/energy_management_ui/src/views/energyConsumptionAlarm/monitorAlarm/index.vue
deleted file mode 100644
index 8b10e7f..0000000
--- a/energy_management_ui/src/views/energyConsumptionAlarm/monitorAlarm/index.vue
+++ /dev/null
@@ -1,100 +0,0 @@
-<!-- <template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            鑳借�楃洃娴嬫姤璀�
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <el-main style="padding:0">
-          <MonitorAlarmSetting ref="MonitorAlarmSetting"></MonitorAlarmSetting>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template> -->
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="鑳借�楃洃娴嬫姤璀�" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :showOpt="false"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <div>
-          <MonitorAlarmSetting ref="MonitorAlarmSetting"></MonitorAlarmSetting>
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import MonitorAlarmSetting from "./monitorAlarmSetting";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import { listModel } from "@/api/basicsetting/model";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  mixins: [mixins],
-  components: { MonitorAlarmSetting, ModelNode },
-  created() {
-    listModel({ isShow: 1 }).then(response => {
-      this.modelInfoOptions = response.data;
-      if (this.modelInfoOptions.length > 0) {
-        this.modelData = this.modelInfoOptions[0].modelCode;
-        this.$refs.modelNode.getList(this.modelData);
-      }
-    });
-  },
-  data() {
-    return {
-      bodyStyleRight: {},
-      modelData: "",
-      modelInfoOptions: []
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 130 + "px"
-      };
-    },
-    changeNode: function(node) {
-      this.$refs.MonitorAlarmSetting.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyConsumptionAlarm/monitorAlarm/monitorAlarmSetting.vue b/energy_management_ui/src/views/energyConsumptionAlarm/monitorAlarm/monitorAlarmSetting.vue
deleted file mode 100644
index 93e5165..0000000
--- a/energy_management_ui/src/views/energyConsumptionAlarm/monitorAlarm/monitorAlarmSetting.vue
+++ /dev/null
@@ -1,296 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-card class="box-card">
-      <div slot="header" class="clearfix">
-        <span>{{currentNode?currentNode.label+'--鑺傜偣閰嶇疆':'鑺傜偣閰嶇疆'}}</span>
-      </div>
-
-      <el-tabs>
-        <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" class="query-form">
-          <el-form-item label="鏃堕棿" prop="name">
-            <el-radio-group v-model="radio" size="mini" @change="timeChoose" ref="picker">
-              <el-radio label="year" size="mini" style="margin-right: 10px!important;" value="year">骞�</el-radio>
-              <el-radio label="month" size="mini" style="margin-right: 10px!important;" value="month">鏈�</el-radio>
-              <el-radio label="date" size="mini" value="day">鏃�</el-radio>
-            </el-radio-group>
-          </el-form-item>
-          <el-form-item>
-            <div class="block">
-              <span class="demonstration"></span>
-              <el-date-picker
-                v-model="time"
-                :type="pickerType"
-                ref="mypicker">
-              </el-date-picker>
-            </div>
-          </el-form-item>
-          <el-form-item label="娴嬬偣鍚嶇О" prop="indexCategory">
-            <el-select v-model="queryParams.indexCategory" placeholder="璇烽�夋嫨鎸囨爣鍒嗙被" clearable
-                       style="width:150px"
-                       size="small">
-              <el-option
-                v-for="dict in indexCategoryOptions"
-                :key="dict.dictValue"
-                :label="dict.dictLabel"
-                :value="dict.dictValue"
-              />
-            </el-select>
-          </el-form-item>
-          <el-form-item>
-            <el-button type="primary" icon="el-icon-search" size="mini">鎼滅储</el-button>
-          </el-form-item>
-          <el-form-item>
-            <el-button type="primary" size="mini">瀵煎嚭</el-button>
-          </el-form-item>
-        </el-form>
-        <el-tab-pane :disabled="disabledSetting">
-          <span slot="label"><i class="el-icon-setting"></i>瀹炴椂鑳借��</span>
-          <!--琛ㄦ牸-->
-          <el-form :model="model"  ref="form">
-            <el-table v-loading="loading" :data="model.tableOptions" border @selection-change="handleSelectionChange"
-                      :default-sort = "{prop: 'date', order: 'descending'}">
-              <el-table-column type="selection" width="55" align="center"/>
-              <el-table-column label="鏃堕棿" align="center" prop="index"/>
-              <el-table-column label="娴嬬偣鍚嶇О" align="center" prop="name"/>
-              <el-table-column label="浣嶅彿" align="center" prop="data" class-name="small-padding fixed-width"/>
-              <el-table-column label="瀹為檯鍊�" align="center" prop="unit"/>
-              <el-table-column label="涓婇檺鍊�" align="center" prop="unit"/>
-              <el-table-column label="涓嬮檺鍊�" align="center" prop="unit"/>
-              <el-table-column label="瓒呴檺鐧惧垎姣�" align="center" prop="unit"/>
-              <el-table-column label="鎿嶄綔" width="150" align="center" class-name="small-padding fixed-width">
-                <template slot-scope="scope">
-                  <el-button
-                    size="mini"
-                    type="text"
-                    icon="el-icon-edit"
-                    @click="details(scope.row)"
-                    v-hasPermi="['system:set:query1']"
-                  >璇︽儏
-                  </el-button>
-                </template>
-              </el-table-column>
-            </el-table>
-          </el-form>
-        </el-tab-pane>
-      </el-tabs>
-    </el-card>
-    <!-- 寮傚父澶勭悊璇︽儏 -->
-    <el-dialog :title="viewModel.title" :visible.sync="viewModel.open" width="500px">
-      <el-form ref="form" :model="form" label-width="120px" label-position="left">
-        <el-form-item label="鎶ヨ鐐�" prop="pointName">
-          <el-input v-model="form.pointName" placeholder="璇疯緭鍏ユ姤璀︾偣" />
-        </el-form-item>
-        <el-form-item label="鎶ヨ鍊�" prop="alarmVal">
-          <el-input v-model="form.alarmVal" placeholder="璇疯緭鍏ユ姤璀﹀��" />
-        </el-form-item>
-        <el-form-item label="鐘舵��" prop="state">
-          <el-input v-model="form.state" placeholder="璇疯緭鍏ョ姸鎬�" />
-        </el-form-item>
-        <el-form-item label="缁撴灉" prop="result">
-          <el-input v-model="form.result" placeholder="璇疯緭鍏ョ粨鏋�" />
-        </el-form-item>
-        <el-form-item label="澶勭悊浜哄憳" prop="processingPerson">
-          <el-input v-model="form.processingPerson" placeholder="璇疯緭鍏ュ鐞嗕汉鍛�" />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-  import {
-    delDevice,
-    delEnergy,
-    delIndex,
-    delProduct,
-    getSettingDevice,
-    getSettingEnergy,
-    getSettingIndex,
-    getSettingProduct,
-    setCollectIndex,
-    setDevice,
-    setEnergy,
-    setProduct
-  } from '@/api/basicsetting/modelNode'
-
-  export default {
-    name: "modelMonitorSetting",
-    data() {
-      return {
-        currentNode: '',
-        deviceDialog: false,
-        energyDialog: false,
-        productDialog: false,
-        collectIndexDialog: false,
-        indexLoading: false,
-        deviceLoading: false,
-        energyLoading: false,
-        productLoading: false,
-        settingEnergyList: [],
-        settingDeviceList: [],
-        settingProductList: [],
-        settingIndexList: [],
-        disabledSetting: true,
-        // 閬僵灞�
-        loading: false,
-        //琛ㄦ牸妯″瀷
-        model:{
-          tableOptions:[
-            // {
-            //   index:undefined,
-            //   name:undefined,
-            //   data:undefined,
-            //   unit:undefined
-            // }
-            {
-              index:"id001",
-              name:"鐜嬪皬铏�",
-              data:"30000",
-              unit:"WH"
-            }
-          ],
-        },
-        viewModel:{
-          title:"",
-          open:false
-        },
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          name: undefined,
-          code: undefined,
-          indexCategory: undefined,
-          nodeId: undefined
-        },
-        radio:"",
-        time:"",
-        pickerType:"year",
-        // 娴嬬偣鍚嶇О
-        indexCategoryOptions: [
-          {
-            dictLabel:"娴嬬偣1",
-            dictValue:"娴嬬偣1"
-          },
-          {
-            dictLabel:"娴嬬偣2",
-            dictValue:"娴嬬偣2"
-          },
-          {
-            dictLabel:"娴嬬偣3",
-            dictValue:"娴嬬偣3"
-          },
-        ],
-        form:{
-          pointName:"FT001",
-          alarmVal:"20",
-          state:"宸插鐞�",
-          result:"璁惧瓒呰礋鑽疯繍琛岋紝宸插崗璋冪敓浜�",
-          processingPerson:"灏忛儜"
-        }
-      }
-    },
-    created() {
-      // setInterval(alert("鍝堝搱鍝堬紒锛�"),5000);
-    },
-    methods: {
-      modelNodeChange(modelNode) {
-        this.settingDeviceList = [];
-        this.settingIndexList = [];
-        this.disabledSetting = modelNode === undefined || modelNode === '' || modelNode === null;
-        if (modelNode) {
-          this.currentNode = modelNode;
-          this.deviceLoading = true;
-          getSettingDevice(modelNode.id).then((response) => {
-            if (response.code === 200) {
-              this.settingDeviceList = response.data;
-            } else {
-              this.$message.error(response.msg);
-            }
-            this.deviceLoading = false;
-          });
-          this.energyLoading = true;
-          getSettingEnergy(modelNode.id).then((response) => {
-            if (response.code === 200) {
-              this.settingEnergyList = response.data;
-            } else {
-              this.$message.error(response.msg);
-            }
-            this.energyLoading = false;
-          });
-          this.productLoading = true;
-          getSettingProduct(modelNode.id).then((response) => {
-            if (response.code === 200) {
-              this.settingProductList = response.data;
-            } else {
-              this.$message.error(response.msg);
-            }
-            this.productLoading = false;
-          });
-          this.indexLoading = true;
-          getSettingIndex(modelNode.id).then((response) => {
-            if (response.code === 200) {
-              this.settingIndexList = response.data;
-            } else {
-              this.$message.error(response.msg);
-            }
-            this.indexLoading = false;
-          });
-        }
-      },
-      collectIndexSetting() {
-        this.collectIndexDialog = true;
-      },
-      showCollectIndexDialog() {
-        this.$nextTick(() => {
-          this.$refs.collectIndexSetting.init(this.currentNode, this.settingIndexList);
-        })
-      },
-      // 澶氶�夋閫変腑鏁版嵁
-      handleSelectionChange(selection) {
-        this.ids = selection.map(item => item.indexId);
-        this.names = selection.map(item => item.name);
-        this.single = selection.length !== 1;
-        this.multiple = !selection.length
-      },
-      getList() {
-        // console.log(this.myModelNode)
-        // if (this.myModelNode) {
-        //   this.loading = true;
-          // this.queryParams.nodeId = this.myModelNode.id;
-          //鎺ュ彛
-          // getSettingIndex(this.queryParams).then(response => {
-          //   this.model.energyindexList = response.data;
-          //   this.initstartstop();
-          //   this.loading = false;
-          // });
-
-        // } else {
-          this.model.tableOptions = [];
-// }
-      },
-      timeChoose(e){
-        this.pickerType = e;
-        this.$refs.mypicker.userInput = null;
-      },
-      details(){
-        this.viewModel.title="鎶ヨ淇℃伅澶勭悊璁板綍";
-        this.viewModel.open=true;
-      },
-      submitForm(){
-        this.viewModel.open=false;
-      },
-      cancel(){
-        this.viewModel.open=false;
-      }
-    }
-  }
-</script>
-
-<style scoped>
-
-</style>
diff --git a/energy_management_ui/src/views/energyEenchmarking/benchmarkingMonitoring/benchmarkingMonitoring.vue b/energy_management_ui/src/views/energyEenchmarking/benchmarkingMonitoring/benchmarkingMonitoring.vue
deleted file mode 100644
index 66c562c..0000000
--- a/energy_management_ui/src/views/energyEenchmarking/benchmarkingMonitoring/benchmarkingMonitoring.vue
+++ /dev/null
@@ -1,136 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item>
-        <el-radio v-model="radios" label="1">褰撳墠</el-radio>
-        <el-radio v-model="radios" label="2">鍏ㄩ儴</el-radio>
-      </el-form-item>
-      <el-form-item>
-        <el-radio v-model="radio" label="1">鏃ユ姤</el-radio>
-        <el-radio v-model="radio" label="2">鏈堟姤</el-radio>
-      </el-form-item>
-      <el-form-item>
-        <el-date-picker clearable size="small" style="width: 200px"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="璇烽�夋嫨鏃堕棿">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini">鎼滅储</el-button>
-        <el-button icon="el-icon-download" size="mini">瀵煎嚭</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-table :data="energyEenchmarkingList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center"/>
-      <el-table-column label="鍗曚綅鍚嶇О" align="center" prop="name"/>
-      <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="cpzl"/>
-      <el-table-column label="璁¢噺鍗曚綅" align="center" prop="jldw"/>
-      <el-table-column label="鏍囨潌鑼冨洿" align="center" prop="bgfw"/>
-      <el-table-column label="鏍囨潌绫诲瀷" align="center">
-        <el-table-column label="骞冲潎鍊�" align="center" prop="pjz"/>
-        <el-table-column label="鍏堣繘鍊�" align="center" prop="xjz"/>
-        <el-table-column label="鐩爣鍊�" align="center" prop="mbz"/>
-      </el-table-column>
-      <el-table-column label="鎸囨爣鍊�" align="center" prop="zbz"/>
-      <el-table-column label="鑳芥晥鍋忓樊锛�%锛�" align="center">
-        <el-table-column label="骞冲潎鍊�" align="center" prop="pcpjz"/>
-        <el-table-column label="鍏堣繘鍊�" align="center" prop="pcxjz"/>
-        <el-table-column label="鐩爣鍊�" align="center" prop="pcmbz"/>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      radio: '1',
-      radios:'1',
-      // energy_benchmarking琛ㄦ牸鏁版嵁
-      energyEenchmarkingList:[{
-        "name": "鍏ㄥ巶",
-        "cpzl":"鐢佃�楅噺",
-        "jldw":"kwh",
-        "bgfw":"鍥藉唴",
-        "pjz":"665",
-        "xjz":"666",
-        "mbz":"667",
-        "zbz":"3120",
-        "pcpjz":"378.89",
-        "pcxjz":"378.18",
-        "pcmbz":"377.46",
-        "createBy": null,
-        "createTime": "",
-        "updateBy": null,
-        "updateTime": null,
-        "remark": "",
-      }],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined,
-        modelNode:"",
-      },
-    };
-  },
-  created() {
-  },
-  methods: {
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.modelNodeChange();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyEenchmarking/benchmarkingMonitoring/index.vue b/energy_management_ui/src/views/energyEenchmarking/benchmarkingMonitoring/index.vue
deleted file mode 100644
index 46fa16a..0000000
--- a/energy_management_ui/src/views/energyEenchmarking/benchmarkingMonitoring/index.vue
+++ /dev/null
@@ -1,58 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" :width="isCollapse?'0px':'20%'">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            鑳芥晥瀵规爣鐩戣
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode"
-                     :modelCode="modelCode"
-                     :showOpt="false"
-                     :auth="false"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <div style="cursor:pointer;" @click="toggleCollapse">
-          <img src="@/assets/image/configureChart.png" style="width: 100%;height: 100%">
-        </div>
-        <el-main style="padding:0">
-         <benchmarkingMonitoring ref="benchmarkingMonitoring" style="padding:10px"></benchmarkingMonitoring>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import benchmarkingMonitoring from "./benchmarkingMonitoring";
-  import ModelNode from "../../basicsetting/modelNode/modelNode";
-
-  export default {
-    components: { ModelNode,benchmarkingMonitoring},
-    created() {
-      this.modelCode=this.$route.query.modelCode;
-    },
-    data() {
-      return {
-        modelCode:undefined,
-        isCollapse: false,
-      }
-    },
-    methods: {
-      changeNode: function (node) {
-        //this.$refs.EnergyActual.modelNodeChange(node);
-      },
-      manageModel: function () {
-        this.$router.push('/model');
-      },
-      changeModel: function (item) {
-        this.$refs.modelNode.getList(item);
-      },
-      // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-      toggleCollapse () {
-        this.isCollapse = !this.isCollapse
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/energyEenchmarking/energyEenchmarking/enchmarking.vue b/energy_management_ui/src/views/energyEenchmarking/energyEenchmarking/enchmarking.vue
deleted file mode 100644
index 7d10342..0000000
--- a/energy_management_ui/src/views/energyEenchmarking/energyEenchmarking/enchmarking.vue
+++ /dev/null
@@ -1,441 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鍗曚綅鍚嶇О" prop="name">
-        <el-input
-          v-model="queryParams.name"
-          placeholder="璇疯緭鍏ュ崟浣嶅悕绉�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鎸囨爣鍚嶇О" prop="codeId">
-        <el-input
-          v-model="queryParams.codeId"
-          placeholder="璇疯緭鍏ユ寚鏍囧悕绉�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鎸囨爣鍗曚綅" prop="unit">
-        <el-input
-          v-model="queryParams.unit"
-          placeholder="璇疯緭鍏ユ寚鏍囧崟浣�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鏍囨潌鑼冨洿" prop="range">
-        <el-input
-          v-model="queryParams.range"
-          placeholder="璇疯緭鍏ユ爣鏉嗚寖鍥�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-        <el-form-item label="鏍囨潌绫诲瀷" prop="type">
-        <el-select v-model="queryParams.type" placeholder="璇烽�夋嫨鏍囨潌绫诲瀷" clearable size="small">
-          <el-option
-            v-for="dict in typeOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="鏍囨潌鍊�" prop="value">
-        <el-input
-          v-model="queryParams.value"
-          placeholder="璇疯緭鍏ユ爣鏉嗗��"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鏈夋晥鏈�" prop="termValidity">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.termValidity"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="閫夋嫨鏈夋晥鏈�">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['energyEenchmarking:energyEenchmarking:add']"
-        >鏂板</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['energyEenchmarking:energyEenchmarking:edit']"
-        >淇敼</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['energyEenchmarking:energyEenchmarking:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['energyEenchmarking:energyEenchmarking:export']"
-        >瀵煎嚭</el-button>
-      </el-col>
-    </el-row>
-
-    <el-table v-loading="loading" :data="energyEenchmarkingList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="鍗曚綅鍚嶇О" align="center" prop="name" :formatter="nameFormat" />
-      <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="codeId" :formatter="codeIdFormat" />
-      <el-table-column label="鎸囨爣鍗曚綅" align="center" prop="unit" :formatter="unitFormat" />
-      <el-table-column label="鏍囨潌鑼冨洿" align="center" prop="range" :formatter="rangeFormat" />
-      <el-table-column label="鏍囨潌绫诲瀷" align="center" prop="type" :formatter="typeFormat" />
-      <el-table-column label="鏍囨潌鍊�" align="center" prop="value" :formatter="valueFormat" />
-      <el-table-column label="鏈夋晥鏈�" align="center" prop="termValidity" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.termValidity) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['energyEenchmarking:energyEenchmarking:edit']"
-          >淇敼</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['energyEenchmarking:energyEenchmarking:remove']"
-          >鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="modelNodeChange"
-    />
-
-    <!-- 娣诲姞鎴栦慨鏀筫nergy_benchmarking瀵硅瘽妗� -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" label-width="80px">
-        <el-form-item label="鏈夋晥鏈�" prop="id">
-          <el-input v-model="form.id" placeholder="璇疯緭鍏ユ湁鏁堟湡" />
-        </el-form-item>
-        <el-form-item label="鍗曚綅鍚嶇О" prop="name">
-          <el-input v-model="form.name" placeholder="璇疯緭鍏ュ崟浣嶅悕绉�" />
-        </el-form-item>
-        <el-form-item label="鎸囨爣鍚嶇О" prop="codeId">
-          <el-input v-model="form.codeId" placeholder="璇疯緭鍏ユ寚鏍囧悕绉�" />
-        </el-form-item>
-        <el-form-item label="鎸囨爣鍗曚綅" prop="unit">
-          <el-input v-model="form.unit" placeholder="璇疯緭鍏ユ寚鏍囧崟浣�" />
-        </el-form-item>
-        <el-form-item label="鏍囨潌鑼冨洿" prop="range">
-          <el-input v-model="form.range" placeholder="璇疯緭鍏ユ爣鏉嗚寖鍥�" />
-        </el-form-item>
-        <el-form-item label="鏍囨潌绫诲瀷">
-          <el-select v-model="form.type" placeholder="璇烽�夋嫨鏍囨潌绫诲瀷">
-            <el-option
-              v-for="dict in typeOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鏍囨潌鍊�" prop="value">
-          <el-input v-model="form.value" placeholder="璇疯緭鍏ユ爣鏉嗗��" />
-        </el-form-item>
-        <el-form-item label="鏈夋晥鏈�" prop="termValidity">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.termValidity"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="閫夋嫨鏈夋晥鏈�">
-          </el-date-picker>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listEnergyEenchmarking, getEnergyEenchmarking, delEnergyEenchmarking, addEnergyEenchmarking, updateEnergyEenchmarking, exportEnergyEenchmarking } from "@/api/energyEenchmarking/energyEenchmarking";
-import {getSettingIndex} from "@/api/energyStatistics/statistics";
-export default {
-  name: 'enchmarking',
-  name: 'Index',
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // energy_benchmarking琛ㄦ牸鏁版嵁
-      energyEenchmarkingList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏈夋晥鏈熷瓧鍏�
-      /*idOptions: [],
-      // 鍗曚綅鍚嶇О瀛楀吀
-      nameOptions: [],
-      // 鎸囨爣鍚嶇О瀛楀吀
-      codeIdOptions: [],
-      // 鎸囨爣鍗曚綅瀛楀吀
-      unitOptions: [],
-      // 鏍囨潌鑼冨洿瀛楀吀
-      rangeOptions: [],
-      // 鏍囨潌绫诲瀷瀛楀吀
-      typeOptions: [],
-      // 鏍囨潌鍊煎瓧鍏�
-      valueOptions: [],
-      // 鏈夋晥鏈熷瓧鍏�
-      termValidityOptions: [],*/
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined,
-        modelNode:"",
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-    };
-  },
-  created() {
-    //this.getList();
-    /*this.getDicts("${column.dictType}").then(response => {
-      this.idOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.nameOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.codeIdOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.unitOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.rangeOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.typeOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.valueOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.termValidityOptions = response.data;
-    });*/
-  },
-  methods: {
-    /** 鏌ヨenergy_benchmarking鍒楄〃 */
-    modelNodeChange(modelNode) {
-      //鑾峰彇妯″瀷鑾峰彇鎸囨爣
-      getSettingIndex(modelNode.id).then(response => {
-        this.loading = true;
-        this.queryParams.modelNode=modelNode.id;
-        listEnergyEenchmarking(this.queryParams).then(response => {
-          this.energyEenchmarkingList = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        });
-      })
-    },
-    // 鏈夋晥鏈熷瓧鍏哥炕璇�
-    /*idFormat(row, column) {
-      return this.selectDictLabel(this.idOptions, row.id);
-    },
-    // 鍗曚綅鍚嶇О瀛楀吀缈昏瘧
-    nameFormat(row, column) {
-      return this.selectDictLabel(this.nameOptions, row.name);
-    },
-    // 鎸囨爣鍚嶇О瀛楀吀缈昏瘧
-    codeIdFormat(row, column) {
-      return this.selectDictLabel(this.codeIdOptions, row.codeId);
-    },
-    // 鎸囨爣鍗曚綅瀛楀吀缈昏瘧
-    unitFormat(row, column) {
-      return this.selectDictLabel(this.unitOptions, row.unit);
-    },
-    // 鏍囨潌鑼冨洿瀛楀吀缈昏瘧
-    rangeFormat(row, column) {
-      return this.selectDictLabel(this.rangeOptions, row.range);
-    },
-    // 鏍囨潌绫诲瀷瀛楀吀缈昏瘧
-    typeFormat(row, column) {
-      return this.selectDictLabel(this.typeOptions, row.type);
-    },
-    // 鏍囨潌鍊煎瓧鍏哥炕璇�
-    valueFormat(row, column) {
-      return this.selectDictLabel(this.valueOptions, row.value);
-    },
-    // 鏈夋晥鏈熷瓧鍏哥炕璇�
-    termValidityFormat(row, column) {
-      return this.selectDictLabel(this.termValidityOptions, row.termValidity);
-    },*/
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.modelNodeChange();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞鑳芥晥瀵规爣";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getEnergyEenchmarking(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼鑳芥晥瀵规爣";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updateEnergyEenchmarking(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.modelNodeChange();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addEnergyEenchmarking(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.modelNodeChange();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎鑳芥晥瀵规爣缂栧彿涓�"' + ids + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return delEnergyEenchmarking(ids);
-        }).then(() => {
-          this.modelNodeChange();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夋暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return exportEnergyEenchmarking(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function() {});
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyEenchmarking/energyEenchmarking/index.vue b/energy_management_ui/src/views/energyEenchmarking/energyEenchmarking/index.vue
deleted file mode 100644
index 987b915..0000000
--- a/energy_management_ui/src/views/energyEenchmarking/energyEenchmarking/index.vue
+++ /dev/null
@@ -1,60 +0,0 @@
-
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" :width="isCollapse?'0px':'20%'">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            鑳芥晥瀵规爣
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode"
-                     :modelCode="modelCode"
-                     :showOpt="false"
-                     :auth="false"></ModelNode>
-          <!--<ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false" :modelCode="modelCode"></ModelNode>-->
-        </el-card>
-      </el-aside>
-      <el-container>
-        <div style="cursor:pointer;" @click="toggleCollapse">
-          <img src="@/assets/image/configureChart.png" style="width: 100%;height: 100%">
-        </div>
-        <el-main style="padding:0">
-          <EnergyIndex ref="EnergyIndex" style="padding:10px"></EnergyIndex>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import EnergyIndex from "./enchmarking";
-  import ModelNode from "../../basicsetting/modelNode/modelNode";
-
-  export default {
-    components: { ModelNode,EnergyIndex},
-    created() {
-      this.modelCode=this.$route.query.modelCode;
-    },
-    data() {
-      return {
-        modelCode:undefined,
-        isCollapse: false,
-      }
-    },
-    methods: {
-      changeNode: function (node) {
-        this.$refs.EnergyIndex.modelNodeChange(node);
-      },
-      manageModel: function () {
-        this.$router.push('/model');
-      },
-      changeModel: function (item) {
-        this.$refs.modelNode.getList(item);
-      },
-      // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-      toggleCollapse () {
-        this.isCollapse = !this.isCollapse
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/energyExamine/assessmentIndex/addIndexTable.vue b/energy_management_ui/src/views/energyExamine/assessmentIndex/addIndexTable.vue
deleted file mode 100644
index cd873d6..0000000
--- a/energy_management_ui/src/views/energyExamine/assessmentIndex/addIndexTable.vue
+++ /dev/null
@@ -1,126 +0,0 @@
-<template>
-  <!-- 瀵煎叆琛� -->
-  <el-dialog
-    :title="title"
-    :visible.sync="open"
-    :destroy-on-close="true"
-    :append-to-body="true"
-    width="800px"
-    top="5vh"
-  >
-    <!--
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item>
-        <el-button icon="el-icon-refresh" size="mini" @click="createIndex">鐢熸垚鎸囨爣</el-button>
-      </el-form-item>
-    </el-form>-->
-
-    <el-row>
-      <el-table
-        v-loading="loading"
-        :data="impIndexList"
-        @selection-change="handleSelectionChange"
-        max-height="350"
-      >
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="鎸囨爣缂栫爜" align="center" prop="code" />
-        <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="name" />
-      </el-table>
-    </el-row>
-    <div slot="footer" class="dialog-footer">
-      <el-button @click="handsave">淇� 瀛�</el-button>
-      <el-button @click="handclose">鍙� 娑�</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { listIndex, addIndex } from "@/api/energyExamine/addIndex";
-
-export default {
-  data() {
-    return {
-      //妯″瀷鑺傜偣
-      modeNode: "",
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      qjcode: "",
-      //  鎸囨爣  琛ㄦ牸鏁版嵁
-      impIndexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      idOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        implementId: "",
-        tableName: undefined
-      }
-    };
-  },
-  created() {},
-  methods: {
-    // 鏄剧ず寮规
-    show(modeNode) {
-      this.modeNode = modeNode;
-      this.reset();
-      this.getList();
-      this.title = "娣诲姞" + this.modeNode.label + "鑰冩牳鎸囨爣";
-      this.open = true;
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.queryParams = {
-        pageNum: 1,
-        pageSize: 10,
-        implementId: "",
-        tableName: undefined
-      };
-      //娓呯┖涓婁紶缁勪欢鐨勬枃浠跺垪琛�
-      this.resetForm("queryForm");
-    },
-    // 鏌ヨ  鎸囨爣
-    getList() {
-      listIndex("STATISTIC", this.modeNode.id).then(response => {
-        this.impIndexList = response.data;
-        this.loading = false;
-      });
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.indexId);
-    },
-    /** 淇濆瓨鎸夐挳鎿嶄綔 */
-    handsave() {
-      if (this.ids == null || this.ids.length <= 0) {
-        this.msgSuccess("璇烽�夋嫨鎸囨爣!");
-        return;
-      }
-      addIndex(this.ids, this.modeNode.id).then(response => {
-        if (response != null && response.code == "200") {
-          this.msgSuccess(response.msg);
-          this.open = false;
-        } else {
-          this.msgSuccess(response.msg);
-        }
-      });
-    },
-    /** 鍏抽棴鎸夐挳鎿嶄綔 */
-    handclose() {
-      this.open = false;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyExamine/assessmentIndex/assessmentIndex.vue b/energy_management_ui/src/views/energyExamine/assessmentIndex/assessmentIndex.vue
deleted file mode 100644
index 8bc0d1c..0000000
--- a/energy_management_ui/src/views/energyExamine/assessmentIndex/assessmentIndex.vue
+++ /dev/null
@@ -1,171 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鑰冩牳鎸囨爣绠$悊">
-        <el-radio v-model="radio" label="1">褰撳墠鍗曞厓</el-radio>
-        <el-radio v-model="radio" label="2">鍖呭惈涓嬬骇</el-radio>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini">鎼滅储</el-button>
-        <el-button type="primary" icon="el-icon-plus" size="mini">鏂板</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-table :data="energyEenchmarkingList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center"/>
-      <el-table-column label="鍗曚綅鍚嶇О" align="center" prop="name"/>
-      <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="zbname"/>
-      <el-table-column label="璁¢噺鍗曚綅" align="center" prop="jldw"/>
-      <el-table-column label="鑰冩牳渚濇嵁" align="center">
-        <el-table-column label="鑳借�楄鍒�" align="center" prop="nhjh"/>
-        <el-table-column label="鑳芥晥瀵规爣" align="center" prop="nhdb"/>
-        <el-table-column label="鑳芥簮鍙屾帶" align="center" prop="nysk"/>
-        <el-table-column label="鎸囧畾鏍囧噯" align="center" prop="zdbz"/>
-      </el-table-column>
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button  size="mini" type="text" icon="el-icon-edit" >淇敼</el-button>
-          <el-button size="mini" type="text" icon="el-icon-delete">鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      radio: '1',
-
-      // energy_benchmarking琛ㄦ牸鏁版嵁
-      energyEenchmarkingList:[{
-        "name": "鍏ㄥ巶",
-        "zbname":"鐢佃�楅噺",
-        "jldw":"鍗冪摝鏃�",
-        "nhjh":"脳",
-        "nhdb":"鈭�",
-        "nysk":"脳",
-        "zdbz":"脳",
-        "createBy": null,
-        "createTime": "",
-        "updateBy": null,
-        "updateTime": null,
-        "remark": "",
-      },
-      {
-        "name": "鍏ㄥ巶",
-        "zbname":"澶╃劧姘旇�楅噺",
-        "jldw":"绔嬫柟绫�",
-        "nhjh":"脳",
-        "nhdb":"脳",
-        "nysk":"脳",
-        "zdbz":"脳",
-        "createBy": null,
-        "createTime": "",
-        "updateBy": null,
-        "updateTime": null,
-        "remark": "",
-      },
-      {
-        "name": "鍏ㄥ巶",
-        "zbname":"鐒︾偔鑰楅噺",
-        "jldw":"鐒﹁��",
-        "nhjh":"鈭�",
-        "nhdb":"鈭�",
-        "nysk":"鈭�",
-        "zdbz":"鈭�",
-        "createBy": null,
-        "createTime": "",
-        "updateBy": null,
-        "updateTime": null,
-        "remark": "",
-      },
-      {
-        "name": "鍏ㄥ巶",
-        "zbname":"姘磋�楅噺",
-        "jldw":"绔嬫柟绫�",
-        "nhjh":"脳",
-        "nhdb":"脳",
-        "nysk":"脳",
-        "zdbz":"脳",
-        "createBy": null,
-        "createTime": "",
-        "updateBy": null,
-        "updateTime": null,
-        "remark": "",
-      }],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined,
-        modelNode:"",
-      },
-    };
-  },
-  created() {
-  },
-  methods: {
-    modelNodeChange(modelNode) {
-      //this.queryParams.nodeId = modelNode.id;
-      //this.getList();
-      //this.disabledSetting = modelNode === undefined || modelNode === '' || modelNode === null;
-      //if (modelNode) {
-      //  this.currentNode = modelNode;
-      //}
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.modelNodeChange();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyExamine/assessmentIndex/create_index.vue b/energy_management_ui/src/views/energyExamine/assessmentIndex/create_index.vue
deleted file mode 100644
index 19b0e2d..0000000
--- a/energy_management_ui/src/views/energyExamine/assessmentIndex/create_index.vue
+++ /dev/null
@@ -1,393 +0,0 @@
-<template>
-  <div class="app-container">
-    <span>{{modeNode?modeNode.label:''}}</span>
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" class="query-form">
-      <el-form-item>
-        <el-radio-group v-model="queryParams.eierarchyFlag">
-          <el-radio label="B" style="margin-right: 10px!important;" onselect="true">褰撳墠鍗曞厓</el-radio>
-          <el-radio label="ALL">鍖呭惈涓嬬骇</el-radio>
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="selectList">鏌ヨ</el-button>
-          <el-button
-            type="primary"
-            icon="el-icon-plus"
-            size="mini"
-            @click="openImportIndexTable()"
-            v-hasPermi="['energyExamine:assessmentIndex:add']"
-          >娣诲姞</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-    </el-row>
-
-    <el-table v-loading="loading" :data="assessmentIndexList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="鍗曚綅鍚嶇О" align="center" prop="modename"/>
-      <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="indexname"/>
-      <el-table-column label="璁¢噺鍗曚綅" align="center" prop="jldw"/>
-      <el-table-column label="鑰冩牳渚濇嵁" align="center">
-        <el-table-column label="鑳借�楄鍒�" align="center" prop="plan" :formatter="planFormat"/>
-        <el-table-column label="鑳芥晥瀵规爣" align="center" prop="benchmarking" :formatter="benchmarkingFormat"/>
-        <el-table-column label="鑳芥簮鍙屾帶" align="center" prop="dualControl" :formatter="dualControlFormat"/>
-        <el-table-column label="鎸囧畾鏍囧噯" align="center" prop="customStandard" :formatter="customStandardFormat"/>
-      </el-table-column>
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['energyExamine:assessmentIndex:edit']"
-          >鑰冩牳渚濇嵁</el-button>
-
-
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['energyExamine:assessmentIndex:remove']"
-          >鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 娣诲姞鎴栦慨鏀圭敤鑳借�冩牳鏍囧噯瀵硅瘽妗� -->
-    <el-dialog :title="title" :visible.sync="open" width="600px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-        <el-row>
-          <el-col :span="24">
-            <el-form-item label="鍗曚綅鍚嶇О" prop="modename">
-              <el-input v-model="form.modename" readonly="readonly" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鎸囨爣鍚嶇О" prop="indexname">
-              <el-input v-model="form.indexname"  readonly="readonly"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="璁¢噺鍗曚綅" prop="jldw">
-              <el-input v-model="form.jldw"  readonly="readonly"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="" label-width="30px">
-              <el-checkbox v-model="form.plan" name="plan">鑳借�楄鍒掑�间綔涓哄弬鑰冧緷鎹�</el-checkbox>
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label=""  label-width="30px">
-              <el-checkbox v-model="form.benchmarking" name="benchmarking" >鑳借�楀鏍囧�间綔涓哄弬鑰冧緷鎹�</el-checkbox>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-              <el-form-item label="鏍囨潌鑼冨洿" >
-                <el-select v-model="form.benchRange" placeholder="璇烽�夋嫨鏍囨潌鑼冨洿">
-                  <el-option
-                    v-for="dict in benchRangeOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鏍囨潌绫诲瀷"  >
-            <el-select v-model="form.benchType" placeholder="璇烽�夋嫨鏍囨潌绫诲瀷">
-              <el-option
-                v-for="dict in benchTypeOptions"
-                :key="dict.dictValue"
-                :label="dict.dictLabel"
-                :value="dict.dictValue"
-              ></el-option>
-            </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label=""  label-width="30px">
-            <el-checkbox v-model="form.dualControl" name="dualControl">鑳芥簮鍙屾帶鍊间綔涓哄弬鑰冧緷鎹�</el-checkbox>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label=""  label-width="30px">
-            <el-checkbox v-model="form.customStandard" >鎸囧畾鏍囧噯浣滀负鍙傝�冧緷鎹�</el-checkbox>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label=""  label-width="10px">
-              <el-input v-model="form.customVal" size="mini"/>
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-    <addIndexTable ref="addIndex"   />
-
-  </div>
-</template>
-
-<script>
-  import { listAssessmentIndex,listAssessmentIndexModel , getAssessmentIndex, delAssessmentIndex, addAssessmentIndex, updateAssessmentIndex, exportAssessmentIndex } from "@/api/energyExamine/assessmentIndex";
-  import addIndexTable from "./addIndexTable";
-  export default {
-    name: "implement",
-    components: { addIndexTable },
-    data() {
-      return {
-        //妯″瀷鑺傜偣
-        modeNode:'',
-        // 閬僵灞�
-        loading: true,
-        // 閫変腑鏁扮粍
-        ids: [],
-        // 闈炲崟涓鐢�
-        single: true,
-        // 闈炲涓鐢�
-        multiple: true,
-        // 鎬绘潯鏁�
-        total: 0,
-        // 鐢ㄨ兘鑰冩牳鏍囧噯琛ㄦ牸鏁版嵁
-        assessmentIndexList: [],
-        // 寮瑰嚭灞傛爣棰�
-        title: "",
-        // 鏄惁鏄剧ず寮瑰嚭灞�
-        open: false,
-        // 涓婚敭id瀛楀吀
-        idOptions: [],
-        // 妯″瀷鑺傜偣id瀛楀吀
-        modeNodeIdOptions: [],
-        // 鎸囨爣id瀛楀吀
-        indexIdOptions: [],
-        // 鏄惁鑳借�楄鍒� Y  N瀛楀吀
-        planOptions: [],
-        // 鏄惁瀵规爣 Y  N瀛楀吀
-        benchmarkingOptions: [],
-        // 鏍囨潌鑼冨洿瀛楀吀椤瑰瓧鍏�
-        benchRangeOptions: [],
-        // 鏍囨潌绫诲瀷瀛楀吀椤瑰瓧鍏�
-        benchTypeOptions: [],
-        // 鏄惁鑳芥簮鍙屾帶 Y N瀛楀吀
-        dualControlOptions: [],
-        // 鏄惁鑷畾涔夋爣鍑� Y  N瀛楀吀
-        customStandardOptions: [],
-        // 鎸囧畾鑷畾涔夋爣鍑嗘暟鍊煎瓧鍏�
-        customValOptions: [],
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          eierarchyFlag:"B",
-          pageNum: 1,
-          pageSize: 10,
-        },
-        // 琛ㄥ崟鍙傛暟
-        form: {},
-        setIndexWindow:{
-          title:"娣诲姞鎸囨爣",
-          open:false,
-          indexList:[]
-        },
-        // 琛ㄥ崟鏍¢獙
-        rules: {
-          customVal: [
-            { required: true, pattern:/^\+?[1-9]\d*$/,message: "鎸囧畾鏍囧噯鍊煎彧鑳芥槸鏁板瓧", trigger: "blur" }
-          ],
-        }
-      };
-    },
-    created() {
-      this.getList();
-
-      this.getDicts("benchmarkingRange").then(response => {
-        this.benchRangeOptions = response.data;
-      });
-      this.getDicts("benchmarkingType").then(response => {
-        this.benchTypeOptions = response.data;
-      });
-
-    },
-    methods: {
-      modelNodeChange(modelNode) {
-        if(modelNode)
-        {
-          this.modeNode=modelNode;
-          this.getList();
-        }
-        console.log("lable="+modelNode.label);
-        console.log("id="+modelNode.id);
-      },
-      /** 鏌ヨ鐢ㄨ兘鑰冩牳鏍囧噯鍒楄〃 */
-      getList() {
-        this.loading = true;
-        listAssessmentIndexModel(this.modeNode.id,this.queryParams).then(response => {
-          this.assessmentIndexList = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        });
-      },
-
-      // 閫氱敤绗﹀彿鏍煎紡鍖�
-      planFormat(row, column) {
-        return row.plan?"鈭�":"X";
-      },
-      benchmarkingFormat(row, column) {
-        return row.benchmarking?"鈭�":"X";
-      },
-      dualControlFormat(row, column) {
-        return row.dualControl?"鈭�":"X";
-      },
-      customStandardFormat(row, column) {
-        return row.customStandard?"鈭�  "+row.customVal:"X";
-      },
-      /**     // 鏄惁瀵规爣 Y  N瀛楀吀缈昏瘧
-      benchmarkingFormat(row, column) {
-        return this.selectDictLabel(this.benchmarkingOptions, row.benchmarking);
-      },
-
-      // 鏄惁鑳芥簮鍙屾帶 Y N瀛楀吀缈昏瘧
-      dualControlFormat(row, column) {
-        return this.selectDictLabel(this.dualControlOptions, row.dualControl);
-      },
-      // 鏄惁鑷畾涔夋爣鍑� Y  N瀛楀吀缈昏瘧
-      customStandardFormat(row, column) {
-        return this.selectDictLabel(this.customStandardOptions, row.customStandard);
-      },
-   */
-      // 鍙栨秷鎸夐挳
-      cancel() {
-        this.open = false;
-        this.reset();
-      },
-      // 琛ㄥ崟閲嶇疆
-      reset() {
-        this.form = {
-          id: undefined,
-          modeNodeId: undefined,
-          indexId: undefined,
-          plan: undefined,
-          benchmarking: undefined,
-          benchRange: undefined,
-          benchType: undefined,
-          dualControl: undefined,
-          customStandard: undefined,
-          customVal: undefined
-        };
-        this.resetForm("form");
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.getList();
-      },
-      /** 閲嶇疆鎸夐挳鎿嶄綔 */
-      resetQuery() {
-        this.resetForm("queryForm");
-        this.handleQuery();
-      },
-      // 澶氶�夋閫変腑鏁版嵁
-      handleSelectionChange(selection) {
-        this.ids = selection.map(item => item.id)
-        this.single = selection.length!=1
-        this.multiple = !selection.length
-      },
-      /** 鏂板鎸夐挳鎿嶄綔 */
-      handleAdd() {
-        this.reset();
-        this.open = true;
-        this.title = "娣诲姞鐢ㄨ兘鑰冩牳鏍囧噯";
-      },
-      /** 淇敼鎸夐挳鎿嶄綔 */
-      handleUpdate(row) {
-        this.reset();
-        const id = row.id || this.ids
-        getAssessmentIndex(id).then(response => {
-          this.form = response.data;
-          this.open = true;
-          this.title = "鎸囨爣鑰冩牳渚濇嵁璁剧疆";
-        });
-      },
-      /** 鎻愪氦鎸夐挳 */
-      submitForm: function() {
-        this.$refs["form"].validate(valid => {
-          if (valid) {
-            if (this.form.id != undefined) {
-              updateAssessmentIndex(this.form).then(response => {
-                if (response.code === 200) {
-                  this.msgSuccess("淇敼鎴愬姛");
-                  this.open = false;
-                  this.getList();
-                } else {
-                  this.msgError(response.msg);
-                }
-              });
-            } else {
-              addAssessmentIndex(this.form).then(response => {
-                if (response.code === 200) {
-                  this.msgSuccess("鏂板鎴愬姛");
-                  this.open = false;
-                  this.getList();
-                } else {
-                  this.msgError(response.msg);
-                }
-              });
-            }
-          }
-        });
-      },
-      /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-      handleDelete(row) {
-        const indexname = row.indexname;
-        this.$confirm('鏄惁纭鍒犻櫎鎸囨爣涓�"' + indexname + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return delAssessmentIndex(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-      },
-      /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-      handleExport() {
-        const queryParams = this.queryParams;
-        this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夌敤鑳借�冩牳鏍囧噯鏁版嵁椤�?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return exportAssessmentIndex(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function() {});
-      },
-      /** 鎵撳紑鎸囨爣琛ㄥ脊绐� */
-      openImportIndexTable() {
-        this.$refs.addIndex.show(this.modeNode);
-      },
-      //鏌ヨ鍔熻兘
-      selectList()
-      {
-        this.getList();
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/energyExamine/assessmentIndex/index.vue b/energy_management_ui/src/views/energyExamine/assessmentIndex/index.vue
deleted file mode 100644
index 9129165..0000000
--- a/energy_management_ui/src/views/energyExamine/assessmentIndex/index.vue
+++ /dev/null
@@ -1,86 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="鑰冩牳鏍囧噯绠$悊" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :modelCode="modelCode"
-            :showOpt="false"
-            :auth="false"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <basic-container :bodyStyle="bodyStyleRight">
-          <assessmentIndex
-            ref="assessmentIndex"
-            style="padding:10px"
-          ></assessmentIndex>
-        </basic-container>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-// import assessmentIndex from "./assessmentIndex";
-import assessmentIndex from "./create_index";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from "@/components/shrink/index.vue";
-export default {
-  mixins: [mixins],
-  components: { ModelNode, assessmentIndex, ShrinkCol },
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  data() {
-    return {
-      modelData: "",
-      modelInfoOptions: [],
-      modelCode: undefined,
-      isCollapse: false,
-      bodyStyleRight: {}
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 130 + "px"
-      };
-    },
-    changeNode: function(node) {
-      this.$refs.assessmentIndex.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyExamine/assessmentResults/assessmentResults.vue b/energy_management_ui/src/views/energyExamine/assessmentResults/assessmentResults.vue
deleted file mode 100644
index 7c8f3cf..0000000
--- a/energy_management_ui/src/views/energyExamine/assessmentResults/assessmentResults.vue
+++ /dev/null
@@ -1,238 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item>
-        <el-radio v-model="radio" label="1">褰撳墠鍗曞厓</el-radio>
-        <el-radio v-model="radio" label="2">鍖呭惈涓嬩竴绾�</el-radio>
-      </el-form-item>
-      <el-form-item label="缁熻鍖洪棿">
-        <el-date-picker
-          type="daterange"
-          range-separator="鑷�"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡"
-        >
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="鑰冩牳渚濇嵁">
-        <el-checkbox-group v-model="checkList">
-          <el-checkbox label="鑳借�楄鍒�"></el-checkbox>
-          <el-checkbox label="鑳芥晥瀵规爣"></el-checkbox>
-          <el-checkbox label="鑳芥簮鍙屾帶"></el-checkbox>
-          <el-checkbox label="鎸囧畾鏍囧噯"></el-checkbox>
-        </el-checkbox-group>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini"
-          >鎼滅储</el-button
-        >
-        <el-button icon="el-icon-download" size="mini">瀵煎嚭</el-button>
-      </el-form-item>
-    </el-form>
-    <div style="margin: 20px;text-align: center;font-weight: 600;color:#fff">
-      <span style="float: left;">缁熻鑼冨洿锛氬叏鍘�</span>
-      <span>鑳芥晥鑰冩牳缁撴灉</span>
-      <span style="float: right;">缁熻鍖洪棿锛歿{ times }}</span>
-    </div>
-    <el-table
-      :data="energyEenchmarkingList"
-      @selection-change="handleSelectionChange"
-    >
-      <el-table-column label="鏃ユ湡" align="center" prop="time" />
-      <el-table-column label="鐢佃�楅噺" align="center">
-        <el-table-column label="瀹為檯閲�" align="center" prop="dsjl" />
-        <el-table-column label="鑳借�楄鍒�" align="center" prop="dnhjh" />
-      </el-table-column>
-      <el-table-column label="澶╃劧姘旇�楅噺" align="center">
-        <el-table-column label="瀹為檯閲�" align="center" prop="tsjl" />
-        <el-table-column label="鑳借�楄鍒�" align="center" prop="tnhjh" />
-      </el-table-column>
-      <el-table-column label="姘磋�楅噺" align="center">
-        <el-table-column label="瀹為檯閲�" align="center" prop="ssjl" />
-        <el-table-column label="鑳借�楄鍒�" align="center" prop="snhjh" />
-      </el-table-column>
-      <el-table-column label="鐒︾偔鑰楅噺" align="center">
-        <el-table-column label="瀹為檯閲�" align="center" prop="jsjl" />
-        <el-table-column label="鑳借�楄鍒�" align="center" prop="jnhjh" />
-      </el-table-column>
-      <el-table-column label="娌硅�楅噺" align="center">
-        <el-table-column label="瀹為檯閲�" align="center" prop="ysjl" />
-        <el-table-column label="鑳借�楄鍒�" align="center" prop="ynhjh" />
-      </el-table-column>
-      <el-table-column label="缁煎悎鑰楅噺" align="center">
-        <el-table-column label="瀹為檯閲�" align="center" prop="zsjl" />
-        <el-table-column label="鑳借�楄鍒�" align="center" prop="znhjh" />
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      radio: "1",
-      checkList: ["鑳借�楄鍒�"],
-      // energy_benchmarking琛ㄦ牸鏁版嵁
-      energyEenchmarkingList: [
-        {
-          time: "2019-02-01",
-          dsjl: "-",
-          dnhjh: "-",
-          tsjl: "244.42",
-          tnhjh: "-",
-          ssjl: "343.42",
-          snhjh: "-",
-          jsjl: "196.12",
-          jnhjh: "-",
-          ysjl: "358.44",
-          ynhjh: "-",
-          zsjl: "1716.39",
-          znhjh: "-",
-          createBy: null,
-          createTime: "",
-          updateBy: null,
-          updateTime: null,
-          remark: ""
-        },
-        {
-          time: "2019-02-02",
-          dsjl: "-",
-          dnhjh: "-",
-          tsjl: "392.13",
-          tnhjh: "-",
-          ssjl: "382.95",
-          snhjh: "-",
-          jsjl: "164.3",
-          jnhjh: "-",
-          ysjl: "278.17",
-          ynhjh: "-",
-          zsjl: "1813.69",
-          znhjh: "-",
-          createBy: null,
-          createTime: "",
-          updateBy: null,
-          updateTime: null,
-          remark: ""
-        },
-        {
-          time: "2019-02-03",
-          dsjl: "-",
-          dnhjh: "-",
-          tsjl: "213.91",
-          tnhjh: "-",
-          ssjl: "263.23",
-          snhjh: "-",
-          jsjl: "308.81",
-          jnhjh: "-",
-          ysjl: "327.49",
-          ynhjh: "-",
-          zsjl: "1698.82",
-          znhjh: "-",
-          createBy: null,
-          createTime: "",
-          updateBy: null,
-          updateTime: null,
-          remark: ""
-        },
-        {
-          time: "2019-02-04",
-          dsjl: "-",
-          dnhjh: "-",
-          tsjl: "355.44",
-          tnhjh: "-",
-          ssjl: "260.75",
-          snhjh: "-",
-          jsjl: "232.01",
-          jnhjh: "-",
-          ysjl: "253.9",
-          ynhjh: "-",
-          zsjl: "1486.82",
-          znhjh: "-",
-          createBy: null,
-          createTime: "",
-          updateBy: null,
-          updateTime: null,
-          remark: ""
-        }
-      ],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined,
-        modelNode: ""
-      },
-      times: ""
-    };
-  },
-  created() {},
-  methods: {
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.modelNodeChange();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    },
-    getTime() {
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      this.times = year + "-" + month + "-" + date;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyExamine/assessmentResults/index.vue b/energy_management_ui/src/views/energyExamine/assessmentResults/index.vue
deleted file mode 100644
index 98732ff..0000000
--- a/energy_management_ui/src/views/energyExamine/assessmentResults/index.vue
+++ /dev/null
@@ -1,84 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="鑳芥晥鑰冩牳缁撴灉" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :modelCode="modelCode"
-            :showOpt="false"
-            :auth="false"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <basic-container :bodyStyle="bodyStyleRight">
-          <assessmentResults
-            ref="assessmentResults"
-            style="padding:10px"
-          ></assessmentResults>
-        </basic-container>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import assessmentResults from "./assessmentResults";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from "@/components/shrink/index.vue";
-export default {
-  mixins: [mixins],
-  components: { ModelNode, assessmentResults },
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  data() {
-    return {
-      modelCode: undefined,
-      isCollapse: false,
-      bodyStyleRight: {}
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 130 + "px"
-      };
-    },
-    changeNode: function(node) {
-      //this.$refs.EnergyActual.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyMonitoring/e-gasMonitoring/index.vue b/energy_management_ui/src/views/energyMonitoring/e-gasMonitoring/index.vue
deleted file mode 100644
index 9149d99..0000000
--- a/energy_management_ui/src/views/energyMonitoring/e-gasMonitoring/index.vue
+++ /dev/null
@@ -1,207 +0,0 @@
-<!--<template>-->
-<!--  -->
-<!--</template>-->
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            瀹炴椂鏁版嵁缁勬�佸浘
-          </div>
-          <el-input placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�" v-model="filterText">
-          </el-input>
-
-          <el-tree
-            class="filter-tree"
-            :data="svgData"
-            :props="defaultProps"
-            default-expand-all
-            :filter-node-method="filterNode"
-            ref="tree"
-          >
-          </el-tree>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <el-main style="padding:0">
-          <!--          <el-tabs v-model="activeName" @tab-click="handleClick">-->
-          <!--            <el-tab-pane label="妫�娴嬪浘" name="first">鐢ㄦ埛绠$悊</el-tab-pane>-->
-          <!--            <el-tab-pane label="鎶ヨ〃" name="second">閰嶇疆绠$悊</el-tab-pane>-->
-          <!--            <el-tab-pane label="瓒嬪娍鍥�" name="third">瑙掕壊绠$悊</el-tab-pane>-->
-          <!--            <el-tab-pane label="鎶ヨ璁板綍" name="fourth">瀹氭椂浠诲姟琛ュ伩</el-tab-pane>-->
-          <!--          </el-tabs>-->
-          <svg-icon
-            v-bind:iconClass="imgShow.realName"
-            className="icon"
-          ></svg-icon>
-        </el-main>
-        <!--        <el-main style="padding:0">-->
-        <!--          <realTimeSetting ref="realTimeSetting"></realTimeSetting>-->
-        <!--        </el-main>-->
-        <!--        <svg-icon v-bind:iconClass="imgShow.realName" className='icon'></svg-icon>-->
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<style scoped>
-.icon {
-  width: 970px;
-  height: 550px;
-}
-</style>
-<script>
-import { listEquipmentfile } from "@/api/basicSetup/equipmentfile";
-export default {
-  watch: {
-    filterText(val) {
-      this.$refs.tree.filter(val);
-    }
-  },
-  data() {
-    var choiceIndex;
-    var Indexid;
-    var realName = "2020-03-12-275a44966506b783f033058f9e0e3472";
-    return {
-      //鍙宠竟鑿滃崟鏍�
-      activeName: "瀹炴椂鐩戞祴",
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      //
-      imgShow: [(realName = "")],
-      // 缁勬�佸浘琛ㄦ牸鏁版嵁
-      equipmentfileList: [],
-      //娴嬬偣琛ㄦ牸鏁版嵁
-      equipmentfilecdList: [(choiceIndex = "")],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      footopen: false,
-      addImgOpen: false,
-      uploadOpen: false,
-      indexLoading: false,
-      //缁勬�佸浘閫夋嫨鎸囨爣
-      statisticIndexDialog: false,
-      //缁勬�佸浘娴嬬偣寮瑰嚭灞�
-      imgcdopen: false,
-      // ID瀛楀吀
-      fileidOptions: [],
-      // 鏂囦欢鍚嶇О瀛楀吀
-      filenameOptions: [],
-      // 鏂囦欢缂栧彿瀛楀吀
-      filenoOptions: [],
-      // 鎿嶄綔浜哄瓧鍏�
-      opomanOptions: [],
-      // 鎿嶄綔鏃堕棿瀛楀吀
-      opotimeOptions: [],
-      // 鏂囦欢璺緞瀛楀吀
-      filepathOptions: [],
-      // 澶囨敞瀛楀吀
-      noteOptions: [],
-      settingStatisticIndexList: [],
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        filename: [
-          { required: true, message: "鏂囦欢鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
-        ],
-        fileno: [
-          { required: true, message: "鏂囦欢缂栧彿涓嶈兘涓虹┖", trigger: "blur" }
-        ]
-      },
-      filterText: "",
-      svgData: [
-        {
-          id: 1,
-          label: "鐢熶骇浼佷笟",
-          children: [
-            {
-              id: 2,
-              label: "姘寸郴缁�"
-            },
-            {
-              id: 3,
-              label: "鐢电郴缁�"
-            }
-          ]
-        }
-      ],
-      defaultProps: {
-        children: "children",
-        label: "label"
-      }
-    };
-  },
-  created() {
-    this.getList();
-    this.imgShow.realName = "dian";
-  },
-  methods: {
-    //閫氳繃
-    handleClick(tab, event) {
-      console.log(tab, event);
-    },
-    //鍒囨崲缁勬�佸浘鏌ョ湅
-    updateImg(row) {
-      var pos = row.filepath.lastIndexOf("/");
-      var str = row.filepath.substr(pos + 1);
-      this.imgShow.realName = str.substring(0, str.length - 4);
-      console.log(this.imgShow.realName);
-    },
-    //閫氳繃鍏抽敭瀛楄繘琛岃繃婊ょ粍鎬佸浘
-    filterNode(value, data) {
-      if (!value) return true;
-      return data.label.indexOf(value) !== -1;
-    },
-    /** 鏌ヨ缁勬�佸浘鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listEquipmentfile(this.queryParams).then(response => {
-        this.equipmentfileList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        fileid: undefined,
-        filename: undefined,
-        fileno: undefined,
-        opoman: undefined,
-        opotime: undefined,
-        filepath: undefined,
-        note: undefined,
-        img: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyMonitoring/eMonitoring/svgView/index.vue b/energy_management_ui/src/views/energyMonitoring/eMonitoring/svgView/index.vue
deleted file mode 100644
index bc9d0e1..0000000
--- a/energy_management_ui/src/views/energyMonitoring/eMonitoring/svgView/index.vue
+++ /dev/null
@@ -1,185 +0,0 @@
-<!--<template>-->
-<!--  -->
-<!--</template>-->
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-container>
-        <el-main style="padding:0">
-<!--          <el-tabs v-model="activeName" @tab-click="handleClick">-->
-<!--            <el-tab-pane label="妫�娴嬪浘" name="first">鐢ㄦ埛绠$悊</el-tab-pane>-->
-<!--            <el-tab-pane label="鎶ヨ〃" name="second">閰嶇疆绠$悊</el-tab-pane>-->
-<!--            <el-tab-pane label="瓒嬪娍鍥�" name="third">瑙掕壊绠$悊</el-tab-pane>-->
-<!--            <el-tab-pane label="鎶ヨ璁板綍" name="fourth">瀹氭椂浠诲姟琛ュ伩</el-tab-pane>-->
-<!--          </el-tabs>-->
-          <svg-icon v-bind:iconClass="imgShow.realName" className='icon'></svg-icon>
-        </el-main>
-<!--        <el-main style="padding:0">-->
-<!--          <realTimeSetting ref="realTimeSetting"></realTimeSetting>-->
-<!--        </el-main>-->
-<!--        <svg-icon v-bind:iconClass="imgShow.realName" className='icon'></svg-icon>-->
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<style scoped>
-  .icon {
-    width: 970px;
-    height: 550px;
-  }
-</style>
-<script>
-    import {
-        listEquipmentfile,
-    } from "@/api/basicSetup/equipmentfile";
-    export default {
-        watch: {
-            filterText(val) {
-                this.$refs.tree.filter(val);
-            }
-        },
-        data() {
-            var choiceIndex;
-            var Indexid;
-            var realName = "2020-03-12-275a44966506b783f033058f9e0e3472";
-            return {
-                //鍙宠竟鑿滃崟鏍�
-                activeName: '瀹炴椂鐩戞祴',
-                // 閬僵灞�
-                loading: true,
-                // 閫変腑鏁扮粍
-                ids: [],
-                // 闈炲崟涓鐢�
-                single: true,
-                // 闈炲涓鐢�
-                multiple: true,
-                // 鎬绘潯鏁�
-                total: 0,
-                //
-                imgShow:[
-                    realName=""
-                ],
-                // 缁勬�佸浘琛ㄦ牸鏁版嵁
-                equipmentfileList: [],
-                //娴嬬偣琛ㄦ牸鏁版嵁
-                equipmentfilecdList: [
-                    choiceIndex = ""
-                ],
-                // 寮瑰嚭灞傛爣棰�
-                title: "",
-                // 鏄惁鏄剧ず寮瑰嚭灞�
-                open: false,
-                footopen: false,
-                addImgOpen: false,
-                uploadOpen: false,
-                indexLoading: false,
-                //缁勬�佸浘閫夋嫨鎸囨爣
-                statisticIndexDialog: false,
-                //缁勬�佸浘娴嬬偣寮瑰嚭灞�
-                imgcdopen: false,
-                // ID瀛楀吀
-                fileidOptions: [],
-                // 鏂囦欢鍚嶇О瀛楀吀
-                filenameOptions: [],
-                // 鏂囦欢缂栧彿瀛楀吀
-                filenoOptions: [],
-                // 鎿嶄綔浜哄瓧鍏�
-                opomanOptions: [],
-                // 鎿嶄綔鏃堕棿瀛楀吀
-                opotimeOptions: [],
-                // 鏂囦欢璺緞瀛楀吀
-                filepathOptions: [],
-                // 澶囨敞瀛楀吀
-                noteOptions: [],
-                settingStatisticIndexList: [],
-                // 琛ㄥ崟鍙傛暟
-                form: {},
-                // 琛ㄥ崟鏍¢獙
-                rules: {
-                    filename: [
-                        {required: true, message: "鏂囦欢鍚嶇О涓嶈兘涓虹┖", trigger: "blur"}
-                    ], fileno: [
-                        {required: true, message: "鏂囦欢缂栧彿涓嶈兘涓虹┖", trigger: "blur"}
-                    ],
-                },
-                filterText: '',
-                svgData:[{
-                    id:1,
-                    label:"鐢熶骇浼佷笟",
-                    children:[{
-                        id:2,
-                        label:"姘寸郴缁�",
-                    },{
-                        id:3,
-                        label: "鐢电郴缁�",
-                    }],
-                }],
-                defaultProps: {
-                    children: 'children',
-                    label: 'label'
-                },
-            };
-        },
-        created() {
-            this.getList();
-            this.imgShow.realName = "dian";
-        },
-        methods: {
-            //閫氳繃
-            handleClick(tab, event) {
-                console.log(tab, event);
-            },
-            //鍒囨崲缁勬�佸浘鏌ョ湅
-            updateImg(row){
-                var pos = row.filepath.lastIndexOf('/');
-                var str = row.filepath.substr(pos+1);
-                this.imgShow.realName = str.substring(0,str.length-4);
-                console.log(this.imgShow.realName)
-            },
-            //閫氳繃鍏抽敭瀛楄繘琛岃繃婊ょ粍鎬佸浘
-            filterNode(value, data) {
-                if (!value) return true;
-                return data.label.indexOf(value) !== -1;
-            },
-            /** 鏌ヨ缁勬�佸浘鍒楄〃 */
-            getList() {
-                this.loading = true;
-                listEquipmentfile(this.queryParams).then(response => {
-                    this.equipmentfileList = response.rows;
-                    this.total = response.total;
-                    this.loading = false;
-                });
-            },
-            // 鍙栨秷鎸夐挳
-            cancel() {
-                this.open = false;
-                this.reset();
-            },
-            // 琛ㄥ崟閲嶇疆
-            reset() {
-                this.form = {
-                    fileid: undefined,
-                    filename: undefined,
-                    fileno: undefined,
-                    opoman: undefined,
-                    opotime: undefined,
-                    filepath: undefined,
-                    note: undefined,
-                    img: undefined
-                };
-                this.resetForm("form");
-            },
-            /** 鎼滅储鎸夐挳鎿嶄綔 */
-            handleQuery() {
-                this.queryParams.pageNum = 1;
-                this.getList();
-            },
-            /** 閲嶇疆鎸夐挳鎿嶄綔 */
-            resetQuery() {
-                this.resetForm("queryForm");
-                this.handleQuery();
-            },
-        }
-    };
-</script>
diff --git a/energy_management_ui/src/views/energyMonitoring/waterMonitoring/svgView/index.vue b/energy_management_ui/src/views/energyMonitoring/waterMonitoring/svgView/index.vue
deleted file mode 100644
index 4bb3834..0000000
--- a/energy_management_ui/src/views/energyMonitoring/waterMonitoring/svgView/index.vue
+++ /dev/null
@@ -1,192 +0,0 @@
-<!--<template>-->
-<!--  -->
-<!--</template>-->
-<template>
-  <div class="app-container">
-          <el-tabs v-model="activeName" @tab-click="handleClick">
-            <el-tab-pane label="妫�娴嬪浘" name="first">
-                <el-row>
-                  <el-col>
-                    <div class="grid-content bg-purple-dark" style="text-align: right">
-                    <el-button type="warning" style="text-align: center">鍒锋柊鏃堕棿璁剧疆</el-button>
-                    </div>
-                  </el-col>
-                </el-row>
-                  <svg-icon v-bind:iconClass="imgShow.realName" className='icon'></svg-icon>
-            </el-tab-pane>
-            <el-tab-pane label="鎶ヨ〃" name="second">
-              <real-time-index ref="realTimeIndex" :svgId="1962"></real-time-index>
-            </el-tab-pane>
-            <el-tab-pane label="瓒嬪娍鍥�" name="third">瓒嬪娍鍥�</el-tab-pane>
-            <el-tab-pane label="鎶ヨ璁板綍" name="fourth">
-              <history-alarm-note ref="historyAlarmNote" :svgId="1962"></history-alarm-note>
-            </el-tab-pane>
-          </el-tabs>
-  </div>
-</template>
-
-<style scoped>
-  .icon {
-    width: 970px;
-    height: 550px;
-  }
-</style>
-<script>
-    import {
-        listEquipmentfile,
-    } from "@/api/basicSetup/equipmentfile";
-    import HistoryAlarmNote from "../../../energyAlarm/historicalAlarm/historyAlarmNote";
-    import realTimeIndex from "../../../energyStatistics/energyStatisticsTrend/realTimeIndex";
-    export default {
-      components: {HistoryAlarmNote,realTimeIndex},
-      comments:{HistoryAlarmNote},
-        watch: {
-            filterText(val) {
-                this.$refs.tree.filter(val);
-            }
-        },
-        data() {
-            var choiceIndex;
-            var Indexid;
-            return {
-                //鍙宠竟鑿滃崟鏍�
-                activeName: '瀹炴椂鐩戞祴',
-                // 閬僵灞�
-                loading: true,
-                // 閫変腑鏁扮粍
-                ids: [],
-                // 闈炲崟涓鐢�
-                single: true,
-                // 闈炲涓鐢�
-                multiple: true,
-                // 鎬绘潯鏁�
-                total: 0,
-                activeName:"first",
-                //
-                imgShow: {
-                  realName:undefined
-                },
-                // 缁勬�佸浘琛ㄦ牸鏁版嵁
-                equipmentfileList: [],
-                //娴嬬偣琛ㄦ牸鏁版嵁
-                equipmentfilecdList: [
-                    choiceIndex = ""
-                ],
-                // 寮瑰嚭灞傛爣棰�
-                title: "",
-                // 鏄惁鏄剧ず寮瑰嚭灞�
-                open: false,
-                footopen: false,
-                addImgOpen: false,
-                uploadOpen: false,
-                indexLoading: false,
-                //缁勬�佸浘閫夋嫨鎸囨爣
-                statisticIndexDialog: false,
-                //缁勬�佸浘娴嬬偣寮瑰嚭灞�
-                imgcdopen: false,
-                // ID瀛楀吀
-                fileidOptions: [],
-                // 鏂囦欢鍚嶇О瀛楀吀
-                filenameOptions: [],
-                // 鏂囦欢缂栧彿瀛楀吀
-                filenoOptions: [],
-                // 鎿嶄綔浜哄瓧鍏�
-                opomanOptions: [],
-                // 鎿嶄綔鏃堕棿瀛楀吀
-                opotimeOptions: [],
-                // 鏂囦欢璺緞瀛楀吀
-                filepathOptions: [],
-                // 澶囨敞瀛楀吀
-                noteOptions: [],
-                settingStatisticIndexList: [],
-                // 琛ㄥ崟鍙傛暟
-                form: {},
-                // 琛ㄥ崟鏍¢獙
-                rules: {
-                    filename: [
-                        {required: true, message: "鏂囦欢鍚嶇О涓嶈兘涓虹┖", trigger: "blur"}
-                    ], fileno: [
-                        {required: true, message: "鏂囦欢缂栧彿涓嶈兘涓虹┖", trigger: "blur"}
-                    ],
-                },
-                filterText: '',
-                svgData:[{
-                    id:1,
-                    label:"鐢熶骇浼佷笟",
-                    children:[{
-                        id:2,
-                        label:"姘寸郴缁�",
-                    },{
-                        id:3,
-                        label: "鐢电郴缁�",
-                    }],
-                }],
-                defaultProps: {
-                    children: 'children',
-                    label: 'label'
-                },
-            };
-        },
-        created() {
-            this.getList();
-            this.imgShow.realName = this.modelCode=this.$route.query.realName;
-          console.log("this.imgShow.realName="+this.imgShow.realName);
-        },
-        methods: {
-            //閫氳繃
-            handleClick(tab, event) {
-                console.log("tab=="+tab, event.toString());
-            },
-            //鍒囨崲缁勬�佸浘鏌ョ湅
-            updateImg(row){
-                var pos = row.filepath.lastIndexOf('/');
-                var str = row.filepath.substr(pos+1);
-                // this.imgShow.realName = str.substring(0,str.length-4);
-                // console.log(this.imgShow.realName);
-            },
-            //閫氳繃鍏抽敭瀛楄繘琛岃繃婊ょ粍鎬佸浘
-            filterNode(value, data) {
-                if (!value) return true;
-                return data.label.indexOf(value) !== -1;
-            },
-            /** 鏌ヨ缁勬�佸浘鍒楄〃 */
-            getList() {
-                this.loading = true;
-                listEquipmentfile(this.queryParams).then(response => {
-                    this.equipmentfileList = response.rows;
-                    this.total = response.total;
-                    this.loading = false;
-                });
-            },
-            // 鍙栨秷鎸夐挳
-            cancel() {
-                this.open = false;
-                this.reset();
-            },
-            // 琛ㄥ崟閲嶇疆
-            reset() {
-                this.form = {
-                    fileid: undefined,
-                    filename: undefined,
-                    fileno: undefined,
-                    opoman: undefined,
-                    opotime: undefined,
-                    filepath: undefined,
-                    note: undefined,
-                    img: undefined
-                };
-                this.resetForm("form");
-            },
-            /** 鎼滅储鎸夐挳鎿嶄綔 */
-            handleQuery() {
-                this.queryParams.pageNum = 1;
-                this.getList();
-            },
-            /** 閲嶇疆鎸夐挳鎿嶄綔 */
-            resetQuery() {
-                this.resetForm("queryForm");
-                this.handleQuery();
-            },
-        }
-    };
-</script>
diff --git a/energy_management_ui/src/views/energyPlan/actualOutput/EnergyActual.vue b/energy_management_ui/src/views/energyPlan/actualOutput/EnergyActual.vue
deleted file mode 100644
index aa2825b..0000000
--- a/energy_management_ui/src/views/energyPlan/actualOutput/EnergyActual.vue
+++ /dev/null
@@ -1,152 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鎶ヨ〃绫诲瀷">
-        <el-radio v-model="radio" label="1">鏃ユ姤</el-radio>
-        <el-radio v-model="radio" label="2">鏈堟姤</el-radio>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini">淇濆瓨淇敼</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-table :data="energyEenchmarkingList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center"/>
-      <el-table-column label="鍗曚綅鍚嶇О" align="center" prop="name"/>
-      <el-table-column label="浜у搧鍚嶇О" align="center" prop="cpname"/>
-      <el-table-column label="璁¢噺鍗曚綅" align="center" prop="jldw"/>
-      <el-table-column label="璁″垝浜ч噺" align="center" prop="jhcl"/>
-      <el-table-column label="瀹為檯浜ч噺" align="center" prop="sjcl">
-        <template scope="scope">
-          <el-input size="mini"  v-model="scope.row.sjcl"></el-input>
-        </template>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-  import {getSettingProduct} from '@/api/basicsetting/modelNode'
-  import { listPlannedOutput, getPlannedOutput, delPlannedOutput, addPlannedOutput, updatePlannedOutput, exportPlannedOutput } from "@/api/plannedOutput/plannedOutput";
-
-  export default {
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      radio: '1',
-      // energy_benchmarking琛ㄦ牸鏁版嵁
-      energyEenchmarkingList:[{
-        "name": "鍏ㄥ巶",
-        "cpname": "鐓ゆ皵",
-        "jldw":"绔嬫柟绫�",
-        "jhcl":"100",
-        "sjcl":"99",
-        "createBy": null,
-        "createTime": "",
-        "updateBy": null,
-        "updateTime": null,
-        "remark": "",
-      },
-        {
-          "name": "鍏ㄥ巶",
-          "cpname": "绮楄嫰",
-          "jldw":"鍚�",
-          "jhcl":"20",
-          "sjcl":"19",
-          "createBy": null,
-          "createTime": "",
-          "updateBy": null,
-          "updateTime": null,
-          "remark": "",
-        },
-      {
-        "name": "鍏ㄥ巶",
-        "cpname": "鐒︽补",
-        "jldw":"绔嬫柟绫�",
-        "jhcl":"60",
-        "sjcl":"58",
-        "createBy": null,
-        "createTime": "",
-        "updateBy": null,
-        "updateTime": null,
-        "remark": "",
-      }],
-      plannedOutputList:[],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined,
-        modelNode:"",
-      },
-    };
-  },
-  created() {
-  },
-  methods: {
-    modelNodeChange(modelNode) {
-      this.queryParams.indexCode=modelNode.id;
-      console.log(modelNode);
-      this.getList(this.queryParams)
-    },
-    getList() {
-      this.loading = true;
-      listPlannedOutput(this.queryParams).then(response => {
-        //this.plannedOutputList = response.rows;
-        console.log(response);
-      });
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyPlan/actualOutput/index.vue b/energy_management_ui/src/views/energyPlan/actualOutput/index.vue
deleted file mode 100644
index ae2bdc4..0000000
--- a/energy_management_ui/src/views/energyPlan/actualOutput/index.vue
+++ /dev/null
@@ -1,81 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="瀹為檯浜ч噺" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :modelCode="modelCode"
-            :showOpt="false"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <basic-container :bodyStyle="bodyStyleRight">
-          <EnergyActual ref="EnergyActual" style="padding:10px"></EnergyActual>
-        </basic-container>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import EnergyActual from "./EnergyActual";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from "@/components/shrink/index.vue";
-
-export default {
-  mixins: [mixins],
-  components: { ModelNode, EnergyActual, ShrinkCol },
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  data() {
-    return {
-      modelCode: undefined,
-      isCollapse: false,
-      bodyStyleRight: {}
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 130 + "px"
-      };
-    },
-    changeNode: function(node) {
-      console.log(node);
-      //this.$refs.EnergyActual.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyPlan/energyEstablishment/energyEstablishment.vue b/energy_management_ui/src/views/energyPlan/energyEstablishment/energyEstablishment.vue
deleted file mode 100644
index 8b6f406..0000000
--- a/energy_management_ui/src/views/energyPlan/energyEstablishment/energyEstablishment.vue
+++ /dev/null
@@ -1,213 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鎶ヨ〃绫诲瀷">
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio v-for="dict in dateTypeOptions" :key="dict.dictValue" :label="dict.dictValue">{{dict.dictLabel}}</el-radio>
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item label="缁熻鍖洪棿" prop="dataTime">
-        <el-date-picker clearable size="small" style="width: 200px"
-                        v-model="queryParams.dataTime"
-                        type="date"
-                        value-format="yyyy-MM-dd"
-                        placeholder="閫夋嫨鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌ヨ</el-button>
-        <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd">淇濆瓨淇敼</el-button>
-        <el-button icon="el-icon-download" size="mini">瀵煎嚭</el-button>
-      </el-form-item>
-    </el-form>
-    <el-form refs="form" :model="form" >
-      <el-table :data="energyEenchmarkingList" @selection-change="handleSelectionChange" ref="multipleTable">
-        <el-table-column align="center"  label="鐢ㄨ兘鍗曞厓" prop="label">{{label}}</el-table-column>
-        <el-table-column label="浜у搧浜ч噺" align="center">
-          <el-table-column label="浜у搧绉嶇被" align="center" prop="productname"/>
-          <el-table-column label="璁¢噺鍗曚綅" align="center" prop="muid" :formatter="unitIdFormat"/>
-          <el-table-column label="璁″垝鍊�" align="center" prop="planValue" />
-          <el-table-column label="瀹為檯鍊�" align="center" prop="actualValue" >
-          <template scope="scope">
-            <el-input size="mini"  v-model="scope.row.actualValue"></el-input>
-          </template>
-        </el-table-column>
-        </el-table-column>
-        <el-table-column label="鐢碉紙鍗冪摝鏃讹級" align="center">
-          <el-table-column label="鑳借�楅噺" align="center" prop="value">
-            <template scope="scope">
-              <el-input size="mini"  v-model="scope.row.value"></el-input>
-            </template>
-          </el-table-column>
-          <el-table-column label="鍗曚綅浜у搧鑳借��" align="center" prop="energyValue">
-            <template scope="scope">
-              <el-input size="mini"  v-model="scope.row.energyValue"></el-input>
-            </template>
-          </el-table-column>
-        </el-table-column>
-        <el-table-column label="姘达紙绔嬫柟绫筹級" align="center">
-          <el-table-column label="鑳借�楅噺" align="center" prop="waterValue">
-            <template scope="scope">
-              <el-input size="mini"  v-model="scope.row.waterValue"></el-input>
-            </template>
-          </el-table-column>
-          <el-table-column label="鍗曚綅浜у搧鑳借��" align="center" prop="waterEnergyValue">
-            <template scope="scope">
-              <el-input size="mini"  v-model="scope.row.waterEnergyValue"></el-input>
-            </template>
-          </el-table-column>
-        </el-table-column>
-        <el-table-column label="鐓ゆ皵锛堢珛鏂圭背锛�" align="center">
-          <el-table-column label="鑳借�楅噺" align="center" prop="coalValue">
-            <template scope="scope">
-              <el-input size="mini"  v-model="scope.row.coalValue"></el-input>
-            </template>
-          </el-table-column>
-          <el-table-column label="鍗曚綅浜у搧鑳借��" align="center" prop="coalEnergyValue">
-            <template scope="scope">
-              <el-input size="mini"  v-model="scope.row.coalEnergyValue"></el-input>
-            </template>
-          </el-table-column>
-        </el-table-column>
-        <el-table-column label="钂告苯锛堢珛鏂圭背锛�" align="center">
-          <el-table-column label="鑳借�楅噺" align="center" prop="steamValue">
-            <template scope="scope">
-              <el-input size="mini"  v-model="scope.row.steamValue"></el-input>
-            </template>
-          </el-table-column>
-          <el-table-column label="鍗曚綅浜у搧鑳借��" align="center" prop="steamEnereyValue">
-            <template scope="scope">
-              <el-input size="mini"  v-model="scope.row.steamEnereyValue"></el-input>
-            </template>
-          </el-table-column>
-        </el-table-column>
-      </el-table>
-    </el-form>
-  </div>
-</template>
-
-<script>
-  import { listEnergy,addEnergy} from "@/api/plannedOutput/planEnergy";
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      form:{},
-      // energy_benchmarking琛ㄦ牸鏁版嵁
-      energyEenchmarkingList:[],
-      dateTypeOptions:[],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        indexCode: undefined,
-        timeType:"DAY",
-        dataTime:undefined,
-        type:""
-      },
-      label:"",
-    };
-  },
-  created() {
-    this.getTime();
-    this.getDicts("sys_unit").then(response => {
-      this.unitIdOptions = response.data;
-    });
-    this.getDicts("energyPlan").then(response => {
-      this.dateTypeOptions = response.data;
-      this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-    });
-  },
-  methods: {
-    modelNodeChange(modelNode) {
-     this.queryParams.indexCode=modelNode.id;
-     this.label=modelNode.label;
-     this.getList(this.queryParams)
-   },
-    getList(){
-      console.log(123);
-      this.queryParams.type=this.queryParams.timeType
-      listEnergy(this.queryParams).then(response => {
-        this.energyEenchmarkingList=response.data;
-      })
-    },
-    handleAdd(){
-      this.$nextTick(() => {
-        this.$refs['multipleTable'].data.forEach(rowData => {
-          if(rowData.timeType =="" || rowData.timeTyp ==null || rowData.timeTyp ==undefined){
-            rowData.timeType=this.queryParams.timeType
-          }
-          rowData.dataTime=this.queryParams.dataTime;
-        });
-        this.form.configInfo=JSON.stringify( this.$refs['multipleTable'].data);
-        console.log(this.form.configInfo)
-        addEnergy(this.form.configInfo,this.queryParams).then(response => {
-          if (response.code === 200) {
-            this.msgSuccess("淇濆瓨璁″垝浜ч噺鎴愬姛");
-            this.getList();
-          } else {
-            this.msgError(response.msg);
-          }
-        })
-      });
-    },
-    // 鍗曚綅瀛楀吀缈昏瘧
-    unitIdFormat(row, column) {
-      return this.selectDictLabel(this.unitIdOptions, row.muid);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    getTime(){
-      var date = new Date()
-      var year = date.getFullYear()
-      var month = date.getMonth() + 1
-      var date = date.getDate()
-      month = month < 10 ? '0' + month : month
-      date = date < 10 ? '0' + date : date
-      this.queryParams.dataTime = year + '-' + month + '-' + date
-    },
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyPlan/energyEstablishment/index.vue b/energy_management_ui/src/views/energyPlan/energyEstablishment/index.vue
deleted file mode 100644
index 6ceaa7f..0000000
--- a/energy_management_ui/src/views/energyPlan/energyEstablishment/index.vue
+++ /dev/null
@@ -1,82 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="鑳芥簮娑堣�楄鍒�" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :modelCode="modelCode"
-            :showOpt="false"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <basic-container :bodyStyle="bodyStyleRight">
-          <energyEstablishment
-            ref="energyEstablishment"
-            style="padding:10px"
-          ></energyEstablishment>
-        </basic-container>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import energyEstablishment from "./energyEstablishment";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from "@/components/shrink/index.vue";
-export default {
-  components: { ModelNode, energyEstablishment, ShrinkCol },
-  mixins: [mixins],
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  data() {
-    return {
-      modelCode: undefined,
-      isCollapse: false,
-      bodyStyleRight: {}
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 130 + "px"
-      };
-    },
-    changeNode: function(node) {
-      this.$refs.energyEstablishment.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyPlan/energyForecast/LineChart.vue b/energy_management_ui/src/views/energyPlan/energyForecast/LineChart.vue
deleted file mode 100644
index 17dff6b..0000000
--- a/energy_management_ui/src/views/energyPlan/energyForecast/LineChart.vue
+++ /dev/null
@@ -1,162 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-const animationDuration = 6000;
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    chartData: {
-      type: Object
-    }
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  data() {
-    return {
-      chart: null,
-      seriesData: []
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-
-      this.chart.setOption({
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        title: {
-          x: "center",
-          y: "top",
-          textStyle: {
-            color: "#333"
-          }
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        grid: {
-          top: 40,
-          left: "2%",
-          right: "2%",
-          bottom: "3%",
-          containLabel: true
-        },
-        legend: {
-          data: ["鐒﹀彴", "绮夌鏈�"],
-          left: "60%",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        xAxis: [
-          {
-            type: "category",
-            data: [
-              "12鏃�",
-              "13鏃�",
-              "14鏃�",
-              "15鏃�",
-              "16鏃�",
-              "17鏃�",
-              "18鏃�",
-              "19鏃�",
-              "20鏃�"
-            ],
-            axisPointer: {
-              type: "shadow"
-            }
-          }
-        ],
-        yAxis: [
-          {
-            name: "",
-            type: "value",
-            nameTextStyle: {
-              color: "#333"
-            },
-            axisLabel: {
-              formatter: "{value}"
-            },
-            axisTick: {
-              show: false
-            }
-          },
-          {
-            name: "",
-            type: "value",
-            nameTextStyle: {
-              color: "#333"
-            },
-            axisLabel: {
-              formatter: "{value}"
-            },
-            axisTick: {
-              show: false
-            }
-          }
-        ],
-        series: [
-          {
-            type: "bar",
-            data: [289, 430, 350, 375, 374, 204, 300, 194, 184],
-            smooth: true, //绾挎潯骞虫粦
-            animationDuration: 2800,
-            animationEasing: "quadraticOut"
-          },
-          {
-            type: "line",
-            yAxisIndex: 1,
-            data: [289, 430, 350, 375, 374, 204, 300, 194, 184],
-            animationDuration: 2800,
-            animationEasing: "quadraticOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyPlan/energyForecast/energyForecast.vue b/energy_management_ui/src/views/energyPlan/energyForecast/energyForecast.vue
deleted file mode 100644
index 8a9ad47..0000000
--- a/energy_management_ui/src/views/energyPlan/energyForecast/energyForecast.vue
+++ /dev/null
@@ -1,291 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item>
-        <el-radio v-model="radio" label="1">鎸夋棩</el-radio>
-        <el-radio v-model="radio" label="2">鎸夋湀</el-radio>
-      </el-form-item>
-      <el-form-item>
-        <el-select v-model="value" placeholder="璇烽�夋嫨">
-          <el-option
-            v-for="item in options"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value"
-          >
-          </el-option>
-        </el-select>
-        <el-select v-model="values" placeholder="璇烽�夋嫨">
-          <el-option
-            v-for="item in optionList"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value"
-          >
-          </el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini"
-          >棰勬祴</el-button
-        >
-        <el-button icon="el-icon-refresh" size="mini">瀵煎嚭</el-button>
-      </el-form-item>
-    </el-form>
-    <el-row style="padding:16px 16px 0;margin-bottom:32px;">
-      <line-chart />
-    </el-row>
-    <div>
-      <span>缁熻鑼冨洿锛氬叏鍘�</span>
-      <span style="float: right;">缁熻鍖洪棿锛歿{ times }}</span>
-    </div>
-    <el-table
-      :data="energyEenchmarkingList"
-      @selection-change="handleSelectionChange"
-    >
-      <el-table-column prop="date" align="center" label="鏃ユ湡" width="150" />
-      <el-table-column label="璁″垝浜ч噺" align="center">
-        <el-table-column label="浜у搧绉嶇被" align="center" prop="cpname" />
-        <el-table-column label="璁¢噺鍗曚綅" align="center" prop="jldw" />
-        <el-table-column label="璁″垝浜ч噺" align="center" prop="jhcl" />
-      </el-table-column>
-      <el-table-column label="棰勬祴鑳借��" align="center">
-        <el-table-column label="鐢�" align="center" prop="dian" />
-        <el-table-column label="姘�" align="center" prop="shui" />
-        <el-table-column label="钂告苯" align="center" prop="zq" />
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-import LineChart from "./LineChart";
-export default {
-  components: {
-    LineChart
-  },
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      radio: "1",
-      value: "",
-      values: "",
-      options: [
-        {
-          value: "閫夐」1",
-          label: "鏈潵涓夊ぉ"
-        },
-        {
-          value: "閫夐」2",
-          label: "鏈潵浜斿ぉ"
-        },
-        {
-          value: "閫夐」3",
-          label: "鏈潵涓冨ぉ"
-        }
-      ],
-      optionList: [
-        {
-          value: "閫夐」1",
-          label: "鐢佃��"
-        },
-        {
-          value: "閫夐」2",
-          label: "姘磋��"
-        }
-      ],
-      // energy_benchmarking琛ㄦ牸鏁版嵁
-      energyEenchmarkingList: [
-        {
-          date: "2020-11-20",
-          cpname: "鐓ゆ皵",
-          jldw: "绔嬫柟绫�",
-          jhcl: "12212121",
-          dian: "99",
-          shui: "20",
-          zq: "60",
-          createBy: null,
-          createTime: "",
-          updateBy: null,
-          updateTime: null,
-          remark: ""
-        },
-        {
-          date: "2020-11-20",
-          cpname: "绮楄嫰",
-          jldw: "鍚�",
-          jhcl: "22212",
-          dian: "79",
-          shui: "26",
-          zq: "50",
-          createBy: null,
-          createTime: "",
-          updateBy: null,
-          updateTime: null,
-          remark: ""
-        },
-        {
-          date: "2020-11-20",
-          cpname: "鐒︽补",
-          jldw: "鍚�",
-          jhcl: "1211212",
-          dian: "109",
-          shui: "30",
-          zq: "85",
-          createBy: null,
-          createTime: "",
-          updateBy: null,
-          updateTime: null,
-          remark: ""
-        }
-      ],
-      // 寮瑰嚭灞傛爣棰�
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined,
-        modelNode: ""
-      },
-      times: ""
-    };
-  },
-  created() {
-    this.getTime();
-  },
-  methods: {
-    getTime() {
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      this.times = year + "-" + month + "-" + date;
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      //this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    }
-  }
-};
-</script>
-<style lang="scss" scoped>
-.dashboard-editor-container {
-  padding: 32px;
-  background-color: rgb(240, 242, 245);
-  position: relative;
-
-  .chart-wrapper {
-    background: #fff;
-    padding: 16px 16px 0;
-    margin-bottom: 32px;
-  }
-}
-
-@media (max-width: 1024px) {
-  .chart-wrapper {
-    padding: 8px;
-  }
-}
-.live {
-  position: fixed;
-  right: 0px;
-  top: 70px;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  width: 100px;
-  height: 60px;
-  background-color: red;
-  animation: fade 600ms infinite;
-  -webkit-animation: fade 600ms infinite;
-}
-.live_content {
-  font-size: 18px;
-  color: white;
-  font-weight: bold;
-}
-.live_number {
-  font-size: 32px;
-  color: white;
-  font-weight: bolder;
-}
-@keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-@-webkit-keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/energyPlan/energyForecast/index.vue b/energy_management_ui/src/views/energyPlan/energyForecast/index.vue
deleted file mode 100644
index 3d017b2..0000000
--- a/energy_management_ui/src/views/energyPlan/energyForecast/index.vue
+++ /dev/null
@@ -1,84 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="鑳芥簮棰勬祴" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :modelCode="modelCode"
-            :showOpt="false"
-            :auth="false"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <basic-container :bodyStyle="bodyStyleRight">
-          <energyForecast
-            ref="energyForecast"
-            style="padding:10px"
-          ></energyForecast>
-        </basic-container>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import energyForecast from "./energyForecast";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from "@/components/shrink/index.vue";
-
-export default {
-  components: { ModelNode, energyForecast, ShrinkCol },
-  mixins: [mixins],
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  data() {
-    return {
-      modelCode: undefined,
-      isCollapse: false,
-      bodyStyleRight: {}
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 130 + "px"
-      };
-    },
-    changeNode: function(node) {
-      //this.$refs.EnergyActual.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyPlan/energyMonitoring/LineChart.vue b/energy_management_ui/src/views/energyPlan/energyMonitoring/LineChart.vue
deleted file mode 100644
index 5290b98..0000000
--- a/energy_management_ui/src/views/energyPlan/energyMonitoring/LineChart.vue
+++ /dev/null
@@ -1,139 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons");
-import resize from "../../dashboard/mixins/resize";
-const animationDuration = 6000;
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    chartData: {
-      type: Object
-    }
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  data() {
-    return {
-      chart: null,
-      seriesData: []
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, expecteData } = {}) {
-      this.chart.setOption({
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        title: {
-          x: "center",
-          y: "top",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        grid: {
-          top: 40,
-          left: "2%",
-          right: "2%",
-          bottom: "3%",
-          containLabel: true
-        },
-        /*legend: {
-            data:['',''],
-            left: '60%',
-          },*/
-        xAxis: [
-          {
-            type: "category",
-            data: actualData,
-            axisPointer: {
-              type: "shadow"
-            }
-          }
-        ],
-        yAxis: [
-          {
-            //name: '缁煎悎鑳借��',
-            type: "value",
-            nameTextStyle: {
-              color: "#333"
-            },
-            axisLabel: {
-              formatter: "{value}"
-            },
-            axisTick: {
-              show: false
-            }
-          }
-        ],
-        series: [
-          {
-            //name:"缁煎悎鑳借��",
-            type: "bar",
-            data: expectedData,
-            //stack: 'vistors',
-            animationDuration: 2800,
-            animationEasing: "quadraticOut"
-          },
-          {
-            //name:"鑳芥簮鍗犳瘮",
-            type: "bar",
-            data: expecteData,
-            animationDuration: 2800,
-            animationEasing: "quadraticOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyPlan/energyMonitoring/energyMonitoring.vue b/energy_management_ui/src/views/energyPlan/energyMonitoring/energyMonitoring.vue
deleted file mode 100644
index 11f963a..0000000
--- a/energy_management_ui/src/views/energyPlan/energyMonitoring/energyMonitoring.vue
+++ /dev/null
@@ -1,213 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item label="鎶ヨ〃绫诲瀷">
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio
-            v-for="dict in dateTypeOptions"
-            :key="dict.dictValue"
-            :label="dict.dictValue"
-            @change="handleTime(dict.dictValue)"
-            >{{ dict.dictLabel }}</el-radio
-          >
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item label="缁熻鍖洪棿">
-        <el-date-picker
-          clearable
-          size="small"
-          style="width: 200px"
-          v-model="queryParams.dataTime"
-          :type="dateTypes"
-          :value-format="valueFormat"
-          placeholder="閫夋嫨鏃ユ湡"
-        >
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >鎼滅储</el-button
-        >
-      </el-form-item>
-    </el-form>
-    <el-row style="padding:16px 16px 0;margin-bottom:32px;">
-      <line-chart ref="LineChart" :chart-data="lineChartData" />
-    </el-row>
-    <el-table
-      :data="energyEenchmarkingList"
-      @selection-change="handleSelectionChange"
-    >
-      <el-table-column prop="label" align="center" label="鐢ㄨ兘鍗曞厓">{{
-        label
-      }}</el-table-column>
-      <el-table-column label="浜у搧浜ч噺" align="center">
-        <el-table-column label="浜у搧绉嶇被" align="center" prop="productname" />
-        <el-table-column
-          label="璁¢噺鍗曚綅"
-          align="center"
-          prop="muid"
-          :formatter="unitIdFormat"
-        />
-        <el-table-column label="璁″垝鍊�" align="center" prop="planValue" />
-        <el-table-column label="瀹為檯鍊�" align="center" prop="actualValue" />
-      </el-table-column>
-      <el-table-column label="鐢碉紙鍗冪摝鏃讹級" align="center">
-        <el-table-column label="璁″垝鍊�" align="center" prop="poValue" />
-        <el-table-column label="瀹為檯鍊�" align="center" prop="peValue" />
-      </el-table-column>
-      <el-table-column label="姘达紙绔嬫柟绫筹級" align="center">
-        <el-table-column label="璁″垝鍊�" align="center" prop="poWaterValue" />
-        <el-table-column label="瀹為檯鍊�" align="center" prop="peWaterValue" />
-      </el-table-column>
-      <el-table-column label="鐓ゆ皵锛堢珛鏂圭背锛�" align="center">
-        <el-table-column label="璁″垝鍊�" align="center" prop="poCoalValue" />
-        <el-table-column label="瀹為檯鍊�" align="center" prop="peCoalValue" />
-      </el-table-column>
-      <el-table-column label="钂告苯锛堢珛鏂圭背锛�" align="center">
-        <el-table-column label="璁″垝鍊�" align="center" prop="poSteamValue" />
-        <el-table-column label="瀹為檯鍊�" align="center" prop="peSteamValue" />
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-import { listEnergyMonitoring } from "@/api/plannedOutput/energyMonitoring";
-import LineChart from "./LineChart";
-export default {
-  components: { LineChart },
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      radio: "1",
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-
-      // energy_benchmarking琛ㄦ牸鏁版嵁
-      energyEenchmarkingList: [],
-      dateTypeOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        dataTime: undefined,
-        timeType: "DAY"
-      },
-      dateTypes: "date",
-      valueFormat: "yyyy-MM-dd",
-      label: "",
-      lineChartData: { expectedData: [], actualData: [], expecteData: [] }
-    };
-  },
-  created() {
-    this.getTime();
-    this.getDicts("sys_unit").then(response => {
-      this.unitIdOptions = response.data;
-    });
-    this.getDicts("energyPlan").then(response => {
-      this.dateTypeOptions = response.data;
-      this.queryParams.timeType = this.dateTypeOptions.find(
-        f => f.isDefault === "Y"
-      ).dictValue;
-    });
-  },
-  methods: {
-    modelNodeChange(modelNode) {
-      this.queryParams.indexCode = modelNode.id;
-      this.label = modelNode.label;
-      this.getList(this.queryParams);
-    },
-    getList() {
-      this.loading = true;
-      listEnergyMonitoring(this.queryParams).then(response => {
-        this.energyEenchmarkingList = response.data;
-        let actualData = [];
-        let expectedData = [];
-        let expecteData = [];
-        this.energyEenchmarkingList.forEach(item => {
-          actualData.push(item.productname);
-          expectedData.push(item.planValue);
-          expecteData.push(item.actualValue);
-        });
-        this.lineChartData.actualData = actualData;
-        this.lineChartData.expectedData = expectedData;
-        this.lineChartData.expecteData = expecteData;
-        this.$refs.LineChart.initChart(this.lineChartData);
-      });
-    },
-    // 鍗曚綅瀛楀吀缈昏瘧
-    unitIdFormat(row, column) {
-      return this.selectDictLabel(this.unitIdOptions, row.muid);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    },
-    handleTime(date) {
-      if (date == "YEAR") {
-        (this.dateTypes = "year"), (this.valueFormat = "yyyy");
-      } else if (date == "MONTH") {
-        (this.dateTypes = "month"), (this.valueFormat = "yyyy-MM");
-      } else {
-        (this.dateTypes = "date"), (this.valueFormat = "yyyy-MM-dd");
-      }
-    },
-    getTime() {
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      this.queryParams.dataTime = year + "-" + month + "-" + date;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyPlan/energyMonitoring/index.vue b/energy_management_ui/src/views/energyPlan/energyMonitoring/index.vue
deleted file mode 100644
index 358aeff..0000000
--- a/energy_management_ui/src/views/energyPlan/energyMonitoring/index.vue
+++ /dev/null
@@ -1,83 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="璁″垝浜庡疄闄呭姣斿垎鏋�" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :modelCode="modelCode"
-            :showOpt="false"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <basic-container :bodyStyle="bodyStyleRight">
-          <energyMonitoring
-            ref="energyMonitoring"
-            style="padding:10px"
-          ></energyMonitoring>
-        </basic-container>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import energyMonitoring from "./energyMonitoring";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from "@/components/shrink/index.vue";
-export default {
-  mixins: [mixins],
-  components: { ModelNode, energyMonitoring, ShrinkCol },
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  data() {
-    return {
-      modelCode: undefined,
-      isCollapse: false,
-      bodyStyleRight: {}
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 130 + "px"
-      };
-    },
-    changeNode: function(node) {
-      this.$refs.energyMonitoring.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyPlan/plannedOutput/EnergyPlan.vue b/energy_management_ui/src/views/energyPlan/plannedOutput/EnergyPlan.vue
deleted file mode 100644
index 164b291..0000000
--- a/energy_management_ui/src/views/energyPlan/plannedOutput/EnergyPlan.vue
+++ /dev/null
@@ -1,186 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鎶ヨ〃绫诲瀷">
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio v-for="dict in dateTypeOptions" :key="dict.dictValue" :label="dict.dictValue">{{dict.dictLabel}}</el-radio>
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item label="缁熻鍖洪棿" prop="dataTime">
-        <el-date-picker clearable size="small" style="width: 200px"
-                        v-model="queryParams.dataTime"
-                        type="date"
-                        value-format="yyyy-MM-dd"
-                        placeholder="閫夋嫨鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd">淇濆瓨淇敼</el-button>
-      </el-form-item>
-    </el-form>
-    <el-form refs="form" :model="form" >
-      <el-table :data="energyEenchmarkingList" @selection-change="handleSelectionChange" ref="multipleTable">
-        <el-table-column type="selection" width="55" align="center"/>
-        <el-table-column label="鍗曚綅鍚嶇О" align="center" prop="label">{{label}}</el-table-column>
-        <el-table-column label="浜у搧鍚嶇О" align="center" prop="productname"/>
-        <el-table-column label="璁¢噺鍗曚綅" align="center" prop="muid" :formatter="unitIdFormat"/>
-        <el-table-column label="璁″垝浜ч噺" align="center" prop="planValue">
-          <template scope="scope">
-            <el-input size="mini"  v-model="scope.row.planValue"></el-input>
-          </template>
-        </el-table-column>
-        <el-table-column label="璁″垝鐢电敤閲�" align="center" prop="value">
-          <template scope="scope">
-            <el-input size="mini"  v-model="scope.row.value"></el-input>
-          </template>
-        </el-table-column>
-        <el-table-column label="璁″垝姘寸敤閲�" align="center" prop="waterValue">
-          <template scope="scope">
-            <el-input size="mini"  v-model="scope.row.waterValue"></el-input>
-          </template>
-        </el-table-column>
-        <el-table-column label="璁″垝鐓ゆ皵鐢ㄩ噺" align="center" prop="coalValue">
-          <template scope="scope">
-            <el-input size="mini"  v-model="scope.row.coalValue"></el-input>
-          </template>
-        </el-table-column>
-        <el-table-column label="璁″垝钂告苯鐢ㄩ噺" align="center" prop="steamValue">
-          <template scope="scope">
-            <el-input size="mini"  v-model="scope.row.steamValue"></el-input>
-          </template>
-        </el-table-column>
-      </el-table>
-    </el-form>
-  </div>
-</template>
-
-<script>
-  import {getSettingProduct} from '@/api/basicsetting/modelNode'
-  import { listPlannedOutput, getPlannedOutput, delPlannedOutput, addPlannedOutput, updatePlannedOutput, exportPlannedOutput } from "@/api/plannedOutput/plannedOutput";
-
-  export default {
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // energy_benchmarking琛ㄦ牸鏁版嵁
-      energyEenchmarkingList:[],
-      dateTypeOptions:[],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        timeType:"DAY",
-        dataTime:undefined,
-        planValue:"",
-      },
-      label:"",
-      unitIdOptions:[],
-      form:{},
-    };
-  },
-  created() {
-    this.getTime();
-    this.getDicts("sys_unit").then(response => {
-      this.unitIdOptions = response.data;
-    });
-    this.getDicts("energyPlan").then(response => {
-      this.dateTypeOptions = response.data;
-      this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-    });
-  },
-  methods: {
-    modelNodeChange(modelNode) {
-      this.queryParams.indexCode=modelNode.id;
-      this.label=modelNode.label
-      this.getList(this.queryParams)
-    },
-    getList() {
-      this.loading = true;
-      this.queryParams.planValue=this.queryParams.timeType
-      listPlannedOutput(this.queryParams).then(response => {
-        this.energyEenchmarkingList=response.data
-      });
-    },
-
-    // 鍗曚綅瀛楀吀缈昏瘧
-    unitIdFormat(row, column) {
-      return this.selectDictLabel(this.unitIdOptions, row.muid);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList(this.queryParams);
-    },
-    handleAdd(){
-      this.$nextTick(() => {
-        this.$refs['multipleTable'].data.forEach(rowData => {
-          if(rowData.timeType =="" || rowData.timeTyp ==null || rowData.timeTyp ==undefined){
-            rowData.timeType=this.queryParams.timeType
-            rowData.palnType=this.queryParams.timeType
-          }
-          rowData.dataTime=this.queryParams.dataTime
-        });
-        this.form.configInfo=JSON.stringify( this.$refs['multipleTable'].data);
-        console.log(this.form.configInfo)
-        addPlannedOutput(this.form.configInfo).then(response => {
-          if (response.code === 200) {
-            this.msgSuccess("淇濆瓨璁″垝浜ч噺鎴愬姛");
-            this.getList();
-          } else {
-            this.msgError(response.msg);
-          }
-        })
-      });
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    getTime(){
-      var date = new Date()
-      var year = date.getFullYear()
-      var month = date.getMonth() + 1
-      var date = date.getDate()
-      month = month < 10 ? '0' + month : month
-      date = date < 10 ? '0' + date : date
-      this.queryParams.dataTime = year + '-' + month + '-' + date
-    },
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyPlan/plannedOutput/index.vue b/energy_management_ui/src/views/energyPlan/plannedOutput/index.vue
deleted file mode 100644
index 04c29b8..0000000
--- a/energy_management_ui/src/views/energyPlan/plannedOutput/index.vue
+++ /dev/null
@@ -1,79 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="璁″垝浜ч噺" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :modelCode="modelCode"
-            :showOpt="false"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <basic-container :bodyStyle="bodyStyleRight">
-          <EnergyPlan ref="EnergyPlan" style="padding:10px"></EnergyPlan>
-        </basic-container>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import EnergyPlan from "./EnergyPlan";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from "@/components/shrink/index.vue";
-export default {
-  mixins: [mixins],
-  components: { ModelNode, EnergyPlan, ShrinkCol },
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  data() {
-    return {
-      modelCode: undefined,
-      isCollapse: false,
-      bodyStyleRight: {}
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 130 + "px"
-      };
-    },
-    changeNode: function(node) {
-      this.$refs.EnergyPlan.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyPrice/index copy.vue b/energy_management_ui/src/views/energyPrice/index copy.vue
deleted file mode 100644
index e69de29..0000000
--- a/energy_management_ui/src/views/energyPrice/index copy.vue
+++ /dev/null
diff --git a/energy_management_ui/src/views/energyPrice/index.vue b/energy_management_ui/src/views/energyPrice/index.vue
deleted file mode 100644
index 2d1662c..0000000
--- a/energy_management_ui/src/views/energyPrice/index.vue
+++ /dev/null
@@ -1,559 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form
-        :model="queryParams"
-        ref="queryForm"
-        label-width="72px"
-        class="special-form"
-      >
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="绛栫暐鍚嶇О" prop="name">
-              <el-input
-                v-model="queryParams.name"
-                placeholder="璇疯緭鍏ョ瓥鐣ュ悕绉�"
-                clearable
-                size="small"
-                @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="18">
-            <el-form-item class="operation">
-              <el-button
-                type="primary"
-                icon="el-icon-search"
-                size="mini"
-                @click="handleQuery"
-                >鎼滅储</el-button
-              >
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-                >閲嶇疆</el-button
-              >
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-            type="primary"
-            icon="el-icon-plus"
-            size="mini"
-            @click="handleAdd"
-            >鏂板
-          </el-button>
-        </el-col>
-      </el-row>
-      <el-table
-        v-loading="loading"
-        :data="tableData"
-        :height="height"
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column
-          label="璁¤垂绛栫暐鍚嶇О"
-          prop="name"
-          :show-overflow-tooltip="true"
-        />
-        <!-- <el-table-column label="灏栬垂鐢�" prop="sharpFee" />
-        <el-table-column label="宄拌垂鐢�" prop="peakFee" />
-        <el-table-column label="骞宠垂鐢�" prop="flatFee" />
-        <el-table-column label="璋疯垂鐢�" prop="valleyFee" /> -->
-        <el-table-column label="鏄惁鐢熸晥" prop="effective" align="center">
-          <template slot-scope="scope">
-            {{ scope.row.effective ? "鏄�" : "鍚�" }}
-          </template>
-        </el-table-column>
-        <el-table-column label="鐢熸晥鏃堕棿" prop="effectiveDate" align="center" />
-        <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime">
-        </el-table-column>
-        <el-table-column
-          label="鎿嶄綔"
-          align="center"
-          width="240"
-          class-name="small-padding fixed-width"
-        >
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="handleUpdate(scope.row)"
-              >淇敼
-            </el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-    </basic-container>
-    <!-- 娣诲姞鎴栦慨鏀�-->
-    <el-dialog
-      :title="title"
-      :visible.sync="open"
-      width="1000px"
-      class="dialog-form-row"
-    >
-      <el-form ref="form" :model="form" :rules="rules" label-width="150px">
-        <el-form-item class="nav-form-item" label="璁¤垂绛栫暐鍚嶇О" prop="name">
-          <el-input
-            maxlength="20"
-            v-model="form.name"
-            style="width: 425px"
-            placeholder="璇疯緭鍏ヨ璐圭瓥鐣ュ悕绉�"
-            clearable
-          />
-        </el-form-item>
-        <el-form-item
-          class="nav-form-item"
-          label="鐢熸晥鏃堕棿"
-          prop="effectiveDate"
-        >
-          <el-date-picker
-            clearabl
-            style="width: 425px"
-            v-model="form.effectiveDate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="閫夋嫨鐢熸晥鏃堕棿"
-          >
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item class="nav-form-item" label="澶囨敞淇℃伅" prop="remark">
-          <el-input
-            type="textarea"
-            maxlength="200"
-            v-model="form.remark"
-            style="width: 425px"
-            placeholder="璇疯緭鍏ュ娉ㄤ俊鎭�"
-          />
-        </el-form-item>
-        <el-form-item class="nav-form-item" label="鐢佃垂锛堝厓/搴︼級">
-          <el-row
-            v-for="(item, index) in priceTypeList"
-            :key="index"
-            style="margin-bottom: 5px"
-          >
-            <el-tag
-              :style="
-                'margin-right: 20px;color: #fff;background-color: ' +
-                  item.cor +
-                  ';border-color:' +
-                  item.cor
-              "
-              >{{ item.txt }}</el-tag
-            >
-            <el-input-number
-              v-model="item.price"
-              controls-position="right"
-              :min="0.0"
-              :max="10"
-              :step="0.1"
-              style="width: 200px; margin-right: 10px"
-            ></el-input-number>
-          </el-row>
-          <div class="tipmincc" style="color: #fff;font-size: 13px;">
-            锛堝嘲銆佸钩銆佽胺鏃舵浠锋牸鍧囦负蹇呭~椤广�傚洜鍚勫湴鐢典环涓嶅悓锛岃鏍规嵁褰撳湴瀹為檯鐢典环濉啓銆傦級
-          </div>
-        </el-form-item>
-        <el-form-item class="nav-form-item" label="鏃舵璁剧疆">
-          <el-row>
-            <el-button
-              v-for="(item, index) in priceTypeList"
-              :key="index"
-              :style="
-                'margin-right: 20px;color: #fff;margin-top: 5px;margin-bottom: 20px;background-color: ' +
-                  item.cor +
-                  ';border-color:' +
-                  item.cor
-              "
-              @click="setTimeType(item.priceType)"
-            >
-              璁剧疆涓簕{ item.txt }}
-            </el-button>
-          </el-row>
-          <el-row>
-            <div style="display: flex; flex-wrap: wrap">
-              <div
-                class="time-item"
-                v-for="time in timePeriodList"
-                :key="time.value"
-                @click="time.selected = !time.selected"
-              >
-                <img
-                  class="sel-img"
-                  v-if="time.selected"
-                  src="@/assets/icons/checked.png"
-                  alt=""
-                />
-                <img
-                  class="sel-img"
-                  v-else
-                  src="@/assets/icons/checkbox.png"
-                  alt=""
-                />
-                <div
-                  :style="
-                    'color:#fff;background-color: ' +
-                      colorArray[time.priceType] +
-                      ';border-color:' +
-                      colorArray[time.priceType]
-                  "
-                  class="time-type-div"
-                >
-                  {{ txtArray[time.priceType] }}
-                </div>
-                <div style="color: #b1a2a2;">{{ time.time }}</div>
-              </div>
-            </div>
-          </el-row>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-const txtArray = ["", "灏�", "宄�", "骞�", "璋�"];
-const colorArray = ["", "#f56c6c", "#e6a23c", "#67c23a", "#909399"];
-
-import ruleApi from "@/api/energyPrice/price";
-import { getTimePeriod } from "@/utils/index";
-import mixins from "@/layout/mixin/getHeight";
-import moment from "moment";
-export default {
-  name: "energyPrice",
-  mixins: [mixins],
-  data() {
-    return {
-      txtArray,
-      colorArray,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 閫変腑鏁扮粍
-      codes: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 璁¢噺鍣ㄥ叿妗f缁存姢琛ㄦ牸鏁版嵁
-      tableData: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-
-      priceTypeList: [
-        {
-          id: "",
-          priceType: 1,
-          price: 1,
-          servicePrice: 0.8,
-          parkFee: 1,
-          occupancyFee: 1,
-          txt: "灏栨椂娈�",
-          cor: "#f56c6c"
-        },
-        {
-          id: "",
-          priceType: 2,
-          price: 1,
-          servicePrice: 0.8,
-          parkFee: 1,
-          occupancyFee: 1,
-          txt: "宄版椂娈�",
-          cor: "#e6a23c"
-        },
-        {
-          id: "",
-          priceType: 3,
-          price: 1,
-          servicePrice: 0.8,
-          parkFee: 1,
-          occupancyFee: 1,
-          txt: "骞虫椂娈�",
-          cor: "#67c23a"
-        },
-        {
-          id: "",
-          priceType: 4,
-          price: 1,
-          servicePrice: 0.8,
-          parkFee: 1,
-          occupancyFee: 1,
-          txt: "璋锋椂娈�",
-          cor: "#909399"
-        }
-      ],
-      // 鐢ㄦ埛瀵煎叆鍙傛暟
-      height: null,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        code: undefined,
-        meterName: undefined,
-        meterType: undefined,
-        measureRange: undefined,
-        manufacturer: undefined,
-        installactionLocation: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      timePeriodList: [],
-      form: {
-        sum: 0,
-        remark: "",
-        ruleType: "",
-        name: "",
-        effectiveDate: "",
-        priceList: []
-      },
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        name: [
-          { required: true, message: "璁¤垂绛栫暐鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
-        ]
-      }
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 220 + "px",
-        overflow: "hidden"
-      };
-      this.height = window.innerHeight - 340;
-    },
-    /** 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃 */
-    getList() {
-      this.loading = true;
-      ruleApi.pageRule(this.queryParams).then(response => {
-        this.tableData = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        name: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id);
-      this.codes = selection.map(item => item.code);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞璁¤垂绛栫暐";
-      this.form.name = "";
-      this.timePeriodList = [];
-      for (let i = 1; i < 49; i++) {
-        this.timePeriodList.push({
-          value: i,
-          time: getTimePeriod(i),
-          priceType: 1,
-          selected: false
-        });
-      }
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id;
-      ruleApi.getRuleDetail({ id }).then(response => {
-        let typeNameArr = ["sharp", "peak", "flat", "valley"];
-        let typeArr = ["SHARP", "PEAK", "FLAT", "VALLEY"];
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼璁¤垂绛栫暐";
-        let ruleDetailList = response.data.ruleDetailList;
-        this.timePeriodList = ruleDetailList.map(item => {
-          return {
-            ...item,
-            value: item.timePeriod,
-            time: getTimePeriod(item.timePeriod),
-            priceType: typeArr.indexOf(item.type) + 1,
-            selected: false,
-            id: item.id
-          };
-        });
-        this.priceTypeList.forEach((item, index) => {
-          item.price = response.data[typeNameArr[index] + "Fee"];
-          item.occupancyFee =
-            response.data[typeNameArr[index] + "OccupancyFee"];
-          item.parkFee = response.data[typeNameArr[index] + "ParkingFee"];
-          item.servicePrice = response.data[typeNameArr[index] + "ServiceFee"];
-        });
-      });
-    },
-    setTimeType(type) {
-      let arr = this.timePeriodList.filter(f => {
-        return f.selected;
-      });
-      if (arr.length === 0) {
-        this.msgWarning("璇疯嚦灏戦�夋嫨涓�涓椂娈�");
-        return;
-      }
-      arr.forEach(element => {
-        element.priceType = type;
-        element.selected = false;
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      let typeArr = ["SHARP", "PEAK", "FLAT", "VALLEY"];
-      // SHARP( "灏�"),
-      // PEAK("宄�"),
-      // FLAT("骞�"),
-      // VALLEY( "璋�");
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          let params = {
-            name: this.form.name,
-            id: this.form.id,
-            remark: this.form.remark,
-            effectiveDate: moment(this.form.effectiveDate).format("yyyy-MM-DD"),
-            sharpFee: this.priceTypeList[0].price, //灏栨椂娈�
-            peakFee: this.priceTypeList[1].price, //宄版椂娈�
-            flatFee: this.priceTypeList[2].price, //骞虫椂娈�
-            valleyFee: this.priceTypeList[3].price, //璋锋椂娈�
-            ruleDetailList: this.timePeriodList.map(item => {
-              return {
-                timePeriod: item.value,
-                type: typeArr[item.priceType - 1],
-                id: item.id || ""
-              };
-            })
-          };
-          if (this.form.id != undefined) {
-            ruleApi.editRule(params).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            ruleApi.addRule(params).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const id = row.id;
-      const name = row.name;
-      this.$confirm('鏄惁纭鍒犻櫎"' + name + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return ruleApi.delRule({ id });
-        })
-        .then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        })
-        .catch(function() {});
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-
-.dialog-form-row {
-  .el-row {
-    margin-bottom: 0;
-  }
-}
-::v-deep .el-dialog__body {
-  height: 75vh;
-  overflow: hidden;
-  overflow-y: auto;
-}
-.time-item {
-  margin-right: 12px;
-  border: 1px solid #eaeaea;
-  border-radius: 4px;
-  text-align: center;
-  margin-bottom: 12px;
-  width: 100px;
-  position: relative;
-  cursor: pointer;
-  .time-type-div {
-    border-radius: 4px 4px 0 0;
-  }
-  .sel-img {
-    position: absolute;
-    width: 15px;
-    height: 15px;
-    background: #fff;
-    border-radius: 2px;
-    left: 6px;
-    top: 6px;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/energySaving/emissionReduction/emissionReduction.vue b/energy_management_ui/src/views/energySaving/emissionReduction/emissionReduction.vue
deleted file mode 100644
index 76c451f..0000000
--- a/energy_management_ui/src/views/energySaving/emissionReduction/emissionReduction.vue
+++ /dev/null
@@ -1,131 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="缁熻鍖洪棿">
-        <el-date-picker
-          type="daterange"
-          range-separator="鑷�"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini">鎼滅储</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-table :data="energyEenchmarkingList">
-      <el-table-column label="鑺傝兘閲忥紙鍚ㄦ爣鐓わ級" align="center" prop="jnl"/>
-      <el-table-column label="鑺傛按閲忥紙鍚級" align="center" prop="jsl"/>
-      <el-table-column label="鍑忔帓閲忥紙鍚級" align="center" prop="jpl"/>
-    </el-table>
-    <div style="margin: 20px;text-align: center;font-weight: 600;">
-      <span>鑺傝兘閲�</span>
-    </div>
-    <el-table :data="energyList">
-      <el-table-column label="鍩烘湰鍗曚綅浜у�肩患鍚堣兘鑰楋紙涓婂勾锛�" align="center" prop="jnczzh"/>
-      <el-table-column label="鎶ュ憡鏈熷崟浣嶄骇鍊肩患鍚堣兘鑰楋紙褰撳勾锛屽惃鏍囩叅姣忎竾鍏冿級" align="center" prop="jnbg1czzh"/>
-      <el-table-column label="鎶ュ憡鏈熷伐涓氭�讳骇鍊硷紙褰撳勾锛屼竾鍏冿級" align="center" prop="jngyzz"/>
-      <el-table-column label="鎶ュ憡鏈熺患鍚堣兘鑰楁�婚噺锛堝綋骞达紝鍚ㄦ爣鐓わ級" align="center" prop="jnzhnh"/>
-      <el-table-column label="鎶ュ憡鏈熻妭鑳介噺锛堝綋骞达紝鍚ㄦ爣鐓わ級" align="center" prop="jnjnl"/>
-      <el-table-column label="鎶ュ憡鏈熻妭鑳界⒊鍑忔帓閲忥紙褰撳勾锛屽惃纰筹級" align="center" prop="jntjp"/>
-    </el-table>
-    <div style="margin: 20px;text-align: center;font-weight: 600;">
-      <span>鑺傛按閲�</span>
-    </div>
-    <el-table :data="waterList">
-      <el-table-column label="鍩烘湰鍗曚綅浜у�艰�楁按閲忥紙涓婂勾锛�" align="center" prop="jszhsl"/>
-      <el-table-column label="鎶ュ憡鏈熷崟浣嶄骇鍊艰�楁按閲忥紙褰撳勾锛屽惃鏍囩叅姣忎竾鍏冿級" align="center" prop="jsdwzhsl"/>
-      <el-table-column label="鎶ュ憡鏈熷伐涓氭�讳骇鍊硷紙褰撳勾锛屼竾鍏冿級" align="center" prop="jsgyzz"/>
-      <el-table-column label="鎶ュ憡鏈熺患鍚堣�楁按鎬婚噺锛堝綋骞达紝鍚ㄦ爣鐓わ級" align="center" prop="jszhhsl"/>
-      <el-table-column label="鎶ュ憡鏈熻妭姘撮噺锛堝綋骞达紝鍚ㄦ爣鐓わ級" align="center" prop="jsjsl"/>
-      <el-table-column label="鎶ュ憡鏈熻妭姘寸⒊鍑忔帓閲忥紙褰撳勾锛屽惃纰筹級" align="center" prop="jstjp"/>
-    </el-table>
-  </div>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      radio: '1',
-
-      // energy_benchmarking琛ㄦ牸鏁版嵁
-      energyEenchmarkingList:[{
-        "jnl": "54.58",
-        "jsl": "6.87",
-        "jnl":"75.58",
-        "createBy": null,
-        "createTime": "",
-        "updateBy": null,
-        "updateTime": null,
-        "remark": "",
-      }],
-      energyList:[{"jnczzh":"0.00","jnbg1czzh":"0.00","jngyzz":"0.00","jnzhnh":"10.43","jnjnl":"54.58","jntjp":"67.13"}],
-      waterList:[{"jszhsl":"0.00","jsdwzhsl":"0.00","jsgyzz":"0.00","jszhhsl":"0.00","jsjsl":"0.00","jstjp":"0.00"}],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined,
-        modelNode:"",
-      },
-    };
-  },
-  created() {
-  },
-  methods: {
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.modelNodeChange();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energySaving/emissionReduction/index.vue b/energy_management_ui/src/views/energySaving/emissionReduction/index.vue
deleted file mode 100644
index f5c07cc..0000000
--- a/energy_management_ui/src/views/energySaving/emissionReduction/index.vue
+++ /dev/null
@@ -1,58 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" :width="isCollapse?'0px':'20%'">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            鑺傝兘鍑忔帓鍒嗘瀽
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode"
-                     :modelCode="modelCode"
-                     :showOpt="false"
-                     :auth="false"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <div style="cursor:pointer;" @click="toggleCollapse">
-          <img src="@/assets/image/configureChart.png" style="width: 100%;height: 100%">
-        </div>
-        <el-main style="padding:0">
-          <emissionReduction ref="emissionReduction" style="padding:10px"></emissionReduction>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import emissionReduction from "./emissionReduction";
-  import ModelNode from "../../basicsetting/modelNode/modelNode";
-
-  export default {
-    components: { ModelNode,emissionReduction},
-    created() {
-      this.modelCode=this.$route.query.modelCode;
-    },
-    data() {
-      return {
-        modelCode:undefined,
-        isCollapse: false,
-      }
-    },
-    methods: {
-      changeNode: function (node) {
-        //this.$refs.EnergyActual.modelNodeChange(node);
-      },
-      manageModel: function () {
-        this.$router.push('/model');
-      },
-      changeModel: function (item) {
-        this.$refs.modelNode.getList(item);
-      },
-      // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-      toggleCollapse () {
-        this.isCollapse = !this.isCollapse
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/energySaving/energyAnnex/energyAnnex.vue b/energy_management_ui/src/views/energySaving/energyAnnex/energyAnnex.vue
deleted file mode 100644
index 2d12113..0000000
--- a/energy_management_ui/src/views/energySaving/energyAnnex/energyAnnex.vue
+++ /dev/null
@@ -1,443 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鍏宠仈policy_regulations" prop="projectId">
-        <el-input
-          v-model="queryParams.projectId"
-          placeholder="璇疯緭鍏ュ叧鑱攑olicy_regulations"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鏂囦欢鍚�" prop="fileName">
-        <el-input
-          v-model="queryParams.fileName"
-          placeholder="璇疯緭鍏ユ枃浠跺悕"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鏂囦欢鍚庣紑" prop="fileSuffix">
-        <el-input
-          v-model="queryParams.fileSuffix"
-          placeholder="璇疯緭鍏ユ枃浠跺悗缂�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鏂囦欢璺緞" prop="filePath">
-        <el-input
-          v-model="queryParams.filePath"
-          placeholder="璇疯緭鍏ユ枃浠惰矾寰�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鍒犻櫎鏍囧織Y鍒犻櫎 N涓哄垹闄�" prop="delFlage">
-        <el-input
-          v-model="queryParams.delFlage"
-          placeholder="璇疯緭鍏ュ垹闄ゆ爣蹇梇鍒犻櫎 N涓哄垹闄�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="寤虹珛浜�" prop="createOperator">
-        <el-input
-          v-model="queryParams.createOperator"
-          placeholder="璇疯緭鍏ュ缓绔嬩汉"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="淇敼浜�" prop="updateOperator">
-        <el-input
-          v-model="queryParams.updateOperator"
-          placeholder="璇疯緭鍏ヤ慨鏀逛汉"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['energy:energyAnnex:add']"
-        >鏂板</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['energy:energyAnnex:edit']"
-        >淇敼</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['energy:energyAnnex:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['energy:energyAnnex:export']"
-        >瀵煎嚭</el-button>
-      </el-col>
-    </el-row>
-
-    <el-table v-loading="loading" :data="energyAnnexList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="鍏宠仈policy_regulations" align="center" prop="projectId" :formatter="projectIdFormat" />
-      <el-table-column label="鏂囦欢鍚�" align="center" prop="fileName" :formatter="fileNameFormat" />
-      <el-table-column label="鏂囦欢鍚庣紑" align="center" prop="fileSuffix" :formatter="fileSuffixFormat" />
-      <el-table-column label="鏂囦欢璺緞" align="center" prop="filePath" :formatter="filePathFormat" />
-      <el-table-column label="鍒犻櫎鏍囧織Y鍒犻櫎 N涓哄垹闄�" align="center" prop="delFlage" :formatter="delFlageFormat" />
-      <el-table-column label="寤虹珛浜�" align="center" prop="createOperator" :formatter="createOperatorFormat" />
-      <el-table-column label="淇敼浜�" align="center" prop="updateOperator" :formatter="updateOperatorFormat" />
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['energy:energyAnnex:edit']"
-          >淇敼</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['energy:energyAnnex:remove']"
-          >鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 娣诲姞鎴栦慨鏀硅妭鑳介」鐩鐞嗛檮浠跺璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="涓婚敭" prop="id">
-          <el-input v-model="form.id" placeholder="璇疯緭鍏ヤ富閿�" />
-        </el-form-item>
-        <el-form-item label="鍏宠仈policy_regulations" prop="projectId">
-          <el-input v-model="form.projectId" placeholder="璇疯緭鍏ュ叧鑱攑olicy_regulations" />
-        </el-form-item>
-        <el-form-item label="鏂囦欢鍚�" prop="fileName">
-          <el-input v-model="form.fileName" placeholder="璇疯緭鍏ユ枃浠跺悕" />
-        </el-form-item>
-        <el-form-item label="鏂囦欢鍚庣紑" prop="fileSuffix">
-          <el-input v-model="form.fileSuffix" placeholder="璇疯緭鍏ユ枃浠跺悗缂�" />
-        </el-form-item>
-        <el-form-item label="鏂囦欢璺緞" prop="filePath">
-          <el-input v-model="form.filePath" placeholder="璇疯緭鍏ユ枃浠惰矾寰�" />
-        </el-form-item>
-        <el-form-item label="鍒犻櫎鏍囧織Y鍒犻櫎 N涓哄垹闄�" prop="delFlage">
-          <el-input v-model="form.delFlage" placeholder="璇疯緭鍏ュ垹闄ゆ爣蹇梇鍒犻櫎 N涓哄垹闄�" />
-        </el-form-item>
-        <el-form-item label="寤虹珛浜�" prop="createOperator">
-          <el-input v-model="form.createOperator" placeholder="璇疯緭鍏ュ缓绔嬩汉" />
-        </el-form-item>
-        <el-form-item label="淇敼浜�" prop="updateOperator">
-          <el-input v-model="form.updateOperator" placeholder="璇疯緭鍏ヤ慨鏀逛汉" />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listEnergyAnnex, getEnergyAnnex, delEnergyAnnex, addEnergyAnnex, updateEnergyAnnex, exportEnergyAnnex } from "@/api/energy/energyAnnex";
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鑺傝兘椤圭洰绠$悊闄勪欢琛ㄦ牸鏁版嵁
-      energyAnnexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      idOptions: [],
-      // 鍏宠仈policy_regulations瀛楀吀
-      projectIdOptions: [],
-      // 鏂囦欢鍚嶅瓧鍏�
-      fileNameOptions: [],
-      // 鏂囦欢鍚庣紑瀛楀吀
-      fileSuffixOptions: [],
-      // 鏂囦欢璺緞瀛楀吀
-      filePathOptions: [],
-      // 鍒犻櫎鏍囧織Y鍒犻櫎 N涓哄垹闄ゅ瓧鍏�
-      delFlageOptions: [],
-      // 寤虹珛鏃堕棿瀛楀吀
-      createTimeOptions: [],
-      // 寤虹珛浜哄瓧鍏�
-      createOperatorOptions: [],
-      // 淇敼鏃ユ湡瀛楀吀
-      updateTimeOptions: [],
-      // 淇敼浜哄瓧鍏�
-      updateOperatorOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        projectId: undefined,
-        fileName: undefined,
-        fileSuffix: undefined,
-        filePath: undefined,
-        delFlage: undefined,
-        createOperator: undefined,
-        updateOperator: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        id: [
-          { required: true, message: "涓婚敭涓嶈兘涓虹┖", trigger: "blur" }
-        ],      }
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("${column.dictType}").then(response => {
-      this.idOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.projectIdOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.fileNameOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.fileSuffixOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.filePathOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.delFlageOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.createTimeOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.createOperatorOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.updateTimeOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.updateOperatorOptions = response.data;
-    });
-  },
-  methods: {
-    /** 鏌ヨ鑺傝兘椤圭洰绠$悊闄勪欢鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listEnergyAnnex(this.queryParams).then(response => {
-        this.energyAnnexList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 涓婚敭瀛楀吀缈昏瘧
-    idFormat(row, column) {
-      return this.selectDictLabel(this.idOptions, row.id);
-    },
-    // 鍏宠仈policy_regulations瀛楀吀缈昏瘧
-    projectIdFormat(row, column) {
-      return this.selectDictLabel(this.projectIdOptions, row.projectId);
-    },
-    // 鏂囦欢鍚嶅瓧鍏哥炕璇�
-    fileNameFormat(row, column) {
-      return this.selectDictLabel(this.fileNameOptions, row.fileName);
-    },
-    // 鏂囦欢鍚庣紑瀛楀吀缈昏瘧
-    fileSuffixFormat(row, column) {
-      return this.selectDictLabel(this.fileSuffixOptions, row.fileSuffix);
-    },
-    // 鏂囦欢璺緞瀛楀吀缈昏瘧
-    filePathFormat(row, column) {
-      return this.selectDictLabel(this.filePathOptions, row.filePath);
-    },
-    // 鍒犻櫎鏍囧織Y鍒犻櫎 N涓哄垹闄ゅ瓧鍏哥炕璇�
-    delFlageFormat(row, column) {
-      return this.selectDictLabel(this.delFlageOptions, row.delFlage);
-    },
-    // 寤虹珛鏃堕棿瀛楀吀缈昏瘧
-    createTimeFormat(row, column) {
-      return this.selectDictLabel(this.createTimeOptions, row.createTime);
-    },
-    // 寤虹珛浜哄瓧鍏哥炕璇�
-    createOperatorFormat(row, column) {
-      return this.selectDictLabel(this.createOperatorOptions, row.createOperator);
-    },
-    // 淇敼鏃ユ湡瀛楀吀缈昏瘧
-    updateTimeFormat(row, column) {
-      return this.selectDictLabel(this.updateTimeOptions, row.updateTime);
-    },
-    // 淇敼浜哄瓧鍏哥炕璇�
-    updateOperatorFormat(row, column) {
-      return this.selectDictLabel(this.updateOperatorOptions, row.updateOperator);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        projectId: undefined,
-        fileName: undefined,
-        fileSuffix: undefined,
-        filePath: undefined,
-        delFlage: undefined,
-        createTime: undefined,
-        createOperator: undefined,
-        updateTime: undefined,
-        updateOperator: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞鑺傝兘椤圭洰绠$悊闄勪欢";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getEnergyAnnex(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼鑺傝兘椤圭洰绠$悊闄勪欢";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updateEnergyAnnex(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addEnergyAnnex(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎鑺傝兘椤圭洰绠$悊闄勪欢缂栧彿涓�"' + ids + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return delEnergyAnnex(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夎妭鑳介」鐩鐞嗛檮浠舵暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return exportEnergyAnnex(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function() {});
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energySaving/energyProject/energyAnnex.vue b/energy_management_ui/src/views/energySaving/energyProject/energyAnnex.vue
deleted file mode 100644
index 95fbb48..0000000
--- a/energy_management_ui/src/views/energySaving/energyProject/energyAnnex.vue
+++ /dev/null
@@ -1,293 +0,0 @@
-<template>
-  <el-dialog :title="title" :visible.sync="open"  :destroy-on-close="true" width="800px" top="5vh">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鏂囦欢鍚�" prop="fileName">
-        <el-input
-          v-model="queryParams.fileName"
-          placeholder="璇疯緭鍏ユ枃浠跺悕"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-upload
-      ref="upload"
-      :limit="1"
-      :headers="uploadData.headers"
-      :action="uploadData.url + '?projectId=' + queryParams.projectId"
-      :on-preview="handlePreview"
-      :on-progress="handleFileUploadProgress"
-      :on-success="handleFileSuccess"
-      :auto-upload="false"
-    >
-      <el-button slot="trigger" size="small" type="primary">閫夊彇鏂囦欢</el-button>
-      <el-button style="margin-left: 10px;" size="small" type="success" @click="submitFileForm">涓婁紶鍒版湇鍔″櫒</el-button>
-      <div class="el-upload__tip" style="color:red" slot="tip">娉ㄦ剰鎺у埗鏂囦欢澶у皬锛屼笉瑕佽秴杩�50M</div>
-    </el-upload>
-    <el-row>
-      <el-table v-loading="loading" :data="energyAnnexList">
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="涓婁紶鏃堕棿" align="center" prop="createTime"/>
-        <el-table-column label="鏂囦欢鍚�" align="center" prop="fileName" />
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="seeImpFile(scope.row)"
-              v-hasPermi="['energy:energyAnnex:assignDownload']"
-            >涓嬭浇</el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['energy:energyAnnex:remove']"
-            >鍒犻櫎</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <pagination
-        v-show="total>0"
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-    </el-row>
-    <div slot="footer" class="dialog-footer">
-      <el-button @click="handclose">鍙� 娑�</el-button>
-    </div>
-
-
-  </el-dialog>
-</template>
-
-<script>
-import { listEnergyAnnex, getEnergyAnnex, delEnergyAnnex, addEnergyAnnex, updateEnergyAnnex, exportEnergyAnnex } from "@/api/energy/energyAnnex";
-import { getToken } from "@/utils/auth";
-const baseURL = process.env.VUE_APP_BASE_API
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鑺傝兘椤圭洰绠$悊闄勪欢琛ㄦ牸鏁版嵁
-      energyAnnexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      idOptions: [],
-
-      uploadData: {
-        // 鏄惁鏄剧ず寮瑰嚭灞傦紙鑺傝兘绠$悊瀵煎叆锛�
-        open: false,
-        // 寮瑰嚭灞傛爣棰�
-        title: "",
-        // 鏄惁绂佺敤涓婁紶
-        isUploading: false,
-        // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-        headers: { Authorization: "Bearer " + getToken() },
-        // 涓婁紶鐨勫湴鍧�
-        url: process.env.VUE_APP_BASE_API + "/energy/energyAnnex/fileImport"
-      },
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        projectId: undefined,
-        fileName: undefined,
-        fileSuffix: undefined,
-        filePath: undefined,
-        delFlage: undefined,
-        createOperator: undefined,
-        updateOperator: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        id: [
-          { required: true, message: "涓婚敭涓嶈兘涓虹┖", trigger: "blur" }
-        ],      }
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    // 鏄剧ず寮规
-    show(impid) {
-      this.reset();
-      this.queryParams.projectId = impid;
-      this.getList();
-      this.title=' 闄勪欢';
-      this.open = true;
-    },
-    /** 鏌ヨ鑺傝兘椤圭洰绠$悊闄勪欢鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listEnergyAnnex(this.queryParams).then(response => {
-        this.energyAnnexList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        projectId: undefined,
-        fileName: undefined,
-        fileSuffix: undefined,
-        filePath: undefined,
-        delFlage: undefined,
-        createTime: undefined,
-        createOperator: undefined,
-        updateTime: undefined,
-        updateOperator: undefined
-      };
-      //娓呯┖涓婁紶缁勪欢鐨勬枃浠跺垪琛�
-      this.resetForm("form");
-    },
-    /**鍙栨秷*/
-    handclose()
-    {
-      this.open=false;
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 鏌ョ湅鎸夐挳鎿嶄綔 */
-    seeImpFile(row) {
-      this.fileDownload(row.fileName,row.filePath,false);
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞鑺傝兘椤圭洰绠$悊闄勪欢";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getEnergyAnnex(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼鑺傝兘椤圭洰绠$悊闄勪欢";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updateEnergyAnnex(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addEnergyAnnex(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎鑺傝兘椤圭洰绠$悊闄勪欢缂栧彿涓�"' + ids + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return delEnergyAnnex(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夎妭鑳介」鐩鐞嗛檮浠舵暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return exportEnergyAnnex(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function() {});
-    },
-    // 闄勪欢涓婁紶涓鐞�
-    handleFileUploadProgress(event, file, fileList) {
-      this.uploadData.isUploading = true;
-    },
-    // 闄勪欢涓婁紶鎴愬姛澶勭悊
-    handleFileSuccess(response, file, fileList) {
-      this.uploadData.open = false;
-      this.uploadData.isUploading = false;
-      this.$refs.upload.clearFiles();
-      this.$alert(response.msg, "闄勪欢缁撴灉", { dangerouslyUseHTMLString: true });
-      this.getList();
-    },
-    // 闄勪欢涓婁紶鏂囦欢
-    submitFileForm() {
-      this.$refs.upload.submit();
-    },
-    handlePreview(file) {
-      console.log(file);
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energySaving/energyProject/index.vue b/energy_management_ui/src/views/energySaving/energyProject/index.vue
deleted file mode 100644
index 4df139d..0000000
--- a/energy_management_ui/src/views/energySaving/energyProject/index.vue
+++ /dev/null
@@ -1,435 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form class="special-form" :model="queryParams" ref="queryForm" label-width="76px">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="椤圭洰鍚嶇О" prop="name">
-              <el-input
-                  v-model="queryParams.name"
-                  placeholder="璇疯緭鍏ラ」鐩悕绉�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="寮�濮嬫椂闂�" prop="startTime">
-              <el-date-picker clearable size="small" style="width: 100%"
-                              v-model="queryParams.startTime"
-                              type="date"
-                              value-format="yyyy-MM-dd"
-                              placeholder="閫夋嫨寮�濮嬫椂闂�">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="缁撴潫鏃堕棿" prop="enddTime">
-              <el-date-picker clearable size="small" style="width: 100%"
-                              v-model="queryParams.enddTime"
-                              type="date"
-                              value-format="yyyy-MM-dd"
-                              placeholder="閫夋嫨缁撴潫鏃堕棿">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-          <!--          <el-col :span="6">-->
-          <!--            <el-form-item label="璐熻矗浜�" prop="people">-->
-          <!--              <el-input-->
-          <!--                  v-model="queryParams.people"-->
-          <!--                  placeholder="璇疯緭鍏ヨ礋璐d汉"-->
-          <!--                  clearable-->
-          <!--                  size="small"-->
-          <!--                  @keyup.enter.native="handleQuery"-->
-          <!--              />-->
-          <!--            </el-form-item>-->
-          <!--          </el-col>-->
-          <el-col :span="6">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-              type="primary"
-              icon="el-icon-plus"
-              size="mini"
-              @click="handleAdd"
-              v-hasPermi="['energy:energyProject:add']"
-          >鏂板
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="success"
-              icon="el-icon-edit"
-              size="mini"
-              :disabled="single"
-              @click="handleUpdate"
-              v-hasPermi="['energy:energyProject:edit']"
-          >淇敼
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              :disabled="multiple"
-              @click="handleDelete"
-              v-hasPermi="['energy:energyProject:remove']"
-          >鍒犻櫎
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="warning"
-              icon="el-icon-download"
-              size="mini"
-              @click="handleExport"
-              v-hasPermi="['energy:energyProject:export']"
-          >瀵煎嚭
-          </el-button>
-        </el-col>
-      </el-row>
-
-      <el-table v-loading="loading" :data="energyProjectList" :height="height"
-                @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center" show-overflow-tooltip/>
-        <el-table-column label="椤圭洰鍚嶇О" align="center" prop="name" show-overflow-tooltip/>
-        <el-table-column label="鑺傝兘璁″垝" align="center" prop="plan" show-overflow-tooltip/>
-        <el-table-column label="鑺傝兘鐩爣" align="center" prop="target" show-overflow-tooltip/>
-        <el-table-column label="寮�濮嬫椂闂�" align="center" prop="startTime" width="180" show-overflow-tooltip>
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.startTime) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="缁撴潫鏃堕棿" align="center" prop="enddTime" width="180" show-overflow-tooltip>
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.enddTime) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="璐熻矗浜�" align="center" prop="people" show-overflow-tooltip/>
-        <el-table-column label="鍒跺畾鏃舵" align="center" prop="setTime" width="180">
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.setTime) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="鍒涘缓浜�" align="center" prop="createOperator" show-overflow-tooltip/>
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="openEnergyAnnex(scope.row)"
-                v-hasPermi="['tool:gen:import']"
-            >闄勪欢
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['energy:energyProject:edit']"
-            >淇敼
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-delete"
-                @click="handleDelete(scope.row)"
-                v-hasPermi="['energy:energyProject:remove']"
-            >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-    </basic-container>
-
-
-    <!-- 娣诲姞鎴栦慨鏀硅妭鑳介」鐩鐞嗗璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="椤圭洰鍚嶇О" prop="name">
-          <el-input v-model="form.name" placeholder="璇疯緭鍏ラ」鐩悕绉�"/>
-        </el-form-item>
-        <el-form-item label="鑺傝兘璁″垝" prop="plan">
-          <el-input v-model="form.plan" placeholder="璇疯緭鍏ヨ妭鑳借鍒�"/>
-        </el-form-item>
-        <el-form-item label="鑺傝兘鐩爣" prop="target">
-          <el-input v-model="form.target" placeholder="璇疯緭鍏ヨ妭鑳界洰鏍�"/>
-        </el-form-item>
-        <el-form-item label="寮�濮嬫椂闂�" prop="startTime">
-          <el-date-picker clearable size="small" style="width: 200px"
-                          v-model="form.startTime"
-                          type="date"
-                          value-format="yyyy-MM-dd"
-                          placeholder="閫夋嫨寮�濮嬫椂闂�">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="缁撴潫鏃堕棿" prop="enddTime">
-          <el-date-picker clearable size="small" style="width: 200px"
-                          v-model="form.enddTime"
-                          type="date"
-                          value-format="yyyy-MM-dd"
-                          placeholder="閫夋嫨缁撴潫鏃堕棿">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="璐熻矗浜�" prop="people">
-          <el-input v-model="form.people" placeholder="璇疯緭鍏ヨ礋璐d汉"/>
-        </el-form-item>
-        <el-form-item label="鍒跺畾鏃舵" prop="setTime">
-          <el-date-picker clearable size="small" style="width: 200px"
-                          v-model="form.setTime"
-                          type="date"
-                          value-format="yyyy-MM-dd"
-                          placeholder="閫夋嫨鍒跺畾鏃舵">
-          </el-date-picker>
-        </el-form-item>
-        <!-- <el-form-item label="鍒涘缓浜�" prop="createOperator">
-           <el-input v-model="form.createOperator" placeholder="璇疯緭鍏ュ垱寤轰汉" />
-         </el-form-item>-->
-        <!-- <el-form-item label="淇敼浜�" prop="updateOperator">
-           <el-input v-model="form.updateOperator" placeholder="璇疯緭鍏ヤ慨鏀逛汉" />
-         </el-form-item>-->
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-
-    <energyAnnex ref="annex" @ok="handleFjQuery"/>
-  </div>
-</template>
-
-<script>
-import {
-  listEnergyProject,
-  getEnergyProject,
-  delEnergyProject,
-  addEnergyProject,
-  updateEnergyProject,
-  exportEnergyProject
-} from "@/api/energy/energyProject";
-import energyAnnex from "./energyAnnex";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  components: {energyAnnex},
-  mixins: [mixins],
-  data() {
-    return {
-      height: null,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鑺傝兘椤圭洰绠$悊琛ㄦ牸鏁版嵁
-      energyProjectList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // id瀛楀吀
-      idOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        plan: undefined,
-        target: undefined,
-        startTime: undefined,
-        enddTime: undefined,
-        people: undefined,
-        setTime: undefined,
-        createOperator: undefined,
-        updateOperator: undefined,
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        id: [
-          {required: true, message: "id涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-      }
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 370;
-    },
-    /** 鏌ヨ鑺傝兘椤圭洰绠$悊鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listEnergyProject(this.queryParams).then(response => {
-        this.energyProjectList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // id瀛楀吀缈昏瘧
-    idFormat(row, column) {
-      return this.selectDictLabel(this.idOptions, row.id);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        name: undefined,
-        plan: undefined,
-        target: undefined,
-        startTime: undefined,
-        enddTime: undefined,
-        people: undefined,
-        setTime: undefined,
-        createOperator: undefined,
-        createTime: undefined,
-        updateOperator: undefined,
-        updateTime: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞鑺傝兘椤圭洰绠$悊";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getEnergyProject(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼鑺傝兘椤圭洰绠$悊";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updateEnergyProject(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addEnergyProject(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎鑺傝兘椤圭洰绠$悊缂栧彿涓�"' + ids + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delEnergyProject(ids);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夎妭鑳介」鐩鐞嗘暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportEnergyProject(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    },
-    /** 鎵撳紑闄勪欢琛ㄥ脊绐� */
-    openEnergyAnnex(row) {
-      let impid = row.id;
-      this.$refs.annex.show(impid);
-    },
-    /** 闄勪欢鎼滅储鎸夐挳鎿嶄綔 */
-    handleFjQuery() {
-      // this.queryParams.pageNum = 1;
-      // this.getList();
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/energySaving/policiesRegulations/index.vue b/energy_management_ui/src/views/energySaving/policiesRegulations/index.vue
deleted file mode 100644
index 8c391c8..0000000
--- a/energy_management_ui/src/views/energySaving/policiesRegulations/index.vue
+++ /dev/null
@@ -1,179 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鏂囦欢绫诲埆">
-        <el-select v-model="value" placeholder="璇烽�夋嫨">
-          <el-option
-            v-for="item in options"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value">
-          </el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="鏂囦欢鏍囬">
-        <el-input placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-plus" size="mini">鏂板</el-button>
-        <el-button type="primary" icon="el-icon-search" size="mini">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-    <el-table :data="energyEenchmarkingList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="80" align="center" />
-      <el-table-column label="鏂囦欢鏍囬" align="center" prop="name"/>
-      <el-table-column label="鏂囦欢绫诲埆" align="center" prop="wjlb" />
-      <el-table-column label="鍗板彂鏃堕棿" align="center" prop="yfsj" />
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button  size="mini" type="text" icon="el-icon-edit" >淇敼</el-button>
-          <el-button size="mini" type="text" icon="el-icon-delete">鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      options: [{
-        value: '閫夐」1',
-        label: '鏀跨瓥娉曡'
-      }],
-      value: '',
-      // energy_benchmarking琛ㄦ牸鏁版嵁
-      energyEenchmarkingList:[{
-        "name": "鑺傜害鐢ㄧ數",
-        "wjlb":"鏀跨瓥娉曡",
-        "yfsj":"2019/10/19",
-        "createBy": null,
-        "createTime": "",
-        "updateBy": null,
-        "updateTime": null,
-        "remark": "",
-      },
-      {
-        "name": "鐢靛姏璁炬柦淇濇姢鏉′緥",
-        "wjlb":"鏀跨瓥娉曡",
-        "yfsj":"2019/10/19",
-        "createBy": null,
-        "createTime": "",
-        "updateBy": null,
-        "updateTime": null,
-        "remark": "",
-      },
-      {
-        "name": "鐢靛姏鐩戠鏉′緥",
-        "wjlb":"鏀跨瓥娉曡",
-        "yfsj":"2019/10/19",
-        "createBy": null,
-        "createTime": "",
-        "updateBy": null,
-        "updateTime": null,
-        "remark": "",
-      },
-      {
-        "name": "涓崕浜烘皯鍏卞拰鍥界幆澧冧繚鎶ゆ硶",
-        "wjlb":"鏀跨瓥娉曡",
-        "yfsj":"2019/10/19",
-        "createBy": null,
-        "createTime": "",
-        "updateBy": null,
-        "updateTime": null,
-        "remark": "",
-      },
-      {
-        "name": "涓崕浜烘皯鍏卞拰鍥藉畨鍏ㄧ敓浜ф硶",
-        "wjlb":"鏀跨瓥娉曡",
-        "yfsj":"2019/10/19",
-        "createBy": null,
-        "createTime": "",
-        "updateBy": null,
-        "updateTime": null,
-        "remark": "",
-      }],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined,
-        modelNode:"",
-      },
-      times:"",
-    };
-  },
-  created() {this.getList();this.getTime()},
-  methods: {
-    getList() {
-
-    },
-    getTime(){
-      var date = new Date()
-      var year = date.getFullYear()
-      var month = date.getMonth() + 1
-      var date = date.getDate()
-      month = month < 10 ? '0' + month : month
-      date = date < 10 ? '0' + date : date
-      this.times = year + '-' + month + '-' + date
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      //this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energySaving/projectManagement/index.vue b/energy_management_ui/src/views/energySaving/projectManagement/index.vue
deleted file mode 100644
index bd0ff8b..0000000
--- a/energy_management_ui/src/views/energySaving/projectManagement/index.vue
+++ /dev/null
@@ -1,186 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="椤圭洰鍚嶇О">
-        <el-select v-model="value" placeholder="璇烽�夋嫨">
-          <el-option
-            v-for="item in options"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value">
-          </el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="鏂囦欢鏍囬">
-        <el-date-picker
-          type="daterange"
-          range-separator="鑷�"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-plus" size="mini">鏂板</el-button>
-        <el-button type="primary" icon="el-icon-search" size="mini">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-    <el-table :data="energyEenchmarkingList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="80" align="center" />
-      <el-table-column label="椤圭洰鍚嶇О" align="center" prop="name"/>
-      <el-table-column label="鑺傝兘璁″垝" align="center" prop="jnjh" />
-      <el-table-column label="鑺傝兘鐩爣" align="center" prop="jnmb" />
-      <el-table-column label="璁″垝寮�濮嬫椂闂�" align="center" prop="kstime" />
-      <el-table-column label="璁″垝缁撴潫鏃堕棿" align="center" prop="jstime" />
-      <el-table-column label="璐熻矗浜�" align="center" prop="fzr" />
-      <el-table-column label="鍒跺畾鏃舵" align="center" prop="zdtime" />
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button  size="mini" type="text" icon="el-icon-edit" >淇敼</el-button>
-          <el-button size="mini" type="text" icon="el-icon-delete">鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      options: [{
-        value: '閫夐」1',
-        label: '绌鸿皟鑺傝兘'
-      },{
-        value: '閫夐」2',
-          label: '鑺傜害鐢ㄦ按'
-      },
-      {value: '閫夐」3',
-        label: '钂告苯鑺傝兘'
-      }],
-      value: '',
-      // energy_benchmarking琛ㄦ牸鏁版嵁
-      energyEenchmarkingList:[{
-        "name": "绌鸿皟鑺傝兘",
-        "jnjh":"閫氳繃姘撮�氳皟瑙f硶绠�",
-        "jnmb":"鏈堝害骞冲潎鐢ㄧ數闄嶄綆",
-        "kstime":"2019/5/22",
-        "jstime":"2020/5/13",
-        "fzr":"寮犱紶鏅�",
-        "zdtime":"2019/5/22",
-        "createBy": null,
-        "createTime": "",
-        "updateBy": null,
-        "updateTime": null,
-        "remark": "",
-      },
-      {
-        "name": "鑺傜害鐢ㄦ按",
-        "jnjh":"閫氳繃姘撮�氳皟瑙f硶绠�",
-        "jnmb":"鏈堝害骞冲潎鐢ㄦ按闄嶄綆",
-        "kstime":"2019/5/22",
-        "jstime":"2020/5/13",
-        "fzr":"寮犱紶鏅�",
-        "zdtime":"2019/5/22",
-        "createBy": null,
-        "createTime": "",
-        "updateBy": null,
-        "updateTime": null,
-        "remark": "",
-      },
-      {
-        "name": "鍖楀巶鍐峰嵈姘村鏀归��",
-        "jnjh":"杩涜鏀归��",
-        "jnmb":"鑺傜數鐜�5%",
-        "kstime":"2019/5/22",
-        "jstime":"2020/5/13",
-        "fzr":"寮犱紶鏅�",
-        "zdtime":"2019/5/22",
-        "createBy": null,
-        "createTime": "",
-        "updateBy": null,
-        "updateTime": null,
-        "remark": "",
-      }],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined,
-        modelNode:"",
-      },
-      times:"",
-    };
-  },
-  created() {this.getList();this.getTime()},
-  methods: {
-    getList() {
-
-    },
-    getTime(){
-      var date = new Date()
-      var year = date.getFullYear()
-      var month = date.getMonth() + 1
-      var date = date.getDate()
-      month = month < 10 ? '0' + month : month
-      date = date < 10 ? '0' + date : date
-      this.times = year + '-' + month + '-' + date
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        name: undefined,
-        codeId: undefined,
-        unit: undefined,
-        range: undefined,
-        type: undefined,
-        value: undefined,
-        termValidity: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      //this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energySaving/report/importReportFile.vue b/energy_management_ui/src/views/energySaving/report/importReportFile.vue
deleted file mode 100644
index e5e2383..0000000
--- a/energy_management_ui/src/views/energySaving/report/importReportFile.vue
+++ /dev/null
@@ -1,205 +0,0 @@
-<template>
-  <!-- 瀵煎叆琛� -->
-  <el-dialog :title="title" :visible.sync="open"  :destroy-on-close="true" width="800px" top="5vh">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鏂囦欢鍚�" prop="fileName">
-        <el-input
-          v-model="queryParams.fileName"
-          placeholder="璇疯緭鍏ユ枃浠跺悕"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-upload
-      ref="upload"
-      :limit="1"
-      :headers="uploadData.headers"
-      :action="uploadData.url + '?reportId=' + queryParams.implementId"
-      :on-preview="handlePreview"
-      :on-progress="handleFileUploadProgress"
-      :on-success="handleFileSuccess"
-      :auto-upload="false"
-    >
-      <el-button slot="trigger" size="small" type="primary">閫夊彇鏂囦欢</el-button>
-      <el-button style="margin-left: 10px;" size="small" type="success" @click="submitFileForm">涓婁紶鍒版湇鍔″櫒</el-button>
-      <div class="el-upload__tip" style="color:red" slot="tip">娉ㄦ剰鎺у埗鏂囦欢澶у皬锛屼笉瑕佽秴杩�50M</div>
-    </el-upload>
-
-    <el-row>
-      <el-table v-loading="loading" :data="annexList" >
-        <el-table-column label="鏂囦欢鍚�" align="center" prop="fileName"  />
-        <el-table-column label="涓婁紶鏃堕棿" align="center" prop="createTime"  />
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="seeImpFile(scope.row)"
-              v-hasPermi="['meter:annex:assignDownload']"
-            >涓嬭浇</el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['meter:annex:remove']"
-            >鍒犻櫎</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        v-show="total>0"
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-    </el-row>
-    <div slot="footer" class="dialog-footer">
-      <el-button @click="handclose">鍙� 娑�</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { listReportAnnex,delReportAnnex } from "@/api/energy/reportAnnex";
-import { getToken } from "@/utils/auth";
-const baseURL = process.env.VUE_APP_BASE_API
-// 閫氱敤涓嬭浇鏂规硶
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 璁¢噺鍣ㄥ叿妗f闄勪欢琛ㄦ牸鏁版嵁
-      annexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      idOptions: [],
-      // 鍏宠仈meter_implement.id瀛楀吀
-      implementIdOptions: [],
-      // 鏂囦欢鍚嶅瓧鍏�
-      fileNameOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        implementId:'',
-        tableName: undefined
-      },
-      uploadData: {
-        // 鏄惁鏄剧ず寮瑰嚭灞傦紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        open: false,
-        // 寮瑰嚭灞傛爣棰橈紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        title: "",
-        // 鏄惁绂佺敤涓婁紶
-        isUploading: false,
-        // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-        headers: { Authorization: "Bearer " + getToken() },
-        // 涓婁紶鐨勫湴鍧�
-        url: process.env.VUE_APP_BASE_API + "/energy/reportAnnex/fileImport"
-      },
-    };
-  },
-  methods: {
-    // 鏄剧ず寮规
-    show(impid,code) {
-      this.reset();
-      this.queryParams.implementId = impid;
-      this.getList();
-      this.title=code+' 闄勪欢';
-      this.open = true;
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.queryParams = {
-        pageNum: 1,
-        pageSize: 10,
-        implementId:'',
-        tableName: undefined
-      };
-      //娓呯┖涓婁紶缁勪欢鐨勬枃浠跺垪琛�
-      this.resetForm("queryForm");
-    },
-    // 鏌ヨ琛ㄦ暟鎹�
-    getList() {
-      listReportAnnex(this.queryParams).then(response => {
-        this.annexList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-       this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 鏌ョ湅鎸夐挳鎿嶄綔 */
-    seeImpFile(row) {
-      this.fileDownload(row.fileName,row.filePath,false);
-    },
-    handclose()
-    {
-      this.open=false;
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      this.$confirm('鏄惁纭鍒犻櫎闄勪欢鍚嶇О涓�"' + row.fileName + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function() {
-        return delReportAnnex(row.id);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function() {});
-    },
-    // 闄勪欢涓婁紶涓鐞�
-    handleFileUploadProgress(event, file, fileList) {
-      this.uploadData.isUploading = true;
-    },
-    // 闄勪欢涓婁紶鎴愬姛澶勭悊
-    handleFileSuccess(response, file, fileList) {
-      this.uploadData.open = false;
-      this.uploadData.isUploading = false;
-      this.$refs.upload.clearFiles();
-      this.$alert(response.msg, "闄勪欢缁撴灉", { dangerouslyUseHTMLString: true });
-      this.getList();
-    },
-    // 闄勪欢涓婁紶鏂囦欢
-    submitFileForm() {
-      this.$refs.upload.submit();
-    },
-    handlePreview(file) {
-      console.log(file);
-    },
-  }
-};
-
-</script>
diff --git a/energy_management_ui/src/views/energySaving/report/index.vue b/energy_management_ui/src/views/energySaving/report/index.vue
deleted file mode 100644
index 2c154bb..0000000
--- a/energy_management_ui/src/views/energySaving/report/index.vue
+++ /dev/null
@@ -1,330 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鎶ュ憡鍚嶇О" prop="name">
-        <el-input
-          v-model="queryParams.name"
-          placeholder="璇疯緭鍏ユ姤鍛婂悕绉�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['energy:report:add']"
-        >鏂板</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['energy:report:edit']"
-        >淇敼</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['energy:report:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-      <!--
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['energy:report:export']"
-        >瀵煎嚭</el-button>
-      </el-col>-->
-    </el-row>
-
-    <el-table v-loading="loading" :data="reportList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="鎶ュ憡鍚嶇О" align="center" prop="name"  />
-      <el-table-column label="寮�濮嬫椂闂�" align="center" prop="startTime" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.startTime) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="缁撴潫鏃堕棿" align="center" prop="enddTime" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.enddTime) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="澶囨敞" align="center" prop="bak"  />
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="openImportFileTable(scope.row)"
-            v-hasPermi="['tool:gen:import']"
-          >闄勪欢</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['energy:report:edit']"
-          >淇敼</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['energy:report:remove']"
-          >鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 娣诲姞鎴栦慨鏀硅妭鑳藉垎鏋愭姤鍛婄鐞嗗璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="鎶ュ憡鍚嶇О" prop="name">
-          <el-input v-model="form.name" placeholder="璇疯緭鍏ユ姤鍛婂悕绉�" />
-        </el-form-item>
-        <el-form-item label="寮�濮嬫椂闂�" prop="startTime">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.startTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="閫夋嫨寮�濮嬫椂闂�">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="缁撴潫鏃堕棿" prop="enddTime">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.enddTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="閫夋嫨缁撴潫鏃堕棿">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="澶囨敞" prop="bak">
-          <el-input v-model="form.bak" placeholder="璇疯緭鍏ュ娉�" />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-    <importReportFile ref="importReportFile"   />
-  </div>
-</template>
-
-<script>
-import { listReport, getReport, delReport, addReport, updateReport, exportReport } from "@/api/energy/report";
-import importReportFile from "./importReportFile";
-export default {
-  name: "importReport",
-  components: { importReportFile },
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鑺傝兘鍒嗘瀽鎶ュ憡绠$悊琛ㄦ牸鏁版嵁
-      reportList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // id瀛楀吀
-      idOptions: [],
-      // 鎶ュ憡鍚嶇О瀛楀吀
-      nameOptions: [],
-      // 寮�濮嬫椂闂村瓧鍏�
-      startTimeOptions: [],
-      // 缁撴潫鏃堕棿瀛楀吀
-      enddTimeOptions: [],
-      // 鍒涘缓浜哄瓧鍏�
-      createByOptions: [],
-      // 鍒涘缓鏃堕棿瀛楀吀
-      createTimeOptions: [],
-      // 淇敼浜哄瓧鍏�
-      updateByOptions: [],
-      // 淇敼鏃堕棿瀛楀吀
-      updateTimeOptions: [],
-      // 澶囨敞瀛楀吀
-      bakOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        id: [
-          { required: true, message: "id涓嶈兘涓虹┖", trigger: "blur" }
-        ],      }
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    /** 鏌ヨ鑺傝兘鍒嗘瀽鎶ュ憡绠$悊鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listReport(this.queryParams).then(response => {
-        this.reportList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        name: undefined,
-        startTime: undefined,
-        enddTime: undefined,
-        createBy: undefined,
-        createTime: undefined,
-        updateBy: undefined,
-        updateTime: undefined,
-        bak: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞鑺傝兘鍒嗘瀽鎶ュ憡";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getReport(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼鑺傝兘鍒嗘瀽鎶ュ憡";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updateReport(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addReport(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎鑺傝兘鍒嗘瀽鎶ュ憡缂栧彿涓�"' + ids + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return delReport(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夎妭鑳藉垎鏋愭姤鍛婃暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return exportReport(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function() {});
-    },
-    /** 鎵撳紑闄勪欢琛ㄥ脊绐� */
-    openImportFileTable(row) {
-      let impid = row.id;
-      let impcode = row.name;
-      this.$refs.importReportFile.show(impid,impcode);
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyStatistics/energyAnalysis/energyAnalysis.vue b/energy_management_ui/src/views/energyStatistics/energyAnalysis/energyAnalysis.vue
deleted file mode 100644
index 23fe143..0000000
--- a/energy_management_ui/src/views/energyStatistics/energyAnalysis/energyAnalysis.vue
+++ /dev/null
@@ -1,161 +0,0 @@
-<template>
-  <div class="dashboard-editor-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鏃ユ湡">
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio style="margin-right: 10px" v-for="dict in dateTypeOptions" :key="dict.dictValue" :label="dict.dictValue" @change="handleTime(dict.dictValue)">{{dict.dictLabel}}</el-radio>
-        </el-radio-group>
-        <el-date-picker
-          v-model="dateRange"
-          :type="dateType"
-          range-separator="鑷�"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌ヨ</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-        <el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport">瀵煎嚭</el-button>
-      </el-form-item>
-    </el-form>
-    <el-table :data="list">
-      <el-table-column prop="indexName" label="鍚嶇О"  align="center"></el-table-column>
-      <el-table-column label="鏃堕棿"  align="center">
-        <template slot-scope="scope">
-          <span>{{formatDate(scope.row.dataTime)}}</span>
-        </template>
-      </el-table-column>
-      <el-table-column prop="value" label="鍊�"  align="center"></el-table-column>
-    </el-table>
-      <!--<el-table :data="tabledata">
-        <el-table-column prop="dataTime" label="鏃堕棿"  align="center"></el-table-column>
-        <template v-for="item in  tablehead ">
-          <el-table-column :label=item.IndexName align="center" prop="value" ></el-table-column>
-        </template>
-      </el-table>-->
-    </div>
-</template>
-
-<script>
-  import {getEnergyAnalysis,exportEnergyAnalysis} from "@/api/energyStatistics/statistics";
-  export default {
-    props: ["modelCode"],
-    data() {
-      return {
-        total: 0,
-        dateTypeOptions:[],
-        dateType:"datetimerange",
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          indexCode:undefined,
-          timeType:"HOUR",
-          beginTime:undefined,
-          endTime:undefined,
-        },
-        dateRange: [],
-        list:[],
-        rowIndex: '-1',
-        OrderIndexArr: [],
-        hoverOrderArr: [],
-      }
-    },
-    created() {
-      this.getDicts("energyAnalysis").then(response => {
-        this.dateTypeOptions = response.data;
-        this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-      });
-      this.getTime();
-    },
-    methods: {
-      modelNodeChange(modelNode) {
-        this.queryParams.indexCode=modelNode.id;
-        this.getList(this.queryParams)
-      },
-      getList(){
-        this.dateRange = [this.formatDate(this.dateRange[0]),this.formatDate(this.dateRange[1])];
-        getEnergyAnalysis(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
-          this.list=response.data
-        });
-      },
-      getTime(){
-        this.queryParams.beginTime = new Date().setHours(0, 0, 0, 0);
-        this.queryParams.endTime = new Date().setHours(0, 0, 0, 0) + 24 * 60 * 60 * 1000 - 1;
-        this.dateRange = [this.queryParams.beginTime,this.queryParams.endTime];
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.getList(this.queryParams);
-      },
-      /** 閲嶇疆鎸夐挳鎿嶄綔 */
-      resetQuery() {
-        this.resetForm("queryForm");
-        this.handleQuery();
-      },
-      handleTime(date){
-        if(date=='DATE'){
-          this.dateType='daterange'
-        }else if(date=='HOUR'){
-          this.dateType="datetimerange"
-        }
-      },
-      /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-      handleExport() {
-        const queryParams = this.queryParams;
-        this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夎兘鑰楃粺璁″垎鏋愭暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function () {
-          return exportEnergyAnalysis(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function () {
-        });
-      },
-      formatDate: function (value) {
-        let date = new Date(value);
-        let y = date.getFullYear();
-        let MM = date.getMonth() + 1;
-        MM = MM < 10 ? ('0' + MM) : MM;
-        let d = date.getDate();
-        d = d < 10 ? ('0' + d) : d;
-        let h = date.getHours();
-        h = h < 10 ? ('0' + h) : h;
-        let m = date.getMinutes();
-        m = m < 10 ? ('0' + m) : m;
-        let s = date.getSeconds();
-        s = s < 10 ? ('0' + s) : s;
-        return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;
-      },
-    }
-  }
-</script>
-
-<style lang="scss" scoped>
-  .dashboard-editor-container {
-    padding: 32px;
-    background-color: rgb(240, 242, 245);
-    position: relative;
-    .chart-wrapper {
-      background: #fff;
-      padding: 16px 16px 0;
-      margin-bottom: 32px;
-    }
-  }
-  .chart-title{
-    display: block;
-    background: #f2f6fc;
-    height: 30px;
-    line-height: 30px;
-    padding: 0 10px;
-  }
-  @media (max-width:1024px) {
-    .chart-wrapper {
-      padding: 8px;
-    }
-  }
-</style>
diff --git a/energy_management_ui/src/views/energyStatistics/energyAnalysis/index.vue b/energy_management_ui/src/views/energyStatistics/energyAnalysis/index.vue
deleted file mode 100644
index 6fc8f87..0000000
--- a/energy_management_ui/src/views/energyStatistics/energyAnalysis/index.vue
+++ /dev/null
@@ -1,55 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" :width="isCollapse?'0px':'20%'">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            鑳借�楃粺璁″垎鏋�
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false" :modelCode="modelCode"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <div style="cursor:pointer;" @click="toggleCollapse">
-          <img src="@/assets/image/configureChart.png" style="width: 100%;height: 100%">
-        </div>
-        <el-main style="padding:0">
-          <energyAnalysis ref="energyAnalysis" style="padding:10px"></energyAnalysis>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import energyAnalysis from "./energyAnalysis";
-  import ModelNode from "../../basicsetting/modelNode/modelNode";
-
-  export default {
-    components: { ModelNode,energyAnalysis},
-    created() {
-      this.modelCode=this.$route.query.modelCode;
-    },
-    data() {
-      return {
-        modelCode:undefined,
-        isCollapse: false,
-      }
-    },
-    methods: {
-      changeNode: function (node) {
-        this.$refs.energyAnalysis.modelNodeChange(node);
-      },
-      manageModel: function () {
-        this.$router.push('/model');
-      },
-      changeModel: function (item) {
-        this.$refs.modelNode.getList(item);
-      },
-      // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-      toggleCollapse () {
-        this.isCollapse = !this.isCollapse
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/energyStatistics/energyConsumption/BarChart.vue b/energy_management_ui/src/views/energyStatistics/energyConsumption/BarChart.vue
deleted file mode 100644
index 3596cd6..0000000
--- a/energy_management_ui/src/views/energyStatistics/energyConsumption/BarChart.vue
+++ /dev/null
@@ -1,152 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../mixins/resize";
-const animationDuration = 6000;
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    chartData: {
-      type: Object
-      //required: true
-    }
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  data() {
-    return {
-      chart: null,
-      seriesData: []
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ newVisitis, xAxis, actualData } = {}) {
-      var series = [];
-      if (newVisitis != null || newVisitis != undefined) {
-        newVisitis.forEach(rowData => {
-          series.push({
-            name: actualData,
-            type: "bar",
-            data: newVisitis,
-            smooth: true, //绾挎潯骞虫粦
-            stack: "vistors",
-            animationDuration: 2800,
-            animationEasing: "quadraticOut"
-          });
-        });
-        /*for(var i=0;i<newVisitis.length;i++){
-           series.push({
-               name: actualData[i],
-               type: 'bar',
-               data: newVisitis[i],
-               smooth: true,//绾挎潯骞虫粦
-               stack: 'vistors',
-               animationDuration: 2800,
-               animationEasing: 'quadraticOut'
-             },
-           );
-         }*/
-      }
-      this.chart.setOption({
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        grid: {
-          top: 40,
-          left: "1%",
-          right: "2%",
-          bottom: "3%",
-          containLabel: true
-        },
-        legend: {
-          data: actualData,
-          left: "60%",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        xAxis: [
-          {
-            type: "category",
-            data: xAxis,
-            axisTick: {
-              alignWithLabel: true
-            }
-          }
-        ],
-        yAxis: [
-          {
-            name: "鍚ㄦ爣鐓�",
-            type: "value",
-            axisTick: {
-              show: false
-            }
-          }
-        ],
-        series: series /*[{
-          name: '鏈湡',
-           type: 'bar',
-          data: [
-            {value: 335, name: ''},
-            {value: 310, name: '閭欢钀ラ攢'},
-          ],
-           smooth: true,//绾挎潯骞虫粦
-           //stack: 'vistors',
-           animationDuration: 2800,
-           animationEasing: 'quadraticOut'
-       },{
-           name: '鍚屾湡',
-             type: 'bar',
-             data: [100,120],
-             smooth: true,//绾挎潯骞虫粦
-             //stack: 'vistors',
-             animationDuration: 2800,
-             animationEasing: 'quadraticOut'
-         }]*/
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyStatistics/energyConsumption/BarCharts.vue b/energy_management_ui/src/views/energyStatistics/energyConsumption/BarCharts.vue
deleted file mode 100644
index 8dd82fc..0000000
--- a/energy_management_ui/src/views/energyStatistics/energyConsumption/BarCharts.vue
+++ /dev/null
@@ -1,124 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../mixins/resize";
-const animationDuration = 6000;
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    chartData: {
-      type: Object
-      //required: true
-    }
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  data() {
-    return {
-      chart: null,
-      seriesData: []
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ newVisitis, xAxis, actualData } = {}) {
-      var series = [];
-      if (newVisitis != null || newVisitis != undefined) {
-        for (var i = 0; i < newVisitis.length; i++) {
-          let aa = newVisitis[i];
-          for (var j = 0; j < aa.length; j++) {
-            series.push({
-              name: actualData[i],
-              type: "bar",
-              data: aa[j],
-              smooth: true, //绾挎潯骞虫粦
-              //stack: 'vistors',
-              animationDuration: 2800,
-              animationEasing: "quadraticOut"
-            });
-          }
-        }
-      }
-      this.chart.setOption({
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        grid: {
-          top: 40,
-          left: "1%",
-          right: "2%",
-          bottom: "3%",
-          containLabel: true
-        },
-        legend: {
-          data: actualData,
-          left: "40%",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        xAxis: [
-          {
-            type: "category",
-            data: xAxis,
-            axisTick: {
-              alignWithLabel: true
-            }
-          }
-        ],
-        yAxis: [
-          {
-            name: "涓囧厓",
-            type: "value",
-            axisTick: {
-              show: false
-            }
-          }
-        ],
-        series: series
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyStatistics/energyConsumption/PieChart.vue b/energy_management_ui/src/views/energyStatistics/energyConsumption/PieChart.vue
deleted file mode 100644
index 1d1d5ad..0000000
--- a/energy_management_ui/src/views/energyStatistics/energyConsumption/PieChart.vue
+++ /dev/null
@@ -1,153 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    chartData: {
-      type: Object
-      //required: true
-    }
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ newVisitis, title, datas } = {}) {
-      this.chart.setOption({
-        title: {
-          text: "鑳芥簮娑堣垂缁撴瀯鏋勬垚",
-          x: "left",
-          y: "top",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        tooltip: {
-          trigger: "item",
-          formatter: title
-        },
-        grid: {
-          top: 40,
-          left: "2%",
-          right: "2%",
-          bottom: "3%",
-          containLabel: true
-        },
-        legend: {
-          // orient 璁剧疆甯冨眬鏂瑰紡锛岄粯璁ゆ按骞冲竷灞�锛屽彲閫夊�硷細'horizontal'锛堟按骞筹級 娄 'vertical'锛堝瀭鐩达級
-          orient: "vertical",
-          // x 璁剧疆姘村钩瀹夋斁浣嶇疆锛岄粯璁ゅ叏鍥惧眳涓紝鍙�夊�硷細'center' 娄 'left' 娄 'right' 娄 {number}锛坸鍧愭爣锛屽崟浣峱x锛�
-          x: "left",
-          // y 璁剧疆鍨傜洿瀹夋斁浣嶇疆锛岄粯璁ゅ叏鍥鹃《绔紝鍙�夊�硷細'top' 娄 'bottom' 娄 'center' 娄 {number}锛坹鍧愭爣锛屽崟浣峱x锛�
-          y: "10%",
-          //left: 10,
-          itemWidth: 24, // 璁剧疆鍥句緥鍥惧舰鐨勫
-          itemHeight: 18, // 璁剧疆鍥句緥鍥惧舰鐨勯珮
-          textStyle: {
-            color: "#fff" // 鍥句緥鏂囧瓧棰滆壊
-          },
-          // itemGap璁剧疆鍚勪釜item涔嬮棿鐨勯棿闅旓紝鍗曚綅px锛岄粯璁や负10锛屾í鍚戝竷灞�鏃朵负姘村钩闂撮殧锛岀旱鍚戝竷灞�鏃朵负绾靛悜闂撮殧
-          // itemGap: 30,
-          backgroundColor: "#eee", // 璁剧疆鏁翠釜鍥句緥鍖哄煙鑳屾櫙棰滆壊
-          data: title,
-          formatter: function(item) {
-            let target;
-            let unitId;
-            for (let i = 0; i < newVisitis.length; i++) {
-              if (datas[i].name === item) {
-                target = datas[i].value;
-                unitId = datas[i].unitId;
-              }
-            }
-            let arr = [
-              item + +target + unitId
-            ]; /*["{a|"+target+"}","{b|"+item+"}"]*/
-            return arr; /*.join("\n")*/
-          }
-        },
-        series: [
-          {
-            //name: '鑳芥簮',
-            type: "pie",
-            radius: "60%", // 璁剧疆楗肩姸鍥惧ぇ灏忥紝100%鏃讹紝鏈�澶х洿寰�=鏁翠釜鍥惧舰鐨刴in(瀹斤紝楂�)
-            //radius: ['30%', '60%'],  // 璁剧疆鐜舰楗肩姸鍥撅紝 绗竴涓櫨鍒嗘暟璁剧疆鍐呭湀澶у皬锛岀浜屼釜鐧惧垎鏁拌缃鍦堝ぇ灏�
-            center: ["65%", "50%"], // 璁剧疆楗肩姸鍥句綅缃紝绗竴涓櫨鍒嗘暟璋冩按骞充綅缃紝绗簩涓櫨鍒嗘暟璋冨瀭鐩翠綅缃�
-            data: newVisitis, //[{value:335, name:'娲楃簿鐓�' },{value:310, name:'宸ヤ笟鐢ㄧ數'}],/*selected: true*/
-            // itemStyle 璁剧疆楗肩姸鍥炬墖褰㈠尯鍩熸牱寮�
-            itemStyle: {
-              // emphasis锛氳嫳鏂囨剰鎬濇槸 寮鸿皟;鐫�閲�;锛堣疆寤撱�佸浘褰㈢瓑鐨勶級椴滄槑;绐佸嚭锛岄噸璇�
-              // emphasis锛氳缃紶鏍囨斁鍒板摢涓�鍧楁墖褰笂闈㈢殑鏃跺�欙紝鎵囧舰鏍峰紡銆侀槾褰�
-              emphasis: {
-                shadowBlur: 10,
-                shadowOffsetX: 0,
-                shadowColor: "rgba(30, 144, 255锛�0.5)"
-              }
-            },
-            // 璁剧疆鍊煎煙鐨勯偅鎸囧悜绾�
-            labelLine: {
-              normal: {
-                show: false // show璁剧疆绾挎槸鍚︽樉绀猴紝榛樿涓簍rue锛屽彲閫夊�硷細true 娄 false
-              }
-            },
-            // 璁剧疆鍊煎煙鐨勬爣绛�
-            label: {
-              normal: {
-                position: "inner", // 璁剧疆鏍囩浣嶇疆锛岄粯璁ゅ湪楗肩姸鍥惧 鍙�夊�硷細'outer' 娄 'inner锛堥ゼ鐘跺浘涓婏級'
-                // formatter: '{a} {b} : {c}涓� ({d}%)'   璁剧疆鏍囩鏄剧ず鍐呭 锛岄粯璁ゆ樉绀簕b}
-                // {a}鎸噑eries.name  {b}鎸噑eries.data鐨刵ame
-                // {c}鎸噑eries.data鐨剉alue  {d}%鎸囪繖涓�閮ㄥ垎鍗犳�绘暟鐨勭櫨鍒嗘瘮
-                formatter: "{c}"
-              }
-            }
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyStatistics/energyConsumption/consumption.vue b/energy_management_ui/src/views/energyStatistics/energyConsumption/consumption.vue
deleted file mode 100644
index 37cdf87..0000000
--- a/energy_management_ui/src/views/energyStatistics/energyConsumption/consumption.vue
+++ /dev/null
@@ -1,527 +0,0 @@
-<template>
-  <div class="dashboard-editor-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item label="鏃ユ湡">
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio
-            style="margin-right: 10px"
-            v-for="dict in dateTypeOptions"
-            :key="dict.dictValue"
-            :label="dict.dictValue"
-            @change="handleTime(dict.dictValue)"
-            >{{ dict.dictLabel }}</el-radio
-          >
-        </el-radio-group>
-        <el-date-picker
-          v-model="queryParams.beginTime"
-          :type="dateTypes"
-          :value-format="valueFormat"
-          placeholder="寮�濮嬫棩鏈�"
-        >
-        </el-date-picker>
-        鍒�
-        <el-date-picker
-          v-model="queryParams.endTime"
-          :type="dateTypes"
-          :value-format="valueFormat"
-          placeholder="缁撴潫鏃ユ湡"
-        >
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >鏌ヨ</el-button
-        >
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-          >閲嶇疆</el-button
-        >
-      </el-form-item>
-      <el-form-item>
-        <router-link
-          :to="
-            '/energyConsumption/listEnergyConsumption/' +
-              queryParams.timeType +
-              '/' +
-              queryParams.beginTime +
-              '/' +
-              queryParams.endTime +
-              '/' +
-              queryParams.indexCode +
-              '/' +
-              queryParams.id +
-              '/' +
-              titleName
-          "
-          class="link-type"
-        >
-          <el-button size="mini">鑳芥簮娑堣垂鎴愭湰鍒嗘椂鍒嗘瀽鎶ヨ〃</el-button>
-        </router-link>
-      </el-form-item>
-    </el-form>
-    <h4
-      style="color:#fff;float: left; text-align:center;padding: 0;margin: 0px 0px 10px;width: 90%;"
-    >
-      鐢熶骇浼佷笟鑳芥簮娑堣�楁垚鏈垎鏋�
-    </h4>
-    <el-row :gutter="32">
-      <el-col :xs="24" :sm="24" :lg="12" style="padding-right: 0">
-        <div class="chart-wrapper">
-          <pie-chart ref="PieChart" :chart-data="lineChartData" />
-        </div>
-      </el-col>
-      <el-col :xs="24" :sm="24" :lg="12" style="padding-right: 0">
-        <div class="chart-wrapper">
-          <pieChartCost ref="pieChartCost" :chart-data="lineChartData1" />
-        </div>
-      </el-col>
-    </el-row>
-    <el-row :gutter="32">
-      <el-col :xs="24" :sm="24" :lg="12" style="padding-right: 0">
-        <div class="chart-wrapper">
-          <span style="display: block;color: #fff;">鑳芥簮娑堣垂缁撴瀯鎯呭喌瀵规瘮</span>
-          <el-checkbox-group
-            v-model="checkList1"
-            style="padding: 10px;border: 1px solid #ddd;margin:10px 0;"
-            @change="handleCheckedCitiesChange1"
-            ><!--clickMe -->
-            <el-checkbox
-              :indeterminate="isIndeterminate1"
-              v-model="checkAll1"
-              @change="handleCheckAllChange1"
-              >鍏ㄩ��</el-checkbox
-            >
-            <el-checkbox
-              v-for="dict in list"
-              :key="dict.code"
-              :label="dict.code"
-              >{{ dict.name }}</el-checkbox
-            >
-          </el-checkbox-group>
-          <bar-chart ref="BarChart" :chart-data="lineChartData2" />
-        </div>
-      </el-col>
-      <el-col :xs="24" :sm="24" :lg="12" style="padding-right: 0">
-        <div class="chart-wrapper">
-          <span style="display: block;color: #fff;">鑳芥簮娑堣垂鎴愭湰鎯呭喌瀵规瘮</span>
-          <el-checkbox-group
-            v-model="checkList2"
-            style="padding: 10px;border: 1px solid #ddd;margin:10px 0;"
-            @change="handleCheckedCitiesChange2"
-            ><!--clickMe -->
-            <el-checkbox
-              :indeterminate="isIndeterminate2"
-              v-model="checkAll2"
-              @change="handleCheckAllChange2"
-              >鍏ㄩ��</el-checkbox
-            >
-            <el-checkbox
-              v-for="dict in list"
-              :key="dict.code"
-              :label="dict.code"
-              >{{ dict.name }}</el-checkbox
-            >
-          </el-checkbox-group>
-          <!-- <el-checkbox-group v-model="checkList2" style="padding: 10px;border: 1px solid #ddd;margin:10px 0;"  @change="clickMe(2)">
-            <el-checkbox v-for="dict in list" :key="dict.code" :label="dict.code">{{dict.name}}</el-checkbox>
-          </el-checkbox-group>-->
-          <BarCharts ref="BarCharts" :chart-data="lineChartData3" />
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import BarChart from "./BarChart";
-import BarCharts from "./BarCharts";
-import PieChart from "./PieChart";
-import pieChartCost from "./pieChartCost";
-import {
-  getEnergyConstitute,
-  getEnergyConsumption,
-  getSettingIndex
-} from "@/api/energyStatistics/statistics";
-export default {
-  name: "consumption",
-  name: "Index",
-  components: { BarChart, BarCharts, PieChart, pieChartCost },
-  props: ["modelCode"],
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      total: 0,
-      dateTypeOptions: [],
-      checkList1: [],
-      checkList2: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        beginTime: undefined,
-        endTime: undefined,
-        dataTime: undefined,
-        timeType: "MONTH",
-        indexId: undefined,
-        procedure: undefined,
-        indexCode: "",
-        id: undefined
-      },
-      list: [],
-      arraylist1: [],
-      arraylist2: [],
-      arraylist3: [],
-      arraylist4: [],
-      arraylist5: [],
-      xAxisListXFCB: [],
-      xAxisListZBL: [],
-      lineChartData: {
-        newVisitis: null
-      },
-      lineChartData1: {
-        newVisitis: null
-      },
-      lineChartData2: {
-        newVisitis: null
-      },
-      lineChartData3: {
-        newVisitis: null
-      },
-      lineChartData4: {
-        newVisitis: null
-      },
-      //dateTypes: 'monthrange',//鏃堕棿鑼冨洿
-      dateTypes: "month",
-      valueFormat: "yyyy-MM",
-      title: "",
-      titleName: "",
-      checkAll1: false,
-      checkAll2: false,
-      isIndeterminate1: true,
-      isIndeterminate2: true
-    };
-  },
-  watch: {
-    modelCode: {
-      deep: true,
-      handler(val) {
-        this.getList(val);
-      }
-    }
-  },
-  created() {
-    //this.getList();
-    this.getDicts("timeType").then(response => {
-      this.dateTypeOptions = response.data;
-      this.queryParams.timeType = this.dateTypeOptions.find(
-        f => f.isDefault === "Y"
-      ).dictValue;
-    });
-    this.getConfigKey("energyStatistics.energyStatisticConsum").then(
-      response => {
-        this.skinName = response.msg;
-      }
-    );
-    let endTtime =
-      new Date().getFullYear() +
-      "-" +
-      (new Date().getMonth() + 1 > 9
-        ? new Date().getMonth() + 1
-        : "0" + (new Date().getMonth() + 1));
-    let starTtime =
-      new Date().getFullYear() -
-      1 +
-      "-" +
-      (new Date().getMonth() + 1 > 9
-        ? new Date().getMonth() + 1
-        : "0" + (new Date().getMonth() + 1));
-    this.queryParams.beginTime = starTtime;
-    this.queryParams.endTime = endTtime;
-  },
-  methods: {
-    modelNodeChange(modelNode) {
-      let legendTitle = [];
-      this.queryParams.id = modelNode.id;
-      this.titleName = modelNode.label;
-      this.queryParams.indexCode = modelNode.id;
-      getEnergyConstitute(this.queryParams).then(response => {
-        this.arraylist1 = response.data.listXFL; //娑堣垂閲�
-        this.arraylist2 = response.data.listZBL; //鎶樻爣閲�
-        this.arraylist4 = response.data.listXFCB; //娑堣垂鎴愭湰
-        //鑳借�楁秷璐圭粨鏋� 娑堣垂閲�
-        let unitId = [];
-        let source = [];
-        let title = [];
-        for (let i = 0; i < this.arraylist1.length; i++) {
-          title.push(this.arraylist1[i].indexName);
-          unitId.push({
-            name: this.arraylist1[i].indexName,
-            value: this.numFilter(this.arraylist1[i].value),
-            unitId: this.arraylist1[i].unitId
-          });
-        }
-        for (let i = 0; i < this.arraylist2.length; i++) {
-          source.push({
-            name: this.arraylist2[i].indexName,
-            value: this.numFilter(this.arraylist2[i].value)
-          });
-        }
-        this.lineChartData.datas = unitId;
-        this.lineChartData.title = title;
-        this.lineChartData.newVisitis = source;
-        this.$refs.PieChart.initChart(this.lineChartData);
-        //鑳借�楁秷璐规垚鏈�
-        let unitIdXFCB = [];
-        let sourceXFCB = [];
-        let titleXFCB = [];
-        for (let i = 0; i < this.arraylist4.length; i++) {
-          sourceXFCB.push({
-            name: this.arraylist4[i].indexName,
-            value: this.numFilter(this.arraylist4[i].value)
-          });
-          unitIdXFCB.push({
-            name: this.arraylist4[i].indexName,
-            value: this.numFilter(this.arraylist4[i].value),
-            unitId: "涓囧厓"
-          });
-          titleXFCB += this.numFilter(this.arraylist4[i].value);
-        }
-        this.lineChartData1.title = titleXFCB;
-        this.lineChartData1.newVisitis = sourceXFCB;
-        this.lineChartData1.datas = unitIdXFCB;
-        this.$refs.pieChartCost.initChart(this.lineChartData1);
-      });
-      //鑾峰彇妯″瀷鑾峰彇鎸囨爣
-      getSettingIndex(this.queryParams.id).then(response => {
-        this.list = response.data;
-        this.queryParams.indexName = "";
-        this.list.forEach(item => {
-          this.queryParams.indexName += item.code + ",";
-        });
-        getEnergyConsumption(this.queryParams).then(response => {
-          this.arraylist3 = response.data.resultListZBL; //鎶樻爣閲�
-          this.arraylist5 = response.data.resultListXFCB; //鎶樻爣閲�
-          //this.arraylist5=response.data.tabledataMap;
-          //鑳借�楁秷璐圭粨鏋� 瀵规瘮
-          let resultZBL = [];
-          let currentValue = [];
-          let lastYearValue = [];
-          let xAxis = [];
-          for (let i = 0; i < this.arraylist3.length; i++) {
-            currentValue.push(this.numFilter(this.arraylist3[i].currentValue));
-            lastYearValue.push(
-              this.numFilter(this.arraylist3[i].lastYearValue)
-            );
-          }
-          resultZBL.push(currentValue);
-          resultZBL.push(lastYearValue);
-          this.xAxisListZBL = response.data.resultZBL;
-          for (let i = 0; i < this.xAxisListZBL.length; i++) {
-            xAxis.push(this.xAxisListZBL[i].indexName);
-          }
-          this.lineChartData2.xAxis = xAxis;
-          this.lineChartData2.newVisitis = resultZBL;
-          this.lineChartData2.actualData = ["鏈湡", "鍚屾湡"];
-          this.$refs.BarChart.initChart(this.lineChartData2);
-          //鑳借�楁秷璐规垚鏈� 瀵规瘮
-          let resultXFCB = [];
-          let currentValueXFCB = [];
-          let lastYearValueXFCB = [];
-          let minValue = [];
-          let xAxisXFCB = [];
-          for (let i = 0; i < this.arraylist5.length; i++) {
-            currentValueXFCB.push(this.arraylist5[i].currentValue);
-            lastYearValueXFCB.push(this.arraylist5[i].lastYearValue);
-            minValue.push(this.numFilter(this.arraylist5[i].minValue));
-          }
-          resultXFCB.push(currentValueXFCB);
-          resultXFCB.push(lastYearValueXFCB);
-          //source.push(minValue);
-          //x杞村潗鏍囧悕绉�
-          this.xAxisListXFCB = response.data.resultXFCB;
-          for (let i = 0; i < this.xAxisListXFCB.length; i++) {
-            xAxisXFCB.push(this.xAxisListXFCB[i].indexName);
-          }
-          this.lineChartData3.xAxis = xAxisXFCB;
-          this.lineChartData3.newVisitis = resultXFCB;
-          this.lineChartData3.actualData = ["鏈湡", "鍚屾湡", "棰勭畻"];
-          this.$refs.BarCharts.initChart(this.lineChartData3);
-        });
-      });
-    },
-
-    handleCheckAllChange1(val) {
-      let checke = [];
-      this.list.forEach(item => {
-        checke.push(item.code);
-      });
-      this.checkList1 = val ? checke : [];
-      this.isIndeterminate1 = false;
-      this.resultListZBL(checke);
-    },
-    handleCheckedCitiesChange1(value) {
-      let checkedCount = value.length;
-      this.checkAll1 = checkedCount === this.list.length;
-      this.isIndeterminate1 =
-        checkedCount > 0 && checkedCount < this.list.length;
-      this.resultListZBL(value);
-    },
-    handleCheckAllChange2(val) {
-      let checke = [];
-      this.list.forEach(item => {
-        checke.push(item.code);
-      });
-      this.checkList2 = val ? checke : [];
-      this.isIndeterminate2 = false;
-      this.resultListXFCB(checke);
-    },
-    handleCheckedCitiesChange2(value) {
-      this.resultListXFCB(value);
-      let checkedCount = value.length;
-      this.checkAll2 = checkedCount === this.list.length;
-      this.isIndeterminate2 =
-        checkedCount > 0 && checkedCount < this.list.length;
-    },
-    resultListZBL(value) {
-      this.queryParams.indexName = value.join(",");
-      getEnergyConsumption(this.queryParams).then(response => {
-        this.arraylist3 = response.data.resultListZBL; //鎶樻爣閲�
-        //鑳借�楁秷璐圭粨鏋� 瀵规瘮
-        let resultZBL = [];
-        let currentValue = [];
-        let lastYearValue = [];
-        let xAxis = [];
-        for (let i = 0; i < this.arraylist3.length; i++) {
-          currentValue.push(this.numFilter(this.arraylist3[i].currentValue));
-          lastYearValue.push(this.numFilter(this.arraylist3[i].lastYearValue));
-        }
-        resultZBL.push(currentValue);
-        resultZBL.push(lastYearValue);
-        let xAxisListZBL = [];
-        xAxisListZBL = response.data.resultZBL;
-        for (let i = 0; i < xAxisListZBL.length; i++) {
-          xAxis.push(xAxisListZBL[i].indexName);
-        }
-        this.lineChartData2.xAxis = xAxis;
-        this.lineChartData2.newVisitis = resultZBL;
-        this.lineChartData2.actualData = ["鏈湡", "鍚屾湡"];
-        this.$refs.BarChart.initChart(this.lineChartData2);
-      });
-    },
-    resultListXFCB(value) {
-      this.queryParams.indexName = value.join(",");
-      //鑳芥簮娑堣垂鎴愭湰鎯呭喌
-      getEnergyConsumption(this.queryParams).then(response => {
-        this.arraylist5 = response.data.resultListXFCB; //鎶樻爣閲�
-        //鑳借�楁秷璐规垚鏈� 瀵规瘮
-        let resultXFCB = [];
-        let currentValueXFCB = [];
-        let lastYearValueXFCB = [];
-        let minValue = [];
-        let xAxisXFCB = [];
-        for (let i = 0; i < this.arraylist5.length; i++) {
-          currentValueXFCB.push(this.arraylist5[i].currentValue);
-          lastYearValueXFCB.push(this.arraylist5[i].lastYearValue);
-          minValue.push(this.numFilter(this.arraylist5[i].minValue));
-        }
-        resultXFCB.push(currentValueXFCB);
-        resultXFCB.push(lastYearValueXFCB);
-        //source.push(minValue);
-        //x杞村潗鏍囧悕绉�
-        this.xAxisListXFCB = response.data.resultXFCB;
-        for (let i = 0; i < this.xAxisListXFCB.length; i++) {
-          xAxisXFCB.push(this.xAxisListXFCB[i].indexName);
-        }
-        this.lineChartData3.xAxis = xAxisXFCB;
-        this.lineChartData3.newVisitis = resultXFCB;
-        this.lineChartData3.actualData = ["鏈湡", "鍚屾湡", "棰勭畻"];
-        this.$refs.BarCharts.initChart(this.lineChartData3);
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.modelNodeChange(this.queryParams);
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    handleTime(data) {
-      let nowDate = new Date();
-      let date = {
-        year: nowDate.getFullYear(),
-        month: nowDate.getMonth() + 1,
-        frontMonth: nowDate.getMonth()
-      };
-      if (data == "YEAR") {
-        (this.dateTypes = "year"), (this.valueFormat = "yyyy");
-      } else if (data == "MONTH") {
-        //this.dateTypes='monthrange'
-        (this.dateTypes = "month"), (this.valueFormat = "yyyy-MM");
-      }
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夎兘鑰楁寚鏍囪秼鍔垮垎鏋愭暟鎹」?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          //return exportEnergyindex(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-    numFilter(value) {
-      // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = "";
-      if (!isNaN(value) && value !== "") {
-        realVal = parseFloat(value).toFixed(this.skinName);
-      } else {
-        realVal = "--";
-      }
-      return realVal;
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.dashboard-editor-container {
-  padding: 32px;
-  // background-color: rgb(240, 242, 245);
-  position: relative;
-  .chart-wrapper {
-    // background: #fff;
-    padding: 16px 16px 0;
-    margin-bottom: 32px;
-  }
-}
-.chart-title {
-  display: block;
-  background: #f2f6fc;
-  height: 30px;
-  line-height: 30px;
-  padding: 0 10px;
-}
-@media (max-width: 1024px) {
-  .chart-wrapper {
-    padding: 8px;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/energyStatistics/energyConsumption/consumptionCost.vue b/energy_management_ui/src/views/energyStatistics/energyConsumption/consumptionCost.vue
deleted file mode 100644
index b5c2acb..0000000
--- a/energy_management_ui/src/views/energyStatistics/energyConsumption/consumptionCost.vue
+++ /dev/null
@@ -1,156 +0,0 @@
-<template>
-  <div class="dashboard-editor-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="缁熻鍛ㄦ湡">
-        <el-date-picker
-          v-model="queryParams.beginTime"
-          :type="dateTypes"
-          style="width: 150px"
-          :value-format="valueFormat"
-          placeholder="寮�濮嬫棩鏈�">
-        </el-date-picker>
-        鍒�
-        <el-date-picker
-          v-model="queryParams.endTime"
-          :type="dateTypes"
-          style="width: 150px"
-          :value-format="valueFormat"
-          placeholder="缁撴潫鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" size="mini" @click="handleExport">瀵煎嚭</el-button>
-      </el-form-item>
-    </el-form>
-    <h4 style="float: left; text-align:center;padding: 0;margin: 0px 0px 10px;width: 90%;">{{title}}鑳芥簮娑堣�楁垚鏈粺璁℃姤琛�</h4>
-      <el-table border show-summary style="width: 100%" :data=tabledata>
-        <el-table-column prop="dateTims" label="鏃ユ湡" align="center"></el-table-column>
-        <template v-for="item in  tablehead ">
-          <el-table-column :label=item.lable align="center" :prop=item.prop >
-            <template v-for="childnode in item.childNodes">
-              <el-table-column :prop=childnode.prop :label=childnode.lable align="center"></el-table-column>
-            </template>
-          </el-table-column>
-        </template>
-      </el-table>
-    </div>
-</template>
-
-<script>
-  import {listEnergyConsumption,getSettingEnergy,energyConsumptionExport} from "@/api/energyStatistics/statistics";
-  export default {
-    name: 'consumption',
-    props: ["modelCode"],
-    data() {
-      return {
-          // 閬僵灞�
-        loading: true,
-        total: 0,
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          beginTime: undefined,
-          endTime: undefined,
-          timeType: undefined,
-          indexCode: undefined,
-        },
-        tablehead:[
-          /*this.tablehead=[
-            {"lable":"鏃ユ湡","prop":"data"},
-            {"lable":"鎸囨爣1",
-              "childnodes":[
-                {"lable":"鍒�1","prop":"a1"},
-                {"lable":"鍒�2","prop":"a2"}
-              ]
-            },
-            {"lable":"鎸囨爣2",
-              "childnodes":[
-                {"lable":"鍒梐","prop":"b1"},
-                {"lable":"鍒梑","prop":"b2"}
-              ]
-            },];*/
-        ],
-        tabledata:[
-          /*{"a1":"111","a2":"112","b1":"221","b2":"222","data":'2020-03-01'}*/
-        ],
-        list:[],
-        arraylist:[],
-        //dateTypes: 'monthrange',//鏃堕棿鑼冨洿
-        dateTypes: '',
-        valueFormat:'',
-        title:"",
-        skinName:"",
-      }
-    },
-    created() {
-      this.queryParams.timeType=this.$route.params && this.$route.params.timeType;
-      this.title=this.$route.params && this.$route.params.titleName;
-      if(this.queryParams.timeType=='YEAR'){
-        this.dateTypes= 'year';
-        this.valueFormat='yyyy';
-      }else if(this.queryParams.timeType=='MONTH'){
-        this.dateTypes='month';
-        this.valueFormat='yyyy-MM';
-      }
-      this.queryParams.beginTime = this.$route.params && this.$route.params.beginTime;
-      this.queryParams.endTime = this.$route.params && this.$route.params.endTime;
-      this.queryParams.indexCode =this.$route.params && this.$route.params.indexCode;
-      this.queryParams.id =this.$route.params && this.$route.params.id;
-      this.getList();
-    },
-    mounted() {
-
-    },
-    methods: {
-      getList() {
-        let aa=[];
-        let bb=[];
-        listEnergyConsumption(this.queryParams).then(response => {
-          this.tablehead = response.data.tablehead;
-          this.tabledata= response.data.tabledataMap;
-          console.log("this.tablehead="+JSON.stringify(response));
-        })
-      },
-      /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-      handleExport() {
-        const queryParams = this.queryParams;
-        this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夎兘鑰楁寚鏍囪秼鍔垮垎鏋愭暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function () {
-          return energyConsumptionExport(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function () {
-        });
-      },
-    }
-  }
-</script>
-
-<style lang="scss" scoped>
-  .dashboard-editor-container {
-    padding: 32px;
-    background-color: rgb(240, 242, 245);
-    position: relative;
-    .chart-wrapper {
-      background: #fff;
-      padding: 16px 16px 0;
-      margin-bottom: 32px;
-    }
-  }
-  .chart-title{
-    display: block;
-    background: #f2f6fc;
-    height: 30px;
-    line-height: 30px;
-    padding: 0 10px;
-  }
-  @media (max-width:1024px) {
-    .chart-wrapper {
-      padding: 8px;
-    }
-  }
-</style>
diff --git a/energy_management_ui/src/views/energyStatistics/energyConsumption/index.vue b/energy_management_ui/src/views/energyStatistics/energyConsumption/index.vue
deleted file mode 100644
index e11ec61..0000000
--- a/energy_management_ui/src/views/energyStatistics/energyConsumption/index.vue
+++ /dev/null
@@ -1,79 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="鑳借�楁秷璐规垚鏈垎鏋�" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :showOpt="false"
-            :modelCode="modelCode"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <div>
-          <consumption ref="consumption" style="padding:10px"></consumption>
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import consumption from "./consumption";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from "@/components/shrink/index.vue";
-export default {
-  mixins: [mixins],
-  components: { ModelNode, consumption, ShrinkCol },
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  data() {
-    return {
-      modelCode: undefined,
-      isCollapse: false,
-      bodyStyleRight: {}
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 130 + "px"
-      };
-    },
-    changeNode: function(node) {
-      this.$refs.consumption.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyStatistics/energyConsumption/pieChartCost.vue b/energy_management_ui/src/views/energyStatistics/energyConsumption/pieChartCost.vue
deleted file mode 100644
index 330d40a..0000000
--- a/energy_management_ui/src/views/energyStatistics/energyConsumption/pieChartCost.vue
+++ /dev/null
@@ -1,164 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    chartData: {
-      type: Object
-      //required: true
-    }
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ newVisitis, datas, title } = {}) {
-      let scale = 1;
-      this.chart.setOption({
-        title: {
-          text: "鑳芥簮娑堣垂鎴愭湰鍒嗘瀽",
-          x: "left",
-          y: "top",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        tooltip: {
-          trigger: "item",
-          formatter: datas
-        },
-        grid: {
-          top: 40,
-          left: "2%",
-          right: "2%",
-          bottom: "3%",
-          containLabel: true
-        },
-        legend: {
-          // orient 璁剧疆甯冨眬鏂瑰紡锛岄粯璁ゆ按骞冲竷灞�锛屽彲閫夊�硷細'horizontal'锛堟按骞筹級 娄 'vertical'锛堝瀭鐩达級
-          orient: "vertical",
-          // x 璁剧疆姘村钩瀹夋斁浣嶇疆锛岄粯璁ゅ叏鍥惧眳涓紝鍙�夊�硷細'center' 娄 'left' 娄 'right' 娄 {number}锛坸鍧愭爣锛屽崟浣峱x锛�
-          x: "left",
-          // y 璁剧疆鍨傜洿瀹夋斁浣嶇疆锛岄粯璁ゅ叏鍥鹃《绔紝鍙�夊�硷細'top' 娄 'bottom' 娄 'center' 娄 {number}锛坹鍧愭爣锛屽崟浣峱x锛�
-          y: "10%",
-          //left: 10,
-          itemWidth: 24, // 璁剧疆鍥句緥鍥惧舰鐨勫
-          itemHeight: 18, // 璁剧疆鍥句緥鍥惧舰鐨勯珮
-          textStyle: {
-            color: "#fff" // 鍥句緥鏂囧瓧棰滆壊
-          },
-          // itemGap璁剧疆鍚勪釜item涔嬮棿鐨勯棿闅旓紝鍗曚綅px锛岄粯璁や负10锛屾í鍚戝竷灞�鏃朵负姘村钩闂撮殧锛岀旱鍚戝竷灞�鏃朵负绾靛悜闂撮殧
-          // itemGap: 30,
-          backgroundColor: "#eee", // 璁剧疆鏁翠釜鍥句緥鍖哄煙鑳屾櫙棰滆壊
-          data: datas,
-          formatter: function(item) {
-            let target;
-            let unitId;
-            for (let i = 0; i < newVisitis.length; i++) {
-              if (datas[i].name === item) {
-                target = datas[i].value;
-                unitId = datas[i].unitId;
-              }
-            }
-            let arr = [
-              item + +target + unitId
-            ]; /*["{a|"+target+"}","{b|"+item+"}"]*/
-            return arr; /*.join("\n")*/
-          }
-        },
-        series: [
-          {
-            //name: '鐢ㄦ按',
-            type: "pie",
-            avoidLabelOverlap: false,
-            radius: ["40%", "60%"], // 璁剧疆鐜舰楗肩姸鍥撅紝 绗竴涓櫨鍒嗘暟璁剧疆鍐呭湀澶у皬锛岀浜屼釜鐧惧垎鏁拌缃鍦堝ぇ灏�
-            center: ["65%", "50%"], // 璁剧疆楗肩姸鍥句綅缃紝绗竴涓櫨鍒嗘暟璋冩按骞充綅缃紝绗簩涓櫨鍒嗘暟璋冨瀭鐩翠綅缃�
-            data: newVisitis, //[{value:335, name:'鐢ㄦ按' },{value:310, name:'鐢ㄧ數'},{value:234, name:'鐢ㄧ叅'}],/*selected: true*/
-            // itemStyle 璁剧疆楗肩姸鍥炬墖褰㈠尯鍩熸牱寮�
-            itemStyle: {
-              // emphasis锛氳嫳鏂囨剰鎬濇槸 寮鸿皟;鐫�閲�;锛堣疆寤撱�佸浘褰㈢瓑鐨勶級椴滄槑;绐佸嚭锛岄噸璇�
-              // emphasis锛氳缃紶鏍囨斁鍒板摢涓�鍧楁墖褰笂闈㈢殑鏃跺�欙紝鎵囧舰鏍峰紡銆侀槾褰�
-              emphasis: {
-                shadowBlur: 10,
-                shadowOffsetX: 0,
-                shadowColor: "rgba(30, 144, 255锛�0.5)"
-              }
-            },
-            // 璁剧疆鍊煎煙鐨勯偅鎸囧悜绾�
-            labelLine: {
-              normal: {
-                show: false // show璁剧疆绾挎槸鍚︽樉绀猴紝榛樿涓簍rue锛屽彲閫夊�硷細true 娄 false
-              }
-            },
-            // 璁剧疆鍊煎煙鐨勬爣绛�
-            label: {
-              normal: {
-                show: true,
-                position: "center",
-                formatter: ["绱鎴愭湰", title].join("\n")
-              },
-              emphasis: {
-                show: true
-              }
-            }
-            /*label: {
-              normal: {
-                position: 'inner',  // 璁剧疆鏍囩浣嶇疆锛岄粯璁ゅ湪楗肩姸鍥惧 鍙�夊�硷細'outer' 娄 'inner锛堥ゼ鐘跺浘涓婏級'
-                // formatter: '{a} {b} : {c}涓� ({d}%)'   璁剧疆鏍囩鏄剧ず鍐呭 锛岄粯璁ゆ樉绀簕b}
-                // {a}鎸噑eries.name  {b}鎸噑eries.data鐨刵ame
-                // {c}鎸噑eries.data鐨剉alue  {d}%鎸囪繖涓�閮ㄥ垎鍗犳�绘暟鐨勭櫨鍒嗘瘮
-                formatter: '{c}'
-              }
-            }*/
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyStatistics/energyStatisticsTrend/EnergyIndex.vue b/energy_management_ui/src/views/energyStatistics/energyStatisticsTrend/EnergyIndex.vue
deleted file mode 100644
index a4e2464..0000000
--- a/energy_management_ui/src/views/energyStatistics/energyStatisticsTrend/EnergyIndex.vue
+++ /dev/null
@@ -1,380 +0,0 @@
-<template>
-  <div class="dashboard-editor-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item label="鏌ョ湅鎸囨爣">
-        <el-select
-          v-model="queryParams.procedure"
-          placeholder="璇烽�夋嫨鎸囨爣"
-          @change="currentSel"
-        >
-          <el-option
-            style="width: 150px"
-            v-for="dict in list"
-            :key="dict.indexId"
-            :label="dict.name"
-            :value="dict.indexId"
-          ></el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="鏃ユ湡" label-width="40px">
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio
-            style="margin-right: 10px"
-            v-for="dict in dateTypeOptions"
-            :key="dict.dictValue"
-            :label="dict.dictValue"
-            @change="handleTime(dict.dictValue)"
-            >{{ dict.dictLabel }}</el-radio
-          >
-        </el-radio-group>
-        <el-date-picker
-          v-model="queryParams.beginTime"
-          :type="dateTypes"
-          style="width: 150px"
-          :value-format="valueFormat"
-          placeholder="寮�濮嬫棩鏈�"
-        >
-        </el-date-picker>
-        鍒�
-        <el-date-picker
-          v-model="queryParams.endTime"
-          :type="dateTypes"
-          style="width: 150px"
-          :value-format="valueFormat"
-          placeholder="缁撴潫鏃ユ湡"
-        >
-        </el-date-picker>
-        <!--<el-date-picker
-          v-model="dateRange"
-          size="small"
-          style="width: 240px"
-          :value-format="valueFormat"
-          :type="dateTypes"
-          :default-value="dateRange"
-          range-separator="-"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡"
-        ></el-date-picker>-->
-      </el-form-item>
-      <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >鏌ヨ</el-button
-        >
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-          >閲嶇疆</el-button
-        >
-      </el-form-item>
-    </el-form>
-    <el-row :gutter="32">
-      <el-col :xs="24" :sm="24" :lg="24">
-        <div class="chart-wrapper">
-          <line-chart ref="lineChart" :chart-data="lineChartData" />
-        </div>
-      </el-col>
-    </el-row>
-    <el-row :gutter="32">
-      <el-col :xs="24" :sm="24" :lg="24">
-        <div class="chart-wrapper">
-          <h4
-            style="float: left; text-align:center;padding: 0;margin: 0;width: 90%;"
-          >
-            {{ title }}1
-          </h4>
-          <el-button
-            type="warning"
-            icon="el-icon-download"
-            size="mini"
-            style="float: right"
-            @click="handleExport"
-            >瀵煎嚭</el-button
-          ><!--v-hasPermi="['system:post:export']"-->
-          <el-table v-loading="loading" :data="arraylist">
-            <el-table-column
-              prop="dataTime"
-              label="鏃ユ湡"
-              align="center"
-              width="150"
-              show-overflow-tooltip
-            >
-              <template slot-scope="scope">
-                <span>{{ changeTime(parseTime(scope.row.dataTime)) }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column prop="currentValue" label="鏈湡鍊�" align="center">
-              <template slot-scope="scope">
-                <span>{{ numFilter(scope.row.currentValue) }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column prop="lastYearValue" label="鍚屾湡鍊�" align="center">
-              <template slot-scope="scope">
-                <span>{{ numFilter(scope.row.lastYearValue) }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column prop="yoy" label="鍚屾瘮" align="center">
-              <template slot-scope="scope">
-                <span>{{ numFilter(scope.row.yoy) }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column
-              v-if="queryParams.timeType === 'MONTH'"
-              prop="qoq"
-              label="鐜瘮"
-              align="center"
-            >
-              <template slot-scope="scope">
-                <span>{{ numFilter(scope.row.qoq) }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column prop="minValue" label="鍘嗗彶鏈�浼�" align="center">
-              <template slot-scope="scope">
-                <span>{{ numFilter(scope.row.minValue) }}</span>
-              </template>
-            </el-table-column>
-          </el-table>
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import LineChart from "./lineChart";
-import {
-  getSettingIndex,
-  getSettingEnergy,
-  exportEnergyindex,
-  getEnergyStatisticsTrend
-} from "@/api/energyStatistics/statistics";
-
-export default {
-  name: "EnergyIndex",
-  name: "Index",
-  components: { LineChart },
-  props: ["modelCode"],
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      total: 0,
-      dateTypeOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        beginTime: undefined,
-        endTime: undefined,
-        dataTime: undefined,
-        timeType: undefined,
-        indexId: undefined,
-        procedure: undefined
-      },
-      list: [],
-      arraylist: [],
-      lineChartData: {
-        newVisitis: null
-      },
-      //dateTypes: 'monthrange',//鏃堕棿鑼冨洿
-      dateTypes: "month",
-      valueFormat: "yyyy-MM",
-      title: "",
-      skinName: ""
-    };
-  },
-  watch: {
-    modelCode: {
-      deep: true,
-      handler(val) {
-        this.getList(val);
-      }
-    }
-  },
-  created() {
-    //this.getList();
-    this.getDicts("timeType").then(response => {
-      this.dateTypeOptions = response.data;
-      this.queryParams.timeType = this.dateTypeOptions.find(
-        f => f.isDefault === "Y"
-      ).dictValue;
-    });
-    this.getConfigKey("energyStatistics.energyStatisticsTrend").then(
-      response => {
-        this.skinName = response.msg;
-      }
-    );
-    let endTtime =
-      new Date().getFullYear() +
-      "-" +
-      (new Date().getMonth() + 1 > 9
-        ? new Date().getMonth() + 1
-        : "0" + (new Date().getMonth() + 1));
-    let starTtime =
-      new Date().getFullYear() -
-      1 +
-      "-" +
-      (new Date().getMonth() + 1 > 9
-        ? new Date().getMonth() + 1
-        : "0" + (new Date().getMonth() + 1));
-    this.queryParams.beginTime = starTtime;
-    this.queryParams.endTime = endTtime;
-  },
-  methods: {
-    modelNodeChange(modelNode) {
-      this.queryParams.id = modelNode.id;
-      this.loading = true;
-      getSettingIndex(this.queryParams.id).then(response => {
-        let result = response.data;
-        this.list = result.filter(f => f.indexType === "STATISTIC");
-        this.loading = false;
-        if (this.list.length > 0) {
-          this.queryParams.procedure = this.list[0].indexId;
-        } else {
-          this.queryParams.procedure = "";
-          this.title = "";
-        }
-        if (this.queryParams.timeType == "YEAR") {
-          this.queryParams.beginTime =
-            this.queryParams.beginTime.substring(0, 4) + "-01-01";
-          this.queryParams.endTime =
-            this.queryParams.endTime.substring(0, 4) + "-01-01";
-        } else if (this.queryParams.timeType == "MONTH") {
-          this.queryParams.beginTime =
-            this.queryParams.beginTime.substring(0, 7) + "-01";
-          this.queryParams.endTime =
-            this.queryParams.endTime.substring(0, 7) + "-01";
-        }
-        this.getList();
-      });
-    },
-    getList() {
-      let source = [];
-      let xAxis = [];
-      this.queryParams.indexId = this.queryParams.procedure;
-      getEnergyStatisticsTrend(this.queryParams).then(response => {
-        this.arraylist = response.rows;
-        this.total = response.total;
-        let currentValue = [];
-        let lastYearValue = [];
-        let minValue = [];
-        for (let i = 0; i < this.arraylist.length; i++) {
-          currentValue.push(this.arraylist[i].currentValue);
-          lastYearValue.push(this.arraylist[i].lastYearValue);
-          minValue.push(this.arraylist[i].minValue);
-          if (this.queryParams.timeType == "MONTH") {
-            xAxis.push(this.arraylist[i].dataTime.substring(0, 7));
-          } else if (this.queryParams.timeType == "YEAR") {
-            xAxis.push(this.arraylist[i].dataTime.substring(0, 4));
-          }
-        }
-        source.push(currentValue);
-        source.push(lastYearValue);
-        let yAxis = "";
-        if (this.arraylist.length > 0) {
-          this.title =
-            this.arraylist[0].indexName + "(" + this.arraylist[0].unitId + ")";
-          yAxis = this.arraylist[0].unitId;
-        }
-        this.lineChartData.newVisitis = source;
-        this.lineChartData.actualData = ["鏈湡鍊�", "鍚屾湡鍊�"];
-        this.lineChartData.actual = minValue;
-        this.lineChartData.xAxis = xAxis;
-        this.lineChartData.title = this.title;
-        this.lineChartData.yAxis = yAxis;
-        this.$refs.lineChart.initChart(this.lineChartData);
-      });
-    },
-    numFilter(value) {
-      // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = "";
-      if (!isNaN(value) && value !== "") {
-        realVal = parseFloat(value).toFixed(this.skinName);
-      } else {
-        realVal = "--";
-      }
-      return realVal;
-    },
-    currentSel(selVal) {
-      //鑾峰彇涓嬫媺妗嗙殑text
-      let obj = {};
-      obj = this.list.find(item => {
-        return item.indexId === selVal;
-      });
-      this.title = obj.name;
-      this.queryParams.procedure = obj.indexId;
-    },
-    handleTime(date) {
-      if (date == "YEAR") {
-        (this.dateTypes = "year"), (this.valueFormat = "yyyy");
-      } else if (date == "MONTH") {
-        //this.dateTypes='monthrange'
-        (this.dateTypes = "month"), (this.valueFormat = "yyyy-MM");
-      }
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.queryParams.title = this.title;
-      this.getList();
-      //this.modelNodeChange(this.queryParams);
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夎兘鑰楁寚鏍囪秼鍔垮垎鏋愭暟鎹」?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportEnergyindex(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-    changeTime(time) {
-      if (time !== null && time !== undefined && time !== "") {
-        return time.substring(0, 10);
-      } else {
-        return "";
-      }
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.dashboard-editor-container {
-  padding: 32px;
-  position: relative;
-  .chart-wrapper {
-    padding: 16px 16px 0;
-    margin-bottom: 32px;
-  }
-}
-.chart-title {
-  display: block;
-  height: 30px;
-  line-height: 30px;
-  padding: 0 10px;
-}
-@media (max-width: 1024px) {
-  .chart-wrapper {
-    padding: 8px;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/energyStatistics/energyStatisticsTrend/index.vue b/energy_management_ui/src/views/energyStatistics/energyStatisticsTrend/index.vue
deleted file mode 100644
index 498227a..0000000
--- a/energy_management_ui/src/views/energyStatistics/energyStatisticsTrend/index.vue
+++ /dev/null
@@ -1,80 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="鑳借�楁寚鏍囪秼鍔垮垎鏋�" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :showOpt="false"
-            :modelCode="modelCode"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <div>
-          <EnergyIndex ref="EnergyIndex" style="padding:10px"></EnergyIndex>
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import EnergyIndex from "./EnergyIndex";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from "@/components/shrink/index.vue";
-
-export default {
-  mixins: [mixins],
-  components: { ModelNode, EnergyIndex, ShrinkCol },
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  data() {
-    return {
-      modelCode: undefined,
-      isCollapse: false,
-      bodyStyleRight: {}
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 130 + "px"
-      };
-    },
-    changeNode: function(node) {
-      this.$refs.EnergyIndex.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyStatistics/energyStatisticsTrend/lineChart.vue b/energy_management_ui/src/views/energyStatistics/energyStatisticsTrend/lineChart.vue
deleted file mode 100644
index baef153..0000000
--- a/energy_management_ui/src/views/energyStatistics/energyStatisticsTrend/lineChart.vue
+++ /dev/null
@@ -1,142 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "./mixins/resize";
-const animationDuration = 6000;
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    chartData: {
-      type: Object
-    }
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  data() {
-    return {
-      chart: null,
-      seriesData: []
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ newVisitis, xAxis, actualData, actual, title, yAxis } = {}) {
-      var series = [];
-      if (newVisitis != null || newVisitis != undefined) {
-        for (var i = 0; i < newVisitis.length; i++) {
-          series.push({
-            name: actualData[i],
-            type: "bar",
-            data: newVisitis[i],
-            smooth: true, //绾挎潯骞虫粦
-            //stack: 'vistors',
-            animationDuration: 2800,
-            animationEasing: "quadraticOut"
-          });
-        }
-        series.push({
-          name: "鍘嗗彶鏈�浼�",
-          type: "line",
-          data: actual,
-          smooth: true, //绾挎潯骞虫粦
-          animationDuration: 2800,
-          animationEasing: "quadraticOut"
-        });
-      }
-      this.chart.setOption({
-        title: {
-          text: title,
-          x: "center",
-          y: "top",
-          textStyle: {
-            color: "#333"
-          }
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        grid: {
-          top: 40,
-          left: "2%",
-          right: "2%",
-          bottom: "3%",
-          containLabel: true
-        },
-        legend: {
-          data: ["鏈湡鍊�", "鍚屾湡鍊�", "鍘嗗彶鏈�浼�"],
-          left: "60%",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        xAxis: [
-          {
-            type: "category",
-            data: xAxis,
-            axisTick: {
-              alignWithLabel: true
-            }
-          }
-        ],
-        yAxis: [
-          {
-            name: yAxis,
-            type: "value",
-            nameTextStyle: {
-              color: "#333"
-            },
-            axisLabel: {
-              formatter: "{value}"
-            },
-            axisTick: {
-              show: false
-            }
-          }
-        ],
-        series: series
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyStatistics/energyStatisticsTrend/mixins/resize.js b/energy_management_ui/src/views/energyStatistics/energyStatisticsTrend/mixins/resize.js
deleted file mode 100644
index ae02e64..0000000
--- a/energy_management_ui/src/views/energyStatistics/energyStatisticsTrend/mixins/resize.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import { debounce } from '@/utils'
-
-export default {
-  data() {
-    return {
-      $_sidebarElm: null
-    }
-  },
-  mounted() {
-    this.$_initResizeEvent()
-    this.$_initSidebarResizeEvent()
-  },
-  beforeDestroy() {
-    this.$_destroyResizeEvent()
-    this.$_destroySidebarResizeEvent()
-  },
-  activated() {
-    this.$_initResizeEvent()
-    this.$_initSidebarResizeEvent()
-  },
-  deactivated() {
-    this.$_destroyResizeEvent()
-    this.$_destroySidebarResizeEvent()
-  },
-  methods: {
-    $_resizeHandler() {
-      return debounce(() => {
-        if (this.chart) {
-          this.chart.resize()
-        }
-      }, 100)()
-    },
-    $_initResizeEvent() {
-      window.addEventListener('resize', this.$_resizeHandler)
-    },
-    $_destroyResizeEvent() {
-      window.removeEventListener('resize', this.$_resizeHandler)
-    },
-    $_sidebarResizeHandler(e) {
-      if (e.propertyName === 'width') {
-        this.$_resizeHandler()
-      }
-    },
-    $_initSidebarResizeEvent() {
-      this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
-      this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
-    },
-    $_destroySidebarResizeEvent() {
-      this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
-    }
-  }
-}
diff --git a/energy_management_ui/src/views/energyStatistics/energyStatisticsTrend/realTimeIndex.vue b/energy_management_ui/src/views/energyStatistics/energyStatisticsTrend/realTimeIndex.vue
deleted file mode 100644
index af698c6..0000000
--- a/energy_management_ui/src/views/energyStatistics/energyStatisticsTrend/realTimeIndex.vue
+++ /dev/null
@@ -1,135 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true">
-      <el-form-item label="鏃ユ湡" label-width="40px">
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio style="margin-right: 10px" v-for="dict in dateTypeOptions" :key="dict.dictValue" :label="dict.dictValue">{{dict.dictLabel}}</el-radio>
-        </el-radio-group>
-        <el-date-picker
-          v-model="queryParams.dataTime"
-          type="date"
-          style="width: 150px"
-          value-format="yyyy-MM-dd"
-          placeholder="璇烽�夋嫨鏃堕棿">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌ヨ</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-        >瀵煎嚭</el-button>
-      </el-form-item>
-    </el-form>
-    <el-table  :data="tabledata" border>
-      <el-table-column label=鏃ユ湡 align="center" prop="formatdate"/>
-      <template v-for="item in  tablehead ">
-        <el-table-column :label=item.indexName align="center" prop="value" />
-      </template>
-    </el-table>
-    <pagination style="padding-bottom: 50px !important;"
-                v-show="total>0"
-                :total="total"
-                :page.sync="queryParams.pageNum"
-                :limit.sync="queryParams.pageSize"
-                @pagination="getList"
-    />
-  </div>
-</template>
-
-<script>
-  import {reportFormsvg,reportFormsvgExport,getConfigure } from "@/api/energyStatistics/statistics";
-  export default {
-    name: 'realTimeIndex',
-    props:['svgId','tagId'],
-    data() {
-      return {
-        // 閬僵灞�
-        loading: true,
-        total: 0,
-        tagCodes: [],
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          indexType:'STATISTIC',
-          dataTime:undefined,
-          timeType:'MONTH',
-          nodeId:undefined,
-        },
-        dateTypeOptions:[],
-        tablehead:[],
-        tabledata:[],
-      }
-    },
-    created() {
-      if (this.$props.tagId) {
-        this.queryParams.nodeId = this.$props.tagId;
-      }
-      this.getDicts("dateType").then(response => {
-        this.dateTypeOptions = response.data;
-        this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-      });
-      this.queryParams.dataTime=this.formatDate(new Date());
-    },
-
-    methods: {
-      show(nodeId){
-        this.queryParams.nodeId = nodeId;
-        this.getList();
-        //this.queryParams.nodeId='5b28f6ab-29f2-471a-bec9-ec481909f26a'
-      },
-      getList() {
-        this.loading = true;
-        reportFormsvg(this.queryParams).then(response => {
-          this.tablehead = response.data.tabledataMap;
-          this.tabledata= response.data.tabledata;
-          this.loading = false;
-        })
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.queryParams.title=this.title;
-        this.getList();
-      },
-      /** 閲嶇疆鎸夐挳鎿嶄綔 */
-      resetQuery() {
-        this.resetForm("queryForm");
-        this.handleQuery();
-      },
-      /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-      handleExport() {
-        const queryParams = this.queryParams;
-        this.$confirm('鏄惁纭瀵煎嚭鏁版嵁椤�?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function () {
-           return reportFormsvgExport(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function () {
-        });
-      },
-      formatDate: function (value) {
-        let date = new Date(value);
-        let y = date.getFullYear();
-        let MM = date.getMonth() + 1;
-        MM = MM < 10 ? ('0' + MM) : MM;
-        let d = date.getDate();
-        d = d < 10 ? ('0' + d) : d;
-        let h = date.getHours();
-        h = h < 10 ? ('0' + h) : h;
-        let m = date.getMinutes();
-        m = m < 10 ? ('0' + m) : m;
-        let s = date.getSeconds();
-        s = s < 10 ? ('0' + s) : s;
-        return y + '-' + MM + '-' + d;
-      },
-    }
-  }
-</script>
diff --git a/energy_management_ui/src/views/energyStatistics/energyStatisticsTrend/reportForm.vue b/energy_management_ui/src/views/energyStatistics/energyStatisticsTrend/reportForm.vue
deleted file mode 100644
index 843803f..0000000
--- a/energy_management_ui/src/views/energyStatistics/energyStatisticsTrend/reportForm.vue
+++ /dev/null
@@ -1,212 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true">
-      <el-form-item label="鏃ユ湡" label-width="40px">
-          <el-date-picker
-            v-model="queryParams.starTtime"
-            type="date"
-            style="width: 150px"
-            value-format="yyyy-MM-dd"
-            placeholder="璇烽�夋嫨鏃堕棿">
-          </el-date-picker>
-      </el-form-item>
-      <el-form-item label="鏃堕棿闂撮殧(鍒嗛挓)" label-width="110px">
-        <el-input
-          v-model="queryParams.interval"
-          placeholder="鏃堕棿闂撮殧"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌ヨ</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-        >瀵煎嚭</el-button>
-      </el-form-item>
-    </el-form>
-    <el-table  :data="list">
-      <el-table-column prop="dataTime" label="鏃ユ湡" align="center" width="150" show-overflow-tooltip>
-      </el-table-column>
-      <el-table-column prop="currentValue" label="鎸囨爣1"  align="center"></el-table-column>
-      <el-table-column prop="lastYearValue" label="鎸囨爣1"  align="center"></el-table-column>
-      <el-table-column prop="yoy" label="鎸囨爣1"  align="center"></el-table-column>
-      <el-table-column prop="qoq" label="鎸囨爣1"  align="center"> </el-table-column>
-      <el-table-column prop="minValue" label="鎸囨爣1"  align="center"></el-table-column>
-    </el-table>
-    <!--<div class="el-table el-table&#45;&#45;fit el-table&#45;&#45;enable-row-hover el-table&#45;&#45;medium">
-      <div class="hidden-columns">
-        <div></div>
-        <div></div>
-        <div></div>
-        <div></div>
-        <div></div>
-        <div></div>
-      </div>
-      <div class="el-table__header-wrapper">
-        <table cellspacing="0" cellpadding="0" border="0" class="el-table__header" style="width: 790px;">
-          <colgroup>
-            <col name="el-table_2_column_7" width="150">
-            <col name="el-table_2_column_8" width="128">
-            <col name="el-table_2_column_9" width="128">
-            <col name="el-table_2_column_10" width="128">
-            <col name="el-table_2_column_11" width="128">
-            <col name="el-table_2_column_12" width="128">
-            <col name="gutter" width="0">
-          </colgroup>
-          <thead class="has-gutter">
-          <tr class="">
-            <th colspan="1" rowspan="1" class="el-table_2_column_7  is-center   is-leaf">
-              <div class="cell">鏃ユ湡</div>
-            </th>
-            <th colspan="1" rowspan="1" class="el-table_2_column_8  is-center   is-leaf">
-              <div class="cell">鎸囨爣1</div>
-            </th>
-            <th colspan="1" rowspan="1" class="el-table_2_column_9  is-center   is-leaf">
-              <div class="cell">鎸囨爣1</div>
-            </th>
-            <th colspan="1" rowspan="1" class="el-table_2_column_10  is-center   is-leaf">
-              <div class="cell">鎸囨爣1</div>
-            </th>
-            <th colspan="1" rowspan="1" class="el-table_2_column_11  is-center   is-leaf">
-              <div class="cell">鎸囨爣1</div>
-            </th>
-            <th colspan="1" rowspan="1" class="el-table_2_column_12  is-center   is-leaf">
-              <div class="cell">鎸囨爣1</div>
-            </th>
-            <th class="gutter" style="width: 0px; display: none;"></th>
-          </tr>
-          </thead>
-        </table>
-      </div>
-      <div class="el-table__body-wrapper is-scrolling-none">
-        <table cellspacing="0" cellpadding="0" border="0" class="el-table__body" style="width: 790px;">
-          <colgroup>
-            <col name="el-table_2_column_7" width="150">
-            <col name="el-table_2_column_8" width="128">
-            <col name="el-table_2_column_9" width="128">
-            <col name="el-table_2_column_10" width="128">
-            <col name="el-table_2_column_11" width="128">
-            <col name="el-table_2_column_12" width="128">
-          </colgroup>
-          <tbody>&lt;!&ndash;&ndash;&gt;</tbody>
-        </table>
-        <div class="el-table__empty-block" style="width: 790px;">
-          <span class="el-table__empty-text">鏆傛棤鏁版嵁</span>
-        </div>&lt;!&ndash;&ndash;&gt;
-      </div>
-      <div class="el-table__column-resize-proxy" style="display: none;"></div>
-    </div>-->
-    <!--<table cellspacing="0" cellpadding="0" border="0" class="el-table__body" style="width: 90%;border: 1px solid #ddd;margin-bottom: 20px">
-      <thead class="has-gutter" style="background: #e7eaec">
-      <tr class="">
-        <th colspan="1" rowspan="1" class="el-table_4_column_24  is-center is-leaf">
-          <div class="cell">鏃ユ湡</div>
-        </th>
-        <th colspan="1" rowspan="1" class="el-table_4_column_25  is-center is-leaf">
-          <div class="cell">鎸囨爣</div>
-        </th>
-        <th colspan="1" rowspan="1" class="el-table_4_column_25  is-center is-leaf">
-          <div class="cell">鎸囨爣</div>
-        </th>
-      </tr>
-      </thead>
-      <tbody>
-      <tr class="el-table__row expanded"  style="border: 1px solid #ddd">
-        <td rowspan="1" colspan="1" class="el-table_1_column_3 is-center " >
-          <div class="cell">娴嬭瘯</div>
-        </td>
-        <td rowspan="1" colspan="1" class="el-table_1_column_3 is-center " >
-          <div class="cell">娴嬭瘯1</div>
-        </td>
-        <td rowspan="1" colspan="1" class="el-table_1_column_3 is-center " >
-          <div class="cell">娴嬭瘯2</div>
-        </td>
-      </tr>
-      </tbody>
-    </table>-->
-    <pagination style="padding-bottom: 50px !important;"
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-  </div>
-</template>
-
-<script>
-  import LineChart from './lineChart'
-  import {getSettingIndex,getSettingEnergy,exportEnergyindex,getEnergyStatisticsTrend} from "@/api/energyStatistics/statistics";
-/*  window.setInterval(() => {
-    setTimeout(fun, 0)
-  },3000),*/
-  export default {
-    name: 'EnergyIndex',
-    name: 'Index',
-    data() {
-      return {
-        // 閬僵灞�
-        //loading: true,
-        total: 0,
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          starTtime:undefined,
-          interval:'60'
-        },
-        list:[],
-        arraylist:[],
-      }
-    },
-    created() {
-      //this.getList();
-      let nowDate = new Date();
-      let date = {
-        year: nowDate.getFullYear(),
-        month: nowDate.getMonth() + 1,
-        frontMonth: nowDate.getMonth(),
-        date:nowDate.getDate(),
-      }
-      this.queryParams.starTtime= date.year + '-' + date.month+ '-'+ date.date;
-    },
-
-    methods: {
-        getList(data) {
-          console.log(data.id);
-          console.log(this.queryParams);
-        },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.queryParams.title=this.title;
-        this.getList();
-      },
-      /** 閲嶇疆鎸夐挳鎿嶄綔 */
-      resetQuery() {
-        this.resetForm("queryForm");
-        this.handleQuery();
-      },
-      /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-      handleExport() {
-        const queryParams = this.queryParams;
-        this.$confirm('鏄惁纭瀵煎嚭鏁版嵁椤�?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function () {
-         /* return exportEnergyindex(queryParams);*/
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function () {
-        });
-      },
-    }
-  }
-</script>
diff --git a/energy_management_ui/src/views/energyStatistics/energyStructure/EnergyIndex.vue b/energy_management_ui/src/views/energyStatistics/energyStructure/EnergyIndex.vue
deleted file mode 100644
index 88d0e08..0000000
--- a/energy_management_ui/src/views/energyStatistics/energyStructure/EnergyIndex.vue
+++ /dev/null
@@ -1,345 +0,0 @@
-<template>
-  <div class="dashboard-editor-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item label="鏃ユ湡" label-width="40px">
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio
-            style="margin-right: 10px"
-            v-for="dict in dateTypeOptions"
-            :key="dict.dictValue"
-            :label="dict.dictValue"
-            @change="handleTime(dict.dictValue)"
-            >{{ dict.dictLabel }}</el-radio
-          >
-        </el-radio-group>
-        <el-date-picker
-          v-model="queryParams.dataTime"
-          :type="dateTypes"
-          placeholder="閫夋嫨鏃ユ湡"
-        ></el-date-picker>
-      </el-form-item>
-      <el-form-item label="鑳芥簮鍝佺">
-        <el-select
-          v-model="queryParams.indexCode"
-          placeholder="璇烽�夋嫨鎸囨爣"
-          @change="currentSel"
-        >
-          <el-option
-            style="width: 150px"
-            v-for="dict in arraylist"
-            :key="dict.code"
-            :label="dict.name"
-            :value="dict.code"
-          ></el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >鏌ヨ</el-button
-        >
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-          >閲嶇疆</el-button
-        >
-      </el-form-item>
-    </el-form>
-    <el-row :gutter="32">
-      <el-col :xs="24" :sm="24" :lg="24">
-        <div class="chart-wrapper">
-          <line-chart ref="lineChart" :chart-data="lineChartData" />
-        </div>
-      </el-col>
-    </el-row>
-    <el-row :gutter="32">
-      <el-col :xs="24" :sm="24" :lg="24">
-        <div class="chart-wrapper">
-          <el-table :data="resultList" show-summary>
-            <el-table-column
-              prop="formatdate"
-              label="鏃ユ湡"
-              align="center"
-              width="150"
-              show-overflow-tooltip
-            ></el-table-column>
-            <el-table-column
-              prop="indexName"
-              label="绫诲埆"
-              align="center"
-            ></el-table-column>
-            <el-table-column
-              prop="unitId"
-              label="鍗曚綅"
-              align="center"
-            ></el-table-column>
-            <el-table-column
-              prop="yoy"
-              v-if="queryParams.timeType != 'DAY'"
-              label="鍚屾瘮"
-              align="center"
-            >
-              <template slot-scope="scope">
-                <span>{{ numFilter(scope.row.yoy) }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column
-              v-if="queryParams.timeType != 'DAY'"
-              prop="qoq"
-              label="鐜瘮"
-              align="center"
-            >
-              <template slot-scope="scope">
-                <span>{{ numFilter(scope.row.qoq) }}</span>
-              </template>
-            </el-table-column>
-          </el-table>
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import LineChart from "./lineChart";
-import {
-  getSettingEnergy,
-  getEnergyUnit,
-  getSettingIndex
-} from "@/api/energyStatistics/statistics";
-
-export default {
-  name: "EnergyIndex",
-  name: "Index",
-  components: { LineChart },
-  props: ["modelCode"],
-  data() {
-    return {
-      total: 0,
-      dateTypeOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        dataTime: undefined,
-        timeType: undefined,
-        indexId: undefined,
-        procedure: undefined,
-        indexCode: undefined
-      },
-      list: [],
-      arraylist: [],
-      resultList: [],
-      lineChartData: {
-        newVisitis: null
-      },
-      //dateTypes: 'monthrange',//鏃堕棿鑼冨洿
-      dateTypes: "month",
-      title: "",
-      skinName: ""
-    };
-  },
-  watch: {
-    modelCode: {
-      deep: true,
-      handler(val) {
-        this.getList(val);
-      }
-    }
-  },
-  created() {
-    //this.getList();
-    this.getDicts("dateType").then(response => {
-      this.dateTypeOptions = response.data;
-      this.queryParams.timeType = this.dateTypeOptions.find(
-        f => f.isDefault === "Y"
-      ).dictValue;
-    });
-    this.getConfigKey("energyStatistics.energyStructure").then(response => {
-      this.skinName = response.msg;
-    });
-
-    this.queryParams.dataTime =
-      new Date().getFullYear() +
-      "-" +
-      (new Date().getMonth() + 1 > 9
-        ? new Date().getMonth() + 1
-        : "0" + (new Date().getMonth() + 1));
-  },
-  methods: {
-    modelNodeChange(modelNode) {
-      this.queryParams.id = modelNode.id;
-      let source = [];
-      let xAxis = [];
-      if (this.queryParams.timeType == "DAY") {
-        this.queryParams.dataTime = this.formatDate(
-          new Date(this.queryParams.dataTime).getTime() - 72 * 60 * 60 * 1000
-        );
-      }
-      //鑾峰彇妯″瀷鑾峰彇鎸囨爣
-      getSettingIndex(modelNode.id).then(response => {
-        let result = response.data;
-        this.arraylist = result.filter(f => f.indexType === "STATISTIC");
-        if (this.arraylist.length > 0) {
-          this.queryParams.indexCode = this.arraylist[0].code;
-        }
-        /*for (let i=0;i<this.arraylist.length;i++){
-            let code=this.arraylist[i].code;
-            if (this.arraylist[i].code.indexOf(this.queryParams.procedure) >= 0) {
-              this.queryParams.indexCode=this.arraylist[i].code;
-            }
-          }*/
-        console.log(result);
-        console.log(this.queryParams.indexCode);
-        //鑾峰彇鎸囨爣璁$畻鏁版嵁
-        getEnergyUnit(this.queryParams).then(response => {
-          this.resultList = response.data;
-          let currentValue = [];
-          let lastYearValue = [];
-          this.resultList.forEach(item => {
-            currentValue.push(this.numFilter(item.maxValue));
-            lastYearValue.push(this.numFilter(item.minValue));
-            xAxis.push(item.formatdate);
-          });
-          source.push(currentValue);
-          let titleName = "";
-          if (this.resultList > 0) {
-            titleName =
-              this.resultList[0].indexName +
-              "(" +
-              this.resultList[0].unitId +
-              ")";
-          }
-          this.title = titleName;
-          this.lineChartData.currentValue = currentValue;
-          this.lineChartData.lastYearValue = lastYearValue;
-          this.lineChartData.xAxis = xAxis;
-          this.lineChartData.title = this.title;
-          this.$refs.lineChart.initChart();
-          if (this.queryParams.timeType == "DAY") {
-            this.queryParams.dataTime = this.formatDate(
-              new Date(this.queryParams.dataTime).getTime() +
-                72 * 60 * 60 * 1000
-            );
-          }
-        });
-      });
-    },
-    numFilter(value) {
-      // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = "";
-      if (!isNaN(value) && value !== "") {
-        realVal = parseFloat(value).toFixed(this.skinName);
-      } else {
-        realVal = "--";
-      }
-      return realVal;
-    },
-    currentSel(selVal) {
-      //鑾峰彇涓嬫媺妗嗙殑text
-      let obj = {};
-      obj = this.arraylist.find(item => {
-        //console.log(item.enersno)
-        return item.code === selVal;
-      });
-      this.title = obj.name;
-      this.queryParams.indexCode = obj.code;
-    },
-    handleTime(data) {
-      let date = {
-        year: new Date().getFullYear(),
-        month: new Date().getMonth() + 1,
-        dateDate: new Date().getDate()
-      };
-      if (data == "YEAR") {
-        this.dateTypes = "year";
-      } else if (data == "MONTH") {
-        //this.dateTypes='monthrange'
-        (this.dateTypes = "month"),
-          (this.queryParams.dataTime =
-            date.year + "-" + (date.month > 9 ? date.month : "0" + date.month));
-      } else if (data == "DAY") {
-        //this.dateTypes='monthrange'
-        (this.dateTypes = "date"),
-          (this.queryParams.dataTime =
-            date.year +
-            "-" +
-            (date.month > 9 ? date.month : "0" + date.month) +
-            "-" +
-            (date.dateDate > 9 ? date.dateDate : "0" + date.dateDate));
-      }
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      //this.getList(this.queryParams);
-      this.modelNodeChange(this.queryParams);
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夎兘鑰楁寚鏍囪秼鍔垮垎鏋愭暟鎹」?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportEnergyindex(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-    formatDate: function(value) {
-      let date = new Date(value);
-      let y = date.getFullYear();
-      let MM = date.getMonth() + 1;
-      MM = MM < 10 ? "0" + MM : MM;
-      let d = date.getDate();
-      d = d < 10 ? "0" + d : d;
-      let h = date.getHours();
-      h = h < 10 ? "0" + h : h;
-      let m = date.getMinutes();
-      m = m < 10 ? "0" + m : m;
-      let s = date.getSeconds();
-      s = s < 10 ? "0" + s : s;
-      return y + "-" + MM + "-" + d + " " + h + ":" + m + ":" + s;
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.dashboard-editor-container {
-  padding: 32px;
-  position: relative;
-  .chart-wrapper {
-    padding: 16px 16px 0;
-    margin-bottom: 32px;
-  }
-}
-.chart-title {
-  display: block;
-  height: 30px;
-  line-height: 30px;
-  padding: 0 10px;
-  color: #fff;
-}
-@media (max-width: 1024px) {
-  .chart-wrapper {
-    padding: 8px;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/energyStatistics/energyStructure/index.vue b/energy_management_ui/src/views/energyStatistics/energyStructure/index.vue
deleted file mode 100644
index 292557e..0000000
--- a/energy_management_ui/src/views/energyStatistics/energyStructure/index.vue
+++ /dev/null
@@ -1,80 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="鐢ㄨ兘鍗曞厓鑳借�楀垎鏋�" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :showOpt="false"
-            :modelCode="modelCode"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <div>
-          <EnergyIndex ref="EnergyIndex" style="padding:10px"></EnergyIndex>
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import EnergyIndex from "./EnergyIndex";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import mixins from "@/layout/mixin/getHeight";
-import ShrinkCol from "@/components/shrink/index.vue";
-
-export default {
-  mixins: [mixins],
-  components: { ModelNode, EnergyIndex, ShrinkCol },
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-  },
-  data() {
-    return {
-      modelCode: undefined,
-      isCollapse: false,
-      bodyStyleRight: {}
-    };
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 130 + "px"
-      };
-    },
-    changeNode: function(node) {
-      this.$refs.EnergyIndex.modelNodeChange(node);
-    },
-    manageModel: function() {
-      this.$router.push("/model");
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyStatistics/energyStructure/lineChart.vue b/energy_management_ui/src/views/energyStatistics/energyStructure/lineChart.vue
deleted file mode 100644
index e197022..0000000
--- a/energy_management_ui/src/views/energyStatistics/energyStructure/lineChart.vue
+++ /dev/null
@@ -1,158 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../mixins/resize";
-import { color } from "echarts/lib/export";
-const animationDuration = 6000;
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    chartData: {
-      type: Object
-    }
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  data() {
-    return {
-      chart: null,
-      seriesData: []
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ currentValue, xAxis, lastYearValue, title } = {}) {
-      var series = [];
-      /*        if(newVisitis !=null ||newVisitis != undefined){
-          series.push()
-        }
-        console.log("newVisitis:"+newVisitis+"actual"+actual);*/
-      this.chart.setOption({
-        title: {
-          text: title,
-          x: "center",
-          y: "top",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        grid: {
-          top: 40,
-          left: "2%",
-          right: "2%",
-          bottom: "3%",
-          containLabel: true
-        },
-        legend: {
-          data: ["娑堣垂閲�", "浜ч噺"],
-          left: "60%",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        xAxis: [
-          {
-            type: "category",
-            data: xAxis,
-            axisPointer: {
-              type: "shadow"
-            }
-          }
-        ],
-        yAxis: [
-          {
-            name: "娑堣垂閲�",
-            type: "value",
-            nameTextStyle: {
-              color: "#fff"
-            },
-            axisLabel: {
-              formatter: "{value}"
-            },
-            axisTick: {
-              show: false
-            }
-          },
-          {
-            name: "浜ч噺",
-            type: "value",
-            nameTextStyle: {
-              color: "#fff"
-            },
-            axisLabel: {
-              formatter: "{value}"
-            },
-            axisTick: {
-              show: false
-            }
-          }
-        ],
-        series: [
-          {
-            name: "娑堣垂閲�",
-            type: "bar",
-            data: currentValue,
-            smooth: true, //绾挎潯骞虫粦
-            //stack: 'vistors',
-            barMaxWidth: 30, //鏈�澶у搴�
-            animationDuration: 2800,
-            animationEasing: "quadraticOut"
-          },
-          {
-            name: "浜ч噺",
-            type: "line",
-            yAxisIndex: 1,
-            data: lastYearValue,
-            animationDuration: 2800,
-            animationEasing: "quadraticOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/energyStatistics/mixins/resize.js b/energy_management_ui/src/views/energyStatistics/mixins/resize.js
deleted file mode 100644
index ae02e64..0000000
--- a/energy_management_ui/src/views/energyStatistics/mixins/resize.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import { debounce } from '@/utils'
-
-export default {
-  data() {
-    return {
-      $_sidebarElm: null
-    }
-  },
-  mounted() {
-    this.$_initResizeEvent()
-    this.$_initSidebarResizeEvent()
-  },
-  beforeDestroy() {
-    this.$_destroyResizeEvent()
-    this.$_destroySidebarResizeEvent()
-  },
-  activated() {
-    this.$_initResizeEvent()
-    this.$_initSidebarResizeEvent()
-  },
-  deactivated() {
-    this.$_destroyResizeEvent()
-    this.$_destroySidebarResizeEvent()
-  },
-  methods: {
-    $_resizeHandler() {
-      return debounce(() => {
-        if (this.chart) {
-          this.chart.resize()
-        }
-      }, 100)()
-    },
-    $_initResizeEvent() {
-      window.addEventListener('resize', this.$_resizeHandler)
-    },
-    $_destroyResizeEvent() {
-      window.removeEventListener('resize', this.$_resizeHandler)
-    },
-    $_sidebarResizeHandler(e) {
-      if (e.propertyName === 'width') {
-        this.$_resizeHandler()
-      }
-    },
-    $_initSidebarResizeEvent() {
-      this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
-      this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
-    },
-    $_destroySidebarResizeEvent() {
-      this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
-    }
-  }
-}
diff --git a/energy_management_ui/src/views/equipmentMonitor/energyConsumption/curve.vue b/energy_management_ui/src/views/equipmentMonitor/energyConsumption/curve.vue
deleted file mode 100644
index 06d8558..0000000
--- a/energy_management_ui/src/views/equipmentMonitor/energyConsumption/curve.vue
+++ /dev/null
@@ -1,291 +0,0 @@
-<template>
-
-  <div class="dashboard-editor-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鏃ユ湡" label-width="40px">
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio style="margin-right: 10px" v-for="dict in dateTypeOptions" :key="dict.dictValue" :label="dict.dictValue" @change="handleTime(dict.dictValue)">{{dict.dictLabel}}</el-radio>
-        </el-radio-group>
-        <el-date-picker
-          v-model="queryParams.beginTime"
-          :type="dateTypes"
-          style="width: 150px"
-          :value-format="valueFormat"
-          placeholder="寮�濮嬫棩鏈�">
-        </el-date-picker>
-        鍒�
-        <el-date-picker
-          v-model="queryParams.endTime"
-          :type="dateTypes"
-          style="width: 150px"
-          :value-format="valueFormat"
-          placeholder="缁撴潫鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌ヨ</el-button>
-        <el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['workforce:rosteringManagement:export']">瀵煎嚭</el-button>
-      </el-form-item>
-    </el-form>
-    <el-row :gutter="32">
-      <el-col :xs="24" :sm="24" :lg="24" >
-        <div class="chart-wrapper">
-          <line-chart ref="lineChart" :chart-data="lineChartData" />
-        </div>
-      </el-col>
-    </el-row>
-    <el-row :gutter="32">
-      <el-col :xs="24" :sm="24" :lg="24" >
-        <div class="chart-wrapper" >
-          <el-button type="warning" icon="el-icon-download" size="mini" style="float: right" @click="handleExport" >瀵煎嚭</el-button>
-          <el-table v-loading="loading" :data="arraylist">
-            <el-table-column prop="dataTime" label="鏃ユ湡" align="center" width="150" show-overflow-tooltip>
-              <template slot-scope="scope">
-                <span>{{ changeTime(parseTime(scope.row.dataTime)) }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column prop="currentValue" label="璁惧1" align="center"></el-table-column>
-            <el-table-column prop="lastYearValue" label="璁惧2"  align="center"></el-table-column>
-            <el-table-column prop="unitId" label="鍗曚綅"  align="center"></el-table-column>
-          </el-table>
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-
-
-</template>
-<script>
-  import {getSettingDevice,getSettingIndex,exportEnergyCurveindex,getEnergyCurveTrend} from "@/api/energyStatistics/statistics";
-  import LineChart from "./lineChart";
-    export default {
-      name: 'curve',
-     components:{LineChart},
-      props: ["modelCode"],
-      data() {
-        return {
-          // 閬僵灞�
-          loading: true,
-          total: 0,
-          dateTypeOptions:[],
-          // 鏌ヨ鍙傛暟
-          queryParams: {
-            pageNum: 1,
-            pageSize: 10,
-            beginTime: undefined,
-            endTime: undefined,
-            dataTime: undefined,
-            timeType:undefined,
-            indexId: undefined,
-            procedure: undefined,
-          },
-          list:[],
-          arraylist:[],
-          lineChartData:{
-            newVisitis:null,
-          },
-          //dateTypes: 'monthrange',//鏃堕棿鑼冨洿
-          dateTypes: 'month',
-          valueFormat:'yyyy-MM',
-          title:"",
-          skinName:"",
-          curvename:[]
-        }
-      },
-      watch: {
-        modelCode: {
-          deep: true,
-          handler(val) {
-            this.getList(val)
-          }
-        },
-      },
-      created() {
-        //this.getList();
-        this.getDicts("timeType_device").then(response => {
-          this.dateTypeOptions = response.data;
-          this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-        });
-        this.getConfigKey("energyStatistics.energyStatisticsTrend").then(response => {
-          this.skinName=response.msg;
-        });
-        let endTtime=(new Date().getFullYear()) +'-' +((new Date().getMonth() + 1)>9?(new Date().getMonth() + 1):"0"+(new Date().getMonth() + 1));
-        let starTtime= (new Date().getFullYear()-1)+'-' +((new Date().getMonth() + 1)>9?(new Date().getMonth() + 1):"0"+(new Date().getMonth() + 1));
-        this.queryParams.beginTime=starTtime;
-        this.queryParams.endTime=endTtime;
-      },
-      methods: {
-        modelNodeChange(modelNode) {
-          this.queryParams.id=modelNode.id;
-          let source=[];
-          let xAxis=[];
-          this.loading = true;
-          this.queryParams.indexId=this.queryParams.procedure;
-          if(this.queryParams.timeType=='YEAR'){
-            this.queryParams.beginTime=this.queryParams.beginTime.substring(0, 4)+'-01-01';
-            this.queryParams.endTime=this.queryParams.endTime.substring(0, 4)+'-01-01';
-          }else if(this.queryParams.timeType=='MONTH'){
-            this.queryParams.beginTime=this.queryParams.beginTime.substring(0, 7);
-            this.queryParams.endTime=this.queryParams.endTime.substring(0, 7);
-          }else if(this.queryParams.timeType=='DATE'){
-            this.queryParams.beginTime=this.queryParams.beginTime.substring(0, 10);
-            this.queryParams.endTime=this.queryParams.endTime.substring(0, 10);
-          /*  this.queryParams.beginTime=this.formatDate(new Date(this.queryParams.beginTime).getTime()-  72 * 60 * 60 * 1000);
-            this.queryParams.endTime=this.formatDate(new Date(this.queryParams.endTime).getTime()-  72 * 60 * 60 * 1000);*/
-          }
-          //鑾峰彇妯″瀷涓嬬殑鎸囨爣
-          getSettingIndex(this.queryParams.id).then(response => {
-            let result = response.data;
-            this.list = result.filter(f => f.indexType === 'STATISTIC');
-            /*  this.curvename=result.*/
-            this.loading = false;
-            if (this.list.length > 0) {
-              if (modelNode.title == undefined) {
-                this.queryParams.procedure = this.list[0].indexId;
-              }
-            } else {
-              this.queryParams.procedure = '';
-              this.title = ''
-            }
-            this.queryParams.indexId = this.queryParams.procedure;
-            if (this.queryParams.timeType == 'YEAR') {
-              this.queryParams.beginTime = this.queryParams.beginTime.substring(0, 4) + '-01-01';
-              this.queryParams.endTime = this.queryParams.endTime.substring(0, 4) + '-01-01';
-            } else if (this.queryParams.timeType == 'MONTH') {
-              this.queryParams.beginTime = this.queryParams.beginTime.substring(0, 7);
-              this.queryParams.endTime = this.queryParams.endTime.substring(0, 7);
-            } else if (this.queryParams.timeType == 'DATE') {
-              this.queryParams.beginTime = this.queryParams.beginTime.substring(0, 10);
-              this.queryParams.endTime = this.queryParams.endTime.substring(0, 10);
-            }
-            //鑾峰彇妯″瀷涓嬬殑璁惧
-            getSettingDevice(this.queryParams.id).then(response => {
-              let results = response.data;
-             /* console.log(results);*/
-              this.curvename=results.meterName;
-              //鑳借�楁寚鏍囪秼鍔垮垎鏋�
-              getEnergyCurveTrend(this.queryParams).then(response => {
-                this.arraylist = response.rows;
-                this.total = response.total;
-                let currentValue = [];
-                let lastYearValue = [];
-                for (let i = 0; i < this.arraylist.length; i++) {
-                  currentValue.push(this.arraylist[i].currentValue);
-                  lastYearValue.push(this.arraylist[i].lastYearValue);
-                  if (this.queryParams.timeType == 'DATE') {
-                    xAxis.push(this.arraylist[i].dataTime.substring(0, 10))
-                  } else if (this.queryParams.timeType == 'MONTH') {
-                    xAxis.push(this.arraylist[i].dataTime.substring(0, 7))
-                  } else if (this.queryParams.timeType == 'YEAR') {
-                    xAxis.push(this.arraylist[i].dataTime.substring(0, 4))
-                  }
-                  /* if(this.queryParams.timeType=='MONTH') {
-                    xAxis.push(this.arraylist[i].dataTime.substring(0, 7))
-                  }else if(this.queryParams.timeType=='YEAR'){
-                    xAxis.push(this.arraylist[i].dataTime.substring(0, 4))
-                  }*/
-                }
-                source.push(currentValue);//鏈湡鍊硷紙闇�瑕侊級
-                source.push(lastYearValue);//鍚屾湡鍊硷紙涓嶉渶瑕侊級
-                let titleName = "";
-                let yAxis = "";
-                let actualData = [];
-                if (this.arraylist > 0) {
-                  titleName = this.arraylist[0].indexName + "(" + this.arraylist[0].unitId + ")";
-                  yAxis = this.arraylist[0].unitId
-                }
-                this.title = titleName
-                this.lineChartData.newVisitis = source;
-                this.lineChartData.actualData = ['璁惧1','璁惧2'];
-                this.lineChartData.xAxis = xAxis;
-                this.lineChartData.title = this.title;
-                this.lineChartData.yAxis = yAxis;
-                this.$refs.lineChart.initChart(this.lineChartData);
-              });
-            });
-          });
-
-        },
-        numFilter(value) {// 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-          let realVal = '' ;
-          if (!isNaN(value) && value !== '') {
-            realVal = parseFloat(value).toFixed(this.skinName)
-          } else {
-            realVal = '--'
-          }
-          return realVal
-        },
-        handleTime(date){
-          if(date=='YEAR'){
-            this.dateTypes= 'year',
-              this.valueFormat='yyyy'
-          }else if(date=='MONTH'){
-            //this.dateTypes='monthrange'
-            this.dateTypes= 'month',
-              this.valueFormat='yyyy-MM'
-          }else if(date=='DATE'){
-            //this.dateTypes='monthrange'
-            this.dateTypes= 'date',
-              this.valueFormat='yyyy-MM-dd'
-          }
-        },
-        /** 鎼滅储鎸夐挳鎿嶄綔 */
-        handleQuery() {
-          this.queryParams.pageNum = 1;
-          this.queryParams.title=this.title;
-          this.modelNodeChange(this.queryParams);
-        },
-        /** 閲嶇疆鎸夐挳鎿嶄綔 */
-        resetQuery() {
-          this.resetForm("queryForm");
-          this.handleQuery();
-        },
-        /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-        handleExport() {
-          const queryParams = this.queryParams;
-          this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夎兘鑰楁寚鏍囪秼鍔垮垎鏋愭暟鎹」?', "璀﹀憡", {
-            confirmButtonText: "纭畾",
-            cancelButtonText: "鍙栨秷",
-            type: "warning"
-          }).then(function () {
-            return exportEnergyCurveindex(queryParams);
-          }).then(response => {
-            this.download(response.msg);
-          }).catch(function () {
-          });
-        },
-        changeTime(time) {
-          if (time !== null && time !== undefined && time !== "") {
-            return time.substring(0, 10);
-          } else {
-            return "";
-          }
-        }
-      }
-    }
-</script>
-
-<style lang="scss" scoped>
-  .dashboard-editor-container {
-    padding: 32px;
-    background-color: rgb(240, 242, 245);
-    position: relative;
-    .chart-wrapper {
-      background: #fff;
-      padding: 16px 16px 0;
-      margin-bottom: 32px;
-    }
-  }
-  .chart-title{
-    display: block;
-    background: #f2f6fc;
-    height: 30px;
-    line-height: 30px;
-    padding: 0 10px;
-  }
-  @media (max-width:1024px) {
-    .chart-wrapper {
-      padding: 8px;
-    }
-  }
-</style>
diff --git a/energy_management_ui/src/views/equipmentMonitor/energyConsumption/index.vue b/energy_management_ui/src/views/equipmentMonitor/energyConsumption/index.vue
deleted file mode 100644
index da00bba..0000000
--- a/energy_management_ui/src/views/equipmentMonitor/energyConsumption/index.vue
+++ /dev/null
@@ -1,61 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" :width="isCollapse?'0px':'20%'">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            璁惧鑳借�楀垎鏋�
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false" :modelCode="modelCode"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <div style="cursor:pointer;" @click="toggleCollapse">
-          <img src="@/assets/image/configureChart.png" style="width: 100%;height: 100%">
-        </div>
-        <el-main style="padding:0">
-          <Curve ref="curve"></Curve>
-        </el-main>
-
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import Curve from "./curve";
-
-  import ModelNode from "../../basicsetting/modelNode/modelNode";
-
-
-  export default {
-    components: { ModelNode,Curve},
-    created() {
-      this.modelCode=this.$route.query.modelCode;
-    },
-    data() {
-      return {
-        modelData: '',
-        modelInfoOptions: [],
-        modelCode:undefined,
-        deviceCategory:"",
-        isCollapse: false,
-      }
-    },
-    methods: {
-      changeNode: function (node) {
-        this.$refs.curve.modelNodeChange(node,this.deviceCategory);
-      },
-      manageModel: function () {
-        this.$router.push('/model');
-      },
-      changeModel: function (item) {
-        this.$refs.modelNode.getList(item);
-      },
-      // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-      toggleCollapse () {
-        this.isCollapse = !this.isCollapse
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/equipmentMonitor/energyConsumption/lineChart.vue b/energy_management_ui/src/views/equipmentMonitor/energyConsumption/lineChart.vue
deleted file mode 100644
index e11dff0..0000000
--- a/energy_management_ui/src/views/equipmentMonitor/energyConsumption/lineChart.vue
+++ /dev/null
@@ -1,134 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-import resize from "../../energyStatistics/mixins/resize";
-require("echarts/theme/macarons"); // echarts theme
-const animationDuration = 6000;
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    chartData: {
-      type: Object
-    }
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  data() {
-    return {
-      chart: null,
-      seriesData: []
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ newVisitis, xAxis, actualData, title, yAxis } = {}) {
-      var series = [];
-      if (newVisitis != null || newVisitis != undefined) {
-        for (var i = 0; i < newVisitis.length; i++) {
-          series.push({
-            name: actualData[i],
-            type: "bar",
-            data: newVisitis[i],
-            smooth: true, //绾挎潯骞虫粦
-            //stack: 'vistors',
-            animationDuration: 2800,
-            animationEasing: "quadraticOut"
-          });
-        }
-      }
-      this.chart.setOption({
-        title: {
-          text: title,
-          x: "center",
-          y: "top",
-          textStyle: {
-            color: "#333"
-          }
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'     line涓虹洿绾�  shadow涓烘煴鐘堕槾褰�
-          }
-        },
-        grid: {
-          top: 40,
-          left: "2%",
-          right: "2%",
-          bottom: "3%",
-          containLabel: true
-        },
-        legend: {
-          data: ["璁惧1", "璁惧2"],
-          left: "60%",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        xAxis: [
-          {
-            type: "category",
-            data: xAxis,
-            axisTick: {
-              alignWithLabel: true
-            }
-          }
-        ],
-        yAxis: [
-          {
-            name: yAxis,
-            type: "value",
-            nameTextStyle: {
-              color: "#333"
-            },
-            axisLabel: {
-              formatter: "{value}"
-            },
-            axisTick: {
-              show: false
-            }
-          }
-        ],
-        series: series
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/equipmentMonitor/history/historyIndex.vue b/energy_management_ui/src/views/equipmentMonitor/history/historyIndex.vue
deleted file mode 100644
index 0ed6178..0000000
--- a/energy_management_ui/src/views/equipmentMonitor/history/historyIndex.vue
+++ /dev/null
@@ -1,245 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-card class="box-card">
-      <div slot="header" class="clearfix">
-        <span>{{currentNode?currentNode.label:''}}--鑺傜偣璁剧疆</span>
-      </div>
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" class="query-form">
-      <el-form-item >
-        <el-radio-group v-model="queryParams.eierarchyFlag">
-          <el-radio label="B" style="margin-right: 10px!important;" onselect="true">鏈骇</el-radio>
-          <el-radio label="ALL">鍖呭惈涓嬬骇</el-radio>
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item label="璧锋鏃堕棿">
-        <el-date-picker
-          v-model="timeArr"
-          type="datetimerange"
-          range-separator="鑷�"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌ヨ</el-button>
-      </el-form-item>
-    </el-form>
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['historyMonitoring:historyMonitoring:export']"
-        >瀵煎嚭
-        </el-button>
-      </el-col>
-    </el-row>
-      <div>
-      <el-table :data="tableData" border style="width: 100%; margin-top: 20px">
-        <el-table-column prop="indexName" align="center" label="璁惧鍚嶇О" width="180"></el-table-column>
-        <el-table-column prop="statusName" align="center" label="璁惧鐘舵��"></el-table-column>
-        <el-table-column prop="devBeginTime" align="center" label="寮�濮嬫椂闂�"></el-table-column>
-        <el-table-column prop="devEndTime" align="center" label="缁撴潫鏃堕棿"></el-table-column>
-        <el-table-column prop="duration" align="center" label="鏃堕暱(灏忔椂)"></el-table-column>
-      </el-table>
-  </div>
-      <pagination
-        v-show="total>0"
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-    </el-card>
-  </div>
-</template>
-
-<script>
-  import {listHistoryMonitoringNew,exportHistoryMonitoringTableList} from "@/api/equipmentMonitor/historyMonitoring/historyMonitoring"
-
-  export default {
-    name: 'energyIndex',
-
-    data() {
-      return {
-        pickerOptions: {
-        /*  value1: [new Date(2000, 10, 10, 10, 10), new Date(2000, 10, 11, 10, 10)],*/
-        },
-        timeArr:[],
-        currentNode: '',
-        deviceCategory:undefined,
-        // 閬僵灞�
-        loading: false,
-        // 閫変腑鏁扮粍
-        ids: [],
-        dateRange: [],
-        names: [],
-        // 闈炲崟涓鐢�
-        single: true,
-        // 闈炲涓鐢�
-        multiple: true,
-        // 鎬绘潯鏁�
-        total: 10,
-        // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-        List: [],
-        energyindexList: [],
-        // 寮瑰嚭灞傛爣棰�
-        title: "鍘嗗彶鏁版嵁鏌ヨ",
-        // 鏄惁鏄剧ず寮瑰嚭灞�
-        open: false,
-        // 涓婚敭瀛楀吀
-        indexIdOptions: [],
-        // 鎸囨爣鍚嶇О瀛楀吀
-        nameOptions: [],
-        // 鎸囨爣缂栫爜瀛楀吀
-        codeOptions: [],
-        // 绯荤粺鎸囨爣鍒嗙被锛�1-鑳芥簮绫伙紝2-浜у搧绫伙紝3-鑳芥晥绫伙紝4-缁忚惀绫伙紝5-鍏朵粬瀛楀吀
-        indexCategoryOptions: [],
-        // 澶囨敞瀛楀吀
-        remarkOptions: [],
-        // 鍗曚綅瀛楀吀
-        unitIdOptions: [],
-        queryParams: {
-          eierarchyFlag:"B",
-          pageNum: 1,
-          pageSize: 10,
-          name: undefined,
-          value:undefined,
-          code: undefined,
-          indexCategory: undefined,
-          deviceId: undefined,
-          indexType:"COLLECT"
-        },
-        tableData: [],
-        datas: [],
-        // 琛ㄥ崟鍙傛暟
-        form: {},
-        // 琛ㄥ崟鏍¢獙
-        rules: {
-          name: [
-            {required: true, message: "鎸囨爣鍚嶇О涓嶈兘涓虹┖", trigger: "blur"},
-            {min: 2, max: 20, message: '闀垮害鍦� 2 鍒� 20 涓瓧绗�', trigger: 'blur'}
-          ], code: [
-            {required: true, message: "鎸囨爣缂栫爜涓嶈兘涓虹┖", trigger: "blur"},
-            {min: 2, max: 20, message: '闀垮害鍦� 2 鍒� 20 涓瓧绗�', trigger: 'blur'},
-            {pattern: /^[a-zA-Z][A-Za-z0-9_-]+$/, message: '蹇呴』涓烘暟瀛椼�佸瓧姣嶃��- 鎴朹 锛屼笖棣栧瓧绗﹀彧鑳戒负瀛楁瘝'}
-          ], indexCategory: [
-            {required: true, message: "璇烽�夋嫨鎸囨爣鍒嗙被", trigger: "blur"}
-          ]
-        },
-        currentNode: undefined,
-        indexCategoryDefaultVal: undefined,
-        unitDefaultVal: undefined
-      };
-    },
-    created() {
-      this.getTime();
-    },
-    methods: {
-      modelNodeChange(modelNode,deviceCategory) {
-        this.queryParams.deviceId = modelNode.id;
-        this.deviceCategory = deviceCategory;
-        this.getList();
-        this.disabledSetting = modelNode === undefined || modelNode === '' || modelNode === null;
-        if (modelNode) {
-          this.currentNode = modelNode;
-        }
-        if("5"===this.deviceCategory){
-          this.getList();
-        }else {
-          this.tableData = [];
-        }
-      },
-      /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-      getList() {
-        this.loading = true;
-        // this.queryParams.deviceId = modelNode.id;
-        var search = this.queryParams;
-        search.beginTime = "";
-        search.endTime = "";
-        if (null != this.timeArr && '' != this.timeArr) {
-          search.beginTime = this.formatDate(this.timeArr[0]).toString();
-          search.endTime = this.formatDate(this.timeArr[1]).toString();
-        }
-
-        listHistoryMonitoringNew(search).then(response => {
-          this.tableData = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        });
-      },
-      // 琛ㄥ崟閲嶇疆
-      reset() {
-        this.form = {
-          indexId: undefined,
-          name: undefined,
-          code: undefined,
-          indexCategory: undefined,
-          remark: undefined,
-          unitId: undefined
-        };
-        this.resetForm("form");
-      },
-
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        if("5"===this.deviceCategory){
-          this.getList();
-        }else {
-          this.tableData = [];
-        }
-      },
-      getTime(){
-        this.startTime = new Date().setHours(0, 0, 0, 0);
-        this.endTime = new Date().setHours(0, 0, 0, 0) + 24 * 60 * 60 * 1000 - 1;
-        //鏄剧ず鏃堕棿
-        this.timeArr = [this.startTime,this.endTime];
-      },
-      formatDate: function (value) {
-        let date = new Date(value);
-        let y = date.getFullYear();
-        let MM = date.getMonth() + 1;
-        MM = MM < 10 ? ('0' + MM) : MM;
-        let d = date.getDate();
-        d = d < 10 ? ('0' + d) : d;
-        let h = date.getHours();
-        h = h < 10 ? ('0' + h) : h;
-        let m = date.getMinutes();
-        m = m < 10 ? ('0' + m) : m;
-        let s = date.getSeconds();
-        s = s < 10 ? ('0' + s) : s;
-        return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;
-      },
-      /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-      handleExport() {
-        // this.$refs["historyTable"].validate(valid => {
-        //   if (valid) {
-        if (this.currentNode) {
-          var search = this.queryParams;
-          search.beginTime = "";
-          search.endTime = "";
-          if (null != this.timeArr && '' != this.timeArr) {
-            search.beginTime = this.formatDate(this.timeArr[0]).toString();
-            search.endTime = this.formatDate(this.timeArr[1]).toString();
-          }
-          this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夋暟鎹」?', "璀﹀憡", {
-            confirmButtonText: "纭畾",
-            cancelButtonText: "鍙栨秷",
-            type: "warning"
-          }).then(function () {
-            return exportHistoryMonitoringTableList(search);
-          }).then(response => {
-            this.download(response.msg);
-          }).catch(function () {
-          });
-          //   }
-          // })
-        }
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/equipmentMonitor/history/index.vue b/energy_management_ui/src/views/equipmentMonitor/history/index.vue
deleted file mode 100644
index c3ba830..0000000
--- a/energy_management_ui/src/views/equipmentMonitor/history/index.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" :width="isCollapse?'0px':'20%'">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            璁惧鍚仠鍘嗗彶鏌ヨ
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false" :modelCode="modelCode"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <div style="cursor:pointer;" @click="toggleCollapse">
-          <img src="@/assets/image/configureChart.png" style="width: 100%;height: 100%">
-        </div>
-        <el-main style="padding:0">
-          <HistoryIndex ref="HistoryIndex"></HistoryIndex>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import HistoryIndex from "./historyIndex";
-  import ModelNode from "../../basicsetting/modelNode/modelNode";
-  import {listModel} from "@/api/basicsetting/model";
-  export default {
-    components: {HistoryIndex, ModelNode},
-    created() {
-      this.modelCode=this.$route.query.modelCode;
-      this.deviceCategory = this.$route.query.device_category;
-    },
-    data() {
-      return {
-        modelData: '',
-        modelInfoOptions: [],
-        modelCode:undefined,
-        deviceCategory:undefined,
-        isCollapse: false,
-      }
-    },
-    methods: {
-      changeNode: function (node) {
-        this.$refs.HistoryIndex.modelNodeChange(node,this.deviceCategory);
-      },
-      manageModel: function () {
-        this.$router.push('/model');
-      },
-      changeModel: function (item) {
-        this.$refs.modelNode.getList(item);
-      },
-      // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-      toggleCollapse () {
-        this.isCollapse = !this.isCollapse
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/equipmentMonitor/keyEquipment/LineChart.vue b/energy_management_ui/src/views/equipmentMonitor/keyEquipment/LineChart.vue
deleted file mode 100644
index fa24e95..0000000
--- a/energy_management_ui/src/views/equipmentMonitor/keyEquipment/LineChart.vue
+++ /dev/null
@@ -1,156 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-// import resize from './mixins/resize'
-
-export default {
-  // mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object
-      // required: true
-    }
-  },
-  data() {
-    return {
-      chart: null,
-      alarmLimitName: undefined
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ datas, legendArr, timeList, legendNameArr } = {}) {
-      // this.chart.clear();
-      if (datas.length > 0) {
-        var yAxisDataArr = [];
-        var seriesArr = [];
-        var yAxisNumArr = [];
-        var yAxisIndexArr = [];
-        for (let i = 0; i < datas.length; i++) {
-          //y杞�
-          let yAxisItem = {
-            type: "value",
-            // name:legendNameArr[i],
-            minInterval: 1,
-            boundaryGap: [0, 0.2]
-          };
-          if (i > 1) {
-            let positionKey = "position";
-            let positionValue = "right";
-            let offsetKey = "offset";
-            let offsetValue = 50 * (i - 1);
-            yAxisItem[positionKey] = positionValue;
-            yAxisItem[offsetKey] = offsetValue;
-          }
-          yAxisDataArr.push(yAxisItem);
-        }
-        for (let i = 0; i < legendArr.length; i++) {
-          if ("" != legendArr[i]) {
-            let item = parseInt(legendArr[i].substr(1, legendArr[i].length));
-            yAxisNumArr.push(item);
-            if (!yAxisIndexArr.indexOf(yAxisNumArr[i]) > -1) {
-              yAxisIndexArr.push(yAxisNumArr[i]);
-            }
-            let seriesItem = {
-              name: legendNameArr[i],
-              type: "line",
-              data: datas[i],
-              yAxisIndex: yAxisIndexArr.indexOf(yAxisNumArr[i])
-            };
-            seriesArr.push(seriesItem);
-          } else {
-            let seriesItem = {
-              name: legendNameArr[i],
-              type: "line",
-              data: datas[i]
-            };
-            if (i > 0) {
-              let key = "yAxisIndex";
-              let value = i;
-              seriesItem[key] = value;
-            }
-            seriesArr.push(seriesItem);
-          }
-        }
-        this.chart.setOption({
-          xAxis: {
-            data: timeList,
-            boundaryGap: false,
-            axisTick: {
-              show: false
-            }
-          },
-          grid: {
-            left: "2%",
-            right: "18%",
-            bottom: 20,
-            top: 30,
-            containLabel: true
-          },
-          tooltip: {
-            trigger: "axis",
-            axisPointer: {
-              type: "cross"
-            },
-            padding: [5, 10]
-          },
-          yAxis: yAxisDataArr,
-          legend: {
-            data: legendNameArr,
-            textStyle: {
-              color: "#fff"
-            }
-          },
-          series: seriesArr
-        });
-      }
-    },
-    closeLineChar() {
-      this.chart.clear();
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/equipmentMonitor/keyEquipment/equipmentView.vue b/energy_management_ui/src/views/equipmentMonitor/keyEquipment/equipmentView.vue
deleted file mode 100644
index e40ea73..0000000
--- a/energy_management_ui/src/views/equipmentMonitor/keyEquipment/equipmentView.vue
+++ /dev/null
@@ -1,358 +0,0 @@
-<template>
-  <div class="dashboard-editor-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <!--<el-form-item label="鏌ョ湅鎸囨爣">-->
-        <!--<el-select v-model="queryParams.procedure" placeholder="璇烽�夋嫨鎸囨爣" @change="currentSel">-->
-          <!--<el-option style="width: 150px"-->
-            <!--v-for="dict in list"-->
-            <!--:key="dict.indexId"-->
-            <!--:label="dict.name"-->
-            <!--:value="dict.indexId"-->
-          <!--&gt;</el-option>-->
-        <!--</el-select>-->
-      <!--</el-form-item>-->
-      <el-form-item label="鏃ユ湡" label-width="40px">
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio style="margin-right: 10px" v-for="dict in dateTypeOptions" :key="dict.dictValue" :label="dict.dictValue" @change="handleTime(dict.dictValue)">{{dict.dictLabel}}</el-radio>
-        </el-radio-group>
-          <el-date-picker
-            v-model="queryParams.beginTime"
-            :type="dateTypes"
-            style="width: 150px"
-            :value-format="valueFormat"
-            placeholder="寮�濮嬫棩鏈�">
-          </el-date-picker>
-          鍒�
-        <el-date-picker
-          v-model="queryParams.endTime"
-          :type="dateTypes"
-          style="width: 150px"
-          :value-format="valueFormat"
-          placeholder="缁撴潫鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌ヨ</el-button>
-        <!--<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>-->
-      </el-form-item>
-    </el-form>
-    <el-row :gutter="6">
-      <el-col :span="6" class="card-box" style="height: 280px">
-        <!--璁惧淇℃伅-->
-        <el-card class="box-card" style="height:280px">
-          <div slot="header" class="clearfix">
-            <span>1#姘у帇鏈哄熀鏈俊鎭�</span>
-          </div>
-          <div>
-            <table cellspacing="0" style="width: 100%;">
-              <tbody>
-              <tr>
-                <td><div class="cell">鍚嶇О锛�</div></td>
-                <td><div class="cell" v-if=""></div></td>
-              </tr>
-              <tr>
-                <td><div class="cell">缂栧彿锛�</div></td>
-                <td><div class="cell" v-if=""></div></td>
-              </tr>
-              <tr>
-                <td><div class="cell">瀵瑰簲宸ュ簭锛�</div></td>
-                <td><div class="cell" v-if=""></div></td>
-              </tr>
-              <tr>
-                <td><div class="cell">棰濆畾鐢靛帇锛�</div></td>
-                <td><div class="cell" v-if=""></div></td>
-              </tr>
-              <tr>
-                <td><div class="cell">棰濆畾鍔熺巼锛�</div></td>
-                <td><div class="cell" v-if=""></div></td>
-              </tr>
-              <tr>
-                <td><div class="cell">鍚仠鐘舵�侊細</div></td>
-                <td><div class="cell" v-if=""></div></td>
-              </tr>
-              <tr>
-                <td><div class="cell">浣滀笟鍐呭锛�</div></td>
-                <td><div class="cell" v-if=""></div></td>
-              </tr>
-              </tbody>
-            </table>
-          </div>
-        </el-card>
-      </el-col>
-      <!--鍥剧墖-->
-      <el-col :span="8" class="card-box" style="height: 280px">
-        <el-card class="box-card" style="height:280px">
-          <div>
-            <el-image
-              src="https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg"
-              fit="contain"></el-image>
-          </div>
-        </el-card>
-      </el-col>
-      <el-col :span="10" class="card-box" style="height: 280px">
-        <div>
-          <div style="display: flex;flex-direction: row;justify-content: space-between">
-            <el-card class="box-card" style="height:60px;width: 180px">
-              <div>
-                鐢ㄧ數閲�
-              </div>
-              <div style="margin-top: 4px">
-                绱锛歿{}}Kwh
-              </div>
-            </el-card>
-            <el-card class="box-card" style="height:60px;width: 180px">
-              <div>
-                澶╃劧姘旈噺
-              </div>
-              <div style="margin-top: 4px">
-                绱锛歿{}}涓囩珛鏂圭背
-              </div>
-            </el-card>
-          </div>
-        </div>
-        <div style="margin-top: 10px">
-          <div style="display: flex;flex-direction: row;justify-content: space-between">
-            <el-card class="box-card" style="height:60px;width: 180px">
-              <div>
-                钂告苯閲�
-              </div>
-              <div style="margin-top: 4px">
-                绱锛歿{}}涓囧惃
-              </div>
-            </el-card>
-            <el-card class="box-card" style="height:60px;width: 180px">
-              <div>
-                鐢ㄦ哀閲�
-              </div>
-              <div style="margin-top: 4px">
-                绱锛歿{}}涓囩珛鏂圭背
-              </div>
-            </el-card>
-          </div>
-        </div>
-        <el-card class="box-card" style="margin-top: 10px;height: 140px">
-          <div>
-            <pie-chart></pie-chart>
-          </div>
-        </el-card>
-      </el-col>
-    </el-row>
-    <el-row :gutter="32">
-      <!--<el-col :span="16" class="card-box" style="height: 280px">-->
-        <line-chart ref="liveLineChart" :chart-data="liveLineChartData" style="margin-top: 20px"></line-chart>
-      <!--</el-col>-->
-    </el-row>
-  </div>
-</template>
-
-<script>
-   import PieChart from './pieChart'
-   import LineChart from './LineChart'
-  import {getSettingIndex,getSettingEnergy,exportEnergyindex,getEnergyStatisticsTrend} from "@/api/energyStatistics/statistics";
-
-  export default {
-    name: 'equipmentView',
-    name: 'Index',
-    components: {PieChart,LineChart},
-    props: ["modelCode"],
-    data() {
-      return {
-        // 閬僵灞�
-        loading: true,
-        total: 0,
-        dateTypeOptions:[],
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          beginTime: undefined,
-          endTime: undefined,
-          dataTime: undefined,
-          timeType:undefined,
-          indexId: undefined,
-          procedure: undefined,
-        },
-        list:[],
-        arraylist:[],
-        lineChartData:{
-          newVisitis:null,
-        },
-        //dateTypes: 'monthrange',//鏃堕棿鑼冨洿
-        dateTypes: 'month',
-        valueFormat:'yyyy-MM',
-        title:"",
-        skinName:"",
-        liveLineChartData:{
-          datas:[[10,20,30,10,20,30,10,20,30,10,20,30,10,20,30,10,20,30],[100,200,30,10,20,30,10,20,30,100,20,30,10,200,30,10,20,300],[102,2,30,10,20,30,10,2,30,10,20,30,10,202,30,10,20,30]],
-          legendArr:['h1','h2','h3'],
-          timeList:['0527','0528','0529','0527','0528','0529','0527','0528','0529','0527','0528','0529','0527','0528','0529','0527','0528','0529'],
-          legendNameArr:['haha1','hehe2','heihei3']
-        },
-      }
-    },
-    watch: {
-      modelCode: {
-        deep: true,
-        handler(val) {
-          this.getList(val)
-        }
-      },
-    },
-    created() {
-      //this.getList();
-      this.getDicts("timeType_device").then(response => {
-        this.dateTypeOptions = response.data;
-        this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-      });
-      this.getConfigKey("energyStatistics.energyStatisticsTrend").then(response => {
-        this.skinName=response.msg;
-      });
-      let endTtime=(new Date().getFullYear()) +'-' +((new Date().getMonth() + 1)>9?(new Date().getMonth() + 1):"0"+(new Date().getMonth() + 1));
-      let starTtime= (new Date().getFullYear()-1)+'-' +((new Date().getMonth() + 1)>9?(new Date().getMonth() + 1):"0"+(new Date().getMonth() + 1));
-      this.queryParams.beginTime=starTtime;
-      this.queryParams.endTime=endTtime;
-    },
-    methods: {
-      modelNodeChange(modelNode) {
-        this.queryParams.id=modelNode.id;
-        let source=[];
-        let xAxis=[];
-        this.loading = true;
-        getSettingIndex(this.queryParams.id).then(response => {
-          let result=response.data;
-          this.list = result.filter(f => f.indexType === 'STATISTIC');
-          this.loading = false;
-          if (this.list.length > 0) {
-            if(modelNode.title==undefined ){
-              this.queryParams.procedure = this.list[0].indexId;
-            }
-          }else{
-            this.queryParams.procedure = '';
-            this.title= ''
-          }
-          this.queryParams.indexId=this.queryParams.procedure;
-          if(this.queryParams.timeType=='YEAR'){
-            this.queryParams.beginTime=this.queryParams.beginTime.substring(0, 4)+'-01-01';
-            this.queryParams.endTime=this.queryParams.endTime.substring(0, 4)+'-01-01';
-          }else if(this.queryParams.timeType=='MONTH'){
-            this.queryParams.beginTime=this.queryParams.beginTime.substring(0, 7)+'-01';
-            this.queryParams.endTime=this.queryParams.endTime.substring(0, 7)+'-01';
-          }
-          getEnergyStatisticsTrend(this.queryParams).then(response => {
-            this.arraylist=response.rows;
-            this.total = response.total;
-            let currentValue=[];
-            let lastYearValue=[];
-            let minValue=[];
-            for(let i=0; i<this.arraylist.length; i++){
-              currentValue.push(this.arraylist[i].currentValue);
-              lastYearValue.push(this.arraylist[i].lastYearValue);
-              minValue.push(this.arraylist[i].minValue);
-              if(this.queryParams.timeType=='MONTH') {
-                xAxis.push(this.arraylist[i].dataTime.substring(0, 7))
-              }else if(this.queryParams.timeType=='YEAR'){
-                xAxis.push(this.arraylist[i].dataTime.substring(0, 4))
-              }
-            }
-            source.push(currentValue);
-            source.push(lastYearValue);
-            let titleName="";
-            let yAxis="";
-            if(this.arraylist>0){
-              titleName= this.arraylist[0].indexName+"("+this.arraylist[0].unitId+")";
-              yAxis=this.arraylist[0].unitId
-            }
-           this.title=titleName
-          });
-        });
-      },
-      numFilter(value) {// 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-        let realVal = '' ;
-        if (!isNaN(value) && value !== '') {
-          realVal = parseFloat(value).toFixed(this.skinName)
-        } else {
-          realVal = '--'
-        }
-        return realVal
-      },
-      currentSel(selVal) {//鑾峰彇涓嬫媺妗嗙殑text
-        let obj = {};
-        obj = this.list.find((item) => {
-          return item.indexId === selVal
-        });
-        this.title=obj.name;
-        this.queryParams.procedure=obj.indexId;
-      },
-      handleTime(date){
-        if(date=='YEAR'){
-          this.dateTypes= 'year',
-          this.valueFormat='yyyy'
-        }else if(date=='MONTH'){
-          //this.dateTypes='monthrange'
-          this.dateTypes= 'month',
-          this.valueFormat='yyyy-MM'
-        }else if('DATE'==date){
-          this.dateTypes= 'date',
-            this.valueFormat='yyyy-MM-dd'
-        }
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.queryParams.title=this.title;
-        this.modelNodeChange(this.queryParams);
-      },
-      /** 閲嶇疆鎸夐挳鎿嶄綔 */
-      resetQuery() {
-        this.resetForm("queryForm");
-        this.handleQuery();
-      },
-      /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-      handleExport() {
-        const queryParams = this.queryParams;
-        this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夎兘鑰楁寚鏍囪秼鍔垮垎鏋愭暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function () {
-          return exportEnergyindex(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function () {
-        });
-      },
-      changeTime(time) {
-        if (time !== null && time !== undefined && time !== "") {
-          return time.substring(0, 10);
-        } else {
-          return "";
-        }
-      }
-    }
-  }
-</script>
-
-<style lang="scss" scoped>
-  .dashboard-editor-container {
-    padding: 32px;
-    background-color: rgb(240, 242, 245);
-    position: relative;
-    .chart-wrapper {
-      background: #fff;
-      padding: 16px 16px 0;
-      margin-bottom: 32px;
-    }
-  }
-  .chart-title{
-    display: block;
-    background: #f2f6fc;
-    height: 30px;
-    line-height: 30px;
-    padding: 0 10px;
-  }
-  @media (max-width:1024px) {
-    .chart-wrapper {
-      padding: 8px;
-    }
-  }
-</style>
diff --git a/energy_management_ui/src/views/equipmentMonitor/keyEquipment/index.vue b/energy_management_ui/src/views/equipmentMonitor/keyEquipment/index.vue
deleted file mode 100644
index f89def1..0000000
--- a/energy_management_ui/src/views/equipmentMonitor/keyEquipment/index.vue
+++ /dev/null
@@ -1,55 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" :width="isCollapse?'0px':'20%'">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            閲嶇偣璁惧鍒嗘瀽
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false" :modelCode="modelCode"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <div style="cursor:pointer;" @click="toggleCollapse">
-          <img src="@/assets/image/configureChart.png" style="width: 100%;height: 100%">
-        </div>
-        <el-main style="padding:0">
-          <equipment-view ref="EquipmentView" style="padding:10px"></equipment-view>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import equipmentView from "./equipmentView";
-  import ModelNode from "../../basicsetting/modelNode/modelNode";
-
-  export default {
-    components: { ModelNode,equipmentView},
-    created() {
-      this.modelCode=this.$route.query.modelCode;
-    },
-    data() {
-      return {
-        modelCode:undefined,
-        isCollapse: false,
-      }
-    },
-    methods: {
-      changeNode: function (node) {
-        this.$refs.EquipmentView.modelNodeChange(node);
-      },
-      manageModel: function () {
-        this.$router.push('/model');
-      },
-      changeModel: function (item) {
-        this.$refs.modelNode.getList(item);
-      },
-      // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-      toggleCollapse () {
-        this.isCollapse = !this.isCollapse
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/equipmentMonitor/keyEquipment/pieChart.vue b/energy_management_ui/src/views/equipmentMonitor/keyEquipment/pieChart.vue
deleted file mode 100644
index dfbf266..0000000
--- a/energy_management_ui/src/views/equipmentMonitor/keyEquipment/pieChart.vue
+++ /dev/null
@@ -1,89 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-// import resize from './mixins/resize'
-
-export default {
-  // mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "130px"
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-
-      this.chart.setOption({
-        tooltip: {
-          trigger: "item",
-          formatter: "{a} <br/>{b} : {c} ({d}%)"
-        },
-        // legend: {
-        //   left: 'center',
-        //   bottom: '10',
-        //   data: ['Industries', 'Technology', 'Forex', 'Gold', 'Forecasts']
-        // },
-        legend: {
-          type: "scroll",
-          orient: "vertical",
-          right: 10,
-          top: 20,
-          bottom: 20,
-          data: ["Industries", "Technology", "Forex", "Gold", "Forecasts"],
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        series: [
-          {
-            name: "WEEKLY WRITE ARTICLES",
-            type: "pie",
-            radius: "55%",
-            center: ["40%", "50%"],
-            data: [
-              { value: 320, name: "Industries" },
-              { value: 240, name: "Technology" },
-              { value: 149, name: "Forex" },
-              { value: 100, name: "Gold" },
-              { value: 59, name: "Forecasts" }
-            ],
-            // animationEasing: 'cubicInOut',
-            animationDuration: 2600
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/equipmentMonitor/parameters/index.vue b/energy_management_ui/src/views/equipmentMonitor/parameters/index.vue
deleted file mode 100644
index 6416cac..0000000
--- a/energy_management_ui/src/views/equipmentMonitor/parameters/index.vue
+++ /dev/null
@@ -1,55 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            璁惧鑳借�楀弬鏁扮洃娴�
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <el-main style="padding:0">
-          <MonitorSetting ref="MonitorSetting"></MonitorSetting>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-import MonitorSetting from "./modelMonitorSetting";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import {listModel} from "@/api/basicsetting/model";
-
-export default {
-  components: {MonitorSetting, ModelNode},
-  created() {
-    listModel({isShow: 1}).then(response => {
-      this.modelInfoOptions = response.data;
-      if (this.modelInfoOptions.length > 0) {
-        this.modelData = this.modelInfoOptions[0].modelCode;
-        this.$refs.modelNode.getList(this.modelData);
-      }
-    });
-  },
-  data() {
-    return {
-      modelData: '',
-      modelInfoOptions: []
-    }
-  },
-  methods: {
-    changeNode: function (node) {
-      this.$refs.MonitorSetting.modelNodeChange(node);
-    },
-    manageModel: function () {
-      this.$router.push('/model');
-    },
-    changeModel: function (item) {
-      this.$refs.modelNode.getList(item);
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/equipmentMonitor/parameters/modelMonitorSetting.vue b/energy_management_ui/src/views/equipmentMonitor/parameters/modelMonitorSetting.vue
deleted file mode 100644
index 171a65c..0000000
--- a/energy_management_ui/src/views/equipmentMonitor/parameters/modelMonitorSetting.vue
+++ /dev/null
@@ -1,182 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-card class="box-card">
-      <div slot="header" class="clearfix">
-        <span>{{
-          currentNode ? currentNode.label + "--鑺傜偣閰嶇疆" : "鑺傜偣閰嶇疆"
-        }}</span>
-      </div>
-
-      <el-tabs>
-        <el-tab-pane :disabled="disabledSetting">
-          <span slot="label"><i class="el-icon-setting"></i>瀹炴椂鑳借��</span>
-          <!--琛ㄦ牸-->
-          <el-form :model="model" ref="form">
-            <el-table
-              v-loading="loading"
-              :data="model.tableOptions"
-              border
-              @selection-change="handleSelectionChange"
-              :default-sort="{ prop: 'date', order: 'descending' }"
-            >
-              <el-table-column type="selection" width="55" align="center" />
-              <el-table-column label="搴忓彿" align="center" prop="index" />
-              <el-table-column label="鍚嶇О" align="center" prop="name" />
-              <el-table-column
-                label="鏁版嵁"
-                align="center"
-                prop="data"
-                class-name="small-padding fixed-width"
-              />
-              <el-table-column label="鍗曚綅" align="center" prop="unit" />
-            </el-table>
-          </el-form>
-        </el-tab-pane>
-      </el-tabs>
-    </el-card>
-  </div>
-</template>
-
-<script>
-import {
-  delDevice,
-  delEnergy,
-  delIndex,
-  delProduct,
-  getSettingDevice,
-  getSettingEnergy,
-  getSettingIndex,
-  getSettingProduct,
-  setCollectIndex,
-  setDevice,
-  setEnergy,
-  setProduct
-} from "@/api/basicsetting/modelNode";
-
-export default {
-  name: "modelMonitorSetting",
-  data() {
-    return {
-      currentNode: "",
-      deviceDialog: false,
-      energyDialog: false,
-      productDialog: false,
-      collectIndexDialog: false,
-      indexLoading: false,
-      deviceLoading: false,
-      energyLoading: false,
-      productLoading: false,
-      settingEnergyList: [],
-      settingDeviceList: [],
-      settingProductList: [],
-      settingIndexList: [],
-      disabledSetting: true,
-      // 閬僵灞�
-      loading: false,
-      //琛ㄦ牸妯″瀷
-      model: {
-        tableOptions: [
-          // {
-          //   index:undefined,
-          //   name:undefined,
-          //   data:undefined,
-          //   unit:undefined
-          // }
-          {
-            index: "id001",
-            name: "鐜嬪皬铏�",
-            data: "30000",
-            unit: "WH"
-          }
-        ]
-      }
-    };
-  },
-  created() {
-    // setInterval(alert("鍝堝搱鍝堬紒锛�"),5000);
-  },
-  methods: {
-    modelNodeChange(modelNode) {
-      this.settingDeviceList = [];
-      this.settingIndexList = [];
-      this.disabledSetting =
-        modelNode === undefined || modelNode === "" || modelNode === null;
-      if (modelNode) {
-        this.currentNode = modelNode;
-        this.deviceLoading = true;
-        getSettingDevice(modelNode.id).then(response => {
-          if (response.code === 200) {
-            this.settingDeviceList = response.data;
-          } else {
-            this.$message.error(response.msg);
-          }
-          this.deviceLoading = false;
-        });
-        this.energyLoading = true;
-        getSettingEnergy(modelNode.id).then(response => {
-          if (response.code === 200) {
-            this.settingEnergyList = response.data;
-          } else {
-            this.$message.error(response.msg);
-          }
-          this.energyLoading = false;
-        });
-        this.productLoading = true;
-        getSettingProduct(modelNode.id).then(response => {
-          if (response.code === 200) {
-            this.settingProductList = response.data;
-          } else {
-            this.$message.error(response.msg);
-          }
-          this.productLoading = false;
-        });
-        this.indexLoading = true;
-        getSettingIndex(modelNode.id).then(response => {
-          if (response.code === 200) {
-            this.settingIndexList = response.data;
-          } else {
-            this.$message.error(response.msg);
-          }
-          this.indexLoading = false;
-        });
-      }
-    },
-    collectIndexSetting() {
-      this.collectIndexDialog = true;
-    },
-    showCollectIndexDialog() {
-      this.$nextTick(() => {
-        this.$refs.collectIndexSetting.init(
-          this.currentNode,
-          this.settingIndexList
-        );
-      });
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.indexId);
-      this.names = selection.map(item => item.name);
-      this.single = selection.length !== 1;
-      this.multiple = !selection.length;
-    },
-    getList() {
-      // console.log(this.myModelNode)
-      // if (this.myModelNode) {
-      //   this.loading = true;
-      // this.queryParams.nodeId = this.myModelNode.id;
-      //鎺ュ彛
-      // getSettingIndex(this.queryParams).then(response => {
-      //   this.model.energyindexList = response.data;
-      //   this.initstartstop();
-      //   this.loading = false;
-      // });
-
-      // } else {
-      this.model.tableOptions = [];
-      // }
-    }
-  }
-};
-</script>
-
-<style scoped></style>
diff --git a/energy_management_ui/src/views/equipmentMonitor/realTimeMonitoring/index.vue b/energy_management_ui/src/views/equipmentMonitor/realTimeMonitoring/index.vue
deleted file mode 100644
index 9e2e867..0000000
--- a/energy_management_ui/src/views/equipmentMonitor/realTimeMonitoring/index.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" :width="isCollapse?'0px':'20%'">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            璁惧鍚仠瀹炴椂鐩戞祴
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false" :modelCode="modelCode"></ModelNode>
-        </el-card>
-      </el-aside>
-      <div style="cursor:pointer;" @click="toggleCollapse">
-        <img src="@/assets/image/configureChart.png" style="width: 100%;height: 100%">
-      </div>
-      <el-container>
-        <el-header style="padding:0" height="200px">
-          <state-table ref="stateTable"></state-table>
-        </el-header>
-        <el-main style="padding:0">
-          <parameters-table ref="parametersTable"></parameters-table>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-import stateTable from "./stateTable";
-import parametersTable from "./parametersTable";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import {listModel} from "@/api/basicsetting/model";
-
-
-export default {
-  components: { ModelNode,stateTable,parametersTable},
-  created() {
-    this.modelCode=this.$route.query.modelCode;
-    this.deviceCategory = this.$route.query.device_category;
-  },
-  data() {
-    return {
-      modelData: '',
-      modelInfoOptions: [],
-      modelCode:undefined,
-      deviceCategory:"",
-      isCollapse: false,
-    }
-  },
-  methods: {
-    changeNode: function (node) {
-      this.$refs.stateTable.modelNodeChange(node,this.deviceCategory);
-      this.$refs.parametersTable.modelNodeChange(node,this.deviceCategory);
-    },
-    manageModel: function () {
-      this.$router.push('/model');
-    },
-    changeModel: function (item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse () {
-      this.isCollapse = !this.isCollapse
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/equipmentMonitor/realTimeMonitoring/parametersTable.vue b/energy_management_ui/src/views/equipmentMonitor/realTimeMonitoring/parametersTable.vue
deleted file mode 100644
index 4482382..0000000
--- a/energy_management_ui/src/views/equipmentMonitor/realTimeMonitoring/parametersTable.vue
+++ /dev/null
@@ -1,173 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <div style="margin-bottom:10px;">
-      <span>{{ currentNode ? currentNode.label : "" }}娴嬬偣鍙傛暟鍒楄〃</span>
-    </div>
-    <el-table
-      :data="parameterTableData"
-      border
-      style="width: 100%"
-      @cell-click="openDialog"
-    >
-      <el-table-column prop="code" label="鎸囨爣缂栫爜" width="180" align="center">
-      </el-table-column>
-      <el-table-column prop="indexName" label="鎸囨爣鍚嶇О" align="center">
-        <template slot-scope="scope">
-          <div style="color:blue;text-decoration:underline;cursor:pointer">
-            {{ scope.row.indexName }}
-          </div>
-        </template>
-      </el-table-column>
-      <el-table-column
-        prop="indexUnit"
-        label="鎸囨爣鍗曚綅"
-        align="center"
-        :formatter="unitFormat"
-      >
-      </el-table-column>
-      <el-table-column prop="value" label="鎸囨爣鍊�(瀹炴椂鍊�)" align="center">
-      </el-table-column>
-    </el-table>
-
-    <!--鏇茬嚎鍥句笌琛ㄦ牸-->
-    <el-dialog
-      :title="title"
-      :visible.sync="open"
-      width="1000px"
-      :close-on-click-modal="false"
-      @close="closeDialog"
-    >
-      <el-row style="padding:16px 16px 0;margin-bottom:32px;">
-        <el-tabs v-model="activeName" @tab-click="handleClick">
-          <el-tab-pane label="瀹炴椂鏁版嵁鏇茬嚎鍥�" name="first">
-            <live-alarm-view
-              ref="liveAlarmView"
-              :code="code"
-              :activeName="activeName"
-            ></live-alarm-view>
-          </el-tab-pane>
-          <el-tab-pane label="鍘嗗彶鏁版嵁鏇茬嚎鍥�" name="second">
-            <history-alarm-view
-              ref="historyAlarmView"
-              :code="code"
-              :activeName="activeName"
-            ></history-alarm-view>
-          </el-tab-pane>
-          <el-tab-pane label="鍘嗗彶鏁版嵁鏌ヨ" name="third">
-            <history-alarm-table
-              ref="historyAlarmTable"
-              :code="code"
-              :indexName="indexName"
-              :activeName="activeName"
-              :indexUnit="indexUnit"
-            ></history-alarm-table>
-          </el-tab-pane>
-        </el-tabs>
-      </el-row>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="cancelDialog">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { getSettingIndex } from "@/api/equipmentMonitor/realTimeMonitoring/realTimeMonitoring";
-import liveAlarmView from "../../energyAlarm/realTimeAlarm/liveAlarmView";
-import historyAlarmView from "../../energyAlarm/realTimeAlarm/historyAlarmView";
-import historyAlarmTable from "../../energyAlarm/realTimeAlarm/historyAlarmTable";
-export default {
-  name: "parametersTable",
-  components: { liveAlarmView, historyAlarmView, historyAlarmTable },
-  data() {
-    return {
-      parameterTableData: [],
-      currentNode: undefined,
-      unitOptions: undefined,
-      intervalTime: undefined,
-      timer: undefined,
-      //寮瑰嚭灞�
-      activeName: undefined,
-      title: "瀹炴椂鏁版嵁",
-      open: false,
-      code: undefined,
-      indexName: undefined,
-      indexUnit: undefined,
-      deviceCategory: undefined,
-      queryParams: {
-        nodeId: undefined,
-        //鎸囨爣index
-        indexType: "COLLECT"
-      }
-    };
-  },
-  created() {
-    this.getDicts("sys_unit").then(response => {
-      this.unitOptions = response.data;
-    });
-  },
-  mounted() {
-    this.getConfigKey("equipmentMonitor.realTimeMonitoring.intervalTime").then(
-      response => {
-        this.intervalTime = response.msg;
-        this.timer = setInterval(this.getList, this.intervalTime);
-      }
-    );
-  },
-  beforeDestroy() {
-    //椤甸潰閿�姣佹椂 瑕佸仠姝㈣鏃跺櫒锛屽惁鍒欓�夐」鍗″垏鎹㈣鏃跺櫒涓嶅仠姝紝浼氳秺鏉ヨ秺蹇紝澶氫釜绾跨▼
-    if (this.timer) {
-      clearInterval(this.timer);
-    }
-  },
-  methods: {
-    modelNodeChange(modelNode, deviceCategory) {
-      if (modelNode) {
-        this.queryParams.nodeId = modelNode.id;
-        this.deviceCategory = deviceCategory;
-        if ("5" === this.deviceCategory) {
-          this.getList();
-        } else {
-          this.parameterTableData = [];
-        }
-      }
-    },
-    getList() {
-      getSettingIndex(this.queryParams).then(response => {
-        this.parameterTableData = [];
-        this.parameterTableData = response.data;
-      });
-    },
-    // 鍗曚綅瀛楀吀缈昏瘧
-    unitFormat(row, column) {
-      return this.selectDictLabel(this.unitOptions, row.indexUnit);
-    },
-    //鏇茬嚎寮瑰嚭
-    openDialog(row, column, event, cell) {
-      if ("indexName" === column.property) {
-        this.open = true;
-        this.code = row.code;
-        this.indexName = row.indexName;
-        this.indexId = row.indexId;
-        this.activeName = "first";
-        this.indexUnit = this.selectDictLabel(this.unitOptions, row.indexUnit);
-      }
-    },
-    //鍏抽棴
-    closeDialog() {
-      this.activeName = "";
-      this.$refs.historyAlarmTable.cleanTable();
-    },
-    //鍙栨秷
-    cancelDialog() {
-      this.open = false;
-      this.$refs.historyAlarmTable.cleanTable();
-    },
-    handleClick(tab, event) {
-      this.activeName = tab.name;
-    }
-  }
-};
-</script>
-
-<style scoped></style>
diff --git a/energy_management_ui/src/views/equipmentMonitor/realTimeMonitoring/stateTable.vue b/energy_management_ui/src/views/equipmentMonitor/realTimeMonitoring/stateTable.vue
deleted file mode 100644
index e24bb97..0000000
--- a/energy_management_ui/src/views/equipmentMonitor/realTimeMonitoring/stateTable.vue
+++ /dev/null
@@ -1,88 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <div style="display: flex;width: 100%;height: 53px;align-items: center;justify-content: center">
-      <span>{{currentNode?currentNode.label:''}}鐩戞帶璁惧鐘舵�佷俊鎭�</span>
-    </div>
-    <div style="margin-bottom:10px;">
-      璁惧鐘舵�佸垪琛�
-    </div>
-    <el-table
-      :data="stateTableData"
-      border
-      style="width: 100%">
-      <el-table-column
-        prop="modelNodeName"
-        label="璁惧鍚嶇О"
-        align="center">
-      </el-table-column>
-      <el-table-column
-        prop="statusName"
-        label="褰撳墠鐘舵��"
-        align="center">
-        <template slot-scope="scope">
-          <div :style="{'color':scope.row.stateType.colorNumber}">{{scope.row.statusName}}</div>
-        </template>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-  import {getRealTimeMonitoring} from "@/api/equipmentMonitor/realTimeMonitoring/realTimeMonitoring";
-    export default {
-        name: "stateTable",
-      data(){
-          return{
-            stateTableData: [],
-            currentNode:undefined,
-            resposeJson:undefined,
-            colorNumber:undefined,
-          }
-      },
-      created(){
-
-      },
-      mounted()
-      {
-        this.getConfigKey("equipmentMonitor.realTimeMonitoring.intervalTime").then(response => {
-          this.intervalTime = response.msg;
-
-          this.timer = setInterval(this.getList, this.intervalTime);
-        });
-      },
-      beforeDestroy() {
-        //椤甸潰閿�姣佹椂 瑕佸仠姝㈣鏃跺櫒锛屽惁鍒欓�夐」鍗″垏鎹㈣鏃跺櫒涓嶅仠姝紝浼氳秺鏉ヨ秺蹇紝澶氫釜绾跨▼
-        if(this.timer) {
-          clearInterval(this.timer);
-        }
-      },
-      methods:{
-        modelNodeChange(modelNode,deviceCategory) {
-          if (modelNode) {
-            this.currentNode = modelNode;
-            this.currentNodeId = modelNode.id;
-            this.deviceCategory = deviceCategory;
-            if("5"===this.deviceCategory){
-              this.getList();
-            }else {
-            this.stateTableData = [];
-            }
-          }
-        },
-        getList(){
-          getRealTimeMonitoring(this.currentNodeId).then(response => {
-            this.stateTableData = [];
-            if(response.rows!=undefined && response.rows[0]!=null)
-            {
-              response.rows[0].modelNodeName=this.currentNode.label;
-              this.stateTableData = response.rows;
-            }
-          });
-        }
-      }
-    }
-</script>
-
-<style scoped>
-
-</style>
diff --git a/energy_management_ui/src/views/error/401.vue b/energy_management_ui/src/views/error/401.vue
deleted file mode 100644
index 448b6ec..0000000
--- a/energy_management_ui/src/views/error/401.vue
+++ /dev/null
@@ -1,88 +0,0 @@
-<template>
-  <div class="errPage-container">
-    <el-button icon="arrow-left" class="pan-back-btn" @click="back">
-      杩斿洖
-    </el-button>
-    <el-row>
-      <el-col :span="12">
-        <h1 class="text-jumbo text-ginormous">
-          401閿欒!
-        </h1>
-        <h2>鎮ㄦ病鏈夎闂潈闄愶紒</h2>
-        <h6>瀵逛笉璧凤紝鎮ㄦ病鏈夎闂潈闄愶紝璇蜂笉瑕佽繘琛岄潪娉曟搷浣滐紒鎮ㄥ彲浠ヨ繑鍥炰富椤甸潰</h6>
-        <ul class="list-unstyled">
-          <li class="link-type">
-            <router-link to="/">
-              鍥為椤�
-            </router-link>
-          </li>
-        </ul>
-      </el-col>
-      <el-col :span="12">
-        <img :src="errGif" width="313" height="428" alt="Girl has dropped her ice cream.">
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import errGif from '@/assets/401_images/401.gif'
-
-export default {
-  name: 'Page401',
-  data() {
-    return {
-      errGif: errGif + '?' + +new Date()
-    }
-  },
-  methods: {
-    back() {
-      if (this.$route.query.noGoBack) {
-        this.$router.push({ path: '/' })
-      } else {
-        this.$router.go(-1)
-      }
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-  .errPage-container {
-    width: 800px;
-    max-width: 100%;
-    margin: 100px auto;
-    .pan-back-btn {
-      background: #008489;
-      color: #fff;
-      border: none!important;
-    }
-    .pan-gif {
-      margin: 0 auto;
-      display: block;
-    }
-    .pan-img {
-      display: block;
-      margin: 0 auto;
-      width: 100%;
-    }
-    .text-jumbo {
-      font-size: 60px;
-      font-weight: 700;
-      color: #484848;
-    }
-    .list-unstyled {
-      font-size: 14px;
-      li {
-        padding-bottom: 5px;
-      }
-      a {
-        color: #008489;
-        text-decoration: none;
-        &:hover {
-          text-decoration: underline;
-        }
-      }
-    }
-  }
-</style>
diff --git a/energy_management_ui/src/views/error/404.vue b/energy_management_ui/src/views/error/404.vue
deleted file mode 100644
index 96f075c..0000000
--- a/energy_management_ui/src/views/error/404.vue
+++ /dev/null
@@ -1,233 +0,0 @@
-<template>
-  <div class="wscn-http404-container">
-    <div class="wscn-http404">
-      <div class="pic-404">
-        <img class="pic-404__parent" src="@/assets/404_images/404.png" alt="404">
-        <img class="pic-404__child left" src="@/assets/404_images/404_cloud.png" alt="404">
-        <img class="pic-404__child mid" src="@/assets/404_images/404_cloud.png" alt="404">
-        <img class="pic-404__child right" src="@/assets/404_images/404_cloud.png" alt="404">
-      </div>
-      <div class="bullshit">
-        <div class="bullshit__oops">
-          404閿欒!
-        </div>
-        <div class="bullshit__headline">
-          {{ message }}
-        </div>
-        <div class="bullshit__info">
-          瀵逛笉璧凤紝鎮ㄦ鍦ㄥ鎵剧殑椤甸潰涓嶅瓨鍦ㄣ�傚皾璇曟鏌RL鐨勯敊璇紝鐒跺悗鎸夋祻瑙堝櫒涓婄殑鍒锋柊鎸夐挳鎴栧皾璇曞湪鎴戜滑鐨勫簲鐢ㄧ▼搴忎腑鎵惧埌鍏朵粬鍐呭銆�
-        </div>
-        <router-link to="/" class="bullshit__return-home">
-          杩斿洖棣栭〉
-        </router-link>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-
-export default {
-  name: 'Page404',
-  computed: {
-    message() {
-      return '鎵句笉鍒扮綉椤碉紒'
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.wscn-http404-container{
-  transform: translate(-50%,-50%);
-  position: absolute;
-  top: 40%;
-  left: 50%;
-}
-.wscn-http404 {
-  position: relative;
-  width: 1200px;
-  padding: 0 50px;
-  overflow: hidden;
-  .pic-404 {
-    position: relative;
-    float: left;
-    width: 600px;
-    overflow: hidden;
-    &__parent {
-      width: 100%;
-    }
-    &__child {
-      position: absolute;
-      &.left {
-        width: 80px;
-        top: 17px;
-        left: 220px;
-        opacity: 0;
-        animation-name: cloudLeft;
-        animation-duration: 2s;
-        animation-timing-function: linear;
-        animation-fill-mode: forwards;
-        animation-delay: 1s;
-      }
-      &.mid {
-        width: 46px;
-        top: 10px;
-        left: 420px;
-        opacity: 0;
-        animation-name: cloudMid;
-        animation-duration: 2s;
-        animation-timing-function: linear;
-        animation-fill-mode: forwards;
-        animation-delay: 1.2s;
-      }
-      &.right {
-        width: 62px;
-        top: 100px;
-        left: 500px;
-        opacity: 0;
-        animation-name: cloudRight;
-        animation-duration: 2s;
-        animation-timing-function: linear;
-        animation-fill-mode: forwards;
-        animation-delay: 1s;
-      }
-      @keyframes cloudLeft {
-        0% {
-          top: 17px;
-          left: 220px;
-          opacity: 0;
-        }
-        20% {
-          top: 33px;
-          left: 188px;
-          opacity: 1;
-        }
-        80% {
-          top: 81px;
-          left: 92px;
-          opacity: 1;
-        }
-        100% {
-          top: 97px;
-          left: 60px;
-          opacity: 0;
-        }
-      }
-      @keyframes cloudMid {
-        0% {
-          top: 10px;
-          left: 420px;
-          opacity: 0;
-        }
-        20% {
-          top: 40px;
-          left: 360px;
-          opacity: 1;
-        }
-        70% {
-          top: 130px;
-          left: 180px;
-          opacity: 1;
-        }
-        100% {
-          top: 160px;
-          left: 120px;
-          opacity: 0;
-        }
-      }
-      @keyframes cloudRight {
-        0% {
-          top: 100px;
-          left: 500px;
-          opacity: 0;
-        }
-        20% {
-          top: 120px;
-          left: 460px;
-          opacity: 1;
-        }
-        80% {
-          top: 180px;
-          left: 340px;
-          opacity: 1;
-        }
-        100% {
-          top: 200px;
-          left: 300px;
-          opacity: 0;
-        }
-      }
-    }
-  }
-  .bullshit {
-    position: relative;
-    float: left;
-    width: 300px;
-    padding: 30px 0;
-    overflow: hidden;
-    &__oops {
-      font-size: 32px;
-      font-weight: bold;
-      line-height: 40px;
-      color: #1482f0;
-      opacity: 0;
-      margin-bottom: 20px;
-      animation-name: slideUp;
-      animation-duration: 0.5s;
-      animation-fill-mode: forwards;
-    }
-    &__headline {
-      font-size: 20px;
-      line-height: 24px;
-      color: #222;
-      font-weight: bold;
-      opacity: 0;
-      margin-bottom: 10px;
-      animation-name: slideUp;
-      animation-duration: 0.5s;
-      animation-delay: 0.1s;
-      animation-fill-mode: forwards;
-    }
-    &__info {
-      font-size: 13px;
-      line-height: 21px;
-      color: grey;
-      opacity: 0;
-      margin-bottom: 30px;
-      animation-name: slideUp;
-      animation-duration: 0.5s;
-      animation-delay: 0.2s;
-      animation-fill-mode: forwards;
-    }
-    &__return-home {
-      display: block;
-      float: left;
-      width: 110px;
-      height: 36px;
-      background: #1482f0;
-      border-radius: 100px;
-      text-align: center;
-      color: #ffffff;
-      opacity: 0;
-      font-size: 14px;
-      line-height: 36px;
-      cursor: pointer;
-      animation-name: slideUp;
-      animation-duration: 0.5s;
-      animation-delay: 0.3s;
-      animation-fill-mode: forwards;
-    }
-    @keyframes slideUp {
-      0% {
-        transform: translateY(60px);
-        opacity: 0;
-      }
-      100% {
-        transform: translateY(0);
-        opacity: 1;
-      }
-    }
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/facility/archives/importAnnexTable.vue b/energy_management_ui/src/views/facility/archives/importAnnexTable.vue
deleted file mode 100644
index 858686c..0000000
--- a/energy_management_ui/src/views/facility/archives/importAnnexTable.vue
+++ /dev/null
@@ -1,205 +0,0 @@
-<template>
-  <!-- 瀵煎叆琛� -->
-  <el-dialog :title="title" :visible.sync="open"  :destroy-on-close="true" width="800px" top="5vh">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鏂囦欢鍚�" prop="fileName">
-        <el-input
-          v-model="queryParams.fileName"
-          placeholder="璇疯緭鍏ユ枃浠跺悕"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-upload
-      ref="upload"
-      :limit="1"
-      :headers="uploadData.headers"
-      :action="uploadData.url + '?facilityId=' + queryParams.facilityId"
-      :on-preview="handlePreview"
-      :on-progress="handleFileUploadProgress"
-      :on-success="handleFileSuccess"
-      :auto-upload="false"
-    >
-      <el-button slot="trigger" size="small" type="primary">閫夊彇鏂囦欢</el-button>
-      <el-button style="margin-left: 10px;" size="small" type="success" @click="submitFileForm">涓婁紶鍒版湇鍔″櫒</el-button>
-      <div class="el-upload__tip" style="color:red" slot="tip">娉ㄦ剰鎺у埗鏂囦欢澶у皬锛屼笉瑕佽秴杩�50M</div>
-    </el-upload>
-
-    <el-row>
-      <el-table v-loading="loading" :data="annexList" >
-        <el-table-column label="鏂囦欢鍚�" align="center" prop="fileName"  />
-        <el-table-column label="涓婁紶鏃堕棿" align="center" prop="createTime"  />
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="seeImpFile(scope.row)"
-              v-hasPermi="['facility:annex:assignDownload']"
-            >鏌ョ湅</el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['facility:annex:remove']"
-            >鍒犻櫎</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        v-show="total>0"
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-    </el-row>
-    <div slot="footer" class="dialog-footer">
-      <el-button @click="handclose">鍙� 娑�</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { listAnnex,delAnnex } from "@/api/facility/annex";
-import { getToken } from "@/utils/auth";
-const baseURL = process.env.VUE_APP_BASE_API
-// 閫氱敤涓嬭浇鏂规硶
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 璁¢噺鍣ㄥ叿妗f闄勪欢琛ㄦ牸鏁版嵁
-      annexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      idOptions: [],
-      // 鍏宠仈meter_implement.id瀛楀吀
-      implementIdOptions: [],
-      // 鏂囦欢鍚嶅瓧鍏�
-      fileNameOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        facilityId:'',
-        tableName: undefined
-      },
-      uploadData: {
-        // 鏄惁鏄剧ず寮瑰嚭灞傦紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        open: false,
-        // 寮瑰嚭灞傛爣棰橈紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        title: "",
-        // 鏄惁绂佺敤涓婁紶
-        isUploading: false,
-        // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-        headers: { Authorization: "Bearer " + getToken() },
-        // 涓婁紶鐨勫湴鍧�
-        url: process.env.VUE_APP_BASE_API + "/facility/annex/fileImport"
-      },
-    };
-  },
-  methods: {
-    // 鏄剧ず寮规
-    show(facid,code) {
-      this.reset();
-      this.queryParams.facilityId = facid;
-      this.getList();
-      this.title='缂栧彿 '+code+' 闄勪欢';
-      this.open = true;
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.queryParams = {
-        pageNum: 1,
-        pageSize: 10,
-        facilityId:'',
-        tableName: undefined
-      };
-      //娓呯┖涓婁紶缁勪欢鐨勬枃浠跺垪琛�
-      this.resetForm("queryForm");
-    },
-    // 鏌ヨ琛ㄦ暟鎹�
-    getList() {
-      listAnnex(this.queryParams).then(response => {
-        this.annexList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-       this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 鏌ョ湅鎸夐挳鎿嶄綔 */
-    seeImpFile(row) {
-      this.fileDownload(row.fileName,row.filePath,false);
-    },
-    handclose()
-    {
-      this.open=false;
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      this.$confirm('鏄惁纭鍒犻櫎闄勪欢鍚嶇О涓�"' + row.fileName + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function() {
-        return delAnnex(row.id);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function() {});
-    },
-    // 闄勪欢涓婁紶涓鐞�
-    handleFileUploadProgress(event, file, fileList) {
-      this.uploadData.isUploading = true;
-    },
-    // 闄勪欢涓婁紶鎴愬姛澶勭悊
-    handleFileSuccess(response, file, fileList) {
-      this.uploadData.open = false;
-      this.uploadData.isUploading = false;
-      this.$refs.upload.clearFiles();
-      this.$alert(response.msg, "闄勪欢缁撴灉", { dangerouslyUseHTMLString: true });
-      this.getList();
-    },
-    // 闄勪欢涓婁紶鏂囦欢
-    submitFileForm() {
-      this.$refs.upload.submit();
-    },
-    handlePreview(file) {
-      console.log(file);
-    },
-  }
-};
-
-</script>
diff --git a/energy_management_ui/src/views/facility/archives/index.vue b/energy_management_ui/src/views/facility/archives/index.vue
deleted file mode 100644
index 89fde81..0000000
--- a/energy_management_ui/src/views/facility/archives/index.vue
+++ /dev/null
@@ -1,805 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form class="special-form" :model="queryParams" ref="queryForm" label-width="72px">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="缂栫爜" prop="code">
-              <el-input
-                  v-model="queryParams.code"
-                  placeholder="璇疯緭鍏ョ紪鐮�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="璁惧鍚嶇О" prop="facilityName">
-              <el-input
-                  v-model="queryParams.facilityName"
-                  placeholder="璇疯緭鍏ヨ澶囧悕绉�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="璁惧绫诲瀷" prop="facilityType">
-              <el-select v-model="queryParams.facilityType" placeholder="璇烽�夋嫨璁惧绫诲瀷" clearable size="small"
-                         style="width: 100%">
-                <el-option
-                    v-for="dict in facilityTypeOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <!--          <el-col :span="6">-->
-          <!--            <el-form-item label="浣跨敤鍒嗗巶" prop="branchFactory">-->
-          <!--              <el-select v-model="queryParams.branchFactory" placeholder="璇烽�夋嫨浣跨敤鍒嗗巶" clearable size="small"-->
-          <!--                         style="width: 100%">-->
-          <!--                <el-option-->
-          <!--                    v-for="dict in branchFactoryOptions"-->
-          <!--                    :key="dict.dictValue"-->
-          <!--                    :label="dict.dictLabel"-->
-          <!--                    :value="dict.dictValue"-->
-          <!--                />-->
-          <!--              </el-select>-->
-          <!--            </el-form-item>-->
-          <!--          </el-col>-->
-          <!--          <el-col :span="6">-->
-          <!--            <el-form-item label="鐗╃悊浣嶇疆" prop="istallationLocationn">-->
-          <!--              <el-input-->
-          <!--                  v-model="queryParams.istallationLocationn"-->
-          <!--                  placeholder="璇疯緭鍏ョ墿鐞嗕綅缃�"-->
-          <!--                  clearable-->
-          <!--                  size="small"-->
-          <!--                  @keyup.enter.native="handleQuery"-->
-          <!--              />-->
-          <!--            </el-form-item>-->
-          <!--          </el-col>-->
-          <!--          <el-col :span="6">-->
-          <!--            <el-form-item label="鑳借�楃瓑绾�" prop="facilityGrade">-->
-          <!--              <el-select v-model="queryParams.facilityGrade" placeholder="璇烽�夋嫨鑳借�楃瓑绾�" clearable size="small"-->
-          <!--                         style="width: 100%">-->
-          <!--                <el-option-->
-          <!--                    v-for="dict in facilityGradeOptions"-->
-          <!--                    :key="dict.dictValue"-->
-          <!--                    :label="dict.dictLabel"-->
-          <!--                    :value="dict.dictValue"-->
-          <!--                />-->
-          <!--              </el-select>-->
-          <!--            </el-form-item>-->
-          <!--          </el-col>-->
-          <!--          <el-col :span="6">-->
-          <!--            <el-form-item label="鐢熶骇鍘傚" prop="manufacturer">-->
-          <!--              <el-input-->
-          <!--                  v-model="queryParams.manufacturer"-->
-          <!--                  placeholder="璇疯緭鍏ョ敓浜у巶瀹�"-->
-          <!--                  clearable-->
-          <!--                  size="small"-->
-          <!--                  @keyup.enter.native="handleQuery"-->
-          <!--              />-->
-          <!--            </el-form-item>-->
-          <!--          </el-col>-->
-          <!--          <el-col :span="6">-->
-          <!--            <el-form-item label="棰濆畾鍔熺巼" prop="ratedPower">-->
-          <!--              <el-select v-model="queryParams.ratedPower" placeholder="璇烽�夋嫨棰濆畾鍔熺巼" clearable size="small"-->
-          <!--                         style="width: 100%">-->
-          <!--                <el-option-->
-          <!--                    v-for="dict in ratedPowerOptions"-->
-          <!--                    :key="dict.dictValue"-->
-          <!--                    :label="dict.dictLabel"-->
-          <!--                    :value="dict.dictValue"-->
-          <!--                />-->
-          <!--              </el-select>-->
-          <!--            </el-form-item>-->
-          <!--          </el-col>-->
-          <el-col :span="6">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-              type="primary"
-              icon="el-icon-plus"
-              size="mini"
-              @click="handleAdd"
-              v-hasPermi="['facility:archives:add']"
-          >鏂板
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="success"
-              icon="el-icon-edit"
-              size="mini"
-              :disabled="single"
-              @click="handleUpdate"
-              v-hasPermi="['facility:archives:edit']"
-          >淇敼
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              :disabled="multiple"
-              @click="handleDelete"
-              v-hasPermi="['facility:archives:remove']"
-          >鍒犻櫎
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="warning"
-              icon="el-icon-download"
-              size="mini"
-              @click="handleExport"
-              v-hasPermi="['facility:archives:export']"
-          >瀵煎嚭
-          </el-button>
-        </el-col>
-        <!--        <el-col :span="1.5">-->
-        <!--          <el-button-->
-        <!--              type="info"-->
-        <!--              icon="el-icon-upload2"-->
-        <!--              size="mini"-->
-        <!--              @click="handleImport"-->
-        <!--              v-hasPermi="['facility:archives:import']"-->
-        <!--          >瀵煎叆-->
-        <!--          </el-button>-->
-        <!--        </el-col>-->
-      </el-row>
-      <el-table v-loading="loading" :data="archivesList" @selection-change="handleSelectionChange" :height="height">
-        <el-table-column type="selection" width="55" align="center"/>
-        <el-table-column label="缂栫爜" align="center" prop="code" show-overflow-tooltip/>
-        <el-table-column label="璁惧鍚嶇О" align="center" prop="facilityName" show-overflow-tooltip/>
-        <el-table-column label="璁惧绫诲瀷" align="center" prop="facilityType" :formatter="facilityTypeFormat"
-                         show-overflow-tooltip/>
-        <el-table-column label="浣跨敤鍒嗗巶" align="center" prop="branchFactory" :formatter="branchFactoryFormat"
-                         show-overflow-tooltip/>
-        <el-table-column label="閲嶇偣璁惧" align="center" prop="pointFlag" :formatter="pointFlagFactoryFormat"
-                         show-overflow-tooltip/>
-        <el-table-column label="鐗╃悊浣嶇疆" align="center" prop="istallationLocationn" show-overflow-tooltip/>
-        <el-table-column label="鑳借�楃瓑绾�" align="center" prop="facilityGrade" :formatter="facilityGradeFormat"
-                         show-overflow-tooltip/>
-        <el-table-column label="棰濆畾鍔熺巼" align="center" width="100" prop="ratedPower" show-overflow-tooltip/>
-        <el-table-column label="鎶曡繍鏃ユ湡" align="center" prop="putrunDate" width="180" show-overflow-tooltip/>
-        <el-table-column label="鐢熶骇鍘傚" align="center" width="220" prop="manufacturer" show-overflow-tooltip/>
-        <el-table-column label="鎿嶄綔" align="center" width="200" class-name="small-padding fixed-width"
-                         show-overflow-tooltip fixed="right">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['facility:archives:edit']"
-            >淇敼
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="openImportAnnexTable(scope.row)"
-                v-hasPermi="['tool:gen:import']"
-            >闄勪欢
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-delete"
-                @click="handleDelete(scope.row)"
-                v-hasPermi="['facility:archives:remove']"
-            >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-      <!-- 娣诲姞鎴栦慨鏀硅澶囨。妗堝璇濇 -->
-      <el-dialog :title="title" :visible.sync="open" width="820px" class="dialog-form-row">
-        <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-          <el-row :gutter="24">
-            <el-col :span="8">
-              <el-form-item label="缂栫爜" prop="code">
-                <el-input v-model="form.code" placeholder="璇疯緭鍏ョ紪鐮�"/>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="璁惧鍚嶇О" prop="facilityName">
-                <el-input v-model="form.facilityName" placeholder="璇疯緭鍏ヨ澶囧悕绉�"/>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="璁惧绫诲瀷">
-                <el-select v-model="form.facilityType" placeholder="璇烽�夋嫨璁惧绫诲瀷" filterable>
-                  <el-option
-                      v-for="dict in facilityTypeOptions"
-                      :key="dict.dictValue"
-                      :label="dict.dictLabel"
-                      :value="dict.dictValue"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row :gutter="24">
-            <el-col :span="8">
-              <el-form-item label="浣跨敤鍒嗗巶">
-                <el-select v-model="form.branchFactory" placeholder="璇烽�夋嫨浣跨敤鍒嗗巶" style="width: 100%">
-                  <el-option
-                      v-for="dict in branchFactoryOptions"
-                      :key="dict.dictValue"
-                      :label="dict.dictLabel"
-                      :value="dict.dictValue"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="鑳借�楃瓑绾�">
-                <el-select v-model="form.facilityGrade" placeholder="璇烽�夋嫨鑳借�楃瓑绾�">
-                  <el-option
-                      v-for="dict in facilityGradeOptions"
-                      :key="dict.dictValue"
-                      :label="dict.dictLabel"
-                      :value="dict.dictValue"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="棰濆畾鍔熺巼" prop="ratedPower">
-                <el-input v-model="form.ratedPower" placeholder="璇疯緭鍏ラ瀹氬姛鐜�" style="width: 100%"/>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row :gutter="24">
-            <el-col :span="8">
-              <el-form-item label="鐢熶骇鏃ユ湡" prop="productionDate">
-                <el-date-picker clearable size="small" style="width: 100%"
-                                v-model="form.productionDate"
-                                type="date"
-                                value-format="yyyy-MM-dd"
-                                placeholder="閫夋嫨鐢熶骇鏃ユ湡">
-                </el-date-picker>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="鎶曡繍鏃ユ湡" prop="putrunDate">
-                <el-date-picker clearable size="small" style="width: 100%"
-                                v-model="form.putrunDate"
-                                type="date"
-                                value-format="yyyy-MM-dd"
-                                placeholder="閫夋嫨鎶曡繍鏃ユ湡">
-                </el-date-picker>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="閲嶇偣璁惧" prop="pointFlag">
-                <el-select v-model="form.pointFlag" placeholder="璇烽�夋嫨">
-                  <el-option
-                      v-for="dict in pointFlagOptions"
-                      :key="dict.dictValue"
-                      :label="dict.dictLabel"
-                      :value="dict.dictValue"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row :gutter="24">
-            <el-col :span="8">
-              <el-form-item label="鐢熶骇鍘傚" prop="manufacturer">
-                <el-input v-model="form.manufacturer" placeholder="璇疯緭鍏ョ敓浜у巶瀹�"/>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="璐熻矗浜�" prop="personCharge">
-                <el-input v-model="form.personCharge" placeholder="璇疯緭鍏ヨ礋璐d汉"/>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="鐗╃悊浣嶇疆" prop="istallationLocationn">
-                <el-input v-model="form.istallationLocationn" placeholder="璇疯緭鍏ョ墿鐞嗕綅缃�"/>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="鎶�鏈弬鏁�" prop="technicalData">
-                <el-input v-model="form.technicalData" placeholder="璇疯緭鍏ユ妧鏈弬鏁�"/>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="璧峰鏃堕棿" prop="startTime">
-                <el-date-picker clearable size="small" style="width: 100%"
-                                v-model="form.startTime"
-                                type="date"
-                                value-format="yyyy-MM-dd"
-                                placeholder="閫夋嫨璧峰鏃堕棿">
-                </el-date-picker>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="妫�瀹氬懆鏈�" prop="checkCycle">
-                <el-input v-model="form.checkCycle" placeholder="璇疯緭鍏ユ瀹氬懆鏈�"/>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row :gutter="24">
-            <el-col :span="8">
-              <el-form-item label="鎻愰啋鍛ㄦ湡" prop="reminderCycle">
-                <el-input v-model="form.reminderCycle" placeholder="璇疯緭鍏ユ彁閱掑懆鏈�"/>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row :gutter="24">
-            <el-col :span="24">
-              <el-form-item label="澶囨敞" prop="remark">
-                <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�"/>
-              </el-form-item>
-            </el-col>
-          </el-row>
-        </el-form>
-        <div slot="footer" class="dialog-footer" style="padding-top: 5px">
-          <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-          <el-button @click="cancel">鍙� 娑�</el-button>
-        </div>
-      </el-dialog>
-      <!-- 璁惧妗f 瀵煎叆瀵硅瘽妗� -->
-      <el-dialog :title="upload.title" :visible.sync="upload.open" :destroy-on-close="true" width="400px">
-        <el-upload
-            ref="upload"
-            :limit="1"
-            :accept="upload.accept"
-            :headers="upload.headers"
-            :action="upload.url"
-            :disabled="upload.isUploading"
-            :on-progress="handleFileUploadProgress"
-            :on-success="handleFileSuccess"
-            :auto-upload="false"
-            drag
-        >
-          <i class="el-icon-upload"></i>
-          <div class="el-upload__text">
-            灏嗘枃浠舵嫋鍒版澶勶紝鎴�
-            <em>鐐瑰嚮涓婁紶</em>
-          </div>
-          <div class="el-upload__tip" slot="tip">
-            <el-link type="info" style="font-size:12px;color:blue;" @click="importTemplate">涓嬭浇妯℃澘</el-link>
-          </div>
-          <div class="el-upload__tip" style="color:red" slot="tip">
-            瀵煎叆鎻愮ず锛�<br>1銆佹柊澧炲鍏�,浠呭厑璁稿鍏モ�渪ls鈥濇垨鈥渪lsx鈥濇牸寮忔枃浠讹紒
-            <br>2銆佺紪鐮佸繀椤诲敮涓�,閲嶅鏁版嵁鏃犳硶瀵煎叆
-            <br>3銆佽澶囩绫汇�佷娇鐢ㄥ垎鍘傘�佽兘婧愮瓑绾у~鍐欓敊璇殑鏁版嵁鏃犳硶瀵煎叆
-            <br>4銆佹瀹氬懆鏈熴�佹彁閱掑懆鏈熷ぇ浜�0姝f暣鏁�,濉啓閿欒鍒欓粯璁や负1
-            <br>5銆佽捣濮嬫椂闂村~鍐欓敊璇垨涓嶅~鍒欓粯璁や负绌�
-          </div>
-
-        </el-upload>
-        <div slot="footer" class="dialog-footer">
-          <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button>
-          <el-button @click="upload.open = false">鍙� 娑�</el-button>
-        </div>
-      </el-dialog>
-      <importAnnexTable ref="importAnnex"/>
-    </basic-container>
-  </div>
-</template>
-<style scoped>
-.el-dialog__body {
-  padding: 10px 10px 10px 10px;
-  color: #606266;
-  font-size: 14px;
-  word-break: break-all;
-}
-</style>
-<script>
-import {
-  listArchives,
-  getArchives,
-  delArchives,
-  addArchives,
-  updateArchives,
-  exportArchives,
-  importTemplate
-} from "@/api/facility/archives";
-import {getToken} from "@/utils/auth";
-import importAnnexTable from "./importAnnexTable";
-import mixins from "@/layout/mixin/getHeight";
-
-const facilityType = "0";
-const branchFactory = "0";
-const facilityGrade = "0";
-export default {
-  name: "importAnnex",
-  components: {importAnnexTable},
-  mixins: [mixins],
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 缂栫爜閫変腑鏁扮粍
-      codes: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 璁惧妗f琛ㄦ牸鏁版嵁
-      archivesList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭id瀛楀吀
-      idOptions: [],
-      // 缂栫爜瀛楀吀
-      codeOptions: [],
-      // 璁惧鍚嶇О瀛楀吀
-      facilityNameOptions: [],
-      // 璁惧绫诲瀷瀛楀吀
-      facilityTypeOptions: [],
-      // 閲嶇偣璁惧瀛楀吀
-      pointFlagOptions: [],
-      // 浣跨敤鍒嗗巶瀛楀吀
-      branchFactoryOptions: [],
-      // 鐗╃悊浣嶇疆瀛楀吀
-      istallationLocationnOptions: [],
-      // 鑳借�楃瓑绾у瓧鍏�
-      facilityGradeOptions: [],
-      // 棰濆畾鍔熺巼瀛楀吀
-      ratedPowerOptions: [],
-      // 鐢熶骇鏃ユ湡瀛楀吀
-      productionDateOptions: [],
-      // 鎶曡繍鏃ユ湡瀛楀吀
-      putrunDateOptions: [],
-      // 鐢熶骇鍘傚瀛楀吀
-      manufacturerOptions: [],
-      // 璐熻矗浜哄瓧鍏�
-      personChargeOptions: [],
-      // 鎶�鏈弬鏁板瓧鍏�
-      technicalDataOptions: [],
-      // 璧峰鏃堕棿瀛楀吀
-      startTimeOptions: [],
-      // 妫�瀹氬懆鏈熷瓧鍏�
-      checkCycleOptions: [],
-      // 鎻愰啋鍛ㄦ湡瀛楀吀
-      reminderCycleOptions: [],
-      // 澶囨敞瀛楀吀
-      remarkOptions: [],
-      // 寤虹珛鏃堕棿瀛楀吀
-      createTimeOptions: [],
-      // 鐩戠悊浜哄瓧鍏�
-      createByOptions: [],
-      // 淇敼鏃堕棿瀛楀吀
-      updateTimeOptions: [],
-      // 淇敼浜哄瓧鍏�
-      updateByOptions: [],
-      upload: {
-        // 鏄惁鏄剧ず寮瑰嚭灞傦紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        open: false,
-        //涓婁紶鏂囦欢绫诲瀷鎺у埗
-        accept: undefined,
-        // 寮瑰嚭灞傛爣棰橈紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        title: undefined,
-        // 鏄惁绂佺敤涓婁紶
-        isUploading: false,
-        // 鏄惁鏇存柊宸茬粡瀛樺湪鐨勮閲忓櫒鍏锋。妗�
-        updateSupport: 0,
-        // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-        headers: {Authorization: "Bearer " + getToken()},
-        // 涓婁紶鐨勫湴鍧�
-        url: ""
-      },
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        code: undefined,
-        facilityName: undefined,
-        facilityType: undefined,
-        branchFactory: undefined,
-        pointFlag: undefined,
-        istallationLocationn: undefined,
-        facilityGrade: undefined,
-        manufacturer: undefined,
-        ratedPower: undefined
-      },
-      height: null,
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        code: [
-          {required: true, message: "缂栫爜涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        facilityName: [
-          {required: true, message: "璁惧鍚嶇О涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        installactionLocation: [
-          {required: true, message: "瀹夎浣嶇疆涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        startTime: [
-          {required: true, message: "璧峰鏃堕棿涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        putrunTime: [
-          {required: true, message: "鎶曡繍鏃堕棿涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        checkCycle: [
-          {required: true, pattern: /^\+?[1-9]\d*$/, message: "妫�瀹氬懆鏈熷繀椤绘槸澶т簬0鐨勬鏁存暟", trigger: "blur"}
-        ],
-        reminderCycle: [
-          {required: true, pattern: /^\+?[1-9]\d*$/, message: "鎻愰啋鍛ㄦ湡蹇呴』鏄ぇ浜�0鐨勬鏁存暟", trigger: "blur"}
-        ],
-      }
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("facility_type").then(response => {
-      for (let i = 0; i < response.data.length; i++) {
-        if (response.data[i].isDefault == "Y") {
-          this.facilityType = response.data[i].dictValue;
-        }
-      }
-      this.facilityTypeOptions = response.data;
-    });
-    this.getDicts("pointFlag").then(response => {
-      for (let i = 0; i < response.data.length; i++) {
-        if (response.data[i].isDefault == "Y") {
-          this.pointFlag = response.data[i].dictValue;
-        }
-      }
-      this.pointFlagOptions = response.data;
-    });
-    this.getDicts("branch_factory").then(response => {
-      for (let i = 0; i < response.data.length; i++) {
-        if (response.data[i].isDefault == "Y") {
-          this.branchFactory = response.data[i].dictValue;
-        }
-      }
-      this.branchFactoryOptions = response.data;
-    });
-    this.getDicts("facility_grade").then(response => {
-      for (let i = 0; i < response.data.length; i++) {
-        if (response.data[i].isDefault == "Y") {
-          this.facilityGrade = response.data[i].dictValue;
-        }
-      }
-      this.facilityGradeOptions = response.data;
-    });
-    this.getDicts("ratedPower").then(response => {
-      this.ratedPowerOptions = response.data;
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 370;
-    },
-    /** 鏌ヨ璁惧妗f鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listArchives(this.queryParams).then(response => {
-        this.archivesList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 璁惧绫诲瀷瀛楀吀缈昏瘧
-    facilityTypeFormat(row, column) {
-      return this.selectDictLabel(this.facilityTypeOptions, row.facilityType);
-    },
-    // 浣跨敤鍒嗗巶瀛楀吀缈昏瘧
-    branchFactoryFormat(row, column) {
-      return this.selectDictLabel(this.branchFactoryOptions, row.branchFactory);
-    },
-    // 閲嶇偣璁惧瀛楀吀缈昏瘧
-    pointFlagFactoryFormat(row, column) {
-      return this.selectDictLabel(this.pointFlagOptions, row.pointFlag);
-    },
-    // 鑳借�楃瓑绾у瓧鍏哥炕璇�
-    facilityGradeFormat(row, column) {
-      return this.selectDictLabel(this.facilityGradeOptions, row.facilityGrade);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        code: undefined,
-        facilityName: undefined,
-        facilityType: undefined,
-        branchFactory: undefined,
-        istallationLocationn: undefined,
-        facilityGrade: undefined,
-        ratedPower: undefined,
-        productionDate: undefined,
-        putrunDate: undefined,
-        manufacturer: undefined,
-        personCharge: undefined,
-        technicalData: undefined,
-        startTime: undefined,
-        checkCycle: undefined,
-        reminderCycle: undefined,
-        remark: undefined,
-        createTime: undefined,
-        createBy: undefined,
-        updateTime: undefined,
-        updateBy: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.codes = selection.map(item => item.code)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞璁惧妗f";
-      this.form.facilityGrade = this.facilityGrade;
-      this.form.facilityType = this.facilityType;
-      this.form.branchFactory = this.branchFactory
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getArchives(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼璁惧妗f";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updateArchives(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addArchives(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      const codes = row.code || this.codes;
-      this.$confirm('鏄惁纭鍒犻櫎璁惧妗f缂栫紪涓�"' + codes + '"鐨勮澶囨。妗堝悧 ?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delArchives(ids);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夎澶囨。妗堟暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportArchives(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎叆鎸夐挳鎿嶄綔 */
-    handleImport() {
-      //this.$refs.upload.clearFiles();
-      this.upload.title = "璁惧妗f瀵煎叆";
-      this.upload.accept = ".xlsx, .xls";
-      this.upload.url = process.env.VUE_APP_BASE_API + "/facility/archives/imporel-colata?updateSupport=0";
-      this.upload.open = true;
-    },
-    /** 涓嬭浇妯℃澘鎿嶄綔 */
-    importTemplate() {
-      importTemplate().then(response => {
-        this.download(response.msg);
-      });
-    },
-    // 鏂囦欢涓婁紶涓鐞�
-    handleFileUploadProgress(event, file, fileList) {
-      this.upload.isUploading = true;
-    },
-    // 鏂囦欢涓婁紶鎴愬姛澶勭悊
-    handleFileSuccess(response, file, fileList) {
-      this.upload.open = false;
-      this.upload.isUploading = false;
-      this.$refs.upload.clearFiles();
-      this.$alert(response.msg, "瀵煎叆缁撴灉", {dangerouslyUseHTMLString: true});
-      this.getList();
-    },
-    // 鎻愪氦涓婁紶鏂囦欢
-    submitFileForm() {
-      this.$refs.upload.submit();
-    },
-    /** 鎵撳紑闄勪欢琛ㄥ脊绐� */
-    openImportAnnexTable(row) {
-      let facid = row.id;
-      let faccode = row.code;
-      this.$refs.importAnnex.show(facid, faccode);
-    },
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-
-.dialog-form-row {
-  .el-row {
-    margin-bottom: 0;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/facility/querycount/importAnnexTable.vue b/energy_management_ui/src/views/facility/querycount/importAnnexTable.vue
deleted file mode 100644
index 86655ed..0000000
--- a/energy_management_ui/src/views/facility/querycount/importAnnexTable.vue
+++ /dev/null
@@ -1,205 +0,0 @@
-<template>
-  <!-- 瀵煎叆琛� -->
-  <el-dialog :title="title" :visible.sync="open"  :destroy-on-close="true" width="800px" top="5vh">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鏂囦欢鍚�" prop="fileName">
-        <el-input
-          v-model="queryParams.fileName"
-          placeholder="璇疯緭鍏ユ枃浠跺悕"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <!--<el-upload
-      ref="upload"
-      :limit="1"
-      :headers="uploadData.headers"
-      :action="uploadData.url + '?facilityId=' + queryParams.facilityId"
-      :on-preview="handlePreview"
-      :on-progress="handleFileUploadProgress"
-      :on-success="handleFileSuccess"
-      :auto-upload="false"
-    >
-      <el-button slot="trigger" size="small" type="primary">閫夊彇鏂囦欢</el-button>
-      <el-button style="margin-left: 10px;" size="small" type="success" @click="submitFileForm">涓婁紶鍒版湇鍔″櫒</el-button>
-      <div class="el-upload__tip" style="color:red" slot="tip">娉ㄦ剰鎺у埗鏂囦欢澶у皬锛屼笉瑕佽秴杩�50M</div>
-    </el-upload> -->
-
-    <el-row>
-      <el-table v-loading="loading" :data="annexList" >
-        <el-table-column label="鏂囦欢鍚�" align="center" prop="fileName"  />
-        <el-table-column label="涓婁紶鏃堕棿" align="center" prop="createTime"  />
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="seeImpFile(scope.row)"
-              v-hasPermi="['facility:annex:assignDownload']"
-            >鏌ョ湅</el-button>
-          <!--  <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['facility:annex:remove']"
-            >鍒犻櫎</el-button> -->
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        v-show="total>0"
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-    </el-row>
-    <div slot="footer" class="dialog-footer">
-      <el-button @click="handclose">鍙� 娑�</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { listAnnex,delAnnex } from "@/api/facility/annex";
-import { getToken } from "@/utils/auth";
-const baseURL = process.env.VUE_APP_BASE_API
-// 閫氱敤涓嬭浇鏂规硶
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 璁¢噺鍣ㄥ叿妗f闄勪欢琛ㄦ牸鏁版嵁
-      annexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      idOptions: [],
-      // 鍏宠仈meter_implement.id瀛楀吀
-      implementIdOptions: [],
-      // 鏂囦欢鍚嶅瓧鍏�
-      fileNameOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        facilityId:'',
-        tableName: undefined
-      },
-      uploadData: {
-        // 鏄惁鏄剧ず寮瑰嚭灞傦紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        open: false,
-        // 寮瑰嚭灞傛爣棰橈紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        title: "",
-        // 鏄惁绂佺敤涓婁紶
-        isUploading: false,
-        // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-        headers: { Authorization: "Bearer " + getToken() },
-        // 涓婁紶鐨勫湴鍧�
-        url: process.env.VUE_APP_BASE_API + "/facility/annex/fileImport"
-      },
-    };
-  },
-  methods: {
-    // 鏄剧ず寮规
-    show(facid,code) {
-      this.reset();
-      this.queryParams.facilityId = facid;
-      this.getList();
-      this.title='缂栧彿 '+code+' 闄勪欢';
-      this.open = true;
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.queryParams = {
-        pageNum: 1,
-        pageSize: 10,
-        facilityId:'',
-        tableName: undefined
-      };
-      //娓呯┖涓婁紶缁勪欢鐨勬枃浠跺垪琛�
-      this.resetForm("queryForm");
-    },
-    // 鏌ヨ琛ㄦ暟鎹�
-    getList() {
-      listAnnex(this.queryParams).then(response => {
-        this.annexList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-       this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 鏌ョ湅鎸夐挳鎿嶄綔 */
-    seeImpFile(row) {
-      this.fileDownload(row.fileName,row.filePath,false);
-    },
-    handclose()
-    {
-      this.open=false;
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      this.$confirm('鏄惁纭鍒犻櫎闄勪欢鍚嶇О涓�"' + row.fileName + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function() {
-        return delAnnex(row.id);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function() {});
-    },
-    // 闄勪欢涓婁紶涓鐞�
-    handleFileUploadProgress(event, file, fileList) {
-      this.uploadData.isUploading = true;
-    },
-    // 闄勪欢涓婁紶鎴愬姛澶勭悊
-    handleFileSuccess(response, file, fileList) {
-      this.uploadData.open = false;
-      this.uploadData.isUploading = false;
-      this.$refs.upload.clearFiles();
-      this.$alert(response.msg, "闄勪欢缁撴灉", { dangerouslyUseHTMLString: true });
-      this.getList();
-    },
-    // 闄勪欢涓婁紶鏂囦欢
-    submitFileForm() {
-      this.$refs.upload.submit();
-    },
-    handlePreview(file) {
-      console.log(file);
-    },
-  }
-};
-
-</script>
diff --git a/energy_management_ui/src/views/facility/querycount/index.vue b/energy_management_ui/src/views/facility/querycount/index.vue
deleted file mode 100644
index 8d2a61b..0000000
--- a/energy_management_ui/src/views/facility/querycount/index.vue
+++ /dev/null
@@ -1,668 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form class="special-form" :model="queryParams" ref="queryForm" label-width="72px">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="缂栫爜" prop="code">
-              <el-input
-                  v-model="queryParams.code"
-                  placeholder="璇疯緭鍏ョ紪鐮�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="璁惧鍚嶇О" prop="facilityName">
-              <el-input
-                  v-model="queryParams.facilityName"
-                  placeholder="璇疯緭鍏ヨ澶囧悕绉�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="璁惧绫诲瀷" prop="facilityType">
-              <el-select v-model="queryParams.facilityType" placeholder="璇烽�夋嫨璁惧绫诲瀷" clearable size="small" style="width: 100%">
-                <el-option
-                    v-for="dict in facilityTypeOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-<!--          <el-col :span="6">-->
-<!--            <el-form-item label="浣跨敤鍒嗗巶" prop="branchFactory">-->
-<!--              <el-select v-model="queryParams.branchFactory" placeholder="璇烽�夋嫨浣跨敤鍒嗗巶" clearable size="small" style="width: 100%">-->
-<!--                <el-option-->
-<!--                    v-for="dict in branchFactoryOptions"-->
-<!--                    :key="dict.dictValue"-->
-<!--                    :label="dict.dictLabel"-->
-<!--                    :value="dict.dictValue"-->
-<!--                />-->
-<!--              </el-select>-->
-<!--            </el-form-item>-->
-<!--          </el-col>-->
-<!--          <el-col :span="6">-->
-<!--            <el-form-item label="鐗╃悊浣嶇疆" prop="istallationLocationn">-->
-<!--              <el-input-->
-<!--                  v-model="queryParams.istallationLocationn"-->
-<!--                  placeholder="璇疯緭鍏ョ墿鐞嗕綅缃�"-->
-<!--                  clearable-->
-<!--                  size="small"-->
-<!--                  @keyup.enter.native="handleQuery"-->
-<!--              />-->
-<!--            </el-form-item>-->
-<!--          </el-col>-->
-<!--          <el-col :span="6">-->
-<!--            <el-form-item label="鑳借�楃瓑绾�" prop="facilityGrade">-->
-<!--              <el-select v-model="queryParams.facilityGrade" placeholder="璇烽�夋嫨鑳借�楃瓑绾�" clearable size="small" style="width: 100%">-->
-<!--                <el-option-->
-<!--                    v-for="dict in facilityGradeOptions"-->
-<!--                    :key="dict.dictValue"-->
-<!--                    :label="dict.dictLabel"-->
-<!--                    :value="dict.dictValue"-->
-<!--                />-->
-<!--              </el-select>-->
-<!--            </el-form-item>-->
-<!--          </el-col>-->
-<!--          <el-col :span="6">-->
-<!--            <el-form-item label="鐢熶骇鍘傚" prop="manufacturer">-->
-<!--              <el-input-->
-<!--                  v-model="queryParams.manufacturer"-->
-<!--                  placeholder="璇疯緭鍏ョ敓浜у巶瀹�"-->
-<!--                  clearable-->
-<!--                  size="small"-->
-<!--                  @keyup.enter.native="handleQuery"-->
-<!--              />-->
-<!--            </el-form-item>-->
-<!--          </el-col>-->
-          <el-col :span="6">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-              type="danger"
-              icon="el-icon-refresh"
-              size="mini"
-              :disabled="multiple"
-              @click="handleReset"
-              v-hasPermi="['facility:archives:reset']"
-          >妫�瀹氭仮澶�
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="warning"
-              icon="el-icon-download"
-              size="mini"
-              @click="handleExport"
-              v-hasPermi="['facility:archives:export']"
-          >瀵煎嚭
-          </el-button>
-        </el-col>
-      </el-row>
-      <el-table v-loading="loading" :data="archivesList" :row-class-name="tableRowClassName" :height="height"
-                @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="60" align="center"/>
-        <!-- <el-table-column label="搴忓彿" align="center" prop="id"  />-->
-        <el-table-column label="缂栫爜" align="center" prop="code" show-overflow-tooltip/>
-        <el-table-column label="璁惧鍚嶇О" align="center" prop="facilityName" show-overflow-tooltip/>
-        <el-table-column label="璁惧绫诲瀷" align="center" prop="facilityType" :formatter="facilityTypeFormat" show-overflow-tooltip/>
-        <el-table-column label="浣跨敤鍒嗗巶" align="center" prop="branchFactory" :formatter="branchFactoryFormat" show-overflow-tooltip/>
-        <el-table-column label="閲嶇偣璁惧" align="center" prop="pointFlag" :formatter="pointFlagFactoryFormat" show-overflow-tooltip/>
-        <el-table-column label="鐢熶骇鍘傚" align="center" prop="manufacturer" show-overflow-tooltip/>
-        <el-table-column label="鐗╃悊浣嶇疆" align="center" prop="istallationLocationn" show-overflow-tooltip/>
-        <el-table-column label="鑳借�楃瓑绾�" align="center" prop="facilityGrade" :formatter="facilityGradeFormat" show-overflow-tooltip/>
-        <el-table-column label="璐d换浜�" align="center" prop="personCharge" show-overflow-tooltip/>
-        <el-table-column label="鎶曡繍鏃ユ湡" align="center" prop="putrunDate" width="180" show-overflow-tooltip>
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.putrunDate) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="棰濆畾鍔熺巼" align="center" prop="ratedPower" show-overflow-tooltip/>
-        <el-table-column label="鎿嶄綔" align="center" width="195px" :row-class-name="tableRowClassName"
-                         class-name="small-padding fixed-width"  fixed="right">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-view"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['facility:archives:edit']"
-            >鏌ョ湅
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="openImportAnnexTable(scope.row)"
-                v-hasPermi="['tool:gen:import']"
-            >闄勪欢
-            </el-button>
-            <el-button v-if="scope.row.txflage"
-                       size="mini"
-                       type="text"
-                       icon="el-icon-refresh"
-                       @click="handleReset(scope.row)"
-                       v-hasPermi="['facility:archives:reset']"
-            >妫�瀹氭仮澶�
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-          v-show="total>0"
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-    </basic-container>
-    <!-- 娣诲姞鎴栦慨鏀硅澶囨。妗堝璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="800px">
-      <el-form ref="form" :model="form" :rules="rules" disabled="disabled" label-width="80px"
-               style="padding: 5px 5px 5px 5px">
-        <table>
-          <tr>
-            <td width="200px">
-              <el-form-item label="缂栫爜" prop="code" style="margin-bottom: 10px;">
-                <el-input v-model="form.code"/>
-              </el-form-item>
-            </td>
-            <td width="200px">
-              <el-form-item label="璁惧鍚嶇О" prop="facilityName" style="margin-bottom: 10px">
-                <el-input v-model="form.facilityName"/>
-              </el-form-item>
-            </td>
-            <td width="200px">
-              <el-form-item label="璁惧绫诲瀷" style="margin-bottom: 10px">
-                <el-select v-model="form.facilityType">
-                  <el-option
-                      v-for="dict in facilityTypeOptions"
-                      :key="dict.dictValue"
-                      :label="dict.dictLabel"
-                      :value="dict.dictValue"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <el-form-item label="浣跨敤鍒嗗巶" style="margin-bottom: 10px">
-                <el-select v-model="form.branchFactory">
-                  <el-option
-                      v-for="dict in branchFactoryOptions"
-                      :key="dict.dictValue"
-                      :label="dict.dictLabel"
-                      :value="dict.dictValue"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-            </td>
-            <td>
-              <el-form-item label="鑳借�楃瓑绾�" style="margin-bottom: 10px">
-                <el-select v-model="form.facilityGrade">
-                  <el-option
-                      v-for="dict in facilityGradeOptions"
-                      :key="dict.dictValue"
-                      :label="dict.dictLabel"
-                      :value="dict.dictValue"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-            </td>
-            <td>
-              <el-form-item label="棰濆畾鍔熺巼" prop="ratedPower" style="margin-bottom: 10px">
-                <el-input v-model="form.ratedPower"/>
-              </el-form-item>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <el-form-item label="鐢熶骇鏃ユ湡" prop="productionDate" style="margin-bottom: 10px">
-                <el-date-picker clearable size="small" style="width: 200px"
-                                v-model="form.productionDate"
-                                type="date"
-                                value-format="yyyy-MM-dd">
-                </el-date-picker>
-              </el-form-item>
-            </td>
-            <td>
-              <el-form-item label="鎶曡繍鏃ユ湡" prop="putrunDate" style="margin-bottom: 10px">
-                <el-date-picker clearable size="small" style="width: 200px"
-                                v-model="form.putrunDate"
-                                type="date"
-                                value-format="yyyy-MM-dd">
-                </el-date-picker>
-              </el-form-item>
-            </td>
-            <td>
-            </td>
-          </tr>
-          <tr>
-            <td colspan="2">
-              <el-form-item label="鐢熶骇鍘傚" prop="manufacturer" style="margin-bottom: 10px">
-                <el-input v-model="form.manufacturer"/>
-              </el-form-item>
-            </td>
-            <td>
-              <el-form-item label="璐熻矗浜�" prop="personCharge" style="margin-bottom: 10px">
-                <el-input v-model="form.personCharge"/>
-              </el-form-item>
-            </td>
-          </tr>
-          <tr>
-            <td colspan="3">
-              <el-form-item label="鐗╃悊浣嶇疆" prop="istallationLocationn" style="margin-bottom: 10px">
-                <el-input v-model="form.istallationLocationn"/>
-              </el-form-item>
-            </td>
-          </tr>
-          <tr>
-            <td colspan="3">
-              <el-form-item label="鎶�鏈弬鏁�" prop="technicalData" style="margin-bottom: 10px;">
-                <el-input v-model="form.technicalData"/>
-              </el-form-item>
-            </td>
-          </tr>
-          <tr>
-            <td colspan="3">
-              <el-form-item label="澶囨敞" prop="remark" style="margin-bottom: 10px">
-                <el-input v-model="form.remark"/>
-              </el-form-item>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <el-form-item label="璧峰鏃堕棿" prop="startTime" style="margin-bottom: 10px;">
-                <el-date-picker clearable size="small" style="width: 150px"
-                                v-model="form.startTime"
-                                type="date"
-                                value-format="yyyy-MM-dd">
-                </el-date-picker>
-              </el-form-item>
-            </td>
-            <td>
-              <el-form-item label="妫�瀹氬懆鏈�" prop="checkCycle" style="margin-bottom: 10px;">
-                <el-input v-model="form.checkCycle" style="width: 150px"/>
-              </el-form-item>
-            </td>
-            <td>
-              <el-form-item label="鎻愰啋鍛ㄦ湡" prop="reminderCycle" style="margin-bottom: 10px;">
-                <el-input v-model="form.reminderCycle"/>
-              </el-form-item>
-            </td>
-          </tr>
-        </table>
-      </el-form>
-      <div slot="footer" class="dialog-footer" style="padding-top: 5px">
-        <!-- <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>-->
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-    <importAnnexTable ref="importAnnex"/>
-  </div>
-</template>
-<style scoped lang="scss">
-.el-table .warning-rown {
-  color: #ff0000;
-}
-
-.el-table .warning-row {
-  background: #ffb8a9;
-}
-</style>
-<script>
-import {
-  listArchives,
-  getArchives,
-  delArchives,
-  addArchives,
-  updateArchives,
-  exportArchives,
-  resetArchives
-} from "@/api/facility/archives";
-import {getToken} from "@/utils/auth";
-import importAnnexTable from "./importAnnexTable";
-import mixins from "@/layout/mixin/getHeight";
-
-const facilityType = "0";
-const branchFactory = "0";
-const facilityGrade = "0";
-export default {
-  name: "importAnnex",
-  components: {importAnnexTable},
-  mixins: [mixins],
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 璁惧妗f琛ㄦ牸鏁版嵁
-      archivesList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭id瀛楀吀
-      idOptions: [],
-      // 缂栫爜瀛楀吀
-      codeOptions: [],
-      height: null,
-      // 璁惧鍚嶇О瀛楀吀
-      facilityNameOptions: [],
-      // 璁惧绫诲瀷瀛楀吀
-      facilityTypeOptions: [],
-      // 閲嶇偣璁惧瀛楀吀
-      pointFlagOptions: [],
-      // 浣跨敤鍒嗗巶瀛楀吀
-      branchFactoryOptions: [],
-      // 鐗╃悊浣嶇疆瀛楀吀
-      istallationLocationnOptions: [],
-      // 鑳借�楃瓑绾у瓧鍏�
-      facilityGradeOptions: [],
-      // 棰濆畾鍔熺巼瀛楀吀
-      ratedPowerOptions: [],
-      // 鐢熶骇鏃ユ湡瀛楀吀
-      productionDateOptions: [],
-      // 鎶曡繍鏃ユ湡瀛楀吀
-      putrunDateOptions: [],
-      // 鐢熶骇鍘傚瀛楀吀
-      manufacturerOptions: [],
-      // 璐熻矗浜哄瓧鍏�
-      personChargeOptions: [],
-      // 鎶�鏈弬鏁板瓧鍏�
-      technicalDataOptions: [],
-      // 璧峰鏃堕棿瀛楀吀
-      startTimeOptions: [],
-      // 妫�瀹氬懆鏈熷瓧鍏�
-      checkCycleOptions: [],
-      // 鎻愰啋鍛ㄦ湡瀛楀吀
-      reminderCycleOptions: [],
-      // 澶囨敞瀛楀吀
-      remarkOptions: [],
-      // 寤虹珛鏃堕棿瀛楀吀
-      createTimeOptions: [],
-      // 鐩戠悊浜哄瓧鍏�
-      createByOptions: [],
-      // 淇敼鏃堕棿瀛楀吀
-      updateTimeOptions: [],
-      // 淇敼浜哄瓧鍏�
-      updateByOptions: [],
-      //鏍¢獙鏁扮粍
-      flagArray: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        code: undefined,
-        facilityName: undefined,
-        facilityType: undefined,
-        pointFlag: undefined,
-        branchFactory: undefined,
-        istallationLocationn: undefined,
-        facilityGrade: undefined,
-        manufacturer: undefined,
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        code: [
-          {required: true, message: "缂栫爜涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-      }
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("facility_type").then(response => {
-      for (let i = 0; i < response.data.length; i++) {
-        if (response.data[i].isDefault == "Y") {
-          this.facilityType = response.data[i].dictValue;
-        }
-      }
-      this.facilityTypeOptions = response.data;
-    });
-    this.getDicts("pointFlag").then(response => {
-      for (let i = 0; i < response.data.length; i++) {
-        if (response.data[i].isDefault == "Y") {
-          this.pointFlag = response.data[i].dictValue;
-        }
-      }
-      this.pointFlagOptions = response.data;
-    });
-    this.getDicts("branch_factory").then(response => {
-      for (let i = 0; i < response.data.length; i++) {
-        if (response.data[i].isDefault == "Y") {
-          this.branchFactory = response.data[i].dictValue;
-        }
-      }
-      this.branchFactoryOptions = response.data;
-    });
-    this.getDicts("facility_grade").then(response => {
-      for (let i = 0; i < response.data.length; i++) {
-        if (response.data[i].isDefault == "Y") {
-          this.facilityGrade = response.data[i].dictValue;
-        }
-      }
-      this.facilityGradeOptions = response.data;
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 370;
-    },
-    tableRowClassName({row, rowIndex}) {
-      if (row.txflage) {
-        console.log(JSON.stringify(row.txflage));
-        return 'warning-row'
-      }
-      return '';
-    },
-    /** 鏌ヨ璁惧妗f鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listArchives(this.queryParams).then(response => {
-        this.archivesList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 璁惧绫诲瀷瀛楀吀缈昏瘧
-    facilityTypeFormat(row, column) {
-      return this.selectDictLabel(this.facilityTypeOptions, row.facilityType);
-    },
-    // 浣跨敤鍒嗗巶瀛楀吀缈昏瘧
-    branchFactoryFormat(row, column) {
-      return this.selectDictLabel(this.branchFactoryOptions, row.branchFactory);
-    },
-    // 閲嶇偣璁惧瀛楀吀缈昏瘧
-    pointFlagFactoryFormat(row, column) {
-      return this.selectDictLabel(this.pointFlagOptions, row.pointFlag);
-    },
-    // 鑳借�楃瓑绾у瓧鍏哥炕璇�
-    facilityGradeFormat(row, column) {
-      return this.selectDictLabel(this.facilityGradeOptions, row.facilityGrade);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        code: undefined,
-        facilityName: undefined,
-        facilityType: undefined,
-        branchFactory: undefined,
-        istallationLocationn: undefined,
-        facilityGrade: undefined,
-        ratedPower: undefined,
-        productionDate: undefined,
-        putrunDate: undefined,
-        manufacturer: undefined,
-        personCharge: undefined,
-        technicalData: undefined,
-        startTime: undefined,
-        checkCycle: undefined,
-        reminderCycle: undefined,
-        remark: undefined,
-        createTime: undefined,
-        createBy: undefined,
-        updateTime: undefined,
-        updateBy: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-      //鏂�
-      this.flagArray = selection.map(item => item.txflage)
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞璁惧妗f";
-      this.form.facilityGrade = this.facilityGrade;
-      this.form.facilityType = this.facilityType;
-      this.form.branchFactory = this.branchFactory
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids;
-      getArchives(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼璁惧妗f";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updateArchives(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addArchives(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 妫�瀹氭仮澶嶆寜閽搷浣� */
-    handleReset(row) {
-      const ids = row.id || this.ids;
-      if (this.flagArray.indexOf(false) > -1) {
-        this.$confirm('闈炴彁閱掔殑璁惧涓嶈兘鎭㈠!', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        });
-        return;
-      }
-      this.$confirm('鏄惁杩涜妫�瀹氭棩鏈熸仮澶�?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return resetArchives(ids);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("妫�瀹氭棩鏈熸仮澶嶆垚鍔�");
-      }).catch(function () {
-      });
-
-    },
-    /** 鎵撳紑闄勪欢琛ㄥ脊绐� */
-    openImportAnnexTable(row) {
-      let facid = row.id;
-      let faccode = row.code;
-      this.$refs.importAnnex.show(facid, faccode);
-    },
-    /** 闄勪欢鎼滅储鎸夐挳鎿嶄綔 */
-    handleFjQuery() {
-      // this.queryParams.pageNum = 1;
-      // this.getList();
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夎澶囨。妗堟暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportArchives(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form{
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/history/query/historyIndex.vue b/energy_management_ui/src/views/history/query/historyIndex.vue
deleted file mode 100644
index e0226ee..0000000
--- a/energy_management_ui/src/views/history/query/historyIndex.vue
+++ /dev/null
@@ -1,361 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-card class="box-card">
-      <div slot="header" class="clearfix">
-        <span>{{ currentNode ? currentNode.label : "" }}--鑺傜偣璁剧疆</span>
-      </div>
-      <el-form
-        :model="queryParams"
-        ref="queryForm"
-        :inline="true"
-        label-width="68px"
-        class="query-form"
-      >
-        <el-form-item label="璧锋鏃堕棿">
-          <el-date-picker
-            v-model="dateRange"
-            type="datetimerange"
-            value-format="yyyy-MM-dd HH:mm:ss"
-            range-separator="鑷�"
-            start-placeholder="寮�濮嬫棩鏈�"
-            end-placeholder="缁撴潫鏃ユ湡"
-          >
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item>
-          <el-button
-            type="primary"
-            icon="el-icon-search"
-            size="mini"
-            @click="handleQuery"
-            >鏌ヨ</el-button
-          >
-          <!--<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>-->
-        </el-form-item>
-      </el-form>
-      <el-row :gutter="10" class="mb8">
-        <el-col :span="1.5">
-          <el-button
-            type="warning"
-            icon="el-icon-download"
-            size="mini"
-            @click="handleExport"
-            v-hasPermi="['energyAlarm:historicalAlarm:export']"
-            >瀵煎嚭
-          </el-button>
-        </el-col>
-      </el-row>
-      <el-form>
-        <el-table
-          :data="JkHistoryAlarmList"
-          v-loading="loading"
-          border
-          @selection-change=""
-          @cell-click="openDialog"
-        >
-          <el-table-column label="搴忓彿" type="index" align="center" />
-          <el-table-column label="鍗曚綅鍚嶇О" align="center" prop="modelName" />
-          <el-table-column label="鎸囨爣缂栫爜" align="center" prop="code" />
-          <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="indexName">
-            <template slot-scope="scope">
-              <div style="color:blue;text-decoration:underline ;cursor:pointer">
-                {{ scope.row.indexName }}
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column
-            label="鎸囨爣鍗曚綅"
-            align="center"
-            prop="unitId"
-            :formatter="unitIdFormat"
-          />
-          <!--  <el-table-column label="鎶ヨ绾у埆" align="center" prop="alarmLevel" :formatter="alarmLevelFormat"/>
-          <el-table-column label="闄愬�肩被鍨�" align="center" prop="limitType"  :formatter="limitTypeFormat"/>
-          <el-table-column label="闄愬��"     align="center" prop="limitingValue"/>
-          <el-table-column label="鏃堕棿璧�" align="center" prop="alarmBeginTime"/>
-          <el-table-column label="鏃堕棿姝�" align="center" prop="alarmEndTime"/>
-          <el-table-column label="棰勮鍊�"   align="center" prop="alarmValue" />-->
-          <!--<el-table-column label="鎸佺画鏃堕暱(鍒嗛挓)" align="center" prop="duration" width="96px" />-->
-        </el-table>
-      </el-form>
-      <pagination
-        v-show="total > 0"
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-      <!--寮规-->
-      <el-dialog
-        :title="title"
-        :visible.sync="open"
-        width="1500px"
-        :close-on-click-modal="false"
-      >
-        <el-row style="margin-bottom:32px;">
-          <el-tabs v-model="activeName" @tab-click="handleClick">
-            <el-tab-pane label="鍘嗗彶鏁版嵁鏇茬嚎鍥�" name="second">
-              <history-alarm-view
-                ref="historyAlarmView"
-                :code="code"
-                :activeName="activeName"
-                :limitVal="limitVal"
-              ></history-alarm-view>
-            </el-tab-pane>
-            <el-tab-pane label="鍘嗗彶鏁版嵁鏌ヨ" name="third">
-              <history-alarm-table
-                ref="historyAlarmTable"
-                :code="code"
-                :indexName="indexName"
-                :activeName="activeName"
-                :indexUnit="indexUnit"
-                :limitVal="limitVal"
-              ></history-alarm-table>
-            </el-tab-pane>
-          </el-tabs>
-        </el-row>
-        <div slot="footer" class="dialog-footer">
-          <el-button @click="cancel">鍙� 娑�</el-button>
-        </div>
-      </el-dialog>
-    </el-card>
-  </div>
-</template>
-
-<script>
-import {
-  listHistoryAlarm,
-  exportHistoricalAlarm,
-  getHistoricalAlarm
-} from "@/api/basicsetting/historyAlarm";
-import { listLimitType } from "@/api/basicsetting/limitType";
-import historyAlarmView from "../../energyAlarm/realTimeAlarm/historyAlarmView";
-import historyAlarmTable from "../../energyAlarm/realTimeAlarm/historyAlarmTable";
-
-export default {
-  components: { historyAlarmView, historyAlarmTable },
-  name: "historyAlarm",
-
-  data() {
-    return {
-      num: 20,
-      num1: 5,
-      pickerOptions: {
-        /*  value1: [new Date(2000, 10, 10, 10, 10), new Date(2000, 10, 11, 10, 10)],*/
-      },
-      code: undefined,
-      value: "",
-      options: undefined,
-      // handleClick:'simple',
-      radio: "B",
-      activeName: "second",
-      indexId: undefined,
-      indexName: undefined,
-      indexUnit: undefined,
-      currentNode: "",
-      limitVal: undefined,
-      hiddenTableHeader: false,
-      /* lineChartData: lineChartData.newVisitis,*/
-      limitTypeOptions: [],
-      alarmLevelOptions: [],
-      resposeList: [],
-      /* formatDate:undefined,*/
-      // 閬僵灞�
-      loading: false,
-      // 閫変腑鏁扮粍
-      ids: [],
-      dateRange: [],
-      names: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 10,
-      // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-      List: [],
-      energyindexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      JkHistoryAlarmList: [],
-      title: "鍘嗗彶鏁版嵁鏌ヨ",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      indexIdOptions: [],
-      // 鎸囨爣鍚嶇О瀛楀吀
-      nameOptions: [],
-      // 鎸囨爣缂栫爜瀛楀吀
-      codeOptions: [],
-      // 鍗曚綅瀛楀吀
-      unitIdOptions: [],
-      // 鏌ヨ鍙傛暟
-      lineChartData: {
-        newVisitis: null
-      },
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        eierarchyFlag: "B",
-        indexType: "COLLECT",
-        code: undefined,
-        indexName: undefined,
-        /* unitId: undefined,*/
-        limitType: undefined,
-        alarmLevel: undefined,
-        /*alarmValue:undefined,*/
-        /* limitingValue:undefined,*/
-        nodeId: undefined,
-        beginTime: undefined,
-        endTime: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      currentNode: undefined,
-      indexCategoryDefaultVal: undefined,
-      unitDefaultVal: undefined
-    };
-  },
-  created() {
-    this.getDicts("alarm_level").then(response => {
-      this.alarmLevelOptions = response.data;
-    });
-    this.getDicts("sys_unit").then(response => {
-      this.unitIdOptions = response.data;
-    });
-    listLimitType(this.queryParams).then(response => {
-      this.limitTypeOptions = response.rows;
-    });
-  },
-  methods: {
-    getList() {
-      this.loading = true;
-      listHistoryAlarm(
-        this.addDateRange(this.queryParams, this.dateRange)
-      ).then(response => {
-        this.JkHistoryAlarmList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    /** 鏌ョ湅鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const indexId = row.indexId || this.ids;
-      this.open = true;
-      /*this.title = "鍘嗗彶鏁版嵁鏌ヨ";*/
-    },
-    // 鍗曚綅瀛楀吀缈昏瘧
-    unitIdFormat(row, column) {
-      return this.selectDictLabel(this.unitIdOptions, row.unitId);
-    },
-    /*      // 闄愬�肩被鍨嬪瓧鍏哥炕璇�
-      limitTypeFormat(row, column) {
-        return this.selectDictLabel(this.limitTypeOptions, row.limitType);
-      },*/
-    // 鎶ヨ绾у埆瀛楀吀缈昏瘧
-    alarmLevelFormat(row, column) {
-      return this.selectDictLabel(this.alarmLevelOptions, row.alarmLevel);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        indexId: undefined,
-        name: undefined,
-        code: undefined,
-        indexCategory: undefined,
-        remark: undefined,
-        unitId: undefined
-      };
-      this.resetForm("form");
-    },
-    modelNodeChange(modelNode) {
-      this.queryParams.nodeId = modelNode.id;
-      this.settingDeviceList = [];
-      this.settingIndexList = [];
-      this.disabledSetting =
-        modelNode === undefined || modelNode === "" || modelNode === null;
-      if (modelNode) {
-        this.currentNode = modelNode;
-        this.deviceLoading = true;
-        this.energyLoading = true;
-        this.productLoading = true;
-        this.indexLoading = true;
-      }
-      this.getList();
-    },
-    formatDate: function(value) {
-      let date = new Date(value);
-      let y = date.getFullYear();
-      let MM = date.getMonth() + 1;
-      MM = MM < 10 ? "0" + MM : MM;
-      let d = date.getDate();
-      d = d < 10 ? "0" + d : d;
-      let h = date.getHours();
-      h = h < 10 ? "0" + h : h;
-      let m = date.getMinutes();
-      m = m < 10 ? "0" + m : m;
-      let s = date.getSeconds();
-      s = s < 10 ? "0" + s : s;
-      return y + "-" + MM + "-" + d + " " + h + ":" + m + ":" + s;
-    },
-
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.dateRange = [];
-      this.resetForm("queryForm");
-    },
-
-    handleSelectionChange() {},
-    openDialog(row, column, event, cell) {
-      if ("indexName" == column.property) {
-        this.open = true;
-        this.code = row.code;
-        this.indexName = row.indexName;
-        this.indexId = row.indexId;
-        this.activeName = "second";
-        this.indexUnit = this.selectDictLabel(this.unitIdOptions, row.unitId);
-        this.limitVal = row.limitingValue;
-      }
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夋姤璀︽暟鎹」?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportHistoricalAlarm(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-    //闄愬埗绫诲瀷缈昏瘧
-    limitTypeFormat(row, column) {
-      var actions = [];
-      Object.keys(this.limitTypeOptions).map(key => {
-        if (this.limitTypeOptions[key].limitCode == "" + row.limitType) {
-          actions.push(this.limitTypeOptions[key].limitName);
-        }
-      });
-      return actions.join("");
-    },
-    handleClick(tab, event) {
-      this.activeName = tab.name;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/history/query/index.vue b/energy_management_ui/src/views/history/query/index.vue
deleted file mode 100644
index 567f460..0000000
--- a/energy_management_ui/src/views/history/query/index.vue
+++ /dev/null
@@ -1,77 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content">
-       <!-- <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            <el-select v-model="modelData" placeholder="璇烽�夋嫨妯″瀷"
-                       style="width:220px"
-                       size="small"
-                       @change="changeModel">
-              <el-option
-                v-for="model in modelInfoOptions"
-                :key="model.modelCode"
-                :label="model.modelName"
-                :value="model.modelCode"
-              />
-            </el-select>
-            &lt;!&ndash; <el-button icon="el-icon-setting" circle title="绠$悊妯″瀷" style="float:right;padding:8px"
-                        @click="manageModel"></el-button>&ndash;&gt;
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false"></ModelNode>
-        </el-card>-->
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            鍘嗗彶鏁版嵁
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false" modelCode="alarm"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <el-main style="padding:0">
-          <HistoryIndex ref="HistoryIndex"></HistoryIndex>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import HistoryIndex from "./historyIndex";
-  import ModelNode from "../../basicsetting/modelNode/modelNode";
-  import {listModel} from "@/api/basicsetting/model";
-
-
-
-  export default {
-    components: {HistoryIndex, ModelNode},
-    created() {
-      /*listModel({isShow: 1}).then(response => {
-        this.modelInfoOptions = response.data;
-        if (this.modelInfoOptions.length > 0) {
-          this.modelData = this.modelInfoOptions[0].modelCode;
-          this.$refs.modelNode.getList(this.modelData);
-        }
-      });*/
-      this.modelCode=this.$route.query.modelCode;
-    },
-
-    data() {
-      return {
-        modelData: '',
-        modelInfoOptions: []
-      }
-    },
-    methods: {
-      changeNode: function (node) {
-        this.$refs.HistoryIndex.modelNodeChange(node);
-      },
-      manageModel: function () {
-        this.$router.push('/model');
-      },
-      changeModel: function (item) {
-        /*this.$refs.modelNode.getList(item);*/
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/index.vue b/energy_management_ui/src/views/index.vue
deleted file mode 100644
index dbda76e..0000000
--- a/energy_management_ui/src/views/index.vue
+++ /dev/null
@@ -1,25 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0;margin: 10px;">
-    <div
-      class="dashboard-editor-container"
-      style="width: 100%;height: 100%;display: block;margin: 0 auto;"
-    >
-      <div class="title">娆㈣繋浣跨敤浜戣矾缁煎悎鑳芥簮绠$悊骞冲彴</div>
-      <!-- <img src="@/assets/image/index3.png" style="width: 55%;" /> -->
-      <img src="@/assets/image/image.png" style="height: 80vh;" />
-    </div>
-  </div>
-</template>
-
-<style lang="scss" scoped>
-// http://yunlu.com.cn/template/pc/skin/images/index/u21.png
-.dashboard-editor-container {
-  text-align: center;
-  .title {
-    color: #999;
-    font-size: 30px;
-    font-weight: 600;
-    margin: 40px auto 50px;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/indexInfo.vue b/energy_management_ui/src/views/indexInfo.vue
deleted file mode 100644
index 4fabfbd..0000000
--- a/energy_management_ui/src/views/indexInfo.vue
+++ /dev/null
@@ -1,26 +0,0 @@
-<template>
-  <div class="app-container":style="'height:'+ height">
-    <iframe :src="srcUrl" frameborder="no" style="width: 100%;height: 100%" scrolling="auto" />
-  </div>
-</template>
-
-<script>
-    export default {
-      data() {
-        return {
-          srcUrl:"",
-          height: document.documentElement.clientHeight - 94.5 + "px;",
-          loading: false
-        }
-      },
-      created() {
-        this.srcUrl=this.$route.query.modelCode;
-      },
-      mounted: function() {
-        const that = this;
-        window.onresize = function temp() {
-          that.height = document.documentElement.clientHeight - 94.5 + "px;";
-        };
-      },
-    }
-</script>
diff --git a/energy_management_ui/src/views/index_bak.vue b/energy_management_ui/src/views/index_bak.vue
deleted file mode 100644
index d8d3914..0000000
--- a/energy_management_ui/src/views/index_bak.vue
+++ /dev/null
@@ -1,767 +0,0 @@
-<template>
-  <div class="home-show">
-    <!-- <el-card :bordered="false">
-      <div class="home-head">
-        <div class="home-select-label">鏃ユ湡鍒囨崲</div>
-        <div>
-          <el-button
-            :type="dateType === 'DAY' ? 'primary' : ''"
-            @click="dateClickHandle('DAY')"
-            >鏃�</el-button
-          >
-          <el-button
-            :type="dateType === 'MONTH' ? 'primary' : ''"
-            @click="dateClickHandle('MONTH')"
-            class="select-month"
-            >鏈�
-          </el-button>
-          <el-button
-            :type="dateType === 'YEAR' ? 'primary' : ''"
-            @click="dateClickHandle('YEAR')"
-            >骞�</el-button
-          >
-        </div>
-      </div>
-    </el-card> -->
-    <el-card
-      class="body-left-title"
-      :bordered="false"
-      style="margin-bottom: 12px;"
-    >
-      <div slot="header" class="clearfix">
-        <span>褰撴棩鍙屾帶鏁版嵁鎸囨爣鎬昏</span>
-      </div>
-      <el-row class="double-data-show-content">
-        <el-col :span="5" class="total">
-          <img alt="" src="~@/assets/home/zonghe.svg" />
-          <div class="left-title-style">
-            <div>
-              <div>鍏ㄥ巶缁煎悎鑳借��</div>
-              <div class="unit">{{ summation }} tce</div>
-            </div>
-          </div>
-        </el-col>
-        <el-col
-          :span="5"
-          class="co2"
-          v-for="(item, index) in energyStatistic"
-          :key="index"
-          style="border-left: 1px solid #999;"
-        >
-          <img
-            v-if="item.item.includes('鐢�')"
-            src="~@/assets/home/haodian.svg"
-            alt=""
-          />
-          <img
-            v-if="item.item.includes('姘�')"
-            src="~@/assets/home/haoshui.svg"
-            alt=""
-          />
-          <img
-            v-if="item.item.includes('姘�')"
-            src="~@/assets/home/haoqi.svg"
-            alt=""
-          />
-          <img
-            v-if="item.item.includes('钂告苯')"
-            src="~@/assets/home/haozhengqi.svg"
-            alt=""
-          />
-          <div class="left-title-style">
-            <div>
-              <div>
-                鑰梴{
-                  item.item.indexOf("澶╃劧") !== -1
-                    ? item.item.replace("澶╃劧", "")
-                    : item.item
-                }}閲�
-                {{ item.unit ? `锛�${item.unit}锛塦 : "" }}
-              </div>
-              <div class="unit">
-                {{ item.count || 0 }}
-              </div>
-            </div>
-          </div>
-        </el-col>
-        <el-col :span="5" class="total" style="border-left: 1px solid #999;">
-          <img alt="" src="~@/assets/home/wen.png" />
-          <div class="left-title-style">
-            <div>
-              <div>瀹ゅ娓╁害</div>
-              <div class="unit">{{ temperature }}</div>
-            </div>
-          </div>
-        </el-col>
-        <el-col :span="5" class="total" style="border-left: 1px solid #999;">
-          <img alt="" src="~@/assets/home/shi.png" />
-          <div class="left-title-style">
-            <div>
-              <div>瀹ゅ婀垮害</div>
-              <div class="unit">{{ humidity }}</div>
-            </div>
-          </div>
-        </el-col>
-      </el-row>
-    </el-card>
-    <el-row type="flex" class="data-indicator-overview">
-      <el-col class="home-body-left">
-        <el-card :bordered="false" class="body-left-title">
-          <div slot="header" class="clearfix">
-            <span>鑳芥簮瀹炴椂鐩戞祴</span>
-          </div>
-          <div class="chart-wrapper">
-            <span class="chart-left-unit">{{
-              `鐢�/鍗曚綅${monitoringUnit}`
-            }}</span>
-            <BarChart class="line-content" :chartData="chartDataObj" />
-          </div>
-          <div class="chart-wrapper" style="border-top: 1px solid #999">
-            <span class="chart-left-unit">{{
-              `姘�/鍗曚綅${monitoringWaterUnit}`
-            }}</span>
-            <BarChart class="line-content" :chartData="chartDataWaterObj" />
-          </div>
-        </el-card>
-        <!-- <div class="left-line-style">
-          <div>鑳芥簮瀹炴椂鐩戞祴</div>
-          <el-row type="flex" justify="space-between">
-            <el-col class="radio-list">
-                <div class="radio-list-content">
-                  <el-radio-group
-                    v-model="energyType"
-                    @change="onPowerTypeChange"
-                  >
-                    <el-radio
-                      :style="radioStyle"
-                      :label="item.value"
-                      v-for="item in powerTypeOptions"
-                      :key="item.value"
-                    >
-                      {{ item.label }}
-                    </el-radio>
-                  </el-radio-group>
-                </div>
-              </el-col>
-          </el-row>
-        </div> -->
-      </el-col>
-      <el-col class="home-body-right">
-        <el-card :bordered="false" class="right-first-card-title">
-          <div slot="header" class="clearfix">
-            <span>缁煎悎鑳借�楀崰姣斿垎鏋�</span>
-          </div>
-          <PieChart
-            class="first-chat"
-            :chartData="firstPieData"
-            pieTitle="缁煎悎鑳借�楀崰姣斿垎鏋�"
-          />
-        </el-card>
-        <el-card :bordered="false" class="second-card-title">
-          <div slot="header" class="clearfix">
-            <span>鑳借�楄澶囧崰姣�</span>
-          </div>
-          <PieChart
-            class="second-chat"
-            :chartData="secondPieData"
-            pieTitle="鑳借�楄澶囧崰姣�"
-            height="280px"
-          />
-        </el-card>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import {
-  getEnergyConsumptionRatio,
-  getEnergyConsumptionSummation,
-  getEnergyStatistic,
-  getHomeEnergyMonitoring,
-  listEnergyType,
-  getHomeEnergyUnitConsumptionRatio,
-  getHomeOutdoorTemperature
-} from "@/api/home/home";
-import mixins from "@/layout/mixin/getHeight";
-import PieChart from "./dashboard/PieChart";
-import LineChart from "./dashboard/LineChart";
-import BarChart from "./dashboard/BarChart";
-
-export default {
-  components: {
-    LineChart,
-    BarChart,
-    PieChart
-  },
-  mixins: [mixins],
-
-  data() {
-    return {
-      firstPieData: [],
-      secondPieData: [],
-      monitoringUnit: "kWh",
-      chartDataObj: {},
-      monitoringWaterUnit: "m鲁",
-      chartDataWaterObj: {},
-      energyType: "electric",
-      energyTypeName: "鐢�",
-      dateType: "DAY",
-      powerTypeOptions: [
-        {
-          label: "鐢�",
-          value: "electric",
-          energyUnit: "kWh"
-        },
-        { label: "姘�", value: "Water", energyUnit: "m鲁" },
-        { label: "钂告苯", value: "Steam", energyUnit: "鍚�" },
-        { label: "澶╃劧姘�", value: "Gas", energyUnit: "Nm鲁" }
-      ],
-      isClick: true,
-      radioStyle: {
-        display: "block",
-        height: "30px",
-        lineHeight: "30px"
-      },
-      chart1: null,
-      chart2: null,
-      data: [],
-      pieDta: [],
-      pieDtatwo: [],
-      energyCostSum: 0,
-      energyStatistic: [],
-      summation: 10776,
-      totalCo2Emissions: 0,
-      humidity: "",
-      temperature: "",
-      timer: null,
-      timer30: null
-    };
-  },
-  mounted() {
-    this.getEnergyType();
-    this.getSummationData();
-    this.getEnergyConsumptionRatioData();
-    this.getEnergyStatisticData();
-    this.getHomeEnergyUnitConsumptionRatioData();
-
-    const ele = document.createEvent("Event");
-    ele.initEvent("resize", true, true);
-    window.dispatchEvent(ele);
-
-    clearInterval(this.timer);
-    clearInterval(this.timer30);
-    this.getHomeOutdoorTemperatureData();
-    // this.timer = setInterval(() => {
-    //   this.getHomeOutdoorTemperatureData();
-    // }, 12000);
-    this.timer30 = setInterval(() => {
-      // this.getEnergyType();
-      this.getSummationData();
-      this.getEnergyConsumptionRatioData();
-      this.getEnergyStatisticData();
-      this.getHomeEnergyUnitConsumptionRatioData();
-    }, 180000);
-  },
-  beforeDestroy() {
-    clearInterval(this.timer);
-    clearInterval(this.timer30);
-  },
-  methods: {
-    getHomeOutdoorTemperatureData() {
-      getHomeOutdoorTemperature().then(res => {
-        this.temperature = res.data.temperature;
-        this.humidity = res.data.humidity;
-      });
-    },
-    getEnergyType() {
-      listEnergyType()
-        .then(res => {
-          if (res.code === 200) {
-            this.powerTypeOptions =
-              res.data.map(item => ({
-                ...item,
-                value: item.energy,
-                label: item.energyName
-              })) || [];
-            this.energyType =
-              this.powerTypeOptions.length > 0
-                ? this.powerTypeOptions[0].value
-                : "";
-            this.energyTypeName =
-              this.powerTypeOptions.length > 0
-                ? this.powerTypeOptions[0].label
-                : "";
-            for (let i = 0; i < this.powerTypeOptions.length; i++) {
-              this.getEnergyMonitoring(this.powerTypeOptions[i].value);
-            }
-          }
-        })
-        .catch(e => {
-          console.log("鑾峰彇鑳芥簮绫诲瀷鍒楄〃", e);
-        });
-    },
-    // 纰虫帓閲忔牳绠楁煡璇�
-    getCarbonEmission() {
-      getHomeCarbonEmission(this.dateType).then(res => {
-        this.totalCo2Emissions = res.result.totalCo2Emissions;
-      });
-    },
-    // 鑾峰彇鍏ㄥ巶缁煎悎鑳借��
-    getSummationData() {
-      getEnergyConsumptionSummation(this.dateType)
-        .then(res => {
-          if (res.code === 200) {
-            this.summation = res.data;
-          }
-        })
-        .catch(e => {
-          console.log("鑾峰彇鍏ㄥ巶缁煎悎鑳借��", e);
-        });
-    },
-    // 鑾峰彇缁煎悎鑳借�楀崰姣旂幆褰㈠浘鍒嗘瀽鏁版嵁
-    getEnergyConsumptionRatioData() {
-      getEnergyConsumptionRatio(this.dateType)
-        .then(res => {
-          if (res.code === 200) {
-            this.firstPieData = res.data.map(item => {
-              return {
-                ...item,
-                name: item.item,
-                value: item.count || 0
-                // unit: filterUint
-              };
-            });
-          }
-        })
-        .catch(e => {
-          console.log("鑾峰彇缁煎悎鑳借�楀崰姣旂幆褰㈠浘鍒嗘瀽鏁版嵁", e);
-        });
-    },
-
-    // 鑳芥簮璁惧鐜舰鍥炬暟鎹暟鎹�
-    getHomeEnergyUnitConsumptionRatioData() {
-      getHomeEnergyUnitConsumptionRatio(this.dateType)
-        .then(res => {
-          if (res.code === 200) {
-            this.secondPieData = res.data.map(item => {
-              return {
-                ...item,
-                name: item.name,
-                value: item.value || 0
-                // unit: filterUint
-              };
-            });
-          }
-        })
-        .catch(e => {
-          console.log("鑳芥簮璁惧鍒嗘瀽鐜舰鍥炬暟鎹暟鎹�", e);
-        });
-    },
-
-    // 鍒嗙被鑳芥簮缁熻鏁版嵁
-    getEnergyStatisticData() {
-      getEnergyStatistic(this.dateType)
-        .then(res => {
-          if (res.code === 200) {
-            this.energyStatistic = res.data;
-          }
-        })
-        .catch(e => {
-          console.log("鍒嗙被鑳芥簮缁熻鏁版嵁", e);
-        });
-    },
-
-    // 鑳芥簮鐩戞祴鏌辩姸鍥炬暟鎹�
-    getEnergyMonitoring(energyType) {
-      getHomeEnergyMonitoring(this.dateType, energyType)
-        .then(res => {
-          if (res.code === 200) {
-            let chartData = res.data.chartData.sort((a, b) => {
-              return a.date - b.date;
-            });
-            let nameList = Array.from(
-              new Set(
-                chartData.map(item => {
-                  return item.name;
-                })
-              )
-            ).sort((a, b) => {
-              return new Date(b.date).getTime() - new Date(a.date).getTime();
-            });
-            // 琛ュ叏鏁版嵁
-            let oneArr = chartData.filter(item => {
-              return item.name === nameList[0];
-            });
-            let twoArr = chartData.filter(item => {
-              return item.name === nameList[1];
-            });
-
-            let maxDate =
-              this.dateType === "DAY"
-                ? 23
-                : Math.max(
-                    ...chartData.map(item => {
-                      return item.date;
-                    })
-                  );
-            oneArr.forEach(element => {
-              if (this.dateType === "DAY") {
-                let hour = new Date("2022 " + element.date).getHours() + "鏃�";
-                element.date = hour;
-              } else {
-                element.date =
-                  this.dateType === "MONTH"
-                    ? element.date + "鏃�"
-                    : element.date + "鏈�";
-              }
-            });
-            twoArr.forEach(element => {
-              if (this.dateType === "DAY") {
-                let hour = new Date("2022 " + element.date).getHours() + "鏃�";
-                element.date = hour;
-              } else {
-                element.date =
-                  this.dateType === "MONTH"
-                    ? element.date + "鏃�"
-                    : element.date + "鏈�";
-              }
-            });
-            if (oneArr.length < maxDate) {
-              if (this.dateType === "DAY") {
-                for (let d = oneArr.length; d < maxDate + 1; d++) {
-                  oneArr.push({
-                    date: d + "鏃�",
-                    name: nameList[0],
-                    count: 0,
-                    value: null
-                  });
-                }
-              } else {
-                console.log("one111111111");
-                for (let d = oneArr.length + 1; d < maxDate + 1; d++) {
-                  oneArr.push({
-                    date: this.dateType === "MONTH" ? d + "鏃�" : d + "鏈�",
-                    name: nameList[0],
-                    count: 0,
-                    value: null
-                  });
-                }
-              }
-            }
-            if (twoArr.length < maxDate) {
-              if (this.dateType === "DAY") {
-                for (let d = twoArr.length; d < maxDate + 1; d++) {
-                  twoArr.push({
-                    date: d + "鏃�",
-                    name: nameList[1],
-                    count: 0,
-                    value: 0
-                  });
-                }
-              } else {
-                for (let d = twoArr.length + 1; d < maxDate + 1; d++) {
-                  twoArr.push({
-                    date: this.dateType === "MONTH" ? d + "鏃�" : d + "鏈�",
-                    name: nameList[1],
-                    count: 0,
-                    value: 0
-                  });
-                }
-              }
-            }
-
-            let chartData2 = oneArr
-              .concat(twoArr)
-              .map(item => {
-                return {
-                  ...item,
-                  len: item.date,
-                  count: item.value === "--" ? null : +item.value
-                };
-              })
-              .sort((a, b) => {
-                return new Date(a.name).getTime() - new Date(b.name).getTime();
-              });
-            this.data = chartData2;
-            if (energyType == "water") {
-              this.monitoringWaterUnit = res.data.unit;
-              this.chartDataWaterObj = {
-                expectedData: twoArr.map(one => {
-                  return one.value;
-                }),
-                actualData: oneArr.map(e => {
-                  return e.value;
-                }),
-                xData: oneArr.map(one => {
-                  return one.date;
-                })
-              };
-            } else if (energyType == "electric") {
-              this.monitoringUnit = res.data.unit;
-              this.chartDataObj = {
-                expectedData: twoArr.map(one => {
-                  return one.value;
-                }),
-                actualData: oneArr.map(e => {
-                  return e.value;
-                }),
-                xData: oneArr.map(one => {
-                  return one.date;
-                })
-              };
-            }
-          }
-        })
-        .catch(e => {
-          console.log("鑳芥簮鐩戞祴鏌辩姸鍥炬暟鎹�", e);
-        });
-    },
-
-    dateClickHandle(type) {
-      this.dateType = type;
-      this.isClick = !this.isClick;
-      this.getSummationData();
-      this.getEnergyConsumptionRatioData();
-      this.getEnergyCostRatioData();
-      this.getEnergyStatisticData();
-      this.getEnergyMonitoring();
-      this.getCarbonEmission();
-    },
-
-    onPowerTypeChange(e) {
-      this.energyType = e;
-      for (let i = 0; i < this.powerTypeOptions.length; i++) {
-        if (this.energyType === this.powerTypeOptions[i].value) {
-          this.energyTypeName = this.powerTypeOptions[i].label;
-          this.monitoringUnit = this.powerTypeOptions[i].energyUnit || "";
-        }
-      }
-      this.getEnergyMonitoring();
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.home-show {
-  overflow: hidden;
-  overflow-y: scroll;
-  // height: calc(100vh - 88px);
-  .home-head {
-    display: flex;
-    align-items: center;
-
-    .home-select-label {
-      margin-right: 10px;
-      color: #fff;
-      font-weight: 600;
-    }
-
-    .select-month {
-      margin: 0 8px;
-    }
-  }
-  .double-data-show-content {
-    display: flex;
-    align-items: center;
-    // border-bottom: 1px solid #e9e9e9;
-    // padding: 23px 0 24px 40px;
-    .el-col {
-      padding: 23px 0 24px 10px;
-    }
-
-    & > div {
-      display: flex;
-      align-items: center;
-    }
-
-    img {
-      width: 20px;
-      height: 20px;
-    }
-
-    .left-title-style {
-      display: flex;
-      align-items: center;
-      margin-left: 10px;
-      // border-right: 1px solid #e9e9e9;
-
-      .unit {
-        font-size: 22px;
-        color: #fff;
-        margin-top: 4px;
-      }
-    }
-  }
-
-  .chart-wrapper {
-    padding: 10px 24px;
-    position: relative;
-    .chart-left-unit {
-      position: absolute;
-      top: 16px;
-      left: 24px;
-      color: #fff;
-      font-size: 18px;
-    }
-
-    .line-content {
-      margin: 4px 0 0 0;
-      height: 300px;
-    }
-  }
-
-  .data-indicator-overview {
-    ::v-deep .el-card__body {
-      padding: 0 !important;
-    }
-
-    .home-body-left {
-      width: 66.3%;
-      height: 100%;
-
-      .body-left-title {
-        margin: 0 16px 0px 0;
-      }
-
-      .left-line-style {
-        padding: 24px;
-        color: #fff;
-
-        .radio-list {
-          width: 122px;
-
-          .radio-list-content {
-            margin: 16px 12px 0 0;
-            background: #f3f7f7;
-            padding: 21px 9px;
-            border-radius: 2px;
-            overflow: auto;
-            height: 360px;
-          }
-        }
-
-        .right-line {
-          width: calc(100% - 122px);
-          position: relative;
-
-          .chart-left-unit {
-            position: absolute;
-            top: 16px;
-            left: 0;
-            color: #fff;
-          }
-
-          .line-content {
-            margin: 12px 0 0 0;
-            height: 300px;
-          }
-        }
-      }
-
-      .left-bottom-type {
-        margin: 16px 16px 16px 0;
-
-        .card-list {
-          display: flex;
-          flex-wrap: wrap;
-          height: 100%;
-
-          .classify-energy {
-            border-left: 1px solid #e9e9e9;
-            flex: 1;
-            display: flex;
-            align-items: center;
-            padding: 0 0 0 24px;
-
-            &:first-child {
-              border-left: none;
-            }
-
-            .img-list {
-              display: flex;
-              align-items: center;
-              img {
-                width: 20px;
-                height: 20px;
-              }
-
-              .text-describe {
-                display: flex;
-                align-items: center;
-                margin-left: 18px;
-
-                .number {
-                  font-size: 24px;
-                  color: #fff;
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-
-    .home-body-right {
-      width: 33.7%;
-      height: 100%;
-
-      .right-first-card-title {
-        margin: 0 0 16px 0;
-
-        .first-chat {
-          margin: 10px 0 0 0;
-          height: 300px;
-        }
-      }
-
-      .second-card-title {
-        // padding-top: 16px;
-
-        .second-chat {
-          margin: 10px 0 0 0;
-          height: 290px;
-        }
-
-        .bottom-description-list {
-          display: flex;
-          padding: 0 23px 16px 10px;
-          height: 106px;
-          align-items: center;
-
-          .total {
-            border-right: 1px solid #e9e9e9;
-            padding-left: 10px;
-            min-width: 180px;
-            max-width: 180px;
-
-            .energy-cost-sum {
-              font-size: 24px;
-              color: #fff;
-            }
-          }
-
-          .legend {
-            padding: 6px 0 0 20px;
-
-            .legend-list {
-              display: flex;
-              // width: 280px;
-              flex-wrap: wrap;
-            }
-          }
-        }
-      }
-    }
-  }
-
-  .power-cost {
-    width: 8px;
-    height: 8px;
-    border-radius: 50%;
-    display: inline-block;
-    margin-right: 4px;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/keyEquipment/dailykeyEquipment/BarChart.vue b/energy_management_ui/src/views/keyEquipment/dailykeyEquipment/BarChart.vue
deleted file mode 100644
index a157885..0000000
--- a/energy_management_ui/src/views/keyEquipment/dailykeyEquipment/BarChart.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: title,
-          left: "left",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 40,
-          containLabel: true
-        },
-        xAxis: [
-          {
-            type: "category",
-            data: actualData,
-            axisTick: {
-              alignWithLabel: true
-            }
-          }
-        ],
-        yAxis: [
-          {
-            type: "value",
-            axisTick: {
-              show: false
-            }
-          }
-        ],
-        series: [
-          {
-            name: title,
-            type: "bar",
-            stack: "vistors",
-            barWidth: "60%",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/keyEquipment/dailykeyEquipment/LineChart.vue b/energy_management_ui/src/views/keyEquipment/dailykeyEquipment/LineChart.vue
deleted file mode 100644
index be1b83d..0000000
--- a/energy_management_ui/src/views/keyEquipment/dailykeyEquipment/LineChart.vue
+++ /dev/null
@@ -1,122 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: title,
-          left: "left",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        xAxis: {
-          data: actualData,
-          type: "category"
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 40,
-          containLabel: true
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "cross"
-          },
-          padding: [5, 10]
-        },
-        yAxis: {
-          axisTick: {
-            show: false
-          }
-        },
-        legend: {
-          data: []
-        },
-        series: [
-          {
-            name: title,
-            itemStyle: {
-              normal: {
-                color: "#FF005A",
-                lineStyle: {
-                  color: "#FF005A",
-                  width: 2
-                }
-              }
-            },
-            smooth: true,
-            type: "line",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/keyEquipment/dailykeyEquipment/index.vue b/energy_management_ui/src/views/keyEquipment/dailykeyEquipment/index.vue
deleted file mode 100644
index 397c0f1..0000000
--- a/energy_management_ui/src/views/keyEquipment/dailykeyEquipment/index.vue
+++ /dev/null
@@ -1,439 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form
-        :model="queryParams"
-        ref="queryForm"
-        label-width="68px"
-        class="special-form"
-      >
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="閲嶇偣璁惧">
-              <el-select
-                v-model="queryParams.indexStorageId"
-                placeholder="璇烽�夋嫨閲嶇偣璁惧"
-                size="small"
-                style="width: 100%"
-              >
-                <el-option
-                  v-for="dict in indexCategoryOptions"
-                  :key="dict.id"
-                  :label="dict.facilityName"
-                  :value="dict.id"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="缁熻鍖洪棿" prop="dataTime">
-              <el-date-picker
-                clearable
-                size="small"
-                style="width: 100%"
-                v-model="queryParams.dataTime"
-                :type="dateTypes"
-                :clearable="false"
-                :value-format="valueFormat"
-                placeholder="閫夋嫨鏃ユ湡"
-              >
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item class="operation">
-              <el-button
-                type="primary"
-                icon="el-icon-search"
-                size="mini"
-                @click="handleQuery"
-                >鏌ヨ</el-button
-              >
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-                >閲嶇疆</el-button
-              >
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container :bodyStyle="bodyStyle" style="margin-top: 16px">
-      <el-table
-        :data="energyList"
-        border
-        style="width: 100%;"
-        class="tableList"
-      >
-        <el-table-column fixed label="鏇茬嚎閫夋嫨">
-          <template slot-scope="scope">
-            <el-button
-              icon="el-icon-search"
-              circle
-              @click="selectChange(scope.row)"
-              style="font-size: 10px"
-            ></el-button>
-          </template>
-        </el-table-column>
-        <el-table-column
-          fixed
-          prop="indexName"
-          align="center"
-          label="鑳芥簮鎸囨爣鍚嶇О"
-          min-width="240px"
-        ></el-table-column>
-        <el-table-column label="0鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value0)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="1鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value1)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="2鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value2)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="3鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value3)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="4鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value4)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="5鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value5)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="6鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value6)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="7鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value7)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="8鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value8)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="9鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value9)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="20鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value20)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="11鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value11)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="12鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value12)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="13鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value13)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="14鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value14)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="15鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value15)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="16鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value16)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="17鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value17)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="18鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value18)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="19鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value19)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="20鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value20)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="21鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value21)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="22鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value22)
-          }}</template>
-        </el-table-column>
-        <el-table-column label="23鏃�" align="center" min-width="140px">
-          <template slot-scope="scope">{{
-            numFilter(scope.row.value23)
-          }}</template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        v-show="total > 0"
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-      <el-row :gutter="32" style="margin:30px 0">
-        <el-col :xs="24" :sm="24" :lg="12">
-          <div class="chart-wrapper">
-            <line-chart ref="LineChart" :chart-data="lineChartData" />
-          </div>
-        </el-col>
-        <el-col :xs="24" :sm="24" :lg="12">
-          <div class="chart-wrapper">
-            <bar-chart ref="BarChart" :chart-data="lineChartData" />
-          </div>
-        </el-col>
-      </el-row>
-    </basic-container>
-  </div>
-</template>
-
-<script>
-import {
-  getDataList,
-  getlistChart,
-  getPointFacility
-} from "@/api/keyEquipment/dailykeyEquipment/dailykeyEquipment";
-import LineChart from "./LineChart";
-import BarChart from "./BarChart";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  components: {
-    LineChart,
-    BarChart
-  },
-  mixins: [mixins],
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      energyList: [],
-      indexCategoryOptions: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        indexId: undefined,
-        dataTime: undefined,
-        timeType: "HOUR",
-        indexType: undefined,
-        indexStorageId: undefined
-      },
-      skinName: "",
-      dateTypes: "date",
-      valueFormat: "yyyy-MM-dd",
-      lineChartData: { expectedData: [], actualData: [] }
-    };
-  },
-  created() {
-    this.getList();
-    this.getTime();
-    this.getDicts("report_form").then(response => {
-      this.dateTypeOptions = response.data;
-      this.queryParams.timeType = this.dateTypeOptions.find(
-        f => f.isDefault === "Y"
-      ).dictValue;
-    });
-    this.getConfigKey("processEnergy").then(response => {
-      this.skinName = response.msg;
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 210 + "px";
-    },
-    getList() {
-      this.queryParams.indexCode = this.$route.query.modelCode;
-      getDataList(this.queryParams).then(response => {
-        this.energyList = response.rows;
-        this.total = response.total;
-      });
-      getPointFacility().then(response => {
-        this.indexCategoryOptions = response.data;
-      });
-    },
-    selectChange(row) {
-      this.queryParams.indexId = row.indexId;
-      getlistChart(this.queryParams).then(response => {
-        let actualData = [];
-        let expectedData = [];
-        let title = "";
-        response.data.forEach(item => {
-          expectedData.push(this.numFilter(item.value));
-          actualData.push(
-            item.timeCode.slice(
-              item.timeCode.length - 2,
-              item.timeCode.length
-            ) + "鏃�"
-          );
-          title = item.indexName + "(" + item.unitId + ")";
-        });
-        this.lineChartData.actualData = actualData;
-        this.lineChartData.expectedData = expectedData;
-        this.lineChartData.title = title;
-        this.$refs.LineChart.initChart(this.lineChartData);
-        this.$refs.BarChart.initChart(this.lineChartData);
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-      this.selectChange();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.queryParams.indexStorageId = "";
-      this.handleQuery();
-    },
-    numFilter(value) {
-      // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = "";
-      if (!isNaN(value) && value !== "" && value !== null) {
-        realVal = parseFloat(value).toFixed(this.skinName);
-      } else {
-        realVal = "0";
-      }
-      return realVal;
-    },
-    getTime() {
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      this.queryParams.dataTime = year + "-" + month + "-" + date;
-    }
-  }
-};
-</script>
-<style lang="scss" scoped>
-.el-form-item {
-  margin-bottom: 0;
-}
-
-.dashboard-editor-container {
-  padding: 32px;
-  background-color: rgb(240, 242, 245);
-  position: relative;
-
-  .chart-wrapper {
-    background: #fff;
-    padding: 16px 16px 0;
-    margin-bottom: 32px;
-  }
-}
-
-@media (max-width: 1024px) {
-  .chart-wrapper {
-    padding: 8px;
-  }
-}
-
-.live {
-  position: fixed;
-  right: 0px;
-  top: 70px;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  width: 100px;
-  height: 60px;
-  background-color: red;
-  animation: fade 600ms infinite;
-  -webkit-animation: fade 600ms infinite;
-}
-
-.live_content {
-  font-size: 18px;
-  color: white;
-  font-weight: bold;
-}
-
-.live_number {
-  font-size: 32px;
-  color: white;
-  font-weight: bolder;
-}
-
-@keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-@-webkit-keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/keyEquipment/monthlykeyEquipment/BarChart.vue b/energy_management_ui/src/views/keyEquipment/monthlykeyEquipment/BarChart.vue
deleted file mode 100644
index a157885..0000000
--- a/energy_management_ui/src/views/keyEquipment/monthlykeyEquipment/BarChart.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: title,
-          left: "left",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 40,
-          containLabel: true
-        },
-        xAxis: [
-          {
-            type: "category",
-            data: actualData,
-            axisTick: {
-              alignWithLabel: true
-            }
-          }
-        ],
-        yAxis: [
-          {
-            type: "value",
-            axisTick: {
-              show: false
-            }
-          }
-        ],
-        series: [
-          {
-            name: title,
-            type: "bar",
-            stack: "vistors",
-            barWidth: "60%",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/keyEquipment/monthlykeyEquipment/LineChart.vue b/energy_management_ui/src/views/keyEquipment/monthlykeyEquipment/LineChart.vue
deleted file mode 100644
index be1b83d..0000000
--- a/energy_management_ui/src/views/keyEquipment/monthlykeyEquipment/LineChart.vue
+++ /dev/null
@@ -1,122 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: title,
-          left: "left",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        xAxis: {
-          data: actualData,
-          type: "category"
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 40,
-          containLabel: true
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "cross"
-          },
-          padding: [5, 10]
-        },
-        yAxis: {
-          axisTick: {
-            show: false
-          }
-        },
-        legend: {
-          data: []
-        },
-        series: [
-          {
-            name: title,
-            itemStyle: {
-              normal: {
-                color: "#FF005A",
-                lineStyle: {
-                  color: "#FF005A",
-                  width: 2
-                }
-              }
-            },
-            smooth: true,
-            type: "line",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/keyEquipment/monthlykeyEquipment/index.vue b/energy_management_ui/src/views/keyEquipment/monthlykeyEquipment/index.vue
deleted file mode 100644
index 8555b46..0000000
--- a/energy_management_ui/src/views/keyEquipment/monthlykeyEquipment/index.vue
+++ /dev/null
@@ -1,394 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form
-        :model="queryParams"
-        ref="queryForm"
-        label-width="68px"
-        class="special-form"
-      >
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="閲嶇偣璁惧">
-              <el-select
-                v-model="queryParams.indexStorageId"
-                placeholder="璇烽�夋嫨閲嶇偣璁惧"
-                size="small"
-                style="width: 100%"
-              >
-                <el-option
-                  v-for="dict in indexCategoryOptions"
-                  :key="dict.id"
-                  :label="dict.facilityName"
-                  :value="dict.id"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="缁熻鏃堕棿">
-              <el-date-picker
-                clearable
-                size="small"
-                style="width: 100%"
-                v-model="queryParams.dataTime"
-                type="month"
-                :clearable="false"
-                value-format="yyyy-MM"
-                placeholder="閫夋嫨鏃ユ湡"
-              >
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item class="operation">
-              <el-button
-                type="primary"
-                icon="el-icon-search"
-                size="mini"
-                @click="handleQuery"
-                >鏌ヨ</el-button
-              >
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-                >閲嶇疆</el-button
-              >
-              <!--<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport">瀵煎嚭</el-button>-->
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-      <!--<el-form-item label="鎶ヨ〃绫诲瀷" >
-         <el-radio-group v-model="queryParams.timeType">
-           <el-radio v-for="dict in dateTypeOptions" :key="dict.dictValue" :label="dict.dictValue" @change="handleTime(dict.dictValue)">{{dict.dictLabel}}</el-radio>
-         </el-radio-group>
-       </el-form-item>-->
-    </basic-container>
-    <basic-container :bodyStyle="bodyStyle" style="margin-top: 16px">
-      <el-table
-        :data="energyList"
-        border
-        style="width: 100%;"
-        class="tableList"
-      >
-        <el-table-column fixed label="鏇茬嚎閫夋嫨">
-          <template slot-scope="scope">
-            <el-button
-              icon="el-icon-search"
-              circle
-              @click="selectChange(scope.row.indexId)"
-              style="font-size: 10px"
-            ></el-button>
-          </template>
-        </el-table-column>
-        <el-table-column
-          fixed
-          prop="indexName"
-          align="center"
-          label="鑳芥簮鎸囨爣鍚嶇О"
-          min-width="240px"
-        ></el-table-column>
-        <el-table-column
-          v-for="index in 31"
-          :key="index"
-          :label="`${index}鏃"
-          align="center"
-          min-width="100"
-        >
-          <template slot-scope="scope">
-            <span style="font-size: 12px">
-              {{ numFilter(scope.row[`value${index}`]) || "--" }}
-            </span>
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <pagination
-        v-show="total > 0"
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-      <el-row :gutter="32" style="margin:30px 0">
-        <el-col :xs="24" :sm="24" :lg="12">
-          <div class="chart-wrapper">
-            <line-chart ref="LineChart" :chart-data="lineChartData" />
-          </div>
-        </el-col>
-        <el-col :xs="24" :sm="24" :lg="12">
-          <div class="chart-wrapper">
-            <bar-chart ref="BarChart" :chart-data="lineChartData" />
-          </div>
-        </el-col>
-      </el-row>
-    </basic-container>
-  </div>
-</template>
-
-<script>
-import {
-  getDataList,
-  exportList,
-  getlistChart
-} from "@/api/keyEquipment/monthlykeyEquipment/monthlykeyEquipment";
-import { getPointFacility } from "@/api/keyEquipment/dailykeyEquipment/dailykeyEquipment";
-import LineChart from "./LineChart";
-import BarChart from "./BarChart";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  components: {
-    LineChart,
-    BarChart
-  },
-  mixins: [mixins],
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      checked: false,
-      dateRange: [],
-      dateTypeOptions: [],
-      energyList: [],
-      tableData: [],
-      tableHead: [],
-      indexCategoryOptions: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        indexCode: undefined,
-        indexId: undefined,
-        dataTime: undefined,
-        timeType: "DAY",
-        indexType: undefined,
-        indexStorageId: undefined
-      },
-      skinName: "",
-      lineChartData: { expectedData: [], actualData: [] }
-    };
-  },
-  created() {
-    this.getDicts("report_form").then(response => {
-      this.dateTypeOptions = response.data;
-      //this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-    });
-    this.getConfigKey("comprehensive").then(response => {
-      this.skinName = response.msg;
-    });
-    this.getList();
-    this.getTime();
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 210 + "px";
-    },
-    getList() {
-      this.queryParams.indexCode = this.$route.query.modelCode;
-      getDataList(this.queryParams).then(response => {
-        this.tableData = response.data.tabledata;
-        this.tableHead = response.data.tablehead;
-        this.total = response.data.total;
-      });
-      getPointFacility().then(response => {
-        this.indexCategoryOptions = response.data;
-      });
-    },
-    selectChange(data) {
-      this.queryParams.indexId = data;
-      getlistChart(this.queryParams).then(response => {
-        let actualData = [];
-        let expectedData = [];
-        let title = "";
-        response.data.forEach(item => {
-          expectedData.push(this.numFilter(item.value));
-          actualData.push(
-            item.timeCode.slice(
-              item.timeCode.length - 2,
-              item.timeCode.length
-            ) + "鏃�"
-          );
-          title = item.indexName + "(" + item.unitId + ")";
-        });
-        this.lineChartData.actualData = actualData;
-        this.lineChartData.expectedData = expectedData;
-        this.lineChartData.title = title;
-        this.$refs.LineChart.initChart(this.lineChartData);
-        this.$refs.BarChart.initChart(this.lineChartData);
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-      this.selectChange();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.queryParams.indexStorageId = "";
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭缁煎悎鑳借��?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportList(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-    numFilter(value) {
-      // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = "";
-      if (!isNaN(value) && value !== "" && value !== null) {
-        realVal = parseFloat(value).toFixed(this.skinName);
-      } else {
-        realVal = "0";
-      }
-      return realVal;
-    },
-    getTime() {
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      this.queryParams.dataTime = year + "-" + month;
-      /*let startTime = year + '-' + month + '-' + date
-      let endTime = year + '-' + month + '-' + (date + 1)
-      this.dateRange = [startTime, endTime]*/
-    },
-
-    handleTime(date) {
-      if (date == "MONTH") {
-        (this.dateTypes = "year"), (this.valueFormat = "yyyy");
-      } else if (date == "DAY") {
-        (this.dateTypes = "month"), (this.valueFormat = "yyyy-MM");
-      } else {
-        (this.dateTypes = "date"), (this.valueFormat = "yyyy-MM-dd");
-      }
-    }
-  }
-};
-</script>
-<style lang="scss" scoped>
-.el-form-item {
-  margin-bottom: 0;
-}
-
-.tableList tr > td:first-child {
-  position: sticky;
-  left: 0;
-  z-index: 1;
-  background: #fff;
-}
-
-.tableList tr > td:nth-child(2) {
-  position: sticky;
-  left: 80px;
-  z-index: 1;
-  background: #fff;
-}
-
-.dashboard-editor-container {
-  padding: 32px;
-  background-color: rgb(240, 242, 245);
-  position: relative;
-
-  .chart-wrapper {
-    background: #fff;
-    padding: 16px 16px 0;
-    margin-bottom: 32px;
-  }
-}
-
-@media (max-width: 1024px) {
-  .chart-wrapper {
-    padding: 8px;
-  }
-}
-
-.live {
-  position: fixed;
-  right: 0px;
-  top: 70px;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  width: 100px;
-  height: 60px;
-  background-color: red;
-  animation: fade 600ms infinite;
-  -webkit-animation: fade 600ms infinite;
-}
-
-.live_content {
-  font-size: 18px;
-  color: white;
-  font-weight: bold;
-}
-
-.live_number {
-  font-size: 32px;
-  color: white;
-  font-weight: bolder;
-}
-
-@keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-@-webkit-keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-.el-table--enable-row-hover .el-table__body tr:hover > td {
-  background: #cfdcf5;
-}
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/keyEquipment/yearkeyEquipment/BarChart.vue b/energy_management_ui/src/views/keyEquipment/yearkeyEquipment/BarChart.vue
deleted file mode 100644
index a157885..0000000
--- a/energy_management_ui/src/views/keyEquipment/yearkeyEquipment/BarChart.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: title,
-          left: "left",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 40,
-          containLabel: true
-        },
-        xAxis: [
-          {
-            type: "category",
-            data: actualData,
-            axisTick: {
-              alignWithLabel: true
-            }
-          }
-        ],
-        yAxis: [
-          {
-            type: "value",
-            axisTick: {
-              show: false
-            }
-          }
-        ],
-        series: [
-          {
-            name: title,
-            type: "bar",
-            stack: "vistors",
-            barWidth: "60%",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/keyEquipment/yearkeyEquipment/LineChart.vue b/energy_management_ui/src/views/keyEquipment/yearkeyEquipment/LineChart.vue
deleted file mode 100644
index be1b83d..0000000
--- a/energy_management_ui/src/views/keyEquipment/yearkeyEquipment/LineChart.vue
+++ /dev/null
@@ -1,122 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: title,
-          left: "left",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        xAxis: {
-          data: actualData,
-          type: "category"
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 40,
-          containLabel: true
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "cross"
-          },
-          padding: [5, 10]
-        },
-        yAxis: {
-          axisTick: {
-            show: false
-          }
-        },
-        legend: {
-          data: []
-        },
-        series: [
-          {
-            name: title,
-            itemStyle: {
-              normal: {
-                color: "#FF005A",
-                lineStyle: {
-                  color: "#FF005A",
-                  width: 2
-                }
-              }
-            },
-            smooth: true,
-            type: "line",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/keyEquipment/yearkeyEquipment/index.vue b/energy_management_ui/src/views/keyEquipment/yearkeyEquipment/index.vue
deleted file mode 100644
index 003cf0f..0000000
--- a/energy_management_ui/src/views/keyEquipment/yearkeyEquipment/index.vue
+++ /dev/null
@@ -1,376 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form :model="queryParams" ref="queryForm" label-width="68px" class="special-form">
-        <el-row :gutter="24">
-          <el-col :span="8">
-            <el-form-item label="閲嶇偣璁惧">
-              <el-select v-model="queryParams.indexStorageId" placeholder="璇烽�夋嫨閲嶇偣璁惧" size="small" style="width: 100%">
-                <el-option
-                    v-for="dict in indexCategoryOptions"
-                    :key="dict.id"
-                    :label="dict.facilityName"
-                    :value="dict.id"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="缁熻鏃堕棿">
-              <el-date-picker clearable size="small" style="width: 100%"
-                              v-model="queryParams.dataTime"
-                              type="year"
-                              :clearable="false"
-                              value-format="yyyy"
-                              placeholder="閫夋嫨鏃ユ湡">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌ヨ</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-              <!--<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport">瀵煎嚭</el-button>-->
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container :bodyStyle="bodyStyle" style="margin-top: 16px">
-      <el-table :data="energyList" border style="width: 100%;" class="tableList">
-        <el-table-column fixed label="鏇茬嚎閫夋嫨">
-          <template slot-scope="scope">
-            <el-button icon="el-icon-search" circle @click="selectChange(scope.row)"
-                       style="font-size: 10px"></el-button>
-          </template>
-        </el-table-column>
-        <el-table-column fixed prop="indexName" align="center" label="鑳芥簮鍚嶇О" min-width="240px"></el-table-column>
-        <el-table-column label="1鏈�" align="center" min-width="140px">
-          <template slot-scope="scope">{{ numFilter(scope.row.value1) }}</template>
-        </el-table-column>
-        <el-table-column label="2鏈�" align="center" min-width="140px">
-          <template slot-scope="scope">{{ numFilter(scope.row.value2) }}</template>
-        </el-table-column>
-        <el-table-column label="3鏈�" align="center" min-width="140px">
-          <template slot-scope="scope">{{ numFilter(scope.row.value3) }}</template>
-        </el-table-column>
-        <el-table-column label="4鏈�" align="center" min-width="140px">
-          <template slot-scope="scope">{{ numFilter(scope.row.value4) }}</template>
-        </el-table-column>
-        <el-table-column label="5鏈�" align="center" min-width="140px">
-          <template slot-scope="scope">{{ numFilter(scope.row.value5) }}</template>
-        </el-table-column>
-        <el-table-column label="6鏈�" align="center" min-width="140px">
-          <template slot-scope="scope">{{ numFilter(scope.row.value6) }}</template>
-        </el-table-column>
-        <el-table-column label="7鏈�" align="center" min-width="140px">
-          <template slot-scope="scope">{{ numFilter(scope.row.value7) }}</template>
-        </el-table-column>
-        <el-table-column label="8鏈�" align="center" min-width="140px">
-          <template slot-scope="scope">{{ numFilter(scope.row.value8) }}</template>
-        </el-table-column>
-        <el-table-column label="9鏈�" align="center" min-width="140px">
-          <template slot-scope="scope">{{ numFilter(scope.row.value9) }}</template>
-        </el-table-column>
-        <el-table-column label="10鏈�" align="center" min-width="140px">
-          <template slot-scope="scope">{{ numFilter(scope.row.value10) }}</template>
-        </el-table-column>
-        <el-table-column label="11鏈�" align="center" min-width="140px">
-          <template slot-scope="scope">{{ numFilter(scope.row.value11) }}</template>
-        </el-table-column>
-        <el-table-column label="12鏈�" align="center" min-width="140px">
-          <template slot-scope="scope">{{ numFilter(scope.row.value12) }}</template>
-        </el-table-column>
-      </el-table>
-      <el-row :gutter="32" style="margin:30px 0">
-        <el-col :xs="24" :sm="24" :lg="12">
-          <div class="chart-wrapper">
-            <line-chart ref="LineChart" :chart-data="lineChartData"/>
-          </div>
-        </el-col>
-        <el-col :xs="24" :sm="24" :lg="12">
-          <div class="chart-wrapper">
-            <bar-chart ref="BarChart" :chart-data="lineChartData"/>
-          </div>
-        </el-col>
-      </el-row>
-    </basic-container>
-  </div>
-</template>
-
-<script>
-import {getDataList, exportList, getlistChart} from "@/api/keyEquipment/yearkeyEquipment/yearkeyEquipment";
-import {getPointFacility} from "@/api/keyEquipment/dailykeyEquipment/dailykeyEquipment";
-import LineChart from './LineChart'
-import BarChart from "./BarChart";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  components: {
-    LineChart,
-    BarChart
-  },
-  mixins: [mixins],
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      checked: false,
-      dateRange: [],
-      dateTypeOptions: [],
-      energyList: [],
-      tableData: [],
-      tableHead: [],
-      indexCategoryOptions: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        indexCode: undefined,
-        indexId: undefined,
-        dataTime: undefined,
-        timeType: "MONTH",
-        indexType: undefined,
-        indexStorageId: undefined,
-      },
-      skinName: "",
-      lineChartData: {expectedData: [], actualData: []},
-    };
-  },
-  created() {
-    this.getDicts("report_form").then(response => {
-      this.dateTypeOptions = response.data;
-      //this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-    });
-    this.getConfigKey("comprehensive").then(response => {
-      this.skinName = response.msg;
-    });
-    this.getList();
-    this.getTime();
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 210+ 'px'
-    },
-    getList() {
-      this.queryParams.indexCode = this.$route.query.modelCode;
-      var date = new Date()
-      var year = date.getFullYear()
-      var month = date.getMonth() + 1
-      if (this.queryParams.dataTime == undefined) {
-        this.queryParams.dataTime = year + '-' + month
-      }
-      let times = this.queryParams.dataTime.slice(0, 4);
-      this.queryParams.beginTime = times + "-01-01 00:00:00"
-      this.queryParams.endTime = times + "-12-31 00:00:00"
-      getDataList(this.queryParams).then(response => {
-        this.energyList = response.rows;
-      })
-      getPointFacility().then(response => {
-        this.indexCategoryOptions = response.data;
-      });
-    },
-    selectChange(row) {
-      this.queryParams.indexId = row.indexId;
-      getlistChart(this.queryParams).then(response => {
-        let actualData = [];
-        let expectedData = [];
-        let title = "";
-        response.data.forEach(item => {
-          expectedData.push(this.numFilter(item.value));
-          actualData.push(item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "鏈�");
-          title = item.indexName + "(" + item.unitId + ")";
-        })
-        this.lineChartData.actualData = actualData;
-        this.lineChartData.expectedData = expectedData;
-        this.lineChartData.title = title
-        this.$refs.LineChart.initChart(this.lineChartData);
-        this.$refs.BarChart.initChart(this.lineChartData);
-      })
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-      this.selectChange();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.queryParams.indexStorageId = '';
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭缁煎悎鑳借��?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportList(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    },
-    getSummaries(param) {
-      const {columns, data} = param;
-      const sums = [];
-      columns.forEach((column, index) => {
-        if (index === 0) {
-          sums[index] = '';
-          return;
-        }
-        if (index === 1) {
-          sums[index] = '鍚堣';
-          return;
-        }
-        const values = data.map(item => Number(item[column.property]));
-        if (!values.every(value => isNaN(value))) {
-          sums[index] = values.reduce((prev, curr) => {
-            const value = Number(curr);
-            if (!isNaN(value)) {
-              return prev + curr;
-            } else {
-              return prev;
-            }
-          }, 0);
-          //sums[index];
-          sums[index] = this.numFilter(sums[index])
-        } else {
-          sums[index] = '0';
-        }
-      });
-      return sums;
-    },
-    numFilter(value) {// 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = '';
-      if (!isNaN(value) && value !== '' && value !== null) {
-        realVal = parseFloat(value).toFixed(this.skinName)
-      } else {
-        realVal = '0'
-      }
-      return realVal
-    },
-    getTime() {
-      var date = new Date()
-      var year = date.getFullYear()
-      var month = date.getMonth() + 1
-      var date = date.getDate()
-      month = month < 10 ? '0' + month : month
-      date = date < 10 ? '0' + date : date
-      this.queryParams.dataTime = year + '-' + month
-    },
-
-    handleTime(date) {
-      if (date == 'MONTH') {
-        this.dateTypes = 'year',
-            this.valueFormat = 'yyyy'
-      } else if (date == 'DAY') {
-        this.dateTypes = 'month',
-            this.valueFormat = 'yyyy-MM'
-      } else {
-        this.dateTypes = 'date',
-            this.valueFormat = 'yyyy-MM-dd'
-      }
-    },
-  }
-};
-</script>
-<style lang="scss" scoped>
-.el-form-item {
-  margin-bottom: 0;
-}
-
-.dashboard-editor-container {
-  padding: 32px;
-  background-color: rgb(240, 242, 245);
-  position: relative;
-
-  .chart-wrapper {
-    background: #fff;
-    padding: 16px 16px 0;
-    margin-bottom: 32px;
-  }
-}
-
-@media (max-width: 1024px) {
-  .chart-wrapper {
-    padding: 8px;
-  }
-}
-
-.live {
-  position: fixed;
-  right: 0px;
-  top: 70px;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  width: 100px;
-  height: 60px;
-  background-color: red;
-  animation: fade 600ms infinite;
-  -webkit-animation: fade 600ms infinite;
-}
-
-.live_content {
-  font-size: 18px;
-  color: white;
-  font-weight: bold;
-}
-
-.live_number {
-  font-size: 32px;
-  color: white;
-  font-weight: bolder;
-}
-
-@keyframes fade {
-  from {
-    opacity: 1.0;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1.0;
-  }
-}
-
-@-webkit-keyframes fade {
-  from {
-    opacity: 1.0;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1.0;
-  }
-}
-
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/login.vue b/energy_management_ui/src/views/login.vue
deleted file mode 100644
index c157d74..0000000
--- a/energy_management_ui/src/views/login.vue
+++ /dev/null
@@ -1,263 +0,0 @@
-<template>
-  <div class="logo-page">
-    <div class="logo-png">
-      <img
-        style="width: 80px;margin-right: 30px "
-        src="@/assets/logo/logo.png"
-        alt=""
-      />
-      <div>浜戣矾缁煎悎鑳芥簮绠$悊绯荤粺</div>
-    </div>
-    <div class="login">
-      <div class="demo-image">
-        <el-image style="width: 80%;" :src="logo"></el-image>
-      </div>
-      <div class="login-form">
-        <el-form ref="loginForm" :model="loginForm" :rules="loginRules">
-          <div class="title">鐢ㄦ埛鐧诲綍</div>
-          <!-- <div class="logo-view title">
-            <img
-              style="width: 100px;margin-right: 30px "
-              :src="'https://www.toray.cn/shared/images/toray_logo_ch.svg'"
-              alt=""
-            />
-            <div>缁煎悎鑳芥簮绠$悊绯荤粺</div>
-          </div> -->
-          <el-form-item prop="username" style="margin-bottom: 21px">
-            <el-input
-              v-model="loginForm.username"
-              type="text"
-              auto-complete="off"
-              placeholder="鐢ㄦ埛鍚�"
-            >
-            </el-input>
-          </el-form-item>
-          <el-form-item prop="password" style="margin-bottom: 21px">
-            <el-input
-              v-model="loginForm.password"
-              type="password"
-              auto-complete="off"
-              placeholder="瀵嗙爜"
-              @keyup.enter.native="handleLogin"
-            >
-            </el-input>
-          </el-form-item>
-          <el-form-item prop="code" style="margin-bottom: 21px">
-            <el-input
-              v-model="loginForm.code"
-              auto-complete="off"
-              placeholder="楠岃瘉鐮�"
-              style="width: 100%"
-              @keyup.enter.native="handleLogin"
-            >
-              <img
-                :src="codeUrl"
-                @click="getCode"
-                slot="suffix"
-                style="height: 31px;  padding: 6px 0 0 0;"
-              />
-            </el-input>
-          </el-form-item>
-          <el-checkbox v-model="loginForm.rememberMe" style="margin:0 0 25px 0;"
-            >璁颁綇瀵嗙爜
-          </el-checkbox>
-          <el-form-item style="width:100%;">
-            <el-button
-              :loading="loading"
-              size="medium"
-              type="primary"
-              style="width:100%;"
-              @click.native.prevent="handleLogin"
-            >
-              <span v-if="!loading">鐧� 褰�</span>
-              <span v-else>鐧� 褰� 涓�...</span>
-            </el-button>
-          </el-form-item>
-        </el-form>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import { getCodeImg } from "@/api/login";
-import Cookies from "js-cookie";
-import { decrypt, encrypt } from "@/utils/jsencrypt";
-import logoImg from "@/assets/logo/logo-page-left.png";
-
-export default {
-  data() {
-    return {
-      codeUrl: "",
-      cookiePassword: "",
-      loginForm: {
-        username: "",
-        password: "",
-        rememberMe: false,
-        code: "",
-        uuid: ""
-      },
-      loginRules: {
-        username: [
-          { required: true, trigger: "blur", message: "鐢ㄦ埛鍚嶄笉鑳戒负绌�" }
-        ],
-        password: [
-          { required: true, trigger: "blur", message: "瀵嗙爜涓嶈兘涓虹┖" }
-        ],
-        code: [{ required: true, trigger: "change", message: "楠岃瘉鐮佷笉鑳戒负绌�" }]
-      },
-      loading: false,
-      redirect: undefined,
-      logo: logoImg
-    };
-  },
-  watch: {
-    $route: {
-      handler: function(route) {
-        this.redirect = route.query && route.query.redirect;
-      },
-      immediate: true
-    }
-  },
-  created() {
-    this.getCode();
-    this.getCookie();
-  },
-  methods: {
-    getCode() {
-      getCodeImg().then(res => {
-        this.codeUrl = "data:image/gif;base64," + res.img;
-        this.loginForm.uuid = res.uuid;
-      });
-    },
-    getCookie() {
-      const username = Cookies.get("username");
-      const password = Cookies.get("password");
-      const rememberMe = Cookies.get("rememberMe");
-      this.loginForm = {
-        username: username === undefined ? this.loginForm.username : username,
-        password:
-          password === undefined ? this.loginForm.password : decrypt(password),
-        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
-      };
-    },
-    handleLogin() {
-      this.$refs.loginForm.validate(valid => {
-        if (valid) {
-          this.loading = true;
-          if (this.loginForm.rememberMe) {
-            Cookies.set("username", this.loginForm.username, { expires: 30 });
-            Cookies.set("password", encrypt(this.loginForm.password), {
-              expires: 30
-            });
-            Cookies.set("rememberMe", this.loginForm.rememberMe, {
-              expires: 30
-            });
-          } else {
-            Cookies.remove("username");
-            Cookies.remove("password");
-            Cookies.remove("rememberMe");
-          }
-          this.$store
-            .dispatch("Login", this.loginForm)
-            .then(() => {
-              this.loading = false;
-              this.$router.push({ path: this.redirect || "/" });
-            })
-            .catch(() => {
-              this.loading = false;
-              this.getCode();
-            });
-        }
-      });
-    }
-  }
-};
-</script>
-
-<style rel="stylesheet/scss" lang="scss" scoped>
-.logo-page {
-  height: 100%;
-  // background-image: url("../assets/image/bg.jpg");
-  background-image: url("../assets/image/login-background.png");
-  background-size: cover;
-  overflow: hidden;
-  // background: ;
-  // background: linear-gradient(80deg, #073b70 0%, rgba(7, 59, 112, 0) 100%);
-  // background: linear-gradient(90deg, #101d32 0%, rgba(0, 0, 0, 0.5) 100%);
-
-  .logo-png {
-    font-size: 28px;
-    display: flex;
-    align-items: center;
-    font-weight: bold;
-    color: #333;
-    padding: 3.4% 0 0 74px;
-    position: absolute;
-  }
-
-  .login {
-    display: flex;
-    // justify-content: space-between;
-    justify-content: center;
-    padding: 0 17.24%;
-    height: calc(100% - 73px * 2);
-    align-items: center;
-  }
-
-  .title {
-    font-size: 22px;
-    color: #38bcbf;
-    margin-bottom: 32px;
-    font-weight: 600;
-  }
-
-  .login-form {
-    border-radius: 10px;
-    // background: #ffffff;
-    width: 36%;
-    padding: 32px 64px;
-    // background: #061844;
-    border-radius: 4px;
-    // box-shadow: 0 7px 14px 6px #2f4b9a;
-    margin-top: 6px;
-    // border: 1px solid #061844;
-    background: rgba($color: #437ed0, $alpha: 0.06);
-
-    .logo-view {
-      display: flex;
-      align-items: center;
-      color: #fff;
-      font-size: 26px;
-      font-weight: 600;
-    }
-
-    ::v-deep .el-input__inner {
-      background: rgb(255, 255, 255, 0.6) !important;
-      background-color: rgb(255, 255, 255, 0.6) !important;
-      border: 1px solid #dcdfe6 !important;
-      color: #606266 !important;
-    }
-
-    .el-input {
-      height: 38px;
-
-      input {
-        height: 38px;
-      }
-    }
-
-    .input-icon {
-      height: 39px;
-      width: 14px;
-      margin-left: 2px;
-    }
-  }
-
-  .login-tip {
-    font-size: 13px;
-    text-align: center;
-    color: #bfbfbf;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/login/auth-redirect.vue b/energy_management_ui/src/views/login/auth-redirect.vue
deleted file mode 100644
index 7df8934..0000000
--- a/energy_management_ui/src/views/login/auth-redirect.vue
+++ /dev/null
@@ -1,15 +0,0 @@
-<script>
-export default {
-  name: 'AuthRedirect',
-  created() {
-    const hash = window.location.search.slice(1)
-    if (window.localStorage) {
-      window.localStorage.setItem('x-admin-oauth-code', hash)
-      window.close()
-    }
-  },
-  render: function(h) {
-    return h() // avoid warning message
-  }
-}
-</script>
diff --git a/energy_management_ui/src/views/login/components/SocialSignin.vue b/energy_management_ui/src/views/login/components/SocialSignin.vue
deleted file mode 100644
index e9bf4f2..0000000
--- a/energy_management_ui/src/views/login/components/SocialSignin.vue
+++ /dev/null
@@ -1,72 +0,0 @@
-<template>
-  <div class="social-signup-container">
-    <div class="sign-btn" @click="wechatHandleClick('wechat')">
-      <span class="wx-svg-container"><svg-icon icon-class="wechat" class="icon" /></span>
-      WeChat
-    </div>
-    <div class="sign-btn" @click="tencentHandleClick('tencent')">
-      <span class="qq-svg-container"><svg-icon icon-class="qq" class="icon" /></span>
-      QQ
-    </div>
-  </div>
-</template>
-
-<script>
-// import openWindow from '@/utils/open-window'
-
-export default {
-  name: 'SocialSignin',
-  methods: {
-    wechatHandleClick(thirdpart) {
-      alert('ok')
-      // this.$store.commit('SET_AUTH_TYPE', thirdpart)
-      // const appid = 'xxxxx'
-      // const redirect_uri = encodeURIComponent('xxx/redirect?redirect=' + window.location.origin + '/auth-redirect')
-      // const url = 'https://open.weixin.qq.com/connect/qrconnect?appid=' + appid + '&redirect_uri=' + redirect_uri + '&response_type=code&scope=snsapi_login#wechat_redirect'
-      // openWindow(url, thirdpart, 540, 540)
-    },
-    tencentHandleClick(thirdpart) {
-      alert('ok')
-      // this.$store.commit('SET_AUTH_TYPE', thirdpart)
-      // const client_id = 'xxxxx'
-      // const redirect_uri = encodeURIComponent('xxx/redirect?redirect=' + window.location.origin + '/auth-redirect')
-      // const url = 'https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=' + client_id + '&redirect_uri=' + redirect_uri
-      // openWindow(url, thirdpart, 540, 540)
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-  .social-signup-container {
-    margin: 20px 0;
-    .sign-btn {
-      display: inline-block;
-      cursor: pointer;
-    }
-    .icon {
-      color: #fff;
-      font-size: 24px;
-      margin-top: 8px;
-    }
-    .wx-svg-container,
-    .qq-svg-container {
-      display: inline-block;
-      width: 40px;
-      height: 40px;
-      line-height: 40px;
-      text-align: center;
-      padding-top: 1px;
-      border-radius: 4px;
-      margin-bottom: 20px;
-      margin-right: 5px;
-    }
-    .wx-svg-container {
-      background-color: #24da70;
-    }
-    .qq-svg-container {
-      background-color: #6BA2D6;
-      margin-left: 50px;
-    }
-  }
-</style>
diff --git a/energy_management_ui/src/views/meter/implement/importFileTable.vue b/energy_management_ui/src/views/meter/implement/importFileTable.vue
deleted file mode 100644
index 8a00c5f..0000000
--- a/energy_management_ui/src/views/meter/implement/importFileTable.vue
+++ /dev/null
@@ -1,205 +0,0 @@
-<template>
-  <!-- 瀵煎叆琛� -->
-  <el-dialog :title="title" :visible.sync="open"  :destroy-on-close="true" width="800px" top="5vh">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鏂囦欢鍚�" prop="fileName">
-        <el-input
-          v-model="queryParams.fileName"
-          placeholder="璇疯緭鍏ユ枃浠跺悕"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-upload
-      ref="upload"
-      :limit="1"
-      :headers="uploadData.headers"
-      :action="uploadData.url + '?implementId=' + queryParams.implementId"
-      :on-preview="handlePreview"
-      :on-progress="handleFileUploadProgress"
-      :on-success="handleFileSuccess"
-      :auto-upload="false"
-    >
-      <el-button slot="trigger" size="small" type="primary">閫夊彇鏂囦欢</el-button>
-      <el-button style="margin-left: 10px;" size="small" type="success" @click="submitFileForm">涓婁紶鍒版湇鍔″櫒</el-button>
-      <div class="el-upload__tip" style="color:red" slot="tip">娉ㄦ剰鎺у埗鏂囦欢澶у皬锛屼笉瑕佽秴杩�50M</div>
-    </el-upload>
-
-    <el-row>
-      <el-table v-loading="loading" :data="annexList" >
-        <el-table-column label="鏂囦欢鍚�" align="center" prop="fileName"  />
-        <el-table-column label="涓婁紶鏃堕棿" align="center" prop="createTime"  />
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="seeImpFile(scope.row)"
-              v-hasPermi="['meter:annex:assignDownload']"
-            >鏌ョ湅</el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['meter:annex:remove']"
-            >鍒犻櫎</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        v-show="total>0"
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-    </el-row>
-    <div slot="footer" class="dialog-footer">
-      <el-button @click="handclose">鍙� 娑�</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { listAnnex,delAnnex } from "@/api/meter/annex";
-import { getToken } from "@/utils/auth";
-const baseURL = process.env.VUE_APP_BASE_API
-// 閫氱敤涓嬭浇鏂规硶
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 璁¢噺鍣ㄥ叿妗f闄勪欢琛ㄦ牸鏁版嵁
-      annexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      idOptions: [],
-      // 鍏宠仈meter_implement.id瀛楀吀
-      implementIdOptions: [],
-      // 鏂囦欢鍚嶅瓧鍏�
-      fileNameOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        implementId:'',
-        tableName: undefined
-      },
-      uploadData: {
-        // 鏄惁鏄剧ず寮瑰嚭灞傦紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        open: false,
-        // 寮瑰嚭灞傛爣棰橈紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        title: "",
-        // 鏄惁绂佺敤涓婁紶
-        isUploading: false,
-        // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-        headers: { Authorization: "Bearer " + getToken() },
-        // 涓婁紶鐨勫湴鍧�
-        url: process.env.VUE_APP_BASE_API + "/meter/annex/fileImport"
-      },
-    };
-  },
-  methods: {
-    // 鏄剧ず寮规
-    show(impid,code) {
-      this.reset();
-      this.queryParams.implementId = impid;
-      this.getList();
-      this.title='缂栧彿 '+code+' 闄勪欢';
-      this.open = true;
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.queryParams = {
-        pageNum: 1,
-        pageSize: 10,
-        implementId:'',
-        tableName: undefined
-      };
-      //娓呯┖涓婁紶缁勪欢鐨勬枃浠跺垪琛�
-      this.resetForm("queryForm");
-    },
-    // 鏌ヨ琛ㄦ暟鎹�
-    getList() {
-      listAnnex(this.queryParams).then(response => {
-        this.annexList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-       this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 鏌ョ湅鎸夐挳鎿嶄綔 */
-    seeImpFile(row) {
-      this.fileDownload(row.fileName,row.filePath,false);
-    },
-    handclose()
-    {
-      this.open=false;
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      this.$confirm('鏄惁纭鍒犻櫎闄勪欢鍚嶇О涓�"' + row.fileName + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function() {
-        return delAnnex(row.id);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function() {});
-    },
-    // 闄勪欢涓婁紶涓鐞�
-    handleFileUploadProgress(event, file, fileList) {
-      this.uploadData.isUploading = true;
-    },
-    // 闄勪欢涓婁紶鎴愬姛澶勭悊
-    handleFileSuccess(response, file, fileList) {
-      this.uploadData.open = false;
-      this.uploadData.isUploading = false;
-      this.$refs.upload.clearFiles();
-      this.$alert(response.msg, "闄勪欢缁撴灉", { dangerouslyUseHTMLString: true });
-      this.getList();
-    },
-    // 闄勪欢涓婁紶鏂囦欢
-    submitFileForm() {
-      this.$refs.upload.submit();
-    },
-    handlePreview(file) {
-      console.log(file);
-    },
-  }
-};
-
-</script>
diff --git a/energy_management_ui/src/views/meter/implement/importIndexTable.vue b/energy_management_ui/src/views/meter/implement/importIndexTable.vue
deleted file mode 100644
index fdc13cd..0000000
--- a/energy_management_ui/src/views/meter/implement/importIndexTable.vue
+++ /dev/null
@@ -1,210 +0,0 @@
-<template>
-  <!-- 瀵煎叆琛� -->
-  <el-dialog
-    :title="title"
-    :visible.sync="open"
-    :destroy-on-close="true"
-    :append-to-body="true"
-    width="800px"
-    top="5vh"
-  >
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item>
-        <el-button icon="el-icon-refresh" size="mini" @click="createIndex"
-          >鐢熸垚鎸囨爣</el-button
-        >
-      </el-form-item>
-    </el-form>
-
-    <el-row>
-      <el-table v-loading="loading" :data="impIndexList" max-height="350">
-        <el-table-column label="鎸囨爣缂栫爜" align="center" prop="code" />
-        <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="name" />
-        <el-table-column
-          label="鎸囨爣绫诲瀷"
-          align="center"
-          prop="indexType"
-          :formatter="indexTypeFormat"
-        />
-        <el-table-column
-          label="鍗曚綅"
-          align="center"
-          prop="unitId"
-          :formatter="unitIdFormat"
-        />
-        <el-table-column
-          label="鎿嶄綔"
-          align="center"
-          class-name="small-padding fixed-width"
-        >
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['meter:annex:remove']"
-              >鍒犻櫎</el-button
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-      <!--      <pagination-->
-      <!--        v-show="total>0"-->
-      <!--        :total="total"-->
-      <!--        :page.sync="queryParams.pageNum"-->
-      <!--        :limit.sync="queryParams.pageSize"-->
-      <!--        @pagination="getList"-->
-      <!--      />-->
-    </el-row>
-    <div slot="footer" class="dialog-footer">
-      <el-button @click="handclose">鍙� 娑�</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { listIndex, addIndex, delIndex } from "@/api/meter/index";
-let meterid = "";
-// 閫氱敤涓嬭浇鏂规硶
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      qjcode: "",
-      // 璁¢噺鍣ㄥ叿妗f  鎸囨爣  琛ㄦ牸鏁版嵁
-      impIndexList: [],
-      // 璁¢噺鍣ㄥ叿妗f  鎸囨爣鐨� 鍗曚綅闆嗗悎
-      unitIdList: [],
-      // 璁¢噺鍣ㄥ叿妗f 鎸囨爣鐨� 绯荤粺鎸囨爣绫诲瀷
-      indexTypeList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      idOptions: [],
-      // 鍏宠仈meter_implement.id瀛楀吀
-      implementIdOptions: [],
-      // 鏂囦欢鍚嶅瓧鍏�
-      fileNameOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        implementId: "",
-        tableName: undefined
-      }
-    };
-  },
-  created() {
-    this.getDicts("sys_unit").then(response => {
-      this.unitIdList = response.data;
-    });
-    this.getDicts("sys_index_type").then(response => {
-      this.indexTypeList = response.data;
-    });
-  },
-  methods: {
-    // 鏄剧ず寮规
-    show(impid, code) {
-      this.reset();
-      this.qjcode = code;
-      this.queryParams.implementId = impid;
-      this.meterid = impid;
-      this.getList();
-      this.title = "缂栧彿 " + code + " 鎸囨爣";
-      this.open = true;
-    },
-    // 鎸囨爣绫诲瀷瀛楀吀缈昏瘧
-    indexTypeFormat(row, column) {
-      return this.selectDictLabel(this.indexTypeList, row.indexType);
-    },
-    // 鍗曚綅 瀛楀吀缈昏瘧
-    unitIdFormat(row, column) {
-      return this.selectDictLabel(this.unitIdList, row.unitId);
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.queryParams = {
-        pageNum: 1,
-        pageSize: 10,
-        implementId: "",
-        tableName: undefined
-      };
-      //娓呯┖涓婁紶缁勪欢鐨勬枃浠跺垪琛�
-      this.resetForm("queryForm");
-    },
-    // 鏌ヨ 璁¢噺鍣ㄥ叿鐨勬寚鏍�
-    getList() {
-      listIndex(this.queryParams.implementId).then(response => {
-        this.impIndexList = response.data;
-        this.loading = false;
-      });
-    },
-    // 鐢熸垚璁¢噺鍣ㄥ叿鎸囨爣
-    createIndex() {
-      let aa = this.meterid;
-      console.log("aa===" + aa);
-      this.$confirm(
-        '鏄惁纭閲嶆柊鐢熸垚鍣ㄥ叿缂栫爜涓�"' +
-          this.qjcode +
-          '"鐨勬寚鏍囧悧?閲嶆柊鐢熸垚鍚庢墍鏈夋寚鏍囦細杩樺師鍒版ā鏉跨姸鎬�',
-        "璀﹀憡",
-        {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }
-      )
-        .then(function() {
-          return addIndex(aa);
-        })
-        .then(() => {
-          this.getList();
-          this.msgSuccess("鎸囨爣鐢熸垚鎴愬姛");
-        })
-        .catch(function() {});
-    },
-    /** 鍏抽棴鎸夐挳鎿嶄綔 */
-    handclose() {
-      this.open = false;
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      this.$confirm(
-        '鏄惁纭鍒犻櫎鎸囨爣缂栫爜涓�"' + row.code + '"鐨勬寚鏍囧悧?',
-        "璀﹀憡",
-        {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }
-      )
-        .then(function() {
-          return delIndex(row.indexId);
-        })
-        .then(() => {
-          this.getList();
-          this.msgSuccess("鎸囨爣鍒犻櫎鎴愬姛");
-        })
-        .catch(function() {});
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/meter/implement/index.vue b/energy_management_ui/src/views/meter/implement/index.vue
deleted file mode 100644
index ca724a5..0000000
--- a/energy_management_ui/src/views/meter/implement/index.vue
+++ /dev/null
@@ -1,876 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form
-        :model="queryParams"
-        ref="queryForm"
-        label-width="72px"
-        class="special-form"
-      >
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="缂栫爜" prop="code">
-              <el-input
-                v-model="queryParams.code"
-                placeholder="璇疯緭鍏ョ紪鐮�"
-                clearable
-                size="small"
-                @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鍣ㄥ叿鍚嶇О" prop="meterName">
-              <el-input
-                v-model="queryParams.meterName"
-                placeholder="璇疯緭鍏ュ櫒鍏峰悕绉�"
-                clearable
-                size="small"
-                @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="绉嶇被" prop="meterType">
-              <el-select
-                v-model="queryParams.meterType"
-                placeholder="璇烽�夋嫨绉嶇被"
-                clearable
-                size="small"
-                style="width: 100%"
-              >
-                <el-option
-                  v-for="dict in meterTypeOptions"
-                  :key="dict.dictValue"
-                  :label="dict.dictLabel"
-                  :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <!--          <el-col :span="6">-->
-          <!--            <el-form-item label="娴嬮噺鑼冨洿" prop="measureRange">-->
-          <!--              <el-input-->
-          <!--                  v-model="queryParams.measureRange"-->
-          <!--                  placeholder="璇疯緭鍏ユ祴閲忚寖鍥�"-->
-          <!--                  clearable-->
-          <!--                  size="small"-->
-          <!--                  @keyup.enter.native="handleQuery"-->
-          <!--              />-->
-          <!--            </el-form-item>-->
-          <!--          </el-col>-->
-          <!--          <el-col :span="6">-->
-          <!--            <el-form-item label="鐢熶骇鍘傚晢" prop="manufacturer">-->
-          <!--              <el-input-->
-          <!--                  v-model="queryParams.manufacturer"-->
-          <!--                  placeholder="璇疯緭鍏ョ敓浜у巶鍟�"-->
-          <!--                  clearable-->
-          <!--                  size="small"-->
-          <!--                  @keyup.enter.native="handleQuery"-->
-          <!--              />-->
-          <!--            </el-form-item>-->
-          <!--          </el-col>-->
-          <!--          <el-col :span="6">-->
-          <!--            <el-form-item label="瀹夎浣嶇疆" prop="installactionLocation">-->
-          <!--              <el-input-->
-          <!--                  v-model="queryParams.installactionLocation"-->
-          <!--                  placeholder="璇疯緭鍏ュ畨瑁呬綅缃�"-->
-          <!--                  clearable-->
-          <!--                  size="small"-->
-          <!--                  @keyup.enter.native="handleQuery"-->
-          <!--              />-->
-          <!--            </el-form-item>-->
-          <!--          </el-col>-->
-          <el-col :span="6">
-            <el-form-item class="operation">
-              <el-button
-                type="primary"
-                icon="el-icon-search"
-                size="mini"
-                @click="handleQuery"
-                >鎼滅储</el-button
-              >
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-                >閲嶇疆</el-button
-              >
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-            type="primary"
-            icon="el-icon-plus"
-            size="mini"
-            @click="handleAdd"
-            v-hasPermi="['meter:implement:add']"
-            >鏂板
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            type="success"
-            icon="el-icon-edit"
-            size="mini"
-            :disabled="single"
-            @click="handleUpdate"
-            v-hasPermi="['meter:implement:edit']"
-            >淇敼
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            type="danger"
-            icon="el-icon-delete"
-            size="mini"
-            :disabled="multiple"
-            @click="handleDelete"
-            v-hasPermi="['meter:implement:remove']"
-            >鍒犻櫎
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            type="warning"
-            icon="el-icon-download"
-            size="mini"
-            @click="handleExport"
-            v-hasPermi="['meter:implement:export']"
-            >瀵煎嚭
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            type="info"
-            icon="el-icon-upload2"
-            size="mini"
-            @click="handleImport"
-            v-hasPermi="['meter:implement:import']"
-            >瀵煎叆
-          </el-button>
-        </el-col>
-      </el-row>
-      <el-table
-        v-loading="loading"
-        :data="implementList"
-        :height="height"
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column
-          label="缂栫爜"
-          align="center"
-          prop="code"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="鍣ㄥ叿鍚嶇О"
-          align="center"
-          prop="meterName"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="绉嶇被"
-          align="center"
-          prop="meterType"
-          :formatter="meterTypeFormat"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="瑙勬牸鍨嬪彿"
-          align="center"
-          prop="modelNumber"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="娴嬮噺鑼冨洿"
-          align="center"
-          prop="measureRange"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="鐢熶骇鍘傚晢"
-          align="center"
-          prop="manufacturer"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="瀹夎浣嶇疆"
-          align="center"
-          prop="installactionLocation"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="鐘舵��"
-          align="center"
-          prop="meterStatus"
-          :formatter="meterStatusFormat"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="鎿嶄綔"
-          align="center"
-          width="240"
-          class-name="small-padding fixed-width"
-        >
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="openImportFileTable(scope.row)"
-              v-hasPermi="['tool:gen:import']"
-              >闄勪欢
-            </el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="openImportIndexTable(scope.row)"
-              v-hasPermi="['']"
-              >鎸囨爣
-            </el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="handleUpdate(scope.row)"
-              v-hasPermi="['meter:implement:edit']"
-              >淇敼
-            </el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['meter:implement:remove']"
-              >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-    </basic-container>
-    <!-- 娣诲姞鎴栦慨鏀硅閲忓櫒鍏锋。妗堢淮鎶ゅ璇濇 -->
-    <el-dialog
-      :title="title"
-      :visible.sync="open"
-      width="820px"
-      class="dialog-form-row"
-    >
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-row :gutter="24">
-          <el-col :span="8">
-            <el-form-item label="缂栫爜" prop="code" label-width="110px">
-              <el-input v-model="form.code" placeholder="璇疯緭鍏ョ紪鐮�" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鍣ㄥ叿鍚嶇О" prop="meterName" label-width="80px">
-              <el-input v-model="form.meterName" placeholder="璇疯緭鍏ュ櫒鍏峰悕绉�" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="绉嶇被" prop="meterType">
-              <el-select v-model="form.meterType" placeholder="璇烽�夋嫨绉嶇被">
-                <el-option
-                  v-for="dict in meterTypeOptions"
-                  :key="dict.dictValue"
-                  :label="dict.dictLabel"
-                  :value="dict.dictValue"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item
-              label="瑙勬牸鍨嬪彿"
-              prop="modelNumber"
-              label-width="110px"
-            >
-              <el-input
-                v-model="form.modelNumber"
-                placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="娴嬮噺鑼冨洿" prop="measureRange">
-              <el-input
-                v-model="form.measureRange"
-                placeholder="璇疯緭鍏ユ祴閲忚寖鍥�"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鐢熶骇鍘傚晢" prop="manufacturer">
-              <el-input
-                v-model="form.manufacturer"
-                placeholder="璇疯緭鍏ョ敓浜у巶鍟�"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="24">
-          <el-col :span="8">
-            <el-form-item
-              label="璐熻矗浜�"
-              prop="personCharge"
-              label-width="110px"
-            >
-              <el-input
-                v-model="form.personCharge"
-                placeholder="璇疯緭鍏ヨ礋璐d汉"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="瀹夎浣嶇疆" prop="installactionLocation">
-              <el-input
-                v-model="form.installactionLocation"
-                placeholder="璇疯緭鍏ュ畨瑁呬綅缃�"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="璧峰鏃堕棿" prop="startTime">
-              <el-date-picker
-                clearable
-                size="small"
-                style="width: 100%"
-                v-model="form.startTime"
-                type="date"
-                value-format="yyyy-MM-dd"
-                placeholder="閫夋嫨璧峰鏃堕棿"
-              >
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="24">
-          <el-col :span="8">
-            <el-form-item
-              label="妫�瀹氬懆鏈�(澶�)"
-              prop="checkCycle"
-              label-width="110px"
-            >
-              <el-input
-                v-model="form.checkCycle"
-                placeholder="璇疯緭鍏ユ瀹氬懆鏈�"
-                oninput="if(value.length>4)value=value.slice(0,4)"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鐘舵��" prop="meterStatus">
-              <el-select v-model="form.meterStatus" placeholder="璇烽�夋嫨鐘舵��">
-                <el-option
-                  v-for="dict in meterStatusOptions"
-                  :key="dict.dictValue"
-                  :label="dict.dictLabel"
-                  :value="dict.dictValue"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鎶曡繍鏃堕棿" prop="putrunTime">
-              <el-date-picker
-                clearable
-                size="small"
-                style="width: 100%"
-                v-model="form.putrunTime"
-                type="date"
-                value-format="yyyy-MM-dd"
-                placeholder="閫夋嫨鎶曡繍鏃堕棿"
-              >
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="24">
-          <el-col :span="8">
-            <el-form-item
-              label="鎻愰啋鍛ㄦ湡(澶�)"
-              prop="reminderCycle"
-              label-width="110px"
-            >
-              <el-input
-                v-model="form.reminderCycle"
-                placeholder="璇疯緭鍏ユ彁閱掑懆鏈�"
-                oninput="if(value.length>4)value=value.slice(0,4)"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="24">
-          <el-col :span="24">
-            <el-form-item label="澶囨敞" prop="remark" label-width="110px">
-              <el-input
-                v-model="form.remark"
-                type="textarea"
-                placeholder="璇疯緭鍏ュ唴瀹�"
-              ></el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-
-    <!-- 璁¢噺鍣ㄥ叿妗f 瀵煎叆瀵硅瘽妗� -->
-    <el-dialog
-      :title="upload.title"
-      :visible.sync="upload.open"
-      :destroy-on-close="true"
-      width="400px"
-    >
-      <el-upload
-        ref="upload"
-        :limit="1"
-        :accept="upload.accept"
-        :headers="upload.headers"
-        :action="upload.url"
-        :disabled="upload.isUploading"
-        :on-progress="handleFileUploadProgress"
-        :on-success="handleFileSuccess"
-        :auto-upload="false"
-        drag
-      >
-        <i class="el-icon-upload"></i>
-        <div class="el-upload__text">
-          灏嗘枃浠舵嫋鍒版澶勶紝鎴�
-          <em>鐐瑰嚮涓婁紶</em>
-        </div>
-        <div class="el-upload__tip" slot="tip">
-          <el-link
-            type="info"
-            style="font-size:12px;color:blue;"
-            @click="importTemplate"
-            >涓嬭浇妯℃澘</el-link
-          >
-        </div>
-        <div class="el-upload__tip" style="color:red" slot="tip">
-          瀵煎叆鎻愮ず锛�<br />1銆佹柊澧炲鍏�,浠呭厑璁稿鍏モ�渪ls鈥濇垨鈥渪lsx鈥濇牸寮忔枃浠讹紒
-          <br />2銆佺紪鐮佸繀椤诲敮涓�,閲嶅鏁版嵁鏃犳硶瀵煎叆
-          <br />3銆佺绫诲拰鐘舵�佸~鍐欓敊璇殑鏁版嵁鏃犳硶瀵煎叆
-          <br />4銆佹瀹氬懆鏈熴�佹彁閱掑懆鏈熷ぇ浜�0姝f暣鏁�,濉啓閿欒鍒欓粯璁や负1
-          <br />5銆佽捣濮嬫椂闂村~鍐欓敊璇垨涓嶅~鍒欓粯璁や负绌�
-        </div>
-      </el-upload>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button>
-        <el-button @click="upload.open = false">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-
-    <importFileTable ref="importFile" @ok="handleFjQuery" />
-
-    <importIndexTable ref="importIndex" @ok="handleFjQuery" />
-  </div>
-</template>
-
-<script>
-import {
-  listImplement,
-  getImplement,
-  delImplement,
-  addImplement,
-  updateImplement,
-  exportImplement,
-  importTemplate
-} from "@/api/meter/implement";
-import { getToken } from "@/utils/auth";
-import importFileTable from "./importFileTable";
-import importIndexTable from "./importIndexTable";
-import mixins from "@/layout/mixin/getHeight";
-
-const mystatus = "0";
-const myType = "0";
-export default {
-  name: "implement",
-  components: { importFileTable, importIndexTable },
-  mixins: [mixins],
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 閫変腑鏁扮粍
-      codes: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 璁¢噺鍣ㄥ叿妗f缁存姢琛ㄦ牸鏁版嵁
-      implementList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      idOptions: [],
-      // 缂栫爜瀛楀吀
-      codeOptions: [],
-      // 鍣ㄥ叿鍚嶇О瀛楀吀
-      meterNameOptions: [],
-      // 绉嶇被瀛楀吀
-      meterTypeOptions: [],
-      // 瑙勬牸鍨嬪彿瀛楀吀
-      modelNumberOptions: [],
-      // 娴嬮噺鑼冨洿瀛楀吀
-      measureRangeOptions: [],
-      // 鐢熶骇鍘傚晢瀛楀吀
-      manufacturerOptions: [],
-      // 璐熻矗浜哄瓧鍏�
-      personChargeOptions: [],
-      // 瀹夎浣嶇疆瀛楀吀
-      installactionLocationOptions: [],
-      // 璧峰鏃堕棿瀛楀吀
-      startTimeOptions: [],
-      // 妫�瀹氬懆鏈熷瓧鍏�
-      checkCycleOptions: [],
-      // 鎻愰啋鍛ㄦ湡瀛楀吀
-      reminderCycleOptions: [],
-      // 鐘舵�佸瓧鍏�
-      meterStatusOptions: [],
-      // 閫昏緫鍒犻櫎鏍囧織,Y宸插垹闄�,N鏈垹闄ゅ瓧鍏�
-      delFlageOptions: [],
-      // 澶囨敞瀛楀吀
-      remarkOptions: [],
-      // 寤虹珛鏃堕棿瀛楀吀
-      createTimeOptions: [],
-      // 寤虹珛浜哄瓧鍏�
-      createByOptions: [],
-      // 淇敼鏃堕棿瀛楀吀
-      updateTimeOptions: [],
-      // 淇敼浜哄瓧鍏�
-      updateByOptions: [],
-      // 鐢ㄦ埛瀵煎叆鍙傛暟
-      height: null,
-      upload: {
-        // 鏄惁鏄剧ず寮瑰嚭灞傦紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        open: false,
-        //涓婁紶鏂囦欢绫诲瀷鎺у埗
-        accept: undefined,
-        // 寮瑰嚭灞傛爣棰橈紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        title: undefined,
-        // 鏄惁绂佺敤涓婁紶
-        isUploading: false,
-        // 鏄惁鏇存柊宸茬粡瀛樺湪鐨勮閲忓櫒鍏锋。妗�
-        updateSupport: 0,
-        // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-        headers: { Authorization: "Bearer " + getToken() },
-        // 涓婁紶鐨勫湴鍧�
-        url: ""
-      },
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        code: undefined,
-        meterName: undefined,
-        meterType: undefined,
-        measureRange: undefined,
-        manufacturer: undefined,
-        installactionLocation: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        code: [{ required: true, message: "缂栫爜涓嶈兘涓虹┖", trigger: "blur" }],
-        meterName: [
-          { required: true, message: "鍣ㄥ叿鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
-        ],
-        // meterType: [
-        //   { required: true, message: "绉嶇被涓嶈兘涓虹┖", trigger: "blur" }
-        // ],
-        installactionLocation: [
-          { required: true, message: "瀹夎浣嶇疆涓嶈兘涓虹┖", trigger: "blur" }
-        ],
-        // meterStatus: [
-        //   { required: true, message: "鐘舵�佷笉鑳戒负绌�", trigger: "blur" }
-        // ],
-        startTime: [
-          { required: true, message: "璧峰鏃堕棿涓嶈兘涓虹┖", trigger: "blur" }
-        ],
-        putrunTime: [
-          { required: true, message: "鎶曡繍鏃堕棿涓嶈兘涓虹┖", trigger: "blur" }
-        ],
-        checkCycle: [
-          {
-            required: true,
-            pattern: /^\+?[1-9]\d*$/,
-            message: "妫�瀹氬懆鏈熷繀椤绘槸澶т簬0鐨勬鏁存暟",
-            trigger: "blur"
-          }
-        ],
-        reminderCycle: [
-          {
-            required: true,
-            pattern: /^\+?[1-9]\d*$/,
-            message: "鎻愰啋鍛ㄦ湡蹇呴』鏄ぇ浜�0鐨勬鏁存暟",
-            trigger: "blur"
-          }
-        ]
-      }
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("sys_device_type").then(response => {
-      for (let i = 0; i < response.data.length; i++) {
-        if (response.data[i].isDefault == "Y") {
-          this.myType = response.data[i].dictValue;
-        }
-      }
-      this.meterTypeOptions = response.data;
-    });
-    this.getDicts("meter_status").then(response => {
-      for (let i = 0; i < response.data.length; i++) {
-        if (response.data[i].isDefault == "Y") {
-          this.mystatus = response.data[i].dictValue;
-        }
-      }
-      this.meterStatusOptions = response.data;
-    });
-    this.tttt();
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 224 + "px",
-        overflow: "hidden"
-      };
-      this.height = window.innerHeight - 360;
-    },
-    /** 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listImplement(this.queryParams).then(response => {
-        this.implementList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 绉嶇被瀛楀吀缈昏瘧
-    meterTypeFormat(row, column) {
-      return this.selectDictLabel(this.meterTypeOptions, row.meterType);
-    },
-    // 鐘舵�佸瓧鍏哥炕璇�
-    meterStatusFormat(row, column) {
-      return this.selectDictLabel(this.meterStatusOptions, row.meterStatus);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        code: undefined,
-        meterName: undefined,
-        meterType: undefined,
-        modelNumber: undefined,
-        measureRange: undefined,
-        manufacturer: undefined,
-        personCharge: undefined,
-        installactionLocation: undefined,
-        startTime: undefined,
-        checkCycle: undefined,
-        reminderCycle: undefined,
-        meterStatus: undefined,
-        delFlage: undefined,
-        remark: undefined,
-        createTime: undefined,
-        createBy: undefined,
-        updateTime: undefined,
-        updateBy: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id);
-      this.codes = selection.map(item => item.code);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞璁¢噺鍣ㄥ叿妗f缁存姢";
-      this.form.meterType = this.myType;
-      this.form.meterStatus = this.mystatus;
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids;
-      getImplement(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼璁¢噺鍣ㄥ叿妗f缁存姢";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updateImplement(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addImplement(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      const codes = row.code || this.codes;
-      this.$confirm(
-        '鏄惁纭鍒犻櫎璁¢噺鍣ㄥ叿妗f缁存姢缂栧彿涓�"' + codes + '"鐨勮閲忓櫒鍏锋。妗�?',
-        "璀﹀憡",
-        {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }
-      )
-        .then(function() {
-          return delImplement(ids);
-        })
-        .then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        })
-        .catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夎閲忓櫒鍏锋。妗堢淮鎶ゆ暟鎹」?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportImplement(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-    /** 瀵煎叆鎸夐挳鎿嶄綔 */
-    handleImport() {
-      //this.$refs.upload.clearFiles();
-      this.upload.title = "璁¢噺鍣ㄥ叿妗f瀵煎叆";
-      this.upload.accept = ".xlsx, .xls";
-      this.upload.url =
-        process.env.VUE_APP_BASE_API +
-        "/meter/implement/importData?updateSupport=0";
-      this.upload.open = true;
-    },
-    /** 涓嬭浇妯℃澘鎿嶄綔 */
-    importTemplate() {
-      importTemplate().then(response => {
-        this.download(response.msg);
-      });
-    },
-    // 鏂囦欢涓婁紶涓鐞�
-    handleFileUploadProgress(event, file, fileList) {
-      this.upload.isUploading = true;
-    },
-    // 鏂囦欢涓婁紶鎴愬姛澶勭悊
-    handleFileSuccess(response, file, fileList) {
-      this.upload.open = false;
-      this.upload.isUploading = false;
-      this.$refs.upload.clearFiles();
-      this.$alert(response.msg, "瀵煎叆缁撴灉", { dangerouslyUseHTMLString: true });
-      this.getList();
-    },
-    // 鎻愪氦涓婁紶鏂囦欢
-    submitFileForm() {
-      this.$refs.upload.submit();
-    },
-    /** 鎵撳紑闄勪欢琛ㄥ脊绐� */
-    openImportFileTable(row) {
-      let impid = row.id;
-      let impcode = row.code;
-      this.$refs.importFile.show(impid, impcode);
-    },
-    /** 闄勪欢鎼滅储鎸夐挳鎿嶄綔 */
-    handleFjQuery() {
-      // this.queryParams.pageNum = 1;
-      // this.getList();
-    },
-    /** 鎵撳紑鎸囨爣琛ㄥ脊绐� */
-    openImportIndexTable(row) {
-      let impid = row.id;
-      let impcode = row.code;
-      this.$refs.importIndex.show(impid, impcode);
-    },
-    tttt() {
-      console.log("meterTypeOptions==" + this.meterTypeOptions.length);
-      console.log("meterStatusOptions==" + this.meterTypeOptions.length);
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-
-.dialog-form-row {
-  .el-row {
-    margin-bottom: 0;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/meter/implementCount/importFileTable.vue b/energy_management_ui/src/views/meter/implementCount/importFileTable.vue
deleted file mode 100644
index 71e3a74..0000000
--- a/energy_management_ui/src/views/meter/implementCount/importFileTable.vue
+++ /dev/null
@@ -1,195 +0,0 @@
-<template>
-  <!-- 瀵煎叆琛� -->
-  <el-dialog :title="title" :visible.sync="open"  :destroy-on-close="true" width="800px" top="5vh">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鏂囦欢鍚�" prop="fileName">
-        <el-input
-          v-model="queryParams.fileName"
-          placeholder="璇疯緭鍏ユ枃浠跺悕"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-upload
-      ref="upload"
-      :limit="1"
-      :headers="uploadData.headers"
-      :action="uploadData.url + '?implementId=' + queryParams.implementId"
-      :on-preview="handlePreview"
-      :on-progress="handleFileUploadProgress"
-      :on-success="handleFileSuccess"
-      :auto-upload="false"
-    >
-    </el-upload>
-
-    <el-row>
-      <el-table v-loading="loading" :data="annexList" >
-        <el-table-column label="鏂囦欢鍚�" align="center" prop="fileName"  />
-        <el-table-column label="涓婁紶鏃堕棿" align="center" prop="createTime"  />
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="seeImpFile(scope.row)"
-              v-hasPermi="['meter:annex:assignDownload']"
-            >鏌ョ湅</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        v-show="total>0"
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-    </el-row>
-    <div slot="footer" class="dialog-footer">
-      <el-button @click="handclose">鍙� 娑�</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { listAnnex,delAnnex } from "@/api/meter/annex";
-import { getToken } from "@/utils/auth";
-const baseURL = process.env.VUE_APP_BASE_API
-// 閫氱敤涓嬭浇鏂规硶
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 璁¢噺鍣ㄥ叿妗f闄勪欢琛ㄦ牸鏁版嵁
-      annexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      idOptions: [],
-      // 鍏宠仈meter_implement.id瀛楀吀
-      implementIdOptions: [],
-      // 鏂囦欢鍚嶅瓧鍏�
-      fileNameOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        implementId:'',
-        tableName: undefined
-      },
-      uploadData: {
-        // 鏄惁鏄剧ず寮瑰嚭灞傦紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        open: false,
-        // 寮瑰嚭灞傛爣棰橈紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        title: "",
-        // 鏄惁绂佺敤涓婁紶
-        isUploading: false,
-        // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-        headers: { Authorization: "Bearer " + getToken() },
-        // 涓婁紶鐨勫湴鍧�
-        url: process.env.VUE_APP_BASE_API + "/meter/annex/fileImport"
-      },
-    };
-  },
-  methods: {
-    // 鏄剧ず寮规
-    show(impid,code) {
-      this.reset();
-      this.queryParams.implementId = impid;
-      this.getList();
-      this.title='缂栧彿 '+code+' 闄勪欢';
-      this.open = true;
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.queryParams = {
-        pageNum: 1,
-        pageSize: 10,
-        implementId:'',
-        tableName: undefined
-      };
-      //娓呯┖涓婁紶缁勪欢鐨勬枃浠跺垪琛�
-      this.resetForm("queryForm");
-    },
-    // 鏌ヨ琛ㄦ暟鎹�
-    getList() {
-      listAnnex(this.queryParams).then(response => {
-        this.annexList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-       this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 鏌ョ湅鎸夐挳鎿嶄綔 */
-    seeImpFile(row) {
-      this.fileDownload(row.fileName,row.filePath,false);
-    },
-    handclose()
-    {
-      this.open=false;
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      this.$confirm('鏄惁纭鍒犻櫎闄勪欢鍚嶇О涓�"' + row.fileName + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function() {
-        return delAnnex(row.id);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function() {});
-    },
-    // 闄勪欢涓婁紶涓鐞�
-    handleFileUploadProgress(event, file, fileList) {
-      this.uploadData.isUploading = true;
-    },
-    // 闄勪欢涓婁紶鎴愬姛澶勭悊
-    handleFileSuccess(response, file, fileList) {
-      this.uploadData.open = false;
-      this.uploadData.isUploading = false;
-      this.$refs.upload.clearFiles();
-      this.$alert(response.msg, "闄勪欢缁撴灉", { dangerouslyUseHTMLString: true });
-      this.getList();
-    },
-    // 闄勪欢涓婁紶鏂囦欢
-    submitFileForm() {
-      this.$refs.upload.submit();
-    },
-    handlePreview(file) {
-      console.log(file);
-    },
-  }
-};
-
-</script>
diff --git a/energy_management_ui/src/views/meter/implementCount/importIndexTable.vue b/energy_management_ui/src/views/meter/implementCount/importIndexTable.vue
deleted file mode 100644
index 7b1c66d..0000000
--- a/energy_management_ui/src/views/meter/implementCount/importIndexTable.vue
+++ /dev/null
@@ -1,203 +0,0 @@
-<template>
-  <!-- 瀵煎叆琛� -->
-  <el-dialog
-    :title="title"
-    :visible.sync="open"
-    :destroy-on-close="true"
-    :append-to-body="true"
-    width="800px"
-    top="5vh"
-  >
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item>
-        <!-- <el-button icon="el-icon-refresh" size="mini" @click="createIndex">鐢熸垚鎸囨爣</el-button>-->
-      </el-form-item>
-    </el-form>
-
-    <el-row>
-      <el-table v-loading="loading" :data="impIndexList" max-height="350">
-        <el-table-column label="鎸囨爣缂栫爜" align="center" prop="code" />
-        <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="name" />
-        <el-table-column
-          label="鎸囨爣绫诲瀷"
-          align="center"
-          prop="indexType"
-          :formatter="indexTypeFormat"
-        />
-        <el-table-column
-          label="鍗曚綅"
-          align="center"
-          prop="unitId"
-          :formatter="unitIdFormat"
-        />
-        <!-- <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            &lt;!&ndash;<el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['meter:annex:remove']"
-            >鍒犻櫎</el-button>&ndash;&gt;
-          </template>
-        </el-table-column>-->
-      </el-table>
-      <!--      <pagination-->
-      <!--        v-show="total>0"-->
-      <!--        :total="total"-->
-      <!--        :page.sync="queryParams.pageNum"-->
-      <!--        :limit.sync="queryParams.pageSize"-->
-      <!--        @pagination="getList"-->
-      <!--      />-->
-    </el-row>
-    <div slot="footer" class="dialog-footer">
-      <el-button @click="handclose">鍙� 娑�</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { listIndex, addIndex, delIndex } from "@/api/meter/index";
-let meterid = "";
-// 閫氱敤涓嬭浇鏂规硶
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      qjcode: "",
-      // 璁¢噺鍣ㄥ叿妗f  鎸囨爣  琛ㄦ牸鏁版嵁
-      impIndexList: [],
-      // 璁¢噺鍣ㄥ叿妗f  鎸囨爣鐨� 鍗曚綅闆嗗悎
-      unitIdList: [],
-      // 璁¢噺鍣ㄥ叿妗f 鎸囨爣鐨� 绯荤粺鎸囨爣绫诲瀷
-      indexTypeList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      idOptions: [],
-      // 鍏宠仈meter_implement.id瀛楀吀
-      implementIdOptions: [],
-      // 鏂囦欢鍚嶅瓧鍏�
-      fileNameOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        implementId: "",
-        tableName: undefined
-      }
-    };
-  },
-  created() {
-    this.getDicts("sys_unit").then(response => {
-      this.unitIdList = response.data;
-    });
-    this.getDicts("sys_index_type").then(response => {
-      this.indexTypeList = response.data;
-    });
-  },
-  methods: {
-    // 鏄剧ず寮规
-    show(impid, code) {
-      this.reset();
-      this.qjcode = code;
-      this.queryParams.implementId = impid;
-      this.meterid = impid;
-      this.getList();
-      this.title = "缂栧彿 " + code + " 鎸囨爣";
-      this.open = true;
-    },
-    // 鎸囨爣绫诲瀷瀛楀吀缈昏瘧
-    indexTypeFormat(row, column) {
-      return this.selectDictLabel(this.indexTypeList, row.indexType);
-    },
-    // 鍗曚綅 瀛楀吀缈昏瘧
-    unitIdFormat(row, column) {
-      return this.selectDictLabel(this.unitIdList, row.unitId);
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.queryParams = {
-        pageNum: 1,
-        pageSize: 10,
-        implementId: "",
-        tableName: undefined
-      };
-      //娓呯┖涓婁紶缁勪欢鐨勬枃浠跺垪琛�
-      this.resetForm("queryForm");
-    },
-    // 鏌ヨ 璁¢噺鍣ㄥ叿鐨勬寚鏍�
-    getList() {
-      listIndex(this.queryParams.implementId).then(response => {
-        this.impIndexList = response.data;
-        this.loading = false;
-      });
-    },
-    // 鐢熸垚璁¢噺鍣ㄥ叿鎸囨爣
-    createIndex() {
-      let aa = this.meterid;
-      console.log("aa===" + aa);
-      this.$confirm(
-        '鏄惁纭閲嶆柊鐢熸垚鍣ㄥ叿缂栫爜涓�"' +
-          this.qjcode +
-          '"鐨勬寚鏍囧悧?閲嶆柊鐢熸垚鍚庢墍鏈夋寚鏍囦細杩樺師鍒版ā鏉跨姸鎬�',
-        "璀﹀憡",
-        {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }
-      )
-        .then(function() {
-          return addIndex(aa);
-        })
-        .then(() => {
-          this.getList();
-          this.msgSuccess("鎸囨爣鐢熸垚鎴愬姛");
-        })
-        .catch(function() {});
-    },
-    /** 鍏抽棴鎸夐挳鎿嶄綔 */
-    handclose() {
-      this.open = false;
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      this.$confirm(
-        '鏄惁纭鍒犻櫎鎸囨爣缂栫爜涓�"' + row.code + '"鐨勬寚鏍囧悧?',
-        "璀﹀憡",
-        {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }
-      )
-        .then(function() {
-          return delIndex(row.indexId);
-        })
-        .then(() => {
-          this.getList();
-          this.msgSuccess("鎸囨爣鍒犻櫎鎴愬姛");
-        })
-        .catch(function() {});
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/meter/implementCount/index.vue b/energy_management_ui/src/views/meter/implementCount/index.vue
deleted file mode 100644
index a333175..0000000
--- a/energy_management_ui/src/views/meter/implementCount/index.vue
+++ /dev/null
@@ -1,808 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form :model="queryParams" ref="queryForm" label-width="72px" class="special-form">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="缂栫爜" prop="code">
-              <el-input
-                  v-model="queryParams.code"
-                  placeholder="璇疯緭鍏ョ紪鐮�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鍣ㄥ叿鍚嶇О" prop="meterName">
-              <el-input
-                  v-model="queryParams.meterName"
-                  placeholder="璇疯緭鍏ュ櫒鍏峰悕绉�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="绉嶇被" prop="meterType">
-              <el-select v-model="queryParams.meterType" placeholder="璇烽�夋嫨绉嶇被" clearable size="small" style="width: 100%">
-                <el-option
-                    v-for="dict in meterTypeOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-<!--          <el-col :span="6">-->
-<!--            <el-form-item label="娴嬮噺鑼冨洿" prop="measureRange">-->
-<!--              <el-input-->
-<!--                  v-model="queryParams.measureRange"-->
-<!--                  placeholder="璇疯緭鍏ユ祴閲忚寖鍥�"-->
-<!--                  clearable-->
-<!--                  size="small"-->
-<!--                  @keyup.enter.native="handleQuery"-->
-<!--              />-->
-<!--            </el-form-item>-->
-<!--          </el-col>-->
-<!--          <el-col :span="6">-->
-<!--            <el-form-item label="鐢熶骇鍘傚晢" prop="manufacturer">-->
-<!--              <el-input-->
-<!--                  v-model="queryParams.manufacturer"-->
-<!--                  placeholder="璇疯緭鍏ョ敓浜у巶鍟�"-->
-<!--                  clearable-->
-<!--                  size="small"-->
-<!--                  @keyup.enter.native="handleQuery"-->
-<!--              />-->
-<!--            </el-form-item>-->
-<!--          </el-col>-->
-<!--          <el-col :span="6">-->
-<!--            <el-form-item label="瀹夎浣嶇疆" prop="installactionLocation">-->
-<!--              <el-input-->
-<!--                  v-model="queryParams.installactionLocation"-->
-<!--                  placeholder="璇疯緭鍏ュ畨瑁呬綅缃�"-->
-<!--                  clearable-->
-<!--                  size="small"-->
-<!--                  @keyup.enter.native="handleQuery"-->
-<!--              />-->
-<!--            </el-form-item>-->
-<!--          </el-col>-->
-          <el-col :span="6">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <!--<el-col :span="1.5">
-          <el-button
-            type="primary"
-            icon="el-icon-plus"
-            size="mini"
-            @click="handleAdd"
-            v-hasPermi="['meter:implementCount:add']"
-          >鏂板</el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            type="success"
-            icon="el-icon-edit"
-            size="mini"
-            :disabled="single"
-            @click="handleUpdate"
-            v-hasPermi="['meter:implementCount:edit']"
-          >淇敼</el-button>
-        </el-col>-->
-        <el-col :span="1.5">
-          <el-button
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              :disabled="multiple"
-              @click="handleDelete"
-              v-hasPermi="['meter:implementCount:remove']"
-          >閲嶇疆鏃堕棿
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="warning"
-              icon="el-icon-download"
-              size="mini"
-              @click="handleExport"
-              v-hasPermi="['meter:implementCount:export']"
-          >瀵煎嚭
-          </el-button>
-        </el-col>
-      </el-row>
-      <el-table v-loading="loading" :data="implementCountList" :row-class-name="tableRowClassName"
-                :height="height"
-                @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center"/>
-        <el-table-column label="缂栫爜" align="center" prop="code" show-overflow-tooltip/>
-        <el-table-column label="鍣ㄥ叿鍚嶇О" align="center" prop="meterName" show-overflow-tooltip/>
-        <el-table-column label="绉嶇被" align="center" prop="meterType" :formatter="meterTypeFormat" show-overflow-tooltip/>
-        <el-table-column label="瑙勬牸鍨嬪彿" align="center" prop="modelNumber" show-overflow-tooltip/>
-        <el-table-column label="娴嬮噺鑼冨洿" align="center" prop="measureRange" show-overflow-tooltip/>
-        <el-table-column label="鐢熶骇鍘傚晢" align="center" prop="manufacturer" show-overflow-tooltip/>
-        <el-table-column label="瀹夎浣嶇疆" align="center" prop="installactionLocation" show-overflow-tooltip/>
-        <el-table-column label="鐘舵��" align="center" prop="meterStatus" :formatter="meterStatusFormat" show-overflow-tooltip/>
-        <el-table-column label="鎿嶄綔" align="center" width="250" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['meter:implementCount:edit']"
-            >鏌ョ湅
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="openImportFileTable(scope.row)"
-                v-hasPermi="['tool:gen:import']"
-            >闄勪欢
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="openImportIndexTable(scope.row)"
-                v-hasPermi="['']"
-            >鎸囨爣
-            </el-button>
-            <el-button v-if="scope.row.txflage"
-                       size="mini"
-                       type="text"
-                       icon="el-icon-delete"
-                       @click="handleDelete(scope.row)"
-                       v-hasPermi="['meter:implementCount:remove']"
-            >閲嶇疆鏃堕棿
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-    </basic-container>
-    <!--&lt;!&ndash; 娣诲姞鎴栦慨鏀硅閲忓櫒鍏风粺璁℃煡璇㈠璇濇 &ndash;&gt;
-    <el-dialog :title="title" :visible.sync="open" width="800px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
-        <el-form-item label="缂栫爜" prop="code">
-          <el-input v-model="form.code" placeholder="璇疯緭鍏ョ紪鐮�" />
-        </el-form-item>
-        <el-form-item label="鍣ㄥ叿鍚嶇О" prop="meterName">
-          <el-input v-model="form.meterName" placeholder="璇疯緭鍏ュ櫒鍏峰悕绉�" />
-        </el-form-item>
-        <el-form-item label="绉嶇被">
-          <el-select v-model="form.meterType" placeholder="璇烽�夋嫨绉嶇被">
-            <el-option
-              v-for="dict in meterTypeOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="瑙勬牸鍨嬪彿" prop="modelNumber">
-          <el-input v-model="form.modelNumber" placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�" />
-        </el-form-item>
-        <el-form-item label="娴嬮噺鑼冨洿" prop="measureRange">
-          <el-input v-model="form.measureRange" placeholder="璇疯緭鍏ユ祴閲忚寖鍥�" />
-        </el-form-item>
-        <el-form-item label="涓婚敭" prop="id">
-          <el-input v-model="form.id" placeholder="璇疯緭鍏ヤ富閿�" />
-        </el-form-item>
-        <el-form-item label="鐢熶骇鍘傚晢" prop="manufacturer">
-          <el-input v-model="form.manufacturer" placeholder="璇疯緭鍏ョ敓浜у巶鍟�" />
-        </el-form-item>
-        <el-form-item label="璐熻矗浜�" prop="personCharge">
-          <el-input v-model="form.personCharge" placeholder="璇疯緭鍏ヨ礋璐d汉" />
-        </el-form-item>
-        <el-form-item label="瀹夎浣嶇疆" prop="installactionLocation">
-          <el-input v-model="form.installactionLocation" placeholder="璇疯緭鍏ュ畨瑁呬綅缃�" />
-        </el-form-item>
-        <el-form-item label="璧峰鏃堕棿" prop="startTime">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.startTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="閫夋嫨璧峰鏃堕棿">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="鐘舵��">
-          <el-select v-model="form.meterStatus" placeholder="璇烽�夋嫨鐘舵��">
-            <el-option
-              v-for="dict in meterStatusOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>-->
-
-    <!-- 娣诲姞鎴栦慨鏀硅閲忓櫒鍏锋。妗堢淮鎶ゅ璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="800px">
-      <el-form ref="form" :model="form" :rules="rules" disabled="true" label-width="120px">
-        <el-row>
-          <el-col :span="8">
-            <el-form-item label="缂栫爜" prop="code">
-              <el-input v-model="form.code" placeholder="璇疯緭鍏ョ紪鐮�"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鍣ㄥ叿鍚嶇О" prop="meterName">
-              <el-input v-model="form.meterName" placeholder="璇疯緭鍏ュ櫒鍏峰悕绉�"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="绉嶇被" prop="meterType">
-              <el-select v-model="form.meterType" placeholder="璇烽�夋嫨绉嶇被">
-                <el-option
-                    v-for="dict in meterTypeOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="瑙勬牸鍨嬪彿" prop="modelNumber">
-              <el-input v-model="form.modelNumber" placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="娴嬮噺鑼冨洿" prop="measureRange">
-              <el-input v-model="form.measureRange" placeholder="璇疯緭鍏ユ祴閲忚寖鍥�"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鐢熶骇鍘傚晢" prop="manufacturer">
-              <el-input v-model="form.manufacturer" placeholder="璇疯緭鍏ョ敓浜у巶鍟�"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="璐熻矗浜�" prop="personCharge">
-              <el-input v-model="form.personCharge" placeholder="璇疯緭鍏ヨ礋璐d汉"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="瀹夎浣嶇疆" prop="installactionLocation">
-              <el-input v-model="form.installactionLocation" placeholder="璇疯緭鍏ュ畨瑁呬綅缃�"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="9">
-            <el-form-item label="璧峰鏃堕棿" prop="startTime">
-              <el-date-picker clearable size="small" style="width: 180px"
-                              v-model="form.startTime"
-                              type="date"
-                              value-format="yyyy-MM-dd"
-                              placeholder="閫夋嫨璧峰鏃堕棿">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鎶曡繍鏃堕棿" prop="putrunTime">
-              <el-date-picker clearable size="small" style="width: 180px"
-                              v-model="form.putrunTime"
-                              type="date"
-                              value-format="yyyy-MM-dd"
-                              placeholder="閫夋嫨鎶曡繍鏃堕棿">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-          <el-col :span="7">
-            <el-form-item label="鐘舵��" prop="meterStatus">
-              <el-select v-model="form.meterStatus" placeholder="璇烽�夋嫨鐘舵��">
-                <el-option
-                    v-for="dict in meterStatusOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="妫�瀹氬懆鏈�(澶�)" prop="checkCycle">
-              <el-input v-model="form.checkCycle" placeholder="璇疯緭鍏ユ瀹氬懆鏈�"
-                        oninput="if(value.length>4)value=value.slice(0,4)"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鎻愰啋鍛ㄦ湡(澶�)" prop="reminderCycle">
-              <el-input v-model="form.reminderCycle" placeholder="璇疯緭鍏ユ彁閱掑懆鏈�"
-                        oninput="if(value.length>4)value=value.slice(0,4)"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="澶囨敞" prop="remark">
-              <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <!--  <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>-->
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-
-    <importFileTable ref="importFile" @ok="handleFjQuery"/>
-
-    <importIndexTable ref="importIndex" @ok="handleFjQuery"/>
-
-  </div>
-</template>
-
-<style scoped lang="scss">
-.el-table .warning-row {
-  background: #ffb8a9;
-}
-</style>
-
-<script>
-import {
-  listImplementCount,
-  getImplementCount,
-  delImplementCount,
-  addImplementCount,
-  updateImplementCount,
-  exportImplementCount
-} from "@/api/meter/implementCount";
-
-import {getToken} from "@/utils/auth";
-import importFileTable from "./importFileTable";
-import importIndexTable from "./importIndexTable";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-
-  name: "implementCount",
-  components: {importFileTable, importIndexTable},
-  mixins: [mixins],
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 璁¢噺鍣ㄥ叿缁熻鏌ヨ琛ㄦ牸鏁版嵁
-      implementCountList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 缂栫爜瀛楀吀
-      codeOptions: [],
-      // 鍣ㄥ叿鍚嶇О瀛楀吀
-      meterNameOptions: [],
-      // 绉嶇被瀛楀吀
-      meterTypeOptions: [],
-      // 瑙勬牸鍨嬪彿瀛楀吀
-      modelNumberOptions: [],
-      // 娴嬮噺鑼冨洿瀛楀吀
-      measureRangeOptions: [],
-      // 涓婚敭瀛楀吀
-      idOptions: [],
-      // 鐢熶骇鍘傚晢瀛楀吀
-      manufacturerOptions: [],
-      // 璐熻矗浜哄瓧鍏�
-      personChargeOptions: [],
-      // 瀹夎浣嶇疆瀛楀吀
-      installactionLocationOptions: [],
-      // 璧峰鏃堕棿瀛楀吀
-      startTimeOptions: [],
-      // 妫�瀹氬懆鏈熷瓧鍏�
-      checkCycleOptions: [],
-      // 鎻愰啋鍛ㄦ湡瀛楀吀
-      reminderCycleOptions: [],
-      // 鐘舵�佸瓧鍏�
-      meterStatusOptions: [],
-      // 閫昏緫鍒犻櫎鏍囧織,Y宸插垹闄�,N鏈垹闄ゅ瓧鍏�
-      delFlageOptions: [],
-      // 澶囨敞瀛楀吀
-      remarkOptions: [],
-      // 寤虹珛鏃堕棿瀛楀吀
-      createTimeOptions: [],
-      // 寤虹珛浜哄瓧鍏�
-      createByOptions: [],
-      // 淇敼鏃堕棿瀛楀吀
-      updateTimeOptions: [],
-      // 淇敼浜哄瓧鍏�
-      updateByOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        code: undefined,
-        meterName: undefined,
-        meterType: undefined,
-        measureRange: undefined,
-        manufacturer: undefined,
-        installactionLocation: undefined,
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      height:null,
-      rules: {
-        code: [
-          {required: true, message: "缂栫爜涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        meterName: [
-          {required: true, message: "鍣ㄥ叿鍚嶇О涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        meterType: [
-          {required: true, message: "绉嶇被涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        id: [
-          {required: true, message: "涓婚敭涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        installactionLocation: [
-          {required: true, message: "瀹夎浣嶇疆涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        meterStatus: [
-          {required: true, message: "鐘舵�佷笉鑳戒负绌�", trigger: "blur"}
-        ],
-        /* startTime: [
-           { required: true, message: "璧峰鏃堕棿涓嶈兘涓虹┖", trigger: "blur" }
-         ],
-         checkCycle: [
-           { required: true, pattern:/^\+?[1-9]\d*$/,message: "妫�瀹氬懆鏈熷繀椤绘槸澶т簬0鐨勬鏁存暟", trigger: "blur" }
-         ],
-         reminderCycle: [
-           { required: true, pattern:/^\+?[1-9]\d*$/,message: "鎻愰啋鍛ㄦ湡蹇呴』鏄ぇ浜�0鐨勬鏁存暟", trigger: "blur" }
-         ],*/
-      }
-    };
-  },
-  created() {
-    this.getList();
-    /*this.getDicts("${column.dictType}").then(response => {
-      this.codeOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.meterNameOptions = response.data;
-    });
-    this.getDicts("sys_device_type").then(response => {
-      this.meterTypeOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.modelNumberOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.measureRangeOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.idOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.manufacturerOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.personChargeOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.installactionLocationOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.startTimeOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.checkCycleOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.reminderCycleOptions = response.data;
-    });
-    this.getDicts("meter_status").then(response => {
-      this.meterStatusOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.delFlageOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.remarkOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.createTimeOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.createByOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.updateTimeOptions = response.data;
-    });
-    this.getDicts("${column.dictType}").then(response => {
-      this.updateByOptions = response.data;
-    });*/
-    this.getDicts("sys_device_type").then(response => {
-
-      for (let i = 0; i < response.data.length; i++) {
-        if (response.data[i].isDefault == "Y") {
-          this.myType = response.data[i].dictValue;
-        }
-      }
-      this.meterTypeOptions = response.data;
-    });
-    this.getDicts("meter_status").then(response => {
-      for (let i = 0; i < response.data.length; i++) {
-        if (response.data[i].isDefault == "Y") {
-          this.mystatus = response.data[i].dictValue;
-
-        }
-      }
-      this.meterStatusOptions = response.data;
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 370;
-    },
-    tableRowClassName({row, rowIndex}) {
-      if (row.txflage) {
-        return 'warning-row';
-      }
-      return '';
-    },
-    /** 鏌ヨ璁¢噺鍣ㄥ叿缁熻鏌ヨ鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listImplementCount(this.queryParams).then(response => {
-        this.implementCountList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 缂栫爜瀛楀吀缈昏瘧
-    codeFormat(row, column) {
-      return this.selectDictLabel(this.codeOptions, row.code);
-    },
-    // 鍣ㄥ叿鍚嶇О瀛楀吀缈昏瘧
-    meterNameFormat(row, column) {
-      return this.selectDictLabel(this.meterNameOptions, row.meterName);
-    },
-    // 绉嶇被瀛楀吀缈昏瘧
-    meterTypeFormat(row, column) {
-      return this.selectDictLabel(this.meterTypeOptions, row.meterType);
-    },
-    // 瑙勬牸鍨嬪彿瀛楀吀缈昏瘧
-    modelNumberFormat(row, column) {
-      return this.selectDictLabel(this.modelNumberOptions, row.modelNumber);
-    },
-    // 娴嬮噺鑼冨洿瀛楀吀缈昏瘧
-    measureRangeFormat(row, column) {
-      return this.selectDictLabel(this.measureRangeOptions, row.measureRange);
-    },
-    // 涓婚敭瀛楀吀缈昏瘧
-    idFormat(row, column) {
-      return this.selectDictLabel(this.idOptions, row.id);
-    },
-    // 鐢熶骇鍘傚晢瀛楀吀缈昏瘧
-    manufacturerFormat(row, column) {
-      return this.selectDictLabel(this.manufacturerOptions, row.manufacturer);
-    },
-    // 璐熻矗浜哄瓧鍏哥炕璇�
-    personChargeFormat(row, column) {
-      return this.selectDictLabel(this.personChargeOptions, row.personCharge);
-    },
-    // 瀹夎浣嶇疆瀛楀吀缈昏瘧
-    installactionLocationFormat(row, column) {
-      return this.selectDictLabel(this.installactionLocationOptions, row.installactionLocation);
-    },
-    // 璧峰鏃堕棿瀛楀吀缈昏瘧
-    startTimeFormat(row, column) {
-      return this.selectDictLabel(this.startTimeOptions, row.startTime);
-    },
-    // 妫�瀹氬懆鏈熷瓧鍏哥炕璇�
-    checkCycleFormat(row, column) {
-      return this.selectDictLabel(this.checkCycleOptions, row.checkCycle);
-    },
-    // 鎻愰啋鍛ㄦ湡瀛楀吀缈昏瘧
-    reminderCycleFormat(row, column) {
-      return this.selectDictLabel(this.reminderCycleOptions, row.reminderCycle);
-    },
-    // 鐘舵�佸瓧鍏哥炕璇�
-    meterStatusFormat(row, column) {
-      return this.selectDictLabel(this.meterStatusOptions, row.meterStatus);
-    },
-    // 閫昏緫鍒犻櫎鏍囧織,Y宸插垹闄�,N鏈垹闄ゅ瓧鍏哥炕璇�
-    delFlageFormat(row, column) {
-      return this.selectDictLabel(this.delFlageOptions, row.delFlage);
-    },
-    // 澶囨敞瀛楀吀缈昏瘧
-    remarkFormat(row, column) {
-      return this.selectDictLabel(this.remarkOptions, row.remark);
-    },
-    // 寤虹珛鏃堕棿瀛楀吀缈昏瘧
-    createTimeFormat(row, column) {
-      return this.selectDictLabel(this.createTimeOptions, row.createTime);
-    },
-    // 寤虹珛浜哄瓧鍏哥炕璇�
-    createByFormat(row, column) {
-      return this.selectDictLabel(this.createByOptions, row.createBy);
-    },
-    // 淇敼鏃堕棿瀛楀吀缈昏瘧
-    updateTimeFormat(row, column) {
-      return this.selectDictLabel(this.updateTimeOptions, row.updateTime);
-    },
-    // 淇敼浜哄瓧鍏哥炕璇�
-    updateByFormat(row, column) {
-      return this.selectDictLabel(this.updateByOptions, row.updateBy);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        code: undefined,
-        meterName: undefined,
-        meterType: undefined,
-        modelNumber: undefined,
-        measureRange: undefined,
-        id: undefined,
-        manufacturer: undefined,
-        personCharge: undefined,
-        installactionLocation: undefined,
-        startTime: undefined,
-        checkCycle: undefined,
-        reminderCycle: undefined,
-        meterStatus: undefined,
-        delFlage: undefined,
-        remark: undefined,
-        createTime: undefined,
-        createBy: undefined,
-        updateTime: undefined,
-        updateBy: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.code)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞璁¢噺鍣ㄥ叿缁熻鏌ヨ";
-      this.form.meterType = this.myType;
-      this.form.meterStatus = this.mystatus;
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const code = row.code || this.ids
-      getImplementCount(code).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "鏌ョ湅璁¢噺鍣ㄥ叿淇℃伅";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.code != undefined) {
-            updateImplementCount(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addImplementCount(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const codes = row.code || this.ids;
-      this.$confirm('鏄惁纭閲嶇疆璁¢噺鍣ㄥ叿缁熻鏌ヨ缂栧彿涓�"' + codes + '"鐨勬椂闂�?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delImplementCount(codes);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("閲嶇疆鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夎閲忓櫒鍏风粺璁℃煡璇㈡暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportImplementCount(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    },
-    /** 鎵撳紑闄勪欢琛ㄥ脊绐� */
-    openImportFileTable(row) {
-      let impid = row.id;
-      let impcode = row.code;
-      this.$refs.importFile.show(impid, impcode);
-    },
-    /** 闄勪欢鎼滅储鎸夐挳鎿嶄綔 */
-    handleFjQuery() {
-      // this.queryParams.pageNum = 1;
-      // this.getList();
-    },
-    /** 鎵撳紑鎸囨爣琛ㄥ脊绐� */
-    openImportIndexTable(row) {
-      let impid = row.id;
-      let impcode = row.code;
-      this.$refs.importIndex.show(impid, impcode);
-    },
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form{
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/monitor/druid/index.vue b/energy_management_ui/src/views/monitor/druid/index.vue
deleted file mode 100644
index da5b08f..0000000
--- a/energy_management_ui/src/views/monitor/druid/index.vue
+++ /dev/null
@@ -1,26 +0,0 @@
-<template>
-  <div v-loading="loading" :style="'height:'+ height">
-    <iframe :src="src" frameborder="no" style="width: 100%;height: 100%" scrolling="auto" />
-  </div>
-</template>
-<script>
-export default {
-  name: "Druid",
-  data() {
-    return {
-      src: process.env.VUE_APP_BASE_API + "/druid/index.html",
-      height: document.documentElement.clientHeight - 94.5 + "px;",
-      loading: true
-    };
-  },
-  mounted: function() {
-    setTimeout(() => {
-      this.loading = false;
-    }, 230);
-    const that = this;
-    window.onresize = function temp() {
-      that.height = document.documentElement.clientHeight - 94.5 + "px;";
-    };
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/monitor/job/index.vue b/energy_management_ui/src/views/monitor/job/index.vue
deleted file mode 100644
index db2a0e1..0000000
--- a/energy_management_ui/src/views/monitor/job/index.vue
+++ /dev/null
@@ -1,5 +0,0 @@
-<template>
-  <div class="app-container">
-   瀹氭椂浠诲姟
-  </div>
-</template>
\ No newline at end of file
diff --git a/energy_management_ui/src/views/monitor/logininfor/index.vue b/energy_management_ui/src/views/monitor/logininfor/index.vue
deleted file mode 100644
index 6eee313..0000000
--- a/energy_management_ui/src/views/monitor/logininfor/index.vue
+++ /dev/null
@@ -1,260 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form :model="queryParams" ref="queryForm" label-width="72px" class="special-form">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="鐧诲綍鍦板潃" prop="ipaddr">
-              <el-input
-                  v-model="queryParams.ipaddr"
-                  placeholder="璇疯緭鍏ョ櫥褰曞湴鍧�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鐢ㄦ埛鍚嶇О" prop="userName">
-              <el-input
-                  v-model="queryParams.userName"
-                  placeholder="璇疯緭鍏ョ敤鎴峰悕绉�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鐘舵��" prop="status">
-              <el-select
-                  v-model="queryParams.status"
-                  placeholder="鐧诲綍鐘舵��"
-                  clearable
-                  size="small"
-                  style="width: 100%"
-              >
-                <el-option
-                    v-for="dict in statusOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鐧诲綍鏃堕棿">
-              <el-date-picker
-                  v-model="dateRange"
-                  size="small"
-                  style="width: 100%"
-                  value-format="yyyy-MM-dd"
-                  type="daterange"
-                  range-separator="-"
-                  start-placeholder="寮�濮嬫棩鏈�"
-                  end-placeholder="缁撴潫鏃ユ湡"
-              ></el-date-picker>
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              :disabled="multiple"
-              @click="handleDelete"
-              v-hasPermi="['monitor:logininfor:remove']"
-          >鍒犻櫎
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              @click="handleClean"
-              v-hasPermi="['monitor:logininfor:remove']"
-          >娓呯┖
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="warning"
-              icon="el-icon-download"
-              size="mini"
-              @click="handleExport"
-              v-hasPermi="['system:logininfor:export']"
-          >瀵煎嚭
-          </el-button>
-        </el-col>
-      </el-row>
-      <el-table  :height="height" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center"/>
-        <el-table-column label="璁块棶缂栧彿" align="center" prop="infoId"/>
-        <el-table-column label="鐢ㄦ埛鍚嶇О" align="center" prop="userName"/>
-        <el-table-column label="鐧诲綍鍦板潃" align="center" prop="ipaddr" width="130" :show-overflow-tooltip="true"/>
-        <el-table-column label="鐧诲綍鍦扮偣" align="center" prop="loginLocation"/>
-        <el-table-column label="娴忚鍣�" align="center" prop="browser"/>
-        <el-table-column label="鎿嶄綔绯荤粺" align="center" prop="os"/>
-        <el-table-column label="鐧诲綍鐘舵��" align="center" prop="status" :formatter="statusFormat"/>
-        <el-table-column label="鎿嶄綔淇℃伅" align="center" prop="msg"/>
-        <el-table-column label="鐧诲綍鏃ユ湡" align="center" prop="loginTime" width="180">
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.loginTime) }}</span>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-    </basic-container>
-  </div>
-</template>
-
-<script>
-import {list, delLogininfor, cleanLogininfor, exportLogininfor} from "@/api/monitor/logininfor";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: "Logininfor",
-  mixins: [mixins],
-  data() {
-    return {
-      height:null,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 琛ㄦ牸鏁版嵁
-      list: [],
-      // 鐘舵�佹暟鎹瓧鍏�
-      statusOptions: [],
-      // 鏃ユ湡鑼冨洿
-      dateRange: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        ipaddr: undefined,
-        userName: undefined,
-        status: undefined,
-        beginTime: undefined,
-        endTime: undefined
-      }
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("sys_common_status").then(response => {
-      this.statusOptions = response.data;
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 250 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 410;
-    },
-    /** 鏌ヨ鐧诲綍鏃ュ織鍒楄〃 */
-    getList() {
-      this.loading = true;
-      list(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
-            this.list = response.rows;
-            this.total = response.total;
-            this.loading = false;
-          }
-      );
-    },
-    // 鐧诲綍鐘舵�佸瓧鍏哥炕璇�
-    statusFormat(row, column) {
-      return this.selectDictLabel(this.statusOptions, row.status);
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.dateRange = [];
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.infoId)
-      this.multiple = !selection.length
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const infoIds = row.infoId || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎璁块棶缂栧彿涓�"' + infoIds + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delLogininfor(infoIds);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 娓呯┖鎸夐挳鎿嶄綔 */
-    handleClean() {
-      this.$confirm('鏄惁纭娓呯┖鎵�鏈夌櫥褰曟棩蹇楁暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return cleanLogininfor();
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("娓呯┖鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夋搷浣滄棩蹇楁暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportLogininfor(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
-
diff --git a/energy_management_ui/src/views/monitor/online/index.vue b/energy_management_ui/src/views/monitor/online/index.vue
deleted file mode 100644
index 462a2ac..0000000
--- a/energy_management_ui/src/views/monitor/online/index.vue
+++ /dev/null
@@ -1,128 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true">
-      <el-form-item label="鐧诲綍鍦板潃" prop="ipaddr">
-        <el-input
-          v-model="queryParams.ipaddr"
-          placeholder="璇疯緭鍏ョ櫥褰曞湴鍧�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鐢ㄦ埛鍚嶇О" prop="userName">
-        <el-input
-          v-model="queryParams.userName"
-          placeholder="璇疯緭鍏ョ敤鎴峰悕绉�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-table
-      v-loading="loading"
-      :data="list.slice((pageNum-1)*pageSize,pageNum*pageSize)"
-      style="width: 100%;"
-    >
-      <el-table-column label="搴忓彿" type="index" align="center">
-        <template slot-scope="scope">
-          <span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="浼氳瘽缂栧彿" align="center" prop="tokenId" :show-overflow-tooltip="true" />
-      <el-table-column label="鐧诲綍鍚嶇О" align="center" prop="userName" :show-overflow-tooltip="true" />
-      <el-table-column label="閮ㄩ棬鍚嶇О" align="center" prop="deptName" />
-      <el-table-column label="涓绘満" align="center" prop="ipaddr" :show-overflow-tooltip="true" />
-      <el-table-column label="鐧诲綍鍦扮偣" align="center" prop="loginLocation" />
-      <el-table-column label="娴忚鍣�" align="center" prop="browser" />
-      <el-table-column label="鎿嶄綔绯荤粺" align="center" prop="os" />
-      <el-table-column label="鐧诲綍鏃堕棿" align="center" prop="loginTime" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.loginTime) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleForceLogout(scope.row)"
-            v-hasPermi="['monitor:online:forceLogout']"
-          >寮洪��</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination v-show="total>0" :total="total" :page.sync="pageNum" :limit.sync="pageSize" />
-  </div>
-</template>
-
-<script>
-import { list, forceLogout } from "@/api/monitor/online";
-
-export default {
-  name: "Online",
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 琛ㄦ牸鏁版嵁
-      list: [],
-      pageNum: 1,
-      pageSize: 10,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        ipaddr: undefined,
-        userName: undefined
-      }
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    /** 鏌ヨ鐧诲綍鏃ュ織鍒楄〃 */
-    getList() {
-      this.loading = true;
-      list(this.queryParams).then(response => {
-        this.list = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 寮洪��鎸夐挳鎿嶄綔 */
-    handleForceLogout(row) {
-      this.$confirm('鏄惁纭寮洪��鍚嶇О涓�"' + row.userName + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return forceLogout(row.tokenId);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("寮洪��鎴愬姛");
-        }).catch(function() {});
-    }
-  }
-};
-</script>
-
diff --git a/energy_management_ui/src/views/monitor/operlog/index.vue b/energy_management_ui/src/views/monitor/operlog/index.vue
deleted file mode 100644
index 3319bea..0000000
--- a/energy_management_ui/src/views/monitor/operlog/index.vue
+++ /dev/null
@@ -1,356 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form :model="queryParams" ref="queryForm" label-width="73px" class="special-form">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="绯荤粺妯″潡" prop="title">
-              <el-input
-                  v-model="queryParams.title"
-                  placeholder="璇疯緭鍏ョ郴缁熸ā鍧�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鎿嶄綔浜哄憳" prop="operName">
-              <el-input
-                  v-model="queryParams.operName"
-                  placeholder="璇疯緭鍏ユ搷浣滀汉鍛�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="绫诲瀷" prop="businessType">
-              <el-select
-                  v-model="queryParams.businessType"
-                  placeholder="鎿嶄綔绫诲瀷"
-                  clearable
-                  size="small"
-                  style="width: 100%"
-              >
-                <el-option
-                    v-for="dict in typeOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鐘舵��" prop="status">
-              <el-select
-                  v-model="queryParams.status"
-                  placeholder="鎿嶄綔鐘舵��"
-                  clearable
-                  size="small"
-                  style="width: 100%"
-              >
-                <el-option
-                    v-for="dict in statusOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鎿嶄綔鏃堕棿">
-              <el-date-picker
-                  v-model="dateRange"
-                  size="small"
-                  style="width: 100%"
-                  value-format="yyyy-MM-dd"
-                  type="daterange"
-                  range-separator="-"
-                  start-placeholder="寮�濮嬫棩鏈�"
-                  end-placeholder="缁撴潫鏃ユ湡"
-              ></el-date-picker>
-            </el-form-item>
-
-          </el-col>
-          <el-col :span="18">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              :disabled="multiple"
-              @click="handleDelete"
-              v-hasPermi="['monitor:operlog:remove']"
-          >鍒犻櫎
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              @click="handleClean"
-              v-hasPermi="['monitor:operlog:remove']"
-          >娓呯┖
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="warning"
-              icon="el-icon-download"
-              size="mini"
-              @click="handleExport"
-              v-hasPermi="['system:config:export']"
-          >瀵煎嚭
-          </el-button>
-        </el-col>
-      </el-row>
-      <el-table :height="height" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center"/>
-        <el-table-column label="鏃ュ織缂栧彿" align="center" prop="operId"/>
-        <el-table-column label="绯荤粺妯″潡" align="center" prop="title"/>
-        <el-table-column label="鎿嶄綔绫诲瀷" align="center" prop="businessType" :formatter="typeFormat"/>
-        <el-table-column label="璇锋眰鏂瑰紡" align="center" prop="requestMethod"/>
-        <el-table-column label="鎿嶄綔浜哄憳" align="center" prop="operName"/>
-        <el-table-column label="涓绘満" align="center" prop="operIp" width="130" :show-overflow-tooltip="true"/>
-        <el-table-column label="鎿嶄綔鍦扮偣" align="center" prop="operLocation"/>
-        <el-table-column label="鎿嶄綔鐘舵��" align="center" prop="status" :formatter="statusFormat"/>
-        <el-table-column label="鎿嶄綔鏃ユ湡" align="center" prop="operTime" width="180">
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.operTime) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-view"
-                @click="handleView(scope.row,scope.index)"
-                v-hasPermi="['monitor:operlog:query']"
-            >璇︾粏
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-    </basic-container>
-    <!-- 鎿嶄綔鏃ュ織璇︾粏 -->
-    <el-dialog title="鎿嶄綔鏃ュ織璇︾粏" :visible.sync="open" width="700px">
-      <el-form ref="form" :model="form" label-width="100px" size="mini">
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="鎿嶄綔妯″潡锛�">{{ form.title }} / 淇敼</el-form-item>
-            <el-form-item
-                label="鐧诲綍淇℃伅锛�"
-            >{{ form.operName }} / {{ form.operIp }} / {{ form.operLocation }}
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="璇锋眰鍦板潃锛�">{{ form.operUrl }}</el-form-item>
-            <el-form-item label="璇锋眰鏂瑰紡锛�">{{ form.requestMethod }}</el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="鎿嶄綔鏂规硶锛�">{{ form.method }}</el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="璇锋眰鍙傛暟锛�">{{ form.operParam }}</el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="杩斿洖鍙傛暟锛�">{{ form.jsonResult }}</el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鎿嶄綔鐘舵�侊細">
-              <div v-if="form.status === 0">姝e父</div>
-              <div v-else-if="form.status === 1">澶辫触</div>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鎿嶄綔鏃堕棿锛�">{{ parseTime(form.operTime) }}</el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="寮傚父淇℃伅锛�" v-if="form.status === 1">{{ form.errorMsg }}</el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="open = false">鍏� 闂�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {list, delOperlog, cleanOperlog, exportOperlog} from "@/api/monitor/operlog";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: "Operlog",
-  mixins: [mixins],
-  data() {
-    return {
-      height: null,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 琛ㄦ牸鏁版嵁
-      list: [],
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 绫诲瀷鏁版嵁瀛楀吀
-      typeOptions: [],
-      // 绫诲瀷鏁版嵁瀛楀吀
-      statusOptions: [],
-      // 鏃ユ湡鑼冨洿
-      dateRange: [],
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        title: undefined,
-        operName: undefined,
-        businessType: undefined,
-        status: undefined,
-        beginTime: undefined,
-        endTime: undefined
-      }
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("sys_oper_type").then(response => {
-      this.typeOptions = response.data;
-    });
-    this.getDicts("sys_common_status").then(response => {
-      this.statusOptions = response.data;
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 250 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 410;
-    },
-    /** 鏌ヨ鐧诲綍鏃ュ織 */
-    getList() {
-      this.loading = true;
-      list(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
-            this.list = response.rows;
-            this.total = response.total;
-            this.loading = false;
-          }
-      );
-    },
-    // 鎿嶄綔鏃ュ織鐘舵�佸瓧鍏哥炕璇�
-    statusFormat(row, column) {
-      return this.selectDictLabel(this.statusOptions, row.status);
-    },
-    // 鎿嶄綔鏃ュ織绫诲瀷瀛楀吀缈昏瘧
-    typeFormat(row, column) {
-      return this.selectDictLabel(this.typeOptions, row.businessType);
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.dateRange = [];
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.operId)
-      this.multiple = !selection.length
-    },
-    /** 璇︾粏鎸夐挳鎿嶄綔 */
-    handleView(row) {
-      this.open = true;
-      this.form = row;
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const operIds = row.operId || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎鏃ュ織缂栧彿涓�"' + operIds + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delOperlog(operIds);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 娓呯┖鎸夐挳鎿嶄綔 */
-    handleClean() {
-      this.$confirm('鏄惁纭娓呯┖鎵�鏈夋搷浣滄棩蹇楁暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return cleanOperlog();
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("娓呯┖鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夋搷浣滄棩蹇楁暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportOperlog(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
-
diff --git a/energy_management_ui/src/views/monitor/server/index.vue b/energy_management_ui/src/views/monitor/server/index.vue
deleted file mode 100644
index 8ba3082..0000000
--- a/energy_management_ui/src/views/monitor/server/index.vue
+++ /dev/null
@@ -1,210 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-row>
-      <el-col :span="12" class="card-box">
-        <el-card>
-          <div slot="header"><span>CPU</span></div>
-          <div class="el-table el-table--enable-row-hover el-table--medium">
-            <table cellspacing="0" style="width: 100%;">
-              <thead>
-                <tr>
-                  <th class="is-leaf"><div class="cell">灞炴��</div></th>
-                  <th class="is-leaf"><div class="cell">鍊�</div></th>
-                </tr>
-              </thead>
-              <tbody>
-                <tr>
-                  <td><div class="cell">鏍稿績鏁�</div></td>
-                  <td><div class="cell" v-if="server.cpu">{{ server.cpu.cpuNum }}</div></td>
-                </tr>
-                <tr>
-                  <td><div class="cell">鐢ㄦ埛浣跨敤鐜�</div></td>
-                  <td><div class="cell" v-if="server.cpu">{{ server.cpu.used }}%</div></td>
-                </tr>
-                <tr>
-                  <td><div class="cell">绯荤粺浣跨敤鐜�</div></td>
-                  <td><div class="cell" v-if="server.cpu">{{ server.cpu.sys }}%</div></td>
-                </tr>
-                <tr>
-                  <td><div class="cell">褰撳墠绌洪棽鐜�</div></td>
-                  <td><div class="cell" v-if="server.cpu">{{ server.cpu.free }}%</div></td>
-                </tr>
-              </tbody>
-            </table>
-          </div>
-        </el-card>
-      </el-col>
-
-      <el-col :span="12" class="card-box">
-        <el-card>
-          <div slot="header"><span>鍐呭瓨</span></div>
-          <div class="el-table el-table--enable-row-hover el-table--medium">
-            <table cellspacing="0" style="width: 100%;">
-              <thead>
-                <tr>
-                  <th class="is-leaf"><div class="cell">灞炴��</div></th>
-                  <th class="is-leaf"><div class="cell">鍐呭瓨</div></th>
-                  <th class="is-leaf"><div class="cell">JVM</div></th>
-                </tr>
-              </thead>
-              <tbody>
-                <tr>
-                  <td><div class="cell">鎬诲唴瀛�</div></td>
-                  <td><div class="cell" v-if="server.mem">{{ server.mem.total }}G</div></td>
-                  <td><div class="cell" v-if="server.jvm">{{ server.jvm.total }}M</div></td>
-                </tr>
-                <tr>
-                  <td><div class="cell">宸茬敤鍐呭瓨</div></td>
-                  <td><div class="cell" v-if="server.mem">{{ server.mem.used}}G</div></td>
-                  <td><div class="cell" v-if="server.jvm">{{ server.jvm.used}}M</div></td>
-                </tr>
-                <tr>
-                  <td><div class="cell">鍓╀綑鍐呭瓨</div></td>
-                  <td><div class="cell" v-if="server.mem">{{ server.mem.free }}G</div></td>
-                  <td><div class="cell" v-if="server.jvm">{{ server.jvm.free }}M</div></td>
-                </tr>
-                <tr>
-                  <td><div class="cell">浣跨敤鐜�</div></td>
-                  <td><div class="cell" v-if="server.mem" :class="{'text-danger': server.mem.usage > 80}">{{ server.mem.usage }}%</div></td>
-                  <td><div class="cell" v-if="server.jvm" :class="{'text-danger': server.jvm.usage > 80}">{{ server.jvm.usage }}%</div></td>
-                </tr>
-              </tbody>
-            </table>
-          </div>
-        </el-card>
-      </el-col>
-
-      <el-col :span="24" class="card-box">
-        <el-card>
-          <div slot="header">
-            <span>鏈嶅姟鍣ㄤ俊鎭�</span>
-          </div>
-          <div class="el-table el-table--enable-row-hover el-table--medium">
-            <table cellspacing="0" style="width: 100%;">
-              <tbody>
-                <tr>
-                  <td><div class="cell">鏈嶅姟鍣ㄥ悕绉�</div></td>
-                  <td><div class="cell" v-if="server.sys">{{ server.sys.computerName }}</div></td>
-                  <td><div class="cell">鎿嶄綔绯荤粺</div></td>
-                  <td><div class="cell" v-if="server.sys">{{ server.sys.osName }}</div></td>
-                </tr>
-                <tr>
-                  <td><div class="cell">鏈嶅姟鍣↖P</div></td>
-                  <td><div class="cell" v-if="server.sys">{{ server.sys.computerIp }}</div></td>
-                  <td><div class="cell">绯荤粺鏋舵瀯</div></td>
-                  <td><div class="cell" v-if="server.sys">{{ server.sys.osArch }}</div></td>
-                </tr>
-              </tbody>
-            </table>
-          </div>
-        </el-card>
-      </el-col>
-
-      <el-col :span="24" class="card-box">
-        <el-card>
-          <div slot="header">
-            <span>Java铏氭嫙鏈轰俊鎭�</span>
-          </div>
-          <div class="el-table el-table--enable-row-hover el-table--medium">
-            <table cellspacing="0" style="width: 100%;">
-              <tbody>
-                <tr>
-                  <td><div class="cell">Java鍚嶇О</div></td>
-                  <td><div class="cell" v-if="server.jvm">{{ server.jvm.name }}</div></td>
-                  <td><div class="cell">Java鐗堟湰</div></td>
-                  <td><div class="cell" v-if="server.jvm">{{ server.jvm.version }}</div></td>
-                </tr>
-                <tr>
-                  <td><div class="cell">鍚姩鏃堕棿</div></td>
-                  <td><div class="cell" v-if="server.jvm">{{ server.jvm.startTime }}</div></td>
-                  <td><div class="cell">杩愯鏃堕暱</div></td>
-                  <td><div class="cell" v-if="server.jvm">{{ server.jvm.runTime }}</div></td>
-                </tr>
-                <tr>
-                  <td colspan="1"><div class="cell">瀹夎璺緞</div></td>
-                  <td colspan="3"><div class="cell" v-if="server.jvm">{{ server.jvm.home }}</div></td>
-                </tr>
-                <tr>
-                  <td colspan="1"><div class="cell">椤圭洰璺緞</div></td>
-                  <td colspan="3"><div class="cell" v-if="server.sys">{{ server.sys.userDir }}</div></td>
-                </tr>
-              </tbody>
-            </table>
-          </div>
-        </el-card>
-      </el-col>
-
-      <el-col :span="24" class="card-box">
-        <el-card>
-          <div slot="header">
-            <span>纾佺洏鐘舵��</span>
-          </div>
-          <div class="el-table el-table--enable-row-hover el-table--medium">
-            <table cellspacing="0" style="width: 100%;">
-              <thead>
-                <tr>
-                  <th class="is-leaf"><div class="cell">鐩樼璺緞</div></th>
-                  <th class="is-leaf"><div class="cell">鏂囦欢绯荤粺</div></th>
-                  <th class="is-leaf"><div class="cell">鐩樼绫诲瀷</div></th>
-                  <th class="is-leaf"><div class="cell">鎬诲ぇ灏�</div></th>
-                  <th class="is-leaf"><div class="cell">鍙敤澶у皬</div></th>
-                  <th class="is-leaf"><div class="cell">宸茬敤澶у皬</div></th>
-                  <th class="is-leaf"><div class="cell">宸茬敤鐧惧垎姣�</div></th>
-                </tr>
-              </thead>
-              <tbody v-if="server.sysFiles">
-                <tr v-for="sysFile in server.sysFiles">
-                  <td><div class="cell">{{ sysFile.dirName }}</div></td>
-                  <td><div class="cell">{{ sysFile.sysTypeName }}</div></td>
-                  <td><div class="cell">{{ sysFile.typeName }}</div></td>
-                  <td><div class="cell">{{ sysFile.total }}</div></td>
-                  <td><div class="cell">{{ sysFile.free }}</div></td>
-                  <td><div class="cell">{{ sysFile.used }}</div></td>
-                  <td><div class="cell" :class="{'text-danger': sysFile.usage > 80}">{{ sysFile.usage }}%</div></td>
-                </tr>
-              </tbody>
-            </table>
-          </div>
-        </el-card>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import { getServer } from "@/api/monitor/server";
-
-export default {
-  name: "Server",
-  data() {
-    return {
-      // 鍔犺浇灞備俊鎭�
-      loading: [],
-      // 鏈嶅姟鍣ㄤ俊鎭�
-      server: []
-    };
-  },
-  created() {
-    this.getList();
-    this.openLoading();
-  },
-  methods: {
-    /** 鏌ヨ鏈嶅姟鍣ㄤ俊鎭� */
-    getList() {
-      getServer().then(response => {
-        this.server = response.data;
-        this.loading.close();
-      });
-    },
-    // 鎵撳紑鍔犺浇灞�
-    openLoading() {
-      this.loading = this.$loading({
-        lock: true,
-        text: "鎷煎懡璇诲彇涓�",
-        spinner: "el-icon-loading",
-        background: "rgba(0, 0, 0, 0.7)"
-      });
-    }
-  }
-};
-</script>
\ No newline at end of file
diff --git a/energy_management_ui/src/views/onlineMonitoring/gatewayAdministration/importAnnexTable.vue b/energy_management_ui/src/views/onlineMonitoring/gatewayAdministration/importAnnexTable.vue
deleted file mode 100644
index 30f6e30..0000000
--- a/energy_management_ui/src/views/onlineMonitoring/gatewayAdministration/importAnnexTable.vue
+++ /dev/null
@@ -1,138 +0,0 @@
-<template>
-
-</template>
-
-<script>
-import { listAnnex,delAnnex } from "@/api/facility/annex";
-import { getToken } from "@/utils/auth";
-const baseURL = process.env.VUE_APP_BASE_API
-// 閫氱敤涓嬭浇鏂规硶
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 璁¢噺鍣ㄥ叿妗f闄勪欢琛ㄦ牸鏁版嵁
-      annexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      idOptions: [],
-      // 鍏宠仈meter_implement.id瀛楀吀
-      implementIdOptions: [],
-      // 鏂囦欢鍚嶅瓧鍏�
-      fileNameOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        facilityId:'',
-        tableName: undefined
-      },
-      uploadData: {
-        // 鏄惁鏄剧ず寮瑰嚭灞傦紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        open: false,
-        // 寮瑰嚭灞傛爣棰橈紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        title: "",
-        // 鏄惁绂佺敤涓婁紶
-        isUploading: false,
-        // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-        headers: { Authorization: "Bearer " + getToken() },
-        // 涓婁紶鐨勫湴鍧�
-        url: process.env.VUE_APP_BASE_API + "/facility/annex/fileImport"
-      },
-    };
-  },
-  methods: {
-    // 鏄剧ず寮规
-    show(facid,code) {
-      this.reset();
-      this.queryParams.facilityId = facid;
-      this.getList();
-      this.title='缂栧彿 '+code+' 闄勪欢';
-      this.open = true;
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.queryParams = {
-        pageNum: 1,
-        pageSize: 10,
-        facilityId:'',
-        tableName: undefined
-      };
-      //娓呯┖涓婁紶缁勪欢鐨勬枃浠跺垪琛�
-      this.resetForm("queryForm");
-    },
-    // 鏌ヨ琛ㄦ暟鎹�
-    getList() {
-      listAnnex(this.queryParams).then(response => {
-        this.annexList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-       this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 鏌ョ湅鎸夐挳鎿嶄綔 */
-    seeImpFile(row) {
-      this.fileDownload(row.fileName,row.filePath,false);
-    },
-    handclose()
-    {
-      this.open=false;
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      this.$confirm('鏄惁纭鍒犻櫎闄勪欢鍚嶇О涓�"' + row.fileName + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function() {
-        return delAnnex(row.id);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function() {});
-    },
-    // 闄勪欢涓婁紶涓鐞�
-    handleFileUploadProgress(event, file, fileList) {
-      this.uploadData.isUploading = true;
-    },
-    // 闄勪欢涓婁紶鎴愬姛澶勭悊
-    handleFileSuccess(response, file, fileList) {
-      this.uploadData.open = false;
-      this.uploadData.isUploading = false;
-      this.$refs.upload.clearFiles();
-      this.$alert(response.msg, "闄勪欢缁撴灉", { dangerouslyUseHTMLString: true });
-      this.getList();
-    },
-    // 闄勪欢涓婁紶鏂囦欢
-    submitFileForm() {
-      this.$refs.upload.submit();
-    },
-    handlePreview(file) {
-      console.log(file);
-    },
-  }
-};
-
-</script>
diff --git a/energy_management_ui/src/views/onlineMonitoring/gatewayAdministration/index.vue b/energy_management_ui/src/views/onlineMonitoring/gatewayAdministration/index.vue
deleted file mode 100644
index 232346c..0000000
--- a/energy_management_ui/src/views/onlineMonitoring/gatewayAdministration/index.vue
+++ /dev/null
@@ -1,651 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form
-        class="special-form"
-        :model="queryParams"
-        ref="queryForm"
-        label-width="72px"
-      >
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="缃戝叧缂栧彿" prop="gatewayNum">
-              <el-input
-                v-model="queryParams.gatewayNum"
-                placeholder="璇疯緭鍏ョ紪鐮�"
-                clearable
-                size="small"
-                @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鍦扮偣鍚嶇О" prop="address">
-              <el-input
-                v-model="queryParams.address"
-                placeholder="璇疯緭鍏ュ湴鐐瑰悕绉�"
-                clearable
-                size="small"
-                @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-
-          <el-col :span="6">
-            <el-form-item class="operation">
-              <el-button
-                type="primary"
-                icon="el-icon-search"
-                size="mini"
-                @click="handleQuery"
-                >鎼滅储</el-button
-              >
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-                >閲嶇疆</el-button
-              >
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-            type="primary"
-            icon="el-icon-plus"
-            size="mini"
-            @click="handleAdd"
-            v-hasPermi="['facility:archives:add']"
-            >鏂板
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            type="success"
-            icon="el-icon-edit"
-            size="mini"
-            :disabled="single"
-            @click="handleUpdate"
-            v-hasPermi="['facility:archives:edit']"
-            >淇敼
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            type="danger"
-            icon="el-icon-delete"
-            size="mini"
-            :disabled="multiple"
-            @click="handleDelete"
-            v-hasPermi="['facility:archives:remove']"
-            >鍒犻櫎
-          </el-button>
-        </el-col>
-
-        <!--        <el-col :span="1.5">-->
-        <!--          <el-button-->
-        <!--              type="info"-->
-        <!--              icon="el-icon-upload2"-->
-        <!--              size="mini"-->
-        <!--              @click="handleImport"-->
-        <!--              v-hasPermi="['facility:archives:import']"-->
-        <!--          >瀵煎叆-->
-        <!--          </el-button>-->
-        <!--        </el-col>-->
-      </el-row>
-      <el-table
-        v-loading="loading"
-        :data="archivesList"
-        @selection-change="handleSelectionChange"
-        :height="height"
-      >
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column
-          label="缃戝叧缂栧彿"
-          align="center"
-          prop="gatewayNum"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="鍘傚尯"
-          align="center"
-          prop="plantArea"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="鍦扮偣"
-          align="center"
-          prop="address"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="淇敼浜�"
-          align="center"
-          prop="updateBy"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="淇敼鏃堕棿"
-          align="center"
-          prop="updateTime"
-          show-overflow-tooltip
-        />
-
-        <el-table-column
-          label="鎿嶄綔"
-          align="center"
-          width="200"
-          class-name="small-padding fixed-width"
-          show-overflow-tooltip
-          fixed="right"
-        >
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="handleUpdate(scope.row)"
-              v-hasPermi="['facility:archives:edit']"
-              >淇敼
-            </el-button>
-
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['facility:archives:remove']"
-              >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-      <!-- 娣诲姞鎴栦慨鏀硅澶囨。妗堝璇濇 -->
-      <el-dialog
-        :title="title"
-        :visible.sync="open"
-        width="820px"
-        class="dialog-form-row"
-      >
-        <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-          <el-row :gutter="24">
-            <el-col :span="8">
-              <el-form-item label="缃戝叧缂栧彿" prop="gatewayNum">
-                <el-input v-model="form.gatewayNum" placeholder="璇疯緭鍏ョ紪鐮�" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="鍘傚尯" prop="plantArea">
-                <el-input
-                  v-model="form.plantArea"
-                  placeholder="璇疯緭鍏ュ巶鍖哄悕绉�"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="鍦板潃" prop="address">
-                <el-input v-model="form.address" placeholder="璇疯緭鍏ュ湴鍧�鍚嶇О" />
-              </el-form-item>
-            </el-col>
-          </el-row>
-        </el-form>
-        <div slot="footer" class="dialog-footer" style="padding-top: 5px">
-          <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-          <el-button @click="cancel">鍙� 娑�</el-button>
-        </div>
-      </el-dialog>
-      <!-- 璁惧妗f 瀵煎叆瀵硅瘽妗� -->
-      <el-dialog
-        :title="upload.title"
-        :visible.sync="upload.open"
-        :destroy-on-close="true"
-        width="400px"
-      >
-        <el-upload
-          ref="upload"
-          :limit="1"
-          :accept="upload.accept"
-          :headers="upload.headers"
-          :action="upload.url"
-          :disabled="upload.isUploading"
-          :on-progress="handleFileUploadProgress"
-          :on-success="handleFileSuccess"
-          :auto-upload="false"
-          drag
-        >
-          <i class="el-icon-upload"></i>
-          <div class="el-upload__text">
-            灏嗘枃浠舵嫋鍒版澶勶紝鎴�
-            <em>鐐瑰嚮涓婁紶</em>
-          </div>
-          <div class="el-upload__tip" slot="tip">
-            <el-link
-              type="info"
-              style="font-size: 12px; color: blue"
-              @click="importTemplate"
-              >涓嬭浇妯℃澘</el-link
-            >
-          </div>
-          <div class="el-upload__tip" style="color: red" slot="tip">
-            瀵煎叆鎻愮ず锛�<br />1銆佹柊澧炲鍏�,浠呭厑璁稿鍏モ�渪ls鈥濇垨鈥渪lsx鈥濇牸寮忔枃浠讹紒
-            <br />2銆佺紪鐮佸繀椤诲敮涓�,閲嶅鏁版嵁鏃犳硶瀵煎叆
-            <br />3銆佽澶囩绫汇�佷娇鐢ㄥ垎鍘傘�佽兘婧愮瓑绾у~鍐欓敊璇殑鏁版嵁鏃犳硶瀵煎叆
-            <br />4銆佹瀹氬懆鏈熴�佹彁閱掑懆鏈熷ぇ浜�0姝f暣鏁�,濉啓閿欒鍒欓粯璁や负1
-            <br />5銆佽捣濮嬫椂闂村~鍐欓敊璇垨涓嶅~鍒欓粯璁や负绌�
-          </div>
-        </el-upload>
-        <div slot="footer" class="dialog-footer">
-          <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button>
-          <el-button @click="upload.open = false">鍙� 娑�</el-button>
-        </div>
-      </el-dialog>
-      <importAnnexTable ref="importAnnex" />
-    </basic-container>
-  </div>
-</template>
-<style scoped>
-.el-dialog__body {
-  padding: 10px 10px 10px 10px;
-  color: #606266;
-  font-size: 14px;
-  word-break: break-all;
-}
-</style>
-<script>
-import {
-  listArchives,
-  getArchives,
-  delArchives,
-  addArchives,
-  updateArchives,
-  exportArchives,
-  importTemplate,
-} from "@/api/onlineMonitoring/index";
-import { getToken } from "@/utils/auth";
-import importAnnexTable from "./importAnnexTable";
-import mixins from "@/layout/mixin/getHeight";
-
-const facilityType = "0";
-const branchFactory = "0";
-const facilityGrade = "0";
-export default {
-  name: "importAnnex",
-  components: { importAnnexTable },
-  mixins: [mixins],
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 缂栫爜閫変腑鏁扮粍
-      codes: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 璁惧妗f琛ㄦ牸鏁版嵁
-      archivesList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭id瀛楀吀
-      idOptions: [],
-      // 缂栫爜瀛楀吀
-      codeOptions: [],
-      // 璁惧鍚嶇О瀛楀吀
-      facilityNameOptions: [],
-      // 璁惧绫诲瀷瀛楀吀
-      facilityTypeOptions: [],
-      // 閲嶇偣璁惧瀛楀吀
-      pointFlagOptions: [],
-      // 浣跨敤鍒嗗巶瀛楀吀
-      branchFactoryOptions: [],
-      // 鐗╃悊浣嶇疆瀛楀吀
-      istallationLocationnOptions: [],
-      // 鑳借�楃瓑绾у瓧鍏�
-      facilityGradeOptions: [],
-      // 棰濆畾鍔熺巼瀛楀吀
-      ratedPowerOptions: [],
-      // 鐢熶骇鏃ユ湡瀛楀吀
-      productionDateOptions: [],
-      // 鎶曡繍鏃ユ湡瀛楀吀
-      putrunDateOptions: [],
-      // 鐢熶骇鍘傚瀛楀吀
-      manufacturerOptions: [],
-      // 璐熻矗浜哄瓧鍏�
-      personChargeOptions: [],
-      // 鎶�鏈弬鏁板瓧鍏�
-      technicalDataOptions: [],
-      // 璧峰鏃堕棿瀛楀吀
-      startTimeOptions: [],
-      // 妫�瀹氬懆鏈熷瓧鍏�
-      checkCycleOptions: [],
-      // 鎻愰啋鍛ㄦ湡瀛楀吀
-      reminderCycleOptions: [],
-      // 澶囨敞瀛楀吀
-      remarkOptions: [],
-      // 寤虹珛鏃堕棿瀛楀吀
-      createTimeOptions: [],
-      // 鐩戠悊浜哄瓧鍏�
-      createByOptions: [],
-      // 淇敼鏃堕棿瀛楀吀
-      updateTimeOptions: [],
-      // 淇敼浜哄瓧鍏�
-      updateByOptions: [],
-      upload: {
-        // 鏄惁鏄剧ず寮瑰嚭灞傦紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        open: false,
-        //涓婁紶鏂囦欢绫诲瀷鎺у埗
-        accept: undefined,
-        // 寮瑰嚭灞傛爣棰橈紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        title: undefined,
-        // 鏄惁绂佺敤涓婁紶
-        isUploading: false,
-        // 鏄惁鏇存柊宸茬粡瀛樺湪鐨勮閲忓櫒鍏锋。妗�
-        updateSupport: 0,
-        // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-        headers: { Authorization: "Bearer " + getToken() },
-        // 涓婁紶鐨勫湴鍧�
-        url: "",
-      },
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        code: undefined,
-        facilityName: undefined,
-        facilityType: undefined,
-        branchFactory: undefined,
-        pointFlag: undefined,
-        istallationLocationn: undefined,
-        facilityGrade: undefined,
-        manufacturer: undefined,
-        ratedPower: undefined,
-      },
-      height: null,
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        gatewayNum: [{ required: true, message: "缃戝叧缂栧彿涓嶈兘涓虹┖", trigger: "blur" }],
-        plantArea: [
-          { required: true, message: "鍘傚尯涓嶈兘涓虹┖", trigger: "blur" },
-        ],
-        address: [
-          { required: true, message: "鍦板潃涓嶈兘涓虹┖", trigger: "blur" },
-        ],
-      },
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("facility_type").then((response) => {
-      for (let i = 0; i < response.data.length; i++) {
-        if (response.data[i].isDefault == "Y") {
-          this.facilityType = response.data[i].dictValue;
-        }
-      }
-      this.facilityTypeOptions = response.data;
-    });
-    this.getDicts("pointFlag").then((response) => {
-      for (let i = 0; i < response.data.length; i++) {
-        if (response.data[i].isDefault == "Y") {
-          this.pointFlag = response.data[i].dictValue;
-        }
-      }
-      this.pointFlagOptions = response.data;
-    });
-    this.getDicts("branch_factory").then((response) => {
-      for (let i = 0; i < response.data.length; i++) {
-        if (response.data[i].isDefault == "Y") {
-          this.branchFactory = response.data[i].dictValue;
-        }
-      }
-      this.branchFactoryOptions = response.data;
-    });
-    this.getDicts("facility_grade").then((response) => {
-      for (let i = 0; i < response.data.length; i++) {
-        if (response.data[i].isDefault == "Y") {
-          this.facilityGrade = response.data[i].dictValue;
-        }
-      }
-      this.facilityGradeOptions = response.data;
-    });
-    this.getDicts("ratedPower").then((response) => {
-      this.ratedPowerOptions = response.data;
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + "px",
-        overflow: "hidden",
-      };
-      this.height = window.innerHeight - 370;
-    },
-    /** 鏌ヨ璁惧妗f鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listArchives(this.queryParams).then((response) => {
-        this.archivesList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 璁惧绫诲瀷瀛楀吀缈昏瘧
-    facilityTypeFormat(row, column) {
-      return this.selectDictLabel(this.facilityTypeOptions, row.facilityType);
-    },
-    // 浣跨敤鍒嗗巶瀛楀吀缈昏瘧
-    branchFactoryFormat(row, column) {
-      return this.selectDictLabel(this.branchFactoryOptions, row.branchFactory);
-    },
-    // 閲嶇偣璁惧瀛楀吀缈昏瘧
-    pointFlagFactoryFormat(row, column) {
-      return this.selectDictLabel(this.pointFlagOptions, row.pointFlag);
-    },
-    // 鑳借�楃瓑绾у瓧鍏哥炕璇�
-    facilityGradeFormat(row, column) {
-      return this.selectDictLabel(this.facilityGradeOptions, row.facilityGrade);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        code: undefined,
-        facilityName: undefined,
-        facilityType: undefined,
-        branchFactory: undefined,
-        istallationLocationn: undefined,
-        facilityGrade: undefined,
-        ratedPower: undefined,
-        productionDate: undefined,
-        putrunDate: undefined,
-        manufacturer: undefined,
-        personCharge: undefined,
-        technicalData: undefined,
-        startTime: undefined,
-        checkCycle: undefined,
-        reminderCycle: undefined,
-        remark: undefined,
-        createTime: undefined,
-        createBy: undefined,
-        updateTime: undefined,
-        updateBy: undefined,
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map((item) => item.id);
-      this.codes = selection.map((item) => item.code);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞";
-      this.form.facilityGrade = this.facilityGrade;
-      this.form.facilityType = this.facilityType;
-      this.form.branchFactory = this.branchFactory;
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      //this.reset();
-      const id = row.id || this.ids;
-       this.form = row;
-        this.open = true;
-        this.title = "淇敼";
-      getArchives(id).then((response) => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate((valid) => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updateArchives(this.form).then((response) => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addArchives(this.form).then((response) => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      const codes = row.code || this.codes;
-      this.$confirm(
-        '鏄惁纭鍒犻櫎?',
-        "璀﹀憡",
-        {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning",
-        }
-      )
-        .then(function () {
-          return delArchives(ids);
-          this.resetForm("queryForm");
-        })
-        .then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        })
-        .catch(function () {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夎澶囨。妗堟暟鎹」?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning",
-      })
-        .then(function () {
-          return exportArchives(queryParams);
-        })
-        .then((response) => {
-          this.download(response.msg);
-        })
-        .catch(function () {});
-    },
-    /** 瀵煎叆鎸夐挳鎿嶄綔 */
-    handleImport() {
-      //this.$refs.upload.clearFiles();
-      this.upload.title = "璁惧妗f瀵煎叆";
-      this.upload.accept = ".xlsx, .xls";
-      this.upload.url =
-        process.env.VUE_APP_BASE_API +
-        "/facility/archives/imporel-colata?updateSupport=0";
-      this.upload.open = true;
-    },
-    /** 涓嬭浇妯℃澘鎿嶄綔 */
-    importTemplate() {
-      importTemplate().then((response) => {
-        this.download(response.msg);
-      });
-    },
-    // 鏂囦欢涓婁紶涓鐞�
-    handleFileUploadProgress(event, file, fileList) {
-      this.upload.isUploading = true;
-    },
-    // 鏂囦欢涓婁紶鎴愬姛澶勭悊
-    handleFileSuccess(response, file, fileList) {
-      this.upload.open = false;
-      this.upload.isUploading = false;
-      this.$refs.upload.clearFiles();
-      this.$alert(response.msg, "瀵煎叆缁撴灉", { dangerouslyUseHTMLString: true });
-      this.getList();
-    },
-    // 鎻愪氦涓婁紶鏂囦欢
-    submitFileForm() {
-      this.$refs.upload.submit();
-    },
-    /** 鎵撳紑闄勪欢琛ㄥ脊绐� */
-    openImportAnnexTable(row) {
-      let facid = row.id;
-      let faccode = row.code;
-      this.$refs.importAnnex.show(facid, faccode);
-    },
-  },
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-
-.dialog-form-row {
-  .el-row {
-    margin-bottom: 0;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/onlineMonitoring/gatewayMonitoring/importAnnexTable.vue b/energy_management_ui/src/views/onlineMonitoring/gatewayMonitoring/importAnnexTable.vue
deleted file mode 100644
index 30f6e30..0000000
--- a/energy_management_ui/src/views/onlineMonitoring/gatewayMonitoring/importAnnexTable.vue
+++ /dev/null
@@ -1,138 +0,0 @@
-<template>
-
-</template>
-
-<script>
-import { listAnnex,delAnnex } from "@/api/facility/annex";
-import { getToken } from "@/utils/auth";
-const baseURL = process.env.VUE_APP_BASE_API
-// 閫氱敤涓嬭浇鏂规硶
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 璁¢噺鍣ㄥ叿妗f闄勪欢琛ㄦ牸鏁版嵁
-      annexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      idOptions: [],
-      // 鍏宠仈meter_implement.id瀛楀吀
-      implementIdOptions: [],
-      // 鏂囦欢鍚嶅瓧鍏�
-      fileNameOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        facilityId:'',
-        tableName: undefined
-      },
-      uploadData: {
-        // 鏄惁鏄剧ず寮瑰嚭灞傦紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        open: false,
-        // 寮瑰嚭灞傛爣棰橈紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        title: "",
-        // 鏄惁绂佺敤涓婁紶
-        isUploading: false,
-        // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-        headers: { Authorization: "Bearer " + getToken() },
-        // 涓婁紶鐨勫湴鍧�
-        url: process.env.VUE_APP_BASE_API + "/facility/annex/fileImport"
-      },
-    };
-  },
-  methods: {
-    // 鏄剧ず寮规
-    show(facid,code) {
-      this.reset();
-      this.queryParams.facilityId = facid;
-      this.getList();
-      this.title='缂栧彿 '+code+' 闄勪欢';
-      this.open = true;
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.queryParams = {
-        pageNum: 1,
-        pageSize: 10,
-        facilityId:'',
-        tableName: undefined
-      };
-      //娓呯┖涓婁紶缁勪欢鐨勬枃浠跺垪琛�
-      this.resetForm("queryForm");
-    },
-    // 鏌ヨ琛ㄦ暟鎹�
-    getList() {
-      listAnnex(this.queryParams).then(response => {
-        this.annexList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-       this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 鏌ョ湅鎸夐挳鎿嶄綔 */
-    seeImpFile(row) {
-      this.fileDownload(row.fileName,row.filePath,false);
-    },
-    handclose()
-    {
-      this.open=false;
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      this.$confirm('鏄惁纭鍒犻櫎闄勪欢鍚嶇О涓�"' + row.fileName + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function() {
-        return delAnnex(row.id);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function() {});
-    },
-    // 闄勪欢涓婁紶涓鐞�
-    handleFileUploadProgress(event, file, fileList) {
-      this.uploadData.isUploading = true;
-    },
-    // 闄勪欢涓婁紶鎴愬姛澶勭悊
-    handleFileSuccess(response, file, fileList) {
-      this.uploadData.open = false;
-      this.uploadData.isUploading = false;
-      this.$refs.upload.clearFiles();
-      this.$alert(response.msg, "闄勪欢缁撴灉", { dangerouslyUseHTMLString: true });
-      this.getList();
-    },
-    // 闄勪欢涓婁紶鏂囦欢
-    submitFileForm() {
-      this.$refs.upload.submit();
-    },
-    handlePreview(file) {
-      console.log(file);
-    },
-  }
-};
-
-</script>
diff --git a/energy_management_ui/src/views/onlineMonitoring/gatewayMonitoring/index.vue b/energy_management_ui/src/views/onlineMonitoring/gatewayMonitoring/index.vue
deleted file mode 100644
index b3ecd67..0000000
--- a/energy_management_ui/src/views/onlineMonitoring/gatewayMonitoring/index.vue
+++ /dev/null
@@ -1,484 +0,0 @@
-<template>
-  <div>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-     <el-table
-        v-loading="loading"
-        :data="archivesList"
-
-        :height="height"
-      >
-        <el-table-column
-          label="缃戝叧缂栧彿"
-          align="center"
-          prop="gatewayNum"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="鍘傚尯"
-          align="center"
-          prop="plantArea"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="鍦扮偣"
-          align="center"
-          prop="address"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="鐘舵��"
-          align="center"
-          prop="state"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="鏈�鍚庤繛鎺ユ椂闂�"
-          align="center"
-          prop="hbtTime"
-          show-overflow-tooltip
-        />
-
-     </el-table>
-
-      <!-- 娣诲姞鎴栦慨鏀硅澶囨。妗堝璇濇 -->
-      <el-dialog
-        :title="title"
-        :visible.sync="open"
-        width="820px"
-        class="dialog-form-row"
-      >
-        <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-          <el-row :gutter="24">
-            <el-col :span="8">
-              <el-form-item label="缃戝叧缂栧彿" prop="gatewayNum">
-                <el-input v-model="form.gatewayNum" placeholder="璇疯緭鍏ョ紪鐮�" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="鍘傚尯" prop="plantArea">
-                <el-input
-                  v-model="form.plantArea"
-                  placeholder="璇疯緭鍏ヨ澶囧悕绉�"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="鍦板潃" prop="address">
-                <el-input v-model="form.address" placeholder="璇疯緭鍏ヨ澶囧悕绉�" />
-              </el-form-item>
-            </el-col>
-          </el-row>
-        </el-form>
-        <div slot="footer" class="dialog-footer" style="padding-top: 5px">
-          <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-          <el-button @click="cancel">鍙� 娑�</el-button>
-        </div>
-      </el-dialog>
-      <!-- 璁惧妗f 瀵煎叆瀵硅瘽妗� -->
-      <el-dialog
-        :title="upload.title"
-        :visible.sync="upload.open"
-        :destroy-on-close="true"
-        width="400px"
-      >
-        <el-upload
-          ref="upload"
-          :limit="1"
-          :accept="upload.accept"
-          :headers="upload.headers"
-          :action="upload.url"
-          :disabled="upload.isUploading"
-          :on-progress="handleFileUploadProgress"
-          :on-success="handleFileSuccess"
-          :auto-upload="false"
-          drag
-        >
-          <i class="el-icon-upload"></i>
-          <div class="el-upload__text">
-            灏嗘枃浠舵嫋鍒版澶勶紝鎴�
-            <em>鐐瑰嚮涓婁紶</em>
-          </div>
-          <div class="el-upload__tip" slot="tip">
-            <el-link
-              type="info"
-              style="font-size: 12px; color: blue"
-              @click="importTemplate"
-              >涓嬭浇妯℃澘</el-link
-            >
-          </div>
-          <div class="el-upload__tip" style="color: red" slot="tip">
-            瀵煎叆鎻愮ず锛�<br />1銆佹柊澧炲鍏�,浠呭厑璁稿鍏モ�渪ls鈥濇垨鈥渪lsx鈥濇牸寮忔枃浠讹紒
-            <br />2銆佺紪鐮佸繀椤诲敮涓�,閲嶅鏁版嵁鏃犳硶瀵煎叆
-            <br />3銆佽澶囩绫汇�佷娇鐢ㄥ垎鍘傘�佽兘婧愮瓑绾у~鍐欓敊璇殑鏁版嵁鏃犳硶瀵煎叆
-            <br />4銆佹瀹氬懆鏈熴�佹彁閱掑懆鏈熷ぇ浜�0姝f暣鏁�,濉啓閿欒鍒欓粯璁や负1
-            <br />5銆佽捣濮嬫椂闂村~鍐欓敊璇垨涓嶅~鍒欓粯璁や负绌�
-          </div>
-        </el-upload>
-        <div slot="footer" class="dialog-footer">
-          <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button>
-          <el-button @click="upload.open = false">鍙� 娑�</el-button>
-        </div>
-      </el-dialog>
-      <importAnnexTable ref="importAnnex" />
-    </basic-container>
-  </div>
-</template>
-<style scoped>
-.el-dialog__body {
-  padding: 10px 10px 10px 10px;
-  color: #606266;
-  font-size: 14px;
-  word-break: break-all;
-}
-</style>
-<script>
-import {
-  getlist
-} from "@/api/onlineMonitoring/index";
-import { getToken } from "@/utils/auth";
-import importAnnexTable from "./importAnnexTable";
-import mixins from "@/layout/mixin/getHeight";
-
-const facilityType = "0";
-const branchFactory = "0";
-const facilityGrade = "0";
-export default {
-  name: "importAnnex",
-  components: { importAnnexTable },
-  mixins: [mixins],
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 缂栫爜閫変腑鏁扮粍
-      codes: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 璁惧妗f琛ㄦ牸鏁版嵁
-      archivesList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭id瀛楀吀
-      idOptions: [],
-      // 缂栫爜瀛楀吀
-      codeOptions: [],
-      // 璁惧鍚嶇О瀛楀吀
-      facilityNameOptions: [],
-      // 璁惧绫诲瀷瀛楀吀
-      facilityTypeOptions: [],
-      // 閲嶇偣璁惧瀛楀吀
-      pointFlagOptions: [],
-      // 浣跨敤鍒嗗巶瀛楀吀
-      branchFactoryOptions: [],
-      // 鐗╃悊浣嶇疆瀛楀吀
-      istallationLocationnOptions: [],
-      // 鑳借�楃瓑绾у瓧鍏�
-      facilityGradeOptions: [],
-      // 棰濆畾鍔熺巼瀛楀吀
-      ratedPowerOptions: [],
-      // 鐢熶骇鏃ユ湡瀛楀吀
-      productionDateOptions: [],
-      // 鎶曡繍鏃ユ湡瀛楀吀
-      putrunDateOptions: [],
-      // 鐢熶骇鍘傚瀛楀吀
-      manufacturerOptions: [],
-      // 璐熻矗浜哄瓧鍏�
-      personChargeOptions: [],
-      // 鎶�鏈弬鏁板瓧鍏�
-      technicalDataOptions: [],
-      // 璧峰鏃堕棿瀛楀吀
-      startTimeOptions: [],
-      // 妫�瀹氬懆鏈熷瓧鍏�
-      checkCycleOptions: [],
-      // 鎻愰啋鍛ㄦ湡瀛楀吀
-      reminderCycleOptions: [],
-      // 澶囨敞瀛楀吀
-      remarkOptions: [],
-      // 寤虹珛鏃堕棿瀛楀吀
-      createTimeOptions: [],
-      // 鐩戠悊浜哄瓧鍏�
-      createByOptions: [],
-      // 淇敼鏃堕棿瀛楀吀
-      updateTimeOptions: [],
-      // 淇敼浜哄瓧鍏�
-      updateByOptions: [],
-      upload: {
-        // 鏄惁鏄剧ず寮瑰嚭灞傦紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        open: false,
-        //涓婁紶鏂囦欢绫诲瀷鎺у埗
-        accept: undefined,
-        // 寮瑰嚭灞傛爣棰橈紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        title: undefined,
-        // 鏄惁绂佺敤涓婁紶
-        isUploading: false,
-        // 鏄惁鏇存柊宸茬粡瀛樺湪鐨勮閲忓櫒鍏锋。妗�
-        updateSupport: 0,
-        // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-        headers: { Authorization: "Bearer " + getToken() },
-        // 涓婁紶鐨勫湴鍧�
-        url: "",
-      },
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        code: undefined,
-        facilityName: undefined,
-        facilityType: undefined,
-        branchFactory: undefined,
-        pointFlag: undefined,
-        istallationLocationn: undefined,
-        facilityGrade: undefined,
-        manufacturer: undefined,
-        ratedPower: undefined,
-      },
-      height: null,
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        gatewayNum: [{ required: true, message: "缃戝叧缂栧彿涓嶈兘涓虹┖", trigger: "blur" }],
-        plantArea: [
-          { required: true, message: "鍘傚尯涓嶈兘涓虹┖", trigger: "blur" },
-        ],
-        address: [
-          { required: true, message: "鍦板潃涓嶈兘涓虹┖", trigger: "blur" },
-        ],
-      },
-    };
-  },
-  created() {
-    this.getList();
-
- },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + "px",
-        overflow: "hidden",
-      };
-      this.height = window.innerHeight - 370;
-    },
-    /** 鏌ヨ璁惧妗f鍒楄〃 */
-    getList() {
-      this.loading = true;
-      getlist().then((response) => {
-        this.archivesList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 璁惧绫诲瀷瀛楀吀缈昏瘧
-    facilityTypeFormat(row, column) {
-      return this.selectDictLabel(this.facilityTypeOptions, row.facilityType);
-    },
-    // 浣跨敤鍒嗗巶瀛楀吀缈昏瘧
-    branchFactoryFormat(row, column) {
-      return this.selectDictLabel(this.branchFactoryOptions, row.branchFactory);
-    },
-    // 閲嶇偣璁惧瀛楀吀缈昏瘧
-    pointFlagFactoryFormat(row, column) {
-      return this.selectDictLabel(this.pointFlagOptions, row.pointFlag);
-    },
-    // 鑳借�楃瓑绾у瓧鍏哥炕璇�
-    facilityGradeFormat(row, column) {
-      return this.selectDictLabel(this.facilityGradeOptions, row.facilityGrade);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        code: undefined,
-        facilityName: undefined,
-        facilityType: undefined,
-        branchFactory: undefined,
-        istallationLocationn: undefined,
-        facilityGrade: undefined,
-        ratedPower: undefined,
-        productionDate: undefined,
-        putrunDate: undefined,
-        manufacturer: undefined,
-        personCharge: undefined,
-        technicalData: undefined,
-        startTime: undefined,
-        checkCycle: undefined,
-        reminderCycle: undefined,
-        remark: undefined,
-        createTime: undefined,
-        createBy: undefined,
-        updateTime: undefined,
-        updateBy: undefined,
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map((item) => item.id);
-      this.codes = selection.map((item) => item.code);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞";
-      this.form.facilityGrade = this.facilityGrade;
-      this.form.facilityType = this.facilityType;
-      this.form.branchFactory = this.branchFactory;
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      //this.reset();
-      const id = row.id || this.ids;
-       this.form = row;
-        this.open = true;
-        this.title = "淇敼";
-      getArchives(id).then((response) => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate((valid) => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updateArchives(this.form).then((response) => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addArchives(this.form).then((response) => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      const codes = row.code || this.codes;
-      this.$confirm(
-        '鏄惁纭鍒犻櫎?',
-        "璀﹀憡",
-        {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning",
-        }
-      )
-        .then(function () {
-          return delArchives(ids);
-          this.resetForm("queryForm");
-        })
-        .then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        })
-        .catch(function () {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夎澶囨。妗堟暟鎹」?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning",
-      })
-        .then(function () {
-          return exportArchives(queryParams);
-        })
-        .then((response) => {
-          this.download(response.msg);
-        })
-        .catch(function () {});
-    },
-    /** 瀵煎叆鎸夐挳鎿嶄綔 */
-    handleImport() {
-      //this.$refs.upload.clearFiles();
-      this.upload.title = "璁惧妗f瀵煎叆";
-      this.upload.accept = ".xlsx, .xls";
-      this.upload.url =
-        process.env.VUE_APP_BASE_API +
-        "/facility/archives/imporel-colata?updateSupport=0";
-      this.upload.open = true;
-    },
-    /** 涓嬭浇妯℃澘鎿嶄綔 */
-    importTemplate() {
-      importTemplate().then((response) => {
-        this.download(response.msg);
-      });
-    },
-    // 鏂囦欢涓婁紶涓鐞�
-    handleFileUploadProgress(event, file, fileList) {
-      this.upload.isUploading = true;
-    },
-    // 鏂囦欢涓婁紶鎴愬姛澶勭悊
-    handleFileSuccess(response, file, fileList) {
-      this.upload.open = false;
-      this.upload.isUploading = false;
-      this.$refs.upload.clearFiles();
-      this.$alert(response.msg, "瀵煎叆缁撴灉", { dangerouslyUseHTMLString: true });
-      this.getList();
-    },
-    // 鎻愪氦涓婁紶鏂囦欢
-    submitFileForm() {
-      this.$refs.upload.submit();
-    },
-    /** 鎵撳紑闄勪欢琛ㄥ脊绐� */
-    openImportAnnexTable(row) {
-      let facid = row.id;
-      let faccode = row.code;
-      this.$refs.importAnnex.show(facid, faccode);
-    },
-  },
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-
-.dialog-form-row {
-  .el-row {
-    margin-bottom: 0;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/policy/policyInsert/importFileTable.vue b/energy_management_ui/src/views/policy/policyInsert/importFileTable.vue
deleted file mode 100644
index 8c4272e..0000000
--- a/energy_management_ui/src/views/policy/policyInsert/importFileTable.vue
+++ /dev/null
@@ -1,236 +0,0 @@
-<template>
-  <el-dialog :title="title" :visible.sync="open"  :destroy-on-close="true" width="800px" top="5vh">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鏂囦欢鍚�" prop="fileName">
-        <el-input
-          v-model="queryParams.fileName"
-          placeholder="璇疯緭鍏ユ枃浠跺悕"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-upload
-      ref="upload"
-      :limit="1"
-      :headers="uploadData.headers"
-      :action="uploadData.url + '?regulationsId=' + queryParams.regulationsId"
-      :on-preview="handlePreview"
-      :on-progress="handleFileUploadProgress"
-      :on-success="handleFileSuccess"
-      :auto-upload="false"
-    >
-      <el-button slot="trigger" size="small" type="primary">閫夊彇鏂囦欢</el-button>
-      <el-button style="margin-left: 10px;" size="small" type="success" @click="submitFileForm">涓婁紶鍒版湇鍔″櫒</el-button>
-      <div class="el-upload__tip" style="color:red" slot="tip">娉ㄦ剰鎺у埗鏂囦欢澶у皬锛屼笉瑕佽秴杩�50M</div>
-    </el-upload>
-
-    <el-row>
-    <el-table v-loading="loading" :data="annexList">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="涓婁紶鏃堕棿" align="center" prop="createTime"/>
-      <el-table-column label="鏂囦欢鍚�" align="center" prop="fileName" />
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="seeImpFile(scope.row)"
-            v-hasPermi="['policy:annex:assignDownload']"
-          >涓嬭浇</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['policy:annex:remove']"
-          >鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-    </el-row>
-
-    <div slot="footer" class="dialog-footer">
-      <el-button @click="handclose">鍙� 娑�</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { listAnnex, delAnnex, addAnnex, updateAnnex, exportAnnex } from "@/api/policy/annex";
-import { getToken } from "@/utils/auth";
-const baseURL = process.env.VUE_APP_BASE_API
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鏀跨瓥娉曡闄勪欢琛ㄦ牸鏁版嵁
-      annexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏂囦欢璺緞瀛楀吀
-      filePathOptions: [],
-      // 鍒犻櫎鏍囧織Y鍒犻櫎 N涓哄垹闄ゅ瓧鍏�
-      delFlageOptions: [],
-      // 寤虹珛鏃堕棿瀛楀吀
-      createTimeOptions: [],
-      // 淇敼鏃ユ湡瀛楀吀
-      updateTimeOptions: [],
-      // 涓婚敭瀛楀吀
-      idOptions: [],
-      // 鍏宠仈policy_regulations瀛楀吀
-      regulationsIdOptions: [],
-      // 鏂囦欢鍚嶅瓧鍏�
-      fileNameOptions: [],
-      // 鏂囦欢鍚庣紑瀛楀吀
-      fileSuffixOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        regulationsId:'',
-        createTime: undefined,
-        fileName: undefined,
-      },
-      uploadData: {
-        // 鏄惁鏄剧ず寮瑰嚭灞傦紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        open: false,
-        // 寮瑰嚭灞傛爣棰橈紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        title: "",
-        // 鏄惁绂佺敤涓婁紶
-        isUploading: false,
-        // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-        headers: { Authorization: "Bearer " + getToken() },
-        // 涓婁紶鐨勫湴鍧�
-        url: process.env.VUE_APP_BASE_API + "/policy/annex/fileImport"
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        id: [
-          { required: true, message: "涓婚敭涓嶈兘涓虹┖", trigger: "blur" }
-        ],      }
-    };
-  },
-  methods: {
-    // 鏄剧ず寮规
-   show(impid) {
-      this.reset();
-      this.queryParams.regulationsId = impid;
-      this.getList();
-      this.title=' 闄勪欢';
-      this.open = true;
-    },
-     /** 鏌ヨ鏀跨瓥娉曡闄勪欢鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listAnnex(this.queryParams).then(response => {
-        this.annexList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        filePath: undefined,
-        delFlage: undefined,
-        createTime: undefined,
-        createOperator: undefined,
-        updateTime: undefined,
-        updateOperator: undefined,
-        id: undefined,
-        regulationsId:undefined,
-        fileName: undefined,
-        fileSuffix: undefined
-      };
-      //娓呯┖涓婁紶缁勪欢鐨勬枃浠跺垪琛�
-      this.resetForm("form");
-    },
-    /**鍙栨秷*/
-    handclose()
-    {
-      this.open=false;
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 鏌ョ湅鎸夐挳鎿嶄綔 */
-    seeImpFile(row) {
-      this.fileDownload(row.fileName,row.filePath,false);
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      this.$confirm('鏄惁纭鍒犻櫎闄勪欢鍚嶇О涓�"' + row.fileName + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return delAnnex(row.id);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-    },
-    // 闄勪欢涓婁紶涓鐞�
-    handleFileUploadProgress(event, file, fileList) {
-      this.uploadData.isUploading = true;
-    },
-    // 闄勪欢涓婁紶鎴愬姛澶勭悊
-    handleFileSuccess(response, file, fileList) {
-      this.uploadData.open = false;
-      this.uploadData.isUploading = false;
-      this.$refs.upload.clearFiles();
-      this.$alert(response.msg, "闄勪欢缁撴灉", { dangerouslyUseHTMLString: true });
-      this.getList();
-    },
-    // 闄勪欢涓婁紶鏂囦欢
-    submitFileForm() {
-      this.$refs.upload.submit();
-    },
-    handlePreview(file) {
-      console.log(file);
-    },
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/policy/policyInsert/index.vue b/energy_management_ui/src/views/policy/policyInsert/index.vue
deleted file mode 100644
index 54133cd..0000000
--- a/energy_management_ui/src/views/policy/policyInsert/index.vue
+++ /dev/null
@@ -1,396 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form class="special-form" :model="queryParams" ref="queryForm" label-width="72px">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="鏍囬" prop="titleName">
-              <el-input
-                  v-model="queryParams.titleName"
-                  placeholder="璇疯緭鍏ユ爣棰�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鍐呭" prop="content">
-              <el-input
-                  v-model="queryParams.content"
-                  placeholder="璇疯緭鍏ュ唴瀹�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鍒嗙被" prop="sort">
-              <el-select v-model="queryParams.sort" placeholder="璇烽�夋嫨绉嶇被" clearable size="small" style="width: 100%">
-                <el-option
-                    v-for="dict in sortOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-              type="primary"
-              icon="el-icon-plus"
-              size="mini"
-              @click="handleAdd"
-              v-hasPermi="['policy:policyInsert:add']"
-          >鏂板
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="success"
-              icon="el-icon-edit"
-              size="mini"
-              :disabled="single"
-              @click="handleUpdate"
-              v-hasPermi="['policy:policyInsert:edit']"
-          >淇敼
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              :disabled="multiple"
-              @click="handleDelete"
-              v-hasPermi="['policy:policyInsert:remove']"
-          >鍒犻櫎
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="warning"
-              icon="el-icon-download"
-              size="mini"
-              @click="handleExport"
-              v-hasPermi="['policy:policyInsert:export']"
-          >瀵煎嚭
-          </el-button>
-        </el-col>
-      </el-row>
-      <el-table v-loading="loading" :data="policyInsertList" :height="height" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center" show-overflow-tooltip/>
-        <el-table-column label="鏍囬" align="center" prop="titleName" show-overflow-tooltip/>
-        <el-table-column label="鍐呭" align="center" prop="content" show-overflow-tooltip/>
-        <el-table-column label="鍒嗙被" align="center" prop="sort" show-overflow-tooltip/>
-        <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="creationTime" width="180" show-overflow-tooltip>
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.creationTime) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="鎿嶄綔浜哄憳" align="center" prop="operator" show-overflow-tooltip/>
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="openImportFileTable(scope.row)"
-                v-hasPermi="['tool:gen:import']"
-            >闄勪欢
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['policy:policyInsert:edit']"
-            >淇敼
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-delete"
-                @click="handleDelete(scope.row)"
-                v-hasPermi="['policy:policyInsert:remove']"
-            >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      /> <!-- 娣诲姞鎴栦慨鏀规斂绛栨硶瑙勭淮鎶ゅ璇濇 -->
-    </basic-container>
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-
-        <el-form-item label="鏍囬" prop="titleName">
-          <el-input v-model="form.titleName" placeholder="璇疯緭鍏ユ爣棰�"/>
-        </el-form-item>
-        <el-form-item label="鍐呭" prop="content">
-          <el-input v-model="form.content" placeholder="璇疯緭鍏ュ唴瀹�"/>
-        </el-form-item>
-        <el-form-item label="鍒嗙被" prop="sort">
-          <el-select v-model="form.sort" placeholder="璇烽�夋嫨绉嶇被">
-            <el-option
-                v-for="dict in sortOptions"
-                :key="dict.dictValue"
-                :label="dict.dictLabel"
-                :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-    <importFileTable ref="importFile" @ok="handleFjQuery"/>
-  </div>
-</template>
-
-<script>
-import {
-  listPolicyInsert,
-  getPolicyInsert,
-  delPolicyInsert,
-  addPolicyInsert,
-  updatePolicyInsert,
-  exportPolicyInsert
-} from "@/api/policy/policyInsert";
-import {getToken} from "@/utils/auth";
-import importFileTable from "./importFileTable";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: "policyInsert",
-  components: {importFileTable},
-  mixins: [mixins],
-  data() {
-    return {
-      height: null,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      titleNames: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鏀跨瓥娉曡缁存姢琛ㄦ牸鏁版嵁
-      policyInsertList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鍒嗙被瀛楀吀
-      sortOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        titleName: undefined,
-        content: undefined,
-        sort: undefined,
-        creationTime: undefined,
-        operator: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        id: [
-          {required: true, message: "搴忓彿涓嶈兘涓虹┖", trigger: "blur"}
-        ], titleName: [
-          {required: true, message: "鏍囬涓嶈兘涓虹┖", trigger: "blur"}
-        ], content: [
-          {required: true, message: "鍐呭涓嶈兘涓虹┖", trigger: "blur"}
-        ], sort: [
-          {required: true, message: "鍒嗙被涓嶈兘涓虹┖", trigger: "blur"}
-        ], creationTime: [
-          {required: true, message: "鍒涘缓鏃堕棿涓嶈兘涓虹┖", trigger: "blur"}
-        ], operator: [
-          {required: true, message: "鎿嶄綔浜哄憳涓嶈兘涓虹┖", trigger: "blur"}
-        ]
-      }
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("policy_sort").then(response => {
-      this.sortOptions = response.data;
-
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 370;
-    },
-    /** 鏌ヨ鏀跨瓥娉曡缁存姢鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listPolicyInsert(this.queryParams).then(response => {
-        this.policyInsertList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-
-    // 鍒嗙被瀛楀吀缈昏瘧
-    sortFormat(row, column) {
-      return this.selectDictLabel(this.sortOptions, row.sort);
-    },
-
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        titleName: undefined,
-        content: undefined,
-        sort: undefined,
-        creationTime: undefined,
-        operator: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.titleNames = selection.map(item => item.titleName)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞鏀跨瓥娉曡缁存姢";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getPolicyInsert(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼鏀跨瓥娉曡缁存姢";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updatePolicyInsert(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addPolicyInsert(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      const titleNames = row.titleName || this.titleNames;
-      this.$confirm('鏄惁纭鍒犻櫎鏀跨瓥娉曡缁存姢鏍囬涓�"' + titleNames + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delPolicyInsert(ids);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夋斂绛栨硶瑙勬煡璇㈡暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportPolicyInsert(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    },
-    /** 鎵撳紑闄勪欢琛ㄥ脊绐� */
-    openImportFileTable(row) {
-      let impid = row.id;
-      this.$refs.importFile.show(impid);
-    },
-    /** 闄勪欢鎼滅储鎸夐挳鎿嶄綔 */
-    handleFjQuery() {
-      // this.queryParams.pageNum = 1;
-      // this.getList();
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form{
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/policy/policySelete/importFileTable.vue b/energy_management_ui/src/views/policy/policySelete/importFileTable.vue
deleted file mode 100644
index 9cbba3d..0000000
--- a/energy_management_ui/src/views/policy/policySelete/importFileTable.vue
+++ /dev/null
@@ -1,227 +0,0 @@
-<template>
-  <el-dialog :title="title" :visible.sync="open"  :destroy-on-close="true" width="800px" top="5vh">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鏂囦欢鍚�" prop="fileName">
-        <el-input
-          v-model="queryParams.fileName"
-          placeholder="璇疯緭鍏ユ枃浠跺悕"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-upload
-      ref="upload"
-      :limit="1"
-      :headers="uploadData.headers"
-      :action="uploadData.url + '?regulationsId=' + queryParams.regulationsId"
-      :on-preview="handlePreview"
-      :on-progress="handleFileUploadProgress"
-      :on-success="handleFileSuccess"
-      :auto-upload="false"
-    >
-    </el-upload>
-
-    <el-row>
-    <el-table v-loading="loading" :data="annexList">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="鏂囦欢鍚�" align="center" prop="fileName" />
-      <el-table-column label="涓婁紶鏃堕棿" align="center" prop="createTime"/>
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="seeImpFile(scope.row)"
-            v-hasPermi="['policy:annex:assignDownload']"
-          >涓嬭浇</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-    </el-row>
-
-    <div slot="footer" class="dialog-footer">
-      <el-button @click="handclose">鍙� 娑�</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { listAnnex, delAnnex, addAnnex, updateAnnex, exportAnnex } from "@/api/policy/annex";
-import { getToken } from "@/utils/auth";
-const baseURL = process.env.VUE_APP_BASE_API
-// 閫氱敤涓嬭浇鏂规硶
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鏀跨瓥娉曡闄勪欢琛ㄦ牸鏁版嵁
-      annexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏂囦欢璺緞瀛楀吀
-      filePathOptions: [],
-      // 鍒犻櫎鏍囧織Y鍒犻櫎 N涓哄垹闄ゅ瓧鍏�
-      delFlageOptions: [],
-      // 寤虹珛鏃堕棿瀛楀吀
-      createTimeOptions: [],
-      // 淇敼鏃ユ湡瀛楀吀
-      updateTimeOptions: [],
-      // 涓婚敭瀛楀吀
-      idOptions: [],
-      // 鍏宠仈policy_regulations瀛楀吀
-      regulationsIdOptions: [],
-      // 鏂囦欢鍚嶅瓧鍏�
-      fileNameOptions: [],
-      // 鏂囦欢鍚庣紑瀛楀吀
-      fileSuffixOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        regulationsId:'',
-        createTime: undefined,
-        fileName: undefined,
-      },
-      uploadData: {
-        // 鏄惁鏄剧ず寮瑰嚭灞傦紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        open: false,
-        // 寮瑰嚭灞傛爣棰橈紙璁¢噺鍣ㄥ叿妗f瀵煎叆锛�
-        title: "",
-        // 鏄惁绂佺敤涓婁紶
-        isUploading: false,
-        // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-        headers: { Authorization: "Bearer " + getToken() },
-        // 涓婁紶鐨勫湴鍧�
-        url: process.env.VUE_APP_BASE_API + "/policy/annex/fileImport"
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        id: [
-          { required: true, message: "涓婚敭涓嶈兘涓虹┖", trigger: "blur" }
-        ],      }
-    };
-  },
-  methods: {
-    // 鏄剧ず寮规
-    show(impid) {
-      this.reset();
-      this.queryParams.regulationsId = impid;
-      this.getList();
-      this.title=' 闄勪欢';
-      this.open = true;
-    },
-    /** 鏌ヨ鏀跨瓥娉曡闄勪欢鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listAnnex(this.queryParams).then(response => {
-        this.annexList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        filePath: undefined,
-        delFlage: undefined,
-        createTime: undefined,
-        createOperator: undefined,
-        updateTime: undefined,
-        updateOperator: undefined,
-        id: undefined,
-        regulationsId:'',
-        fileName: undefined,
-        fileSuffix: undefined
-      };
-      //娓呯┖涓婁紶缁勪欢鐨勬枃浠跺垪琛�
-      this.resetForm("form");
-    },
-    /**鍙栨秷*/
-    handclose()
-    {
-      this.open=false;
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 鏌ョ湅鎸夐挳鎿嶄綔 */
-    seeImpFile(row) {
-      this.fileDownload(row.fileName,row.filePath,false);
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      this.$confirm('鏄惁纭鍒犻櫎闄勪欢鍚嶇О涓�"' + row.fileName + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return delAnnex(row.id);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-    },
-    // 闄勪欢涓婁紶涓鐞�
-    handleFileUploadProgress(event, file, fileList) {
-      this.uploadData.isUploading = true;
-    },
-    // 闄勪欢涓婁紶鎴愬姛澶勭悊
-    handleFileSuccess(response, file, fileList) {
-      this.uploadData.open = false;
-      this.uploadData.isUploading = false;
-      this.$refs.upload.clearFiles();
-      this.$alert(response.msg, "闄勪欢缁撴灉", { dangerouslyUseHTMLString: true });
-      this.getList();
-    },
-    // 闄勪欢涓婁紶鏂囦欢
-    submitFileForm() {
-      this.$refs.upload.submit();
-    },
-    handlePreview(file) {
-      console.log(file);
-    },
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/policy/policySelete/index.vue b/energy_management_ui/src/views/policy/policySelete/index.vue
deleted file mode 100644
index 8754c6f..0000000
--- a/energy_management_ui/src/views/policy/policySelete/index.vue
+++ /dev/null
@@ -1,368 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form class="special-form" :model="queryParams" ref="queryForm" label-width="76px">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="鏍囬" prop="titleName">
-              <el-input
-                  v-model="queryParams.titleName"
-                  placeholder="璇疯緭鍏ユ爣棰�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鍐呭" prop="content">
-              <el-input
-                  v-model="queryParams.content"
-                  placeholder="璇疯緭鍏ュ唴瀹�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鍒嗙被" prop="sort">
-              <el-select v-model="queryParams.sort" placeholder="璇烽�夋嫨绉嶇被" clearable size="small" style="width: 100%">
-                <el-option
-                    v-for="dict in sortOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-<!--          <el-col :span="6">-->
-<!--            <el-form-item label="鍒涘缓鏃堕棿" prop="creationTime">-->
-<!--              <el-date-picker clearable size="small" style="width: 100%"-->
-<!--                              v-model="queryParams.creationTime"-->
-<!--                              type="date"-->
-<!--                              value-format="yyyy-MM-dd"-->
-<!--                              placeholder="閫夋嫨鍒涘缓鏃堕棿">-->
-<!--              </el-date-picker>-->
-<!--            </el-form-item>-->
-<!--          </el-col>-->
-          <el-col :span="6">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-              type="warning"
-              icon="el-icon-download"
-              size="mini"
-              @click="handleExport"
-              v-hasPermi="['policy:policyselete:export']"
-          >瀵煎嚭
-          </el-button>
-        </el-col>
-      </el-row>
-      <el-table v-loading="loading" :data="policyseleteList" :height="height" :row-class-name="tableRowClassName"
-                @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center" show-overflow-tooltip/>
-        <el-table-column label="鏍囬" align="center" prop="titleName" show-overflow-tooltip/>
-        <el-table-column label="鍐呭" align="center" prop="content" show-overflow-tooltip/>
-        <el-table-column label="鍒嗙被" align="center" prop="sort" show-overflow-tooltip/>
-        <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="creationTime" width="180" show-overflow-tooltip>
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.creationTime) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="鎿嶄綔浜哄憳" align="center" prop="operator" show-overflow-tooltip/>
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['policy:policySelete:edit']"
-            >鏌ョ湅
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="openImportFileTable(scope.row)"
-                v-hasPermi="['tool:gen:import']"
-            >闄勪欢
-            </el-button>
-
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-    </basic-container>
-    <!-- 娣诲姞鎴栦慨鏀规斂绛栨硶瑙勭淮鎶ゅ璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" disabled="true" label-width="80px">
-
-        <el-form-item label="鏍囬" prop="titleName">
-          <el-input v-model="form.titleName" placeholder="璇疯緭鍏ユ爣棰�"/>
-        </el-form-item>
-        <el-form-item label="鍐呭" prop="content">
-          <el-input v-model="form.content" placeholder="璇疯緭鍏ュ唴瀹�"/>
-        </el-form-item>
-        <el-form-item label="鍒嗙被" prop="sort">
-          <el-select v-model="queryParams.sort" placeholder="璇烽�夋嫨绉嶇被">
-            <el-option
-                v-for="dict in sortOptions"
-                :key="dict.dictValue"
-                :label="dict.dictLabel"
-                :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-    <importFileTable ref="importFile" @ok="handleFjQuery"/>
-  </div>
-</template>
-
-<script>
-import {
-  listPolicyselete,
-  getPolicyselete,
-  delPolicyselete,
-  addPolicyselete,
-  updatePolicyselete,
-  exportPolicyselete
-} from "@/api/policy/policySelete";
-import {getToken} from "@/utils/auth";
-import importFileTable from "./importFileTable";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: "policySelete",
-  components: {importFileTable},
-  mixins: [mixins],
-  data() {
-    return {
-      height: null,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鏀跨瓥娉曡鏌ヨ琛ㄦ牸鏁版嵁
-      policyseleteList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鍒嗙被瀛楀吀
-      sortOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        titleName: undefined,
-        content: undefined,
-        sort: undefined,
-        creationTime: undefined,
-        operator: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        id: [
-          {required: true, message: "搴忓彿涓嶈兘涓虹┖", trigger: "blur"}
-        ], titleName: [
-          {required: true, message: "鏍囬涓嶈兘涓虹┖", trigger: "blur"}
-        ], content: [
-          {required: true, message: "鍐呭涓嶈兘涓虹┖", trigger: "blur"}
-        ], sort: [
-          {required: true, message: "鍒嗙被涓嶈兘涓虹┖", trigger: "blur"}
-        ], creationTime: [
-          {required: true, message: "鍒涘缓鏃堕棿涓嶈兘涓虹┖", trigger: "blur"}
-        ], operator: [
-          {required: true, message: "鎿嶄綔浜哄憳涓嶈兘涓虹┖", trigger: "blur"}
-        ]
-      }
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("policy_sort").then(response => {
-      this.sortOptions = response.data;
-      this.queryParams.sort = this.sortOptions.find(f => f.isDefault === 'Y').dictValue;
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 370;
-    },
-    tableRowClassName({row, rowIndex}) {
-      if (row.txflage) {
-        return 'warning-row';
-      }
-      return '';
-    },
-    /** 鏌ヨ鏀跨瓥娉曡鏌ヨ鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listPolicyselete(this.queryParams).then(response => {
-        this.policyseleteList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鍒嗙被瀛楀吀缈昏瘧
-    sortFormat(row, column) {
-      return this.selectDictLabel(this.sortOptions, row.sort);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        titleName: undefined,
-        content: undefined,
-        sort: undefined,
-        creationTime: undefined,
-        operator: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞鏀跨瓥娉曡鏌ヨ";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getPolicyselete(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "鏌ョ湅鏀跨瓥娉曡淇℃伅";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updatePolicyselete(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addPolicyselete(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎鏀跨瓥娉曡鏌ヨ缂栧彿涓�"' + ids + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delPolicyselete(ids);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夋斂绛栨硶瑙勬煡璇㈡暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportPolicyselete(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    },
-    /** 闄勪欢鎼滅储鎸夐挳鎿嶄綔 */
-    handleFjQuery() {
-      // this.queryParams.pageNum = 1;
-      // this.getList();
-    },
-    /** 鎵撳紑闄勪欢琛ㄥ脊绐� */
-    openImportFileTable(row) {
-      let impid = row.id;
-      this.$refs.importFile.show(impid);
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form{
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/power-statistics-analyse/func/columns.js b/energy_management_ui/src/views/power-statistics-analyse/func/columns.js
deleted file mode 100644
index b86f999..0000000
--- a/energy_management_ui/src/views/power-statistics-analyse/func/columns.js
+++ /dev/null
@@ -1,62 +0,0 @@
-export function getColumns(data, energyType,compareTxt, energyTypeOption) {
-    const columns = [];
-    try {
-        columns[0] = {
-            dataIndex: 'unitName',
-            title: '缁勭粐鏈烘瀯鍚嶇О',
-            align: 'center',
-            width: 140,
-        };
-        const energyTypes =
-            energyType === null || energyType === ''
-                ? []
-                : energyType.split('/');
-        let every = {};
-        data[0].children.forEach((e) => {
-            const isHave =
-                energyTypes.length > 0
-                    ? energyTypes.some((item) => item === e.energyType)
-                    : true;
-                
-            if (isHave) {
-                // let unit =  (e.energyUnit?'('+e.energyUnit+')':'')
-                let curEnergy = energyTypeOption.filter(item => {
-                  return item.energyValue === e.energyType
-                })
-                let unit = ''
-                if (curEnergy.length > 0) {
-                  unit = curEnergy[0].energyUnit ? '('+ curEnergy[0].energyUnit +')' : ''
-                }
-                every = {
-                    dataIndex: `${Math.random()}`,
-                    title:e.energyName,
-                    align: 'center',
-                    children: [
-                        {
-                            title: '鏈湡鍊�'+unit,
-                            dataIndex: `currentValue${e.energyType}`,
-                            align: 'center',
-                            width: 100,
-                        },
-                        {
-                            title: '鍚屾湡鍊�'+unit,
-                            dataIndex: `oldValue${e.energyType}`,
-                            align: 'center',
-                            width: 100,
-                        },
-                        {
-                            title: compareTxt+'(%)',
-                            dataIndex: `ratio${e.energyType}`,
-                            align: 'center',
-                            width: 100,
-                        },
-                    ],
-                };
-                columns.push(every);
-            }
-        });
-        return columns;
-    } catch (e) {
-        return [];
-    }
-}
diff --git a/energy_management_ui/src/views/power-statistics-analyse/func/merge-object.js b/energy_management_ui/src/views/power-statistics-analyse/func/merge-object.js
deleted file mode 100644
index 6c8abf0..0000000
--- a/energy_management_ui/src/views/power-statistics-analyse/func/merge-object.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// 灏嗙浉鍚屽瓧娈祏nitName鐨勫�兼斁鍒板悓涓�鏁扮粍涓�
-export function mergeObject(data) {
-    const arr = [];
-    try {
-        data.forEach((item) => {
-            if (item.dataType !== 1) {
-                for (let i = 0; i < arr.length; i++) {
-                    if (arr[i].unitName === item.unitName) {
-                        arr[i].children.push(item);
-                        return;
-                    }
-                }
-                arr.push({
-                    unitName: item.unitName,
-                    children: [item],
-                });
-            }
-        });
-        return arr;
-    } catch (e) {
-        return [];
-    }
-}
diff --git a/energy_management_ui/src/views/power-statistics-analyse/pari-passu/BarChart.vue b/energy_management_ui/src/views/power-statistics-analyse/pari-passu/BarChart.vue
deleted file mode 100644
index e95f918..0000000
--- a/energy_management_ui/src/views/power-statistics-analyse/pari-passu/BarChart.vue
+++ /dev/null
@@ -1,226 +0,0 @@
-<template>
-  <div
-    id="barchartId"
-    :class="className"
-    :style="{ height: height, width: width }"
-  />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "450px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, deviceData, ratioData, type } = {}) {
-      this.chart.setOption({
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          },
-          // axisPointer: { animation: false },
-          appendToBody: true,
-          formatter: params => {
-            return (
-              `<div style="text-align:left">` +
-              params[0].marker +
-              params[0].seriesName +
-              `<b style="float: right;margin-left: 10px">` +
-              params[0].value +
-              `</b></div>
-                    <div style="text-align:left">` +
-              params[1].marker +
-              params[1].seriesName +
-              `<b style="float: right">` +
-              params[1].value +
-              `</b></div>
-                    <div style="text-align:left">` +
-              params[2].marker +
-              params[2].seriesName +
-              `<b style="margin-left: 10px; float: right">` +
-              params[2].value +
-              `%</b></div>`
-            );
-          }
-        },
-        legend: {
-          right: 0,
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: "10%",
-          top: 50,
-          containLabel: true
-        },
-        xAxis: [
-          {
-            // type: "category",
-            data: deviceData,
-            axisLabel: { interval: 0, rotate: 30 }
-            // axisTick: {
-            //   alignWithLabel: true
-            // }
-          }
-        ],
-        yAxis: [
-          {
-            type: "value",
-            axisTick: {
-              show: false
-            },
-            splitLine: {
-              show: false
-            }
-          },
-          {
-            type: "value",
-            min: -100,
-            max: 100,
-            axisLabel: {
-              formatter: "{value}%"
-            }
-          }
-        ],
-        dataZoom: [
-          {
-            startValue: deviceData[0],
-            endValue:
-              deviceData.length > 7
-                ? deviceData[7]
-                : deviceData[deviceData.length - 1]
-          },
-          {
-            type: "inside"
-          }
-        ],
-        series: [
-          {
-            name: "鍚屾湡鍊�",
-            itemStyle: {
-              normal: {
-                color: "#478ef7",
-                lineStyle: {
-                  color: "#478ef7",
-                  width: 2
-                }
-              }
-            },
-            smooth: true,
-            type: "bar",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          },
-          {
-            name: "鏈湡鍊�",
-            itemStyle: {
-              normal: {
-                color: "#62c4c7",
-                lineStyle: {
-                  color: "#62c4c7",
-                  width: 2
-                }
-              }
-            },
-            smooth: true,
-            type: "bar",
-            data: actualData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          },
-          {
-            name: type,
-            itemStyle: {
-              normal: {
-                color: "#f08e58",
-                lineStyle: {
-                  color: "#f08e58",
-                  width: 2
-                }
-              }
-            },
-            // smooth: true,
-            type: "line",
-            // animationDuration: 2800,
-            // animationEasing: "cubicInOut",
-            yAxisIndex: 1,
-            // tooltip: {
-            //   valueFormatter: function(value) {
-            //     return value + "%";
-            //   },
-            //   formatter: value => {
-            //     return value + "%";
-            //   }
-            // },
-            tooltip: {
-              valueFormatter: function(value) {
-                return value + " %";
-              }
-            },
-            data: ratioData
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/power-statistics-analyse/pari-passu/LineChart.vue b/energy_management_ui/src/views/power-statistics-analyse/pari-passu/LineChart.vue
deleted file mode 100644
index 2c3eeaa..0000000
--- a/energy_management_ui/src/views/power-statistics-analyse/pari-passu/LineChart.vue
+++ /dev/null
@@ -1,155 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        // title: {
-        //   text: title,
-        //   left: "left",
-        //   textStyle: {
-        //     color: "#606266"
-        //   }
-        // },
-        xAxis: {
-          data: [
-            "1鏈�",
-            "2鏈�",
-            "3鏈�",
-            "4鏈�",
-            "5鏈�",
-            "6鏈�",
-            "7鏈�",
-            "8鏈�",
-            "9鏈�",
-            "10鏈�",
-            "11鏈�",
-            "12鏈�"
-          ],
-          type: "category"
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 10,
-          top: 10,
-          containLabel: true
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "cross"
-          },
-          padding: [5, 10]
-        },
-        yAxis: {
-          axisTick: {
-            show: false
-          }
-        },
-        legend: {
-          data: [],
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        series: [
-          {
-            name: "鍚屾湡鍊�",
-            itemStyle: {
-              normal: {
-                color: "#FF005A",
-                lineStyle: {
-                  color: "#FF005A",
-                  width: 2
-                }
-              }
-            },
-            smooth: true,
-            type: "line",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          },
-          {
-            name: "鏈湡鍊�",
-            itemStyle: {
-              normal: {
-                color: "#62c4c7",
-                lineStyle: {
-                  color: "#62c4c7",
-                  width: 2
-                }
-              }
-            },
-            smooth: true,
-            type: "line",
-            data: actualData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/power-statistics-analyse/pari-passu/index.vue b/energy_management_ui/src/views/power-statistics-analyse/pari-passu/index.vue
deleted file mode 100644
index b858830..0000000
--- a/energy_management_ui/src/views/power-statistics-analyse/pari-passu/index.vue
+++ /dev/null
@@ -1,421 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="鍚屾瘮鍒嗘瀽" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :showOpt="false"
-            :modelCode="modelCode"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <div :style="bodyStyleRight">
-          <basic-container class="search-wrapper">
-            <el-radio-group
-              v-model="queryParams.timeType"
-              @change="changeRadio"
-              size="small"
-            >
-              <!-- <el-radio-button label="YEAR">骞�</el-radio-button> -->
-              <el-radio-button label="MONTH">鏈�</el-radio-button>
-              <el-radio-button label="DAY">鏃�</el-radio-button>
-              <!-- <el-radio-button label="HOUR">灏忔椂</el-radio-button> -->
-            </el-radio-group>
-            <el-date-picker
-              clearable
-              size="small"
-              style="width: 200px; margin: 0 10px"
-              v-model="queryParams.dataTime"
-              :type="queryParams.pickerType"
-              :clearable="false"
-              placeholder="閫夋嫨鏃ユ湡"
-              :value-format="valueFormat"
-            >
-            </el-date-picker>
-            <el-button
-              type="primary"
-              icon="el-icon-search"
-              size="small"
-              @click="handleQuery"
-              >鏌ヨ</el-button
-            >
-            <el-button icon="el-icon-refresh" size="small" @click="resetQuery"
-              >閲嶇疆</el-button
-            >
-            <el-button
-              type="warning"
-              icon="el-icon-download"
-              size="small"
-              @click="handleExport"
-              >瀵煎嚭</el-button
-            >
-          </basic-container>
-          <div class="chart-list">
-            <el-card style="margin-bottom: 12px">
-              <div slot="header" class="clearfix">
-                <span>{{ chartData.title }}({{ chartData.unit }})</span>
-              </div>
-              <div class="chart-wrapper">
-                <bar-chart ref="barChartRef" :chart-data="chartData" />
-              </div>
-            </el-card>
-            <div>
-              <el-table :data="tableData" show-summary height="320px">
-                <el-table-column
-                  prop="energyUnitName"
-                  label="鐢ㄨ兘鍗曞厓"
-                  align="center"
-                  width="150"
-                  show-overflow-tooltip
-                ></el-table-column>
-                <el-table-column
-                  prop="oldValue"
-                  label="鍚屾湡鍊�"
-                  align="center"
-                ></el-table-column>
-                <el-table-column
-                  prop="currentValue"
-                  label="鏈湡鍊�"
-                  align="center"
-                ></el-table-column>
-                <el-table-column prop="ratio" label="鍚屾瘮" align="center">
-                  <template slot-scope="scope">
-                    {{ scope.row.ratio }}%
-                  </template>
-                </el-table-column>
-              </el-table>
-            </div>
-          </div>
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import {
-  queryDataComparison,
-  exportDataComparison
-} from "@/api/powerAnalyse/index.js";
-import BarChart from "../pari-passu/BarChart.vue";
-import mixins from "@/layout/mixin/getHeight";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import ShrinkCol from "@/components/shrink/index.vue";
-import moment from "moment";
-export default {
-  components: {
-    BarChart,
-    ModelNode,
-    ShrinkCol
-  },
-  mixins: [mixins],
-  data() {
-    return {
-      momentFormat: "yyyy-MM-DD",
-      valueFormat: "yyyy-MM-dd",
-      dateTypeOptions: [],
-      energyList: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        nodeId: "",
-        dataTime: "",
-        pickerType: "date",
-        timeType: "DAY" // YEAR,MONTH,DAY,HOUR
-      },
-      chartData: {
-        expectedData: [],
-        actualData: [],
-        deviceData: [],
-        title: "姘村悓姣斿垎鏋�",
-        type: "鍚屾瘮",
-        unit: ""
-      },
-      tableData: [],
-      modelCode: undefined,
-      isCollapse: false,
-      bodyStyleRight: {},
-      energyType: ""
-    };
-  },
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-    this.energyType = this.$route.query.energyType;
-    this.chartData.title =
-      this.energyType == "water" ? "姘村悓姣斿垎鏋�" : "鐢靛悓姣斿垎鏋�";
-    this.getTime();
-  },
-  methods: {
-    changeRadio(e) {
-      console.log(e);
-      if (e == "YEAR") {
-        this.queryParams.pickerType = "year";
-        this.valueFormat = "yyyy";
-        this.momentFormat = "yyyy";
-      } else if (e == "MONTH") {
-        this.queryParams.pickerType = "month";
-        this.valueFormat = "yyyy-MM";
-        this.momentFormat = "yyyy-MM";
-      } else if (e == "DAY") {
-        this.queryParams.pickerType = "date";
-        this.valueFormat = "yyyy-MM-dd";
-        this.momentFormat = "yyyy-MM-DD";
-      } else {
-        this.queryParams.pickerType = "datetime";
-        this.valueFormat = "yyyy-MM-dd HH";
-        this.momentFormat = "yyyy-MM-DD HH";
-      }
-      this.getTime();
-    },
-    getTime() {
-      if (this.queryParams.timeType !== "HOUR") {
-        this.queryParams.dataTime = moment().format(this.momentFormat);
-      } else {
-        this.queryParams.dataTime = moment().format("yyyy-MM-DD HH");
-      }
-    },
-    getList() {
-      let query = {
-        ...this.queryParams
-      };
-      if (this.queryParams.timeType === "YEAR") {
-        query.beginTime = this.queryParams.dataTime + "-01-01 00:00:00";
-        query.endTime = this.queryParams.dataTime + "-12-31 00:00:00";
-      } else if (this.queryParams.timeType == "MONTH") {
-        query.beginTime = this.queryParams.dataTime + "-01 00:00:00";
-        let paraYear = moment(this.queryParams.dataTime).year();
-        let paraMonth = moment(this.queryParams.dataTime).month();
-        let monthStartDate = new Date(paraYear, paraMonth, 1);
-        let monthEndDate = new Date(paraYear, paraMonth + 1, 1);
-        var days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24);
-        query.endTime = this.queryParams.dataTime + "-" + days + " 00:00:00";
-      } else if (this.queryParams.timeType == "DAY") {
-        query.beginTime = this.queryParams.dataTime + " 00:00:00";
-        query.endTime = this.queryParams.dataTime + " 23:59:59";
-      } else {
-        let dataTime = moment(this.queryParams.dataTime).format(
-          "YYYY-MM-DD HH"
-        );
-        query.beginTime = dataTime + ":00:00";
-        query.endTime = dataTime + ":59:59";
-      }
-      console.log("query", query);
-      queryDataComparison(query, this.energyType, 1).then(res => {
-        if (res.code == 200) {
-          this.tableData = res.data || [];
-          if (res.data && res.data.length) {
-            let expectedData = res.data.map(item => {
-              return item.oldValue;
-            });
-            let actualData = res.data.map(item => {
-              return item.currentValue;
-            });
-            let deviceData = res.data.map(item => {
-              return item.energyUnitName;
-            });
-            let ratioData = res.data.map(item => {
-              return item.ratio;
-            });
-            this.chartData = {
-              ...this.chartData,
-              expectedData,
-              actualData,
-              deviceData,
-              ratioData,
-              unit: res.data[0].unit
-            };
-          }
-        }
-      });
-    },
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 155 + "px"
-      };
-    },
-
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.queryParams.timeType = "DAY";
-      this.queryParams.pickerType = "date";
-      this.valueFormat = "yyyy-MM-dd";
-      this.momentFormat = "yyyy-MM-DD";
-
-      this.getTime();
-      this.handleQuery();
-    },
-
-    changeNode: function(node) {
-      this.queryParams.nodeId = node.id;
-      this.getList();
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      let query = {
-        ...this.queryParams
-      };
-      if (this.queryParams.timeType === "YEAR") {
-        query.beginTime = this.queryParams.dataTime + "-01-01 00:00:00";
-        query.endTime = this.queryParams.dataTime + "-12-31 00:00:00";
-      } else if (this.queryParams.timeType == "MONTH") {
-        query.beginTime = this.queryParams.dataTime + "-01 00:00:00";
-        let paraYear = moment(this.queryParams.dataTime).year();
-        let paraMonth = moment(this.queryParams.dataTime).month();
-        let monthStartDate = new Date(paraYear, paraMonth, 1);
-        let monthEndDate = new Date(paraYear, paraMonth + 1, 1);
-        var days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24);
-        query.endTime = this.queryParams.dataTime + "-" + days + " 00:00:00";
-      } else if (this.queryParams.timeType == "DAY") {
-        query.beginTime = this.queryParams.dataTime + " 00:00:00";
-        query.endTime = this.queryParams.dataTime + " 23:59:59";
-      } else {
-        let dataTime = moment(this.queryParams.dataTime).format(
-          "YYYY-MM-DD HH"
-        );
-        query.beginTime = dataTime + ":00:00";
-        query.endTime = dataTime + ":59:59";
-      }
-      // this.$confirm("鏄惁纭瀵煎嚭?", "璀﹀憡", {
-      //   confirmButtonText: "纭畾",
-      //   cancelButtonText: "鍙栨秷",
-      //   type: "warning"
-      // })
-      //   .then(function() {
-      //     return exportDataComparison(query, this.energyType, 1);
-      //   })
-      //   .then(response => {
-      //     this.download(response.msg);
-      //   })
-      //   .catch(function() {});
-      exportDataComparison(query, this.energyType, 1).then(response => {
-        this.download(response.msg);
-      });
-    }
-  }
-};
-</script>
-<style lang="scss" scoped>
-.search-wrapper {
-  display: flex;
-  justify-content: flex-start;
-  align-items: center;
-  height: 90px;
-}
-.shrink-col-block {
-  position: absolute;
-  top: 20px;
-  right: 16px;
-  cursor: pointer;
-}
-.el-form-item {
-  margin-bottom: 0;
-}
-.chart-list {
-  // margin-top: 16px;
-  ::v-deep .el-card__body {
-    padding: 10px 12px;
-  }
-}
-.dashboard-editor-container {
-  padding: 32px;
-  background-color: rgb(240, 242, 245);
-  position: relative;
-
-  .chart-wrapper {
-    background: #fff;
-    padding: 16px 16px 0;
-    margin-bottom: 32px;
-  }
-}
-
-@media (max-width: 1024px) {
-  .chart-wrapper {
-    padding: 8px;
-  }
-}
-
-.live {
-  position: fixed;
-  right: 0px;
-  top: 70px;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  width: 100px;
-  height: 60px;
-  background-color: red;
-  animation: fade 600ms infinite;
-  -webkit-animation: fade 600ms infinite;
-}
-
-.live_content {
-  font-size: 18px;
-  color: white;
-  font-weight: bold;
-}
-
-.live_number {
-  font-size: 32px;
-  color: white;
-  font-weight: bolder;
-}
-
-@keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-@-webkit-keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/power-statistics-analyse/per-passu/index.vue b/energy_management_ui/src/views/power-statistics-analyse/per-passu/index.vue
deleted file mode 100644
index 2ca755d..0000000
--- a/energy_management_ui/src/views/power-statistics-analyse/per-passu/index.vue
+++ /dev/null
@@ -1,421 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <el-col
-        :style="{ width: isCollapse ? '0' : '280px', position: 'relative' }"
-        v-show="!isCollapse"
-      >
-        <basic-container title="鐜瘮鍒嗘瀽" :bodyStyle="bodyStyle">
-          <ModelNode
-            ref="modelNode"
-            @changeNode="changeNode"
-            :showOpt="false"
-            :modelCode="modelCode"
-          ></ModelNode>
-        </basic-container>
-        <img
-          src="~@/assets/image/rectangle.png"
-          alt=""
-          class="shrink-col-block"
-          @click="toggleCollapse"
-        />
-      </el-col>
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse" />
-      <el-col
-        :style="{
-          width: isCollapse ? 'calc(100% - 48px)' : 'calc(100% - 280px)',
-          paddingLeft: isCollapse ? 0 : '14px'
-        }"
-      >
-        <div :style="bodyStyleRight">
-          <basic-container class="search-wrapper">
-            <el-radio-group
-              v-model="queryParams.timeType"
-              @change="changeRadio"
-              size="small"
-            >
-              <el-radio-button label="YEAR">骞�</el-radio-button>
-              <el-radio-button label="MONTH">鏈�</el-radio-button>
-              <el-radio-button label="DAY">鏃�</el-radio-button>
-              <!-- <el-radio-button label="HOUR">灏忔椂</el-radio-button> -->
-            </el-radio-group>
-            <el-date-picker
-              clearable
-              size="small"
-              style="width: 200px; margin: 0 10px"
-              v-model="queryParams.dataTime"
-              :type="queryParams.pickerType"
-              :clearable="false"
-              placeholder="閫夋嫨鏃ユ湡"
-              :value-format="valueFormat"
-            >
-            </el-date-picker>
-            <el-button
-              type="primary"
-              icon="el-icon-search"
-              size="small"
-              @click="handleQuery"
-              >鏌ヨ</el-button
-            >
-            <el-button icon="el-icon-refresh" size="small" @click="resetQuery"
-              >閲嶇疆</el-button
-            >
-            <el-button
-              type="warning"
-              icon="el-icon-download"
-              size="small"
-              @click="handleExport"
-              >瀵煎嚭</el-button
-            >
-          </basic-container>
-          <div class="chart-list">
-            <el-card style="margin-bottom: 12px">
-              <div slot="header" class="clearfix">
-                <span>{{ chartData.title }}({{ chartData.unit }})</span>
-              </div>
-              <div class="chart-wrapper">
-                <bar-chart ref="barChartRef" :chart-data="chartData" />
-              </div>
-            </el-card>
-            <div>
-              <el-table :data="tableData" show-summary height="320px">
-                <el-table-column
-                  prop="energyUnitName"
-                  label="鐢ㄨ兘鍗曞厓"
-                  align="center"
-                  width="150"
-                  show-overflow-tooltip
-                ></el-table-column>
-                <el-table-column
-                  prop="oldValue"
-                  label="鍚屾湡鍊�"
-                  align="center"
-                ></el-table-column>
-                <el-table-column
-                  prop="currentValue"
-                  label="鏈湡鍊�"
-                  align="center"
-                ></el-table-column>
-                <el-table-column prop="ratio" label="鐜瘮" align="center">
-                  <template slot-scope="scope">
-                    {{ scope.row.ratio }}%
-                  </template>
-                </el-table-column>
-              </el-table>
-            </div>
-          </div>
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import {
-  queryDataComparison,
-  exportDataComparison
-} from "@/api/powerAnalyse/index.js";
-import BarChart from "../pari-passu/BarChart.vue";
-import mixins from "@/layout/mixin/getHeight";
-import ModelNode from "../../basicsetting/modelNode/modelNode";
-import ShrinkCol from "@/components/shrink/index.vue";
-import moment from "moment";
-export default {
-  components: {
-    BarChart,
-    ModelNode,
-    ShrinkCol
-  },
-  mixins: [mixins],
-  data() {
-    return {
-      momentFormat: "yyyy-MM-DD",
-      valueFormat: "yyyy-MM-dd",
-      dateTypeOptions: [],
-      energyList: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        nodeId: "",
-        dataTime: "",
-        pickerType: "date",
-        timeType: "DAY" // YEAR,MONTH,DAY,HOUR
-      },
-      chartData: {
-        expectedData: [],
-        actualData: [],
-        deviceData: [],
-        title: "姘寸幆姣斿垎鏋�",
-        type: "鐜瘮",
-        unit: ""
-      },
-      tableData: [],
-      modelCode: undefined,
-      isCollapse: false,
-      bodyStyleRight: {},
-      energyType: ""
-    };
-  },
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-    this.energyType = this.$route.query.energyType;
-    this.chartData.title =
-      this.energyType == "water" ? "姘寸幆姣斿垎鏋�" : "鐢电幆姣斿垎鏋�";
-    this.getTime();
-  },
-  methods: {
-    changeRadio(e) {
-      console.log(e);
-      if (e == "YEAR") {
-        this.queryParams.pickerType = "year";
-        this.valueFormat = "yyyy";
-        this.momentFormat = "yyyy";
-      } else if (e == "MONTH") {
-        this.queryParams.pickerType = "month";
-        this.valueFormat = "yyyy-MM";
-        this.momentFormat = "yyyy-MM";
-      } else if (e == "DAY") {
-        this.queryParams.pickerType = "date";
-        this.valueFormat = "yyyy-MM-dd";
-        this.momentFormat = "yyyy-MM-DD";
-      } else {
-        this.queryParams.pickerType = "datetime";
-        this.valueFormat = "yyyy-MM-dd HH";
-        this.momentFormat = "yyyy-MM-DD HH";
-      }
-      this.getTime();
-    },
-    getTime() {
-      if (this.queryParams.timeType !== "HOUR") {
-        this.queryParams.dataTime = moment().format(this.momentFormat);
-      } else {
-        this.queryParams.dataTime = moment().format("yyyy-MM-DD HH");
-      }
-    },
-    getList() {
-      let query = {
-        ...this.queryParams
-      };
-      if (this.queryParams.timeType === "YEAR") {
-        query.beginTime = this.queryParams.dataTime + "-01-01 00:00:00";
-        query.endTime = this.queryParams.dataTime + "-12-31 00:00:00";
-      } else if (this.queryParams.timeType == "MONTH") {
-        query.beginTime = this.queryParams.dataTime + "-01 00:00:00";
-        let paraYear = moment(this.queryParams.dataTime).year();
-        let paraMonth = moment(this.queryParams.dataTime).month();
-        let monthStartDate = new Date(paraYear, paraMonth, 1);
-        let monthEndDate = new Date(paraYear, paraMonth + 1, 1);
-        var days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24);
-        query.endTime = this.queryParams.dataTime + "-" + days + " 00:00:00";
-      } else if (this.queryParams.timeType == "DAY") {
-        query.beginTime = this.queryParams.dataTime + " 00:00:00";
-        query.endTime = this.queryParams.dataTime + " 23:59:59";
-      } else {
-        let dataTime = moment(this.queryParams.dataTime).format(
-          "YYYY-MM-DD HH"
-        );
-        query.beginTime = dataTime + ":00:00";
-        query.endTime = dataTime + ":59:59";
-      }
-      console.log("query", query);
-      queryDataComparison(query, this.energyType, 2).then(res => {
-        if (res.code == 200) {
-          this.tableData = res.data || [];
-          if (res.data && res.data.length) {
-            let expectedData = res.data.map(item => {
-              return item.oldValue;
-            });
-            let actualData = res.data.map(item => {
-              return item.currentValue;
-            });
-            let deviceData = res.data.map(item => {
-              return item.energyUnitName;
-            });
-            let ratioData = res.data.map(item => {
-              return item.ratio;
-            });
-            this.chartData = {
-              ...this.chartData,
-              expectedData,
-              actualData,
-              deviceData,
-              ratioData,
-              unit: res.data[0].unit
-            };
-          }
-        }
-      });
-    },
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 185 + "px";
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 155 + "px"
-      };
-    },
-
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.queryParams.timeType = "DAY";
-      this.queryParams.pickerType = "date";
-      this.valueFormat = "yyyy-MM-dd";
-      this.momentFormat = "yyyy-MM-DD";
-
-      this.getTime();
-      this.handleQuery();
-    },
-
-    changeNode: function(node) {
-      this.queryParams.nodeId = node.id;
-      this.getList();
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item);
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse;
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      let query = {
-        ...this.queryParams
-      };
-      if (this.queryParams.timeType === "YEAR") {
-        query.beginTime = this.queryParams.dataTime + "-01-01 00:00:00";
-        query.endTime = this.queryParams.dataTime + "-12-31 00:00:00";
-      } else if (this.queryParams.timeType == "MONTH") {
-        query.beginTime = this.queryParams.dataTime + "-01 00:00:00";
-        let paraYear = moment(this.queryParams.dataTime).year();
-        let paraMonth = moment(this.queryParams.dataTime).month();
-        let monthStartDate = new Date(paraYear, paraMonth, 1);
-        let monthEndDate = new Date(paraYear, paraMonth + 1, 1);
-        var days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24);
-        query.endTime = this.queryParams.dataTime + "-" + days + " 00:00:00";
-      } else if (this.queryParams.timeType == "DAY") {
-        query.beginTime = this.queryParams.dataTime + " 00:00:00";
-        query.endTime = this.queryParams.dataTime + " 23:59:59";
-      } else {
-        let dataTime = moment(this.queryParams.dataTime).format(
-          "YYYY-MM-DD HH"
-        );
-        query.beginTime = dataTime + ":00:00";
-        query.endTime = dataTime + ":59:59";
-      }
-      // this.$confirm("鏄惁纭瀵煎嚭?", "璀﹀憡", {
-      //   confirmButtonText: "纭畾",
-      //   cancelButtonText: "鍙栨秷",
-      //   type: "warning"
-      // })
-      //   .then(function() {
-      //     return exportDataComparison(query, this.energyType, 1);
-      //   })
-      //   .then(response => {
-      //     this.download(response.msg);
-      //   })
-      //   .catch(function() {});
-      exportDataComparison(query, this.energyType, 2).then(response => {
-        this.download(response.msg);
-      });
-    }
-  }
-};
-</script>
-<style lang="scss" scoped>
-.search-wrapper {
-  display: flex;
-  justify-content: flex-start;
-  align-items: center;
-  height: 90px;
-}
-.shrink-col-block {
-  position: absolute;
-  top: 20px;
-  right: 16px;
-  cursor: pointer;
-}
-.el-form-item {
-  margin-bottom: 0;
-}
-.chart-list {
-  // margin-top: 16px;
-  ::v-deep .el-card__body {
-    padding: 10px 12px;
-  }
-}
-.dashboard-editor-container {
-  padding: 32px;
-  background-color: rgb(240, 242, 245);
-  position: relative;
-
-  .chart-wrapper {
-    background: #fff;
-    padding: 16px 16px 0;
-    margin-bottom: 32px;
-  }
-}
-
-@media (max-width: 1024px) {
-  .chart-wrapper {
-    padding: 8px;
-  }
-}
-
-.live {
-  position: fixed;
-  right: 0px;
-  top: 70px;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  width: 100px;
-  height: 60px;
-  background-color: red;
-  animation: fade 600ms infinite;
-  -webkit-animation: fade 600ms infinite;
-}
-
-.live_content {
-  font-size: 18px;
-  color: white;
-  font-weight: bold;
-}
-
-.live_number {
-  font-size: 32px;
-  color: white;
-  font-weight: bolder;
-}
-
-@keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-@-webkit-keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/redirect.vue b/energy_management_ui/src/views/redirect.vue
deleted file mode 100644
index db4c1d6..0000000
--- a/energy_management_ui/src/views/redirect.vue
+++ /dev/null
@@ -1,12 +0,0 @@
-<script>
-export default {
-  created() {
-    const { params, query } = this.$route
-    const { path } = params
-    this.$router.replace({ path: '/' + path, query })
-  },
-  render: function(h) {
-    return h() // avoid warning message
-  }
-}
-</script>
diff --git a/energy_management_ui/src/views/reportForm/annualReport/index.vue b/energy_management_ui/src/views/reportForm/annualReport/index.vue
deleted file mode 100644
index 2391852..0000000
--- a/energy_management_ui/src/views/reportForm/annualReport/index.vue
+++ /dev/null
@@ -1,241 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item label="鑳芥簮绫诲瀷">
-        <el-select
-          v-model="queryParams.indexStorageId"
-          placeholder="璇烽�夋嫨鑳芥簮鍝佺"
-        >
-          <el-option
-            v-for="dict in indexCategoryOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          ></el-option>
-        </el-select>
-      </el-form-item>
-      <!--<el-form-item label="鎶ヨ〃绫诲瀷">
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio v-for="dict in dateTypeOptions" :key="dict.dictValue" :label="dict.dictValue" @change="handleTime(dict.dictValue)">{{dict.dictLabel}}</el-radio>
-        </el-radio-group>
-      </el-form-item>-->
-      <el-form-item label="缁熻鏃堕棿">
-        <el-date-picker
-          clearable
-          size="small"
-          style="width: 200px"
-          v-model="queryParams.dataTime"
-          type="year"
-          value-format="yyyy"
-          placeholder="閫夋嫨鏃ユ湡"
-        >
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >鎼滅储</el-button
-        >
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-          >閲嶇疆</el-button
-        >
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          >瀵煎嚭</el-button
-        >
-      </el-form-item>
-    </el-form>
-
-    <el-table :data="list" border style="width: 100%; margin-top: 20px">
-      <el-table-column
-        fixed
-        prop="indexName"
-        align="center"
-        label="鑳芥簮鎸囨爣鍚嶇О"
-        min-width="240px"
-      ></el-table-column>
-      <el-table-column label="1鏈�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value1)
-        }}</template></el-table-column
-      >
-      <el-table-column label="2鏈�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value2)
-        }}</template></el-table-column
-      >
-      <el-table-column label="3鏈�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value3)
-        }}</template></el-table-column
-      >
-      <el-table-column label="4鏈�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value4)
-        }}</template></el-table-column
-      >
-      <el-table-column label="5鏈�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value5)
-        }}</template></el-table-column
-      >
-      <el-table-column label="6鏈�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value6)
-        }}</template></el-table-column
-      >
-      <el-table-column label="7鏈�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value7)
-        }}</template></el-table-column
-      >
-      <el-table-column label="8鏈�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value8)
-        }}</template></el-table-column
-      >
-      <el-table-column label="9鏈�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value9)
-        }}</template></el-table-column
-      >
-      <el-table-column label="10鏈�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value10)
-        }}</template></el-table-column
-      >
-      <el-table-column label="11鏈�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value11)
-        }}</template></el-table-column
-      >
-      <el-table-column label="12鏈�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value12)
-        }}</template></el-table-column
-      >
-    </el-table>
-  </div>
-</template>
-
-<script>
-import {
-  reportStatisticsList,
-  exportList
-} from "@/api/reportForm/annualReport/annualReport";
-
-export default {
-  data() {
-    return {
-      list: [],
-      skinName: "",
-      queryParams: {
-        timeType: "MONTH",
-        energyId: undefined,
-        dataTime: undefined,
-        beginTime: undefined,
-        endTime: undefined,
-        indexCode: undefined,
-        indexStorageId: undefined
-      },
-      indexCategoryOptions: []
-    };
-  },
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-    /*this.getDicts("report_form").then(response => {
-        this.dateTypeOptions = response.data;
-        this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-      });*/
-    this.getDicts("energy_type").then(response => {
-      this.indexCategoryOptions = response.data;
-      //this.queryParams.indexStorageId = this.indexCategoryOptions[0].dictValue;
-    });
-    this.getConfigKey("report_statistics").then(response => {
-      this.skinName = response.msg;
-    });
-    this.getTime();
-    this.getList();
-  },
-  methods: {
-    /** 鏌ヨ閮ㄩ棬鍒楄〃 */
-    getList() {
-      //this.loading = true;
-      this.queryParams.indexCode = this.modelCode;
-      let times = this.queryParams.dataTime.slice(0, 4);
-      this.queryParams.beginTime = times + "-01-01 00:00:00";
-      this.queryParams.endTime = times + "-12-31 00:00:00";
-      reportStatisticsList(this.queryParams).then(response => {
-        this.list = response.data;
-        this.loading = false;
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      queryParams.dataTime = queryParams.dataTime + "-01-01";
-      this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夋姤琛ㄦ暟鎹�?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportList(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-    handleTime(date) {
-      if (date == "MONTH") {
-        (this.dateTypes = "year"), (this.valueFormat = "yyyy");
-      } else if (date == "DAY") {
-        (this.dateTypes = "month"), (this.valueFormat = "yyyy-MM");
-      } else {
-        (this.dateTypes = "date"), (this.valueFormat = "yyyy-MM-dd");
-      }
-    },
-    getTime() {
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      this.queryParams.dataTime = year + "-" + month;
-    },
-    numFilter(value) {
-      // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = "";
-      if (!isNaN(value) && value !== "" && value !== null) {
-        realVal = parseFloat(value).toFixed(this.skinName);
-      } else {
-        realVal = "--";
-      }
-      return realVal;
-    }
-  }
-};
-</script>
-<style scoped></style>
diff --git a/energy_management_ui/src/views/reportForm/consolidatedStatements/index.vue b/energy_management_ui/src/views/reportForm/consolidatedStatements/index.vue
deleted file mode 100644
index 18b46ac..0000000
--- a/energy_management_ui/src/views/reportForm/consolidatedStatements/index.vue
+++ /dev/null
@@ -1,324 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="缁熻鏃堕棿">
-        <el-date-picker clearable size="small" style="width: 200px"
-                        v-model="queryParams.dataTime"
-                        type="month"
-                        value-format="yyyy-MM"
-                        placeholder="閫夋嫨鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="paymentChanges">璁$畻</el-button>
-        <el-button type="primary" icon="el-icon-plus" size="mini" @click="submitForm">淇濆瓨</el-button>
-        <el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport">瀵煎嚭</el-button>
-      </el-form-item>
-    </el-form>
-    <div class="el-table el-table--fit el-table--scrollable-x el-table--enable-row-hover el-table--medium" >
-      <div class="el-table__body-wrapper is-scrolling-left">
-        <el-form ref="form" :model="form">
-        <table class="el-table__body tableList" cellspacing="0" cellpadding="0">
-          <tr>
-            <td style="background: rgb(240 242 245);width: 140px">鎶曞叆</td>
-            <td style="background: rgb(240 242 245);width: 140px">鎸囨爣绯绘暟</td>
-            <td style="background: rgb(240 242 245);width: 140px">瀹炵墿閲忥紙t锛�</td>
-            <td style="background: rgb(240 242 245);width: 140px">鎸囨爣鍑嗙叅锛坱锛�</td>
-            <td style="background: rgb(240 242 245);width: 140px">浜у嚭</td>
-            <td style="background: rgb(240 242 245);width: 140px">鎶樻爣绯绘暟</td>
-            <td style="background: rgb(240 242 245);width: 140px">瀹炵墿閲忥紙t锛�</td>
-            <td style="background: rgb(240 242 245);width: 140px">鎶樻爣鍑嗙叅锛坱锛�</td>
-          </tr>
-          <tr>
-            <td>鍏ョ倝绮剧叅</td>
-            <td><el-input type="text" v-model="form.trRljmZb" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.trRljmSwl" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td ><el-input v-model="form.trRljmZbzm" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td>鐒︾偔</td>
-            <td><el-input v-model="form.ccJtZb" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.ccJtSwl" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.ccJtZbzm" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-          </tr>
-          <tr>
-            <td>鐢�</td>
-            <td><el-input v-model="form.trDianZb" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.trDianSwl" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.trDianZbzm" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td>鐒︽补</td>
-            <td><el-input v-model="form.ccJyZb" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.ccJySwl" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.ccJyZbzm" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-          </tr>
-          <tr>
-            <td>姘�</td>
-            <td><el-input v-model="form.trShuiZb" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.trShuiSwl" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.trShuiZbzm" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td>绮楄嫰</td>
-            <td><el-input v-model="form.ccCbZb" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.ccCbSwl" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.ccCbZbzm" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-          </tr>
-          <tr>
-            <td>钂告苯</td>
-            <td><el-input v-model="form.trZqZb" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.trZqSwl" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.trZqZbzm" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td>鐓ゆ皵</td>
-            <td><el-input v-model="form.ccMqZb" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.ccMqSwl" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.ccMqZbzm" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-          </tr>
-          <tr>
-            <td></td>
-            <td></td>
-            <td></td>
-            <td></td>
-            <td>鐢�</td>
-            <td><el-input v-model="form.ccDianZb" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.ccDianSwl" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.ccDianZbzm" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-          </tr>
-          <tr>
-            <td></td>
-            <td></td>
-            <td></td>
-            <td></td>
-            <td>钂告苯</td>
-            <td><el-input v-model="form.ccZqZb" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.ccZqSwl" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-            <td><el-input v-model="form.ccZqZbzm" oninput="value=value.replace(/[^\d.]/g,'')"/></td>
-          </tr>
-          <tr>
-            <td>鍚堣</td>
-            <td colspan ="3"><el-input v-model.number="form.trZbzm" disabled="disabled"/></td>
-            <td></td>
-            <td colspan ="3"><el-input v-model.number="form.ccZbzm" disabled="disabled"/></td>
-          </tr>
-          <tr>
-            <td colspan ="2">鍑�鑰楁爣鐓わ細</td>
-            <td colspan ="2"><el-input v-model.number="form.jhbm" disabled="disabled"/></td>
-            <td colspan ="2">宸ュ簭缁煎悎鑳借�楋細</td>
-            <td colspan ="2"><el-input v-model.number="form.zhnh" disabled="disabled"/></td>
-          </tr>
-        </table>
-        </el-form>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-  import { listConsolidatedStatements, getConsolidatedStatements, delConsolidatedStatements, addConsolidatedStatements, updateConsolidatedStatements, exportConsolidatedStatements } from "@/api/reportForm/consolidatedStatements";
-
-  export default {
-    data() {
-      return {
-        // 閬僵灞�
-        //loading: true,
-        // 閫変腑鏁扮粍
-        ids: [],
-        // 闈炲崟涓鐢�
-        single: true,
-        // 闈炲涓鐢�
-        multiple: true,
-        // 鎬绘潯鏁�
-        total: 0,
-        // 寮瑰嚭灞傛爣棰�
-        title: "",
-        form: {},
-        // 鏄惁鏄剧ず寮瑰嚭灞�
-        open: false,
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          dataTime:undefined,
-          timeType:"MONTH",
-        },
-       forms : {
-          id: "",
-          trRljmZb: "",
-          trRljmSwl: "",
-          trRljmZbzm: "",
-          trDianZb: "",
-          trDianSwl: "",
-          trDianZbzm: "",
-          trShuiZb: "",
-          trShuiSwl: "",
-          trShuiZbzm: "",
-          trZqZb: "",
-          trZqSwl: "",
-          trZqZbzm: "",
-          ccJtZb: "",
-          ccJtSwl: "",
-          ccJtZbzm: "",
-          ccJyZb: "",
-          ccJySwl: "",
-          ccJyZbzm: "",
-          ccCbZb: "",
-          ccCbSwl: "",
-          ccCbZbzm: "",
-          ccMqZb: "",
-          ccMqSwl: "",
-          ccMqZbzm: "",
-          ccDianZb: "",
-          ccDianSwl: "",
-          ccDianZbzm: "",
-          ccZqZb: "",
-          ccZqSwl: "",
-          ccZqZbzm: "",
-        },
-      };
-    },
-    created() {
-      this.getList();
-      this.getTime();
-    },
-    methods: {
-      getList() {
-          listConsolidatedStatements(this.queryParams).then(response => {
-            if(response.data.length>0){
-              this.form=response.data[0];
-            }else{
-              this.form=this.forms;
-            }
-        })
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.reset();
-        this.queryParams.pageNum = 1;
-        this.getList();
-      },
-      /** 閲嶇疆鎸夐挳鎿嶄綔 */
-      resetQuery() {
-        this.resetForm("queryForm");
-        this.handleQuery();
-      },
-      reset() {
-        this.form = {
-          id: "",
-          trRljmZb: "",
-          trRljmSwl: "",
-          trRljmZbzm: "",
-          trDianZb: "",
-          trDianSwl: "",
-          trDianZbzm: "",
-          trShuiZb: "",
-          trShuiSwl: "",
-          trShuiZbzm: "",
-          trZqZb: "",
-          trZqSwl: "",
-          trZqZbzm: "",
-          ccJtZb: "",
-          ccJtSwl: "",
-          ccJtZbzm: "",
-          ccJyZb: "",
-          ccJySwl: "",
-          ccJyZbzm: "",
-          ccCbZb: "",
-          ccCbSwl: "",
-          ccCbZbzm: "",
-          ccMqZb: "",
-          ccMqSwl: "",
-          ccMqZbzm: "",
-          ccDianZb: "",
-          ccDianSwl: "",
-          ccDianZbzm: "",
-          ccZqZb: "",
-          ccZqSwl: "",
-          ccZqZbzm: "",
-        };
-        this.resetForm("form");
-      },
-      paymentChanges: function() {
-        this.form.trRljmZbzm=parseFloat(this.numFilter(this.form.trRljmZb)) * parseFloat(this.numFilter(this.form.trRljmSwl))
-        this.form.trDianZbzm=parseFloat(this.numFilter(this.form.trDianZb)) * parseFloat(this.numFilter(this.form.trDianSwl))
-        this.form.trShuiZbzm=parseFloat(this.numFilter(this.form.trShuiZb)) * parseFloat(this.numFilter(this.form.trShuiSwl))
-        this.form.trZqZbzm=parseFloat(this.numFilter(this.form.trZqZb)) * parseFloat(this.numFilter(this.form.trZqSwl))
-        this.form.ccJtZbzm=parseFloat(this.numFilter(this.form.ccJtZb)) * parseFloat(this.numFilter(this.form.ccJtSwl))
-        this.form.ccJyZbzm=parseFloat(this.numFilter(this.form.ccJyZb)) * parseFloat(this.numFilter(this.form.ccJySwl))
-        this.form.ccCbZbzm=parseFloat(this.numFilter(this.form.ccCbZb))* parseFloat(this.numFilter(this.form.ccCbSwl))
-        this.form.ccMqZbzm=parseFloat(this.numFilter(this.form.ccMqZb))* parseFloat(this.numFilter(this.form.ccMqSwl))
-        this.form.ccDianZbzm=parseFloat(this.numFilter(this.form.ccDianZb))* parseFloat(this.numFilter(this.form.ccDianSwl))
-        this.form.ccZqZbzm=parseFloat(this.numFilter(this.form.ccZqZb)) * parseFloat(this.numFilter(this.form.ccZqSwl))
-        this.form.trZbzm=parseFloat(this.numFilter(this.form.trRljmZbzm))+parseFloat(this.numFilter(this.form.trDianZbzm))+parseFloat(this.numFilter(this.form.trShuiZbzm))+ parseFloat(this.numFilter(this.form.trZqZbzm))
-        this.form.ccZbzm=parseFloat(this.numFilter(this.form.ccJtZbzm))+parseFloat(this.numFilter(this.form.ccJyZbzm))+parseFloat(this.numFilter(this.form.ccCbZbzm))+parseFloat(this.numFilter(this.form.ccMqZbzm))+parseFloat(this.numFilter(this.form.ccDianZbzm))+ parseFloat(this.numFilter(this.form.ccZqZbzm))
-        this.form.jhbm=parseFloat(this.numFilter(this.form.trZbzm))-parseFloat(this.numFilter(this.form.ccZbzm))
-        this.form.zhnh=parseFloat(this.numFilter(this.form.jhbm)) / parseFloat(this.numFilter(this.form.ccJtSwl))
-      },
-      /** 淇濆瓨鎸夐挳 */
-      submitForm: function() {
-        if (this.form.id != undefined && this.form.id != "" && this.form.id != null) {
-          updateConsolidatedStatements(this.form).then(response => {
-            if (response.code === 200) {
-              this.msgSuccess("淇敼鎴愬姛");
-              this.getList();
-            } else {
-              this.msgError(response.msg);
-            }
-          });
-        } else {
-          this.form.dataTime=this.queryParams.dataTime
-          addConsolidatedStatements(this.form).then(response => {
-            if (response.code === 200) {
-              this.msgSuccess("鏂板鎴愬姛");
-              this.getList();
-            } else {
-              this.msgError(response.msg);
-            }
-          });
-        }
-      },
-      /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-      handleExport() {
-        const queryParams = this.queryParams;
-        this.$confirm('鏄惁纭鎶ヨ〃鏁版嵁?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function () {
-          return exportConsolidatedStatements(queryParams);
-        }).then(response => {
-          if(response.msg !=="" && response.msg!=null){
-            this.download(response.msg);
-          }else{
-            this.msgSuccess("瀵煎嚭澶辫触鎴栬�呮病鏈夊鍑虹殑鏁版嵁");
-            this.getList();
-          }
-        }).catch(function () {
-        });
-      },
-      getTime(){
-        var date = new Date()
-        var year = date.getFullYear()
-        var month = date.getMonth() + 1
-        var date = date.getDate()
-        month = month < 10 ? '0' + month : month
-        date = date < 10 ? '0' + date : date
-        this.queryParams.dataTime=year + '-' + month
-      },
-      numFilter(value) {
-        let realVal = '' ;
-        if (!isNaN(value) && value !== '' && value !== null) {
-          realVal = value
-        }else{
-          realVal = '0'
-        }
-        return realVal
-      },
-    }
-  };
-</script>
-<style lang="scss" scoped>
-  .tableList th.is-leaf, .tableList td{
-    border-bottom: 1px solid #000000 !important;
-    border-right: 1px solid #000000 !important;
-    text-align: center;
-  }
-  .tableList{
-    border: 1px solid #000000 !important;
-  }
-</style>
diff --git a/energy_management_ui/src/views/reportForm/dailyReport/index.vue b/energy_management_ui/src/views/reportForm/dailyReport/index.vue
deleted file mode 100644
index 18fcda9..0000000
--- a/energy_management_ui/src/views/reportForm/dailyReport/index.vue
+++ /dev/null
@@ -1,298 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item label="鑳芥簮绫诲瀷">
-        <el-select
-          v-model="queryParams.indexStorageId"
-          placeholder="璇烽�夋嫨鑳芥簮鍝佺"
-        >
-          <el-option
-            v-for="dict in indexCategoryOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          ></el-option>
-        </el-select>
-      </el-form-item>
-      <!--<el-form-item label="鎶ヨ〃绫诲瀷">
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio v-for="dict in dateTypeOptions" :key="dict.dictValue" :label="dict.dictValue" @change="handleTime(dict.dictValue)">{{dict.dictLabel}}</el-radio>
-        </el-radio-group>
-      </el-form-item>-->
-      <el-form-item label="缁熻鏃堕棿">
-        <el-date-picker
-          clearable
-          size="small"
-          style="width: 200px"
-          v-model="queryParams.dataTime"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="閫夋嫨鏃ユ湡"
-        >
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >鎼滅储</el-button
-        >
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-          >閲嶇疆</el-button
-        >
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          v-hasPermi="['report:dailyReport:export']"
-          @click="handleExport"
-          >瀵煎嚭</el-button
-        >
-      </el-form-item>
-    </el-form>
-
-    <el-table :data="list" border style="width: 100%; margin-top: 20px;">
-      <el-table-column
-        fixed
-        prop="indexName"
-        align="center"
-        label="鑳芥簮鎸囨爣鍚嶇О"
-        min-width="240px"
-      ></el-table-column>
-      <el-table-column label="0鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value0)
-        }}</template></el-table-column
-      >
-      <el-table-column label="1鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value1)
-        }}</template></el-table-column
-      >
-      <el-table-column label="2鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value2)
-        }}</template></el-table-column
-      >
-      <el-table-column label="3鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value3)
-        }}</template></el-table-column
-      >
-      <el-table-column label="4鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value4)
-        }}</template></el-table-column
-      >
-      <el-table-column label="5鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value5)
-        }}</template></el-table-column
-      >
-      <el-table-column label="6鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value6)
-        }}</template></el-table-column
-      >
-      <el-table-column label="7鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value7)
-        }}</template></el-table-column
-      >
-      <el-table-column label="8鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value8)
-        }}</template></el-table-column
-      >
-      <el-table-column label="9鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value9)
-        }}</template></el-table-column
-      >
-      <el-table-column label="10鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value10)
-        }}</template></el-table-column
-      >
-      <el-table-column label="11鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value11)
-        }}</template></el-table-column
-      >
-      <el-table-column label="12鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value12)
-        }}</template></el-table-column
-      >
-      <el-table-column label="13鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value13)
-        }}</template></el-table-column
-      >
-      <el-table-column label="14鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value14)
-        }}</template></el-table-column
-      >
-      <el-table-column label="15鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value15)
-        }}</template></el-table-column
-      >
-      <el-table-column label="16鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value16)
-        }}</template></el-table-column
-      >
-      <el-table-column label="17鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value17)
-        }}</template></el-table-column
-      >
-      <el-table-column label="18鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value18)
-        }}</template></el-table-column
-      >
-      <el-table-column label="19鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value19)
-        }}</template></el-table-column
-      >
-      <el-table-column label="20鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value20)
-        }}</template></el-table-column
-      >
-      <el-table-column label="21鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value21)
-        }}</template></el-table-column
-      >
-      <el-table-column label="22鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value22)
-        }}</template></el-table-column
-      >
-      <el-table-column label="23鏃�" align="center" min-width="140px">
-        <template slot-scope="scope">{{
-          numFilter(scope.row.value23)
-        }}</template></el-table-column
-      >
-    </el-table>
-  </div>
-</template>
-
-<script>
-import {
-  reportStatisticsList,
-  exportList
-} from "@/api/reportForm/dailyReport/dailyReport";
-
-export default {
-  data() {
-    return {
-      list: [],
-      skinName: "",
-      queryParams: {
-        timeType: "HOUR",
-        energyId: undefined,
-        dataTime: undefined,
-        beginTime: undefined,
-        endTime: undefined,
-        indexCode: undefined,
-        indexStorageId: undefined
-      },
-      indexCategoryOptions: []
-    };
-  },
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-    /*this.getDicts("report_form").then(response => {
-        this.dateTypeOptions = response.data;
-        this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-      });*/
-    this.getDicts("energy_type").then(response => {
-      this.indexCategoryOptions = response.data;
-      //this.queryParams.indexStorageId = this.indexCategoryOptions[0].dictValue;
-    });
-    this.getConfigKey("report_statistics").then(response => {
-      this.skinName = response.msg;
-    });
-    this.getTime();
-    this.getList();
-  },
-  methods: {
-    /** 鏌ヨ閮ㄩ棬鍒楄〃 */
-    getList() {
-      //this.loading = true;
-      this.queryParams.indexCode = this.modelCode;
-      reportStatisticsList(this.queryParams).then(response => {
-        this.list = response.data;
-        this.loading = false;
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夋姤琛ㄦ暟鎹�?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportList(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-    handleTime(date) {
-      if (date == "MONTH") {
-        (this.dateTypes = "year"), (this.valueFormat = "yyyy");
-      } else if (date == "DAY") {
-        (this.dateTypes = "month"), (this.valueFormat = "yyyy-MM");
-      } else {
-        (this.dateTypes = "date"), (this.valueFormat = "yyyy-MM-dd");
-      }
-    },
-    getTime() {
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      this.queryParams.dataTime = year + "-" + month + "-" + date;
-    },
-    numFilter(value) {
-      // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = "";
-      if (!isNaN(value) && value !== "" && value !== null) {
-        realVal = parseFloat(value).toFixed(this.skinName);
-      } else {
-        realVal = "--";
-      }
-      return realVal;
-    }
-  }
-};
-</script>
-<style scoped></style>
diff --git a/energy_management_ui/src/views/reportForm/index.vue b/energy_management_ui/src/views/reportForm/index.vue
deleted file mode 100644
index 46df082..0000000
--- a/energy_management_ui/src/views/reportForm/index.vue
+++ /dev/null
@@ -1,281 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-table :data="tableData" :span-method="objectSpanMethod" border style="width: 100%; margin-top: 20px">
-      <!--<el-table-column prop="times">
-
-      </el-table-column>-->
-      <el-table-column prop="parentName" label="鑳芥簮鍝佺" min-width="200px"></el-table-column>
-      <el-table-column prop="name" label="鑳芥簮鍚嶇О" min-width="240px"></el-table-column>
-      <el-table-column label="1鏈堟妱琛ㄥ��" min-width="140px">
-       <template slot-scope="scope" v-if="scope.row.value1 !=null">
-          {{numFilter(scope.row.value1)}}
-        </template>
-      </el-table-column>
-      <el-table-column prop="amount1" label="1鏈堟秷鑰楅噺" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value13 !=null">
-          {{numFilter(scope.row.value1-scope.row.value13)}}
-        </template>
-        <template slot-scope="scope" v-if="scope.row.value13 ===null &&scope.row.value1 !=null">
-          {{numFilter(scope.row.value1)}}
-        </template>
-      </el-table-column>
-      <el-table-column label="2鏈堟妱琛ㄥ��" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value2 !=null">
-          {{numFilter(scope.row.value2)}}
-        </template>
-      </el-table-column>
-      <el-table-column prop="amount1" label="2鏈堟秷鑰楅噺" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value1 !=null">
-          {{numFilter(scope.row.value2-scope.row.value1)}}
-        </template>
-        <template slot-scope="scope" v-if="scope.row.value1 ==null &&scope.row.value2 !=null">
-          {{numFilter(scope.row.value2)}}
-        </template>
-      </el-table-column>
-      <el-table-column label="3鏈堟妱琛ㄥ��" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value3 !=null">
-          {{numFilter(scope.row.value3)}}
-        </template>
-      </el-table-column>
-      <el-table-column prop="amount1" label="3鏈堟秷鑰楅噺" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value2 !=null">
-          {{numFilter(scope.row.value3-scope.row.value2)}}
-        </template>
-        <template slot-scope="scope" v-if="scope.row.value2 ==null &&scope.row.value3 !=null">
-          {{numFilter(scope.row.value3)}}
-        </template>
-      </el-table-column>
-      <el-table-column label="4鏈堟妱琛ㄥ��" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value4 !=null">
-          {{numFilter(scope.row.value4)}}
-        </template>
-      </el-table-column>
-      <el-table-column prop="amount1" label="4鏈堟秷鑰楅噺" min-width="140px">
-          <template slot-scope="scope" v-if="scope.row.value3 !=null">
-            {{numFilter(scope.row.value4-scope.row.value3)}}
-          </template>
-          <template slot-scope="scope" v-if="scope.row.value3 ==null &&scope.row.value4 !=null">
-            {{numFilter(scope.row.value4)}}
-          </template>
-      </el-table-column>
-      <el-table-column label="5鏈堟妱琛ㄥ��" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value5 !=null">
-          {{numFilter(scope.row.value5)}}
-        </template>
-      </el-table-column>
-      <el-table-column prop="amount1" label="5鏈堟秷鑰楅噺" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value4 !=null">
-          {{numFilter(scope.row.value5-scope.row.value4)}}
-        </template>
-        <template slot-scope="scope" v-if="scope.row.value4 ==null &&scope.row.value5 !=null">
-          {{numFilter(scope.row.value5)}}
-        </template>
-      </el-table-column>
-      <el-table-column label="6鏈堟妱琛ㄥ��" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value6 !=null">
-          {{numFilter(scope.row.value6)}}
-        </template>
-      </el-table-column>
-      <el-table-column prop="amount1" label="6鏈堟秷鑰楅噺" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value5 !=null">
-          {{numFilter(scope.row.value6-scope.row.value5)}}
-        </template>
-        <template slot-scope="scope" v-if="scope.row.value5 ==null &&scope.row.value6 !=null">
-          {{numFilter(scope.row.value6)}}
-        </template>
-      </el-table-column>
-      <el-table-column label="7鏈堟妱琛ㄥ��" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value7 !=null">
-          {{numFilter(scope.row.value7)}}
-        </template>
-      </el-table-column>
-      <el-table-column prop="amount1" label="7鏈堟秷鑰楅噺" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value6 !=null">
-          {{numFilter(scope.row.value7-scope.row.value6)}}
-        </template>
-        <template slot-scope="scope" v-if="scope.row.value6 ==null &&scope.row.value7 !=null">
-          {{numFilter(scope.row.value7)}}
-        </template>
-      </el-table-column>
-      <el-table-column label="8鏈堟妱琛ㄥ��" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value8 !=null">
-          {{numFilter(scope.row.value8)}}
-        </template>
-      </el-table-column>
-      <el-table-column prop="amount1" label="8鏈堟秷鑰楅噺" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value7 !=null">
-          {{numFilter(scope.row.value8-scope.row.value7)}}
-        </template>
-        <template slot-scope="scope" v-if="scope.row.value7 ==null &&scope.row.value8 !=null">
-          {{numFilter(scope.row.value8)}}
-        </template>
-      </el-table-column>
-      <el-table-column label="9鏈堟妱琛ㄥ��" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value9 !=null">
-          {{numFilter(scope.row.value9)}}
-        </template>
-      </el-table-column>
-      <el-table-column prop="amount1" label="9鏈堟秷鑰楅噺" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value8 !=null">
-          {{numFilter(scope.row.value9-scope.row.value8)}}
-        </template>
-        <template slot-scope="scope" v-if="scope.row.value8 ==null &&scope.row.value9 !=null">
-          {{numFilter(scope.row.value9)}}
-        </template>
-      </el-table-column>
-      <el-table-column label="10鏈堟妱琛ㄥ��" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value10 !=null">
-          {{numFilter(scope.row.value10)}}
-        </template>
-      </el-table-column>
-      <el-table-column prop="amount1" label="10鏈堟秷鑰楅噺" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value9 !=null">
-          {{numFilter(scope.row.value10-scope.row.value9)}}
-        </template>
-        <template slot-scope="scope" v-if="scope.row.value9 ==null &&scope.row.value10 !=null">
-          {{numFilter(scope.row.value10)}}
-        </template>
-      </el-table-column>
-      <el-table-column label="11鏈堟妱琛ㄥ��" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value11 !=null">
-          {{numFilter(scope.row.value11)}}
-        </template>
-      </el-table-column>
-      <el-table-column prop="amount1" label="11鏈堟秷鑰楅噺" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value10 !=null">
-          {{numFilter(scope.row.value11-scope.row.value10)}}
-        </template>
-        <template slot-scope="scope" v-if="scope.row.value10 ==null &&scope.row.value11 !=null">
-          {{numFilter(scope.row.value11)}}
-        </template>
-      </el-table-column>
-      <el-table-column label="12鏈堟妱琛ㄥ��" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value12 !=null">
-          {{numFilter(scope.row.value12)}}
-        </template>
-      </el-table-column>
-      <el-table-column prop="amount1" label="12鏈堟秷鑰楅噺" min-width="140px">
-        <template slot-scope="scope" v-if="scope.row.value11 !=null">
-          {{numFilter(scope.row.value12-scope.row.value11)}}
-        </template>
-        <template slot-scope="scope" v-if="scope.row.value11 ==null &&scope.row.value12 !=null">
-          {{numFilter(scope.row.value12)}}
-        </template>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-  import { reportFormList} from "@/api/reportForm/reportForm";
-
-  export default {
-    data() {
-      return {
-        tableData: [],
-        date:new Date(),
-        times:"",
-        rowIndex: '-1',
-        OrderIndexArr: [],
-        hoverOrderArr: [],
-        skinName:"",
-        queryParams:{
-          timeDate:"",
-          timeYear:"",
-          code:"",
-          timeType:"DAY",
-        },
-        modelCode:undefined,
-      };
-    },
-    created() {
-      this.modelCode=this.$route.query.modelCode;
-      this.getList();
-      this.getConfigKey("reportd").then(response => {
-        this.skinName=response.msg;
-      });
-    },
-    methods: {
-      /** 鏌ヨ閮ㄩ棬鍒楄〃 */
-      getList() {
-        this.loading = true;
-        this.queryParams.timeDate=this.dateFormat(this.date);
-        this.queryParams.timeYear=(this.dateFormat(this.date)-1)+"-12"
-        this.queryParams.code=this.modelCode;
-        reportFormList(this.queryParams).then(response => {
-          //console.log(response.data);
-          this.tableData=response.data;
-          //this.getOrderNumber();
-          this.loading = false;
-        });
-      },
-      numFilter(value) {// 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-        let realVal = '' ;
-        if (!isNaN(value) && value !== '') {
-          realVal = parseFloat(value).toFixed(this.skinName)
-        } else {
-          realVal = ''
-        }
-        return realVal
-      },
-      getOrderNumber() {
-        let OrderObj = {}
-        this.tableData.forEach((element, index) => {
-          element.rowIndex = index;
-          if (OrderObj[element.parentName]) {
-            OrderObj[element.parentName].push(index)
-          } else {
-            OrderObj[element.parentName] = []
-            OrderObj[element.parentName].push(index)
-          }
-        })
-
-        // 灏嗘暟缁勯暱搴﹀ぇ浜�1鐨勫�� 瀛樺偍鍒皌his.OrderIndexArr锛堜篃灏辨槸闇�瑕佸悎骞剁殑椤癸級
-        for (let k in OrderObj) {
-          if (OrderObj[k].length > 1) {
-            this.OrderIndexArr.push(OrderObj[k])
-          }
-        }
-      },
-      objectSpanMethod({ row, column, rowIndex, columnIndex }) {
-        console.log(row)
-        if (columnIndex === 0) {
-          for (let i = 0; i < this.OrderIndexArr.length; i++) {
-            let element = this.OrderIndexArr[i]
-            for (let j = 0; j < element.length; j++) {
-              let item = element[j]
-              if (rowIndex == item) {
-                if (j == 0) {
-                  return {
-                    rowspan: element.length,
-                    colspan: 1
-                  }
-                } else if (j != 0) {
-                  return {
-                    rowspan: 0,
-                    colspan: 0
-                  }
-                }
-              }
-            }
-          }
-        }
-      },
-      dateFormat(time) {
-        var date=new Date(time);
-        var year=date.getFullYear();
-        /* 鍦ㄦ棩鏈熸牸寮忎腑锛屾湀浠芥槸浠�0寮�濮嬬殑锛屽洜姝よ鍔�0
-         * 浣跨敤涓夊厓琛ㄨ揪寮忓湪灏忎簬10鐨勫墠闈㈠姞0锛屼互杈惧埌鏍煎紡缁熶竴  濡� 09:11:05
-         * */
-        var month= date.getMonth()+1<10 ? "0"+(date.getMonth()+1) : date.getMonth()+1;
-        var day=date.getDate()<10 ? "0"+date.getDate() : date.getDate();
-        var hours=date.getHours()<10 ? "0"+date.getHours() : date.getHours();
-        var minutes=date.getMinutes()<10 ? "0"+date.getMinutes() : date.getMinutes();
-        var seconds=date.getSeconds()<10 ? "0"+date.getSeconds() : date.getSeconds();
-        // 鎷兼帴
-        return year;
-        //return year+"-"+month+"-"+day+" "+hours+":"+minutes+":"+seconds;
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/reportForm/monthlyReport/index.vue b/energy_management_ui/src/views/reportForm/monthlyReport/index.vue
deleted file mode 100644
index d4cc70c..0000000
--- a/energy_management_ui/src/views/reportForm/monthlyReport/index.vue
+++ /dev/null
@@ -1,193 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item label="鑳芥簮绫诲瀷">
-        <el-select
-          v-model="queryParams.indexStorageId"
-          placeholder="璇烽�夋嫨鑳芥簮鍝佺"
-        >
-          <el-option
-            v-for="dict in indexCategoryOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          ></el-option>
-        </el-select>
-      </el-form-item>
-      <!--<el-form-item label="鎶ヨ〃绫诲瀷">
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio v-for="dict in dateTypeOptions" :key="dict.dictValue" :label="dict.dictValue" @change="handleTime(dict.dictValue)">{{dict.dictLabel}}</el-radio>
-        </el-radio-group>
-      </el-form-item>-->
-      <el-form-item label="缁熻鏃堕棿">
-        <el-date-picker
-          clearable
-          size="small"
-          style="width: 200px"
-          v-model="queryParams.dataTime"
-          type="month"
-          value-format="yyyy-MM"
-          placeholder="閫夋嫨鏃ユ湡"
-        >
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >鎼滅储</el-button
-        >
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-          >閲嶇疆</el-button
-        >
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          >瀵煎嚭</el-button
-        >
-      </el-form-item>
-    </el-form>
-    <el-table :data="tableData" border style="width: 100%;margin-top: 20px">
-      <el-table-column
-        prop="indexName"
-        align="center"
-        label="鑳芥簮鎸囨爣鍚嶇О"
-        min-width="220"
-        fixed="left"
-      />
-
-      <el-table-column
-        v-for="index in 31"
-        :key="index"
-        :label="`${index}鏃"
-        align="center"
-        min-width="140px"
-      >
-        <template slot-scope="scope">
-          <span style="font-size: 12px">
-            {{ numFilter(scope.row[`value${index}`]) || "--" }}
-          </span>
-        </template>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-import {
-  reportStatisticsList,
-  exportList
-} from "@/api/reportForm/monthlyReport/monthlyReport";
-export default {
-  data() {
-    return {
-      tableData: [],
-      tableHead: [],
-      skinName: "",
-      queryParams: {
-        timeType: "DAY",
-        energyId: undefined,
-        dataTime: undefined,
-        beginTime: undefined,
-        endTime: undefined,
-        indexCode: undefined,
-        indexStorageId: undefined
-      },
-      indexCategoryOptions: []
-    };
-  },
-  created() {
-    this.modelCode = this.$route.query.modelCode;
-    /*this.getDicts("report_form").then(response => {
-        this.dateTypeOptions = response.data;
-        this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-      });*/
-    this.getDicts("energy_type").then(response => {
-      this.indexCategoryOptions = response.data;
-      //this.queryParams.indexStorageId = this.indexCategoryOptions[0].dictValue;
-    });
-    this.getConfigKey("report_statistics").then(response => {
-      this.skinName = response.msg;
-    });
-    this.getTime();
-    this.getList();
-  },
-  methods: {
-    /** 鏌ヨ閮ㄩ棬鍒楄〃 */
-    getList() {
-      //this.loading = true;
-      this.queryParams.indexCode = this.modelCode;
-      reportStatisticsList(this.queryParams).then(response => {
-        console.log(response.data);
-        this.tableData = response.data.tabledata;
-        this.tableHead = response.data.tablehead;
-        //this.list=response.data;
-        this.loading = false;
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夋姤琛ㄦ暟鎹�?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportList(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-    handleTime(date) {
-      if (date == "MONTH") {
-        (this.dateTypes = "year"), (this.valueFormat = "yyyy");
-      } else if (date == "DAY") {
-        (this.dateTypes = "month"), (this.valueFormat = "yyyy-MM");
-      } else {
-        (this.dateTypes = "date"), (this.valueFormat = "yyyy-MM-dd");
-      }
-    },
-    getTime() {
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      this.queryParams.dataTime = year + "-" + month;
-    },
-    numFilter(value) {
-      // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = "";
-      if (!isNaN(value) && value !== "" && value !== null) {
-        realVal = parseFloat(value).toFixed(this.skinName);
-      } else {
-        realVal = "--";
-      }
-      return realVal;
-    }
-  }
-};
-</script>
-<style scoped></style>
diff --git a/energy_management_ui/src/views/reportForm/statements/BarChart.vue b/energy_management_ui/src/views/reportForm/statements/BarChart.vue
deleted file mode 100644
index 7f11346..0000000
--- a/energy_management_ui/src/views/reportForm/statements/BarChart.vue
+++ /dev/null
@@ -1,114 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-import moment from "moment";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ barChartData, dataTime } = {}) {
-      let curYear = moment(dataTime).year();
-      let yearArr = [curYear - 3, curYear - 2, curYear - 1, curYear];
-      let option = {
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // Use axis to trigger tooltip
-            type: "shadow" // 'shadow' as default; can also be 'line' or 'shadow'
-          }
-        },
-        legend: {
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        grid: {
-          left: "3%",
-          right: "4%",
-          bottom: "3%",
-          containLabel: true
-        },
-        barWidth: "40%",
-        xAxis: {
-          type: "category",
-          data: yearArr
-        },
-        yAxis: {
-          type: "value"
-        },
-        series: barChartData.map(item => {
-          return {
-            name: item.energyUnit,
-            type: "bar",
-            stack: "total",
-            label: {
-              show: true
-            },
-            emphasis: {
-              focus: "series"
-            },
-            data: item.dataArr
-          };
-        })
-      };
-      this.chart.setOption(option);
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/reportForm/statements/index.vue b/energy_management_ui/src/views/reportForm/statements/index.vue
deleted file mode 100644
index e0f6216..0000000
--- a/energy_management_ui/src/views/reportForm/statements/index.vue
+++ /dev/null
@@ -1,323 +0,0 @@
-<template>
-  <div>
-    <div class="dashboard-editor-container">
-      <el-card>
-        <el-form
-          :model="queryParams"
-          ref="queryForm"
-          :inline="true"
-          label-width="68px"
-        >
-          <el-form-item label="鏃ユ湡" label-width="40px">
-            <!-- <el-radio-group v-model="queryParams.timeType">
-              <el-radio
-                style="margin-right: 10px"
-                v-for="dict in dateTypeOptions"
-                :key="dict.dictValue"
-                :label="dict.dictValue"
-                @change="handleTime(dict.dictValue)"
-                >{{ dict.dictLabel }}</el-radio
-              >
-            </el-radio-group> -->
-            <el-date-picker
-              :clearable="false"
-              v-model="queryParams.time"
-              type="month"
-              value-format="yyyy-MM"
-              placeholder="閫夋嫨鏃ユ湡"
-            ></el-date-picker>
-          </el-form-item>
-          <el-form-item label="鑳芥簮鍝佺">
-            <el-select
-              v-model="queryParams.energyType"
-              placeholder="璇烽�夋嫨鑳芥簮"
-              @change="changeEnergyType"
-            >
-              <el-option
-                style="width: 150px"
-                v-for="dict in powerTypeOptions"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item>
-            <el-button
-              type="primary"
-              icon="el-icon-search"
-              size="mini"
-              @click="handleQuery"
-              >鏌ヨ</el-button
-            >
-            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-              >閲嶇疆</el-button
-            >
-            <el-button
-              type="warning"
-              icon="el-icon-download"
-              size="small"
-              @click="htmlToPdf($refs.pdfRef, fileName)"
-              >瀵煎嚭PDF</el-button
-            >
-          </el-form-item>
-        </el-form>
-      </el-card>
-    </div>
-    <div :style="bodyStyle">
-      <div ref="pdfRef" class="pdf-wrapper" style="width: 84%; margin: 0 auto;">
-        <div class="table-wrapper">
-          <el-card>
-            <div slot="header" class="clearfix">
-              <span>鐢▄{ queryParams.energyTypeName }}鎬婚噺</span>
-            </div>
-            <el-table :data="tableData" show-summary>
-              <el-table-column
-                prop="energyUnit"
-                label="鐢ㄨ兘鍗曞厓"
-                align="center"
-                width="150"
-                show-overflow-tooltip
-              ></el-table-column>
-              <el-table-column
-                :prop="item.prop"
-                :label="item.label"
-                align="center"
-                v-for="item in columnsTime"
-                :key="item.prop"
-              ></el-table-column>
-              <!-- <el-table-column prop="yoy" label="鐢ㄨ兘鍗曞厓" align="center">
-              <template slot-scope="scope">
-                <span>{{ scope.row.yoy }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column prop="qoq" label="娑堣�楅噺" align="center">
-              <template slot-scope="scope">
-                <span>{{ scope.row.yoy }}</span>
-              </template>
-            </el-table-column> -->
-            </el-table>
-          </el-card>
-        </div>
-        <el-card style="margin-top: 16px">
-          <div slot="header" class="clearfix">
-            <span>缁煎悎鑳借��</span>
-          </div>
-          <div>
-            <bar-chart
-              ref="barChartRef"
-              :chart-data="{ barChartData, dataTime: queryParams.time }"
-            />
-          </div>
-        </el-card>
-        <el-card style="margin-top: 16px">
-          <div slot="header" class="clearfix">
-            <span>鑳芥簮娑堣�楀崰姣�</span>
-          </div>
-          <div>
-            <pie-chart :chart-data="firstPieData" pieTitle="鑳芥簮娑堣�楀崰姣�" />
-          </div>
-        </el-card>
-        <el-card style="margin-top: 16px">
-          <div slot="header" class="clearfix">
-            <span>璁惧鐢ㄨ兘鍗犳瘮</span>
-          </div>
-          <div>
-            <pie-chart :chart-data="secondPieData" pieTitle="璁惧鐢ㄨ兘鍗犳瘮" />
-          </div>
-        </el-card>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import mixins from "@/layout/mixin/getHeight";
-import PieChart from "../../dashboard/PieChart.vue";
-import LineChart from "../../dashboard/LineChart";
-import BarChart from "./BarChart";
-import {
-  queryComprehensiveList,
-  getEnergyConsumptionRatio,
-  getEnergyUnitConsumptionRatio,
-  queryComprehensiveUnitChart
-} from "@/api/statement/index.js";
-import { listEnergyType } from "@/api/home/home";
-import moment from "moment";
-export default {
-  mixins: [mixins],
-  components: {
-    LineChart,
-    BarChart,
-    PieChart
-  },
-  data() {
-    return {
-      modelCode: "",
-      firstPieData: [],
-      secondPieData: [],
-      barChartData: [],
-      queryParams: {
-        time: "",
-        energyType: "",
-        energyTypeName: ""
-      },
-      powerTypeOptions: [],
-      dateTypes: "month",
-      tableData: [],
-      columnsTime: [],
-      fileName: ""
-    };
-  },
-  created() {
-    this.modelCode = this.$route.query.modelCode || "Home_Cumulative";
-    this.queryParams.time = moment().format("yyyy-MM");
-    this.fileName = moment().format("yyyy骞碝M鏈�") + "缁煎悎鎶ヨ〃";
-
-    this.getColumns();
-    this.getEnergyType();
-  },
-  methods: {
-    changeEnergyType(e) {
-      console.log(e);
-      for (let i = 0; i < this.powerTypeOptions.length; i++) {
-        if (e == this.powerTypeOptions[i].value) {
-          this.queryParams.energyTypeName = this.powerTypeOptions[i].label;
-        }
-      }
-      this.handleQuery();
-    },
-    getColumns() {
-      let currentYear = moment(this.queryParams.time).year();
-      let month = moment(this.queryParams.time).format("MM");
-      let arr = [
-        currentYear - 3 + "-" + month,
-        currentYear - 2 + "-" + month,
-        currentYear - 1 + "-" + month,
-        this.queryParams.time
-      ];
-      this.columnsTime = arr.map(item => {
-        return {
-          label: moment(item).format("yyyy骞碝M鏈�"),
-          prop: moment(item).format("yyyyMM")
-        };
-      });
-    },
-    getList() {
-      this.fileName =
-        moment(this.queryParams.time).format("yyyy骞碝M鏈�") + "缁煎悎鎶ヨ〃";
-      queryComprehensiveList({
-        ...this.queryParams,
-        modeCode: "Home_Cumulative"
-      }).then(res => {
-        this.tableData = res.data.map(item => {
-          return {
-            ...item,
-            [this.columnsTime[0].prop]: item.value4,
-            [this.columnsTime[1].prop]: item.value3,
-            [this.columnsTime[2].prop]: item.value2,
-            [this.columnsTime[3].prop]: item.value
-          };
-        });
-      });
-      queryComprehensiveUnitChart({
-        ...this.queryParams,
-        modeCode: "Home_Equipment"
-      }).then(res => {
-        this.barChartData = res.data.map(item => {
-          return {
-            energyUnit: item.energyUnit,
-            dataArr: [item.value4, item.value3, item.value2, item.value]
-          };
-        });
-      });
-
-      getEnergyConsumptionRatio({
-        ...this.queryParams,
-        modeCode: "Home_Equipment"
-      }).then(res => {
-        this.firstPieData = res.data
-          ? res.data.map(item => {
-              return {
-                name: item.item,
-                value: item.count || 0,
-                unit: item.unit
-              };
-            })
-          : [];
-      });
-
-      getEnergyUnitConsumptionRatio({
-        ...this.queryParams,
-        modeCode: "Home_Equipment"
-      }).then(res => {
-        this.secondPieData = res.data
-          ? res.data.map(item => {
-              return {
-                ...item
-              };
-            })
-          : [];
-      });
-    },
-    getEnergyType() {
-      listEnergyType()
-        .then(res => {
-          if (res.code === 200) {
-            this.powerTypeOptions =
-              res.data.map(item => ({
-                ...item,
-                value: item.energy,
-                label: item.energyName
-              })) || [];
-            this.queryParams.energyType =
-              this.powerTypeOptions.length > 0
-                ? this.powerTypeOptions[0].value
-                : "";
-            this.queryParams.energyTypeName =
-              this.powerTypeOptions.length > 0
-                ? this.powerTypeOptions[0].label
-                : "";
-            this.getList();
-          }
-        })
-        .catch(e => {
-          console.log("鑾峰彇鑳芥簮绫诲瀷鍒楄〃", e);
-        });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.getColumns();
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.queryParams = {
-        time: moment().format("yyyy-MM")
-      };
-      this.handleQuery();
-    },
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 215 + "px";
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.dashboard-editor-container {
-  margin-bottom: 16px;
-  ::v-deep {
-    .el-card__body {
-      padding: 20px 12px 0 12px;
-    }
-  }
-  .pdf-wrapper {
-    width: 80%;
-    margin: 0 auto;
-  }
-  .table-wrapper {
-    margin-top: 16px;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/reportInfo/index.vue b/energy_management_ui/src/views/reportInfo/index.vue
deleted file mode 100644
index dfe461a..0000000
--- a/energy_management_ui/src/views/reportInfo/index.vue
+++ /dev/null
@@ -1,384 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form :model="queryParams" ref="queryForm" label-width="72px" class="special-form">
-        <el-row :gutter="24">
-          <el-col :span="5">
-            <el-form-item label="鏃ユ湡鍒囨崲" prop="enerclassname">
-              <div class="flex-row">
-                <el-button :type="activeDate == 'month' ? 'primary' : ''" size="mini" @click="handleSwitchDate('month')">鏈�</el-button>
-                <el-button :type="activeDate == 'date' ? 'primary' : ''" size="mini" @click="handleSwitchDate('date')">鏃�</el-button>
-              </div>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鏃ユ湡閫夋嫨" prop="enerclassname">
-              <el-date-picker
-                v-if="activeDate == 'month'"
-                v-model="queryParams.dateValue"
-                type="month"
-                size="small"
-                @change="changeDate"
-                placeholder="閫夋嫨鏃ユ湡">
-              </el-date-picker>
-              <el-date-picker
-                v-else
-                v-model="queryParams.dateValue"
-                type="date"
-                size="small"
-                @change="changeDate"
-                placeholder="閫夋嫨鏃ユ湡">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-          <el-col :span="13">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <!-- <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-              type="primary"
-              icon="el-icon-plus"
-              size="mini"
-              @click="handleAdd"
-              v-hasPermi="['enerInfoManage:enerclass:add']"
-          >鏂板
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="success"
-              icon="el-icon-edit"
-              size="mini"
-              :disabled="single"
-              @click="handleUpdate"
-              v-hasPermi="['enerInfoManage:enerclass:edit']"
-          >淇敼
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              :disabled="multiple"
-              @click="handleDelete"
-              v-hasPermi="['enerInfoManage:enerclass:remove']"
-          >鍒犻櫎
-          </el-button>
-        </el-col>
-      </el-row> -->
-      <el-table :height="height" v-loading="loading" :data="reportList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center"/>
-        <el-table-column label="鎸囨爣缂栫爜" align="center" prop="indexCode"/>
-        <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="indexName" show-overflow-tooltip width="200"/>
-        <el-table-column label="涓婃姤鎵�灞炴湡" align="center" prop="timeCode"/>
-        <el-table-column label="涓婃姤鍊�" align="center" prop="value"/>
-        <el-table-column label="鍘熷鍊�" align="center" prop="originValue"/>
-        <el-table-column label="涓婇檺" align="center" prop="reportUpperLimit"/>
-        <el-table-column label="涓婇檺鏇挎崲鍊�" align="center" prop="reportUpperReplace"/>
-        <el-table-column label="涓嬮檺" align="center" prop="reportLowerLimit"/>
-        <el-table-column label="涓嬮檺鏇挎崲鍊�" align="center" prop="reportLowerReplace"/>
-        <!-- <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['enerInfoManage:enerclass:edit']"
-            >淇敼
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-delete"
-                @click="handleDelete(scope.row)"
-                v-hasPermi="['enerInfoManage:enerclass:remove']"
-            >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column> -->
-      </el-table>
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-    </basic-container>
-  </div>
-</template>
-
-<script>
-import {
-  govReportList
-} from "@/api/reportInfo/index";
-import mixins from "@/layout/mixin/getHeight";
-import moment from 'moment';
-
-export default {
-  mixins: [mixins],
-  data() {
-    return {
-      activeDate: '',
-      height: null,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鑳芥簮鍝佺璁剧疆琛ㄦ牸鏁版嵁
-      reportList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鑳芥簮绫诲埆ID瀛楀吀
-      enerclassidOptions: [],
-      // 鑳芥簮绫诲埆鍚嶇О瀛楀吀
-      enerclassnameOptions: [],
-      // 鎿嶄綔浜哄瓧鍏�
-      oprManOptions: [],
-      // 鎿嶄綔鏃堕棿瀛楀吀
-      oprTimeOptions: [],
-      // 鏇存柊浜哄瓧鍏�
-      modManOptions: [],
-      // 鏇存柊鏃堕棿瀛楀吀
-      modTimeOptions: [],
-      // 澶囨敞瀛楀吀
-      noteOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        dateValue: '',
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        enerclassname: [
-          {required: true, message: "鑳芥簮绫诲埆鍚嶇О涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-      }
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    handleSwitchDate(type) {
-      this.activeDate = type
-      if (type == 'month') {
-        this.queryParams.dateValue = moment(new Date()).format('YYYY-MM')
-      } else {
-        this.queryParams.dateValue = moment(new Date()).format('YYYY-MM-DD')
-      }
-      this.getList();
-    },
-    changeDate(e) {
-      console.log(e)
-      // if (e == null) {
-      //   this.queryParams.dateValue = ''
-      // }
-      this.getList();
-    },
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 320;
-    },
-    getList() {
-      this.loading = true;
-      let timeCode = ''
-      if (this.activeDate && this.queryParams.dateValue){
-        timeCode = this.activeDate == 'month' ? moment(this.queryParams.dateValue).format('YYYYMM') 
-          : (this.activeDate == 'date' ? moment(this.queryParams.dateValue).format('YYYYMMDD') : '')
-      } else {
-        timeCode = this.queryParams.dateValue ? moment(this.queryParams.dateValue).format('YYYYMMDD') : ''
-      }
-      govReportList({
-        ...this.queryParams,
-        timeCode,
-        timeType: this.activeDate == 'month' ? 'MONTH' : (this.activeDate == 'date' ? 'DAY' : '')
-      }).then(response => {
-        this.reportList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鑳芥簮绫诲埆ID瀛楀吀缈昏瘧
-    enerclassidFormat(row, column) {
-      return this.selectDictLabel(this.enerclassidOptions, row.enerclassid);
-    },
-    // 鑳芥簮绫诲埆鍚嶇О瀛楀吀缈昏瘧
-    enerclassnameFormat(row, column) {
-      return this.selectDictLabel(this.enerclassnameOptions, row.enerclassname);
-    },
-    // 鎿嶄綔浜哄瓧鍏哥炕璇�
-    oprManFormat(row, column) {
-      return this.selectDictLabel(this.oprManOptions, row.oprMan);
-    },
-    // 鎿嶄綔鏃堕棿瀛楀吀缈昏瘧
-    oprTimeFormat(row, column) {
-      return this.selectDictLabel(this.oprTimeOptions, row.oprTime);
-    },
-    // 鏇存柊浜哄瓧鍏哥炕璇�
-    modManFormat(row, column) {
-      return this.selectDictLabel(this.modManOptions, row.modMan);
-    },
-    // 鏇存柊鏃堕棿瀛楀吀缈昏瘧
-    modTimeFormat(row, column) {
-      return this.selectDictLabel(this.modTimeOptions, row.modTime);
-    },
-    // 澶囨敞瀛楀吀缈昏瘧
-    noteFormat(row, column) {
-      return this.selectDictLabel(this.noteOptions, row.note);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        enerclassid: undefined,
-        enerclassname: undefined,
-        oprMan: undefined,
-        oprTime: undefined,
-        modMan: undefined,
-        modTime: undefined,
-        note: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.queryParams.dateValue = ''
-      this.activeDate = ''
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.enerclassid)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞鑳芥簮鍝佺璁剧疆";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const enerclassid = row.enerclassid || this.ids
-      getEnerclass(enerclassid).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼鑳芥簮鍝佺璁剧疆";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.enerclassid != undefined) {
-            updateEnerclass(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addEnerclass(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const enerclassname = row.enerclassname || this.enerclassname;
-      const enerclassids = row.enerclassid || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎鑳芥簮绫诲瀷鍚嶇О涓�"' + enerclassname + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delEnerclass(enerclassids);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夎兘婧愬搧绉嶈缃暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportEnerclass(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-.flex-row {
-  display: flex;
-  justify-content: flex-start;
-  align-items: center;
-  height: 36px;
-  // span {
-  //   display: inline-block;
-  //   background: #333;
-  //   color: #fff;
-  //   width: 60px;
-  //   height: 40px;
-  // }
-}
-</style>
diff --git a/energy_management_ui/src/views/reportSet/cjdIndex.vue b/energy_management_ui/src/views/reportSet/cjdIndex.vue
deleted file mode 100644
index 4c3a339..0000000
--- a/energy_management_ui/src/views/reportSet/cjdIndex.vue
+++ /dev/null
@@ -1,271 +0,0 @@
-<template>
-  <div class="app-container item-style" style="padding:0">
-
-    <!--琛ㄦ牸-->
-    <el-form :rules="model.rules" :model="model" ref="form">
-      <el-table v-loading="loading" :data="model.energyindexList"  height="570">
-        <el-table-column label="琛ㄥ叿鍚嶇О" align="center" prop="meterName"/>
-        <el-table-column label="閲囬泦鐐瑰悕绉�" align="center" prop="indexName"/>
-        <el-table-column label="閲囬泦鐐圭紪鐮�" align="center" prop="indexCode"/>
-        <el-table-column label="鎿嶄綔" align="center" >
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="setting(scope.row)"
-              v-hasPermi="['basicsetting:template:edit']"
-            >璁剧疆
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-    </el-form>
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!--鎶ヨ鐣岄潰start-->
-    <el-dialog :title="settingModel.title" :visible.sync="settingModel.open" width="800px" :close-on-click-modal="false"
-               @close='closeYjDialog'>
-      <el-form ref="settingForm" :model="settingModel" :rules="settingModel.rules" label-width="80px">
-        <el-table v-loading="loading" :data="settingModel.settingOptions" border >
-          <el-table-column label="鏃堕棿绫诲瀷" align="center" prop="dateTypeShow"/>
-          <el-table-column label="涓婇檺鍊�" align="center" prop="limitValUp" >
-            <template slot-scope="scope">
-              <el-input-number v-model="scope.row.limitValUp" size="small" controls-position="right" placeholder="璇疯緭鍏ュ��"
-                               clearable></el-input-number>
-            </template>
-          </el-table-column>
-          <el-table-column label="涓婇檺鏇挎崲鍊�" align="center" prop="limitReplaceValUp" >
-            <template slot-scope="scope">
-              <el-input-number v-model="scope.row.limitReplaceValUp" size="small" controls-position="right" placeholder="璇疯緭鍏ュ��"
-                               clearable></el-input-number>
-            </template>
-          </el-table-column>
-          <el-table-column label="涓嬮檺鍊�" align="center" prop="limitValDown" >
-            <template slot-scope="scope">
-              <el-input-number v-model="scope.row.limitValDown" size="small" controls-position="right" placeholder="璇疯緭鍏ュ��"
-                               clearable></el-input-number>
-            </template>
-          </el-table-column>
-          <el-table-column label="涓嬮檺鏇挎崲鍊�" align="center" prop="limitReplaceValDown" >
-            <template slot-scope="scope">
-              <el-input-number v-model="scope.row.limitReplaceValDown" size="small" controls-position="right" placeholder="璇疯緭鍏ュ��"
-                               clearable></el-input-number>
-            </template>
-          </el-table-column>
-        </el-table>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="settingSubmitForm">纭� 瀹�</el-button>
-        <el-button @click="yjSetCancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-    <!--棰勮鐣岄潰end-->
-  </div>
-</template>
-
-<script>
-import {
-  listSet,
-  getSettingIndex,
-  updateDialogForm,
-} from "@/api/reportSet/index"
-import {listLimitType} from "@/api/basicsetting/limitType"
-
-const myModelNode = undefined;
-export default {
-  name: 'EnergyIndex',
-  data() {
-    const checkNum = (rule, value, callback) => {
-      let reg = /(^([-]?)[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^([-]?)(0){1}$)|(^([-]?)[0-9]\.[0-9]([0-9])?$)/;
-      if (!reg.test(value) && value != "") {
-        callback(new Error('鏁板瓧鍙�2浣嶅皬鏁�'));
-      } else {
-        callback();
-      }
-    };
-    return {
-      // 閬僵灞�
-      loading: false,
-      // 閫変腑鏁扮粍
-      ids: [],
-      names: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      //table
-      // 琛ㄥ崟鍙傛暟
-      form: {
-        supplier2: "",
-        type: "",
-        desc: "",
-        input: "",
-        min: "",
-        max: ""
-      },
-      //閰嶇疆琛ㄤ娇鐢ㄦā鍨�
-      settingModel: {
-        title: "",
-        open: false,
-        settingOptions: [
-          // {
-          //   interval:",
-          //   limit:"",
-          //   limit_value:"",
-          // },
-        ],
-        // 鏃舵鏁扮粍
-        timeSlotOptions: [],
-        limitTypeOptions: [],
-        //鎶ヨ绾у埆
-        alarmLevelOptions: [],
-        //鍝嶅簲
-        resposeList: [],
-        stateById: "",
-        rules: {
-          numRule: [
-            {type: "number", validator: checkNum, trigger: "change"},
-          ],
-        },
-      },
-      model: {
-        // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-        energyindexList: [],
-        rules: {
-          numRule: [
-            {type: "number", validator: checkNum, trigger: "change"},
-            // {pattern: /^\d+(\.\d{0,2})?$/, message: '鏁板瓧鍙�2浣嶅皬鏁�', trigger: "change"}
-          ],
-        },
-      },
-      //涓昏〃閫変腑鐨勫惎鍋滅姸鎬佹暟缁�
-      startStopOptions: [],
-
-      editModeEnabled: true,
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      indexIdOptions: [],
-      // 鎸囨爣鍚嶇О瀛楀吀
-      nameOptions: [],
-      // 鎸囨爣缂栫爜瀛楀吀
-      codeOptions: [],
-      // 绯荤粺鎸囨爣鍒嗙被锛�1-鑳芥簮绫伙紝2-浜у搧绫伙紝3-鑳芥晥绫伙紝4-缁忚惀绫伙紝5-鍏朵粬瀛楀吀
-      indexCategoryOptions: [],
-      // 澶囨敞瀛楀吀
-      remarkOptions: [],
-      // 鍗曚綅瀛楀吀
-      unitIdOptions: [],
-      //鎶ヨ绾у埆
-      alarmLevel: "",
-      // 榛樿鍊�
-      dictDefaultVal: undefined,
-      // 鏌ヨ鍙傛暟
-      hbCount: 0,
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        code: undefined,
-        indexCategory: undefined,
-        nodeId: undefined,
-        //鎸囨爣index
-        indexType: "COLLECT"
-      },
-      currentNode: undefined,
-      indexCategoryDefaultVal: undefined,
-      unitDefaultVal: undefined
-    };
-  },
-  created() {
-    this.getDicts("warn_time_slot").then(response => {
-      this.settingModel.timeSlotOptions = response.data;
-    });
-    listLimitType(this.queryParams).then(response => {
-      this.hbCount = response.rows.length;
-      this.settingModel.limitTypeOptions = response.rows;
-    });
-    this.getDicts("alarm_type").then(response => {
-      this.settingModel.alarmTypeOptions = response.data;
-    });
-    this.getDicts("alarm_level").then(response => {
-      this.settingModel.alarmLevelOptions = response.data;
-      this.dictDefaultVal = this.settingModel.alarmLevelOptions.find(f => f.isDefault === 'Y');
-    });
-  },
-  methods: {
-    /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-    setModelNode(modelNode) {
-      this.myModelNode = modelNode;
-      this.currentNode = modelNode;
-      this.getList();
-    },
-    /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-    getList() {
-      if (this.myModelNode) {
-        this.loading = true;
-        this.queryParams.nodeId = this.myModelNode.id;
-        //鎺ュ彛
-        getSettingIndex(this.queryParams).then(response => {
-          this.model.energyindexList = response.data;
-          this.total = response.total;
-          this.loading = false;
-        });
-      } else {
-        this.energyindexList = [];
-      }
-    },
-    yjSetCancel() {
-      this.settingModel.open = false;
-      this.settingModel.settingOptions = [];
-    },
-    //缂栬緫
-    setting(e) {
-      listSet({indexId: e.indexId, nodeId: this.currentNode.id}).then(response => {
-        this.settingModel.settingOptions = response.rows;
-        this.settingModel.open = true;
-        this.settingModel.title = "鎸囨爣缂栧彿锛�" + e.indexCode;
-      });
-    },
-    //琛ㄥ崟鎻愪氦
-    settingSubmitForm() {
-      console.log(JSON.stringify(this.settingModel.settingOptions));
-      this.$refs["settingForm"].validate(valid => {
-        if (valid) {
-          updateDialogForm(this.settingModel.settingOptions || "").then(response => {
-            if (response.code === 200) {
-              this.msgSuccess("淇敼鎴愬姛");
-              this.open = false;
-              this.settingModel.settingOptions = [];
-              this.settingModel.open = false;
-            } else {
-              this.msgError(response.msg);
-            }
-          });
-          this.settingModel.open = false;
-        }
-      });
-    },
-    closeYjDialog() {
-      this.settingModel.settingOptions = [];
-      return false;
-    },
-  }
-};
-</script>
-<style>
-.item-style .el-form-item__content {
-  margin-left: 0px !important;
-}
-</style>
diff --git a/energy_management_ui/src/views/reportSet/index.vue b/energy_management_ui/src/views/reportSet/index.vue
deleted file mode 100644
index c81ae17..0000000
--- a/energy_management_ui/src/views/reportSet/index.vue
+++ /dev/null
@@ -1,79 +0,0 @@
-<template>
-  <el-row type="flex">
-    <el-col :style="{width:isCollapse?'0': '280px',position:'relative'}" v-show="!isCollapse">
-      <basic-container title="涓婃姤璁剧疆" :bodyStyle="bodyStyle">
-        <ModelNode ref="modelNode" @changeNode="changeNode"
-                   :modelCode="modelCode"
-                   :showOpt="false"/>
-      </basic-container>
-      <img src="~@/assets/image/rectangle.png" alt=""
-           class="shrink-col-block"
-           @click="toggleCollapse">
-    </el-col>
-    <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse"/>
-    <el-col :style="{width:isCollapse? 'calc(100% - 48px)':'calc(100% - 280px)',paddingLeft:isCollapse? 0:'14px'}">
-      <basic-container :title="currentNode ? currentNode.label+'--閰嶇疆' : '閰嶇疆'" :bodyStyle="bodyStyleRight">
-        <WarnSetting ref="WarnSetting"/>
-      </basic-container>
-    </el-col>
-  </el-row>
-
-</template>
-
-<script>
-import WarnSetting from './modelWarnSetting'
-import ModelNode from '../basicsetting/modelNode/modelNode'
-import mixins from '@/layout/mixin/getHeight'
-import ShrinkCol from '@/components/shrink/index'
-
-export default {
-  components: { WarnSetting, ModelNode, ShrinkCol },
-  created() {
-    this.modelCode = this.$route.query.modelCode
-  },
-  mixins: [mixins],
-  data() {
-    return {
-      modelData: '',
-      modelInfoOptions: [],
-      modelCode: undefined,
-      isCollapse: false,
-      bodyStyleRight: {},
-      currentNode: ''
-    }
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle.height = window.innerHeight - 155 + 'px'
-      this.bodyStyleRight = {
-        ...this.bodyStyle,
-        height: window.innerHeight - 155 + 'px'
-      }
-    },
-    changeNode: function(node) {
-      if (node) {
-        this.currentNode = node
-      }
-      this.$refs.WarnSetting.modelNodeChange(node)
-    },
-    manageModel: function() {
-      this.$router.push('/model')
-    },
-    changeModel: function(item) {
-      this.$refs.modelNode.getList(item)
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse
-    }
-  }
-}
-</script>
-<style scoped lang="scss">
-.shrink-col-block {
-  position: absolute;
-  top: 20px;
-  right: 16px;
-  cursor: pointer;
-}
-</style>
diff --git a/energy_management_ui/src/views/reportSet/modelWarnSetting.vue b/energy_management_ui/src/views/reportSet/modelWarnSetting.vue
deleted file mode 100644
index c0d8af8..0000000
--- a/energy_management_ui/src/views/reportSet/modelWarnSetting.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-tabs>
-<!--      <el-tab-pane :disabled="disabledSetting">-->
-<!--        <span slot="label"><i class="el-icon-setting"></i> 閲囬泦鐐圭鐞�</span>-->
-<!--        <cjdIndex ref="cjdIndex"></cjdIndex>-->
-<!--      </el-tab-pane>-->
-      <el-tab-pane :disabled="disabledSetting">
-        <span slot="label"><i class="el-icon-setting"></i> 缁熻鎸囨爣绠$悊</span>
-        <zbIndex ref="zbIndex"></zbIndex>
-      </el-tab-pane>
-    </el-tabs>
-  </div>
-</template>
-
-<script>
-import zbIndex from "./zbIndex";
-import cjdIndex from "./cjdIndex";
-
-export default {
-  name: "modelWarnSetting",
-  components: {zbIndex, cjdIndex},
-  data() {
-    return {
-      currentNode: '',
-      deviceDialog: false,
-      energyDialog: false,
-      productDialog: false,
-      collectIndexDialog: false,
-      indexLoading: false,
-      deviceLoading: false,
-      energyLoading: false,
-      productLoading: false,
-      settingEnergyList: [],
-      settingDeviceList: [],
-      settingProductList: [],
-      settingIndexList: [],
-      disabledSetting: true
-    }
-  },
-  methods: {
-    modelNodeChange(modelNode) {
-      this.settingDeviceList = [];
-      this.settingIndexList = [];
-      this.disabledSetting = modelNode === undefined || modelNode === '' || modelNode === null;
-      this.$refs.zbIndex.setModelNode(modelNode);
-      this.$refs.cjdIndex.setModelNode(modelNode);
-      if (modelNode) {
-        this.currentNode = modelNode;
-
-      }
-    },
-    collectIndexSetting() {
-      this.collectIndexDialog = true;
-    },
-    showCollectIndexDialog() {
-      this.$nextTick(() => {
-        this.$refs.collectIndexSetting.init(this.currentNode, this.settingIndexList);
-      })
-    },
-  }
-}
-</script>
-
-<style scoped>
-
-</style>
diff --git a/energy_management_ui/src/views/reportSet/zbIndex.vue b/energy_management_ui/src/views/reportSet/zbIndex.vue
deleted file mode 100644
index df98eb8..0000000
--- a/energy_management_ui/src/views/reportSet/zbIndex.vue
+++ /dev/null
@@ -1,443 +0,0 @@
-<template>
-  <div class="app-container item-style" style="padding:0">
-
-    <!--琛ㄦ牸-->
-    <el-form :rules="model.rules" :model="model" ref="form">
-      <el-table v-loading="loading" :data="model.energyindexList" height="570">
-        <!--        <el-table-column label="琛ㄥ叿鍚嶇О" align="center" prop="meterName"/>-->
-        <el-table-column label="鎸囨爣鐐瑰悕绉�" align="center" prop="indexName"/>
-        <el-table-column label="鎸囨爣鐐圭紪鐮�" align="center" prop="indexCode"/>
-        <el-table-column label="闄愬�煎惎鐢ㄧ姸鎬�" align="center">
-          <template slot-scope="scope">
-            <el-switch
-              v-model="scope.row.enableLimitValue"
-              @change="updateStatus(scope.row)"
-              active-text="鍚敤"
-              inactive-text="绂佺敤">
-            </el-switch>
-          </template>
-        </el-table-column>
-        <el-table-column label="鎿嶄綔" align="center">
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="setting(scope.row)"
-              v-hasPermi="['basicsetting:template:edit']"
-            >璁剧疆
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-    </el-form>
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!--鎶ヨ鐣岄潰start-->
-    <el-dialog :title="settingModel.title" :visible.sync="settingModel.open" width="800px" :close-on-click-modal="false"
-               @close='closeYjDialog'>
-      <el-form ref="settingForm" :model="settingModel" :rules="settingModel.rules" label-width="80px">
-        <el-table v-loading="loading" :data="settingModel.settingOptions" border>
-          <el-table-column label="鏃堕棿绫诲瀷" align="center" prop="dateTypeShow"/>
-          <el-table-column label="涓婇檺鍊�" align="center" prop="limitValUp">
-            <template slot-scope="scope">
-              <el-input-number v-model="scope.row.limitValUp" size="small" controls-position="right" placeholder="璇疯緭鍏ュ��"
-                               clearable></el-input-number>
-            </template>
-          </el-table-column>
-          <el-table-column label="涓婇檺鏇挎崲鍊�" align="center" prop="limitReplaceValUp">
-            <template slot-scope="scope">
-              <el-input-number v-model="scope.row.limitReplaceValUp" size="small" controls-position="right"
-                               placeholder="璇疯緭鍏ュ��"
-                               clearable></el-input-number>
-            </template>
-          </el-table-column>
-          <el-table-column label="涓嬮檺鍊�" align="center" prop="limitValDown">
-            <template slot-scope="scope">
-              <el-input-number v-model="scope.row.limitValDown" size="small" controls-position="right"
-                               placeholder="璇疯緭鍏ュ��"
-                               clearable></el-input-number>
-            </template>
-          </el-table-column>
-          <el-table-column label="涓嬮檺鏇挎崲鍊�" align="center" prop="limitReplaceValDown">
-            <template slot-scope="scope">
-              <el-input-number v-model="scope.row.limitReplaceValDown" size="small" controls-position="right"
-                               placeholder="璇疯緭鍏ュ��"
-                               clearable></el-input-number>
-            </template>
-          </el-table-column>
-        </el-table>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="settingSubmitForm">纭� 瀹�</el-button>
-        <el-button @click="yjSetCancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-    <!--棰勮鐣岄潰end-->
-  </div>
-</template>
-
-<script>
-import {
-  listSet,
-  getSettingIndex,
-  updateDialogForm,
-  updateEnableStatus
-} from "@/api/reportSet/index"
-import {listLimitType} from "@/api/basicsetting/limitType"
-
-const myModelNode = undefined;
-export default {
-  name: 'EnergyIndex',
-  data() {
-    const checkNum = (rule, value, callback) => {
-      let reg = /(^([-]?)[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^([-]?)(0){1}$)|(^([-]?)[0-9]\.[0-9]([0-9])?$)/;
-      if (!reg.test(value) && value != "") {
-        callback(new Error('鏁板瓧鍙�2浣嶅皬鏁�'));
-      } else {
-        callback();
-      }
-    };
-    return {
-      // 閬僵灞�
-      loading: false,
-      // 閫変腑鏁扮粍
-      ids: [],
-      names: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      //table
-      // 琛ㄥ崟鍙傛暟
-      form: {
-        supplier2: "",
-        type: "",
-        desc: "",
-        input: "",
-        min: "",
-        max: ""
-      },
-      //閰嶇疆琛ㄤ娇鐢ㄦā鍨�
-      settingModel: {
-        title: "",
-        open: false,
-        settingOptions: [
-          // {
-          //   interval:",
-          //   limit:"",
-          //   limit_value:"",
-          // },
-        ],
-        // 鏃舵鏁扮粍
-        timeSlotOptions: [],
-        limitTypeOptions: [],
-        //鎶ヨ绾у埆
-        alarmLevelOptions: [],
-        //鍝嶅簲
-        resposeList: [],
-        stateById: "",
-        rules: {
-          numRule: [
-            {type: "number", validator: checkNum, trigger: "change"},
-          ],
-        },
-      },
-      model: {
-        // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-        energyindexList: [],
-        rules: {
-          numRule: [
-            {type: "number", validator: checkNum, trigger: "change"},
-            // {pattern: /^\d+(\.\d{0,2})?$/, message: '鏁板瓧鍙�2浣嶅皬鏁�', trigger: "change"}
-          ],
-        },
-      },
-      //涓昏〃閫変腑鐨勫惎鍋滅姸鎬佹暟缁�
-      startStopOptions: [],
-
-      editModeEnabled: true,
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      indexIdOptions: [],
-      // 鎸囨爣鍚嶇О瀛楀吀
-      nameOptions: [],
-      // 鎸囨爣缂栫爜瀛楀吀
-      codeOptions: [],
-      // 绯荤粺鎸囨爣鍒嗙被锛�1-鑳芥簮绫伙紝2-浜у搧绫伙紝3-鑳芥晥绫伙紝4-缁忚惀绫伙紝5-鍏朵粬瀛楀吀
-      indexCategoryOptions: [],
-      // 澶囨敞瀛楀吀
-      remarkOptions: [],
-      // 鍗曚綅瀛楀吀
-      unitIdOptions: [],
-      //鎶ヨ绾у埆
-      alarmLevel: "",
-      // 榛樿鍊�
-      dictDefaultVal: undefined,
-      // 鏌ヨ鍙傛暟
-      hbCount: 0,
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        code: undefined,
-        indexCategory: undefined,
-        nodeId: undefined,
-        //鎸囨爣index
-        indexType: "STATISTIC"
-      },
-      currentNode: undefined,
-      indexCategoryDefaultVal: undefined,
-      unitDefaultVal: undefined
-    };
-  },
-  created() {
-    // this.getList();
-    this.getDicts("warn_time_slot").then(response => {
-      this.settingModel.timeSlotOptions = response.data;
-    });
-    listLimitType(this.queryParams).then(response => {
-      this.hbCount = response.rows.length;
-      this.settingModel.limitTypeOptions = response.rows;
-    });
-    this.getDicts("alarm_type").then(response => {
-      this.settingModel.alarmTypeOptions = response.data;
-    });
-    this.getDicts("alarm_level").then(response => {
-      this.settingModel.alarmLevelOptions = response.data;
-      this.dictDefaultVal = this.settingModel.alarmLevelOptions.find(f => f.isDefault === 'Y');
-    });
-  },
-  methods: {
-    updateStatus(row) {
-      console.log(row);
-      const that = this
-      updateEnableStatus({
-        nodeId: this.currentNode.id,
-        indexId: row.indexId,
-        enableStatus: row.enableLimitValue
-      }).then(response => {
-        console.log("response--------", response);
-        if (response.code == 200) {
-          if (response.data > 0) {
-            that.msgSuccess("鐘舵�佹洿鏂版垚鍔�");
-          } else {
-            that.msgError("鐘舵�佹洿鏂板け璐�,璇峰厛璁剧疆寮傚父鏁版嵁澶勭悊淇℃伅");
-          }
-        } else {
-          that.msgError("鐘舵�佹洿鏂板け璐�," + response.msg);
-        }
-        this.getList()
-      });
-    },
-    /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-    setModelNode(modelNode) {
-      this.myModelNode = modelNode;
-      this.currentNode = modelNode;
-      this.getList();
-    },
-    /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-    getList() {
-      if (this.myModelNode) {
-        this.loading = true;
-        this.queryParams.nodeId = this.myModelNode.id;
-        //鎺ュ彛
-        getSettingIndex(this.queryParams).then(response => {
-          this.model.energyindexList = response.data;
-          this.total = response.total;
-          this.loading = false;
-        });
-      } else {
-        this.energyindexList = [];
-      }
-    },
-    // 鍗曚綅瀛楀吀缈昏瘧
-    unitIdFormat(row, column) {
-      return this.selectDictLabel(this.unitIdOptions, row.unitId);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        indexId: undefined,
-        name: undefined,
-        code: undefined,
-        indexCategory: undefined,
-        remark: undefined,
-        unitId: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList(this.currentNode);
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.indexId);
-      this.names = selection.map(item => item.name);
-      this.single = selection.length !== 1;
-      this.multiple = !selection.length
-      this.startStopOptions = selection.map(item => item.indexCategory);
-      this.codeOptions = selection.map(item => item.code);
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      if (this.indexCategoryDefaultVal) {
-        this.form.indexCategory = this.indexCategoryDefaultVal.dictValue;
-      }
-      if (this.unitDefaultVal) {
-        this.form.unitId = this.unitDefaultVal.dictValue;
-      }
-      this.open = true;
-      this.title = "娣诲姞鎸囨爣淇℃伅";
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.indexId !== undefined) {
-            updateEnergyindex(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList(this.currentNode);
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addEnergyindex(this.currentNode.id, this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList(this.currentNode);
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const indexIds = row.indexId || this.ids;
-      const indexNames = row.name || this.names;
-      this.$confirm('鏄惁纭鍒犻櫎鎸囨爣鍚嶄负"' + indexNames + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delEnergyindex(indexIds);
-      }).then(() => {
-        this.getList(this.currentNode);
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夋寚鏍囦俊鎭暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportEnergyindex(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    },
-    //淇濆瓨
-    save(row) {
-      this.$refs["form"].validate((valid, model) => {
-        const indexId = row.indexId || this.ids;
-      })
-    },
-    yjSetSubmitForm() {
-      this.settingModel.open = false;
-      this.settingModel.settingOptions = [];
-    },
-    yjSetCancel() {
-      this.settingModel.open = false;
-      this.settingModel.settingOptions = [];
-    },
-    arraySpanMethod({row, column, rowIndex, columnIndex}) {
-      if (columnIndex === 0) {
-        if (rowIndex % this.hbCount === 0) {
-          return {
-            rowspan: this.hbCount,
-            colspan: 1
-          };
-        } else {
-          return {
-            rowspan: 0,
-            colspan: 0
-          };
-        }
-      }
-    },
-    //缂栬緫
-    setting(e) {
-      listSet({indexId: e.indexId, nodeId: this.currentNode.id}).then(response => {
-        this.settingModel.settingOptions = response.rows;
-        this.settingModel.open = true;
-        this.settingModel.title = "鎸囨爣缂栧彿锛�" + e.indexCode;
-      });
-    },
-    //琛ㄥ崟鎻愪氦
-    settingSubmitForm() {
-      console.log(JSON.stringify(this.settingModel.settingOptions));
-      this.$refs["settingForm"].validate(valid => {
-        if (valid) {
-          updateDialogForm(this.settingModel.settingOptions || "").then(response => {
-            if (response.code === 200) {
-              this.msgSuccess("淇敼鎴愬姛");
-              this.open = false;
-              // this.getList();
-              this.settingModel.settingOptions = [];
-              this.settingModel.open = false;
-            } else {
-              this.msgError(response.msg);
-            }
-            this.getList();
-          });
-          this.settingModel.open = false;
-        }
-      });
-    },
-    closeYjDialog() {
-      this.settingModel.settingOptions = [];
-      return false;
-    },
-    // 瀛楀吀缈昏瘧
-    typeFormat(row, column) {
-      return this.selectDictLabel(this.settingModel.alarmTypeOptions, row.alarmType);
-    },
-  }
-};
-</script>
-<style>
-.item-style .el-form-item__content {
-  margin-left: 0px !important;
-}
-</style>
diff --git a/energy_management_ui/src/views/stage/alarm/LinChart.vue b/energy_management_ui/src/views/stage/alarm/LinChart.vue
deleted file mode 100644
index 06ebe8f..0000000
--- a/energy_management_ui/src/views/stage/alarm/LinChart.vue
+++ /dev/null
@@ -1,127 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-/*import resize from './mixins/resize'*/
-
-export default {
-  /* mixins: [resize],*/
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData } = {}) {
-      this.chart.setOption({
-        title: {
-          text: "鍏宠仈鐐逛綅鑳借��(鍗曚綅: Kwh)"
-        },
-        tooltip: {
-          trigger: "axis"
-        },
-        legend: {
-          data: ["FT01", "FT02", "FT03", "FT04"],
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        grid: {
-          left: "3%",
-          right: "4%",
-          bottom: "3%",
-          containLabel: true
-        },
-        toolbox: {
-          feature: {
-            saveAsImage: {}
-          }
-        },
-        xAxis: {
-          type: "category",
-          boundaryGap: false,
-          data: ["2鏈�1鏃�", "2鏈�2鏃�", "2鏈�3鏃�", "2鏈�4鏃�"]
-        },
-        yAxis: {
-          type: "value"
-        },
-        series: [
-          {
-            name: "FT01",
-            type: "line",
-            stack: "鎬婚噺",
-            data: [210, 172, 181, 224]
-          },
-          {
-            name: "FT02",
-            type: "line",
-            stack: "鎬婚噺",
-            data: [210, 182, 191, 234]
-          },
-          {
-            name: "FT03",
-            type: "line",
-            stack: "鎬婚噺",
-            data: [210, 182, 191, 234]
-          },
-          {
-            name: "FT04",
-            type: "line",
-            stack: "鎬婚噺",
-            data: [210, 182, 191, 234, 290]
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/stage/alarm/alarmIndex.vue b/energy_management_ui/src/views/stage/alarm/alarmIndex.vue
deleted file mode 100644
index 2cb4d1b..0000000
--- a/energy_management_ui/src/views/stage/alarm/alarmIndex.vue
+++ /dev/null
@@ -1,652 +0,0 @@
-<template>
-  <div class="app-container" style="padding:0">
-    <el-card class="box-card">
-      <div slot="header" class="clearfix">
-        <span>{{ currentNode ? currentNode.label : "" }}--鑺傜偣璁剧疆</span>
-      </div>
-      <el-form
-        :model="queryParams"
-        ref="queryForm"
-        :inline="true"
-        label-width="68px"
-        class="query-form"
-      >
-        <el-form-item label="鎸囨爣缂栫爜" prop="name">
-          <el-select
-            v-model="value"
-            multiple
-            filterable
-            allow-create
-            default-first-option
-            placeholder="璇疯緭鍏ヤ綅鍙�"
-          >
-            <el-option
-              v-for="item in options"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            >
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鎸囨爣鍚嶇О" prop="code">
-          <el-select
-            v-model="values"
-            multiple
-            filterable
-            allow-create
-            default-first-option
-            placeholder="璇疯緭鍏ユ寚鏍囧悕绉�"
-          >
-            <el-option
-              v-for="item in option"
-              :key="item.values"
-              :label="item.label"
-              :value="item.values"
-            >
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鏃堕棿">
-          <el-date-picker
-            v-model="dateRange"
-            size="small"
-            style="width: 240px"
-            value-format="yyyy-MM-dd"
-            type="daterange"
-            range-separator="-"
-            start-placeholder="寮�濮嬫棩鏈�"
-            end-placeholder="缁撴潫鏃ユ湡"
-          ></el-date-picker>
-        </el-form-item>
-        <el-form-item label="鏄惁澶勭悊" prop="">
-          <el-select
-            v-model="value"
-            placeholder="璇烽�夋嫨鏄惁澶勭悊"
-            clearable
-            size="small"
-          >
-            <el-option
-              v-for="dict in value"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-button
-            type="primary"
-            icon="el-icon-search"
-            size="mini"
-            @click="handleQuery"
-            >鎼滅储</el-button
-          >
-        </el-form-item>
-      </el-form>
-      <el-row :gutter="10" class="mb8">
-        <el-col :span="1.5">
-          <el-button
-            type="warning"
-            icon="el-icon-download"
-            size="mini"
-            @click=""
-            v-hasPermi="['']"
-            >瀵煎嚭
-          </el-button>
-        </el-col>
-      </el-row>
-      <el-table
-        :data="tableData"
-        v-loading="loading"
-        border
-        @selection-change=""
-        @row-click="openDlog"
-      >
-        <el-table-column label="鎸囨爣缂栫爜" align="center" prop="name" />
-        <el-table-column label="鎸囨爣鍚嶇О" align="center" prop="number" />
-        <el-table-column label="瀹為檯鍊�" align="center" prop="value" />
-        <el-table-column label="瓒呴檺鐧惧垎姣�" align="center" prop="values" />
-        <el-table-column label="鏄惁澶勭悊" align="center" prop="code" />
-        <pagination
-          v-show="total > 0"
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-        />
-      </el-table>
-      <!--寮规-->
-      <el-dialog
-        :title="title"
-        :visible.sync="open"
-        width="1000px"
-        :close-on-click-modal="false"
-      >
-        <el-table
-          :data="tableData"
-          :show-header="hiddenTableHeader"
-          border="1px"
-        >
-          <el-table-column label="鎶ヨ鏃堕棿" prop="oa" />
-          <el-table-column label="鎶ヨ鍊�" prop="ob" />
-          <el-table-column label="瀹為檯鍊�" prop="oc" />
-        </el-table>
-        <el-row style="padding:16px 16px 0;margin-bottom:32px;">
-          <line-chart :chart-data="lineChartData" />
-        </el-row>
-        <el-table
-          :data="tableData"
-          :show-header="hiddenTableHeader"
-          border="1px"
-        >
-          <el-table-column label="鎶ヨ鏃堕棿" prop="one" />
-          <el-table-column label="鎶ヨ鍊�" prop="two" />
-          <el-table-column label="瀹為檯鍊�" prop="three" />
-          <el-table-column label="瀹為檯鍊�" prop="four" />
-          <el-table-column label="瀹為檯鍊�" prop="five" />
-        </el-table>
-        <div slot="footer" class="dialog-footer">
-          <el-button @click="cancel">鍙� 娑�</el-button>
-        </div>
-      </el-dialog>
-    </el-card>
-  </div>
-</template>
-
-<script>
-const lineChartData = {
-  newVisitis: {}
-};
-import {
-  addEnergyindex,
-  delEnergyindex,
-  exportEnergyindex,
-  getEnergyindex,
-  listEnergyindex,
-  updateEnergyindex
-} from "@/api/basicsetting/energyindex";
-import LineChart from "./LinChart";
-import { List } from "@/api/basicsetting/state";
-
-export default {
-  name: "energyIndex",
-  components: {
-    LineChart
-  },
-  data() {
-    return {
-      options: [
-        {
-          value: "FT01",
-          label: "FT01"
-        },
-        {
-          value: "FT02",
-          label: "FT02"
-        },
-        {
-          value: "FT03",
-          label: "FT03"
-        },
-        {
-          value: "FT04",
-          label: "FT04"
-        },
-        {
-          value: "BUG",
-          label: "BUG"
-        }
-      ],
-      value: [],
-      option: [
-        {
-          values: "98013",
-          label: "98013"
-        },
-        {
-          values: "98014",
-          label: "98014"
-        },
-        {
-          values: "98015",
-          label: "98015"
-        },
-        {
-          values: "98016",
-          label: "98016"
-        },
-        {
-          values: "98017",
-          label: "98017"
-        }
-      ],
-      facilityType: "1",
-      values: [],
-      currentNode: "",
-      hiddenTableHeader: false,
-      lineChartData: lineChartData.newVisitis,
-      // 閬僵灞�
-      loading: false,
-      // 閫変腑鏁扮粍
-      ids: [],
-      dateRange: [],
-      names: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鎸囨爣淇℃伅琛ㄦ牸鏁版嵁
-      List: [],
-      energyindexList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 涓婚敭瀛楀吀
-      indexIdOptions: [],
-      // 鎸囨爣鍚嶇О瀛楀吀
-      nameOptions: [],
-      // 鎸囨爣缂栫爜瀛楀吀
-      codeOptions: [],
-      // 绯荤粺鎸囨爣鍒嗙被锛�1-鑳芥簮绫伙紝2-浜у搧绫伙紝3-鑳芥晥绫伙紝4-缁忚惀绫伙紝5-鍏朵粬瀛楀吀
-      indexCategoryOptions: [],
-      // 澶囨敞瀛楀吀
-      remarkOptions: [],
-      // 鍗曚綅瀛楀吀
-      unitIdOptions: [],
-      // 鏌ヨ鍙傛暟
-      lineChartData: {
-        newVisitis: null
-      },
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        code: undefined,
-        indexCategory: undefined,
-        nodeId: undefined
-      },
-
-      tableData: [],
-      datas: [
-        {
-          name: "FT01",
-          number: "98013",
-          value: "500",
-          values: "20%",
-          code: "鏄�",
-          what: "5",
-          one: "浣嶅彿",
-          two: "2鏈�1鏃�",
-          three: "2鏈�2鏃�",
-          four: "2鏈�3鏃�",
-          five: "2鏈�4鏃�",
-          oa: "浣嶅彿",
-          ob: "鎸囨爣鍚嶇О",
-          oc: "瀹為檯鍊�"
-        },
-        {
-          name: "FT02",
-          number: "98014",
-          value: "500",
-          values: "20%",
-          code: "鏄�",
-          what: "5",
-          one: "F01",
-          two: "210",
-          three: "210",
-          four: "210",
-          five: "210",
-          oa: "F01",
-          ob: "1#绌哄帇鏈烘鐩告湁鍔熸�荤數鑳�",
-          oc: "3"
-        },
-        {
-          name: "FT03",
-          number: "98015",
-          value: "500",
-          values: "20%",
-          code: "鏄�",
-          what: "5",
-          one: "F02",
-          two: "210",
-          three: "172",
-          four: "181",
-          five: "224",
-          oa: "F02",
-          ob: "2#绌哄帇鏈烘鐩告湁鍔熸�荤數鑳�",
-          oc: "6"
-        },
-        {
-          name: "FT04",
-          number: "98016",
-          value: "500",
-          values: "35%",
-          code: "鍚�",
-          what: "5",
-          one: "F03",
-          two: "210",
-          three: "182",
-          four: "191",
-          five: "234",
-          oa: "F03",
-          ob: "3#绌哄帇鏈烘鐩告湁鍔熸�荤數鑳�",
-          oc: "5"
-        },
-        {
-          name: "BUG",
-          number: "98017",
-          value: "500",
-          values: "22%",
-          code: "鍚�",
-          what: "5",
-          one: "F04",
-          two: "210",
-          three: "182",
-          four: "191",
-          five: "234",
-          oa: "F04",
-          ob: "4#绌哄帇鏈烘鐩告湁鍔熸�荤數鑳�",
-          oc: "6"
-        }
-      ],
-
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        name: [
-          { required: true, message: "鎸囨爣鍚嶇О涓嶈兘涓虹┖", trigger: "blur" },
-          { min: 2, max: 20, message: "闀垮害鍦� 2 鍒� 20 涓瓧绗�", trigger: "blur" }
-        ],
-        code: [
-          { required: true, message: "鎸囨爣缂栫爜涓嶈兘涓虹┖", trigger: "blur" },
-          {
-            min: 2,
-            max: 20,
-            message: "闀垮害鍦� 2 鍒� 20 涓瓧绗�",
-            trigger: "blur"
-          },
-          {
-            pattern: /^[a-zA-Z][A-Za-z0-9_-]+$/,
-            message: "蹇呴』涓烘暟瀛椼�佸瓧姣嶃��- 鎴朹 锛屼笖棣栧瓧绗﹀彧鑳戒负瀛楁瘝"
-          }
-        ],
-        indexCategory: [
-          { required: true, message: "璇烽�夋嫨鎸囨爣鍒嗙被", trigger: "blur" }
-        ]
-      },
-      currentNode: undefined,
-      indexCategoryDefaultVal: undefined,
-      unitDefaultVal: undefined
-    };
-  },
-
-  created() {
-    /*  this.getList();*/
-    this.getDicts("sys_index_category").then(response => {
-      this.indexCategoryOptions = response.data;
-      this.indexCategoryDefaultVal = this.indexCategoryOptions.find(
-        f => f.isDefault === "Y"
-      );
-    });
-    this.getDicts("sys_unit").then(response => {
-      this.unitIdOptions = response.data;
-      this.unitDefaultVal = this.unitIdOptions.find(f => f.isDefault === "Y");
-    });
-    setInterval(this.getList(), 30000);
-
-    this.bpy();
-  },
-  methods: {
-    /** 鏌ヨ鎸囨爣淇℃伅鍒楄〃 */
-    getList(modelNode) {
-      this.currentNode = modelNode;
-      if (modelNode) {
-        this.loading = true;
-        this.queryParams.nodeId = modelNode.id;
-        listEnergyindex(this.queryParams).then(response => {
-          this.energyindexList = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        });
-      } else {
-        this.energyindexList = [];
-      }
-    },
-    bpy() {
-      this.tableData = this.datas;
-    },
-    /** 鏌ョ湅鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const indexId = row.indexId || this.ids;
-      /*  getEnergyindex(indexId).then(response => {
-            this.form = response.data;
-    this.title = "寮傚父淇℃伅"+  response.data.name ;
-          });*/
-
-      this.open = true;
-      this.title = "FT01鍏宠仈鐐逛綅";
-    },
-    // 绯荤粺鎸囨爣鍒嗙被锛�1-鑳芥簮绫伙紝2-浜у搧绫伙紝3-鑳芥晥绫伙紝4-缁忚惀绫伙紝5-鍏朵粬瀛楀吀缈昏瘧
-    indexCategoryFormat(row, column) {
-      return this.selectDictLabel(this.indexCategoryOptions, row.indexCategory);
-    },
-
-    // 鍗曚綅瀛楀吀缈昏瘧
-    unitIdFormat(row, column) {
-      return this.selectDictLabel(this.unitIdOptions, row.unitId);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        indexId: undefined,
-        name: undefined,
-        code: undefined,
-        indexCategory: undefined,
-        remark: undefined,
-        unitId: undefined
-      };
-      this.resetForm("form");
-    },
-    modelNodeChange(modelNode) {
-      this.nodeId = modelNode.id;
-      this.getList(this.nodeId);
-      this.settingDeviceList = [];
-      this.settingIndexList = [];
-      this.disabledSetting =
-        modelNode === undefined || modelNode === "" || modelNode === null;
-      if (modelNode) {
-        this.currentNode = modelNode;
-        this.deviceLoading = true;
-        /*       getSettingDevice(modelNode.id).then((response) => {
-            if (response.code === 200) {
-              this.settingDeviceList = response.data;
-            } else {
-              this.$message.error(response.msg);
-            }
-            this.deviceLoading = false;
-          });*/
-
-        /*  this.energyLoading = true;
-          getSettingEnergy(modelNode.id).then((response) => {
-            if (response.code === 200) {
-              this.settingEnergyList = response.data;
-            } else {
-              this.$message.error(response.msg);
-            }
-            this.energyLoading = false;
-          });*/
-
-        this.productLoading = true;
-        /*  getSettingProduct(modelNode.id).then((response) => {
-            if (response.code === 200) {
-              this.settingProductList = response.data;
-            } else {
-              this.$message.error(response.msg);
-            }
-            this.productLoading = false;
-          });*/
-
-        /*     this.indexLoading = true;
-          getSettingIndex(modelNode.id).then((response) => {
-            if (response.code === 200) {
-              this.settingIndexList = response.data;
-            } else {
-              this.$message.error(response.msg);
-            }
-            this.indexLoading = false;
-          });*/
-
-        // this.$refs.energyIndex.getList(modelNode);
-      }
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList(this.currentNode);
-    },
-    getList(e) {
-      List("STATISTIC", e).then(response => {
-        if (response.code === 200) {
-          this.settingIndexList = response.data;
-        } else {
-          this.$message.error(response.msg);
-        }
-        this.indexLoading = false;
-      });
-    },
-    deviceSetting() {
-      this.deviceDialog = true;
-    },
-    energySetting() {
-      this.energyDialog = true;
-    },
-    productSetting() {
-      this.productDialog = true;
-    },
-    collectIndexSetting() {
-      this.collectIndexDialog = true;
-    },
-    showDeviceDialog() {
-      this.$nextTick(() => {
-        this.$refs.deviceSetting.init(this.settingDeviceList);
-      });
-    },
-    showEnergyDialog() {
-      this.$nextTick(() => {
-        this.$refs.energySetting.init(this.settingEnergyList);
-      });
-    },
-    showProductDialog() {
-      this.$nextTick(() => {
-        this.$refs.productSetting.init(this.settingProductList);
-      });
-    },
-    showCollectIndexDialog() {
-      this.$nextTick(() => {
-        this.$refs.collectIndexSetting.init(
-          this.currentNode,
-          this.settingIndexList
-        );
-      });
-    },
-    deviceConfirmSelect(selectedDevice) {
-      this.settingDeviceList = selectedDevice;
-      let deviceIds = selectedDevice.map(item => item.id);
-      setDevice(this.currentNode.id, deviceIds).then(response => {
-        if (response.code !== 200) {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    energyConfirmSelect(selectedEnergy) {
-      this.settingEnergyList = selectedEnergy;
-      let energyIds = selectedEnergy.map(item => item.enerid);
-      setEnergy(this.currentNode.id, energyIds).then(response => {
-        if (response.code !== 200) {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    productConfirmSelect(selectedProduct) {
-      this.settingProductList = selectedProduct;
-      let productIds = selectedProduct.map(item => item.productid);
-      setProduct(this.currentNode.id, productIds).then(response => {
-        if (response.code !== 200) {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    collectIndexConfirmSelect(selectedIndex) {
-      this.settingIndexList = selectedIndex;
-      let indexIds = selectedIndex.map(item => item.indexId);
-      setNodeToIndex(this.currentNode.id, indexIds).then(response => {
-        if (response.code !== 200) {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    handleSelectionChange() {},
-    delDevice(row) {
-      delDevice(this.currentNode.id, row.id).then(response => {
-        if (response.code === 200) {
-          this.settingDeviceList = this.settingDeviceList.filter(
-            f => f.id !== row.id
-          );
-        } else {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    delEnergy(row) {
-      delEnergy(this.currentNode.id, row.enerid).then(response => {
-        if (response.code === 200) {
-          this.settingEnergyList = this.settingEnergyList.filter(
-            f => f.enerid !== row.enerid
-          );
-        } else {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    delProduct(row) {
-      delProduct(this.currentNode.id, row.productid).then(response => {
-        if (response.code === 200) {
-          this.settingProductList = this.settingProductList.filter(
-            f => f.productid !== row.productid
-          );
-        } else {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    bpq() {
-      this.tableData = this.datab;
-    },
-    delIndex(row) {
-      delIndex(this.currentNode.id, row.indexId).then(response => {
-        if (response.code === 200) {
-          this.settingIndexList = this.settingIndexList.filter(
-            f => f.indexId !== row.indexId
-          );
-        } else {
-          this.$message.error(response.msg);
-        }
-      });
-    },
-    openDlog() {
-      this.open = true;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/stage/alarm/index.vue b/energy_management_ui/src/views/stage/alarm/index.vue
deleted file mode 100644
index d9ad6a1..0000000
--- a/energy_management_ui/src/views/stage/alarm/index.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            <el-select v-model="modelData" placeholder="璇烽�夋嫨妯″瀷"
-                       style="width:220px"
-                       size="small"
-                       @change="changeModel">
-              <el-option
-                v-for="model in modelInfoOptions"
-                :key="model.modelCode"
-                :label="model.modelName"
-                :value="model.modelCode"
-              />
-            </el-select>
-           <!-- <el-button icon="el-icon-setting" circle title="绠$悊妯″瀷" style="float:right;padding:8px"
-                       @click="manageModel"></el-button>-->
-          </div>
-          <ModelNode ref="modelNode" @changeNode="changeNode" :showOpt="false"></ModelNode>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <el-main style="padding:0">
-          <AlarmIndex ref="AlarmIndex"></AlarmIndex>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import AlarmIndex from "./alarmIndex";
-  import ModelNode from "../../basicsetting/modelNode/modelNode";
-  import {listModel} from "@/api/basicsetting/model";
-
-
-
-  export default {
-    components: {AlarmIndex, ModelNode},
-    created() {
-      listModel({isShow: 1}).then(response => {
-        this.modelInfoOptions = response.data;
-        if (this.modelInfoOptions.length > 0) {
-          this.modelData = this.modelInfoOptions[0].modelCode;
-          this.$refs.modelNode.getList(this.modelData);
-        }
-      });
-    },
-
-    data() {
-      return {
-        modelData: '',
-        modelInfoOptions: []
-      }
-    },
-    methods: {
-      changeNode: function (node) {
-        this.$refs.AlarmIndex.modelNodeChange(node);
-      },
-      manageModel: function () {
-        this.$router.push('/model');
-      },
-      changeModel: function (item) {
-        this.$refs.modelNode.getList(item);
-      },
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/statisticalData/gxdhcount/gxdhcountindex.vue b/energy_management_ui/src/views/statisticalData/gxdhcount/gxdhcountindex.vue
deleted file mode 100644
index af74eb9..0000000
--- a/energy_management_ui/src/views/statisticalData/gxdhcount/gxdhcountindex.vue
+++ /dev/null
@@ -1,185 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-        <el-form-item label="浜у搧绫诲瀷" prop="repProductType">
-          <el-select v-model="queryParams.repProductType" placeholder="璇烽�夋嫨浜у搧绫诲瀷" clearable size="small">
-            <el-option
-              v-for="dict in repProductTypeOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            />
-          </el-select>
-        </el-form-item>
-
-        <el-form-item label="骞村害" prop="selectYear">
-          <el-select v-model="queryParams.selectYear" placeholder="璇烽�夋嫨骞村害" clearable size="small">
-            <el-option
-              v-for="dict in selectYearOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            />
-          </el-select>
-        </el-form-item>
-
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-table v-loading="loading" :data="gxdhcountList" >
-      <el-table-column label="鑳芥簮鍝佺" align="center" prop="varietyType" min-width="100px"/>
-      <el-table-column label="1鏈�" align="center">
-        <el-table-column label="鐢�" align="center" prop="a1"/>
-        <el-table-column label="鐓ゆ苯" align="center" prop="a2"/>
-        <el-table-column label="钂告苯" align="center" prop="a3"/>
-      </el-table-column>
-      <el-table-column label="2鏈�" align="center">
-        <el-table-column label="鐢�" align="center" prop="a4"/>
-        <el-table-column label="鐓ゆ苯" align="center" prop="a5"/>
-        <el-table-column label="钂告苯" align="center" prop="a6"/>
-      </el-table-column>
-      <el-table-column label="3鏈�" align="center">
-        <el-table-column label="鐢�" align="center" prop="a7"/>
-        <el-table-column label="鐓ゆ苯" align="center" prop="a8"/>
-        <el-table-column label="钂告苯" align="center" prop="a9"/>
-      </el-table-column>
-      <el-table-column label="4鏈�" align="center">
-        <el-table-column label="鐢�" align="center" prop="a10"/>
-        <el-table-column label="鐓ゆ苯" align="center" prop="a11"/>
-        <el-table-column label="钂告苯" align="center" prop="a12"/>
-      </el-table-column>
-      <el-table-column label="5鏈�" align="center">
-        <el-table-column label="鐢�" align="center" prop="a13"/>
-        <el-table-column label="鐓ゆ苯" align="center" prop="a14"/>
-        <el-table-column label="钂告苯" align="center" prop="a15"/>
-      </el-table-column>
-      <el-table-column label="6鏈�" align="center">
-        <el-table-column label="鐢�" align="center" prop="a16"/>
-        <el-table-column label="鐓ゆ苯" align="center" prop="a17"/>
-        <el-table-column label="钂告苯" align="center" prop="a18"/>
-      </el-table-column>
-      <el-table-column label="7鏈�" align="center">
-        <el-table-column label="鐢�" align="center" prop="a19"/>
-        <el-table-column label="鐓ゆ苯" align="center" prop="a20"/>
-        <el-table-column label="钂告苯" align="center" prop="a21"/>
-      </el-table-column>
-      <el-table-column label="8鏈�" align="center">
-        <el-table-column label="鐢�" align="center" prop="a22"/>
-        <el-table-column label="鐓ゆ苯" align="center" prop="a23"/>
-        <el-table-column label="钂告苯" align="center" prop="a24"/>
-      </el-table-column>
-      <el-table-column label="9鏈�" align="center">
-        <el-table-column label="鐢�" align="center" prop="a25"/>
-        <el-table-column label="鐓ゆ苯" align="center" prop="a26"/>
-        <el-table-column label="钂告苯" align="center" prop="a27"/>
-      </el-table-column>
-      <el-table-column label="10鏈�" align="center">
-        <el-table-column label="鐢�" align="center" prop="a28"/>
-        <el-table-column label="鐓ゆ苯" align="center" prop="a29"/>
-        <el-table-column label="钂告苯" align="center" prop="a30"/>
-      </el-table-column>
-      <el-table-column label="11鏈�" align="center">
-        <el-table-column label="鐢�" align="center" prop="a31"/>
-        <el-table-column label="鐓ゆ苯" align="center" prop="a32"/>
-        <el-table-column label="钂告苯" align="center" prop="a33"/>
-      </el-table-column>
-      <el-table-column label="12鏈�" align="center">
-        <el-table-column label="鐢�" align="center" prop="a34"/>
-        <el-table-column label="鐓ゆ苯" align="center" prop="a35"/>
-        <el-table-column label="钂告苯" align="center" prop="a36"/>
-      </el-table-column>
-    </el-table>
-
-
-  </div>
-</template>
-
-<script>
-import { listGxdhcountIndex } from "@/api/statisticalData/gxdhcount";
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 宸ュ簭鍗曡�楃粺璁″姛鑳借〃鏍兼暟鎹�
-      gxdhcountList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 閰嶇疆涓婚敭瀛楀吀
-      idOptions: [],
-      // 浜у搧绫诲瀷瀛楀吀
-      repProductTypeOptions: [],
-      // 涓嬫媺骞村害閫夋嫨
-      selectYearOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        repProductType: "JT",
-        selectYear: "2020",
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-            }
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("rep_product_type").then(response => {
-      this.repProductTypeOptions = response.data;
-    });
-    this.getDicts("selectyear").then(response => {
-      this.selectYearOptions = response.data;
-    });
-  },
-  methods: {
-    /** 鏌ヨ宸ュ簭鍗曡�楃粺璁″姛鑳藉垪琛� */
-    getList() {
-      this.loading = true;
-      listGxdhcountIndex(this.queryParams).then(response => {
-        this.gxdhcountList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        repProductType: undefined,
-        electricIndex: undefined,
-        gasIndex: undefined,
-        steamIndex: undefined,
-        varietyType: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/statisticalData/gxdhcount/index.vue b/energy_management_ui/src/views/statisticalData/gxdhcount/index.vue
deleted file mode 100644
index c2d0b9f..0000000
--- a/energy_management_ui/src/views/statisticalData/gxdhcount/index.vue
+++ /dev/null
@@ -1,329 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-        <el-form-item label="浜у搧绫诲瀷" prop="repProductType">
-        <el-select v-model="queryParams.repProductType" placeholder="璇烽�夋嫨浜у搧绫诲瀷" clearable size="small">
-          <el-option
-            v-for="dict in repProductTypeOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-        <el-form-item label="鑳芥簮鍝佺" prop="varietyType">
-        <el-select v-model="queryParams.varietyType" placeholder="璇烽�夋嫨鑳芥簮鍝佺" clearable size="small">
-          <el-option
-            v-for="dict in varietyTypeOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['statisticalData:gxdhcount:add']"
-        >鏂板</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['statisticalData:gxdhcount:edit']"
-        >淇敼</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['statisticalData:gxdhcount:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['statisticalData:gxdhcount:export']"
-        >瀵煎嚭</el-button>
-      </el-col>
-    </el-row>
-
-    <el-table v-loading="loading" :data="gxdhcountList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="浜у搧绫诲瀷" align="center" prop="repProductType" :formatter="repProductTypeFormat" />
-      <el-table-column label="鐢垫寚鏍�" align="center" prop="electricIndex"  />
-      <el-table-column label="鐓ゆ皵鎸囨爣" align="center" prop="gasIndex"  />
-      <el-table-column label="钂告苯鎸囨爣" align="center" prop="steamIndex"  />
-      <el-table-column label="鑳芥簮鍝佺" align="center" prop="varietyType" :formatter="varietyTypeFormat" />
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['statisticalData:gxdhcount:edit']"
-          >淇敼</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['statisticalData:gxdhcount:remove']"
-          >鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 娣诲姞鎴栦慨鏀瑰伐搴忓崟鑰楃粺璁″姛鑳藉璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="浜у搧绫诲瀷">
-          <el-select v-model="form.repProductType" placeholder="璇烽�夋嫨浜у搧绫诲瀷">
-            <el-option
-              v-for="dict in repProductTypeOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鐢垫寚鏍�" prop="electricIndex">
-          <el-input v-model="form.electricIndex" placeholder="璇疯緭鍏ョ數鎸囨爣" />
-        </el-form-item>
-        <el-form-item label="鐓ゆ皵鎸囨爣" prop="gasIndex">
-          <el-input v-model="form.gasIndex" placeholder="璇疯緭鍏ョ叅姘旀寚鏍�" />
-        </el-form-item>
-        <el-form-item label="钂告苯鎸囨爣" prop="steamIndex">
-          <el-input v-model="form.steamIndex" placeholder="璇疯緭鍏ヨ捀姹芥寚鏍�" />
-        </el-form-item>
-        <el-form-item label="鑳芥簮鍝佺">
-          <el-select v-model="form.varietyType" placeholder="璇烽�夋嫨鑳芥簮鍝佺">
-            <el-option
-              v-for="dict in varietyTypeOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listGxdhcount, getGxdhcount, delGxdhcount, addGxdhcount, updateGxdhcount, exportGxdhcount } from "@/api/statisticalData/gxdhcount";
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 宸ュ簭鍗曡�楃粺璁″姛鑳借〃鏍兼暟鎹�
-      gxdhcountList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 閰嶇疆涓婚敭瀛楀吀
-      idOptions: [],
-      // 浜у搧绫诲瀷瀛楀吀
-      repProductTypeOptions: [],
-      // 鐢垫寚鏍囧瓧鍏�
-      electricIndexOptions: [],
-      // 鐓ゆ皵鎸囨爣瀛楀吀
-      gasIndexOptions: [],
-      // 钂告苯鎸囨爣瀛楀吀
-      steamIndexOptions: [],
-      // 鑳芥簮鍝佺瀛楀吀
-      varietyTypeOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        repProductType: undefined,
-        varietyType: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-            }
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("rep_product_type").then(response => {
-      this.repProductTypeOptions = response.data;
-    });
-    this.getDicts("variety_type").then(response => {
-      this.varietyTypeOptions = response.data;
-    });
-  },
-  methods: {
-    /** 鏌ヨ宸ュ簭鍗曡�楃粺璁″姛鑳藉垪琛� */
-    getList() {
-      this.loading = true;
-      listGxdhcount(this.queryParams).then(response => {
-        this.gxdhcountList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-
-    // 浜у搧绫诲瀷瀛楀吀缈昏瘧
-    repProductTypeFormat(row, column) {
-      return this.selectDictLabel(this.repProductTypeOptions, row.repProductType);
-    },
-    // 鑳芥簮鍝佺瀛楀吀缈昏瘧
-    varietyTypeFormat(row, column) {
-      return this.selectDictLabel(this.varietyTypeOptions, row.varietyType);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        repProductType: undefined,
-        electricIndex: undefined,
-        gasIndex: undefined,
-        steamIndex: undefined,
-        varietyType: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞宸ュ簭鍗曡�楃粺璁″姛鑳�";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getGxdhcount(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼宸ュ簭鍗曡�楃粺璁″姛鑳�";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updateGxdhcount(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addGxdhcount(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎宸ュ簭鍗曡�楃粺璁″姛鑳界紪鍙蜂负"' + ids + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return delGxdhcount(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夊伐搴忓崟鑰楃粺璁″姛鑳芥暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return exportGxdhcount(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function() {});
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/system/config/index.vue b/energy_management_ui/src/views/system/config/index.vue
deleted file mode 100644
index ac55db6..0000000
--- a/energy_management_ui/src/views/system/config/index.vue
+++ /dev/null
@@ -1,381 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form :model="queryParams" ref="queryForm" label-width="72px" class="special-form">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="鍙傛暟鍚嶇О" prop="configName">
-              <el-input
-                  v-model="queryParams.configName"
-                  placeholder="璇疯緭鍏ュ弬鏁板悕绉�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鍙傛暟閿悕" prop="configKey">
-              <el-input
-                  v-model="queryParams.configKey"
-                  placeholder="璇疯緭鍏ュ弬鏁伴敭鍚�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="绯荤粺鍐呯疆" prop="configType">
-              <el-select v-model="queryParams.configType" placeholder="绯荤粺鍐呯疆" clearable size="small" style="width: 100%">
-                <el-option
-                    v-for="dict in typeOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-<!--          <el-col :span="6">-->
-<!--            <el-form-item label="鍒涘缓鏃堕棿">-->
-<!--              <el-date-picker-->
-<!--                  v-model="dateRange"-->
-<!--                  size="small"-->
-<!--                  style="width: 100%"-->
-<!--                  value-format="yyyy-MM-dd"-->
-<!--                  type="daterange"-->
-<!--                  range-separator="-"-->
-<!--                  start-placeholder="寮�濮嬫棩鏈�"-->
-<!--                  end-placeholder="缁撴潫鏃ユ湡"-->
-<!--              ></el-date-picker>-->
-<!--            </el-form-item>-->
-<!--          </el-col>-->
-          <el-col :span="6">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-              type="primary"
-              icon="el-icon-plus"
-              size="mini"
-              @click="handleAdd"
-              v-hasPermi="['system:config:add']"
-          >鏂板
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="success"
-              icon="el-icon-edit"
-              size="mini"
-              :disabled="single"
-              @click="handleUpdate"
-              v-hasPermi="['system:config:edit']"
-          >淇敼
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              :disabled="multiple"
-              @click="handleDelete"
-              v-hasPermi="['system:config:remove']"
-          >鍒犻櫎
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="warning"
-              icon="el-icon-download"
-              size="mini"
-              @click="handleExport"
-              v-hasPermi="['system:config:export']"
-          >瀵煎嚭
-          </el-button>
-        </el-col>
-      </el-row>
-      <el-table  :height="height" v-loading="loading" :data="configList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center"/>
-        <el-table-column label="鍙傛暟涓婚敭" align="center" prop="configId"/>
-        <el-table-column label="鍙傛暟鍚嶇О" align="center" prop="configName" :show-overflow-tooltip="true"/>
-        <el-table-column label="鍙傛暟閿悕" align="center" prop="configKey" :show-overflow-tooltip="true"/>
-        <el-table-column label="鍙傛暟閿��" align="center" prop="configValue"/>
-        <el-table-column label="绯荤粺鍐呯疆" align="center" prop="configType" :formatter="typeFormat"/>
-        <el-table-column label="澶囨敞" align="center" prop="remark" :show-overflow-tooltip="true"/>
-        <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="180">
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.createTime) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['system:config:edit']"
-            >淇敼
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-delete"
-                @click="handleDelete(scope.row)"
-                v-hasPermi="['system:config:remove']"
-            >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-    </basic-container>
-    <!-- 娣诲姞鎴栦慨鏀瑰弬鏁伴厤缃璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="鍙傛暟鍚嶇О" prop="configName">
-          <el-input v-model="form.configName" placeholder="璇疯緭鍏ュ弬鏁板悕绉�"/>
-        </el-form-item>
-        <el-form-item label="鍙傛暟閿悕" prop="configKey">
-          <el-input v-model="form.configKey" placeholder="璇疯緭鍏ュ弬鏁伴敭鍚�"/>
-        </el-form-item>
-        <el-form-item label="鍙傛暟閿��" prop="configValue">
-          <el-input v-model="form.configValue" placeholder="璇疯緭鍏ュ弬鏁伴敭鍊�"/>
-        </el-form-item>
-        <el-form-item label="绯荤粺鍐呯疆" prop="configType">
-          <el-radio-group v-model="form.configType">
-            <el-radio
-                v-for="dict in typeOptions"
-                :key="dict.dictValue"
-                :label="dict.dictValue"
-            >{{ dict.dictLabel }}
-            </el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="澶囨敞" prop="remark">
-          <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�"/>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {listConfig, getConfig, delConfig, addConfig, updateConfig, exportConfig} from "@/api/system/config";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: "Config",
-  mixins: [mixins],
-  data() {
-    return {
-      height:null,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鍙傛暟琛ㄦ牸鏁版嵁
-      configList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 绫诲瀷鏁版嵁瀛楀吀
-      typeOptions: [],
-      // 鏃ユ湡鑼冨洿
-      dateRange: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        configName: undefined,
-        configKey: undefined,
-        configType: undefined,
-        endTime: undefined,
-        beginTime: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        configName: [
-          {required: true, message: "鍙傛暟鍚嶇О涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        configKey: [
-          {required: true, message: "鍙傛暟閿悕涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        configValue: [
-          {required: true, message: "鍙傛暟閿�间笉鑳戒负绌�", trigger: "blur"}
-        ]
-      }
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("sys_yes_no").then(response => {
-      this.typeOptions = response.data;
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 370;
-    },
-    /** 鏌ヨ鍙傛暟鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listConfig(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
-            this.configList = response.rows;
-            this.total = response.total;
-            this.loading = false;
-          }
-      );
-    },
-    // 鍙傛暟绯荤粺鍐呯疆瀛楀吀缈昏瘧
-    typeFormat(row, column) {
-      return this.selectDictLabel(this.typeOptions, row.configType);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        configId: undefined,
-        configName: undefined,
-        configKey: undefined,
-        configValue: undefined,
-        configType: "Y",
-        remark: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.dateRange = [];
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞鍙傛暟";
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.configId)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const configId = row.configId || this.ids
-      getConfig(configId).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼鍙傛暟";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.configId != undefined) {
-            updateConfig(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addConfig(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const configIds = row.configId || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎鍙傛暟缂栧彿涓�"' + configIds + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delConfig(configIds);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夊弬鏁版暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportConfig(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/system/dept/index.vue b/energy_management_ui/src/views/system/dept/index.vue
deleted file mode 100644
index 30abf70..0000000
--- a/energy_management_ui/src/views/system/dept/index.vue
+++ /dev/null
@@ -1,341 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form class="special-form" label-width="72px">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="閮ㄩ棬鍚嶇О">
-              <el-input
-                  v-model="queryParams.deptName"
-                  placeholder="璇疯緭鍏ラ儴闂ㄥ悕绉�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鐘舵��">
-              <el-select v-model="queryParams.status" placeholder="閮ㄩ棬鐘舵��" clearable size="small" style="width: 100%">
-                <el-option
-                    v-for="dict in statusOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item class="operation">
-              <el-button
-                  class="filter-item"
-                  type="primary"
-                  icon="el-icon-search"
-                  size="mini"
-                  @click="handleQuery"
-              >鎼滅储
-              </el-button>
-              <el-button
-                  class="filter-item"
-                  type="primary"
-                  icon="el-icon-plus"
-                  size="mini"
-                  @click="handleAdd"
-                  v-hasPermi="['system:dept:add']"
-              >鏂板
-              </el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-table
-          :height="height"
-          v-loading="loading"
-          :data="deptList"
-          row-key="deptId"
-          default-expand-all
-          :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
-      >
-        <el-table-column prop="deptName" label="閮ㄩ棬鍚嶇О" width="200" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="orderNum" label="鎺掑簭" width="200"></el-table-column>
-        <el-table-column prop="status" label="鐘舵��" :formatter="statusFormat" width="100"></el-table-column>
-        <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="200">
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.createTime) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['system:dept:edit']"
-            >淇敼
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-plus"
-                @click="handleAdd(scope.row)"
-                v-hasPermi="['system:dept:add']"
-            >鏂板
-            </el-button>
-            <el-button
-                v-if="scope.row.parentId != 0"
-                size="mini"
-                type="text"
-                icon="el-icon-delete"
-                @click="handleDelete(scope.row)"
-                v-hasPermi="['system:dept:remove']"
-            >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-    </basic-container>
-    <!-- 娣诲姞鎴栦慨鏀归儴闂ㄥ璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="600px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-row>
-          <el-col :span="24" v-if="form.parentId !== 0">
-            <el-form-item label="涓婄骇閮ㄩ棬" prop="parentId">
-              <treeselect v-model="form.parentId" :options="deptOptions" placeholder="閫夋嫨涓婄骇閮ㄩ棬"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="閮ㄩ棬鍚嶇О" prop="deptName">
-              <el-input v-model="form.deptName" placeholder="璇疯緭鍏ラ儴闂ㄥ悕绉�"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鏄剧ず鎺掑簭" prop="orderNum">
-              <el-input-number v-model="form.orderNum" controls-position="right" :min="0"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="璐熻矗浜�" prop="leader">
-              <el-input v-model="form.leader" placeholder="璇疯緭鍏ヨ礋璐d汉" maxlength="20"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鑱旂郴鐢佃瘽" prop="phone">
-              <el-input v-model="form.phone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" maxlength="11"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="閭" prop="email">
-              <el-input v-model="form.email" placeholder="璇疯緭鍏ラ偖绠�" maxlength="50"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="閮ㄩ棬鐘舵��">
-              <el-radio-group v-model="form.status">
-                <el-radio
-                    v-for="dict in statusOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictValue"
-                >{{ dict.dictLabel }}
-                </el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {listDept, getDept, treeselect, delDept, addDept, updateDept} from "@/api/system/dept";
-import Treeselect from "@riophae/vue-treeselect";
-import "@riophae/vue-treeselect/dist/vue-treeselect.css";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: "Dept",
-  components: {Treeselect},
-  mixins: [mixins],
-  data() {
-    return {
-      height: null,
-      // 閬僵灞�
-      loading: true,
-      // 琛ㄦ牸鏍戞暟鎹�
-      deptList: [],
-      // 閮ㄩ棬鏍戦�夐」
-      deptOptions: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鐘舵�佹暟鎹瓧鍏�
-      statusOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        deptName: undefined,
-        status: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        parentId: [
-          {required: true, message: "涓婄骇閮ㄩ棬涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        deptName: [
-          {required: true, message: "閮ㄩ棬鍚嶇О涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        orderNum: [
-          {required: true, message: "鑿滃崟椤哄簭涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        email: [
-          {
-            type: "email",
-            message: "'璇疯緭鍏ユ纭殑閭鍦板潃",
-            trigger: ["blur", "change"]
-          }
-        ],
-        phone: [
-          {
-            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
-            message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜",
-            trigger: "blur"
-          }
-        ]
-      }
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("sys_normal_disable").then(response => {
-      this.statusOptions = response.data;
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 270;
-    },
-    /** 鏌ヨ閮ㄩ棬鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listDept(this.queryParams).then(response => {
-        this.deptList = response.data;
-        this.loading = false;
-      });
-    },
-    /** 鏌ヨ閮ㄩ棬涓嬫媺鏍戠粨鏋� */
-    getTreeselect() {
-      treeselect().then(response => {
-        this.deptOptions = response.data;
-      });
-    },
-    // 瀛楀吀鐘舵�佸瓧鍏哥炕璇�
-    statusFormat(row, column) {
-      return this.selectDictLabel(this.statusOptions, row.status);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        deptId: undefined,
-        parentId: undefined,
-        deptName: undefined,
-        orderNum: undefined,
-        leader: undefined,
-        phone: undefined,
-        email: undefined,
-        status: "0"
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.getList();
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd(row) {
-      this.reset();
-      this.getTreeselect();
-      if (row != undefined) {
-        this.form.parentId = row.deptId;
-      }
-      this.open = true;
-      this.title = "娣诲姞閮ㄩ棬";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      this.getTreeselect();
-      getDept(row.deptId).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼閮ㄩ棬";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.deptId != undefined) {
-            updateDept(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addDept(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      this.$confirm('鏄惁纭鍒犻櫎鍚嶇О涓�"' + row.deptName + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delDept(row.deptId);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/system/dict/data.vue b/energy_management_ui/src/views/system/dict/data.vue
deleted file mode 100644
index 5965302..0000000
--- a/energy_management_ui/src/views/system/dict/data.vue
+++ /dev/null
@@ -1,375 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true">
-      <el-form-item label="瀛楀吀鍚嶇О" prop="dictType">
-        <el-select v-model="queryParams.dictType" filterable size="small">
-          <el-option
-            v-for="item in typeOptions"
-            :key="item.dictId"
-            :label="item.dictName"
-            :value="item.dictType"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="瀛楀吀鏍囩" prop="dictLabel">
-        <el-input
-          v-model="queryParams.dictLabel"
-          placeholder="璇疯緭鍏ュ瓧鍏告爣绛�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鐘舵��" prop="status">
-        <el-select v-model="queryParams.status" placeholder="鏁版嵁鐘舵��" clearable size="small">
-          <el-option
-            v-for="dict in statusOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['system:dict:add']"
-        >鏂板</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['system:dict:edit']"
-        >淇敼</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['system:dict:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['system:dict:export']"
-        >瀵煎嚭</el-button>
-      </el-col>
-    </el-row>
-
-    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange" height="600">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="瀛楀吀缂栫爜" align="center" prop="dictCode" />
-      <el-table-column label="瀛楀吀鏍囩" align="center" prop="dictLabel" />
-      <el-table-column label="瀛楀吀閿��" align="center" prop="dictValue" />
-      <el-table-column label="瀛楀吀鎺掑簭" align="center" prop="dictSort" />
-      <el-table-column label="鐘舵��" align="center" prop="status" :formatter="statusFormat" />
-      <el-table-column label="鏄惁榛樿" align="center" prop="isDefault" :formatter="nowisDefaultFormat" />
-      <el-table-column label="澶囨敞" align="center" prop="remark" :show-overflow-tooltip="true" />
-      <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.createTime) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['system:dict:edit']"
-          >淇敼</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['system:dict:remove']"
-          >鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 娣诲姞鎴栦慨鏀瑰弬鏁伴厤缃璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="瀛楀吀绫诲瀷">
-          <el-input v-model="form.dictType" :disabled="true" />
-        </el-form-item>
-        <el-form-item label="瀛楀吀鏍囩" prop="dictLabel">
-          <el-input v-model="form.dictLabel" placeholder="璇疯緭鍏ュ瓧鍏告爣绛�" />
-        </el-form-item>
-        <el-form-item label="鏁版嵁閿��" prop="dictValue">
-          <el-input v-model="form.dictValue" placeholder="璇疯緭鍏ユ暟鎹敭鍊�" />
-        </el-form-item>
-        <el-form-item label="鏄剧ず鎺掑簭" prop="dictSort">
-          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
-        </el-form-item>
-        <el-form-item label="鐘舵��" prop="status">
-          <el-radio-group v-model="form.status">
-            <el-radio
-              v-for="dict in statusOptions"
-              :key="dict.dictValue"
-              :label="dict.dictValue"
-            >{{dict.dictLabel}}</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="鏄惁榛樿" prop="isDefault">
-          <el-radio-group v-model="form.isDefault">
-            <el-radio
-              v-for="dict in isDefaultOptions"
-              :key="dict.dictValue"
-              :label="dict.dictValue"
-            >{{dict.dictLabel}}</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="澶囨敞" prop="remark">
-          <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listData, getData, delData, addData, updateData, exportData } from "@/api/system/dict/data";
-import { listType, getType } from "@/api/system/dict/type";
-
-export default {
-  name: "Data",
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 瀛楀吀琛ㄦ牸鏁版嵁
-      dataList: [],
-      // 榛樿瀛楀吀绫诲瀷
-      defaultDictType: "",
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鐘舵�佹暟鎹瓧鍏�
-      statusOptions: [],
-      // 绫诲瀷鏁版嵁瀛楀吀
-      typeOptions: [],
-      // 鏄惁榛樿鐨勬暟鎹瓧鍏�
-      isDefaultOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        dictName: undefined,
-        dictType: undefined,
-        status: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        dictLabel: [
-          { required: true, message: "鏁版嵁鏍囩涓嶈兘涓虹┖", trigger: "blur" }
-        ],
-        dictValue: [
-          { required: true, message: "鏁版嵁閿�间笉鑳戒负绌�", trigger: "blur" }
-        ],
-        dictSort: [
-          { required: true, message: "鏁版嵁椤哄簭涓嶈兘涓虹┖", trigger: "blur" }
-        ]
-      }
-    };
-  },
-  created() {
-    const dictId = this.$route.params && this.$route.params.dictId;
-    this.getType(dictId);
-    this.getTypeList();
-    this.getDicts("sys_normal_disable").then(response => {
-      this.statusOptions = response.data;
-    });
-    this.getDicts("sys_is_default").then(response => {
-      this.isDefaultOptions = response.data;
-    });
-  },
-  methods: {
-    /** 鏌ヨ瀛楀吀绫诲瀷璇︾粏 */
-    getType(dictId) {
-      getType(dictId).then(response => {
-        this.queryParams.dictType = response.data.dictType;
-        this.defaultDictType = response.data.dictType;
-        this.getList();
-      });
-    },
-    /** 鏌ヨ瀛楀吀绫诲瀷鍒楄〃 */
-    getTypeList() {
-      listType().then(response => {
-        this.typeOptions = response.rows;
-      });
-    },
-    /** 鏌ヨ瀛楀吀鏁版嵁鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listData(this.queryParams).then(response => {
-        this.dataList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鏁版嵁鐘舵�佸瓧鍏哥炕璇�
-    statusFormat(row, column) {
-      return this.selectDictLabel(this.statusOptions, row.status);
-    },
-    // 鏄惁榛樿瀛楀吀缈昏瘧
-    nowisDefaultFormat(row, column) {
-      return this.selectDictLabel(this.isDefaultOptions, row.isDefault);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        dictCode: undefined,
-        dictLabel: undefined,
-        dictValue: undefined,
-        dictSort: 0,
-        status: "0",
-        isDefault:"Y",
-        remark: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.queryParams.dictType = this.defaultDictType;
-      this.handleQuery();
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞瀛楀吀鏁版嵁";
-      this.form.dictType = this.queryParams.dictType;
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.dictCode)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const dictCode = row.dictCode || this.ids
-      getData(dictCode).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼瀛楀吀鏁版嵁";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.dictCode != undefined) {
-            updateData(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addData(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const dictCodes = row.dictCode || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎瀛楀吀缂栫爜涓�"' + dictCodes + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return delData(dictCodes);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夋暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return exportData(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function() {});
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/system/dict/index.vue b/energy_management_ui/src/views/system/dict/index.vue
deleted file mode 100644
index 65c3100..0000000
--- a/energy_management_ui/src/views/system/dict/index.vue
+++ /dev/null
@@ -1,376 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form :model="queryParams" ref="queryForm" label-width="72px" class="special-form">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="瀛楀吀鍚嶇О" prop="dictName">
-              <el-input
-                  v-model="queryParams.dictName"
-                  placeholder="璇疯緭鍏ュ瓧鍏稿悕绉�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="瀛楀吀绫诲瀷" prop="dictType">
-              <el-input
-                  v-model="queryParams.dictType"
-                  placeholder="璇疯緭鍏ュ瓧鍏哥被鍨�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鐘舵��" prop="status">
-              <el-select
-                  v-model="queryParams.status"
-                  placeholder="瀛楀吀鐘舵��"
-                  clearable
-                  size="small"
-                  style="width: 100%"
-              >
-                <el-option
-                    v-for="dict in statusOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-<!--          <el-col :span="6">-->
-<!--            <el-form-item label="鍒涘缓鏃堕棿">-->
-<!--              <el-date-picker-->
-<!--                  v-model="dateRange"-->
-<!--                  size="small"-->
-<!--                  style="width: 100%"-->
-<!--                  value-format="yyyy-MM-dd"-->
-<!--                  type="daterange"-->
-<!--                  range-separator="-"-->
-<!--                  start-placeholder="寮�濮嬫棩鏈�"-->
-<!--                  end-placeholder="缁撴潫鏃ユ湡"-->
-<!--              ></el-date-picker>-->
-<!--            </el-form-item>-->
-<!--          </el-col>-->
-          <el-col :span="6">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-              type="primary"
-              icon="el-icon-plus"
-              size="mini"
-              @click="handleAdd"
-              v-hasPermi="['system:dict:add']"
-          >鏂板</el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="success"
-              icon="el-icon-edit"
-              size="mini"
-              :disabled="single"
-              @click="handleUpdate"
-              v-hasPermi="['system:dict:edit']"
-          >淇敼</el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              :disabled="multiple"
-              @click="handleDelete"
-              v-hasPermi="['system:dict:remove']"
-          >鍒犻櫎</el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="warning"
-              icon="el-icon-download"
-              size="mini"
-              @click="handleExport"
-              v-hasPermi="['system:dict:export']"
-          >瀵煎嚭</el-button>
-        </el-col>
-      </el-row>
-      <el-table  :height="height" v-loading="loading" :data="typeList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="瀛楀吀缂栧彿" align="center" prop="dictId" />
-        <el-table-column label="瀛楀吀鍚嶇О" align="center" prop="dictName" :show-overflow-tooltip="true" />
-        <el-table-column label="瀛楀吀绫诲瀷" align="center" :show-overflow-tooltip="true">
-          <template slot-scope="scope">
-            <router-link :to="'/dict/type/data/' + scope.row.dictId" class="link-type">
-              <span>{{ scope.row.dictType }}</span>
-            </router-link>
-          </template>
-        </el-table-column>
-        <el-table-column label="鐘舵��" align="center" prop="status" :formatter="statusFormat" />
-        <el-table-column label="澶囨敞" align="center" prop="remark" :show-overflow-tooltip="true" />
-        <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="180">
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.createTime) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['system:dict:edit']"
-            >淇敼</el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-delete"
-                @click="handleDelete(scope.row)"
-                v-hasPermi="['system:dict:remove']"
-            >鍒犻櫎</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-    </basic-container>
-    <!-- 娣诲姞鎴栦慨鏀瑰弬鏁伴厤缃璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="瀛楀吀鍚嶇О" prop="dictName">
-          <el-input v-model="form.dictName" placeholder="璇疯緭鍏ュ瓧鍏稿悕绉�" />
-        </el-form-item>
-        <el-form-item label="瀛楀吀绫诲瀷" prop="dictType">
-          <el-input v-model="form.dictType" placeholder="璇疯緭鍏ュ瓧鍏哥被鍨�" />
-        </el-form-item>
-        <el-form-item label="鐘舵��" prop="status">
-          <el-radio-group v-model="form.status">
-            <el-radio
-              v-for="dict in statusOptions"
-              :key="dict.dictValue"
-              :label="dict.dictValue"
-            >{{dict.dictLabel}}</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="澶囨敞" prop="remark">
-          <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listType, getType, delType, addType, updateType, exportType } from "@/api/system/dict/type";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: "Dict",
-  mixins: [mixins],
-  data() {
-    return {
-      height:null,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 瀛楀吀琛ㄦ牸鏁版嵁
-      typeList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鐘舵�佹暟鎹瓧鍏�
-      statusOptions: [],
-      // 鏃ユ湡鑼冨洿
-      dateRange: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        beginTime:undefined,
-        endTime:undefined,
-        dictName: undefined,
-        dictType: undefined,
-        status: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        dictName: [
-          { required: true, message: "瀛楀吀鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
-        ],
-        dictType: [
-          { required: true, message: "瀛楀吀绫诲瀷涓嶈兘涓虹┖", trigger: "blur" }
-        ]
-      }
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("sys_normal_disable").then(response => {
-      this.statusOptions = response.data;
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 370;
-    },
-    /** 鏌ヨ瀛楀吀绫诲瀷鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listType(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
-          this.typeList = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        }
-      );
-    },
-    // 瀛楀吀鐘舵�佸瓧鍏哥炕璇�
-    statusFormat(row, column) {
-      return this.selectDictLabel(this.statusOptions, row.status);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        dictId: undefined,
-        dictName: undefined,
-        dictType: undefined,
-        status: "0",
-        remark: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.dateRange = [];
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞瀛楀吀绫诲瀷";
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.dictId)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const dictId = row.dictId || this.ids
-      getType(dictId).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼瀛楀吀绫诲瀷";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.dictId != undefined) {
-            updateType(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addType(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const dictIds = row.dictId || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎瀛楀吀缂栧彿涓�"' + dictIds + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return delType(dictIds);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夌被鍨嬫暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return exportType(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function() {});
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/system/log/index.vue b/energy_management_ui/src/views/system/log/index.vue
deleted file mode 100644
index 7bf6148..0000000
--- a/energy_management_ui/src/views/system/log/index.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-<template >
-  <router-view />
-</template>
diff --git a/energy_management_ui/src/views/system/menu/index.vue b/energy_management_ui/src/views/system/menu/index.vue
deleted file mode 100644
index ced75e8..0000000
--- a/energy_management_ui/src/views/system/menu/index.vue
+++ /dev/null
@@ -1,494 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form
-        class="special-form"
-        label-width="73px"
-        :model="queryParams"
-        ref="queryForm"
-      >
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="鑿滃崟鍚嶇О">
-              <el-input
-                v-model="queryParams.menuName"
-                placeholder="璇疯緭鍏ヨ彍鍗曞悕绉�"
-                clearable
-                size="small"
-                @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鐘舵��">
-              <el-select
-                v-model="queryParams.visible"
-                placeholder="鑿滃崟鐘舵��"
-                clearable
-                size="small"
-                style="width: 100%"
-              >
-                <el-option
-                  v-for="dict in visibleOptions"
-                  :key="dict.dictValue"
-                  :label="dict.dictLabel"
-                  :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item class="operation">
-              <el-button
-                type="primary"
-                icon="el-icon-search"
-                size="mini"
-                @click="handleQuery"
-                >鎼滅储</el-button
-              >
-              <el-button
-                type="primary"
-                icon="el-icon-plus"
-                size="mini"
-                @click="handleAdd"
-                v-hasPermi="['system:menu:add']"
-              >
-                鏂板
-              </el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container :bodyStyle="bodyStyle" style="margin-top: 16px">
-      <el-table
-        v-loading="loading"
-        :data="menuList"
-        row-key="menuId"
-        :height="height"
-        :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
-      >
-        <el-table-column
-          prop="menuName"
-          label="鑿滃崟鍚嶇О"
-          align="left"
-          min-width="180"
-        ></el-table-column>
-        <el-table-column prop="icon" label="鍥炬爣" align="center" width="100px">
-          <template slot-scope="scope">
-            <svg-icon :icon-class="scope.row.icon" />
-          </template>
-        </el-table-column>
-        <el-table-column
-          prop="orderNum"
-          label="鎺掑簭"
-          width="60px"
-        ></el-table-column>
-        <el-table-column
-          prop="perms"
-          label="鏉冮檺鏍囪瘑"
-          width="130px"
-          :show-overflow-tooltip="true"
-        ></el-table-column>
-        <el-table-column
-          prop="component"
-          label="缁勪欢璺緞"
-          width="180px"
-          :show-overflow-tooltip="true"
-        ></el-table-column>
-        <el-table-column
-          prop="visible"
-          label="鍙"
-          :formatter="visibleFormat"
-          width="80px"
-        ></el-table-column>
-        <el-table-column
-          label="鍒涘缓鏃堕棿"
-          align="center"
-          prop="createTime"
-          width="180"
-        >
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.createTime) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column
-          label="鎿嶄綔"
-          align="center"
-          width="240"
-          class-name="small-padding fixed-width"
-        >
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="handleUpdate(scope.row)"
-              v-hasPermi="['system:menu:edit']"
-              >淇敼
-            </el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-plus"
-              @click="handleAdd(scope.row)"
-              v-hasPermi="['system:menu:add']"
-              >鏂板
-            </el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['system:menu:remove']"
-              >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <!-- 娣诲姞鎴栦慨鏀硅彍鍗曞璇濇 -->
-      <el-dialog :title="title" :visible.sync="open" width="600px">
-        <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-          <el-row>
-            <el-col :span="24">
-              <el-form-item label="涓婄骇鑿滃崟">
-                <treeselect
-                  v-model="form.parentId"
-                  :options="menuOptions"
-                  :show-count="true"
-                  placeholder="閫夋嫨涓婄骇鑿滃崟"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="24">
-              <el-form-item label="鑿滃崟绫诲瀷" prop="menuType">
-                <el-radio-group v-model="form.menuType">
-                  <el-radio label="M">鐩綍</el-radio>
-                  <el-radio label="C">鑿滃崟</el-radio>
-                  <el-radio label="F">鎸夐挳</el-radio>
-                </el-radio-group>
-              </el-form-item>
-            </el-col>
-            <el-col :span="24">
-              <el-form-item v-if="form.menuType != 'F'" label="鑿滃崟鍥炬爣">
-                <el-popover
-                  placement="bottom-start"
-                  width="460"
-                  trigger="click"
-                  @show="$refs['iconSelect'].reset()"
-                >
-                  <IconSelect ref="iconSelect" @selected="selected" />
-                  <el-input
-                    slot="reference"
-                    v-model="form.icon"
-                    placeholder="鐐瑰嚮閫夋嫨鍥炬爣"
-                    readonly
-                  >
-                    <svg-icon
-                      v-if="form.icon"
-                      slot="prefix"
-                      :icon-class="form.icon"
-                      class="el-input__icon"
-                      style="height: 32px;width: 16px;"
-                    />
-                    <i
-                      v-else
-                      slot="prefix"
-                      class="el-icon-search el-input__icon"
-                    />
-                  </el-input>
-                </el-popover>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="鑿滃崟鍚嶇О" prop="menuName">
-                <el-input
-                  v-model="form.menuName"
-                  placeholder="璇疯緭鍏ヨ彍鍗曞悕绉�"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="鏄剧ず鎺掑簭" prop="orderNum">
-                <el-input-number
-                  v-model="form.orderNum"
-                  controls-position="right"
-                  :min="0"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item v-if="form.menuType != 'F'" label="鏄惁澶栭摼">
-                <el-radio-group v-model="form.isFrame">
-                  <el-radio label="0">鏄�</el-radio>
-                  <el-radio label="1">鍚�</el-radio>
-                </el-radio-group>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item
-                v-if="form.menuType != 'F'"
-                label="璺敱鍦板潃"
-                prop="path"
-              >
-                <el-input v-model="form.path" placeholder="璇疯緭鍏ヨ矾鐢卞湴鍧�" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12" v-if="form.menuType == 'C'">
-              <el-form-item label="缁勪欢璺緞" prop="component">
-                <el-input
-                  v-model="form.component"
-                  placeholder="璇疯緭鍏ョ粍浠惰矾寰�"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item v-if="form.menuType != 'M'" label="鏉冮檺鏍囪瘑">
-                <el-input
-                  v-model="form.perms"
-                  placeholder="璇锋潈闄愭爣璇�"
-                  maxlength="50"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="24">
-              <el-form-item v-if="form.menuType != 'F'" label="鑿滃崟鐘舵��">
-                <el-radio-group v-model="form.visible">
-                  <el-radio
-                    v-for="dict in visibleOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictValue"
-                    >{{ dict.dictLabel }}
-                  </el-radio>
-                </el-radio-group>
-              </el-form-item>
-            </el-col>
-            <el-col :span="24">
-              <el-form-item
-                v-if="form.menuType != 'F'"
-                label="椤甸潰鍙傛暟"
-                prop="parameter"
-              >
-                <el-input
-                  v-model="form.parameter"
-                  placeholder="璇疯緭鍏ラ〉闈㈠弬鏁�"
-                />
-              </el-form-item>
-            </el-col>
-          </el-row>
-        </el-form>
-        <div slot="footer" class="dialog-footer">
-          <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-          <el-button @click="cancel">鍙� 娑�</el-button>
-        </div>
-      </el-dialog>
-    </basic-container>
-  </div>
-</template>
-
-<script>
-import {
-  listMenu,
-  getMenu,
-  treeselect,
-  delMenu,
-  addMenu,
-  updateMenu
-} from "@/api/system/menu";
-import Treeselect from "@riophae/vue-treeselect";
-import "@riophae/vue-treeselect/dist/vue-treeselect.css";
-import IconSelect from "@/components/IconSelect";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: "Menu",
-  mixins: [mixins],
-  components: { Treeselect, IconSelect },
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 鑿滃崟琛ㄦ牸鏍戞暟鎹�
-      menuList: [],
-      // 鑿滃崟鏍戦�夐」
-      menuOptions: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鑿滃崟鐘舵�佹暟鎹瓧鍏�
-      visibleOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        menuName: undefined,
-        visible: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        menuName: [
-          { required: true, message: "鑿滃崟鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
-        ],
-        orderNum: [
-          { required: true, message: "鑿滃崟椤哄簭涓嶈兘涓虹┖", trigger: "blur" }
-        ]
-      },
-      height: null
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("sys_show_hide").then(response => {
-      this.visibleOptions = response.data;
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + "px",
-        overflow: "hidden"
-      };
-      this.height = window.innerHeight - 270;
-    },
-    // 閫夋嫨鍥炬爣
-    selected(name) {
-      this.form.icon = name;
-    },
-    /** 鏌ヨ鑿滃崟鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listMenu(this.queryParams).then(response => {
-        this.menuList = response.data;
-        this.loading = false;
-      });
-    },
-    /** 鏌ヨ鑿滃崟涓嬫媺鏍戠粨鏋� */
-    getTreeselect() {
-      treeselect().then(response => {
-        this.menuOptions = [];
-        const menu = { id: 0, label: "涓荤被鐩�", children: [] };
-        menu.children = response.data;
-        this.menuOptions.push(menu);
-      });
-    },
-    // 鑿滃崟鏄剧ず鐘舵�佸瓧鍏哥炕璇�
-    visibleFormat(row, column) {
-      if (row.menuType == "F") {
-        return "";
-      }
-      return this.selectDictLabel(this.visibleOptions, row.visible);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        menuId: undefined,
-        parentId: 0,
-        menuName: undefined,
-        icon: undefined,
-        menuType: "M",
-        orderNum: undefined,
-        isFrame: "1",
-        visible: "0"
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.getList();
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd(row) {
-      this.reset();
-      this.getTreeselect();
-      if (row != null) {
-        this.form.parentId = row.menuId;
-      }
-      this.open = true;
-      this.title = "娣诲姞鑿滃崟";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      this.getTreeselect();
-      getMenu(row.menuId).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼鑿滃崟";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.menuId != undefined) {
-            updateMenu(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addMenu(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      this.$confirm(
-        '鏄惁纭鍒犻櫎鍚嶇О涓�"' + row.menuName + '"鐨勬暟鎹」?',
-        "璀﹀憡",
-        {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }
-      )
-        .then(function() {
-          return delMenu(row.menuId);
-        })
-        .then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        })
-        .catch(function() {});
-    }
-  }
-};
-</script>
-<style lang="scss" scoped>
-.el-table td,
-.el-table th {
-  text-align: left !important;
-}
-
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-
-::v-deep {
-  .vue-treeselect__control {
-    background: rgb(54, 108, 185, 0.2);
-    background-color: rgb(54, 108, 185, 0.2);
-    border: 1px solid #366cb9;
-    color: #fff;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/system/notice/index.vue b/energy_management_ui/src/views/system/notice/index.vue
deleted file mode 100644
index 84f035c..0000000
--- a/energy_management_ui/src/views/system/notice/index.vue
+++ /dev/null
@@ -1,376 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form :model="queryParams" ref="queryForm" label-width="72px" class="special-form">
-        <el-row :gutter="24">
-         <el-col :span="6">
-            <el-form-item label="鍏憡鏍囬" prop="noticeTitle">
-              <el-input
-                  v-model="queryParams.noticeTitle"
-                  placeholder="璇疯緭鍏ュ叕鍛婃爣棰�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-         <el-col :span="6">
-            <el-form-item label="鎿嶄綔浜哄憳" prop="createBy">
-              <el-input
-                  v-model="queryParams.createBy"
-                  placeholder="璇疯緭鍏ユ搷浣滀汉鍛�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-         <el-col :span="6">
-            <el-form-item label="绫诲瀷" prop="noticeType">
-              <el-select v-model="queryParams.noticeType" placeholder="鍏憡绫诲瀷" clearable size="small" style="width: 100%">
-                <el-option
-                    v-for="dict in typeOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-         <el-col :span="6">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-              type="primary"
-              icon="el-icon-plus"
-              size="mini"
-              @click="handleAdd"
-              v-hasPermi="['system:notice:add']"
-          >鏂板
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="success"
-              icon="el-icon-edit"
-              size="mini"
-              :disabled="single"
-              @click="handleUpdate"
-              v-hasPermi="['system:notice:edit']"
-          >淇敼
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              :disabled="multiple"
-              @click="handleDelete"
-              v-hasPermi="['system:notice:remove']"
-          >鍒犻櫎
-          </el-button>
-        </el-col>
-      </el-row>
-      <el-table  :height="height" v-loading="loading" :data="noticeList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center"/>
-        <el-table-column label="搴忓彿" align="center" prop="noticeId" width="100"/>
-        <el-table-column
-            label="鍏憡鏍囬"
-            align="center"
-            prop="noticeTitle"
-            :show-overflow-tooltip="true"
-        />
-        <el-table-column
-            label="鍏憡绫诲瀷"
-            align="center"
-            prop="noticeType"
-            :formatter="typeFormat"
-            width="100"
-        />
-        <el-table-column
-            label="鐘舵��"
-            align="center"
-            prop="status"
-            :formatter="statusFormat"
-            width="100"
-        />
-        <el-table-column label="鍒涘缓鑰�" align="center" prop="createBy" width="100"/>
-        <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="100">
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['system:notice:edit']"
-            >淇敼
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-delete"
-                @click="handleDelete(scope.row)"
-                v-hasPermi="['system:notice:remove']"
-            >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-    </basic-container>
-    <!-- 娣诲姞鎴栦慨鏀瑰叕鍛婂璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="780px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="鍏憡鏍囬" prop="noticeTitle">
-              <el-input v-model="form.noticeTitle" placeholder="璇疯緭鍏ュ叕鍛婃爣棰�"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鍏憡绫诲瀷" prop="noticeType">
-              <el-select v-model="form.noticeType" placeholder="璇烽�夋嫨">
-                <el-option
-                    v-for="dict in typeOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="鐘舵��">
-              <el-radio-group v-model="form.status">
-                <el-radio
-                    v-for="dict in statusOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictValue"
-                >{{ dict.dictLabel }}
-                </el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="鍐呭">
-              <Editor v-model="form.noticeContent"/>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-      <div slot="footer" class="dialog-footer" style="padding-top:20px">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {listNotice, getNotice, delNotice, addNotice, updateNotice, exportNotice} from "@/api/system/notice";
-import Editor from '@/components/Editor';
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: "Notice",
-  mixins: [mixins],
-  components: {
-    Editor
-  },
-  data() {
-    return {
-      height:null,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鍏憡琛ㄦ牸鏁版嵁
-      noticeList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 绫诲瀷鏁版嵁瀛楀吀
-      statusOptions: [],
-      // 鐘舵�佹暟鎹瓧鍏�
-      typeOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        noticeTitle: undefined,
-        createBy: undefined,
-        status: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        noticeTitle: [
-          {required: true, message: "鍏憡鏍囬涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        noticeType: [
-          {required: true, message: "鍏憡绫诲瀷涓嶈兘涓虹┖", trigger: "blur"}
-        ]
-      }
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("sys_notice_status").then(response => {
-      this.statusOptions = response.data;
-    });
-    this.getDicts("sys_notice_type").then(response => {
-      this.typeOptions = response.data;
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 370;
-    },
-    /** 鏌ヨ鍏憡鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listNotice(this.queryParams).then(response => {
-        this.noticeList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鍏憡鐘舵�佸瓧鍏哥炕璇�
-    statusFormat(row, column) {
-      return this.selectDictLabel(this.statusOptions, row.status);
-    },
-    // 鍏憡鐘舵�佸瓧鍏哥炕璇�
-    typeFormat(row, column) {
-      return this.selectDictLabel(this.typeOptions, row.noticeType);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        noticeId: undefined,
-        noticeTitle: undefined,
-        noticeType: undefined,
-        noticeContent: undefined,
-        status: "0"
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.noticeId)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞鍏憡";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const noticeId = row.noticeId || this.ids
-      getNotice(noticeId).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼鍏憡";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.noticeId != undefined) {
-            updateNotice(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addNotice(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const noticeIds = row.noticeId || this.ids
-      this.$confirm('鏄惁纭鍒犻櫎鍏憡缂栧彿涓�"' + noticeIds + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delNotice(noticeIds);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
\ No newline at end of file
diff --git a/energy_management_ui/src/views/system/post/index.vue b/energy_management_ui/src/views/system/post/index.vue
deleted file mode 100644
index 64e796d..0000000
--- a/energy_management_ui/src/views/system/post/index.vue
+++ /dev/null
@@ -1,360 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form :model="queryParams" ref="queryForm" label-width="72px" class="special-form">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="宀椾綅缂栫爜" prop="postCode">
-              <el-input
-                  v-model="queryParams.postCode"
-                  placeholder="璇疯緭鍏ュ矖浣嶇紪鐮�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="宀椾綅鍚嶇О" prop="postName">
-              <el-input
-                  v-model="queryParams.postName"
-                  placeholder="璇疯緭鍏ュ矖浣嶅悕绉�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鐘舵��" prop="status">
-              <el-select v-model="queryParams.status" placeholder="宀椾綅鐘舵��" clearable size="small" style="width: 100%">
-                <el-option
-                    v-for="dict in statusOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-              type="primary"
-              icon="el-icon-plus"
-              size="mini"
-              @click="handleAdd"
-              v-hasPermi="['system:post:add']"
-          >鏂板
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="success"
-              icon="el-icon-edit"
-              size="mini"
-              :disabled="single"
-              @click="handleUpdate"
-              v-hasPermi="['system:post:edit']"
-          >淇敼
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              :disabled="multiple"
-              @click="handleDelete"
-              v-hasPermi="['system:post:remove']"
-          >鍒犻櫎
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="warning"
-              icon="el-icon-download"
-              size="mini"
-              @click="handleExport"
-              v-hasPermi="['system:post:export']"
-          >瀵煎嚭
-          </el-button>
-        </el-col>
-      </el-row>
-      <el-table :height="height" v-loading="loading" :data="postList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center"/>
-        <el-table-column label="宀椾綅缂栧彿" align="center" prop="postId"/>
-        <el-table-column label="宀椾綅缂栫爜" align="center" prop="postCode"/>
-        <el-table-column label="宀椾綅鍚嶇О" align="center" prop="postName"/>
-        <el-table-column label="宀椾綅鎺掑簭" align="center" prop="postSort"/>
-        <el-table-column label="鐘舵��" align="center" prop="status" :formatter="statusFormat"/>
-        <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="180">
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.createTime) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['system:post:edit']"
-            >淇敼
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-delete"
-                @click="handleDelete(scope.row)"
-                v-hasPermi="['system:post:remove']"
-            >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-    </basic-container>
-    <!-- 娣诲姞鎴栦慨鏀瑰矖浣嶅璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="宀椾綅鍚嶇О" prop="postName">
-          <el-input v-model="form.postName" placeholder="璇疯緭鍏ュ矖浣嶅悕绉�"/>
-        </el-form-item>
-        <el-form-item label="宀椾綅缂栫爜" prop="postCode">
-          <el-input v-model="form.postCode" placeholder="璇疯緭鍏ョ紪鐮佸悕绉�"/>
-        </el-form-item>
-        <el-form-item label="宀椾綅椤哄簭" prop="postSort">
-          <el-input-number v-model="form.postSort" controls-position="right" :min="0"/>
-        </el-form-item>
-        <el-form-item label="宀椾綅鐘舵��" prop="status">
-          <el-radio-group v-model="form.status">
-            <el-radio
-                v-for="dict in statusOptions"
-                :key="dict.dictValue"
-                :label="dict.dictValue"
-            >{{ dict.dictLabel }}
-            </el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="澶囨敞" prop="remark">
-          <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�"/>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {listPost, getPost, delPost, addPost, updatePost, exportPost} from "@/api/system/post";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  mixins: [mixins],
-  name: "Post",
-  data() {
-    return {
-      height: null,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 宀椾綅琛ㄦ牸鏁版嵁
-      postList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鐘舵�佹暟鎹瓧鍏�
-      statusOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        postCode: undefined,
-        postName: undefined,
-        status: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        postName: [
-          {required: true, message: "宀椾綅鍚嶇О涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        postCode: [
-          {required: true, message: "宀椾綅缂栫爜涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        postSort: [
-          {required: true, message: "宀椾綅椤哄簭涓嶈兘涓虹┖", trigger: "blur"}
-        ]
-      }
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("sys_normal_disable").then(response => {
-      this.statusOptions = response.data;
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.height = window.innerHeight - 370;
-    },
-    /** 鏌ヨ宀椾綅鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listPost(this.queryParams).then(response => {
-        this.postList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 宀椾綅鐘舵�佸瓧鍏哥炕璇�
-    statusFormat(row, column) {
-      return this.selectDictLabel(this.statusOptions, row.status);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        postId: undefined,
-        postCode: undefined,
-        postName: undefined,
-        postSort: 0,
-        status: "0",
-        remark: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.postId)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞宀椾綅";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const postId = row.postId || this.ids
-      getPost(postId).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼宀椾綅";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.postId != undefined) {
-            updatePost(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addPost(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const postIds = row.postId || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎宀椾綅缂栧彿涓�"' + postIds + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delPost(postIds);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夊矖浣嶆暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportPost(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
\ No newline at end of file
diff --git a/energy_management_ui/src/views/system/role/index.vue b/energy_management_ui/src/views/system/role/index.vue
deleted file mode 100644
index efa6421..0000000
--- a/energy_management_ui/src/views/system/role/index.vue
+++ /dev/null
@@ -1,597 +0,0 @@
-<template>
-  <div>
-    <basic-container>
-      <el-form :model="queryParams" ref="queryForm" class="special-form" label-width="73px">
-        <el-row :gutter="24">
-          <el-col :span="6">
-            <el-form-item label="瑙掕壊鍚嶇О" prop="roleName">
-              <el-input
-                  v-model="queryParams.roleName"
-                  placeholder="璇疯緭鍏ヨ鑹插悕绉�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鏉冮檺瀛楃" prop="roleKey">
-              <el-input
-                  v-model="queryParams.roleKey"
-                  placeholder="璇疯緭鍏ユ潈闄愬瓧绗�"
-                  clearable
-                  size="small"
-                  @keyup.enter.native="handleQuery"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鐘舵��" prop="status">
-              <el-select
-                  v-model="queryParams.status"
-                  placeholder="瑙掕壊鐘舵��"
-                  clearable
-                  size="small"
-                  style="width: 100%"
-              >
-                <el-option
-                    v-for="dict in statusOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-<!--          <el-col :span="6">-->
-<!--            <el-form-item label="鍒涘缓鏃堕棿">-->
-<!--              <el-date-picker-->
-<!--                  v-model="dateRange"-->
-<!--                  size="small"-->
-<!--                  style="width: 100%"-->
-<!--                  value-format="yyyy-MM-dd"-->
-<!--                  type="daterange"-->
-<!--                  range-separator="-"-->
-<!--                  start-placeholder="寮�濮嬫棩鏈�"-->
-<!--                  end-placeholder="缁撴潫鏃ユ湡"-->
-<!--              ></el-date-picker>-->
-<!--            </el-form-item>-->
-<!--          </el-col>-->
-          <el-col :span="6">
-            <el-form-item class="operation">
-              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </basic-container>
-    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-        <el-col :span="1.5">
-          <el-button
-              type="primary"
-              icon="el-icon-plus"
-              size="mini"
-              @click="handleAdd"
-              v-hasPermi="['system:role:add']"
-          >鏂板
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="success"
-              icon="el-icon-edit"
-              size="mini"
-              :disabled="single"
-              @click="handleUpdate"
-              v-hasPermi="['system:role:edit']"
-          >淇敼
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              :disabled="multiple"
-              @click="handleDelete"
-              v-hasPermi="['system:role:remove']"
-          >鍒犻櫎
-          </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-              type="warning"
-              icon="el-icon-download"
-              size="mini"
-              @click="handleExport"
-              v-hasPermi="['system:post:export']"
-          >瀵煎嚭
-          </el-button>
-        </el-col>
-      </el-row>
-      <el-table v-loading="loading" :data="roleList"  :height="height" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center"/>
-        <el-table-column label="瑙掕壊缂栧彿" prop="roleId" width="120"/>
-        <el-table-column label="瑙掕壊鍚嶇О" prop="roleName" :show-overflow-tooltip="true" width="150"/>
-        <el-table-column label="鏉冮檺瀛楃" prop="roleKey" :show-overflow-tooltip="true" width="150"/>
-        <el-table-column label="鏄剧ず椤哄簭" prop="roleSort" width="100"/>
-        <el-table-column label="鐘舵��" align="center" width="100">
-          <template slot-scope="scope">
-            <el-switch
-                v-model="scope.row.status"
-                active-value="0"
-                inactive-value="1"
-                @change="handleStatusChange(scope.row)"
-            ></el-switch>
-          </template>
-        </el-table-column>
-        <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="180">
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.createTime) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-edit"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['system:role:edit']"
-            >淇敼
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-circle-check"
-                @click="handleDataScope(scope.row)"
-                v-hasPermi="['system:role:edit']"
-            >鏁版嵁鏉冮檺
-            </el-button>
-            <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-delete"
-                @click="handleDelete(scope.row)"
-                v-hasPermi="['system:role:remove']"
-            >鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-      />
-    </basic-container>
-    <!-- 娣诲姞鎴栦慨鏀硅鑹查厤缃璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="瑙掕壊鍚嶇О" prop="roleName">
-          <el-input v-model="form.roleName" placeholder="璇疯緭鍏ヨ鑹插悕绉�"/>
-        </el-form-item>
-        <el-form-item label="鏉冮檺瀛楃" prop="roleKey">
-          <el-input v-model="form.roleKey" placeholder="璇疯緭鍏ユ潈闄愬瓧绗�"/>
-        </el-form-item>
-        <el-form-item label="瑙掕壊椤哄簭" prop="roleSort">
-          <el-input-number v-model="form.roleSort" controls-position="right" :min="1"/>
-        </el-form-item>
-        <el-form-item label="鐘舵��">
-          <el-radio-group v-model="form.status">
-            <el-radio
-                v-for="dict in statusOptions"
-                :key="dict.dictValue"
-                :label="dict.dictValue"
-            >{{ dict.dictLabel }}
-            </el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="鑿滃崟鏉冮檺">
-          <el-tree
-              :data="menuOptions"
-              show-checkbox
-              ref="menu"
-              node-key="id"
-              empty-text="鍔犺浇涓紝璇风◢鍚�"
-              :props="defaultProps"
-          ></el-tree>
-        </el-form-item>
-        <el-form-item label="澶囨敞">
-          <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-
-    <!-- 鍒嗛厤瑙掕壊鏁版嵁鏉冮檺瀵硅瘽妗� -->
-    <el-dialog :title="title" :visible.sync="openDataScope" width="500px">
-      <el-form :model="form" label-width="80px">
-        <el-form-item label="瑙掕壊鍚嶇О">
-          <el-input v-model="form.roleName" :disabled="true"/>
-        </el-form-item>
-        <el-form-item label="鏉冮檺瀛楃">
-          <el-input v-model="form.roleKey" :disabled="true"/>
-        </el-form-item>
-        <el-form-item label="鏉冮檺鑼冨洿">
-          <el-select v-model="form.dataScope">
-            <el-option
-                v-for="item in dataScopeOptions"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鏁版嵁鏉冮檺" v-show="form.dataScope == 2">
-          <el-tree
-              :data="deptOptions"
-              show-checkbox
-              default-expand-all
-              ref="dept"
-              node-key="id"
-              empty-text="鍔犺浇涓紝璇风◢鍚�"
-              :props="defaultProps"
-          ></el-tree>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitDataScope">纭� 瀹�</el-button>
-        <el-button @click="cancelDataScope">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {
-  listRole,
-  getRole,
-  delRole,
-  addRole,
-  updateRole,
-  exportRole,
-  dataScope,
-  changeRoleStatus
-} from "@/api/system/role";
-import {treeselect as menuTreeselect, roleMenuTreeselect} from "@/api/system/menu";
-import {treeselect as deptTreeselect, roleDeptTreeselect} from "@/api/system/dept";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  name: "Role",
-  mixins: [mixins],
-  data() {
-    return {
-      height:null,
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 瑙掕壊琛ㄦ牸鏁版嵁
-      roleList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏄惁鏄剧ず寮瑰嚭灞傦紙鏁版嵁鏉冮檺锛�
-      openDataScope: false,
-      // 鏃ユ湡鑼冨洿
-      dateRange: [],
-      // 鐘舵�佹暟鎹瓧鍏�
-      statusOptions: [],
-      // 鏁版嵁鑼冨洿閫夐」
-      dataScopeOptions: [
-        {
-          value: "1",
-          label: "鍏ㄩ儴鏁版嵁鏉冮檺"
-        },
-        {
-          value: "2",
-          label: "鑷畾鏁版嵁鏉冮檺"
-        },
-        {
-          value: "3",
-          label: "鏈儴闂ㄦ暟鎹潈闄�"
-        },
-        {
-          value: "4",
-          label: "鏈儴闂ㄥ強浠ヤ笅鏁版嵁鏉冮檺"
-        },
-        {
-          value: "5",
-          label: "浠呮湰浜烘暟鎹潈闄�"
-        }
-      ],
-      // 鑿滃崟鍒楄〃
-      menuOptions: [],
-      // 閮ㄩ棬鍒楄〃
-      deptOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        roleName: undefined,
-        roleKey: undefined,
-        beginTime: undefined,
-        endTime: undefined,
-        status: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      defaultProps: {
-        children: "children",
-        label: "label"
-      },
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        roleName: [
-          {required: true, message: "瑙掕壊鍚嶇О涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        roleKey: [
-          {required: true, message: "鏉冮檺瀛楃涓嶈兘涓虹┖", trigger: "blur"}
-        ],
-        roleSort: [
-          {required: true, message: "瑙掕壊椤哄簭涓嶈兘涓虹┖", trigger: "blur"}
-        ]
-      }
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("sys_normal_disable").then(response => {
-      this.statusOptions = response.data;
-    });
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.leftBodyStyle = {
-        height: window.innerHeight - 100 + 'px',
-        overflow: 'auto'
-      }
-      this.height = window.innerHeight - 370;
-    },
-    /** 鏌ヨ瑙掕壊鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listRole(this.addDateRange(this.queryParams, this.dateRange)).then(
-          response => {
-            this.roleList = response.rows;
-            this.total = response.total;
-            this.loading = false;
-          }
-      );
-    },
-    /** 鏌ヨ鑿滃崟鏍戠粨鏋� */
-    getMenuTreeselect() {
-      menuTreeselect().then(response => {
-        this.menuOptions = response.data;
-      });
-    },
-    /** 鏌ヨ閮ㄩ棬鏍戠粨鏋� */
-    getDeptTreeselect() {
-      deptTreeselect().then(response => {
-        this.deptOptions = response.data;
-      });
-    },
-    // 鎵�鏈夎彍鍗曡妭鐐规暟鎹�
-    getMenuAllCheckedKeys() {
-      // 鐩墠琚�変腑鐨勮彍鍗曡妭鐐�
-      let checkedKeys = this.$refs.menu.getHalfCheckedKeys();
-      // 鍗婇�変腑鐨勮彍鍗曡妭鐐�
-      let halfCheckedKeys = this.$refs.menu.getCheckedKeys();
-      checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
-      return checkedKeys;
-    },
-    // 鎵�鏈夐儴闂ㄨ妭鐐规暟鎹�
-    getDeptAllCheckedKeys() {
-      // 鐩墠琚�変腑鐨勯儴闂ㄨ妭鐐�
-      let checkedKeys = this.$refs.dept.getHalfCheckedKeys();
-      // 鍗婇�変腑鐨勯儴闂ㄨ妭鐐�
-      let halfCheckedKeys = this.$refs.dept.getCheckedKeys();
-      checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
-      return checkedKeys;
-    },
-    /** 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟鏍戠粨鏋� */
-    getRoleMenuTreeselect(roleId) {
-      roleMenuTreeselect(roleId).then(response => {
-        this.getMenuTreeselect();
-        this.$refs.menu.setCheckedKeys(response.data);
-      });
-    },
-    /** 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戠粨鏋� */
-    getRoleDeptTreeselect(roleId) {
-      roleDeptTreeselect(roleId).then(response => {
-        this.getDeptTreeselect();
-        this.$refs.dept.setCheckedKeys(response.data);
-      });
-    },
-    // 瑙掕壊鐘舵�佷慨鏀�
-    handleStatusChange(row) {
-      let text = row.status === "0" ? "鍚敤" : "鍋滅敤";
-      this.$confirm('纭瑕�"' + text + '""' + row.roleName + '"瑙掕壊鍚�?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return changeRoleStatus(row.roleId, row.status);
-      }).then(() => {
-        this.msgSuccess(text + "鎴愬姛");
-      }).catch(function () {
-        row.status = row.status === "0" ? "1" : "0";
-      });
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 鍙栨秷鎸夐挳锛堟暟鎹潈闄愶級
-    cancelDataScope() {
-      this.openDataScope = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      if (this.$refs.tree != undefined) {
-        this.$refs.tree.setCheckedKeys([]);
-      }
-      this.form = {
-        roleId: undefined,
-        roleName: undefined,
-        roleKey: undefined,
-        roleSort: 1,
-        status: "0",
-        menuIds: [],
-        deptIds: [],
-        remark: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.dateRange = [];
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.roleId)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.getMenuTreeselect();
-      this.open = true;
-      this.title = "娣诲姞瑙掕壊";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const roleId = row.roleId || this.ids
-      this.$nextTick(() => {
-        this.getRoleMenuTreeselect(roleId);
-      });
-      getRole(roleId).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼瑙掕壊";
-      });
-    },
-    /** 鍒嗛厤鏁版嵁鏉冮檺鎿嶄綔 */
-    handleDataScope(row) {
-      this.reset();
-      this.$nextTick(() => {
-        this.getRoleDeptTreeselect(row.roleId);
-      });
-      getRole(row.roleId).then(response => {
-        this.form = response.data;
-        this.openDataScope = true;
-        this.title = "鍒嗛厤鏁版嵁鏉冮檺";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.roleId != undefined) {
-            this.form.menuIds = this.getMenuAllCheckedKeys();
-            updateRole(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            this.form.menuIds = this.getMenuAllCheckedKeys();
-            addRole(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鎻愪氦鎸夐挳锛堟暟鎹潈闄愶級 */
-    submitDataScope: function () {
-      if (this.form.roleId != undefined) {
-        this.form.deptIds = this.getDeptAllCheckedKeys();
-        dataScope(this.form).then(response => {
-          if (response.code === 200) {
-            this.msgSuccess("淇敼鎴愬姛");
-            this.openDataScope = false;
-            this.getList();
-          } else {
-            this.msgError(response.msg);
-          }
-        });
-      }
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const roleIds = row.roleId || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎瑙掕壊缂栧彿涓�"' + roleIds + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return delRole(roleIds);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function () {
-      });
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夎鑹叉暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportRole(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-</style>
diff --git a/energy_management_ui/src/views/system/user/index.vue b/energy_management_ui/src/views/system/user/index.vue
deleted file mode 100644
index 6242229..0000000
--- a/energy_management_ui/src/views/system/user/index.vue
+++ /dev/null
@@ -1,742 +0,0 @@
-<template>
-  <div>
-    <el-row type="flex">
-      <!--閮ㄩ棬鏁版嵁-->
-      <el-col :style="{width:isCollapse?'0': '280px',position:'relative'}" v-show="!isCollapse">
-        <basic-container :bodyStyle="leftBodyStyle" title="鐢ㄦ埛绠$悊">
-          <div>
-            <el-input
-                v-model="deptName"
-                placeholder="璇疯緭鍏ラ儴闂ㄥ悕绉�"
-                clearable
-                size="small"
-                prefix-icon="el-icon-search"
-                style="margin-bottom: 20px"
-            />
-          </div>
-          <div style="overflow: auto">
-            <el-tree
-                :data="deptOptions"
-                :props="defaultProps"
-                :expand-on-click-node="false"
-                :filter-node-method="filterNode"
-                ref="tree"
-                default-expand-all
-                highlight-current
-                @node-click="handleNodeClick"
-            />
-          </div>
-        </basic-container>
-        <img src="~@/assets/image/rectangle.png" alt=""
-             class="shrink-col-block"
-             @click="toggleCollapse">
-      </el-col>
-      <!--鐢ㄦ埛鏁版嵁-->
-      <ShrinkCol @toggleCollapse="toggleCollapse" v-show="isCollapse"/>
-      <el-col :style="{width:isCollapse? 'calc(100% - 48px)':'calc(100% - 280px)',paddingLeft:isCollapse? 0:'14px'}">
-        <div>
-          <basic-container>
-            <el-form class="special-form" :model="queryParams" ref="queryForm" label-width="73px">
-              <el-row :gutter="24">
-                <el-col :span="8">
-                  <el-form-item label="鐢ㄦ埛鍚嶇О" prop="userName">
-                    <el-input
-                        v-model="queryParams.userName"
-                        placeholder="璇疯緭鍏ョ敤鎴峰悕绉�"
-                        clearable
-                        size="small"
-                        @keyup.enter.native="handleQuery"
-                    />
-                  </el-form-item>
-                </el-col>
-                <el-col :span="8">
-                  <el-form-item label="鎵嬫満鍙风爜" prop="phonenumber">
-                    <el-input
-                        v-model="queryParams.phonenumber"
-                        placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�"
-                        clearable
-                        size="small"
-                        @keyup.enter.native="handleQuery"
-                    />
-                  </el-form-item>
-                </el-col>
-                <!--                <el-col :span="8">-->
-                <!--                  <el-form-item label="鐘舵��" prop="status">-->
-                <!--                    <el-select-->
-                <!--                        v-model="queryParams.status"-->
-                <!--                        placeholder="鐢ㄦ埛鐘舵��"-->
-                <!--                        clearable-->
-                <!--                        size="small"-->
-                <!--                        style="width: 100%"-->
-                <!--                    >-->
-                <!--                      <el-option-->
-                <!--                          v-for="dict in statusOptions"-->
-                <!--                          :key="dict.dictValue"-->
-                <!--                          :label="dict.dictLabel"-->
-                <!--                          :value="dict.dictValue"-->
-                <!--                      />-->
-                <!--                    </el-select>-->
-                <!--                  </el-form-item>-->
-                <!--                </el-col>-->
-                <!--                <el-col :span="8">-->
-                <!--                  <el-form-item label="鍒涘缓鏃堕棿">-->
-                <!--                    <el-date-picker-->
-                <!--                        v-model="dateRange"-->
-                <!--                        size="small"-->
-                <!--                        style="width: 100%"-->
-                <!--                        value-format="yyyy-MM-dd"-->
-                <!--                        type="daterange"-->
-                <!--                        range-separator="-"-->
-                <!--                        start-placeholder="寮�濮嬫棩鏈�"-->
-                <!--                        end-placeholder="缁撴潫鏃ユ湡"-->
-                <!--                    ></el-date-picker>-->
-                <!--                  </el-form-item>-->
-                <!--                </el-col>-->
-                <el-col :span="8">
-                  <el-form-item class="operation">
-                    <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-                    <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-                  </el-form-item>
-                </el-col>
-              </el-row>
-            </el-form>
-          </basic-container>
-        </div>
-        <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
-          <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
-            <el-col :span="1.5">
-              <el-button
-                  type="primary"
-                  icon="el-icon-plus"
-                  size="mini"
-                  @click="handleAdd"
-                  v-hasPermi="['system:user:add']"
-              >鏂板
-              </el-button>
-            </el-col>
-            <el-col :span="1.5">
-              <el-button
-                  type="success"
-                  icon="el-icon-edit"
-                  size="mini"
-                  :disabled="single"
-                  @click="handleUpdate"
-                  v-hasPermi="['system:user:edit']"
-              >淇敼
-              </el-button>
-            </el-col>
-            <el-col :span="1.5">
-              <el-button
-                  type="danger"
-                  icon="el-icon-delete"
-                  size="mini"
-                  :disabled="multiple"
-                  @click="handleDelete"
-                  v-hasPermi="['system:user:remove']"
-              >鍒犻櫎
-              </el-button>
-            </el-col>
-            <el-col :span="1.5">
-              <el-button
-                  type="info"
-                  icon="el-icon-upload2"
-                  size="mini"
-                  @click="handleImport"
-                  v-hasPermi="['system:user:import']"
-              >瀵煎叆
-              </el-button>
-            </el-col>
-            <el-col :span="1.5">
-              <el-button
-                  type="warning"
-                  icon="el-icon-download"
-                  size="mini"
-                  @click="handleExport"
-                  v-hasPermi="['system:user:export']"
-              >瀵煎嚭
-              </el-button>
-            </el-col>
-          </el-row>
-          <el-table v-loading="loading" :data="userList"
-                    :height="height"
-                    @selection-change="handleSelectionChange">
-            <el-table-column type="selection" width="50" align="center" label=""/>
-            <el-table-column label="鐢ㄦ埛缂栧彿" align="center" prop="userId"/>
-            <el-table-column label="鐢ㄦ埛鍚嶇О" align="center" prop="userName" :show-overflow-tooltip="true"/>
-            <el-table-column label="鐢ㄦ埛鏄电О" align="center" prop="nickName" :show-overflow-tooltip="true"/>
-            <el-table-column label="閮ㄩ棬" align="center" prop="dept.deptName" :show-overflow-tooltip="true"/>
-            <el-table-column label="鎵嬫満鍙风爜" align="center" prop="phonenumber" width="120"/>
-            <el-table-column label="鐘舵��" align="center">
-              <template slot-scope="scope">
-                <el-switch
-                    v-model="scope.row.status"
-                    active-value="0"
-                    inactive-value="1"
-                    @change="handleStatusChange(scope.row)"
-                ></el-switch>
-              </template>
-            </el-table-column>
-            <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="160">
-              <template slot-scope="scope">
-                <span>{{ parseTime(scope.row.createTime) }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column
-                label="鎿嶄綔"
-                align="center"
-                width="180"
-                fixed="right"
-                class-name="small-padding fixed-width"
-            >
-              <template slot-scope="scope">
-                <el-button
-                    size="mini"
-                    type="text"
-                    icon="el-icon-edit"
-                    @click="handleUpdate(scope.row)"
-                    v-hasPermi="['system:user:edit']"
-                >淇敼
-                </el-button>
-                <el-button
-                    v-if="scope.row.userId !== 1"
-                    size="mini"
-                    type="text"
-                    icon="el-icon-delete"
-                    @click="handleDelete(scope.row)"
-                    v-hasPermi="['system:user:remove']"
-                >鍒犻櫎
-                </el-button>
-                <el-button
-                    size="mini"
-                    type="text"
-                    icon="el-icon-key"
-                    @click="handleResetPwd(scope.row)"
-                    v-hasPermi="['system:user:resetPwd']"
-                >閲嶇疆
-                </el-button>
-              </template>
-            </el-table-column>
-          </el-table>
-          <pagination
-              :total="total"
-              :page.sync="queryParams.pageNum"
-              :limit.sync="queryParams.pageSize"
-              @pagination="getList"
-          />
-        </basic-container>
-      </el-col>
-    </el-row>
-
-    <!-- 娣诲姞鎴栦慨鏀瑰弬鏁伴厤缃璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="600px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="鐢ㄦ埛鏄电О" prop="nickName">
-              <el-input v-model="form.nickName" placeholder="璇疯緭鍏ョ敤鎴锋樀绉�"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="褰掑睘閮ㄩ棬" prop="deptId">
-              <treeselect v-model="form.deptId" :options="deptOptions" placeholder="璇烽�夋嫨褰掑睘閮ㄩ棬"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鎵嬫満鍙风爜" prop="phonenumber">
-              <el-input v-model="form.phonenumber" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="11"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="閭" prop="email">
-              <el-input v-model="form.email" placeholder="璇疯緭鍏ラ偖绠�" maxlength="50"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鐢ㄦ埛鍚嶇О" prop="userName">
-              <el-input v-model="form.userName" placeholder="璇疯緭鍏ョ敤鎴峰悕绉�"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item v-if="form.userId == undefined" label="鐢ㄦ埛瀵嗙爜" prop="password">
-              <el-input v-model="form.password" placeholder="璇疯緭鍏ョ敤鎴峰瘑鐮�" type="password"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鐢ㄦ埛鎬у埆">
-              <el-select v-model="form.sex" placeholder="璇烽�夋嫨">
-                <el-option
-                    v-for="dict in sexOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictLabel"
-                    :value="dict.dictValue"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鐘舵��">
-              <el-radio-group v-model="form.status">
-                <el-radio
-                    v-for="dict in statusOptions"
-                    :key="dict.dictValue"
-                    :label="dict.dictValue"
-                >{{ dict.dictLabel }}
-                </el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
-
-          <el-col :span="12">
-            <el-form-item label="宀椾綅">
-              <el-select v-model="form.postIds" multiple placeholder="璇烽�夋嫨">
-                <el-option
-                    v-for="item in postOptions"
-                    :key="item.postId"
-                    :label="item.postName"
-                    :value="item.postId"
-                    :disabled="item.status == 1"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="瑙掕壊">
-              <el-select v-model="form.roleIds" multiple placeholder="璇烽�夋嫨">
-                <el-option
-                    v-for="item in roleOptions"
-                    :key="item.roleId"
-                    :label="item.roleName"
-                    :value="item.roleId"
-                    :disabled="item.status == 1"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="澶囨敞">
-              <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-
-    <!-- 鐢ㄦ埛瀵煎叆瀵硅瘽妗� -->
-    <el-dialog :title="upload.title" :visible.sync="upload.open" :destroy-on-close="true" width="400px">
-      <el-upload
-          ref="upload"
-          :limit="1"
-          accept=".xlsx, .xls"
-          :headers="upload.headers"
-          :action="upload.url + '?updateSupport=' + upload.updateSupport"
-          :disabled="upload.isUploading"
-          :on-progress="handleFileUploadProgress"
-          :on-success="handleFileSuccess"
-          :auto-upload="false"
-          drag
-      >
-        <i class="el-icon-upload"></i>
-        <div class="el-upload__text">
-          灏嗘枃浠舵嫋鍒版澶勶紝鎴�
-          <em>鐐瑰嚮涓婁紶</em>
-        </div>
-        <div class="el-upload__tip" slot="tip">
-          <el-checkbox v-model="upload.updateSupport"/>
-          鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹�
-          <el-link type="info" style="font-size:12px" @click="importTemplate">涓嬭浇妯℃澘</el-link>
-        </div>
-        <div class="el-upload__tip" style="color:red" slot="tip">鎻愮ず锛氫粎鍏佽瀵煎叆鈥渪ls鈥濇垨鈥渪lsx鈥濇牸寮忔枃浠讹紒</div>
-      </el-upload>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button>
-        <el-button @click="upload.open = false">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {
-  listUser,
-  getUser,
-  delUser,
-  addUser,
-  updateUser,
-  exportUser,
-  resetUserPwd,
-  changeUserStatus,
-  importTemplate
-} from '@/api/system/user'
-import { getToken } from '@/utils/auth'
-import { treeselect } from '@/api/system/dept'
-import Treeselect from '@riophae/vue-treeselect'
-import '@riophae/vue-treeselect/dist/vue-treeselect.css'
-import mixins from '@/layout/mixin/getHeight'
-import ShrinkCol from '@/components/shrink/index.vue'
-
-export default {
-  name: 'User',
-  components: { Treeselect, ShrinkCol },
-  mixins: [mixins],
-  data() {
-    return {
-      isCollapse: false,
-      height: null,
-      leftBodyStyle: {},
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鐢ㄦ埛琛ㄦ牸鏁版嵁
-      userList: null,
-      // 寮瑰嚭灞傛爣棰�
-      title: '',
-      // 閮ㄩ棬鏍戦�夐」
-      deptOptions: undefined,
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 閮ㄩ棬鍚嶇О
-      deptName: undefined,
-      // 榛樿瀵嗙爜
-      initPassword: undefined,
-      // 鏃ユ湡鑼冨洿
-      dateRange: [],
-      // 鐘舵�佹暟鎹瓧鍏�
-      statusOptions: [],
-      // 鎬у埆鐘舵�佸瓧鍏�
-      sexOptions: [],
-      // 宀椾綅閫夐」
-      postOptions: [],
-      // 瑙掕壊閫夐」
-      roleOptions: [],
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      defaultProps: {
-        children: 'children',
-        label: 'label'
-      },
-      // 鐢ㄦ埛瀵煎叆鍙傛暟
-      upload: {
-        // 鏄惁鏄剧ず寮瑰嚭灞傦紙鐢ㄦ埛瀵煎叆锛�
-        open: false,
-        // 寮瑰嚭灞傛爣棰橈紙鐢ㄦ埛瀵煎叆锛�
-        title: '',
-        // 鏄惁绂佺敤涓婁紶
-        isUploading: false,
-        // 鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹�
-        updateSupport: 0,
-        // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-        headers: { Authorization: 'Bearer ' + getToken() },
-        // 涓婁紶鐨勫湴鍧�
-        url: process.env.VUE_APP_BASE_API + '/system/user/importData'
-      },
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        userName: undefined,
-        phonenumber: undefined,
-        status: undefined,
-        beginTime: undefined,
-        endTime: undefined,
-        deptId: undefined
-      },
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        userName: [
-          { required: true, message: '鐢ㄦ埛鍚嶇О涓嶈兘涓虹┖', trigger: 'blur' }
-        ],
-        nickName: [
-          { required: true, message: '鐢ㄦ埛鏄电О涓嶈兘涓虹┖', trigger: 'blur' }
-        ],
-        deptId: [
-          { required: true, message: '褰掑睘閮ㄩ棬涓嶈兘涓虹┖', trigger: 'blur' }
-        ],
-        password: [
-          { required: true, message: '鐢ㄦ埛瀵嗙爜涓嶈兘涓虹┖', trigger: 'blur' }
-        ],
-        email: [
-          {
-            type: 'email',
-            message: '\'璇疯緭鍏ユ纭殑閭鍦板潃',
-            trigger: ['blur', 'change']
-          }
-        ],
-        phonenumber: [
-          {
-            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
-            message: '璇疯緭鍏ユ纭殑鎵嬫満鍙风爜',
-            trigger: 'blur'
-          }
-        ]
-      }
-    }
-  },
-  watch: {
-    // 鏍规嵁鍚嶇О绛涢�夐儴闂ㄦ爲
-    deptName(val) {
-      this.$refs.tree.filter(val)
-    }
-  },
-  created() {
-    this.getList()
-    this.getTreeselect()
-    this.getDicts('sys_normal_disable').then(response => {
-      this.statusOptions = response.data
-    })
-    this.getDicts('sys_user_sex').then(response => {
-      this.sexOptions = response.data
-    })
-    this.getConfigKey('sys.user.initPassword').then(response => {
-      this.initPassword = response.data
-    })
-  },
-  methods: {
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse
-    },
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 210 + 'px',
-        overflow: 'hidden'
-      }
-      this.leftBodyStyle = {
-        height: window.innerHeight - 100 + 'px',
-        overflow: 'auto'
-      }
-      this.height = window.innerHeight - 370
-    },
-    /** 鏌ヨ鐢ㄦ埛鍒楄〃 */
-    getList() {
-      this.loading = true
-      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
-            this.userList = response.rows
-            this.total = response.total
-            this.loading = false
-          }
-      )
-    },
-    /** 鏌ヨ閮ㄩ棬涓嬫媺鏍戠粨鏋� */
-    getTreeselect() {
-      treeselect().then(response => {
-        this.deptOptions = response.data
-      })
-    },
-    // 绛涢�夎妭鐐�
-    filterNode(value, data) {
-      if (!value) return true
-      return data.label.indexOf(value) !== -1
-    },
-    // 鑺傜偣鍗曞嚮浜嬩欢
-    handleNodeClick(data) {
-      this.queryParams.deptId = data.id
-      this.getList()
-    },
-    // 鐢ㄦ埛鐘舵�佷慨鏀�
-    handleStatusChange(row) {
-      let text = row.status === '0' ? '鍚敤' : '鍋滅敤'
-      this.$confirm('纭瑕�"' + text + '""' + row.userName + '"鐢ㄦ埛鍚�?', '璀﹀憡', {
-        confirmButtonText: '纭畾',
-        cancelButtonText: '鍙栨秷',
-        type: 'warning'
-      }).then(function() {
-        return changeUserStatus(row.userId, row.status)
-      }).then(() => {
-        this.msgSuccess(text + '鎴愬姛')
-      }).catch(function() {
-        row.status = row.status === '0' ? '1' : '0'
-      })
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false
-      this.reset()
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        userId: undefined,
-        deptId: undefined,
-        userName: undefined,
-        nickName: undefined,
-        password: undefined,
-        phonenumber: undefined,
-        email: undefined,
-        sex: undefined,
-        status: '0',
-        remark: undefined,
-        postIds: [],
-        roleIds: []
-      }
-      this.resetForm('form')
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.page = 1
-      this.getList()
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.dateRange = []
-      this.resetForm('queryForm')
-      this.handleQuery()
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.userId)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset()
-      this.getTreeselect()
-      getUser().then(response => {
-        this.postOptions = response.posts
-        this.roleOptions = response.roles
-        this.open = true
-        this.title = '娣诲姞鐢ㄦ埛'
-        this.form.password = this.initPassword
-      })
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset()
-      this.getTreeselect()
-      const userId = row.userId || this.ids
-      getUser(userId).then(response => {
-        this.form = response.data
-        this.postOptions = response.posts
-        this.roleOptions = response.roles
-        this.form.postIds = response.postIds
-        this.form.roleIds = response.roleIds
-        this.open = true
-        this.title = '淇敼鐢ㄦ埛'
-        this.form.password = ''
-      })
-    },
-    /** 閲嶇疆瀵嗙爜鎸夐挳鎿嶄綔 */
-    handleResetPwd(row) {
-      this.$prompt('璇疯緭鍏�"' + row.userName + '"鐨勬柊瀵嗙爜', '鎻愮ず', {
-        confirmButtonText: '纭畾',
-        cancelButtonText: '鍙栨秷'
-      }).then(({ value }) => {
-        resetUserPwd(row.userId, value).then(response => {
-          if (response.code === 200) {
-            this.msgSuccess('淇敼鎴愬姛锛屾柊瀵嗙爜鏄細' + value)
-          } else {
-            this.msgError(response.msg)
-          }
-        })
-      }).catch(() => {
-      })
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs['form'].validate(valid => {
-        if (valid) {
-          if (this.form.userId != undefined) {
-            updateUser(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess('淇敼鎴愬姛')
-                this.open = false
-                this.getList()
-              } else {
-                this.msgError(response.msg)
-              }
-            })
-          } else {
-            addUser(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess('鏂板鎴愬姛')
-                this.open = false
-                this.getList()
-              } else {
-                this.msgError(response.msg)
-              }
-            })
-          }
-        }
-      })
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const userIds = row.userId || this.ids
-      this.$confirm('鏄惁纭鍒犻櫎鐢ㄦ埛缂栧彿涓�"' + userIds + '"鐨勬暟鎹」?', '璀﹀憡', {
-        confirmButtonText: '纭畾',
-        cancelButtonText: '鍙栨秷',
-        type: 'warning'
-      }).then(function() {
-        return delUser(userIds)
-      }).then(() => {
-        this.getList()
-        this.msgSuccess('鍒犻櫎鎴愬姛')
-      }).catch(function() {
-      })
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夌敤鎴锋暟鎹」?', '璀﹀憡', {
-        confirmButtonText: '纭畾',
-        cancelButtonText: '鍙栨秷',
-        type: 'warning'
-      }).then(function() {
-        return exportUser(queryParams)
-      }).then(response => {
-        this.download(response.msg)
-      }).catch(function() {
-      })
-    },
-    /** 瀵煎叆鎸夐挳鎿嶄綔 */
-    handleImport() {
-      this.upload.title = '鐢ㄦ埛瀵煎叆'
-      this.upload.open = true
-    },
-    /** 涓嬭浇妯℃澘鎿嶄綔 */
-    importTemplate() {
-      importTemplate().then(response => {
-        this.download(response.msg)
-      })
-    },
-    // 鏂囦欢涓婁紶涓鐞�
-    handleFileUploadProgress(event, file, fileList) {
-      this.upload.isUploading = true
-    },
-    // 鏂囦欢涓婁紶鎴愬姛澶勭悊
-    handleFileSuccess(response, file, fileList) {
-      this.upload.open = false
-      this.upload.isUploading = false
-      this.$refs.upload.clearFiles()
-      this.$alert(response.msg, '瀵煎叆缁撴灉', { dangerouslyUseHTMLString: true })
-      this.getList()
-    },
-    // 鎻愪氦涓婁紶鏂囦欢
-    submitFileForm() {
-      this.$refs.upload.submit()
-    }
-  }
-}
-</script>
-<style scoped lang="scss">
-.special-form {
-  @import "~@/assets/styles/common-table-form.scss";
-}
-.shrink-col-block {
-  position: absolute;
-  top: 20px;
-  right: 16px;
-  cursor: pointer;
-}
-</style>
diff --git a/energy_management_ui/src/views/system/user/profile/index.vue b/energy_management_ui/src/views/system/user/profile/index.vue
deleted file mode 100644
index 31d7ab1..0000000
--- a/energy_management_ui/src/views/system/user/profile/index.vue
+++ /dev/null
@@ -1,106 +0,0 @@
-<template>
-  <el-row>
-    <el-col class="page-left">
-      <basic-container :bodyStyle="bodyStyle" title="涓汉淇℃伅">
-        <div>
-          <div class="text-center">
-            <userAvatar :user="user"/>
-          </div>
-          <ul class="list-group list-group-striped">
-            <li class="list-group-item">
-              <svg-icon icon-class="user"/>
-              鐢ㄦ埛鍚嶇О
-              <div class="pull-right">{{ user.userName }}</div>
-            </li>
-            <li class="list-group-item">
-              <svg-icon icon-class="phone"/>
-              鎵嬫満鍙风爜
-              <div class="pull-right">{{ user.phonenumber }}</div>
-            </li>
-            <li class="list-group-item">
-              <svg-icon icon-class="email"/>
-              鐢ㄦ埛閭
-              <div class="pull-right">{{ user.email }}</div>
-            </li>
-            <li class="list-group-item">
-              <svg-icon icon-class="tree"/>
-              鎵�灞為儴闂�
-              <div class="pull-right" v-if="user.dept">{{ user.dept.deptName }} / {{ postGroup }}</div>
-            </li>
-            <li class="list-group-item">
-              <svg-icon icon-class="peoples"/>
-              鎵�灞炶鑹�
-              <div class="pull-right">{{ roleGroup }}</div>
-            </li>
-            <li class="list-group-item">
-              <svg-icon icon-class="date"/>
-              鍒涘缓鏃ユ湡
-              <div class="pull-right">2018-08-23 09:11:56</div>
-            </li>
-          </ul>
-        </div>
-      </basic-container>
-    </el-col>
-    <el-col class="page-right">
-      <basic-container :bodyStyle="bodyStyle" title="鍩烘湰璧勬枡">
-        <el-tabs v-model="activeTab">
-          <el-tab-pane label="鍩烘湰璧勬枡" name="userinfo">
-            <userInfo :user="user"/>
-          </el-tab-pane>
-          <el-tab-pane label="淇敼瀵嗙爜" name="resetPwd">
-            <resetPwd :user="user"/>
-          </el-tab-pane>
-        </el-tabs>
-      </basic-container>
-    </el-col>
-  </el-row>
-</template>
-
-<script>
-import userAvatar from "./userAvatar";
-import userInfo from "./userInfo";
-import resetPwd from "./resetPwd";
-import {getUserProfile} from "@/api/system/user";
-import mixins from "@/layout/mixin/getHeight";
-
-export default {
-  components: {userAvatar, userInfo, resetPwd},
-  mixins: [mixins],
-  data() {
-    return {
-      user: {},
-      roleGroup: {},
-      postGroup: {},
-      activeTab: "userinfo"
-    };
-  },
-  created() {
-    this.getUser();
-  },
-  methods: {
-    setCharts() {
-      this.bodyStyle = {
-        height: window.innerHeight - 155 + 'px',
-        overflow: 'hidden'
-      }
-    },
-    getUser() {
-      getUserProfile().then(response => {
-        this.user = response.data;
-        this.roleGroup = response.roleGroup;
-        this.postGroup = response.postGroup;
-      });
-    }
-  }
-};
-</script>
-<style scoped lang="scss">
-.page-left {
-  width: 45%;
-}
-
-.page-right {
-  width: 55%;
-  padding-left: 14px;
-}
-</style>
\ No newline at end of file
diff --git a/energy_management_ui/src/views/system/user/profile/resetPwd.vue b/energy_management_ui/src/views/system/user/profile/resetPwd.vue
deleted file mode 100644
index 3de5dfd..0000000
--- a/energy_management_ui/src/views/system/user/profile/resetPwd.vue
+++ /dev/null
@@ -1,76 +0,0 @@
-<template>
-  <el-form ref="form" :model="user" :rules="rules" label-width="80px">
-    <el-form-item label="鏃у瘑鐮�" prop="oldPassword">
-      <el-input v-model="user.oldPassword" placeholder="璇疯緭鍏ユ棫瀵嗙爜" type="password" />
-    </el-form-item>
-    <el-form-item label="鏂板瘑鐮�" prop="newPassword">
-      <el-input v-model="user.newPassword" placeholder="璇疯緭鍏ユ柊瀵嗙爜" type="password" />
-    </el-form-item>
-    <el-form-item label="纭瀵嗙爜" prop="confirmPassword">
-      <el-input v-model="user.confirmPassword" placeholder="璇风‘璁ゅ瘑鐮�" type="password" />
-    </el-form-item>
-    <el-form-item>
-      <el-button type="primary" size="mini" @click="submit">淇濆瓨</el-button>
-      <el-button type="danger" size="mini" @click="close">鍏抽棴</el-button>
-    </el-form-item>
-  </el-form>
-</template>
-
-<script>
-import { updateUserPwd } from "@/api/system/user";
-
-export default {
-  data() {
-    const equalToPassword = (rule, value, callback) => {
-      if (this.user.newPassword !== value) {
-        callback(new Error("涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�"));
-      } else {
-        callback();
-      }
-    };
-    return {
-      test: "1test",
-      user: {
-        oldPassword: undefined,
-        newPassword: undefined,
-        confirmPassword: undefined
-      },
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        oldPassword: [
-          { required: true, message: "鏃у瘑鐮佷笉鑳戒负绌�", trigger: "blur" }
-        ],
-        newPassword: [
-          { required: true, message: "鏂板瘑鐮佷笉鑳戒负绌�", trigger: "blur" },
-          { min: 6, max: 20, message: "闀垮害鍦� 6 鍒� 20 涓瓧绗�", trigger: "blur" }
-        ],
-        confirmPassword: [
-          { required: true, message: "纭瀵嗙爜涓嶈兘涓虹┖", trigger: "blur" },
-          { required: true, validator: equalToPassword, trigger: "blur" }
-        ]
-      }
-    };
-  },
-  methods: {
-    submit() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          updateUserPwd(this.user.oldPassword, this.user.newPassword).then(
-            response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-              } else {
-                this.msgError(response.msg);
-              }
-            }
-          );
-        }
-      });
-    },
-    close() {
-      this.$store.dispatch("tagsView/delView", this.$route);
-      this.$router.push({ path: "/index" });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/system/user/profile/userAvatar.vue b/energy_management_ui/src/views/system/user/profile/userAvatar.vue
deleted file mode 100644
index eddcd81..0000000
--- a/energy_management_ui/src/views/system/user/profile/userAvatar.vue
+++ /dev/null
@@ -1,138 +0,0 @@
-<template>
-  <div>
-    <img v-bind:src="options.img" @click="editCropper()" title="鐐瑰嚮涓婁紶澶村儚" class="img-circle img-lg" />
-    <el-dialog :title="title" :visible.sync="open" width="800px">
-      <el-row>
-        <el-col :xs="24" :md="12" :style="{height: '350px'}">
-          <vue-cropper
-            ref="cropper"
-            :img="options.img"
-            :info="true"
-            :autoCrop="options.autoCrop"
-            :autoCropWidth="options.autoCropWidth"
-            :autoCropHeight="options.autoCropHeight"
-            :fixedBox="options.fixedBox"
-            @realTime="realTime"
-          />
-        </el-col>
-        <el-col :xs="24" :md="12" :style="{height: '350px'}">
-          <div class="avatar-upload-preview">
-            <img :src="previews.url" :style="previews.img" />
-          </div>
-        </el-col>
-      </el-row>
-      <br />
-      <el-row>
-        <el-col :lg="2" :md="2">
-          <el-upload action="#" :http-request="requestUpload" :show-file-list="false" :before-upload="beforeUpload">
-            <el-button size="small">
-              涓婁紶
-              <i class="el-icon-upload el-icon--right"></i>
-            </el-button>
-          </el-upload>
-        </el-col>
-        <el-col :lg="{span: 1, offset: 2}" :md="2">
-          <el-button icon="el-icon-plus" size="small" @click="changeScale(1)"></el-button>
-        </el-col>
-        <el-col :lg="{span: 1, offset: 1}" :md="2">
-          <el-button icon="el-icon-minus" size="small" @click="changeScale(-1)"></el-button>
-        </el-col>
-        <el-col :lg="{span: 1, offset: 1}" :md="2">
-          <el-button icon="el-icon-refresh-left" size="small" @click="rotateLeft()"></el-button>
-        </el-col>
-        <el-col :lg="{span: 1, offset: 1}" :md="2">
-          <el-button icon="el-icon-refresh-right" size="small" @click="rotateRight()"></el-button>
-        </el-col>
-        <el-col :lg="{span: 2, offset: 6}" :md="2">
-          <el-button type="primary" size="small" @click="uploadImg()">鎻� 浜�</el-button>
-        </el-col>
-      </el-row>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import store from "@/store";
-import { VueCropper } from "vue-cropper";
-import { uploadAvatar } from "@/api/system/user";
-
-export default {
-  components: { VueCropper },
-  props: {
-    user: {
-      type: Object
-    }
-  },
-  data() {
-    return {
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 寮瑰嚭灞傛爣棰�
-      title: "淇敼澶村儚",
-      options: {
-        img: store.getters.avatar, //瑁佸壀鍥剧墖鐨勫湴鍧�
-        autoCrop: true, // 鏄惁榛樿鐢熸垚鎴浘妗�
-        autoCropWidth: 200, // 榛樿鐢熸垚鎴浘妗嗗搴�
-        autoCropHeight: 200, // 榛樿鐢熸垚鎴浘妗嗛珮搴�
-        fixedBox: true // 鍥哄畾鎴浘妗嗗ぇ灏� 涓嶅厑璁告敼鍙�
-      },
-      previews: {}
-    };
-  },
-  methods: {
-    // 缂栬緫澶村儚
-    editCropper() {
-      this.open = true;
-    },
-    // 瑕嗙洊榛樿鐨勪笂浼犺涓�
-    requestUpload() {
-    },
-    // 鍚戝乏鏃嬭浆
-    rotateLeft() {
-      this.$refs.cropper.rotateLeft();
-    },
-    // 鍚戝彸鏃嬭浆
-    rotateRight() {
-      this.$refs.cropper.rotateRight();
-    },
-    // 鍥剧墖缂╂斁
-    changeScale(num) {
-      num = num || 1;
-      this.$refs.cropper.changeScale(num);
-    },
-    // 涓婁紶棰勫鐞�
-    beforeUpload(file) {
-      if (file.type.indexOf("image/") == -1) {
-        this.msgError("鏂囦欢鏍煎紡閿欒锛岃涓婁紶鍥剧墖绫诲瀷,濡傦細JPG锛孭NG鍚庣紑鐨勬枃浠躲��");
-      } else {
-        const reader = new FileReader();
-        reader.readAsDataURL(file);
-        reader.onload = () => {
-          this.options.img = reader.result;
-        };
-      }
-    },
-    // 涓婁紶鍥剧墖
-    uploadImg() {
-      this.$refs.cropper.getCropBlob(data => {
-        let formData = new FormData();
-        formData.append("avatarfile", data);
-        uploadAvatar(formData).then(response => {
-          if (response.code === 200) {
-            this.open = false;
-            this.options.img = process.env.VUE_APP_BASE_API + response.imgUrl;
-            this.msgSuccess("淇敼鎴愬姛");
-          } else {
-            this.msgError(response.msg);
-          }
-          this.$refs.cropper.clearCrop();
-        });
-      });
-    },
-    // 瀹炴椂棰勮
-    realTime(data) {
-      this.previews = data;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/system/user/profile/userInfo.vue b/energy_management_ui/src/views/system/user/profile/userInfo.vue
deleted file mode 100644
index e50198f..0000000
--- a/energy_management_ui/src/views/system/user/profile/userInfo.vue
+++ /dev/null
@@ -1,80 +0,0 @@
-<template>
-  <el-form ref="form" :model="user" :rules="rules" label-width="80px">
-    <el-form-item label="鐢ㄦ埛鏄电О" prop="nickName">
-      <el-input v-model="user.nickName" />
-    </el-form-item> 
-    <el-form-item label="鎵嬫満鍙风爜" prop="phonenumber">
-      <el-input v-model="user.phonenumber" maxlength="11" />
-    </el-form-item>
-    <el-form-item label="閭" prop="email">
-      <el-input v-model="user.email" maxlength="50" />
-    </el-form-item>
-    <el-form-item label="鎬у埆">
-      <el-radio-group v-model="user.sex">
-        <el-radio label="0">鐢�</el-radio>
-        <el-radio label="1">濂�</el-radio>
-      </el-radio-group>
-    </el-form-item>
-    <el-form-item>
-      <el-button type="primary" size="mini" @click="submit">淇濆瓨</el-button>
-      <el-button type="danger" size="mini" @click="close">鍏抽棴</el-button>
-    </el-form-item>
-  </el-form>
-</template>
-
-<script>
-import { updateUserProfile } from "@/api/system/user";
-
-export default {
-  props: {
-    user: {
-      type: Object
-    }
-  },
-  data() {
-    return {
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        nickName: [
-          { required: true, message: "鐢ㄦ埛鏄电О涓嶈兘涓虹┖", trigger: "blur" }
-        ],
-        email: [
-          { required: true, message: "閭鍦板潃涓嶈兘涓虹┖", trigger: "blur" },
-          {
-            type: "email",
-            message: "'璇疯緭鍏ユ纭殑閭鍦板潃",
-            trigger: ["blur", "change"]
-          }
-        ],
-        phonenumber: [
-          { required: true, message: "鎵嬫満鍙风爜涓嶈兘涓虹┖", trigger: "blur" },
-          {
-            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
-            message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜",
-            trigger: "blur"
-          }
-        ]
-      }
-    };
-  },
-  methods: {
-    submit() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          updateUserProfile(this.user).then(response => {
-            if (response.code === 200) {
-              this.msgSuccess("淇敼鎴愬姛");
-            } else {
-              this.msgError(response.msg);
-            }
-          });
-        }
-      });
-    },
-    close() {
-      this.$store.dispatch("tagsView/delView", this.$route);
-      this.$router.push({ path: "/index" });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/tool/build/index.vue b/energy_management_ui/src/views/tool/build/index.vue
deleted file mode 100644
index 5d2b73a..0000000
--- a/energy_management_ui/src/views/tool/build/index.vue
+++ /dev/null
@@ -1,5 +0,0 @@
-<template>
-  <div class="app-container">
-   鏋勫缓宸ュ叿
-  </div>
-</template>
\ No newline at end of file
diff --git a/energy_management_ui/src/views/tool/gen/basicInfoForm.vue b/energy_management_ui/src/views/tool/gen/basicInfoForm.vue
deleted file mode 100644
index 757962c..0000000
--- a/energy_management_ui/src/views/tool/gen/basicInfoForm.vue
+++ /dev/null
@@ -1,61 +0,0 @@
-<template>
-  <el-form ref="basicInfoForm" :model="info" :rules="rules" label-width="150px">
-    <el-row>
-      <el-col :span="12">
-        <el-form-item label="琛ㄥ悕绉�" prop="tableName">
-          <el-input placeholder="璇疯緭鍏ヤ粨搴撳悕绉�" v-model="info.tableName" />
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item label="琛ㄦ弿杩�" prop="tableComment">
-          <el-input placeholder="璇疯緭鍏�" v-model="info.tableComment" />
-        </el-form-item>
-      </el-col>
-
-      <el-col :span="12">
-        <el-form-item label="瀹炰綋绫诲悕绉�" prop="className">
-          <el-input placeholder="璇疯緭鍏�" v-model="info.className" />
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item label="浣滆��" prop="functionAuthor">
-          <el-input placeholder="璇疯緭鍏�" v-model="info.functionAuthor" />
-        </el-form-item>
-      </el-col>
-      <el-col :span="24">
-        <el-form-item label="澶囨敞" prop="remark">
-          <el-input type="textarea" :rows="3" v-model="info.remark"></el-input>
-        </el-form-item>
-      </el-col>
-    </el-row>
-  </el-form>
-</template>
-<script>
-export default {
-  name: "BasicInfoForm",
-  props: {
-    info: {
-      type: Object,
-      default: null
-    }
-  },
-  data() {
-    return {
-      rules: {
-        tableName: [
-          { required: true, message: "璇疯緭鍏ヨ〃鍚嶇О", trigger: "blur" }
-        ],
-        tableComment: [
-          { required: true, message: "璇疯緭鍏ヨ〃鎻忚堪", trigger: "blur" }
-        ],
-        className: [
-          { required: true, message: "璇疯緭鍏ュ疄浣撶被鍚嶇О", trigger: "blur" }
-        ],
-        functionAuthor: [
-          { required: true, message: "璇疯緭鍏ヤ綔鑰�", trigger: "blur" }
-        ]
-      }
-    };
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/tool/gen/editTable.vue b/energy_management_ui/src/views/tool/gen/editTable.vue
deleted file mode 100644
index d91fb02..0000000
--- a/energy_management_ui/src/views/tool/gen/editTable.vue
+++ /dev/null
@@ -1,204 +0,0 @@
-<template>
-  <el-card>
-    <el-tabs v-model="activeName">
-      <el-tab-pane label="鍩烘湰淇℃伅" name="basic">
-        <basic-info-form ref="basicInfo" :info="info" />
-      </el-tab-pane>
-      <el-tab-pane label="瀛楁淇℃伅" name="cloum">
-        <el-table :data="cloumns" :max-height="tableHeight">
-          <el-table-column label="搴忓彿" type="index" min-width="5%" />
-          <el-table-column
-            label="瀛楁鍒楀悕"
-            prop="columnName"
-            min-width="10%"
-            :show-overflow-tooltip="true"
-          />
-          <el-table-column
-            label="瀛楁鎻忚堪"
-            prop="columnComment"
-            min-width="10%"
-            :show-overflow-tooltip="true"
-          />
-          <el-table-column
-            label="鐗╃悊绫诲瀷"
-            prop="columnType"
-            min-width="10%"
-            :show-overflow-tooltip="true"
-          />
-          <el-table-column label="Java绫诲瀷" min-width="11%">
-            <template slot-scope="scope">
-              <el-select v-model="scope.row.javaType">
-                <el-option label="Long" value="Long" />
-                <el-option label="String" value="String" />
-                <el-option label="Integer" value="Integer" />
-                <el-option label="Double" value="Double" />
-                <el-option label="BigDecimal" value="BigDecimal" />
-                <el-option label="Date" value="Date" />
-              </el-select>
-            </template>
-          </el-table-column>
-          <el-table-column label="java灞炴��" min-width="10%">
-            <template slot-scope="scope">
-              <el-input v-model="scope.row.javaField"></el-input>
-            </template>
-          </el-table-column>
-
-          <el-table-column label="鎻掑叆" min-width="5%">
-            <template slot-scope="scope">
-              <el-checkbox true-label="1" v-model="scope.row.isInsert"></el-checkbox>
-            </template>
-          </el-table-column>
-          <el-table-column label="缂栬緫" min-width="5%">
-            <template slot-scope="scope">
-              <el-checkbox true-label="1" v-model="scope.row.isEdit"></el-checkbox>
-            </template>
-          </el-table-column>
-          <el-table-column label="鍒楄〃" min-width="5%">
-            <template slot-scope="scope">
-              <el-checkbox true-label="1" v-model="scope.row.isList"></el-checkbox>
-            </template>
-          </el-table-column>
-          <el-table-column label="鏌ヨ" min-width="5%">
-            <template slot-scope="scope">
-              <el-checkbox true-label="1" v-model="scope.row.isQuery"></el-checkbox>
-            </template>
-          </el-table-column>
-          <el-table-column label="鏌ヨ鏂瑰紡" min-width="10%">
-            <template slot-scope="scope">
-              <el-select v-model="scope.row.queryType">
-                <el-option label="=" value="EQ" />
-                <el-option label="!=" value="NE" />
-                <el-option label=">" value="GT" />
-                <el-option label=">=" value="GTE" />
-                <el-option label="<" value="LT" />
-                <el-option label="<=" value="LTE" />
-                <el-option label="LIKE" value="LIKE" />
-                <el-option label="BETWEEN" value="BETWEEN" />
-              </el-select>
-            </template>
-          </el-table-column>
-          <el-table-column label="蹇呭~" min-width="5%">
-            <template slot-scope="scope">
-              <el-checkbox true-label="1" v-model="scope.row.isRequired"></el-checkbox>
-            </template>
-          </el-table-column>
-          <el-table-column label="鏄剧ず绫诲瀷" min-width="12%">
-            <template slot-scope="scope">
-              <el-select v-model="scope.row.htmlType">
-                <el-option label="鏂囨湰妗�" value="input" />
-                <el-option label="鏂囨湰鍩�" value="textarea" />
-                <el-option label="涓嬫媺妗�" value="select" />
-                <el-option label="鍗曢�夋" value="radio" />
-                <el-option label="澶嶉�夋" value="checkbox" />
-                <el-option label="鏃ユ湡鎺т欢" value="datetime" />
-              </el-select>
-            </template>
-          </el-table-column>
-          <el-table-column label="瀛楀吀绫诲瀷" min-width="12%">
-            <template slot-scope="scope">
-              <el-select v-model="scope.row.dictType" clearable filterable placeholder="璇烽�夋嫨">
-                <el-option
-                  v-for="dict in dictOptions"
-                  :key="dict.dictType"
-                  :label="dict.dictName"
-                  :value="dict.dictType">
-                  <span style="float: left">{{ dict.dictName }}</span>
-                  <span style="float: right; color: #8492a6; font-size: 13px">{{ dict.dictType }}</span>
-              </el-option>
-              </el-select>
-            </template>
-          </el-table-column>
-        </el-table>
-      </el-tab-pane>
-      <el-tab-pane label="鐢熸垚淇℃伅" name="genInfo">
-        <gen-info-form ref="genInfo" :info="info" />
-      </el-tab-pane>
-    </el-tabs>
-    <el-form label-width="100px">
-      <el-form-item style="text-align: center;margin-left:-100px;margin-top:10px;">
-        <el-button type="primary" @click="submitForm()">鎻愪氦</el-button>
-        <el-button @click="close()">杩斿洖</el-button>
-      </el-form-item>
-    </el-form>
-  </el-card>
-</template>
-<script>
-import { getGenTable, updateGenTable } from "@/api/tool/gen";
-import { optionselect as getDictOptionselect } from "@/api/system/dict/type";
-import basicInfoForm from "./basicInfoForm";
-import genInfoForm from "./genInfoForm";
-export default {
-  name: "GenEdit",
-  components: {
-    basicInfoForm,
-    genInfoForm
-  },
-  data() {
-    return {
-      // 閫変腑閫夐」鍗$殑 name
-      activeName: "cloum",
-      // 琛ㄦ牸鐨勯珮搴�
-      tableHeight: document.documentElement.scrollHeight - 245 + "px",
-      // 琛ㄥ垪淇℃伅
-      cloumns: [],
-      // 瀛楀吀淇℃伅
-      dictOptions: [],
-      // 琛ㄨ缁嗕俊鎭�
-      info: {}
-    };
-  },
-  beforeCreate() {
-    const { tableId } = this.$route.query;
-    if (tableId) {
-      // 鑾峰彇琛ㄨ缁嗕俊鎭�
-      getGenTable(tableId).then(res => {
-        this.cloumns = res.data.rows;
-        this.info = res.data.info;
-      });
-      /** 鏌ヨ瀛楀吀涓嬫媺鍒楄〃 */
-      getDictOptionselect().then(response => {
-        this.dictOptions = response.data;
-      });
-    }
-  },
-  methods: {
-    /** 鎻愪氦鎸夐挳 */
-    submitForm() {
-      const basicForm = this.$refs.basicInfo.$refs.basicInfoForm;
-      const genForm = this.$refs.genInfo.$refs.genInfoForm;
-      Promise.all([basicForm, genForm].map(this.getFormPromise)).then(res => {
-        const validateResult = res.every(item => !!item);
-        if (validateResult) {
-          const genTable = Object.assign({}, basicForm.model, genForm.model);
-          genTable.columns = this.cloumns;
-          genTable.params = {
-            treeCode: genTable.treeCode,
-            treeName: genTable.treeName,
-            treeParentCode: genTable.treeParentCode
-          };
-          updateGenTable(genTable).then(res => {
-            this.msgSuccess(res.msg);
-            if (res.code === 200) {
-              this.close();
-            }
-          });
-        } else {
-          this.msgError("琛ㄥ崟鏍¢獙鏈�氳繃锛岃閲嶆柊妫�鏌ユ彁浜ゅ唴瀹�");
-        }
-      });
-    },
-    getFormPromise(form) {
-      return new Promise(resolve => {
-        form.validate(res => {
-          resolve(res);
-        });
-      });
-    },
-    /** 鍏抽棴鎸夐挳 */
-    close() {
-      this.$store.dispatch("tagsView/delView", this.$route);
-      this.$router.push({ path: "/tool/gen", query: { t: Date.now()}})
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/tool/gen/genInfoForm.vue b/energy_management_ui/src/views/tool/gen/genInfoForm.vue
deleted file mode 100644
index 5f217e9..0000000
--- a/energy_management_ui/src/views/tool/gen/genInfoForm.vue
+++ /dev/null
@@ -1,154 +0,0 @@
-<template>
-  <el-form ref="genInfoForm" :model="info" :rules="rules" label-width="150px">
-    <el-row>
-      <el-col :span="12">
-        <el-form-item prop="tplCategory">
-          <span slot="label">鐢熸垚妯℃澘</span>
-          <el-select v-model="info.tplCategory">
-            <el-option label="鍗曡〃锛堝鍒犳敼鏌ワ級" value="crud" />
-            <el-option label="鏍戣〃锛堝鍒犳敼鏌ワ級" value="tree" />
-          </el-select>
-        </el-form-item>
-      </el-col>
-
-      <el-col :span="12">
-        <el-form-item prop="packageName">
-          <span slot="label">
-            鐢熸垚鍖呰矾寰�
-            <el-tooltip content="鐢熸垚鍦ㄥ摢涓猨ava鍖呬笅锛屼緥濡� com.ruoyi.system" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <el-input v-model="info.packageName" />
-        </el-form-item>
-      </el-col>
-
-      <el-col :span="12">
-        <el-form-item prop="moduleName">
-          <span slot="label">
-            鐢熸垚妯″潡鍚�
-            <el-tooltip content="鍙悊瑙d负瀛愮郴缁熷悕锛屼緥濡� system" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <el-input v-model="info.moduleName" />
-        </el-form-item>
-      </el-col>
-
-      <el-col :span="12">
-        <el-form-item prop="businessName">
-          <span slot="label">
-            鐢熸垚涓氬姟鍚�
-            <el-tooltip content="鍙悊瑙d负鍔熻兘鑻辨枃鍚嶏紝渚嬪 user" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <el-input v-model="info.businessName" />
-        </el-form-item>
-      </el-col>
-
-      <el-col :span="12">
-        <el-form-item prop="functionName">
-          <span slot="label">
-            鐢熸垚鍔熻兘鍚�
-            <el-tooltip content="鐢ㄤ綔绫绘弿杩帮紝渚嬪 鐢ㄦ埛" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <el-input v-model="info.functionName" />
-        </el-form-item>
-      </el-col>
-    </el-row>
-
-    <el-row v-show="info.tplCategory == 'tree'">
-      <h4 class="form-header">鍏朵粬淇℃伅</h4>
-      <el-col :span="12">
-        <el-form-item>
-          <span slot="label">
-            鏍戠紪鐮佸瓧娈�
-            <el-tooltip content="鏍戞樉绀虹殑缂栫爜瀛楁鍚嶏紝 濡傦細dept_id" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <el-select v-model="info.treeCode" placeholder="璇烽�夋嫨">
-            <el-option
-              v-for="column in info.columns"
-              :key="column.columnName"
-              :label="column.columnName + '锛�' + column.columnComment"
-              :value="column.columnName"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item>
-          <span slot="label">
-            鏍戠埗缂栫爜瀛楁
-            <el-tooltip content="鏍戞樉绀虹殑鐖剁紪鐮佸瓧娈靛悕锛� 濡傦細parent_Id" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <el-select v-model="info.treeParentCode" placeholder="璇烽�夋嫨">
-            <el-option
-              v-for="column in info.columns"
-              :key="column.columnName"
-              :label="column.columnName + '锛�' + column.columnComment"
-              :value="column.columnName"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item>
-          <span slot="label">
-            鏍戝悕绉板瓧娈�
-            <el-tooltip content="鏍戣妭鐐圭殑鏄剧ず鍚嶇О瀛楁鍚嶏紝 濡傦細dept_name" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <el-select v-model="info.treeName" placeholder="璇烽�夋嫨">
-            <el-option
-              v-for="column in info.columns"
-              :key="column.columnName"
-              :label="column.columnName + '锛�' + column.columnComment"
-              :value="column.columnName"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-col>
-    </el-row>
-  </el-form>
-</template>
-<script>
-export default {
-  name: "BasicInfoForm",
-  props: {
-    info: {
-      type: Object,
-      default: null
-    }
-  },
-  data() {
-    return {
-      rules: {
-        tplCategory: [
-          { required: true, message: "璇烽�夋嫨鐢熸垚妯℃澘", trigger: "blur" }
-        ],
-        packageName: [
-          { required: true, message: "璇疯緭鍏ョ敓鎴愬寘璺緞", trigger: "blur" }
-        ],
-        moduleName: [
-          { required: true, message: "璇疯緭鍏ョ敓鎴愭ā鍧楀悕", trigger: "blur" }
-        ],
-        businessName: [
-          { required: true, message: "璇疯緭鍏ョ敓鎴愪笟鍔″悕", trigger: "blur" }
-        ],
-        functionName: [
-          { required: true, message: "璇疯緭鍏ョ敓鎴愬姛鑳藉悕", trigger: "blur" }
-        ]
-      }
-    };
-  },
-  created() {}
-};
-</script>
diff --git a/energy_management_ui/src/views/tool/gen/importTable.vue b/energy_management_ui/src/views/tool/gen/importTable.vue
deleted file mode 100644
index e4b30c2..0000000
--- a/energy_management_ui/src/views/tool/gen/importTable.vue
+++ /dev/null
@@ -1,114 +0,0 @@
-<template>
-  <!-- 瀵煎叆琛� -->
-  <el-dialog title="瀵煎叆琛�" :visible.sync="visible" width="800px" top="5vh">
-    <el-form :model="queryParams" ref="queryForm" :inline="true">
-      <el-form-item label="琛ㄥ悕绉�" prop="tableName">
-        <el-input
-          v-model="queryParams.tableName"
-          placeholder="璇疯緭鍏ヨ〃鍚嶇О"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="琛ㄦ弿杩�" prop="tableComment">
-        <el-input
-          v-model="queryParams.tableComment"
-          placeholder="璇疯緭鍏ヨ〃鎻忚堪"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-    <el-row>
-      <el-table :data="dbTableList" @selection-change="handleSelectionChange" height="260px">
-        <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="tableName" label="琛ㄥ悕绉�"></el-table-column>
-        <el-table-column prop="tableComment" label="琛ㄦ弿杩�"></el-table-column>
-        <el-table-column prop="createTime" label="鍒涘缓鏃堕棿"></el-table-column>
-        <el-table-column prop="updateTime" label="鏇存柊鏃堕棿"></el-table-column>
-      </el-table>
-      <pagination
-        v-show="total>0"
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-    </el-row>
-    <div slot="footer" class="dialog-footer">
-      <el-button type="primary" @click="handleImportTable">纭� 瀹�</el-button>
-      <el-button @click="visible = false">鍙� 娑�</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { listDbTable, importTable } from "@/api/tool/gen";
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      visible: false,
-      // 閫変腑鏁扮粍鍊�
-      tables: [],
-      // 鎬绘潯鏁�
-      total: 0,
-      // 琛ㄦ暟鎹�
-      dbTableList: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        tableName: undefined,
-        tableComment: undefined
-      }
-    };
-  },
-  methods: {
-    // 鏄剧ず寮规
-    show() {
-      this.getList();
-      this.visible = true;
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.tables = selection.map(item => item.tableName);
-    },
-    // 鏌ヨ琛ㄦ暟鎹�
-    getList() {
-      listDbTable(this.queryParams).then(res => {
-        if (res.code === 200) {
-          this.dbTableList = res.rows;
-          this.total = res.total;
-        }
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 瀵煎叆鎸夐挳鎿嶄綔 */
-    handleImportTable() {
-      importTable({ tables: this.tables.join(",") }).then(res => {
-        this.msgSuccess(res.msg);
-        if (res.code === 200) {
-          this.visible = false;
-          this.$emit("ok");
-        }
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/tool/gen/index.vue b/energy_management_ui/src/views/tool/gen/index.vue
deleted file mode 100644
index 28fb5bc..0000000
--- a/energy_management_ui/src/views/tool/gen/index.vue
+++ /dev/null
@@ -1,287 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="琛ㄥ悕绉�" prop="tableName">
-        <el-input
-          v-model="queryParams.tableName"
-          placeholder="璇疯緭鍏ヨ〃鍚嶇О"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="琛ㄦ弿杩�" prop="tableComment">
-        <el-input
-          v-model="queryParams.tableComment"
-          placeholder="璇疯緭鍏ヨ〃鎻忚堪"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鍒涘缓鏃堕棿">
-        <el-date-picker
-          v-model="dateRange"
-          size="small"
-          style="width: 240px"
-          value-format="yyyy-MM-dd"
-          type="daterange"
-          range-separator="-"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡"
-        ></el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleGenTable"
-          v-hasPermi="['tool:gen:code']"
-        >鐢熸垚</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="info"
-          icon="el-icon-upload"
-          size="mini"
-          @click="openImportTable"
-          v-hasPermi="['tool:gen:import']"
-        >瀵煎叆</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleEditTable"
-          v-hasPermi="['tool:gen:edit']"
-        >淇敼</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['tool:gen:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-    </el-row>
-
-    <el-table v-loading="loading" :data="tableList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55"></el-table-column>
-      <el-table-column label="搴忓彿" align="center" prop="tableId" width="50px" />
-      <el-table-column
-        label="琛ㄥ悕绉�"
-        align="center"
-        prop="tableName"
-        :show-overflow-tooltip="true"
-        width="130"
-      />
-      <el-table-column
-        label="琛ㄦ弿杩�"
-        align="center"
-        prop="tableComment"
-        :show-overflow-tooltip="true"
-        width="130"
-      />
-      <el-table-column
-        label="瀹炰綋"
-        align="center"
-        prop="className"
-        :show-overflow-tooltip="true"
-        width="130"
-      />
-      <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="160" />
-      <el-table-column label="鏇存柊鏃堕棿" align="center" prop="updateTime" width="160" />
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            type="text"
-            size="small"
-            icon="el-icon-view"
-            @click="handlePreview(scope.row)"
-            v-hasPermi="['tool:gen:preview']"
-          >棰勮</el-button>
-          <el-button
-            type="text"
-            size="small"
-            icon="el-icon-edit"
-            @click="handleEditTable(scope.row)"
-            v-hasPermi="['tool:gen:edit']"
-          >缂栬緫</el-button>
-          <el-button
-            type="text"
-            size="small"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['tool:gen:remove']"
-          >鍒犻櫎</el-button>
-          <el-button
-            type="text"
-            size="small"
-            icon="el-icon-download"
-            @click="handleGenTable(scope.row)"
-            v-hasPermi="['tool:gen:code']"
-          >鐢熸垚浠g爜</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-    <!-- 棰勮鐣岄潰 -->
-    <el-dialog :title="preview.title" :visible.sync="preview.open" width="80%" top="5vh">
-      <el-tabs v-model="preview.activeName">
-        <el-tab-pane
-          v-for="(value, key) in preview.data"
-          :label="key.substring(key.lastIndexOf('/')+1,key.indexOf('.vm'))"
-          :name="key.substring(key.lastIndexOf('/')+1,key.indexOf('.vm'))"
-          :key="key"
-        >
-          <pre>{{ value }}</pre>
-        </el-tab-pane>
-      </el-tabs>
-    </el-dialog>
-    <import-table ref="import" @ok="handleQuery" />
-  </div>
-</template>
-
-<script>
-import { listTable, previewTable, delTable } from "@/api/tool/gen";
-import importTable from "./importTable";
-import { downLoadZip } from "@/utils/zipdownload";
-export default {
-  name: "Gen",
-  components: { importTable },
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 鍞竴鏍囪瘑绗�
-      uniqueId: "",
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 閫変腑琛ㄦ暟缁�
-      tableNames: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 琛ㄦ暟鎹�
-      tableList: [],
-      // 鏃ユ湡鑼冨洿
-      dateRange: "",
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        tableName: undefined,
-        tableComment: undefined
-      },
-      // 棰勮鍙傛暟
-      preview: {
-        open: false,
-        title: "浠g爜棰勮",
-        data: {},
-        activeName: "domain.java"
-      }
-    };
-  },
-  created() {
-    this.getList();
-  },
-  activated() {
-    const time = this.$route.query.t;
-    if (time != null && time != this.uniqueId) {
-      this.uniqueId = time;
-      this.resetQuery();
-    }
-  },
-  methods: {
-    /** 鏌ヨ琛ㄩ泦鍚� */
-    getList() {
-      this.loading = true;
-      listTable(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
-          this.tableList = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        }
-      );
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 鐢熸垚浠g爜鎿嶄綔 */
-    handleGenTable(row) {
-      const tableNames = row.tableName || this.tableNames;
-      if (tableNames == "") {
-        this.msgError("璇烽�夋嫨瑕佺敓鎴愮殑鏁版嵁");
-        return;
-      }
-      downLoadZip("/tool/gen/batchGenCode?tables=" + tableNames, "ruoyi");
-    },
-    /** 鎵撳紑瀵煎叆琛ㄥ脊绐� */
-    openImportTable() {
-      this.$refs.import.show();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.dateRange = [];
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 棰勮鎸夐挳 */
-    handlePreview(row) {
-      previewTable(row.tableId).then(response => {
-        this.preview.data = response.data;
-        this.preview.open = true;
-      });
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.tableId);
-      this.tableNames = selection.map(item => item.tableName);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleEditTable(row) {
-      const tableId = row.tableId || this.ids[0];
-      this.$router.push({ path: "/gen/edit", query: { tableId: tableId } });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const tableIds = row.tableId || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎琛ㄧ紪鍙蜂负"' + tableIds + '"鐨勬暟鎹」?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function() {
-          return delTable(tableIds);
-      }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(function() {});
-    }
-  }
-};
-</script>
\ No newline at end of file
diff --git a/energy_management_ui/src/views/tool/swagger/index.vue b/energy_management_ui/src/views/tool/swagger/index.vue
deleted file mode 100644
index 61cfcca..0000000
--- a/energy_management_ui/src/views/tool/swagger/index.vue
+++ /dev/null
@@ -1,26 +0,0 @@
-<template>
-  <div v-loading="loading" :style="'height:'+ height">
-    <iframe :src="src" frameborder="no" style="width: 100%;height: 100%" scrolling="auto" />
-  </div>
-</template>
-<script>
-export default {
-  name: "Swagger",
-  data() {
-    return {
-      src: process.env.VUE_APP_BASE_API + "/swagger-ui.html",
-      height: document.documentElement.clientHeight - 94.5 + "px;",
-      loading: true
-    };
-  },
-  mounted: function() {
-    setTimeout(() => {
-      this.loading = false;
-    }, 230);
-    const that = this;
-    window.onresize = function temp() {
-      that.height = document.documentElement.clientHeight - 94.5 + "px;";
-    };
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/workforce/dutyManagement/rostering_duty.vue b/energy_management_ui/src/views/workforce/dutyManagement/rostering_duty.vue
deleted file mode 100644
index a40839d..0000000
--- a/energy_management_ui/src/views/workforce/dutyManagement/rostering_duty.vue
+++ /dev/null
@@ -1,303 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['workforce:dutyManagement:add']"
-        >鏂板</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['workforce:dutyManagement:edit']"
-        >淇敼</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['workforce:dutyManagement:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['workforce:dutyManagement:export']"
-        >瀵煎嚭</el-button>
-      </el-col>
-    </el-row>
-
-    <el-table v-loading="loading" :data="managementList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="缂栧彿" align="center" prop="code" />
-      <el-table-column label="椤哄簭鍙�" align="center" prop="orderNo" />
-      <el-table-column label="缁勭粐缁撴瀯" align="center" prop="deptName"  />
-      <el-table-column label="鍊兼鍚嶇О" align="center" prop="name" />
-      <el-table-column label="鎻忚堪" align="center" prop="description" />
-      <el-table-column label="鍒涘缓浜�" align="center" prop="createBy" />
-      <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.createTime) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="淇敼浜�" align="center" prop="updateBy" />
-      <el-table-column label="淇敼鏃堕棿" align="center" prop="updateTime" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.updateTime) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['workforce:dutyManagement:edit']"
-          >淇敼</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['workforce:dutyManagement:remove']"
-          >鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 娣诲姞鎴栦慨鏀规帓鐝鐞嗗璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="缁勭粐缁撴瀯" prop="deptName">
-          <span>{{form.deptName}}</span>
-        </el-form-item>
-        <el-form-item label="缂栧彿" prop="code">
-          <el-input v-model="form.code" placeholder="璇疯緭鍏ョ紪鍙�" />
-        </el-form-item>
-        <el-form-item label="鍊兼鍚嶇О" prop="name">
-          <el-input v-model="form.name" placeholder="璇疯緭鍏ュ�兼鍚嶇О" />
-        </el-form-item>
-        <el-form-item label="椤哄簭鍙�" prop="orderNo">
-          <el-input v-model="form.orderNo" placeholder="璇疯緭鍏ラ『搴忓彿" />
-        </el-form-item>
-        <el-form-item label="鎻忚堪" prop="description">
-          <el-input v-model="form.description" placeholder="璇疯緭鍏ユ弿杩�" />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listManagement, getManagement, delManagement, addManagement, updateManagement, exportManagement } from "@/api/workforce/duty_management";
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鎺掔彮绠$悊琛ㄦ牸鏁版嵁
-      managementList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        code: undefined,
-        name: undefined,
-        deptId: undefined,
-        orderNo: undefined,
-        description: undefined,
-        createBy: undefined,
-        createTime: undefined,
-        updateBy: undefined,
-        updateTime: undefined
-      },
-      node:"",
-      deptName:"",
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        id: [
-          { required: true, message: "id涓嶈兘涓虹┖", trigger: "blur" }
-        ],        code: [
-          { required: true, message: "缂栧彿涓嶈兘涓虹┖", trigger: "blur" }
-        ],        name: [
-          { required: true, message: "鍊兼鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
-        ],      }
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    modelNodeChange(modelNode) {
-      /* console.log(modelNode.id);
-       console.log(modelNode.label);*/
-      this.node= modelNode.id;
-      this.deptName= modelNode.label;
-      this.getList();
-    },
-    /** 鏌ヨ鎺掔彮绠$悊鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listManagement(this.queryParams).then(response => {
-        this.managementList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        code: undefined,
-        name: undefined,
-        deptId: undefined,
-        orderNo: undefined,
-        description: undefined,
-        createBy: undefined,
-        createTime: undefined,
-        updateBy: undefined,
-        updateTime: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.form.deptId=this.node;
-      this.form.deptName=this.deptName;
-      this.title = "娣诲姞鎺掔彮绠$悊";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      this.form.deptId=this.node;
-      this.form.deptName=this.deptName;
-      const id = row.id || this.ids
-      getManagement(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼鎺掔彮绠$悊";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updateManagement(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addManagement(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎鎺掔彮绠$悊缂栧彿涓�"' + ids + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return delManagement(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夋帓鐝鐞嗘暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return exportManagement(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function() {});
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/workforce/management/scheme.vue b/energy_management_ui/src/views/workforce/management/scheme.vue
deleted file mode 100644
index 2478e22..0000000
--- a/energy_management_ui/src/views/workforce/management/scheme.vue
+++ /dev/null
@@ -1,374 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="缂栫爜" prop="code">
-        <el-input
-          v-model="queryParams.code"
-          placeholder="璇疯緭鍏ョ紪鐮�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鍚嶇О" prop="name">
-        <el-input
-          v-model="queryParams.name"
-          placeholder="璇疯緭鍏ュ悕绉�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="杞�兼柟妗堢被鍨�" prop="rosteringschemekind" label-width="100px">
-        <el-select v-model="queryParams.rosteringschemekind" placeholder="璇烽�夋嫨杞�肩被鍨�" clearable size="small">
-        <el-option
-          v-for="dict in rosteringschemekindOptions"
-          :key="dict.dictValue"
-          :label="dict.dictLabel"
-          :value="dict.dictValue"
-        />
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['rosteringSrcheme:scheme:add']"
-        >鏂板</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['rosteringSrcheme:scheme:edit']"
-        >淇敼</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['rosteringSrcheme:scheme:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['rosteringSrcheme:scheme:export']"
-        >瀵煎嚭</el-button>
-      </el-col>
-    </el-row>
-
-    <el-table v-loading="loading" :data="schemeList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="缂栫爜" align="center" prop="code"/>
-      <el-table-column label="鍚嶇О" align="center" prop="name"/>
-      <el-table-column label="缁勭粐鍚嶇О" align="center" prop="departMember"/>
-      <el-table-column label="杞�兼柟妗堢被鍨�" align="center" prop="rosteringschemekind" :formatter="rosteringschemekindFormat" />
-      <el-table-column label="鍙傜収鏃ユ湡" align="center" prop="referencedate" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.referencedate) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="鏄惁鑷姩鎺掔彮" align="center" prop="isautorostering" :formatter="isautorosteringFormat" />
-      <el-table-column label="鎻忚堪" align="center" prop="description"/>
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['rosteringSrcheme:scheme:edit']"
-          >淇敼</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['rosteringSrcheme:scheme:remove']"
-          >鍒犻櫎</el-button>
-          <router-link :to="'/rosteringSchemeitem/list/' + scope.row.id" class="link-type">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              v-hasPermi="['rosteringSchemeitem:schemeItem:list']"
-            >杞�兼柟妗堢粏鍒�</el-button>
-
-          </router-link>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 娣诲姞鎴栦慨鏀硅疆鍊兼柟妗堝璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-        <el-form-item label="缂栫爜" prop="code">
-          <el-input v-model="form.code" placeholder="璇疯緭鍏ョ紪鐮�" />
-        </el-form-item>
-        <el-form-item label="鍚嶇О" prop="name">
-          <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" />
-        </el-form-item>
-        <el-form-item label="缁勭粐缁撴瀯" prop="departmember">
-          <!--<el-input v-model="form.departmemberid" placeholder="璇疯緭鍏ョ粍缁囩粨鏋�" />-->
-          <span>{{form.departmember}}</span>
-        </el-form-item>
-        <el-form-item label="杞�兼柟妗堢被鍨�" prop="rosteringschemekind">
-          <el-select v-model="form.rosteringschemekind" placeholder="璇烽�夋嫨杞�肩被鍨�" clearable size="small">
-            <el-option
-              v-for="dict in rosteringschemekindOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鏄惁鑷姩鎺掔彮" prop="isautorostering">
-          <el-radio-group v-model="form.isautorostering">
-            <el-radio v-for="dict in isautorosteringOptions" :key="dict.dictValue" :label="dict.dictValue">{{dict.dictLabel}}</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="鍙傜収鏃ユ湡" prop="referencedate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.referencedate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="閫夋嫨鍙傜収鏃ユ湡">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="鎻忚堪" prop="description">
-          <el-input type="textarea" :rows="2" v-model="form.description" placeholder="璇疯緭鍏ユ弿杩�" />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listScheme, getScheme, delScheme, addScheme, updateScheme, exportScheme } from "@/api/workforce/scheme";
-
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 杞�兼柟妗堣〃鏍兼暟鎹�
-      schemeList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 杞�兼柟妗堢被鍨嬪瓧鍏�
-      rosteringschemekindOptions: [],
-      // 鏄惁鑷姩鎺掔彮瀛楀吀
-      isautorosteringOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        code: undefined,
-        name: undefined,
-        departMemberId: undefined,
-        departmember: undefined,
-        rosteringschemekind: undefined,
-        referencedate: undefined,
-        isautorostering: undefined,
-        description: undefined,
-      },
-      currentNode:"",
-      currentName:"",
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        code: [{ required: true, message: "缂栫爜涓嶈兘涓虹┖", trigger: "blur" }],
-        name: [{ required: true, message: "鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }],
-        rosteringschemekind: [{ required: true, message: "杞�兼柟妗堢被鍨嬩笉鑳戒负绌�", trigger: "blur" }],
-      }
-    };
-  },
-  created() {
-    //this.getList();
-    this.getDicts("rotation_type").then(response => {
-      this.rosteringschemekindOptions = response.data;
-    });
-    this.getDicts("isAutoRostering").then(response => {
-      this.isautorosteringOptions = response.data;
-    });
-  },
-  methods: {
-    modelNodeChange(modelNode) {
-      this.currentNode = modelNode.id;
-      this.currentName = modelNode.label;
-      this.getList();
-    },
-    /** 鏌ヨ杞�兼柟妗堝垪琛� */
-    getList() {
-      this.loading = true;
-      listScheme(this.queryParams).then(response => {
-        this.schemeList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 杞�兼柟妗堢被鍨嬪瓧鍏哥炕璇�
-    rosteringschemekindFormat(row, column) {
-      return this.selectDictLabel(this.rosteringschemekindOptions, row.rosteringschemekind);
-    },
-    // 鏄惁鑷姩鎺掔彮瀛楀吀缈昏瘧
-    isautorosteringFormat(row, column) {
-      return this.selectDictLabel(this.isautorosteringOptions, row.isautorostering);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        code: undefined,
-        name: undefined,
-        departMemberId: undefined,
-        rosteringschemekind: undefined,
-        referencedate: undefined,
-        isautorostering: undefined,
-        description: undefined,
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.form.departMemberId=this.currentNode;
-      this.form.departmember=this.currentName;
-      this.form.isautorostering="0";
-      this.title = "娣诲姞杞�兼柟妗�";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getScheme(id).then(response => {
-        this.form = response.data;
-        this.form.departMemberId=this.currentNode;
-        this.form.departmember=this.currentName;
-        this.open = true;
-        this.title = "淇敼杞�兼柟妗�";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          console.log(this.form.departMemberId);
-          if (this.form.id != undefined) {
-            updateScheme(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addScheme(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎杞�兼柟妗堢紪鍙蜂负"' + ids + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return delScheme(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夎疆鍊兼柟妗堟暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return exportScheme(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function() {});
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/workforce/management/schemeItem.vue b/energy_management_ui/src/views/workforce/management/schemeItem.vue
deleted file mode 100644
index 2efc2e1..0000000
--- a/energy_management_ui/src/views/workforce/management/schemeItem.vue
+++ /dev/null
@@ -1,361 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="缂栫爜" prop="code">
-        <el-input
-          v-model="queryParams.code"
-          placeholder="璇疯緭鍏ョ紪鐮�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鍚嶇О" prop="name">
-        <el-input
-          v-model="queryParams.name"
-          placeholder="璇疯緭鍏ュ悕绉�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-        <el-form-item label="鐝" prop="shiftId">
-        <el-select v-model="queryParams.shiftId" placeholder="璇烽�夋嫨鍊兼" clearable size="small">
-          <el-option
-            v-for="dict in shiftIdOptions"
-            :key="dict.id"
-            :label="dict.name"
-            :value="dict.id"
-          />
-        </el-select>
-      </el-form-item>
-        <el-form-item label="鍊兼" prop="dutyId">
-        <el-select v-model="queryParams.dutyId" placeholder="璇烽�夋嫨鍊兼" clearable size="small">
-          <el-option
-            v-for="dict in dutyIdOptions"
-            :key="dict.id"
-            :label="dict.name"
-            :value="dict.id"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['rosteringSchemeitem:schemeItem:add']"
-        >鏂板</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['rosteringSchemeitem:schemeItem:edit']"
-        >淇敼</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['rosteringSchemeitem:schemeItem:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['rosteringSchemeitem:schemeItem:export']"
-        >瀵煎嚭</el-button>
-      </el-col>
-    </el-row>
-
-    <el-table v-loading="loading" :data="schemeItemList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="缂栫爜" align="center" prop="code"/>
-      <el-table-column label="鍚嶇О" align="center" prop="name"/>
-      <el-table-column label="杞�兼柟妗�" align="center" prop="schemeName"/>
-      <el-table-column label="澶╂" align="center" prop="dayofloopdays"/>
-      <el-table-column label="鐝" align="center" prop="shiftName"/>
-      <el-table-column label="鍊兼" align="center" prop="dutyName" />
-      <el-table-column label="鎻忚堪" align="center" prop="description"/>
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['rosteringSchemeitem:schemeItem:edit']"
-          >淇敼</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['rosteringSchemeitem:schemeItem:remove']"
-          >鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 娣诲姞鎴栦慨鏀硅疆鍊兼柟妗堝璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="缂栫爜" prop="code">
-          <el-input v-model="form.code" placeholder="璇疯緭鍏ョ紪鐮�" />
-        </el-form-item>
-        <el-form-item label="鍚嶇О" prop="name">
-          <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" />
-        </el-form-item>
-        <el-form-item label="杞�兼柟妗�">
-          <span>{{form.schemeName}}</span>
-        </el-form-item>
-        <el-form-item label="澶╂" prop="dayofloopdays">
-          <el-input v-model="form.dayofloopdays" placeholder="璇疯緭鍏ュぉ娆�" />
-        </el-form-item>
-        <el-form-item label="鐝" prop="shiftId">
-          <el-select v-model="form.shiftId" placeholder="璇烽�夋嫨鐝">
-            <el-option
-              v-for="dict in shiftIdOptions"
-              :key="dict.id"
-              :label="dict.name"
-              :value="dict.id"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鍊兼" prop="dutyId">
-          <el-select v-model="form.dutyId" placeholder="璇烽�夋嫨鍊兼">
-            <el-option
-              v-for="dict in dutyIdOptions"
-              :key="dict.id"
-              :label="dict.name"
-              :value="dict.id"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鎻忚堪" prop="description">
-          <el-input v-model="form.description" placeholder="璇疯緭鍏ユ弿杩�" />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listSchemeItem, getSchemeItem, delSchemeItem, addSchemeItem, updateSchemeItem, exportSchemeItem,listDutyManagement } from "@/api/workforce/schemeItem";
-import { getScheme} from "@/api/workforce/scheme";
-import { listManagement} from "@/api/workforce/management";
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 杞�兼柟妗堣〃鏍兼暟鎹�
-      schemeItemList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 杞�兼柟妗堝瓧鍏�
-      schemeIdOptions: [],
-      // 鐝瀛楀吀
-      shiftIdOptions: [],
-      // 鍊兼瀛楀吀
-      dutyIdOptions: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        description: undefined,
-        code: undefined,
-        name: undefined,
-        schemeId: undefined,
-        dayofloopdays: undefined,
-        shiftId: undefined,
-        dutyId: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        name: [ { required: true, message: "鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }  ],
-        shiftId: [ { required: true, message: "鐝涓嶈兘涓虹┖", trigger: "blur" }  ],
-        dutyId: [ { required: true, message: "鍊兼涓嶈兘涓虹┖", trigger: "blur" }  ],
-      },
-      schemeId:"",
-      schemeName:"",
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    /** 鏌ヨ杞�兼柟妗堝垪琛� */
-    getList() {
-      this.loading = true;
-      this.queryParams.schemeId = this.$route.params && this.$route.params.id;
-      listSchemeItem(this.queryParams).then(response => {
-        this.schemeItemList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-      const id=this.$route.params && this.$route.params.id;
-      getScheme(id).then(response => {
-        this.schemeId=response.data.id;
-        this.schemeName=response.data.name;
-      });
-      listManagement().then(response=>{
-        this.shiftIdOptions=response.rows;
-      });
-      listDutyManagement().then(response=>{
-        this.dutyIdOptions=response.rows;
-      });
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        description: undefined,
-        id: undefined,
-        code: undefined,
-        name: undefined,
-        schemeId: undefined,
-        dayofloopdays: undefined,
-        shiftId: undefined,
-        dutyId: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.description)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.form.schemeId=this.schemeId;
-      this.form.schemeName=this.schemeName;
-      this.title = "娣诲姞杞�兼柟妗�";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const description = row.description || this.ids
-      getSchemeItem(description).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼杞�兼柟妗�";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.description != undefined) {
-            updateSchemeItem(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addSchemeItem(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const descriptions = row.description || this.ids;
-      this.$confirm('鏄惁纭鍒犻櫎杞�兼柟妗堢紪鍙蜂负"' + descriptions + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return delSchemeItem(descriptions);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夎疆鍊兼柟妗堟暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return exportSchemeItem(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function() {});
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/workforce/rosteringManagement/index.vue b/energy_management_ui/src/views/workforce/rosteringManagement/index.vue
deleted file mode 100644
index 820510f..0000000
--- a/energy_management_ui/src/views/workforce/rosteringManagement/index.vue
+++ /dev/null
@@ -1,121 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" :width="isCollapse?'0px':'25%'">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            鎺掔彮鍩虹鏌ヨ
-          </div>
-          <el-input
-              placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�"
-              prefix-icon="el-icon-search"
-              v-model="filterText">
-          </el-input>
-          <el-tree
-              class="modelnode-tree"
-              :data="modelNodeData"
-              node-key="id"
-              highlight-current
-              :expand-on-click-node="false"
-              empty-text=""
-              ref="modelNodeTree"
-              :filter-node-method="filterNode"
-              :default-expanded-keys="treeExpandData"
-              @node-click="changeNode"
-          >
-            <span class="custom-tree-node" slot-scope="{ node, data }">
-            <el-tooltip class="item" effect="dark" :content="node.label" placement="top-end">
-              <span>{{ node.label.length > 4 ? node.label.slice(0, 4) + '...' : node.label }}</span>
-                  <span class="tree-text-node-common">{{ node.label }}</span>
-              </el-tooltip>
-          </span>
-          </el-tree>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <div style="cursor:pointer;" @click="toggleCollapse">
-          <img src="@/assets/image/configureChart.png" style="width: 100%;height: 100%">
-        </div>
-        <el-main style="padding:0">
-          <scheduling_basis ref="scheduling_basis" style="padding:10px"></scheduling_basis>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-
-import {treeList} from "@/api/workforce/management"
-import Treeselect from "@riophae/vue-treeselect";
-import "@riophae/vue-treeselect/dist/vue-treeselect.css";
-import scheduling_basis from "./scheduling_basis";
-
-export default {
-  components: {Treeselect, scheduling_basis},
-  watch: {
-    filterText(val) {
-      this.$refs.modelNodeTree.filter(val);
-    }
-  },
-  data() {
-    return {
-      filterText: '',
-      // 琛ㄦ牸鏍戞暟鎹�
-      modelNodeData: [],
-      // 閮ㄩ棬鍚嶇О
-      deptName: undefined,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        deptName: undefined,
-        status: undefined
-      },
-      treeExpandData: [],
-      activeName: '',
-      modelCode: undefined,
-      isCollapse: false,
-    }
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    filterNode(value, data) {
-      if (!value) {
-        return true;
-      }
-      return data.label.indexOf(value) !== -1;
-    },
-
-    getList() {
-      treeList().then(response => {
-        this.modelNodeData = response.data;
-        this.loading = false;
-        if (this.modelNodeData.length > 0) {
-          this.treeExpandData.push(this.modelNodeData[0].id);
-          this.$emit("changeNode", this.modelNodeData[0]);
-          this.$refs.scheduling_basis.modelNodeChange(this.modelNodeData[0]);
-        } else {
-          this.$emit("changeNode", '');
-        }
-        this.$nextTick(() => {
-          if (this.modelNodeData.length > 0) {
-            this.$refs.modelNodeTree.setCurrentKey(this.modelNodeData[0].id);
-          }
-        })
-      });
-    },
-    changeNode(data, node, ev) {
-      this.$emit("changeNode", data);
-      this.$refs.scheduling_basis.modelNodeChange(data);
-    },
-    handleClick(tab, event) {
-      this.activeName = tab.name;
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse
-    },
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/workforce/rosteringManagement/scheduling_basis.vue b/energy_management_ui/src/views/workforce/rosteringManagement/scheduling_basis.vue
deleted file mode 100644
index 02ac873..0000000
--- a/energy_management_ui/src/views/workforce/rosteringManagement/scheduling_basis.vue
+++ /dev/null
@@ -1,361 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="杞�兼柟妗�" prop="name" label-width="100px">
-        <el-select v-model="queryParam.id" placeholder="璇烽�夋嫨杞�兼柟妗�" clearable size="small">
-          <el-option
-            v-for="dict in schemeList"
-            :key="dict.id"
-            :label="dict.name"
-            :value="dict.id"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="寮�濮嬫椂闂�" prop="beginTime">
-        <el-date-picker clearable size="small" style="width: 200px"
-                        v-model="queryParams.beginTimes"
-                        type="date"
-                        value-format="yyyy-MM-dd"
-                        placeholder="閫夋嫨寮�濮嬫椂闂�">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="缁撴潫鏃堕棿" prop="endTime">
-        <el-date-picker clearable size="small" style="width: 200px"
-                        v-model="queryParams.endTimes"
-                        type="date"
-                        value-format="yyyy-MM-dd"
-                        placeholder="閫夋嫨缁撴潫鏃堕棿">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="success" icon="el-icon-edit" size="mini" @click="generateAdd"  v-hasPermi="['workforce:rosteringManagement:add']">鐢熸垚</el-button>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['workforce:rosteringManagement:export']"
-        >瀵煎嚭</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          @click="handleDelete"
-          v-hasPermi="['workforce:rosteringManagement:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-    </el-row>
-
-    <el-table v-loading="loading" :data="rosteringManagementList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="缂栫爜" align="center" prop="code" />
-      <el-table-column label="缁勭粐缁撴瀯" align="center" prop="deptName" />
-      <el-table-column label="鍚嶇О" align="center" prop="name"  />
-      <el-table-column label="杞�兼柟妗�" align="center" prop="schemeName" />
-      <el-table-column label="鐝" align="center" prop="shiftName"  />
-      <el-table-column label="鍊兼" align="center" prop="dutyName" />
-      <el-table-column label="寮�濮嬫椂闂�" align="center" prop="beginTimes" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.beginTimes) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="缁撴潫鏃堕棿" align="center" prop="endTimes" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.endTimes) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="鎻忚堪" align="center" prop="description"/>
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button  v-if="currentTime < parseTime(scope.row.beginTimes) "
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['workforce:rosteringManagement:edit']"
-          >淇敼</el-button>
-          <el-button v-if="currentTime < parseTime(scope.row.beginTimes)"
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['workforce:rosteringManagement:remove']"
-          >鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-    <!-- 娣诲姞鎴栦慨鏀规帓鐝〃鏌ヨ瀵硅瘽妗� -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="缂栫爜" prop="code">
-          <el-input v-model="form.code" placeholder="璇疯緭鍏ョ紪鐮�" />
-        </el-form-item>
-        <el-form-item label="鍚嶇О" prop="name">
-          <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" />
-        </el-form-item>
-        <el-form-item label="鐝" prop="shiftName">
-          <el-input v-model="form.shiftName" placeholder="璇疯緭鍏ョ彮娆�" />
-        </el-form-item>
-        <el-form-item label="鍊兼" prop="dutyName">
-          <el-input v-model="form.dutyName" placeholder="璇疯緭鍏ュ�兼" />
-        </el-form-item>
-        <el-form-item label="寮�濮嬫椂闂�" prop="beginTimes">
-          <el-date-picker clearable size="small" style="width: 200px"
-                          v-model="form.beginTimes"
-                          type="datetime"
-                          value-format="yyyy-MM-dd HH:mm:ss"
-                          placeholder="閫夋嫨寮�濮嬫椂闂�">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="缁撴潫鏃堕棿" prop="endTimes">
-          <el-date-picker clearable size="small" style="width: 200px"
-                          v-model="form.endTimes"
-                          type="datetime"
-                          value-format="yyyy-MM-dd HH:mm:ss"
-                          placeholder="閫夋嫨缁撴潫鏃堕棿">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="鎻忚堪" prop="description">
-          <el-input v-model="form.description" placeholder="璇疯緭鍏ユ弿杩�" />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { getschemeNameList,listRosteringManagement, getRosteringManagement, delRosteringManagement, addRosteringManagement, updateRosteringManagement, exportRosteringManagement } from "@/api/workforce/rosteringManagement";
-import { listSchemeItem ,getSchemeItem} from "@/api/workforce/schemeItem";
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      codes:[],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鎺掔彮琛ㄦ煡璇㈣〃鏍兼暟鎹�
-      rosteringManagementList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-     /*杞�兼柟妗堝悕绉版暟鎹�*/
-      schemeList:[],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        schemeId: undefined,
-        departMemberId:undefined,
-        beginTimes:undefined,
-        endTimes:undefined,
-      },
-      dateRange:[],
-      //鏌ヨ杞�肩被鍨嬪悕绉板弬鏁�
-      queryParam: {
-       id: undefined,
-       name:undefined,
-      },
-      schemeNameList:[],
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      //鐢熸垚琛ㄥ崟鍙傛暟
-      generateform:{},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        id: [{ required: true, message: "id涓嶈兘涓虹┖", trigger: "blur" }],
-      },
-      //缁勭粐缁撴瀯id
-      currentNode:"",
-      //缁勭粐缁撴瀯鍚嶇О
-      currentName:"",
-      currentTime: '',
-    };
-  },
-  created() {
-    //this.getList();
-  },
-  methods: {
-    /** 鏌ヨ鎺掔彮琛ㄦ煡璇㈠垪琛� */
-    modelNodeChange(modelNode) {
-      this.currentNode = modelNode.id;
-      this.currentName = modelNode.label;
-      this.getList();
-    },
-    getList() {
-      this.loading = true;
-      listRosteringManagement(this.queryParams).then(response => {
-        this.currentTime = this.format(new Date(), "yyyy-MM-dd HH:mm:ss");
-        this.rosteringManagementList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-      getschemeNameList(this.queryParam).then(response => {
-        this.schemeList = response.rows;
-      });
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: undefined,
-        code: undefined,
-        name: undefined,
-        schemeId: undefined,
-        shiftId: undefined,
-        dutyId: undefined,
-        dutyName: undefined,
-        description: undefined,
-        departMemberId: undefined,
-        beginTimes:undefined,
-        endTimes:undefined,
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.codes = selection.map(item => item.code)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    /* 鐢熸垚鎸夐挳鎿嶄綔*/
-    generateAdd:function(){
-      this.form.schemeId=this.queryParam.id;/*杞�兼柟妗坕d*/
-      this.form.departMemberId=this.currentNode;/*缁勭粐缁撴瀯id*/
-      this.form.beginTimes=this.queryParams.beginTimes;
-      this.form.endTimes=this.queryParams.endTimes;
-      addRosteringManagement(this.form).then(response => {
-        if (response.code === 200) {
-          this.msgSuccess("鏂板鎴愬姛");
-          this.open = false;
-          this.getList();
-        } else {
-          this.msgError(response.msg);
-        }
-      });
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getRosteringManagement(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼鎺掔彮琛ㄦ煡璇�";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updateRosteringManagement(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("淇敼鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addRosteringManagement(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("鏂板鎴愬姛");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      const codes = row.code || this.codes;
-      this.$confirm('鏄惁纭鍒犻櫎鎺掔彮琛ㄦ煡璇㈢紪鍙蜂负"' + codes + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return delRosteringManagement(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夋帓鐝〃鏌ヨ鏁版嵁椤�?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return exportRosteringManagement(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function() {});
-    },
-    format(date, fmt) {
-      let o = {
-        "M+": date.getMonth() + 1, //鏈堜唤
-        "d+": date.getDate(), //鏃�
-        "H+": date.getHours(), //灏忔椂
-        "m+": date.getMinutes(), //鍒�
-        "s+": date.getSeconds(), //绉�
-        "q+": Math.floor((date.getMonth() + 3) / 3), //瀛e害
-        "S": date.getMilliseconds() //姣
-      };
-      if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
-      for (let k in o)
-        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
-      return fmt;
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/workforce/shiftManagement/index.vue b/energy_management_ui/src/views/workforce/shiftManagement/index.vue
deleted file mode 100644
index 4b964af..0000000
--- a/energy_management_ui/src/views/workforce/shiftManagement/index.vue
+++ /dev/null
@@ -1,144 +0,0 @@
-<template>
-  <div class="app-container" style="padding: 0">
-    <el-container class="split-container">
-      <el-aside class="left-content" :width="isCollapse?'0px':'25%'">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix" style="height:32px">
-            鎺掔彮鍩虹璁剧疆
-          </div>
-          <el-input
-              placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�"
-              prefix-icon="el-icon-search"
-              v-model="filterText">
-          </el-input>
-          <el-tree
-              class="modelnode-tree"
-              :data="modelNodeData"
-              node-key="id"
-              highlight-current
-              :expand-on-click-node="false"
-              empty-text=""
-              ref="modelNodeTree"
-              :filter-node-method="filterNode"
-              :default-expanded-keys="treeExpandData"
-              @node-click="changeNode"
-          >
-            <span class="custom-tree-node" slot-scope="{ node, data }">
-              <el-tooltip class="item" effect="dark" :content="node.label" placement="top-end">
-                <span>{{ node.label.length > 4 ? node.label.slice(0, 4) + '...' : node.label }}</span>
-              </el-tooltip>
-            <span>{{ node.label }}</span>
-          </span>
-          </el-tree>
-        </el-card>
-      </el-aside>
-      <el-container>
-        <div style="cursor:pointer;" @click="toggleCollapse">
-          <img src="@/assets/image/configureChart.png" style="width: 100%;height: 100%">
-        </div>
-        <el-main style="padding:0">
-          <el-tabs @tab-click="handleClick">
-            <el-tab-pane>
-              <span slot="label"><i class="el-icon-pie-chart"></i> 鐝璁剧疆</span>
-              <RosteringShift ref="rostering_shift"></RosteringShift>
-            </el-tab-pane>
-            <el-tab-pane>
-              <span slot="label"><i class="el-icon-pie-chart"></i> 鍊兼璁剧疆</span>
-              <RosteringDuty ref="rostering_duty"></RosteringDuty>
-            </el-tab-pane>
-            <el-tab-pane>
-              <span slot="label"><i class="el-icon-pie-chart"></i> 杞�兼柟妗堣缃�</span>
-              <scheme ref="scheme"></scheme>
-            </el-tab-pane>
-          </el-tabs>
-        </el-main>
-      </el-container>
-    </el-container>
-
-
-  </div>
-</template>
-
-<script>
-
-import {treeList} from "@/api/workforce/management"
-import RosteringShift from "./rostering_shift";
-import RosteringDuty from "../dutyManagement/rostering_duty";
-import scheme from "../management/scheme";
-import Treeselect from "@riophae/vue-treeselect";
-import "@riophae/vue-treeselect/dist/vue-treeselect.css";
-
-export default {
-  components: {RosteringShift, RosteringDuty, Treeselect, scheme},
-  created() {
-  },
-  watch: {
-    filterText(val) {
-      this.$refs.modelNodeTree.filter(val);
-    }
-  },
-  data() {
-    return {
-      filterText: '',
-      // 琛ㄦ牸鏍戞暟鎹�
-      modelNodeData: [],
-      // 閮ㄩ棬鍚嶇О
-      deptName: undefined,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        deptName: undefined,
-        status: undefined
-      },
-      treeExpandData: [],
-      activeName: '',
-      modelCode: undefined,
-      isCollapse: false,
-    }
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    filterNode(value, data) {
-      if (!value) {
-        return true;
-      }
-      return data.label.indexOf(value) !== -1;
-    },
-
-    getList() {
-      treeList().then(response => {
-        this.modelNodeData = response.data;
-        this.loading = false;
-        if (this.modelNodeData.length > 0) {
-          this.treeExpandData.push(this.modelNodeData[0].id);
-          this.$emit("changeNode", this.modelNodeData[0]);
-          this.$refs.rostering_shift.modelNodeChange(this.modelNodeData[0]);
-          this.$refs.rostering_duty.modelNodeChange(this.modelNodeData[0]);
-          this.$refs.scheme.modelNodeChange(this.modelNodeData[0]);
-        } else {
-          this.$emit("changeNode", '');
-        }
-        this.$nextTick(() => {
-          if (this.modelNodeData.length > 0) {
-            this.$refs.modelNodeTree.setCurrentKey(this.modelNodeData[0].id);
-          }
-        })
-      });
-    },
-    changeNode(data, node, ev) {
-      this.$emit("changeNode", data);
-      this.$refs.rostering_shift.modelNodeChange(data);
-      this.$refs.rostering_duty.modelNodeChange(data);
-      this.$refs.scheme.modelNodeChange(data);
-    },
-    handleClick(tab, event) {
-      this.activeName = tab.name;
-    },
-    // 鐐瑰嚮鎸夐挳锛屽垏鎹㈡姌鍙犱笌灞曞紑
-    toggleCollapse() {
-      this.isCollapse = !this.isCollapse
-    },
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/workforce/shiftManagement/rostering_shift.vue b/energy_management_ui/src/views/workforce/shiftManagement/rostering_shift.vue
deleted file mode 100644
index 3ec450a..0000000
--- a/energy_management_ui/src/views/workforce/shiftManagement/rostering_shift.vue
+++ /dev/null
@@ -1,342 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['workforce:shiftManagement:add']"
-        >鏂板</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['workforce:shiftManagement:edit']"
-        >淇敼</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['workforce:shiftManagement:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['workforce:shiftManagement:export']"
-        >瀵煎嚭</el-button>
-      </el-col>
-    </el-row>
-
-    <el-table v-loading="loading" :data="managementList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="缂栧彿" align="center" prop="code" />
-      <el-table-column label="椤哄簭鍙�" align="center" prop="orderNo"  />
-      <el-table-column label="缁勭粐缁撴瀯" align="center" prop="deptName"  />
-      <el-table-column label="鐝鍚嶇О" align="center" prop="name" />
-      <el-table-column label="寮�濮嬫椂闂�" align="center" prop="startTime" width="180"/>
-      <el-table-column label="缁撴潫鏃堕棿" align="center" prop="enddTime" width="180"/>
-      <el-table-column label="鏄惁璺ㄥぉ" align="center" prop="isCrossDay" :formatter="isCrossDayFormat" />
-      <el-table-column label="鎻忚堪" align="center" prop="description"  />
-      <el-table-column label="鍒涘缓浜�" align="center" prop="createBy"  />
-      <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.createTime) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="淇敼浜�" align="center" prop="updateBy"  />
-      <el-table-column label="淇敼鏃堕棿" align="center" prop="updateTime" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.updateTime) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['workforce:shiftManagement:edit']"
-          >淇敼</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['workforce:shiftManagement:remove']"
-          >鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 娣诲姞鎴栦慨鏀规帓鐝鐞嗚缃璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="缁勭粐缁撴瀯" prop="deptName">
-          <span>{{form.deptName}}</span>
-        </el-form-item>
-        <el-form-item label="缂栧彿" prop="code">
-          <el-input v-model="form.code" placeholder="璇疯緭鍏ョ紪鍙�" />
-        </el-form-item>
-        <el-form-item label="鐝鍚嶇О" prop="name">
-          <el-input v-model="form.name" placeholder="璇疯緭鍏ョ彮娆″悕绉�" />
-        </el-form-item>
-        <el-form-item label="寮�濮嬫椂闂�" prop="startTime">
-          <el-time-picker clearable size="small" style="width: 200px"
-            v-model="form.startTime"
-            format='HH:mm:ss'
-            value-format="HH:mm:ss"
-            placeholder="閫夋嫨寮�濮嬫椂闂�">
-          </el-time-picker>
-        </el-form-item>
-        <el-form-item label="缁撴潫鏃堕棿" prop="enddTime">
-          <el-time-picker clearable size="small" style="width: 200px"
-            v-model="form.enddTime"
-            format='HH:mm:ss'
-            value-format="HH:mm:ss"
-            placeholder="閫夋嫨缁撴潫鏃堕棿">
-          </el-time-picker>
-        </el-form-item>
-        <el-form-item label="鏄惁璺ㄥぉ">
-          <el-radio-group v-model="form.isCrossDay">
-            <el-radio
-              v-for="dict in isCrossDayOptions"
-              :key="dict.dictValue"
-              :label="dict.dictValue"
-            >{{dict.dictLabel}}</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="椤哄簭鍙�" prop="orderNo">
-          <el-input v-model="form.orderNo" placeholder="璇疯緭鍏ラ『搴忓彿" />
-        </el-form-item>
-        <el-form-item label="鎻忚堪" prop="description">
-          <el-input v-model="form.description" placeholder="璇疯緭鍏ユ弿杩�" />
-        </el-form-item>
-
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-  import { listManagement, getManagement, delManagement, addManagement, updateManagement, exportManagement } from "@/api/workforce/management";
-
-  export default {
-    data() {
-      return {
-        // 閬僵灞�
-        loading: true,
-        // 閫変腑鏁扮粍
-        ids: [],
-        // 闈炲崟涓鐢�
-        single: true,
-        // 闈炲涓鐢�
-        multiple: true,
-        // 鎬绘潯鏁�
-        total: 0,
-        // 鎺掔彮绠$悊璁剧疆琛ㄦ牸鏁版嵁
-        managementList: [],
-        // 寮瑰嚭灞傛爣棰�
-        title: "",
-        // 鏄惁鏄剧ず寮瑰嚭灞�
-        open: false,
-        // 鏄惁璺ㄥぉ瀛楀吀
-        isCrossDayOptions: [],
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          code: undefined,
-          name: undefined,
-          deptId: undefined,
-          startTime: undefined,
-          enddTime: undefined,
-          isCrossDay: undefined,
-          orderNo: undefined,
-          description: undefined,
-          createBy: undefined,
-          createTime: undefined,
-          updateBy: undefined,
-          updateTime:undefined,
-        },
-        node:"",
-        deptName:"",
-        // 琛ㄥ崟鍙傛暟
-        form: {},
-        // 琛ㄥ崟鏍¢獙
-        rules: {
-          id: [
-            { required: true, message: "id涓嶈兘涓虹┖", trigger: "blur" }
-          ],        code: [
-            { required: true, message: "缂栧彿涓嶈兘涓虹┖", trigger: "blur" }
-          ],        name: [
-            { required: true, message: "鐝鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
-          ],        startTime: [
-            { required: true, message: "寮�濮嬫椂闂翠笉鑳戒负绌�", trigger: "blur" }
-          ],        enddTime: [
-            { required: true, message: "缁撴潫鏃堕棿涓嶈兘涓虹┖", trigger: "blur" }
-          ],      }
-      };
-    },
-    created() {
-      this.getList();
-      this.getDicts("sys_yes_no").then(response => {
-        this.isCrossDayOptions = response.data;
-      });
-    },
-    methods: {
-      modelNodeChange(modelNode) {
-        /* console.log(modelNode.id);
-         console.log(modelNode.label);*/
-        this.node= modelNode.id;
-        this.deptName= modelNode.label;
-        this.getList();
-      },
-      /** 鏌ヨ鎺掔彮绠$悊璁剧疆鍒楄〃 */
-      getList() {
-        this.loading = true;
-        listManagement(this.queryParams).then(response => {
-          this.managementList = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        });
-      },
-      // 鏄惁璺ㄥぉ瀛楀吀缈昏瘧
-      isCrossDayFormat(row, column) {
-        return this.selectDictLabel(this.isCrossDayOptions, row.isCrossDay);
-      },
-      // 鍙栨秷鎸夐挳
-      cancel() {
-        this.open = false;
-        this.reset();
-      },
-      // 琛ㄥ崟閲嶇疆
-      reset() {
-        this.form = {
-          id: undefined,
-          code: undefined,
-          name: undefined,
-          deptId: undefined,
-          startTime: undefined,
-          enddTime: undefined,
-          isCrossDay: "0",
-          orderNo: undefined,
-          description: undefined,
-          createBy: undefined,
-          createTime: undefined,
-          updateBy: undefined,
-          updateTime: undefined
-        };
-        this.resetForm("form");
-      },
-      // 澶氶�夋閫変腑鏁版嵁
-      handleSelectionChange(selection) {
-        this.ids = selection.map(item => item.id)
-        this.single = selection.length!=1
-        this.multiple = !selection.length
-      },
-      /** 鏂板鎸夐挳鎿嶄綔 */
-      handleAdd() {
-        this.reset();
-        this.open = true;
-        this.form.deptId=this.node;
-        this.form.deptName=this.deptName;
-        this.title = "娣诲姞鎺掔彮绠$悊璁剧疆";
-      },
-      /** 淇敼鎸夐挳鎿嶄綔 */
-      handleUpdate(row) {
-        this.reset();
-        this.form.deptId=this.node;
-        this.form.deptName=this.deptName;
-        const id = row.id || this.ids
-        getManagement(id).then(response => {
-          this.form = response.data;
-          this.open = true;
-          this.title = "淇敼鎺掔彮绠$悊璁剧疆";
-        });
-      },
-      /** 鎻愪氦鎸夐挳 */
-      submitForm: function() {
-        this.$refs["form"].validate(valid => {
-          if (valid) {
-            /*console.log(this.form);*/
-            if (this.form.id != undefined) {
-              updateManagement(this.form).then(response => {
-                if (response.code === 200) {
-                  this.msgSuccess("淇敼鎴愬姛");
-                  this.open = false;
-                  this.getList();
-                } else {
-                  this.msgError(response.msg);
-                }
-              });
-            } else {
-              addManagement(this.form).then(response => {
-                if (response.code === 200) {
-                  this.msgSuccess("鏂板鎴愬姛");
-                  this.open = false;
-                  this.getList();
-                } else {
-                  this.msgError(response.msg);
-                }
-              });
-            }
-          }
-        });
-      },
-      /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-      handleDelete(row) {
-        const ids = row.id || this.ids;
-        this.$confirm('鏄惁纭鍒犻櫎鎺掔彮绠$悊璁剧疆缂栧彿涓�"' + ids + '"鐨勬暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return delManagement(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("鍒犻櫎鎴愬姛");
-        }).catch(function() {});
-      },
-      /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-      handleExport() {
-        const queryParams = this.queryParams;
-        this.$confirm('鏄惁纭瀵煎嚭鎵�鏈夋帓鐝鐞嗚缃暟鎹」?', "璀﹀憡", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        }).then(function() {
-          return exportManagement(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        }).catch(function() {});
-      }
-    }
-  };
-</script>
diff --git a/energy_management_ui/src/views/workingProcedure/dailyWorkingProcedure/BarChart.vue b/energy_management_ui/src/views/workingProcedure/dailyWorkingProcedure/BarChart.vue
deleted file mode 100644
index cc9a0a7..0000000
--- a/energy_management_ui/src/views/workingProcedure/dailyWorkingProcedure/BarChart.vue
+++ /dev/null
@@ -1,112 +0,0 @@
-<template>
-  <div :class="className" :style="{height:height,width:width}" />
-</template>
-
-<script>
-  import echarts from 'echarts'
-  require('echarts/theme/macarons') // echarts theme
-  import resize from '../../dashboard/mixins/resize'
-
-  export default {
-    mixins: [resize],
-    props: {
-      className: {
-        type: String,
-        default: 'chart'
-      },
-      width: {
-        type: String,
-        default: '100%'
-      },
-      height: {
-        type: String,
-        default: '300px'
-      },
-      autoResize: {
-        type: Boolean,
-        default: true
-      },
-      chartData: {
-        type: Object,
-        required: true
-      }
-    },
-    data() {
-      return {
-        chart: null
-      }
-    },
-    watch: {
-      chartData: {
-        deep: true,
-        handler(val) {
-          this.setOptions(val)
-        }
-      }
-    },
-    mounted() {
-      this.$nextTick(() => {
-        this.initChart()
-      })
-    },
-    beforeDestroy() {
-      if (!this.chart) {
-        return
-      }
-      this.chart.dispose()
-      this.chart = null
-    },
-    methods: {
-      initChart() {
-        this.chart = echarts.init(this.$el, 'macarons')
-        this.setOptions(this.chartData)
-      },
-      setOptions({ expectedData, actualData,title } = {}) {
-        this.chart.setOption({
-          title: {
-            text: title,
-            left: 'left',
-            textStyle: {
-              color: '#606266',
-            }
-          },
-          tooltip: {
-            trigger: 'axis',
-            axisPointer: { // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-              type: 'shadow' // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-            }
-          },
-          grid: {
-            top: 30,
-            left: '2%',
-            right: '2%',
-            bottom: '3%',
-            containLabel: true
-          },
-          xAxis: [{
-            type: 'category',
-            data: actualData,
-            axisTick: {
-              alignWithLabel: true
-            }
-          }],
-          yAxis: [{
-            type: 'value',
-            axisTick: {
-              show: false
-            }
-          }],
-          series: [{
-            name: title,
-            type: 'bar',
-            stack: 'vistors',
-            barWidth: '60%',
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: 'cubicInOut'
-          }]
-        });
-      }
-    }
-  }
-</script>
diff --git a/energy_management_ui/src/views/workingProcedure/dailyWorkingProcedure/LineChart.vue b/energy_management_ui/src/views/workingProcedure/dailyWorkingProcedure/LineChart.vue
deleted file mode 100644
index 4354cf8..0000000
--- a/energy_management_ui/src/views/workingProcedure/dailyWorkingProcedure/LineChart.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: title,
-          left: "left",
-          textStyle: {
-            color: "#606266"
-          }
-        },
-        xAxis: {
-          data: actualData,
-          type: "category"
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 40,
-          containLabel: true
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "cross"
-          },
-          padding: [5, 10]
-        },
-        yAxis: {
-          axisTick: {
-            show: false
-          }
-        },
-        legend: {
-          data: [],
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        series: [
-          {
-            name: title,
-            itemStyle: {
-              normal: {
-                color: "#FF005A",
-                lineStyle: {
-                  color: "#FF005A",
-                  width: 2
-                }
-              }
-            },
-            smooth: true,
-            type: "line",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/workingProcedure/dailyWorkingProcedure/index.vue b/energy_management_ui/src/views/workingProcedure/dailyWorkingProcedure/index.vue
deleted file mode 100644
index b085ebf..0000000
--- a/energy_management_ui/src/views/workingProcedure/dailyWorkingProcedure/index.vue
+++ /dev/null
@@ -1,325 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鑳芥簮绫诲瀷">
-        <el-select v-model="queryParams.indexStorageId" placeholder="璇烽�夋嫨鑳芥簮鍝佺">
-          <el-option
-            v-for="dict in indexCategoryOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          ></el-option>
-        </el-select>
-      </el-form-item>
-      <!--<el-form-item label="鎶ヨ〃绫诲瀷" >
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio v-for="dict in dateTypeOptions" :key="dict.dictValue" :label="dict.dictValue" @change="handleTime(dict.dictValue)">{{dict.dictLabel}}</el-radio>
-        </el-radio-group>
-      </el-form-item>-->
-      <el-form-item label="缁熻鍖洪棿" prop="dataTime">
-        <el-date-picker clearable size="small" style="width: 200px"
-                        v-model="queryParams.dataTime"
-                        :type="dateTypes"
-                        :value-format="valueFormat"
-                        placeholder="閫夋嫨鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌ヨ</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-    <el-table :data="energyList" border style="width: 100%; margin-top: 20px" class="tableList" >
-      <el-table-column fixed label="鏇茬嚎閫夋嫨">
-        <template slot-scope="scope">
-          <el-button icon="el-icon-search" circle @click="selectChange(scope.row)" style="font-size: 10px"></el-button>
-        </template>
-      </el-table-column>
-      <el-table-column fixed prop="indexName" align="center" label="鑳芥簮鍚嶇О" min-width="240px"></el-table-column>
-      <el-table-column label="0鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value0)}}</template></el-table-column>
-      <el-table-column label="1鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value1)}}</template></el-table-column>
-      <el-table-column label="2鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value2)}}</template></el-table-column>
-      <el-table-column label="3鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value3)}}</template></el-table-column>
-      <el-table-column label="4鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value4)}}</template></el-table-column>
-      <el-table-column label="5鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value5)}}</template></el-table-column>
-      <el-table-column label="6鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value6)}}</template></el-table-column>
-      <el-table-column label="7鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value7)}}</template></el-table-column>
-      <el-table-column label="8鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value8)}}</template></el-table-column>
-      <el-table-column label="9鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value9)}}</template></el-table-column>
-      <el-table-column label="20鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value20)}}</template></el-table-column>
-      <el-table-column label="11鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value11)}}</template></el-table-column>
-      <el-table-column label="12鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value12)}}</template></el-table-column>
-      <el-table-column label="13鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value13)}}</template></el-table-column>
-      <el-table-column label="14鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value14)}}</template></el-table-column>
-      <el-table-column label="15鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value15)}}</template></el-table-column>
-      <el-table-column label="16鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value16)}}</template></el-table-column>
-      <el-table-column label="17鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value17)}}</template></el-table-column>
-      <el-table-column label="18鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value18)}}</template></el-table-column>
-      <el-table-column label="19鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value19)}}</template></el-table-column>
-      <el-table-column label="20鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value20)}}</template></el-table-column>
-      <el-table-column label="21鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value21)}}</template></el-table-column>
-      <el-table-column label="22鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value22)}}</template></el-table-column>
-      <el-table-column label="23鏃�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value23)}}</template></el-table-column>
-    </el-table>
-    <el-row :gutter="32" style="margin:30px 0">
-      <el-col :xs="24" :sm="24" :lg="12">
-        <div class="chart-wrapper">
-          <line-chart ref="LineChart" :chart-data="lineChartData" />
-        </div>
-      </el-col>
-      <el-col :xs="24" :sm="24" :lg="12">
-        <div class="chart-wrapper">
-          <bar-chart ref="BarChart" :chart-data="lineChartData" />
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-  import {getDataList,getlistChart} from "@/api/workingProcedure/dailyComprehensive/dailyComprehensive";
-  import LineChart from './LineChart'
-  import BarChart from "./BarChart";
-  export default {
-    components: {
-      LineChart,
-      BarChart
-    },
-    data() {
-      return {
-        // 閬僵灞�
-        //loading: true,
-        // 閫変腑鏁扮粍
-        ids: [],
-        // 闈炲崟涓鐢�
-        single: true,
-        // 闈炲涓鐢�
-        multiple: true,
-        // 鎬绘潯鏁�
-        total: 0,
-        dateTypeOptions:[],
-        energyList: [],
-        tableData: [],
-        tableHead:[],
-        indexCategoryOptions:[],
-        // 寮瑰嚭灞傛爣棰�
-        title: "",
-        // 鏄惁鏄剧ず寮瑰嚭灞�
-        open: false,
-        // 鏌ヨ鍙傛暟
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          indexId: undefined,
-          dataTime:undefined,
-          timeType:"HOUR",
-          indexType:undefined,
-          indexStorageId:undefined,
-        },
-        skinName:"",
-        dateTypes: 'date',
-        valueFormat:"yyyy-MM-dd",
-        lineChartData:{expectedData: [],actualData: []},
-      };
-    },
-    created() {
-      this.getList();
-      this.getTime();
-      /*this.getDicts("statisticalType").then(response => {
-        this.dateTypeOptions = response.data;
-        this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-      });*/
-      this.getDicts("report_form").then(response => {
-        this.dateTypeOptions = response.data;
-        this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-      });
-      this.getConfigKey("processEnergy").then(response => {
-        this.skinName=response.msg;
-      });
-      this.getDicts("energy_type").then(response => {
-        this.indexCategoryOptions = response.data;
-        //this.queryParams.indexStorageId = this.indexCategoryOptions.find(f => f.isDefault === 'Y');
-      });
-    },
-    methods: {
-      getList(){
-        this.queryParams.indexCode = this.$route.query.modelCode;
-        getDataList(this.queryParams).then(response => {
-          /*this.tableData=response.data.tabledata;
-          this.tableHead=response.data.tablehead;*/
-          this.energyList=response.data;
-        })
-      },
-      selectChange(row){
-        this.queryParams.indexId=row.indexId;
-        getlistChart(this.queryParams).then(response => {
-          let actualData=[];
-          let expectedData=[];
-          let title="";
-          response.data.forEach(item => {
-            expectedData.push(this.numFilter(item.value));
-            actualData.push(item.timeCode.slice(item.timeCode.length-2,item.timeCode.length)+"鏃�");
-            title=item.indexName+"("+item.unitId+")";
-          })
-          this.lineChartData.actualData=actualData;
-          this.lineChartData.expectedData=expectedData;
-          this.lineChartData.title=title
-          this.$refs.LineChart.initChart(this.lineChartData);
-          this.$refs.BarChart.initChart(this.lineChartData);
-        })
-      },
-      /** 鎼滅储鎸夐挳鎿嶄綔 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.getList();
-        this.selectChange();
-      },
-      /** 閲嶇疆鎸夐挳鎿嶄綔 */
-      resetQuery() {
-        this.resetForm("queryForm");
-        this.handleQuery();
-      },
-      // 澶氶�夋閫変腑鏁版嵁
-      handleSelectionChange(selection) {
-        this.ids = selection.map(item => item.id)
-        this.single = selection.length!=1
-        this.multiple = !selection.length
-      },
-      getSummaries(param) {
-        const { columns, data } = param;
-        const sums = [];
-        columns.forEach((column, index) => {
-          if (index === 0) {
-            sums[index] = '';
-            return;
-          }
-          if (index === 1) {
-            sums[index] = '鍚堣';
-            return;
-          }
-          const values = data.map(item => Number(item[column.property]));
-          if (!values.every(value => isNaN(value))) {
-            sums[index] = values.reduce((prev, curr) => {
-              const value = Number(curr);
-              if (!isNaN(value)) {
-                return prev + curr;
-              } else {
-                return prev;
-              }
-            }, 0);
-            //sums[index];
-            sums[index]=this.numFilter(sums[index])
-          } else {
-            sums[index] = '0';
-          }
-        });
-        return sums;
-      },
-      numFilter(value) {// 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-        let realVal = '' ;
-        if (!isNaN(value) && value !== '' && value !== null) {
-          realVal = parseFloat(value).toFixed(this.skinName)
-        } else {
-          realVal = '0'
-        }
-        return realVal
-      },
-      getTime(){
-        var date = new Date()
-        var year = date.getFullYear()
-        var month = date.getMonth() + 1
-        var date = date.getDate()
-        month = month < 10 ? '0' + month : month
-        date = date < 10 ? '0' + date : date
-        this.queryParams.dataTime = year + '-' + month + '-' + date
-      },
-      handleTime(date){
-        if(date=='MONTH'){
-          this.dateTypes= 'year',
-            this.valueFormat='yyyy'
-        }else if(date=='DAY'){
-          this.dateTypes= 'month',
-            this.valueFormat='yyyy-MM'
-        }else{
-          this.dateTypes= 'date',
-            this.valueFormat='yyyy-MM-dd'
-        }
-      },
-    }
-  };
-</script>
-<style lang="scss" scoped>
-  .el-table__body{
-    border: 1px solid #000000 !important;
-  }
-  .el-table th.is-leaf, .el-table td {
-    border-bottom: 1px solid #000000 !important;
-    border-right: 1px solid #000000 !important;
-  }
-  .tableList tr td{
-    text-align: center;
-  }
-  .dashboard-editor-container {
-    padding: 32px;
-    background-color: rgb(240, 242, 245);
-    position: relative;
-    .chart-wrapper {
-      background: #fff;
-      padding: 16px 16px 0;
-      margin-bottom: 32px;
-    }
-  }
-
-  @media (max-width:1024px) {
-    .chart-wrapper {
-      padding: 8px;
-    }
-  }
-  .live{
-    position: fixed;
-    right: 0px;
-    top:70px;
-    display: flex;
-    flex-direction:column;
-    justify-content:center;
-    align-items:center;
-    width: 100px;
-    height: 60px;
-    background-color: red;
-    animation: fade 600ms infinite;
-    -webkit-animation: fade 600ms infinite;
-  }
-  .live_content{
-    font-size: 18px;
-    color: white;
-    font-weight: bold;
-  }
-  .live_number{
-    font-size: 32px;
-    color: white;
-    font-weight: bolder;
-  }
-  @keyframes fade {
-    from {
-      opacity: 1.0;
-    }
-    50% {
-      opacity: 0.4;
-    }
-    to {
-      opacity: 1.0;
-    }
-  }
-
-  @-webkit-keyframes fade {
-    from {
-      opacity: 1.0;
-    }
-    50% {
-      opacity: 0.4;
-    }
-    to {
-      opacity: 1.0;
-    }
-  }
-</style>
diff --git a/energy_management_ui/src/views/workingProcedure/monthlyWorkingProcedure/BarChart.vue b/energy_management_ui/src/views/workingProcedure/monthlyWorkingProcedure/BarChart.vue
deleted file mode 100644
index 44463a5..0000000
--- a/energy_management_ui/src/views/workingProcedure/monthlyWorkingProcedure/BarChart.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: title,
-          left: "left",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        grid: {
-          top: 30,
-          left: "2%",
-          right: "2%",
-          bottom: "3%",
-          containLabel: true
-        },
-        xAxis: [
-          {
-            type: "category",
-            data: actualData,
-            axisTick: {
-              alignWithLabel: true
-            }
-          }
-        ],
-        yAxis: [
-          {
-            type: "value",
-            axisTick: {
-              show: false
-            }
-          }
-        ],
-        series: [
-          {
-            name: title,
-            type: "bar",
-            stack: "vistors",
-            barWidth: "60%",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/workingProcedure/monthlyWorkingProcedure/LineChart.vue b/energy_management_ui/src/views/workingProcedure/monthlyWorkingProcedure/LineChart.vue
deleted file mode 100644
index af2321f..0000000
--- a/energy_management_ui/src/views/workingProcedure/monthlyWorkingProcedure/LineChart.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: title,
-          left: "left",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        xAxis: {
-          data: actualData,
-          type: "category"
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 40,
-          containLabel: true
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "cross"
-          },
-          padding: [5, 10]
-        },
-        yAxis: {
-          axisTick: {
-            show: false
-          }
-        },
-        legend: {
-          data: [],
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        series: [
-          {
-            name: title,
-            itemStyle: {
-              normal: {
-                color: "#FF005A",
-                lineStyle: {
-                  color: "#FF005A",
-                  width: 2
-                }
-              }
-            },
-            smooth: true,
-            type: "line",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/workingProcedure/monthlyWorkingProcedure/index.vue b/energy_management_ui/src/views/workingProcedure/monthlyWorkingProcedure/index.vue
deleted file mode 100644
index eb473ee..0000000
--- a/energy_management_ui/src/views/workingProcedure/monthlyWorkingProcedure/index.vue
+++ /dev/null
@@ -1,324 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item label="鑳芥簮绫诲瀷">
-        <el-select
-          v-model="queryParams.indexStorageId"
-          placeholder="璇烽�夋嫨鑳芥簮鍝佺"
-        >
-          <el-option
-            v-for="dict in indexCategoryOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          ></el-option>
-        </el-select>
-      </el-form-item>
-      <!--<el-form-item label="鎶ヨ〃绫诲瀷" >
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio v-for="dict in dateTypeOptions" :key="dict.dictValue" :label="dict.dictValue" @change="handleTime(dict.dictValue)">{{dict.dictLabel}}</el-radio>
-        </el-radio-group>
-      </el-form-item>-->
-      <el-form-item label="缁熻鏃堕棿">
-        <el-date-picker
-          clearable
-          size="small"
-          style="width: 200px"
-          v-model="queryParams.dataTime"
-          type="month"
-          value-format="yyyy-MM"
-          placeholder="閫夋嫨鏃ユ湡"
-        >
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >鏌ヨ</el-button
-        >
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-          >閲嶇疆</el-button
-        >
-        <!--<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport">瀵煎嚭</el-button>-->
-      </el-form-item>
-    </el-form>
-
-    <el-table :data="tableData" border style="width: 100%;margin-top: 20px">
-      <el-table-column
-        prop="indexName"
-        align="center"
-        label="鏇茬嚎閫夋嫨"
-        width="110"
-      >
-        <template slot-scope="scope">
-          <el-button
-            icon="el-icon-search"
-            circle
-            @click="selectChange(scope.row.indexId)"
-            style="font-size: 10px"
-          ></el-button>
-        </template>
-      </el-table-column>
-      <el-table-column
-        prop="indexName"
-        align="center"
-        label="鑳芥簮鎸囨爣鍚嶇О"
-        min-width="220"
-      />
-
-      <el-table-column
-        v-for="index in 31"
-        :key="index"
-        :label="`${index}鏃"
-        align="center"
-        min-width="140px"
-      >
-        <template slot-scope="scope">
-          <span style="font-size: 12px">
-            {{ numFilter(scope.row[`value${index}`]) || "--" }}
-          </span>
-        </template>
-      </el-table-column>
-    </el-table>
-    <el-row :gutter="32" style="margin:30px 0">
-      <el-col :xs="24" :sm="24" :lg="12">
-        <div class="chart-wrapper">
-          <line-chart ref="LineChart" :chart-data="lineChartData" />
-        </div>
-      </el-col>
-      <el-col :xs="24" :sm="24" :lg="12">
-        <div class="chart-wrapper">
-          <bar-chart ref="BarChart" :chart-data="lineChartData" />
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import {
-  getDataList,
-  exportList,
-  getlistChart
-} from "@/api/comprehensiveStatistics/monthlyComprehensive/monthlyComprehensive";
-import LineChart from "./LineChart";
-import BarChart from "./BarChart";
-export default {
-  components: {
-    LineChart,
-    BarChart
-  },
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      checked: false,
-      dateRange: [],
-      dateTypeOptions: [],
-      energyList: [],
-      tableData: [],
-      tableHead: [],
-      indexCategoryOptions: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        indexCode: undefined,
-        indexId: undefined,
-        dataTime: undefined,
-        timeType: "DAY",
-        indexType: undefined,
-        indexStorageId: undefined
-      },
-      skinName: "",
-      lineChartData: { expectedData: [], actualData: [] }
-    };
-  },
-  created() {
-    this.getDicts("report_form").then(response => {
-      this.dateTypeOptions = response.data;
-      //this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-    });
-    this.getConfigKey("comprehensive").then(response => {
-      this.skinName = response.msg;
-    });
-    this.getDicts("energy_type").then(response => {
-      this.indexCategoryOptions = response.data;
-      //this.queryParams.indexStorageId = this.indexCategoryOptions.find(f => f.isDefault === 'Y');
-    });
-    this.getList();
-    this.getTime();
-  },
-  methods: {
-    getList() {
-      this.queryParams.indexCode = this.$route.query.modelCode;
-      getDataList(this.queryParams).then(response => {
-        this.tableData = response.data.tabledata;
-        this.tableHead = response.data.tablehead;
-      });
-    },
-    selectChange(data) {
-      this.queryParams.indexId = data;
-      getlistChart(this.queryParams).then(response => {
-        let actualData = [];
-        let expectedData = [];
-        let title = "";
-        response.data.forEach(item => {
-          expectedData.push(this.numFilter(item.value));
-          actualData.push(
-            item.timeCode.slice(
-              item.timeCode.length - 2,
-              item.timeCode.length
-            ) + "鏃�"
-          );
-          title = item.indexName + "(" + item.unitId + ")";
-        });
-        this.lineChartData.actualData = actualData;
-        this.lineChartData.expectedData = expectedData;
-        this.lineChartData.title = title;
-        this.$refs.LineChart.initChart(this.lineChartData);
-        this.$refs.BarChart.initChart(this.lineChartData);
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-      this.selectChange();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭缁煎悎鑳借��?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function() {
-          return exportList(queryParams);
-        })
-        .then(response => {
-          this.download(response.msg);
-        })
-        .catch(function() {});
-    },
-    numFilter(value) {
-      // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = "";
-      if (!isNaN(value) && value !== "" && value !== null) {
-        realVal = parseFloat(value).toFixed(this.skinName);
-      } else {
-        realVal = "0";
-      }
-      return realVal;
-    },
-    getTime() {
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var date = date.getDate();
-      month = month < 10 ? "0" + month : month;
-      date = date < 10 ? "0" + date : date;
-      this.queryParams.dataTime = year + "-" + month;
-      /*let startTime = year + '-' + month + '-' + date
-      let endTime = year + '-' + month + '-' + (date + 1)
-      this.dateRange = [startTime, endTime]*/
-    },
-
-    handleTime(date) {
-      if (date == "MONTH") {
-        (this.dateTypes = "year"), (this.valueFormat = "yyyy");
-      } else if (date == "DAY") {
-        (this.dateTypes = "month"), (this.valueFormat = "yyyy-MM");
-      } else {
-        (this.dateTypes = "date"), (this.valueFormat = "yyyy-MM-dd");
-      }
-    }
-  }
-};
-</script>
-<style lang="scss" scoped>
-@media (max-width: 1024px) {
-  .chart-wrapper {
-    padding: 8px;
-  }
-}
-.live {
-  position: fixed;
-  right: 0px;
-  top: 70px;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  width: 100px;
-  height: 60px;
-  background-color: red;
-  animation: fade 600ms infinite;
-  -webkit-animation: fade 600ms infinite;
-}
-.live_content {
-  font-size: 18px;
-  color: white;
-  font-weight: bold;
-}
-.live_number {
-  font-size: 32px;
-  color: white;
-  font-weight: bolder;
-}
-@keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-@-webkit-keyframes fade {
-  from {
-    opacity: 1;
-  }
-  50% {
-    opacity: 0.4;
-  }
-  to {
-    opacity: 1;
-  }
-}
-</style>
diff --git a/energy_management_ui/src/views/workingProcedure/yearWorkingProcedure/BarChart.vue b/energy_management_ui/src/views/workingProcedure/yearWorkingProcedure/BarChart.vue
deleted file mode 100644
index 44463a5..0000000
--- a/energy_management_ui/src/views/workingProcedure/yearWorkingProcedure/BarChart.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: title,
-          left: "left",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-            type: "shadow" // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-          }
-        },
-        grid: {
-          top: 30,
-          left: "2%",
-          right: "2%",
-          bottom: "3%",
-          containLabel: true
-        },
-        xAxis: [
-          {
-            type: "category",
-            data: actualData,
-            axisTick: {
-              alignWithLabel: true
-            }
-          }
-        ],
-        yAxis: [
-          {
-            type: "value",
-            axisTick: {
-              show: false
-            }
-          }
-        ],
-        series: [
-          {
-            name: title,
-            type: "bar",
-            stack: "vistors",
-            barWidth: "60%",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/workingProcedure/yearWorkingProcedure/LineChart.vue b/energy_management_ui/src/views/workingProcedure/yearWorkingProcedure/LineChart.vue
deleted file mode 100644
index af2321f..0000000
--- a/energy_management_ui/src/views/workingProcedure/yearWorkingProcedure/LineChart.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "../../dashboard/mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData, title } = {}) {
-      this.chart.setOption({
-        title: {
-          text: title,
-          left: "left",
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        xAxis: {
-          data: actualData,
-          type: "category"
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 40,
-          containLabel: true
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "cross"
-          },
-          padding: [5, 10]
-        },
-        yAxis: {
-          axisTick: {
-            show: false
-          }
-        },
-        legend: {
-          data: [],
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        series: [
-          {
-            name: title,
-            itemStyle: {
-              normal: {
-                color: "#FF005A",
-                lineStyle: {
-                  color: "#FF005A",
-                  width: 2
-                }
-              }
-            },
-            smooth: true,
-            type: "line",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/energy_management_ui/src/views/workingProcedure/yearWorkingProcedure/index.vue b/energy_management_ui/src/views/workingProcedure/yearWorkingProcedure/index.vue
deleted file mode 100644
index fa32be7..0000000
--- a/energy_management_ui/src/views/workingProcedure/yearWorkingProcedure/index.vue
+++ /dev/null
@@ -1,330 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="鑳芥簮绫诲瀷">
-        <el-select v-model="queryParams.indexStorageId" placeholder="璇烽�夋嫨鑳芥簮鍝佺">
-          <el-option
-            v-for="dict in indexCategoryOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          ></el-option>
-        </el-select>
-      </el-form-item>
-      <!--<el-form-item label="鎶ヨ〃绫诲瀷" >
-        <el-radio-group v-model="queryParams.timeType">
-          <el-radio v-for="dict in dateTypeOptions" :key="dict.dictValue" :label="dict.dictValue" @change="handleTime(dict.dictValue)">{{dict.dictLabel}}</el-radio>
-        </el-radio-group>
-      </el-form-item>-->
-      <el-form-item label="缁熻鏃堕棿">
-        <el-date-picker clearable size="small" style="width: 200px"
-                        v-model="queryParams.dataTime"
-                        type="year"
-                        value-format="yyyy"
-                        placeholder="閫夋嫨鏃ユ湡">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌ヨ</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-        <!--<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport">瀵煎嚭</el-button>-->
-      </el-form-item>
-    </el-form>
-    <el-table :data="energyList" border style="width: 100%; margin-top: 20px" class="tableList" >
-      <el-table-column fixed label="鏇茬嚎閫夋嫨">
-        <template slot-scope="scope">
-          <el-button icon="el-icon-search" circle @click="selectChange(scope.row)" style="font-size: 10px"></el-button>
-        </template>
-      </el-table-column>
-      <el-table-column fixed prop="indexName" align="center" label="鑳芥簮鍚嶇О" min-width="240px"></el-table-column>
-      <el-table-column label="1鏈�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value1)}}</template></el-table-column>
-      <el-table-column label="2鏈�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value2)}}</template></el-table-column>
-      <el-table-column label="3鏈�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value3)}}</template></el-table-column>
-      <el-table-column label="4鏈�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value4)}}</template></el-table-column>
-      <el-table-column label="5鏈�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value5)}}</template></el-table-column>
-      <el-table-column label="6鏈�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value6)}}</template></el-table-column>
-      <el-table-column label="7鏈�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value7)}}</template></el-table-column>
-      <el-table-column label="8鏈�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value8)}}</template></el-table-column>
-      <el-table-column label="9鏈�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value9)}}</template></el-table-column>
-      <el-table-column label="10鏈�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value10)}}</template></el-table-column>
-      <el-table-column label="11鏈�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value11)}}</template></el-table-column>
-      <el-table-column label="12鏈�" align="center" min-width="140px"> <template slot-scope="scope">{{numFilter(scope.row.value12)}}</template></el-table-column>
-    </el-table>
-    <el-row :gutter="32" style="margin:30px 0">
-      <el-col :xs="24" :sm="24" :lg="12">
-        <div class="chart-wrapper">
-          <line-chart ref="LineChart" :chart-data="lineChartData" />
-        </div>
-      </el-col>
-      <el-col :xs="24" :sm="24" :lg="12">
-        <div class="chart-wrapper">
-          <bar-chart ref="BarChart" :chart-data="lineChartData" />
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-  import {getDataList,exportList,getlistChart} from "@/api/comprehensiveStatistics/yearComprehensive/yearComprehensive";
-  import LineChart from './LineChart'
-  import BarChart from "./BarChart";
-  export default {
-    components: {
-      LineChart,
-      BarChart
-    },
-  data() {
-    return {
-      // 閬僵灞�
-      //loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      checked: false,
-      dateRange:[],
-      dateTypeOptions:[],
-      energyList: [],
-      tableData: [],
-      tableHead:[],
-      indexCategoryOptions:[],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        indexCode: undefined,
-        indexId: undefined,
-        dataTime:undefined,
-        timeType:"MONTH",
-        indexType:undefined,
-        indexStorageId:undefined,
-      },
-      skinName:"",
-      lineChartData:{expectedData: [],actualData: []},
-    };
-  },
-  created() {
-    this.getDicts("report_form").then(response => {
-      this.dateTypeOptions = response.data;
-      //this.queryParams.timeType = this.dateTypeOptions.find(f => f.isDefault === 'Y').dictValue;
-    });
-    this.getConfigKey("comprehensive").then(response => {
-      this.skinName=response.msg;
-    });
-    this.getDicts("energy_type").then(response => {
-      this.indexCategoryOptions = response.data;
-      //this.queryParams.indexStorageId = this.indexCategoryOptions.find(f => f.isDefault === 'Y');
-    });
-    this.getList();
-    this.getTime();
-  },
-  methods: {
-    getList() {
-      this.queryParams.indexCode = this.$route.query.modelCode;
-      var date = new Date()
-      var year = date.getFullYear()
-      var month = date.getMonth() + 1
-      if(this.queryParams.dataTime==undefined){
-        this.queryParams.dataTime=year + '-' + month
-      }
-      let times=this.queryParams.dataTime.slice(0,4);
-      this.queryParams.beginTime=times+"-01-01 00:00:00"
-      this.queryParams.endTime=times+"-12-31 00:00:00"
-      getDataList(this.queryParams).then(response => {
-        this.energyList = response.data;
-      })
-    },
-    selectChange(row){
-      this.queryParams.indexId=row.indexId;
-      getlistChart(this.queryParams).then(response => {
-        let actualData=[];
-        let expectedData=[];
-        let title="";
-        response.data.forEach(item => {
-          expectedData.push(this.numFilter(item.value));
-          actualData.push(item.timeCode.slice(item.timeCode.length-2,item.timeCode.length)+"鏈�");
-          title=item.indexName+"("+item.unitId+")";
-        })
-        this.lineChartData.actualData=actualData;
-        this.lineChartData.expectedData=expectedData;
-        this.lineChartData.title=title
-        this.$refs.LineChart.initChart(this.lineChartData);
-        this.$refs.BarChart.initChart(this.lineChartData);
-      })
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-      this.selectChange();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('鏄惁纭瀵煎嚭缁煎悎鑳借��?', "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(function () {
-        return exportList(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    },
-    getSummaries(param) {
-      const {columns, data} = param;
-      const sums = [];
-      columns.forEach((column, index) => {
-        if (index === 0) {
-          sums[index] = '';
-          return;
-        }
-        if (index === 1) {
-          sums[index] = '鍚堣';
-          return;
-        }
-        const values = data.map(item => Number(item[column.property]));
-        if (!values.every(value => isNaN(value))) {
-          sums[index] = values.reduce((prev, curr) => {
-            const value = Number(curr);
-            if (!isNaN(value)) {
-              return prev + curr;
-            } else {
-              return prev;
-            }
-          }, 0);
-          //sums[index];
-          sums[index] = this.numFilter(sums[index])
-        } else {
-          sums[index] = '0';
-        }
-      });
-      return sums;
-    },
-    numFilter(value) {// 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
-      let realVal = '';
-      if (!isNaN(value) && value !== '' && value !== null) {
-        realVal = parseFloat(value).toFixed(this.skinName)
-      } else {
-        realVal = '0'
-      }
-      return realVal
-    },
-    getTime() {
-      var date = new Date()
-      var year = date.getFullYear()
-      var month = date.getMonth() + 1
-      var date = date.getDate()
-      month = month < 10 ? '0' + month : month
-      date = date < 10 ? '0' + date : date
-      this.queryParams.dataTime=year + '-' + month
-    },
-
-    handleTime(date){
-      if(date=='MONTH'){
-        this.dateTypes= 'year',
-          this.valueFormat='yyyy'
-      }else if(date=='DAY'){
-        this.dateTypes= 'month',
-          this.valueFormat='yyyy-MM'
-      }else{
-        this.dateTypes= 'date',
-          this.valueFormat='yyyy-MM-dd'
-      }
-    },
-  }
-};
-</script>
-<style lang="scss" scoped>
-  .tableList th.is-leaf, .tableList td{
-    border-bottom: 1px solid #000000 !important;
-    border-right: 1px solid #000000 !important;
-  }
-  .tableList{
-    border: 1px solid #000000 !important;
-  }
-.dashboard-editor-container {
- padding: 32px;
- background-color: rgb(240, 242, 245);
- position: relative;
-  .chart-wrapper {
-    background: #fff;
-    padding: 16px 16px 0;
-    margin-bottom: 32px;
-  }
-  }
-
-  @media (max-width:1024px) {
-    .chart-wrapper {
-      padding: 8px;
-    }
-  }
-  .live{
-    position: fixed;
-    right: 0px;
-    top:70px;
-    display: flex;
-    flex-direction:column;
-    justify-content:center;
-    align-items:center;
-    width: 100px;
-    height: 60px;
-    background-color: red;
-    animation: fade 600ms infinite;
-    -webkit-animation: fade 600ms infinite;
-  }
-  .live_content{
-    font-size: 18px;
-    color: white;
-    font-weight: bold;
-  }
-  .live_number{
-    font-size: 32px;
-    color: white;
-    font-weight: bolder;
-  }
-  @keyframes fade {
-    from {
-      opacity: 1.0;
-    }
-    50% {
-      opacity: 0.4;
-    }
-    to {
-      opacity: 1.0;
-    }
-  }
-
-  @-webkit-keyframes fade {
-    from {
-      opacity: 1.0;
-    }
-    50% {
-      opacity: 0.4;
-    }
-    to {
-      opacity: 1.0;
-    }
-  }
-</style>
diff --git "a/energy_management_ui/upload/\346\224\277\347\255\226\346\263\225\350\247\204\350\241\214\346\224\277\351\231\204\344\273\266.doc" "b/energy_management_ui/upload/\346\224\277\347\255\226\346\263\225\350\247\204\350\241\214\346\224\277\351\231\204\344\273\266.doc"
deleted file mode 100644
index 3d91ac8..0000000
--- "a/energy_management_ui/upload/\346\224\277\347\255\226\346\263\225\350\247\204\350\241\214\346\224\277\351\231\204\344\273\266.doc"
+++ /dev/null
Binary files differ
diff --git a/energy_management_ui/vue.config.js b/energy_management_ui/vue.config.js
deleted file mode 100644
index 5b7ded5..0000000
--- a/energy_management_ui/vue.config.js
+++ /dev/null
@@ -1,140 +0,0 @@
-"use strict";
-const path = require("path");
-const defaultSettings = require("./src/settings.js");
-
-function resolve(dir) {
-  return path.join(__dirname, dir);
-}
-
-const name = defaultSettings.title || "鏅虹⒊鏈潵鑳芥簮绠$悊绯荤粺"; // 鏍囬
-
-const port = process.env.port || process.env.npm_config_port || 80; // 绔彛
-
-// vue.config.js 閰嶇疆璇存槑
-//瀹樻柟vue.config.js 鍙傝�冩枃妗� https://cli.vuejs.org/zh/config/#css-loaderoptions
-// 杩欓噷鍙垪涓�閮ㄥ垎锛屽叿浣撻厤缃弬鑰冩枃妗�
-module.exports = {
-  // 閮ㄧ讲鐢熶骇鐜鍜屽紑鍙戠幆澧冧笅鐨刄RL銆�
-  // 榛樿鎯呭喌涓嬶紝Vue CLI 浼氬亣璁句綘鐨勫簲鐢ㄦ槸琚儴缃插湪涓�涓煙鍚嶇殑鏍硅矾寰勪笂
-  // 渚嬪 https://www.ruoyi.vip/銆傚鏋滃簲鐢ㄨ閮ㄧ讲鍦ㄤ竴涓瓙璺緞涓婏紝浣犲氨闇�瑕佺敤杩欎釜閫夐」鎸囧畾杩欎釜瀛愯矾寰勩�備緥濡傦紝濡傛灉浣犵殑搴旂敤琚儴缃插湪 https://www.ruoyi.vip/admin/锛屽垯璁剧疆 baseUrl 涓� /admin/銆�
-  publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
-  // 鍦╪pm run build 鎴� yarn build 鏃� 锛岀敓鎴愭枃浠剁殑鐩綍鍚嶇О锛堣鍜宐aseUrl鐨勭敓浜х幆澧冭矾寰勪竴鑷达級锛堥粯璁ist锛�
-  outputDir: "dist",
-  // 鐢ㄤ簬鏀剧疆鐢熸垚鐨勯潤鎬佽祫婧� (js銆乧ss銆乮mg銆乫onts) 鐨勶紱锛堥」鐩墦鍖呬箣鍚庯紝闈欐�佽祫婧愪細鏀惧湪杩欎釜鏂囦欢澶逛笅锛�
-  assetsDir: "static",
-  // 鏄惁寮�鍚痚slint淇濆瓨妫�娴嬶紝鏈夋晥鍊硷細ture | false | 'error'
-  lintOnSave: process.env.NODE_ENV === "development",
-  // 濡傛灉浣犱笉闇�瑕佺敓浜х幆澧冪殑 source map锛屽彲浠ュ皢鍏惰缃负 false 浠ュ姞閫熺敓浜х幆澧冩瀯寤恒��
-  productionSourceMap: false,
-  // webpack-dev-server 鐩稿叧閰嶇疆
-  devServer: {
-    host: "0.0.0.0",
-    port: port,
-    proxy: {
-      // detail: https://cli.vuejs.org/config/#devserver-proxy
-      [process.env.VUE_APP_BASE_API]: {
-        target: "http://localhost:8097",
-        changeOrigin: true,
-        pathRewrite: {
-          ["^" + process.env.VUE_APP_BASE_API]: ""
-        }
-      }
-    },
-    disableHostCheck: true
-  },
-  css: {
-    loaderOptions: {
-      css: {},
-      postcss: {
-        plugins: [
-          // require('postcss-px2rem')({
-          //   remUnit: 20
-          // })
-        ]
-      }
-    }
-  },
-  configureWebpack: {
-    name: name,
-    resolve: {
-      alias: {
-        "@": resolve("src")
-      }
-    }
-  },
-  chainWebpack(config) {
-    config.plugins.delete("preload"); // TODO: need test
-    config.plugins.delete("prefetch"); // TODO: need test
-
-    // set svg-sprite-loader
-    config.module
-      .rule("svg")
-      .exclude.add(resolve("src/assets/icons"))
-      .end();
-    config.module
-      .rule("icons")
-      .test(/\.svg$/)
-      .include.add(resolve("src/assets/icons"))
-      .end()
-      .use("svg-sprite-loader")
-      .loader("svg-sprite-loader")
-      .options({
-        symbolId: "icon-[name]"
-      })
-      .end();
-
-    // set preserveWhitespace
-    config.module
-      .rule("vue")
-      .use("vue-loader")
-      .loader("vue-loader")
-      .tap(options => {
-        options.compilerOptions.preserveWhitespace = true;
-        return options;
-      })
-      .end();
-
-    config
-      // https://webpack.js.org/configuration/devtool/#development
-      .when(process.env.NODE_ENV === "development", config =>
-        config.devtool("cheap-source-map")
-      );
-
-    config.when(process.env.NODE_ENV !== "development", config => {
-      config
-        .plugin("ScriptExtHtmlWebpackPlugin")
-        .after("html")
-        .use("script-ext-html-webpack-plugin", [
-          {
-            // `runtime` must same as runtimeChunk name. default is `runtime`
-            inline: /runtime\..*\.js$/
-          }
-        ])
-        .end();
-      config.optimization.splitChunks({
-        chunks: "all",
-        cacheGroups: {
-          libs: {
-            name: "chunk-libs",
-            test: /[\\/]node_modules[\\/]/,
-            priority: 10,
-            chunks: "initial" // only package third parties that are initially dependent
-          },
-          elementUI: {
-            name: "chunk-elementUI", // split elementUI into a single package
-            priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
-            test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
-          },
-          commons: {
-            name: "chunk-commons",
-            test: resolve("src/components"), // can customize your rules
-            minChunks: 3, //  minimum common number
-            priority: 5,
-            reuseExistingChunk: true
-          }
-        }
-      });
-      config.optimization.runtimeChunk("single");
-    });
-  }
-};
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index 48e341a..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "lockfileVersion": 1
-}
diff --git a/parent/pom.xml b/parent/pom.xml
deleted file mode 100644
index 7e42f80..0000000
--- a/parent/pom.xml
+++ /dev/null
@@ -1,285 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <parent>
-    <artifactId>energy-management</artifactId>
-    <groupId>com.dingzhuo</groupId>
-    <version>1.0.0</version>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-
-  <artifactId>parent</artifactId>
-
-  <dependencies>
-
-    <!-- SpringBoot 鏍稿績鍖� -->
-    <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter</artifactId>
-    </dependency>
-
-    <!-- SpringBoot 娴嬭瘯 -->
-    <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-test</artifactId>
-      <scope>test</scope>
-    </dependency>
-
-    <!-- SpringBoot 鎷︽埅鍣� -->
-    <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-aop</artifactId>
-    </dependency>
-
-    <!-- SpringBoot Web瀹瑰櫒 -->
-    <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-web</artifactId>
-      <!-- 鎺掗櫎Tomcat渚濊禆 -->
-      <exclusions>
-        <exclusion>
-          <groupId>org.springframework.boot</groupId>
-          <artifactId>spring-boot-starter-tomcat</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-
-    <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-undertow</artifactId>
-    </dependency>
-
-    <!-- spring-boot-devtools -->
-    <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-devtools</artifactId>
-      <optional>true</optional> <!-- 琛ㄧず渚濊禆涓嶄細浼犻�� -->
-    </dependency>
-
-    <!-- spring security 瀹夊叏璁よ瘉 -->
-    <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-security</artifactId>
-    </dependency>
-
-    <!-- redis 缂撳瓨鎿嶄綔 -->
-    <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-data-redis</artifactId>
-    </dependency>
-
-    <!-- pool 瀵硅薄姹� -->
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-pool2</artifactId>
-    </dependency>
-
-    <!-- PostgreSQL椹卞姩鍖� -->
-    <dependency>
-      <groupId>org.postgresql</groupId>
-      <artifactId>postgresql</artifactId>
-      <scope>runtime</scope>
-    </dependency>
-
-    <!-- SpringBoot闆嗘垚mybatis妗嗘灦 -->
-    <dependency>
-      <groupId>org.mybatis.spring.boot</groupId>
-      <artifactId>mybatis-spring-boot-starter</artifactId>
-      <version>${mybatis.spring.boot.starter.version}</version>
-    </dependency>
-
-    <!-- pagehelper 鍒嗛〉鎻掍欢 -->
-    <dependency>
-      <groupId>com.github.pagehelper</groupId>
-      <artifactId>pagehelper-spring-boot-starter</artifactId>
-      <version>${pagehelper.spring.boot.starter.version}</version>
-    </dependency>
-
-    <!--闃块噷鏁版嵁搴撹繛鎺ユ睜 -->
-    <dependency>
-      <groupId>com.alibaba</groupId>
-      <artifactId>druid-spring-boot-starter</artifactId>
-      <version>${druid.version}</version>
-    </dependency>
-
-    <!--甯哥敤宸ュ叿绫� -->
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-    </dependency>
-
-    <!--io甯哥敤宸ュ叿绫� -->
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <version>${commons.io.version}</version>
-    </dependency>
-
-    <!--鏂囦欢涓婁紶宸ュ叿绫� -->
-    <dependency>
-      <groupId>commons-fileupload</groupId>
-      <artifactId>commons-fileupload</artifactId>
-      <version>${commons.fileupload.version}</version>
-    </dependency>
-
-    <!-- 瑙f瀽瀹㈡埛绔搷浣滅郴缁熴�佹祻瑙堝櫒绛� -->
-    <dependency>
-      <groupId>eu.bitwalker</groupId>
-      <artifactId>UserAgentUtils</artifactId>
-      <version>${bitwalker.version}</version>
-    </dependency>
-
-    <!-- 闃块噷JSON瑙f瀽鍣� -->
-    <dependency>
-      <groupId>com.alibaba</groupId>
-      <artifactId>fastjson</artifactId>
-      <version>${fastjson.version}</version>
-    </dependency>
-
-    <!--Spring妗嗘灦鍩烘湰鐨勬牳蹇冨伐鍏�-->
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-context-support</artifactId>
-    </dependency>
-
-    <!--Token鐢熸垚涓庤В鏋�-->
-    <dependency>
-      <groupId>io.jsonwebtoken</groupId>
-      <artifactId>jjwt</artifactId>
-      <version>${jwt.version}</version>
-    </dependency>
-
-    <!-- swagger2-->
-    <dependency>
-      <groupId>io.springfox</groupId>
-      <artifactId>springfox-swagger2</artifactId>
-      <version>${swagger.version}</version>
-      <exclusions>
-        <exclusion>
-          <groupId>io.swagger</groupId>
-          <artifactId>swagger-annotations</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>io.swagger</groupId>
-          <artifactId>swagger-models</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-
-    <!--闃叉杩涘叆swagger椤甸潰鎶ョ被鍨嬭浆鎹㈤敊璇紝鎺掗櫎2.9.2涓殑寮曠敤锛屾墜鍔ㄥ鍔�1.5.21鐗堟湰-->
-    <dependency>
-      <groupId>io.swagger</groupId>
-      <artifactId>swagger-annotations</artifactId>
-      <version>1.5.21</version>
-    </dependency>
-
-    <dependency>
-      <groupId>io.swagger</groupId>
-      <artifactId>swagger-models</artifactId>
-      <version>1.5.21</version>
-    </dependency>
-
-    <!-- swagger2-UI-->
-    <dependency>
-      <groupId>io.springfox</groupId>
-      <artifactId>springfox-swagger-ui</artifactId>
-      <version>${swagger.version}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>com.github.xiaoymin</groupId>
-      <artifactId>swagger-bootstrap-ui</artifactId>
-      <version>1.6</version>
-    </dependency>
-
-    <!-- 鑾峰彇绯荤粺淇℃伅 -->
-    <dependency>
-      <groupId>com.github.oshi</groupId>
-      <artifactId>oshi-core</artifactId>
-      <version>${oshi.version}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>net.java.dev.jna</groupId>
-      <artifactId>jna</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>net.java.dev.jna</groupId>
-      <artifactId>jna-platform</artifactId>
-    </dependency>
-    <!-- xml瑙f瀽鍖� -->
-    <dependency>
-      <groupId>org.dom4j</groupId>
-      <artifactId>dom4j</artifactId>
-      <version>2.0.0</version>
-    </dependency>
-
-    <!-- excel宸ュ叿 -->
-    <dependency>
-      <groupId>org.apache.poi</groupId>
-      <artifactId>poi-ooxml</artifactId>
-      <version>${poi.version}</version>
-    </dependency>
-    <!--velocity浠g爜鐢熸垚浣跨敤妯℃澘 -->
-    <dependency>
-      <groupId>org.apache.velocity</groupId>
-      <artifactId>velocity</artifactId>
-      <version>${velocity.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>joda-time</groupId>
-      <artifactId>joda-time</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.influxdb</groupId>
-      <artifactId>influxdb-java</artifactId>
-      <exclusions>
-        <exclusion>
-          <artifactId>okhttp</artifactId>
-          <groupId>com.squareup.okhttp3</groupId>
-        </exclusion>
-        <exclusion>
-          <artifactId>okio</artifactId>
-          <groupId>com.squareup.okio</groupId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>com.squareup.okhttp3</groupId>
-      <artifactId>okhttp</artifactId>
-      <exclusions>
-        <exclusion>
-          <artifactId>kotlin-stdlib</artifactId>
-          <groupId>org.jetbrains.kotlin</groupId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-      <version>28.0-jre</version>
-    </dependency>
-    <dependency>
-      <groupId>com.jsoniter</groupId>
-      <artifactId>jsoniter</artifactId>
-      <version>0.9.23</version>
-    </dependency>
-    <dependency>
-      <groupId>org.jetbrains.kotlin</groupId>
-      <artifactId>kotlin-stdlib</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.fasterxml.jackson.module</groupId>
-      <artifactId>jackson-module-kotlin</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.eweb4j</groupId>
-      <artifactId>fel</artifactId>
-      <version>0.10</version>
-      <scope>system</scope>
-      <systemPath>${basedir}/lib/fel.jar</systemPath>
-    </dependency>
-  </dependencies>
-</project>
diff --git a/pom.xml b/pom.xml
index ff96787..0b4c195 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,91 +1,374 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
 
-  <groupId>com.dingzhuo</groupId>
-  <artifactId>energy-management</artifactId>
-  <version>1.0.0</version>
-  <modules>
-    <module>data-service</module>
-    <module>data-model</module>
-    <module>parent</module>
-    <module>data-monitoring</module>
-    <module>energy_management_server</module>
-    <module>basic</module>
-    <module>basic-data</module>
-    <module>compute-engine</module>
-  </modules>
-  <packaging>pom</packaging>
+    <groupId>com.zhitan</groupId>
+    <artifactId>BaseAdminAPI</artifactId>
+    <version>3.8.7</version>
 
-  <name>energyManagement</name>
-  <description>浼佷笟鑳芥簮绠$悊绯荤粺</description>
+    <name>BaseAdminAPI</name>
+    <description>绠$悊绯荤粺</description>
 
-  <parent>
-    <groupId>org.springframework.boot</groupId>
-    <artifactId>spring-boot-starter-parent</artifactId>
-    <version>2.2.5.RELEASE</version>
-    <relativePath/>
-  </parent>
+    <packaging>pom</packaging>
 
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-    <java.version>1.8</java.version>
-    <mybatis.spring.boot.starter.version>1.3.2</mybatis.spring.boot.starter.version>
-    <pagehelper.spring.boot.starter.version>1.2.5</pagehelper.spring.boot.starter.version>
-    <fastjson.version>1.2.47</fastjson.version>
-    <druid.version>1.1.14</druid.version>
-    <commons.io.version>2.5</commons.io.version>
-    <commons.fileupload.version>1.3.3</commons.fileupload.version>
-    <bitwalker.version>1.19</bitwalker.version>
-    <jwt.version>0.9.0</jwt.version>
-    <swagger.version>2.9.2</swagger.version>
-    <poi.version>3.17</poi.version>
-    <oshi.version>3.9.1</oshi.version>
-    <velocity.version>1.7</velocity.version>
-  </properties>
+    <properties>
+        <zhitan.version>3.8.7</zhitan.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <java.version>1.8</java.version>
+        <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
+        <spring-framework.version>5.3.33</spring-framework.version>
+        <druid.version>1.2.20</druid.version>
+        <bitwalker.version>1.21</bitwalker.version>
+        <swagger.version>3.0.0</swagger.version>
+        <kaptcha.version>2.3.3</kaptcha.version>
+        <pagehelper.version>6.1.0</pagehelper.version>
+        <jsqlparser.version>4.9</jsqlparser.version>
+        <fastjson.version>2.0.43</fastjson.version>
+        <oshi.version>6.5.0</oshi.version>
+        <commons.io.version>2.13.0</commons.io.version>
+        <poi.version>4.1.2</poi.version>
+        <velocity.version>2.3</velocity.version>
+        <jwt.version>0.9.1</jwt.version>
+        <mybatis-plus.version>3.5.6</mybatis-plus.version>
+    </properties>
 
-  <repositories>
-    <repository>
-      <id>public</id>
-      <name>aliyun nexus</name>
-      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
-      <releases>
-        <enabled>true</enabled>
-      </releases>
-    </repository>
-  </repositories>
+    <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+        <!-- PostgreSQL椹卞姩鍖� -->
+        <dependency>
+            <groupId>org.postgresql</groupId>
+            <artifactId>postgresql</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        
+        <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>
+            <version>2.10.5</version>
+        </dependency>
 
-  <pluginRepositories>
-    <pluginRepository>
-      <id>public</id>
-      <name>aliyun nexus</name>
-      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
-      <releases>
-        <enabled>true</enabled>
-      </releases>
-      <snapshots>
-        <enabled>false</enabled>
-      </snapshots>
-    </pluginRepository>
-  </pluginRepositories>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>28.0-jre</version>
+        </dependency>
 
-  <profiles>
-    <profile>
-      <id>dev</id>
-      <properties>
-        <!--褰撳墠鐜,鐢熶骇鐜涓虹┖-->
-        <profile.name>dev</profile.name>
-      </properties>
-    </profile>
-    <profile>
-      <id>prod</id>
-      <properties>
-        <!--褰撳墠鐜,鐢熶骇鐜涓虹┖-->
-        <profile.name>prod</profile.name>
-      </properties>
-    </profile>
-  </profiles>
+        <dependency>
+            <groupId>com.jsoniter</groupId>
+            <artifactId>jsoniter</artifactId>
+            <version>0.9.23</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.influxdb</groupId>
+            <artifactId>influxdb-java</artifactId>
+            <exclusions>
+                <exclusion>
+                    <artifactId>okhttp</artifactId>
+                    <groupId>com.squareup.okhttp3</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>okio</artifactId>
+                    <groupId>com.squareup.okio</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>com.influxdb</groupId>
+            <artifactId>influxdb-client-java</artifactId>
+            <version>3.4.0</version>
+        </dependency>
+        
+        <dependency>
+            <groupId>com.squareup.okhttp3</groupId>
+            <artifactId>okhttp</artifactId>
+            <exclusions>
+                <exclusion>
+                    <artifactId>kotlin-stdlib</artifactId>
+                    <groupId>org.jetbrains.kotlin</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>1.6.2</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <!-- 闃块噷JSON瑙f瀽鍣� -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>${fastjson.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-core</artifactId>
+            <version>5.3.8</version>
+        </dependency>
+    </dependencies>
+
+    <!-- 渚濊禆澹版槑 -->
+    <dependencyManagement>
+        <dependencies>
+
+            <!-- SpringFramework鐨勪緷璧栭厤缃�-->
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-framework-bom</artifactId>
+                <version>${spring-framework.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+
+            <!-- SpringBoot鐨勪緷璧栭厤缃�-->
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>2.5.15</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+
+            <!-- 闃块噷鏁版嵁搴撹繛鎺ユ睜 -->
+            <dependency>
+                <groupId>com.alibaba</groupId>
+                <artifactId>druid-spring-boot-starter</artifactId>
+                <version>${druid.version}</version>
+            </dependency>
+
+            <!-- 瑙f瀽瀹㈡埛绔搷浣滅郴缁熴�佹祻瑙堝櫒绛� -->
+            <dependency>
+                <groupId>eu.bitwalker</groupId>
+                <artifactId>UserAgentUtils</artifactId>
+                <version>${bitwalker.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>com.baomidou</groupId>
+                <artifactId>mybatis-plus-boot-starter</artifactId>
+                <version>${mybatis-plus.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>com.github.pagehelper</groupId>
+                <artifactId>pagehelper</artifactId>
+                <version>${pagehelper.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.github.jsqlparser</groupId>
+                <artifactId>jsqlparser</artifactId>
+                <version>${jsqlparser.version}</version>
+            </dependency>
+
+            <!-- 鑾峰彇绯荤粺淇℃伅 -->
+            <dependency>
+                <groupId>com.github.oshi</groupId>
+                <artifactId>oshi-core</artifactId>
+                <version>${oshi.version}</version>
+            </dependency>
+
+            <!-- Swagger3渚濊禆 -->
+            <dependency>
+                <groupId>io.springfox</groupId>
+                <artifactId>springfox-boot-starter</artifactId>
+                <version>${swagger.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>io.swagger</groupId>
+                        <artifactId>swagger-models</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+
+            <!-- io甯哥敤宸ュ叿绫� -->
+            <dependency>
+                <groupId>commons-io</groupId>
+                <artifactId>commons-io</artifactId>
+                <version>${commons.io.version}</version>
+            </dependency>
+
+            <!-- excel宸ュ叿 -->
+            <dependency>
+                <groupId>org.apache.poi</groupId>
+                <artifactId>poi-ooxml</artifactId>
+                <version>${poi.version}</version>
+            </dependency>
+
+            <!-- velocity浠g爜鐢熸垚浣跨敤妯℃澘 -->
+            <dependency>
+                <groupId>org.apache.velocity</groupId>
+                <artifactId>velocity-engine-core</artifactId>
+                <version>${velocity.version}</version>
+            </dependency>
+
+            <!-- 闃块噷JSON瑙f瀽鍣� -->
+            <dependency>
+                <groupId>com.alibaba.fastjson2</groupId>
+                <artifactId>fastjson2</artifactId>
+                <version>${fastjson.version}</version>
+            </dependency>
+
+            <!-- Token鐢熸垚涓庤В鏋�-->
+            <dependency>
+                <groupId>io.jsonwebtoken</groupId>
+                <artifactId>jjwt</artifactId>
+                <version>${jwt.version}</version>
+            </dependency>
+
+            <!-- 楠岃瘉鐮� -->
+            <dependency>
+                <groupId>pro.fessional</groupId>
+                <artifactId>kaptcha</artifactId>
+                <version>${kaptcha.version}</version>
+            </dependency>
+
+            <!-- 瀹氭椂浠诲姟-->
+            <dependency>
+                <groupId>com.zhitan</groupId>
+                <artifactId>zhitan-quartz</artifactId>
+                <version>${zhitan.version}</version>
+            </dependency>
+
+            <!-- 浠g爜鐢熸垚-->
+            <dependency>
+                <groupId>com.zhitan</groupId>
+                <artifactId>zhitan-generator</artifactId>
+                <version>${zhitan.version}</version>
+            </dependency>
+
+            <!-- 鏍稿績妯″潡-->
+            <dependency>
+                <groupId>com.zhitan</groupId>
+                <artifactId>zhitan-framework</artifactId>
+                <version>${zhitan.version}</version>
+            </dependency>
+
+            <!-- 绯荤粺妯″潡-->
+            <dependency>
+                <groupId>com.zhitan</groupId>
+                <artifactId>zhitan-system</artifactId>
+                <version>${zhitan.version}</version>
+            </dependency>
+
+            <!-- 閫氱敤宸ュ叿-->
+            <dependency>
+                <groupId>com.zhitan</groupId>
+                <artifactId>zhitan-common</artifactId>
+                <version>${zhitan.version}</version>
+            </dependency>
+
+        </dependencies>
+    </dependencyManagement>
+
+    <modules>
+        <module>zhitan-admin</module>
+        <module>zhitan-framework</module>
+        <module>zhitan-system</module>
+        <module>zhitan-quartz</module>
+        <module>zhitan-generator</module>
+        <module>zhitan-common</module>
+    </modules>
+
+    <profiles>
+        <profile>
+            <id>dev</id>
+            <properties>
+                <build.profile.id>dev</build.profile.id>
+                <profileActive>dev</profileActive>
+            </properties>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+        </profile>
+        <profile>
+            <id>prod</id>
+            <properties>
+                <build.profile.id>prod</build.profile.id>
+                <profileActive>prod</profileActive>
+            </properties>
+        </profile>
+    </profiles>
+
+    <build>
+
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <!--寮�鍚繃婊わ紝鐢ㄦ寚瀹氱殑鍙傛暟鏇挎崲directory涓嬬殑鏂囦欢涓殑鍙傛暟-->
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                    <encoding>${project.build.sourceEncoding}</encoding>
+                    <compilerArgs>
+                        <!-- 杩囨湡鐨勬柟娉曠殑璀﹀憡-->
+                        <arg>-Xlint:deprecation</arg>
+                    </compilerArgs>
+                    <compilerArguments>
+                        <!-- 鏄惁杈撳嚭鎵�鏈夌殑缂栬瘧淇℃伅锛堝寘鎷被鐨勫姞杞界瓑锛�-->
+                        <!--<verbose />-->
+                        <!-- 瑙e喅maven鍛戒护缂栬瘧鎶ラ敊锛屽洜涓簉t.jar 鍜宩ce.jar鍦╦re鐨刲ib涓嬮潰锛屼笉鍦╦dk鐨刲ib涓嬮潰锛�
+                        瀵艰嚧maven鎵句笉鍒帮紙java7浠ュ悗浼氬嚭鐜拌繖涓棶棰橈級锛屽皢杩�2涓猨ar鍖呮嫹璐濆埌jdk鐨刲ib涓嬮潰浼拌涔熷ソ浣�-->
+                        <bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath>
+                    </compilerArguments>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <repositories>
+        <repository>
+            <id>ali-public</id>
+            <name>ali-public</name>
+            <url>https://maven.aliyun.com/repository/public</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+        </repository>
+
+        <repository>
+            <id>central</id>
+            <url>https://maven.aliyun.com/repository/central</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
+
+    <pluginRepositories>
+        <pluginRepository>
+            <id>public</id>
+            <name>ali nexus</name>
+            <url>https://maven.aliyun.com/repository/public</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </pluginRepository>
+    </pluginRepositories>
+
 </project>
diff --git a/start.bat b/start.bat
new file mode 100644
index 0000000..c61dac9
--- /dev/null
+++ b/start.bat
@@ -0,0 +1,67 @@
+@echo off
+
+rem jar平锟斤拷目录
+set AppName=admin-admin.jar
+
+rem JVM锟斤拷锟斤拷
+set JVM_OPTS="-Dname=%AppName%  -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps  -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
+
+
+ECHO.
+	ECHO.  [1] 锟斤拷锟斤拷%AppName%
+	ECHO.  [2] 锟截憋拷%AppName%
+	ECHO.  [3] 锟斤拷锟斤拷%AppName%
+	ECHO.  [4] 锟斤拷锟斤拷状态 %AppName%
+	ECHO.  [5] 锟斤拷 锟斤拷
+ECHO.
+
+ECHO.锟斤拷锟斤拷锟斤拷选锟斤拷锟斤拷目锟斤拷锟斤拷锟�:
+set /p ID=
+	IF "%id%"=="1" GOTO start
+	IF "%id%"=="2" GOTO stop
+	IF "%id%"=="3" GOTO restart
+	IF "%id%"=="4" GOTO status
+	IF "%id%"=="5" EXIT
+PAUSE
+:start
+    for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
+		set pid=%%a
+		set image_name=%%b
+	)
+	if  defined pid (
+		echo %%is running
+		PAUSE
+	)
+
+start javaw %JVM_OPTS% -jar %AppName%
+
+echo  starting锟斤拷锟斤拷
+echo  Start %AppName% success...
+goto:eof
+
+rem 锟斤拷锟斤拷stop通锟斤拷jps锟斤拷锟斤拷锟斤拷锟絧id锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷
+:stop
+	for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
+		set pid=%%a
+		set image_name=%%b
+	)
+	if not defined pid (echo process %AppName% does not exists) else (
+		echo prepare to kill %image_name%
+		echo start kill %pid% ...
+		rem 锟斤拷锟捷斤拷锟斤拷ID锟斤拷kill锟斤拷锟斤拷
+		taskkill /f /pid %pid%
+	)
+goto:eof
+:restart
+	call :stop
+    call :start
+goto:eof
+:status
+	for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
+		set pid=%%a
+		set image_name=%%b
+	)
+	if not defined pid (echo process %AppName% is dead ) else (
+		echo %image_name% is running
+	)
+goto:eof
diff --git a/start.sh b/start.sh
new file mode 100644
index 0000000..6d524ff
--- /dev/null
+++ b/start.sh
@@ -0,0 +1,86 @@
+#!/bin/sh
+# ./start.sh start 鍚姩 stop 鍋滄 restart 閲嶅惎 status 鐘舵��
+AppName=admin-admin.jar
+
+# JVM鍙傛暟
+JVM_OPTS="-Dname=$AppName  -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps  -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
+APP_HOME=`pwd`
+LOG_PATH=$APP_HOME/logs/$AppName.log
+
+if [ "$1" = "" ];
+then
+    echo -e "\033[0;31m 鏈緭鍏ユ搷浣滃悕 \033[0m  \033[0;34m {start|stop|restart|status} \033[0m"
+    exit 1
+fi
+
+if [ "$AppName" = "" ];
+then
+    echo -e "\033[0;31m 鏈緭鍏ュ簲鐢ㄥ悕 \033[0m"
+    exit 1
+fi
+
+function start()
+{
+    PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
+
+	if [ x"$PID" != x"" ]; then
+	    echo "$AppName is running..."
+	else
+		nohup java $JVM_OPTS -jar $AppName > /dev/null 2>&1 &
+		echo "Start $AppName success..."
+	fi
+}
+
+function stop()
+{
+    echo "Stop $AppName"
+
+	PID=""
+	query(){
+		PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
+	}
+
+	query
+	if [ x"$PID" != x"" ]; then
+		kill -TERM $PID
+		echo "$AppName (pid:$PID) exiting..."
+		while [ x"$PID" != x"" ]
+		do
+			sleep 1
+			query
+		done
+		echo "$AppName exited."
+	else
+		echo "$AppName already stopped."
+	fi
+}
+
+function restart()
+{
+    stop
+    sleep 2
+    start
+}
+
+function status()
+{
+    PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
+    if [ $PID != 0 ];then
+        echo "$AppName is running..."
+    else
+        echo "$AppName is not running..."
+    fi
+}
+
+case $1 in
+    start)
+    start;;
+    stop)
+    stop;;
+    restart)
+    restart;;
+    status)
+    status;;
+    *)
+
+esac
diff --git a/zhitan-admin/pom.xml b/zhitan-admin/pom.xml
new file mode 100644
index 0000000..6c36626
--- /dev/null
+++ b/zhitan-admin/pom.xml
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>BaseAdminAPI</artifactId>
+        <groupId>com.zhitan</groupId>
+        <version>3.8.7</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>jar</packaging>
+    <artifactId>zhitan-admin</artifactId>
+
+    <description>
+        web鏈嶅姟鍏ュ彛
+    </description>
+
+    <dependencies>
+
+        <!-- spring-boot-devtools -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <optional>true</optional> <!-- 琛ㄧず渚濊禆涓嶄細浼犻�� -->
+        </dependency>
+
+        <!-- swagger3-->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-boot-starter</artifactId>
+        </dependency>
+
+        <!-- 闃叉杩涘叆swagger椤甸潰鎶ョ被鍨嬭浆鎹㈤敊璇紝鎺掗櫎3.0.0涓殑寮曠敤锛屾墜鍔ㄥ鍔�1.6.2鐗堟湰 -->
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-models</artifactId>
+            <version>1.6.2</version>
+        </dependency>
+
+        <!-- 鏍稿績妯″潡-->
+        <dependency>
+            <groupId>com.zhitan</groupId>
+            <artifactId>zhitan-framework</artifactId>
+        </dependency>
+
+        <!-- 瀹氭椂浠诲姟-->
+        <dependency>
+            <groupId>com.zhitan</groupId>
+            <artifactId>zhitan-quartz</artifactId>
+        </dependency>
+
+        <!-- 浠g爜鐢熸垚-->
+        <dependency>
+            <groupId>com.zhitan</groupId>
+            <artifactId>zhitan-generator</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jetbrains.kotlin</groupId>
+            <artifactId>kotlin-stdlib</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.eweb4j</groupId>
+            <artifactId>fel</artifactId>
+            <version>0.10</version>
+            <scope>system</scope>
+            <systemPath>${basedir}/lib/fel.jar</systemPath>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.5.15</version>
+                <configuration>
+                    <fork>true</fork> <!-- 濡傛灉娌℃湁璇ラ厤缃紝devtools涓嶄細鐢熸晥 -->
+                    <includeSystemScope>true</includeSystemScope>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>   
+                <groupId>org.apache.maven.plugins</groupId>   
+                <artifactId>maven-war-plugin</artifactId>   
+                <version>3.1.0</version>   
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                    <warName>${project.artifactId}</warName>
+                </configuration>   
+           </plugin>   
+        </plugins>
+        <finalName>${project.artifactId}</finalName>
+    </build>
+
+</project>
\ No newline at end of file
diff --git a/zhitan-admin/src/main/java/com/zhitan/AdminApplication.java b/zhitan-admin/src/main/java/com/zhitan/AdminApplication.java
new file mode 100644
index 0000000..78d2460
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/AdminApplication.java
@@ -0,0 +1,21 @@
+package com.zhitan;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+
+/**
+ * 鍚姩绋嬪簭
+ * 
+ * @author zhitan
+ */
+@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
+public class AdminApplication
+{
+    public static void main(String[] args)
+    {
+        // System.setProperty("spring.devtools.restart.enabled", "false");
+        SpringApplication.run(AdminApplication.class, args);
+        System.out.println("椤圭洰鍚姩鎴愬姛");
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/AdminServletInitializer.java b/zhitan-admin/src/main/java/com/zhitan/AdminServletInitializer.java
new file mode 100644
index 0000000..e6ec658
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/AdminServletInitializer.java
@@ -0,0 +1,18 @@
+package com.zhitan;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+/**
+ * web瀹瑰櫒涓繘琛岄儴缃�
+ * 
+ * @author zhitan
+ */
+public class AdminServletInitializer extends SpringBootServletInitializer
+{
+    @Override
+    protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
+    {
+        return application.sources(AdminApplication.class);
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmAnalyisisController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmAnalyisisController.java
new file mode 100644
index 0000000..bcc801c
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmAnalyisisController.java
@@ -0,0 +1,37 @@
+package com.zhitan.web.controller.alarm;
+
+import com.zhitan.alarm.domain.dto.AlarmAnalysisDTO;
+import com.zhitan.alarm.domain.vo.AlarmAnalysisVO;
+import com.zhitan.alarm.services.IAlarmAnalyisisService;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * description todu
+ *
+ * @author hmj
+ * @date 2024-10-26 17:31
+ */
+@RestController
+@RequestMapping("/alarmAnalysis")
+public class AlarmAnalyisisController extends BaseController {
+    @Autowired
+    private IAlarmAnalyisisService alarmAnalyisisService;
+
+    @GetMapping("/getByNodeId")
+    public AjaxResult getByNodeId(@Validated AlarmAnalysisDTO alarmAnalysisDTO){
+        AlarmAnalysisVO alarmAnalysisVO  = alarmAnalyisisService.getByNodeId(alarmAnalysisDTO);
+        return AjaxResult.success(alarmAnalysisVO);
+    }
+
+    @GetMapping("/getCountInfo")
+    public AjaxResult getCountInfo(@Validated AlarmAnalysisDTO alarmAnalysisDTO){
+        AlarmAnalysisVO alarmAnalysisVO  = alarmAnalyisisService.getCountInfo(alarmAnalysisDTO);
+        return AjaxResult.success(alarmAnalysisVO);
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmItemController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmItemController.java
new file mode 100644
index 0000000..441cef5
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmItemController.java
@@ -0,0 +1,139 @@
+package com.zhitan.web.controller.alarm;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.alarm.domain.AlarmItem;
+import com.zhitan.alarm.services.IAlarmItemService;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.ServletUtils;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.framework.web.service.TokenService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 棰勬姤璀﹁缃瓹ontroller
+ *
+ * @author sys
+ * @date 2020-03-02
+ */
+@RestController
+@RequestMapping("/system/alarmitem")
+public class AlarmItemController extends BaseController {
+
+    @Autowired
+    private IAlarmItemService alarmItemService;
+
+    @Autowired
+    private TokenService tokenService;
+
+    /**
+     * 鏌ヨ棰勬姤璀﹁缃垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('system:alarmitem:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(AlarmItem alarmItem,Long pageNum, Long pageSize) {
+        Page<AlarmItem> list = alarmItemService.selectAlarmItemPage(alarmItem,pageNum,pageSize);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭棰勬姤璀﹁缃垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('system:alarmitem:export')")
+    @Log(title = "棰勬姤璀﹁缃�", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(AlarmItem alarmItem) {
+        List<AlarmItem> list = alarmItemService.selectAlarmItemList(alarmItem);
+        ExcelUtil<AlarmItem> util = new ExcelUtil<AlarmItem>(AlarmItem.class);
+        return util.exportExcel(list, "set");
+    }
+
+    /**
+     * 鑾峰彇棰勬姤璀﹁缃缁嗕俊鎭�
+     */
+    @PreAuthorize("@ss.hasPermi('system:alarmitem:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id) {
+        return AjaxResult.success(alarmItemService.selectAlarmItemById(id));
+    }
+
+    /**
+     * 鏂板棰勬姤璀﹁缃�
+     */
+    @PreAuthorize("@ss.hasPermi('system:alarmitem:add')")
+    @Log(title = "棰勬姤璀﹁缃�", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody AlarmItem alarmItem) {
+        return toAjax(alarmItemService.insertAlarmItem(alarmItem));
+    }
+
+    /**
+     * 淇敼棰勬姤璀﹁缃惎鍋滅姸鎬�
+     */
+    @PreAuthorize("@ss.hasPermi('system:alarmitem:edit')")
+    @Log(title = "棰勬姤璀﹁缃�", businessType = BusinessType.UPDATE)
+    @PostMapping(value = "/startstop/{flag}")
+    public AjaxResult edit(@PathVariable String flag, @RequestBody String[] ids) {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        String username = loginUser.getUsername();
+        return toAjax(alarmItemService.updateStartStop(ids, flag, username));
+    }
+
+    /**
+     * 鍒犻櫎棰勬姤璀﹁缃�
+     */
+    @PreAuthorize("@ss.hasPermi('system:alarmitem:remove')")
+    @Log(title = "棰勬姤璀﹁缃�", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids) {
+        return toAjax(alarmItemService.deleteAlarmItemByIds(ids));
+    }
+
+    /**
+     * 鑾峰彇棰勬姤璀﹁缃缁嗕俊鎭�
+     */
+    @PreAuthorize("@ss.hasPermi('system:alarmitem:query1')")
+    @GetMapping(value = "/getSettingInfo/{id}")
+    public AjaxResult getSettingInfo(@PathVariable("id") String id) {
+        return AjaxResult.success(alarmItemService.selectAlarmItemtingById(id));
+    }
+
+    /**
+     * 鑾峰彇涓昏〃姣忚鍚仠鐘舵�佸��
+     */
+    @PreAuthorize("@ss.hasPermi('system:alarmitem:query1')")
+    @GetMapping(value = "/getStartStop/{indexid}")
+    public AjaxResult getStartStop(@PathVariable("indexid") String indexid) {
+        return AjaxResult.success(alarmItemService.getStartStop(indexid));
+    }
+
+    /**
+     * 淇敼寮瑰嚭妗嗛檺鍊�
+     */
+    @PreAuthorize("@ss.hasPermi('system:alarmitem:edit')")
+    @Log(title = "淇敼寮瑰嚭妗嗛檺鍊�", businessType = BusinessType.UPDATE)
+    @PutMapping(value = "/editLimitVal")
+    public AjaxResult editLimitVal(@RequestBody List<Map<String, Object>> listMap) {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        String username = loginUser.getUsername();
+        return toAjax(alarmItemService.updateLimitVal(listMap, username));
+    }
+
+    /**
+     * 鏌ヨ棰刬d涓嬭缃檺鍊肩殑鏁伴噺
+     */
+    @PreAuthorize("@ss.hasPermi('system:alarmitem:query1')")
+    @GetMapping(value = "/getSettingCount/{id}")
+    public AjaxResult getSettingCount(@PathVariable("id") String[] id) {
+        return AjaxResult.success(alarmItemService.getSettingCount(id));
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmLimitTypeController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmLimitTypeController.java
new file mode 100644
index 0000000..824fa99
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmLimitTypeController.java
@@ -0,0 +1,100 @@
+package com.zhitan.web.controller.alarm;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.alarm.domain.LimitType;
+import com.zhitan.alarm.services.IAlarmLimitTypeService;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.ServletUtils;
+import com.zhitan.framework.web.service.TokenService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @Description  鎶ヨ闄愬�肩被鍨嬬鐞咰ontroller
+ *
+ * @Author zhoubg
+ * @Date 2024-10-11
+ */
+
+@RestController
+@RequestMapping("/alarm/limit")
+@Api(value = "鎶ヨ闄愬�肩被鍨嬬鐞�",tags = {"鎶ヨ闄愬�肩被鍨嬬鐞�"})
+public class AlarmLimitTypeController extends BaseController {
+
+    @Autowired
+    private IAlarmLimitTypeService alarmLimitTypeService;
+
+    @Autowired
+    private TokenService tokenService;
+
+
+    /**
+     * 鍒楄〃
+     *
+     **/
+    @PreAuthorize("@ss.hasPermi('basicsetting:limitType:list')")
+    @GetMapping("/list")
+    @ApiOperation(value = "鎶ヨ闄愬�煎垪琛�")
+    public TableDataInfo list(LimitType alarmLimitType, Long pageNum, Long pageSize){
+        Page<LimitType> page = alarmLimitTypeService.selectAlarmLimitTypePage(alarmLimitType, pageNum, pageSize);
+        return getDataTable(page);
+    }
+
+    /**
+     * 鑾峰彇璇︽儏
+     *
+     */
+    @PreAuthorize("@ss.hasPermi('basicsetting:limitType:query')")
+    @GetMapping(value = "/{id}")
+    @ApiOperation(value = "鑾峰彇鎶ヨ闄愬�肩被鍨嬬淮鎶よ缁嗕俊鎭�")
+    public AjaxResult getInfo(@PathVariable("id") String id) {
+        return AjaxResult.success(alarmLimitTypeService.selectAlarmLimitTypeById(id));
+    }
+
+    /**
+     * 鏂板
+     *
+     **/
+    @PreAuthorize("@ss.hasPermi('basicsetting:limitType:add')")
+    @Log(title = "鏂板鎶ヨ闄愬��", businessType = BusinessType.INSERT)
+    @PostMapping("/add")
+    @ApiOperation(value = "鏂板鎶ヨ闄愬��")
+    public AjaxResult add(@RequestBody LimitType alarmLimitType){
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        alarmLimitType.setCreateBy(loginUser.getUsername());
+        return toAjax(alarmLimitTypeService.insertAlarmLimitType(alarmLimitType)) ;
+    }
+
+    /**
+     * 缂栬緫
+     *
+     **/
+    @PreAuthorize("@ss.hasPermi('facility:annex:edit')")
+    @Log(title = "淇敼鎶ヨ闄愬��", businessType = BusinessType.UPDATE)
+    @PutMapping
+    @ApiOperation(value = "璁¢噺鍣ㄥ叿鍒楄〃")
+    public AjaxResult edit(@RequestBody LimitType alarmLimitType){
+        return toAjax(alarmLimitTypeService.updateAlarmLimitType(alarmLimitType));
+    }
+
+    /**
+     * 鍒犻櫎
+     *
+     **/
+    @PreAuthorize("@ss.hasPermi('basicsetting:limitType:remove')")
+    @Log(title = "鍒犻櫎鎶ヨ闄愬��", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    @ApiOperation(value = "鍒犻櫎鎶ヨ闄愬��")
+    public AjaxResult remove(@PathVariable String[] ids){
+        return toAjax(alarmLimitTypeService.deleteLimitTypeByIds(ids));
+    }
+
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/HistoryAlarmController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/HistoryAlarmController.java
new file mode 100644
index 0000000..181e1ff
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/HistoryAlarmController.java
@@ -0,0 +1,171 @@
+package com.zhitan.web.controller.alarm;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.alarm.domain.HistoryTable;
+import com.zhitan.alarm.domain.JkHistoryAlarm;
+import com.zhitan.alarm.services.IHistoryAlarmService;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.framework.web.service.TokenService;
+import com.zhitan.realtimedata.domain.TagValue;
+import com.zhitan.realtimedata.service.RealtimeDatabaseService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鎶ヨ鐩戞祴 涓�  鍘嗗彶鎶ヨ鐩戞祴 Controller
+ *
+ * @author zhaowei
+ * @date 2020-02-12
+ */
+@Api(value = "鎶ヨ妫�娴嬧�斿巻鍙叉姤璀︽娴�",tags = {"鎶ヨ妫�娴�"})
+@RestController
+@RequestMapping("/energyAlarm/historicalAlarm")
+public class HistoryAlarmController extends BaseController
+{
+    @Autowired
+    private IHistoryAlarmService iHistoryAlarmService;
+
+    @Autowired
+    private TokenService tokenService;
+
+    @Autowired
+    private RealtimeDatabaseService realtimeDatabaseService;
+
+    /**
+     * 鍘嗗彶鎶ヨ 椤甸潰 鏍规嵁 鑺傜偣鐩綍鍜� 鏉′欢鏌ヨ
+     */
+    @ApiOperation("鍘嗗彶鎶ヨ鏌ヨ")
+//    @PreAuthorize("@ss.hasPermi('energyAlarm:historicalAlarm:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(JkHistoryAlarm jkHistoryAlarm,Long pageNum,Long pageSize)
+    {
+        Page<JkHistoryAlarm> list = iHistoryAlarmService.selectJkHistoryAlarmPage(jkHistoryAlarm,pageNum,pageSize);
+        return getDataTable(list);
+    }
+    /**
+     * 瀵煎嚭鍘嗗彶鎶ヨ鐩戞帶鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('energyAlarm:historicalAlarm:export')")
+    @Log(title = "鍘嗗彶鎶ヨ", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(JkHistoryAlarm jkHistoryAlarm)
+    {
+        List<JkHistoryAlarm> list = iHistoryAlarmService.selectJkHistoryAlarmListExcel(jkHistoryAlarm);
+        ExcelUtil<JkHistoryAlarm> util = new ExcelUtil<JkHistoryAlarm>(JkHistoryAlarm.class);
+        return util.exportExcel(list, "alarm");
+    }
+
+    /**
+     * 鍘嗗彶鎶ヨ 缁勪欢 鍘嗗彶鏁版嵁鑾峰彇
+     */
+    @ApiOperation("鍘嗗彶鎶ヨ鏁版嵁鏌ヨ")
+    @PreAuthorize("@ss.hasPermi('energyAlarm:realTimeAlarm:list')")
+    @GetMapping("/historyData/{code}/{start}/{end}/{pointCount}")
+    public AjaxResult historyDataList(@PathVariable("code") String code, @PathVariable("start") String start, @PathVariable("end") String end, @PathVariable("pointCount") String pointCount)
+    {
+        int count = Integer.parseInt(pointCount);
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date sdate = null;
+        Date edate = null;
+        try {
+            sdate = formatter.parse(start);
+            edate = formatter.parse(end);
+            List<TagValue> TagValuelist = realtimeDatabaseService.retrieve(code, sdate, edate, count);
+            System.out.println("TagValuelist>>>>>>>>>"+TagValuelist);
+            System.out.println("TagValuelist size>>>>>>>>>"+TagValuelist.size());
+            for(TagValue tagVal:TagValuelist){
+                System.out.println("TagValue>>>>>>>>>"+tagVal);
+                if(ObjectUtils.isEmpty(tagVal)){
+                    tagVal = new TagValue();
+                }
+                tagVal.setShowDataTime("yyyy-MM-dd HH:mm:ss");
+                if(ObjectUtils.isEmpty(tagVal.getValue())){
+                    tagVal.setValue(0.00);
+                }else{
+                    BigDecimal b   =   new   BigDecimal(tagVal.getValue());
+                    tagVal.setValue( b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue());
+                }
+
+            }
+            return AjaxResult.success(TagValuelist);
+        } catch (ParseException e) {
+            e.printStackTrace();
+            return AjaxResult.success("鏁版嵁鏌ヨ澶辫触");
+        }
+//        Collections.reverse(TagValuelist);
+
+    }
+
+    /**
+     * 鍘嗗彶鎶ヨ 缁勪欢 鍘嗗彶鎶ヨ琛ㄦ牸瀵煎嚭
+     */
+    @ApiOperation("鍘嗗彶鎶ヨ琛ㄦ牸瀵煎嚭")
+    @PreAuthorize("@ss.hasPermi('energyAlarm:realTimeAlarm:list')")
+    @GetMapping("/historyDataExcel/{code}/{start}/{end}/{pointCount}/{indexName}/{indexUnit}")
+    public AjaxResult historyDataExcel(@PathVariable("code") String code,
+                                       @PathVariable("start") String start,
+                                       @PathVariable("end") String end,
+                                       @PathVariable("pointCount") String pointCount,
+                                       @PathVariable("indexName") String indexName,
+                                       @PathVariable("indexUnit") String indexUnit)
+    {
+        int count = Integer.parseInt(pointCount);
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date sdate = null;
+        Date edate = null;
+        try {
+            sdate = formatter.parse(start);
+            edate = formatter.parse(end);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        List<TagValue> tagValuelist = realtimeDatabaseService.retrieve(code, sdate, edate, count);
+        List<HistoryTable> historyTableList = new ArrayList<>();
+        for(TagValue tagVal:tagValuelist)
+        {
+            tagVal.setShowDataTime("yyyy-MM-dd HH:mm:ss");
+            HistoryTable hh = new HistoryTable();
+            hh.setCode(tagVal.getTagCode());
+            hh.setAlarmTime(tagVal.getShowDataTime());
+            BigDecimal b   =   new   BigDecimal(tagVal.getValue());
+            hh.setEarlyWarningValue(b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue());
+            hh.setIndexName(indexName);
+            hh.setUnitName(indexUnit);
+            historyTableList.add(hh);
+        }
+        ExcelUtil<HistoryTable> util = new ExcelUtil<HistoryTable>(HistoryTable.class);
+        return util.exportExcel(historyTableList, "template");
+    }
+
+    /**
+     * 瀹炴椂妫�娴� 鍔熻兘 鐨勫 sheet椤�  灞曠ず 缁勬�佸浘  娴嬬偣 鎶ヨ淇℃伅
+     */
+    @ApiOperation("瀹炴椂妫�娴嬫姤璀︿俊鎭煡璇�")
+    @GetMapping("/listNote")
+    public TableDataInfo listNote(JkHistoryAlarm jkHistoryAlarm)
+    {
+        startPage();
+        List<JkHistoryAlarm> list = iHistoryAlarmService.selectHistoryAlarmNoteList(jkHistoryAlarm);
+        return getDataTable(list);
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/RealTimeAlarmController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/RealTimeAlarmController.java
new file mode 100644
index 0000000..800ea3e
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/RealTimeAlarmController.java
@@ -0,0 +1,88 @@
+package com.zhitan.web.controller.alarm;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.alarm.domain.JkRealTimeAlarmList;
+import com.zhitan.alarm.services.IRealtimeAlarmService;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.realtimedata.domain.TagValue;
+import com.zhitan.realtimedata.service.RealtimeDatabaseService;
+import io.swagger.annotations.Api;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鎶ヨ鐩戞祴 涓� 瀹炴椂鎶ヨ鐩戞祴 Controller
+ *
+ * @author zhaowei
+ * @date 2020-02-12
+ */
+@Api("鎶ヨ妫�娴嬧�斺�斿疄鏃舵姤璀︽娴�")
+@RestController
+@RequestMapping("/energyAlarm/realTimeAlarm")
+public class RealTimeAlarmController extends BaseController
+{
+    @Autowired
+    private IRealtimeAlarmService iRealtimeAlarmService;
+
+    @Autowired
+    private RealtimeDatabaseService realtimeDatabaseService;
+
+
+    /**
+     * 瀹炴椂鎶ヨ 椤甸潰 鏍规嵁 鑺傜偣鐩綍鍜� 鏉′欢鏌ヨ
+     */
+//    @ApiOperation("瀹炴椂鎶ヨ鏌ヨ")
+    @PreAuthorize("@ss.hasPermi('energyAlarm:realTimeAlarm:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(JkRealTimeAlarmList jkRealTimeAlarmList, Long pageNum, Long pageSize)
+    {
+        Page<JkRealTimeAlarmList> list = iRealtimeAlarmService.selectRealtimeAlarmJkPage(jkRealTimeAlarmList,pageNum,pageSize);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀹炴椂鎶ヨ 缁勪欢 瀹炴椂鏁版嵁鑾峰彇
+     */
+//    @ApiOperation("瀹炴椂鎶ヨ鏌ヨ")
+    @PreAuthorize("@ss.hasPermi('energyAlarm:realTimeAlarm:list')")
+    @GetMapping("/liveHistoryData/{code}/{minute}/{pointCount}")
+    public AjaxResult liveList(@PathVariable("code") String code,@PathVariable("minute") String minute,@PathVariable("pointCount") String pointCount)
+    {
+        int time = Integer.parseInt(minute);
+        int count = Integer.parseInt(pointCount);
+        Calendar c = Calendar.getInstance();
+        Date  endTime= c.getTime();
+        c.add(Calendar.MINUTE, -time);
+        Date startTime = c.getTime();
+        List<TagValue> TagValuelist = realtimeDatabaseService.retrieve(code, startTime, endTime, count);
+        for(TagValue tagVal:TagValuelist)
+        {
+            if(ObjectUtils.isEmpty(tagVal)){
+                tagVal = new TagValue();
+            }
+            tagVal.setShowDataTime("HH:mm:ss");
+            if(ObjectUtils.isEmpty(tagVal.getValue())){
+                tagVal.setValue(0.00);
+            }else{
+                BigDecimal b   =   new   BigDecimal(tagVal.getValue());
+                tagVal.setValue( b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue());
+            }
+
+        }
+//        Collections.reverse(TagValuelist);
+        return AjaxResult.success(TagValuelist);
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/auxiliaryinput/EnergyIndicatorsController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/auxiliaryinput/EnergyIndicatorsController.java
new file mode 100644
index 0000000..f49cceb
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/auxiliaryinput/EnergyIndicatorsController.java
@@ -0,0 +1,117 @@
+package com.zhitan.web.controller.auxiliaryinput;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.energyIndicators.domain.EnergyIndicators;
+import com.zhitan.energyIndicators.service.IEnergyIndicatorsService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * 鑳芥簮鎸囨爣Controller
+ *
+ * @author ZhiTan
+ * @date 2024-10-25
+ */
+@RestController
+public class EnergyIndicatorsController extends BaseController
+{
+    @Resource
+    private IEnergyIndicatorsService energyIndicatorsService;
+
+    /**
+     * 鏌ヨ鑳芥簮鎸囨爣鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:energyIndicators:list')")
+    @GetMapping("/energyIndicators/list")
+    public TableDataInfo energyIndicatorsPage(EnergyIndicators energyIndicators, @RequestParam Long pageNum, @RequestParam Long pageSize)
+    {
+//        startPage();
+        Page<EnergyIndicators> list = energyIndicatorsService.selectEnergyIndicatorsPage(energyIndicators,pageNum,pageSize);
+        return getDataTable(list);
+    }
+
+
+    /**
+     * 瀵煎嚭鑳芥簮鎸囨爣鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:energyIndicators:export')")
+    @Log(title = "鑳芥簮鎸囨爣", businessType = BusinessType.EXPORT)
+    @PostMapping("/energyIndicators/export")
+    public void export(HttpServletResponse response, EnergyIndicators energyIndicators)
+    {
+        List<EnergyIndicators> list = energyIndicatorsService.selectEnergyIndicatorsList(energyIndicators);
+        ExcelUtil<EnergyIndicators> util = new ExcelUtil<EnergyIndicators>(EnergyIndicators.class);
+        util.exportExcel(response, list, "鑳芥簮鎸囨爣鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇鑳芥簮鎸囨爣璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('system:energyIndicators:query')")
+    @GetMapping(value = "/energyIndicators/{energyIndicatorsId}")
+    public AjaxResult getInfo(@PathVariable("energyIndicatorsId") String energyIndicatorsId)
+    {
+        return success(energyIndicatorsService.selectEnergyIndicatorsByNodeId(energyIndicatorsId));
+    }
+
+    /**
+     * 鏂板鑳芥簮鎸囨爣
+     */
+    @PreAuthorize("@ss.hasPermi('system:energyIndicators:add')")
+    @Log(title = "鑳芥簮鎸囨爣", businessType = BusinessType.INSERT)
+    @PostMapping(value = "/energyIndicators")
+    public AjaxResult add(@RequestBody EnergyIndicators energyIndicators)
+    {
+
+        //todo 鏍¢獙鏄惁閲嶅锛屽鏋滈噸澶嶅氨鏇存柊銆佸鏋滀笉閲嶅灏辨柊澧�.
+        // 鏍¢獙閲嶅瑙勫垯锛歯odeId+timeType+dataTime+energyType+indicatorsType
+        EnergyIndicators queryParam = new EnergyIndicators();
+        queryParam.setNodeId(energyIndicators.getNodeId());
+        queryParam.setDataTime(energyIndicators.getDataTime());
+        queryParam.setTimeType(energyIndicators.getTimeType());
+        queryParam.setEnergyType(energyIndicators.getEnergyType());
+        queryParam.setIndicatorsType(energyIndicators.getIndicatorsType());
+        List<EnergyIndicators> list = energyIndicatorsService.selectEnergyIndicatorsList(queryParam);
+
+        //鍒ゆ柇鏌ヨ鍒扮殑鏁版嵁,涓嶄负绌鸿鏄庡凡缁忓瓨鍦細鏇存柊鏁版嵁銆備负绌鸿鏄庝笉瀛樺湪锛氭柊澧�
+        if  (list!=null && !list.isEmpty()){
+            return AjaxResult.error("褰撳墠鑺傜偣宸茬粡娣诲姞杩囪鎸囨爣绫诲瀷");
+        }else {
+            energyIndicators.setEnergyIndicatorsId(UUID.randomUUID().toString());
+            return toAjax(energyIndicatorsService.insertEnergyIndicators(energyIndicators));
+        }
+    }
+
+    /**
+     * 淇敼鑳芥簮鎸囨爣
+     */
+    @PreAuthorize("@ss.hasPermi('system:energyIndicators:edit')")
+    @Log(title = "鑳芥簮鎸囨爣", businessType = BusinessType.UPDATE)
+    @PutMapping(value = "/energyIndicators")
+    public AjaxResult edit(@RequestBody EnergyIndicators energyIndicators)
+    {
+        return toAjax(energyIndicatorsService.updateEnergyIndicators(energyIndicators));
+    }
+
+    /**
+     * 鍒犻櫎鑳芥簮鎸囨爣
+     */
+    @PreAuthorize("@ss.hasPermi('system:energyIndicators:remove')")
+    @Log(title = "鑳芥簮鎸囨爣", businessType = BusinessType.DELETE)
+	@DeleteMapping("/energyIndicators/{energyIndicatorsIds}")
+    public AjaxResult remove(@PathVariable String[] energyIndicatorsIds)
+    {
+        return toAjax(energyIndicatorsService.deleteEnergyIndicatorsByEnergyIndicatorsIds(energyIndicatorsIds));
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/auxiliaryinput/ProductOutputController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/auxiliaryinput/ProductOutputController.java
new file mode 100644
index 0000000..af9d741
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/auxiliaryinput/ProductOutputController.java
@@ -0,0 +1,528 @@
+package com.zhitan.web.controller.auxiliaryinput;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.productoutput.domain.ProductOutput;
+import com.zhitan.productoutput.services.IProductOutputService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * description 杈呭姪褰曞叆 浜у搧浜ч噺褰曞叆銆佽兘婧愪华琛ㄥ綍鍏ャ�佽兘婧愭寚鏍囧綍鍏�
+ *
+ * @author hmj
+ * @date 2024-10-08 16:37
+ */
+@RestController
+public class ProductOutputController extends BaseController {
+
+    @Resource
+    private IProductOutputService auxiliaryInputService;
+
+    /**
+     * 鏌ヨ浜у搧浜ч噺褰曞叆鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:prodoutput:list')")
+    @GetMapping("/productoutput/list")
+    public TableDataInfo list(ProductOutput productOutput, @RequestParam Long pageNum, @RequestParam Long pageSize)
+    {
+        productOutput.setDataType("1");
+        Page<ProductOutput> list = auxiliaryInputService.selectProductOutputPage(productOutput,pageNum,pageSize);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭浜у搧浜ч噺褰曞叆鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:prodoutput:export')")
+    @Log(title = "浜у搧浜ч噺褰曞叆", businessType = BusinessType.EXPORT)
+    @PostMapping("/productoutput/export")
+    public void export(HttpServletResponse response, ProductOutput productOutput)
+    {
+        productOutput.setDataType("1");
+        List<ProductOutput> list = auxiliaryInputService.selectProductOutputList(productOutput);
+        ExcelUtil<ProductOutput> util = new ExcelUtil<ProductOutput>(ProductOutput.class);
+        util.exportExcel(response, list, "浜у搧浜ч噺褰曞叆鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇浜у搧浜ч噺褰曞叆璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('system:prodoutput:query')")
+    @GetMapping(value = "/productoutput/{productOutputId}")
+    public AjaxResult getInfo(@PathVariable("productOutputId") String productOutputId)
+    {
+        return success(auxiliaryInputService.selectProductOutputById(productOutputId));
+    }
+
+    /**
+     * 鏂板浜у搧浜ч噺褰曞叆
+     */
+    @PreAuthorize("@ss.hasPermi('system:prodoutput:add')")
+    @Log(title = "浜у搧浜ч噺褰曞叆", businessType = BusinessType.INSERT)
+    @PostMapping(value = "/productoutput")
+    public AjaxResult add(@RequestBody ProductOutput productOutput)
+    {
+        productOutput.setProductOutputId(UUID.randomUUID().toString());
+        productOutput.setDataType("1");
+        return toAjax(auxiliaryInputService.insertProductOutput(productOutput));
+    }
+
+    /**
+     * 淇敼浜у搧浜ч噺褰曞叆
+     */
+    @PreAuthorize("@ss.hasPermi('system:prodoutput:edit')")
+    @Log(title = "浜у搧浜ч噺褰曞叆", businessType = BusinessType.UPDATE)
+    @PutMapping(value = "/productoutput")
+    public AjaxResult edit(@RequestBody ProductOutput productOutput)
+    {
+        return toAjax(auxiliaryInputService.updateProductOutput(productOutput));
+    }
+
+    /**
+     * 鍒犻櫎浜у搧浜ч噺褰曞叆
+     */
+    @PreAuthorize("@ss.hasPermi('system:prodoutput:remove')")
+    @Log(title = "浜у搧浜ч噺褰曞叆", businessType = BusinessType.DELETE)
+    @DeleteMapping("/productoutput/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(auxiliaryInputService.deleteProductOutputByIds(ids));
+    }
+
+
+    /**
+     * 鏌ヨ鑳芥簮浠〃褰曞叆鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:meter:list')")
+    @GetMapping("/meter/list")
+    public TableDataInfo meterList(ProductOutput productOutput, @RequestParam Long pageNum, @RequestParam Long pageSize)
+    {
+//        startPage();
+        productOutput.setDataType("2");
+        Page<ProductOutput> list = auxiliaryInputService.selectProductOutputPage(productOutput,pageNum,pageSize);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭鑳芥簮浠〃褰曞叆鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:meter:export')")
+    @Log(title = "鑳芥簮浠〃褰曞叆", businessType = BusinessType.EXPORT)
+    @PostMapping("/meter/export")
+    public void meterExport(HttpServletResponse response, ProductOutput productOutput)
+    {
+        productOutput.setDataType("2");
+        List<ProductOutput> list = auxiliaryInputService.selectProductOutputList(productOutput);
+        ExcelUtil<ProductOutput> util = new ExcelUtil<ProductOutput>(ProductOutput.class);
+        util.exportExcel(response, list, "鑳芥簮浠〃褰曞叆鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇鑳芥簮浠〃褰曞叆璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('system:meter:query')")
+    @GetMapping(value = "/meter/{productOutputId}")
+    public AjaxResult meterGetInfo(@PathVariable("productOutputId") String productOutputId)
+    {
+        return success(auxiliaryInputService.selectProductOutputById(productOutputId));
+    }
+
+    /**
+     * 鏂板鑳芥簮浠〃褰曞叆
+     */
+    @PreAuthorize("@ss.hasPermi('system:meter:add')")
+    @Log(title = "鑳芥簮浠〃褰曞叆", businessType = BusinessType.INSERT)
+    @PostMapping(value = "/meter")
+    public AjaxResult meterAdd(@RequestBody ProductOutput productOutput)
+    {
+        productOutput.setProductOutputId(UUID.randomUUID().toString());
+        productOutput.setDataType("2");
+        return toAjax(auxiliaryInputService.insertProductOutput(productOutput));
+    }
+
+    /**
+     * 淇敼鑳芥簮浠〃褰曞叆
+     */
+    @PreAuthorize("@ss.hasPermi('system:meter:edit')")
+    @Log(title = "鑳芥簮浠〃褰曞叆", businessType = BusinessType.UPDATE)
+    @PutMapping(value = "/meter")
+    public AjaxResult meterEdit(@RequestBody ProductOutput productOutput)
+    {
+        return toAjax(auxiliaryInputService.updateProductOutput(productOutput));
+    }
+
+    /**
+     * 鍒犻櫎鑳芥簮浠〃褰曞叆
+     */
+    @PreAuthorize("@ss.hasPermi('system:meter:remove')")
+    @Log(title = "鑳芥簮浠〃褰曞叆", businessType = BusinessType.DELETE)
+    @DeleteMapping("/meter/{ids}")
+    public AjaxResult meterRemove(@PathVariable String[] ids)
+    {
+        return toAjax(auxiliaryInputService.deleteProductOutputByIds(ids));
+    }
+
+    /**
+     * 鏌ヨ鑳芥簮鎸囨爣褰曞叆鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:energyindex:list')")
+    @GetMapping("/energyindex/list")
+    public TableDataInfo energyIndexList(ProductOutput productOutput, @RequestParam Long pageNum, @RequestParam Long pageSize)
+    {
+        startPage();
+        productOutput.setDataType("3");
+        Page<ProductOutput> list = auxiliaryInputService.selectProductOutputPage(productOutput,pageNum,pageSize);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭鑳芥簮鎸囨爣褰曞叆鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:energyindex:export')")
+    @Log(title = "鑳芥簮鎸囨爣褰曞叆", businessType = BusinessType.EXPORT)
+    @PostMapping("/energyindex/export")
+    public void energyIndexExport(HttpServletResponse response, ProductOutput productOutput)
+    {
+        productOutput.setDataType("3");
+        List<ProductOutput> list = auxiliaryInputService.selectProductOutputList(productOutput);
+        ExcelUtil<ProductOutput> util = new ExcelUtil<ProductOutput>(ProductOutput.class);
+        util.exportExcel(response, list, "鑳芥簮鎸囨爣褰曞叆鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇鑳芥簮鎸囨爣褰曞叆璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('system:energyindex:query')")
+    @GetMapping(value = "/energyindex/{productOutputId}")
+    public AjaxResult energyIndexGetInfo(@PathVariable("productOutputId") String productOutputId)
+    {
+        return success(auxiliaryInputService.selectProductOutputById(productOutputId));
+    }
+
+    /**
+     * 鏂板鑳芥簮鎸囨爣褰曞叆
+     */
+    @PreAuthorize("@ss.hasPermi('system:energyindex:add')")
+    @Log(title = "鑳芥簮鎸囨爣褰曞叆", businessType = BusinessType.INSERT)
+    @PostMapping(value = "/energyindex")
+    public AjaxResult energyIndexAdd(@RequestBody ProductOutput productOutput)
+    {
+        productOutput.setProductOutputId(UUID.randomUUID().toString());
+        productOutput.setDataType("3");
+        return toAjax(auxiliaryInputService.insertProductOutput(productOutput));
+    }
+
+    /**
+     * 淇敼鑳芥簮鎸囨爣褰曞叆
+     */
+    @PreAuthorize("@ss.hasPermi('system:energyindex:edit')")
+    @Log(title = "鑳芥簮鎸囨爣褰曞叆", businessType = BusinessType.UPDATE)
+    @PutMapping(value = "/energyindex")
+    public AjaxResult energyIndexEdit(@RequestBody ProductOutput productOutput)
+    {
+        return toAjax(auxiliaryInputService.updateProductOutput(productOutput));
+    }
+
+    /**
+     * 鍒犻櫎鑳芥簮鎸囨爣褰曞叆
+     */
+    @PreAuthorize("@ss.hasPermi('system:energyindex:remove')")
+    @Log(title = "鑳芥簮鎸囨爣褰曞叆", businessType = BusinessType.DELETE)
+    @DeleteMapping("/energyindex/{ids}")
+    public AjaxResult energyIndexRemove(@PathVariable String[] ids)
+    {
+        return toAjax(auxiliaryInputService.deleteProductOutputByIds(ids));
+    }
+
+//
+//    /**
+//     * 鏌ヨ鑳芥簮浜ч噺褰曞叆鍒楄〃
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:energyYield:list')")
+//    @GetMapping("/energyYield/list")
+//    public TableDataInfo energyYieldList(ProductOutput productOutput, @RequestParam Long pageNum, @RequestParam Long pageSize)
+//    {
+////        startPage();
+//        productOutput.setDataType("5");
+//        productOutput.setTimeType("MONTH");
+//        Page<ProductOutput> list = auxiliaryInputService.selectProductOutputPage(productOutput,pageNum,pageSize);
+//        return getDataTable(list);
+//    }
+//
+//    /**
+//     * 瀵煎嚭鑳芥簮浜ч噺褰曞叆鍒楄〃
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:energyYield:export')")
+//    @Log(title = "鑳芥簮浜ч噺褰曞叆", businessType = BusinessType.EXPORT)
+//    @PostMapping("/energyYield/export")
+//    public void energyYieldExport(HttpServletResponse response, ProductOutput productOutput)
+//    {
+//        productOutput.setDataType("5");
+//        productOutput.setTimeType("MONTH");
+//        List<ProductOutput> list = auxiliaryInputService.selectProductOutputList(productOutput);
+//        ExcelUtil<ProductOutput> util = new ExcelUtil<ProductOutput>(ProductOutput.class);
+//        util.exportExcel(response, list, "鑳芥簮浜ч噺褰曞叆鏁版嵁");
+//    }
+//
+//    /**
+//     * 鑾峰彇鑳芥簮浜ч噺褰曞叆璇︾粏淇℃伅
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:energyYield:query')")
+//    @GetMapping(value = "/energyYield/{productOutputId}")
+//    public AjaxResult energyYieldGetInfo(@PathVariable("productOutputId") String productOutputId)
+//    {
+//        return success(auxiliaryInputService.selectProductOutputById(productOutputId));
+//    }
+//
+//    /**
+//     * 鏂板鑳芥簮浜ч噺褰曞叆
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:energyYield:add')")
+//    @Log(title = "鑳芥簮浜ч噺褰曞叆", businessType = BusinessType.INSERT)
+//    @PostMapping(value = "/energyYield")
+//    public AjaxResult energyYieldAdd(@RequestBody ProductOutput productOutput)
+//    {
+//        //todo 鍏堟牴鎹畁odeId(鑺傜偣锛�+timeType(褰曞叆鏃堕棿绫诲瀷锛�+dataType锛堟暟鎹被鍨嬶級+dataTime锛堟椂闂达級
+//        // 鏍¢獙褰撳墠鏂板鐨勬暟鎹槸鍚﹀瓨鍦紝濡傛灉瀛樺湪璧版洿鏂帮紝濡傛灉涓嶅瓨鍦ㄨ蛋鏂板
+//        //
+//        productOutput.setDataType("5");
+//        productOutput.setTimeType("MONTH");
+//        ProductOutput queryParams= new ProductOutput();
+//        queryParams.setTimeType(productOutput.getTimeType());
+//        queryParams.setDataTime(productOutput.getDataTime());
+//        queryParams.setDataType(productOutput.getDataType());
+//        queryParams.setNodeId(productOutput.getNodeId());
+//        List<ProductOutput> existsList=auxiliaryInputService.selectProductOutputList(queryParams);
+//        if (existsList!=null && !existsList.isEmpty()){
+//            productOutput.setProductOutputId(existsList.get(0).getProductOutputId());
+//            return energyYieldEdit(productOutput);
+//        }else {
+//            productOutput.setProductOutputId(UUID.randomUUID().toString());
+//            return toAjax(auxiliaryInputService.insertProductOutput(productOutput));
+//        }
+//    }
+//
+//    /**
+//     * 淇敼鑳芥簮浜ч噺褰曞叆
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:energyYield:edit')")
+//    @Log(title = "鑳芥簮浜ч噺褰曞叆", businessType = BusinessType.UPDATE)
+//    @PutMapping(value = "/energyYield")
+//    public AjaxResult energyYieldEdit(@RequestBody ProductOutput productOutput)
+//    {
+//        productOutput.setDataType("5");
+//        productOutput.setTimeType("MONTH");
+//        return toAjax(auxiliaryInputService.updateProductOutput(productOutput));
+//    }
+//
+//    /**
+//     * 鍒犻櫎鑳芥簮浜ч噺褰曞叆
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:energyYield:remove')")
+//    @Log(title = "鑳芥簮浜ч噺褰曞叆", businessType = BusinessType.DELETE)
+//    @DeleteMapping("/energyYield/{ids}")
+//    public AjaxResult energyYieldRemove(@PathVariable String[] ids)
+//    {
+//        return toAjax(auxiliaryInputService.deleteProductOutputByIds(ids));
+//    }
+//
+////    -------------------------------------璁″垝閲忓綍鍏�----------------------------------------------
+//
+//
+//    /**
+//     * 鏌ヨ鑳芥簮璁″垝浜ч噺褰曞叆鍒楄〃
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:energyPlanYield:list')")
+//    @GetMapping("/energyPlanYield/list")
+//    public TableDataInfo energyPlanYieldList(ProductOutput productOutput, @RequestParam Long pageNum, @RequestParam Long pageSize)
+//    {
+////        startPage();
+//        productOutput.setDataType("4");
+//        productOutput.setTimeType("MONTH");
+//        Page<ProductOutput> list = auxiliaryInputService.selectProductOutputPage(productOutput,pageNum,pageSize);
+//        return getDataTable(list);
+//    }
+//
+//    /**
+//     * 瀵煎嚭鑳芥簮璁″垝浜ч噺褰曞叆鍒楄〃
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:energyPlanYield:export')")
+//    @Log(title = "鑳芥簮璁″垝閲忓綍鍏�", businessType = BusinessType.EXPORT)
+//    @PostMapping("/energyPlanYield/export")
+//    public void energyPlanYieldExport(HttpServletResponse response, ProductOutput productOutput)
+//    {
+//        productOutput.setDataType("4");
+//        productOutput.setTimeType("MONTH");
+//        List<ProductOutput> list = auxiliaryInputService.selectProductOutputList(productOutput);
+//        ExcelUtil<ProductOutput> util = new ExcelUtil<ProductOutput>(ProductOutput.class);
+//        util.exportExcel(response, list, "鑳芥簮璁″垝浜ч噺褰曞叆鏁版嵁");
+//    }
+//
+//    /**
+//     * 鑾峰彇鑳芥簮璁″垝浜ч噺褰曞叆璇︾粏淇℃伅
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:energyPlanYield:query')")
+//    @GetMapping(value = "/energyPlanYield/{productOutputId}")
+//    public AjaxResult energyPlanYieldGetInfo(@PathVariable("productOutputId") String productOutputId)
+//    {
+//        return success(auxiliaryInputService.selectProductOutputById(productOutputId));
+//    }
+//
+//    /**
+//     * 鏂板鑳芥簮璁″垝浜ч噺褰曞叆
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:energyPlanYield:add')")
+//    @Log(title = "鑳芥簮璁″垝閲忓綍鍏�", businessType = BusinessType.INSERT)
+//    @PostMapping(value = "/energyPlanYield")
+//    public AjaxResult energyPlanYieldAdd(@RequestBody ProductOutput productOutput)
+//    {
+//        //todo 鍏堟牴鎹畁odeId(鑺傜偣锛�+timeType(褰曞叆鏃堕棿绫诲瀷锛�+dataType锛堟暟鎹被鍨嬶級+dataTime锛堟椂闂达級
+//        // 鏍¢獙褰撳墠鏂板鐨勬暟鎹槸鍚﹀瓨鍦紝濡傛灉瀛樺湪璧版洿鏂帮紝濡傛灉涓嶅瓨鍦ㄨ蛋鏂板
+//        //
+//        productOutput.setDataType("4");
+//        productOutput.setTimeType("MONTH");
+//        ProductOutput queryParams= new ProductOutput();
+//        queryParams.setTimeType(productOutput.getTimeType());
+//        queryParams.setDataTime(productOutput.getDataTime());
+//        queryParams.setDataType(productOutput.getDataType());
+//        queryParams.setNodeId(productOutput.getNodeId());
+//        List<ProductOutput> existsList=auxiliaryInputService.selectProductOutputList(queryParams);
+//        if (existsList!=null && !existsList.isEmpty()){
+//            productOutput.setProductOutputId(existsList.get(0).getProductOutputId());
+//            return energyPlanYieldEdit(productOutput);
+//        }else {
+//            productOutput.setProductOutputId(UUID.randomUUID().toString());
+//            return toAjax(auxiliaryInputService.insertProductOutput(productOutput));
+//        }
+//    }
+//
+//    /**
+//     * 淇敼鑳芥簮璁″垝浜ч噺褰曞叆
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:energyPlanYield:edit')")
+//    @Log(title = "鑳芥簮璁″垝閲忓綍鍏�", businessType = BusinessType.UPDATE)
+//    @PutMapping(value = "/energyPlanYield")
+//    public AjaxResult energyPlanYieldEdit(@RequestBody ProductOutput productOutput)
+//    {
+//        productOutput.setDataType("4");
+//        productOutput.setTimeType("MONTH");
+//        return toAjax(auxiliaryInputService.updateProductOutput(productOutput));
+//    }
+//
+//    /**
+//     * 鍒犻櫎鑳芥簮璁″垝浜ч噺褰曞叆
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:energyPlanYield:remove')")
+//    @Log(title = "鑳芥簮璁″垝閲忓綍鍏�", businessType = BusinessType.DELETE)
+//    @DeleteMapping("/energyPlanYield/{ids}")
+//    public AjaxResult energyPlanYieldRemove(@PathVariable String[] ids)
+//    {
+//        return toAjax(auxiliaryInputService.deleteProductOutputByIds(ids));
+//    }
+//
+//
+//    //    -------------------------------------鑳芥簮缁撶畻閲忓綍鍏�----------------------------------------------
+//
+//
+//    /**
+//     * 鏌ヨ鑳芥簮缁撶畻閲忓綍鍏ュ垪琛�
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:energySettlement:list')")
+//    @GetMapping("/energySettlement/list")
+//    public TableDataInfo energySettlementList(ProductOutput productOutput, @RequestParam Long pageNum, @RequestParam Long pageSize)
+//    {
+////        startPage();
+//        productOutput.setDataType("6");
+//        productOutput.setTimeType("MONTH");
+//        Page<ProductOutput> list = auxiliaryInputService.selectProductOutputPage(productOutput,pageNum,pageSize);
+//        return getDataTable(list);
+//    }
+//
+//    /**
+//     * 瀵煎嚭鑳芥簮缁撶畻閲忓綍鍏ュ垪琛�
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:energySettlement:export')")
+//    @Log(title = "鑳芥簮缁撶畻閲忓綍鍏�", businessType = BusinessType.EXPORT)
+//    @PostMapping("/energySettlement/export")
+//    public void energySettlementExport(HttpServletResponse response, ProductOutput productOutput)
+//    {
+//        productOutput.setDataType("6");
+//        productOutput.setTimeType("MONTH");
+//        List<ProductOutput> list = auxiliaryInputService.selectProductOutputList(productOutput);
+//        ExcelUtil<ProductOutput> util = new ExcelUtil<ProductOutput>(ProductOutput.class);
+//        util.exportExcel(response, list, "鑳芥簮缁撶畻閲忓綍鍏ユ暟鎹�");
+//    }
+//
+//    /**
+//     * 鑾峰彇鑳芥簮缁撶畻閲忓綍鍏ヨ缁嗕俊鎭�
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:energySettlement:query')")
+//    @GetMapping(value = "/energySettlement/{productOutputId}")
+//    public AjaxResult energySettlementGetInfo(@PathVariable("productOutputId") String productOutputId)
+//    {
+//        return success(auxiliaryInputService.selectProductOutputById(productOutputId));
+//    }
+//
+//    /**
+//     * 鏂板鑳芥簮缁撶畻閲忓綍鍏�
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:energySettlement:add')")
+//    @Log(title = "鑳芥簮缁撶畻閲忓綍鍏�", businessType = BusinessType.INSERT)
+//    @PostMapping(value = "/energySettlement")
+//    public AjaxResult energySettlementAdd(@RequestBody ProductOutput productOutput)
+//    {
+//        //todo 鍏堟牴鎹畁odeId(鑺傜偣锛�+timeType(褰曞叆鏃堕棿绫诲瀷锛�+dataType锛堟暟鎹被鍨嬶級+dataTime锛堟椂闂达級
+//        // 鏍¢獙褰撳墠鏂板鐨勬暟鎹槸鍚﹀瓨鍦紝濡傛灉瀛樺湪璧版洿鏂帮紝濡傛灉涓嶅瓨鍦ㄨ蛋鏂板
+//        //
+//        productOutput.setDataType("6");
+//        productOutput.setTimeType("MONTH");
+//        ProductOutput queryParams= new ProductOutput();
+//        queryParams.setTimeType(productOutput.getTimeType());
+//        queryParams.setDataTime(productOutput.getDataTime());
+//        queryParams.setDataType(productOutput.getDataType());
+//        queryParams.setNodeId(productOutput.getNodeId());
+//        List<ProductOutput> existsList=auxiliaryInputService.selectProductOutputList(queryParams);
+//        if (existsList!=null && !existsList.isEmpty()){
+//            productOutput.setProductOutputId(existsList.get(0).getProductOutputId());
+//            return energySettlementEdit(productOutput);
+//        }else {
+//            productOutput.setProductOutputId(UUID.randomUUID().toString());
+//            return toAjax(auxiliaryInputService.insertProductOutput(productOutput));
+//        }
+//    }
+//
+//    /**
+//     * 淇敼鑳芥簮缁撶畻閲忓綍鍏�
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:energySettlement:edit')")
+//    @Log(title = "鑳芥簮缁撶畻閲忓綍鍏�", businessType = BusinessType.UPDATE)
+//    @PutMapping(value = "/energySettlement")
+//    public AjaxResult energySettlementEdit(@RequestBody ProductOutput productOutput)
+//    {
+//        productOutput.setDataType("6");
+//        productOutput.setTimeType("MONTH");
+//        return toAjax(auxiliaryInputService.updateProductOutput(productOutput));
+//    }
+//
+//    /**
+//     * 鍒犻櫎鑳芥簮缁撶畻閲忓綍鍏�
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:energySettlement:remove')")
+//    @Log(title = "鑳芥簮缁撶畻閲忓綍鍏�", businessType = BusinessType.DELETE)
+//    @DeleteMapping("/energySettlement/{ids}")
+//    public AjaxResult energySettlementRemove(@PathVariable String[] ids)
+//    {
+//        return toAjax(auxiliaryInputService.deleteProductOutputByIds(ids));
+//    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/FacilityAnnexController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/FacilityAnnexController.java
new file mode 100644
index 0000000..cec62b8
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/FacilityAnnexController.java
@@ -0,0 +1,181 @@
+package com.zhitan.web.controller.basicdata;
+
+import com.zhitan.basicdata.domain.FacilityAnnex;
+import com.zhitan.basicdata.services.IFacilityAnnexService;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.config.BaseConfig;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.ServletUtils;
+import com.zhitan.common.utils.file.FileUploadUtils;
+import com.zhitan.common.utils.file.FileUtils;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.common.utils.uuid.IdUtils;
+import com.zhitan.framework.web.service.TokenService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 璁惧妗f闄勪欢Controller
+ *
+ * @author sys
+ * @date 2020-02-24
+ */
+@RestController
+@RequestMapping("/facility/annex")
+public class FacilityAnnexController extends BaseController
+{
+    @Autowired
+    private IFacilityAnnexService facilityAnnexService;
+    @Autowired
+    private TokenService tokenService;
+
+    private static final Logger log = LoggerFactory.getLogger(FacilityAnnexController.class);
+    /**
+     * 鏌ヨ璁惧妗f闄勪欢鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('facility:annex:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FacilityAnnex facilityAnnex)
+    {
+        startPage();
+        List<FacilityAnnex> list = facilityAnnexService.selectFacilityAnnexList(facilityAnnex);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭璁惧妗f闄勪欢鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('facility:annex:export')")
+    @Log(title = "璁惧妗f闄勪欢", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FacilityAnnex facilityAnnex)
+    {
+        List<FacilityAnnex> list = facilityAnnexService.selectFacilityAnnexList(facilityAnnex);
+        ExcelUtil<FacilityAnnex> util = new ExcelUtil<FacilityAnnex>(FacilityAnnex.class);
+        return util.exportExcel(list, "annex");
+    }
+
+    /**
+     * 鑾峰彇璁惧妗f闄勪欢璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('facility:annex:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return AjaxResult.success(facilityAnnexService.selectFacilityAnnexById(id));
+    }
+
+    /**
+     * 鏂板璁惧妗f闄勪欢
+     */
+    @PreAuthorize("@ss.hasPermi('facility:annex:add')")
+    @Log(title = "璁惧妗f闄勪欢", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FacilityAnnex facilityAnnex)
+    {
+        return toAjax(facilityAnnexService.insertFacilityAnnex(facilityAnnex));
+    }
+
+    /**
+     * 淇敼璁惧妗f闄勪欢
+     */
+    @PreAuthorize("@ss.hasPermi('facility:annex:edit')")
+    @Log(title = "璁惧妗f闄勪欢", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FacilityAnnex facilityAnnex)
+    {
+        return toAjax(facilityAnnexService.updateFacilityAnnex(facilityAnnex));
+    }
+
+    /**
+     * 鍒犻櫎璁惧妗f闄勪欢
+     */
+    @PreAuthorize("@ss.hasPermi('facility:annex:remove')")
+    @Log(title = "璁惧妗f闄勪欢", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(facilityAnnexService.deleteFacilityAnnexByIds(ids));
+    }
+
+
+    /**
+     * 閫氱敤鎸囧畾鏂囦欢涓嬭浇璇锋眰
+     *
+     * @param showFileName 涓嬭浇灞曠ず鏂囦欢鍚嶇О
+    //     * @param filePath 涓嬭浇鏂囦欢缁濆璺緞 甯� 鏂囦欢鐪熷疄鍚嶅瓧鍙婅矾寰�
+     * @param delete 鏄惁鍒犻櫎/
+     */
+    @PreAuthorize("@ss.hasPermi('facility:annex:assignDownload')")
+    @PostMapping("/assignDownload")
+    public void fileAssignDownload(String showFileName, String filePath, Boolean delete, HttpServletResponse response, HttpServletRequest request)
+    {
+        try
+        {
+            response.setCharacterEncoding("utf-8");
+            response.setContentType("multipart/form-data");
+            response.setHeader("Content-Disposition",
+                    "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, showFileName));
+            FileUtils.writeBytes(filePath, response.getOutputStream());
+//            if (delete)
+//            {
+//                FileUtils.deleteFile(filePath);
+//            }
+            log.error("涓嬭浇鎴愬姛", "aa");
+        }
+        catch (Exception e)
+        {
+            log.error("涓嬭浇鏂囦欢澶辫触", e);
+        }
+    }
+    @Log(title = "璁惧妗f闄勪欢涓婁紶", businessType = BusinessType.IMPORT)
+    @PreAuthorize("@ss.hasPermi('facility:annex:fileImport')")
+    @PostMapping("/fileImport")
+    public AjaxResult importData(MultipartFile file, String facilityId) throws Exception
+    {
+        if (!file.isEmpty())
+        {
+            LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+            //鑾峰彇閰嶇疆鐨勬枃浠朵笂浼犺矾寰�
+            String uploadPathDir = BaseConfig.getUploadPath();
+            //鑾峰彇鏂囦欢鍘熷鍚嶇О
+            String fileName = file.getOriginalFilename();
+            //鑾峰彇鏂囦欢鎵╁睍鍚�
+            String fileSuffix = FileUploadUtils.getExtension(file);
+//            System.out.println("implementId==="+implementId);
+//            System.out.println("filedir==="+uploadPathDir);
+//            System.out.println("fileName==="+fileName);
+//            System.out.println("fileSuffix==="+fileSuffix);
+            //鏂囦欢鏈�缁堜繚瀛樼殑缁濆璺緞
+            String filePath = FileUploadUtils.uploadAll(uploadPathDir, file);
+//            System.out.println("涓婁紶鏂囦欢鍦板潃:===>"+filePath);
+            FacilityAnnex facilityAnnex = new FacilityAnnex();
+            //璁剧疆涓婚敭UUID
+            facilityAnnex.setId(IdUtils.simpleUUID());
+            facilityAnnex.setFileName(fileName);
+            facilityAnnex.setFilePath(filePath);
+            facilityAnnex.setFilesuffix(fileSuffix);
+            facilityAnnex.setFacilityId(facilityId);
+            facilityAnnex.setCreateBy(loginUser.getUsername());
+
+            facilityAnnex.setCreateBy(loginUser.getUsername());
+            if (this.facilityAnnexService.insertFacilityAnnex(facilityAnnex)>0)
+            {
+                return AjaxResult.success("闄勪欢涓婁紶瀹屾垚");
+            }
+        }
+        return AjaxResult.success("闄勪欢涓婁紶澶辫触");
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/FacilityArchivesController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/FacilityArchivesController.java
new file mode 100644
index 0000000..b0da561
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/FacilityArchivesController.java
@@ -0,0 +1,166 @@
+package com.zhitan.web.controller.basicdata;
+
+import com.zhitan.basicdata.domain.FacilityArchives;
+import com.zhitan.basicdata.services.IFacilityArchivesService;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.ServletUtils;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.framework.web.service.TokenService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * 璁惧妗fController
+ *
+ * @author zhaowei
+ * @date 2020-02-24
+ */
+@RestController
+@RequestMapping("/facility/archives")
+@Api(value = "璁惧妗fcontroller",tags = {"璁惧妗f绠$悊"})
+public class FacilityArchivesController extends BaseController
+{
+    @Autowired
+    private IFacilityArchivesService facilityArchivesService;
+    @Autowired
+    private TokenService tokenService;
+    /**
+     * 鏌ヨ璁惧妗f鍒楄〃
+     */
+    @ApiOperation(value = "璁惧妗f鍒楄〃")
+    @PreAuthorize("@ss.hasPermi('facility:archives:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FacilityArchives facilityArchives)
+    {
+        startPage();
+        List<FacilityArchives> list = facilityArchivesService.selectFacilityArchivesList(facilityArchives);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭璁惧妗f鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('facility:archives:export')")
+    @Log(title = "璁惧妗f", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    @ApiOperation("璁惧妗f鍒楄〃瀵煎嚭")
+    public AjaxResult export(FacilityArchives facilityArchives)
+    {
+        List<FacilityArchives> list = facilityArchivesService.excelFacilityArchivesList(facilityArchives);
+        ExcelUtil<FacilityArchives> util = new ExcelUtil<FacilityArchives>(FacilityArchives.class);
+        return util.exportExcel(list, "archives");
+    }
+
+    /**
+     * 鑾峰彇璁惧妗f璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('facility:archives:query')")
+    @GetMapping(value = "/{id}")
+    @ApiOperation(value = "鏍规嵁id鑾峰彇璁惧妗f璇︾粏淇℃伅")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return AjaxResult.success(facilityArchivesService.selectFacilityArchivesById(id));
+    }
+
+    /**
+     * 鏂板璁惧妗f
+     */
+    @PreAuthorize("@ss.hasPermi('facility:archives:add')")
+    @Log(title = "璁惧妗f", businessType = BusinessType.INSERT)
+    @PostMapping
+    @ApiOperation(value = "鏂板璁惧妗f")
+    public AjaxResult add(@RequestBody FacilityArchives facilityArchives)
+    {
+        FacilityArchives check = facilityArchivesService.selectFacilityArchivesByCode(facilityArchives);
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        //缂栧彿鍞竴鎬ф娴�
+        if(check!=null && check.getCode()!=null && check.getCode().length()>0)
+        {
+            return  AjaxResult.error(check.getCode()+"缂栫爜宸插瓨鍦�!");
+        }else
+        {
+            facilityArchives.setId(UUID.randomUUID().toString());
+            facilityArchives.setCreateBy(loginUser.getUsername());
+            return toAjax(facilityArchivesService.insertFacilityArchives(facilityArchives));
+        }
+    }
+
+    /**
+     * 淇敼璁惧妗f
+     */
+    @PreAuthorize("@ss.hasPermi('facility:archives:edit')")
+    @Log(title = "璁惧妗f", businessType = BusinessType.UPDATE)
+    @PutMapping
+    @ApiOperation(value = "缂栬緫璁惧妗f")
+    public AjaxResult edit(@RequestBody FacilityArchives facilityArchives)
+    {
+        //鏇存柊鏃剁殑缂栫爜 鍞竴绾︽潫 瑕佸垽鏂� id涓嶇瓑浜庤嚜宸憋紝涓� code瀛樺湪閲嶅鐨勶紝瑕佸厛鍘绘帀鑷繁锛屽惁鍒� 鑷繁鐨勪慨鏀逛篃鎶ラ敊
+        FacilityArchives check = facilityArchivesService.selectFacilityArchivesByCode(facilityArchives);
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        //缂栧彿鍞竴鎬ф娴�
+        if(check!=null && check.getCode()!=null && check.getCode().length()>0)
+        {
+            return  AjaxResult.error(check.getCode()+"缂栫爜宸插瓨鍦�!");
+        }else
+        {
+            facilityArchives.setUpdateBy(loginUser.getUsername());
+            return toAjax(facilityArchivesService.updateFacilityArchives(facilityArchives));
+        }
+
+    }
+
+    /**
+     * 鍒犻櫎璁惧妗f
+     */
+    @PreAuthorize("@ss.hasPermi('facility:archives:remove')")/**/
+    @Log(title = "璁惧妗f", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    @ApiOperation(value = "鍒犻櫎璁惧妗f")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(facilityArchivesService.deleteFacilityArchivesByIds(ids));
+    }
+  /**
+     * 妫�瀹氭仮澶�
+     */
+    @PreAuthorize("@ss.hasPermi('facility:archives:reset')")
+    @Log(title = "璁惧妗f", businessType = BusinessType.UPDATE)
+    @PostMapping ("/{ids}")
+    @ApiOperation(value = "璁惧妗f妫�瀹氭仮澶�")
+    public AjaxResult reset(@PathVariable String[] ids)
+    {
+        return toAjax(facilityArchivesService.resetFacilityArchivesByIds(ids));
+    }
+
+
+    @Log(title = "璁惧妗f缁存姢瀵煎叆", businessType = BusinessType.IMPORT)
+    @PreAuthorize("@ss.hasPermi('facility:archives:import')")
+    @PostMapping("/importData")
+    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        ExcelUtil<FacilityArchives> util = new ExcelUtil<FacilityArchives>(FacilityArchives.class);
+        List<FacilityArchives> facilityList = util.importExcel(file.getInputStream());
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        String message = facilityArchivesService.excelImpSave(facilityList,loginUser);
+        return AjaxResult.success(message);
+    }
+
+    @GetMapping("/importTemplate")
+    public AjaxResult importTemplate()
+    {
+        ExcelUtil<FacilityArchives> util = new ExcelUtil<FacilityArchives>(FacilityArchives.class);
+        return util.importTemplateExcel("璁惧妗f鏁版嵁");
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/MeterImplementController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/MeterImplementController.java
new file mode 100644
index 0000000..4fe9a13
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/MeterImplementController.java
@@ -0,0 +1,162 @@
+package com.zhitan.web.controller.basicdata;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.basicdata.domain.MeterImplement;
+import com.zhitan.basicdata.domain.MeterImplementExcel;
+import com.zhitan.basicdata.services.IMeterImplementService;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.ServletUtils;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.framework.web.service.TokenService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * 璁¢噺鍣ㄥ叿妗f缁存姢Controller
+ *
+ * @author zhaowei
+ * @date 2020-02-12
+ */
+@RestController
+@RequestMapping("/meter/implement")
+@Api(value = "璁¢噺鍣ㄥ叿绠$悊",tags = {"璁¢噺鍣ㄥ叿绠$悊"})
+public class MeterImplementController extends BaseController
+{
+    @Autowired
+    private IMeterImplementService meterImplementService;
+
+    @Autowired
+    private TokenService tokenService;
+
+
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('meter:implement:list')")
+    @GetMapping("/list")
+    @ApiOperation(value = "璁¢噺鍣ㄥ叿鍒楄〃")
+    public TableDataInfo list(MeterImplement meterImplement,Long pageNum, Long pageSize)
+    {
+        Page<MeterImplement> list = meterImplementService.selectMeterImplementPage(meterImplement,pageNum,pageSize);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('meter:implement:export')")
+    @Log(title = "璁¢噺鍣ㄥ叿妗f缁存姢", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    @ApiOperation(value = "璁¢噺鍣ㄥ叿鍒楄〃瀵煎嚭")
+    public AjaxResult export(MeterImplement meterImplement)
+    {
+//        List<MeterImplement> list = meterImplementService.selectMeterImplementList(meterImplement);
+        //浣跨敤涓撶敤鐨勫鍑鸿皟鐢ㄦ柟娉曪紝杩欓噷闈㈠皢 鏁版嵁杩涜杞寲锛� 鐘舵�併�佺绫� 杞崲鎴� 涓枃锛岀敤鍑芥暟瀹炵幇   閫氳繃鏁版嵁瀛楀吀杞崲
+        //MeterImplementExcel  瀵煎嚭 Excel涓撶敤瀵硅薄
+        List<MeterImplementExcel> list = meterImplementService.exectMeterImplementList(meterImplement);
+        ExcelUtil<MeterImplementExcel> util = new ExcelUtil<MeterImplementExcel>(MeterImplementExcel.class);
+        return util.exportExcel(list, "implement");
+    }
+
+    /**
+     * 鑾峰彇璁¢噺鍣ㄥ叿妗f缁存姢璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('meter:implement:query')")
+    @GetMapping(value = "/{id}")
+    @ApiOperation(value = "鏍规嵁id鑾峰彇璁¢噺鍣ㄥ叿鐩镐俊淇℃伅")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return AjaxResult.success(meterImplementService.selectMeterImplementById(id));
+    }
+
+    /**
+     * 鏂板璁¢噺鍣ㄥ叿妗f缁存姢
+     */
+    @PreAuthorize("@ss.hasPermi('meter:implement:add')")
+    @Log(title = "璁¢噺鍣ㄥ叿妗f缁存姢", businessType = BusinessType.INSERT)
+    @PostMapping
+    @ApiOperation(value = "鏂板璁¢噺鍣ㄥ叿")
+    public AjaxResult add(@RequestBody MeterImplement meterImplement)
+    {
+        MeterImplement check = meterImplementService.selectMeterImplementByCode(meterImplement);
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        //缂栧彿鍞竴鎬ф娴�
+        if(check!=null && check.getCode()!=null && check.getCode().length()>0)
+        {
+           return  AjaxResult.error(check.getCode()+"缂栫爜宸插瓨鍦�!");
+        }else
+        {
+            meterImplement.setId(UUID.randomUUID().toString());
+            meterImplement.setCreateBy(loginUser.getUsername());
+           return toAjax(meterImplementService.insertMeterImplement(meterImplement));
+        }
+    }
+
+    /**
+     * 淇敼璁¢噺鍣ㄥ叿妗f缁存姢
+     */
+    @PreAuthorize("@ss.hasPermi('meter:implement:edit')")
+    @Log(title = "璁¢噺鍣ㄥ叿妗f缁存姢", businessType = BusinessType.UPDATE)
+    @PutMapping
+    @ApiOperation(value = "缂栬緫璁¢噺鍣ㄥ叿")
+    public AjaxResult edit(@RequestBody MeterImplement meterImplement)
+    {
+        //鏇存柊鏃剁殑缂栫爜 鍞竴绾︽潫 瑕佸垽鏂� id涓嶇瓑浜庤嚜宸憋紝涓� code瀛樺湪閲嶅鐨勶紝瑕佸厛鍘绘帀鑷繁锛屽惁鍒� 鑷繁鐨勪慨鏀逛篃鎶ラ敊
+        MeterImplement check = meterImplementService.selectMeterImplementByCode(meterImplement);
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        //缂栧彿鍞竴鎬ф娴�
+        if(check!=null && check.getCode()!=null && check.getCode().length()>0)
+        {
+            return  AjaxResult.error(check.getCode()+"缂栫爜宸插瓨鍦�!");
+        }else
+        {
+            meterImplement.setUpdateBy(loginUser.getUsername());
+            return  toAjax(meterImplementService.updateMeterImplement(meterImplement));
+        }
+    }
+
+    /**
+     * 鍒犻櫎璁¢噺鍣ㄥ叿妗f缁存姢
+     */
+    @PreAuthorize("@ss.hasPermi('meter:implement:remove')")
+    @Log(title = "璁¢噺鍣ㄥ叿妗f缁存姢", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    @ApiOperation(value = "鍒犻櫎璁¢噺鍣ㄥ叿")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(meterImplementService.deleteMeterImplementByIds(ids));
+    }
+
+    @Log(title = "璁¢噺鍣ㄥ叿妗f缁存姢", businessType = BusinessType.IMPORT)
+    @PreAuthorize("@ss.hasPermi('meter:implement:import')")
+    @PostMapping("/importData")
+    @ApiOperation(value = "璁¢噺鍣ㄥ叿瀵煎叆")
+    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        ExcelUtil<MeterImplement> util = new ExcelUtil<MeterImplement>(MeterImplement.class);
+        List<MeterImplement> meterList = util.importExcel(file.getInputStream());
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        String message = meterImplementService.excelImpSave(meterList,loginUser);
+        return AjaxResult.success(message);
+    }
+
+    @GetMapping("/importTemplate")
+    @ApiOperation(value = "璁¢噺鍣ㄥ叿瀵煎嚭妯℃澘")
+    public AjaxResult importTemplate()
+    {
+        ExcelUtil<MeterImplementExcel> util = new ExcelUtil<MeterImplementExcel>(MeterImplementExcel.class);
+        return util.importTemplateExcel("璁¢噺鍣ㄥ叿妗f鏁版嵁");
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/SysEnerclassController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/SysEnerclassController.java
new file mode 100644
index 0000000..fce6827
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/SysEnerclassController.java
@@ -0,0 +1,128 @@
+package com.zhitan.web.controller.basicdata;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.basicdata.domain.SysEnerclass;
+import com.zhitan.basicdata.services.ISysEnerclassService;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 鑳芥簮鍝佺璁剧疆Controller
+ *
+ * @author ruoyi
+ * @date 2020-02-10
+ */
+@RestController
+@RequestMapping("/enerInfoManage/enerclass")
+public class SysEnerclassController extends BaseController
+{
+    @Autowired
+    private ISysEnerclassService sysEnerclassService;
+
+    /**
+     * 鏌ヨ鑳芥簮鍝佺璁剧疆鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('enerInfoManage:enerclass:list')")
+    @GetMapping("/page")
+    public TableDataInfo page(SysEnerclass sysEnerclass, Long pageNum, Long pageSize)
+    {
+        Page<SysEnerclass> list = sysEnerclassService.selectSysEnerclassPage(sysEnerclass, pageNum, pageSize);
+        return getDataTable(list);
+    }
+
+    /**
+     * 鏌ヨ鎵�鏈夎兘婧愬搧绉嶈缃垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('enerInfoManage:enerclass:list')")
+    @GetMapping("/list")
+    public AjaxResult list(SysEnerclass sysEnerclass)
+    {
+        List<SysEnerclass> list = sysEnerclassService.selectSysEnerclassList(sysEnerclass);
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 瀵煎嚭鑳芥簮鍝佺璁剧疆鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('enerInfoManage:enerclass:export')")
+    @Log(title = "鑳芥簮鍝佺璁剧疆", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(SysEnerclass sysEnerclass)
+    {
+        List<SysEnerclass> list = sysEnerclassService.selectSysEnerclassList(sysEnerclass);
+        ExcelUtil<SysEnerclass> util = new ExcelUtil<SysEnerclass>(SysEnerclass.class);
+        return util.exportExcel(list, "enerclass");
+    }
+
+    /**
+     * 鑾峰彇鑳芥簮鍝佺璁剧疆璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('enerInfoManage:enerclass:query')")
+    @GetMapping(value = "/{enerclassid}")
+    public AjaxResult getInfo(@PathVariable("enerclassid") Integer enerclassid)
+    {
+        return AjaxResult.success(sysEnerclassService.selectSysEnerclassById(enerclassid));
+    }
+
+    /**
+     * 鏂板鑳芥簮鍝佺璁剧疆
+     */
+    @PreAuthorize("@ss.hasPermi('enerInfoManage:enerclass:add')")
+    @Log(title = "鑳芥簮鍝佺璁剧疆", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody SysEnerclass sysEnerclass) {
+        //闈炵┖鏍¢獙
+        String name = sysEnerclass.getEnerclassname();
+        if(name.length()>10){
+            return AjaxResult.error("鏂板澶辫触锛岃兘婧愬悕绉拌秴闀匡紒");
+        }
+        Integer nameNum = sysEnerclassService.selectSameEnergyNameNum(name);
+        if (nameNum==0){
+            return toAjax(sysEnerclassService.insertSysEnerclass(sysEnerclass));
+        }
+        return AjaxResult.error("鏂板澶辫触锛岃妫�鏌ヨ兘婧愬悕绉版槸鍚﹂噸澶嶏紒");
+    }
+
+    /**
+     * 淇敼鑳芥簮鍝佺璁剧疆
+     */
+    @PreAuthorize("@ss.hasPermi('enerInfoManage:enerclass:edit')")
+    @Log(title = "鑳芥簮鍝佺璁剧疆", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody SysEnerclass sysEnerclass) {
+        //鍞竴鏍¢獙
+        Integer id = sysEnerclass.getEnerclassid();
+        String enerName = sysEnerclass.getEnerclassname();
+        if(enerName.length()>10){
+            return AjaxResult.error("淇敼澶辫触锛岃兘婧愬悕绉拌秴闀匡紒");
+        }
+        //  閫氳繃瑕佹敼鐨勮兘婧愬悕绉版煡宸叉湁涓�鏍风殑鑳芥簮鍚嶇О鏈夊嚑涓�                  濡傛灉绛変簬1灏辫閫氳繃id鍒ゆ柇鏄笉鏄敼鑷繁
+        if(sysEnerclassService.selectSameEnergyNameNum(enerName)==1&&id.equals(sysEnerclassService.selectIdByName(enerName))){
+            return toAjax(sysEnerclassService.updateSysEnerclass(sysEnerclass));
+        //                  濡傛灉=0 灏辫鏄庤繖涓兘婧愬悕绉板彲鏀�
+        }else if(sysEnerclassService.selectSameEnergyNameNum(enerName)==0){
+            return toAjax(sysEnerclassService.updateSysEnerclass(sysEnerclass));
+        }
+        return AjaxResult.error("淇敼澶辫触锛岃兘婧愬悕绉伴噸澶嶏紒");
+    }
+
+    /**
+     * 鍒犻櫎鑳芥簮鍝佺璁剧疆
+     */
+    @PreAuthorize("@ss.hasPermi('enerInfoManage:enerclass:remove')")
+    @Log(title = "鑳芥簮鍝佺璁剧疆", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{enerclassids}")
+    public AjaxResult remove(@PathVariable Integer[] enerclassids)
+    {
+        return toAjax(sysEnerclassService.deleteSysEnerclassByIds(enerclassids));
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/SysEnergyController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/SysEnergyController.java
new file mode 100644
index 0000000..e793254
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/basicdata/SysEnergyController.java
@@ -0,0 +1,211 @@
+package com.zhitan.web.controller.basicdata;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.basicdata.domain.SysEnerclass;
+import com.zhitan.basicdata.domain.SysEnergy;
+import com.zhitan.basicdata.services.ISysEnergyService;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.constant.UserConstants;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * energyController
+ *
+ * @author ruoyi
+ * @date 2020-02-12
+ */
+@RestController
+@RequestMapping("/enerInfoManage/energy")
+public class SysEnergyController extends BaseController
+{
+    @Autowired
+    private ISysEnergyService sysEnergyService;
+
+    /**
+     * 鏌ヨenerclassname鑳芥簮绫诲瀷鍚嶇О涓嬫媺妗�
+     */
+    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:getenerclassname')")
+    @GetMapping("/getenerclassname")
+    public AjaxResult list()
+    {
+        List<SysEnerclass> s = sysEnergyService.getenerclassname();
+        return AjaxResult.success(s);
+    }
+
+    /**
+     * 鏌ヨenergy鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:list')")
+    @GetMapping("/page")
+    public TableDataInfo page(SysEnergy sysEnergy, Long pageNum, Long pageSize)
+    {
+        Page<SysEnergy> list = sysEnergyService.selectSysEnergyPage(sysEnergy,pageNum,pageSize);
+        return getDataTable(list);
+    }
+
+    /**
+     * 鏌ヨenergy鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:list')")
+    @GetMapping("/list")
+    public AjaxResult list(SysEnergy sysEnergy)
+    {
+        List<SysEnergy> list = sysEnergyService.selectSysEnergyList(sysEnergy);
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 瀵煎嚭energy鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:export')")
+    @Log(title = "energy", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(SysEnergy sysEnergy)
+    {
+        List<SysEnergy> list = sysEnergyService.selectSysEnergyList(sysEnergy);
+        ExcelUtil<SysEnergy> util = new ExcelUtil<SysEnergy>(SysEnergy.class);
+        return util.exportExcel(list, "energy");
+    }
+
+    /**
+     * 鑾峰彇energy璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:query')")
+    @GetMapping(value = "/{enerid}")
+    public AjaxResult getInfo(@PathVariable("enerid") Integer enerid)
+    {
+        SysEnergy sysEnergy = sysEnergyService.selectSysEnergyById(enerid);
+        if (UserConstants.YES.equals(sysEnergy.getIsstorage())) {
+            sysEnergy.setIsstorageString("鏄�");
+        }else{
+            sysEnergy.setIsstorageString("鍚�");
+        }
+        return AjaxResult.success(sysEnergy);
+    }
+
+    /**
+     * 鏂板energy
+     */
+    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:add')")
+    @Log(title = "energy", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody SysEnergy sysEnergy)
+    {
+        //闈炵┖鏍¢獙
+        String name = sysEnergy.getEnername();
+        if(name.length()>10){
+            return AjaxResult.error("鏂板澶辫触锛岃兘婧愬悕绉拌秴闀匡紒");
+        }
+        SysEnergy nameNum = sysEnergyService.selectSameEnergyNameNum(name);
+        SysEnergy codeNum = sysEnergyService.selectSameEnergyCodeNum(sysEnergy.getEnersno());
+        if (null != nameNum){
+            return AjaxResult.error("鏂板澶辫触锛岃妫�鏌ヨ兘婧愬悕绉版槸鍚﹂噸澶嶏紒");
+        }
+        if (null != codeNum){
+            return AjaxResult.error("鏂板澶辫触锛岃妫�鏌ヨ兘婧愮紪鍙锋槸鍚﹂噸澶嶏紒");
+        }
+        return toAjax(sysEnergyService.insertSysEnergy(sysEnergy));
+    }
+
+    /**
+     * 淇敼energy
+     */
+    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:edit')")
+    @Log(title = "energy", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody SysEnergy sysEnergy)
+    {
+        String enerName = sysEnergy.getEnername();
+        //鍞竴鏍¢獙
+        Integer id = sysEnergy.getEnerid();
+        if(enerName.length()>10){
+            return AjaxResult.error("淇敼澶辫触锛岃兘婧愬悕绉拌秴闀匡紒");
+        }
+        SysEnergy nameNum = sysEnergyService.selectSameEnergyNameNum(enerName);
+        SysEnergy codeNum = sysEnergyService.selectSameEnergyCodeNum(sysEnergy.getEnersno());
+
+        if (null != nameNum && nameNum.getEnerid() != sysEnergy.getEnerid()){
+            return AjaxResult.error("淇敼澶辫触锛岃妫�鏌ヨ兘婧愬悕绉版槸鍚﹂噸澶嶏紒");
+        }
+        if (null != codeNum && codeNum.getEnerid() != sysEnergy.getEnerid()){
+            return AjaxResult.error("淇敼澶辫触锛岃妫�鏌ヨ兘婧愮紪鍙锋槸鍚﹂噸澶嶏紒");
+        }
+        return toAjax(sysEnergyService.updateSysEnergy(sysEnergy));
+    }
+    /**
+     * 淇濆瓨鑳芥簮鍗曚环璁剧疆
+     */
+    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:updateEnergyPrice')")
+    @Log(title = "energy", businessType = BusinessType.UPDATE)
+    @PutMapping("/updateEnergyPrice")
+    public AjaxResult updateEnergyPrice(@RequestBody(required = false) SysEnergy sysEnergy) throws ParseException {
+        Integer enerid = sysEnergy.getEnerid();
+        if(sysEnergy.getExecdate()==null){
+            return AjaxResult.error("鎵ц鏃ユ湡涓嶈兘涓虹┖锛�");
+        }
+        Date date = new Date();
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+        String dateString = formatter.format(date);
+        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+        Date now = df.parse(dateString);
+        if(sysEnergy.getExecdate().before(now)){
+            return AjaxResult.error("鎵ц鏃ユ湡浠ヨ繃锛�");
+        }
+        if((sysEnergyService.getPriceCountByEnerid(sysEnergy))==0){
+            return toAjax(sysEnergyService.insertEnergyPrice(sysEnergy));
+        }else if((sysEnergyService.getPriceCountByEnerid(sysEnergy))==1){
+            return toAjax(sysEnergyService.updateEnergyPrice(sysEnergy));
+        }
+            return AjaxResult.error("淇濆瓨澶辫触锛�");
+    }
+    /**
+     * 淇濆瓨鑳芥簮鎶樻爣绯绘暟璁剧疆
+     */
+    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:updateEnergyCoefficient')")
+    @Log(title = "energy", businessType = BusinessType.UPDATE)
+    @PutMapping("/updateEnergyCoefficient")
+    public AjaxResult updateEnergyCoefficient(@RequestBody(required = false) SysEnergy sysEnergy) throws ParseException {
+        Integer enerid = sysEnergy.getEnerid();
+        if(sysEnergy.getCoefficientexecdate()==null){
+            return AjaxResult.error("鎵ц鏃ユ湡涓嶈兘涓虹┖锛�");
+        }
+        Date date = new Date();
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+        String dateString = formatter.format(date);
+        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+        Date now = df.parse(dateString);
+        if(sysEnergy.getCoefficientexecdate().before(now)){
+            return AjaxResult.error("鎵ц鏃ユ湡浠ヨ繃锛�");
+        }
+        Integer count = sysEnergyService.getCoefficientCountByEnerid(enerid);
+        if(count==0){
+            return toAjax(sysEnergyService.insertEnergyCoefficient(sysEnergy));
+        }else if(count==1){
+            return toAjax(sysEnergyService.updateEnergyCoefficient(sysEnergy));
+        }
+        return AjaxResult.error("淇濆瓨澶辫触锛�");
+    }
+
+    /**
+     * 鍒犻櫎energy
+     */
+    @PreAuthorize("@ss.hasPermi('enerInfoManage:energy:remove')")
+    @Log(title = "energy", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{enerids}")
+    public AjaxResult remove(@PathVariable Integer[] enerids)
+    {
+        return toAjax(sysEnergyService.deleteSysEnergyByIds(enerids));
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/common/CaptchaController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/common/CaptchaController.java
new file mode 100644
index 0000000..4e18594
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/common/CaptchaController.java
@@ -0,0 +1,94 @@
+package com.zhitan.web.controller.common;
+
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+import javax.annotation.Resource;
+import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.util.FastByteArrayOutputStream;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.google.code.kaptcha.Producer;
+import com.zhitan.common.config.BaseConfig;
+import com.zhitan.common.constant.CacheConstants;
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.redis.RedisCache;
+import com.zhitan.common.utils.sign.Base64;
+import com.zhitan.common.utils.uuid.IdUtils;
+import com.zhitan.system.service.ISysConfigService;
+
+/**
+ * 楠岃瘉鐮佹搷浣滃鐞�
+ * 
+ * @author zhitan
+ */
+@RestController
+public class CaptchaController
+{
+    @Resource(name = "captchaProducer")
+    private Producer captchaProducer;
+
+    @Resource(name = "captchaProducerMath")
+    private Producer captchaProducerMath;
+
+    @Resource
+    private RedisCache redisCache;
+    
+    @Resource
+    private ISysConfigService sysConfigService;
+    /**
+     * 鐢熸垚楠岃瘉鐮�
+     */
+    @GetMapping("/captchaImage")
+    public AjaxResult getCode(HttpServletResponse response) throws IOException
+    {
+        AjaxResult ajax = AjaxResult.success();
+        boolean captchaEnabled = sysConfigService.selectCaptchaEnabled();
+        ajax.put("captchaEnabled", captchaEnabled);
+        if (!captchaEnabled)
+        {
+            return ajax;
+        }
+
+        // 淇濆瓨楠岃瘉鐮佷俊鎭�
+        String uuid = IdUtils.simpleUUID();
+        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;
+
+        String capStr = null, code = null;
+        BufferedImage image = null;
+
+        // 鐢熸垚楠岃瘉鐮�
+        String captchaType = BaseConfig.getCaptchaType();
+        if ("math".equals(captchaType))
+        {
+            String capText = captchaProducerMath.createText();
+            capStr = capText.substring(0, capText.lastIndexOf("@"));
+            code = capText.substring(capText.lastIndexOf("@") + 1);
+            image = captchaProducerMath.createImage(capStr);
+        }
+        else if ("char".equals(captchaType))
+        {
+            capStr = code = captchaProducer.createText();
+            image = captchaProducer.createImage(capStr);
+        }
+
+        redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
+        // 杞崲娴佷俊鎭啓鍑�
+        FastByteArrayOutputStream os = new FastByteArrayOutputStream();
+        try
+        {
+            ImageIO.write(image, "jpg", os);
+        }
+        catch (IOException e)
+        {
+            return AjaxResult.error(e.getMessage());
+        }
+
+        ajax.put("uuid", uuid);
+        ajax.put("img", Base64.encode(os.toByteArray()));
+        return ajax;
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/common/CommonController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/common/CommonController.java
new file mode 100644
index 0000000..7eb390d
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/common/CommonController.java
@@ -0,0 +1,163 @@
+package com.zhitan.web.controller.common;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.GetMapping;
+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 com.zhitan.common.config.BaseConfig;
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.file.FileUploadUtils;
+import com.zhitan.common.utils.file.FileUtils;
+import com.zhitan.framework.config.ServerConfig;
+
+/**
+ * 閫氱敤璇锋眰澶勭悊
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/common")
+public class CommonController
+{
+    private static final Logger log = LoggerFactory.getLogger(CommonController.class);
+
+    @Resource
+    private ServerConfig serverConfig;
+
+    private static final String FILE_DELIMETER = ",";
+
+    /**
+     * 閫氱敤涓嬭浇璇锋眰
+     * 
+     * @param fileName 鏂囦欢鍚嶇О
+     * @param delete 鏄惁鍒犻櫎
+     */
+    @GetMapping("/download")
+    public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
+    {
+        try
+        {
+            if (!FileUtils.checkAllowDownload(fileName))
+            {
+                throw new Exception(StringUtils.format("鏂囦欢鍚嶇О({})闈炴硶锛屼笉鍏佽涓嬭浇銆� ", fileName));
+            }
+            String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
+            String filePath = BaseConfig.getDownloadPath() + fileName;
+
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            FileUtils.setAttachmentResponseHeader(response, realFileName);
+            FileUtils.writeBytes(filePath, response.getOutputStream());
+            if (delete)
+            {
+                FileUtils.deleteFile(filePath);
+            }
+        }
+        catch (Exception e)
+        {
+            log.error("涓嬭浇鏂囦欢澶辫触", e);
+        }
+    }
+
+    /**
+     * 閫氱敤涓婁紶璇锋眰锛堝崟涓級
+     */
+    @PostMapping("/upload")
+    public AjaxResult uploadFile(MultipartFile file) throws Exception
+    {
+        try
+        {
+            // 涓婁紶鏂囦欢璺緞
+            String filePath = BaseConfig.getUploadPath();
+            // 涓婁紶骞惰繑鍥炴柊鏂囦欢鍚嶇О
+            String fileName = FileUploadUtils.upload(filePath, file);
+            String url = serverConfig.getUrl() + fileName;
+            AjaxResult ajax = AjaxResult.success();
+            ajax.put("url", url);
+            ajax.put("fileName", fileName);
+            ajax.put("newFileName", FileUtils.getName(fileName));
+            ajax.put("originalFilename", file.getOriginalFilename());
+            return ajax;
+        }
+        catch (Exception e)
+        {
+            return AjaxResult.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 閫氱敤涓婁紶璇锋眰锛堝涓級
+     */
+    @PostMapping("/uploads")
+    public AjaxResult uploadFiles(List<MultipartFile> files) throws Exception
+    {
+        try
+        {
+            // 涓婁紶鏂囦欢璺緞
+            String filePath = BaseConfig.getUploadPath();
+            List<String> urls = new ArrayList<String>();
+            List<String> fileNames = new ArrayList<String>();
+            List<String> newFileNames = new ArrayList<String>();
+            List<String> originalFilenames = new ArrayList<String>();
+            for (MultipartFile file : files)
+            {
+                // 涓婁紶骞惰繑鍥炴柊鏂囦欢鍚嶇О
+                String fileName = FileUploadUtils.upload(filePath, file);
+                String url = serverConfig.getUrl() + fileName;
+                urls.add(url);
+                fileNames.add(fileName);
+                newFileNames.add(FileUtils.getName(fileName));
+                originalFilenames.add(file.getOriginalFilename());
+            }
+            AjaxResult ajax = AjaxResult.success();
+            ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER));
+            ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER));
+            ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
+            ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
+            return ajax;
+        }
+        catch (Exception e)
+        {
+            return AjaxResult.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 鏈湴璧勬簮閫氱敤涓嬭浇
+     */
+    @GetMapping("/download/resource")
+    public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
+            throws Exception
+    {
+        try
+        {
+            if (!FileUtils.checkAllowDownload(resource))
+            {
+                throw new Exception(StringUtils.format("璧勬簮鏂囦欢({})闈炴硶锛屼笉鍏佽涓嬭浇銆� ", resource));
+            }
+            // 鏈湴璧勬簮璺緞
+            String localPath = BaseConfig.getProfile();
+            // 鏁版嵁搴撹祫婧愬湴鍧�
+            String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
+            // 涓嬭浇鍚嶇О
+            String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            FileUtils.setAttachmentResponseHeader(response, downloadName);
+            FileUtils.writeBytes(downloadPath, response.getOutputStream());
+        }
+        catch (Exception e)
+        {
+            log.error("涓嬭浇鏂囦欢澶辫触", e);
+        }
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/ComprehensiveStatisticsController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/ComprehensiveStatisticsController.java
new file mode 100644
index 0000000..157f48c
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/ComprehensiveStatisticsController.java
@@ -0,0 +1,175 @@
+package com.zhitan.web.controller.comprehensivestatistics;
+
+import com.zhitan.basicdata.domain.FacilityArchives;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.comprehensivestatistics.domain.ComprehensiveStatistics;
+import com.zhitan.comprehensivestatistics.service.IComprehensiveStatisticsService;
+import com.zhitan.keyequipment.service.IDailyKeyEquipmentService;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.service.IModelNodeService;
+import com.zhitan.realtimedata.service.IPeriodDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * electricityPriceController
+ *
+ * @author sys
+ * @date 2020-02-18
+ */
+@RestController
+@RequestMapping("/statisticalData/comprehensiveStatistics")
+public class ComprehensiveStatisticsController extends BaseController {
+
+    @Autowired
+    private IPeriodDataService periodDataService;
+    @Autowired
+    private IModelNodeService modelNodeService;
+    @Autowired
+    private IComprehensiveStatisticsService comprehensiveStatisticsService;
+
+    @Autowired
+    private IDailyKeyEquipmentService dailykeyEquipment;
+
+    @GetMapping("/getList")
+    public AjaxResult getList(ComprehensiveStatistics dataItem) {
+        try {
+            /*List<EnergyIndex> list = modelNodeService.getSettingIndex(dataItem.getIndexCode());
+            List<String> indexCode = list.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());*/
+            List<ComprehensiveStatistics> list = comprehensiveStatisticsService.getEnergyByIndex(dataItem.getIndexType());
+            List<String> indexCode = list.stream().map(ComprehensiveStatistics::getIndexId).collect(Collectors.toList());
+            List<ComprehensiveStatistics> resultList = comprehensiveStatisticsService.getDatasByIndex(indexCode, dataItem.getDataTime(), dataItem.getTimeType());
+            Map<String, List<ComprehensiveStatistics>> groupBy = resultList.stream().collect(Collectors.groupingBy(ComprehensiveStatistics::getName));
+            List<Map> energyHeadList = new ArrayList<Map>();
+            groupBy.forEach((IndexName,value)->{
+                Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
+                tableColumn.put("name",IndexName);
+                for(ComprehensiveStatistics result:value){
+                    if(result.getIndexCode().contains("electric")){
+                        tableColumn.put("electric",result.getValue());
+                    }else if(result.getIndexCode().contains("water")){
+                        tableColumn.put("water",result.getValue());
+                    }else if(result.getIndexCode().contains("coal")){
+                        tableColumn.put("coal",result.getValue());
+                    }else if(result.getIndexCode().contains("steam")){
+                        tableColumn.put("steam",result.getValue());
+                    }
+                }
+                energyHeadList.add(tableColumn);
+            });
+            return AjaxResult.success(energyHeadList);
+        } catch (Exception ex) {
+            logger.error("鑾峰彇鍑洪敊锛�", ex);
+            return AjaxResult.error("鑾峰彇鍑洪敊!");
+        }
+    }
+    @GetMapping("/energyList")
+    public AjaxResult getEnergyList(ComprehensiveStatistics dataItem) {
+        try {
+            List<EnergyIndex> list = modelNodeService.getSettingIndex(dataItem.getIndexCode());
+            List<String> indexCode = list.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
+            List<ComprehensiveStatistics> resultList = comprehensiveStatisticsService.getDatasIndex(indexCode, dataItem.getDataTime(), dataItem.getTimeType());
+            Map<String, List<ComprehensiveStatistics>> groupBy = resultList.stream().collect(Collectors.groupingBy(ComprehensiveStatistics::getFacilityName));
+            List<Map> energyHeadList = new ArrayList<Map>();
+            groupBy.forEach((IndexName,value)->{
+                Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
+                tableColumn.put("name",IndexName);
+                tableColumn.put("value",value);
+                energyHeadList.add(tableColumn);
+            });
+            return AjaxResult.success(energyHeadList);
+        } catch (Exception ex) {
+            logger.error("鑾峰彇鍑洪敊锛�", ex);
+            return AjaxResult.error("鑾峰彇鍑洪敊!");
+        }
+    }
+    @GetMapping("/energyDevice")
+    public AjaxResult energyDevice(ComprehensiveStatistics dataItem) {
+        try {
+            List<EnergyIndex> list = modelNodeService.getSettingIndex(dataItem.getIndexCode());
+            List<String> indexCode = list.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
+            List<ComprehensiveStatistics> resultList = comprehensiveStatisticsService.getDatasIndex(indexCode, dataItem.getDataTime(), dataItem.getTimeType());
+            return AjaxResult.success(resultList);
+        } catch (Exception ex) {
+            logger.error("鑾峰彇鍑洪敊锛�", ex);
+            return AjaxResult.error("鑾峰彇鍑洪敊!");
+        }
+    }
+    @GetMapping("/getDeviceList")
+    public AjaxResult getDeviceList(ComprehensiveStatistics dataItem) {
+        try {
+            List<EnergyIndex> list = modelNodeService.getSettingIndex(dataItem.getIndexCode());
+            List<String> indexCode = list.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
+            List<ComprehensiveStatistics> resultList = comprehensiveStatisticsService.getDatasIndex(indexCode, dataItem.getDataTime(), dataItem.getTimeType());
+            List<Map> energyHeadList = new ArrayList<Map>();
+            if(dataItem.getIndexType().equals("1")){
+                resultList.forEach(value->{
+                    if(!value.getIndexCode().contains("scale")){
+                        Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
+                        tableColumn.put("value",value.getValue());
+                        tableColumn.put("facilityName",value.getFacilityName());
+                        energyHeadList.add(tableColumn);
+                    }
+                });
+            }else{
+                resultList.forEach(value->{
+                    if(value.getIndexCode().contains("scale")){
+                        Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
+                        tableColumn.put("facilityName",value.getFacilityName());
+                        tableColumn.put("value",value.getValue());
+                        energyHeadList.add(tableColumn);
+                    }
+                });
+            }
+            return AjaxResult.success(energyHeadList);
+        } catch (Exception ex) {
+            logger.error("鑾峰彇鍑洪敊锛�", ex);
+            return AjaxResult.error("鑾峰彇鍑洪敊!");
+        }
+    }
+    @GetMapping("/getFacilityArchives")
+    public AjaxResult getFacilityArchives() {
+        try {
+            List<FacilityArchives> list= comprehensiveStatisticsService.getFacilityArchives();
+            return AjaxResult.success(list);
+        } catch (Exception ex) {
+            logger.error("鑾峰彇鏍囬鍑洪敊锛�", ex);
+            return AjaxResult.error("鑾峰彇鏍囬鍑洪敊!");
+        }
+    }
+
+    /**
+     * 閲嶇偣鑳借�楄澶�
+     * @return
+     */
+    @GetMapping("/getPointFacility")
+    public AjaxResult getPointFacility() {
+        try {
+            List<FacilityArchives> list=dailykeyEquipment.getPointFacility();
+            return AjaxResult.success(list);
+        } catch (Exception ex) {
+            logger.error("鑾峰彇璁惧鍑洪敊锛�", ex);
+            return AjaxResult.error("鑾峰彇鏍囬鍑洪敊!");
+        }
+    }
+
+    @GetMapping("/export")
+    public AjaxResult export(ComprehensiveStatistics dataItem) {
+        List<ComprehensiveStatistics> list = comprehensiveStatisticsService.getEnergyByIndex(dataItem.getIndexType());
+        List<String> indexCode = list.stream().map(ComprehensiveStatistics::getIndexId).collect(Collectors.toList());
+        List<ComprehensiveStatistics> resultList = comprehensiveStatisticsService.getDatasByList(indexCode, dataItem.getBeginTime(),dataItem.getEndTime(),dataItem.getTimeType());
+        ExcelUtil<ComprehensiveStatistics> util = new ExcelUtil<ComprehensiveStatistics>(ComprehensiveStatistics.class);
+        return util.exportExcel(resultList, "set");
+    }
+
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/DailyComprehensiveController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/DailyComprehensiveController.java
new file mode 100644
index 0000000..4ce9a69
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/DailyComprehensiveController.java
@@ -0,0 +1,94 @@
+package com.zhitan.web.controller.comprehensivestatistics;
+
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.comprehensivestatistics.domain.DailyComprehensive;
+import com.zhitan.comprehensivestatistics.service.IDailyComprehensiveService;
+import com.zhitan.model.domain.ModelNode;
+import com.zhitan.model.service.IModelNodeService;
+import com.zhitan.realtimedata.domain.DataItem;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author sys
+ * @date 2020-02-18
+ */
+@RestController
+@RequestMapping("/comprehensive/dailyComprehensive")
+@Api(value = "缁煎悎鎸囨爣鍒嗘瀽锛堟棩锛塩ontroller",tags = {"缁煎悎鎸囨爣鍒嗘瀽"})
+public class DailyComprehensiveController extends BaseController {
+
+    @Autowired
+    private IModelNodeService modelNodeService;
+    @Autowired
+    private IDailyComprehensiveService dailyComprehensiveService;
+
+    /*鍏ㄥ巶鑳借�楃粺璁�*/
+    @ApiOperation(value = "鑾峰彇缁煎悎鎸囨爣鍒嗘瀽锛堟棩锛夊垪琛�")
+    @GetMapping("/list")
+    public AjaxResult list(DataItem dataItem) {
+        try {
+            ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(dataItem.getIndexCode());
+            if (ObjectUtils.isEmpty(modelNode)) {
+                return AjaxResult.success("鏆傛棤鏁版嵁");
+            }
+            List<DailyComprehensive> dataList = new ArrayList<>();
+            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            String aa = df.format(dataItem.getDataTime());
+            String bb = "";
+            int i = 0;
+            dataItem.setBeginTime(dataItem.getDataTime());
+            String endTime=aa+" 24:00:00";
+            dataItem.setEndTime(sf.parse(endTime));
+            while (i < 24) {
+                if(i>9){
+                    bb = aa + " " + i + ":00:00";
+                } else {
+                    bb = aa + " 0" + i + ":00:00";
+                }
+                DailyComprehensive report = new DailyComprehensive();
+                report.setDataTime(sf.parse(bb));
+                report.setValue("value" + i);
+                dataList.add(report);
+                i++;
+            }
+            List<DailyComprehensive> list = dailyComprehensiveService.getDailyComprehensiveList(modelNode.getNodeId(),
+                    dataList, dataItem.getBeginTime(), dataItem.getEndTime(), dataItem.getTimeType(), dataItem.getIndexStorageId());
+            return AjaxResult.success(list);
+        } catch (Exception ex) {
+            logger.error("鑾峰彇鍑洪敊锛�", ex);
+            return AjaxResult.error("鑾峰彇鍑洪敊!");
+        }
+    }
+
+    /**
+     * 鍏ㄥ巶缁煎悎鑳借�楃粺璁″浘
+     */
+    @ApiOperation(value = "鑾峰彇缁煎悎鎸囨爣鍒嗘瀽鍥捐〃锛堟棩锛夋暟鎹�")
+    @GetMapping("/listChart")
+    public AjaxResult listChart(DataItem dataItem) throws ParseException {
+        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String aa= df.format(dataItem.getDataTime());
+        dataItem.setBeginTime(dataItem.getDataTime());
+        String endTime=aa+" 24:00:00";
+        dataItem.setEndTime(sf.parse(endTime));
+        List<DailyComprehensive> list = dailyComprehensiveService.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
+        return AjaxResult.success(list);
+    }
+
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/consumptionanalysis/ConsumptionAnalysisController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/consumptionanalysis/ConsumptionAnalysisController.java
new file mode 100644
index 0000000..af9dc6d
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/consumptionanalysis/ConsumptionAnalysisController.java
@@ -0,0 +1,184 @@
+package com.zhitan.web.controller.consumptionanalysis;
+
+import com.zhitan.basicdata.domain.SysEnergy;
+import com.zhitan.basicdata.services.ISysEnergyService;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.consumptionanalysis.domain.dto.ConsumptionAnalysisDTO;
+import com.zhitan.consumptionanalysis.domain.vo.ConsumptionAnalysisVO;
+import com.zhitan.consumptionanalysis.domain.vo.ProductEnergyAnalysisVO;
+import com.zhitan.consumptionanalysis.domain.vo.RankingDataVO;
+import com.zhitan.consumptionanalysis.domain.vo.RankingEnergyData;
+import com.zhitan.consumptionanalysis.service.IConsumptionAnalysisService;
+import io.swagger.annotations.ApiOperation;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.util.IOUtils;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * 缁熻鍒嗘瀽 鎺у埗灞�
+ *
+ * @Author: Zhujw
+ * @Date: 2023/3/1
+ */
+@RestController
+@RequestMapping("/consumptionanalysis")
+public class ConsumptionAnalysisController extends BaseController {
+
+    @Autowired
+    private IConsumptionAnalysisService consumptionAnalysisService;
+
+    @Autowired
+    private ISysEnergyService sysEnergyService;
+
+
+    @GetMapping("/getByArea")
+    @ApiOperation(value = "绉戝鑳借�楀垎鏋愬垪琛�", notes = "绉戝鑳借�楀垎鏋愬垪琛�")
+    public AjaxResult getByArea(@Validated ConsumptionAnalysisDTO dto) {
+        ConsumptionAnalysisVO consumptionAnalysisVO = consumptionAnalysisService.getByArea(dto);
+        return AjaxResult.success(consumptionAnalysisVO);
+    }
+
+    @PostMapping("/energyExport")
+    @ApiOperation(value = "绉戝鑳借�楀垎鏋愬鍑�", notes = "绉戝鑳借�楀垎鏋愬鍑�")
+    public void energyExport(HttpServletResponse response,  ConsumptionAnalysisDTO dto) {
+        ConsumptionAnalysisVO consumptionAnalysisVO = consumptionAnalysisService.getByArea(dto);
+        Workbook workbook = new XSSFWorkbook();
+        Sheet sheet = workbook.createSheet("鑳借�楀垎鏋�");
+
+        final SysEnergy sysEnergy = sysEnergyService.selectSameEnergyCodeNum(dto.getEnergyType());
+
+        String[]  columnNames = new String[] {
+            "鏈湡鏃堕棿", 
+            "鏈湡鑰�" + sysEnergy.getEnername() + "(" + sysEnergy.getMuid()+ ")",
+            "鍚屾湡鏃堕棿","鍚屾湡鑰�" + sysEnergy.getEnername() + "(" + sysEnergy.getMuid()+ ")",
+            "YOY".equals( dto.getAnalysisType())?"鍚屾瘮(%)":"鐜瘮(%)"
+        };
+
+
+        // 瀹氫箟鏁版嵁
+        List<String[]> data = new ArrayList<>();
+        data.add(columnNames);
+        consumptionAnalysisVO.getDataList().forEach(vo->{
+
+            final String[] strings = new String[]{vo.getCurrentTime(),vo.getCurrentValue()+"", vo.getCompareTime(),vo.getCompareValue()+"",vo.getRatio()+""};
+            data.add(strings);
+        });
+
+        // 鍐欏叆鏁版嵁
+        int rowNum = 0;
+        for (String[] rowData : data) {
+            Row row = sheet.createRow(rowNum++);
+            int colNum = 0;
+            for (String field : rowData) {
+                Cell cell = row.createCell(colNum++);
+                cell.setCellValue(field);
+            }
+        }
+
+        try {
+            workbook.write(response.getOutputStream());
+        } catch (Exception e) {
+            throw new RuntimeException("鑳借�楀垎鏋愬鍑哄紓甯�");
+        } finally {
+            IOUtils.closeQuietly(workbook);
+        }
+
+    }
+
+    @GetMapping("/getByDepartment")
+    @ApiOperation(value = "鏍规嵁绉戝鑾峰彇鑳借�楁帓鍚�", notes = "鏍规嵁绉戝鑾峰彇鑳借�楁帓鍚�")
+    public AjaxResult getByDepartment(@Validated ConsumptionAnalysisDTO dto) {
+        List<RankingDataVO> consumptionAnalysisVO = consumptionAnalysisService.getByDepartment(dto);
+        return AjaxResult.success(consumptionAnalysisVO);
+    }
+
+
+    @GetMapping("/getComprehensiveEnergy")
+    @ApiOperation(value = "鏍规嵁鑺傜偣鑾峰彇缁煎悎鑳借�楀垪琛�", notes = "鏍规嵁鑺傜偣鑾峰彇缁煎悎鑳借�楀垪琛�")
+    public AjaxResult getComprehensiveEnergy(@Validated ConsumptionAnalysisDTO dto) {
+        ConsumptionAnalysisVO consumptionAnalysisVO = consumptionAnalysisService.getComprehensiveEnergy(dto);
+        return AjaxResult.success(consumptionAnalysisVO);
+    }
+
+    @GetMapping("/getYOY")
+    @ApiOperation(value = "鏍规嵁鑺傜偣鑾峰彇缁煎悎鑳借�楀悓姣旂幆姣�", notes = "鏍规嵁鑺傜偣鑾峰彇缁煎悎鑳借�楀悓姣旂幆姣�")
+    public AjaxResult getYOY(@Validated ConsumptionAnalysisDTO dto) {
+        ConsumptionAnalysisVO consumptionAnalysisVO = consumptionAnalysisService.getYOY(dto);
+        return AjaxResult.success(consumptionAnalysisVO);
+    }
+
+    @GetMapping("/getEnergyRanking")
+    @ApiOperation(value = "鏍规嵁鑺傜偣鑾峰彇缁煎悎鑳借�楁帓鍚�", notes = "鏍规嵁鑺傜偣鑾峰彇缁煎悎鑳借�楁帓鍚�")
+    public AjaxResult getEnergyRanking(@Validated ConsumptionAnalysisDTO dto) {
+        List<RankingEnergyData> consumptionAnalysisVO = consumptionAnalysisService.getEnergyRanking(dto);
+        return AjaxResult.success(consumptionAnalysisVO);
+    }
+
+    @PostMapping("/comprehensiveEnergyExport")
+    @ApiOperation(value = "缁煎悎鑳借�楀垎鏋愬鍑�", notes = "缁煎悎鑳借�楀垎鏋愬鍑�")
+    public void comprehensiveEnergyExport(HttpServletResponse response, ConsumptionAnalysisDTO dto) {
+        ConsumptionAnalysisVO consumptionAnalysisVO = consumptionAnalysisService.getComprehensiveEnergy(dto);
+        Workbook workbook = new XSSFWorkbook();
+        Sheet sheet = workbook.createSheet("缁煎悎鑳借�楀垎鏋�");
+        String[]  columnNames = new String[] {
+                "鏃ユ湡",
+                "缁煎悎鑳借�楅噺(tce)"
+        };
+        // 瀹氫箟鏁版嵁
+        List<String[]> data = new ArrayList<>();
+        data.add(columnNames);
+        consumptionAnalysisVO.getDataList().forEach(vo->{
+            final String[] strings = new String[]{vo.getCurrentTime(),vo.getCurrentValue()+""};
+            data.add(strings);
+        });
+        // 鍐欏叆鏁版嵁
+        int rowNum = 0;
+        for (String[] rowData : data) {
+            Row row = sheet.createRow(rowNum++);
+            int colNum = 0;
+            for (String field : rowData) {
+                Cell cell = row.createCell(colNum++);
+                cell.setCellValue(field);
+            }
+        }
+        try {
+            workbook.write(response.getOutputStream());
+        } catch (Exception e) {
+            throw new RuntimeException("缁煎悎鑳借�楀垎鏋愬鍑哄紓甯�");
+        } finally {
+            IOUtils.closeQuietly(workbook);
+        }
+    }
+
+    @GetMapping("/getPlanAndProdCount")
+    @ApiOperation(value = "鏍规嵁鑺傜偣鍜屾棩鏈熻幏鍙栧钩鍧囦骇閲忓拰璁″垝閲�", notes = "鏍规嵁鑺傜偣鍜屾棩鏈熻幏鍙栧钩鍧囦骇閲忓拰璁″垝閲�")
+    public AjaxResult getPlanAndProdCount(@Validated ConsumptionAnalysisDTO dto) {
+        ConsumptionAnalysisVO consumptionAnalysisVO = consumptionAnalysisService.getPlanAndProdCount(dto);
+        ConsumptionAnalysisVO consumptionAnalysisServiceByArea = consumptionAnalysisService.getByArea(dto);
+        consumptionAnalysisServiceByArea.setProdCount(consumptionAnalysisVO.getProdCount());
+        consumptionAnalysisServiceByArea.setPlanCount(consumptionAnalysisVO.getPlanCount());
+        return AjaxResult.success(consumptionAnalysisServiceByArea);
+    }
+
+    @GetMapping("/getProdEnergy")
+    @ApiOperation(value = "鏍规嵁鑺傜偣鍜屾棩鏈熻幏鍙栦骇鍝佸崟鑰�", notes = "鏍规嵁鑺傜偣鍜屾棩鏈熻幏鍙栦骇鍝佸崟鑰�")
+    public AjaxResult getProdEnergy(@Validated ConsumptionAnalysisDTO dto) {
+        ProductEnergyAnalysisVO productEnergyAnalysisVO = consumptionAnalysisService.getProdEnergy(dto);
+        return AjaxResult.success(productEnergyAnalysisVO);
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/gatewaysetting/GatewaySettingController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/gatewaysetting/GatewaySettingController.java
new file mode 100644
index 0000000..7c27a6b
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/gatewaysetting/GatewaySettingController.java
@@ -0,0 +1,142 @@
+package com.zhitan.web.controller.gatewaysetting;
+
+import javax.servlet.http.HttpServletResponse;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.pagehelper.PageHelper;
+import com.zhitan.common.annotation.Anonymous;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.gatewaysetting.domain.GatewaySetting;
+import com.zhitan.gatewaysetting.service.IGatewaySettingService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import javax.annotation.Resource;
+
+import org.springframework.web.bind.annotation.*;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.enums.BusinessType;
+
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * 缃戝叧閰嶇疆淇℃伅Controller
+ *
+ * @author ZhiTan
+ * @date 2024-10-30
+ */
+@RestController
+@RequestMapping("/gatewaySetting")
+public class GatewaySettingController extends BaseController
+{
+    @Resource
+    private IGatewaySettingService gatewaySettingService;
+
+    /**
+     * 鏌ヨ缃戝叧閰嶇疆淇℃伅鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:setting:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(GatewaySetting gatewaySetting,@RequestParam Long pageNum,@RequestParam Long pageSize)
+    {
+//        startPage();
+        Page<GatewaySetting> list = gatewaySettingService.selectGatewaySettingPage(gatewaySetting,pageNum,pageSize);
+        return getDataTable(list);
+    }
+
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿鏁伴噺鍜岀偣浣嶆暟閲�
+     * @param gatewaySetting
+     * @return
+     */
+    @GetMapping("/ptNum")
+    public AjaxResult ptNum(GatewaySetting gatewaySetting)
+    {
+        return success(gatewaySettingService.ptNum(gatewaySetting));
+    }
+
+
+    /**
+     * 瀵煎嚭缃戝叧閰嶇疆淇℃伅鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:setting:export')")
+    @Log(title = "缃戝叧閰嶇疆淇℃伅", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, GatewaySetting gatewaySetting)
+    {
+        List<GatewaySetting> list = gatewaySettingService.selectGatewaySettingList(gatewaySetting);
+        ExcelUtil<GatewaySetting> util = new ExcelUtil<GatewaySetting>(GatewaySetting.class);
+        util.exportExcel(response, list, "缃戝叧閰嶇疆淇℃伅鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇缃戝叧閰嶇疆淇℃伅璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('system:setting:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return success(gatewaySettingService.selectGatewaySettingById(id));
+    }
+
+    /**
+     * 鏂板缃戝叧閰嶇疆淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('system:setting:add')")
+    @Log(title = "缃戝叧閰嶇疆淇℃伅", businessType = BusinessType.INSERT)
+        @PostMapping
+    public AjaxResult add(@RequestBody GatewaySetting gatewaySetting)
+    {
+        int repeatCount =  gatewaySettingService.checkOne(gatewaySetting);
+        if(repeatCount>0){
+            return AjaxResult.error("缃戝叧缂栧彿閲嶅");
+        }
+        gatewaySetting.setId(UUID.randomUUID().toString());
+        return toAjax(gatewaySettingService.insertGatewaySetting(gatewaySetting));
+    }
+
+    /**
+     * 淇敼缃戝叧閰嶇疆淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('system:setting:edit')")
+    @Log(title = "缃戝叧閰嶇疆淇℃伅", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody GatewaySetting gatewaySetting)
+    {
+        if(ObjectUtils.isEmpty(gatewaySetting.getId())){
+            return AjaxResult.error("鏃犵綉鍏充富閿�");
+        }
+        int repeatCount =  gatewaySettingService.checkOne(gatewaySetting);
+        if(repeatCount>0){
+            return AjaxResult.error("缃戝叧缂栧彿閲嶅");
+        }
+        return toAjax(gatewaySettingService.updateGatewaySetting(gatewaySetting));
+    }
+
+    /**
+     * 鍒犻櫎缃戝叧閰嶇疆淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('system:setting:remove')")
+    @Log(title = "缃戝叧閰嶇疆淇℃伅", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(gatewaySettingService.deleteGatewaySettingByIds(ids));
+    }
+
+    /**
+     * 鏌ヨ鎵�鏈夌綉鍏崇紪鐮佹垨鍚嶇О
+     * @param gatewaySetting
+     * @return
+     */
+    @GetMapping("/baseList")
+    public AjaxResult baseList(GatewaySetting gatewaySetting)
+    {
+        return success(gatewaySettingService.selectGatewaySettingList(gatewaySetting));
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/homepage/HomePageController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/homepage/HomePageController.java
new file mode 100644
index 0000000..ec027ed
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/homepage/HomePageController.java
@@ -0,0 +1,105 @@
+package com.zhitan.web.controller.homepage;
+
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.consumptionanalysis.domain.vo.RankingEnergyData;
+import com.zhitan.home.domain.vo.HomeEnergyConsumptionTrendVO;
+import com.zhitan.home.domain.vo.HomePeakValleyVO;
+import com.zhitan.home.service.impl.IHomePageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * HomePageController
+ *
+ * @author hmj
+ * @date 2024-10-08
+ */
+@RestController
+@RequestMapping("/homepage")
+public class HomePageController extends BaseController {
+
+    @Autowired
+    public IHomePageService homepageService;
+   /**
+    * @description: 鍏ㄥ巶鑳借�楃粺璁�
+    * @param timeType
+    * @return 
+    * @author: hmj
+    * @date: 2024/10/8 13:41
+    */
+   @GetMapping("/energyConsumptionSummation")
+   public AjaxResult energyConsumptionSummation(String timeType) {
+       try {
+           String modelcode = "Composite_Indicators";
+           return AjaxResult.success(homepageService.energyConsumptionSummation(timeType,modelcode));
+       } catch (Exception ex) {
+           logger.error("鑾峰彇鍑洪敊锛�", ex);
+           return AjaxResult.error("鑾峰彇鍑洪敊!");
+       }
+   }
+
+
+    /**
+     * @description: 鑳借�楄秼鍔�
+     * @param timeType
+     * @return
+     * @author: hmj
+     * @date: 2024/10/8 13:41
+     */
+    @GetMapping("/energyConsumptionTrend")
+    public AjaxResult energyConsumptionTrend(String timeType) {
+        try {
+            String modelcode = "Composite_Indicators";
+            HomeEnergyConsumptionTrendVO vo = homepageService.energyConsumptionTrend(timeType,modelcode);
+
+            return AjaxResult.success(vo);
+        } catch (Exception ex) {
+            logger.error("鑾峰彇鍑洪敊锛�", ex);
+            return AjaxResult.error("鑾峰彇鍑洪敊!");
+        }
+    }
+
+    /**
+     * @description: 绉戝鑳借�楁帓鍚�
+     * @param timeType
+     * @return
+     * @author: hmj
+     * @date: 2024/10/8 13:41
+     */
+    @GetMapping("/energyConsumptionRanking")
+    public AjaxResult energyConsumptionRanking(String timeType) {
+        try {
+            String modelcode = "Composite_Indicators";
+            List<RankingEnergyData> consumptionAnalysisVO = homepageService.energyConsumptionRanking(modelcode,timeType);
+            return AjaxResult.success(consumptionAnalysisVO);
+        } catch (Exception ex) {
+            logger.error("鑾峰彇鍑洪敊锛�", ex);
+            return AjaxResult.error("鑾峰彇鍑洪敊!");
+        }
+    }
+
+    /**
+     * @description: 宄板钩璋峰崰姣�
+     * @param timeType
+     * @return
+     * @author: hmj
+     * @date: 2024/10/8 13:41
+     */
+    @GetMapping("/peakValley")
+    public AjaxResult peakValley(String timeType) {
+        try {
+//            String modelcode = "Composite_Indicators";
+            String modelcode = "PEAK_VALLEY";
+            List<HomePeakValleyVO> vo = homepageService.peakValley(timeType,modelcode);
+            return AjaxResult.success(vo);
+        } catch (Exception ex) {
+            logger.error("鑾峰彇鍑洪敊锛�", ex);
+            return AjaxResult.error("鑾峰彇鍑洪敊!");
+        }
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/DailyKeyEquipmenteController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/DailyKeyEquipmenteController.java
new file mode 100644
index 0000000..d3e754c
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/DailyKeyEquipmenteController.java
@@ -0,0 +1,123 @@
+package com.zhitan.web.controller.keyequipment;
+
+import com.zhitan.basicdata.domain.FacilityArchives;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.keyequipment.domain.DailyKeyEquipment;
+import com.zhitan.keyequipment.service.IDailyKeyEquipmentService;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.domain.ModelNode;
+import com.zhitan.model.service.IModelNodeService;
+import com.zhitan.realtimedata.domain.DataItem;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *閲嶇偣璁惧鑳借�楃粺璁� 鏃�
+ *
+ * @author sys
+ * @date 2021-01-11
+ */
+@RestController
+@RequestMapping("/keyEquipment/dailyKeyEquipment")
+@Api(value = "閲嶇偣璁惧鑳借�楃粺璁★紙鏃ワ級",tags = {"璁惧鍗曡�楀垎鏋�"})
+public class DailyKeyEquipmenteController extends BaseController {
+
+    @Autowired
+    private IModelNodeService modelNodeService;
+    @Autowired
+    private IDailyKeyEquipmentService dailykeyEquipment;
+
+    @GetMapping("/list")
+    @ApiOperation(value = "閲嶇偣璁惧鑳借�楀垎鏋愶紙鏃ワ級鍒楄〃")
+    public TableDataInfo list(DataItem dataItem) throws ParseException {
+        List<ModelNode> nodeId = modelNodeService.getModelNodeByModelCode(dataItem.getIndexCode());
+        if(CollectionUtils.isEmpty(nodeId)){
+            return getDataTable(new ArrayList<>());
+        }
+        List<EnergyIndex> energyList = modelNodeService.getSettingIndex(nodeId.get(0).getNodeId());
+        if(CollectionUtils.isEmpty(energyList)){
+            return getDataTable(new ArrayList<>());
+        }
+        List<String> indexIds = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
+        List<DailyKeyEquipment> dataList=new ArrayList<>();
+        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String aa= df.format(dataItem.getDataTime());
+        String bb="";
+        int i = 0;
+        dataItem.setBeginTime(dataItem.getDataTime());
+        String endTime=aa+" 24:00:00";
+        dataItem.setEndTime(sf.parse(endTime));
+        while (i < 24) {
+            if(i>9){
+                bb=aa+" "+i+":00:00";
+            }else{
+                bb=aa+" 0"+i+":00:00";
+            }
+            DailyKeyEquipment report=new DailyKeyEquipment();
+            report.setDataTime(sf.parse(bb));
+            report.setValue("value"+i);
+            dataList.add(report);
+            i++;
+        };
+        startPage();
+        List<DailyKeyEquipment> list = dailykeyEquipment.getdailyKeyEquipmentList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
+        //return AjaxResult.success(list);
+        return getDataTable(list);
+    }
+
+    @GetMapping("/listChart")
+    @ApiOperation(value = "閲嶇偣璁惧鑳借�楀垎鏋愶紙鏃ワ級鍥捐〃")
+    public AjaxResult listChart(DataItem dataItem) throws ParseException {
+        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String aa= df.format(dataItem.getDataTime());
+        dataItem.setBeginTime(dataItem.getDataTime());
+        String endTime=aa+" 24:00:00";
+        dataItem.setEndTime(sf.parse(endTime));
+        List<DailyKeyEquipment> list = dailykeyEquipment.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
+        return AjaxResult.success(list);
+    }
+    /*鎵�鏈夎澶�*/
+    @GetMapping("/getFacilityArchives")
+    @ApiOperation(value = "鏌ヨ鎵�鏈夎澶囧垪琛�")
+    public AjaxResult getFacilityArchives() {
+        try {
+            List<FacilityArchives> list=dailykeyEquipment.getFacilityArchives();
+            return AjaxResult.success(list);
+        } catch (Exception ex) {
+            logger.error("鑾峰彇璁惧鍑洪敊锛�", ex);
+            return AjaxResult.error("鑾峰彇鏍囬鍑洪敊!");
+        }
+    }
+
+    /**
+     * 閲嶇偣鑳借�楄澶�
+     * @return
+     */
+    @GetMapping("/getPointFacility")
+    @ApiOperation(value = "鏌ヨ閲嶇偣璁惧鍒楄〃")
+    public AjaxResult getPointFacility() {
+        try {
+            List<FacilityArchives> list=dailykeyEquipment.getPointFacility();
+            return AjaxResult.success(list);
+        } catch (Exception ex) {
+            logger.error("鑾峰彇璁惧鍑洪敊锛�", ex);
+            return AjaxResult.error("鑾峰彇鏍囬鍑洪敊!");
+        }
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/MonthlyKeyEquipmentController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/MonthlyKeyEquipmentController.java
new file mode 100644
index 0000000..da8f636
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/MonthlyKeyEquipmentController.java
@@ -0,0 +1,132 @@
+package com.zhitan.web.controller.keyequipment;
+
+
+import com.github.pagehelper.PageInfo;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.keyequipment.domain.MonthlyKeyEquipment;
+import com.zhitan.keyequipment.service.IMonthlyKeyEquipmentService;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.domain.ModelNode;
+import com.zhitan.model.service.IModelNodeService;
+import com.zhitan.realtimedata.domain.DataItem;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ *閲嶇偣璁惧鑳借�楃粺璁� 鏈�
+ *
+ * @author sys
+ * @date 2021-01-11
+ */
+@RestController
+@RequestMapping("/keyEquipment/MonthlyKeyEquipment")
+@Api(value = "閲嶇偣璁惧鑳借�楃粺璁★紙鏈堬級",tags = {"璁惧鍗曡�楀垎鏋�"})
+public class MonthlyKeyEquipmentController extends BaseController {
+
+    @Autowired
+    private IModelNodeService modelNodeService;
+    @Autowired
+    private IMonthlyKeyEquipmentService monthlyKeyEquipmentService;
+
+    @GetMapping("/list")
+    @ApiOperation(value = "閲嶇偣璁惧鑳借�楃粺璁★紙鏈堬級鍒楄〃")
+    public AjaxResult list(DataItem dataItem) {
+        try {
+            List<MonthlyKeyEquipment> dataList=new ArrayList<>();
+
+            Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
+            DateFormat df = new SimpleDateFormat("yyyy-MM");
+            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            String aa= df.format(dataItem.getDataTime());
+            String bb="";
+            int i = 1;
+            String beginTime=aa+"-01 00:00:00";
+            dataItem.setBeginTime(sf.parse(beginTime));
+            String endTime=aa+"-"+Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))+" 00:00:00";
+            dataItem.setEndTime(sf.parse(endTime));
+            while (i <= Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))) {
+                if(i>9){
+                    bb=aa+"-"+i+" 00:00:00";
+                }else{
+                    bb=aa+"-0"+i+" 00:00:00";
+                }
+                MonthlyKeyEquipment report=new MonthlyKeyEquipment();
+                report.setDataTime(sf.parse(bb));
+                report.setValue("value"+i);
+                dataList.add(report);
+                tableColumn.put("value"+i,String.valueOf(i)+"鏃�");
+                i++;
+            }
+            List<Map> table=new ArrayList<>();
+            MonthlyKeyEquipment reportList =new  MonthlyKeyEquipment();
+            table.add(tableColumn);
+            reportList.setTablehead(table);
+            List<ModelNode> nodeId = modelNodeService.getModelNodeByModelCode(dataItem.getIndexCode());
+            if(CollectionUtils.isEmpty(nodeId)){
+                return AjaxResult.success(reportList);
+            }
+            List<EnergyIndex> energyList = modelNodeService.getSettingIndex(nodeId.get(0).getNodeId());
+            if(CollectionUtils.isEmpty(energyList)){
+                return AjaxResult.success(reportList);
+            }
+            List<String> indexIds = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
+
+            startPage();
+            List<MonthlyKeyEquipment> list = monthlyKeyEquipmentService.getMonthlyKeyEquipmentList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
+            int count=Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2));
+            list.forEach(monthlyReport -> monthlyReport.setCount(count));
+            reportList.setTabledata(list);
+            reportList.setTotal(new PageInfo(list).getTotal());
+
+            return AjaxResult.success(reportList);
+        } catch (Exception ex) {
+            logger.error("鑾峰彇鍑洪敊锛�", ex);
+            return AjaxResult.error("鑾峰彇鍑洪敊!");
+        }
+    }
+
+    @GetMapping("/listChart")
+    @ApiOperation(value = "閲嶇偣璁惧鑳借�楃粺璁★紙鏈堬級鍥捐〃")
+    public AjaxResult listChart(DataItem dataItem) throws ParseException {
+        DateFormat df = new SimpleDateFormat("yyyy-MM");
+        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String aa= df.format(dataItem.getDataTime());
+        String beginTime=aa+"-01 00:00:00";
+        dataItem.setBeginTime(sf.parse(beginTime));
+        String endTime=aa+"-"+Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))+" 00:00:00";
+        dataItem.setEndTime(sf.parse(endTime));
+        List<MonthlyKeyEquipment> list = monthlyKeyEquipmentService.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
+        return AjaxResult.success(list);
+    }
+    public static String getLastDayOfMonth(String yearMonth) {
+        int year = Integer.parseInt(yearMonth.split("-")[0]);  //骞�
+        int month = Integer.parseInt(yearMonth.split("-")[1]); //鏈�
+        Calendar cal = Calendar.getInstance();
+        // 璁剧疆骞翠唤
+        cal.set(Calendar.YEAR, year);
+        // 璁剧疆鏈堜唤
+        // cal.set(Calendar.MONTH, month - 1);
+        cal.set(Calendar.MONTH, month); //璁剧疆褰撳墠鏈堢殑涓婁竴涓湀
+        // 鑾峰彇鏌愭湀鏈�澶уぉ鏁�
+        //int lastDay = cal.getActualMaximum(Calendar.DATE);
+        int lastDay = cal.getMinimum(Calendar.DATE); //鑾峰彇鏈堜唤涓殑鏈�灏忓�硷紝鍗崇涓�澶�
+        // 璁剧疆鏃ュ巻涓湀浠界殑鏈�澶уぉ鏁�
+        //cal.set(Calendar.DAY_OF_MONTH, lastDay);
+        cal.set(Calendar.DAY_OF_MONTH, lastDay - 1); //涓婃湀鐨勭涓�澶╁噺鍘�1灏辨槸褰撴湀鐨勬渶鍚庝竴澶�
+        // 鏍煎紡鍖栨棩鏈�
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        return sdf.format(cal.getTime());
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/YearKeyEquipmentController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/YearKeyEquipmentController.java
new file mode 100644
index 0000000..00afae6
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/YearKeyEquipmentController.java
@@ -0,0 +1,84 @@
+package com.zhitan.web.controller.keyequipment;
+
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.keyequipment.domain.YearKeyEquipment;
+import com.zhitan.keyequipment.service.IYearKeyEquipmentService;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.domain.ModelNode;
+import com.zhitan.model.service.IModelNodeService;
+import com.zhitan.realtimedata.domain.DataItem;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *閲嶇偣璁惧鑳借�楃粺璁� 骞�
+ *
+ * @author sys
+ * @date 2021-01-11
+ */
+@RestController
+@RequestMapping("/keyEquipment/YearKeyEquipment")
+@Api(value = "閲嶇偣璁惧鑳借�楃粺璁★紙骞达級",tags = {"璁惧鍗曡�楀垎鏋�"})
+public class YearKeyEquipmentController extends BaseController {
+
+    @Autowired
+    private IModelNodeService modelNodeService;
+    @Autowired
+    private IYearKeyEquipmentService yearKeyEquipmentService;
+
+    @GetMapping("/list")
+    @ApiOperation(value = "閲嶇偣璁惧鑳借�楃粺璁★紙骞达級鍒楄〃")
+    public TableDataInfo list(DataItem dataItem) throws ParseException {
+        List<ModelNode> nodeId = modelNodeService.getModelNodeByModelCode(dataItem.getIndexCode());
+        if(CollectionUtils.isEmpty(nodeId)){
+            return getDataTable(new ArrayList<>());
+        }
+        List<EnergyIndex> energyList = modelNodeService.getSettingIndex(nodeId.get(0).getNodeId());
+        if(CollectionUtils.isEmpty(energyList)){
+            return getDataTable(new ArrayList<>());
+        }
+        List<String> indexIds = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
+        List<YearKeyEquipment> dataList=new ArrayList<>();
+        DateFormat df = new SimpleDateFormat("yyyy");
+        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String aa= df.format(dataItem.getBeginTime());
+        String bb="";
+        int i = 1;
+        while (i <= 12) {
+            if(i>9){
+                bb=aa+"-"+i+"-01 00:00:00";
+            }else{
+                bb=aa+"-0"+i+"-01 00:00:00";
+            }
+            YearKeyEquipment report=new YearKeyEquipment();
+            report.setDataTime(sf.parse(bb));
+            report.setValue("value"+i);
+            dataList.add(report);
+            i++;
+        }
+        startPage();
+        List<YearKeyEquipment> list = yearKeyEquipmentService.getYearKeyEquipmentList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
+        return getDataTable(list);
+    }
+
+    @GetMapping("/listChart")
+    @ApiOperation(value = "閲嶇偣璁惧鑳借�楃粺璁★紙骞达級鍥捐〃")
+    public AjaxResult listChart(DataItem dataItem){
+        List<YearKeyEquipment> list = yearKeyEquipmentService.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
+        return AjaxResult.success(list);
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/meter/MeterAnnexController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/meter/MeterAnnexController.java
new file mode 100644
index 0000000..5ed7ca9
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/meter/MeterAnnexController.java
@@ -0,0 +1,179 @@
+package com.zhitan.web.controller.meter;
+
+
+import com.zhitan.basicdata.domain.MeterAnnex;
+import com.zhitan.basicdata.services.IMeterAnnexService;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.config.BaseConfig;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.ServletUtils;
+import com.zhitan.common.utils.file.FileUploadUtils;
+import com.zhitan.common.utils.file.FileUtils;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.common.utils.uuid.IdUtils;
+import com.zhitan.framework.web.service.TokenService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 璁¢噺鍣ㄥ叿妗f闄勪欢Controller
+ * 
+ * @author zhaowei
+ * @date 2020-02-14
+ */
+@RestController
+@RequestMapping("/meter/annex")
+public class MeterAnnexController extends BaseController
+{
+    @Autowired
+    private IMeterAnnexService meterAnnexService;
+    @Autowired
+    private TokenService tokenService;
+
+    private static final Logger log = LoggerFactory.getLogger(MeterAnnexController.class);
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿妗f闄勪欢鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('meter:annex:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(MeterAnnex meterAnnex)
+    {
+        startPage();
+        List<MeterAnnex> list = meterAnnexService.selectMeterAnnexList(meterAnnex);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭璁¢噺鍣ㄥ叿妗f闄勪欢鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('meter:annex:export')")
+    @Log(title = "璁¢噺鍣ㄥ叿妗f闄勪欢", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(MeterAnnex meterAnnex)
+    {
+        List<MeterAnnex> list = meterAnnexService.selectMeterAnnexList(meterAnnex);
+        ExcelUtil<MeterAnnex> util = new ExcelUtil<MeterAnnex>(MeterAnnex.class);
+        return util.exportExcel(list, "annex");
+    }
+
+    /**
+     * 鑾峰彇璁¢噺鍣ㄥ叿妗f闄勪欢璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('meter:annex:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return AjaxResult.success(meterAnnexService.selectMeterAnnexById(id));
+    }
+
+    /**
+     * 鏂板璁¢噺鍣ㄥ叿妗f闄勪欢
+     */
+    @PreAuthorize("@ss.hasPermi('meter:annex:add')")
+    @Log(title = "璁¢噺鍣ㄥ叿妗f闄勪欢", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody MeterAnnex meterAnnex)
+    {
+        return toAjax(meterAnnexService.insertMeterAnnex(meterAnnex));
+    }
+
+    /**
+     * 淇敼璁¢噺鍣ㄥ叿妗f闄勪欢
+     */
+    @PreAuthorize("@ss.hasPermi('meter:annex:edit')")
+    @Log(title = "璁¢噺鍣ㄥ叿妗f闄勪欢", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody MeterAnnex meterAnnex)
+    {
+        return toAjax(meterAnnexService.updateMeterAnnex(meterAnnex));
+    }
+
+    /**
+     * 鍒犻櫎璁¢噺鍣ㄥ叿妗f闄勪欢
+     */
+    @PreAuthorize("@ss.hasPermi('meter:annex:remove')")
+    @Log(title = "璁¢噺鍣ㄥ叿妗f闄勪欢", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(meterAnnexService.deleteMeterAnnexByIds(ids));
+    }
+
+    /**
+     * 閫氱敤鎸囧畾鏂囦欢涓嬭浇璇锋眰
+     *
+     * @param showFileName 涓嬭浇灞曠ず鏂囦欢鍚嶇О
+//     * @param filePath 涓嬭浇鏂囦欢缁濆璺緞 甯� 鏂囦欢鐪熷疄鍚嶅瓧鍙婅矾寰�
+     * @param delete 鏄惁鍒犻櫎/
+     */
+    @PreAuthorize("@ss.hasPermi('meter:annex:assignDownload')")
+    @PostMapping("/assignDownload")
+    public void fileAssignDownload(String showFileName, String filePath,Boolean delete, HttpServletResponse response, HttpServletRequest request)
+    {
+        try
+        {
+            response.setCharacterEncoding("utf-8");
+            response.setContentType("multipart/form-data");
+            response.setHeader("Content-Disposition",
+                    "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, showFileName));
+            FileUtils.writeBytes(filePath, response.getOutputStream());
+//            if (delete)
+//            {
+//                FileUtils.deleteFile(filePath);
+//            }
+            log.error("涓嬭浇鎴愬姛", "aa");
+        }
+        catch (Exception e)
+        {
+            log.error("涓嬭浇鏂囦欢澶辫触", e);
+        }
+    }
+    @Log(title = "璁¢噺鍣ㄥ叿妗f闄勪欢涓婁紶", businessType = BusinessType.IMPORT)
+    @PreAuthorize("@ss.hasPermi('meter:annex:fileImport')")
+    @PostMapping("/fileImport")
+    public AjaxResult importData(MultipartFile file, String implementId) throws Exception
+    {
+        if (!file.isEmpty())
+        {
+            LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+            //鑾峰彇閰嶇疆鐨勬枃浠朵笂浼犺矾寰�
+            String uploadPathDir = BaseConfig.getUploadPath();
+            //鑾峰彇鏂囦欢鍘熷鍚嶇О
+            String fileName = file.getOriginalFilename();
+            //鑾峰彇鏂囦欢鎵╁睍鍚�
+            String fileSuffix = FileUploadUtils.getExtension(file);
+//            System.out.println("implementId==="+implementId);
+//            System.out.println("filedir==="+uploadPathDir);
+//            System.out.println("fileName==="+fileName);
+//            System.out.println("fileSuffix==="+fileSuffix);
+            //鏂囦欢鏈�缁堜繚瀛樼殑缁濆璺緞
+            String filePath = FileUploadUtils.uploadAll(uploadPathDir, file);
+//            System.out.println("涓婁紶鏂囦欢鍦板潃:===>"+filePath);
+            MeterAnnex meterAnnex = new MeterAnnex();
+            //璁剧疆涓婚敭UUID
+            meterAnnex.setId(IdUtils.simpleUUID());
+            meterAnnex.setFileName(fileName);
+            meterAnnex.setFilePath(filePath);
+            meterAnnex.setFileSuffix(fileSuffix);
+            meterAnnex.setImplementId(implementId);
+            meterAnnex.setCreateBy(loginUser.getUsername());
+            if (this.meterAnnexService.insertMeterAnnex(meterAnnex)>0)
+            {
+                return AjaxResult.success("闄勪欢涓婁紶瀹屾垚");
+            }
+        }
+        return AjaxResult.success("闄勪欢涓婁紶澶辫触");
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/meter/MeterController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/meter/MeterController.java
new file mode 100644
index 0000000..df3d84f
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/meter/MeterController.java
@@ -0,0 +1,93 @@
+package com.zhitan.web.controller.meter;
+
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.R;
+import com.zhitan.meter.domain.MeterConfig;
+import com.zhitan.meter.domain.MeterImplements;
+import com.zhitan.meter.domain.MeterParam;
+import com.zhitan.meter.services.IMetersService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @ClassName: MeterController
+ * @Author:
+ * @CreateTime: 2024-09-20 15-33-37
+ * @Description: 閲囬泦鏁版嵁鐢熸垚鍣�
+ * @Version: 1.0
+ * @Since: JDK1.8
+ */
+
+@Slf4j
+@Api("閲囬泦璁¢噺琛ㄦ暟鎹鐞�")
+@RestController
+@RequestMapping("/meters")
+public class MeterController extends BaseController {
+
+    @Resource
+    private IMetersService iMeterservice;
+
+
+
+
+    @ApiOperation("鑾峰彇璁¢噺琛ㄦ暟鎹�")
+    @GetMapping("/listMeterData")
+    public R<List<MeterImplements>> listMeterData(@RequestParam String meterType){
+        log.info("寮�濮嬭幏鍙栬閲忚〃鏁版嵁......");
+        List<MeterImplements> meterImplementList = iMeterservice.listMeterData(meterType);
+        if (meterImplementList != null || meterImplementList .size() > 0) {
+            return R.ok(meterImplementList);
+        } else {
+            return R.fail("鑾峰彇璁¢噺琛ㄦ暟鎹け璐�");
+        }
+    }
+
+    @ApiOperation("鑾峰彇鐐逛綅閰嶇疆淇℃伅")
+    @GetMapping("/listConfigurationData")
+    public R<List<MeterParam>> listConfigurationData(@RequestParam String meterType, @RequestParam String indexType) {
+
+        log.info("寮�濮嬭幏鍙栫偣浣嶉厤缃俊鎭�......");
+        List<MeterParam> meterParams = iMeterservice.listConfigurationData(meterType,indexType);
+        if (meterParams != null || meterParams .size() > 0) {
+            return (R.ok(meterParams));
+        } else {
+            return R.fail("鑾峰彇鐐逛綅閰嶇疆淇℃伅澶辫触");
+        }
+
+    }
+
+    @ApiOperation("鏍规嵁index_type鑾峰彇鐐逛綅閰嶇疆淇℃伅")
+    @GetMapping("/listConfigData")
+    public R<List<MeterConfig>> listConfigData(@RequestParam String indexType) {
+
+
+        log.info("寮�濮嬭幏鍙栫偣浣嶉厤缃俊鎭�......");
+        List<MeterConfig> meterConfigList = iMeterservice.listConfigData(indexType);
+        if (meterConfigList != null || meterConfigList.size() > 0) {
+            return R.ok(meterConfigList);
+        } else {
+            return R.fail("鑾峰彇鐐逛綅閰嶇疆淇℃伅澶辫触");
+        }
+    }
+
+
+    @ApiOperation("鏂板淇濆瓨閰嶇疆鏁版嵁")
+    @GetMapping("/addConfigurationData")
+    public R<T> addConfigurationData(){
+        log.info("鎵ц鏂板淇濆瓨閰嶇疆鏁版嵁......");
+
+        return R.ok();
+    }
+
+
+
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/model/CalcFunctionController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/model/CalcFunctionController.java
new file mode 100644
index 0000000..846acdd
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/model/CalcFunctionController.java
@@ -0,0 +1,109 @@
+package com.zhitan.web.controller.model;
+
+
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.common.utils.uuid.UUID;
+import com.zhitan.model.domain.CalcFunction;
+import com.zhitan.model.service.ICalcFunctionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 璁$畻鍑芥暟Controller
+ *
+ * @author fanxinfu
+ * @date 2020-03-10
+ */
+@RestController
+@RequestMapping("/basicsetting/function")
+@Api(value = "璁$畻鍏紡绠$悊",tags = {"璁$畻鍏紡绠$悊"})
+public class CalcFunctionController extends BaseController
+{
+    @Autowired
+    private ICalcFunctionService calcFunctionService;
+
+    /**
+     * 鏌ヨ璁$畻鍑芥暟鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('basicsetting:function:list')")
+    @GetMapping("/list")
+    @ApiOperation(value = "璁$畻鍑芥暟鍒楄〃")
+    public TableDataInfo list(CalcFunction calcFunction)
+    {
+        startPage();
+        List<CalcFunction> list = calcFunctionService.selectCalcFunctionList(calcFunction);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭璁$畻鍑芥暟鍒楄〃
+     */
+    @ApiOperation(value = "璁$畻鍑芥暟鍒楄〃瀵煎嚭")
+    @PreAuthorize("@ss.hasPermi('basicsetting:function:export')")
+    @Log(title = "璁$畻鍑芥暟", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(CalcFunction calcFunction)
+    {
+        List<CalcFunction> list = calcFunctionService.selectCalcFunctionList(calcFunction);
+        ExcelUtil<CalcFunction> util = new ExcelUtil<CalcFunction>(CalcFunction.class);
+        return util.exportExcel(list, "function");
+    }
+
+    /**
+     * 鑾峰彇璁$畻鍑芥暟璇︾粏淇℃伅
+     */
+    @ApiOperation(value = "鑾峰彇璁$畻鍑芥暟璇︾粏淇℃伅")
+    @PreAuthorize("@ss.hasPermi('basicsetting:function:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return AjaxResult.success(calcFunctionService.selectCalcFunctionById(id));
+    }
+
+    /**
+     * 鏂板璁$畻鍑芥暟
+     */
+    @PreAuthorize("@ss.hasPermi('basicsetting:function:add')")
+    @Log(title = "璁$畻鍑芥暟", businessType = BusinessType.INSERT)
+    @PostMapping
+    @ApiOperation(value = "鏂板璁$畻鍑芥暟")
+    public AjaxResult add(@RequestBody CalcFunction calcFunction)
+    {
+        calcFunction.setId(UUID.fastUUID().toString());
+        return toAjax(calcFunctionService.insertCalcFunction(calcFunction));
+    }
+
+    /**
+     * 淇敼璁$畻鍑芥暟
+     */
+    @PreAuthorize("@ss.hasPermi('basicsetting:function:edit')")
+    @Log(title = "璁$畻鍑芥暟", businessType = BusinessType.UPDATE)
+    @PutMapping
+    @ApiOperation(value = "缂栬緫璁$畻鍑芥暟")
+    public AjaxResult edit(@RequestBody CalcFunction calcFunction)
+    {
+        return toAjax(calcFunctionService.updateCalcFunction(calcFunction));
+    }
+
+    /**
+     * 鍒犻櫎璁$畻鍑芥暟
+     */
+    @PreAuthorize("@ss.hasPermi('basicsetting:function:remove')")
+    @Log(title = "璁$畻鍑芥暟", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    @ApiOperation(value = "鍒犻櫎璁$畻鍑芥暟")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(calcFunctionService.deleteCalcFunctionByIds(ids));
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/model/DaqTemplateController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/model/DaqTemplateController.java
new file mode 100644
index 0000000..aadde5f
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/model/DaqTemplateController.java
@@ -0,0 +1,102 @@
+package com.zhitan.web.controller.model;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.model.domain.DaqTemplate;
+import com.zhitan.model.service.IDaqTemplateService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * 閲囬泦鍙傛暟妯℃澘Controller
+ *
+ * @author ruoyi
+ * @date 2020-02-08
+ */
+@RestController
+@RequestMapping("/system/template")
+public class DaqTemplateController extends BaseController {
+  @Autowired
+  private IDaqTemplateService daqTemplateService;
+
+  /**
+   * 鏌ヨ閲囬泦鍙傛暟妯℃澘鍒楄〃
+   */
+  @PreAuthorize("@ss.hasPermi('basicsetting:template:query')")
+  @GetMapping("/list")
+  public TableDataInfo list(DaqTemplate daqTemplate, @RequestParam Long pageNum, @RequestParam Long pageSize) {
+    Page<DaqTemplate> list = daqTemplateService.selectDaqTemplatePage(daqTemplate,pageNum,pageSize);
+    return getDataTable(list);
+  }
+
+  /**
+   * 瀵煎嚭閲囬泦鍙傛暟妯℃澘鍒楄〃
+   */
+  @PreAuthorize("@ss.hasPermi('basicsetting:template:query')")
+  @Log(title = "閲囬泦鍙傛暟妯℃澘" , businessType = BusinessType.EXPORT)
+  @GetMapping("/export")
+  public AjaxResult export(DaqTemplate daqTemplate) {
+    List<DaqTemplate> list = daqTemplateService.selectDaqTemplateList(daqTemplate);
+    ExcelUtil<DaqTemplate> util = new ExcelUtil<DaqTemplate>(DaqTemplate.class);
+    return util.exportExcel(list, "template");
+  }
+
+  /**
+   * 鑾峰彇閲囬泦鍙傛暟妯℃澘璇︾粏淇℃伅
+   */
+  @PreAuthorize("@ss.hasPermi('basicsetting:template:query')")
+  @GetMapping(value = "/{id}")
+  public AjaxResult getInfo(@PathVariable("id") String id) {
+    return AjaxResult.success(daqTemplateService.selectDaqTemplateById(id));
+  }
+
+  /**
+   * 鏂板閲囬泦鍙傛暟妯℃澘
+   */
+  @PreAuthorize("@ss.hasPermi('basicsetting:template:add')")
+  @Log(title = "閲囬泦鍙傛暟妯℃澘" , businessType = BusinessType.INSERT)
+  @PostMapping
+  public AjaxResult add(@RequestBody DaqTemplate daqTemplate) {
+    daqTemplate.setId(UUID.randomUUID().toString());
+    boolean isExist = daqTemplateService.dapHasExist(daqTemplate.getCode(), daqTemplate.getDeviceType());
+    if (isExist) {
+      return AjaxResult.error("鐩稿悓璁惧绫诲瀷涓嬬殑鍙傛暟缂栫爜涓嶈兘閲嶅锛�");
+    } else {
+      return toAjax(daqTemplateService.insertDaqTemplate(daqTemplate));
+    }
+  }
+
+  /**
+   * 淇敼閲囬泦鍙傛暟妯℃澘
+   */
+  @PreAuthorize("@ss.hasPermi('basicsetting:template:edit')")
+  @Log(title = "閲囬泦鍙傛暟妯℃澘" , businessType = BusinessType.UPDATE)
+  @PutMapping
+  public AjaxResult edit(@RequestBody DaqTemplate daqTemplate) {
+    boolean isExist = daqTemplateService.dapHasExist(daqTemplate);
+    if (isExist) {
+      return AjaxResult.error("鐩稿悓璁惧绫诲瀷涓嬬殑鍙傛暟缂栫爜涓嶈兘閲嶅锛�");
+    } else {
+      return toAjax(daqTemplateService.updateDaqTemplate(daqTemplate));
+    }
+  }
+
+  /**
+   * 鍒犻櫎閲囬泦鍙傛暟妯℃澘
+   */
+  @PreAuthorize("@ss.hasPermi('basicsetting:template:remove')")
+  @Log(title = "閲囬泦鍙傛暟妯℃澘" , businessType = BusinessType.DELETE)
+  @DeleteMapping("/{ids}")
+  public AjaxResult remove(@PathVariable String[] ids) {
+    return toAjax(daqTemplateService.deleteDaqTemplateByIds(ids));
+  }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/model/EnergyIndexController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/model/EnergyIndexController.java
new file mode 100644
index 0000000..2ec479d
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/model/EnergyIndexController.java
@@ -0,0 +1,207 @@
+package com.zhitan.web.controller.model;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.domain.EnergyIndexQuery;
+import com.zhitan.model.service.IEnergyIndexService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+/**
+ * 鎸囨爣淇℃伅Controller
+ *
+ * @author fanxinfu
+ * @date 2020-02-14
+ */
+@RestController
+@RequestMapping("/basicsetting/energyindex")
+public class EnergyIndexController extends BaseController {
+
+  @Autowired
+  private IEnergyIndexService energyIndexService;
+
+  /**
+   * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
+   */
+  @PreAuthorize("@ss.hasPermi('energyindex:energyindex:query')")
+  @GetMapping("/list")
+  public TableDataInfo list(EnergyIndex energyIndex, @RequestParam Long pageNum, @RequestParam Long pageSize) {
+    EnergyIndexQuery query = new EnergyIndexQuery(energyIndex.getNodeId(), energyIndex.getName(),
+        energyIndex.getIndexCategory(), energyIndex.getIndexType());
+    Page<EnergyIndex> list = energyIndexService.selectEnergyIndexPage(query,pageNum,pageSize);
+    return getDataTable(list);
+  }
+
+  /**
+   * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
+   */
+  @GetMapping("/filter")
+  public AjaxResult filter(EnergyIndexQuery query) {
+    List<EnergyIndex> list = energyIndexService.selectEnergyIndexList(query);
+    return AjaxResult.success(list);
+  }
+
+  /**
+   * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
+   */
+  @PreAuthorize("@ss.hasPermi('energyindex:energyindex:query')")
+  @GetMapping("/collectIndex")
+  public TableDataInfo listCollectIndex(String deviceId) {
+    startPage();
+    List<EnergyIndex> list = energyIndexService.selectCollectIndex(deviceId);
+    return getDataTable(list);
+  }
+
+  /**
+   * 瀵煎嚭鎸囨爣淇℃伅鍒楄〃
+   */
+  @PreAuthorize("@ss.hasPermi('energyindex:energyindex:export')")
+  @Log(title = "鎸囨爣淇℃伅", businessType = BusinessType.EXPORT)
+  @GetMapping("/export")
+  public AjaxResult export(EnergyIndex energyIndex) {
+    List<EnergyIndex> list = energyIndexService.selectEnergyIndexList(energyIndex);
+    ExcelUtil<EnergyIndex> util = new ExcelUtil<>(EnergyIndex.class);
+    return util.exportExcel(list, "energyindex");
+  }
+
+  /**
+   * 鑾峰彇鎸囨爣淇℃伅璇︾粏淇℃伅
+   */
+  @PreAuthorize("@ss.hasPermi('energyindex:energyindex:query')")
+  @GetMapping(value = "/{indexId}")
+  public AjaxResult getInfo(@PathVariable("indexId") String indexId) {
+    return AjaxResult.success(energyIndexService.selectEnergyIndexById(indexId));
+  }
+
+  /**
+   * 鏂板鎸囨爣淇℃伅
+   */
+  @PreAuthorize("@ss.hasPermi('energyindex:energyindex:add')")
+  @Log(title = "鎸囨爣淇℃伅", businessType = BusinessType.INSERT)
+  @PostMapping(value = "/{nodeId}")
+  public AjaxResult add(@PathVariable("nodeId") String nodeId,
+      @RequestBody EnergyIndex energyIndex) {
+    boolean isExist = energyIndexService.energyIndexHasExist(energyIndex.getCode());
+    if (isExist) {
+      return AjaxResult.error("鎸囨爣缂栫爜涓嶈兘閲嶅锛�");
+    } else {
+      energyIndex.setIndexId(UUID.randomUUID().toString());
+      energyIndexService.insertEnergyIndex(nodeId, energyIndex);
+      return AjaxResult.success();
+    }
+  }
+
+  /**
+   * 淇敼鎸囨爣淇℃伅
+   */
+  @PreAuthorize("@ss.hasPermi('energyindex:energyindex:edit')")
+  @Log(title = "鎸囨爣淇℃伅", businessType = BusinessType.UPDATE)
+  @PutMapping
+  public AjaxResult edit(@RequestBody EnergyIndex energyIndex) {
+    boolean isExist = energyIndexService
+        .energyIndexHasExist(energyIndex.getIndexId(), energyIndex.getCode());
+    if (isExist) {
+      return AjaxResult.error("鎸囨爣缂栫爜涓嶈兘閲嶅锛�");
+    } else {
+      return toAjax(energyIndexService.updateEnergyIndex(energyIndex));
+    }
+  }
+
+  /**
+   * 鍒犻櫎鎸囨爣淇℃伅
+   */
+  @PreAuthorize("@ss.hasPermi('energyindex:energyindex:remove')")
+  @Log(title = "鎸囨爣淇℃伅", businessType = BusinessType.DELETE)
+  @DeleteMapping("/{nodeId}/{indexIds}")
+  public AjaxResult remove(@PathVariable String nodeId, @PathVariable String[] indexIds) {
+    List<EnergyIndex> energyIndexList = energyIndexService.getEnergyIndexByIds(
+        Arrays.asList(indexIds));
+    List<String> deleteIds = energyIndexList.stream()
+        .filter(f -> StringUtils.isBlank(f.getMeterId()))
+        .map(EnergyIndex::getIndexId)
+        .collect(Collectors.toList());
+    List<String> removeLink = energyIndexList.stream()
+        .filter(f -> StringUtils.isNotBlank(f.getMeterId()))
+        .map(EnergyIndex::getIndexId)
+        .collect(Collectors.toList());
+    if (!removeLink.isEmpty()) {
+      energyIndexService.removeNodeIndex(nodeId, removeLink);
+    }
+
+    if (!deleteIds.isEmpty()) {
+      energyIndexService.deleteEnergyIndexByIds(nodeId, deleteIds.toArray(new String[0]));
+    }
+    return AjaxResult.success();
+  }
+
+  @Log(title = "澧炲姞璁¢噺鍣ㄥ叿閲囬泦鐐�", businessType = BusinessType.INSERT)
+  @PostMapping("/meterIndex/{meterId}")
+  public AjaxResult addCollectIndex(@PathVariable("meterId") String meterId) {
+    try {
+      return energyIndexService.addMeterIndex(meterId);
+    } catch (Exception ex) {
+      logger.error("鍒涘缓璁¢噺鍣ㄥ叿閲囬泦鐐瑰け璐ワ紒", ex);
+      return AjaxResult.error();
+    }
+  }
+
+  @GetMapping("/meterIndex/{meterId}")
+  public AjaxResult getDeviceCollectIndex(@PathVariable("meterId") String meterId) {
+    return AjaxResult.success(energyIndexService.getMeterIndex(meterId));
+  }
+
+  @GetMapping("/includeChildrenNode/{nodeId}")
+  public AjaxResult getIndexByNodeAndChildrenNode(@PathVariable("nodeId") String nodeId) {
+    try {
+      return AjaxResult.success(energyIndexService.getIndexByNodeAndChildrenNode(nodeId));
+    } catch (Exception ex) {
+      logger.error("鑾峰彇鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
+      return AjaxResult.error("鑾峰彇鍏宠仈鎸囨爣鍑洪敊!");
+    }
+  }
+
+  @GetMapping("/includeChildrenNode/search")
+  public AjaxResult searchIndexByNodeAndChildrenNode(String nodeId, String filter) {
+    try {
+      return AjaxResult
+          .success(energyIndexService.searchIndexByNodeAndChildrenNode(nodeId, filter));
+    } catch (Exception ex) {
+      logger.error("鑾峰彇鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
+      return AjaxResult.error("鑾峰彇鍏宠仈鎸囨爣鍑洪敊!");
+    }
+  }
+
+  @GetMapping("/importTemplate")
+  public AjaxResult importTemplate() {
+    ExcelUtil<EnergyIndex> util = new ExcelUtil<>(EnergyIndex.class);
+    return util.importTemplateExcel("鎸囨爣鏁版嵁");
+  }
+
+  @PostMapping("/importData")
+  public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception {
+    ExcelUtil<EnergyIndex> util = new ExcelUtil<>(EnergyIndex.class);
+    List<EnergyIndex> energyIndexList = util.importExcel(file.getInputStream());
+    return energyIndexService.importEnergyIndex(energyIndexList, updateSupport);
+  }
+
+
+  @GetMapping("/getIndexByCode")
+  public AjaxResult getIndexByCode(String code,String nodeId) {
+    List<EnergyIndex> energyIndexList = energyIndexService.getIndexByCode(code,nodeId);
+    return AjaxResult.success(energyIndexList);
+  }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/model/IndexStorageController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/model/IndexStorageController.java
new file mode 100644
index 0000000..85f29f1
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/model/IndexStorageController.java
@@ -0,0 +1,151 @@
+package com.zhitan.web.controller.model;
+
+import com.alibaba.fastjson.JSONObject;
+import com.greenpineyu.fel.FelEngine;
+import com.greenpineyu.fel.FelEngineImpl;
+import com.greenpineyu.fel.parser.FelNode;
+import com.greenpineyu.fel.parser.VarAstNode;
+import com.zhitan.common.annotation.RepeatSubmit;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.enums.CalcType;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.model.domain.IndexFormula;
+import com.zhitan.model.domain.IndexStorage;
+import com.zhitan.model.service.IIndexStorageService;
+import com.zhitan.model.service.IndexFormulaService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author fanxinfu
+ */
+@RestController
+@RequestMapping("/basicsetting/indexStorage")
+public class IndexStorageController extends BaseController {
+
+  private final IIndexStorageService indexStorageService;
+
+  private final IndexFormulaService indexFormulaService;
+
+  @Autowired
+  public IndexStorageController(
+      IIndexStorageService indexStorageService, IndexFormulaService indexFormulaService) {
+    this.indexStorageService = indexStorageService;
+    this.indexFormulaService = indexFormulaService;
+  }
+
+  @GetMapping("/{indexId}")
+  public AjaxResult getIndexStorage(@PathVariable String indexId) {
+    JSONObject result = new JSONObject();
+    IndexFormula indexFormula = indexFormulaService.getIndexFormula(indexId);
+    List<IndexStorage> indexStorageList = indexStorageService.getIndexStorage(indexId);
+    List<IndexStorage> defaultStorageList = getDefaultIndexStorage();
+    Map<TimeType, IndexStorage> map = indexStorageList.stream()
+        .collect(Collectors.toMap(IndexStorage::getTimeType, storage -> storage));
+    List<IndexStorage> storageList;
+    if (!indexStorageList.isEmpty()) {
+      storageList = new ArrayList<>();
+      defaultStorageList.forEach(storage -> {
+        storageList.add(map.get(storage.getTimeType()));
+      });
+    } else {
+      storageList = defaultStorageList;
+    }
+
+    result.put("indexFormula", indexFormula);
+    result.put("indexStorage", storageList);
+    return AjaxResult.success(result);
+  }
+
+  @RepeatSubmit
+  @PostMapping("/{indexId}")
+  public AjaxResult saveIndexStorage(@RequestBody JSONObject param, @PathVariable String indexId) {
+    try {
+      IndexFormula indexFormula = param.getObject("indexFormula", IndexFormula.class);
+      List<IndexStorage> indexStorage =
+          param.getJSONArray("indexStorage").toJavaList(IndexStorage.class);
+      indexFormula.setIndexId(indexId);
+      indexStorageService.saveFormulaAndStorage(indexFormula, indexStorage, indexId);
+    } catch (Exception ex) {
+      logger.error("", ex);
+      return AjaxResult.error();
+    }
+
+    return AjaxResult.success();
+  }
+
+
+  @PostMapping("/parseFormula")
+  public AjaxResult parseFormula(@RequestBody JSONObject formulaText) {
+    String calcText = formulaText.getString("calcText");
+    FelEngine e = new FelEngineImpl();
+    Set<String> params = new HashSet<>();
+    try {
+      FelNode felNode = e.parse(calcText);
+      buildParam(felNode, params);
+    } catch (Exception ex) {
+      logger.error("鍏紡瑙f瀽鍑洪敊锛�");
+    }
+    return AjaxResult.success(params);
+  }
+
+  @GetMapping("/calcPeriod")
+  public AjaxResult getIndexStorage() {
+    List<IndexStorage> calcPeriods = getDefaultIndexStorage();
+    return AjaxResult.success(calcPeriods);
+  }
+
+  @NotNull
+  private List<IndexStorage> getDefaultIndexStorage() {
+    List<IndexStorage> calcPeriods = new ArrayList<>();
+    getPeriod(calcPeriods, TimeType.HOUR);
+    getPeriod(calcPeriods, TimeType.SCHEDULING);
+    getPeriod(calcPeriods, TimeType.DAY);
+    getPeriod(calcPeriods, TimeType.MONTH);
+    getPeriod(calcPeriods, TimeType.YEAR);
+    return calcPeriods;
+  }
+
+  private void getPeriod(List<IndexStorage> calcPeriods, TimeType timeType) {
+    IndexStorage hour = new IndexStorage();
+    hour.setTimeType(timeType);
+    hour.setCalcType(CalcType.CALC);
+    calcPeriods.add(hour);
+  }
+
+  private void buildParam(FelNode felNode, Set<String> params) {
+    if (felNode.getChildren() == null) {
+      if (isConfigParam(felNode.getText())) {
+        params.add(felNode.getText());
+      }
+    } else {
+      for (FelNode node : felNode.getChildren()) {
+        if (node.getChildren() == null) {
+          if (node instanceof VarAstNode && isConfigParam(node.getText())) {
+            params.add(node.getText());
+          }
+        } else {
+          buildParam(node, params);
+        }
+      }
+    }
+  }
+
+  private boolean isConfigParam(String param) {
+    if (param.startsWith("'") && param.endsWith("'")) {
+      return false;
+    }
+
+    if (param.startsWith("$")) {
+      return true;
+    }
+
+    return true;
+  }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/model/ModelInfoController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/model/ModelInfoController.java
new file mode 100644
index 0000000..73dcb3a
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/model/ModelInfoController.java
@@ -0,0 +1,116 @@
+package com.zhitan.web.controller.model;
+
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.model.domain.ModelInfo;
+import com.zhitan.model.domain.vo.PointDataVO;
+import com.zhitan.model.service.IEnergyIndexService;
+import com.zhitan.model.service.IModelInfoService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 妯″瀷Controller
+ *
+ * @author fanxinfu
+ * @date 2020-02-17
+ */
+@RestController
+@RequestMapping("/basicsetting/model")
+public class ModelInfoController extends BaseController {
+  @Autowired
+  private IModelInfoService modelInfoService;
+
+  @Autowired
+  private IEnergyIndexService energyIndexService;
+
+  /**
+   * 鏌ヨ妯″瀷鍒楄〃
+   */
+  @PreAuthorize("@ss.hasPermi('basicsetting:model:list')")
+  @GetMapping("/list")
+  public AjaxResult list(ModelInfo modelInfo) {
+    List<ModelInfo> list = modelInfoService.selectModelInfoList(modelInfo);
+    return AjaxResult.success(list);
+  }
+
+  /**
+   * 瀵煎嚭妯″瀷鍒楄〃
+   */
+  @PreAuthorize("@ss.hasPermi('basicsetting:model:export')")
+  @Log(title = "妯″瀷", businessType = BusinessType.EXPORT)
+  @GetMapping("/export")
+  public AjaxResult export(ModelInfo modelInfo) {
+    List<ModelInfo> list = modelInfoService.selectModelInfoList(modelInfo);
+    ExcelUtil<ModelInfo> util = new ExcelUtil<ModelInfo>(ModelInfo.class);
+    return util.exportExcel(list, "model");
+  }
+
+  /**
+   * 鑾峰彇妯″瀷璇︾粏淇℃伅
+   */
+  @PreAuthorize("@ss.hasPermi('basicsetting:model:query')")
+  @GetMapping(value = "/{modelCode}")
+  public AjaxResult getInfo(@PathVariable("modelCode") String modelCode) {
+    return AjaxResult.success(modelInfoService.selectModelInfoById(modelCode));
+  }
+
+  /**
+   * 鏂板妯″瀷
+   */
+  @PreAuthorize("@ss.hasPermi('basicsetting:model:add')")
+  @Log(title = "妯″瀷", businessType = BusinessType.INSERT)
+  @PostMapping
+  public AjaxResult add(@RequestBody ModelInfo modelInfo) {
+    return toAjax(modelInfoService.insertModelInfo(modelInfo));
+  }
+
+  /**
+   * 淇敼妯″瀷
+   */
+  @PreAuthorize("@ss.hasPermi('basicsetting:model:edit')")
+  @Log(title = "妯″瀷", businessType = BusinessType.UPDATE)
+  @PutMapping
+  public AjaxResult edit(@RequestBody ModelInfo modelInfo) {
+    return toAjax(modelInfoService.updateModelInfo(modelInfo));
+  }
+
+  /**
+   * 鍒犻櫎妯″瀷
+   */
+  @PreAuthorize("@ss.hasPermi('basicsetting:model:remove')")
+  @Log(title = "妯″瀷", businessType = BusinessType.DELETE)
+  @DeleteMapping("/{modelCode}")
+  public AjaxResult remove(@PathVariable String modelCode) {
+    boolean hasConfig = energyIndexService.modelHasConfig(modelCode);
+    if (hasConfig) {
+      return AjaxResult.error("璇ユā鍨嬪凡缁忛厤缃妭鐐规垨鎸囨爣锛屼笉鑳藉垹闄わ紒");
+    }
+
+    return toAjax(modelInfoService.deleteModelInfoByCode(modelCode));
+  }
+
+  /**
+   * 鏍规嵁妯″瀷id鏌ヨ瀵瑰簲鐐逛綅淇℃伅
+   *
+   * @param modelId 鏌ヨ妯″瀷id
+   * @return
+   */
+  @ApiOperation("鏍规嵁妯″瀷id鏌ヨ瀵瑰簲鐐逛綅淇℃伅")
+  @GetMapping("/getEnergyIndexByModelId")
+  public AjaxResult listEnergyIndexByModelId(String modelId) {
+    if (StringUtils.isEmpty(modelId)) {
+      return AjaxResult.error("鏈壘鍒版煡璇㈡ā鍨嬩俊鎭�");
+    }
+    List<PointDataVO> voList = modelInfoService.listEnergyIndexByModelId(modelId);
+    return AjaxResult.success(voList);
+  }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/model/ModelNodeController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/model/ModelNodeController.java
new file mode 100644
index 0000000..c948a2d
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/model/ModelNodeController.java
@@ -0,0 +1,383 @@
+package com.zhitan.web.controller.model;
+
+import com.alibaba.fastjson.JSONObject;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.SecurityUtils;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.common.utils.uuid.UUID;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.domain.ModelNode;
+import com.zhitan.model.service.IEnergyIndexService;
+import com.zhitan.model.service.IModelNodeService;
+import com.zhitan.system.service.ISysRoleService;
+import com.zhitan.system.service.ISysUserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 妯″瀷鑺傜偣Controller
+ *
+ * @author fanxinfu
+ * @date 2020-02-10
+ */
+@RestController
+@RequestMapping("/basicsetting/modelnode")
+@Api(value = "妯″瀷鑺傜偣",tags = {"妯″瀷鑺傜偣"})
+public class ModelNodeController extends BaseController {
+
+  private final IModelNodeService modelNodeService;
+
+
+  @Autowired
+  public ModelNodeController(
+      IModelNodeService modelNodeService, IEnergyIndexService energyIndexService,
+      ISysUserService sysUserService,
+      ISysRoleService roleService) {
+    this.modelNodeService = modelNodeService;
+  }
+
+  /**
+   * 鏌ヨ妯″瀷鑺傜偣鍒楄〃
+   */
+  @ApiOperation(value = "鏌ヨ妯″瀷鑺傜偣鍒楄〃")
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:query')")
+  @GetMapping("/list")
+  public TableDataInfo list(ModelNode modelNode) {
+    startPage();
+    List<ModelNode> list = modelNodeService.selectModelNodeList(modelNode);
+    return getDataTable(list);
+  }
+
+  /**
+   * 鏌ヨ妯″瀷鑺傜偣鍒楄〃
+   */
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:list')")
+  @GetMapping("/treelist")
+  @ApiOperation(value = "鏌ヨ妯″瀷鑺傜偣鏍戠姸鍒楄〃")
+  public AjaxResult treeList(String modelCode) {
+    List<ModelNode> list = modelNodeService.getModelNodeByModelCode(modelCode);
+    return AjaxResult.success(modelNodeService.buildModelNodeTree(list));
+  }
+
+  /**
+   * 鏌ヨ妯″瀷鑺傜偣鍒楄〃
+   */
+  @GetMapping("/treelist/withAuth")
+  @ApiOperation(value = "鏌ヨ妯″瀷鑺傜偣鍒楄〃")
+  public AjaxResult treeListWithAuth(String modelCode) {
+    Long userId = SecurityUtils.getUserId();
+    List<ModelNode> list = modelNodeService.getModelNodeByModelCodeWithAuth(modelCode, userId);
+    return AjaxResult.success(modelNodeService.buildModelNodeTree(list));
+  }
+
+  /**
+   * 瀵煎嚭妯″瀷鑺傜偣鍒楄〃
+   */
+  @ApiOperation(value = "瀵煎嚭妯″瀷鑺傜偣鍒楄〃")
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:export')")
+  @Log(title = "妯″瀷鑺傜偣", businessType = BusinessType.EXPORT)
+  @GetMapping("/export")
+  public AjaxResult export(ModelNode modelNode) {
+    List<ModelNode> list = modelNodeService.selectModelNodeList(modelNode);
+    ExcelUtil<ModelNode> util = new ExcelUtil<ModelNode>(ModelNode.class);
+    return util.exportExcel(list, "modelNode");
+  }
+
+  /**
+   * 鑾峰彇妯″瀷鑺傜偣璇︾粏淇℃伅
+   */
+  @ApiOperation(value = "鑾峰彇妯″瀷鑺傜偣璇︾粏淇℃伅")
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:query')")
+  @GetMapping(value = "/{nodeId}")
+  public AjaxResult getInfo(@PathVariable("nodeId") String nodeId) {
+    return AjaxResult.success(modelNodeService.selectModelNodeById(nodeId));
+  }
+
+  @GetMapping(value = "/hasEnergyIndex")
+  @ApiOperation(value = "鑾峰彇妯″瀷鑺傜偣璇︾粏淇℃伅")
+  public AjaxResult hasEnergyIndex(String nodeId) {
+    return AjaxResult.success(modelNodeService.hasEnergyIndex(nodeId));
+  }
+
+  /**
+   * 鏂板妯″瀷鑺傜偣
+   */
+  @ApiOperation(value = "鏂板妯″瀷鑺傜偣")
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:add')")
+  @Log(title = "妯″瀷鑺傜偣", businessType = BusinessType.INSERT)
+  @PostMapping
+  public AjaxResult add(@RequestBody ModelNode modelNode) {
+    boolean isExist = modelNodeService
+        .modelNodeHasExist(modelNode.getCode(), modelNode.getModelCode());
+    if (isExist) {
+      return AjaxResult.error("妯″瀷鑺傜偣缂栫爜涓嶈兘閲嶅锛�");
+    } else {
+      modelNode.setNodeId(UUID.randomUUID().toString());
+      modelNodeService.insertModelNode(modelNode);
+      return AjaxResult.success(modelNode);
+    }
+  }
+
+  /**
+   * 淇敼妯″瀷鑺傜偣
+   */
+  @ApiOperation(value = "淇敼妯″瀷鑺傜偣")
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
+  @Log(title = "妯″瀷鑺傜偣", businessType = BusinessType.UPDATE)
+  @PutMapping
+  public AjaxResult edit(@RequestBody ModelNode modelNode) {
+    boolean isExist = modelNodeService.modelNodeHasExist(modelNode);
+    if (isExist) {
+      return AjaxResult.error("妯″瀷鑺傜偣缂栫爜涓嶈兘閲嶅锛�");
+    } else {
+      return toAjax(modelNodeService.updateModelNode(modelNode));
+    }
+  }
+
+  /**
+   * 淇敼妯″瀷鑺傜偣
+   */
+  @ApiOperation(value = "妯″瀷鑺傜偣鎺掑簭")
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
+  @Log(title = "妯″瀷鑺傜偣", businessType = BusinessType.UPDATE)
+  @PutMapping("/order")
+  public AjaxResult order(@RequestBody JSONObject param) {
+    String nodeId = param.getString("nodeId");
+    String parentId = param.getString("parentId");
+    String[] children = param.getJSONArray("children").toJavaList(String.class).toArray(
+            new String[]{});
+    modelNodeService.updateOrder(nodeId, parentId, children);
+    return AjaxResult.success();
+  }
+
+  /**
+   * 鍒犻櫎妯″瀷鑺傜偣
+   */
+  @ApiOperation(value = "鍒犻櫎妯″瀷鑺傜偣")
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:remove')")
+  @Log(title = "妯″瀷鑺傜偣", businessType = BusinessType.DELETE)
+  @DeleteMapping("/{nodeIds}")
+  public AjaxResult remove(@PathVariable String[] nodeIds) {
+    return toAjax(modelNodeService.deleteModelNodeByIds(nodeIds));
+  }
+
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
+  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈璁惧", businessType = BusinessType.UPDATE)
+  @GetMapping("/device/{nodeId}")
+  @ApiOperation(value = "璁剧疆妯″瀷鑺傜偣鍏宠仈璁惧")
+  public AjaxResult getSettingDevice(@PathVariable("nodeId") String nodeId) {
+    try {
+      return AjaxResult.success(modelNodeService.getSettingDevice(nodeId));
+    } catch (Exception ex) {
+      logger.error("鑾峰彇鍏宠仈璁惧鍑洪敊锛�", ex);
+      return AjaxResult.error("鑾峰彇鍏宠仈璁惧鍑洪敊!");
+    }
+  }
+
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
+  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈璁惧", businessType = BusinessType.UPDATE)
+  @PostMapping("/device/{nodeId}")
+  @ApiOperation(value = "璁剧疆妯″瀷鑺傜偣鍏宠仈璁惧")
+  public AjaxResult setDevice(@PathVariable("nodeId") String nodeId,
+      @RequestBody String[] deviceIds) {
+    try {
+      modelNodeService.setDevice(nodeId, deviceIds);
+      return AjaxResult.success();
+    } catch (Exception ex) {
+      logger.error("璁剧疆鍏宠仈璁惧鍑洪敊锛�", ex);
+      return AjaxResult.error();
+    }
+  }
+
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
+  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈璁惧", businessType = BusinessType.UPDATE)
+  @DeleteMapping("/device/{nodeId}")
+  @ApiOperation(value = "鍒犻櫎妯″瀷鑺傜偣鍏宠仈璁惧")
+  public AjaxResult delDevice(@PathVariable("nodeId") String nodeId,
+      @RequestBody String[] deviceIds) {
+    try {
+      modelNodeService.delDevice(nodeId, deviceIds);
+      return AjaxResult.success();
+    } catch (Exception ex) {
+      logger.error("鍒犻櫎鍏宠仈璁惧鍑洪敊锛�", ex);
+      return AjaxResult.error();
+    }
+  }
+
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
+  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈鑳芥簮", businessType = BusinessType.UPDATE)
+  @GetMapping("/energy/{nodeId}")
+  @ApiOperation(value = "鑾峰彇妯″瀷鑺傜偣鍏宠仈鑳芥簮")
+  public AjaxResult getSettingEnergy(@PathVariable("nodeId") String nodeId) {
+    try {
+      return AjaxResult.success(modelNodeService.getSettingEnergy(nodeId));
+    } catch (Exception ex) {
+      logger.error("鑾峰彇鍏宠仈鑳芥簮鍑洪敊锛�", ex);
+      return AjaxResult.error("鑾峰彇鍏宠仈鑳芥簮鍑洪敊!");
+    }
+  }
+
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
+  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈鑳芥簮", businessType = BusinessType.UPDATE)
+  @PostMapping("/energy/{nodeId}")
+  @ApiOperation(value = "璁剧疆妯″瀷鑺傜偣鍏宠仈鑳芥簮")
+  public AjaxResult setEnergy(@PathVariable("nodeId") String nodeId,
+      @RequestBody Integer[] energyIds) {
+    try {
+      modelNodeService.setEnergy(nodeId, energyIds);
+      return AjaxResult.success();
+    } catch (Exception ex) {
+      logger.error("璁剧疆鍏宠仈鑳芥簮鍑洪敊锛�", ex);
+      return AjaxResult.error();
+    }
+  }
+
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
+  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈鑳芥簮", businessType = BusinessType.UPDATE)
+  @DeleteMapping("/energy/{nodeId}")
+  @ApiOperation(value = "鍒犻櫎妯″瀷鑺傜偣鍏宠仈鑳芥簮")
+  public AjaxResult delEnergy(@PathVariable("nodeId") String nodeId,
+      @RequestBody Integer[] energyIds) {
+    try {
+      modelNodeService.delEnergy(nodeId, energyIds);
+      return AjaxResult.success();
+    } catch (Exception ex) {
+      logger.error("鍒犻櫎鍏宠仈鑳芥簮鍑洪敊锛�", ex);
+      return AjaxResult.error();
+    }
+  }
+
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
+  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈浜у搧", businessType = BusinessType.UPDATE)
+  @GetMapping("/product/{nodeId}")
+  @ApiOperation(value = "鑾峰彇妯″瀷鑺傜偣鍏宠仈浜у搧")
+  public AjaxResult getSettingProduct(@PathVariable("nodeId") String nodeId) {
+    try {
+      return AjaxResult.success(modelNodeService.getSettingProduct(nodeId));
+    } catch (Exception ex) {
+      logger.error("鑾峰彇鍏宠仈浜у搧鍑洪敊锛�", ex);
+      return AjaxResult.error("鑾峰彇鍏宠仈浜у搧鍑洪敊!");
+    }
+  }
+
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
+  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈浜у搧", businessType = BusinessType.UPDATE)
+  @PostMapping("/product/{nodeId}")
+  @ApiOperation(value = "璁剧疆妯″瀷鑺傜偣鍏宠仈浜у搧")
+  public AjaxResult setProduct(@PathVariable("nodeId") String nodeId,
+      @RequestBody Integer[] productIds) {
+    try {
+      modelNodeService.setProduct(nodeId, productIds);
+      return AjaxResult.success();
+    } catch (Exception ex) {
+      logger.error("璁剧疆鍏宠仈浜у搧鍑洪敊锛�", ex);
+      return AjaxResult.error();
+    }
+  }
+
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
+  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈浜у搧", businessType = BusinessType.UPDATE)
+  @DeleteMapping("/product/{nodeId}")
+  @ApiOperation(value = "鍒犻櫎妯″瀷鑺傜偣鍏宠仈浜у搧")
+  public AjaxResult delProduct(@PathVariable("nodeId") String nodeId,
+      @RequestBody Integer[] productIds) {
+    try {
+      modelNodeService.delProduct(nodeId, productIds);
+      return AjaxResult.success();
+    } catch (Exception ex) {
+      logger.error("鍒犻櫎鍏宠仈浜у搧鍑洪敊锛�", ex);
+      return AjaxResult.error();
+    }
+  }
+
+  @GetMapping("/energyIndex/{nodeId}")
+  @ApiOperation(value = "鑾峰彇妯″瀷鑺傜偣鍏宠仈鎸囨爣")
+  public AjaxResult getSettingIndex(@PathVariable("nodeId") String nodeId) {
+    try {
+      return AjaxResult.success(modelNodeService.getSettingIndex(nodeId));
+    } catch (Exception ex) {
+      logger.error("鑾峰彇鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
+      return AjaxResult.error("鑾峰彇鍏宠仈鎸囨爣鍑洪敊!");
+    }
+  }
+
+  @GetMapping("/energyIndex/{indexType}/{nodeId}")
+  @ApiOperation(value = "鑾峰彇妯″瀷鑺傜偣鍏宠仈鎸囨爣")
+  public AjaxResult getSettingIndex(@PathVariable("indexType") String indexType,
+      @PathVariable("nodeId") String nodeId, String code,
+                                    String name, Long pageNum, Long pageSize) {
+    try {
+      return AjaxResult.success(modelNodeService.getSettingIndex(indexType, nodeId,code, name,pageNum,pageSize));
+    } catch (Exception ex) {
+      logger.error("鑾峰彇鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
+      return AjaxResult.error("鑾峰彇鍏宠仈鎸囨爣鍑洪敊!");
+    }
+  }
+
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
+  @Log(title = "璁剧疆妯″瀷鑺傜偣鍏宠仈閲囬泦鎸囨爣", businessType = BusinessType.UPDATE)
+  @PostMapping("/energyIndex/{nodeId}/{indexType}")
+  @ApiOperation(value = "璁剧疆妯″瀷鑺傜偣鍏宠仈鎸囨爣")
+  public AjaxResult setSettingIndex(@PathVariable("nodeId") String nodeId,
+      @PathVariable("indexType") String indexType,
+      @RequestBody String[] indexIds) {
+    try {
+      modelNodeService.setIndex(nodeId, indexType, indexIds);
+      return AjaxResult.success();
+    } catch (Exception ex) {
+      logger.error("璁剧疆鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
+      return AjaxResult.error();
+    }
+  }
+
+  @PreAuthorize("@ss.hasPermi('basicsetting:modelNode:edit')")
+  @Log(title = "鍒犻櫎妯″瀷鑺傜偣鍏宠仈閲囬泦鎸囨爣", businessType = BusinessType.UPDATE)
+  @DeleteMapping("/energyIndex/{nodeId}")
+  @ApiOperation(value = "鍒犻櫎妯″瀷鑺傜偣鍏宠仈鎸囨爣")
+  public AjaxResult delSettingIndex(@PathVariable("nodeId") String nodeId,
+                                    @RequestBody String[] indexIds) {
+    try {
+      modelNodeService.delIndex(nodeId, indexIds);
+      return AjaxResult.success();
+    } catch (Exception ex) {
+      logger.error("鍒犻櫎鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
+      return AjaxResult.error();
+    }
+  }
+
+  @Log(title = "鏍规嵁nodeId鏌ヨ鐐逛綅淇℃伅", businessType = BusinessType.UPDATE)
+  @GetMapping("/getIndexInforByNodeId")
+  @ApiOperation(value = "鏍规嵁nodeId鏌ヨ鐐逛綅淇℃伅")
+  public AjaxResult getIndexInforByNodeId(String nodeId) {
+    try {
+      List<EnergyIndex> settingIndex = modelNodeService.getSettingIndex(nodeId);
+
+
+      return AjaxResult.success();
+    } catch (Exception ex) {
+      logger.error("鍒犻櫎鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
+      return AjaxResult.error();
+    }
+  }
+
+
+
+  @GetMapping("/energyIndex/meterImplement/{nodeId}")
+  @ApiOperation(value = "鏍规嵁nodeid鑾峰彇璁¢噺鍣ㄥ叿锛岀劧鍚庤幏鍙栨ā鍨嬭妭鐐瑰叧鑱旀寚鏍�")
+  public TableDataInfo getIndexByMeterImplement(@PathVariable("nodeId") String nodeId,
+                                                String code,
+                                                String name,
+                                                @RequestParam Long pageNum,  
+                                                @RequestParam Long pageSize) {
+      return getDataTable(modelNodeService.getIndexByMeterImplement(nodeId,code,name,pageNum,pageSize));
+  }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/CacheController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/CacheController.java
new file mode 100644
index 0000000..a93533e
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/CacheController.java
@@ -0,0 +1,120 @@
+package com.zhitan.web.controller.monitor;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import javax.annotation.Resource;
+import org.springframework.data.redis.core.RedisCallback;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.constant.CacheConstants;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.system.domain.SysCache;
+
+/**
+ * 缂撳瓨鐩戞帶
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/monitor/cache")
+public class CacheController
+{
+    @Resource
+    private RedisTemplate<String, String> redisTemplate;
+
+    private final static List<SysCache> caches = new ArrayList<SysCache>();
+    {
+        caches.add(new SysCache(CacheConstants.LOGIN_TOKEN_KEY, "鐢ㄦ埛淇℃伅"));
+        caches.add(new SysCache(CacheConstants.SYS_CONFIG_KEY, "閰嶇疆淇℃伅"));
+        caches.add(new SysCache(CacheConstants.SYS_DICT_KEY, "鏁版嵁瀛楀吀"));
+        caches.add(new SysCache(CacheConstants.CAPTCHA_CODE_KEY, "楠岃瘉鐮�"));
+        caches.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "闃查噸鎻愪氦"));
+        caches.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "闄愭祦澶勭悊"));
+        caches.add(new SysCache(CacheConstants.PWD_ERR_CNT_KEY, "瀵嗙爜閿欒娆℃暟"));
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @GetMapping()
+    public AjaxResult getInfo() throws Exception
+    {
+        Properties info = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info());
+        Properties commandStats = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info("commandstats"));
+        Object dbSize = redisTemplate.execute((RedisCallback<Object>) connection -> connection.dbSize());
+
+        Map<String, Object> result = new HashMap<>(3);
+        result.put("info", info);
+        result.put("dbSize", dbSize);
+
+        List<Map<String, String>> pieList = new ArrayList<>();
+        commandStats.stringPropertyNames().forEach(key -> {
+            Map<String, String> data = new HashMap<>(2);
+            String property = commandStats.getProperty(key);
+            data.put("name", StringUtils.removeStart(key, "cmdstat_"));
+            data.put("value", StringUtils.substringBetween(property, "calls=", ",usec"));
+            pieList.add(data);
+        });
+        result.put("commandStats", pieList);
+        return AjaxResult.success(result);
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @GetMapping("/getNames")
+    public AjaxResult cache()
+    {
+        return AjaxResult.success(caches);
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @GetMapping("/getKeys/{cacheName}")
+    public AjaxResult getCacheKeys(@PathVariable String cacheName)
+    {
+        Set<String> cacheKeys = redisTemplate.keys(cacheName + "*");
+        return AjaxResult.success(cacheKeys);
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @GetMapping("/getValue/{cacheName}/{cacheKey}")
+    public AjaxResult getCacheValue(@PathVariable String cacheName, @PathVariable String cacheKey)
+    {
+        String cacheValue = redisTemplate.opsForValue().get(cacheKey);
+        SysCache sysCache = new SysCache(cacheName, cacheKey, cacheValue);
+        return AjaxResult.success(sysCache);
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @DeleteMapping("/clearCacheName/{cacheName}")
+    public AjaxResult clearCacheName(@PathVariable String cacheName)
+    {
+        Collection<String> cacheKeys = redisTemplate.keys(cacheName + "*");
+        redisTemplate.delete(cacheKeys);
+        return AjaxResult.success();
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @DeleteMapping("/clearCacheKey/{cacheKey}")
+    public AjaxResult clearCacheKey(@PathVariable String cacheKey)
+    {
+        redisTemplate.delete(cacheKey);
+        return AjaxResult.success();
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @DeleteMapping("/clearCacheAll")
+    public AjaxResult clearCacheAll()
+    {
+        Collection<String> cacheKeys = redisTemplate.keys("*");
+        redisTemplate.delete(cacheKeys);
+        return AjaxResult.success();
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/ServerController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/ServerController.java
new file mode 100644
index 0000000..6243b13
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/ServerController.java
@@ -0,0 +1,27 @@
+package com.zhitan.web.controller.monitor;
+
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.framework.web.domain.Server;
+
+/**
+ * 鏈嶅姟鍣ㄧ洃鎺�
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/monitor/server")
+public class ServerController
+{
+    @PreAuthorize("@ss.hasPermi('monitor:server:list')")
+    @GetMapping()
+    public AjaxResult getInfo() throws Exception
+    {
+        Server server = new Server();
+        server.copyTo();
+        return AjaxResult.success(server);
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/SysLogininforController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/SysLogininforController.java
new file mode 100644
index 0000000..8550814
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/SysLogininforController.java
@@ -0,0 +1,82 @@
+package com.zhitan.web.controller.monitor;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import javax.annotation.Resource;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.framework.web.service.SysPasswordService;
+import com.zhitan.system.domain.SysLoginInfo;
+import com.zhitan.system.service.ISysLoginInfoService;
+
+/**
+ * 绯荤粺璁块棶璁板綍
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/monitor/logininfor")
+public class SysLogininforController extends BaseController
+{
+    @Resource
+    private ISysLoginInfoService logininforService;
+
+    @Resource
+    private SysPasswordService passwordService;
+
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysLoginInfo logininfor)
+    {
+        startPage();
+        List<SysLoginInfo> list = logininforService.selectLogininforList(logininfor);
+        return getDataTable(list);
+    }
+
+    @Log(title = "鐧诲綍鏃ュ織", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysLoginInfo logininfor)
+    {
+        List<SysLoginInfo> list = logininforService.selectLogininforList(logininfor);
+        ExcelUtil<SysLoginInfo> util = new ExcelUtil<SysLoginInfo>(SysLoginInfo.class);
+        util.exportExcel(response, list, "鐧诲綍鏃ュ織");
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
+    @Log(title = "鐧诲綍鏃ュ織", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{infoIds}")
+    public AjaxResult remove(@PathVariable Long[] infoIds)
+    {
+        return toAjax(logininforService.deleteLoginInfoByIds(infoIds));
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
+    @Log(title = "鐧诲綍鏃ュ織", businessType = BusinessType.CLEAN)
+    @DeleteMapping("/clean")
+    public AjaxResult clean()
+    {
+        logininforService.cleanLoginInfo();
+        return success();
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:unlock')")
+    @Log(title = "璐︽埛瑙i攣", businessType = BusinessType.OTHER)
+    @GetMapping("/unlock/{userName}")
+    public AjaxResult unlock(@PathVariable("userName") String userName)
+    {
+        passwordService.clearLoginRecordCache(userName);
+        return success();
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/SysOperlogController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/SysOperlogController.java
new file mode 100644
index 0000000..247828e
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/SysOperlogController.java
@@ -0,0 +1,69 @@
+package com.zhitan.web.controller.monitor;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import javax.annotation.Resource;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.system.domain.SysOperLog;
+import com.zhitan.system.service.ISysOperLogService;
+
+/**
+ * 鎿嶄綔鏃ュ織璁板綍
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/monitor/operlog")
+public class SysOperlogController extends BaseController
+{
+    @Resource
+    private ISysOperLogService operLogService;
+
+    @PreAuthorize("@ss.hasPermi('monitor:operlog:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysOperLog operLog)
+    {
+        startPage();
+        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
+        return getDataTable(list);
+    }
+
+    @Log(title = "鎿嶄綔鏃ュ織", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('monitor:operlog:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysOperLog operLog)
+    {
+        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
+        ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class);
+        util.exportExcel(response, list, "鎿嶄綔鏃ュ織");
+    }
+
+    @Log(title = "鎿嶄綔鏃ュ織", businessType = BusinessType.DELETE)
+    @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
+    @DeleteMapping("/{operIds}")
+    public AjaxResult remove(@PathVariable Long[] operIds)
+    {
+        return toAjax(operLogService.deleteOperLogByIds(operIds));
+    }
+
+    @Log(title = "鎿嶄綔鏃ュ織", businessType = BusinessType.CLEAN)
+    @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
+    @DeleteMapping("/clean")
+    public AjaxResult clean()
+    {
+        operLogService.cleanOperLog();
+        return success();
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/SysUserOnlineController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/SysUserOnlineController.java
new file mode 100644
index 0000000..d47ea89
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/SysUserOnlineController.java
@@ -0,0 +1,83 @@
+package com.zhitan.web.controller.monitor;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import javax.annotation.Resource;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.constant.CacheConstants;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.core.redis.RedisCache;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.system.domain.SysUserOnline;
+import com.zhitan.system.service.ISysUserOnlineService;
+
+/**
+ * 鍦ㄧ嚎鐢ㄦ埛鐩戞帶
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/monitor/online")
+public class SysUserOnlineController extends BaseController
+{
+    @Resource
+    private ISysUserOnlineService userOnlineService;
+
+    @Resource
+    private RedisCache redisCache;
+
+    @PreAuthorize("@ss.hasPermi('monitor:online:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(String ipaddr, String userName)
+    {
+        Collection<String> keys = redisCache.keys(CacheConstants.LOGIN_TOKEN_KEY + "*");
+        List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
+        for (String key : keys)
+        {
+            LoginUser user = redisCache.getCacheObject(key);
+            if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName))
+            {
+                userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
+            }
+            else if (StringUtils.isNotEmpty(ipaddr))
+            {
+                userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
+            }
+            else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser()))
+            {
+                userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
+            }
+            else
+            {
+                userOnlineList.add(userOnlineService.loginUserToUserOnline(user));
+            }
+        }
+        Collections.reverse(userOnlineList);
+        userOnlineList.removeAll(Collections.singleton(null));
+        return getDataTable(userOnlineList);
+    }
+
+    /**
+     * 寮洪��鐢ㄦ埛
+     */
+    @PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')")
+    @Log(title = "鍦ㄧ嚎鐢ㄦ埛", businessType = BusinessType.FORCE)
+    @DeleteMapping("/{tokenId}")
+    public AjaxResult forceLogout(@PathVariable String tokenId)
+    {
+        redisCache.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId);
+        return success();
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/ElectricityPriceController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/ElectricityPriceController.java
new file mode 100644
index 0000000..8c6509c
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/ElectricityPriceController.java
@@ -0,0 +1,110 @@
+package com.zhitan.web.controller.peakvalley;
+
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.peakvalley.domain.ElectricityPrice;
+import com.zhitan.peakvalley.service.IElectricityPriceService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 銆愬皷宄板钩璋风數浠锋槑缁嗐�慍ontroller
+ * 
+ * @author ZhiTan
+ * @date 2024-10-10
+ */
+@RestController
+@RequestMapping("/electricityprice")
+public class ElectricityPriceController extends BaseController
+{
+    @Resource
+    private IElectricityPriceService electricityPriceService;
+
+    /**
+     * 鏌ヨ銆愬皷宄板钩璋风數浠锋槑缁嗐�戝垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('system:price:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ElectricityPrice electricityPrice)
+    {
+        List<ElectricityPrice> list = electricityPriceService.selectElectricityPriceList(electricityPrice);
+        return getDataTable(list);
+    }
+
+
+    /**
+     * 瀵煎嚭銆愬皷宄板钩璋风數浠锋槑缁嗐�戝垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('system:price:export')")
+    @Log(title = "銆愬皷宄板钩璋风數浠锋槑缁嗐��", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ElectricityPrice electricityPrice)
+    {
+        List<ElectricityPrice> list = electricityPriceService.selectElectricityPriceList(electricityPrice);
+        ExcelUtil<ElectricityPrice> util = new ExcelUtil<ElectricityPrice>(ElectricityPrice.class);
+        util.exportExcel(response, list, "銆愬皷宄板钩璋风數浠锋槑缁嗐�戞暟鎹�");
+    }
+
+    /**
+     * 鑾峰彇銆愬皷宄板钩璋风數浠锋槑缁嗐�戣缁嗕俊鎭�
+     */
+    @PreAuthorize("@ss.hasPermi('system:price:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return success(electricityPriceService.selectElectricityPriceById(id));
+    }
+
+    /**
+     * 鏂板銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     */
+    @PreAuthorize("@ss.hasPermi('system:price:add')")
+    @Log(title = "銆愬皷宄板钩璋风數浠锋槑缁嗐��", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ElectricityPrice electricityPrice)
+    {
+        return toAjax(electricityPriceService.insertElectricityPrice(electricityPrice));
+    }
+
+    /**
+     * 淇敼銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     */
+    @PreAuthorize("@ss.hasPermi('system:price:edit')")
+    @Log(title = "銆愬皷宄板钩璋风數浠锋槑缁嗐��", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ElectricityPrice electricityPrice)
+    {
+        return toAjax(electricityPriceService.updateElectricityPrice(electricityPrice));
+    }
+
+    /**
+     * 鍒犻櫎銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     */
+    @PreAuthorize("@ss.hasPermi('system:price:remove')")
+    @Log(title = "銆愬皷宄板钩璋风數浠锋槑缁嗐��", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(electricityPriceService.deleteElectricityPriceByIds(ids));
+    }
+
+    /**
+     * 淇敼銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     */
+    @PreAuthorize("@ss.hasPermi('system:price:edit')")
+    @Log(title = "銆愬皷宄板钩璋风數浠锋槑缁嗐��", businessType = BusinessType.UPDATE)
+    @PutMapping(value = "/save")
+    public AjaxResult saveList(@RequestBody List<ElectricityPrice> electricityPriceList)
+    {
+        electricityPriceService.saveList(electricityPriceList);
+        return AjaxResult.success();
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/ElectricityPriceDateController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/ElectricityPriceDateController.java
new file mode 100644
index 0000000..80047d0
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/ElectricityPriceDateController.java
@@ -0,0 +1,100 @@
+package com.zhitan.web.controller.peakvalley;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.peakvalley.domain.ElectricityPriceDate;
+import com.zhitan.peakvalley.service.IElectricityPriceDateService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 灏栧嘲骞宠胺鐢典环鏃堕棿娈礐ontroller
+ * 
+ * @author ZhiTan
+ * @date 2024-10-10
+ */
+@RestController
+@RequestMapping("/electricitypricedate")
+public class ElectricityPriceDateController extends BaseController
+{
+    @Resource
+    private IElectricityPriceDateService electricityPriceDateService;
+
+    /**
+     * 鏌ヨ灏栧嘲骞宠胺鐢典环鏃堕棿娈靛垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('system:date:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ElectricityPriceDate electricityPriceDate, @RequestParam Long pageNum, @RequestParam Long pageSize)
+    {
+        Page<ElectricityPriceDate> list = electricityPriceDateService.selectElectricityPriceDatePage(electricityPriceDate,pageNum,pageSize);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 瀵煎嚭灏栧嘲骞宠胺鐢典环鏃堕棿娈靛垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('system:date:export')")
+    @Log(title = "灏栧嘲骞宠胺鐢典环鏃堕棿娈�", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ElectricityPriceDate electricityPriceDate)
+    {
+        List<ElectricityPriceDate> list = electricityPriceDateService.selectElectricityPriceDateList(electricityPriceDate);
+        ExcelUtil<ElectricityPriceDate> util = new ExcelUtil<ElectricityPriceDate>(ElectricityPriceDate.class);
+        util.exportExcel(response, list, "灏栧嘲骞宠胺鐢典环鏃堕棿娈垫暟鎹�");
+    }
+
+    /**
+     * 鑾峰彇灏栧嘲骞宠胺鐢典环鏃堕棿娈佃缁嗕俊鎭�
+     */
+    @PreAuthorize("@ss.hasPermi('system:date:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return success(electricityPriceDateService.selectElectricityPriceDateById(id));
+    }
+
+    /**
+     * 鏂板灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     */
+    @PreAuthorize("@ss.hasPermi('system:date:add')")
+    @Log(title = "灏栧嘲骞宠胺鐢典环鏃堕棿娈�", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ElectricityPriceDate electricityPriceDate)
+    {
+        return toAjax(electricityPriceDateService.insertElectricityPriceDate(electricityPriceDate));
+    }
+
+    /**
+     * 淇敼灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     */
+    @PreAuthorize("@ss.hasPermi('system:date:edit')")
+    @Log(title = "灏栧嘲骞宠胺鐢典环鏃堕棿娈�", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ElectricityPriceDate electricityPriceDate)
+    {
+        return toAjax(electricityPriceDateService.updateElectricityPriceDate(electricityPriceDate));
+    }
+
+    /**
+     * 鍒犻櫎灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     */
+    @PreAuthorize("@ss.hasPermi('system:date:remove')")
+    @Log(title = "灏栧嘲骞宠胺鐢典环鏃堕棿娈�", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(electricityPriceDateService.deleteElectricityPriceDateByIds(ids));
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/PeakValleyController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/PeakValleyController.java
new file mode 100644
index 0000000..fae86f9
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/PeakValleyController.java
@@ -0,0 +1,66 @@
+package com.zhitan.web.controller.peakvalley;
+
+
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.peakvalley.domain.dto.PeakValleyDTO;
+import com.zhitan.peakvalley.domain.vo.peakvalley.PeakValleyHourDataVO;
+import com.zhitan.peakvalley.service.IPeakValleyService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 灏栧嘲骞宠胺鏁版嵁Controller
+ *
+ * @author ruoyi
+ * @date 2024-06-19
+ */
+@RestController
+@RequestMapping("/peakValley")
+@Api(tags = "灏栧嘲骞宠胺鏁版嵁")
+public class PeakValleyController extends BaseController {
+
+    @Resource
+    private IPeakValleyService rulesService;
+
+
+    /**
+     * 鑾峰彇灏栧嘲骞宠胺鏁版嵁缁熻 - 鎸夊皬鏃剁粺璁�
+     */
+    @GetMapping("/segmentAnalysis/hour")
+    @ApiOperation(value = "鑾峰彇灏栧嘲骞宠胺鍒嗘椂缁熻")
+    public AjaxResult segmentAnalysisHour(PeakValleyDTO dto) {
+        return AjaxResult.success(rulesService.segmentAnalysisHour(dto));
+    }
+
+    /**
+     * 鑾峰彇灏栧嘲骞宠胺鏁版嵁缁熻 - 鎸夊皬鏃剁粺璁�
+     */
+    @PostMapping("/segmentAnalysis/hour/export")
+    @ApiOperation(value = "鑾峰彇灏栧嘲骞宠胺鍒嗘椂缁熻")
+    public void segmentAnalysisHourExport(HttpServletResponse response, PeakValleyDTO dto) {
+        List<PeakValleyHourDataVO> list = rulesService.segmentAnalysisHourExport(dto);
+        ExcelUtil<PeakValleyHourDataVO> util = new ExcelUtil<PeakValleyHourDataVO>(PeakValleyHourDataVO.class);
+        util.exportExcel(response, list, "灏栧嘲骞宠胺鍒嗘椂缁熻鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇灏栧嘲骞宠胺鏁版嵁缁熻 - 鎸夊ぉ缁熻
+     */
+    @GetMapping("/segmentAnalysis/day")
+    @ApiOperation(value = "鑾峰彇灏栧嘲骞宠胺鍒嗘椂缁熻")
+    public AjaxResult segmentAnalysisDay(PeakValleyDTO dto) {
+        return AjaxResult.success(rulesService.segmentAnalysisDay(dto));
+    }
+
+
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/realtimedata/RealtimeDataController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/realtimedata/RealtimeDataController.java
new file mode 100644
index 0000000..8913f94
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/realtimedata/RealtimeDataController.java
@@ -0,0 +1,61 @@
+package com.zhitan.web.controller.realtimedata;
+
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.service.IEnergyIndexService;
+import com.zhitan.realtimedata.domain.TagValue;
+import com.zhitan.realtimedata.domain.TagValueResult;
+import com.zhitan.realtimedata.service.RealtimeDatabaseService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Controller
+@RequestMapping("/rtdb")
+public class RealtimeDataController extends BaseController {
+
+  @Autowired
+  private RealtimeDatabaseService realtimeDatabaseService;
+
+  @Autowired
+  private IEnergyIndexService energyIndexService;
+
+  @GetMapping("/retrieve/{tagCodes}")
+  @ResponseBody
+  public AjaxResult getLiveData(@PathVariable("tagCodes") String[] tagCodes) {
+    List<String> codes = new ArrayList<>(Arrays.asList(tagCodes));
+    List<TagValue> tagValues = realtimeDatabaseService.retrieve(codes);
+    List<EnergyIndex> energyIndices = energyIndexService.getEnergyIndexMeterByCodes(codes);
+    Map<String, EnergyIndex> mapValue = energyIndices.stream()
+        .collect(Collectors.toMap(EnergyIndex::getCode, m -> m));
+    List<TagValueResult> results = new ArrayList<>();
+    if (!tagValues.isEmpty()) {
+      tagValues.forEach(value -> {
+        TagValueResult result = new TagValueResult();
+        if (mapValue.containsKey(value.getTagCode())) {
+          EnergyIndex energyIndex = mapValue.get(value.getTagCode());
+          result.setTagName(energyIndex.getName());
+          result.setUnitId(energyIndex.getUnitId());
+          result.setMeteName(energyIndex.getMeterName());
+        }
+
+        result.setTagCode(value.getTagCode());
+        result.setValue(value.getValue());
+        result.setDataTime(value.getDataTime());
+        result.setQuality(value.getQuality());
+        results.add(result);
+      });
+    }
+    return AjaxResult.success(results);
+  }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/realtimedata/RealtimeTrendController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/realtimedata/RealtimeTrendController.java
new file mode 100644
index 0000000..9acf65f
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/realtimedata/RealtimeTrendController.java
@@ -0,0 +1,72 @@
+package com.zhitan.web.controller.realtimedata;
+
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.realtimedata.domain.dto.EnergyIndexMonitorDTO;
+import com.zhitan.realtimedata.domain.vo.EquipmentPointParametersExcel;
+import com.zhitan.realtimedata.domain.vo.ExportrealtimeTrendVO;
+import com.zhitan.realtimedata.service.RealtimeTrendService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * @Description 瀹炴椂鐩戞祴鎺у埗绫�
+ *
+ * @Author zhoubg
+ * @date 2024-10-15
+ **/
+@RestController
+@RequestMapping("rtdb/realtimeTrend")
+@Api(value = "瀹炴椂鐩戞帶",tags = {"瀹炴椂鐩戞帶"})
+public class RealtimeTrendController extends BaseController {
+
+    @Autowired
+    private RealtimeTrendService realtimeTrendService;
+
+    /**
+     * 鑾峰彇妯″瀷鑺傜偣鍏宠仈閲囬泦鎸囨爣
+     *
+     * @return
+     */
+    @GetMapping("/list")
+    @ApiOperation(value = "鑾峰彇妯″瀷鑺傜偣鍏宠仈閲囬泦鎸囨爣")
+    public AjaxResult list(@Validated EnergyIndexMonitorDTO energyIndexMonitorDTO){
+        return AjaxResult.success(realtimeTrendService.list(energyIndexMonitorDTO));
+    }
+
+    /**
+     * 鑾峰彇鍘嗗彶妯″瀷鑺傜偣鍏宠仈閲囬泦鎸囨爣鏁版嵁
+     * @param tagCode
+     * @param dataTime
+     * @return
+     */
+    @Log(title = "鑾峰彇鍘嗗彶妯″瀷鑺傜偣鍏宠仈閲囬泦鎸囨爣鏁版嵁", businessType = BusinessType.UPDATE)
+    @GetMapping("/chartByDay")
+    @ApiOperation(value = "鑾峰彇鍘嗗彶妯″瀷鑺傜偣鍏宠仈閲囬泦鎸囨爣鏁版嵁")
+    public AjaxResult lineList(@RequestParam String tagCode, @RequestParam String dataTime){
+        return AjaxResult.success(realtimeTrendService.chartByDay(tagCode,dataTime));
+    }
+
+    /**
+     * 瀵煎嚭瀹炴椂鐩戞祴Excel淇℃伅
+     * @return
+     */
+    @Log(title = "瀵煎嚭瀹炴椂鐩戞祴Excel淇℃伅", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    @ApiOperation(value = "瀵煎嚭瀹炴椂鐩戞祴Excel淇℃伅")
+    public void export(HttpServletResponse response , ExportrealtimeTrendVO exportrealtimeTrendVO){
+        List<EquipmentPointParametersExcel> list = realtimeTrendService.export(exportrealtimeTrendVO);
+        ExcelUtil<EquipmentPointParametersExcel> util = new ExcelUtil<EquipmentPointParametersExcel>(EquipmentPointParametersExcel.class);
+        util.exportExcel(response,list, "瀹炴椂鐩戞祴");
+    }
+
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/realtimedata/SysEquipmentFileController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/realtimedata/SysEquipmentFileController.java
new file mode 100644
index 0000000..c8c6bd6
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/realtimedata/SysEquipmentFileController.java
@@ -0,0 +1,103 @@
+package com.zhitan.web.controller.realtimedata;
+
+import com.zhitan.common.annotation.Anonymous;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.config.BaseConfig;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.file.FileUploadUtils;
+import com.zhitan.common.utils.uuid.UUID;
+import com.zhitan.realtimedata.domain.SysEquipmentFile;
+import com.zhitan.realtimedata.domain.SysSvgInfo;
+import com.zhitan.realtimedata.service.ISysEquipmentFileService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.util.List;
+
+
+/**
+ * 鎷撴墤鍥綜ontroller
+ *
+ * @author sys
+ * @date 2020-02-24
+ */
+@RestController
+@RequestMapping("/equipmentFile")
+public class SysEquipmentFileController extends BaseController {
+
+  @Resource
+  private ISysEquipmentFileService sysEquipmentFileService;
+
+  /**
+   * 涓婁紶鍥撅細浠呴檺浜庢牸寮忎负svg銆乯pg銆乸ng銆乬if
+   * @param file
+   * @return
+   * @throws IOException
+   */
+  @PostMapping(value = "/upload")
+  @Log(title = "绯荤粺鍥�", businessType = BusinessType.IMPORT)
+  public AjaxResult upload(MultipartFile file) throws IOException {
+    if (!file.isEmpty()) {
+      String fileSuffix = FileUploadUtils.getExtension(file);
+      if (StringUtils.containsIgnoreCase(".svg,.jpg,.png,.gif", fileSuffix)) {
+        //鏂囦欢鏈�缁堜繚瀛樼殑缁濆璺緞
+        String filePath = FileUploadUtils.upload(BaseConfig.getUploadPath(), file);
+        return AjaxResult.success(filePath);
+      }
+      return AjaxResult.error("鏂囦欢鏍煎紡閿欒");
+    }
+    return AjaxResult.error("绯荤粺鍥句笂浼犲け璐�");
+  }
+
+  /**
+   * 淇濆瓨鎷撴墤鍥撅細閫氳繃涓婁紶鏂囦欢鑾峰彇鐨勫湴鍧�鍜岃妭鐐逛繚瀛橈紝濡傛灉褰撳墠鑺傜偣瀛樺湪鍥惧湴鍧�锛屾洿鏂版帀锛堢洿鎺ュ湪SQL鍐呮墽琛岋級
+   */
+  @Log(title = "鎷撴墤鍥�", businessType = BusinessType.UPDATE)
+  @PutMapping
+  public AjaxResult edit(@RequestBody SysEquipmentFile sysEquipmentfile) {
+    try {
+      sysEquipmentFileService.saveEquipmentFile(sysEquipmentfile);
+      return AjaxResult.success();
+    } catch (Exception ex) {
+      return AjaxResult.error();
+    }
+  }
+
+  /**
+   * 淇濆瓨閰嶇疆鎺ュ彛锛氬厛鏍规嵁鑺傜偣鏁版嵁鍒犻櫎锛岀劧鍚庡啀鏂板鏁版嵁锛堢洿鎺ュ湪SQL鍐呮墽琛岋級
+   * @param nodeId
+   * @param svgInfo
+   * @return
+   */
+  @PutMapping("/setting/{nodeId}")
+  public AjaxResult saveSetting(@PathVariable("nodeId") String nodeId,
+      @RequestBody List<SysSvgInfo> svgInfo) {
+    try {
+      svgInfo.forEach(info -> info.setId(UUID.fastUUID().toString()));
+      sysEquipmentFileService.saveSettingInfo(nodeId, svgInfo);
+      return AjaxResult.success("淇濆瓨鎴愬姛锛�");
+    } catch (Exception ex) {
+      return AjaxResult.error("淇濆瓨澶辫触锛�");
+    }
+  }
+
+  /**
+   * 鏍规嵁鑺傜偣鏌ヨ鍙傛暟鍜岄噰闆嗙偣
+   * @param nodeId
+   * @return
+   */
+  @GetMapping("/configure/{nodeId}")
+  public AjaxResult getConfigure(@PathVariable("nodeId") String nodeId) {
+    try {
+      SysEquipmentFile sysEquipmentfile = sysEquipmentFileService.getConfigure(nodeId);
+      return AjaxResult.success(sysEquipmentfile);
+    } catch (Exception ex) {
+      return AjaxResult.error("鏌ヨ澶辫触锛�");
+    }
+  }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysConfigController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysConfigController.java
new file mode 100644
index 0000000..267d8f6
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysConfigController.java
@@ -0,0 +1,133 @@
+package com.zhitan.web.controller.system;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import javax.annotation.Resource;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.system.domain.SysConfig;
+import com.zhitan.system.service.ISysConfigService;
+
+/**
+ * 鍙傛暟閰嶇疆 淇℃伅鎿嶄綔澶勭悊
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/system/config")
+public class SysConfigController extends BaseController
+{
+    @Resource
+    private ISysConfigService configService;
+
+    /**
+     * 鑾峰彇鍙傛暟閰嶇疆鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysConfig config)
+    {
+        startPage();
+        List<SysConfig> list = configService.selectConfigList(config);
+        return getDataTable(list);
+    }
+
+    @Log(title = "鍙傛暟绠$悊", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:config:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysConfig config)
+    {
+        List<SysConfig> list = configService.selectConfigList(config);
+        ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class);
+        util.exportExcel(response, list, "鍙傛暟鏁版嵁");
+    }
+
+    /**
+     * 鏍规嵁鍙傛暟缂栧彿鑾峰彇璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:query')")
+    @GetMapping(value = "/{configId}")
+    public AjaxResult getInfo(@PathVariable Long configId)
+    {
+        return success(configService.selectConfigById(configId));
+    }
+
+    /**
+     * 鏍规嵁鍙傛暟閿悕鏌ヨ鍙傛暟鍊�
+     */
+    @GetMapping(value = "/configKey/{configKey}")
+    public AjaxResult getConfigKey(@PathVariable String configKey)
+    {
+        return success(configService.selectConfigByKey(configKey));
+    }
+
+    /**
+     * 鏂板鍙傛暟閰嶇疆
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:add')")
+    @Log(title = "鍙傛暟绠$悊", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysConfig config)
+    {
+        if (!configService.checkConfigKeyUnique(config))
+        {
+            return error("鏂板鍙傛暟'" + config.getConfigName() + "'澶辫触锛屽弬鏁伴敭鍚嶅凡瀛樺湪");
+        }
+        config.setCreateBy(getUsername());
+        return toAjax(configService.insertConfig(config));
+    }
+
+    /**
+     * 淇敼鍙傛暟閰嶇疆
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:edit')")
+    @Log(title = "鍙傛暟绠$悊", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysConfig config)
+    {
+        if (!configService.checkConfigKeyUnique(config))
+        {
+            return error("淇敼鍙傛暟'" + config.getConfigName() + "'澶辫触锛屽弬鏁伴敭鍚嶅凡瀛樺湪");
+        }
+        config.setUpdateBy(getUsername());
+        return toAjax(configService.updateConfig(config));
+    }
+
+    /**
+     * 鍒犻櫎鍙傛暟閰嶇疆
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:remove')")
+    @Log(title = "鍙傛暟绠$悊", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{configIds}")
+    public AjaxResult remove(@PathVariable Long[] configIds)
+    {
+        configService.deleteConfigByIds(configIds);
+        return success();
+    }
+
+    /**
+     * 鍒锋柊鍙傛暟缂撳瓨
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:remove')")
+    @Log(title = "鍙傛暟绠$悊", businessType = BusinessType.CLEAN)
+    @DeleteMapping("/refreshCache")
+    public AjaxResult refreshCache()
+    {
+        configService.resetConfigCache();
+        return success();
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysDeptController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysDeptController.java
new file mode 100644
index 0000000..f0d0eac
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysDeptController.java
@@ -0,0 +1,132 @@
+package com.zhitan.web.controller.system;
+
+import java.util.List;
+import org.apache.commons.lang3.ArrayUtils;
+import javax.annotation.Resource;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.constant.UserConstants;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.domain.entity.SysDept;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.system.service.ISysDeptService;
+
+/**
+ * 閮ㄩ棬淇℃伅
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/system/dept")
+public class SysDeptController extends BaseController
+{
+    @Resource
+    private ISysDeptService deptService;
+
+    /**
+     * 鑾峰彇閮ㄩ棬鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:list')")
+    @GetMapping("/list")
+    public AjaxResult list(SysDept dept)
+    {
+        List<SysDept> depts = deptService.selectDeptList(dept);
+        return success(depts);
+    }
+
+    /**
+     * 鏌ヨ閮ㄩ棬鍒楄〃锛堟帓闄よ妭鐐癸級
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:list')")
+    @GetMapping("/list/exclude/{deptId}")
+    public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId)
+    {
+        List<SysDept> depts = deptService.selectDeptList(new SysDept());
+        depts.removeIf(d -> d.getDeptId().intValue() == deptId || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + ""));
+        return success(depts);
+    }
+
+    /**
+     * 鏍规嵁閮ㄩ棬缂栧彿鑾峰彇璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:query')")
+    @GetMapping(value = "/{deptId}")
+    public AjaxResult getInfo(@PathVariable Long deptId)
+    {
+        deptService.checkDeptDataScope(deptId);
+        return success(deptService.selectDeptById(deptId));
+    }
+
+    /**
+     * 鏂板閮ㄩ棬
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:add')")
+    @Log(title = "閮ㄩ棬绠$悊", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysDept dept)
+    {
+        if (!deptService.checkDeptNameUnique(dept))
+        {
+            return error("鏂板閮ㄩ棬'" + dept.getDeptName() + "'澶辫触锛岄儴闂ㄥ悕绉板凡瀛樺湪");
+        }
+        dept.setCreateBy(getUsername());
+        return toAjax(deptService.insertDept(dept));
+    }
+
+    /**
+     * 淇敼閮ㄩ棬
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:edit')")
+    @Log(title = "閮ㄩ棬绠$悊", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysDept dept)
+    {
+        Long deptId = dept.getDeptId();
+        deptService.checkDeptDataScope(deptId);
+        if (!deptService.checkDeptNameUnique(dept))
+        {
+            return error("淇敼閮ㄩ棬'" + dept.getDeptName() + "'澶辫触锛岄儴闂ㄥ悕绉板凡瀛樺湪");
+        }
+        else if (dept.getParentId().equals(deptId))
+        {
+            return error("淇敼閮ㄩ棬'" + dept.getDeptName() + "'澶辫触锛屼笂绾ч儴闂ㄤ笉鑳芥槸鑷繁");
+        }
+        else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) && deptService.selectNormalChildrenDeptById(deptId) > 0)
+        {
+            return error("璇ラ儴闂ㄥ寘鍚湭鍋滅敤鐨勫瓙閮ㄩ棬锛�");
+        }
+        dept.setUpdateBy(getUsername());
+        return toAjax(deptService.updateDept(dept));
+    }
+
+    /**
+     * 鍒犻櫎閮ㄩ棬
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:remove')")
+    @Log(title = "閮ㄩ棬绠$悊", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{deptId}")
+    public AjaxResult remove(@PathVariable Long deptId)
+    {
+        if (deptService.hasChildByDeptId(deptId))
+        {
+            return warn("瀛樺湪涓嬬骇閮ㄩ棬,涓嶅厑璁稿垹闄�");
+        }
+        if (deptService.checkDeptExistUser(deptId))
+        {
+            return warn("閮ㄩ棬瀛樺湪鐢ㄦ埛,涓嶅厑璁稿垹闄�");
+        }
+        deptService.checkDeptDataScope(deptId);
+        return toAjax(deptService.deleteDeptById(deptId));
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysDictDataController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysDictDataController.java
new file mode 100644
index 0000000..1aec1e7
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysDictDataController.java
@@ -0,0 +1,115 @@
+package com.zhitan.web.controller.system;
+
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.domain.entity.SysDictData;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.system.service.ISysDictDataService;
+import com.zhitan.system.service.ISysDictTypeService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鏁版嵁瀛楀吀淇℃伅
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/system/dict/data")
+public class SysDictDataController extends BaseController
+{
+    @Resource
+    private ISysDictDataService dictDataService;
+
+    @Resource
+    private ISysDictTypeService dictTypeService;
+
+    @PreAuthorize("@ss.hasPermi('system:dict:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysDictData dictData)
+    {
+        startPage();
+        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
+        return getDataTable(list);
+    }
+
+    @Log(title = "瀛楀吀鏁版嵁", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:dict:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysDictData dictData)
+    {
+        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
+        ExcelUtil<SysDictData> util = new ExcelUtil<SysDictData>(SysDictData.class);
+        util.exportExcel(response, list, "瀛楀吀鏁版嵁");
+    }
+
+    /**
+     * 鏌ヨ瀛楀吀鏁版嵁璇︾粏
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:query')")
+    @GetMapping(value = "/{dictCode}")
+    public AjaxResult getInfo(@PathVariable Long dictCode)
+    {
+        return success(dictDataService.selectDictDataById(dictCode));
+    }
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁淇℃伅
+     */
+    @GetMapping(value = "/type/{dictType}")
+    public AjaxResult dictType(@PathVariable String dictType)
+    {
+        List<SysDictData> data = dictTypeService.selectDictDataByType(dictType);
+        if (StringUtils.isNull(data))
+        {
+            data = new ArrayList<SysDictData>();
+        }
+        return success(data);
+    }
+
+    /**
+     * 鏂板瀛楀吀绫诲瀷
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:add')")
+    @Log(title = "瀛楀吀鏁版嵁", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysDictData dict)
+    {
+        dict.setCreateBy(getUsername());
+        return toAjax(dictDataService.insertDictData(dict));
+    }
+
+    /**
+     * 淇敼淇濆瓨瀛楀吀绫诲瀷
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:edit')")
+    @Log(title = "瀛楀吀鏁版嵁", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysDictData dict)
+    {
+        dict.setUpdateBy(getUsername());
+        return toAjax(dictDataService.updateDictData(dict));
+    }
+
+    /**
+     * 鍒犻櫎瀛楀吀绫诲瀷
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
+    @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{dictCodes}")
+    public AjaxResult remove(@PathVariable Long[] dictCodes)
+    {
+        dictDataService.deleteDictDataByIds(dictCodes);
+        return success();
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysDictTypeController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysDictTypeController.java
new file mode 100644
index 0000000..d4b63a3
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysDictTypeController.java
@@ -0,0 +1,125 @@
+package com.zhitan.web.controller.system;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.domain.entity.SysDictType;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.system.service.ISysDictTypeService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 鏁版嵁瀛楀吀淇℃伅
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/system/dict/type")
+public class SysDictTypeController extends BaseController
+{
+    @Resource
+    private ISysDictTypeService dictTypeService;
+
+    @PreAuthorize("@ss.hasPermi('system:dict:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysDictType dictType, @RequestParam Long pageNum, @RequestParam Long pageSize)
+    {
+        Page<SysDictType> list = dictTypeService.selectDictTypePageList(dictType,pageNum,pageSize);
+        return getDataTable(list);
+    }
+
+    @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:dict:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysDictType dictType)
+    {
+        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
+        ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class);
+        util.exportExcel(response, list, "瀛楀吀绫诲瀷");
+    }
+
+    /**
+     * 鏌ヨ瀛楀吀绫诲瀷璇︾粏
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:query')")
+    @GetMapping(value = "/{dictId}")
+    public AjaxResult getInfo(@PathVariable Long dictId)
+    {
+        return success(dictTypeService.selectDictTypeById(dictId));
+    }
+
+    /**
+     * 鏂板瀛楀吀绫诲瀷
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:add')")
+    @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysDictType dict)
+    {
+        if (!dictTypeService.checkDictTypeUnique(dict))
+        {
+            return error("鏂板瀛楀吀'" + dict.getDictName() + "'澶辫触锛屽瓧鍏哥被鍨嬪凡瀛樺湪");
+        }
+        dict.setCreateBy(getUsername());
+        return toAjax(dictTypeService.insertDictType(dict));
+    }
+
+    /**
+     * 淇敼瀛楀吀绫诲瀷
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:edit')")
+    @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysDictType dict)
+    {
+        if (!dictTypeService.checkDictTypeUnique(dict))
+        {
+            return error("淇敼瀛楀吀'" + dict.getDictName() + "'澶辫触锛屽瓧鍏哥被鍨嬪凡瀛樺湪");
+        }
+        dict.setUpdateBy(getUsername());
+        return toAjax(dictTypeService.updateDictType(dict));
+    }
+
+    /**
+     * 鍒犻櫎瀛楀吀绫诲瀷
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
+    @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{dictIds}")
+    public AjaxResult remove(@PathVariable Long[] dictIds)
+    {
+        dictTypeService.deleteDictTypeByIds(dictIds);
+        return success();
+    }
+
+    /**
+     * 鍒锋柊瀛楀吀缂撳瓨
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
+    @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.CLEAN)
+    @DeleteMapping("/refreshCache")
+    public AjaxResult refreshCache()
+    {
+        dictTypeService.resetDictCache();
+        return success();
+    }
+
+    /**
+     * 鑾峰彇瀛楀吀閫夋嫨妗嗗垪琛�
+     */
+    @GetMapping("/optionselect")
+    public AjaxResult optionselect()
+    {
+        List<SysDictType> dictTypes = dictTypeService.selectDictTypeAll();
+        return success(dictTypes);
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysIndexController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysIndexController.java
new file mode 100644
index 0000000..fc39c67
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysIndexController.java
@@ -0,0 +1,30 @@
+package com.zhitan.web.controller.system;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.config.BaseConfig;
+import com.zhitan.common.utils.StringUtils;
+
+import javax.annotation.Resource;
+
+/**
+ * 棣栭〉
+ *
+ * @author zhitan
+ */
+@RestController
+public class SysIndexController
+{
+    /** 绯荤粺鍩虹閰嶇疆 */
+    @Resource
+    private BaseConfig baseConfig;
+
+    /**
+     * 璁块棶棣栭〉锛屾彁绀鸿
+     */
+    @RequestMapping("/")
+    public String index()
+    {
+        return StringUtils.format("娆㈣繋浣跨敤{}鍚庡彴绠$悊妗嗘灦锛屽綋鍓嶇増鏈細v{}锛岃閫氳繃鍓嶇鍦板潃璁块棶銆�", baseConfig.getName(), baseConfig.getVersion());
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysLoginController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysLoginController.java
new file mode 100644
index 0000000..3313afc
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysLoginController.java
@@ -0,0 +1,86 @@
+package com.zhitan.web.controller.system;
+
+import java.util.List;
+import java.util.Set;
+import javax.annotation.Resource;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.domain.entity.SysMenu;
+import com.zhitan.common.core.domain.entity.SysUser;
+import com.zhitan.common.core.domain.model.LoginBody;
+import com.zhitan.common.utils.SecurityUtils;
+import com.zhitan.framework.web.service.SysLoginService;
+import com.zhitan.framework.web.service.SysPermissionService;
+import com.zhitan.system.service.ISysMenuService;
+
+/**
+ * 鐧诲綍楠岃瘉
+ * 
+ * @author zhitan
+ */
+@RestController
+public class SysLoginController
+{
+    @Resource
+    private SysLoginService loginService;
+
+    @Resource
+    private ISysMenuService menuService;
+
+    @Resource
+    private SysPermissionService permissionService;
+
+    /**
+     * 鐧诲綍鏂规硶
+     * 
+     * @param loginBody 鐧诲綍淇℃伅
+     * @return 缁撴灉
+     */
+    @PostMapping("/login")
+    public AjaxResult login(@RequestBody LoginBody loginBody)
+    {
+        AjaxResult ajax = AjaxResult.success();
+        // 鐢熸垚浠ょ墝
+        String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
+                loginBody.getUuid());
+        ajax.put(Constants.TOKEN, token);
+        return ajax;
+    }
+
+    /**
+     * 鑾峰彇鐢ㄦ埛淇℃伅
+     * 
+     * @return 鐢ㄦ埛淇℃伅
+     */
+    @GetMapping("getInfo")
+    public AjaxResult getInfo()
+    {
+        SysUser user = SecurityUtils.getLoginUser().getUser();
+        // 瑙掕壊闆嗗悎
+        Set<String> roles = permissionService.getRolePermission(user);
+        // 鏉冮檺闆嗗悎
+        Set<String> permissions = permissionService.getMenuPermission(user);
+        AjaxResult ajax = AjaxResult.success();
+        ajax.put("user", user);
+        ajax.put("roles", roles);
+        ajax.put("permissions", permissions);
+        return ajax;
+    }
+
+    /**
+     * 鑾峰彇璺敱淇℃伅
+     * 
+     * @return 璺敱淇℃伅
+     */
+    @GetMapping("getRouters")
+    public AjaxResult getRouters()
+    {
+        Long userId = SecurityUtils.getUserId();
+        List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
+        return AjaxResult.success(menuService.buildMenus(menus));
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysMenuController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysMenuController.java
new file mode 100644
index 0000000..4119e48
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysMenuController.java
@@ -0,0 +1,142 @@
+package com.zhitan.web.controller.system;
+
+import java.util.List;
+import javax.annotation.Resource;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.constant.UserConstants;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.domain.entity.SysMenu;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.system.service.ISysMenuService;
+
+/**
+ * 鑿滃崟淇℃伅
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/system/menu")
+public class SysMenuController extends BaseController
+{
+    @Resource
+    private ISysMenuService menuService;
+
+    /**
+     * 鑾峰彇鑿滃崟鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:menu:list')")
+    @GetMapping("/list")
+    public AjaxResult list(SysMenu menu)
+    {
+        List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
+        return success(menus);
+    }
+
+    /**
+     * 鏍规嵁鑿滃崟缂栧彿鑾峰彇璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('system:menu:query')")
+    @GetMapping(value = "/{menuId}")
+    public AjaxResult getInfo(@PathVariable Long menuId)
+    {
+        return success(menuService.selectMenuById(menuId));
+    }
+
+    /**
+     * 鑾峰彇鑿滃崟涓嬫媺鏍戝垪琛�
+     */
+    @GetMapping("/treeselect")
+    public AjaxResult treeselect(SysMenu menu)
+    {
+        List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
+        return success(menuService.buildMenuTreeSelect(menus));
+    }
+
+    /**
+     * 鍔犺浇瀵瑰簲瑙掕壊鑿滃崟鍒楄〃鏍�
+     */
+    @GetMapping(value = "/roleMenuTreeselect/{roleId}")
+    public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
+    {
+        List<SysMenu> menus = menuService.selectMenuList(getUserId());
+        AjaxResult ajax = AjaxResult.success();
+        ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));
+        ajax.put("menus", menuService.buildMenuTreeSelect(menus));
+        return ajax;
+    }
+
+    /**
+     * 鏂板鑿滃崟
+     */
+    @PreAuthorize("@ss.hasPermi('system:menu:add')")
+    @Log(title = "鑿滃崟绠$悊", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysMenu menu)
+    {
+        if (!menuService.checkMenuNameUnique(menu))
+        {
+            return error("鏂板鑿滃崟'" + menu.getMenuName() + "'澶辫触锛岃彍鍗曞悕绉板凡瀛樺湪");
+        }
+        else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
+        {
+            return error("鏂板鑿滃崟'" + menu.getMenuName() + "'澶辫触锛屽湴鍧�蹇呴』浠ttp(s)://寮�澶�");
+        }
+        menu.setCreateBy(getUsername());
+        return toAjax(menuService.insertMenu(menu));
+    }
+
+    /**
+     * 淇敼鑿滃崟
+     */
+    @PreAuthorize("@ss.hasPermi('system:menu:edit')")
+    @Log(title = "鑿滃崟绠$悊", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysMenu menu)
+    {
+        if (!menuService.checkMenuNameUnique(menu))
+        {
+            return error("淇敼鑿滃崟'" + menu.getMenuName() + "'澶辫触锛岃彍鍗曞悕绉板凡瀛樺湪");
+        }
+        else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
+        {
+            return error("淇敼鑿滃崟'" + menu.getMenuName() + "'澶辫触锛屽湴鍧�蹇呴』浠ttp(s)://寮�澶�");
+        }
+        else if (menu.getMenuId().equals(menu.getParentId()))
+        {
+            return error("淇敼鑿滃崟'" + menu.getMenuName() + "'澶辫触锛屼笂绾ц彍鍗曚笉鑳介�夋嫨鑷繁");
+        }
+        menu.setUpdateBy(getUsername());
+        return toAjax(menuService.updateMenu(menu));
+    }
+
+    /**
+     * 鍒犻櫎鑿滃崟
+     */
+    @PreAuthorize("@ss.hasPermi('system:menu:remove')")
+    @Log(title = "鑿滃崟绠$悊", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{menuId}")
+    public AjaxResult remove(@PathVariable("menuId") Long menuId)
+    {
+        if (menuService.hasChildByMenuId(menuId))
+        {
+            return warn("瀛樺湪瀛愯彍鍗�,涓嶅厑璁稿垹闄�");
+        }
+        if (menuService.checkMenuExistRole(menuId))
+        {
+            return warn("鑿滃崟宸插垎閰�,涓嶅厑璁稿垹闄�");
+        }
+        return toAjax(menuService.deleteMenuById(menuId));
+    }
+}
\ No newline at end of file
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysNameConfigController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysNameConfigController.java
new file mode 100644
index 0000000..fe0c86d
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysNameConfigController.java
@@ -0,0 +1,48 @@
+package com.zhitan.web.controller.system;
+
+import com.zhitan.common.annotation.Anonymous;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.system.domain.SysNameConfig;
+import com.zhitan.system.service.ISysNameConfigService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * 绯荤粺鍚嶇О閰嶇疆Controller
+ * 
+ * @author ZhiTan
+ * @date 2024-11-05
+ */
+@RestController
+@RequestMapping("/system/nameconfig")
+public class SysNameConfigController extends BaseController
+{
+    @Resource
+    private ISysNameConfigService sysNameConfigService;
+
+
+    /**
+     * 鏂板绯荤粺鍚嶇О閰嶇疆
+     */
+    @Log(title = "绯荤粺鍚嶇О閰嶇疆", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult save(@RequestBody SysNameConfig sysNameConfig)
+    {
+        return toAjax(sysNameConfigService.saveOrUpdate(sysNameConfig));
+    }
+
+    /**
+     * 鏂板绯荤粺鍚嶇О閰嶇疆
+     */
+    @GetMapping
+    @Anonymous
+    public AjaxResult getSysNameConfig()
+    {
+        return AjaxResult.success(sysNameConfigService.getSysNameConfig());
+    }
+
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysNoticeController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysNoticeController.java
new file mode 100644
index 0000000..364ead4
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysNoticeController.java
@@ -0,0 +1,91 @@
+package com.zhitan.web.controller.system;
+
+import java.util.List;
+import javax.annotation.Resource;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.system.domain.SysNotice;
+import com.zhitan.system.service.ISysNoticeService;
+
+/**
+ * 鍏憡 淇℃伅鎿嶄綔澶勭悊
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/system/notice")
+public class SysNoticeController extends BaseController
+{
+    @Resource
+    private ISysNoticeService noticeService;
+
+    /**
+     * 鑾峰彇閫氱煡鍏憡鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:notice:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysNotice notice)
+    {
+        startPage();
+        List<SysNotice> list = noticeService.selectNoticeList(notice);
+        return getDataTable(list);
+    }
+
+    /**
+     * 鏍规嵁閫氱煡鍏憡缂栧彿鑾峰彇璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('system:notice:query')")
+    @GetMapping(value = "/{noticeId}")
+    public AjaxResult getInfo(@PathVariable Long noticeId)
+    {
+        return success(noticeService.selectNoticeById(noticeId));
+    }
+
+    /**
+     * 鏂板閫氱煡鍏憡
+     */
+    @PreAuthorize("@ss.hasPermi('system:notice:add')")
+    @Log(title = "閫氱煡鍏憡", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysNotice notice)
+    {
+        notice.setCreateBy(getUsername());
+        return toAjax(noticeService.insertNotice(notice));
+    }
+
+    /**
+     * 淇敼閫氱煡鍏憡
+     */
+    @PreAuthorize("@ss.hasPermi('system:notice:edit')")
+    @Log(title = "閫氱煡鍏憡", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysNotice notice)
+    {
+        notice.setUpdateBy(getUsername());
+        return toAjax(noticeService.updateNotice(notice));
+    }
+
+    /**
+     * 鍒犻櫎閫氱煡鍏憡
+     */
+    @PreAuthorize("@ss.hasPermi('system:notice:remove')")
+    @Log(title = "閫氱煡鍏憡", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{noticeIds}")
+    public AjaxResult remove(@PathVariable Long[] noticeIds)
+    {
+        return toAjax(noticeService.deleteNoticeByIds(noticeIds));
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysPostController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysPostController.java
new file mode 100644
index 0000000..9db471e
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysPostController.java
@@ -0,0 +1,129 @@
+package com.zhitan.web.controller.system;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import javax.annotation.Resource;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.system.domain.SysPost;
+import com.zhitan.system.service.ISysPostService;
+
+/**
+ * 宀椾綅淇℃伅鎿嶄綔澶勭悊
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/system/post")
+public class SysPostController extends BaseController
+{
+    @Resource
+    private ISysPostService postService;
+
+    /**
+     * 鑾峰彇宀椾綅鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:post:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysPost post)
+    {
+        startPage();
+        List<SysPost> list = postService.selectPostList(post);
+        return getDataTable(list);
+    }
+    
+    @Log(title = "宀椾綅绠$悊", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:post:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysPost post)
+    {
+        List<SysPost> list = postService.selectPostList(post);
+        ExcelUtil<SysPost> util = new ExcelUtil<SysPost>(SysPost.class);
+        util.exportExcel(response, list, "宀椾綅鏁版嵁");
+    }
+
+    /**
+     * 鏍规嵁宀椾綅缂栧彿鑾峰彇璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('system:post:query')")
+    @GetMapping(value = "/{postId}")
+    public AjaxResult getInfo(@PathVariable Long postId)
+    {
+        return success(postService.selectPostById(postId));
+    }
+
+    /**
+     * 鏂板宀椾綅
+     */
+    @PreAuthorize("@ss.hasPermi('system:post:add')")
+    @Log(title = "宀椾綅绠$悊", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysPost post)
+    {
+        if (!postService.checkPostNameUnique(post))
+        {
+            return error("鏂板宀椾綅'" + post.getPostName() + "'澶辫触锛屽矖浣嶅悕绉板凡瀛樺湪");
+        }
+        else if (!postService.checkPostCodeUnique(post))
+        {
+            return error("鏂板宀椾綅'" + post.getPostName() + "'澶辫触锛屽矖浣嶇紪鐮佸凡瀛樺湪");
+        }
+        post.setCreateBy(getUsername());
+        return toAjax(postService.insertPost(post));
+    }
+
+    /**
+     * 淇敼宀椾綅
+     */
+    @PreAuthorize("@ss.hasPermi('system:post:edit')")
+    @Log(title = "宀椾綅绠$悊", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysPost post)
+    {
+        if (!postService.checkPostNameUnique(post))
+        {
+            return error("淇敼宀椾綅'" + post.getPostName() + "'澶辫触锛屽矖浣嶅悕绉板凡瀛樺湪");
+        }
+        else if (!postService.checkPostCodeUnique(post))
+        {
+            return error("淇敼宀椾綅'" + post.getPostName() + "'澶辫触锛屽矖浣嶇紪鐮佸凡瀛樺湪");
+        }
+        post.setUpdateBy(getUsername());
+        return toAjax(postService.updatePost(post));
+    }
+
+    /**
+     * 鍒犻櫎宀椾綅
+     */
+    @PreAuthorize("@ss.hasPermi('system:post:remove')")
+    @Log(title = "宀椾綅绠$悊", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{postIds}")
+    public AjaxResult remove(@PathVariable Long[] postIds)
+    {
+        return toAjax(postService.deletePostByIds(postIds));
+    }
+
+    /**
+     * 鑾峰彇宀椾綅閫夋嫨妗嗗垪琛�
+     */
+    @GetMapping("/optionselect")
+    public AjaxResult optionselect()
+    {
+        List<SysPost> posts = postService.selectPostAll();
+        return success(posts);
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysProfileController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysProfileController.java
new file mode 100644
index 0000000..87baa9d
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysProfileController.java
@@ -0,0 +1,138 @@
+package com.zhitan.web.controller.system;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.config.BaseConfig;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.domain.entity.SysUser;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.SecurityUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.file.FileUploadUtils;
+import com.zhitan.common.utils.file.MimeTypeUtils;
+import com.zhitan.framework.web.service.TokenService;
+import com.zhitan.system.service.ISysUserService;
+
+import javax.annotation.Resource;
+
+/**
+ * 涓汉淇℃伅 涓氬姟澶勭悊
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/system/user/profile")
+public class SysProfileController extends BaseController
+{
+    @Resource
+    private ISysUserService userService;
+
+    @Resource
+    private TokenService tokenService;
+
+    /**
+     * 涓汉淇℃伅
+     */
+    @GetMapping
+    public AjaxResult profile()
+    {
+        LoginUser loginUser = getLoginUser();
+        SysUser user = loginUser.getUser();
+        AjaxResult ajax = AjaxResult.success(user);
+        ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername()));
+        ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername()));
+        return ajax;
+    }
+
+    /**
+     * 淇敼鐢ㄦ埛
+     */
+    @Log(title = "涓汉淇℃伅", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult updateProfile(@RequestBody SysUser user)
+    {
+        LoginUser loginUser = getLoginUser();
+        SysUser currentUser = loginUser.getUser();
+        currentUser.setNickName(user.getNickName());
+        currentUser.setEmail(user.getEmail());
+        currentUser.setPhoneNumber(user.getPhoneNumber());
+        currentUser.setSex(user.getSex());
+        if (StringUtils.isNotEmpty(user.getPhoneNumber()) && !userService.checkPhoneUnique(currentUser))
+        {
+            return error("淇敼鐢ㄦ埛'" + loginUser.getUsername() + "'澶辫触锛屾墜鏈哄彿鐮佸凡瀛樺湪");
+        }
+        if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(currentUser))
+        {
+            return error("淇敼鐢ㄦ埛'" + loginUser.getUsername() + "'澶辫触锛岄偖绠辫处鍙峰凡瀛樺湪");
+        }
+        if (userService.updateUserProfile(currentUser) > 0)
+        {
+            // 鏇存柊缂撳瓨鐢ㄦ埛淇℃伅
+            tokenService.setLoginUser(loginUser);
+            return success();
+        }
+        return error("淇敼涓汉淇℃伅寮傚父锛岃鑱旂郴绠$悊鍛�");
+    }
+
+    /**
+     * 閲嶇疆瀵嗙爜
+     */
+    @Log(title = "涓汉淇℃伅", businessType = BusinessType.UPDATE)
+    @PutMapping("/updatePwd")
+    public AjaxResult updatePwd(String oldPassword, String newPassword)
+    {
+        LoginUser loginUser = getLoginUser();
+        String userName = loginUser.getUsername();
+        String password = loginUser.getPassword();
+        if (!SecurityUtils.matchesPassword(oldPassword, password))
+        {
+            return error("淇敼瀵嗙爜澶辫触锛屾棫瀵嗙爜閿欒");
+        }
+        if (SecurityUtils.matchesPassword(newPassword, password))
+        {
+            return error("鏂板瘑鐮佷笉鑳戒笌鏃у瘑鐮佺浉鍚�");
+        }
+        newPassword = SecurityUtils.encryptPassword(newPassword);
+        if (userService.resetUserPwd(userName, newPassword) > 0)
+        {
+            // 鏇存柊缂撳瓨鐢ㄦ埛瀵嗙爜
+            loginUser.getUser().setPassword(newPassword);
+            tokenService.setLoginUser(loginUser);
+            return success();
+        }
+        return error("淇敼瀵嗙爜寮傚父锛岃鑱旂郴绠$悊鍛�");
+    }
+
+    /**
+     * 澶村儚涓婁紶
+     */
+    @Log(title = "鐢ㄦ埛澶村儚", businessType = BusinessType.UPDATE)
+    @PostMapping("/avatar")
+    public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws Exception
+    {
+        if (!file.isEmpty())
+        {
+            LoginUser loginUser = getLoginUser();
+            String avatar = FileUploadUtils.upload(BaseConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION);
+            if (userService.updateUserAvatar(loginUser.getUsername(), avatar))
+            {
+                AjaxResult ajax = AjaxResult.success();
+                ajax.put("imgUrl", avatar);
+                // 鏇存柊缂撳瓨鐢ㄦ埛澶村儚
+                loginUser.getUser().setAvatar(avatar);
+                tokenService.setLoginUser(loginUser);
+                return ajax;
+            }
+        }
+        return error("涓婁紶鍥剧墖寮傚父锛岃鑱旂郴绠$悊鍛�");
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysRegisterController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysRegisterController.java
new file mode 100644
index 0000000..bc1020a
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysRegisterController.java
@@ -0,0 +1,38 @@
+package com.zhitan.web.controller.system;
+
+import javax.annotation.Resource;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.domain.model.RegisterBody;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.framework.web.service.SysRegisterService;
+import com.zhitan.system.service.ISysConfigService;
+
+/**
+ * 娉ㄥ唽楠岃瘉
+ * 
+ * @author zhitan
+ */
+@RestController
+public class SysRegisterController extends BaseController
+{
+    @Resource
+    private SysRegisterService registerService;
+
+    @Resource
+    private ISysConfigService configService;
+
+    @PostMapping("/register")
+    public AjaxResult register(@RequestBody RegisterBody user)
+    {
+        if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
+        {
+            return error("褰撳墠绯荤粺娌℃湁寮�鍚敞鍐屽姛鑳斤紒");
+        }
+        String msg = registerService.register(user);
+        return StringUtils.isEmpty(msg) ? success() : error(msg);
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysRoleController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysRoleController.java
new file mode 100644
index 0000000..64653ce
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysRoleController.java
@@ -0,0 +1,262 @@
+package com.zhitan.web.controller.system;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import javax.annotation.Resource;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.domain.entity.SysDept;
+import com.zhitan.common.core.domain.entity.SysRole;
+import com.zhitan.common.core.domain.entity.SysUser;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.framework.web.service.SysPermissionService;
+import com.zhitan.framework.web.service.TokenService;
+import com.zhitan.system.domain.SysUserRole;
+import com.zhitan.system.service.ISysDeptService;
+import com.zhitan.system.service.ISysRoleService;
+import com.zhitan.system.service.ISysUserService;
+
+/**
+ * 瑙掕壊淇℃伅
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/system/role")
+public class SysRoleController extends BaseController
+{
+    @Resource
+    private ISysRoleService roleService;
+
+    @Resource
+    private TokenService tokenService;
+
+    @Resource
+    private SysPermissionService permissionService;
+
+    @Resource
+    private ISysUserService userService;
+
+    @Resource
+    private ISysDeptService deptService;
+
+    @PreAuthorize("@ss.hasPermi('system:role:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysRole role)
+    {
+        startPage();
+        List<SysRole> list = roleService.selectRoleList(role);
+        return getDataTable(list);
+    }
+
+    @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:role:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysRole role)
+    {
+        List<SysRole> list = roleService.selectRoleList(role);
+        ExcelUtil<SysRole> util = new ExcelUtil<SysRole>(SysRole.class);
+        util.exportExcel(response, list, "瑙掕壊鏁版嵁");
+    }
+
+    /**
+     * 鏍规嵁瑙掕壊缂栧彿鑾峰彇璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:query')")
+    @GetMapping(value = "/{roleId}")
+    public AjaxResult getInfo(@PathVariable Long roleId)
+    {
+        roleService.checkRoleDataScope(roleId);
+        return success(roleService.selectRoleById(roleId));
+    }
+
+    /**
+     * 鏂板瑙掕壊
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:add')")
+    @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysRole role)
+    {
+        if (!roleService.checkRoleNameUnique(role))
+        {
+            return error("鏂板瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑹插悕绉板凡瀛樺湪");
+        }
+        else if (!roleService.checkRoleKeyUnique(role))
+        {
+            return error("鏂板瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑹叉潈闄愬凡瀛樺湪");
+        }
+        role.setCreateBy(getUsername());
+        return toAjax(roleService.insertRole(role));
+
+    }
+
+    /**
+     * 淇敼淇濆瓨瑙掕壊
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysRole role)
+    {
+        roleService.checkRoleAllowed(role);
+        roleService.checkRoleDataScope(role.getRoleId());
+        if (!roleService.checkRoleNameUnique(role))
+        {
+            return error("淇敼瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑹插悕绉板凡瀛樺湪");
+        }
+        else if (!roleService.checkRoleKeyUnique(role))
+        {
+            return error("淇敼瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑹叉潈闄愬凡瀛樺湪");
+        }
+        role.setUpdateBy(getUsername());
+        
+        if (roleService.updateRole(role) > 0)
+        {
+            // 鏇存柊缂撳瓨鐢ㄦ埛鏉冮檺
+            LoginUser loginUser = getLoginUser();
+            if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin())
+            {
+                loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser()));
+                loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName()));
+                tokenService.setLoginUser(loginUser);
+            }
+            return success();
+        }
+        return error("淇敼瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑱旂郴绠$悊鍛�");
+    }
+
+    /**
+     * 淇敼淇濆瓨鏁版嵁鏉冮檺
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.UPDATE)
+    @PutMapping("/dataScope")
+    public AjaxResult dataScope(@RequestBody SysRole role)
+    {
+        roleService.checkRoleAllowed(role);
+        roleService.checkRoleDataScope(role.getRoleId());
+        return toAjax(roleService.authDataScope(role));
+    }
+
+    /**
+     * 鐘舵�佷慨鏀�
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.UPDATE)
+    @PutMapping("/changeStatus")
+    public AjaxResult changeStatus(@RequestBody SysRole role)
+    {
+        roleService.checkRoleAllowed(role);
+        roleService.checkRoleDataScope(role.getRoleId());
+        role.setUpdateBy(getUsername());
+        return toAjax(roleService.updateRoleStatus(role));
+    }
+
+    /**
+     * 鍒犻櫎瑙掕壊
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:remove')")
+    @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{roleIds}")
+    public AjaxResult remove(@PathVariable Long[] roleIds)
+    {
+        return toAjax(roleService.deleteRoleByIds(roleIds));
+    }
+
+    /**
+     * 鑾峰彇瑙掕壊閫夋嫨妗嗗垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:query')")
+    @GetMapping("/optionselect")
+    public AjaxResult optionselect()
+    {
+        return success(roleService.selectRoleAll());
+    }
+
+    /**
+     * 鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:list')")
+    @GetMapping("/authUser/allocatedList")
+    public TableDataInfo allocatedList(SysUser user)
+    {
+        startPage();
+        List<SysUser> list = userService.selectAllocatedList(user);
+        return getDataTable(list);
+    }
+
+    /**
+     * 鏌ヨ鏈垎閰嶇敤鎴疯鑹插垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:list')")
+    @GetMapping("/authUser/unallocatedList")
+    public TableDataInfo unallocatedList(SysUser user)
+    {
+        startPage();
+        List<SysUser> list = userService.selectUnallocatedList(user);
+        return getDataTable(list);
+    }
+
+    /**
+     * 鍙栨秷鎺堟潈鐢ㄦ埛
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.GRANT)
+    @PutMapping("/authUser/cancel")
+    public AjaxResult cancelAuthUser(@RequestBody SysUserRole userRole)
+    {
+        return toAjax(roleService.deleteAuthUser(userRole));
+    }
+
+    /**
+     * 鎵归噺鍙栨秷鎺堟潈鐢ㄦ埛
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.GRANT)
+    @PutMapping("/authUser/cancelAll")
+    public AjaxResult cancelAuthUserAll(Long roleId, Long[] userIds)
+    {
+        return toAjax(roleService.deleteAuthUsers(roleId, userIds));
+    }
+
+    /**
+     * 鎵归噺閫夋嫨鐢ㄦ埛鎺堟潈
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.GRANT)
+    @PutMapping("/authUser/selectAll")
+    public AjaxResult selectAuthUserAll(Long roleId, Long[] userIds)
+    {
+        roleService.checkRoleDataScope(roleId);
+        return toAjax(roleService.insertAuthUsers(roleId, userIds));
+    }
+
+    /**
+     * 鑾峰彇瀵瑰簲瑙掕壊閮ㄩ棬鏍戝垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:query')")
+    @GetMapping(value = "/deptTree/{roleId}")
+    public AjaxResult deptTree(@PathVariable("roleId") Long roleId)
+    {
+        AjaxResult ajax = AjaxResult.success();
+        ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId));
+        ajax.put("depts", deptService.selectDeptTreeList(new SysDept()));
+        return ajax;
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysUserController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysUserController.java
new file mode 100644
index 0000000..98c4bc4
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysUserController.java
@@ -0,0 +1,251 @@
+package com.zhitan.web.controller.system;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.lang3.ArrayUtils;
+import javax.annotation.Resource;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.domain.entity.SysDept;
+import com.zhitan.common.core.domain.entity.SysRole;
+import com.zhitan.common.core.domain.entity.SysUser;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.SecurityUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.system.service.ISysDeptService;
+import com.zhitan.system.service.ISysPostService;
+import com.zhitan.system.service.ISysRoleService;
+import com.zhitan.system.service.ISysUserService;
+
+/**
+ * 鐢ㄦ埛淇℃伅
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/system/user")
+public class SysUserController extends BaseController
+{
+    @Resource
+    private ISysUserService userService;
+
+    @Resource
+    private ISysRoleService roleService;
+
+    @Resource
+    private ISysDeptService deptService;
+
+    @Resource
+    private ISysPostService postService;
+
+    /**
+     * 鑾峰彇鐢ㄦ埛鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysUser user)
+    {
+        startPage();
+        List<SysUser> list = userService.selectUserList(user);
+        return getDataTable(list);
+    }
+
+    @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:user:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysUser user)
+    {
+        List<SysUser> list = userService.selectUserList(user);
+        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
+        util.exportExcel(response, list, "鐢ㄦ埛鏁版嵁");
+    }
+
+    @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.IMPORT)
+    @PreAuthorize("@ss.hasPermi('system:user:import')")
+    @PostMapping("/importData")
+    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
+        List<SysUser> userList = util.importExcel(file.getInputStream());
+        String operName = getUsername();
+        String message = userService.importUser(userList, updateSupport, operName);
+        return success(message);
+    }
+
+    @PostMapping("/importTemplate")
+    public void importTemplate(HttpServletResponse response)
+    {
+        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
+        util.importTemplateExcel(response, "鐢ㄦ埛鏁版嵁");
+    }
+
+    /**
+     * 鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:query')")
+    @GetMapping(value = { "/", "/{userId}" })
+    public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
+    {
+        userService.checkUserDataScope(userId);
+        AjaxResult ajax = AjaxResult.success();
+        List<SysRole> roles = roleService.selectRoleAll();
+        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
+        ajax.put("posts", postService.selectPostAll());
+        if (StringUtils.isNotNull(userId))
+        {
+            SysUser sysUser = userService.selectUserById(userId);
+            ajax.put(AjaxResult.DATA_TAG, sysUser);
+            ajax.put("postIds", postService.selectPostListByUserId(userId));
+            ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList()));
+        }
+        return ajax;
+    }
+
+    /**
+     * 鏂板鐢ㄦ埛
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:add')")
+    @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysUser user)
+    {
+        if (!userService.checkUserNameUnique(user))
+        {
+            return error("鏂板鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛岀櫥褰曡处鍙峰凡瀛樺湪");
+        }
+        else if (StringUtils.isNotEmpty(user.getPhoneNumber()) && !userService.checkPhoneUnique(user))
+        {
+            return error("鏂板鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛屾墜鏈哄彿鐮佸凡瀛樺湪");
+        }
+        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
+        {
+            return error("鏂板鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛岄偖绠辫处鍙峰凡瀛樺湪");
+        }
+        user.setCreateBy(getUsername());
+        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
+        return toAjax(userService.insertUser(user));
+    }
+
+    /**
+     * 淇敼鐢ㄦ埛
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:edit')")
+    @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysUser user)
+    {
+        userService.checkUserAllowed(user);
+        userService.checkUserDataScope(user.getUserId());
+        if (!userService.checkUserNameUnique(user))
+        {
+            return error("淇敼鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛岀櫥褰曡处鍙峰凡瀛樺湪");
+        }
+        else if (StringUtils.isNotEmpty(user.getPhoneNumber()) && !userService.checkPhoneUnique(user))
+        {
+            return error("淇敼鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛屾墜鏈哄彿鐮佸凡瀛樺湪");
+        }
+        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
+        {
+            return error("淇敼鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛岄偖绠辫处鍙峰凡瀛樺湪");
+        }
+        user.setUpdateBy(getUsername());
+        return toAjax(userService.updateUser(user));
+    }
+
+    /**
+     * 鍒犻櫎鐢ㄦ埛
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:remove')")
+    @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{userIds}")
+    public AjaxResult remove(@PathVariable Long[] userIds)
+    {
+        if (ArrayUtils.contains(userIds, getUserId()))
+        {
+            return error("褰撳墠鐢ㄦ埛涓嶈兘鍒犻櫎");
+        }
+        return toAjax(userService.deleteUserByIds(userIds));
+    }
+
+    /**
+     * 閲嶇疆瀵嗙爜
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
+    @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.UPDATE)
+    @PutMapping("/resetPwd")
+    public AjaxResult resetPwd(@RequestBody SysUser user)
+    {
+        userService.checkUserAllowed(user);
+        userService.checkUserDataScope(user.getUserId());
+        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
+        user.setUpdateBy(getUsername());
+        return toAjax(userService.resetPwd(user));
+    }
+
+    /**
+     * 鐘舵�佷慨鏀�
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:edit')")
+    @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.UPDATE)
+    @PutMapping("/changeStatus")
+    public AjaxResult changeStatus(@RequestBody SysUser user)
+    {
+        userService.checkUserAllowed(user);
+        userService.checkUserDataScope(user.getUserId());
+        user.setUpdateBy(getUsername());
+        return toAjax(userService.updateUserStatus(user));
+    }
+
+    /**
+     * 鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇鎺堟潈瑙掕壊
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:query')")
+    @GetMapping("/authRole/{userId}")
+    public AjaxResult authRole(@PathVariable("userId") Long userId)
+    {
+        AjaxResult ajax = AjaxResult.success();
+        SysUser user = userService.selectUserById(userId);
+        List<SysRole> roles = roleService.selectRolesByUserId(userId);
+        ajax.put("user", user);
+        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
+        return ajax;
+    }
+
+    /**
+     * 鐢ㄦ埛鎺堟潈瑙掕壊
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:edit')")
+    @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.GRANT)
+    @PutMapping("/authRole")
+    public AjaxResult insertAuthRole(Long userId, Long[] roleIds)
+    {
+        userService.checkUserDataScope(userId);
+        userService.insertUserAuth(userId, roleIds);
+        return success();
+    }
+
+    /**
+     * 鑾峰彇閮ㄩ棬鏍戝垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:list')")
+    @GetMapping("/deptTree")
+    public AjaxResult deptTree(SysDept dept)
+    {
+        return success(deptService.selectDeptTreeList(dept));
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/tool/TestController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/tool/TestController.java
new file mode 100644
index 0000000..babd5a2
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/tool/TestController.java
@@ -0,0 +1,183 @@
+package com.zhitan.web.controller.tool;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.R;
+import com.zhitan.common.utils.StringUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * swagger 鐢ㄦ埛娴嬭瘯鏂规硶
+ * 
+ * @author zhitan
+ */
+@Api("鐢ㄦ埛淇℃伅绠$悊")
+@RestController
+@RequestMapping("/test/user")
+public class TestController extends BaseController
+{
+    private final static Map<Integer, UserEntity> users = new LinkedHashMap<Integer, UserEntity>();
+    {
+        users.put(1, new UserEntity(1, "admin", "admin123", "15888888888"));
+        users.put(2, new UserEntity(2, "ry", "admin123", "15666666666"));
+    }
+
+    @ApiOperation("鑾峰彇鐢ㄦ埛鍒楄〃")
+    @GetMapping("/list")
+    public R<List<UserEntity>> userList()
+    {
+        List<UserEntity> userList = new ArrayList<UserEntity>(users.values());
+        return R.ok(userList);
+    }
+
+    @ApiOperation("鑾峰彇鐢ㄦ埛璇︾粏")
+    @ApiImplicitParam(name = "userId", value = "鐢ㄦ埛ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class)
+    @GetMapping("/{userId}")
+    public R<UserEntity> getUser(@PathVariable Integer userId)
+    {
+        if (!users.isEmpty() && users.containsKey(userId))
+        {
+            return R.ok(users.get(userId));
+        }
+        else
+        {
+            return R.fail("鐢ㄦ埛涓嶅瓨鍦�");
+        }
+    }
+
+    @ApiOperation("鏂板鐢ㄦ埛")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "userId", value = "鐢ㄦ埛id", dataType = "Integer", dataTypeClass = Integer.class),
+        @ApiImplicitParam(name = "username", value = "鐢ㄦ埛鍚嶇О", dataType = "String", dataTypeClass = String.class),
+        @ApiImplicitParam(name = "password", value = "鐢ㄦ埛瀵嗙爜", dataType = "String", dataTypeClass = String.class),
+        @ApiImplicitParam(name = "mobile", value = "鐢ㄦ埛鎵嬫満", dataType = "String", dataTypeClass = String.class)
+    })
+    @PostMapping("/save")
+    public R<String> save(UserEntity user)
+    {
+        if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
+        {
+            return R.fail("鐢ㄦ埛ID涓嶈兘涓虹┖");
+        }
+        users.put(user.getUserId(), user);
+        return R.ok();
+    }
+
+    @ApiOperation("鏇存柊鐢ㄦ埛")
+    @PutMapping("/update")
+    public R<String> update(@RequestBody UserEntity user)
+    {
+        if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
+        {
+            return R.fail("鐢ㄦ埛ID涓嶈兘涓虹┖");
+        }
+        if (users.isEmpty() || !users.containsKey(user.getUserId()))
+        {
+            return R.fail("鐢ㄦ埛涓嶅瓨鍦�");
+        }
+        users.remove(user.getUserId());
+        users.put(user.getUserId(), user);
+        return R.ok();
+    }
+
+    @ApiOperation("鍒犻櫎鐢ㄦ埛淇℃伅")
+    @ApiImplicitParam(name = "userId", value = "鐢ㄦ埛ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class)
+    @DeleteMapping("/{userId}")
+    public R<String> delete(@PathVariable Integer userId)
+    {
+        if (!users.isEmpty() && users.containsKey(userId))
+        {
+            users.remove(userId);
+            return R.ok();
+        }
+        else
+        {
+            return R.fail("鐢ㄦ埛涓嶅瓨鍦�");
+        }
+    }
+}
+
+@ApiModel(value = "UserEntity", description = "鐢ㄦ埛瀹炰綋")
+class UserEntity
+{
+    @ApiModelProperty("鐢ㄦ埛ID")
+    private Integer userId;
+
+    @ApiModelProperty("鐢ㄦ埛鍚嶇О")
+    private String username;
+
+    @ApiModelProperty("鐢ㄦ埛瀵嗙爜")
+    private String password;
+
+    @ApiModelProperty("鐢ㄦ埛鎵嬫満")
+    private String mobile;
+
+    public UserEntity()
+    {
+
+    }
+
+    public UserEntity(Integer userId, String username, String password, String mobile)
+    {
+        this.userId = userId;
+        this.username = username;
+        this.password = password;
+        this.mobile = mobile;
+    }
+
+    public Integer getUserId()
+    {
+        return userId;
+    }
+
+    public void setUserId(Integer userId)
+    {
+        this.userId = userId;
+    }
+
+    public String getUsername()
+    {
+        return username;
+    }
+
+    public void setUsername(String username)
+    {
+        this.username = username;
+    }
+
+    public String getPassword()
+    {
+        return password;
+    }
+
+    public void setPassword(String password)
+    {
+        this.password = password;
+    }
+
+    public String getMobile()
+    {
+        return mobile;
+    }
+
+    public void setMobile(String mobile)
+    {
+        this.mobile = mobile;
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/core/config/SwaggerConfig.java b/zhitan-admin/src/main/java/com/zhitan/web/core/config/SwaggerConfig.java
new file mode 100644
index 0000000..540acc0
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/core/config/SwaggerConfig.java
@@ -0,0 +1,127 @@
+package com.zhitan.web.core.config;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import com.zhitan.common.config.BaseConfig;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.models.auth.In;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.ApiKey;
+import springfox.documentation.service.AuthorizationScope;
+import springfox.documentation.service.Contact;
+import springfox.documentation.service.SecurityReference;
+import springfox.documentation.service.SecurityScheme;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.Docket;
+
+import javax.annotation.Resource;
+
+/**
+ * Swagger2鐨勬帴鍙i厤缃�
+ *
+ * @author zhitan
+ */
+@Configuration
+public class SwaggerConfig {
+    /**
+     * 绯荤粺鍩虹閰嶇疆
+     */
+    @Resource
+    private BaseConfig baseConfig;
+
+    /**
+     * 鏄惁寮�鍚痵wagger
+     */
+    @Value("${swagger.enabled}")
+    private boolean enabled;
+
+    /**
+     * 璁剧疆璇锋眰鐨勭粺涓�鍓嶇紑
+     */
+    @Value("${swagger.pathMapping}")
+    private String pathMapping;
+
+    /**
+     * 鍒涘缓API
+     */
+    @Bean
+    public Docket createRestApi() {
+        return new Docket(DocumentationType.OAS_30)
+                // 鏄惁鍚敤Swagger
+                .enable(enabled)
+                // 鐢ㄦ潵鍒涘缓璇PI鐨勫熀鏈俊鎭紝灞曠ず鍦ㄦ枃妗g殑椤甸潰涓紙鑷畾涔夊睍绀虹殑淇℃伅锛�
+                .apiInfo(apiInfo())
+                // 璁剧疆鍝簺鎺ュ彛鏆撮湶缁橲wagger灞曠ず
+                .select()
+                // 鎵弿鎵�鏈夋湁娉ㄨВ鐨刟pi锛岀敤杩欑鏂瑰紡鏇寸伒娲�
+                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+                // 鎵弿鎸囧畾鍖呬腑鐨剆wagger娉ㄨВ
+                // .apis(RequestHandlerSelectors.basePackage("com.zhitan.project.tool.swagger"))
+                // 鎵弿鎵�鏈� .apis(RequestHandlerSelectors.any())
+                .paths(PathSelectors.any())
+                .build()
+                /* 璁剧疆瀹夊叏妯″紡锛宻wagger鍙互璁剧疆璁块棶token */
+                .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts())
+                .pathMapping(pathMapping);
+    }
+
+    /**
+     * 瀹夊叏妯″紡锛岃繖閲屾寚瀹歵oken閫氳繃Authorization澶磋姹傚ご浼犻��
+     */
+    private List<SecurityScheme> securitySchemes() {
+        List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();
+        apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue()));
+        return apiKeyList;
+    }
+
+    /**
+     * 瀹夊叏涓婁笅鏂�
+     */
+    private List<SecurityContext> securityContexts() {
+        List<SecurityContext> securityContexts = new ArrayList<>();
+        securityContexts.add(
+                SecurityContext.builder()
+                        .securityReferences(defaultAuth())
+                        .operationSelector(o -> o.requestMappingPattern().matches("/.*"))
+                        .build());
+        return securityContexts;
+    }
+
+    /**
+     * 榛樿鐨勫畨鍏ㄤ笂寮曠敤
+     */
+    private List<SecurityReference> defaultAuth() {
+        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
+        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+        authorizationScopes[0] = authorizationScope;
+        List<SecurityReference> securityReferences = new ArrayList<>();
+        securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
+        return securityReferences;
+    }
+
+    /**
+     * 娣诲姞鎽樿淇℃伅
+     */
+    private ApiInfo apiInfo() {
+        // 鐢ˋpiInfoBuilder杩涜瀹氬埗
+        return new ApiInfoBuilder()
+                // 璁剧疆鏍囬
+                .title("鏍囬:鍚庡彴绠$悊绯荤粺_鎺ュ彛鏂囨。")
+                // 鎻忚堪
+                .description("鎻忚堪:鎺ュ彛鏂囨。")
+                // 浣滆�呬俊鎭�
+                .contact(new Contact(baseConfig.getName(), null, null))
+                // 鐗堟湰
+                .version("鐗堟湰鍙�:" + baseConfig.getVersion())
+                .build();
+    }
+}
diff --git a/zhitan-admin/src/main/resources/META-INF/spring-devtools.properties b/zhitan-admin/src/main/resources/META-INF/spring-devtools.properties
new file mode 100644
index 0000000..37e7b58
--- /dev/null
+++ b/zhitan-admin/src/main/resources/META-INF/spring-devtools.properties
@@ -0,0 +1 @@
+restart.include.json=/com.alibaba.fastjson2.*.jar
\ No newline at end of file
diff --git a/zhitan-admin/src/main/resources/application-dev.yml b/zhitan-admin/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..c2f6b04
--- /dev/null
+++ b/zhitan-admin/src/main/resources/application-dev.yml
@@ -0,0 +1,61 @@
+# 鏁版嵁婧愰厤缃�
+spring:
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    driverClassName: org.postgresql.Driver
+    druid:
+      # 涓诲簱鏁版嵁婧�
+      master:
+        url: jdbc:postgresql://127.0.0.1:5432/energy
+        username: root
+        password: 123456
+      # 浠庡簱鏁版嵁婧�
+      slave:
+        # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴
+        enabled: false
+        url:
+        username:
+        password:
+      # 鍒濆杩炴帴鏁�
+      initialSize: 5
+      # 鏈�灏忚繛鎺ユ睜鏁伴噺
+      minIdle: 10
+      # 鏈�澶ц繛鎺ユ睜鏁伴噺
+      maxActive: 20
+      # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
+      maxWait: 60000
+      # 閰嶇疆杩炴帴瓒呮椂鏃堕棿
+      connectTimeout: 30000
+      # 閰嶇疆缃戠粶瓒呮椂鏃堕棿
+      socketTimeout: 60000
+      # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
+      timeBetweenEvictionRunsMillis: 60000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      minEvictableIdleTimeMillis: 300000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      maxEvictableIdleTimeMillis: 900000
+      # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁�
+      validationQuery: SELECT 1 
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂�
+        allow:
+        url-pattern: /druid/*
+        # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮�
+        login-username: admin
+        login-password: 123456
+      filter:
+        stat:
+          enabled: true
+          # 鎱QL璁板綍
+          log-slow-sql: true
+          slow-sql-millis: 1000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
diff --git a/zhitan-admin/src/main/resources/application-prod.yml b/zhitan-admin/src/main/resources/application-prod.yml
new file mode 100644
index 0000000..76415bc
--- /dev/null
+++ b/zhitan-admin/src/main/resources/application-prod.yml
@@ -0,0 +1,61 @@
+# 鏁版嵁婧愰厤缃�
+spring:
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    driverClassName: org.postgresql.Driver
+    druid:
+      # 涓诲簱鏁版嵁婧�
+      master:
+        url: jdbc:postgresql://127.0.0.1:5432/energy
+        username: root
+        password: 123456
+      # 浠庡簱鏁版嵁婧�
+      slave:
+        # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴
+        enabled: false
+        url:
+        username:
+        password:
+      # 鍒濆杩炴帴鏁�
+      initialSize: 5
+      # 鏈�灏忚繛鎺ユ睜鏁伴噺
+      minIdle: 10
+      # 鏈�澶ц繛鎺ユ睜鏁伴噺
+      maxActive: 20
+      # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
+      maxWait: 60000
+      # 閰嶇疆杩炴帴瓒呮椂鏃堕棿
+      connectTimeout: 30000
+      # 閰嶇疆缃戠粶瓒呮椂鏃堕棿
+      socketTimeout: 60000
+      # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
+      timeBetweenEvictionRunsMillis: 60000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      minEvictableIdleTimeMillis: 300000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      maxEvictableIdleTimeMillis: 900000
+      # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁�
+      validationQuery: SELECT 1 FROM DUAL
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂�
+        allow:
+        url-pattern: /druid/*
+        # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮�
+        login-username: admin
+        login-password: 123456
+      filter:
+        stat:
+          enabled: true
+          # 鎱QL璁板綍
+          log-slow-sql: true
+          slow-sql-millis: 1000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
\ No newline at end of file
diff --git a/zhitan-admin/src/main/resources/application.yml b/zhitan-admin/src/main/resources/application.yml
new file mode 100644
index 0000000..210466d
--- /dev/null
+++ b/zhitan-admin/src/main/resources/application.yml
@@ -0,0 +1,172 @@
+# 椤圭洰鐩稿叧閰嶇疆
+base:
+  # 鍚嶇О
+  name: admin
+  # 鐗堟湰
+  version: 3.8.7
+  # 鐗堟潈骞翠唤
+  copyrightYear: 2024
+  profile: ./uploadPath
+  # 鑾峰彇ip鍦板潃寮�鍏�
+  addressEnabled: true
+  # 楠岃瘉鐮佺被鍨� math 鏁板瓧璁$畻 char 瀛楃楠岃瘉
+  captchaType: math
+
+# 寮�鍙戠幆澧冮厤缃�
+server:
+  # 鏈嶅姟鍣ㄧ殑HTTP绔彛锛岄粯璁や负8080
+  port: 8080
+  servlet:
+    # 搴旂敤鐨勮闂矾寰�
+    context-path: /
+    # undertow 閰嶇疆
+  undertow:
+    # HTTP post鍐呭鐨勬渶澶уぇ灏忋�傚綋鍊间负-1鏃讹紝榛樿鍊间负澶у皬鏄棤闄愮殑
+    max-http-post-size: -1
+    # 浠ヤ笅鐨勯厤缃細褰卞搷buffer,杩欎簺buffer浼氱敤浜庢湇鍔″櫒杩炴帴鐨処O鎿嶄綔,鏈夌偣绫讳技netty鐨勬睜鍖栧唴瀛樼鐞�
+    # 姣忓潡buffer鐨勭┖闂村ぇ灏�,瓒婂皬鐨勭┖闂磋鍒╃敤瓒婂厖鍒�
+    buffer-size: 512
+    # 鏄惁鍒嗛厤鐨勭洿鎺ュ唴瀛�
+    direct-buffers: true
+    threads:
+      # 璁剧疆IO绾跨▼鏁�, 瀹冧富瑕佹墽琛岄潪闃诲鐨勪换鍔�,瀹冧滑浼氳礋璐e涓繛鎺�, 榛樿璁剧疆姣忎釜CPU鏍稿績涓�涓嚎绋�
+      io: 8
+      # 闃诲浠诲姟绾跨▼姹�, 褰撴墽琛岀被浼約ervlet璇锋眰闃诲鎿嶄綔, undertow浼氫粠杩欎釜绾跨▼姹犱腑鍙栧緱绾跨▼,瀹冪殑鍊艰缃彇鍐充簬绯荤粺鐨勮礋杞�
+      worker: 256
+
+# 鏃ュ織閰嶇疆
+logging:
+  level:
+    com.zhitan: debug
+    org.springframework: warn
+
+# 鐢ㄦ埛閰嶇疆
+user:
+  password:
+    # 瀵嗙爜鏈�澶ч敊璇鏁�
+    maxRetryCount: 5
+    # 瀵嗙爜閿佸畾鏃堕棿锛堥粯璁�10鍒嗛挓锛�
+    lockTime: 10
+
+# Spring閰嶇疆
+spring:
+  # 璧勬簮淇℃伅
+  messages:
+    # 鍥介檯鍖栬祫婧愭枃浠惰矾寰�
+    basename: i18n/messages
+  profiles:
+    active: @profileActive@
+  # 鏂囦欢涓婁紶
+  servlet:
+    multipart:
+      # 鍗曚釜鏂囦欢澶у皬
+      max-file-size: 10MB
+      # 璁剧疆鎬讳笂浼犵殑鏂囦欢澶у皬
+      max-request-size: 20MB
+  # 鏈嶅姟妯″潡
+  devtools:
+    restart:
+      # 鐑儴缃插紑鍏�
+      enabled: true
+  # redis 閰嶇疆
+  redis:
+    # 鍦板潃
+    host: localhost
+    # 绔彛锛岄粯璁や负6379
+    port: 6379
+    # 鏁版嵁搴撶储寮�
+    database: 0
+    # 瀵嗙爜
+    password:
+    # 杩炴帴瓒呮椂鏃堕棿
+    timeout: 10s
+    lettuce:
+      pool:
+        # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
+        min-idle: 0
+        # 杩炴帴姹犱腑鐨勬渶澶х┖闂茶繛鎺�
+        max-idle: 8
+        # 杩炴帴姹犵殑鏈�澶ф暟鎹簱杩炴帴鏁�
+        max-active: 8
+        # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
+        max-wait: -1ms
+
+# token閰嶇疆
+token:
+  # 浠ょ墝鑷畾涔夋爣璇�
+  header: Authorization
+  # 浠ょ墝瀵嗛挜
+  secret: abcdefghijklmnopqrstuvwxyzzhitancloud
+  # 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛�
+  expireTime: 300
+
+mybatis-plus:
+#  configuration:
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+  typeAliasesPackage: com.zhitan.**.domain
+  mapperLocations: classpath*:mapper/**/*Mapper.xml
+  # 鍔犺浇鍏ㄥ眬鐨勯厤缃枃浠�
+  configLocation: classpath:mybatis/mybatis-config.xml
+
+# PageHelper鍒嗛〉鎻掍欢
+pagehelper:
+  helperDialect: PostgreSQL
+  reasonable: true
+  supportMethodsArguments: true
+  params: count=countSql
+  maxPageSize: 500
+
+# Swagger閰嶇疆
+swagger:
+  # 鏄惁寮�鍚痵wagger
+  enabled: true
+  # 璇锋眰鍓嶇紑
+  pathMapping: /dev-api
+
+# 闃叉XSS鏀诲嚮
+xss:
+  # 杩囨护寮�鍏�
+  enabled: true
+  # 鎺掗櫎閾炬帴锛堝涓敤閫楀彿鍒嗛殧锛�
+  excludes: /system/notice
+  # 鍖归厤閾炬帴
+  urlPatterns: /system/*,/monitor/*,/tool/*
+
+# Shiro
+shiro:
+  session:
+    # 鍚屼竴涓敤鎴锋渶澶т細璇濇暟锛屾瘮濡�2鐨勬剰鎬濇槸鍚屼竴涓处鍙峰厑璁告渶澶氬悓鏃朵袱涓汉鐧诲綍锛堥粯璁�-1涓嶉檺鍒讹級
+    maxSession: 1
+    # 韪㈠嚭涔嬪墠鐧诲綍鐨�/涔嬪悗鐧诲綍鐨勭敤鎴凤紝榛樿韪㈠嚭涔嬪墠鐧诲綍鐨勭敤鎴�
+    kickoutAfter: false
+rtdb:
+  host: http://127.0.0.1:8086
+  token: ==
+  org: org
+  bucket: bucket
+  
+###################### MQTT #################################
+mqtt:
+  # 鏈嶅姟鍣ㄥ湴鍧�
+  host: tcp://127.0.0.1:1883
+  # ID鍞竴
+  clientId: MQTT_WK
+  # 涓婚 澶氫釜涓婚鐢ㄩ�楀彿(,)鍒嗗壊 #琛ㄧず杩欎釜涓婚涓嬮潰鎵�鏈夛紝topic1,topic2,topic2/topic22/#(榛樿浼氬彇绗竴涓富棰�)
+  topics: topic1
+  # 鐢ㄦ埛鍚�
+  username: admin
+  # 瀵嗙爜
+  password: 111111
+  # 杩炴帴瓒呮椂
+  timeout: 30
+  # 蹇冭烦妫�娴�
+  keepalive: 60
+  # 瀵规秷鎭鐞嗙殑鍑犵鏈哄埗銆�
+  # 0 琛ㄧず鐨勬槸璁㈤槄鑰呮病鏀跺埌娑堟伅涓嶄細鍐嶆鍙戦�侊紝娑堟伅浼氫涪澶�
+  # 1 琛ㄧず鐨勬槸浼氬皾璇曢噸璇曪紝涓�鐩村埌鎺ユ敹鍒版秷鎭紝浣嗚繖绉嶆儏鍐靛彲鑳藉鑷磋闃呰�呮敹鍒板娆¢噸澶嶆秷鎭�
+  # 2 澶氫簡涓�娆″幓閲嶇殑鍔ㄤ綔锛岀‘淇濊闃呰�呮敹鍒扮殑娑堟伅鏈変竴娆�
+  qos: 1
+  # false涓哄缓绔嬫寔涔呬細璇�
+  cleanSession: false
+  # 鏂紑鍚庨噸鏂拌繛鎺�
+  automaticReconnect: true
\ No newline at end of file
diff --git a/zhitan-admin/src/main/resources/banner.txt b/zhitan-admin/src/main/resources/banner.txt
new file mode 100644
index 0000000..55e5b92
--- /dev/null
+++ b/zhitan-admin/src/main/resources/banner.txt
@@ -0,0 +1,24 @@
+Application Version: ${zhitan.version}
+Spring Boot Version: ${spring-boot.version}
+////////////////////////////////////////////////////////////////////
+//                          _ooOoo_                               //
+//                         o8888888o                              //
+//                         88" . "88                              //
+//                         (| ^_^ |)                              //
+//                         O\  =  /O                              //
+//                      ____/`---'\____                           //
+//                    .'  \\|     |//  `.                         //
+//                   /  \\|||  :  |||//  \                        //
+//                  /  _||||| -:- |||||-  \                       //
+//                  |   | \\\  -  /// |   |                       //
+//                  | \_|  ''\---/''  |   |                       //
+//                  \  .-\__  `-`  ___/-. /                       //
+//                ___`. .'  /--.--\  `. . ___                     //
+//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
+//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
+//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
+//      ========`-.____`-.___\_____/___.-`____.-'========         //
+//                           `=---='                              //
+//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
+//             浣涚淇濅綉       姘镐笉瀹曟満      姘告棤BUG               //
+////////////////////////////////////////////////////////////////////
\ No newline at end of file
diff --git a/zhitan-admin/src/main/resources/i18n/messages.properties b/zhitan-admin/src/main/resources/i18n/messages.properties
new file mode 100644
index 0000000..93de005
--- /dev/null
+++ b/zhitan-admin/src/main/resources/i18n/messages.properties
@@ -0,0 +1,38 @@
+#閿欒娑堟伅
+not.null=* 蹇呴』濉啓
+user.jcaptcha.error=楠岃瘉鐮侀敊璇�
+user.jcaptcha.expire=楠岃瘉鐮佸凡澶辨晥
+user.not.exists=鐢ㄦ埛涓嶅瓨鍦�/瀵嗙爜閿欒
+user.password.not.match=鐢ㄦ埛涓嶅瓨鍦�/瀵嗙爜閿欒
+user.password.retry.limit.count=瀵嗙爜杈撳叆閿欒{0}娆�
+user.password.retry.limit.exceed=瀵嗙爜杈撳叆閿欒{0}娆★紝甯愭埛閿佸畾{1}鍒嗛挓
+user.password.delete=瀵逛笉璧凤紝鎮ㄧ殑璐﹀彿宸茶鍒犻櫎
+user.blocked=鐢ㄦ埛宸插皝绂侊紝璇疯仈绯荤鐞嗗憳
+role.blocked=瑙掕壊宸插皝绂侊紝璇疯仈绯荤鐞嗗憳
+login.blocked=寰堥仐鎲撅紝璁块棶IP宸茶鍒楀叆绯荤粺榛戝悕鍗�
+user.logout.success=閫�鍑烘垚鍔�
+
+length.not.valid=闀垮害蹇呴』鍦▄min}鍒皗max}涓瓧绗︿箣闂�
+
+user.username.not.valid=* 2鍒�20涓眽瀛椼�佸瓧姣嶃�佹暟瀛楁垨涓嬪垝绾跨粍鎴愶紝涓斿繀椤讳互闈炴暟瀛楀紑澶�
+user.password.not.valid=* 5-50涓瓧绗�
+ 
+user.email.not.valid=閭鏍煎紡閿欒
+user.mobile.phone.number.not.valid=鎵嬫満鍙锋牸寮忛敊璇�
+user.login.success=鐧诲綍鎴愬姛
+user.register.success=娉ㄥ唽鎴愬姛
+user.notfound=璇烽噸鏂扮櫥褰�
+user.forcelogout=绠$悊鍛樺己鍒堕��鍑猴紝璇烽噸鏂扮櫥褰�
+user.unknown.error=鏈煡閿欒锛岃閲嶆柊鐧诲綍
+
+##鏂囦欢涓婁紶娑堟伅
+upload.exceed.maxSize=涓婁紶鐨勬枃浠跺ぇ灏忚秴鍑洪檺鍒剁殑鏂囦欢澶у皬锛�<br/>鍏佽鐨勬枃浠舵渶澶уぇ灏忔槸锛歿0}MB锛�
+upload.filename.exceed.length=涓婁紶鐨勬枃浠跺悕鏈�闀縶0}涓瓧绗�
+
+##鏉冮檺
+no.permission=鎮ㄦ病鏈夋暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄� [{0}]
+no.create.permission=鎮ㄦ病鏈夊垱寤烘暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄� [{0}]
+no.update.permission=鎮ㄦ病鏈変慨鏀规暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄� [{0}]
+no.delete.permission=鎮ㄦ病鏈夊垹闄ゆ暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄� [{0}]
+no.export.permission=鎮ㄦ病鏈夊鍑烘暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄� [{0}]
+no.view.permission=鎮ㄦ病鏈夋煡鐪嬫暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄� [{0}]
diff --git a/zhitan-admin/src/main/resources/logback.xml b/zhitan-admin/src/main/resources/logback.xml
new file mode 100644
index 0000000..6491ba9
--- /dev/null
+++ b/zhitan-admin/src/main/resources/logback.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <!-- 鏃ュ織瀛樻斁璺緞 -->
+	<property name="log.path" value="./logs" />
+    <!-- 鏃ュ織杈撳嚭鏍煎紡 -->
+	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
+
+	<!-- 鎺у埗鍙拌緭鍑� -->
+	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<pattern>${log.pattern}</pattern>
+		</encoder>
+	</appender>
+	
+	<!-- 绯荤粺鏃ュ織杈撳嚭 -->
+	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+	    <file>${log.path}/sys-info.log</file>
+        <!-- 寰幆鏀跨瓥锛氬熀浜庢椂闂村垱寤烘棩蹇楁枃浠� -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 鏃ュ織鏂囦欢鍚嶆牸寮� -->
+			<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
+			<!-- 鏃ュ織鏈�澶х殑鍘嗗彶 60澶� -->
+			<maxHistory>60</maxHistory>
+		</rollingPolicy>
+		<encoder>
+			<pattern>${log.pattern}</pattern>
+		</encoder>
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 杩囨护鐨勭骇鍒� -->
+            <level>INFO</level>
+            <!-- 鍖归厤鏃剁殑鎿嶄綔锛氭帴鏀讹紙璁板綍锛� -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 涓嶅尮閰嶆椂鐨勬搷浣滐細鎷掔粷锛堜笉璁板綍锛� -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+	</appender>
+	
+	<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+	    <file>${log.path}/sys-error.log</file>
+        <!-- 寰幆鏀跨瓥锛氬熀浜庢椂闂村垱寤烘棩蹇楁枃浠� -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 鏃ュ織鏂囦欢鍚嶆牸寮� -->
+            <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
+			<!-- 鏃ュ織鏈�澶х殑鍘嗗彶 60澶� -->
+			<maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 杩囨护鐨勭骇鍒� -->
+            <level>ERROR</level>
+			<!-- 鍖归厤鏃剁殑鎿嶄綔锛氭帴鏀讹紙璁板綍锛� -->
+            <onMatch>ACCEPT</onMatch>
+			<!-- 涓嶅尮閰嶆椂鐨勬搷浣滐細鎷掔粷锛堜笉璁板綍锛� -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+	
+	<!-- 鐢ㄦ埛璁块棶鏃ュ織杈撳嚭  -->
+    <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${log.path}/sys-user.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 鎸夊ぉ鍥炴粴 daily -->
+            <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 鏃ュ織鏈�澶х殑鍘嗗彶 60澶� -->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
+	
+	<!-- 绯荤粺妯″潡鏃ュ織绾у埆鎺у埗  -->
+	<logger name="com.zhitan" level="info" />
+	<!-- Spring鏃ュ織绾у埆鎺у埗  -->
+	<logger name="org.springframework" level="warn" />
+
+	<root level="info">
+		<appender-ref ref="console" />
+	</root>
+	
+	<!--绯荤粺鎿嶄綔鏃ュ織-->
+    <root level="info">
+        <appender-ref ref="file_info" />
+        <appender-ref ref="file_error" />
+    </root>
+	
+	<!--绯荤粺鐢ㄦ埛鎿嶄綔鏃ュ織-->
+    <logger name="sys-user" level="info">
+        <appender-ref ref="sys-user"/>
+    </logger>
+</configuration> 
\ No newline at end of file
diff --git a/zhitan-admin/src/main/resources/mybatis/mybatis-config.xml b/zhitan-admin/src/main/resources/mybatis/mybatis-config.xml
new file mode 100644
index 0000000..dc7b13b
--- /dev/null
+++ b/zhitan-admin/src/main/resources/mybatis/mybatis-config.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE configuration
+        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-config.dtd">
+<configuration>
+    <!-- 鍏ㄥ眬鍙傛暟 -->
+    <settings>
+        <!-- 浣垮叏灞�鐨勬槧灏勫櫒鍚敤鎴栫鐢ㄧ紦瀛� -->
+        <setting name="cacheEnabled" value="true"/>
+        <!-- 鍏佽JDBC 鏀寔鑷姩鐢熸垚涓婚敭 -->
+        <setting name="useGeneratedKeys" value="true"/>
+        <!-- 閰嶇疆榛樿鐨勬墽琛屽櫒.SIMPLE灏辨槸鏅�氭墽琛屽櫒;REUSE鎵ц鍣ㄤ細閲嶇敤棰勫鐞嗚鍙�(prepared statements);BATCH鎵ц鍣ㄥ皢閲嶇敤璇彞骞舵墽琛屾壒閲忔洿鏂� -->
+        <setting name="defaultExecutorType" value="SIMPLE"/>
+        <!-- 鎸囧畾 MyBatis 鎵�鐢ㄦ棩蹇楃殑鍏蜂綋瀹炵幇 -->
+        <setting name="logImpl" value="SLF4J"/>
+        <!-- 浣跨敤椹煎嘲鍛藉悕娉曡浆鎹㈠瓧娈� -->
+        <setting name="mapUnderscoreToCamelCase" value="true"/>
+    </settings>
+
+</configuration>
\ No newline at end of file
diff --git a/zhitan-admin/target/classes/META-INF/spring-devtools.properties b/zhitan-admin/target/classes/META-INF/spring-devtools.properties
new file mode 100644
index 0000000..37e7b58
--- /dev/null
+++ b/zhitan-admin/target/classes/META-INF/spring-devtools.properties
@@ -0,0 +1 @@
+restart.include.json=/com.alibaba.fastjson2.*.jar
\ No newline at end of file
diff --git a/zhitan-admin/target/classes/application-dev.yml b/zhitan-admin/target/classes/application-dev.yml
new file mode 100644
index 0000000..c2f6b04
--- /dev/null
+++ b/zhitan-admin/target/classes/application-dev.yml
@@ -0,0 +1,61 @@
+# 鏁版嵁婧愰厤缃�
+spring:
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    driverClassName: org.postgresql.Driver
+    druid:
+      # 涓诲簱鏁版嵁婧�
+      master:
+        url: jdbc:postgresql://127.0.0.1:5432/energy
+        username: root
+        password: 123456
+      # 浠庡簱鏁版嵁婧�
+      slave:
+        # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴
+        enabled: false
+        url:
+        username:
+        password:
+      # 鍒濆杩炴帴鏁�
+      initialSize: 5
+      # 鏈�灏忚繛鎺ユ睜鏁伴噺
+      minIdle: 10
+      # 鏈�澶ц繛鎺ユ睜鏁伴噺
+      maxActive: 20
+      # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
+      maxWait: 60000
+      # 閰嶇疆杩炴帴瓒呮椂鏃堕棿
+      connectTimeout: 30000
+      # 閰嶇疆缃戠粶瓒呮椂鏃堕棿
+      socketTimeout: 60000
+      # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
+      timeBetweenEvictionRunsMillis: 60000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      minEvictableIdleTimeMillis: 300000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      maxEvictableIdleTimeMillis: 900000
+      # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁�
+      validationQuery: SELECT 1 
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂�
+        allow:
+        url-pattern: /druid/*
+        # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮�
+        login-username: admin
+        login-password: 123456
+      filter:
+        stat:
+          enabled: true
+          # 鎱QL璁板綍
+          log-slow-sql: true
+          slow-sql-millis: 1000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
diff --git a/zhitan-admin/target/classes/application-prod.yml b/zhitan-admin/target/classes/application-prod.yml
new file mode 100644
index 0000000..76415bc
--- /dev/null
+++ b/zhitan-admin/target/classes/application-prod.yml
@@ -0,0 +1,61 @@
+# 鏁版嵁婧愰厤缃�
+spring:
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    driverClassName: org.postgresql.Driver
+    druid:
+      # 涓诲簱鏁版嵁婧�
+      master:
+        url: jdbc:postgresql://127.0.0.1:5432/energy
+        username: root
+        password: 123456
+      # 浠庡簱鏁版嵁婧�
+      slave:
+        # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴
+        enabled: false
+        url:
+        username:
+        password:
+      # 鍒濆杩炴帴鏁�
+      initialSize: 5
+      # 鏈�灏忚繛鎺ユ睜鏁伴噺
+      minIdle: 10
+      # 鏈�澶ц繛鎺ユ睜鏁伴噺
+      maxActive: 20
+      # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
+      maxWait: 60000
+      # 閰嶇疆杩炴帴瓒呮椂鏃堕棿
+      connectTimeout: 30000
+      # 閰嶇疆缃戠粶瓒呮椂鏃堕棿
+      socketTimeout: 60000
+      # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
+      timeBetweenEvictionRunsMillis: 60000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      minEvictableIdleTimeMillis: 300000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      maxEvictableIdleTimeMillis: 900000
+      # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁�
+      validationQuery: SELECT 1 FROM DUAL
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂�
+        allow:
+        url-pattern: /druid/*
+        # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮�
+        login-username: admin
+        login-password: 123456
+      filter:
+        stat:
+          enabled: true
+          # 鎱QL璁板綍
+          log-slow-sql: true
+          slow-sql-millis: 1000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
\ No newline at end of file
diff --git a/zhitan-admin/target/classes/application.yml b/zhitan-admin/target/classes/application.yml
new file mode 100644
index 0000000..5e4a0d4
--- /dev/null
+++ b/zhitan-admin/target/classes/application.yml
@@ -0,0 +1,172 @@
+# 椤圭洰鐩稿叧閰嶇疆
+base:
+  # 鍚嶇О
+  name: admin
+  # 鐗堟湰
+  version: 3.8.7
+  # 鐗堟潈骞翠唤
+  copyrightYear: 2024
+  profile: ./uploadPath
+  # 鑾峰彇ip鍦板潃寮�鍏�
+  addressEnabled: true
+  # 楠岃瘉鐮佺被鍨� math 鏁板瓧璁$畻 char 瀛楃楠岃瘉
+  captchaType: math
+
+# 寮�鍙戠幆澧冮厤缃�
+server:
+  # 鏈嶅姟鍣ㄧ殑HTTP绔彛锛岄粯璁や负8080
+  port: 8080
+  servlet:
+    # 搴旂敤鐨勮闂矾寰�
+    context-path: /
+    # undertow 閰嶇疆
+  undertow:
+    # HTTP post鍐呭鐨勬渶澶уぇ灏忋�傚綋鍊间负-1鏃讹紝榛樿鍊间负澶у皬鏄棤闄愮殑
+    max-http-post-size: -1
+    # 浠ヤ笅鐨勯厤缃細褰卞搷buffer,杩欎簺buffer浼氱敤浜庢湇鍔″櫒杩炴帴鐨処O鎿嶄綔,鏈夌偣绫讳技netty鐨勬睜鍖栧唴瀛樼鐞�
+    # 姣忓潡buffer鐨勭┖闂村ぇ灏�,瓒婂皬鐨勭┖闂磋鍒╃敤瓒婂厖鍒�
+    buffer-size: 512
+    # 鏄惁鍒嗛厤鐨勭洿鎺ュ唴瀛�
+    direct-buffers: true
+    threads:
+      # 璁剧疆IO绾跨▼鏁�, 瀹冧富瑕佹墽琛岄潪闃诲鐨勪换鍔�,瀹冧滑浼氳礋璐e涓繛鎺�, 榛樿璁剧疆姣忎釜CPU鏍稿績涓�涓嚎绋�
+      io: 8
+      # 闃诲浠诲姟绾跨▼姹�, 褰撴墽琛岀被浼約ervlet璇锋眰闃诲鎿嶄綔, undertow浼氫粠杩欎釜绾跨▼姹犱腑鍙栧緱绾跨▼,瀹冪殑鍊艰缃彇鍐充簬绯荤粺鐨勮礋杞�
+      worker: 256
+
+# 鏃ュ織閰嶇疆
+logging:
+  level:
+    com.zhitan: debug
+    org.springframework: warn
+
+# 鐢ㄦ埛閰嶇疆
+user:
+  password:
+    # 瀵嗙爜鏈�澶ч敊璇鏁�
+    maxRetryCount: 5
+    # 瀵嗙爜閿佸畾鏃堕棿锛堥粯璁�10鍒嗛挓锛�
+    lockTime: 10
+
+# Spring閰嶇疆
+spring:
+  # 璧勬簮淇℃伅
+  messages:
+    # 鍥介檯鍖栬祫婧愭枃浠惰矾寰�
+    basename: i18n/messages
+  profiles:
+    active: dev
+  # 鏂囦欢涓婁紶
+  servlet:
+    multipart:
+      # 鍗曚釜鏂囦欢澶у皬
+      max-file-size: 10MB
+      # 璁剧疆鎬讳笂浼犵殑鏂囦欢澶у皬
+      max-request-size: 20MB
+  # 鏈嶅姟妯″潡
+  devtools:
+    restart:
+      # 鐑儴缃插紑鍏�
+      enabled: true
+  # redis 閰嶇疆
+  redis:
+    # 鍦板潃
+    host: localhost
+    # 绔彛锛岄粯璁や负6379
+    port: 6379
+    # 鏁版嵁搴撶储寮�
+    database: 0
+    # 瀵嗙爜
+    password:
+    # 杩炴帴瓒呮椂鏃堕棿
+    timeout: 10s
+    lettuce:
+      pool:
+        # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
+        min-idle: 0
+        # 杩炴帴姹犱腑鐨勬渶澶х┖闂茶繛鎺�
+        max-idle: 8
+        # 杩炴帴姹犵殑鏈�澶ф暟鎹簱杩炴帴鏁�
+        max-active: 8
+        # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
+        max-wait: -1ms
+
+# token閰嶇疆
+token:
+  # 浠ょ墝鑷畾涔夋爣璇�
+  header: Authorization
+  # 浠ょ墝瀵嗛挜
+  secret: abcdefghijklmnopqrstuvwxyzzhitancloud
+  # 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛�
+  expireTime: 300
+
+mybatis-plus:
+#  configuration:
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+  typeAliasesPackage: com.zhitan.**.domain
+  mapperLocations: classpath*:mapper/**/*Mapper.xml
+  # 鍔犺浇鍏ㄥ眬鐨勯厤缃枃浠�
+  configLocation: classpath:mybatis/mybatis-config.xml
+
+# PageHelper鍒嗛〉鎻掍欢
+pagehelper:
+  helperDialect: PostgreSQL
+  reasonable: true
+  supportMethodsArguments: true
+  params: count=countSql
+  maxPageSize: 500
+
+# Swagger閰嶇疆
+swagger:
+  # 鏄惁寮�鍚痵wagger
+  enabled: true
+  # 璇锋眰鍓嶇紑
+  pathMapping: /dev-api
+
+# 闃叉XSS鏀诲嚮
+xss:
+  # 杩囨护寮�鍏�
+  enabled: true
+  # 鎺掗櫎閾炬帴锛堝涓敤閫楀彿鍒嗛殧锛�
+  excludes: /system/notice
+  # 鍖归厤閾炬帴
+  urlPatterns: /system/*,/monitor/*,/tool/*
+
+# Shiro
+shiro:
+  session:
+    # 鍚屼竴涓敤鎴锋渶澶т細璇濇暟锛屾瘮濡�2鐨勬剰鎬濇槸鍚屼竴涓处鍙峰厑璁告渶澶氬悓鏃朵袱涓汉鐧诲綍锛堥粯璁�-1涓嶉檺鍒讹級
+    maxSession: 1
+    # 韪㈠嚭涔嬪墠鐧诲綍鐨�/涔嬪悗鐧诲綍鐨勭敤鎴凤紝榛樿韪㈠嚭涔嬪墠鐧诲綍鐨勭敤鎴�
+    kickoutAfter: false
+rtdb:
+  host: http://127.0.0.1:8086
+  token: ==
+  org: org
+  bucket: bucket
+  
+###################### MQTT #################################
+mqtt:
+  # 鏈嶅姟鍣ㄥ湴鍧�
+  host: tcp://127.0.0.1:1883
+  # ID鍞竴
+  clientId: MQTT_WK
+  # 涓婚 澶氫釜涓婚鐢ㄩ�楀彿(,)鍒嗗壊 #琛ㄧず杩欎釜涓婚涓嬮潰鎵�鏈夛紝topic1,topic2,topic2/topic22/#(榛樿浼氬彇绗竴涓富棰�)
+  topics: topic1
+  # 鐢ㄦ埛鍚�
+  username: admin
+  # 瀵嗙爜
+  password: 111111
+  # 杩炴帴瓒呮椂
+  timeout: 30
+  # 蹇冭烦妫�娴�
+  keepalive: 60
+  # 瀵规秷鎭鐞嗙殑鍑犵鏈哄埗銆�
+  # 0 琛ㄧず鐨勬槸璁㈤槄鑰呮病鏀跺埌娑堟伅涓嶄細鍐嶆鍙戦�侊紝娑堟伅浼氫涪澶�
+  # 1 琛ㄧず鐨勬槸浼氬皾璇曢噸璇曪紝涓�鐩村埌鎺ユ敹鍒版秷鎭紝浣嗚繖绉嶆儏鍐靛彲鑳藉鑷磋闃呰�呮敹鍒板娆¢噸澶嶆秷鎭�
+  # 2 澶氫簡涓�娆″幓閲嶇殑鍔ㄤ綔锛岀‘淇濊闃呰�呮敹鍒扮殑娑堟伅鏈変竴娆�
+  qos: 1
+  # false涓哄缓绔嬫寔涔呬細璇�
+  cleanSession: false
+  # 鏂紑鍚庨噸鏂拌繛鎺�
+  automaticReconnect: true
\ No newline at end of file
diff --git a/zhitan-admin/target/classes/banner.txt b/zhitan-admin/target/classes/banner.txt
new file mode 100644
index 0000000..ba1fe49
--- /dev/null
+++ b/zhitan-admin/target/classes/banner.txt
@@ -0,0 +1,24 @@
+Application Version: 3.8.7
+Spring Boot Version: ${spring-boot.version}
+////////////////////////////////////////////////////////////////////
+//                          _ooOoo_                               //
+//                         o8888888o                              //
+//                         88" . "88                              //
+//                         (| ^_^ |)                              //
+//                         O\  =  /O                              //
+//                      ____/`---'\____                           //
+//                    .'  \\|     |//  `.                         //
+//                   /  \\|||  :  |||//  \                        //
+//                  /  _||||| -:- |||||-  \                       //
+//                  |   | \\\  -  /// |   |                       //
+//                  | \_|  ''\---/''  |   |                       //
+//                  \  .-\__  `-`  ___/-. /                       //
+//                ___`. .'  /--.--\  `. . ___                     //
+//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
+//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
+//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
+//      ========`-.____`-.___\_____/___.-`____.-'========         //
+//                           `=---='                              //
+//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
+//             浣涚淇濅綉       姘镐笉瀹曟満      姘告棤BUG               //
+////////////////////////////////////////////////////////////////////
\ No newline at end of file
diff --git a/zhitan-admin/target/classes/i18n/messages.properties b/zhitan-admin/target/classes/i18n/messages.properties
new file mode 100644
index 0000000..93de005
--- /dev/null
+++ b/zhitan-admin/target/classes/i18n/messages.properties
@@ -0,0 +1,38 @@
+#閿欒娑堟伅
+not.null=* 蹇呴』濉啓
+user.jcaptcha.error=楠岃瘉鐮侀敊璇�
+user.jcaptcha.expire=楠岃瘉鐮佸凡澶辨晥
+user.not.exists=鐢ㄦ埛涓嶅瓨鍦�/瀵嗙爜閿欒
+user.password.not.match=鐢ㄦ埛涓嶅瓨鍦�/瀵嗙爜閿欒
+user.password.retry.limit.count=瀵嗙爜杈撳叆閿欒{0}娆�
+user.password.retry.limit.exceed=瀵嗙爜杈撳叆閿欒{0}娆★紝甯愭埛閿佸畾{1}鍒嗛挓
+user.password.delete=瀵逛笉璧凤紝鎮ㄧ殑璐﹀彿宸茶鍒犻櫎
+user.blocked=鐢ㄦ埛宸插皝绂侊紝璇疯仈绯荤鐞嗗憳
+role.blocked=瑙掕壊宸插皝绂侊紝璇疯仈绯荤鐞嗗憳
+login.blocked=寰堥仐鎲撅紝璁块棶IP宸茶鍒楀叆绯荤粺榛戝悕鍗�
+user.logout.success=閫�鍑烘垚鍔�
+
+length.not.valid=闀垮害蹇呴』鍦▄min}鍒皗max}涓瓧绗︿箣闂�
+
+user.username.not.valid=* 2鍒�20涓眽瀛椼�佸瓧姣嶃�佹暟瀛楁垨涓嬪垝绾跨粍鎴愶紝涓斿繀椤讳互闈炴暟瀛楀紑澶�
+user.password.not.valid=* 5-50涓瓧绗�
+ 
+user.email.not.valid=閭鏍煎紡閿欒
+user.mobile.phone.number.not.valid=鎵嬫満鍙锋牸寮忛敊璇�
+user.login.success=鐧诲綍鎴愬姛
+user.register.success=娉ㄥ唽鎴愬姛
+user.notfound=璇烽噸鏂扮櫥褰�
+user.forcelogout=绠$悊鍛樺己鍒堕��鍑猴紝璇烽噸鏂扮櫥褰�
+user.unknown.error=鏈煡閿欒锛岃閲嶆柊鐧诲綍
+
+##鏂囦欢涓婁紶娑堟伅
+upload.exceed.maxSize=涓婁紶鐨勬枃浠跺ぇ灏忚秴鍑洪檺鍒剁殑鏂囦欢澶у皬锛�<br/>鍏佽鐨勬枃浠舵渶澶уぇ灏忔槸锛歿0}MB锛�
+upload.filename.exceed.length=涓婁紶鐨勬枃浠跺悕鏈�闀縶0}涓瓧绗�
+
+##鏉冮檺
+no.permission=鎮ㄦ病鏈夋暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄� [{0}]
+no.create.permission=鎮ㄦ病鏈夊垱寤烘暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄� [{0}]
+no.update.permission=鎮ㄦ病鏈変慨鏀规暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄� [{0}]
+no.delete.permission=鎮ㄦ病鏈夊垹闄ゆ暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄� [{0}]
+no.export.permission=鎮ㄦ病鏈夊鍑烘暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄� [{0}]
+no.view.permission=鎮ㄦ病鏈夋煡鐪嬫暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄� [{0}]
diff --git a/zhitan-admin/target/classes/logback.xml b/zhitan-admin/target/classes/logback.xml
new file mode 100644
index 0000000..6491ba9
--- /dev/null
+++ b/zhitan-admin/target/classes/logback.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <!-- 鏃ュ織瀛樻斁璺緞 -->
+	<property name="log.path" value="./logs" />
+    <!-- 鏃ュ織杈撳嚭鏍煎紡 -->
+	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
+
+	<!-- 鎺у埗鍙拌緭鍑� -->
+	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<pattern>${log.pattern}</pattern>
+		</encoder>
+	</appender>
+	
+	<!-- 绯荤粺鏃ュ織杈撳嚭 -->
+	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+	    <file>${log.path}/sys-info.log</file>
+        <!-- 寰幆鏀跨瓥锛氬熀浜庢椂闂村垱寤烘棩蹇楁枃浠� -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 鏃ュ織鏂囦欢鍚嶆牸寮� -->
+			<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
+			<!-- 鏃ュ織鏈�澶х殑鍘嗗彶 60澶� -->
+			<maxHistory>60</maxHistory>
+		</rollingPolicy>
+		<encoder>
+			<pattern>${log.pattern}</pattern>
+		</encoder>
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 杩囨护鐨勭骇鍒� -->
+            <level>INFO</level>
+            <!-- 鍖归厤鏃剁殑鎿嶄綔锛氭帴鏀讹紙璁板綍锛� -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 涓嶅尮閰嶆椂鐨勬搷浣滐細鎷掔粷锛堜笉璁板綍锛� -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+	</appender>
+	
+	<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+	    <file>${log.path}/sys-error.log</file>
+        <!-- 寰幆鏀跨瓥锛氬熀浜庢椂闂村垱寤烘棩蹇楁枃浠� -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 鏃ュ織鏂囦欢鍚嶆牸寮� -->
+            <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
+			<!-- 鏃ュ織鏈�澶х殑鍘嗗彶 60澶� -->
+			<maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 杩囨护鐨勭骇鍒� -->
+            <level>ERROR</level>
+			<!-- 鍖归厤鏃剁殑鎿嶄綔锛氭帴鏀讹紙璁板綍锛� -->
+            <onMatch>ACCEPT</onMatch>
+			<!-- 涓嶅尮閰嶆椂鐨勬搷浣滐細鎷掔粷锛堜笉璁板綍锛� -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+	
+	<!-- 鐢ㄦ埛璁块棶鏃ュ織杈撳嚭  -->
+    <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${log.path}/sys-user.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 鎸夊ぉ鍥炴粴 daily -->
+            <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 鏃ュ織鏈�澶х殑鍘嗗彶 60澶� -->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
+	
+	<!-- 绯荤粺妯″潡鏃ュ織绾у埆鎺у埗  -->
+	<logger name="com.zhitan" level="info" />
+	<!-- Spring鏃ュ織绾у埆鎺у埗  -->
+	<logger name="org.springframework" level="warn" />
+
+	<root level="info">
+		<appender-ref ref="console" />
+	</root>
+	
+	<!--绯荤粺鎿嶄綔鏃ュ織-->
+    <root level="info">
+        <appender-ref ref="file_info" />
+        <appender-ref ref="file_error" />
+    </root>
+	
+	<!--绯荤粺鐢ㄦ埛鎿嶄綔鏃ュ織-->
+    <logger name="sys-user" level="info">
+        <appender-ref ref="sys-user"/>
+    </logger>
+</configuration> 
\ No newline at end of file
diff --git a/zhitan-admin/target/classes/mybatis/mybatis-config.xml b/zhitan-admin/target/classes/mybatis/mybatis-config.xml
new file mode 100644
index 0000000..dc7b13b
--- /dev/null
+++ b/zhitan-admin/target/classes/mybatis/mybatis-config.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE configuration
+        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-config.dtd">
+<configuration>
+    <!-- 鍏ㄥ眬鍙傛暟 -->
+    <settings>
+        <!-- 浣垮叏灞�鐨勬槧灏勫櫒鍚敤鎴栫鐢ㄧ紦瀛� -->
+        <setting name="cacheEnabled" value="true"/>
+        <!-- 鍏佽JDBC 鏀寔鑷姩鐢熸垚涓婚敭 -->
+        <setting name="useGeneratedKeys" value="true"/>
+        <!-- 閰嶇疆榛樿鐨勬墽琛屽櫒.SIMPLE灏辨槸鏅�氭墽琛屽櫒;REUSE鎵ц鍣ㄤ細閲嶇敤棰勫鐞嗚鍙�(prepared statements);BATCH鎵ц鍣ㄥ皢閲嶇敤璇彞骞舵墽琛屾壒閲忔洿鏂� -->
+        <setting name="defaultExecutorType" value="SIMPLE"/>
+        <!-- 鎸囧畾 MyBatis 鎵�鐢ㄦ棩蹇楃殑鍏蜂綋瀹炵幇 -->
+        <setting name="logImpl" value="SLF4J"/>
+        <!-- 浣跨敤椹煎嘲鍛藉悕娉曡浆鎹㈠瓧娈� -->
+        <setting name="mapUnderscoreToCamelCase" value="true"/>
+    </settings>
+
+</configuration>
\ No newline at end of file
diff --git a/zhitan-common/pom.xml b/zhitan-common/pom.xml
new file mode 100644
index 0000000..d7a6fb9
--- /dev/null
+++ b/zhitan-common/pom.xml
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>BaseAdminAPI</artifactId>
+        <groupId>com.zhitan</groupId>
+        <version>3.8.7</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>zhitan-common</artifactId>
+
+    <description>
+        common閫氱敤宸ュ叿
+    </description>
+
+    <dependencies>
+
+        <!-- Spring妗嗘灦鍩烘湰鐨勬牳蹇冨伐鍏� -->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context-support</artifactId>
+        </dependency>
+
+        <!-- SpringWeb妯″潡 -->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-web</artifactId>
+        </dependency>
+
+        <!-- spring security 瀹夊叏璁よ瘉 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.github.jsqlparser</groupId>
+            <artifactId>jsqlparser</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+        </dependency>
+
+        <!-- 鑷畾涔夐獙璇佹敞瑙� -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+
+        <!--甯哥敤宸ュ叿绫� -->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+  
+        <!-- JSON宸ュ叿绫� -->
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+        
+        <!-- 鍔ㄦ�佹暟鎹簮 -->
+		<dependency>
+			<groupId>com.baomidou</groupId>
+			<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
+			<version>3.5.2</version>
+		</dependency>
+
+        <!-- 闃块噷JSON瑙f瀽鍣� -->
+        <dependency>
+            <groupId>com.alibaba.fastjson2</groupId>
+            <artifactId>fastjson2</artifactId>
+        </dependency>
+
+        <!-- io甯哥敤宸ュ叿绫� -->
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+        </dependency>
+
+        <!-- excel宸ュ叿 -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+        </dependency>
+
+        <!-- yml瑙f瀽鍣� -->
+        <dependency>
+            <groupId>org.yaml</groupId>
+            <artifactId>snakeyaml</artifactId>
+        </dependency>
+
+        <!-- Token鐢熸垚涓庤В鏋�-->
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt</artifactId>
+        </dependency>
+
+        <!-- Jaxb -->
+        <dependency>
+            <groupId>javax.xml.bind</groupId>
+            <artifactId>jaxb-api</artifactId>
+        </dependency>
+
+        <!-- redis 缂撳瓨鎿嶄綔 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+
+        <!-- pool 瀵硅薄姹� -->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-pool2</artifactId>
+        </dependency>
+
+        <!-- 瑙f瀽瀹㈡埛绔搷浣滅郴缁熴�佹祻瑙堝櫒绛� -->
+        <dependency>
+            <groupId>eu.bitwalker</groupId>
+            <artifactId>UserAgentUtils</artifactId>
+        </dependency>
+
+        <!-- servlet鍖� -->
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+        </dependency>
+
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/zhitan-common/src/main/java/com/zhitan/common/annotation/Anonymous.java b/zhitan-common/src/main/java/com/zhitan/common/annotation/Anonymous.java
new file mode 100644
index 0000000..29acaef
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/annotation/Anonymous.java
@@ -0,0 +1,19 @@
+package com.zhitan.common.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 鍖垮悕璁块棶涓嶉壌鏉冩敞瑙�
+ * 
+ * @author zhitan
+ */
+@Target({ ElementType.METHOD, ElementType.TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface Anonymous
+{
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/annotation/DataScope.java b/zhitan-common/src/main/java/com/zhitan/common/annotation/DataScope.java
new file mode 100644
index 0000000..abd6701
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/annotation/DataScope.java
@@ -0,0 +1,33 @@
+package com.zhitan.common.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 鏁版嵁鏉冮檺杩囨护娉ㄨВ
+ * 
+ * @author zhitan
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface DataScope
+{
+    /**
+     * 閮ㄩ棬琛ㄧ殑鍒悕
+     */
+    public String deptAlias() default "";
+
+    /**
+     * 鐢ㄦ埛琛ㄧ殑鍒悕
+     */
+    public String userAlias() default "";
+
+    /**
+     * 鏉冮檺瀛楃锛堢敤浜庡涓鑹插尮閰嶇鍚堣姹傜殑鏉冮檺锛夐粯璁ゆ牴鎹潈闄愭敞瑙ss鑾峰彇锛屽涓潈闄愮敤閫楀彿鍒嗛殧寮�鏉�
+     */
+    public String permission() default "";
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/annotation/DataSource.java b/zhitan-common/src/main/java/com/zhitan/common/annotation/DataSource.java
new file mode 100644
index 0000000..b94cac9
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/annotation/DataSource.java
@@ -0,0 +1,28 @@
+package com.zhitan.common.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import com.zhitan.common.enums.DataSourceType;
+
+/**
+ * 鑷畾涔夊鏁版嵁婧愬垏鎹㈡敞瑙�
+ *
+ * 浼樺厛绾э細鍏堟柟娉曪紝鍚庣被锛屽鏋滄柟娉曡鐩栦簡绫讳笂鐨勬暟鎹簮绫诲瀷锛屼互鏂规硶鐨勪负鍑嗭紝鍚﹀垯浠ョ被涓婄殑涓哄噯
+ *
+ * @author zhitan
+ */
+@Target({ ElementType.METHOD, ElementType.TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+@Inherited
+public @interface DataSource
+{
+    /**
+     * 鍒囨崲鏁版嵁婧愬悕绉�
+     */
+    public DataSourceType value() default DataSourceType.MASTER;
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/annotation/Excel.java b/zhitan-common/src/main/java/com/zhitan/common/annotation/Excel.java
new file mode 100644
index 0000000..283a0ef
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/annotation/Excel.java
@@ -0,0 +1,187 @@
+package com.zhitan.common.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.math.BigDecimal;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import com.zhitan.common.utils.poi.ExcelHandlerAdapter;
+
+/**
+ * 鑷畾涔夊鍑篍xcel鏁版嵁娉ㄨВ
+ * 
+ * @author zhitan
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface Excel
+{
+    /**
+     * 瀵煎嚭鏃跺湪excel涓帓搴�
+     */
+    public int sort() default Integer.MAX_VALUE;
+
+    /**
+     * 瀵煎嚭鍒癊xcel涓殑鍚嶅瓧.
+     */
+    public String name() default "";
+
+    /**
+     * 鏃ユ湡鏍煎紡, 濡�: yyyy-MM-dd
+     */
+    public String dateFormat() default "";
+
+    /**
+     * 濡傛灉鏄瓧鍏哥被鍨嬶紝璇疯缃瓧鍏哥殑type鍊� (濡�: sys_user_sex)
+     */
+    public String dictType() default "";
+
+    /**
+     * 璇诲彇鍐呭杞〃杈惧紡 (濡�: 0=鐢�,1=濂�,2=鏈煡)
+     */
+    public String readConverterExp() default "";
+
+    /**
+     * 鍒嗛殧绗︼紝璇诲彇瀛楃涓茬粍鍐呭
+     */
+    public String separator() default ",";
+
+    /**
+     * BigDecimal 绮惧害 榛樿:-1(榛樿涓嶅紑鍚疊igDecimal鏍煎紡鍖�)
+     */
+    public int scale() default -1;
+
+    /**
+     * BigDecimal 鑸嶅叆瑙勫垯 榛樿:BigDecimal.ROUND_HALF_EVEN
+     */
+    public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;
+
+    /**
+     * 瀵煎嚭鏃跺湪excel涓瘡涓垪鐨勯珮搴�
+     */
+    public double height() default 14;
+
+    /**
+     * 瀵煎嚭鏃跺湪excel涓瘡涓垪鐨勫搴�
+     */
+    public double width() default 16;
+
+    /**
+     * 鏂囧瓧鍚庣紑,濡�% 90 鍙樻垚90%
+     */
+    public String suffix() default "";
+
+    /**
+     * 褰撳�间负绌烘椂,瀛楁鐨勯粯璁ゅ��
+     */
+    public String defaultValue() default "";
+
+    /**
+     * 鎻愮ず淇℃伅
+     */
+    public String prompt() default "";
+
+    /**
+     * 璁剧疆鍙兘閫夋嫨涓嶈兘杈撳叆鐨勫垪鍐呭.
+     */
+    public String[] combo() default {};
+
+    /**
+     * 鏄惁闇�瑕佺旱鍚戝悎骞跺崟鍏冩牸,搴斿闇�姹�:鍚湁list闆嗗悎鍗曞厓鏍�)
+     */
+    public boolean needMerge() default false;
+
+    /**
+     * 鏄惁瀵煎嚭鏁版嵁,搴斿闇�姹�:鏈夋椂鎴戜滑闇�瑕佸鍑轰竴浠芥ā鏉�,杩欐槸鏍囬闇�瑕佷絾鍐呭闇�瑕佺敤鎴锋墜宸ュ~鍐�.
+     */
+    public boolean isExport() default true;
+
+    /**
+     * 鍙︿竴涓被涓殑灞炴�у悕绉�,鏀寔澶氱骇鑾峰彇,浠ュ皬鏁扮偣闅斿紑
+     */
+    public String targetAttr() default "";
+
+    /**
+     * 鏄惁鑷姩缁熻鏁版嵁,鍦ㄦ渶鍚庤拷鍔犱竴琛岀粺璁℃暟鎹�诲拰
+     */
+    public boolean isStatistics() default false;
+
+    /**
+     * 瀵煎嚭绫诲瀷锛�0鏁板瓧 1瀛楃涓� 2鍥剧墖锛�
+     */
+    public ColumnType cellType() default ColumnType.STRING;
+
+    /**
+     * 瀵煎嚭鍒楀ご鑳屾櫙棰滆壊
+     */
+    public IndexedColors headerBackgroundColor() default IndexedColors.GREY_50_PERCENT;
+
+    /**
+     * 瀵煎嚭鍒楀ご瀛椾綋棰滆壊
+     */
+    public IndexedColors headerColor() default IndexedColors.WHITE;
+
+    /**
+     * 瀵煎嚭鍗曞厓鏍艰儗鏅鑹�
+     */
+    public IndexedColors backgroundColor() default IndexedColors.WHITE;
+
+    /**
+     * 瀵煎嚭鍗曞厓鏍煎瓧浣撻鑹�
+     */
+    public IndexedColors color() default IndexedColors.BLACK;
+
+    /**
+     * 瀵煎嚭瀛楁瀵归綈鏂瑰紡
+     */
+    public HorizontalAlignment align() default HorizontalAlignment.CENTER;
+
+    /**
+     * 鑷畾涔夋暟鎹鐞嗗櫒
+     */
+    public Class<?> handler() default ExcelHandlerAdapter.class;
+
+    /**
+     * 鑷畾涔夋暟鎹鐞嗗櫒鍙傛暟
+     */
+    public String[] args() default {};
+
+    /**
+     * 瀛楁绫诲瀷锛�0锛氬鍑哄鍏ワ紱1锛氫粎瀵煎嚭锛�2锛氫粎瀵煎叆锛�
+     */
+    Type type() default Type.ALL;
+
+    public enum Type
+    {
+        ALL(0), EXPORT(1), IMPORT(2);
+        private final int value;
+
+        Type(int value)
+        {
+            this.value = value;
+        }
+
+        public int value()
+        {
+            return this.value;
+        }
+    }
+
+    public enum ColumnType
+    {
+        NUMERIC(0), STRING(1), IMAGE(2), TEXT(3);
+        private final int value;
+
+        ColumnType(int value)
+        {
+            this.value = value;
+        }
+
+        public int value()
+        {
+            return this.value;
+        }
+    }
+}
\ No newline at end of file
diff --git a/zhitan-common/src/main/java/com/zhitan/common/annotation/Excels.java b/zhitan-common/src/main/java/com/zhitan/common/annotation/Excels.java
new file mode 100644
index 0000000..b25aa8d
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/annotation/Excels.java
@@ -0,0 +1,18 @@
+package com.zhitan.common.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Excel娉ㄨВ闆�
+ * 
+ * @author zhitan
+ */
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Excels
+{
+    public Excel[] value();
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/annotation/Log.java b/zhitan-common/src/main/java/com/zhitan/common/annotation/Log.java
new file mode 100644
index 0000000..d985a31
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/annotation/Log.java
@@ -0,0 +1,51 @@
+package com.zhitan.common.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.enums.OperatorType;
+
+/**
+ * 鑷畾涔夋搷浣滄棩蹇楄褰曟敞瑙�
+ * 
+ * @author zhitan
+ *
+ */
+@Target({ ElementType.PARAMETER, ElementType.METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface Log
+{
+    /**
+     * 妯″潡
+     */
+    public String title() default "";
+
+    /**
+     * 鍔熻兘
+     */
+    public BusinessType businessType() default BusinessType.OTHER;
+
+    /**
+     * 鎿嶄綔浜虹被鍒�
+     */
+    public OperatorType operatorType() default OperatorType.MANAGE;
+
+    /**
+     * 鏄惁淇濆瓨璇锋眰鐨勫弬鏁�
+     */
+    public boolean isSaveRequestData() default true;
+
+    /**
+     * 鏄惁淇濆瓨鍝嶅簲鐨勫弬鏁�
+     */
+    public boolean isSaveResponseData() default true;
+
+    /**
+     * 鎺掗櫎鎸囧畾鐨勮姹傚弬鏁�
+     */
+    public String[] excludeParamNames() default {};
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/annotation/RateLimiter.java b/zhitan-common/src/main/java/com/zhitan/common/annotation/RateLimiter.java
new file mode 100644
index 0000000..92f2921
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/annotation/RateLimiter.java
@@ -0,0 +1,40 @@
+package com.zhitan.common.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import com.zhitan.common.constant.CacheConstants;
+import com.zhitan.common.enums.LimitType;
+
+/**
+ * 闄愭祦娉ㄨВ
+ * 
+ * @author zhitan
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface RateLimiter
+{
+    /**
+     * 闄愭祦key
+     */
+    public String key() default CacheConstants.RATE_LIMIT_KEY;
+
+    /**
+     * 闄愭祦鏃堕棿,鍗曚綅绉�
+     */
+    public int time() default 60;
+
+    /**
+     * 闄愭祦娆℃暟
+     */
+    public int count() default 100;
+
+    /**
+     * 闄愭祦绫诲瀷
+     */
+    public LimitType limitType() default LimitType.DEFAULT;
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/annotation/RepeatSubmit.java b/zhitan-common/src/main/java/com/zhitan/common/annotation/RepeatSubmit.java
new file mode 100644
index 0000000..2b3695c
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/annotation/RepeatSubmit.java
@@ -0,0 +1,31 @@
+package com.zhitan.common.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 鑷畾涔夋敞瑙i槻姝㈣〃鍗曢噸澶嶆彁浜�
+ * 
+ * @author zhitan
+ *
+ */
+@Inherited
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface RepeatSubmit
+{
+    /**
+     * 闂撮殧鏃堕棿(ms)锛屽皬浜庢鏃堕棿瑙嗕负閲嶅鎻愪氦
+     */
+    public int interval() default 5000;
+
+    /**
+     * 鎻愮ず娑堟伅
+     */
+    public String message() default "涓嶅厑璁搁噸澶嶆彁浜わ紝璇风◢鍊欏啀璇�";
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/annotation/Sensitive.java b/zhitan-common/src/main/java/com/zhitan/common/annotation/Sensitive.java
new file mode 100644
index 0000000..6b88126
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/annotation/Sensitive.java
@@ -0,0 +1,24 @@
+package com.zhitan.common.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.zhitan.common.config.serializer.SensitiveJsonSerializer;
+import com.zhitan.common.enums.DesensitizedType;
+
+/**
+ * 鏁版嵁鑴辨晱娉ㄨВ
+ *
+ * @author zhitan
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+@JacksonAnnotationsInside
+@JsonSerialize(using = SensitiveJsonSerializer.class)
+public @interface Sensitive
+{
+    DesensitizedType desensitizedType();
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java b/zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java
new file mode 100644
index 0000000..edd535b
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java
@@ -0,0 +1,122 @@
+package com.zhitan.common.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 璇诲彇椤圭洰鐩稿叧閰嶇疆
+ * 
+ * @author zhitan
+ */
+@Component
+@ConfigurationProperties(prefix = "base")
+public class BaseConfig
+{
+    /** 椤圭洰鍚嶇О */
+    private String name;
+
+    /** 鐗堟湰 */
+    private String version;
+
+    /** 鐗堟潈骞翠唤 */
+    private String copyrightYear;
+
+    /** 涓婁紶璺緞 */
+    private static String profile;
+
+    /** 鑾峰彇鍦板潃寮�鍏� */
+    private static boolean addressEnabled;
+
+    /** 楠岃瘉鐮佺被鍨� */
+    private static String captchaType;
+
+    public String getName()
+    {
+        return name;
+    }
+
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+
+    public String getVersion()
+    {
+        return version;
+    }
+
+    public void setVersion(String version)
+    {
+        this.version = version;
+    }
+
+    public String getCopyrightYear()
+    {
+        return copyrightYear;
+    }
+
+    public void setCopyrightYear(String copyrightYear)
+    {
+        this.copyrightYear = copyrightYear;
+    }
+
+    public static String getProfile()
+    {
+        return profile;
+    }
+
+    public void setProfile(String profile)
+    {
+        BaseConfig.profile = profile;
+    }
+
+    public static boolean isAddressEnabled()
+    {
+        return addressEnabled;
+    }
+
+    public void setAddressEnabled(boolean addressEnabled)
+    {
+        BaseConfig.addressEnabled = addressEnabled;
+    }
+
+    public static String getCaptchaType() {
+        return captchaType;
+    }
+
+    public void setCaptchaType(String captchaType) {
+        BaseConfig.captchaType = captchaType;
+    }
+
+    /**
+     * 鑾峰彇瀵煎叆涓婁紶璺緞
+     */
+    public static String getImportPath()
+    {
+        return getProfile() + "/import";
+    }
+
+    /**
+     * 鑾峰彇澶村儚涓婁紶璺緞
+     */
+    public static String getAvatarPath()
+    {
+        return getProfile() + "/avatar";
+    }
+
+    /**
+     * 鑾峰彇涓嬭浇璺緞
+     */
+    public static String getDownloadPath()
+    {
+        return getProfile() + "/download/";
+    }
+
+    /**
+     * 鑾峰彇涓婁紶璺緞
+     */
+    public static String getUploadPath()
+    {
+        return getProfile() + "/upload";
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/config/serializer/SensitiveJsonSerializer.java b/zhitan-common/src/main/java/com/zhitan/common/config/serializer/SensitiveJsonSerializer.java
new file mode 100644
index 0000000..46dc848
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/config/serializer/SensitiveJsonSerializer.java
@@ -0,0 +1,67 @@
+package com.zhitan.common.config.serializer;
+
+import java.io.IOException;
+import java.util.Objects;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.BeanProperty;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.ser.ContextualSerializer;
+import com.zhitan.common.annotation.Sensitive;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.enums.DesensitizedType;
+import com.zhitan.common.utils.SecurityUtils;
+
+/**
+ * 鏁版嵁鑴辨晱搴忓垪鍖栬繃婊�
+ *
+ * @author zhitan
+ */
+public class SensitiveJsonSerializer extends JsonSerializer<String> implements ContextualSerializer
+{
+    private DesensitizedType desensitizedType;
+
+    @Override
+    public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException
+    {
+        if (desensitization())
+        {
+            gen.writeString(desensitizedType.desensitizer().apply(value));
+        }
+        else
+        {
+            gen.writeString(value);
+        }
+    }
+
+    @Override
+    public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property)
+            throws JsonMappingException
+    {
+        Sensitive annotation = property.getAnnotation(Sensitive.class);
+        if (Objects.nonNull(annotation) && Objects.equals(String.class, property.getType().getRawClass()))
+        {
+            this.desensitizedType = annotation.desensitizedType();
+            return this;
+        }
+        return prov.findValueSerializer(property.getType(), property);
+    }
+
+    /**
+     * 鏄惁闇�瑕佽劚鏁忓鐞�
+     */
+    private boolean desensitization()
+    {
+        try
+        {
+            LoginUser securityUser = SecurityUtils.getLoginUser();
+            // 绠$悊鍛樹笉鑴辨晱
+            return !securityUser.getUser().isAdmin();
+        }
+        catch (Exception e)
+        {
+            return true;
+        }
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/constant/CacheConstants.java b/zhitan-common/src/main/java/com/zhitan/common/constant/CacheConstants.java
new file mode 100644
index 0000000..f1886c2
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/constant/CacheConstants.java
@@ -0,0 +1,44 @@
+package com.zhitan.common.constant;
+
+/**
+ * 缂撳瓨鐨刱ey 甯搁噺
+ * 
+ * @author zhitan
+ */
+public class CacheConstants
+{
+    /**
+     * 鐧诲綍鐢ㄦ埛 redis key
+     */
+    public static final String LOGIN_TOKEN_KEY = "login_tokens:";
+
+    /**
+     * 楠岃瘉鐮� redis key
+     */
+    public static final String CAPTCHA_CODE_KEY = "captcha_codes:";
+
+    /**
+     * 鍙傛暟绠$悊 cache key
+     */
+    public static final String SYS_CONFIG_KEY = "sys_config:";
+
+    /**
+     * 瀛楀吀绠$悊 cache key
+     */
+    public static final String SYS_DICT_KEY = "sys_dict:";
+
+    /**
+     * 闃查噸鎻愪氦 redis key
+     */
+    public static final String REPEAT_SUBMIT_KEY = "repeat_submit:";
+
+    /**
+     * 闄愭祦 redis key
+     */
+    public static final String RATE_LIMIT_KEY = "rate_limit:";
+
+    /**
+     * 鐧诲綍璐︽埛瀵嗙爜閿欒娆℃暟 redis key
+     */
+    public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/constant/CommonConst.java b/zhitan-common/src/main/java/com/zhitan/common/constant/CommonConst.java
new file mode 100644
index 0000000..939d0f7
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/constant/CommonConst.java
@@ -0,0 +1,145 @@
+package com.zhitan.common.constant;
+
+/**
+ * @Description: 甯搁噺灏佽
+ * @author: yxw
+ * @date: 2022骞�02鏈�02鏃� 11:37
+ */
+public class CommonConst {
+    /**
+     * 甯搁噺瀛楃涓� - 绌哄瓧绗︿覆
+     */
+    public static final String EMPTY = "";
+    /**
+     * 鍙屽噺鍙�
+     */
+    public static final String DOUBLE_MINUS_SIGN = "--";
+    /**
+     * 鐧惧垎姣�
+     */
+    public static final String PERCENTAGE = "%";
+    /**
+     * 瀛楃涓叉暟瀛� -1
+     */
+    public static final String STR_NUMBER_MINUS_ONE = "-1";
+    /**
+     * 瀛楃涓叉暟瀛� 0
+     */
+    public static final String STR_NUMBER_0 = "0";
+    /**
+     * 瀛楃涓叉暟瀛� 1
+     */
+    public static final String STR_NUMBER_1 = "1";
+    /**
+     * 瀛楃涓叉暟瀛� 2
+     */
+    public static final String STR_NUMBER_2 = "2";
+    /**
+     * 瀛楃涓叉暟瀛� 3
+     */
+    public static final String STR_NUMBER_3 = "3";
+    /**
+     * 瀛楃涓叉暟瀛� 4
+     */
+    public static final String STR_NUMBER_4 = "4";
+    /**
+     * 瀛楃涓叉暟瀛� 5
+     */
+    public static final String STR_NUMBER_5 = "5";
+    /**
+     * 瀛楃涓叉暟瀛� 6
+     */
+    public static final String STR_NUMBER_6 = "6";
+    /**
+     * 瀛楃涓叉暟瀛� 7
+     */
+    public static final String STR_NUMBER_7 = "7";
+    /**
+     * 瀛楃涓叉暟瀛� 8
+     */
+    public static final String STR_NUMBER_8 = "8";
+    /**
+     * 瀛楃涓叉暟瀛� 9
+     */
+    public static final String STR_NUMBER_9 = "9";
+    /**
+     * 瀛楃涓叉暟瀛� 10
+     */
+    public static final String STR_NUMBER_10 = "10";
+    /**
+     * 瀛楃涓叉暟瀛� 11
+     */
+    public static final String STR_NUMBER_11 = "11";
+    /**
+     * 瀛楃涓叉暟瀛� 12
+     */
+    public static final String STR_NUMBER_12 = "12";
+    /**
+     * 澶у啓瀛楁瘝 M
+     */
+    public static final String WORD_M = "M";
+    /**
+     * 澶у啓瀛楁瘝 Y
+     */
+    public static final String WORD_Y = "Y";
+    /**
+     * 澶у啓瀛楁瘝 D
+     */
+    public static final String WORD_D = "D";
+    /**
+     * 鏁板瓧 0
+     */
+    public static final int DIGIT_0 = 0;
+    /**
+     * 鏁板瓧 1
+     */
+    public static final int DIGIT_1 = 1;
+    /**
+     * 鏁板瓧 2
+     */
+    public static final int DIGIT_2 = 2;
+    /**
+     * 鏁板瓧 3
+     */
+    public static final int DIGIT_3 = 3;
+    /**
+     * 鏁板瓧 4
+     */
+    public static final int DIGIT_4 = 4;
+    /**
+     * 鏁板瓧 100
+     */
+    public static final int DIGIT_100 = 100;
+    /**
+     * 鏁板瓧 1000
+     */
+    public static final int DIGIT_1000 = 1000;
+    /**
+     * 鏁板瓧 -1
+     */
+    public static final int DIGIT_MINUS_1 = -1;
+    /**
+     * 鏁板瓧 -3
+     */
+    public static final int DIGIT_MINUS_3 = -3;
+    /**
+     * 璁$畻鐐硅瘑鍒鍒� 绱Н閲�
+     */
+    public static final String COMMON_STR_CALC_POINT_RULE_LJL = "_LJL";
+    /**
+     * 璁$畻鐐硅瘑鍒鍒� 缁煎悎鑳借��
+     */
+    public static final String COMMON_STR_CALC_POINT_RULE_ZHNH = "_ZHNH";
+    /**
+     * 璁$畻鐐硅瘑鍒鍒� 鑳芥簮浠锋牸
+     */
+    public static final String COMMON_STR_CALC_POINT_RULE_NYJG = "_NYJG";
+    /**
+     * 鏃堕棿绫诲瀷瀛楃涓� - 澶�
+     */
+    public static final String TIME_TYPE_DAY = "DAY";
+    /**
+     * 閲嶇畻鎺ュ彛鍦板潃
+     */
+    public static final String RE_CALC_INTERFACE_ADDRESS = "http://127.0.0.1:8999/computing/recalc";
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/constant/Constants.java b/zhitan-common/src/main/java/com/zhitan/common/constant/Constants.java
new file mode 100644
index 0000000..a802793
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/constant/Constants.java
@@ -0,0 +1,178 @@
+package com.zhitan.common.constant;
+
+import java.util.Locale;
+import io.jsonwebtoken.Claims;
+
+/**
+ * 閫氱敤甯搁噺淇℃伅
+ * 
+ * @author zhitan
+ */
+public class Constants
+{
+    /**
+     * UTF-8 瀛楃闆�
+     */
+    public static final String UTF8 = "UTF-8";
+
+    /**
+     * GBK 瀛楃闆�
+     */
+    public static final String GBK = "GBK";
+
+    /**
+     * 绯荤粺璇█
+     */
+    public static final Locale DEFAULT_LOCALE = Locale.SIMPLIFIED_CHINESE;
+
+    /**
+     * www涓诲煙
+     */
+    public static final String WWW = "www.";
+
+    /**
+     * http璇锋眰
+     */
+    public static final String HTTP = "http://";
+
+    /**
+     * https璇锋眰
+     */
+    public static final String HTTPS = "https://";
+
+    /**
+     * 閫氱敤鎴愬姛鏍囪瘑
+     */
+    public static final String SUCCESS = "0";
+
+    /**
+     * 閫氱敤澶辫触鏍囪瘑
+     */
+    public static final String FAIL = "1";
+
+    /**
+     * 鐧诲綍鎴愬姛
+     */
+    public static final String LOGIN_SUCCESS = "Success";
+
+    /**
+     * 娉ㄩ攢
+     */
+    public static final String LOGOUT = "Logout";
+
+    /**
+     * 娉ㄥ唽
+     */
+    public static final String REGISTER = "Register";
+
+    /**
+     * 鐧诲綍澶辫触
+     */
+    public static final String LOGIN_FAIL = "Error";
+
+    /**
+     * 鎵�鏈夋潈闄愭爣璇�
+     */
+    public static final String ALL_PERMISSION = "*:*:*";
+
+    /**
+     * 绠$悊鍛樿鑹叉潈闄愭爣璇�
+     */
+    public static final String SUPER_ADMIN = "admin";
+
+    /**
+     * 瑙掕壊鏉冮檺鍒嗛殧绗�
+     */
+    public static final String ROLE_DELIMETER = ",";
+
+    /**
+     * 鏉冮檺鏍囪瘑鍒嗛殧绗�
+     */
+    public static final String PERMISSION_DELIMETER = ",";
+
+    /**
+     * 楠岃瘉鐮佹湁鏁堟湡锛堝垎閽燂級
+     */
+    public static final Integer CAPTCHA_EXPIRATION = 2;
+
+    /**
+     * 浠ょ墝
+     */
+    public static final String TOKEN = "token";
+
+    /**
+     * 浠ょ墝鍓嶇紑
+     */
+    public static final String TOKEN_PREFIX = "Bearer ";
+
+    /**
+     * 浠ょ墝鍓嶇紑
+     */
+    public static final String LOGIN_USER_KEY = "login_user_key";
+
+    /**
+     * 鐢ㄦ埛ID
+     */
+    public static final String JWT_USERID = "userid";
+
+    /**
+     * 鐢ㄦ埛鍚嶇О
+     */
+    public static final String JWT_USERNAME = Claims.SUBJECT;
+
+    /**
+     * 鐢ㄦ埛澶村儚
+     */
+    public static final String JWT_AVATAR = "avatar";
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    public static final String JWT_CREATED = "created";
+
+    /**
+     * 鐢ㄦ埛鏉冮檺
+     */
+    public static final String JWT_AUTHORITIES = "authorities";
+
+    /**
+     * 璧勬簮鏄犲皠璺緞 鍓嶇紑
+     */
+    public static final String RESOURCE_PREFIX = "/profile";
+
+    /**
+     * 鎸囨爣妯℃澘 redis key
+     */
+    public static final String DAQ_TEMPLATE_KEY = "daq_template";
+    
+    /**
+     * RMI 杩滅▼鏂规硶璋冪敤
+     */
+    public static final String LOOKUP_RMI = "rmi:";
+
+    /**
+     * LDAP 杩滅▼鏂规硶璋冪敤
+     */
+    public static final String LOOKUP_LDAP = "ldap:";
+
+    /**
+     * LDAPS 杩滅▼鏂规硶璋冪敤
+     */
+    public static final String LOOKUP_LDAPS = "ldaps:";
+
+    /**
+     * 鑷姩璇嗗埆json瀵硅薄鐧藉悕鍗曢厤缃紙浠呭厑璁歌В鏋愮殑鍖呭悕锛岃寖鍥磋秺灏忚秺瀹夊叏锛�
+     */
+    public static final String[] JSON_WHITELIST_STR = { "org.springframework", "com.zhitan" };
+
+    /**
+     * 瀹氭椂浠诲姟鐧藉悕鍗曢厤缃紙浠呭厑璁歌闂殑鍖呭悕锛屽鍏朵粬闇�瑕佸彲浠ヨ嚜琛屾坊鍔狅級
+     */
+    public static final String[] JOB_WHITELIST_STR = { "com.zhitan.quartz.task" };
+
+    /**
+     * 瀹氭椂浠诲姟杩濊鐨勫瓧绗�
+     */
+    public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
+            "org.springframework", "org.apache", "com.zhitan.common.utils.file", "com.zhitan.common.config", "com.zhitan.generator" };
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/constant/GenConstants.java b/zhitan-common/src/main/java/com/zhitan/common/constant/GenConstants.java
new file mode 100644
index 0000000..7b626db
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/constant/GenConstants.java
@@ -0,0 +1,117 @@
+package com.zhitan.common.constant;
+
+/**
+ * 浠g爜鐢熸垚閫氱敤甯搁噺
+ * 
+ * @author zhitan
+ */
+public class GenConstants
+{
+    /** 鍗曡〃锛堝鍒犳敼鏌ワ級 */
+    public static final String TPL_CRUD = "crud";
+
+    /** 鏍戣〃锛堝鍒犳敼鏌ワ級 */
+    public static final String TPL_TREE = "tree";
+
+    /** 涓诲瓙琛紙澧炲垹鏀规煡锛� */
+    public static final String TPL_SUB = "sub";
+
+    /** 鏍戠紪鐮佸瓧娈� */
+    public static final String TREE_CODE = "treeCode";
+
+    /** 鏍戠埗缂栫爜瀛楁 */
+    public static final String TREE_PARENT_CODE = "treeParentCode";
+
+    /** 鏍戝悕绉板瓧娈� */
+    public static final String TREE_NAME = "treeName";
+
+    /** 涓婄骇鑿滃崟ID瀛楁 */
+    public static final String PARENT_MENU_ID = "parentMenuId";
+
+    /** 涓婄骇鑿滃崟鍚嶇О瀛楁 */
+    public static final String PARENT_MENU_NAME = "parentMenuName";
+
+    /** 鏁版嵁搴撳瓧绗︿覆绫诲瀷 */
+    public static final String[] COLUMNTYPE_STR = { "char", "varchar", "nvarchar", "varchar2" };
+
+    /** 鏁版嵁搴撴枃鏈被鍨� */
+    public static final String[] COLUMNTYPE_TEXT = { "tinytext", "text", "mediumtext", "longtext" };
+
+    /** 鏁版嵁搴撴椂闂寸被鍨� */
+    public static final String[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" };
+
+    /** 鏁版嵁搴撴暟瀛楃被鍨� */
+    public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer",
+            "bit", "bigint", "float", "double", "decimal" };
+
+    /** 椤甸潰涓嶉渶瑕佺紪杈戝瓧娈� */
+    public static final String[] COLUMNNAME_NOT_EDIT = { "id", "create_by", "create_time", "del_flag" };
+
+    /** 椤甸潰涓嶉渶瑕佹樉绀虹殑鍒楄〃瀛楁 */
+    public static final String[] COLUMNNAME_NOT_LIST = { "id", "create_by", "create_time", "del_flag", "update_by",
+            "update_time" };
+
+    /** 椤甸潰涓嶉渶瑕佹煡璇㈠瓧娈� */
+    public static final String[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "del_flag", "update_by",
+            "update_time", "remark" };
+
+    /** Entity鍩虹被瀛楁 */
+    public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime", "remark" };
+
+    /** Tree鍩虹被瀛楁 */
+    public static final String[] TREE_ENTITY = { "parentName", "parentId", "orderNum", "ancestors", "children" };
+
+    /** 鏂囨湰妗� */
+    public static final String HTML_INPUT = "input";
+
+    /** 鏂囨湰鍩� */
+    public static final String HTML_TEXTAREA = "textarea";
+
+    /** 涓嬫媺妗� */
+    public static final String HTML_SELECT = "select";
+
+    /** 鍗曢�夋 */
+    public static final String HTML_RADIO = "radio";
+
+    /** 澶嶉�夋 */
+    public static final String HTML_CHECKBOX = "checkbox";
+
+    /** 鏃ユ湡鎺т欢 */
+    public static final String HTML_DATETIME = "datetime";
+
+    /** 鍥剧墖涓婁紶鎺т欢 */
+    public static final String HTML_IMAGE_UPLOAD = "imageUpload";
+
+    /** 鏂囦欢涓婁紶鎺т欢 */
+    public static final String HTML_FILE_UPLOAD = "fileUpload";
+
+    /** 瀵屾枃鏈帶浠� */
+    public static final String HTML_EDITOR = "editor";
+
+    /** 瀛楃涓茬被鍨� */
+    public static final String TYPE_STRING = "String";
+
+    /** 鏁村瀷 */
+    public static final String TYPE_INTEGER = "Integer";
+
+    /** 闀挎暣鍨� */
+    public static final String TYPE_LONG = "Long";
+
+    /** 娴偣鍨� */
+    public static final String TYPE_DOUBLE = "Double";
+
+    /** 楂樼簿搴﹁绠楃被鍨� */
+    public static final String TYPE_BIGDECIMAL = "BigDecimal";
+
+    /** 鏃堕棿绫诲瀷 */
+    public static final String TYPE_DATE = "Date";
+
+    /** 妯$硦鏌ヨ */
+    public static final String QUERY_LIKE = "LIKE";
+
+    /** 鐩哥瓑鏌ヨ */
+    public static final String QUERY_EQ = "EQ";
+
+    /** 闇�瑕� */
+    public static final String REQUIRE = "1";
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/constant/HttpStatus.java b/zhitan-common/src/main/java/com/zhitan/common/constant/HttpStatus.java
new file mode 100644
index 0000000..3c28b7e
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/constant/HttpStatus.java
@@ -0,0 +1,94 @@
+package com.zhitan.common.constant;
+
+/**
+ * 杩斿洖鐘舵�佺爜
+ * 
+ * @author zhitan
+ */
+public class HttpStatus
+{
+    /**
+     * 鎿嶄綔鎴愬姛
+     */
+    public static final int SUCCESS = 200;
+
+    /**
+     * 瀵硅薄鍒涘缓鎴愬姛
+     */
+    public static final int CREATED = 201;
+
+    /**
+     * 璇锋眰宸茬粡琚帴鍙�
+     */
+    public static final int ACCEPTED = 202;
+
+    /**
+     * 鎿嶄綔宸茬粡鎵ц鎴愬姛锛屼絾鏄病鏈夎繑鍥炴暟鎹�
+     */
+    public static final int NO_CONTENT = 204;
+
+    /**
+     * 璧勬簮宸茶绉婚櫎
+     */
+    public static final int MOVED_PERM = 301;
+
+    /**
+     * 閲嶅畾鍚�
+     */
+    public static final int SEE_OTHER = 303;
+
+    /**
+     * 璧勬簮娌℃湁琚慨鏀�
+     */
+    public static final int NOT_MODIFIED = 304;
+
+    /**
+     * 鍙傛暟鍒楄〃閿欒锛堢己灏戯紝鏍煎紡涓嶅尮閰嶏級
+     */
+    public static final int BAD_REQUEST = 400;
+
+    /**
+     * 鏈巿鏉�
+     */
+    public static final int UNAUTHORIZED = 401;
+
+    /**
+     * 璁块棶鍙楅檺锛屾巿鏉冭繃鏈�
+     */
+    public static final int FORBIDDEN = 403;
+
+    /**
+     * 璧勬簮锛屾湇鍔℃湭鎵惧埌
+     */
+    public static final int NOT_FOUND = 404;
+
+    /**
+     * 涓嶅厑璁哥殑http鏂规硶
+     */
+    public static final int BAD_METHOD = 405;
+
+    /**
+     * 璧勬簮鍐茬獊锛屾垨鑰呰祫婧愯閿�
+     */
+    public static final int CONFLICT = 409;
+
+    /**
+     * 涓嶆敮鎸佺殑鏁版嵁锛屽獟浣撶被鍨�
+     */
+    public static final int UNSUPPORTED_TYPE = 415;
+
+    /**
+     * 绯荤粺鍐呴儴閿欒
+     */
+    public static final int ERROR = 500;
+
+    /**
+     * 鎺ュ彛鏈疄鐜�
+     */
+    public static final int NOT_IMPLEMENTED = 501;
+
+    /**
+     * 绯荤粺璀﹀憡娑堟伅
+     */
+    public static final int WARN = 601;
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/constant/ScheduleConstants.java b/zhitan-common/src/main/java/com/zhitan/common/constant/ScheduleConstants.java
new file mode 100644
index 0000000..7caef92
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/constant/ScheduleConstants.java
@@ -0,0 +1,50 @@
+package com.zhitan.common.constant;
+
+/**
+ * 浠诲姟璋冨害閫氱敤甯搁噺
+ * 
+ * @author zhitan
+ */
+public class ScheduleConstants
+{
+    public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME";
+
+    /** 鎵ц鐩爣key */
+    public static final String TASK_PROPERTIES = "TASK_PROPERTIES";
+
+    /** 榛樿 */
+    public static final String MISFIRE_DEFAULT = "0";
+
+    /** 绔嬪嵆瑙﹀彂鎵ц */
+    public static final String MISFIRE_IGNORE_MISFIRES = "1";
+
+    /** 瑙﹀彂涓�娆℃墽琛� */
+    public static final String MISFIRE_FIRE_AND_PROCEED = "2";
+
+    /** 涓嶈Е鍙戠珛鍗虫墽琛� */
+    public static final String MISFIRE_DO_NOTHING = "3";
+
+    public enum Status
+    {
+        /**
+         * 姝e父
+         */
+        NORMAL("0"),
+        /**
+         * 鏆傚仠
+         */
+        PAUSE("1");
+
+        private String value;
+
+        private Status(String value)
+        {
+            this.value = value;
+        }
+
+        public String getValue()
+        {
+            return value;
+        }
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/constant/UserConstants.java b/zhitan-common/src/main/java/com/zhitan/common/constant/UserConstants.java
new file mode 100644
index 0000000..1c6c912
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/constant/UserConstants.java
@@ -0,0 +1,78 @@
+package com.zhitan.common.constant;
+
+/**
+ * 鐢ㄦ埛甯搁噺淇℃伅
+ * 
+ * @author zhitan
+ */
+public class UserConstants
+{
+    /**
+     * 骞冲彴鍐呯郴缁熺敤鎴风殑鍞竴鏍囧織
+     */
+    public static final String SYS_USER = "SYS_USER";
+
+    /** 姝e父鐘舵�� */
+    public static final String NORMAL = "0";
+
+    /** 寮傚父鐘舵�� */
+    public static final String EXCEPTION = "1";
+
+    /** 鐢ㄦ埛灏佺鐘舵�� */
+    public static final String USER_DISABLE = "1";
+
+    /** 瑙掕壊灏佺鐘舵�� */
+    public static final String ROLE_DISABLE = "1";
+
+    /** 閮ㄩ棬姝e父鐘舵�� */
+    public static final String DEPT_NORMAL = "0";
+
+    /** 閮ㄩ棬鍋滅敤鐘舵�� */
+    public static final String DEPT_DISABLE = "1";
+
+    /** 瀛楀吀姝e父鐘舵�� */
+    public static final String DICT_NORMAL = "0";
+
+    /** 鏄惁涓虹郴缁熼粯璁わ紙鏄級 */
+    public static final String YES = "Y";
+
+    /** 鏄惁鑿滃崟澶栭摼锛堟槸锛� */
+    public static final String YES_FRAME = "0";
+
+    /** 鏄惁鑿滃崟澶栭摼锛堝惁锛� */
+    public static final String NO_FRAME = "1";
+
+    /** 鑿滃崟绫诲瀷锛堢洰褰曪級 */
+    public static final String TYPE_DIR = "M";
+
+    /** 鑿滃崟绫诲瀷锛堣彍鍗曪級 */
+    public static final String TYPE_MENU = "C";
+
+    /** 鑿滃崟绫诲瀷锛堟寜閽級 */
+    public static final String TYPE_BUTTON = "F";
+
+    /** Layout缁勪欢鏍囪瘑 */
+    public final static String LAYOUT = "Layout";
+    
+    /** ParentView缁勪欢鏍囪瘑 */
+    public final static String PARENT_VIEW = "ParentView";
+
+    /** InnerLink缁勪欢鏍囪瘑 */
+    public final static String INNER_LINK = "InnerLink";
+
+    /** 鏍¢獙鏄惁鍞竴鐨勮繑鍥炴爣璇� */
+    public final static boolean UNIQUE = true;
+    public final static boolean NOT_UNIQUE = false;
+
+    /**
+     * 鐢ㄦ埛鍚嶉暱搴﹂檺鍒�
+     */
+    public static final int USERNAME_MIN_LENGTH = 2;
+    public static final int USERNAME_MAX_LENGTH = 20;
+
+    /**
+     * 瀵嗙爜闀垮害闄愬埗
+     */
+    public static final int PASSWORD_MIN_LENGTH = 5;
+    public static final int PASSWORD_MAX_LENGTH = 20;
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/controller/BaseController.java b/zhitan-common/src/main/java/com/zhitan/common/core/controller/BaseController.java
new file mode 100644
index 0000000..1ecc7ef
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/controller/BaseController.java
@@ -0,0 +1,218 @@
+package com.zhitan.common.core.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.zhitan.common.constant.HttpStatus;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.core.page.PageDomain;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.core.page.TableSupport;
+import com.zhitan.common.utils.DateUtils;
+import com.zhitan.common.utils.PageUtils;
+import com.zhitan.common.utils.SecurityUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.sql.SqlUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.WebDataBinder;
+import org.springframework.web.bind.annotation.InitBinder;
+
+import java.beans.PropertyEditorSupport;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * web灞傞�氱敤鏁版嵁澶勭悊
+ * 
+ * @author zhitan
+ */
+public class BaseController
+{
+    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    /**
+     * 灏嗗墠鍙颁紶閫掕繃鏉ョ殑鏃ユ湡鏍煎紡鐨勫瓧绗︿覆锛岃嚜鍔ㄨ浆鍖栦负Date绫诲瀷
+     */
+    @InitBinder
+    public void initBinder(WebDataBinder binder)
+    {
+        // Date 绫诲瀷杞崲
+        binder.registerCustomEditor(Date.class, new PropertyEditorSupport()
+        {
+            @Override
+            public void setAsText(String text)
+            {
+                setValue(DateUtils.parseDate(text));
+            }
+        });
+    }
+
+    /**
+     * 璁剧疆璇锋眰鍒嗛〉鏁版嵁
+     */
+    protected void startPage()
+    {
+        PageUtils.startPage();
+    }
+
+    /**
+     * 璁剧疆璇锋眰鎺掑簭鏁版嵁
+     */
+    protected void startOrderBy()
+    {
+        PageDomain pageDomain = TableSupport.buildPageRequest();
+        if (StringUtils.isNotEmpty(pageDomain.getOrderBy()))
+        {
+            String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
+            PageHelper.orderBy(orderBy);
+        }
+    }
+
+    /**
+     * 娓呯悊鍒嗛〉鐨勭嚎绋嬪彉閲�
+     */
+    protected void clearPage()
+    {
+        PageUtils.clearPage();
+    }
+
+    /**
+     * 鍝嶅簲璇锋眰鍒嗛〉鏁版嵁
+     */
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    protected TableDataInfo getDataTable(List<?> list)
+    {
+        TableDataInfo rspData = new TableDataInfo();
+        rspData.setCode(HttpStatus.SUCCESS);
+        rspData.setMsg("鏌ヨ鎴愬姛");
+        rspData.setRows(list);
+        rspData.setTotal(new PageInfo(list).getTotal());
+        return rspData;
+    }
+
+    /**
+     * 鍝嶅簲璇锋眰鍒嗛〉鏁版嵁
+     */
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    protected TableDataInfo getDataTable(Page<?> list)
+    {
+        TableDataInfo rspData = new TableDataInfo();
+        rspData.setCode(HttpStatus.SUCCESS);
+        rspData.setMsg("鏌ヨ鎴愬姛");
+        rspData.setRows(list.getRecords());
+        rspData.setTotal(list.getTotal());
+        return rspData;
+    }
+
+    /**
+     * 杩斿洖鎴愬姛
+     */
+    public AjaxResult success()
+    {
+        return AjaxResult.success();
+    }
+
+    /**
+     * 杩斿洖澶辫触娑堟伅
+     */
+    public AjaxResult error()
+    {
+        return AjaxResult.error();
+    }
+
+    /**
+     * 杩斿洖鎴愬姛娑堟伅
+     */
+    public AjaxResult success(String message)
+    {
+        return AjaxResult.success(message);
+    }
+    
+    /**
+     * 杩斿洖鎴愬姛娑堟伅
+     */
+    public AjaxResult success(Object data)
+    {
+        return AjaxResult.success(data);
+    }
+
+    /**
+     * 杩斿洖澶辫触娑堟伅
+     */
+    public AjaxResult error(String message)
+    {
+        return AjaxResult.error(message);
+    }
+
+    /**
+     * 杩斿洖璀﹀憡娑堟伅
+     */
+    public AjaxResult warn(String message)
+    {
+        return AjaxResult.warn(message);
+    }
+
+    /**
+     * 鍝嶅簲杩斿洖缁撴灉
+     * 
+     * @param rows 褰卞搷琛屾暟
+     * @return 鎿嶄綔缁撴灉
+     */
+    protected AjaxResult toAjax(int rows)
+    {
+        return rows > 0 ? AjaxResult.success() : AjaxResult.error();
+    }
+
+    /**
+     * 鍝嶅簲杩斿洖缁撴灉
+     * 
+     * @param result 缁撴灉
+     * @return 鎿嶄綔缁撴灉
+     */
+    protected AjaxResult toAjax(boolean result)
+    {
+        return result ? success() : error();
+    }
+
+    /**
+     * 椤甸潰璺宠浆
+     */
+    public String redirect(String url)
+    {
+        return StringUtils.format("redirect:{}", url);
+    }
+
+    /**
+     * 鑾峰彇鐢ㄦ埛缂撳瓨淇℃伅
+     */
+    public LoginUser getLoginUser()
+    {
+        return SecurityUtils.getLoginUser();
+    }
+
+    /**
+     * 鑾峰彇鐧诲綍鐢ㄦ埛id
+     */
+    public Long getUserId()
+    {
+        return getLoginUser().getUserId();
+    }
+
+    /**
+     * 鑾峰彇鐧诲綍閮ㄩ棬id
+     */
+    public Long getDeptId()
+    {
+        return getLoginUser().getDeptId();
+    }
+
+    /**
+     * 鑾峰彇鐧诲綍鐢ㄦ埛鍚�
+     */
+    public String getUsername()
+    {
+        return getLoginUser().getUsername();
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/domain/AjaxResult.java b/zhitan-common/src/main/java/com/zhitan/common/core/domain/AjaxResult.java
new file mode 100644
index 0000000..4836a96
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/domain/AjaxResult.java
@@ -0,0 +1,216 @@
+package com.zhitan.common.core.domain;
+
+import java.util.HashMap;
+import java.util.Objects;
+import com.zhitan.common.constant.HttpStatus;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 鎿嶄綔娑堟伅鎻愰啋
+ * 
+ * @author zhitan
+ */
+public class AjaxResult extends HashMap<String, Object>
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 鐘舵�佺爜 */
+    public static final String CODE_TAG = "code";
+
+    /** 杩斿洖鍐呭 */
+    public static final String MSG_TAG = "msg";
+
+    /** 鏁版嵁瀵硅薄 */
+    public static final String DATA_TAG = "data";
+
+    /**
+     * 鍒濆鍖栦竴涓柊鍒涘缓鐨� AjaxResult 瀵硅薄锛屼娇鍏惰〃绀轰竴涓┖娑堟伅銆�
+     */
+    public AjaxResult()
+    {
+    }
+
+    /**
+     * 鍒濆鍖栦竴涓柊鍒涘缓鐨� AjaxResult 瀵硅薄
+     * 
+     * @param code 鐘舵�佺爜
+     * @param msg 杩斿洖鍐呭
+     */
+    public AjaxResult(int code, String msg)
+    {
+        super.put(CODE_TAG, code);
+        super.put(MSG_TAG, msg);
+    }
+
+    /**
+     * 鍒濆鍖栦竴涓柊鍒涘缓鐨� AjaxResult 瀵硅薄
+     * 
+     * @param code 鐘舵�佺爜
+     * @param msg 杩斿洖鍐呭
+     * @param data 鏁版嵁瀵硅薄
+     */
+    public AjaxResult(int code, String msg, Object data)
+    {
+        super.put(CODE_TAG, code);
+        super.put(MSG_TAG, msg);
+        if (StringUtils.isNotNull(data))
+        {
+            super.put(DATA_TAG, data);
+        }
+    }
+
+    /**
+     * 杩斿洖鎴愬姛娑堟伅
+     * 
+     * @return 鎴愬姛娑堟伅
+     */
+    public static AjaxResult success()
+    {
+        return AjaxResult.success("鎿嶄綔鎴愬姛");
+    }
+
+    /**
+     * 杩斿洖鎴愬姛鏁版嵁
+     * 
+     * @return 鎴愬姛娑堟伅
+     */
+    public static AjaxResult success(Object data)
+    {
+        return AjaxResult.success("鎿嶄綔鎴愬姛", data);
+    }
+
+    /**
+     * 杩斿洖鎴愬姛娑堟伅
+     * 
+     * @param msg 杩斿洖鍐呭
+     * @return 鎴愬姛娑堟伅
+     */
+    public static AjaxResult success(String msg)
+    {
+        return AjaxResult.success(msg, null);
+    }
+
+    /**
+     * 杩斿洖鎴愬姛娑堟伅
+     * 
+     * @param msg 杩斿洖鍐呭
+     * @param data 鏁版嵁瀵硅薄
+     * @return 鎴愬姛娑堟伅
+     */
+    public static AjaxResult success(String msg, Object data)
+    {
+        return new AjaxResult(HttpStatus.SUCCESS, msg, data);
+    }
+
+    /**
+     * 杩斿洖璀﹀憡娑堟伅
+     *
+     * @param msg 杩斿洖鍐呭
+     * @return 璀﹀憡娑堟伅
+     */
+    public static AjaxResult warn(String msg)
+    {
+        return AjaxResult.warn(msg, null);
+    }
+
+    /**
+     * 杩斿洖璀﹀憡娑堟伅
+     *
+     * @param msg 杩斿洖鍐呭
+     * @param data 鏁版嵁瀵硅薄
+     * @return 璀﹀憡娑堟伅
+     */
+    public static AjaxResult warn(String msg, Object data)
+    {
+        return new AjaxResult(HttpStatus.WARN, msg, data);
+    }
+
+    /**
+     * 杩斿洖閿欒娑堟伅
+     * 
+     * @return 閿欒娑堟伅
+     */
+    public static AjaxResult error()
+    {
+        return AjaxResult.error("鎿嶄綔澶辫触");
+    }
+
+    /**
+     * 杩斿洖閿欒娑堟伅
+     * 
+     * @param msg 杩斿洖鍐呭
+     * @return 閿欒娑堟伅
+     */
+    public static AjaxResult error(String msg)
+    {
+        return AjaxResult.error(msg, null);
+    }
+
+    /**
+     * 杩斿洖閿欒娑堟伅
+     * 
+     * @param msg 杩斿洖鍐呭
+     * @param data 鏁版嵁瀵硅薄
+     * @return 閿欒娑堟伅
+     */
+    public static AjaxResult error(String msg, Object data)
+    {
+        return new AjaxResult(HttpStatus.ERROR, msg, data);
+    }
+
+    /**
+     * 杩斿洖閿欒娑堟伅
+     * 
+     * @param code 鐘舵�佺爜
+     * @param msg 杩斿洖鍐呭
+     * @return 閿欒娑堟伅
+     */
+    public static AjaxResult error(int code, String msg)
+    {
+        return new AjaxResult(code, msg, null);
+    }
+
+    /**
+     * 鏄惁涓烘垚鍔熸秷鎭�
+     *
+     * @return 缁撴灉
+     */
+    public boolean isSuccess()
+    {
+        return Objects.equals(HttpStatus.SUCCESS, this.get(CODE_TAG));
+    }
+
+    /**
+     * 鏄惁涓鸿鍛婃秷鎭�
+     *
+     * @return 缁撴灉
+     */
+    public boolean isWarn()
+    {
+        return Objects.equals(HttpStatus.WARN, this.get(CODE_TAG));
+    }
+
+    /**
+     * 鏄惁涓洪敊璇秷鎭�
+     *
+     * @return 缁撴灉
+     */
+    public boolean isError()
+    {
+        return Objects.equals(HttpStatus.ERROR, this.get(CODE_TAG));
+    }
+
+    /**
+     * 鏂逛究閾惧紡璋冪敤
+     *
+     * @param key 閿�
+     * @param value 鍊�
+     * @return 鏁版嵁瀵硅薄
+     */
+    @Override
+    public AjaxResult put(String key, Object value)
+    {
+        super.put(key, value);
+        return this;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/domain/BaseEntity.java b/zhitan-common/src/main/java/com/zhitan/common/core/domain/BaseEntity.java
new file mode 100644
index 0000000..746f4c9
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/domain/BaseEntity.java
@@ -0,0 +1,170 @@
+package com.zhitan.common.core.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Entity鍩虹被
+ *
+ * @author zhitan
+ */
+public class BaseEntity implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 鎼滅储鍊� */
+    @JsonIgnore
+    @TableField(exist = false)
+    private String searchValue;
+
+    /** 鍒涘缓鑰� */
+    private String createBy;
+
+    /** 鍒涘缓鏃堕棿 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /** 鏇存柊鑰� */
+    private String updateBy;
+
+    /** 鏇存柊鏃堕棿 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /** 澶囨敞 */
+    private String remark;
+
+    /** 鏁版嵁鏉冮檺 */
+    @ApiModelProperty(value = "鏁版嵁鏉冮檺")
+    @TableField(exist = false)
+    private String dataScope;
+
+    /** 寮�濮嬫椂闂� */
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    @JsonIgnore
+    @TableField(exist = false)
+    private String beginTime;
+
+    /** 缁撴潫鏃堕棿 */
+    @ApiModelProperty(value = "缁撴潫鏃堕棿")
+    @JsonIgnore
+    @TableField(exist = false)
+    private String endTime;
+
+    /** 璇锋眰鍙傛暟 */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    @TableField(exist = false)
+    private Map<String, Object> params;
+
+    public String getSearchValue()
+    {
+        return searchValue;
+    }
+
+    public void setSearchValue(String searchValue)
+    {
+        this.searchValue = searchValue;
+    }
+
+    public String getCreateBy()
+    {
+        return createBy;
+    }
+
+    public void setCreateBy(String createBy)
+    {
+        this.createBy = createBy;
+    }
+
+    public Date getCreateTime()
+    {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime)
+    {
+        this.createTime = createTime;
+    }
+
+    public String getUpdateBy()
+    {
+        return updateBy;
+    }
+
+    public void setUpdateBy(String updateBy)
+    {
+        this.updateBy = updateBy;
+    }
+
+    public Date getUpdateTime()
+    {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime)
+    {
+        this.updateTime = updateTime;
+    }
+
+    public String getRemark()
+    {
+        return remark;
+    }
+
+    public void setRemark(String remark)
+    {
+        this.remark = remark;
+    }
+
+    public String getDataScope()
+    {
+        return dataScope;
+    }
+
+    public void setDataScope(String dataScope)
+    {
+        this.dataScope = dataScope;
+    }
+
+    public String getBeginTime()
+    {
+        return beginTime;
+    }
+
+    public void setBeginTime(String beginTime)
+    {
+        this.beginTime = beginTime;
+    }
+
+    public String getEndTime()
+    {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime)
+    {
+        this.endTime = endTime;
+    }
+
+    public Map<String, Object> getParams()
+    {
+        if (params == null)
+        {
+            params = new HashMap<>();
+        }
+        return params;
+    }
+
+    public void setParams(Map<String, Object> params)
+    {
+        this.params = params;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/domain/R.java b/zhitan-common/src/main/java/com/zhitan/common/core/domain/R.java
new file mode 100644
index 0000000..8ca48f2
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/domain/R.java
@@ -0,0 +1,115 @@
+package com.zhitan.common.core.domain;
+
+import java.io.Serializable;
+import com.zhitan.common.constant.HttpStatus;
+
+/**
+ * 鍝嶅簲淇℃伅涓讳綋
+ *
+ * @author zhitan
+ */
+public class R<T> implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 鎴愬姛 */
+    public static final int SUCCESS = HttpStatus.SUCCESS;
+
+    /** 澶辫触 */
+    public static final int FAIL = HttpStatus.ERROR;
+
+    private int code;
+
+    private String msg;
+
+    private T data;
+
+    public static <T> R<T> ok()
+    {
+        return restResult(null, SUCCESS, "鎿嶄綔鎴愬姛");
+    }
+
+    public static <T> R<T> ok(T data)
+    {
+        return restResult(data, SUCCESS, "鎿嶄綔鎴愬姛");
+    }
+
+    public static <T> R<T> ok(T data, String msg)
+    {
+        return restResult(data, SUCCESS, msg);
+    }
+
+    public static <T> R<T> fail()
+    {
+        return restResult(null, FAIL, "鎿嶄綔澶辫触");
+    }
+
+    public static <T> R<T> fail(String msg)
+    {
+        return restResult(null, FAIL, msg);
+    }
+
+    public static <T> R<T> fail(T data)
+    {
+        return restResult(data, FAIL, "鎿嶄綔澶辫触");
+    }
+
+    public static <T> R<T> fail(T data, String msg)
+    {
+        return restResult(data, FAIL, msg);
+    }
+
+    public static <T> R<T> fail(int code, String msg)
+    {
+        return restResult(null, code, msg);
+    }
+
+    private static <T> R<T> restResult(T data, int code, String msg)
+    {
+        R<T> apiResult = new R<>();
+        apiResult.setCode(code);
+        apiResult.setData(data);
+        apiResult.setMsg(msg);
+        return apiResult;
+    }
+
+    public int getCode()
+    {
+        return code;
+    }
+
+    public void setCode(int code)
+    {
+        this.code = code;
+    }
+
+    public String getMsg()
+    {
+        return msg;
+    }
+
+    public void setMsg(String msg)
+    {
+        this.msg = msg;
+    }
+
+    public T getData()
+    {
+        return data;
+    }
+
+    public void setData(T data)
+    {
+        this.data = data;
+    }
+
+    public static <T> Boolean isError(R<T> ret)
+    {
+        return !isSuccess(ret);
+    }
+
+    public static <T> Boolean isSuccess(R<T> ret)
+    {
+        return R.SUCCESS == ret.getCode();
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/domain/TreeEntity.java b/zhitan-common/src/main/java/com/zhitan/common/core/domain/TreeEntity.java
new file mode 100644
index 0000000..594fbda
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/domain/TreeEntity.java
@@ -0,0 +1,79 @@
+package com.zhitan.common.core.domain;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Tree鍩虹被
+ * 
+ * @author zhitan
+ */
+public class TreeEntity extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 鐖惰彍鍗曞悕绉� */
+    private String parentName;
+
+    /** 鐖惰彍鍗旾D */
+    private Long parentId;
+
+    /** 鏄剧ず椤哄簭 */
+    private Integer orderNum;
+
+    /** 绁栫骇鍒楄〃 */
+    private String ancestors;
+
+    /** 瀛愰儴闂� */
+    private List<?> children = new ArrayList<>();
+
+    public String getParentName()
+    {
+        return parentName;
+    }
+
+    public void setParentName(String parentName)
+    {
+        this.parentName = parentName;
+    }
+
+    public Long getParentId()
+    {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId)
+    {
+        this.parentId = parentId;
+    }
+
+    public Integer getOrderNum()
+    {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum)
+    {
+        this.orderNum = orderNum;
+    }
+
+    public String getAncestors()
+    {
+        return ancestors;
+    }
+
+    public void setAncestors(String ancestors)
+    {
+        this.ancestors = ancestors;
+    }
+
+    public List<?> getChildren()
+    {
+        return children;
+    }
+
+    public void setChildren(List<?> children)
+    {
+        this.children = children;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/domain/TreeSelect.java b/zhitan-common/src/main/java/com/zhitan/common/core/domain/TreeSelect.java
new file mode 100644
index 0000000..b481d58
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/domain/TreeSelect.java
@@ -0,0 +1,77 @@
+package com.zhitan.common.core.domain;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.stream.Collectors;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.zhitan.common.core.domain.entity.SysDept;
+import com.zhitan.common.core.domain.entity.SysMenu;
+
+/**
+ * Treeselect鏍戠粨鏋勫疄浣撶被
+ * 
+ * @author zhitan
+ */
+public class TreeSelect implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 鑺傜偣ID */
+    private Long id;
+
+    /** 鑺傜偣鍚嶇О */
+    private String label;
+
+    /** 瀛愯妭鐐� */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private List<TreeSelect> children;
+
+    public TreeSelect()
+    {
+
+    }
+
+    public TreeSelect(SysDept dept)
+    {
+        this.id = dept.getDeptId();
+        this.label = dept.getDeptName();
+        this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
+    }
+
+    public TreeSelect(SysMenu menu)
+    {
+        this.id = menu.getMenuId();
+        this.label = menu.getMenuName();
+        this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public String getLabel()
+    {
+        return label;
+    }
+
+    public void setLabel(String label)
+    {
+        this.label = label;
+    }
+
+    public List<TreeSelect> getChildren()
+    {
+        return children;
+    }
+
+    public void setChildren(List<TreeSelect> children)
+    {
+        this.children = children;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysDept.java b/zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysDept.java
new file mode 100644
index 0000000..744abba
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysDept.java
@@ -0,0 +1,208 @@
+package com.zhitan.common.core.domain.entity;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zhitan.common.core.domain.BaseEntity;
+
+/**
+ * 閮ㄩ棬琛� sys_dept
+ * 
+ * @author zhitan
+ */
+@TableName("sys_dept")
+public class SysDept extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 閮ㄩ棬ID */
+    @TableId
+    private Long deptId;
+
+    /** 鐖堕儴闂↖D */
+    private Long parentId;
+
+    /** 绁栫骇鍒楄〃 */
+    private String ancestors;
+
+    /** 閮ㄩ棬鍚嶇О */
+    private String deptName;
+
+    /** 鏄剧ず椤哄簭 */
+    private Integer orderNum;
+
+    /** 璐熻矗浜� */
+    private String leader;
+
+    /** 鑱旂郴鐢佃瘽 */
+    private String phone;
+
+    /** 閭 */
+    private String email;
+
+    /** 閮ㄩ棬鐘舵��:0姝e父,1鍋滅敤 */
+    private String status;
+
+    /** 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛� */
+    private String delFlag;
+
+    /** 鐖堕儴闂ㄥ悕绉� */
+    private String parentName;
+    
+    /** 瀛愰儴闂� */
+    private List<SysDept> children = new ArrayList<SysDept>();
+
+    public Long getDeptId()
+    {
+        return deptId;
+    }
+
+    public void setDeptId(Long deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getParentId()
+    {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId)
+    {
+        this.parentId = parentId;
+    }
+
+    public String getAncestors()
+    {
+        return ancestors;
+    }
+
+    public void setAncestors(String ancestors)
+    {
+        this.ancestors = ancestors;
+    }
+
+    @NotBlank(message = "閮ㄩ棬鍚嶇О涓嶈兘涓虹┖")
+    @Size(min = 0, max = 30, message = "閮ㄩ棬鍚嶇О闀垮害涓嶈兘瓒呰繃30涓瓧绗�")
+    public String getDeptName()
+    {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName)
+    {
+        this.deptName = deptName;
+    }
+
+    @NotNull(message = "鏄剧ず椤哄簭涓嶈兘涓虹┖")
+    public Integer getOrderNum()
+    {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum)
+    {
+        this.orderNum = orderNum;
+    }
+
+    public String getLeader()
+    {
+        return leader;
+    }
+
+    public void setLeader(String leader)
+    {
+        this.leader = leader;
+    }
+
+    @Size(min = 0, max = 11, message = "鑱旂郴鐢佃瘽闀垮害涓嶈兘瓒呰繃11涓瓧绗�")
+    public String getPhone()
+    {
+        return phone;
+    }
+
+    public void setPhone(String phone)
+    {
+        this.phone = phone;
+    }
+
+    @Email(message = "閭鏍煎紡涓嶆纭�")
+    @Size(min = 0, max = 50, message = "閭闀垮害涓嶈兘瓒呰繃50涓瓧绗�")
+    public String getEmail()
+    {
+        return email;
+    }
+
+    public void setEmail(String email)
+    {
+        this.email = email;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    public String getDelFlag()
+    {
+        return delFlag;
+    }
+
+    public void setDelFlag(String delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getParentName()
+    {
+        return parentName;
+    }
+
+    public void setParentName(String parentName)
+    {
+        this.parentName = parentName;
+    }
+
+    public List<SysDept> getChildren()
+    {
+        return children;
+    }
+
+    public void setChildren(List<SysDept> children)
+    {
+        this.children = children;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("deptId", getDeptId())
+            .append("parentId", getParentId())
+            .append("ancestors", getAncestors())
+            .append("deptName", getDeptName())
+            .append("orderNum", getOrderNum())
+            .append("leader", getLeader())
+            .append("phone", getPhone())
+            .append("email", getEmail())
+            .append("status", getStatus())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysDictData.java b/zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysDictData.java
new file mode 100644
index 0000000..f9effb7
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysDictData.java
@@ -0,0 +1,180 @@
+package com.zhitan.common.core.domain.entity;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.constant.UserConstants;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zhitan.common.core.domain.BaseEntity;
+
+/**
+ * 瀛楀吀鏁版嵁琛� sys_dict_data
+ * 
+ * @author zhitan
+ */
+@TableName("sys_dict_data")
+public class SysDictData extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 瀛楀吀缂栫爜 */
+    @TableId
+    @Excel(name = "瀛楀吀缂栫爜", cellType = Excel.ColumnType.NUMERIC)
+    private Long dictCode;
+
+    /** 瀛楀吀鎺掑簭 */
+    @Excel(name = "瀛楀吀鎺掑簭", cellType = Excel.ColumnType.NUMERIC)
+    private Long dictSort;
+
+    /** 瀛楀吀鏍囩 */
+    @Excel(name = "瀛楀吀鏍囩")
+    private String dictLabel;
+
+    /** 瀛楀吀閿�� */
+    @Excel(name = "瀛楀吀閿��")
+    private String dictValue;
+
+    /** 瀛楀吀绫诲瀷 */
+    @Excel(name = "瀛楀吀绫诲瀷")
+    private String dictType;
+
+    /** 鏍峰紡灞炴�э紙鍏朵粬鏍峰紡鎵╁睍锛� */
+    private String cssClass;
+
+    /** 琛ㄦ牸瀛楀吀鏍峰紡 */
+    private String listClass;
+
+    /** 鏄惁榛樿锛圷鏄� N鍚︼級 */
+    @Excel(name = "鏄惁榛樿", readConverterExp = "Y=鏄�,N=鍚�")
+    private String isDefault;
+
+    /** 鐘舵�侊紙0姝e父 1鍋滅敤锛� */
+    @Excel(name = "鐘舵��", readConverterExp = "0=姝e父,1=鍋滅敤")
+    private String status;
+
+    public Long getDictCode()
+    {
+        return dictCode;
+    }
+
+    public void setDictCode(Long dictCode)
+    {
+        this.dictCode = dictCode;
+    }
+
+    public Long getDictSort()
+    {
+        return dictSort;
+    }
+
+    public void setDictSort(Long dictSort)
+    {
+        this.dictSort = dictSort;
+    }
+
+    @NotBlank(message = "瀛楀吀鏍囩涓嶈兘涓虹┖")
+    @Size(min = 0, max = 100, message = "瀛楀吀鏍囩闀垮害涓嶈兘瓒呰繃100涓瓧绗�")
+    public String getDictLabel()
+    {
+        return dictLabel;
+    }
+
+    public void setDictLabel(String dictLabel)
+    {
+        this.dictLabel = dictLabel;
+    }
+
+    @NotBlank(message = "瀛楀吀閿�间笉鑳戒负绌�")
+    @Size(min = 0, max = 100, message = "瀛楀吀閿�奸暱搴︿笉鑳借秴杩�100涓瓧绗�")
+    public String getDictValue()
+    {
+        return dictValue;
+    }
+
+    public void setDictValue(String dictValue)
+    {
+        this.dictValue = dictValue;
+    }
+
+    @NotBlank(message = "瀛楀吀绫诲瀷涓嶈兘涓虹┖")
+    @Size(min = 0, max = 100, message = "瀛楀吀绫诲瀷闀垮害涓嶈兘瓒呰繃100涓瓧绗�")
+    public String getDictType()
+    {
+        return dictType;
+    }
+
+    public void setDictType(String dictType)
+    {
+        this.dictType = dictType;
+    }
+
+    @Size(min = 0, max = 100, message = "鏍峰紡灞炴�ч暱搴︿笉鑳借秴杩�100涓瓧绗�")
+    public String getCssClass()
+    {
+        return cssClass;
+    }
+
+    public void setCssClass(String cssClass)
+    {
+        this.cssClass = cssClass;
+    }
+
+    public String getListClass()
+    {
+        return listClass;
+    }
+
+    public void setListClass(String listClass)
+    {
+        this.listClass = listClass;
+    }
+
+    public boolean getDefault()
+    {
+        return UserConstants.YES.equals(this.isDefault);
+    }
+
+    public String getIsDefault()
+    {
+        return isDefault;
+    }
+
+    public void setIsDefault(String isDefault)
+    {
+        this.isDefault = isDefault;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+    
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("dictCode", getDictCode())
+            .append("dictSort", getDictSort())
+            .append("dictLabel", getDictLabel())
+            .append("dictValue", getDictValue())
+            .append("dictType", getDictType())
+            .append("cssClass", getCssClass())
+            .append("listClass", getListClass())
+            .append("isDefault", getIsDefault())
+            .append("status", getStatus())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysDictType.java b/zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysDictType.java
new file mode 100644
index 0000000..cbe33e2
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysDictType.java
@@ -0,0 +1,100 @@
+package com.zhitan.common.core.domain.entity;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Size;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zhitan.common.annotation.Excel;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zhitan.common.core.domain.BaseEntity;
+
+/**
+ * 瀛楀吀绫诲瀷琛� sys_dict_type
+ * 
+ * @author zhitan
+ */
+@TableName("sys_dict_type")
+public class SysDictType extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 瀛楀吀涓婚敭 */
+    @TableId
+    @Excel(name = "瀛楀吀涓婚敭", cellType = Excel.ColumnType.NUMERIC)
+    private Long dictId;
+
+    /** 瀛楀吀鍚嶇О */
+    @Excel(name = "瀛楀吀鍚嶇О")
+    private String dictName;
+
+    /** 瀛楀吀绫诲瀷 */
+    @Excel(name = "瀛楀吀绫诲瀷")
+    private String dictType;
+
+    /** 鐘舵�侊紙0姝e父 1鍋滅敤锛� */
+    @Excel(name = "鐘舵��", readConverterExp = "0=姝e父,1=鍋滅敤")
+    private String status;
+
+    public Long getDictId()
+    {
+        return dictId;
+    }
+
+    public void setDictId(Long dictId)
+    {
+        this.dictId = dictId;
+    }
+
+    @NotBlank(message = "瀛楀吀鍚嶇О涓嶈兘涓虹┖")
+    @Size(min = 0, max = 100, message = "瀛楀吀绫诲瀷鍚嶇О闀垮害涓嶈兘瓒呰繃100涓瓧绗�")
+    public String getDictName()
+    {
+        return dictName;
+    }
+
+    public void setDictName(String dictName)
+    {
+        this.dictName = dictName;
+    }
+
+    @NotBlank(message = "瀛楀吀绫诲瀷涓嶈兘涓虹┖")
+    @Size(min = 0, max = 100, message = "瀛楀吀绫诲瀷绫诲瀷闀垮害涓嶈兘瓒呰繃100涓瓧绗�")
+    @Pattern(regexp = "^[a-z][a-z0-9_]*$", message = "瀛楀吀绫诲瀷蹇呴』浠ュ瓧姣嶅紑澶达紝涓斿彧鑳戒负锛堝皬鍐欏瓧姣嶏紝鏁板瓧锛屼笅婊戠嚎锛�")
+    public String getDictType()
+    {
+        return dictType;
+    }
+
+    public void setDictType(String dictType)
+    {
+        this.dictType = dictType;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+    
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("dictId", getDictId())
+            .append("dictName", getDictName())
+            .append("dictType", getDictType())
+            .append("status", getStatus())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysMenu.java b/zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysMenu.java
new file mode 100644
index 0000000..1147226
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysMenu.java
@@ -0,0 +1,276 @@
+package com.zhitan.common.core.domain.entity;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zhitan.common.core.domain.BaseEntity;
+
+/**
+ * 鑿滃崟鏉冮檺琛� sys_menu
+ * 
+ * @author zhitan
+ */
+@TableName("sys_menu")
+public class SysMenu extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 鑿滃崟ID */
+    @TableId
+    private Long menuId;
+
+    /** 鑿滃崟鍚嶇О */
+    private String menuName;
+
+    /** 鐖惰彍鍗曞悕绉� */
+    private String parentName;
+
+    /** 鐖惰彍鍗旾D */
+    private Long parentId;
+
+    /** 鏄剧ず椤哄簭 */
+    private Integer orderNum;
+
+    /** 璺敱鍦板潃 */
+    private String path;
+
+    /** 缁勪欢璺緞 */
+    private String component;
+
+    /** 璺敱鍙傛暟 */
+    private String query;
+
+    /** 鏄惁涓哄閾撅紙0鏄� 1鍚︼級 */
+    private String isFrame;
+
+    /** 鏄惁缂撳瓨锛�0缂撳瓨 1涓嶇紦瀛橈級 */
+    private String isCache;
+
+    /** 绫诲瀷锛圡鐩綍 C鑿滃崟 F鎸夐挳锛� */
+    private String menuType;
+
+    /** 鏄剧ず鐘舵�侊紙0鏄剧ず 1闅愯棌锛� */
+    private String visible;
+    
+    /** 鑿滃崟鐘舵�侊紙0姝e父 1鍋滅敤锛� */
+    private String status;
+
+    /** 鏉冮檺瀛楃涓� */
+    private String perms;
+
+    /** 鑿滃崟鍥炬爣 */
+    private String icon;
+
+    /** 椤甸潰鍙傛暟 */
+    private String parameter;
+
+
+    /** 瀛愯彍鍗� */
+    private List<SysMenu> children = new ArrayList<SysMenu>();
+
+    public Long getMenuId()
+    {
+        return menuId;
+    }
+
+    public void setMenuId(Long menuId)
+    {
+        this.menuId = menuId;
+    }
+
+    @NotBlank(message = "鑿滃崟鍚嶇О涓嶈兘涓虹┖")
+    @Size(min = 0, max = 50, message = "鑿滃崟鍚嶇О闀垮害涓嶈兘瓒呰繃50涓瓧绗�")
+    public String getMenuName()
+    {
+        return menuName;
+    }
+
+    public void setMenuName(String menuName)
+    {
+        this.menuName = menuName;
+    }
+
+    public String getParentName()
+    {
+        return parentName;
+    }
+
+    public void setParentName(String parentName)
+    {
+        this.parentName = parentName;
+    }
+
+    public Long getParentId()
+    {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId)
+    {
+        this.parentId = parentId;
+    }
+
+    @NotNull(message = "鏄剧ず椤哄簭涓嶈兘涓虹┖")
+    public Integer getOrderNum()
+    {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum)
+    {
+        this.orderNum = orderNum;
+    }
+
+    @Size(min = 0, max = 200, message = "璺敱鍦板潃涓嶈兘瓒呰繃200涓瓧绗�")
+    public String getPath()
+    {
+        return path;
+    }
+
+    public void setPath(String path)
+    {
+        this.path = path;
+    }
+
+    @Size(min = 0, max = 200, message = "缁勪欢璺緞涓嶈兘瓒呰繃255涓瓧绗�")
+    public String getComponent()
+    {
+        return component;
+    }
+
+    public void setComponent(String component)
+    {
+        this.component = component;
+    }
+
+    public String getQuery()
+    {
+        return query;
+    }
+
+    public void setQuery(String query)
+    {
+        this.query = query;
+    }
+
+    public String getIsFrame()
+    {
+        return isFrame;
+    }
+
+    public void setIsFrame(String isFrame)
+    {
+        this.isFrame = isFrame;
+    }
+
+    public String getIsCache()
+    {
+        return isCache;
+    }
+
+    public void setIsCache(String isCache)
+    {
+        this.isCache = isCache;
+    }
+
+    @NotBlank(message = "鑿滃崟绫诲瀷涓嶈兘涓虹┖")
+    public String getMenuType()
+    {
+        return menuType;
+    }
+
+    public void setMenuType(String menuType)
+    {
+        this.menuType = menuType;
+    }
+
+    public String getVisible()
+    {
+        return visible;
+    }
+
+    public void setVisible(String visible)
+    {
+        this.visible = visible;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    @Size(min = 0, max = 100, message = "鏉冮檺鏍囪瘑闀垮害涓嶈兘瓒呰繃100涓瓧绗�")
+    public String getPerms()
+    {
+        return perms;
+    }
+
+    public void setPerms(String perms)
+    {
+        this.perms = perms;
+    }
+
+    public String getIcon()
+    {
+        return icon;
+    }
+
+    public void setIcon(String icon)
+    {
+        this.icon = icon;
+    }
+
+    public List<SysMenu> getChildren()
+    {
+        return children;
+    }
+
+    public void setChildren(List<SysMenu> children)
+    {
+        this.children = children;
+    }
+
+    public String getParameter(){
+        return parameter;
+    }
+
+    public void setParameter(String parameter){
+        this.parameter = parameter;
+    }
+    
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("menuId", getMenuId())
+            .append("menuName", getMenuName())
+            .append("parentId", getParentId())
+            .append("orderNum", getOrderNum())
+            .append("path", getPath())
+            .append("component", getComponent())
+            .append("isFrame", getIsFrame())
+            .append("IsCache", getIsCache())
+            .append("menuType", getMenuType())
+            .append("visible", getVisible())
+            .append("status ", getStatus())
+            .append("perms", getPerms())
+            .append("icon", getIcon())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysRole.java b/zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysRole.java
new file mode 100644
index 0000000..9ab4e78
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysRole.java
@@ -0,0 +1,245 @@
+package com.zhitan.common.core.domain.entity;
+
+import java.util.Set;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zhitan.common.annotation.Excel;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zhitan.common.core.domain.BaseEntity;
+
+/**
+ * 瑙掕壊琛� sys_role
+ * 
+ * @author zhitan
+ */
+@TableName("sys_role")
+public class SysRole extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 瑙掕壊ID */
+    @TableId
+    @Excel(name = "瑙掕壊搴忓彿", cellType = Excel.ColumnType.NUMERIC)
+    private Long roleId;
+
+    /** 瑙掕壊鍚嶇О */
+    @Excel(name = "瑙掕壊鍚嶇О")
+    private String roleName;
+
+    /** 瑙掕壊鏉冮檺 */
+    @Excel(name = "瑙掕壊鏉冮檺")
+    private String roleKey;
+
+    /** 瑙掕壊鎺掑簭 */
+    @Excel(name = "瑙掕壊鎺掑簭")
+    private Integer roleSort;
+
+    /** 鏁版嵁鑼冨洿锛�1锛氭墍鏈夋暟鎹潈闄愶紱2锛氳嚜瀹氫箟鏁版嵁鏉冮檺锛�3锛氭湰閮ㄩ棬鏁版嵁鏉冮檺锛�4锛氭湰閮ㄩ棬鍙婁互涓嬫暟鎹潈闄愶紱5锛氫粎鏈汉鏁版嵁鏉冮檺锛� */
+    @Excel(name = "鏁版嵁鑼冨洿", readConverterExp = "1=鎵�鏈夋暟鎹潈闄�,2=鑷畾涔夋暟鎹潈闄�,3=鏈儴闂ㄦ暟鎹潈闄�,4=鏈儴闂ㄥ強浠ヤ笅鏁版嵁鏉冮檺,5=浠呮湰浜烘暟鎹潈闄�")
+    private String dataScope;
+
+    /** 鑿滃崟鏍戦�夋嫨椤规槸鍚﹀叧鑱旀樉绀猴紙 0锛氱埗瀛愪笉浜掔浉鍏宠仈鏄剧ず 1锛氱埗瀛愪簰鐩稿叧鑱旀樉绀猴級 */
+    private boolean menuCheckStrictly;
+
+    /** 閮ㄩ棬鏍戦�夋嫨椤规槸鍚﹀叧鑱旀樉绀猴紙0锛氱埗瀛愪笉浜掔浉鍏宠仈鏄剧ず 1锛氱埗瀛愪簰鐩稿叧鑱旀樉绀� 锛� */
+    private boolean deptCheckStrictly;
+
+    /** 瑙掕壊鐘舵�侊紙0姝e父 1鍋滅敤锛� */
+    @Excel(name = "瑙掕壊鐘舵��", readConverterExp = "0=姝e父,1=鍋滅敤")
+    private String status;
+
+    /** 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛� */
+    private String delFlag;
+
+    /** 鐢ㄦ埛鏄惁瀛樺湪姝よ鑹叉爣璇� 榛樿涓嶅瓨鍦� */
+    private boolean flag = false;
+
+    /** 鑿滃崟缁� */
+    private Long[] menuIds;
+
+    /** 閮ㄩ棬缁勶紙鏁版嵁鏉冮檺锛� */
+    private Long[] deptIds;
+
+    /** 瑙掕壊鑿滃崟鏉冮檺 */
+    private Set<String> permissions;
+
+    public SysRole()
+    {
+
+    }
+
+    public SysRole(Long roleId)
+    {
+        this.roleId = roleId;
+    }
+
+    public Long getRoleId()
+    {
+        return roleId;
+    }
+
+    public void setRoleId(Long roleId)
+    {
+        this.roleId = roleId;
+    }
+
+    public boolean isAdmin()
+    {
+        return isAdmin(this.roleId);
+    }
+
+    public static boolean isAdmin(Long roleId)
+    {
+        return roleId != null && 1L == roleId;
+    }
+
+    @NotBlank(message = "瑙掕壊鍚嶇О涓嶈兘涓虹┖")
+    @Size(min = 0, max = 30, message = "瑙掕壊鍚嶇О闀垮害涓嶈兘瓒呰繃30涓瓧绗�")
+    public String getRoleName()
+    {
+        return roleName;
+    }
+
+    public void setRoleName(String roleName)
+    {
+        this.roleName = roleName;
+    }
+
+    @NotBlank(message = "鏉冮檺瀛楃涓嶈兘涓虹┖")
+    @Size(min = 0, max = 100, message = "鏉冮檺瀛楃闀垮害涓嶈兘瓒呰繃100涓瓧绗�")
+    public String getRoleKey()
+    {
+        return roleKey;
+    }
+
+    public void setRoleKey(String roleKey)
+    {
+        this.roleKey = roleKey;
+    }
+
+    @NotNull(message = "鏄剧ず椤哄簭涓嶈兘涓虹┖")
+    public Integer getRoleSort()
+    {
+        return roleSort;
+    }
+
+    public void setRoleSort(Integer roleSort)
+    {
+        this.roleSort = roleSort;
+    }
+
+    public String getDataScope()
+    {
+        return dataScope;
+    }
+
+    public void setDataScope(String dataScope)
+    {
+        this.dataScope = dataScope;
+    }
+
+    public boolean isMenuCheckStrictly()
+    {
+        return menuCheckStrictly;
+    }
+
+    public void setMenuCheckStrictly(boolean menuCheckStrictly)
+    {
+        this.menuCheckStrictly = menuCheckStrictly;
+    }
+
+    public boolean isDeptCheckStrictly()
+    {
+        return deptCheckStrictly;
+    }
+
+    public void setDeptCheckStrictly(boolean deptCheckStrictly)
+    {
+        this.deptCheckStrictly = deptCheckStrictly;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    public String getDelFlag()
+    {
+        return delFlag;
+    }
+
+    public void setDelFlag(String delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public boolean isFlag()
+    {
+        return flag;
+    }
+
+    public void setFlag(boolean flag)
+    {
+        this.flag = flag;
+    }
+
+    public Long[] getMenuIds()
+    {
+        return menuIds;
+    }
+
+    public void setMenuIds(Long[] menuIds)
+    {
+        this.menuIds = menuIds;
+    }
+
+    public Long[] getDeptIds()
+    {
+        return deptIds;
+    }
+
+    public void setDeptIds(Long[] deptIds)
+    {
+        this.deptIds = deptIds;
+    }
+
+    public Set<String> getPermissions()
+    {
+        return permissions;
+    }
+
+    public void setPermissions(Set<String> permissions)
+    {
+        this.permissions = permissions;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("roleId", getRoleId())
+            .append("roleName", getRoleName())
+            .append("roleKey", getRoleKey())
+            .append("roleSort", getRoleSort())
+            .append("dataScope", getDataScope())
+            .append("menuCheckStrictly", isMenuCheckStrictly())
+            .append("deptCheckStrictly", isDeptCheckStrictly())
+            .append("status", getStatus())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysUser.java b/zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysUser.java
new file mode 100644
index 0000000..2cb8c09
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysUser.java
@@ -0,0 +1,327 @@
+package com.zhitan.common.core.domain.entity;
+
+import java.util.Date;
+import java.util.List;
+import javax.validation.constraints.*;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.annotation.Excels;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zhitan.common.core.domain.BaseEntity;
+import com.zhitan.common.xss.Xss;
+
+/**
+ * 鐢ㄦ埛瀵硅薄 sys_user
+ * 
+ * @author zhitan
+ */
+@TableName("sys_user")
+public class SysUser extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 鐢ㄦ埛ID */
+    @TableId
+    @Excel(name = "鐢ㄦ埛搴忓彿", cellType = Excel.ColumnType.NUMERIC, prompt = "鐢ㄦ埛缂栧彿")
+    private Long userId;
+
+    /** 閮ㄩ棬ID */
+    @Excel(name = "閮ㄩ棬缂栧彿", type = Excel.Type.IMPORT)
+    private Long deptId;
+
+    /** 鐢ㄦ埛璐﹀彿 */
+    @Excel(name = "鐧诲綍鍚嶇О")
+    private String userName;
+
+    /** 鐢ㄦ埛鏄电О */
+    @Excel(name = "鐢ㄦ埛鍚嶇О")
+    private String nickName;
+
+    /** 鐢ㄦ埛閭 */
+    @Excel(name = "鐢ㄦ埛閭")
+    private String email;
+
+    /** 鎵嬫満鍙风爜 */
+    @Excel(name = "鎵嬫満鍙风爜", cellType = Excel.ColumnType.TEXT)
+    private String phoneNumber;
+
+    /** 鐢ㄦ埛鎬у埆 */
+    @Excel(name = "鐢ㄦ埛鎬у埆", readConverterExp = "0=鐢�,1=濂�,2=鏈煡")
+    private String sex;
+
+    /** 鐢ㄦ埛澶村儚 */
+    private String avatar;
+
+    /** 瀵嗙爜 */
+    private String password;
+
+    /** 甯愬彿鐘舵�侊紙0姝e父 1鍋滅敤锛� */
+    @Excel(name = "甯愬彿鐘舵��", readConverterExp = "0=姝e父,1=鍋滅敤")
+    private String status;
+
+    /** 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛� */
+    private String delFlag;
+
+    /** 鏈�鍚庣櫥褰旾P */
+    @Excel(name = "鏈�鍚庣櫥褰旾P", type = Excel.Type.EXPORT)
+    private String loginIp;
+
+    /** 鏈�鍚庣櫥褰曟椂闂� */
+    @Excel(name = "鏈�鍚庣櫥褰曟椂闂�", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Excel.Type.EXPORT)
+    private Date loginDate;
+
+    /** 閮ㄩ棬瀵硅薄 */
+    @Excels({
+        @Excel(name = "閮ㄩ棬鍚嶇О", targetAttr = "deptName", type = Excel.Type.EXPORT),
+        @Excel(name = "閮ㄩ棬璐熻矗浜�", targetAttr = "leader", type = Excel.Type.EXPORT)
+    })
+    private SysDept dept;
+
+    /** 瑙掕壊瀵硅薄 */
+    private List<SysRole> roles;
+
+    /** 瑙掕壊缁� */
+    private Long[] roleIds;
+
+    /** 宀椾綅缁� */
+    private Long[] postIds;
+
+    /** 瑙掕壊ID */
+    private Long roleId;
+
+    public SysUser()
+    {
+
+    }
+
+    public SysUser(Long userId)
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId()
+    {
+        return userId;
+    }
+
+    public void setUserId(Long userId)
+    {
+        this.userId = userId;
+    }
+
+    public boolean isAdmin()
+    {
+        return isAdmin(this.userId);
+    }
+
+    public static boolean isAdmin(Long userId)
+    {
+        return userId != null && 1L == userId;
+    }
+
+    public Long getDeptId()
+    {
+        return deptId;
+    }
+
+    public void setDeptId(Long deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    @Xss(message = "鐢ㄦ埛鏄电О涓嶈兘鍖呭惈鑴氭湰瀛楃")
+    @Size(min = 0, max = 30, message = "鐢ㄦ埛鏄电О闀垮害涓嶈兘瓒呰繃30涓瓧绗�")
+    public String getNickName()
+    {
+        return nickName;
+    }
+
+    public void setNickName(String nickName)
+    {
+        this.nickName = nickName;
+    }
+
+    @Xss(message = "鐢ㄦ埛璐﹀彿涓嶈兘鍖呭惈鑴氭湰瀛楃")
+    @NotBlank(message = "鐢ㄦ埛璐﹀彿涓嶈兘涓虹┖")
+    @Size(min = 0, max = 30, message = "鐢ㄦ埛璐﹀彿闀垮害涓嶈兘瓒呰繃30涓瓧绗�")
+    public String getUserName()
+    {
+        return userName;
+    }
+
+    public void setUserName(String userName)
+    {
+        this.userName = userName;
+    }
+
+    @Email(message = "閭鏍煎紡涓嶆纭�")
+    @Size(min = 0, max = 50, message = "閭闀垮害涓嶈兘瓒呰繃50涓瓧绗�")
+    public String getEmail()
+    {
+        return email;
+    }
+
+    public void setEmail(String email)
+    {
+        this.email = email;
+    }
+
+    @Size(min = 0, max = 11, message = "鎵嬫満鍙风爜闀垮害涓嶈兘瓒呰繃11涓瓧绗�")
+    public String getPhoneNumber()
+    {
+        return phoneNumber;
+    }
+
+    public void setPhoneNumber(String phoneNumber)
+    {
+        this.phoneNumber = phoneNumber;
+    }
+
+    public String getSex()
+    {
+        return sex;
+    }
+
+    public void setSex(String sex)
+    {
+        this.sex = sex;
+    }
+
+    public String getAvatar()
+    {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar)
+    {
+        this.avatar = avatar;
+    }
+
+    public String getPassword()
+    {
+        return password;
+    }
+
+    public void setPassword(String password)
+    {
+        this.password = password;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    public String getDelFlag()
+    {
+        return delFlag;
+    }
+
+    public void setDelFlag(String delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getLoginIp()
+    {
+        return loginIp;
+    }
+
+    public void setLoginIp(String loginIp)
+    {
+        this.loginIp = loginIp;
+    }
+
+    public Date getLoginDate()
+    {
+        return loginDate;
+    }
+
+    public void setLoginDate(Date loginDate)
+    {
+        this.loginDate = loginDate;
+    }
+
+    public SysDept getDept()
+    {
+        return dept;
+    }
+
+    public void setDept(SysDept dept)
+    {
+        this.dept = dept;
+    }
+
+    public List<SysRole> getRoles()
+    {
+        return roles;
+    }
+
+    public void setRoles(List<SysRole> roles)
+    {
+        this.roles = roles;
+    }
+
+    public Long[] getRoleIds()
+    {
+        return roleIds;
+    }
+
+    public void setRoleIds(Long[] roleIds)
+    {
+        this.roleIds = roleIds;
+    }
+
+    public Long[] getPostIds()
+    {
+        return postIds;
+    }
+
+    public void setPostIds(Long[] postIds)
+    {
+        this.postIds = postIds;
+    }
+
+    public Long getRoleId()
+    {
+        return roleId;
+    }
+
+    public void setRoleId(Long roleId)
+    {
+        this.roleId = roleId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("userId", getUserId())
+            .append("deptId", getDeptId())
+            .append("userName", getUserName())
+            .append("nickName", getNickName())
+            .append("email", getEmail())
+            .append("phonenumber", getPhoneNumber())
+            .append("sex", getSex())
+            .append("avatar", getAvatar())
+            .append("password", getPassword())
+            .append("status", getStatus())
+            .append("delFlag", getDelFlag())
+            .append("loginIp", getLoginIp())
+            .append("loginDate", getLoginDate())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .append("dept", getDept())
+            .toString();
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/domain/model/LoginBody.java b/zhitan-common/src/main/java/com/zhitan/common/core/domain/model/LoginBody.java
new file mode 100644
index 0000000..38d62cf
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/domain/model/LoginBody.java
@@ -0,0 +1,69 @@
+package com.zhitan.common.core.domain.model;
+
+/**
+ * 鐢ㄦ埛鐧诲綍瀵硅薄
+ * 
+ * @author zhitan
+ */
+public class LoginBody
+{
+    /**
+     * 鐢ㄦ埛鍚�
+     */
+    private String username;
+
+    /**
+     * 鐢ㄦ埛瀵嗙爜
+     */
+    private String password;
+
+    /**
+     * 楠岃瘉鐮�
+     */
+    private String code;
+
+    /**
+     * 鍞竴鏍囪瘑
+     */
+    private String uuid;
+
+    public String getUsername()
+    {
+        return username;
+    }
+
+    public void setUsername(String username)
+    {
+        this.username = username;
+    }
+
+    public String getPassword()
+    {
+        return password;
+    }
+
+    public void setPassword(String password)
+    {
+        this.password = password;
+    }
+
+    public String getCode()
+    {
+        return code;
+    }
+
+    public void setCode(String code)
+    {
+        this.code = code;
+    }
+
+    public String getUuid()
+    {
+        return uuid;
+    }
+
+    public void setUuid(String uuid)
+    {
+        this.uuid = uuid;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/domain/model/LoginUser.java b/zhitan-common/src/main/java/com/zhitan/common/core/domain/model/LoginUser.java
new file mode 100644
index 0000000..f2ecbee
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/domain/model/LoginUser.java
@@ -0,0 +1,266 @@
+package com.zhitan.common.core.domain.model;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.zhitan.common.core.domain.entity.SysUser;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+import java.util.Collection;
+import java.util.Set;
+
+/**
+ * 鐧诲綍鐢ㄦ埛韬唤鏉冮檺
+ * 
+ * @author zhitan
+ */
+public class LoginUser implements UserDetails
+{
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鐢ㄦ埛ID
+     */
+    private Long userId;
+
+    /**
+     * 閮ㄩ棬ID
+     */
+    private Long deptId;
+
+    /**
+     * 鐢ㄦ埛鍞竴鏍囪瘑
+     */
+    private String token;
+
+    /**
+     * 鐧诲綍鏃堕棿
+     */
+    private Long loginTime;
+
+    /**
+     * 杩囨湡鏃堕棿
+     */
+    private Long expireTime;
+
+    /**
+     * 鐧诲綍IP鍦板潃
+     */
+    private String ipaddr;
+
+    /**
+     * 鐧诲綍鍦扮偣
+     */
+    private String loginLocation;
+
+    /**
+     * 娴忚鍣ㄧ被鍨�
+     */
+    private String browser;
+
+    /**
+     * 鎿嶄綔绯荤粺
+     */
+    private String os;
+
+    /**
+     * 鏉冮檺鍒楄〃
+     */
+    private Set<String> permissions;
+
+    /**
+     * 鐢ㄦ埛淇℃伅
+     */
+    private SysUser user;
+
+    public LoginUser()
+    {
+    }
+
+    public LoginUser(SysUser user, Set<String> permissions)
+    {
+        this.user = user;
+        this.permissions = permissions;
+    }
+
+    public LoginUser(Long userId, Long deptId, SysUser user, Set<String> permissions)
+    {
+        this.userId = userId;
+        this.deptId = deptId;
+        this.user = user;
+        this.permissions = permissions;
+    }
+
+    public Long getUserId()
+    {
+        return userId;
+    }
+
+    public void setUserId(Long userId)
+    {
+        this.userId = userId;
+    }
+
+    public Long getDeptId()
+    {
+        return deptId;
+    }
+
+    public void setDeptId(Long deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    public String getToken()
+    {
+        return token;
+    }
+
+    public void setToken(String token)
+    {
+        this.token = token;
+    }
+
+    @JSONField(serialize = false)
+    @Override
+    public String getPassword()
+    {
+        return user.getPassword();
+    }
+
+    @Override
+    public String getUsername()
+    {
+        return user.getUserName();
+    }
+
+    /**
+     * 璐︽埛鏄惁鏈繃鏈�,杩囨湡鏃犳硶楠岃瘉
+     */
+    @JSONField(serialize = false)
+    @Override
+    public boolean isAccountNonExpired()
+    {
+        return true;
+    }
+
+    /**
+     * 鎸囧畾鐢ㄦ埛鏄惁瑙i攣,閿佸畾鐨勭敤鎴锋棤娉曡繘琛岃韩浠介獙璇�
+     * 
+     * @return
+     */
+    @JSONField(serialize = false)
+    @Override
+    public boolean isAccountNonLocked()
+    {
+        return true;
+    }
+
+    /**
+     * 鎸囩ず鏄惁宸茶繃鏈熺殑鐢ㄦ埛鐨勫嚟鎹�(瀵嗙爜),杩囨湡鐨勫嚟鎹槻姝㈣璇�
+     * 
+     * @return
+     */
+    @JSONField(serialize = false)
+    @Override
+    public boolean isCredentialsNonExpired()
+    {
+        return true;
+    }
+
+    /**
+     * 鏄惁鍙敤 ,绂佺敤鐨勭敤鎴蜂笉鑳借韩浠介獙璇�
+     * 
+     * @return
+     */
+    @JSONField(serialize = false)
+    @Override
+    public boolean isEnabled()
+    {
+        return true;
+    }
+
+    public Long getLoginTime()
+    {
+        return loginTime;
+    }
+
+    public void setLoginTime(Long loginTime)
+    {
+        this.loginTime = loginTime;
+    }
+
+    public String getIpaddr()
+    {
+        return ipaddr;
+    }
+
+    public void setIpaddr(String ipaddr)
+    {
+        this.ipaddr = ipaddr;
+    }
+
+    public String getLoginLocation()
+    {
+        return loginLocation;
+    }
+
+    public void setLoginLocation(String loginLocation)
+    {
+        this.loginLocation = loginLocation;
+    }
+
+    public String getBrowser()
+    {
+        return browser;
+    }
+
+    public void setBrowser(String browser)
+    {
+        this.browser = browser;
+    }
+
+    public String getOs()
+    {
+        return os;
+    }
+
+    public void setOs(String os)
+    {
+        this.os = os;
+    }
+
+    public Long getExpireTime()
+    {
+        return expireTime;
+    }
+
+    public void setExpireTime(Long expireTime)
+    {
+        this.expireTime = expireTime;
+    }
+
+    public Set<String> getPermissions()
+    {
+        return permissions;
+    }
+
+    public void setPermissions(Set<String> permissions)
+    {
+        this.permissions = permissions;
+    }
+
+    public SysUser getUser()
+    {
+        return user;
+    }
+
+    public void setUser(SysUser user)
+    {
+        this.user = user;
+    }
+
+    @Override
+    public Collection<? extends GrantedAuthority> getAuthorities()
+    {
+        return null;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/domain/model/RegisterBody.java b/zhitan-common/src/main/java/com/zhitan/common/core/domain/model/RegisterBody.java
new file mode 100644
index 0000000..82df5ca
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/domain/model/RegisterBody.java
@@ -0,0 +1,11 @@
+package com.zhitan.common.core.domain.model;
+
+/**
+ * 鐢ㄦ埛娉ㄥ唽瀵硅薄
+ * 
+ * @author zhitan
+ */
+public class RegisterBody extends LoginBody
+{
+
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/page/PageDomain.java b/zhitan-common/src/main/java/com/zhitan/common/core/page/PageDomain.java
new file mode 100644
index 0000000..c2ee347
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/page/PageDomain.java
@@ -0,0 +1,101 @@
+package com.zhitan.common.core.page;
+
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 鍒嗛〉鏁版嵁
+ * 
+ * @author zhitan
+ */
+public class PageDomain
+{
+    /** 褰撳墠璁板綍璧峰绱㈠紩 */
+    private Integer pageNum;
+
+    /** 姣忛〉鏄剧ず璁板綍鏁� */
+    private Integer pageSize;
+
+    /** 鎺掑簭鍒� */
+    private String orderByColumn;
+
+    /** 鎺掑簭鐨勬柟鍚慸esc鎴栬�卆sc */
+    private String isAsc = "asc";
+
+    /** 鍒嗛〉鍙傛暟鍚堢悊鍖� */
+    private Boolean reasonable = true;
+
+    public String getOrderBy()
+    {
+        if (StringUtils.isEmpty(orderByColumn))
+        {
+            return "";
+        }
+        return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc;
+    }
+
+    public Integer getPageNum()
+    {
+        return pageNum;
+    }
+
+    public void setPageNum(Integer pageNum)
+    {
+        this.pageNum = pageNum;
+    }
+
+    public Integer getPageSize()
+    {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize)
+    {
+        this.pageSize = pageSize;
+    }
+
+    public String getOrderByColumn()
+    {
+        return orderByColumn;
+    }
+
+    public void setOrderByColumn(String orderByColumn)
+    {
+        this.orderByColumn = orderByColumn;
+    }
+
+    public String getIsAsc()
+    {
+        return isAsc;
+    }
+
+    public void setIsAsc(String isAsc)
+    {
+        if (StringUtils.isNotEmpty(isAsc))
+        {
+            // 鍏煎鍓嶇鎺掑簭绫诲瀷
+            if ("ascending".equals(isAsc))
+            {
+                isAsc = "asc";
+            }
+            else if ("descending".equals(isAsc))
+            {
+                isAsc = "desc";
+            }
+            this.isAsc = isAsc;
+        }
+    }
+
+    public Boolean getReasonable()
+    {
+        if (StringUtils.isNull(reasonable))
+        {
+            return Boolean.TRUE;
+        }
+        return reasonable;
+    }
+
+    public void setReasonable(Boolean reasonable)
+    {
+        this.reasonable = reasonable;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/page/TableDataInfo.java b/zhitan-common/src/main/java/com/zhitan/common/core/page/TableDataInfo.java
new file mode 100644
index 0000000..a0a1080
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/page/TableDataInfo.java
@@ -0,0 +1,85 @@
+package com.zhitan.common.core.page;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄
+ * 
+ * @author zhitan
+ */
+public class TableDataInfo implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 鎬昏褰曟暟 */
+    private long total;
+
+    /** 鍒楄〃鏁版嵁 */
+    private List<?> rows;
+
+    /** 娑堟伅鐘舵�佺爜 */
+    private int code;
+
+    /** 娑堟伅鍐呭 */
+    private String msg;
+
+    /**
+     * 琛ㄦ牸鏁版嵁瀵硅薄
+     */
+    public TableDataInfo()
+    {
+    }
+
+    /**
+     * 鍒嗛〉
+     * 
+     * @param list 鍒楄〃鏁版嵁
+     * @param total 鎬昏褰曟暟
+     */
+    public TableDataInfo(List<?> list, int total)
+    {
+        this.rows = list;
+        this.total = total;
+    }
+
+    public long getTotal()
+    {
+        return total;
+    }
+
+    public void setTotal(long total)
+    {
+        this.total = total;
+    }
+
+    public List<?> getRows()
+    {
+        return rows;
+    }
+
+    public void setRows(List<?> rows)
+    {
+        this.rows = rows;
+    }
+
+    public int getCode()
+    {
+        return code;
+    }
+
+    public void setCode(int code)
+    {
+        this.code = code;
+    }
+
+    public String getMsg()
+    {
+        return msg;
+    }
+
+    public void setMsg(String msg)
+    {
+        this.msg = msg;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/page/TableSupport.java b/zhitan-common/src/main/java/com/zhitan/common/core/page/TableSupport.java
new file mode 100644
index 0000000..2bc7f80
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/page/TableSupport.java
@@ -0,0 +1,56 @@
+package com.zhitan.common.core.page;
+
+import com.zhitan.common.core.text.Convert;
+import com.zhitan.common.utils.ServletUtils;
+
+/**
+ * 琛ㄦ牸鏁版嵁澶勭悊
+ * 
+ * @author zhitan
+ */
+public class TableSupport
+{
+    /**
+     * 褰撳墠璁板綍璧峰绱㈠紩
+     */
+    public static final String PAGE_NUM = "pageNum";
+
+    /**
+     * 姣忛〉鏄剧ず璁板綍鏁�
+     */
+    public static final String PAGE_SIZE = "pageSize";
+
+    /**
+     * 鎺掑簭鍒�
+     */
+    public static final String ORDER_BY_COLUMN = "orderByColumn";
+
+    /**
+     * 鎺掑簭鐨勬柟鍚� "desc" 鎴栬�� "asc".
+     */
+    public static final String IS_ASC = "isAsc";
+
+    /**
+     * 鍒嗛〉鍙傛暟鍚堢悊鍖�
+     */
+    public static final String REASONABLE = "reasonable";
+
+    /**
+     * 灏佽鍒嗛〉瀵硅薄
+     */
+    public static PageDomain getPageDomain()
+    {
+        PageDomain pageDomain = new PageDomain();
+        pageDomain.setPageNum(Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1));
+        pageDomain.setPageSize(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10));
+        pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN));
+        pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));
+        pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE));
+        return pageDomain;
+    }
+
+    public static PageDomain buildPageRequest()
+    {
+        return getPageDomain();
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/redis/RedisCache.java b/zhitan-common/src/main/java/com/zhitan/common/core/redis/RedisCache.java
new file mode 100644
index 0000000..29d301d
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/redis/RedisCache.java
@@ -0,0 +1,268 @@
+package com.zhitan.common.core.redis;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import javax.annotation.Resource;
+import org.springframework.data.redis.core.BoundSetOperations;
+import org.springframework.data.redis.core.HashOperations;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.ValueOperations;
+import org.springframework.stereotype.Component;
+
+/**
+ * spring redis 宸ュ叿绫�
+ *
+ * @author zhitan
+ **/
+@SuppressWarnings(value = { "unchecked", "rawtypes" })
+@Component
+public class RedisCache
+{
+    @Resource
+    public RedisTemplate redisTemplate;
+
+    /**
+     * 缂撳瓨鍩烘湰鐨勫璞★紝Integer銆丼tring銆佸疄浣撶被绛�
+     *
+     * @param key 缂撳瓨鐨勯敭鍊�
+     * @param value 缂撳瓨鐨勫��
+     */
+    public <T> void setCacheObject(final String key, final T value)
+    {
+        redisTemplate.opsForValue().set(key, value);
+    }
+
+    /**
+     * 缂撳瓨鍩烘湰鐨勫璞★紝Integer銆丼tring銆佸疄浣撶被绛�
+     *
+     * @param key 缂撳瓨鐨勯敭鍊�
+     * @param value 缂撳瓨鐨勫��
+     * @param timeout 鏃堕棿
+     * @param timeUnit 鏃堕棿棰楃矑搴�
+     */
+    public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit)
+    {
+        redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
+    }
+
+    /**
+     * 璁剧疆鏈夋晥鏃堕棿
+     *
+     * @param key Redis閿�
+     * @param timeout 瓒呮椂鏃堕棿
+     * @return true=璁剧疆鎴愬姛锛沠alse=璁剧疆澶辫触
+     */
+    public boolean expire(final String key, final long timeout)
+    {
+        return expire(key, timeout, TimeUnit.SECONDS);
+    }
+
+    /**
+     * 璁剧疆鏈夋晥鏃堕棿
+     *
+     * @param key Redis閿�
+     * @param timeout 瓒呮椂鏃堕棿
+     * @param unit 鏃堕棿鍗曚綅
+     * @return true=璁剧疆鎴愬姛锛沠alse=璁剧疆澶辫触
+     */
+    public boolean expire(final String key, final long timeout, final TimeUnit unit)
+    {
+        return redisTemplate.expire(key, timeout, unit);
+    }
+
+    /**
+     * 鑾峰彇鏈夋晥鏃堕棿
+     *
+     * @param key Redis閿�
+     * @return 鏈夋晥鏃堕棿
+     */
+    public long getExpire(final String key)
+    {
+        return redisTemplate.getExpire(key);
+    }
+
+    /**
+     * 鍒ゆ柇 key鏄惁瀛樺湪
+     *
+     * @param key 閿�
+     * @return true 瀛樺湪 false涓嶅瓨鍦�
+     */
+    public Boolean hasKey(String key)
+    {
+        return redisTemplate.hasKey(key);
+    }
+
+    /**
+     * 鑾峰緱缂撳瓨鐨勫熀鏈璞°��
+     *
+     * @param key 缂撳瓨閿��
+     * @return 缂撳瓨閿�煎搴旂殑鏁版嵁
+     */
+    public <T> T getCacheObject(final String key)
+    {
+        ValueOperations<String, T> operation = redisTemplate.opsForValue();
+        return operation.get(key);
+    }
+
+    /**
+     * 鍒犻櫎鍗曚釜瀵硅薄
+     *
+     * @param key
+     */
+    public boolean deleteObject(final String key)
+    {
+        return redisTemplate.delete(key);
+    }
+
+    /**
+     * 鍒犻櫎闆嗗悎瀵硅薄
+     *
+     * @param collection 澶氫釜瀵硅薄
+     * @return
+     */
+    public boolean deleteObject(final Collection collection)
+    {
+        return redisTemplate.delete(collection) > 0;
+    }
+
+    /**
+     * 缂撳瓨List鏁版嵁
+     *
+     * @param key 缂撳瓨鐨勯敭鍊�
+     * @param dataList 寰呯紦瀛樼殑List鏁版嵁
+     * @return 缂撳瓨鐨勫璞�
+     */
+    public <T> long setCacheList(final String key, final List<T> dataList)
+    {
+        Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
+        return count == null ? 0 : count;
+    }
+
+    /**
+     * 鑾峰緱缂撳瓨鐨刲ist瀵硅薄
+     *
+     * @param key 缂撳瓨鐨勯敭鍊�
+     * @return 缂撳瓨閿�煎搴旂殑鏁版嵁
+     */
+    public <T> List<T> getCacheList(final String key)
+    {
+        return redisTemplate.opsForList().range(key, 0, -1);
+    }
+
+    /**
+     * 缂撳瓨Set
+     *
+     * @param key 缂撳瓨閿��
+     * @param dataSet 缂撳瓨鐨勬暟鎹�
+     * @return 缂撳瓨鏁版嵁鐨勫璞�
+     */
+    public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet)
+    {
+        BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
+        Iterator<T> it = dataSet.iterator();
+        while (it.hasNext())
+        {
+            setOperation.add(it.next());
+        }
+        return setOperation;
+    }
+
+    /**
+     * 鑾峰緱缂撳瓨鐨剆et
+     *
+     * @param key
+     * @return
+     */
+    public <T> Set<T> getCacheSet(final String key)
+    {
+        return redisTemplate.opsForSet().members(key);
+    }
+
+    /**
+     * 缂撳瓨Map
+     *
+     * @param key
+     * @param dataMap
+     */
+    public <T> void setCacheMap(final String key, final Map<String, T> dataMap)
+    {
+        if (dataMap != null) {
+            redisTemplate.opsForHash().putAll(key, dataMap);
+        }
+    }
+
+    /**
+     * 鑾峰緱缂撳瓨鐨凪ap
+     *
+     * @param key
+     * @return
+     */
+    public <T> Map<String, T> getCacheMap(final String key)
+    {
+        return redisTemplate.opsForHash().entries(key);
+    }
+
+    /**
+     * 寰�Hash涓瓨鍏ユ暟鎹�
+     *
+     * @param key Redis閿�
+     * @param hKey Hash閿�
+     * @param value 鍊�
+     */
+    public <T> void setCacheMapValue(final String key, final String hKey, final T value)
+    {
+        redisTemplate.opsForHash().put(key, hKey, value);
+    }
+
+    /**
+     * 鑾峰彇Hash涓殑鏁版嵁
+     *
+     * @param key Redis閿�
+     * @param hKey Hash閿�
+     * @return Hash涓殑瀵硅薄
+     */
+    public <T> T getCacheMapValue(final String key, final String hKey)
+    {
+        HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();
+        return opsForHash.get(key, hKey);
+    }
+
+    /**
+     * 鑾峰彇澶氫釜Hash涓殑鏁版嵁
+     *
+     * @param key Redis閿�
+     * @param hKeys Hash閿泦鍚�
+     * @return Hash瀵硅薄闆嗗悎
+     */
+    public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys)
+    {
+        return redisTemplate.opsForHash().multiGet(key, hKeys);
+    }
+
+    /**
+     * 鍒犻櫎Hash涓殑鏌愭潯鏁版嵁
+     *
+     * @param key Redis閿�
+     * @param hKey Hash閿�
+     * @return 鏄惁鎴愬姛
+     */
+    public boolean deleteCacheMapValue(final String key, final String hKey)
+    {
+        return redisTemplate.opsForHash().delete(key, hKey) > 0;
+    }
+
+    /**
+     * 鑾峰緱缂撳瓨鐨勫熀鏈璞″垪琛�
+     *
+     * @param pattern 瀛楃涓插墠缂�
+     * @return 瀵硅薄鍒楄〃
+     */
+    public Collection<String> keys(final String pattern)
+    {
+        return redisTemplate.keys(pattern);
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/text/CharsetKit.java b/zhitan-common/src/main/java/com/zhitan/common/core/text/CharsetKit.java
new file mode 100644
index 0000000..fa64444
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/text/CharsetKit.java
@@ -0,0 +1,86 @@
+package com.zhitan.common.core.text;
+
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 瀛楃闆嗗伐鍏风被
+ * 
+ * @author zhitan
+ */
+public class CharsetKit
+{
+    /** ISO-8859-1 */
+    public static final String ISO_8859_1 = "ISO-8859-1";
+    /** UTF-8 */
+    public static final String UTF_8 = "UTF-8";
+    /** GBK */
+    public static final String GBK = "GBK";
+
+    /** ISO-8859-1 */
+    public static final Charset CHARSET_ISO_8859_1 = Charset.forName(ISO_8859_1);
+    /** UTF-8 */
+    public static final Charset CHARSET_UTF_8 = Charset.forName(UTF_8);
+    /** GBK */
+    public static final Charset CHARSET_GBK = Charset.forName(GBK);
+
+    /**
+     * 杞崲涓篊harset瀵硅薄
+     * 
+     * @param charset 瀛楃闆嗭紝涓虹┖鍒欒繑鍥為粯璁ゅ瓧绗﹂泦
+     * @return Charset
+     */
+    public static Charset charset(String charset)
+    {
+        return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset);
+    }
+
+    /**
+     * 杞崲瀛楃涓茬殑瀛楃闆嗙紪鐮�
+     * 
+     * @param source 瀛楃涓�
+     * @param srcCharset 婧愬瓧绗﹂泦锛岄粯璁SO-8859-1
+     * @param destCharset 鐩爣瀛楃闆嗭紝榛樿UTF-8
+     * @return 杞崲鍚庣殑瀛楃闆�
+     */
+    public static String convert(String source, String srcCharset, String destCharset)
+    {
+        return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset));
+    }
+
+    /**
+     * 杞崲瀛楃涓茬殑瀛楃闆嗙紪鐮�
+     * 
+     * @param source 瀛楃涓�
+     * @param srcCharset 婧愬瓧绗﹂泦锛岄粯璁SO-8859-1
+     * @param destCharset 鐩爣瀛楃闆嗭紝榛樿UTF-8
+     * @return 杞崲鍚庣殑瀛楃闆�
+     */
+    public static String convert(String source, Charset srcCharset, Charset destCharset)
+    {
+        if (null == srcCharset)
+        {
+            srcCharset = StandardCharsets.ISO_8859_1;
+        }
+
+        if (null == destCharset)
+        {
+            destCharset = StandardCharsets.UTF_8;
+        }
+
+        if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset))
+        {
+            return source;
+        }
+        return new String(source.getBytes(srcCharset), destCharset);
+    }
+
+    /**
+     * @return 绯荤粺瀛楃闆嗙紪鐮�
+     */
+    public static String systemCharset()
+    {
+        return Charset.defaultCharset().name();
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/text/Convert.java b/zhitan-common/src/main/java/com/zhitan/common/core/text/Convert.java
new file mode 100644
index 0000000..0881a16
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/text/Convert.java
@@ -0,0 +1,1006 @@
+package com.zhitan.common.core.text;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.math.RoundingMode;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import java.text.NumberFormat;
+import java.util.Set;
+import com.zhitan.common.utils.StringUtils;
+import org.apache.commons.lang3.ArrayUtils;
+
+/**
+ * 绫诲瀷杞崲鍣�
+ *
+ * @author zhitan
+ */
+public class Convert
+{
+    /**
+     * 杞崲涓哄瓧绗︿覆<br>
+     * 濡傛灉缁欏畾鐨勫�间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
+     * @return 缁撴灉
+     */
+    public static String toStr(Object value, String defaultValue)
+    {
+        if (null == value)
+        {
+            return defaultValue;
+        }
+        if (value instanceof String)
+        {
+            return (String) value;
+        }
+        return value.toString();
+    }
+
+    /**
+     * 杞崲涓哄瓧绗︿覆<br>
+     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @return 缁撴灉
+     */
+    public static String toStr(Object value)
+    {
+        return toStr(value, null);
+    }
+
+    /**
+     * 杞崲涓哄瓧绗�<br>
+     * 濡傛灉缁欏畾鐨勫�间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
+     * @return 缁撴灉
+     */
+    public static Character toChar(Object value, Character defaultValue)
+    {
+        if (null == value)
+        {
+            return defaultValue;
+        }
+        if (value instanceof Character)
+        {
+            return (Character) value;
+        }
+
+        final String valueStr = toStr(value, null);
+        return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0);
+    }
+
+    /**
+     * 杞崲涓哄瓧绗�<br>
+     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @return 缁撴灉
+     */
+    public static Character toChar(Object value)
+    {
+        return toChar(value, null);
+    }
+
+    /**
+     * 杞崲涓篵yte<br>
+     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
+     * @return 缁撴灉
+     */
+    public static Byte toByte(Object value, Byte defaultValue)
+    {
+        if (value == null)
+        {
+            return defaultValue;
+        }
+        if (value instanceof Byte)
+        {
+            return (Byte) value;
+        }
+        if (value instanceof Number)
+        {
+            return ((Number) value).byteValue();
+        }
+        final String valueStr = toStr(value, null);
+        if (StringUtils.isEmpty(valueStr))
+        {
+            return defaultValue;
+        }
+        try
+        {
+            return Byte.parseByte(valueStr);
+        }
+        catch (Exception e)
+        {
+            return defaultValue;
+        }
+    }
+
+    /**
+     * 杞崲涓篵yte<br>
+     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @return 缁撴灉
+     */
+    public static Byte toByte(Object value)
+    {
+        return toByte(value, null);
+    }
+
+    /**
+     * 杞崲涓篠hort<br>
+     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
+     * @return 缁撴灉
+     */
+    public static Short toShort(Object value, Short defaultValue)
+    {
+        if (value == null)
+        {
+            return defaultValue;
+        }
+        if (value instanceof Short)
+        {
+            return (Short) value;
+        }
+        if (value instanceof Number)
+        {
+            return ((Number) value).shortValue();
+        }
+        final String valueStr = toStr(value, null);
+        if (StringUtils.isEmpty(valueStr))
+        {
+            return defaultValue;
+        }
+        try
+        {
+            return Short.parseShort(valueStr.trim());
+        }
+        catch (Exception e)
+        {
+            return defaultValue;
+        }
+    }
+
+    /**
+     * 杞崲涓篠hort<br>
+     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @return 缁撴灉
+     */
+    public static Short toShort(Object value)
+    {
+        return toShort(value, null);
+    }
+
+    /**
+     * 杞崲涓篘umber<br>
+     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
+     * @return 缁撴灉
+     */
+    public static Number toNumber(Object value, Number defaultValue)
+    {
+        if (value == null)
+        {
+            return defaultValue;
+        }
+        if (value instanceof Number)
+        {
+            return (Number) value;
+        }
+        final String valueStr = toStr(value, null);
+        if (StringUtils.isEmpty(valueStr))
+        {
+            return defaultValue;
+        }
+        try
+        {
+            return NumberFormat.getInstance().parse(valueStr);
+        }
+        catch (Exception e)
+        {
+            return defaultValue;
+        }
+    }
+
+    /**
+     * 杞崲涓篘umber<br>
+     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @return 缁撴灉
+     */
+    public static Number toNumber(Object value)
+    {
+        return toNumber(value, null);
+    }
+
+    /**
+     * 杞崲涓篿nt<br>
+     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
+     * @return 缁撴灉
+     */
+    public static Integer toInt(Object value, Integer defaultValue)
+    {
+        if (value == null)
+        {
+            return defaultValue;
+        }
+        if (value instanceof Integer)
+        {
+            return (Integer) value;
+        }
+        if (value instanceof Number)
+        {
+            return ((Number) value).intValue();
+        }
+        final String valueStr = toStr(value, null);
+        if (StringUtils.isEmpty(valueStr))
+        {
+            return defaultValue;
+        }
+        try
+        {
+            return Integer.parseInt(valueStr.trim());
+        }
+        catch (Exception e)
+        {
+            return defaultValue;
+        }
+    }
+
+    /**
+     * 杞崲涓篿nt<br>
+     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @return 缁撴灉
+     */
+    public static Integer toInt(Object value)
+    {
+        return toInt(value, null);
+    }
+
+    /**
+     * 杞崲涓篒nteger鏁扮粍<br>
+     *
+     * @param str 琚浆鎹㈢殑鍊�
+     * @return 缁撴灉
+     */
+    public static Integer[] toIntArray(String str)
+    {
+        return toIntArray(",", str);
+    }
+
+    /**
+     * 杞崲涓篖ong鏁扮粍<br>
+     *
+     * @param str 琚浆鎹㈢殑鍊�
+     * @return 缁撴灉
+     */
+    public static Long[] toLongArray(String str)
+    {
+        return toLongArray(",", str);
+    }
+
+    /**
+     * 杞崲涓篒nteger鏁扮粍<br>
+     *
+     * @param split 鍒嗛殧绗�
+     * @param split 琚浆鎹㈢殑鍊�
+     * @return 缁撴灉
+     */
+    public static Integer[] toIntArray(String split, String str)
+    {
+        if (StringUtils.isEmpty(str))
+        {
+            return new Integer[] {};
+        }
+        String[] arr = str.split(split);
+        final Integer[] ints = new Integer[arr.length];
+        for (int i = 0; i < arr.length; i++)
+        {
+            final Integer v = toInt(arr[i], 0);
+            ints[i] = v;
+        }
+        return ints;
+    }
+
+    /**
+     * 杞崲涓篖ong鏁扮粍<br>
+     *
+     * @param split 鍒嗛殧绗�
+     * @param str 琚浆鎹㈢殑鍊�
+     * @return 缁撴灉
+     */
+    public static Long[] toLongArray(String split, String str)
+    {
+        if (StringUtils.isEmpty(str))
+        {
+            return new Long[] {};
+        }
+        String[] arr = str.split(split);
+        final Long[] longs = new Long[arr.length];
+        for (int i = 0; i < arr.length; i++)
+        {
+            final Long v = toLong(arr[i], null);
+            longs[i] = v;
+        }
+        return longs;
+    }
+
+    /**
+     * 杞崲涓篠tring鏁扮粍<br>
+     *
+     * @param str 琚浆鎹㈢殑鍊�
+     * @return 缁撴灉
+     */
+    public static String[] toStrArray(String str)
+    {
+        return toStrArray(",", str);
+    }
+
+    /**
+     * 杞崲涓篠tring鏁扮粍<br>
+     *
+     * @param split 鍒嗛殧绗�
+     * @param split 琚浆鎹㈢殑鍊�
+     * @return 缁撴灉
+     */
+    public static String[] toStrArray(String split, String str)
+    {
+        return str.split(split);
+    }
+
+    /**
+     * 杞崲涓簂ong<br>
+     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
+     * @return 缁撴灉
+     */
+    public static Long toLong(Object value, Long defaultValue)
+    {
+        if (value == null)
+        {
+            return defaultValue;
+        }
+        if (value instanceof Long)
+        {
+            return (Long) value;
+        }
+        if (value instanceof Number)
+        {
+            return ((Number) value).longValue();
+        }
+        final String valueStr = toStr(value, null);
+        if (StringUtils.isEmpty(valueStr))
+        {
+            return defaultValue;
+        }
+        try
+        {
+            // 鏀寔绉戝璁℃暟娉�
+            return new BigDecimal(valueStr.trim()).longValue();
+        }
+        catch (Exception e)
+        {
+            return defaultValue;
+        }
+    }
+
+    /**
+     * 杞崲涓簂ong<br>
+     * 濡傛灉缁欏畾鐨勫�间负<code>null</code>锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @return 缁撴灉
+     */
+    public static Long toLong(Object value)
+    {
+        return toLong(value, null);
+    }
+
+    /**
+     * 杞崲涓篸ouble<br>
+     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
+     * @return 缁撴灉
+     */
+    public static Double toDouble(Object value, Double defaultValue)
+    {
+        if (value == null)
+        {
+            return defaultValue;
+        }
+        if (value instanceof Double)
+        {
+            return (Double) value;
+        }
+        if (value instanceof Number)
+        {
+            return ((Number) value).doubleValue();
+        }
+        final String valueStr = toStr(value, null);
+        if (StringUtils.isEmpty(valueStr))
+        {
+            return defaultValue;
+        }
+        try
+        {
+            // 鏀寔绉戝璁℃暟娉�
+            return new BigDecimal(valueStr.trim()).doubleValue();
+        }
+        catch (Exception e)
+        {
+            return defaultValue;
+        }
+    }
+
+    /**
+     * 杞崲涓篸ouble<br>
+     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @return 缁撴灉
+     */
+    public static Double toDouble(Object value)
+    {
+        return toDouble(value, null);
+    }
+
+    /**
+     * 杞崲涓篎loat<br>
+     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
+     * @return 缁撴灉
+     */
+    public static Float toFloat(Object value, Float defaultValue)
+    {
+        if (value == null)
+        {
+            return defaultValue;
+        }
+        if (value instanceof Float)
+        {
+            return (Float) value;
+        }
+        if (value instanceof Number)
+        {
+            return ((Number) value).floatValue();
+        }
+        final String valueStr = toStr(value, null);
+        if (StringUtils.isEmpty(valueStr))
+        {
+            return defaultValue;
+        }
+        try
+        {
+            return Float.parseFloat(valueStr.trim());
+        }
+        catch (Exception e)
+        {
+            return defaultValue;
+        }
+    }
+
+    /**
+     * 杞崲涓篎loat<br>
+     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @return 缁撴灉
+     */
+    public static Float toFloat(Object value)
+    {
+        return toFloat(value, null);
+    }
+
+    /**
+     * 杞崲涓篵oolean<br>
+     * String鏀寔鐨勫�间负锛歵rue銆乫alse銆亂es銆乷k銆乶o锛�1,0 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
+     * @return 缁撴灉
+     */
+    public static Boolean toBool(Object value, Boolean defaultValue)
+    {
+        if (value == null)
+        {
+            return defaultValue;
+        }
+        if (value instanceof Boolean)
+        {
+            return (Boolean) value;
+        }
+        String valueStr = toStr(value, null);
+        if (StringUtils.isEmpty(valueStr))
+        {
+            return defaultValue;
+        }
+        valueStr = valueStr.trim().toLowerCase();
+        switch (valueStr)
+        {
+            case "true":
+            case "yes":
+            case "ok":
+            case "1":
+                return true;
+            case "false":
+            case "no":
+            case "0":
+                return false;
+            default:
+                return defaultValue;
+        }
+    }
+
+    /**
+     * 杞崲涓篵oolean<br>
+     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @return 缁撴灉
+     */
+    public static Boolean toBool(Object value)
+    {
+        return toBool(value, null);
+    }
+
+    /**
+     * 杞崲涓篍num瀵硅薄<br>
+     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
+     *
+     * @param clazz Enum鐨凜lass
+     * @param value 鍊�
+     * @param defaultValue 榛樿鍊�
+     * @return Enum
+     */
+    public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value, E defaultValue)
+    {
+        if (value == null)
+        {
+            return defaultValue;
+        }
+        if (clazz.isAssignableFrom(value.getClass()))
+        {
+            @SuppressWarnings("unchecked")
+            E myE = (E) value;
+            return myE;
+        }
+        final String valueStr = toStr(value, null);
+        if (StringUtils.isEmpty(valueStr))
+        {
+            return defaultValue;
+        }
+        try
+        {
+            return Enum.valueOf(clazz, valueStr);
+        }
+        catch (Exception e)
+        {
+            return defaultValue;
+        }
+    }
+
+    /**
+     * 杞崲涓篍num瀵硅薄<br>
+     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
+     *
+     * @param clazz Enum鐨凜lass
+     * @param value 鍊�
+     * @return Enum
+     */
+    public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value)
+    {
+        return toEnum(clazz, value, null);
+    }
+
+    /**
+     * 杞崲涓築igInteger<br>
+     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
+     * @return 缁撴灉
+     */
+    public static BigInteger toBigInteger(Object value, BigInteger defaultValue)
+    {
+        if (value == null)
+        {
+            return defaultValue;
+        }
+        if (value instanceof BigInteger)
+        {
+            return (BigInteger) value;
+        }
+        if (value instanceof Long)
+        {
+            return BigInteger.valueOf((Long) value);
+        }
+        final String valueStr = toStr(value, null);
+        if (StringUtils.isEmpty(valueStr))
+        {
+            return defaultValue;
+        }
+        try
+        {
+            return new BigInteger(valueStr);
+        }
+        catch (Exception e)
+        {
+            return defaultValue;
+        }
+    }
+
+    /**
+     * 杞崲涓築igInteger<br>
+     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<code>null</code><br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @return 缁撴灉
+     */
+    public static BigInteger toBigInteger(Object value)
+    {
+        return toBigInteger(value, null);
+    }
+
+    /**
+     * 杞崲涓築igDecimal<br>
+     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊�
+     * @return 缁撴灉
+     */
+    public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue)
+    {
+        if (value == null)
+        {
+            return defaultValue;
+        }
+        if (value instanceof BigDecimal)
+        {
+            return (BigDecimal) value;
+        }
+        if (value instanceof Long)
+        {
+            return new BigDecimal((Long) value);
+        }
+        if (value instanceof Double)
+        {
+            return BigDecimal.valueOf((Double) value);
+        }
+        if (value instanceof Integer)
+        {
+            return new BigDecimal((Integer) value);
+        }
+        final String valueStr = toStr(value, null);
+        if (StringUtils.isEmpty(valueStr))
+        {
+            return defaultValue;
+        }
+        try
+        {
+            return new BigDecimal(valueStr);
+        }
+        catch (Exception e)
+        {
+            return defaultValue;
+        }
+    }
+
+    /**
+     * 杞崲涓築igDecimal<br>
+     * 濡傛灉缁欏畾鐨勫�间负绌猴紝鎴栬�呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊�<br>
+     * 杞崲澶辫触涓嶄細鎶ラ敊
+     *
+     * @param value 琚浆鎹㈢殑鍊�
+     * @return 缁撴灉
+     */
+    public static BigDecimal toBigDecimal(Object value)
+    {
+        return toBigDecimal(value, null);
+    }
+
+    /**
+     * 灏嗗璞¤浆涓哄瓧绗︿覆<br>
+     * 1銆丅yte鏁扮粍鍜孊yteBuffer浼氳杞崲涓哄搴斿瓧绗︿覆鐨勬暟缁� 2銆佸璞℃暟缁勪細璋冪敤Arrays.toString鏂规硶
+     *
+     * @param obj 瀵硅薄
+     * @return 瀛楃涓�
+     */
+    public static String utf8Str(Object obj)
+    {
+        return str(obj, CharsetKit.CHARSET_UTF_8);
+    }
+
+    /**
+     * 灏嗗璞¤浆涓哄瓧绗︿覆<br>
+     * 1銆丅yte鏁扮粍鍜孊yteBuffer浼氳杞崲涓哄搴斿瓧绗︿覆鐨勬暟缁� 2銆佸璞℃暟缁勪細璋冪敤Arrays.toString鏂规硶
+     *
+     * @param obj 瀵硅薄
+     * @param charsetName 瀛楃闆�
+     * @return 瀛楃涓�
+     */
+    public static String str(Object obj, String charsetName)
+    {
+        return str(obj, Charset.forName(charsetName));
+    }
+
+    /**
+     * 灏嗗璞¤浆涓哄瓧绗︿覆<br>
+     * 1銆丅yte鏁扮粍鍜孊yteBuffer浼氳杞崲涓哄搴斿瓧绗︿覆鐨勬暟缁� 2銆佸璞℃暟缁勪細璋冪敤Arrays.toString鏂规硶
+     *
+     * @param obj 瀵硅薄
+     * @param charset 瀛楃闆�
+     * @return 瀛楃涓�
+     */
+    public static String str(Object obj, Charset charset)
+    {
+        if (null == obj)
+        {
+            return null;
+        }
+
+        if (obj instanceof String)
+        {
+            return (String) obj;
+        }
+        else if (obj instanceof byte[])
+        {
+            return str((byte[]) obj, charset);
+        }
+        else if (obj instanceof Byte[])
+        {
+            byte[] bytes = ArrayUtils.toPrimitive((Byte[]) obj);
+            return str(bytes, charset);
+        }
+        else if (obj instanceof ByteBuffer)
+        {
+            return str((ByteBuffer) obj, charset);
+        }
+        return obj.toString();
+    }
+
+    /**
+     * 灏哹yte鏁扮粍杞负瀛楃涓�
+     *
+     * @param bytes byte鏁扮粍
+     * @param charset 瀛楃闆�
+     * @return 瀛楃涓�
+     */
+    public static String str(byte[] bytes, String charset)
+    {
+        return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset));
+    }
+
+    /**
+     * 瑙g爜瀛楄妭鐮�
+     *
+     * @param data 瀛楃涓�
+     * @param charset 瀛楃闆嗭紝濡傛灉姝ゅ瓧娈典负绌猴紝鍒欒В鐮佺殑缁撴灉鍙栧喅浜庡钩鍙�
+     * @return 瑙g爜鍚庣殑瀛楃涓�
+     */
+    public static String str(byte[] data, Charset charset)
+    {
+        if (data == null)
+        {
+            return null;
+        }
+
+        if (null == charset)
+        {
+            return new String(data);
+        }
+        return new String(data, charset);
+    }
+
+    /**
+     * 灏嗙紪鐮佺殑byteBuffer鏁版嵁杞崲涓哄瓧绗︿覆
+     *
+     * @param data 鏁版嵁
+     * @param charset 瀛楃闆嗭紝濡傛灉涓虹┖浣跨敤褰撳墠绯荤粺瀛楃闆�
+     * @return 瀛楃涓�
+     */
+    public static String str(ByteBuffer data, String charset)
+    {
+        if (data == null)
+        {
+            return null;
+        }
+
+        return str(data, Charset.forName(charset));
+    }
+
+    /**
+     * 灏嗙紪鐮佺殑byteBuffer鏁版嵁杞崲涓哄瓧绗︿覆
+     *
+     * @param data 鏁版嵁
+     * @param charset 瀛楃闆嗭紝濡傛灉涓虹┖浣跨敤褰撳墠绯荤粺瀛楃闆�
+     * @return 瀛楃涓�
+     */
+    public static String str(ByteBuffer data, Charset charset)
+    {
+        if (null == charset)
+        {
+            charset = Charset.defaultCharset();
+        }
+        return charset.decode(data).toString();
+    }
+
+    // ----------------------------------------------------------------------- 鍏ㄨ鍗婅杞崲
+    /**
+     * 鍗婅杞叏瑙�
+     *
+     * @param input String.
+     * @return 鍏ㄨ瀛楃涓�.
+     */
+    public static String toSBC(String input)
+    {
+        return toSBC(input, null);
+    }
+
+    /**
+     * 鍗婅杞叏瑙�
+     *
+     * @param input String
+     * @param notConvertSet 涓嶆浛鎹㈢殑瀛楃闆嗗悎
+     * @return 鍏ㄨ瀛楃涓�.
+     */
+    public static String toSBC(String input, Set<Character> notConvertSet)
+    {
+        char[] c = input.toCharArray();
+        for (int i = 0; i < c.length; i++)
+        {
+            if (null != notConvertSet && notConvertSet.contains(c[i]))
+            {
+                // 璺宠繃涓嶆浛鎹㈢殑瀛楃
+                continue;
+            }
+
+            if (c[i] == ' ')
+            {
+                c[i] = '\u3000';
+            }
+            else if (c[i] < '\177')
+            {
+                c[i] = (char) (c[i] + 65248);
+
+            }
+        }
+        return new String(c);
+    }
+
+    /**
+     * 鍏ㄨ杞崐瑙�
+     *
+     * @param input String.
+     * @return 鍗婅瀛楃涓�
+     */
+    public static String toDBC(String input)
+    {
+        return toDBC(input, null);
+    }
+
+    /**
+     * 鏇挎崲鍏ㄨ涓哄崐瑙�
+     *
+     * @param text 鏂囨湰
+     * @param notConvertSet 涓嶆浛鎹㈢殑瀛楃闆嗗悎
+     * @return 鏇挎崲鍚庣殑瀛楃
+     */
+    public static String toDBC(String text, Set<Character> notConvertSet)
+    {
+        char[] c = text.toCharArray();
+        for (int i = 0; i < c.length; i++)
+        {
+            if (null != notConvertSet && notConvertSet.contains(c[i]))
+            {
+                // 璺宠繃涓嶆浛鎹㈢殑瀛楃
+                continue;
+            }
+
+            if (c[i] == '\u3000')
+            {
+                c[i] = ' ';
+            }
+            else if (c[i] > '\uFF00' && c[i] < '\uFF5F')
+            {
+                c[i] = (char) (c[i] - 65248);
+            }
+        }
+        String returnString = new String(c);
+
+        return returnString;
+    }
+
+    /**
+     * 鏁板瓧閲戦澶у啓杞崲 鍏堝啓涓畬鏁寸殑鐒跺悗灏嗗闆舵嬀鏇挎崲鎴愰浂
+     *
+     * @param n 鏁板瓧
+     * @return 涓枃澶у啓鏁板瓧
+     */
+    public static String digitUppercase(double n)
+    {
+        String[] fraction = { "瑙�", "鍒�" };
+        String[] digit = { "闆�", "澹�", "璐�", "鍙�", "鑲�", "浼�", "闄�", "鏌�", "鎹�", "鐜�" };
+        String[][] unit = { { "鍏�", "涓�", "浜�" }, { "", "鎷�", "浣�", "浠�" } };
+
+        String head = n < 0 ? "璐�" : "";
+        n = Math.abs(n);
+
+        String s = "";
+        for (int i = 0; i < fraction.length; i++)
+        {
+            // 浼樺寲double璁$畻绮惧害涓㈠け闂
+            BigDecimal nNum = new BigDecimal(n);
+            BigDecimal decimal = new BigDecimal(10);
+            BigDecimal scale = nNum.multiply(decimal).setScale(2, RoundingMode.HALF_EVEN);
+            double d = scale.doubleValue();
+            s += (digit[(int) (Math.floor(d * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(闆�.)+", "");
+        }
+        if (s.length() < 1)
+        {
+            s = "鏁�";
+        }
+        int integerPart = (int) Math.floor(n);
+
+        for (int i = 0; i < unit[0].length && integerPart > 0; i++)
+        {
+            String p = "";
+            for (int j = 0; j < unit[1].length && n > 0; j++)
+            {
+                p = digit[integerPart % 10] + unit[1][j] + p;
+                integerPart = integerPart / 10;
+            }
+            s = p.replaceAll("(闆�.)*闆�$", "").replaceAll("^$", "闆�") + unit[0][i] + s;
+        }
+        return head + s.replaceAll("(闆�.)*闆跺厓", "鍏�").replaceFirst("(闆�.)+", "").replaceAll("(闆�.)+", "闆�").replaceAll("^鏁�$", "闆跺厓鏁�");
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/text/StrFormatter.java b/zhitan-common/src/main/java/com/zhitan/common/core/text/StrFormatter.java
new file mode 100644
index 0000000..bae355a
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/text/StrFormatter.java
@@ -0,0 +1,92 @@
+package com.zhitan.common.core.text;
+
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 瀛楃涓叉牸寮忓寲
+ * 
+ * @author zhitan
+ */
+public class StrFormatter
+{
+    public static final String EMPTY_JSON = "{}";
+    public static final char C_BACKSLASH = '\\';
+    public static final char C_DELIM_START = '{';
+    public static final char C_DELIM_END = '}';
+
+    /**
+     * 鏍煎紡鍖栧瓧绗︿覆<br>
+     * 姝ゆ柟娉曞彧鏄畝鍗曞皢鍗犱綅绗� {} 鎸夌収椤哄簭鏇挎崲涓哄弬鏁�<br>
+     * 濡傛灉鎯宠緭鍑� {} 浣跨敤 \\杞箟 { 鍗冲彲锛屽鏋滄兂杈撳嚭 {} 涔嬪墠鐨� \ 浣跨敤鍙岃浆涔夌 \\\\ 鍗冲彲<br>
+     * 渚嬶細<br>
+     * 閫氬父浣跨敤锛歠ormat("this is {} for {}", "a", "b") -> this is a for b<br>
+     * 杞箟{}锛� format("this is \\{} for {}", "a", "b") -> this is \{} for a<br>
+     * 杞箟\锛� format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br>
+     * 
+     * @param strPattern 瀛楃涓叉ā鏉�
+     * @param argArray 鍙傛暟鍒楄〃
+     * @return 缁撴灉
+     */
+    public static String format(final String strPattern, final Object... argArray)
+    {
+        if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray))
+        {
+            return strPattern;
+        }
+        final int strPatternLength = strPattern.length();
+
+        // 鍒濆鍖栧畾涔夊ソ鐨勯暱搴︿互鑾峰緱鏇村ソ鐨勬�ц兘
+        StringBuilder sbuf = new StringBuilder(strPatternLength + 50);
+
+        int handledPosition = 0;
+        int delimIndex;// 鍗犱綅绗︽墍鍦ㄤ綅缃�
+        for (int argIndex = 0; argIndex < argArray.length; argIndex++)
+        {
+            delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition);
+            if (delimIndex == -1)
+            {
+                if (handledPosition == 0)
+                {
+                    return strPattern;
+                }
+                else
+                { // 瀛楃涓叉ā鏉垮墿浣欓儴鍒嗕笉鍐嶅寘鍚崰浣嶇锛屽姞鍏ュ墿浣欓儴鍒嗗悗杩斿洖缁撴灉
+                    sbuf.append(strPattern, handledPosition, strPatternLength);
+                    return sbuf.toString();
+                }
+            }
+            else
+            {
+                if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH)
+                {
+                    if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH)
+                    {
+                        // 杞箟绗︿箣鍓嶈繕鏈変竴涓浆涔夌锛屽崰浣嶇渚濇棫鏈夋晥
+                        sbuf.append(strPattern, handledPosition, delimIndex - 1);
+                        sbuf.append(Convert.utf8Str(argArray[argIndex]));
+                        handledPosition = delimIndex + 2;
+                    }
+                    else
+                    {
+                        // 鍗犱綅绗﹁杞箟
+                        argIndex--;
+                        sbuf.append(strPattern, handledPosition, delimIndex - 1);
+                        sbuf.append(C_DELIM_START);
+                        handledPosition = delimIndex + 1;
+                    }
+                }
+                else
+                {
+                    // 姝e父鍗犱綅绗�
+                    sbuf.append(strPattern, handledPosition, delimIndex);
+                    sbuf.append(Convert.utf8Str(argArray[argIndex]));
+                    handledPosition = delimIndex + 2;
+                }
+            }
+        }
+        // 鍔犲叆鏈�鍚庝竴涓崰浣嶇鍚庢墍鏈夌殑瀛楃
+        sbuf.append(strPattern, handledPosition, strPattern.length());
+
+        return sbuf.toString();
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/BusinessStatus.java b/zhitan-common/src/main/java/com/zhitan/common/enums/BusinessStatus.java
new file mode 100644
index 0000000..9a5b3b4
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/BusinessStatus.java
@@ -0,0 +1,20 @@
+package com.zhitan.common.enums;
+
+/**
+ * 鎿嶄綔鐘舵��
+ * 
+ * @author zhitan
+ *
+ */
+public enum BusinessStatus
+{
+    /**
+     * 鎴愬姛
+     */
+    SUCCESS,
+
+    /**
+     * 澶辫触
+     */
+    FAIL,
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/BusinessType.java b/zhitan-common/src/main/java/com/zhitan/common/enums/BusinessType.java
new file mode 100644
index 0000000..33bd622
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/BusinessType.java
@@ -0,0 +1,59 @@
+package com.zhitan.common.enums;
+
+/**
+ * 涓氬姟鎿嶄綔绫诲瀷
+ * 
+ * @author zhitan
+ */
+public enum BusinessType
+{
+    /**
+     * 鍏跺畠
+     */
+    OTHER,
+
+    /**
+     * 鏂板
+     */
+    INSERT,
+
+    /**
+     * 淇敼
+     */
+    UPDATE,
+
+    /**
+     * 鍒犻櫎
+     */
+    DELETE,
+
+    /**
+     * 鎺堟潈
+     */
+    GRANT,
+
+    /**
+     * 瀵煎嚭
+     */
+    EXPORT,
+
+    /**
+     * 瀵煎叆
+     */
+    IMPORT,
+
+    /**
+     * 寮洪��
+     */
+    FORCE,
+
+    /**
+     * 鐢熸垚浠g爜
+     */
+    GENCODE,
+    
+    /**
+     * 娓呯┖鏁版嵁
+     */
+    CLEAN,
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/CalcType.java b/zhitan-common/src/main/java/com/zhitan/common/enums/CalcType.java
new file mode 100644
index 0000000..4954522
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/CalcType.java
@@ -0,0 +1,16 @@
+package com.zhitan.common.enums;
+
+public enum CalcType {
+  /**
+   * 涓嶈绠�
+   */
+  NONE,
+  /**
+   * 鑷姩璁$畻
+   */
+  CALC,
+  /**
+   * 鎵嬪伐褰曞叆
+   */
+  INPUT
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/CollectionModes.java b/zhitan-common/src/main/java/com/zhitan/common/enums/CollectionModes.java
new file mode 100644
index 0000000..24bc51f
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/CollectionModes.java
@@ -0,0 +1,26 @@
+package com.zhitan.common.enums;
+
+/**
+ * @author 鑼冩柊瀵�
+ *
+ *         瀹炴椂鏁版嵁缁熻绫诲瀷.
+ */
+public enum CollectionModes {
+  last,
+  /**
+   * 骞冲潎鍊�
+   */
+  mean,
+  /**
+   * 鏈�灏�
+   */
+  min,
+  /**
+   * 鏈�澶�
+   */
+  max,
+  /**
+   * 姹傚拰
+   */
+  sum
+}
\ No newline at end of file
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/DataSourceType.java b/zhitan-common/src/main/java/com/zhitan/common/enums/DataSourceType.java
new file mode 100644
index 0000000..a0391df
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/DataSourceType.java
@@ -0,0 +1,19 @@
+package com.zhitan.common.enums;
+
+/**
+ * 鏁版嵁婧�
+ * 
+ * @author zhitan
+ */
+public enum DataSourceType
+{
+    /**
+     * 涓诲簱
+     */
+    MASTER,
+
+    /**
+     * 浠庡簱
+     */
+    SLAVE
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/DesensitizedType.java b/zhitan-common/src/main/java/com/zhitan/common/enums/DesensitizedType.java
new file mode 100644
index 0000000..96a4bfc
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/DesensitizedType.java
@@ -0,0 +1,59 @@
+package com.zhitan.common.enums;
+
+import java.util.function.Function;
+import com.zhitan.common.utils.DesensitizedUtil;
+
+/**
+ * 鑴辨晱绫诲瀷
+ *
+ * @author zhitan
+ */
+public enum DesensitizedType
+{
+    /**
+     * 濮撳悕锛岀2浣嶆槦鍙锋浛鎹�
+     */
+    USERNAME(s -> s.replaceAll("(\\S)\\S(\\S*)", "$1*$2")),
+
+    /**
+     * 瀵嗙爜锛屽叏閮ㄥ瓧绗﹂兘鐢�*浠f浛
+     */
+    PASSWORD(DesensitizedUtil::password),
+
+    /**
+     * 韬唤璇侊紝涓棿10浣嶆槦鍙锋浛鎹�
+     */
+    ID_CARD(s -> s.replaceAll("(\\d{4})\\d{10}(\\d{4})", "$1** **** ****$2")),
+
+    /**
+     * 鎵嬫満鍙凤紝涓棿4浣嶆槦鍙锋浛鎹�
+     */
+    PHONE(s -> s.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")),
+
+    /**
+     * 鐢靛瓙閭锛屼粎鏄剧ず绗竴涓瓧姣嶅拰@鍚庨潰鐨勫湴鍧�鏄剧ず锛屽叾浠栨槦鍙锋浛鎹�
+     */
+    EMAIL(s -> s.replaceAll("(^.)[^@]*(@.*$)", "$1****$2")),
+
+    /**
+     * 閾惰鍗″彿锛屼繚鐣欐渶鍚�4浣嶏紝鍏朵粬鏄熷彿鏇挎崲
+     */
+    BANK_CARD(s -> s.replaceAll("\\d{15}(\\d{3})", "**** **** **** **** $1")),
+
+    /**
+     * 杞︾墝鍙风爜锛屽寘鍚櫘閫氳溅杈嗐�佹柊鑳芥簮杞﹁締
+     */
+    CAR_LICENSE(DesensitizedUtil::carLicense);
+
+    private final Function<String, String> desensitizer;
+
+    DesensitizedType(Function<String, String> desensitizer)
+    {
+        this.desensitizer = desensitizer;
+    }
+
+    public Function<String, String> desensitizer()
+    {
+        return desensitizer;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/ElectricityTypeEnum.java b/zhitan-common/src/main/java/com/zhitan/common/enums/ElectricityTypeEnum.java
new file mode 100644
index 0000000..46a1d63
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/ElectricityTypeEnum.java
@@ -0,0 +1,24 @@
+package com.zhitan.common.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum ElectricityTypeEnum {
+    SHARP("灏�"),
+    PEAK("宄�"),
+    FLAT("骞�"),
+    VALLEY("璋�");
+
+    private final String desc;
+
+    public static String getNameByType(String type) {
+        for (ElectricityTypeEnum electricityType : ElectricityTypeEnum.values()) {
+            if (electricityType.name().equalsIgnoreCase(type)) {
+                return electricityType.name();
+            }
+        }
+        throw new IllegalArgumentException("Invalid electricity type: " + type);
+    }
+}
\ No newline at end of file
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/GroupTimeType.java b/zhitan-common/src/main/java/com/zhitan/common/enums/GroupTimeType.java
new file mode 100644
index 0000000..1039211
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/GroupTimeType.java
@@ -0,0 +1,22 @@
+package com.zhitan.common.enums;
+
+/**
+ * 鍒嗙粍鏃堕棿绫诲瀷
+ *
+ * @Author: Zhujw
+ * @Date: 2023/5/24
+ */
+public enum GroupTimeType {
+  /**
+   * 鍒嗛挓
+   */
+  m,
+  /**
+   * 灏忔椂
+   */
+  h,
+  /**
+   * 澶�
+   */
+  d
+}
\ No newline at end of file
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/HttpMethod.java b/zhitan-common/src/main/java/com/zhitan/common/enums/HttpMethod.java
new file mode 100644
index 0000000..68c73cd
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/HttpMethod.java
@@ -0,0 +1,36 @@
+package com.zhitan.common.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.springframework.lang.Nullable;
+
+/**
+ * 璇锋眰鏂瑰紡
+ *
+ * @author zhitan
+ */
+public enum HttpMethod
+{
+    GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE;
+
+    private static final Map<String, HttpMethod> mappings = new HashMap<>(16);
+
+    static
+    {
+        for (HttpMethod httpMethod : values())
+        {
+            mappings.put(httpMethod.name(), httpMethod);
+        }
+    }
+
+    @Nullable
+    public static HttpMethod resolve(@Nullable String method)
+    {
+        return (method != null ? mappings.get(method) : null);
+    }
+
+    public boolean matches(String method)
+    {
+        return (this == resolve(method));
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/IndexType.java b/zhitan-common/src/main/java/com/zhitan/common/enums/IndexType.java
new file mode 100644
index 0000000..26110c3
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/IndexType.java
@@ -0,0 +1,12 @@
+package com.zhitan.common.enums;
+
+public enum IndexType {
+  /**
+   * 閲囬泦鎸囨爣
+   */
+  COLLECT,
+  /**
+   * 缁熻鎸囨爣
+   */
+  STATISTIC
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/LimitType.java b/zhitan-common/src/main/java/com/zhitan/common/enums/LimitType.java
new file mode 100644
index 0000000..6fcfb84
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/LimitType.java
@@ -0,0 +1,20 @@
+package com.zhitan.common.enums;
+
+/**
+ * 闄愭祦绫诲瀷
+ *
+ * @author zhitan
+ */
+
+public enum LimitType
+{
+    /**
+     * 榛樿绛栫暐鍏ㄥ眬闄愭祦
+     */
+    DEFAULT,
+
+    /**
+     * 鏍规嵁璇锋眰鑰匢P杩涜闄愭祦
+     */
+    IP
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/OperatorType.java b/zhitan-common/src/main/java/com/zhitan/common/enums/OperatorType.java
new file mode 100644
index 0000000..8c45477
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/OperatorType.java
@@ -0,0 +1,24 @@
+package com.zhitan.common.enums;
+
+/**
+ * 鎿嶄綔浜虹被鍒�
+ * 
+ * @author zhitan
+ */
+public enum OperatorType
+{
+    /**
+     * 鍏跺畠
+     */
+    OTHER,
+
+    /**
+     * 鍚庡彴鐢ㄦ埛
+     */
+    MANAGE,
+
+    /**
+     * 鎵嬫満绔敤鎴�
+     */
+    MOBILE
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/Quality.java b/zhitan-common/src/main/java/com/zhitan/common/enums/Quality.java
new file mode 100644
index 0000000..87feb0a
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/Quality.java
@@ -0,0 +1,12 @@
+package com.zhitan.common.enums;
+
+public enum Quality {
+  /**
+   * 鏁版嵁姝e父
+   */
+  GOOD,
+  /**
+   * 鏁版嵁閿欒
+   */
+  BAD
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/RetrievalModes.java b/zhitan-common/src/main/java/com/zhitan/common/enums/RetrievalModes.java
new file mode 100644
index 0000000..24c77fa
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/RetrievalModes.java
@@ -0,0 +1,10 @@
+package com.zhitan.common.enums;
+
+/**
+ * @author 鑼冩柊瀵�
+ *
+ *     鑾峰彇瀹炴椂鏁版嵁鏂瑰紡.
+ */
+public enum RetrievalModes {
+  Full, BestFit
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/StatisticType.java b/zhitan-common/src/main/java/com/zhitan/common/enums/StatisticType.java
new file mode 100644
index 0000000..f7c1830
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/StatisticType.java
@@ -0,0 +1,5 @@
+package com.zhitan.common.enums;
+
+public enum StatisticType {
+  SUM, MAX, MIN, AVG
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/TimeType.java b/zhitan-common/src/main/java/com/zhitan/common/enums/TimeType.java
new file mode 100644
index 0000000..0f1e0c5
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/TimeType.java
@@ -0,0 +1,33 @@
+package com.zhitan.common.enums;
+
+public enum TimeType {
+
+  /**
+   * 瀹炴椂
+   */
+  LIVE,
+  /**
+   * 灏忔椂
+   */
+  HOUR,
+  /**
+   * 澶�
+   */
+  DAY,
+  /**
+   * 鏈�
+   */
+  MONTH,
+  /**
+   * 骞�
+   */
+  YEAR,
+  /**
+   * 瀛e害
+   */
+  QUARTER,
+  /**
+   * 鎺掔彮
+   */
+  SCHEDULING
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/UserStatus.java b/zhitan-common/src/main/java/com/zhitan/common/enums/UserStatus.java
new file mode 100644
index 0000000..60d5b4f
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/UserStatus.java
@@ -0,0 +1,30 @@
+package com.zhitan.common.enums;
+
+/**
+ * 鐢ㄦ埛鐘舵��
+ * 
+ * @author zhitan
+ */
+public enum UserStatus
+{
+    OK("0", "姝e父"), DISABLE("1", "鍋滅敤"), DELETED("2", "鍒犻櫎");
+
+    private final String code;
+    private final String info;
+
+    UserStatus(String code, String info)
+    {
+        this.code = code;
+        this.info = info;
+    }
+
+    public String getCode()
+    {
+        return code;
+    }
+
+    public String getInfo()
+    {
+        return info;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/CustomException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/CustomException.java
new file mode 100644
index 0000000..b105220
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/CustomException.java
@@ -0,0 +1,43 @@
+package com.zhitan.common.exception;
+
+/**
+ * 鑷畾涔夊紓甯�
+ * 
+ * @author ruoyi
+ */
+public class CustomException extends RuntimeException
+{
+    private static final long serialVersionUID = 1L;
+
+    private Integer code;
+
+    private String message;
+
+    public CustomException(String message)
+    {
+        this.message = message;
+    }
+
+    public CustomException(String message, Integer code)
+    {
+        this.message = message;
+        this.code = code;
+    }
+
+    public CustomException(String message, Throwable e)
+    {
+        super(message, e);
+        this.message = message;
+    }
+
+    @Override
+    public String getMessage()
+    {
+        return message;
+    }
+
+    public Integer getCode()
+    {
+        return code;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/DemoModeException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/DemoModeException.java
new file mode 100644
index 0000000..4b82b64
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/DemoModeException.java
@@ -0,0 +1,15 @@
+package com.zhitan.common.exception;
+
+/**
+ * 婕旂ず妯″紡寮傚父
+ * 
+ * @author zhitan
+ */
+public class DemoModeException extends RuntimeException
+{
+    private static final long serialVersionUID = 1L;
+
+    public DemoModeException()
+    {
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/GlobalException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/GlobalException.java
new file mode 100644
index 0000000..910a530
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/GlobalException.java
@@ -0,0 +1,58 @@
+package com.zhitan.common.exception;
+
+/**
+ * 鍏ㄥ眬寮傚父
+ * 
+ * @author zhitan
+ */
+public class GlobalException extends RuntimeException
+{
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 閿欒鎻愮ず
+     */
+    private String message;
+
+    /**
+     * 閿欒鏄庣粏锛屽唴閮ㄨ皟璇曢敊璇�
+     *
+     * 鍜� {@link CommonResult#getDetailMessage()} 涓�鑷寸殑璁捐
+     */
+    private String detailMessage;
+
+    /**
+     * 绌烘瀯閫犳柟娉曪紝閬垮厤鍙嶅簭鍒楀寲闂
+     */
+    public GlobalException()
+    {
+    }
+
+    public GlobalException(String message)
+    {
+        this.message = message;
+    }
+
+    public String getDetailMessage()
+    {
+        return detailMessage;
+    }
+
+    public GlobalException setDetailMessage(String detailMessage)
+    {
+        this.detailMessage = detailMessage;
+        return this;
+    }
+
+    @Override
+    public String getMessage()
+    {
+        return message;
+    }
+
+    public GlobalException setMessage(String message)
+    {
+        this.message = message;
+        return this;
+    }
+}
\ No newline at end of file
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/ServiceException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/ServiceException.java
new file mode 100644
index 0000000..7e15756
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/ServiceException.java
@@ -0,0 +1,65 @@
+package com.zhitan.common.exception;
+
+/**
+ * 涓氬姟寮傚父
+ *
+ * @author zhitan
+ */
+public final class ServiceException extends RuntimeException {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 閿欒鐮�
+     */
+    private Integer code;
+
+    /**
+     * 閿欒鎻愮ず
+     */
+    private String message;
+
+    /**
+     * 閿欒鏄庣粏锛屽唴閮ㄨ皟璇曢敊璇�
+     * <p>
+     * 鍜� {@link CommonResult#getDetailMessage()} 涓�鑷寸殑璁捐
+     */
+    private String detailMessage;
+
+    /**
+     * 绌烘瀯閫犳柟娉曪紝閬垮厤鍙嶅簭鍒楀寲闂
+     */
+    public ServiceException() {
+    }
+
+    public ServiceException(String message) {
+        this.message = message;
+    }
+
+    public ServiceException(String message, Integer code) {
+        this.message = message;
+        this.code = code;
+    }
+
+    public String getDetailMessage() {
+        return detailMessage;
+    }
+
+    @Override
+    public String getMessage() {
+        return message;
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public ServiceException setMessage(String message) {
+        this.message = message;
+        return this;
+    }
+
+    public ServiceException setDetailMessage(String detailMessage) {
+        this.detailMessage = detailMessage;
+        return this;
+    }
+}
\ No newline at end of file
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/UtilException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/UtilException.java
new file mode 100644
index 0000000..ce86b70
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/UtilException.java
@@ -0,0 +1,26 @@
+package com.zhitan.common.exception;
+
+/**
+ * 宸ュ叿绫诲紓甯�
+ * 
+ * @author zhitan
+ */
+public class UtilException extends RuntimeException
+{
+    private static final long serialVersionUID = 8247610319171014183L;
+
+    public UtilException(Throwable e)
+    {
+        super(e.getMessage(), e);
+    }
+
+    public UtilException(String message)
+    {
+        super(message);
+    }
+
+    public UtilException(String message, Throwable throwable)
+    {
+        super(message, throwable);
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/base/BaseException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/base/BaseException.java
new file mode 100644
index 0000000..4585f67
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/base/BaseException.java
@@ -0,0 +1,97 @@
+package com.zhitan.common.exception.base;
+
+import com.zhitan.common.utils.MessageUtils;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 鍩虹寮傚父
+ * 
+ * @author zhitan
+ */
+public class BaseException extends RuntimeException
+{
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鎵�灞炴ā鍧�
+     */
+    private String module;
+
+    /**
+     * 閿欒鐮�
+     */
+    private String code;
+
+    /**
+     * 閿欒鐮佸搴旂殑鍙傛暟
+     */
+    private Object[] args;
+
+    /**
+     * 閿欒娑堟伅
+     */
+    private String defaultMessage;
+
+    public BaseException(String module, String code, Object[] args, String defaultMessage)
+    {
+        this.module = module;
+        this.code = code;
+        this.args = args;
+        this.defaultMessage = defaultMessage;
+    }
+
+    public BaseException(String module, String code, Object[] args)
+    {
+        this(module, code, args, null);
+    }
+
+    public BaseException(String module, String defaultMessage)
+    {
+        this(module, null, null, defaultMessage);
+    }
+
+    public BaseException(String code, Object[] args)
+    {
+        this(null, code, args, null);
+    }
+
+    public BaseException(String defaultMessage)
+    {
+        this(null, null, null, defaultMessage);
+    }
+
+    @Override
+    public String getMessage()
+    {
+        String message = null;
+        if (!StringUtils.isEmpty(code))
+        {
+            message = MessageUtils.message(code, args);
+        }
+        if (message == null)
+        {
+            message = defaultMessage;
+        }
+        return message;
+    }
+
+    public String getModule()
+    {
+        return module;
+    }
+
+    public String getCode()
+    {
+        return code;
+    }
+
+    public Object[] getArgs()
+    {
+        return args;
+    }
+
+    public String getDefaultMessage()
+    {
+        return defaultMessage;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/file/FileException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/file/FileException.java
new file mode 100644
index 0000000..6a38f14
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/file/FileException.java
@@ -0,0 +1,19 @@
+package com.zhitan.common.exception.file;
+
+import com.zhitan.common.exception.base.BaseException;
+
+/**
+ * 鏂囦欢淇℃伅寮傚父绫�
+ * 
+ * @author zhitan
+ */
+public class FileException extends BaseException
+{
+    private static final long serialVersionUID = 1L;
+
+    public FileException(String code, Object[] args)
+    {
+        super("file", code, args, null);
+    }
+
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/file/FileNameLengthLimitExceededException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/file/FileNameLengthLimitExceededException.java
new file mode 100644
index 0000000..79ccf3b
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/file/FileNameLengthLimitExceededException.java
@@ -0,0 +1,16 @@
+package com.zhitan.common.exception.file;
+
+/**
+ * 鏂囦欢鍚嶇О瓒呴暱闄愬埗寮傚父绫�
+ * 
+ * @author zhitan
+ */
+public class FileNameLengthLimitExceededException extends FileException
+{
+    private static final long serialVersionUID = 1L;
+
+    public FileNameLengthLimitExceededException(int defaultFileNameLength)
+    {
+        super("upload.filename.exceed.length", new Object[] { defaultFileNameLength });
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/file/FileSizeLimitExceededException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/file/FileSizeLimitExceededException.java
new file mode 100644
index 0000000..0d46b39
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/file/FileSizeLimitExceededException.java
@@ -0,0 +1,16 @@
+package com.zhitan.common.exception.file;
+
+/**
+ * 鏂囦欢鍚嶅ぇ灏忛檺鍒跺紓甯哥被
+ * 
+ * @author zhitan
+ */
+public class FileSizeLimitExceededException extends FileException
+{
+    private static final long serialVersionUID = 1L;
+
+    public FileSizeLimitExceededException(long defaultMaxSize)
+    {
+        super("upload.exceed.maxSize", new Object[] { defaultMaxSize });
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/file/FileUploadException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/file/FileUploadException.java
new file mode 100644
index 0000000..1cba918
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/file/FileUploadException.java
@@ -0,0 +1,61 @@
+package com.zhitan.common.exception.file;
+
+import java.io.PrintStream;
+import java.io.PrintWriter;
+
+/**
+ * 鏂囦欢涓婁紶寮傚父绫�
+ * 
+ * @author zhitan
+ */
+public class FileUploadException extends Exception
+{
+
+    private static final long serialVersionUID = 1L;
+
+    private final Throwable cause;
+
+    public FileUploadException()
+    {
+        this(null, null);
+    }
+
+    public FileUploadException(final String msg)
+    {
+        this(msg, null);
+    }
+
+    public FileUploadException(String msg, Throwable cause)
+    {
+        super(msg);
+        this.cause = cause;
+    }
+
+    @Override
+    public void printStackTrace(PrintStream stream)
+    {
+        super.printStackTrace(stream);
+        if (cause != null)
+        {
+            stream.println("Caused by:");
+            cause.printStackTrace(stream);
+        }
+    }
+
+    @Override
+    public void printStackTrace(PrintWriter writer)
+    {
+        super.printStackTrace(writer);
+        if (cause != null)
+        {
+            writer.println("Caused by:");
+            cause.printStackTrace(writer);
+        }
+    }
+
+    @Override
+    public Throwable getCause()
+    {
+        return cause;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/file/InvalidExtensionException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/file/InvalidExtensionException.java
new file mode 100644
index 0000000..d89daf3
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/file/InvalidExtensionException.java
@@ -0,0 +1,80 @@
+package com.zhitan.common.exception.file;
+
+import java.util.Arrays;
+
+/**
+ * 鏂囦欢涓婁紶 璇紓甯哥被
+ * 
+ * @author zhitan
+ */
+public class InvalidExtensionException extends FileUploadException
+{
+    private static final long serialVersionUID = 1L;
+
+    private String[] allowedExtension;
+    private String extension;
+    private String filename;
+
+    public InvalidExtensionException(String[] allowedExtension, String extension, String filename)
+    {
+        super("鏂囦欢[" + filename + "]鍚庣紑[" + extension + "]涓嶆纭紝璇蜂笂浼�" + Arrays.toString(allowedExtension) + "鏍煎紡");
+        this.allowedExtension = allowedExtension;
+        this.extension = extension;
+        this.filename = filename;
+    }
+
+    public String[] getAllowedExtension()
+    {
+        return allowedExtension;
+    }
+
+    public String getExtension()
+    {
+        return extension;
+    }
+
+    public String getFilename()
+    {
+        return filename;
+    }
+
+    public static class InvalidImageExtensionException extends InvalidExtensionException
+    {
+        private static final long serialVersionUID = 1L;
+
+        public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename)
+        {
+            super(allowedExtension, extension, filename);
+        }
+    }
+
+    public static class InvalidFlashExtensionException extends InvalidExtensionException
+    {
+        private static final long serialVersionUID = 1L;
+
+        public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename)
+        {
+            super(allowedExtension, extension, filename);
+        }
+    }
+
+    public static class InvalidMediaExtensionException extends InvalidExtensionException
+    {
+        private static final long serialVersionUID = 1L;
+
+        public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename)
+        {
+            super(allowedExtension, extension, filename);
+        }
+    }
+
+    public static class InvalidVideoExtensionException extends InvalidExtensionException
+    {
+        private static final long serialVersionUID = 1L;
+
+        public InvalidVideoExtensionException(String[] allowedExtension, String extension, String filename)
+        {
+            super(allowedExtension, extension, filename);
+        }
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/job/TaskException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/job/TaskException.java
new file mode 100644
index 0000000..87ac9b9
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/job/TaskException.java
@@ -0,0 +1,34 @@
+package com.zhitan.common.exception.job;
+
+/**
+ * 璁″垝绛栫暐寮傚父
+ * 
+ * @author zhitan
+ */
+public class TaskException extends Exception
+{
+    private static final long serialVersionUID = 1L;
+
+    private Code code;
+
+    public TaskException(String msg, Code code)
+    {
+        this(msg, code, null);
+    }
+
+    public TaskException(String msg, Code code, Exception nestedEx)
+    {
+        super(msg, nestedEx);
+        this.code = code;
+    }
+
+    public Code getCode()
+    {
+        return code;
+    }
+
+    public enum Code
+    {
+        TASK_EXISTS, NO_TASK_EXISTS, TASK_ALREADY_STARTED, UNKNOWN, CONFIG_ERROR, TASK_NODE_NOT_AVAILABLE
+    }
+}
\ No newline at end of file
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/user/BlackListException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/user/BlackListException.java
new file mode 100644
index 0000000..033afc6
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/user/BlackListException.java
@@ -0,0 +1,16 @@
+package com.zhitan.common.exception.user;
+
+/**
+ * 榛戝悕鍗旾P寮傚父绫�
+ * 
+ * @author zhitan
+ */
+public class BlackListException extends UserException
+{
+    private static final long serialVersionUID = 1L;
+
+    public BlackListException()
+    {
+        super("login.blocked", null);
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/user/CaptchaException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/user/CaptchaException.java
new file mode 100644
index 0000000..c24cb9a
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/user/CaptchaException.java
@@ -0,0 +1,16 @@
+package com.zhitan.common.exception.user;
+
+/**
+ * 楠岃瘉鐮侀敊璇紓甯哥被
+ * 
+ * @author zhitan
+ */
+public class CaptchaException extends UserException
+{
+    private static final long serialVersionUID = 1L;
+
+    public CaptchaException()
+    {
+        super("user.jcaptcha.error", null);
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/user/CaptchaExpireException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/user/CaptchaExpireException.java
new file mode 100644
index 0000000..c40a11d
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/user/CaptchaExpireException.java
@@ -0,0 +1,16 @@
+package com.zhitan.common.exception.user;
+
+/**
+ * 楠岃瘉鐮佸け鏁堝紓甯哥被
+ * 
+ * @author zhitan
+ */
+public class CaptchaExpireException extends UserException
+{
+    private static final long serialVersionUID = 1L;
+
+    public CaptchaExpireException()
+    {
+        super("user.jcaptcha.expire", null);
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/user/UserException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/user/UserException.java
new file mode 100644
index 0000000..8fcbee1
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/user/UserException.java
@@ -0,0 +1,18 @@
+package com.zhitan.common.exception.user;
+
+import com.zhitan.common.exception.base.BaseException;
+
+/**
+ * 鐢ㄦ埛淇℃伅寮傚父绫�
+ * 
+ * @author zhitan
+ */
+public class UserException extends BaseException
+{
+    private static final long serialVersionUID = 1L;
+
+    public UserException(String code, Object[] args)
+    {
+        super("user", code, args, null);
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/user/UserNotExistsException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/user/UserNotExistsException.java
new file mode 100644
index 0000000..0d0ae92
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/user/UserNotExistsException.java
@@ -0,0 +1,16 @@
+package com.zhitan.common.exception.user;
+
+/**
+ * 鐢ㄦ埛涓嶅瓨鍦ㄥ紓甯哥被
+ * 
+ * @author zhitan
+ */
+public class UserNotExistsException extends UserException
+{
+    private static final long serialVersionUID = 1L;
+
+    public UserNotExistsException()
+    {
+        super("user.not.exists", null);
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/user/UserPasswordNotMatchException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/user/UserPasswordNotMatchException.java
new file mode 100644
index 0000000..a285c60
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/user/UserPasswordNotMatchException.java
@@ -0,0 +1,16 @@
+package com.zhitan.common.exception.user;
+
+/**
+ * 鐢ㄦ埛瀵嗙爜涓嶆纭垨涓嶇鍚堣鑼冨紓甯哥被
+ * 
+ * @author zhitan
+ */
+public class UserPasswordNotMatchException extends UserException
+{
+    private static final long serialVersionUID = 1L;
+
+    public UserPasswordNotMatchException()
+    {
+        super("user.password.not.match", null);
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/user/UserPasswordRetryLimitExceedException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/user/UserPasswordRetryLimitExceedException.java
new file mode 100644
index 0000000..a76a27d
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/user/UserPasswordRetryLimitExceedException.java
@@ -0,0 +1,16 @@
+package com.zhitan.common.exception.user;
+
+/**
+ * 鐢ㄦ埛閿欒鏈�澶ф鏁板紓甯哥被
+ * 
+ * @author zhitan
+ */
+public class UserPasswordRetryLimitExceedException extends UserException
+{
+    private static final long serialVersionUID = 1L;
+
+    public UserPasswordRetryLimitExceedException(int retryLimitCount, int lockTime)
+    {
+        super("user.password.retry.limit.exceed", new Object[] { retryLimitCount, lockTime });
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/filter/PropertyPreExcludeFilter.java b/zhitan-common/src/main/java/com/zhitan/common/filter/PropertyPreExcludeFilter.java
new file mode 100644
index 0000000..0921d3e
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/filter/PropertyPreExcludeFilter.java
@@ -0,0 +1,24 @@
+package com.zhitan.common.filter;
+
+import com.alibaba.fastjson2.filter.SimplePropertyPreFilter;
+
+/**
+ * 鎺掗櫎JSON鏁忔劅灞炴��
+ * 
+ * @author zhitan
+ */
+public class PropertyPreExcludeFilter extends SimplePropertyPreFilter
+{
+    public PropertyPreExcludeFilter()
+    {
+    }
+
+    public PropertyPreExcludeFilter addExcludes(String... filters)
+    {
+        for (int i = 0; i < filters.length; i++)
+        {
+            this.getExcludes().add(filters[i]);
+        }
+        return this;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/filter/RepeatableFilter.java b/zhitan-common/src/main/java/com/zhitan/common/filter/RepeatableFilter.java
new file mode 100644
index 0000000..5764bde
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/filter/RepeatableFilter.java
@@ -0,0 +1,52 @@
+package com.zhitan.common.filter;
+
+import java.io.IOException;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import org.springframework.http.MediaType;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * Repeatable 杩囨护鍣�
+ * 
+ * @author zhitan
+ */
+public class RepeatableFilter implements Filter
+{
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException
+    {
+
+    }
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+            throws IOException, ServletException
+    {
+        ServletRequest requestWrapper = null;
+        if (request instanceof HttpServletRequest
+                && StringUtils.startsWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE))
+        {
+            requestWrapper = new RepeatedlyRequestWrapper((HttpServletRequest) request, response);
+        }
+        if (null == requestWrapper)
+        {
+            chain.doFilter(request, response);
+        }
+        else
+        {
+            chain.doFilter(requestWrapper, response);
+        }
+    }
+
+    @Override
+    public void destroy()
+    {
+
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/filter/RepeatedlyRequestWrapper.java b/zhitan-common/src/main/java/com/zhitan/common/filter/RepeatedlyRequestWrapper.java
new file mode 100644
index 0000000..8291c18
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/filter/RepeatedlyRequestWrapper.java
@@ -0,0 +1,76 @@
+package com.zhitan.common.filter;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import com.zhitan.common.utils.http.HttpHelper;
+import com.zhitan.common.constant.Constants;
+
+/**
+ * 鏋勫缓鍙噸澶嶈鍙杋nputStream鐨剅equest
+ * 
+ * @author zhitan
+ */
+public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper
+{
+    private final byte[] body;
+
+    public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException
+    {
+        super(request);
+        request.setCharacterEncoding(Constants.UTF8);
+        response.setCharacterEncoding(Constants.UTF8);
+
+        body = HttpHelper.getBodyString(request).getBytes(Constants.UTF8);
+    }
+
+    @Override
+    public BufferedReader getReader() throws IOException
+    {
+        return new BufferedReader(new InputStreamReader(getInputStream()));
+    }
+
+    @Override
+    public ServletInputStream getInputStream() throws IOException
+    {
+        final ByteArrayInputStream bais = new ByteArrayInputStream(body);
+        return new ServletInputStream()
+        {
+            @Override
+            public int read() throws IOException
+            {
+                return bais.read();
+            }
+
+            @Override
+            public int available() throws IOException
+            {
+                return body.length;
+            }
+
+            @Override
+            public boolean isFinished()
+            {
+                return false;
+            }
+
+            @Override
+            public boolean isReady()
+            {
+                return false;
+            }
+
+            @Override
+            public void setReadListener(ReadListener readListener)
+            {
+
+            }
+        };
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/filter/XssFilter.java b/zhitan-common/src/main/java/com/zhitan/common/filter/XssFilter.java
new file mode 100644
index 0000000..6992694
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/filter/XssFilter.java
@@ -0,0 +1,75 @@
+package com.zhitan.common.filter;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.enums.HttpMethod;
+
+/**
+ * 闃叉XSS鏀诲嚮鐨勮繃婊ゅ櫒
+ * 
+ * @author zhitan
+ */
+public class XssFilter implements Filter
+{
+    /**
+     * 鎺掗櫎閾炬帴
+     */
+    public List<String> excludes = new ArrayList<>();
+
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException
+    {
+        String tempExcludes = filterConfig.getInitParameter("excludes");
+        if (StringUtils.isNotEmpty(tempExcludes))
+        {
+            String[] url = tempExcludes.split(",");
+            for (int i = 0; url != null && i < url.length; i++)
+            {
+                excludes.add(url[i]);
+            }
+        }
+    }
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+            throws IOException, ServletException
+    {
+        HttpServletRequest req = (HttpServletRequest) request;
+        HttpServletResponse resp = (HttpServletResponse) response;
+        if (handleExcludeURL(req, resp))
+        {
+            chain.doFilter(request, response);
+            return;
+        }
+        XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest) request);
+        chain.doFilter(xssRequest, response);
+    }
+
+    private boolean handleExcludeURL(HttpServletRequest request, HttpServletResponse response)
+    {
+        String url = request.getServletPath();
+        String method = request.getMethod();
+        // GET DELETE 涓嶈繃婊�
+        if (method == null || HttpMethod.GET.matches(method) || HttpMethod.DELETE.matches(method))
+        {
+            return true;
+        }
+        return StringUtils.matches(url, excludes);
+    }
+
+    @Override
+    public void destroy()
+    {
+
+    }
+}
\ No newline at end of file
diff --git a/zhitan-common/src/main/java/com/zhitan/common/filter/XssHttpServletRequestWrapper.java b/zhitan-common/src/main/java/com/zhitan/common/filter/XssHttpServletRequestWrapper.java
new file mode 100644
index 0000000..7dadfa9
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/filter/XssHttpServletRequestWrapper.java
@@ -0,0 +1,111 @@
+package com.zhitan.common.filter;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import org.apache.commons.io.IOUtils;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.html.EscapeUtil;
+
+/**
+ * XSS杩囨护澶勭悊
+ * 
+ * @author zhitan
+ */
+public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper
+{
+    /**
+     * @param request
+     */
+    public XssHttpServletRequestWrapper(HttpServletRequest request)
+    {
+        super(request);
+    }
+
+    @Override
+    public String[] getParameterValues(String name)
+    {
+        String[] values = super.getParameterValues(name);
+        if (values != null)
+        {
+            int length = values.length;
+            String[] escapesValues = new String[length];
+            for (int i = 0; i < length; i++)
+            {
+                // 闃瞲ss鏀诲嚮鍜岃繃婊ゅ墠鍚庣┖鏍�
+                escapesValues[i] = EscapeUtil.clean(values[i]).trim();
+            }
+            return escapesValues;
+        }
+        return super.getParameterValues(name);
+    }
+
+    @Override
+    public ServletInputStream getInputStream() throws IOException
+    {
+        // 闈瀓son绫诲瀷锛岀洿鎺ヨ繑鍥�
+        if (!isJsonRequest())
+        {
+            return super.getInputStream();
+        }
+
+        // 涓虹┖锛岀洿鎺ヨ繑鍥�
+        String json = IOUtils.toString(super.getInputStream(), "utf-8");
+        if (StringUtils.isEmpty(json))
+        {
+            return super.getInputStream();
+        }
+
+        // xss杩囨护
+        json = EscapeUtil.clean(json).trim();
+        byte[] jsonBytes = json.getBytes("utf-8");
+        final ByteArrayInputStream bis = new ByteArrayInputStream(jsonBytes);
+        return new ServletInputStream()
+        {
+            @Override
+            public boolean isFinished()
+            {
+                return true;
+            }
+
+            @Override
+            public boolean isReady()
+            {
+                return true;
+            }
+
+            @Override
+            public int available() throws IOException
+            {
+                return jsonBytes.length;
+            }
+
+            @Override
+            public void setReadListener(ReadListener readListener)
+            {
+            }
+
+            @Override
+            public int read() throws IOException
+            {
+                return bis.read();
+            }
+        };
+    }
+
+    /**
+     * 鏄惁鏄疛son璇锋眰
+     * 
+     * @param request
+     */
+    public boolean isJsonRequest()
+    {
+        String header = super.getHeader(HttpHeaders.CONTENT_TYPE);
+        return StringUtils.startsWithIgnoreCase(header, MediaType.APPLICATION_JSON_VALUE);
+    }
+}
\ No newline at end of file
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/Arith.java b/zhitan-common/src/main/java/com/zhitan/common/utils/Arith.java
new file mode 100644
index 0000000..d707815
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/Arith.java
@@ -0,0 +1,114 @@
+package com.zhitan.common.utils;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+
+/**
+ * 绮剧‘鐨勬诞鐐规暟杩愮畻
+ * 
+ * @author zhitan
+ */
+public class Arith
+{
+
+    /** 榛樿闄ゆ硶杩愮畻绮惧害 */
+    private static final int DEF_DIV_SCALE = 10;
+
+    /** 杩欎釜绫讳笉鑳藉疄渚嬪寲 */
+    private Arith()
+    {
+    }
+
+    /**
+     * 鎻愪緵绮剧‘鐨勫姞娉曡繍绠椼��
+     * @param v1 琚姞鏁�
+     * @param v2 鍔犳暟
+     * @return 涓や釜鍙傛暟鐨勫拰
+     */
+    public static double add(double v1, double v2)
+    {
+        BigDecimal b1 = new BigDecimal(Double.toString(v1));
+        BigDecimal b2 = new BigDecimal(Double.toString(v2));
+        return b1.add(b2).doubleValue();
+    }
+
+    /**
+     * 鎻愪緵绮剧‘鐨勫噺娉曡繍绠椼��
+     * @param v1 琚噺鏁�
+     * @param v2 鍑忔暟
+     * @return 涓や釜鍙傛暟鐨勫樊
+     */
+    public static double sub(double v1, double v2)
+    {
+        BigDecimal b1 = new BigDecimal(Double.toString(v1));
+        BigDecimal b2 = new BigDecimal(Double.toString(v2));
+        return b1.subtract(b2).doubleValue();
+    }
+
+    /**
+     * 鎻愪緵绮剧‘鐨勪箻娉曡繍绠椼��
+     * @param v1 琚箻鏁�
+     * @param v2 涔樻暟
+     * @return 涓や釜鍙傛暟鐨勭Н
+     */
+    public static double mul(double v1, double v2)
+    {
+        BigDecimal b1 = new BigDecimal(Double.toString(v1));
+        BigDecimal b2 = new BigDecimal(Double.toString(v2));
+        return b1.multiply(b2).doubleValue();
+    }
+
+    /**
+     * 鎻愪緵锛堢浉瀵癸級绮剧‘鐨勯櫎娉曡繍绠楋紝褰撳彂鐢熼櫎涓嶅敖鐨勬儏鍐垫椂锛岀簿纭埌
+     * 灏忔暟鐐逛互鍚�10浣嶏紝浠ュ悗鐨勬暟瀛楀洓鑸嶄簲鍏ャ��
+     * @param v1 琚櫎鏁�
+     * @param v2 闄ゆ暟
+     * @return 涓や釜鍙傛暟鐨勫晢
+     */
+    public static double div(double v1, double v2)
+    {
+        return div(v1, v2, DEF_DIV_SCALE);
+    }
+
+    /**
+     * 鎻愪緵锛堢浉瀵癸級绮剧‘鐨勯櫎娉曡繍绠椼�傚綋鍙戠敓闄や笉灏界殑鎯呭喌鏃讹紝鐢眘cale鍙傛暟鎸�
+     * 瀹氱簿搴︼紝浠ュ悗鐨勬暟瀛楀洓鑸嶄簲鍏ャ��
+     * @param v1 琚櫎鏁�
+     * @param v2 闄ゆ暟
+     * @param scale 琛ㄧず琛ㄧず闇�瑕佺簿纭埌灏忔暟鐐逛互鍚庡嚑浣嶃��
+     * @return 涓や釜鍙傛暟鐨勫晢
+     */
+    public static double div(double v1, double v2, int scale)
+    {
+        if (scale < 0)
+        {
+            throw new IllegalArgumentException(
+                    "The scale must be a positive integer or zero");
+        }
+        BigDecimal b1 = new BigDecimal(Double.toString(v1));
+        BigDecimal b2 = new BigDecimal(Double.toString(v2));
+        if (b1.compareTo(BigDecimal.ZERO) == 0)
+        {
+            return BigDecimal.ZERO.doubleValue();
+        }
+        return b1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue();
+    }
+
+    /**
+     * 鎻愪緵绮剧‘鐨勫皬鏁颁綅鍥涜垗浜斿叆澶勭悊銆�
+     * @param v 闇�瑕佸洓鑸嶄簲鍏ョ殑鏁板瓧
+     * @param scale 灏忔暟鐐瑰悗淇濈暀鍑犱綅
+     * @return 鍥涜垗浜斿叆鍚庣殑缁撴灉
+     */
+    public static double round(double v, int scale)
+    {
+        if (scale < 0)
+        {
+            throw new IllegalArgumentException(
+                    "The scale must be a positive integer or zero");
+        }
+        BigDecimal b = new BigDecimal(Double.toString(v));
+        BigDecimal one = BigDecimal.ONE;
+        return b.divide(one, scale, RoundingMode.HALF_UP).doubleValue();
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/DateUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/DateUtils.java
new file mode 100644
index 0000000..fa784c5
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/DateUtils.java
@@ -0,0 +1,196 @@
+package com.zhitan.common.utils;
+
+import org.apache.commons.lang3.time.DateFormatUtils;
+
+import java.lang.management.ManagementFactory;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.*;
+import java.util.Date;
+
+/**
+ * 鏃堕棿宸ュ叿绫�
+ * 
+ * @author zhitan
+ */
+public class DateUtils extends org.apache.commons.lang3.time.DateUtils
+{
+    public static String YYYY = "yyyy";
+
+    public static String YYYY_MM = "yyyy-MM";
+
+    public static String YYYY_MM_DD = "yyyy-MM-dd";
+
+    public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
+
+    public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
+
+    private static String[] parsePatterns = {
+            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", 
+            "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
+            "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
+
+    /**
+     * 鑾峰彇褰撳墠Date鍨嬫棩鏈�
+     * 
+     * @return Date() 褰撳墠鏃ユ湡
+     */
+    public static Date getNowDate()
+    {
+        return new Date();
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鏃ユ湡, 榛樿鏍煎紡涓簓yyy-MM-dd
+     * 
+     * @return String
+     */
+    public static String getDate()
+    {
+        return dateTimeNow(YYYY_MM_DD);
+    }
+
+    public static final String getTime()
+    {
+        return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
+    }
+
+    public static final String dateTimeNow()
+    {
+        return dateTimeNow(YYYYMMDDHHMMSS);
+    }
+
+    public static final String dateTimeNow(final String format)
+    {
+        return parseDateToStr(format, new Date());
+    }
+
+    public static final String dateTime(final Date date)
+    {
+        return parseDateToStr(YYYY_MM_DD, date);
+    }
+
+    public static final String parseDateToStr(final String format, final Date date)
+    {
+        return new SimpleDateFormat(format).format(date);
+    }
+
+    public static final Date dateTime(final String format, final String ts)
+    {
+        try
+        {
+            return new SimpleDateFormat(format).parse(ts);
+        }
+        catch (ParseException e)
+        {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 鏃ユ湡璺緞 鍗冲勾/鏈�/鏃� 濡�2018/08/08
+     */
+    public static final String datePath()
+    {
+        Date now = new Date();
+        return DateFormatUtils.format(now, "yyyy/MM/dd");
+    }
+
+    /**
+     * 鏃ユ湡璺緞 鍗冲勾/鏈�/鏃� 濡�20180808
+     */
+    public static final String dateTime()
+    {
+        Date now = new Date();
+        return DateFormatUtils.format(now, "yyyyMMdd");
+    }
+
+    /**
+     * 鑾峰彇鏃堕棿 HH:mm:ss
+     */
+    public static final String getHhMmSs(Date date)
+    {
+        return DateFormatUtils.format(date, "HH:mm:ss");
+    }
+
+    /**
+     * 鏃ユ湡鍨嬪瓧绗︿覆杞寲涓烘棩鏈� 鏍煎紡
+     */
+    public static Date parseDate(Object str)
+    {
+        if (str == null)
+        {
+            return null;
+        }
+        try
+        {
+            return parseDate(str.toString(), parsePatterns);
+        }
+        catch (ParseException e)
+        {
+            return null;
+        }
+    }
+
+    /**
+     * 鑾峰彇鏈嶅姟鍣ㄥ惎鍔ㄦ椂闂�
+     */
+    public static Date getServerStartDate()
+    {
+        long time = ManagementFactory.getRuntimeMXBean().getStartTime();
+        return new Date(time);
+    }
+
+    /**
+     * 璁$畻鐩稿樊澶╂暟
+     */
+    public static int differentDaysByMillisecond(Date date1, Date date2)
+    {
+        return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24)));
+    }
+
+    /**
+     * 璁$畻鏃堕棿宸�
+     *
+     * @param endDate 鏈�鍚庢椂闂�
+     * @param startTime 寮�濮嬫椂闂�
+     * @return 鏃堕棿宸紙澶�/灏忔椂/鍒嗛挓锛�
+     */
+    public static String timeDistance(Date endDate, Date startTime)
+    {
+        long nd = 1000 * 24 * 60 * 60;
+        long nh = 1000 * 60 * 60;
+        long nm = 1000 * 60;
+        // long ns = 1000;
+        // 鑾峰緱涓や釜鏃堕棿鐨勬绉掓椂闂村樊寮�
+        long diff = endDate.getTime() - startTime.getTime();
+        // 璁$畻宸灏戝ぉ
+        long day = diff / nd;
+        // 璁$畻宸灏戝皬鏃�
+        long hour = diff % nd / nh;
+        // 璁$畻宸灏戝垎閽�
+        long min = diff % nd % nh / nm;
+        // 璁$畻宸灏戠//杈撳嚭缁撴灉
+        // long sec = diff % nd % nh % nm / ns;
+        return day + "澶�" + hour + "灏忔椂" + min + "鍒嗛挓";
+    }
+
+    /**
+     * 澧炲姞 LocalDateTime ==> Date
+     */
+    public static Date toDate(LocalDateTime temporalAccessor)
+    {
+        ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault());
+        return Date.from(zdt.toInstant());
+    }
+
+    /**
+     * 澧炲姞 LocalDate ==> Date
+     */
+    public static Date toDate(LocalDate temporalAccessor)
+    {
+        LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0));
+        ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
+        return Date.from(zdt.toInstant());
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/DesensitizedUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/DesensitizedUtil.java
new file mode 100644
index 0000000..8f976c3
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/DesensitizedUtil.java
@@ -0,0 +1,49 @@
+package com.zhitan.common.utils;
+
+/**
+ * 鑴辨晱宸ュ叿绫�
+ *
+ * @author zhitan
+ */
+public class DesensitizedUtil
+{
+    /**
+     * 瀵嗙爜鐨勫叏閮ㄥ瓧绗﹂兘鐢�*浠f浛锛屾瘮濡傦細******
+     *
+     * @param password 瀵嗙爜
+     * @return 鑴辨晱鍚庣殑瀵嗙爜
+     */
+    public static String password(String password)
+    {
+        if (StringUtils.isBlank(password))
+        {
+            return StringUtils.EMPTY;
+        }
+        return StringUtils.repeat('*', password.length());
+    }
+
+    /**
+     * 杞︾墝涓棿鐢�*浠f浛锛屽鏋滄槸閿欒鐨勮溅鐗岋紝涓嶅鐞�
+     *
+     * @param carLicense 瀹屾暣鐨勮溅鐗屽彿
+     * @return 鑴辨晱鍚庣殑杞︾墝
+     */
+    public static String carLicense(String carLicense)
+    {
+        if (StringUtils.isBlank(carLicense))
+        {
+            return StringUtils.EMPTY;
+        }
+        // 鏅�氳溅鐗�
+        if (carLicense.length() == 7)
+        {
+            carLicense = StringUtils.hide(carLicense, 3, 6);
+        }
+        else if (carLicense.length() == 8)
+        {
+            // 鏂拌兘婧愯溅鐗�
+            carLicense = StringUtils.hide(carLicense, 3, 7);
+        }
+        return carLicense;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/DictUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/DictUtils.java
new file mode 100644
index 0000000..7ea48ca
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/DictUtils.java
@@ -0,0 +1,186 @@
+package com.zhitan.common.utils;
+
+import java.util.Collection;
+import java.util.List;
+import com.alibaba.fastjson2.JSONArray;
+import com.zhitan.common.constant.CacheConstants;
+import com.zhitan.common.core.domain.entity.SysDictData;
+import com.zhitan.common.core.redis.RedisCache;
+import com.zhitan.common.utils.spring.SpringUtils;
+
+/**
+ * 瀛楀吀宸ュ叿绫�
+ * 
+ * @author zhitan
+ */
+public class DictUtils
+{
+    /**
+     * 鍒嗛殧绗�
+     */
+    public static final String SEPARATOR = ",";
+
+    /**
+     * 璁剧疆瀛楀吀缂撳瓨
+     * 
+     * @param key 鍙傛暟閿�
+     * @param dictDatas 瀛楀吀鏁版嵁鍒楄〃
+     */
+    public static void setDictCache(String key, List<SysDictData> dictDatas)
+    {
+        SpringUtils.getBean(RedisCache.class).setCacheObject(getCacheKey(key), dictDatas);
+    }
+
+    /**
+     * 鑾峰彇瀛楀吀缂撳瓨
+     * 
+     * @param key 鍙傛暟閿�
+     * @return dictDatas 瀛楀吀鏁版嵁鍒楄〃
+     */
+    public static List<SysDictData> getDictCache(String key)
+    {
+        JSONArray arrayCache = SpringUtils.getBean(RedisCache.class).getCacheObject(getCacheKey(key));
+        if (StringUtils.isNotNull(arrayCache))
+        {
+            return arrayCache.toList(SysDictData.class);
+        }
+        return null;
+    }
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏稿�艰幏鍙栧瓧鍏告爣绛�
+     * 
+     * @param dictType 瀛楀吀绫诲瀷
+     * @param dictValue 瀛楀吀鍊�
+     * @return 瀛楀吀鏍囩
+     */
+    public static String getDictLabel(String dictType, String dictValue)
+    {
+        return getDictLabel(dictType, dictValue, SEPARATOR);
+    }
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏告爣绛捐幏鍙栧瓧鍏稿��
+     * 
+     * @param dictType 瀛楀吀绫诲瀷
+     * @param dictLabel 瀛楀吀鏍囩
+     * @return 瀛楀吀鍊�
+     */
+    public static String getDictValue(String dictType, String dictLabel)
+    {
+        return getDictValue(dictType, dictLabel, SEPARATOR);
+    }
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏稿�艰幏鍙栧瓧鍏告爣绛�
+     * 
+     * @param dictType 瀛楀吀绫诲瀷
+     * @param dictValue 瀛楀吀鍊�
+     * @param separator 鍒嗛殧绗�
+     * @return 瀛楀吀鏍囩
+     */
+    public static String getDictLabel(String dictType, String dictValue, String separator)
+    {
+        StringBuilder propertyString = new StringBuilder();
+        List<SysDictData> datas = getDictCache(dictType);
+
+        if (StringUtils.isNotNull(datas))
+        {
+            if (StringUtils.containsAny(separator, dictValue))
+            {
+                for (SysDictData dict : datas)
+                {
+                    for (String value : dictValue.split(separator))
+                    {
+                        if (value.equals(dict.getDictValue()))
+                        {
+                            propertyString.append(dict.getDictLabel()).append(separator);
+                            break;
+                        }
+                    }
+                }
+            }
+            else
+            {
+                for (SysDictData dict : datas)
+                {
+                    if (dictValue.equals(dict.getDictValue()))
+                    {
+                        return dict.getDictLabel();
+                    }
+                }
+            }
+        }
+        return StringUtils.stripEnd(propertyString.toString(), separator);
+    }
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏告爣绛捐幏鍙栧瓧鍏稿��
+     * 
+     * @param dictType 瀛楀吀绫诲瀷
+     * @param dictLabel 瀛楀吀鏍囩
+     * @param separator 鍒嗛殧绗�
+     * @return 瀛楀吀鍊�
+     */
+    public static String getDictValue(String dictType, String dictLabel, String separator)
+    {
+        StringBuilder propertyString = new StringBuilder();
+        List<SysDictData> datas = getDictCache(dictType);
+
+        if (StringUtils.containsAny(separator, dictLabel) && StringUtils.isNotEmpty(datas))
+        {
+            for (SysDictData dict : datas)
+            {
+                for (String label : dictLabel.split(separator))
+                {
+                    if (label.equals(dict.getDictLabel()))
+                    {
+                        propertyString.append(dict.getDictValue()).append(separator);
+                        break;
+                    }
+                }
+            }
+        }
+        else
+        {
+            for (SysDictData dict : datas)
+            {
+                if (dictLabel.equals(dict.getDictLabel()))
+                {
+                    return dict.getDictValue();
+                }
+            }
+        }
+        return StringUtils.stripEnd(propertyString.toString(), separator);
+    }
+
+    /**
+     * 鍒犻櫎鎸囧畾瀛楀吀缂撳瓨
+     * 
+     * @param key 瀛楀吀閿�
+     */
+    public static void removeDictCache(String key)
+    {
+        SpringUtils.getBean(RedisCache.class).deleteObject(getCacheKey(key));
+    }
+
+    /**
+     * 娓呯┖瀛楀吀缂撳瓨
+     */
+    public static void clearDictCache()
+    {
+        Collection<String> keys = SpringUtils.getBean(RedisCache.class).keys(CacheConstants.SYS_DICT_KEY + "*");
+        SpringUtils.getBean(RedisCache.class).deleteObject(keys);
+    }
+
+    /**
+     * 璁剧疆cache key
+     * 
+     * @param configKey 鍙傛暟閿�
+     * @return 缂撳瓨閿甼ey
+     */
+    public static String getCacheKey(String configKey)
+    {
+        return CacheConstants.SYS_DICT_KEY + configKey;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/ExceptionUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/ExceptionUtil.java
new file mode 100644
index 0000000..bfe1d16
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/ExceptionUtil.java
@@ -0,0 +1,39 @@
+package com.zhitan.common.utils;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+
+/**
+ * 閿欒淇℃伅澶勭悊绫汇��
+ *
+ * @author zhitan
+ */
+public class ExceptionUtil
+{
+    /**
+     * 鑾峰彇exception鐨勮缁嗛敊璇俊鎭��
+     */
+    public static String getExceptionMessage(Throwable e)
+    {
+        StringWriter sw = new StringWriter();
+        e.printStackTrace(new PrintWriter(sw, true));
+        return sw.toString();
+    }
+
+    public static String getRootErrorMessage(Exception e)
+    {
+        Throwable root = ExceptionUtils.getRootCause(e);
+        root = (root == null ? e : root);
+        if (root == null)
+        {
+            return "";
+        }
+        String msg = root.getMessage();
+        if (msg == null)
+        {
+            return "null";
+        }
+        return StringUtils.defaultString(msg);
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/LogUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/LogUtils.java
new file mode 100644
index 0000000..5a66795
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/LogUtils.java
@@ -0,0 +1,18 @@
+package com.zhitan.common.utils;
+
+/**
+ * 澶勭悊骞惰褰曟棩蹇楁枃浠�
+ * 
+ * @author zhitan
+ */
+public class LogUtils
+{
+    public static String getBlock(Object msg)
+    {
+        if (msg == null)
+        {
+            msg = "";
+        }
+        return "[" + msg.toString() + "]";
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/MessageUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/MessageUtils.java
new file mode 100644
index 0000000..8eedcde
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/MessageUtils.java
@@ -0,0 +1,26 @@
+package com.zhitan.common.utils;
+
+import com.zhitan.common.utils.spring.SpringUtils;
+import org.springframework.context.MessageSource;
+import org.springframework.context.i18n.LocaleContextHolder;
+
+/**
+ * 鑾峰彇i18n璧勬簮鏂囦欢
+ * 
+ * @author zhitan
+ */
+public class MessageUtils
+{
+    /**
+     * 鏍规嵁娑堟伅閿拰鍙傛暟 鑾峰彇娑堟伅 濮旀墭缁檚pring messageSource
+     *
+     * @param code 娑堟伅閿�
+     * @param args 鍙傛暟
+     * @return 鑾峰彇鍥介檯鍖栫炕璇戝��
+     */
+    public static String message(String code, Object... args)
+    {
+        MessageSource messageSource = SpringUtils.getBean(MessageSource.class);
+        return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/PageUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/PageUtils.java
new file mode 100644
index 0000000..00d7bff
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/PageUtils.java
@@ -0,0 +1,44 @@
+package com.zhitan.common.utils;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.pagehelper.PageHelper;
+import com.zhitan.common.core.page.PageDomain;
+import com.zhitan.common.core.page.TableSupport;
+import com.zhitan.common.utils.sql.SqlUtil;
+
+/**
+ * 鍒嗛〉宸ュ叿绫�
+ * 
+ * @author zhitan
+ */
+public class PageUtils extends PageHelper
+{
+    /**
+     * 璁剧疆璇锋眰鍒嗛〉鏁版嵁
+     */
+    public static void startPage()
+    {
+        PageDomain pageDomain = TableSupport.buildPageRequest();
+        Integer pageNum = pageDomain.getPageNum();
+        Integer pageSize = pageDomain.getPageSize();
+        String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
+        Boolean reasonable = pageDomain.getReasonable();
+        PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable);
+    }
+
+    /**
+     * 娓呯悊鍒嗛〉鐨勭嚎绋嬪彉閲�
+     */
+    public static void clearPage()
+    {
+        PageHelper.clearPage();
+    }
+    
+    public static Page getPage(){
+        PageDomain pageDomain = TableSupport.buildPageRequest();
+        Integer pageNum = pageDomain.getPageNum();
+        Integer pageSize = pageDomain.getPageSize();
+        
+        return new Page(pageNum,pageSize);
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/ReflectionUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/ReflectionUtils.java
new file mode 100644
index 0000000..c8ef27b
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/ReflectionUtils.java
@@ -0,0 +1,29 @@
+package com.zhitan.common.utils;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 鍙嶅皠鐩稿叧宸ュ叿绫�
+ *
+ * @author Silence
+ * @version 1.0
+ */
+public class ReflectionUtils {
+    /**
+     * 鑾峰彇绫伙紙鍖呮嫭鐖剁被锛夌殑鎵�鏈夊睘鎬с��
+     * 鍖呮嫭public/private/protected/鏃犱慨楗扮
+     */
+    public static Field[] getAllFields(Object model) {
+        Class<?> clazz = model.getClass();
+        List<Field> fields = new ArrayList<>();
+        while (null != clazz) {
+            fields.addAll(Arrays.asList(clazz.getDeclaredFields()));
+            clazz = clazz.getSuperclass();
+        }
+        Field[] result = new Field[fields.size()];
+        return fields.toArray(result);
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/SecurityUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/SecurityUtils.java
new file mode 100644
index 0000000..094df5c
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/SecurityUtils.java
@@ -0,0 +1,169 @@
+package com.zhitan.common.utils;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.constant.HttpStatus;
+import com.zhitan.common.exception.ServiceException;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.util.PatternMatchUtils;
+import com.zhitan.common.core.domain.entity.SysRole;
+import com.zhitan.common.core.domain.model.LoginUser;
+
+/**
+ * 瀹夊叏鏈嶅姟宸ュ叿绫�
+ *
+ * @author zhitan
+ */
+public class SecurityUtils {
+
+    /**
+     * 鐢ㄦ埛ID
+     **/
+    public static Long getUserId() {
+        try {
+            return Objects.requireNonNull(getLoginUser()).getUserId();
+        } catch (Exception e) {
+            throw new ServiceException("鑾峰彇鐢ㄦ埛ID寮傚父", HttpStatus.UNAUTHORIZED);
+        }
+    }
+
+    /**
+     * 鑾峰彇閮ㄩ棬ID
+     **/
+    public static Long getDeptId() {
+        try {
+            return Objects.requireNonNull(getLoginUser()).getDeptId();
+        } catch (Exception e) {
+            throw new ServiceException("鑾峰彇閮ㄩ棬ID寮傚父", HttpStatus.UNAUTHORIZED);
+        }
+    }
+
+    /**
+     * 鑾峰彇鐢ㄦ埛璐︽埛
+     **/
+    public static String getUsername() {
+        try {
+            return Objects.requireNonNull(getLoginUser()).getUsername();
+        } catch (Exception e) {
+            throw new ServiceException("鑾峰彇鐢ㄦ埛璐︽埛寮傚父", HttpStatus.UNAUTHORIZED);
+        }
+    }
+
+    /**
+     * 鑾峰彇鐢ㄦ埛
+     **/
+    public static LoginUser getLoginUser() {
+        try {
+            Authentication authentication = getAuthentication();
+            if (null != authentication) {
+                Object principal = authentication.getPrincipal();
+                if (principal instanceof LoginUser) {
+                    return (LoginUser) principal;
+                }
+            }
+            return null;
+        } catch (Exception e) {
+            throw new ServiceException("鑾峰彇鐢ㄦ埛淇℃伅寮傚父", HttpStatus.UNAUTHORIZED);
+        }
+    }
+
+    /**
+     * 鑾峰彇Authentication
+     */
+    public static Authentication getAuthentication() {
+
+        SecurityContext context = SecurityContextHolder.getContext();
+        if (null == context) {
+            return null;
+        }
+        return context.getAuthentication();
+    }
+
+    /**
+     * 鐢熸垚BCryptPasswordEncoder瀵嗙爜
+     *
+     * @param password 瀵嗙爜
+     * @return 鍔犲瘑瀛楃涓�
+     */
+    public static String encryptPassword(String password) {
+        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
+        return passwordEncoder.encode(password);
+    }
+
+    /**
+     * 鍒ゆ柇瀵嗙爜鏄惁鐩稿悓
+     *
+     * @param rawPassword     鐪熷疄瀵嗙爜
+     * @param encodedPassword 鍔犲瘑鍚庡瓧绗�
+     * @return 缁撴灉
+     */
+    public static boolean matchesPassword(String rawPassword, String encodedPassword) {
+        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
+        return passwordEncoder.matches(rawPassword, encodedPassword);
+    }
+
+    /**
+     * 鏄惁涓虹鐞嗗憳
+     *
+     * @param userId 鐢ㄦ埛ID
+     * @return 缁撴灉
+     */
+    public static boolean isAdmin(Long userId) {
+        return userId != null && 1L == userId;
+    }
+
+    /**
+     * 楠岃瘉鐢ㄦ埛鏄惁鍏峰鏌愭潈闄�
+     *
+     * @param permission 鏉冮檺瀛楃涓�
+     * @return 鐢ㄦ埛鏄惁鍏峰鏌愭潈闄�
+     */
+    public static boolean hasPermi(String permission) {
+        return hasPermi(getLoginUser().getPermissions(), permission);
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁鍖呭惈鏉冮檺
+     *
+     * @param authorities 鏉冮檺鍒楄〃
+     * @param permission  鏉冮檺瀛楃涓�
+     * @return 鐢ㄦ埛鏄惁鍏峰鏌愭潈闄�
+     */
+    public static boolean hasPermi(Collection<String> authorities, String permission) {
+        return authorities.stream().filter(StringUtils::hasText)
+                .anyMatch(x -> Constants.ALL_PERMISSION.equals(x) || PatternMatchUtils.simpleMatch(x, permission));
+    }
+
+    /**
+     * 楠岃瘉鐢ㄦ埛鏄惁鎷ユ湁鏌愪釜瑙掕壊
+     *
+     * @param role 瑙掕壊鏍囪瘑
+     * @return 鐢ㄦ埛鏄惁鍏峰鏌愯鑹�
+     */
+    public static boolean hasRole(String role) {
+        List<SysRole> roleList = getLoginUser().getUser().getRoles();
+        Collection<String> roles = roleList.stream().map(SysRole::getRoleKey).collect(Collectors.toSet());
+        return hasRole(roles, role);
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁鍖呭惈瑙掕壊
+     *
+     * @param roles 瑙掕壊鍒楄〃
+     * @param role  瑙掕壊
+     * @return 鐢ㄦ埛鏄惁鍏峰鏌愯鑹叉潈闄�
+     */
+    public static boolean hasRole(Collection<String> roles, String role) {
+        return roles.stream().filter(StringUtils::hasText)
+                .anyMatch(x -> Constants.SUPER_ADMIN.equals(x) || PatternMatchUtils.simpleMatch(x, role));
+    }
+
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/ServletUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/ServletUtils.java
new file mode 100644
index 0000000..e19b69d
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/ServletUtils.java
@@ -0,0 +1,219 @@
+package com.zhitan.common.utils;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import com.zhitan.common.constant.Constants;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import com.zhitan.common.core.text.Convert;
+
+/**
+ * 瀹㈡埛绔伐鍏风被
+ * 
+ * @author zhitan
+ */
+public class ServletUtils
+{
+    /**
+     * 鑾峰彇String鍙傛暟
+     */
+    public static String getParameter(String name)
+    {
+        return getRequest().getParameter(name);
+    }
+
+    /**
+     * 鑾峰彇String鍙傛暟
+     */
+    public static String getParameter(String name, String defaultValue)
+    {
+        return Convert.toStr(getRequest().getParameter(name), defaultValue);
+    }
+
+    /**
+     * 鑾峰彇Integer鍙傛暟
+     */
+    public static Integer getParameterToInt(String name)
+    {
+        return Convert.toInt(getRequest().getParameter(name));
+    }
+
+    /**
+     * 鑾峰彇Integer鍙傛暟
+     */
+    public static Integer getParameterToInt(String name, Integer defaultValue)
+    {
+        return Convert.toInt(getRequest().getParameter(name), defaultValue);
+    }
+
+    /**
+     * 鑾峰彇Boolean鍙傛暟
+     */
+    public static Boolean getParameterToBool(String name)
+    {
+        return Convert.toBool(getRequest().getParameter(name));
+    }
+
+    /**
+     * 鑾峰彇Boolean鍙傛暟
+     */
+    public static Boolean getParameterToBool(String name, Boolean defaultValue)
+    {
+        return Convert.toBool(getRequest().getParameter(name), defaultValue);
+    }
+
+    /**
+     * 鑾峰緱鎵�鏈夎姹傚弬鏁�
+     *
+     * @param request 璇锋眰瀵硅薄{@link ServletRequest}
+     * @return Map
+     */
+    public static Map<String, String[]> getParams(ServletRequest request)
+    {
+        final Map<String, String[]> map = request.getParameterMap();
+        return Collections.unmodifiableMap(map);
+    }
+
+    /**
+     * 鑾峰緱鎵�鏈夎姹傚弬鏁�
+     *
+     * @param request 璇锋眰瀵硅薄{@link ServletRequest}
+     * @return Map
+     */
+    public static Map<String, String> getParamMap(ServletRequest request)
+    {
+        Map<String, String> params = new HashMap<>();
+        for (Map.Entry<String, String[]> entry : getParams(request).entrySet())
+        {
+            params.put(entry.getKey(), StringUtils.join(entry.getValue(), ","));
+        }
+        return params;
+    }
+
+    /**
+     * 鑾峰彇request
+     */
+    public static HttpServletRequest getRequest()
+    {
+        return getRequestAttributes().getRequest();
+    }
+
+    /**
+     * 鑾峰彇response
+     */
+    public static HttpServletResponse getResponse()
+    {
+        return getRequestAttributes().getResponse();
+    }
+
+    /**
+     * 鑾峰彇session
+     */
+    public static HttpSession getSession()
+    {
+        return getRequest().getSession();
+    }
+
+    public static ServletRequestAttributes getRequestAttributes()
+    {
+        RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
+        return (ServletRequestAttributes) attributes;
+    }
+
+    /**
+     * 灏嗗瓧绗︿覆娓叉煋鍒板鎴风
+     * 
+     * @param response 娓叉煋瀵硅薄
+     * @param string 寰呮覆鏌撶殑瀛楃涓�
+     */
+    public static void renderString(HttpServletResponse response, String string)
+    {
+        try
+        {
+            response.setStatus(200);
+            response.setContentType("application/json");
+            response.setCharacterEncoding("utf-8");
+            response.getWriter().print(string);
+        }
+        catch (IOException e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 鏄惁鏄疉jax寮傛璇锋眰
+     * 
+     * @param request
+     */
+    public static boolean isAjaxRequest(HttpServletRequest request)
+    {
+        String accept = request.getHeader("accept");
+        if (accept != null && accept.contains("application/json"))
+        {
+            return true;
+        }
+
+        String xRequestedWith = request.getHeader("X-Requested-With");
+        if (xRequestedWith != null && xRequestedWith.contains("XMLHttpRequest"))
+        {
+            return true;
+        }
+
+        String uri = request.getRequestURI();
+        if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml"))
+        {
+            return true;
+        }
+
+        String ajax = request.getParameter("__ajax");
+        return StringUtils.inStringIgnoreCase(ajax, "json", "xml");
+    }
+
+    /**
+     * 鍐呭缂栫爜
+     * 
+     * @param str 鍐呭
+     * @return 缂栫爜鍚庣殑鍐呭
+     */
+    public static String urlEncode(String str)
+    {
+        try
+        {
+            return URLEncoder.encode(str, Constants.UTF8);
+        }
+        catch (UnsupportedEncodingException e)
+        {
+            return StringUtils.EMPTY;
+        }
+    }
+
+    /**
+     * 鍐呭瑙g爜
+     * 
+     * @param str 鍐呭
+     * @return 瑙g爜鍚庣殑鍐呭
+     */
+    public static String urlDecode(String str)
+    {
+        try
+        {
+            return URLDecoder.decode(str, Constants.UTF8);
+        }
+        catch (UnsupportedEncodingException e)
+        {
+            return StringUtils.EMPTY;
+        }
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/StringUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/StringUtils.java
new file mode 100644
index 0000000..078508a
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/StringUtils.java
@@ -0,0 +1,685 @@
+package com.zhitan.common.utils;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import com.zhitan.common.constant.Constants;
+import org.springframework.util.AntPathMatcher;
+import com.zhitan.common.core.text.StrFormatter;
+
+/**
+ * 瀛楃涓插伐鍏风被
+ * 
+ * @author zhitan
+ */
+public class StringUtils extends org.apache.commons.lang3.StringUtils
+{
+    /** 绌哄瓧绗︿覆 */
+    private static final String NULLSTR = "";
+
+    /** 涓嬪垝绾� */
+    private static final char SEPARATOR = '_';
+
+    /** 鏄熷彿 */
+    private static final char ASTERISK = '*';
+
+    /**
+     * 鑾峰彇鍙傛暟涓嶄负绌哄��
+     * 
+     * @param value defaultValue 瑕佸垽鏂殑value
+     * @return value 杩斿洖鍊�
+     */
+    public static <T> T nvl(T value, T defaultValue)
+    {
+        return value != null ? value : defaultValue;
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓狢ollection鏄惁涓虹┖锛� 鍖呭惈List锛孲et锛孮ueue
+     * 
+     * @param coll 瑕佸垽鏂殑Collection
+     * @return true锛氫负绌� false锛氶潪绌�
+     */
+    public static boolean isEmpty(Collection<?> coll)
+    {
+        return isNull(coll) || coll.isEmpty();
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓狢ollection鏄惁闈炵┖锛屽寘鍚獿ist锛孲et锛孮ueue
+     * 
+     * @param coll 瑕佸垽鏂殑Collection
+     * @return true锛氶潪绌� false锛氱┖
+     */
+    public static boolean isNotEmpty(Collection<?> coll)
+    {
+        return !isEmpty(coll);
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓璞℃暟缁勬槸鍚︿负绌�
+     * 
+     * @param objects 瑕佸垽鏂殑瀵硅薄鏁扮粍
+     ** @return true锛氫负绌� false锛氶潪绌�
+     */
+    public static boolean isEmpty(Object[] objects)
+    {
+        return isNull(objects) || (objects.length == 0);
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓璞℃暟缁勬槸鍚﹂潪绌�
+     * 
+     * @param objects 瑕佸垽鏂殑瀵硅薄鏁扮粍
+     * @return true锛氶潪绌� false锛氱┖
+     */
+    public static boolean isNotEmpty(Object[] objects)
+    {
+        return !isEmpty(objects);
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓狹ap鏄惁涓虹┖
+     * 
+     * @param map 瑕佸垽鏂殑Map
+     * @return true锛氫负绌� false锛氶潪绌�
+     */
+    public static boolean isEmpty(Map<?, ?> map)
+    {
+        return isNull(map) || map.isEmpty();
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓狹ap鏄惁涓虹┖
+     * 
+     * @param map 瑕佸垽鏂殑Map
+     * @return true锛氶潪绌� false锛氱┖
+     */
+    public static boolean isNotEmpty(Map<?, ?> map)
+    {
+        return !isEmpty(map);
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓瓧绗︿覆鏄惁涓虹┖涓�
+     * 
+     * @param str String
+     * @return true锛氫负绌� false锛氶潪绌�
+     */
+    public static boolean isEmpty(String str)
+    {
+        return isNull(str) || NULLSTR.equals(str.trim());
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓瓧绗︿覆鏄惁涓洪潪绌轰覆
+     * 
+     * @param str String
+     * @return true锛氶潪绌轰覆 false锛氱┖涓�
+     */
+    public static boolean isNotEmpty(String str)
+    {
+        return !isEmpty(str);
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓璞℃槸鍚︿负绌�
+     * 
+     * @param object Object
+     * @return true锛氫负绌� false锛氶潪绌�
+     */
+    public static boolean isNull(Object object)
+    {
+        return object == null;
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓璞℃槸鍚﹂潪绌�
+     * 
+     * @param object Object
+     * @return true锛氶潪绌� false锛氱┖
+     */
+    public static boolean isNotNull(Object object)
+    {
+        return !isNull(object);
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓璞℃槸鍚︽槸鏁扮粍绫诲瀷锛圝ava鍩烘湰鍨嬪埆鐨勬暟缁勶級
+     * 
+     * @param object 瀵硅薄
+     * @return true锛氭槸鏁扮粍 false锛氫笉鏄暟缁�
+     */
+    public static boolean isArray(Object object)
+    {
+        return isNotNull(object) && object.getClass().isArray();
+    }
+
+    /**
+     * 鍘荤┖鏍�
+     */
+    public static String trim(String str)
+    {
+        return (str == null ? "" : str.trim());
+    }
+
+    /**
+     * 鏇挎崲鎸囧畾瀛楃涓茬殑鎸囧畾鍖洪棿鍐呭瓧绗︿负"*"
+     *
+     * @param str 瀛楃涓�
+     * @param startInclude 寮�濮嬩綅缃紙鍖呭惈锛�
+     * @param endExclude 缁撴潫浣嶇疆锛堜笉鍖呭惈锛�
+     * @return 鏇挎崲鍚庣殑瀛楃涓�
+     */
+    public static String hide(CharSequence str, int startInclude, int endExclude)
+    {
+        if (isEmpty(str))
+        {
+            return NULLSTR;
+        }
+        final int strLength = str.length();
+        if (startInclude > strLength)
+        {
+            return NULLSTR;
+        }
+        if (endExclude > strLength)
+        {
+            endExclude = strLength;
+        }
+        if (startInclude > endExclude)
+        {
+            // 濡傛灉璧峰浣嶇疆澶т簬缁撴潫浣嶇疆锛屼笉鏇挎崲
+            return NULLSTR;
+        }
+        final char[] chars = new char[strLength];
+        for (int i = 0; i < strLength; i++)
+        {
+            if (i >= startInclude && i < endExclude)
+            {
+                chars[i] = ASTERISK;
+            }
+            else
+            {
+                chars[i] = str.charAt(i);
+            }
+        }
+        return new String(chars);
+    }
+
+    /**
+     * 鎴彇瀛楃涓�
+     * 
+     * @param str 瀛楃涓�
+     * @param start 寮�濮�
+     * @return 缁撴灉
+     */
+    public static String substring(final String str, int start)
+    {
+        if (str == null)
+        {
+            return NULLSTR;
+        }
+
+        if (start < 0)
+        {
+            start = str.length() + start;
+        }
+
+        if (start < 0)
+        {
+            start = 0;
+        }
+        if (start > str.length())
+        {
+            return NULLSTR;
+        }
+
+        return str.substring(start);
+    }
+
+    /**
+     * 鎴彇瀛楃涓�
+     * 
+     * @param str 瀛楃涓�
+     * @param start 寮�濮�
+     * @param end 缁撴潫
+     * @return 缁撴灉
+     */
+    public static String substring(final String str, int start, int end)
+    {
+        if (str == null)
+        {
+            return NULLSTR;
+        }
+
+        if (end < 0)
+        {
+            end = str.length() + end;
+        }
+        if (start < 0)
+        {
+            start = str.length() + start;
+        }
+
+        if (end > str.length())
+        {
+            end = str.length();
+        }
+
+        if (start > end)
+        {
+            return NULLSTR;
+        }
+
+        if (start < 0)
+        {
+            start = 0;
+        }
+        if (end < 0)
+        {
+            end = 0;
+        }
+
+        return str.substring(start, end);
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁涓虹┖锛屽苟涓斾笉鏄┖鐧藉瓧绗�
+     * 
+     * @param str 瑕佸垽鏂殑value
+     * @return 缁撴灉
+     */
+    public static boolean hasText(String str)
+    {
+        return (str != null && !str.isEmpty() && containsText(str));
+    }
+
+    private static boolean containsText(CharSequence str)
+    {
+        int strLen = str.length();
+        for (int i = 0; i < strLen; i++)
+        {
+            if (!Character.isWhitespace(str.charAt(i)))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 鏍煎紡鍖栨枃鏈�, {} 琛ㄧず鍗犱綅绗�<br>
+     * 姝ゆ柟娉曞彧鏄畝鍗曞皢鍗犱綅绗� {} 鎸夌収椤哄簭鏇挎崲涓哄弬鏁�<br>
+     * 濡傛灉鎯宠緭鍑� {} 浣跨敤 \\杞箟 { 鍗冲彲锛屽鏋滄兂杈撳嚭 {} 涔嬪墠鐨� \ 浣跨敤鍙岃浆涔夌 \\\\ 鍗冲彲<br>
+     * 渚嬶細<br>
+     * 閫氬父浣跨敤锛歠ormat("this is {} for {}", "a", "b") -> this is a for b<br>
+     * 杞箟{}锛� format("this is \\{} for {}", "a", "b") -> this is \{} for a<br>
+     * 杞箟\锛� format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br>
+     * 
+     * @param template 鏂囨湰妯℃澘锛岃鏇挎崲鐨勯儴鍒嗙敤 {} 琛ㄧず
+     * @param params 鍙傛暟鍊�
+     * @return 鏍煎紡鍖栧悗鐨勬枃鏈�
+     */
+    public static String format(String template, Object... params)
+    {
+        if (isEmpty(params) || isEmpty(template))
+        {
+            return template;
+        }
+        return StrFormatter.format(template, params);
+    }
+
+    /**
+     * 鏄惁涓篽ttp(s)://寮�澶�
+     * 
+     * @param link 閾炬帴
+     * @return 缁撴灉
+     */
+    public static boolean ishttp(String link)
+    {
+        return StringUtils.startsWithAny(link, Constants.HTTP, Constants.HTTPS);
+    }
+
+    /**
+     * 瀛楃涓茶浆set
+     * 
+     * @param str 瀛楃涓�
+     * @param sep 鍒嗛殧绗�
+     * @return set闆嗗悎
+     */
+    public static final Set<String> str2Set(String str, String sep)
+    {
+        return new HashSet<String>(str2List(str, sep, true, false));
+    }
+
+    /**
+     * 瀛楃涓茶浆list
+     * 
+     * @param str 瀛楃涓�
+     * @param sep 鍒嗛殧绗�
+     * @param filterBlank 杩囨护绾┖鐧�
+     * @param trim 鍘绘帀棣栧熬绌虹櫧
+     * @return list闆嗗悎
+     */
+    public static final List<String> str2List(String str, String sep, boolean filterBlank, boolean trim)
+    {
+        List<String> list = new ArrayList<String>();
+        if (StringUtils.isEmpty(str))
+        {
+            return list;
+        }
+
+        // 杩囨护绌虹櫧瀛楃涓�
+        if (filterBlank && StringUtils.isBlank(str))
+        {
+            return list;
+        }
+        String[] split = str.split(sep);
+        for (String string : split)
+        {
+            if (filterBlank && StringUtils.isBlank(string))
+            {
+                continue;
+            }
+            if (trim)
+            {
+                string = string.trim();
+            }
+            list.add(string);
+        }
+
+        return list;
+    }
+
+    /**
+     * 鍒ゆ柇缁欏畾鐨刢ollection鍒楄〃涓槸鍚﹀寘鍚暟缁刟rray 鍒ゆ柇缁欏畾鐨勬暟缁刟rray涓槸鍚﹀寘鍚粰瀹氱殑鍏冪礌value
+     *
+     * @param collection 缁欏畾鐨勯泦鍚�
+     * @param array 缁欏畾鐨勬暟缁�
+     * @return boolean 缁撴灉
+     */
+    public static boolean containsAny(Collection<String> collection, String... array)
+    {
+        if (isEmpty(collection) || isEmpty(array))
+        {
+            return false;
+        }
+        else
+        {
+            for (String str : array)
+            {
+                if (collection.contains(str))
+                {
+                    return true;
+                }
+            }
+            return false;
+        }
+    }
+
+    /**
+     * 鏌ユ壘鎸囧畾瀛楃涓叉槸鍚﹀寘鍚寚瀹氬瓧绗︿覆鍒楄〃涓殑浠绘剰涓�涓瓧绗︿覆鍚屾椂涓插拷鐣ュぇ灏忓啓
+     *
+     * @param cs 鎸囧畾瀛楃涓�
+     * @param searchCharSequences 闇�瑕佹鏌ョ殑瀛楃涓叉暟缁�
+     * @return 鏄惁鍖呭惈浠绘剰涓�涓瓧绗︿覆
+     */
+    public static boolean containsAnyIgnoreCase(CharSequence cs, CharSequence... searchCharSequences)
+    {
+        if (isEmpty(cs) || isEmpty(searchCharSequences))
+        {
+            return false;
+        }
+        for (CharSequence testStr : searchCharSequences)
+        {
+            if (containsIgnoreCase(cs, testStr))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 椹煎嘲杞笅鍒掔嚎鍛藉悕
+     */
+    public static String toUnderScoreCase(String str)
+    {
+        if (str == null)
+        {
+            return null;
+        }
+        StringBuilder sb = new StringBuilder();
+        // 鍓嶇疆瀛楃鏄惁澶у啓
+        boolean preCharIsUpperCase = true;
+        // 褰撳墠瀛楃鏄惁澶у啓
+        boolean curreCharIsUpperCase = true;
+        // 涓嬩竴瀛楃鏄惁澶у啓
+        boolean nexteCharIsUpperCase = true;
+        for (int i = 0; i < str.length(); i++)
+        {
+            char c = str.charAt(i);
+            if (i > 0)
+            {
+                preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1));
+            }
+            else
+            {
+                preCharIsUpperCase = false;
+            }
+
+            curreCharIsUpperCase = Character.isUpperCase(c);
+
+            if (i < (str.length() - 1))
+            {
+                nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1));
+            }
+
+            if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase)
+            {
+                sb.append(SEPARATOR);
+            }
+            else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase)
+            {
+                sb.append(SEPARATOR);
+            }
+            sb.append(Character.toLowerCase(c));
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * 鏄惁鍖呭惈瀛楃涓�
+     * 
+     * @param str 楠岃瘉瀛楃涓�
+     * @param strs 瀛楃涓茬粍
+     * @return 鍖呭惈杩斿洖true
+     */
+    public static boolean inStringIgnoreCase(String str, String... strs)
+    {
+        if (str != null && strs != null)
+        {
+            for (String s : strs)
+            {
+                if (str.equalsIgnoreCase(trim(s)))
+                {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 灏嗕笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆杞崲涓洪┘宄板紡銆傚鏋滆浆鎹㈠墠鐨勪笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆涓虹┖锛屽垯杩斿洖绌哄瓧绗︿覆銆� 渚嬪锛欻ELLO_WORLD->HelloWorld
+     * 
+     * @param name 杞崲鍓嶇殑涓嬪垝绾垮ぇ鍐欐柟寮忓懡鍚嶇殑瀛楃涓�
+     * @return 杞崲鍚庣殑椹煎嘲寮忓懡鍚嶇殑瀛楃涓�
+     */
+    public static String convertToCamelCase(String name)
+    {
+        StringBuilder result = new StringBuilder();
+        // 蹇�熸鏌�
+        if (name == null || name.isEmpty())
+        {
+            // 娌″繀瑕佽浆鎹�
+            return "";
+        }
+        else if (!name.contains("_"))
+        {
+            // 涓嶅惈涓嬪垝绾匡紝浠呭皢棣栧瓧姣嶅ぇ鍐�
+            return name.substring(0, 1).toUpperCase() + name.substring(1);
+        }
+        // 鐢ㄤ笅鍒掔嚎灏嗗師濮嬪瓧绗︿覆鍒嗗壊
+        String[] camels = name.split("_");
+        for (String camel : camels)
+        {
+            // 璺宠繃鍘熷瀛楃涓蹭腑寮�澶淬�佺粨灏剧殑涓嬫崲绾挎垨鍙岄噸涓嬪垝绾�
+            if (camel.isEmpty())
+            {
+                continue;
+            }
+            // 棣栧瓧姣嶅ぇ鍐�
+            result.append(camel.substring(0, 1).toUpperCase());
+            result.append(camel.substring(1).toLowerCase());
+        }
+        return result.toString();
+    }
+
+    /**
+     * 椹煎嘲寮忓懡鍚嶆硶
+     * 渚嬪锛歶ser_name->userName
+     */
+    public static String toCamelCase(String s)
+    {
+        if (s == null)
+        {
+            return null;
+        }
+        if (s.indexOf(SEPARATOR) == -1)
+        {
+            return s;
+        }
+        s = s.toLowerCase();
+        StringBuilder sb = new StringBuilder(s.length());
+        boolean upperCase = false;
+        for (int i = 0; i < s.length(); i++)
+        {
+            char c = s.charAt(i);
+
+            if (c == SEPARATOR)
+            {
+                upperCase = true;
+            }
+            else if (upperCase)
+            {
+                sb.append(Character.toUpperCase(c));
+                upperCase = false;
+            }
+            else
+            {
+                sb.append(c);
+            }
+        }
+        return sb.toString();
+    }
+
+    /**
+     * 鏌ユ壘鎸囧畾瀛楃涓叉槸鍚﹀尮閰嶆寚瀹氬瓧绗︿覆鍒楄〃涓殑浠绘剰涓�涓瓧绗︿覆
+     * 
+     * @param str 鎸囧畾瀛楃涓�
+     * @param strs 闇�瑕佹鏌ョ殑瀛楃涓叉暟缁�
+     * @return 鏄惁鍖归厤
+     */
+    public static boolean matches(String str, List<String> strs)
+    {
+        if (isEmpty(str) || isEmpty(strs))
+        {
+            return false;
+        }
+        for (String pattern : strs)
+        {
+            if (isMatch(pattern, str))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 鍒ゆ柇url鏄惁涓庤鍒欓厤缃�: 
+     * ? 琛ㄧず鍗曚釜瀛楃; 
+     * * 琛ㄧず涓�灞傝矾寰勫唴鐨勪换鎰忓瓧绗︿覆锛屼笉鍙法灞傜骇; 
+     * ** 琛ㄧず浠绘剰灞傝矾寰�;
+     * 
+     * @param pattern 鍖归厤瑙勫垯
+     * @param url 闇�瑕佸尮閰嶇殑url
+     * @return
+     */
+    public static boolean isMatch(String pattern, String url)
+    {
+        AntPathMatcher matcher = new AntPathMatcher();
+        return matcher.match(pattern, url);
+    }
+
+    @SuppressWarnings("unchecked")
+    public static <T> T cast(Object obj)
+    {
+        return (T) obj;
+    }
+
+    /**
+     * 鏁板瓧宸﹁竟琛ラ綈0锛屼娇涔嬭揪鍒版寚瀹氶暱搴︺�傛敞鎰忥紝濡傛灉鏁板瓧杞崲涓哄瓧绗︿覆鍚庯紝闀垮害澶т簬size锛屽垯鍙繚鐣� 鏈�鍚巗ize涓瓧绗︺��
+     * 
+     * @param num 鏁板瓧瀵硅薄
+     * @param size 瀛楃涓叉寚瀹氶暱搴�
+     * @return 杩斿洖鏁板瓧鐨勫瓧绗︿覆鏍煎紡锛岃瀛楃涓蹭负鎸囧畾闀垮害銆�
+     */
+    public static final String padl(final Number num, final int size)
+    {
+        return padl(num.toString(), size, '0');
+    }
+
+    /**
+     * 瀛楃涓插乏琛ラ綈銆傚鏋滃師濮嬪瓧绗︿覆s闀垮害澶т簬size锛屽垯鍙繚鐣欐渶鍚巗ize涓瓧绗︺��
+     * 
+     * @param s 鍘熷瀛楃涓�
+     * @param size 瀛楃涓叉寚瀹氶暱搴�
+     * @param c 鐢ㄤ簬琛ラ綈鐨勫瓧绗�
+     * @return 杩斿洖鎸囧畾闀垮害鐨勫瓧绗︿覆锛岀敱鍘熷瓧绗︿覆宸﹁ˉ榻愭垨鎴彇寰楀埌銆�
+     */
+    public static final String padl(final String s, final int size, final char c)
+    {
+        final StringBuilder sb = new StringBuilder(size);
+        if (s != null)
+        {
+            final int len = s.length();
+            if (s.length() <= size)
+            {
+                for (int i = size - len; i > 0; i--)
+                {
+                    sb.append(c);
+                }
+                sb.append(s);
+            }
+            else
+            {
+                return s.substring(len - size, len);
+            }
+        }
+        else
+        {
+            for (int i = size; i > 0; i--)
+            {
+                sb.append(c);
+            }
+        }
+        return sb.toString();
+    }
+}
\ No newline at end of file
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/Threads.java b/zhitan-common/src/main/java/com/zhitan/common/utils/Threads.java
new file mode 100644
index 0000000..724ce2a
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/Threads.java
@@ -0,0 +1,99 @@
+package com.zhitan.common.utils;
+
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 绾跨▼鐩稿叧宸ュ叿绫�.
+ * 
+ * @author zhitan
+ */
+public class Threads
+{
+    private static final Logger logger = LoggerFactory.getLogger(Threads.class);
+
+    /**
+     * sleep绛夊緟,鍗曚綅涓烘绉�
+     */
+    public static void sleep(long milliseconds)
+    {
+        try
+        {
+            Thread.sleep(milliseconds);
+        }
+        catch (InterruptedException e)
+        {
+            return;
+        }
+    }
+
+    /**
+     * 鍋滄绾跨▼姹�
+     * 鍏堜娇鐢╯hutdown, 鍋滄鎺ユ敹鏂颁换鍔″苟灏濊瘯瀹屾垚鎵�鏈夊凡瀛樺湪浠诲姟.
+     * 濡傛灉瓒呮椂, 鍒欒皟鐢╯hutdownNow, 鍙栨秷鍦╳orkQueue涓璓ending鐨勪换鍔�,骞朵腑鏂墍鏈夐樆濉炲嚱鏁�.
+     * 濡傛灉浠嶇劧瓒呮檪锛屽墖寮峰埗閫�鍑�.
+     * 鍙﹀鍦╯hutdown鏃剁嚎绋嬫湰韬璋冪敤涓柇鍋氫簡澶勭悊.
+     */
+    public static void shutdownAndAwaitTermination(ExecutorService pool)
+    {
+        if (pool != null && !pool.isShutdown())
+        {
+            pool.shutdown();
+            try
+            {
+                if (!pool.awaitTermination(120, TimeUnit.SECONDS))
+                {
+                    pool.shutdownNow();
+                    if (!pool.awaitTermination(120, TimeUnit.SECONDS))
+                    {
+                        logger.info("Pool did not terminate");
+                    }
+                }
+            }
+            catch (InterruptedException ie)
+            {
+                pool.shutdownNow();
+                Thread.currentThread().interrupt();
+            }
+        }
+    }
+
+    /**
+     * 鎵撳嵃绾跨▼寮傚父淇℃伅
+     */
+    public static void printException(Runnable r, Throwable t)
+    {
+        if (t == null && r instanceof Future<?>)
+        {
+            try
+            {
+                Future<?> future = (Future<?>) r;
+                if (future.isDone())
+                {
+                    future.get();
+                }
+            }
+            catch (CancellationException ce)
+            {
+                t = ce;
+            }
+            catch (ExecutionException ee)
+            {
+                t = ee.getCause();
+            }
+            catch (InterruptedException ie)
+            {
+                Thread.currentThread().interrupt();
+            }
+        }
+        if (t != null)
+        {
+            logger.error(t.getMessage(), t);
+        }
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/bean/BeanUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/bean/BeanUtils.java
new file mode 100644
index 0000000..c7876eb
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/bean/BeanUtils.java
@@ -0,0 +1,110 @@
+package com.zhitan.common.utils.bean;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Bean 宸ュ叿绫�
+ * 
+ * @author zhitan
+ */
+public class BeanUtils extends org.springframework.beans.BeanUtils
+{
+    /** Bean鏂规硶鍚嶄腑灞炴�у悕寮�濮嬬殑涓嬫爣 */
+    private static final int BEAN_METHOD_PROP_INDEX = 3;
+
+    /** * 鍖归厤getter鏂规硶鐨勬鍒欒〃杈惧紡 */
+    private static final Pattern GET_PATTERN = Pattern.compile("get(\\p{javaUpperCase}\\w*)");
+
+    /** * 鍖归厤setter鏂规硶鐨勬鍒欒〃杈惧紡 */
+    private static final Pattern SET_PATTERN = Pattern.compile("set(\\p{javaUpperCase}\\w*)");
+
+    /**
+     * Bean灞炴�у鍒跺伐鍏锋柟娉曘��
+     * 
+     * @param dest 鐩爣瀵硅薄
+     * @param src 婧愬璞�
+     */
+    public static void copyBeanProp(Object dest, Object src)
+    {
+        try
+        {
+            copyProperties(src, dest);
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 鑾峰彇瀵硅薄鐨剆etter鏂规硶銆�
+     * 
+     * @param obj 瀵硅薄
+     * @return 瀵硅薄鐨剆etter鏂规硶鍒楄〃
+     */
+    public static List<Method> getSetterMethods(Object obj)
+    {
+        // setter鏂规硶鍒楄〃
+        List<Method> setterMethods = new ArrayList<Method>();
+
+        // 鑾峰彇鎵�鏈夋柟娉�
+        Method[] methods = obj.getClass().getMethods();
+
+        // 鏌ユ壘setter鏂规硶
+
+        for (Method method : methods)
+        {
+            Matcher m = SET_PATTERN.matcher(method.getName());
+            if (m.matches() && (method.getParameterTypes().length == 1))
+            {
+                setterMethods.add(method);
+            }
+        }
+        // 杩斿洖setter鏂规硶鍒楄〃
+        return setterMethods;
+    }
+
+    /**
+     * 鑾峰彇瀵硅薄鐨刧etter鏂规硶銆�
+     * 
+     * @param obj 瀵硅薄
+     * @return 瀵硅薄鐨刧etter鏂规硶鍒楄〃
+     */
+
+    public static List<Method> getGetterMethods(Object obj)
+    {
+        // getter鏂规硶鍒楄〃
+        List<Method> getterMethods = new ArrayList<Method>();
+        // 鑾峰彇鎵�鏈夋柟娉�
+        Method[] methods = obj.getClass().getMethods();
+        // 鏌ユ壘getter鏂规硶
+        for (Method method : methods)
+        {
+            Matcher m = GET_PATTERN.matcher(method.getName());
+            if (m.matches() && (method.getParameterTypes().length == 0))
+            {
+                getterMethods.add(method);
+            }
+        }
+        // 杩斿洖getter鏂规硶鍒楄〃
+        return getterMethods;
+    }
+
+    /**
+     * 妫�鏌ean鏂规硶鍚嶄腑鐨勫睘鎬у悕鏄惁鐩哥瓑銆�<br>
+     * 濡俫etName()鍜宻etName()灞炴�у悕涓�鏍凤紝getName()鍜宻etAge()灞炴�у悕涓嶄竴鏍枫��
+     * 
+     * @param m1 鏂规硶鍚�1
+     * @param m2 鏂规硶鍚�2
+     * @return 灞炴�у悕涓�鏍疯繑鍥瀟rue锛屽惁鍒欒繑鍥瀎alse
+     */
+
+    public static boolean isMethodPropEquals(String m1, String m2)
+    {
+        return m1.substring(BEAN_METHOD_PROP_INDEX).equals(m2.substring(BEAN_METHOD_PROP_INDEX));
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/bean/BeanValidators.java b/zhitan-common/src/main/java/com/zhitan/common/utils/bean/BeanValidators.java
new file mode 100644
index 0000000..643a9d5
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/bean/BeanValidators.java
@@ -0,0 +1,24 @@
+package com.zhitan.common.utils.bean;
+
+import java.util.Set;
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
+import javax.validation.Validator;
+
+/**
+ * bean瀵硅薄灞炴�ч獙璇�
+ * 
+ * @author zhitan
+ */
+public class BeanValidators
+{
+    public static void validateWithException(Validator validator, Object object, Class<?>... groups)
+            throws ConstraintViolationException
+    {
+        Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object, groups);
+        if (!constraintViolations.isEmpty())
+        {
+            throw new ConstraintViolationException(constraintViolations);
+        }
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/file/FileTypeUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/file/FileTypeUtils.java
new file mode 100644
index 0000000..3a6a16c
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/file/FileTypeUtils.java
@@ -0,0 +1,76 @@
+package com.zhitan.common.utils.file;
+
+import java.io.File;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * 鏂囦欢绫诲瀷宸ュ叿绫�
+ *
+ * @author zhitan
+ */
+public class FileTypeUtils
+{
+    /**
+     * 鑾峰彇鏂囦欢绫诲瀷
+     * <p>
+     * 渚嬪: admin.txt, 杩斿洖: txt
+     * 
+     * @param file 鏂囦欢鍚�
+     * @return 鍚庣紑锛堜笉鍚�".")
+     */
+    public static String getFileType(File file)
+    {
+        if (null == file)
+        {
+            return StringUtils.EMPTY;
+        }
+        return getFileType(file.getName());
+    }
+
+    /**
+     * 鑾峰彇鏂囦欢绫诲瀷
+     * <p>
+     * 渚嬪: admin.txt, 杩斿洖: txt
+     *
+     * @param fileName 鏂囦欢鍚�
+     * @return 鍚庣紑锛堜笉鍚�".")
+     */
+    public static String getFileType(String fileName)
+    {
+        int separatorIndex = fileName.lastIndexOf(".");
+        if (separatorIndex < 0)
+        {
+            return "";
+        }
+        return fileName.substring(separatorIndex + 1).toLowerCase();
+    }
+
+    /**
+     * 鑾峰彇鏂囦欢绫诲瀷
+     * 
+     * @param photoByte 鏂囦欢瀛楄妭鐮�
+     * @return 鍚庣紑锛堜笉鍚�".")
+     */
+    public static String getFileExtendName(byte[] photoByte)
+    {
+        String strFileExtendName = "JPG";
+        if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56)
+                && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97))
+        {
+            strFileExtendName = "GIF";
+        }
+        else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70))
+        {
+            strFileExtendName = "JPG";
+        }
+        else if ((photoByte[0] == 66) && (photoByte[1] == 77))
+        {
+            strFileExtendName = "BMP";
+        }
+        else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71))
+        {
+            strFileExtendName = "PNG";
+        }
+        return strFileExtendName;
+    }
+}
\ No newline at end of file
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/file/FileUploadUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/file/FileUploadUtils.java
new file mode 100644
index 0000000..8b3b95f
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/file/FileUploadUtils.java
@@ -0,0 +1,310 @@
+package com.zhitan.common.utils.file;
+
+import com.zhitan.common.config.BaseConfig;
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.exception.file.FileNameLengthLimitExceededException;
+import com.zhitan.common.exception.file.FileSizeLimitExceededException;
+import com.zhitan.common.exception.file.InvalidExtensionException;
+import com.zhitan.common.utils.DateUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.uuid.Seq;
+import org.apache.commons.io.FilenameUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Paths;
+import java.util.Objects;
+
+/**
+ * 鏂囦欢涓婁紶宸ュ叿绫�
+ *
+ * @author zhitan
+ */
+public class FileUploadUtils
+{
+    /**
+     * 榛樿澶у皬 50M
+     */
+    public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024;
+
+    /**
+     * 榛樿鐨勬枃浠跺悕鏈�澶ч暱搴� 100
+     */
+    public static final int DEFAULT_FILE_NAME_LENGTH = 100;
+
+    /**
+     * 榛樿涓婁紶鐨勫湴鍧�
+     */
+    private static String defaultBaseDir = BaseConfig.getProfile();
+
+    public static void setDefaultBaseDir(String defaultBaseDir)
+    {
+        FileUploadUtils.defaultBaseDir = defaultBaseDir;
+    }
+
+    public static String getDefaultBaseDir()
+    {
+        return defaultBaseDir;
+    }
+
+    /**
+     * 浠ラ粯璁ら厤缃繘琛屾枃浠朵笂浼�
+     *
+     * @param file 涓婁紶鐨勬枃浠�
+     * @return 鏂囦欢鍚嶇О
+     * @throws Exception
+     */
+    public static final String upload(MultipartFile file) throws IOException
+    {
+        try
+        {
+            return upload(getDefaultBaseDir(), file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
+        }
+        catch (Exception e)
+        {
+            throw new IOException(e.getMessage(), e);
+        }
+    }
+
+    /**
+     * 鏍规嵁鏂囦欢璺緞涓婁紶
+     *
+     * @param baseDir 鐩稿搴旂敤鐨勫熀鐩綍
+     * @param file 涓婁紶鐨勬枃浠�
+     * @return 鏂囦欢鍚嶇О
+     * @throws IOException
+     */
+    public static final String upload(String baseDir, MultipartFile file) throws IOException
+    {
+        try
+        {
+            return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
+        }
+        catch (Exception e)
+        {
+            throw new IOException(e.getMessage(), e);
+        }
+    }
+
+    /**
+     * 鏂囦欢涓婁紶
+     *
+     * @param baseDir 鐩稿搴旂敤鐨勫熀鐩綍
+     * @param file 涓婁紶鐨勬枃浠�
+     * @param allowedExtension 涓婁紶鏂囦欢绫诲瀷
+     * @return 杩斿洖涓婁紶鎴愬姛鐨勬枃浠跺悕
+     * @throws FileSizeLimitExceededException 濡傛灉瓒呭嚭鏈�澶уぇ灏�
+     * @throws FileNameLengthLimitExceededException 鏂囦欢鍚嶅お闀�
+     * @throws IOException 姣斿璇诲啓鏂囦欢鍑洪敊鏃�
+     * @throws InvalidExtensionException 鏂囦欢鏍¢獙寮傚父
+     */
+    public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension)
+            throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
+            InvalidExtensionException
+    {
+        int fileNamelength = Objects.requireNonNull(file.getOriginalFilename()).length();
+        if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH)
+        {
+            throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
+        }
+
+        assertAllowed(file, allowedExtension);
+
+        String fileName = extractFilename(file);
+
+        String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath();
+        file.transferTo(Paths.get(absPath));
+        return getPathFileName(baseDir, fileName);
+    }
+
+    /**
+     * 缂栫爜鏂囦欢鍚�
+     */
+    public static final String extractFilename(MultipartFile file)
+    {
+        return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(),
+                FilenameUtils.getBaseName(file.getOriginalFilename()), Seq.getId(Seq.uploadSeqType), getExtension(file));
+    }
+
+    public static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException
+    {
+        File desc = new File(uploadDir + File.separator + fileName);
+
+        if (!desc.exists())
+        {
+            if (!desc.getParentFile().exists())
+            {
+                desc.getParentFile().mkdirs();
+            }
+        }
+        return desc;
+    }
+
+    public static final String getPathFileName(String uploadDir, String fileName) throws IOException
+    {
+        int dirLastIndex = BaseConfig.getProfile().length() + 1;
+        String currentDir = StringUtils.substring(uploadDir, dirLastIndex);
+        return Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName;
+    }
+
+    /**
+     * 鏂囦欢澶у皬鏍¢獙
+     *
+     * @param file 涓婁紶鐨勬枃浠�
+     * @return
+     * @throws FileSizeLimitExceededException 濡傛灉瓒呭嚭鏈�澶уぇ灏�
+     * @throws InvalidExtensionException
+     */
+    public static final void assertAllowed(MultipartFile file, String[] allowedExtension)
+            throws FileSizeLimitExceededException, InvalidExtensionException
+    {
+        long size = file.getSize();
+        if (size > DEFAULT_MAX_SIZE)
+        {
+            throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024);
+        }
+
+        String fileName = file.getOriginalFilename();
+        String extension = getExtension(file);
+        if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension))
+        {
+            if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION)
+            {
+                throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension,
+                        fileName);
+            }
+            else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION)
+            {
+                throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension,
+                        fileName);
+            }
+            else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION)
+            {
+                throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension,
+                        fileName);
+            }
+            else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION)
+            {
+                throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension,
+                        fileName);
+            }
+            else
+            {
+                throw new InvalidExtensionException(allowedExtension, extension, fileName);
+            }
+        }
+    }
+
+    /**
+     * 鍒ゆ柇MIME绫诲瀷鏄惁鏄厑璁哥殑MIME绫诲瀷
+     *
+     * @param extension
+     * @param allowedExtension
+     * @return
+     */
+    public static final boolean isAllowedExtension(String extension, String[] allowedExtension)
+    {
+        for (String str : allowedExtension)
+        {
+            if (str.equalsIgnoreCase(extension))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 鑾峰彇鏂囦欢鍚嶇殑鍚庣紑
+     *
+     * @param file 琛ㄥ崟鏂囦欢
+     * @return 鍚庣紑鍚�
+     */
+    public static final String getExtension(MultipartFile file)
+    {
+        String extension = FilenameUtils.getExtension(file.getOriginalFilename());
+        if (StringUtils.isEmpty(extension))
+        {
+            extension = MimeTypeUtils.getExtension(Objects.requireNonNull(file.getContentType()));
+        }
+        return extension;
+    }
+
+    /**
+     * 鏍规嵁鏂囦欢璺緞涓婁紶浠绘剰鏂囦欢 2020.02.15
+     *
+     * @param baseDir 鐩稿搴旂敤鐨勫熀鐩綍
+     * @param file    涓婁紶鐨勬枃浠�
+     * @return 鏂囦欢鍚嶇О
+     * @throws IOException
+     */
+    public static final String uploadAll(String baseDir, MultipartFile file) throws IOException {
+        try {
+            return uploadAllFile(baseDir, file);
+        } catch (Exception e) {
+            throw new IOException(e.getMessage(), e);
+        }
+    }
+    
+    /**
+     * 浠绘剰鏂囦欢涓婁紶 2020.02.15
+     *
+     * @param baseDir 鐩稿搴旂敤鐨勫熀鐩綍
+     * @param file    涓婁紶鐨勬枃浠�
+     * @return 杩斿洖涓婁紶鎴愬姛鐨勬枃浠跺悕
+     * @throws FileSizeLimitExceededException       濡傛灉瓒呭嚭鏈�澶уぇ灏�
+     * @throws FileNameLengthLimitExceededException 鏂囦欢鍚嶅お闀�
+     * @throws IOException                          姣斿璇诲啓鏂囦欢鍑洪敊鏃�
+     * @throws InvalidExtensionException            鏂囦欢鏍¢獙寮傚父
+     */
+    public static final String uploadAllFile(String baseDir, MultipartFile file)
+            throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
+            InvalidExtensionException {
+        int fileNamelength = file.getOriginalFilename().length();
+        if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) {
+            throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
+        }
+        //妫�娴嬩换鎰忔枃浠剁被鍨嬪ぇ灏忥紝涓嶆娴嬫枃浠剁被鍨�
+        assertAllowedNoExtension(file);
+        //鐢熸垚鏃ユ湡璺緞鐨勬枃浠跺強鏂版枃浠跺懡鍚嶇紪鐮侊紝閬垮厤瑕嗙洊
+        String fileName = extractFilename(file);
+        //妫�娴嬫枃浠惰矾寰勫強鏂囦欢骞跺 娌℃湁鐨勮矾寰勫拰鏂囦欢杩涜寤虹珛
+        getAbsoluteFilePath(baseDir + File.separator + fileName);
+        String saveFilePath = baseDir + File.separator + fileName;
+        File desc = new File(saveFilePath);
+        //灏嗕笂浼犳枃浠跺啓鍏ユ柊鏂囦欢
+        file.transferTo(desc);
+        //杩斿洖鍏ㄨ矾寰�
+        return saveFilePath;
+    }
+
+    /**
+     * 鏂囦欢澶у皬鏍¢獙 涓嶆娴嬬被鍨�
+     *
+     * @param file 涓婁紶鐨勬枃浠�
+     * @return
+     * @throws FileSizeLimitExceededException 濡傛灉瓒呭嚭鏈�澶уぇ灏�
+     */
+    public static final void assertAllowedNoExtension(MultipartFile file)
+            throws FileSizeLimitExceededException {
+        long size = file.getSize();
+        if (DEFAULT_MAX_SIZE != -1 && size > DEFAULT_MAX_SIZE) {
+            throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024);
+        }
+    }
+
+    /**
+     * 鍒ゆ柇璺緞鏄惁瀛樺湪,涓嶅瓨鍦ㄥ垯鏂板缓
+     *
+     * @param uploadDir
+     * @return
+     * @throws IOException
+     */
+    public static final void getAbsoluteFilePath(String uploadDir) throws IOException {
+        File desc = new File(uploadDir);
+        if (!desc.getParentFile().exists()) {
+            desc.getParentFile().mkdirs();
+        }
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/file/FileUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/file/FileUtils.java
new file mode 100644
index 0000000..82e3a04
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/file/FileUtils.java
@@ -0,0 +1,292 @@
+package com.zhitan.common.utils.file;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import com.zhitan.common.config.BaseConfig;
+import com.zhitan.common.utils.uuid.IdUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import com.zhitan.common.utils.DateUtils;
+import com.zhitan.common.utils.StringUtils;
+import org.apache.commons.io.FilenameUtils;
+
+/**
+ * 鏂囦欢澶勭悊宸ュ叿绫�
+ * 
+ * @author zhitan
+ */
+public class FileUtils
+{
+    public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+";
+
+    /**
+     * 杈撳嚭鎸囧畾鏂囦欢鐨刡yte鏁扮粍
+     * 
+     * @param filePath 鏂囦欢璺緞
+     * @param os 杈撳嚭娴�
+     * @return
+     */
+    public static void writeBytes(String filePath, OutputStream os) throws IOException
+    {
+        FileInputStream fis = null;
+        try
+        {
+            File file = new File(filePath);
+            if (!file.exists())
+            {
+                throw new FileNotFoundException(filePath);
+            }
+            fis = new FileInputStream(file);
+            byte[] b = new byte[1024];
+            int length;
+            while ((length = fis.read(b)) > 0)
+            {
+                os.write(b, 0, length);
+            }
+        }
+        catch (IOException e)
+        {
+            throw e;
+        }
+        finally
+        {
+            IOUtils.close(os);
+            IOUtils.close(fis);
+        }
+    }
+
+    /**
+     * 鍐欐暟鎹埌鏂囦欢涓�
+     *
+     * @param data 鏁版嵁
+     * @return 鐩爣鏂囦欢
+     * @throws IOException IO寮傚父
+     */
+    public static String writeImportBytes(byte[] data) throws IOException
+    {
+        return writeBytes(data, BaseConfig.getImportPath());
+    }
+
+    /**
+     * 鍐欐暟鎹埌鏂囦欢涓�
+     *
+     * @param data 鏁版嵁
+     * @param uploadDir 鐩爣鏂囦欢
+     * @return 鐩爣鏂囦欢
+     * @throws IOException IO寮傚父
+     */
+    public static String writeBytes(byte[] data, String uploadDir) throws IOException
+    {
+        FileOutputStream fos = null;
+        String pathName = "";
+        try
+        {
+            String extension = getFileExtendName(data);
+            pathName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension;
+            File file = FileUploadUtils.getAbsoluteFile(uploadDir, pathName);
+            fos = new FileOutputStream(file);
+            fos.write(data);
+        }
+        finally
+        {
+            IOUtils.close(fos);
+        }
+        return FileUploadUtils.getPathFileName(uploadDir, pathName);
+    }
+
+    /**
+     * 鍒犻櫎鏂囦欢
+     * 
+     * @param filePath 鏂囦欢
+     * @return
+     */
+    public static boolean deleteFile(String filePath)
+    {
+        boolean flag = false;
+        File file = new File(filePath);
+        // 璺緞涓烘枃浠朵笖涓嶄负绌哄垯杩涜鍒犻櫎
+        if (file.isFile() && file.exists())
+        {
+            flag = file.delete();
+        }
+        return flag;
+    }
+
+    /**
+     * 鏂囦欢鍚嶇О楠岃瘉
+     * 
+     * @param filename 鏂囦欢鍚嶇О
+     * @return true 姝e父 false 闈炴硶
+     */
+    public static boolean isValidFilename(String filename)
+    {
+        return filename.matches(FILENAME_PATTERN);
+    }
+
+    /**
+     * 妫�鏌ユ枃浠舵槸鍚﹀彲涓嬭浇
+     * 
+     * @param resource 闇�瑕佷笅杞界殑鏂囦欢
+     * @return true 姝e父 false 闈炴硶
+     */
+    public static boolean checkAllowDownload(String resource)
+    {
+        // 绂佹鐩綍涓婅烦绾у埆
+        if (StringUtils.contains(resource, ".."))
+        {
+            return false;
+        }
+
+        // 妫�鏌ュ厑璁镐笅杞界殑鏂囦欢瑙勫垯
+        if (ArrayUtils.contains(MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, FileTypeUtils.getFileType(resource)))
+        {
+            return true;
+        }
+
+        // 涓嶅湪鍏佽涓嬭浇鐨勬枃浠惰鍒�
+        return false;
+    }
+
+    /**
+     * 涓嬭浇鏂囦欢鍚嶉噸鏂扮紪鐮�
+     * 
+     * @param request 璇锋眰瀵硅薄
+     * @param fileName 鏂囦欢鍚�
+     * @return 缂栫爜鍚庣殑鏂囦欢鍚�
+     */
+    public static String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException
+    {
+        final String agent = request.getHeader("USER-AGENT");
+        String filename = fileName;
+        if (agent.contains("MSIE"))
+        {
+            // IE娴忚鍣�
+            filename = URLEncoder.encode(filename, "utf-8");
+            filename = filename.replace("+", " ");
+        }
+        else if (agent.contains("Firefox"))
+        {
+            // 鐏嫄娴忚鍣�
+            filename = new String(fileName.getBytes(), "ISO8859-1");
+        }
+        else if (agent.contains("Chrome"))
+        {
+            // google娴忚鍣�
+            filename = URLEncoder.encode(filename, "utf-8");
+        }
+        else
+        {
+            // 鍏跺畠娴忚鍣�
+            filename = URLEncoder.encode(filename, "utf-8");
+        }
+        return filename;
+    }
+
+    /**
+     * 涓嬭浇鏂囦欢鍚嶉噸鏂扮紪鐮�
+     *
+     * @param response 鍝嶅簲瀵硅薄
+     * @param realFileName 鐪熷疄鏂囦欢鍚�
+     */
+    public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException
+    {
+        String percentEncodedFileName = percentEncode(realFileName);
+
+        StringBuilder contentDispositionValue = new StringBuilder();
+        contentDispositionValue.append("attachment; filename=")
+                .append(percentEncodedFileName)
+                .append(";")
+                .append("filename*=")
+                .append("utf-8''")
+                .append(percentEncodedFileName);
+
+        response.addHeader("Access-Control-Expose-Headers", "Content-Disposition,download-filename");
+        response.setHeader("Content-disposition", contentDispositionValue.toString());
+        response.setHeader("download-filename", percentEncodedFileName);
+    }
+
+    /**
+     * 鐧惧垎鍙风紪鐮佸伐鍏锋柟娉�
+     *
+     * @param s 闇�瑕佺櫨鍒嗗彿缂栫爜鐨勫瓧绗︿覆
+     * @return 鐧惧垎鍙风紪鐮佸悗鐨勫瓧绗︿覆
+     */
+    public static String percentEncode(String s) throws UnsupportedEncodingException
+    {
+        String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString());
+        return encode.replaceAll("\\+", "%20");
+    }
+
+    /**
+     * 鑾峰彇鍥惧儚鍚庣紑
+     * 
+     * @param photoByte 鍥惧儚鏁版嵁
+     * @return 鍚庣紑鍚�
+     */
+    public static String getFileExtendName(byte[] photoByte)
+    {
+        String strFileExtendName = "jpg";
+        if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56)
+                && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97))
+        {
+            strFileExtendName = "gif";
+        }
+        else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70))
+        {
+            strFileExtendName = "jpg";
+        }
+        else if ((photoByte[0] == 66) && (photoByte[1] == 77))
+        {
+            strFileExtendName = "bmp";
+        }
+        else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71))
+        {
+            strFileExtendName = "png";
+        }
+        return strFileExtendName;
+    }
+
+    /**
+     * 鑾峰彇鏂囦欢鍚嶇О /profile/upload/2022/04/16/admin.png -- admin.png
+     * 
+     * @param fileName 璺緞鍚嶇О
+     * @return 娌℃湁鏂囦欢璺緞鐨勫悕绉�
+     */
+    public static String getName(String fileName)
+    {
+        if (fileName == null)
+        {
+            return null;
+        }
+        int lastUnixPos = fileName.lastIndexOf('/');
+        int lastWindowsPos = fileName.lastIndexOf('\\');
+        int index = Math.max(lastUnixPos, lastWindowsPos);
+        return fileName.substring(index + 1);
+    }
+
+    /**
+     * 鑾峰彇涓嶅甫鍚庣紑鏂囦欢鍚嶇О /profile/upload/2022/04/16/admin.png -- admin
+     * 
+     * @param fileName 璺緞鍚嶇О
+     * @return 娌℃湁鏂囦欢璺緞鍜屽悗缂�鐨勫悕绉�
+     */
+    public static String getNameNotSuffix(String fileName)
+    {
+        if (fileName == null)
+        {
+            return null;
+        }
+        String baseName = FilenameUtils.getBaseName(fileName);
+        return baseName;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/file/ImageUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/file/ImageUtils.java
new file mode 100644
index 0000000..74773dd
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/file/ImageUtils.java
@@ -0,0 +1,99 @@
+package com.zhitan.common.utils.file;
+
+import java.io.ByteArrayInputStream;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Arrays;
+
+import com.zhitan.common.config.BaseConfig;
+import com.zhitan.common.constant.Constants;
+import org.apache.poi.util.IOUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 鍥剧墖澶勭悊宸ュ叿绫�
+ *
+ * @author zhitan
+ */
+public class ImageUtils
+{
+    private static final Logger log = LoggerFactory.getLogger(ImageUtils.class);
+
+    public static byte[] getImage(String imagePath)
+    {
+        InputStream is = getFile(imagePath);
+        try
+        {
+            return IOUtils.toByteArray(is);
+        }
+        catch (Exception e)
+        {
+            log.error("鍥剧墖鍔犺浇寮傚父 {}", e);
+            return null;
+        }
+        finally
+        {
+            IOUtils.closeQuietly(is);
+        }
+    }
+
+    public static InputStream getFile(String imagePath)
+    {
+        try
+        {
+            byte[] result = readFile(imagePath);
+            result = Arrays.copyOf(result, result.length);
+            return new ByteArrayInputStream(result);
+        }
+        catch (Exception e)
+        {
+            log.error("鑾峰彇鍥剧墖寮傚父 {}", e);
+        }
+        return null;
+    }
+
+    /**
+     * 璇诲彇鏂囦欢涓哄瓧鑺傛暟鎹�
+     * 
+     * @param url 鍦板潃
+     * @return 瀛楄妭鏁版嵁
+     */
+    public static byte[] readFile(String url)
+    {
+        InputStream in = null;
+        try
+        {
+            if (url.startsWith("http"))
+            {
+                // 缃戠粶鍦板潃
+                URL urlObj = new URL(url);
+                URLConnection urlConnection = urlObj.openConnection();
+                urlConnection.setConnectTimeout(30 * 1000);
+                urlConnection.setReadTimeout(60 * 1000);
+                urlConnection.setDoInput(true);
+                in = urlConnection.getInputStream();
+            }
+            else
+            {
+                // 鏈満鍦板潃
+                String localPath = BaseConfig.getProfile();
+                String downloadPath = localPath + StringUtils.substringAfter(url, Constants.RESOURCE_PREFIX);
+                in = new FileInputStream(downloadPath);
+            }
+            return IOUtils.toByteArray(in);
+        }
+        catch (Exception e)
+        {
+            log.error("鑾峰彇鏂囦欢璺緞寮傚父 {}", e);
+            return null;
+        }
+        finally
+        {
+            IOUtils.closeQuietly(in);
+        }
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/file/MimeTypeUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/file/MimeTypeUtils.java
new file mode 100644
index 0000000..e8a5396
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/file/MimeTypeUtils.java
@@ -0,0 +1,59 @@
+package com.zhitan.common.utils.file;
+
+/**
+ * 濯掍綋绫诲瀷宸ュ叿绫�
+ *
+ * @author zhitan
+ */
+public class MimeTypeUtils
+{
+    public static final String IMAGE_PNG = "image/png";
+
+    public static final String IMAGE_JPG = "image/jpg";
+
+    public static final String IMAGE_JPEG = "image/jpeg";
+
+    public static final String IMAGE_BMP = "image/bmp";
+
+    public static final String IMAGE_GIF = "image/gif";
+
+    public static final String[] IMAGE_EXTENSION = { "bmp", "gif", "jpg", "jpeg", "png" };
+
+    public static final String[] FLASH_EXTENSION = { "swf", "flv" };
+
+    public static final String[] MEDIA_EXTENSION = { "swf", "flv", "mp3", "wav", "wma", "wmv", "mid", "avi", "mpg",
+            "asf", "rm", "rmvb" };
+
+    public static final String[] VIDEO_EXTENSION = { "mp4", "avi", "rmvb" };
+
+    public static final String[] DEFAULT_ALLOWED_EXTENSION = {
+            // 鍥剧墖
+            "bmp", "gif", "jpg", "jpeg", "png","svg",
+            // word excel powerpoint
+            "doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt",
+            // 鍘嬬缉鏂囦欢
+            "rar", "zip", "gz", "bz2",
+            // 瑙嗛鏍煎紡
+            "mp4", "avi", "rmvb",
+            // pdf
+            "pdf" };
+
+    public static String getExtension(String prefix)
+    {
+        switch (prefix)
+        {
+            case IMAGE_PNG:
+                return "png";
+            case IMAGE_JPG:
+                return "jpg";
+            case IMAGE_JPEG:
+                return "jpeg";
+            case IMAGE_BMP:
+                return "bmp";
+            case IMAGE_GIF:
+                return "gif";
+            default:
+                return "";
+        }
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/html/EscapeUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/html/EscapeUtil.java
new file mode 100644
index 0000000..ee7ee94
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/html/EscapeUtil.java
@@ -0,0 +1,167 @@
+package com.zhitan.common.utils.html;
+
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 杞箟鍜屽弽杞箟宸ュ叿绫�
+ * 
+ * @author zhitan
+ */
+public class EscapeUtil
+{
+    public static final String RE_HTML_MARK = "(<[^<]*?>)|(<[\\s]*?/[^<]*?>)|(<[^<]*?/[\\s]*?>)";
+
+    private static final char[][] TEXT = new char[64][];
+
+    static
+    {
+        for (int i = 0; i < 64; i++)
+        {
+            TEXT[i] = new char[] { (char) i };
+        }
+
+        // special HTML characters
+        TEXT['\''] = "&#039;".toCharArray(); // 鍗曞紩鍙�
+        TEXT['"'] = "&#34;".toCharArray(); // 鍙屽紩鍙�
+        TEXT['&'] = "&#38;".toCharArray(); // &绗�
+        TEXT['<'] = "&#60;".toCharArray(); // 灏忎簬鍙�
+        TEXT['>'] = "&#62;".toCharArray(); // 澶т簬鍙�
+    }
+
+    /**
+     * 杞箟鏂囨湰涓殑HTML瀛楃涓哄畨鍏ㄧ殑瀛楃
+     * 
+     * @param text 琚浆涔夌殑鏂囨湰
+     * @return 杞箟鍚庣殑鏂囨湰
+     */
+    public static String escape(String text)
+    {
+        return encode(text);
+    }
+
+    /**
+     * 杩樺師琚浆涔夌殑HTML鐗规畩瀛楃
+     * 
+     * @param content 鍖呭惈杞箟绗︾殑HTML鍐呭
+     * @return 杞崲鍚庣殑瀛楃涓�
+     */
+    public static String unescape(String content)
+    {
+        return decode(content);
+    }
+
+    /**
+     * 娓呴櫎鎵�鏈塇TML鏍囩锛屼絾鏄笉鍒犻櫎鏍囩鍐呯殑鍐呭
+     * 
+     * @param content 鏂囨湰
+     * @return 娓呴櫎鏍囩鍚庣殑鏂囨湰
+     */
+    public static String clean(String content)
+    {
+        return new HTMLFilter().filter(content);
+    }
+
+    /**
+     * Escape缂栫爜
+     * 
+     * @param text 琚紪鐮佺殑鏂囨湰
+     * @return 缂栫爜鍚庣殑瀛楃
+     */
+    private static String encode(String text)
+    {
+        if (StringUtils.isEmpty(text))
+        {
+            return StringUtils.EMPTY;
+        }
+
+        final StringBuilder tmp = new StringBuilder(text.length() * 6);
+        char c;
+        for (int i = 0; i < text.length(); i++)
+        {
+            c = text.charAt(i);
+            if (c < 256)
+            {
+                tmp.append("%");
+                if (c < 16)
+                {
+                    tmp.append("0");
+                }
+                tmp.append(Integer.toString(c, 16));
+            }
+            else
+            {
+                tmp.append("%u");
+                if (c <= 0xfff)
+                {
+                    // issue#I49JU8@Gitee
+                    tmp.append("0");
+                }
+                tmp.append(Integer.toString(c, 16));
+            }
+        }
+        return tmp.toString();
+    }
+
+    /**
+     * Escape瑙g爜
+     * 
+     * @param content 琚浆涔夌殑鍐呭
+     * @return 瑙g爜鍚庣殑瀛楃涓�
+     */
+    public static String decode(String content)
+    {
+        if (StringUtils.isEmpty(content))
+        {
+            return content;
+        }
+
+        StringBuilder tmp = new StringBuilder(content.length());
+        int lastPos = 0, pos = 0;
+        char ch;
+        while (lastPos < content.length())
+        {
+            pos = content.indexOf("%", lastPos);
+            if (pos == lastPos)
+            {
+                if (content.charAt(pos + 1) == 'u')
+                {
+                    ch = (char) Integer.parseInt(content.substring(pos + 2, pos + 6), 16);
+                    tmp.append(ch);
+                    lastPos = pos + 6;
+                }
+                else
+                {
+                    ch = (char) Integer.parseInt(content.substring(pos + 1, pos + 3), 16);
+                    tmp.append(ch);
+                    lastPos = pos + 3;
+                }
+            }
+            else
+            {
+                if (pos == -1)
+                {
+                    tmp.append(content.substring(lastPos));
+                    lastPos = content.length();
+                }
+                else
+                {
+                    tmp.append(content.substring(lastPos, pos));
+                    lastPos = pos;
+                }
+            }
+        }
+        return tmp.toString();
+    }
+
+    public static void main(String[] args)
+    {
+        String html = "<script>alert(1);</script>";
+        String escape = EscapeUtil.escape(html);
+        // String html = "<scr<script>ipt>alert(\"XSS\")</scr<script>ipt>";
+        // String html = "<123";
+        // String html = "123>";
+        System.out.println("clean: " + EscapeUtil.clean(html));
+        System.out.println("escape: " + escape);
+        System.out.println("unescape: " + EscapeUtil.unescape(escape));
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/html/HTMLFilter.java b/zhitan-common/src/main/java/com/zhitan/common/utils/html/HTMLFilter.java
new file mode 100644
index 0000000..2092c4f
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/html/HTMLFilter.java
@@ -0,0 +1,570 @@
+package com.zhitan.common.utils.html;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * HTML杩囨护鍣紝鐢ㄤ簬鍘婚櫎XSS婕忔礊闅愭偅銆�
+ *
+ * @author zhitan
+ */
+public final class HTMLFilter
+{
+    /**
+     * regex flag union representing /si modifiers in php
+     **/
+    private static final int REGEX_FLAGS_SI = Pattern.CASE_INSENSITIVE | Pattern.DOTALL;
+    private static final Pattern P_COMMENTS = Pattern.compile("<!--(.*?)-->", Pattern.DOTALL);
+    private static final Pattern P_COMMENT = Pattern.compile("^!--(.*)--$", REGEX_FLAGS_SI);
+    private static final Pattern P_TAGS = Pattern.compile("<(.*?)>", Pattern.DOTALL);
+    private static final Pattern P_END_TAG = Pattern.compile("^/([a-z0-9]+)", REGEX_FLAGS_SI);
+    private static final Pattern P_START_TAG = Pattern.compile("^([a-z0-9]+)(.*?)(/?)$", REGEX_FLAGS_SI);
+    private static final Pattern P_QUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)=([\"'])(.*?)\\2", REGEX_FLAGS_SI);
+    private static final Pattern P_UNQUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)(=)([^\"\\s']+)", REGEX_FLAGS_SI);
+    private static final Pattern P_PROTOCOL = Pattern.compile("^([^:]+):", REGEX_FLAGS_SI);
+    private static final Pattern P_ENTITY = Pattern.compile("&#(\\d+);?");
+    private static final Pattern P_ENTITY_UNICODE = Pattern.compile("&#x([0-9a-f]+);?");
+    private static final Pattern P_ENCODE = Pattern.compile("%([0-9a-f]{2});?");
+    private static final Pattern P_VALID_ENTITIES = Pattern.compile("&([^&;]*)(?=(;|&|$))");
+    private static final Pattern P_VALID_QUOTES = Pattern.compile("(>|^)([^<]+?)(<|$)", Pattern.DOTALL);
+    private static final Pattern P_END_ARROW = Pattern.compile("^>");
+    private static final Pattern P_BODY_TO_END = Pattern.compile("<([^>]*?)(?=<|$)");
+    private static final Pattern P_XML_CONTENT = Pattern.compile("(^|>)([^<]*?)(?=>)");
+    private static final Pattern P_STRAY_LEFT_ARROW = Pattern.compile("<([^>]*?)(?=<|$)");
+    private static final Pattern P_STRAY_RIGHT_ARROW = Pattern.compile("(^|>)([^<]*?)(?=>)");
+    private static final Pattern P_AMP = Pattern.compile("&");
+    private static final Pattern P_QUOTE = Pattern.compile("\"");
+    private static final Pattern P_LEFT_ARROW = Pattern.compile("<");
+    private static final Pattern P_RIGHT_ARROW = Pattern.compile(">");
+    private static final Pattern P_BOTH_ARROWS = Pattern.compile("<>");
+
+    // @xxx could grow large... maybe use sesat's ReferenceMap
+    private static final ConcurrentMap<String, Pattern> P_REMOVE_PAIR_BLANKS = new ConcurrentHashMap<>();
+    private static final ConcurrentMap<String, Pattern> P_REMOVE_SELF_BLANKS = new ConcurrentHashMap<>();
+
+    /**
+     * set of allowed html elements, along with allowed attributes for each element
+     **/
+    private final Map<String, List<String>> vAllowed;
+    /**
+     * counts of open tags for each (allowable) html element
+     **/
+    private final Map<String, Integer> vTagCounts = new HashMap<>();
+
+    /**
+     * html elements which must always be self-closing (e.g. "<img />")
+     **/
+    private final String[] vSelfClosingTags;
+    /**
+     * html elements which must always have separate opening and closing tags (e.g. "<b></b>")
+     **/
+    private final String[] vNeedClosingTags;
+    /**
+     * set of disallowed html elements
+     **/
+    private final String[] vDisallowed;
+    /**
+     * attributes which should be checked for valid protocols
+     **/
+    private final String[] vProtocolAtts;
+    /**
+     * allowed protocols
+     **/
+    private final String[] vAllowedProtocols;
+    /**
+     * tags which should be removed if they contain no content (e.g. "<b></b>" or "<b />")
+     **/
+    private final String[] vRemoveBlanks;
+    /**
+     * entities allowed within html markup
+     **/
+    private final String[] vAllowedEntities;
+    /**
+     * flag determining whether comments are allowed in input String.
+     */
+    private final boolean stripComment;
+    private final boolean encodeQuotes;
+    /**
+     * flag determining whether to try to make tags when presented with "unbalanced" angle brackets (e.g. "<b text </b>"
+     * becomes "<b> text </b>"). If set to false, unbalanced angle brackets will be html escaped.
+     */
+    private final boolean alwaysMakeTags;
+
+    /**
+     * Default constructor.
+     */
+    public HTMLFilter()
+    {
+        vAllowed = new HashMap<>();
+
+        final ArrayList<String> a_atts = new ArrayList<>();
+        a_atts.add("href");
+        a_atts.add("target");
+        vAllowed.put("a", a_atts);
+
+        final ArrayList<String> img_atts = new ArrayList<>();
+        img_atts.add("src");
+        img_atts.add("width");
+        img_atts.add("height");
+        img_atts.add("alt");
+        vAllowed.put("img", img_atts);
+
+        final ArrayList<String> no_atts = new ArrayList<>();
+        vAllowed.put("b", no_atts);
+        vAllowed.put("strong", no_atts);
+        vAllowed.put("i", no_atts);
+        vAllowed.put("em", no_atts);
+
+        vSelfClosingTags = new String[] { "img" };
+        vNeedClosingTags = new String[] { "a", "b", "strong", "i", "em" };
+        vDisallowed = new String[] {};
+        vAllowedProtocols = new String[] { "http", "mailto", "https" }; // no ftp.
+        vProtocolAtts = new String[] { "src", "href" };
+        vRemoveBlanks = new String[] { "a", "b", "strong", "i", "em" };
+        vAllowedEntities = new String[] { "amp", "gt", "lt", "quot" };
+        stripComment = true;
+        encodeQuotes = true;
+        alwaysMakeTags = false;
+    }
+
+    /**
+     * Map-parameter configurable constructor.
+     *
+     * @param conf map containing configuration. keys match field names.
+     */
+    @SuppressWarnings("unchecked")
+    public HTMLFilter(final Map<String, Object> conf)
+    {
+
+        assert conf.containsKey("vAllowed") : "configuration requires vAllowed";
+        assert conf.containsKey("vSelfClosingTags") : "configuration requires vSelfClosingTags";
+        assert conf.containsKey("vNeedClosingTags") : "configuration requires vNeedClosingTags";
+        assert conf.containsKey("vDisallowed") : "configuration requires vDisallowed";
+        assert conf.containsKey("vAllowedProtocols") : "configuration requires vAllowedProtocols";
+        assert conf.containsKey("vProtocolAtts") : "configuration requires vProtocolAtts";
+        assert conf.containsKey("vRemoveBlanks") : "configuration requires vRemoveBlanks";
+        assert conf.containsKey("vAllowedEntities") : "configuration requires vAllowedEntities";
+
+        vAllowed = Collections.unmodifiableMap((HashMap<String, List<String>>) conf.get("vAllowed"));
+        vSelfClosingTags = (String[]) conf.get("vSelfClosingTags");
+        vNeedClosingTags = (String[]) conf.get("vNeedClosingTags");
+        vDisallowed = (String[]) conf.get("vDisallowed");
+        vAllowedProtocols = (String[]) conf.get("vAllowedProtocols");
+        vProtocolAtts = (String[]) conf.get("vProtocolAtts");
+        vRemoveBlanks = (String[]) conf.get("vRemoveBlanks");
+        vAllowedEntities = (String[]) conf.get("vAllowedEntities");
+        stripComment = conf.containsKey("stripComment") ? (Boolean) conf.get("stripComment") : true;
+        encodeQuotes = conf.containsKey("encodeQuotes") ? (Boolean) conf.get("encodeQuotes") : true;
+        alwaysMakeTags = conf.containsKey("alwaysMakeTags") ? (Boolean) conf.get("alwaysMakeTags") : true;
+    }
+
+    private void reset()
+    {
+        vTagCounts.clear();
+    }
+
+    // ---------------------------------------------------------------
+    // my versions of some PHP library functions
+    public static String chr(final int decimal)
+    {
+        return String.valueOf((char) decimal);
+    }
+
+    public static String htmlSpecialChars(final String s)
+    {
+        String result = s;
+        result = regexReplace(P_AMP, "&amp;", result);
+        result = regexReplace(P_QUOTE, "&quot;", result);
+        result = regexReplace(P_LEFT_ARROW, "&lt;", result);
+        result = regexReplace(P_RIGHT_ARROW, "&gt;", result);
+        return result;
+    }
+
+    // ---------------------------------------------------------------
+
+    /**
+     * given a user submitted input String, filter out any invalid or restricted html.
+     *
+     * @param input text (i.e. submitted by a user) than may contain html
+     * @return "clean" version of input, with only valid, whitelisted html elements allowed
+     */
+    public String filter(final String input)
+    {
+        reset();
+        String s = input;
+
+        s = escapeComments(s);
+
+        s = balanceHTML(s);
+
+        s = checkTags(s);
+
+        s = processRemoveBlanks(s);
+
+        // s = validateEntities(s);
+
+        return s;
+    }
+
+    public boolean isAlwaysMakeTags()
+    {
+        return alwaysMakeTags;
+    }
+
+    public boolean isStripComments()
+    {
+        return stripComment;
+    }
+
+    private String escapeComments(final String s)
+    {
+        final Matcher m = P_COMMENTS.matcher(s);
+        final StringBuffer buf = new StringBuffer();
+        if (m.find())
+        {
+            final String match = m.group(1); // (.*?)
+            m.appendReplacement(buf, Matcher.quoteReplacement("<!--" + htmlSpecialChars(match) + "-->"));
+        }
+        m.appendTail(buf);
+
+        return buf.toString();
+    }
+
+    private String balanceHTML(String s)
+    {
+        if (alwaysMakeTags)
+        {
+            //
+            // try and form html
+            //
+            s = regexReplace(P_END_ARROW, "", s);
+            // 涓嶈拷鍔犵粨鏉熸爣绛�
+            s = regexReplace(P_BODY_TO_END, "<$1>", s);
+            s = regexReplace(P_XML_CONTENT, "$1<$2", s);
+
+        }
+        else
+        {
+            //
+            // escape stray brackets
+            //
+            s = regexReplace(P_STRAY_LEFT_ARROW, "&lt;$1", s);
+            s = regexReplace(P_STRAY_RIGHT_ARROW, "$1$2&gt;<", s);
+
+            //
+            // the last regexp causes '<>' entities to appear
+            // (we need to do a lookahead assertion so that the last bracket can
+            // be used in the next pass of the regexp)
+            //
+            s = regexReplace(P_BOTH_ARROWS, "", s);
+        }
+
+        return s;
+    }
+
+    private String checkTags(String s)
+    {
+        Matcher m = P_TAGS.matcher(s);
+
+        final StringBuffer buf = new StringBuffer();
+        while (m.find())
+        {
+            String replaceStr = m.group(1);
+            replaceStr = processTag(replaceStr);
+            m.appendReplacement(buf, Matcher.quoteReplacement(replaceStr));
+        }
+        m.appendTail(buf);
+
+        // these get tallied in processTag
+        // (remember to reset before subsequent calls to filter method)
+        final StringBuilder sBuilder = new StringBuilder(buf.toString());
+        for (String key : vTagCounts.keySet())
+        {
+            for (int ii = 0; ii < vTagCounts.get(key); ii++)
+            {
+                sBuilder.append("</").append(key).append(">");
+            }
+        }
+        s = sBuilder.toString();
+
+        return s;
+    }
+
+    private String processRemoveBlanks(final String s)
+    {
+        String result = s;
+        for (String tag : vRemoveBlanks)
+        {
+            if (!P_REMOVE_PAIR_BLANKS.containsKey(tag))
+            {
+                P_REMOVE_PAIR_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?></" + tag + ">"));
+            }
+            result = regexReplace(P_REMOVE_PAIR_BLANKS.get(tag), "", result);
+            if (!P_REMOVE_SELF_BLANKS.containsKey(tag))
+            {
+                P_REMOVE_SELF_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?/>"));
+            }
+            result = regexReplace(P_REMOVE_SELF_BLANKS.get(tag), "", result);
+        }
+
+        return result;
+    }
+
+    private static String regexReplace(final Pattern regex_pattern, final String replacement, final String s)
+    {
+        Matcher m = regex_pattern.matcher(s);
+        return m.replaceAll(replacement);
+    }
+
+    private String processTag(final String s)
+    {
+        // ending tags
+        Matcher m = P_END_TAG.matcher(s);
+        if (m.find())
+        {
+            final String name = m.group(1).toLowerCase();
+            if (allowed(name))
+            {
+                if (!inArray(name, vSelfClosingTags))
+                {
+                    if (vTagCounts.containsKey(name))
+                    {
+                        vTagCounts.put(name, vTagCounts.get(name) - 1);
+                        return "</" + name + ">";
+                    }
+                }
+            }
+        }
+
+        // starting tags
+        m = P_START_TAG.matcher(s);
+        if (m.find())
+        {
+            final String name = m.group(1).toLowerCase();
+            final String body = m.group(2);
+            String ending = m.group(3);
+
+            // debug( "in a starting tag, name='" + name + "'; body='" + body + "'; ending='" + ending + "'" );
+            if (allowed(name))
+            {
+                final StringBuilder params = new StringBuilder();
+
+                final Matcher m2 = P_QUOTED_ATTRIBUTES.matcher(body);
+                final Matcher m3 = P_UNQUOTED_ATTRIBUTES.matcher(body);
+                final List<String> paramNames = new ArrayList<>();
+                final List<String> paramValues = new ArrayList<>();
+                while (m2.find())
+                {
+                    paramNames.add(m2.group(1)); // ([a-z0-9]+)
+                    paramValues.add(m2.group(3)); // (.*?)
+                }
+                while (m3.find())
+                {
+                    paramNames.add(m3.group(1)); // ([a-z0-9]+)
+                    paramValues.add(m3.group(3)); // ([^\"\\s']+)
+                }
+
+                String paramName, paramValue;
+                for (int ii = 0; ii < paramNames.size(); ii++)
+                {
+                    paramName = paramNames.get(ii).toLowerCase();
+                    paramValue = paramValues.get(ii);
+
+                    // debug( "paramName='" + paramName + "'" );
+                    // debug( "paramValue='" + paramValue + "'" );
+                    // debug( "allowed? " + vAllowed.get( name ).contains( paramName ) );
+
+                    if (allowedAttribute(name, paramName))
+                    {
+                        if (inArray(paramName, vProtocolAtts))
+                        {
+                            paramValue = processParamProtocol(paramValue);
+                        }
+                        params.append(' ').append(paramName).append("=\\\"").append(paramValue).append("\\\"");
+                    }
+                }
+
+                if (inArray(name, vSelfClosingTags))
+                {
+                    ending = " /";
+                }
+
+                if (inArray(name, vNeedClosingTags))
+                {
+                    ending = "";
+                }
+
+                if (ending == null || ending.length() < 1)
+                {
+                    if (vTagCounts.containsKey(name))
+                    {
+                        vTagCounts.put(name, vTagCounts.get(name) + 1);
+                    }
+                    else
+                    {
+                        vTagCounts.put(name, 1);
+                    }
+                }
+                else
+                {
+                    ending = " /";
+                }
+                return "<" + name + params + ending + ">";
+            }
+            else
+            {
+                return "";
+            }
+        }
+
+        // comments
+        m = P_COMMENT.matcher(s);
+        if (!stripComment && m.find())
+        {
+            return "<" + m.group() + ">";
+        }
+
+        return "";
+    }
+
+    private String processParamProtocol(String s)
+    {
+        s = decodeEntities(s);
+        final Matcher m = P_PROTOCOL.matcher(s);
+        if (m.find())
+        {
+            final String protocol = m.group(1);
+            if (!inArray(protocol, vAllowedProtocols))
+            {
+                // bad protocol, turn into local anchor link instead
+                s = "#" + s.substring(protocol.length() + 1);
+                if (s.startsWith("#//"))
+                {
+                    s = "#" + s.substring(3);
+                }
+            }
+        }
+
+        return s;
+    }
+
+    private String decodeEntities(String s)
+    {
+        StringBuffer buf = new StringBuffer();
+
+        Matcher m = P_ENTITY.matcher(s);
+        while (m.find())
+        {
+            final String match = m.group(1);
+            final int decimal = Integer.decode(match).intValue();
+            m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal)));
+        }
+        m.appendTail(buf);
+        s = buf.toString();
+
+        buf = new StringBuffer();
+        m = P_ENTITY_UNICODE.matcher(s);
+        while (m.find())
+        {
+            final String match = m.group(1);
+            final int decimal = Integer.valueOf(match, 16).intValue();
+            m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal)));
+        }
+        m.appendTail(buf);
+        s = buf.toString();
+
+        buf = new StringBuffer();
+        m = P_ENCODE.matcher(s);
+        while (m.find())
+        {
+            final String match = m.group(1);
+            final int decimal = Integer.valueOf(match, 16).intValue();
+            m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal)));
+        }
+        m.appendTail(buf);
+        s = buf.toString();
+
+        s = validateEntities(s);
+        return s;
+    }
+
+    private String validateEntities(final String s)
+    {
+        StringBuffer buf = new StringBuffer();
+
+        // validate entities throughout the string
+        Matcher m = P_VALID_ENTITIES.matcher(s);
+        while (m.find())
+        {
+            final String one = m.group(1); // ([^&;]*)
+            final String two = m.group(2); // (?=(;|&|$))
+            m.appendReplacement(buf, Matcher.quoteReplacement(checkEntity(one, two)));
+        }
+        m.appendTail(buf);
+
+        return encodeQuotes(buf.toString());
+    }
+
+    private String encodeQuotes(final String s)
+    {
+        if (encodeQuotes)
+        {
+            StringBuffer buf = new StringBuffer();
+            Matcher m = P_VALID_QUOTES.matcher(s);
+            while (m.find())
+            {
+                final String one = m.group(1); // (>|^)
+                final String two = m.group(2); // ([^<]+?)
+                final String three = m.group(3); // (<|$)
+                // 涓嶆浛鎹㈠弻寮曞彿涓�&quot;锛岄槻姝son鏍煎紡鏃犳晥 regexReplace(P_QUOTE, "&quot;", two)
+                m.appendReplacement(buf, Matcher.quoteReplacement(one + two + three));
+            }
+            m.appendTail(buf);
+            return buf.toString();
+        }
+        else
+        {
+            return s;
+        }
+    }
+
+    private String checkEntity(final String preamble, final String term)
+    {
+
+        return ";".equals(term) && isValidEntity(preamble) ? '&' + preamble : "&amp;" + preamble;
+    }
+
+    private boolean isValidEntity(final String entity)
+    {
+        return inArray(entity, vAllowedEntities);
+    }
+
+    private static boolean inArray(final String s, final String[] array)
+    {
+        for (String item : array)
+        {
+            if (item != null && item.equals(s))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean allowed(final String name)
+    {
+        return (vAllowed.isEmpty() || vAllowed.containsKey(name)) && !inArray(name, vDisallowed);
+    }
+
+    private boolean allowedAttribute(final String name, final String paramName)
+    {
+        return allowed(name) && (vAllowed.isEmpty() || vAllowed.get(name).contains(paramName));
+    }
+}
\ No newline at end of file
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/http/HttpHelper.java b/zhitan-common/src/main/java/com/zhitan/common/utils/http/HttpHelper.java
new file mode 100644
index 0000000..9f3564d
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/http/HttpHelper.java
@@ -0,0 +1,55 @@
+package com.zhitan.common.utils.http;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import javax.servlet.ServletRequest;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 閫氱敤http宸ュ叿灏佽
+ * 
+ * @author zhitan
+ */
+public class HttpHelper
+{
+    private static final Logger LOGGER = LoggerFactory.getLogger(HttpHelper.class);
+
+    public static String getBodyString(ServletRequest request)
+    {
+        StringBuilder sb = new StringBuilder();
+        BufferedReader reader = null;
+        try (InputStream inputStream = request.getInputStream())
+        {
+            reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
+            String line = "";
+            while ((line = reader.readLine()) != null)
+            {
+                sb.append(line);
+            }
+        }
+        catch (IOException e)
+        {
+            LOGGER.warn("getBodyString鍑虹幇闂锛�");
+        }
+        finally
+        {
+            if (reader != null)
+            {
+                try
+                {
+                    reader.close();
+                }
+                catch (IOException e)
+                {
+                    LOGGER.error(ExceptionUtils.getMessage(e));
+                }
+            }
+        }
+        return sb.toString();
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/http/HttpUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/http/HttpUtils.java
new file mode 100644
index 0000000..c6a2944
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/http/HttpUtils.java
@@ -0,0 +1,275 @@
+package com.zhitan.common.utils.http;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.ConnectException;
+import java.net.SocketTimeoutException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.StandardCharsets;
+import java.security.cert.X509Certificate;
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+import com.zhitan.common.constant.Constants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 閫氱敤http鍙戦�佹柟娉�
+ * 
+ * @author zhitan
+ */
+public class HttpUtils
+{
+    private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);
+
+    /**
+     * 鍚戞寚瀹� URL 鍙戦�丟ET鏂规硶鐨勮姹�
+     *
+     * @param url 鍙戦�佽姹傜殑 URL
+     * @return 鎵�浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋�
+     */
+    public static String sendGet(String url)
+    {
+        return sendGet(url, StringUtils.EMPTY);
+    }
+
+    /**
+     * 鍚戞寚瀹� URL 鍙戦�丟ET鏂规硶鐨勮姹�
+     *
+     * @param url 鍙戦�佽姹傜殑 URL
+     * @param param 璇锋眰鍙傛暟锛岃姹傚弬鏁板簲璇ユ槸 name1=value1&name2=value2 鐨勫舰寮忋��
+     * @return 鎵�浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋�
+     */
+    public static String sendGet(String url, String param)
+    {
+        return sendGet(url, param, Constants.UTF8);
+    }
+
+    /**
+     * 鍚戞寚瀹� URL 鍙戦�丟ET鏂规硶鐨勮姹�
+     *
+     * @param url 鍙戦�佽姹傜殑 URL
+     * @param param 璇锋眰鍙傛暟锛岃姹傚弬鏁板簲璇ユ槸 name1=value1&name2=value2 鐨勫舰寮忋��
+     * @param contentType 缂栫爜绫诲瀷
+     * @return 鎵�浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋�
+     */
+    public static String sendGet(String url, String param, String contentType)
+    {
+        StringBuilder result = new StringBuilder();
+        BufferedReader in = null;
+        try
+        {
+            String urlNameString = StringUtils.isNotBlank(param) ? url + "?" + param : url;
+            log.info("sendGet - {}", urlNameString);
+            URL realUrl = new URL(urlNameString);
+            URLConnection connection = realUrl.openConnection();
+            connection.setRequestProperty("accept", "*/*");
+            connection.setRequestProperty("connection", "Keep-Alive");
+            connection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
+            connection.connect();
+            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType));
+            String line;
+            while ((line = in.readLine()) != null)
+            {
+                result.append(line);
+            }
+            log.info("recv - {}", result);
+        }
+        catch (ConnectException e)
+        {
+            log.error("璋冪敤HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("璋冪敤HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("璋冪敤HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("璋冪敤HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e);
+        }
+        finally
+        {
+            try
+            {
+                if (in != null)
+                {
+                    in.close();
+                }
+            }
+            catch (Exception ex)
+            {
+                log.error("璋冪敤in.close Exception, url=" + url + ",param=" + param, ex);
+            }
+        }
+        return result.toString();
+    }
+
+    /**
+     * 鍚戞寚瀹� URL 鍙戦�丳OST鏂规硶鐨勮姹�
+     *
+     * @param url 鍙戦�佽姹傜殑 URL
+     * @param param 璇锋眰鍙傛暟锛岃姹傚弬鏁板簲璇ユ槸 name1=value1&name2=value2 鐨勫舰寮忋��
+     * @return 鎵�浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋�
+     */
+    public static String sendPost(String url, String param)
+    {
+        PrintWriter out = null;
+        BufferedReader in = null;
+        StringBuilder result = new StringBuilder();
+        try
+        {
+            log.info("sendPost - {}", url);
+            URL realUrl = new URL(url);
+            URLConnection conn = realUrl.openConnection();
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
+            conn.setRequestProperty("Accept-Charset", "utf-8");
+            conn.setRequestProperty("contentType", "utf-8");
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            out = new PrintWriter(conn.getOutputStream());
+            out.print(param);
+            out.flush();
+            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
+            String line;
+            while ((line = in.readLine()) != null)
+            {
+                result.append(line);
+            }
+            log.info("recv - {}", result);
+        }
+        catch (ConnectException e)
+        {
+            log.error("璋冪敤HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("璋冪敤HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("璋冪敤HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("璋冪敤HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
+        }
+        finally
+        {
+            try
+            {
+                if (out != null)
+                {
+                    out.close();
+                }
+                if (in != null)
+                {
+                    in.close();
+                }
+            }
+            catch (IOException ex)
+            {
+                log.error("璋冪敤in.close Exception, url=" + url + ",param=" + param, ex);
+            }
+        }
+        return result.toString();
+    }
+
+    public static String sendSSLPost(String url, String param)
+    {
+        StringBuilder result = new StringBuilder();
+        String urlNameString = url + "?" + param;
+        try
+        {
+            log.info("sendSSLPost - {}", urlNameString);
+            SSLContext sc = SSLContext.getInstance("SSL");
+            sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
+            URL console = new URL(urlNameString);
+            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
+            conn.setRequestProperty("Accept-Charset", "utf-8");
+            conn.setRequestProperty("contentType", "utf-8");
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+
+            conn.setSSLSocketFactory(sc.getSocketFactory());
+            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
+            conn.connect();
+            InputStream is = conn.getInputStream();
+            BufferedReader br = new BufferedReader(new InputStreamReader(is));
+            String ret = "";
+            while ((ret = br.readLine()) != null)
+            {
+                if (ret != null && !"".equals(ret.trim()))
+                {
+                    result.append(new String(ret.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8));
+                }
+            }
+            log.info("recv - {}", result);
+            conn.disconnect();
+            br.close();
+        }
+        catch (ConnectException e)
+        {
+            log.error("璋冪敤HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("璋冪敤HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("璋冪敤HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("璋冪敤HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
+        }
+        return result.toString();
+    }
+
+    private static class TrustAnyTrustManager implements X509TrustManager
+    {
+        @Override
+        public void checkClientTrusted(X509Certificate[] chain, String authType)
+        {
+        }
+
+        @Override
+        public void checkServerTrusted(X509Certificate[] chain, String authType)
+        {
+        }
+
+        @Override
+        public X509Certificate[] getAcceptedIssuers()
+        {
+            return new X509Certificate[] {};
+        }
+    }
+
+    private static class TrustAnyHostnameVerifier implements HostnameVerifier
+    {
+        @Override
+        public boolean verify(String hostname, SSLSession session)
+        {
+            return true;
+        }
+    }
+}
\ No newline at end of file
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/ip/AddressUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/ip/AddressUtils.java
new file mode 100644
index 0000000..e1b1381
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/ip/AddressUtils.java
@@ -0,0 +1,56 @@
+package com.zhitan.common.utils.ip;
+
+import com.zhitan.common.config.BaseConfig;
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.utils.http.HttpUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 鑾峰彇鍦板潃绫�
+ * 
+ * @author zhitan
+ */
+public class AddressUtils
+{
+    private static final Logger log = LoggerFactory.getLogger(AddressUtils.class);
+
+    // IP鍦板潃鏌ヨ
+    public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp";
+
+    // 鏈煡鍦板潃
+    public static final String UNKNOWN = "XX XX";
+
+    public static String getRealAddressByIP(String ip)
+    {
+        // 鍐呯綉涓嶆煡璇�
+        if (IpUtils.internalIp(ip))
+        {
+            return "鍐呯綉IP";
+        }
+        if (BaseConfig.isAddressEnabled())
+        {
+            try
+            {
+                String rspStr = HttpUtils.sendGet(IP_URL, "ip=" + ip + "&json=true", Constants.GBK);
+                if (StringUtils.isEmpty(rspStr))
+                {
+                    log.error("鑾峰彇鍦扮悊浣嶇疆寮傚父 {}", ip);
+                    return UNKNOWN;
+                }
+                JSONObject obj = JSON.parseObject(rspStr);
+                String region = obj.getString("pro");
+                String city = obj.getString("city");
+                return String.format("%s %s", region, city);
+            }
+            catch (Exception e)
+            {
+                log.error("鑾峰彇鍦扮悊浣嶇疆寮傚父 {}", ip);
+            }
+        }
+        return UNKNOWN;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/ip/IpUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/ip/IpUtils.java
new file mode 100644
index 0000000..4507d99
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/ip/IpUtils.java
@@ -0,0 +1,382 @@
+package com.zhitan.common.utils.ip;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import javax.servlet.http.HttpServletRequest;
+import com.zhitan.common.utils.ServletUtils;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 鑾峰彇IP鏂规硶
+ * 
+ * @author zhitan
+ */
+public class IpUtils
+{
+    public final static String REGX_0_255 = "(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)";
+    // 鍖归厤 ip
+    public final static String REGX_IP = "((" + REGX_0_255 + "\\.){3}" + REGX_0_255 + ")";
+    public final static String REGX_IP_WILDCARD = "(((\\*\\.){3}\\*)|(" + REGX_0_255 + "(\\.\\*){3})|(" + REGX_0_255 + "\\." + REGX_0_255 + ")(\\.\\*){2}" + "|((" + REGX_0_255 + "\\.){3}\\*))";
+    // 鍖归厤缃戞
+    public final static String REGX_IP_SEG = "(" + REGX_IP + "\\-" + REGX_IP + ")";
+
+    /**
+     * 鑾峰彇瀹㈡埛绔疘P
+     * 
+     * @return IP鍦板潃
+     */
+    public static String getIpAddr()
+    {
+        return getIpAddr(ServletUtils.getRequest());
+    }
+
+    /**
+     * 鑾峰彇瀹㈡埛绔疘P
+     * 
+     * @param request 璇锋眰瀵硅薄
+     * @return IP鍦板潃
+     */
+    public static String getIpAddr(HttpServletRequest request)
+    {
+        if (request == null)
+        {
+            return "unknown";
+        }
+        String ip = request.getHeader("x-forwarded-for");
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
+        {
+            ip = request.getHeader("Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
+        {
+            ip = request.getHeader("X-Forwarded-For");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
+        {
+            ip = request.getHeader("WL-Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
+        {
+            ip = request.getHeader("X-Real-IP");
+        }
+
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
+        {
+            ip = request.getRemoteAddr();
+        }
+
+        return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip);
+    }
+
+    /**
+     * 妫�鏌ユ槸鍚︿负鍐呴儴IP鍦板潃
+     * 
+     * @param ip IP鍦板潃
+     * @return 缁撴灉
+     */
+    public static boolean internalIp(String ip)
+    {
+        byte[] addr = textToNumericFormatV4(ip);
+        return internalIp(addr) || "127.0.0.1".equals(ip);
+    }
+
+    /**
+     * 妫�鏌ユ槸鍚︿负鍐呴儴IP鍦板潃
+     * 
+     * @param addr byte鍦板潃
+     * @return 缁撴灉
+     */
+    private static boolean internalIp(byte[] addr)
+    {
+        if (StringUtils.isNull(addr) || addr.length < 2)
+        {
+            return true;
+        }
+        final byte b0 = addr[0];
+        final byte b1 = addr[1];
+        // 10.x.x.x/8
+        final byte SECTION_1 = 0x0A;
+        // 172.16.x.x/12
+        final byte SECTION_2 = (byte) 0xAC;
+        final byte SECTION_3 = (byte) 0x10;
+        final byte SECTION_4 = (byte) 0x1F;
+        // 192.168.x.x/16
+        final byte SECTION_5 = (byte) 0xC0;
+        final byte SECTION_6 = (byte) 0xA8;
+        switch (b0)
+        {
+            case SECTION_1:
+                return true;
+            case SECTION_2:
+                if (b1 >= SECTION_3 && b1 <= SECTION_4)
+                {
+                    return true;
+                }
+            case SECTION_5:
+                switch (b1)
+                {
+                    case SECTION_6:
+                        return true;
+                }
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * 灏咺Pv4鍦板潃杞崲鎴愬瓧鑺�
+     * 
+     * @param text IPv4鍦板潃
+     * @return byte 瀛楄妭
+     */
+    public static byte[] textToNumericFormatV4(String text)
+    {
+        if (text.length() == 0)
+        {
+            return null;
+        }
+
+        byte[] bytes = new byte[4];
+        String[] elements = text.split("\\.", -1);
+        try
+        {
+            long l;
+            int i;
+            switch (elements.length)
+            {
+                case 1:
+                    l = Long.parseLong(elements[0]);
+                    if ((l < 0L) || (l > 4294967295L))
+                    {
+                        return null;
+                    }
+                    bytes[0] = (byte) (int) (l >> 24 & 0xFF);
+                    bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF);
+                    bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF);
+                    bytes[3] = (byte) (int) (l & 0xFF);
+                    break;
+                case 2:
+                    l = Integer.parseInt(elements[0]);
+                    if ((l < 0L) || (l > 255L))
+                    {
+                        return null;
+                    }
+                    bytes[0] = (byte) (int) (l & 0xFF);
+                    l = Integer.parseInt(elements[1]);
+                    if ((l < 0L) || (l > 16777215L))
+                    {
+                        return null;
+                    }
+                    bytes[1] = (byte) (int) (l >> 16 & 0xFF);
+                    bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF);
+                    bytes[3] = (byte) (int) (l & 0xFF);
+                    break;
+                case 3:
+                    for (i = 0; i < 2; ++i)
+                    {
+                        l = Integer.parseInt(elements[i]);
+                        if ((l < 0L) || (l > 255L))
+                        {
+                            return null;
+                        }
+                        bytes[i] = (byte) (int) (l & 0xFF);
+                    }
+                    l = Integer.parseInt(elements[2]);
+                    if ((l < 0L) || (l > 65535L))
+                    {
+                        return null;
+                    }
+                    bytes[2] = (byte) (int) (l >> 8 & 0xFF);
+                    bytes[3] = (byte) (int) (l & 0xFF);
+                    break;
+                case 4:
+                    for (i = 0; i < 4; ++i)
+                    {
+                        l = Integer.parseInt(elements[i]);
+                        if ((l < 0L) || (l > 255L))
+                        {
+                            return null;
+                        }
+                        bytes[i] = (byte) (int) (l & 0xFF);
+                    }
+                    break;
+                default:
+                    return null;
+            }
+        }
+        catch (NumberFormatException e)
+        {
+            return null;
+        }
+        return bytes;
+    }
+
+    /**
+     * 鑾峰彇IP鍦板潃
+     * 
+     * @return 鏈湴IP鍦板潃
+     */
+    public static String getHostIp()
+    {
+        try
+        {
+            return InetAddress.getLocalHost().getHostAddress();
+        }
+        catch (UnknownHostException e)
+        {
+        }
+        return "127.0.0.1";
+    }
+
+    /**
+     * 鑾峰彇涓绘満鍚�
+     * 
+     * @return 鏈湴涓绘満鍚�
+     */
+    public static String getHostName()
+    {
+        try
+        {
+            return InetAddress.getLocalHost().getHostName();
+        }
+        catch (UnknownHostException e)
+        {
+        }
+        return "鏈煡";
+    }
+
+    /**
+     * 浠庡绾у弽鍚戜唬鐞嗕腑鑾峰緱绗竴涓潪unknown IP鍦板潃
+     *
+     * @param ip 鑾峰緱鐨処P鍦板潃
+     * @return 绗竴涓潪unknown IP鍦板潃
+     */
+    public static String getMultistageReverseProxyIp(String ip)
+    {
+        // 澶氱骇鍙嶅悜浠g悊妫�娴�
+        if (ip != null && ip.indexOf(",") > 0)
+        {
+            final String[] ips = ip.trim().split(",");
+            for (String subIp : ips)
+            {
+                if (false == isUnknown(subIp))
+                {
+                    ip = subIp;
+                    break;
+                }
+            }
+        }
+        return StringUtils.substring(ip, 0, 255);
+    }
+
+    /**
+     * 妫�娴嬬粰瀹氬瓧绗︿覆鏄惁涓烘湭鐭ワ紝澶氱敤浜庢娴婬TTP璇锋眰鐩稿叧
+     *
+     * @param checkString 琚娴嬬殑瀛楃涓�
+     * @return 鏄惁鏈煡
+     */
+    public static boolean isUnknown(String checkString)
+    {
+        return StringUtils.isBlank(checkString) || "unknown".equalsIgnoreCase(checkString);
+    }
+
+    /**
+     * 鏄惁涓篒P
+     */
+    public static boolean isIP(String ip)
+    {
+        return StringUtils.isNotBlank(ip) && ip.matches(REGX_IP);
+    }
+
+    /**
+     * 鏄惁涓篒P锛屾垨 *涓洪棿闅旂殑閫氶厤绗﹀湴鍧�
+     */
+    public static boolean isIpWildCard(String ip)
+    {
+        return StringUtils.isNotBlank(ip) && ip.matches(REGX_IP_WILDCARD);
+    }
+
+    /**
+     * 妫�娴嬪弬鏁版槸鍚﹀湪ip閫氶厤绗﹂噷
+     */
+    public static boolean ipIsInWildCardNoCheck(String ipWildCard, String ip)
+    {
+        String[] s1 = ipWildCard.split("\\.");
+        String[] s2 = ip.split("\\.");
+        boolean isMatchedSeg = true;
+        for (int i = 0; i < s1.length && !s1[i].equals("*"); i++)
+        {
+            if (!s1[i].equals(s2[i]))
+            {
+                isMatchedSeg = false;
+                break;
+            }
+        }
+        return isMatchedSeg;
+    }
+
+    /**
+     * 鏄惁涓虹壒瀹氭牸寮忓:鈥�10.10.10.1-10.10.10.99鈥濈殑ip娈靛瓧绗︿覆
+     */
+    public static boolean isIPSegment(String ipSeg)
+    {
+        return StringUtils.isNotBlank(ipSeg) && ipSeg.matches(REGX_IP_SEG);
+    }
+
+    /**
+     * 鍒ゆ柇ip鏄惁鍦ㄦ寚瀹氱綉娈典腑
+     */
+    public static boolean ipIsInNetNoCheck(String iparea, String ip)
+    {
+        int idx = iparea.indexOf('-');
+        String[] sips = iparea.substring(0, idx).split("\\.");
+        String[] sipe = iparea.substring(idx + 1).split("\\.");
+        String[] sipt = ip.split("\\.");
+        long ips = 0L, ipe = 0L, ipt = 0L;
+        for (int i = 0; i < 4; ++i)
+        {
+            ips = ips << 8 | Integer.parseInt(sips[i]);
+            ipe = ipe << 8 | Integer.parseInt(sipe[i]);
+            ipt = ipt << 8 | Integer.parseInt(sipt[i]);
+        }
+        if (ips > ipe)
+        {
+            long t = ips;
+            ips = ipe;
+            ipe = t;
+        }
+        return ips <= ipt && ipt <= ipe;
+    }
+
+    /**
+     * 鏍¢獙ip鏄惁绗﹀悎杩囨护涓茶鍒�
+     * 
+     * @param filter 杩囨护IP鍒楄〃,鏀寔鍚庣紑'*'閫氶厤,鏀寔缃戞濡�:`10.10.10.1-10.10.10.99`
+     * @param ip 鏍¢獙IP鍦板潃
+     * @return boolean 缁撴灉
+     */
+    public static boolean isMatchedIp(String filter, String ip)
+    {
+        if (StringUtils.isEmpty(filter) || StringUtils.isEmpty(ip))
+        {
+            return false;
+        }
+        String[] ips = filter.split(";");
+        for (String iStr : ips)
+        {
+            if (isIP(iStr) && iStr.equals(ip))
+            {
+                return true;
+            }
+            else if (isIpWildCard(iStr) && ipIsInWildCardNoCheck(iStr, ip))
+            {
+                return true;
+            }
+            else if (isIPSegment(iStr) && ipIsInNetNoCheck(iStr, ip))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/poi/ExcelHandlerAdapter.java b/zhitan-common/src/main/java/com/zhitan/common/utils/poi/ExcelHandlerAdapter.java
new file mode 100644
index 0000000..2f2b8a8
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/poi/ExcelHandlerAdapter.java
@@ -0,0 +1,24 @@
+package com.zhitan.common.utils.poi;
+
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Workbook;
+
+/**
+ * Excel鏁版嵁鏍煎紡澶勭悊閫傞厤鍣�
+ * 
+ * @author zhitan
+ */
+public interface ExcelHandlerAdapter
+{
+    /**
+     * 鏍煎紡鍖�
+     * 
+     * @param value 鍗曞厓鏍兼暟鎹��
+     * @param args excel娉ㄨВargs鍙傛暟缁�
+     * @param cell 鍗曞厓鏍煎璞�
+     * @param wb 宸ヤ綔绨垮璞�
+     *
+     * @return 澶勭悊鍚庣殑鍊�
+     */
+    Object format(Object value, String[] args, Cell cell, Workbook wb);
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/poi/ExcelUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/poi/ExcelUtil.java
new file mode 100644
index 0000000..61f7a04
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/poi/ExcelUtil.java
@@ -0,0 +1,1795 @@
+package com.zhitan.common.utils.poi;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+import java.util.stream.Collectors;
+import javax.servlet.http.HttpServletResponse;
+
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.annotation.Excels;
+import com.zhitan.common.config.BaseConfig;
+import com.zhitan.common.exception.UtilException;
+import com.zhitan.common.utils.DictUtils;
+import com.zhitan.common.utils.file.FileTypeUtils;
+import com.zhitan.common.utils.file.FileUtils;
+import com.zhitan.common.utils.file.ImageUtils;
+import com.zhitan.common.utils.reflect.ReflectUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.RegExUtils;
+import org.apache.commons.lang3.reflect.FieldUtils;
+import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
+import org.apache.poi.hssf.usermodel.HSSFPicture;
+import org.apache.poi.hssf.usermodel.HSSFPictureData;
+import org.apache.poi.hssf.usermodel.HSSFShape;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ooxml.POIXMLDocumentPart;
+import org.apache.poi.ss.usermodel.BorderStyle;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.ss.usermodel.ClientAnchor;
+import org.apache.poi.ss.usermodel.DataFormat;
+import org.apache.poi.ss.usermodel.DataValidation;
+import org.apache.poi.ss.usermodel.DataValidationConstraint;
+import org.apache.poi.ss.usermodel.DataValidationHelper;
+import org.apache.poi.ss.usermodel.DateUtil;
+import org.apache.poi.ss.usermodel.Drawing;
+import org.apache.poi.ss.usermodel.FillPatternType;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.apache.poi.ss.usermodel.Name;
+import org.apache.poi.ss.usermodel.PictureData;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.VerticalAlignment;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.ss.util.CellRangeAddressList;
+import org.apache.poi.util.IOUtils;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
+import org.apache.poi.xssf.usermodel.XSSFDataValidation;
+import org.apache.poi.xssf.usermodel.XSSFDrawing;
+import org.apache.poi.xssf.usermodel.XSSFPicture;
+import org.apache.poi.xssf.usermodel.XSSFShape;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.text.Convert;
+import com.zhitan.common.utils.DateUtils;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * Excel鐩稿叧澶勭悊
+ * 
+ * @author zhitan
+ */
+public class ExcelUtil<T>
+{
+    private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class);
+
+    public static final String FORMULA_REGEX_STR = "=|-|\\+|@";
+
+    public static final String[] FORMULA_STR = { "=", "-", "+", "@" };
+
+    /**
+     * 鐢ㄤ簬dictType灞炴�ф暟鎹瓨鍌紝閬垮厤閲嶅鏌ョ紦瀛�
+     */
+    public Map<String, String> sysDictMap = new HashMap<String, String>();
+
+    /**
+     * Excel sheet鏈�澶ц鏁帮紝榛樿65536
+     */
+    public static final int sheetSize = 65536;
+
+    /**
+     * 宸ヤ綔琛ㄥ悕绉�
+     */
+    private String sheetName;
+
+    /**
+     * 瀵煎嚭绫诲瀷锛圗XPORT:瀵煎嚭鏁版嵁锛汭MPORT锛氬鍏ユā鏉匡級
+     */
+    private Excel.Type type;
+
+    /**
+     * 宸ヤ綔钖勫璞�
+     */
+    private Workbook wb;
+
+    /**
+     * 宸ヤ綔琛ㄥ璞�
+     */
+    private Sheet sheet;
+
+    /**
+     * 鏍峰紡鍒楄〃
+     */
+    private Map<String, CellStyle> styles;
+
+    /**
+     * 瀵煎叆瀵煎嚭鏁版嵁鍒楄〃
+     */
+    private List<T> list;
+
+    /**
+     * 娉ㄨВ鍒楄〃
+     */
+    private List<Object[]> fields;
+
+    /**
+     * 褰撳墠琛屽彿
+     */
+    private int rownum;
+
+    /**
+     * 鏍囬
+     */
+    private String title;
+
+    /**
+     * 鏈�澶ч珮搴�
+     */
+    private short maxHeight;
+
+    /**
+     * 鍚堝苟鍚庢渶鍚庤鏁�
+     */
+    private int subMergedLastRowNum = 0;
+
+    /**
+     * 鍚堝苟鍚庡紑濮嬭鏁�
+     */
+    private int subMergedFirstRowNum = 1;
+
+    /**
+     * 瀵硅薄鐨勫瓙鍒楄〃鏂规硶
+     */
+    private Method subMethod;
+
+    /**
+     * 瀵硅薄鐨勫瓙鍒楄〃灞炴��
+     */
+    private List<Field> subFields;
+
+    /**
+     * 缁熻鍒楄〃
+     */
+    private Map<Integer, Double> statistics = new HashMap<Integer, Double>();
+
+    /**
+     * 鏁板瓧鏍煎紡
+     */
+    private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00");
+
+    /**
+     * 瀹炰綋瀵硅薄
+     */
+    public Class<T> clazz;
+
+    /**
+     * 闇�瑕佹帓闄ゅ垪灞炴��
+     */
+    public String[] excludeFields;
+
+    public ExcelUtil(Class<T> clazz)
+    {
+        this.clazz = clazz;
+    }
+
+    /**
+     * 闅愯棌Excel涓垪灞炴��
+     *
+     * @param fields 鍒楀睘鎬у悕 绀轰緥[鍗曚釜"name"/澶氫釜"id","name"]
+     * @throws Exception
+     */
+    public void hideColumn(String... fields)
+    {
+        this.excludeFields = fields;
+    }
+
+    public void init(List<T> list, String sheetName, String title, Excel.Type type)
+    {
+        if (list == null)
+        {
+            list = new ArrayList<T>();
+        }
+        this.list = list;
+        this.sheetName = sheetName;
+        this.type = type;
+        this.title = title;
+        createExcelField();
+        createWorkbook();
+        createTitle();
+        createSubHead();
+    }
+
+    /**
+     * 鍒涘缓excel绗竴琛屾爣棰�
+     */
+    public void createTitle()
+    {
+        if (StringUtils.isNotEmpty(title))
+        {
+            subMergedFirstRowNum++;
+            subMergedLastRowNum++;
+            int titleLastCol = this.fields.size() - 1;
+            if (isSubList())
+            {
+                titleLastCol = titleLastCol + subFields.size() - 1;
+            }
+            Row titleRow = sheet.createRow(rownum == 0 ? rownum++ : 0);
+            titleRow.setHeightInPoints(30);
+            Cell titleCell = titleRow.createCell(0);
+            titleCell.setCellStyle(styles.get("title"));
+            titleCell.setCellValue(title);
+            sheet.addMergedRegion(new CellRangeAddress(titleRow.getRowNum(), titleRow.getRowNum(), titleRow.getRowNum(), titleLastCol));
+        }
+    }
+
+    /**
+     * 鍒涘缓瀵硅薄鐨勫瓙鍒楄〃鍚嶇О
+     */
+    public void createSubHead()
+    {
+        if (isSubList())
+        {
+            subMergedFirstRowNum++;
+            subMergedLastRowNum++;
+            Row subRow = sheet.createRow(rownum);
+            int excelNum = 0;
+            for (Object[] objects : fields)
+            {
+                Excel attr = (Excel) objects[1];
+                Cell headCell1 = subRow.createCell(excelNum);
+                headCell1.setCellValue(attr.name());
+                headCell1.setCellStyle(styles.get(StringUtils.format("header_{}_{}", attr.headerColor(), attr.headerBackgroundColor())));
+                excelNum++;
+            }
+            int headFirstRow = excelNum - 1;
+            int headLastRow = headFirstRow + subFields.size() - 1;
+            if (headLastRow > headFirstRow)
+            {
+                sheet.addMergedRegion(new CellRangeAddress(rownum, rownum, headFirstRow, headLastRow));
+            }
+            rownum++;
+        }
+    }
+
+    /**
+     * 瀵筫xcel琛ㄥ崟榛樿绗竴涓储寮曞悕杞崲鎴恖ist
+     * 
+     * @param is 杈撳叆娴�
+     * @return 杞崲鍚庨泦鍚�
+     */
+    public List<T> importExcel(InputStream is)
+    {
+        List<T> list = null;
+        try
+        {
+            list = importExcel(is, 0);
+        }
+        catch (Exception e)
+        {
+            log.error("瀵煎叆Excel寮傚父{}", e.getMessage());
+            throw new UtilException(e.getMessage());
+        }
+        finally
+        {
+            IOUtils.closeQuietly(is);
+        }
+        return list;
+    }
+
+    /**
+     * 瀵筫xcel琛ㄥ崟榛樿绗竴涓储寮曞悕杞崲鎴恖ist
+     * 
+     * @param is 杈撳叆娴�
+     * @param titleNum 鏍囬鍗犵敤琛屾暟
+     * @return 杞崲鍚庨泦鍚�
+     */
+    public List<T> importExcel(InputStream is, int titleNum) throws Exception
+    {
+        return importExcel(StringUtils.EMPTY, is, titleNum);
+    }
+
+    /**
+     * 瀵筫xcel琛ㄥ崟鎸囧畾琛ㄦ牸绱㈠紩鍚嶈浆鎹㈡垚list
+     * 
+     * @param sheetName 琛ㄦ牸绱㈠紩鍚�
+     * @param titleNum 鏍囬鍗犵敤琛屾暟
+     * @param is 杈撳叆娴�
+     * @return 杞崲鍚庨泦鍚�
+     */
+    public List<T> importExcel(String sheetName, InputStream is, int titleNum) throws Exception
+    {
+        this.type = Excel.Type.IMPORT;
+        this.wb = WorkbookFactory.create(is);
+        List<T> list = new ArrayList<T>();
+        // 濡傛灉鎸囧畾sheet鍚�,鍒欏彇鎸囧畾sheet涓殑鍐呭 鍚﹀垯榛樿鎸囧悜绗�1涓猻heet
+        Sheet sheet = StringUtils.isNotEmpty(sheetName) ? wb.getSheet(sheetName) : wb.getSheetAt(0);
+        if (sheet == null)
+        {
+            throw new IOException("鏂囦欢sheet涓嶅瓨鍦�");
+        }
+        boolean isXSSFWorkbook = !(wb instanceof HSSFWorkbook);
+        Map<String, PictureData> pictures;
+        if (isXSSFWorkbook)
+        {
+            pictures = getSheetPictures07((XSSFSheet) sheet, (XSSFWorkbook) wb);
+        }
+        else
+        {
+            pictures = getSheetPictures03((HSSFSheet) sheet, (HSSFWorkbook) wb);
+        }
+        // 鑾峰彇鏈�鍚庝竴涓潪绌鸿鐨勮涓嬫爣锛屾瘮濡傛�昏鏁颁负n锛屽垯杩斿洖鐨勪负n-1
+        int rows = sheet.getLastRowNum();
+        if (rows > 0)
+        {
+            // 瀹氫箟涓�涓猰ap鐢ㄤ簬瀛樻斁excel鍒楃殑搴忓彿鍜宖ield.
+            Map<String, Integer> cellMap = new HashMap<String, Integer>();
+            // 鑾峰彇琛ㄥご
+            Row heard = sheet.getRow(titleNum);
+            for (int i = 0; i < heard.getPhysicalNumberOfCells(); i++)
+            {
+                Cell cell = heard.getCell(i);
+                if (StringUtils.isNotNull(cell))
+                {
+                    String value = this.getCellValue(heard, i).toString();
+                    cellMap.put(value, i);
+                }
+                else
+                {
+                    cellMap.put(null, i);
+                }
+            }
+            // 鏈夋暟鎹椂鎵嶅鐞� 寰楀埌绫荤殑鎵�鏈塮ield.
+            List<Object[]> fields = this.getFields();
+            Map<Integer, Object[]> fieldsMap = new HashMap<Integer, Object[]>();
+            for (Object[] objects : fields)
+            {
+                Excel attr = (Excel) objects[1];
+                Integer column = cellMap.get(attr.name());
+                if (column != null)
+                {
+                    fieldsMap.put(column, objects);
+                }
+            }
+            for (int i = titleNum + 1; i <= rows; i++)
+            {
+                // 浠庣2琛屽紑濮嬪彇鏁版嵁,榛樿绗竴琛屾槸琛ㄥご.
+                Row row = sheet.getRow(i);
+                // 鍒ゆ柇褰撳墠琛屾槸鍚︽槸绌鸿
+                if (isRowEmpty(row))
+                {
+                    continue;
+                }
+                T entity = null;
+                for (Map.Entry<Integer, Object[]> entry : fieldsMap.entrySet())
+                {
+                    Object val = this.getCellValue(row, entry.getKey());
+
+                    // 濡傛灉涓嶅瓨鍦ㄥ疄渚嬪垯鏂板缓.
+                    entity = (entity == null ? clazz.newInstance() : entity);
+                    // 浠巑ap涓緱鍒板搴斿垪鐨刦ield.
+                    Field field = (Field) entry.getValue()[0];
+                    Excel attr = (Excel) entry.getValue()[1];
+                    // 鍙栧緱绫诲瀷,骞舵牴鎹璞$被鍨嬭缃��.
+                    Class<?> fieldType = field.getType();
+                    if (String.class == fieldType)
+                    {
+                        String s = Convert.toStr(val);
+                        if (StringUtils.endsWith(s, ".0"))
+                        {
+                            val = StringUtils.substringBefore(s, ".0");
+                        }
+                        else
+                        {
+                            String dateFormat = field.getAnnotation(Excel.class).dateFormat();
+                            if (StringUtils.isNotEmpty(dateFormat))
+                            {
+                                val = parseDateToStr(dateFormat, val);
+                            }
+                            else
+                            {
+                                val = Convert.toStr(val);
+                            }
+                        }
+                    }
+                    else if ((Integer.TYPE == fieldType || Integer.class == fieldType) && StringUtils.isNumeric(Convert.toStr(val)))
+                    {
+                        val = Convert.toInt(val);
+                    }
+                    else if ((Long.TYPE == fieldType || Long.class == fieldType) && StringUtils.isNumeric(Convert.toStr(val)))
+                    {
+                        val = Convert.toLong(val);
+                    }
+                    else if (Double.TYPE == fieldType || Double.class == fieldType)
+                    {
+                        val = Convert.toDouble(val);
+                    }
+                    else if (Float.TYPE == fieldType || Float.class == fieldType)
+                    {
+                        val = Convert.toFloat(val);
+                    }
+                    else if (BigDecimal.class == fieldType)
+                    {
+                        val = Convert.toBigDecimal(val);
+                    }
+                    else if (Date.class == fieldType)
+                    {
+                        if (val instanceof String)
+                        {
+                            val = DateUtils.parseDate(val);
+                        }
+                        else if (val instanceof Double)
+                        {
+                            val = DateUtil.getJavaDate((Double) val);
+                        }
+                    }
+                    else if (Boolean.TYPE == fieldType || Boolean.class == fieldType)
+                    {
+                        val = Convert.toBool(val, false);
+                    }
+                    if (StringUtils.isNotNull(fieldType))
+                    {
+                        String propertyName = field.getName();
+                        if (StringUtils.isNotEmpty(attr.targetAttr()))
+                        {
+                            propertyName = field.getName() + "." + attr.targetAttr();
+                        }
+                        if (StringUtils.isNotEmpty(attr.readConverterExp()))
+                        {
+                            val = reverseByExp(Convert.toStr(val), attr.readConverterExp(), attr.separator());
+                        }
+                        else if (StringUtils.isNotEmpty(attr.dictType()))
+                        {
+                            val = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator());
+                        }
+                        else if (!attr.handler().equals(ExcelHandlerAdapter.class))
+                        {
+                            val = dataFormatHandlerAdapter(val, attr, null);
+                        }
+                        else if (Excel.ColumnType.IMAGE == attr.cellType() && StringUtils.isNotEmpty(pictures))
+                        {
+                            PictureData image = pictures.get(row.getRowNum() + "_" + entry.getKey());
+                            if (image == null)
+                            {
+                                val = "";
+                            }
+                            else
+                            {
+                                byte[] data = image.getData();
+                                val = FileUtils.writeImportBytes(data);
+                            }
+                        }
+                        ReflectUtils.invokeSetter(entity, propertyName, val);
+                    }
+                }
+                list.add(entity);
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟
+     * 
+     * @param list 瀵煎嚭鏁版嵁闆嗗悎
+     * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О
+     * @return 缁撴灉
+     */
+    public AjaxResult exportExcel(List<T> list, String sheetName)
+    {
+        return exportExcel(list, sheetName, StringUtils.EMPTY);
+    }
+
+    /**
+     * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟
+     * 
+     * @param list 瀵煎嚭鏁版嵁闆嗗悎
+     * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О
+     * @param title 鏍囬
+     * @return 缁撴灉
+     */
+    public AjaxResult exportExcel(List<T> list, String sheetName, String title)
+    {
+        this.init(list, sheetName, title, Excel.Type.EXPORT);
+        return exportExcel();
+    }
+
+    /**
+     * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟
+     * 
+     * @param response 杩斿洖鏁版嵁
+     * @param list 瀵煎嚭鏁版嵁闆嗗悎
+     * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О
+     * @return 缁撴灉
+     */
+    public void exportExcel(HttpServletResponse response, List<T> list, String sheetName)
+    {
+        exportExcel(response, list, sheetName, StringUtils.EMPTY);
+    }
+
+    /**
+     * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟
+     * 
+     * @param response 杩斿洖鏁版嵁
+     * @param list 瀵煎嚭鏁版嵁闆嗗悎
+     * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О
+     * @param title 鏍囬
+     * @return 缁撴灉
+     */
+    public void exportExcel(HttpServletResponse response, List<T> list, String sheetName, String title)
+    {
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        this.init(list, sheetName, title, Excel.Type.EXPORT);
+        exportExcel(response);
+    }
+
+    /**
+     * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟
+     * 
+     * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О
+     * @return 缁撴灉
+     */
+    public AjaxResult importTemplateExcel(String sheetName)
+    {
+        return importTemplateExcel(sheetName, StringUtils.EMPTY);
+    }
+
+    /**
+     * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟
+     * 
+     * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О
+     * @param title 鏍囬
+     * @return 缁撴灉
+     */
+    public AjaxResult importTemplateExcel(String sheetName, String title)
+    {
+        this.init(null, sheetName, title, Excel.Type.IMPORT);
+        return exportExcel();
+    }
+
+    /**
+     * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟
+     * 
+     * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О
+     * @return 缁撴灉
+     */
+    public void importTemplateExcel(HttpServletResponse response, String sheetName)
+    {
+        importTemplateExcel(response, sheetName, StringUtils.EMPTY);
+    }
+
+    /**
+     * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟
+     * 
+     * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О
+     * @param title 鏍囬
+     * @return 缁撴灉
+     */
+    public void importTemplateExcel(HttpServletResponse response, String sheetName, String title)
+    {
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        this.init(null, sheetName, title, Excel.Type.IMPORT);
+        exportExcel(response);
+    }
+
+    /**
+     * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟
+     * 
+     * @return 缁撴灉
+     */
+    public void exportExcel(HttpServletResponse response)
+    {
+        try
+        {
+            writeSheet();
+            wb.write(response.getOutputStream());
+        }
+        catch (Exception e)
+        {
+            log.error("瀵煎嚭Excel寮傚父{}", e.getMessage());
+        }
+        finally
+        {
+            IOUtils.closeQuietly(wb);
+        }
+    }
+
+    /**
+     * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟
+     * 
+     * @return 缁撴灉
+     */
+    public AjaxResult exportExcel()
+    {
+        OutputStream out = null;
+        try
+        {
+            writeSheet();
+            String filename = encodingFilename(sheetName);
+            out = new FileOutputStream(getAbsoluteFile(filename));
+            wb.write(out);
+            return AjaxResult.success(filename);
+        }
+        catch (Exception e)
+        {
+            log.error("瀵煎嚭Excel寮傚父{}", e.getMessage());
+            throw new UtilException("瀵煎嚭Excel澶辫触锛岃鑱旂郴缃戠珯绠$悊鍛橈紒");
+        }
+        finally
+        {
+            IOUtils.closeQuietly(wb);
+            IOUtils.closeQuietly(out);
+        }
+    }
+
+    /**
+     * 鍒涘缓鍐欏叆鏁版嵁鍒癝heet
+     */
+    public void writeSheet()
+    {
+        // 鍙栧嚭涓�鍏辨湁澶氬皯涓猻heet.
+        int sheetNo = Math.max(1, (int) Math.ceil(list.size() * 1.0 / sheetSize));
+        for (int index = 0; index < sheetNo; index++)
+        {
+            createSheet(sheetNo, index);
+
+            // 浜х敓涓�琛�
+            Row row = sheet.createRow(rownum);
+            int column = 0;
+            // 鍐欏叆鍚勪釜瀛楁鐨勫垪澶村悕绉�
+            for (Object[] os : fields)
+            {
+                Field field = (Field) os[0];
+                Excel excel = (Excel) os[1];
+                if (Collection.class.isAssignableFrom(field.getType()))
+                {
+                    for (Field subField : subFields)
+                    {
+                        Excel subExcel = subField.getAnnotation(Excel.class);
+                        this.createHeadCell(subExcel, row, column++);
+                    }
+                }
+                else
+                {
+                    this.createHeadCell(excel, row, column++);
+                }
+            }
+            if (Excel.Type.EXPORT.equals(type))
+            {
+                fillExcelData(index, row);
+                addStatisticsRow();
+            }
+        }
+    }
+
+    /**
+     * 濉厖excel鏁版嵁
+     * 
+     * @param index 搴忓彿
+     * @param row 鍗曞厓鏍艰
+     */
+    @SuppressWarnings("unchecked")
+    public void fillExcelData(int index, Row row)
+    {
+        int startNo = index * sheetSize;
+        int endNo = Math.min(startNo + sheetSize, list.size());
+        int rowNo = (1 + rownum) - startNo;
+        for (int i = startNo; i < endNo; i++)
+        {
+            rowNo = isSubList() ? (i > 1 ? rowNo + 1 : rowNo + i) : i + 1 + rownum - startNo;
+            row = sheet.createRow(rowNo);
+            // 寰楀埌瀵煎嚭瀵硅薄.
+            T vo = (T) list.get(i);
+            Collection<?> subList = null;
+            if (isSubList())
+            {
+                if (isSubListValue(vo))
+                {
+                    subList = getListCellValue(vo);
+                    subMergedLastRowNum = subMergedLastRowNum + subList.size();
+                }
+                else
+                {
+                    subMergedFirstRowNum++;
+                    subMergedLastRowNum++;
+                }
+            }
+            int column = 0;
+            for (Object[] os : fields)
+            {
+                Field field = (Field) os[0];
+                Excel excel = (Excel) os[1];
+                if (Collection.class.isAssignableFrom(field.getType()) && StringUtils.isNotNull(subList))
+                {
+                    boolean subFirst = false;
+                    for (Object obj : subList)
+                    {
+                        if (subFirst)
+                        {
+                            rowNo++;
+                            row = sheet.createRow(rowNo);
+                        }
+                        List<Field> subFields = FieldUtils.getFieldsListWithAnnotation(obj.getClass(), Excel.class);
+                        int subIndex = 0;
+                        for (Field subField : subFields)
+                        {
+                            if (subField.isAnnotationPresent(Excel.class))
+                            {
+                                subField.setAccessible(true);
+                                Excel attr = subField.getAnnotation(Excel.class);
+                                this.addCell(attr, row, (T) obj, subField, column + subIndex);
+                            }
+                            subIndex++;
+                        }
+                        subFirst = true;
+                    }
+                    this.subMergedFirstRowNum = this.subMergedFirstRowNum + subList.size();
+                }
+                else
+                {
+                    this.addCell(excel, row, vo, field, column++);
+                }
+            }
+        }
+    }
+
+    /**
+     * 鍒涘缓琛ㄦ牸鏍峰紡
+     * 
+     * @param wb 宸ヤ綔钖勫璞�
+     * @return 鏍峰紡鍒楄〃
+     */
+    private Map<String, CellStyle> createStyles(Workbook wb)
+    {
+        // 鍐欏叆鍚勬潯璁板綍,姣忔潯璁板綍瀵瑰簲excel琛ㄤ腑鐨勪竴琛�
+        Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
+        CellStyle style = wb.createCellStyle();
+        style.setAlignment(HorizontalAlignment.CENTER);
+        style.setVerticalAlignment(VerticalAlignment.CENTER);
+        Font titleFont = wb.createFont();
+        titleFont.setFontName("Arial");
+        titleFont.setFontHeightInPoints((short) 16);
+        titleFont.setBold(true);
+        style.setFont(titleFont);
+        DataFormat dataFormat = wb.createDataFormat();
+        style.setDataFormat(dataFormat.getFormat("@"));
+        styles.put("title", style);
+
+        style = wb.createCellStyle();
+        style.setAlignment(HorizontalAlignment.CENTER);
+        style.setVerticalAlignment(VerticalAlignment.CENTER);
+        style.setBorderRight(BorderStyle.THIN);
+        style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
+        style.setBorderLeft(BorderStyle.THIN);
+        style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
+        style.setBorderTop(BorderStyle.THIN);
+        style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
+        style.setBorderBottom(BorderStyle.THIN);
+        style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
+        Font dataFont = wb.createFont();
+        dataFont.setFontName("Arial");
+        dataFont.setFontHeightInPoints((short) 10);
+        style.setFont(dataFont);
+        styles.put("data", style);
+
+        style = wb.createCellStyle();
+        style.setAlignment(HorizontalAlignment.CENTER);
+        style.setVerticalAlignment(VerticalAlignment.CENTER);
+        Font totalFont = wb.createFont();
+        totalFont.setFontName("Arial");
+        totalFont.setFontHeightInPoints((short) 10);
+        style.setFont(totalFont);
+        styles.put("total", style);
+
+        styles.putAll(annotationHeaderStyles(wb, styles));
+
+        styles.putAll(annotationDataStyles(wb));
+
+        return styles;
+    }
+
+    /**
+     * 鏍规嵁Excel娉ㄨВ鍒涘缓琛ㄦ牸澶存牱寮�
+     * 
+     * @param wb 宸ヤ綔钖勫璞�
+     * @return 鑷畾涔夋牱寮忓垪琛�
+     */
+    private Map<String, CellStyle> annotationHeaderStyles(Workbook wb, Map<String, CellStyle> styles)
+    {
+        Map<String, CellStyle> headerStyles = new HashMap<String, CellStyle>();
+        for (Object[] os : fields)
+        {
+            Excel excel = (Excel) os[1];
+            String key = StringUtils.format("header_{}_{}", excel.headerColor(), excel.headerBackgroundColor());
+            if (!headerStyles.containsKey(key))
+            {
+                CellStyle style = wb.createCellStyle();
+                style.cloneStyleFrom(styles.get("data"));
+                style.setAlignment(HorizontalAlignment.CENTER);
+                style.setVerticalAlignment(VerticalAlignment.CENTER);
+                style.setFillForegroundColor(excel.headerBackgroundColor().index);
+                style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+                Font headerFont = wb.createFont();
+                headerFont.setFontName("Arial");
+                headerFont.setFontHeightInPoints((short) 10);
+                headerFont.setBold(true);
+                headerFont.setColor(excel.headerColor().index);
+                style.setFont(headerFont);
+                // 璁剧疆琛ㄦ牸澶村崟鍏冩牸鏂囨湰褰㈠紡
+                DataFormat dataFormat = wb.createDataFormat();
+                style.setDataFormat(dataFormat.getFormat("@"));
+                headerStyles.put(key, style);
+            }
+        }
+        return headerStyles;
+    }
+
+    /**
+     * 鏍规嵁Excel娉ㄨВ鍒涘缓琛ㄦ牸鍒楁牱寮�
+     * 
+     * @param wb 宸ヤ綔钖勫璞�
+     * @return 鑷畾涔夋牱寮忓垪琛�
+     */
+    private Map<String, CellStyle> annotationDataStyles(Workbook wb)
+    {
+        Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
+        for (Object[] os : fields)
+        {
+            Field field = (Field) os[0];
+            Excel excel = (Excel) os[1];
+            if (Collection.class.isAssignableFrom(field.getType()))
+            {
+                ParameterizedType pt = (ParameterizedType) field.getGenericType();
+                Class<?> subClass = (Class<?>) pt.getActualTypeArguments()[0];
+                List<Field> subFields = FieldUtils.getFieldsListWithAnnotation(subClass, Excel.class);
+                for (Field subField : subFields)
+                {
+                    Excel subExcel = subField.getAnnotation(Excel.class);
+                    annotationDataStyles(styles, subField, subExcel);
+                }
+            }
+            else
+            {
+                annotationDataStyles(styles, field, excel);
+            }
+        }
+        return styles;
+    }
+
+    /**
+     * 鏍规嵁Excel娉ㄨВ鍒涘缓琛ㄦ牸鍒楁牱寮�
+     * 
+     * @param styles 鑷畾涔夋牱寮忓垪琛�
+     * @param field  灞炴�у垪淇℃伅
+     * @param excel  娉ㄨВ淇℃伅
+     */
+    public void annotationDataStyles(Map<String, CellStyle> styles, Field field, Excel excel)
+    {
+        String key = StringUtils.format("data_{}_{}_{}_{}", excel.align(), excel.color(), excel.backgroundColor(), excel.cellType());
+        if (!styles.containsKey(key))
+        {
+            CellStyle style = wb.createCellStyle();
+            style.setAlignment(excel.align());
+            style.setVerticalAlignment(VerticalAlignment.CENTER);
+            style.setBorderRight(BorderStyle.THIN);
+            style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
+            style.setBorderLeft(BorderStyle.THIN);
+            style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
+            style.setBorderTop(BorderStyle.THIN);
+            style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
+            style.setBorderBottom(BorderStyle.THIN);
+            style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
+            style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+            style.setFillForegroundColor(excel.backgroundColor().getIndex());
+            Font dataFont = wb.createFont();
+            dataFont.setFontName("Arial");
+            dataFont.setFontHeightInPoints((short) 10);
+            dataFont.setColor(excel.color().index);
+            style.setFont(dataFont);
+            if (Excel.ColumnType.TEXT == excel.cellType())
+            {
+                DataFormat dataFormat = wb.createDataFormat();
+                style.setDataFormat(dataFormat.getFormat("@"));
+            }
+            styles.put(key, style);
+        }
+    }
+
+    /**
+     * 鍒涘缓鍗曞厓鏍�
+     */
+    public Cell createHeadCell(Excel attr, Row row, int column)
+    {
+        // 鍒涘缓鍒�
+        Cell cell = row.createCell(column);
+        // 鍐欏叆鍒椾俊鎭�
+        cell.setCellValue(attr.name());
+        setDataValidation(attr, row, column);
+        cell.setCellStyle(styles.get(StringUtils.format("header_{}_{}", attr.headerColor(), attr.headerBackgroundColor())));
+        if (isSubList())
+        {
+            // 濉厖榛樿鏍峰紡锛岄槻姝㈠悎骞跺崟鍏冩牸鏍峰紡澶辨晥
+            sheet.setDefaultColumnStyle(column, styles.get(StringUtils.format("data_{}_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor(), attr.cellType())));
+            if (attr.needMerge())
+            {
+                sheet.addMergedRegion(new CellRangeAddress(rownum - 1, rownum, column, column));
+            }
+        }
+        return cell;
+    }
+
+    /**
+     * 璁剧疆鍗曞厓鏍间俊鎭�
+     * 
+     * @param value 鍗曞厓鏍煎��
+     * @param attr 娉ㄨВ鐩稿叧
+     * @param cell 鍗曞厓鏍间俊鎭�
+     */
+    public void setCellVo(Object value, Excel attr, Cell cell)
+    {
+        if (Excel.ColumnType.STRING == attr.cellType() || Excel.ColumnType.TEXT == attr.cellType())
+        {
+            String cellValue = Convert.toStr(value);
+            // 瀵逛簬浠讳綍浠ヨ〃杈惧紡瑙﹀彂瀛楃 =-+@寮�澶寸殑鍗曞厓鏍硷紝鐩存帴浣跨敤tab瀛楃浣滀负鍓嶇紑锛岄槻姝SV娉ㄥ叆銆�
+            if (StringUtils.startsWithAny(cellValue, FORMULA_STR))
+            {
+                cellValue = RegExUtils.replaceFirst(cellValue, FORMULA_REGEX_STR, "\t$0");
+            }
+            if (value instanceof Collection && StringUtils.equals("[]", cellValue))
+            {
+                cellValue = StringUtils.EMPTY;
+            }
+            cell.setCellValue(StringUtils.isNull(cellValue) ? attr.defaultValue() : cellValue + attr.suffix());
+        }
+        else if (Excel.ColumnType.NUMERIC == attr.cellType())
+        {
+            if (StringUtils.isNotNull(value))
+            {
+                cell.setCellValue(StringUtils.contains(Convert.toStr(value), ".") ? Convert.toDouble(value) : Convert.toInt(value));
+            }
+        }
+        else if (Excel.ColumnType.IMAGE == attr.cellType())
+        {
+            ClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() + 1), cell.getRow().getRowNum() + 1);
+            String imagePath = Convert.toStr(value);
+            if (StringUtils.isNotEmpty(imagePath))
+            {
+                byte[] data = ImageUtils.getImage(imagePath);
+                getDrawingPatriarch(cell.getSheet()).createPicture(anchor,
+                        cell.getSheet().getWorkbook().addPicture(data, getImageType(data)));
+            }
+        }
+    }
+
+    /**
+     * 鑾峰彇鐢诲竷
+     */
+    public static Drawing<?> getDrawingPatriarch(Sheet sheet)
+    {
+        if (sheet.getDrawingPatriarch() == null)
+        {
+            sheet.createDrawingPatriarch();
+        }
+        return sheet.getDrawingPatriarch();
+    }
+
+    /**
+     * 鑾峰彇鍥剧墖绫诲瀷,璁剧疆鍥剧墖鎻掑叆绫诲瀷
+     */
+    public int getImageType(byte[] value)
+    {
+        String type = FileTypeUtils.getFileExtendName(value);
+        if ("JPG".equalsIgnoreCase(type))
+        {
+            return Workbook.PICTURE_TYPE_JPEG;
+        }
+        else if ("PNG".equalsIgnoreCase(type))
+        {
+            return Workbook.PICTURE_TYPE_PNG;
+        }
+        return Workbook.PICTURE_TYPE_JPEG;
+    }
+
+    /**
+     * 鍒涘缓琛ㄦ牸鏍峰紡
+     */
+    public void setDataValidation(Excel attr, Row row, int column)
+    {
+        if (attr.name().indexOf("娉細") >= 0)
+        {
+            sheet.setColumnWidth(column, 6000);
+        }
+        else
+        {
+            // 璁剧疆鍒楀
+            sheet.setColumnWidth(column, (int) ((attr.width() + 0.72) * 256));
+        }
+        if (StringUtils.isNotEmpty(attr.prompt()) || attr.combo().length > 0)
+        {
+            if (attr.combo().length > 15 || StringUtils.join(attr.combo()).length() > 255)
+            {
+                // 濡傛灉涓嬫媺鏁板ぇ浜�15鎴栧瓧绗︿覆闀垮害澶т簬255锛屽垯浣跨敤涓�涓柊sheet瀛樺偍锛岄伩鍏嶇敓鎴愮殑妯℃澘涓嬫媺鍊艰幏鍙栦笉鍒�
+                setXSSFValidationWithHidden(sheet, attr.combo(), attr.prompt(), 1, 100, column, column);
+            }
+            else
+            {
+                // 鎻愮ず淇℃伅鎴栧彧鑳介�夋嫨涓嶈兘杈撳叆鐨勫垪鍐呭.
+                setPromptOrValidation(sheet, attr.combo(), attr.prompt(), 1, 100, column, column);
+            }
+        }
+    }
+
+    /**
+     * 娣诲姞鍗曞厓鏍�
+     */
+    public Cell addCell(Excel attr, Row row, T vo, Field field, int column)
+    {
+        Cell cell = null;
+        try
+        {
+            // 璁剧疆琛岄珮
+            row.setHeight(maxHeight);
+            // 鏍规嵁Excel涓缃儏鍐靛喅瀹氭槸鍚﹀鍑�,鏈変簺鎯呭喌闇�瑕佷繚鎸佷负绌�,甯屾湜鐢ㄦ埛濉啓杩欎竴鍒�.
+            if (attr.isExport())
+            {
+                // 鍒涘缓cell
+                cell = row.createCell(column);
+                if (isSubListValue(vo) && getListCellValue(vo).size() > 1 && attr.needMerge())
+                {
+                    CellRangeAddress cellAddress = new CellRangeAddress(subMergedFirstRowNum, subMergedLastRowNum, column, column);
+                    sheet.addMergedRegion(cellAddress);
+                }
+                cell.setCellStyle(styles.get(StringUtils.format("data_{}_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor(), attr.cellType())));
+
+                // 鐢ㄤ簬璇诲彇瀵硅薄涓殑灞炴��
+                Object value = getTargetValue(vo, field, attr);
+                String dateFormat = attr.dateFormat();
+                String readConverterExp = attr.readConverterExp();
+                String separator = attr.separator();
+                String dictType = attr.dictType();
+                if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value))
+                {
+                    cell.setCellValue(parseDateToStr(dateFormat, value));
+                }
+                else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value))
+                {
+                    cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator));
+                }
+                else if (StringUtils.isNotEmpty(dictType) && StringUtils.isNotNull(value))
+                {
+                    if (!sysDictMap.containsKey(dictType + value))
+                    {
+                        String lable = convertDictByExp(Convert.toStr(value), dictType, separator);
+                        sysDictMap.put(dictType + value, lable);
+                    }
+                    cell.setCellValue(sysDictMap.get(dictType + value));
+                }
+                else if (value instanceof BigDecimal && -1 != attr.scale())
+                {
+                    cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).doubleValue());
+                }
+                else if (!attr.handler().equals(ExcelHandlerAdapter.class))
+                {
+                    cell.setCellValue(dataFormatHandlerAdapter(value, attr, cell));
+                }
+                else
+                {
+                    // 璁剧疆鍒楃被鍨�
+                    setCellVo(value, attr, cell);
+                }
+                addStatisticsData(column, Convert.toStr(value), attr);
+            }
+        }
+        catch (Exception e)
+        {
+            log.error("瀵煎嚭Excel澶辫触{}", e);
+        }
+        return cell;
+    }
+
+    /**
+     * 璁剧疆 POI XSSFSheet 鍗曞厓鏍兼彁绀烘垨閫夋嫨妗�
+     * 
+     * @param sheet 琛ㄥ崟
+     * @param textlist 涓嬫媺妗嗘樉绀虹殑鍐呭
+     * @param promptContent 鎻愮ず鍐呭
+     * @param firstRow 寮�濮嬭
+     * @param endRow 缁撴潫琛�
+     * @param firstCol 寮�濮嬪垪
+     * @param endCol 缁撴潫鍒�
+     */
+    public void setPromptOrValidation(Sheet sheet, String[] textlist, String promptContent, int firstRow, int endRow,
+            int firstCol, int endCol)
+    {
+        DataValidationHelper helper = sheet.getDataValidationHelper();
+        DataValidationConstraint constraint = textlist.length > 0 ? helper.createExplicitListConstraint(textlist) : helper.createCustomConstraint("DD1");
+        CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
+        DataValidation dataValidation = helper.createValidation(constraint, regions);
+        if (StringUtils.isNotEmpty(promptContent))
+        {
+            // 濡傛灉璁剧疆浜嗘彁绀轰俊鎭垯榧犳爣鏀句笂鍘绘彁绀�
+            dataValidation.createPromptBox("", promptContent);
+            dataValidation.setShowPromptBox(true);
+        }
+        // 澶勭悊Excel鍏煎鎬ч棶棰�
+        if (dataValidation instanceof XSSFDataValidation)
+        {
+            dataValidation.setSuppressDropDownArrow(true);
+            dataValidation.setShowErrorBox(true);
+        }
+        else
+        {
+            dataValidation.setSuppressDropDownArrow(false);
+        }
+        sheet.addValidationData(dataValidation);
+    }
+
+    /**
+     * 璁剧疆鏌愪簺鍒楃殑鍊煎彧鑳借緭鍏ラ鍒剁殑鏁版嵁,鏄剧ず涓嬫媺妗嗭紙鍏煎瓒呭嚭涓�瀹氭暟閲忕殑涓嬫媺妗嗭級.
+     * 
+     * @param sheet 瑕佽缃殑sheet.
+     * @param textlist 涓嬫媺妗嗘樉绀虹殑鍐呭
+     * @param promptContent 鎻愮ず鍐呭
+     * @param firstRow 寮�濮嬭
+     * @param endRow 缁撴潫琛�
+     * @param firstCol 寮�濮嬪垪
+     * @param endCol 缁撴潫鍒�
+     */
+    public void setXSSFValidationWithHidden(Sheet sheet, String[] textlist, String promptContent, int firstRow, int endRow, int firstCol, int endCol)
+    {
+        String hideSheetName = "combo_" + firstCol + "_" + endCol;
+        Sheet hideSheet = wb.createSheet(hideSheetName); // 鐢ㄤ簬瀛樺偍 涓嬫媺鑿滃崟鏁版嵁
+        for (int i = 0; i < textlist.length; i++)
+        {
+            hideSheet.createRow(i).createCell(0).setCellValue(textlist[i]);
+        }
+        // 鍒涘缓鍚嶇О锛屽彲琚叾浠栧崟鍏冩牸寮曠敤
+        Name name = wb.createName();
+        name.setNameName(hideSheetName + "_data");
+        name.setRefersToFormula(hideSheetName + "!$A$1:$A$" + textlist.length);
+        DataValidationHelper helper = sheet.getDataValidationHelper();
+        // 鍔犺浇涓嬫媺鍒楄〃鍐呭
+        DataValidationConstraint constraint = helper.createFormulaListConstraint(hideSheetName + "_data");
+        // 璁剧疆鏁版嵁鏈夋晥鎬у姞杞藉湪鍝釜鍗曞厓鏍间笂,鍥涗釜鍙傛暟鍒嗗埆鏄細璧峰琛屻�佺粓姝㈣銆佽捣濮嬪垪銆佺粓姝㈠垪
+        CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
+        // 鏁版嵁鏈夋晥鎬у璞�
+        DataValidation dataValidation = helper.createValidation(constraint, regions);
+        if (StringUtils.isNotEmpty(promptContent))
+        {
+            // 濡傛灉璁剧疆浜嗘彁绀轰俊鎭垯榧犳爣鏀句笂鍘绘彁绀�
+            dataValidation.createPromptBox("", promptContent);
+            dataValidation.setShowPromptBox(true);
+        }
+        // 澶勭悊Excel鍏煎鎬ч棶棰�
+        if (dataValidation instanceof XSSFDataValidation)
+        {
+            dataValidation.setSuppressDropDownArrow(true);
+            dataValidation.setShowErrorBox(true);
+        }
+        else
+        {
+            dataValidation.setSuppressDropDownArrow(false);
+        }
+
+        sheet.addValidationData(dataValidation);
+        // 璁剧疆hiddenSheet闅愯棌
+        wb.setSheetHidden(wb.getSheetIndex(hideSheet), true);
+    }
+
+    /**
+     * 瑙f瀽瀵煎嚭鍊� 0=鐢�,1=濂�,2=鏈煡
+     * 
+     * @param propertyValue 鍙傛暟鍊�
+     * @param converterExp 缈昏瘧娉ㄨВ
+     * @param separator 鍒嗛殧绗�
+     * @return 瑙f瀽鍚庡��
+     */
+    public static String convertByExp(String propertyValue, String converterExp, String separator)
+    {
+        StringBuilder propertyString = new StringBuilder();
+        String[] convertSource = converterExp.split(",");
+        for (String item : convertSource)
+        {
+            String[] itemArray = item.split("=");
+            if (StringUtils.containsAny(propertyValue, separator))
+            {
+                for (String value : propertyValue.split(separator))
+                {
+                    if (itemArray[0].equals(value))
+                    {
+                        propertyString.append(itemArray[1] + separator);
+                        break;
+                    }
+                }
+            }
+            else
+            {
+                if (itemArray[0].equals(propertyValue))
+                {
+                    return itemArray[1];
+                }
+            }
+        }
+        return StringUtils.stripEnd(propertyString.toString(), separator);
+    }
+
+    /**
+     * 鍙嶅悜瑙f瀽鍊� 鐢�=0,濂�=1,鏈煡=2
+     * 
+     * @param propertyValue 鍙傛暟鍊�
+     * @param converterExp 缈昏瘧娉ㄨВ
+     * @param separator 鍒嗛殧绗�
+     * @return 瑙f瀽鍚庡��
+     */
+    public static String reverseByExp(String propertyValue, String converterExp, String separator)
+    {
+        StringBuilder propertyString = new StringBuilder();
+        String[] convertSource = converterExp.split(",");
+        for (String item : convertSource)
+        {
+            String[] itemArray = item.split("=");
+            if (StringUtils.containsAny(propertyValue, separator))
+            {
+                for (String value : propertyValue.split(separator))
+                {
+                    if (itemArray[1].equals(value))
+                    {
+                        propertyString.append(itemArray[0] + separator);
+                        break;
+                    }
+                }
+            }
+            else
+            {
+                if (itemArray[1].equals(propertyValue))
+                {
+                    return itemArray[0];
+                }
+            }
+        }
+        return StringUtils.stripEnd(propertyString.toString(), separator);
+    }
+
+    /**
+     * 瑙f瀽瀛楀吀鍊�
+     * 
+     * @param dictValue 瀛楀吀鍊�
+     * @param dictType 瀛楀吀绫诲瀷
+     * @param separator 鍒嗛殧绗�
+     * @return 瀛楀吀鏍囩
+     */
+    public static String convertDictByExp(String dictValue, String dictType, String separator)
+    {
+        return DictUtils.getDictLabel(dictType, dictValue, separator);
+    }
+
+    /**
+     * 鍙嶅悜瑙f瀽鍊煎瓧鍏稿��
+     * 
+     * @param dictLabel 瀛楀吀鏍囩
+     * @param dictType 瀛楀吀绫诲瀷
+     * @param separator 鍒嗛殧绗�
+     * @return 瀛楀吀鍊�
+     */
+    public static String reverseDictByExp(String dictLabel, String dictType, String separator)
+    {
+        return DictUtils.getDictValue(dictType, dictLabel, separator);
+    }
+
+    /**
+     * 鏁版嵁澶勭悊鍣�
+     * 
+     * @param value 鏁版嵁鍊�
+     * @param excel 鏁版嵁娉ㄨВ
+     * @return
+     */
+    public String dataFormatHandlerAdapter(Object value, Excel excel, Cell cell)
+    {
+        try
+        {
+            Object instance = excel.handler().newInstance();
+            Method formatMethod = excel.handler().getMethod("format", new Class[] { Object.class, String[].class, Cell.class, Workbook.class });
+            value = formatMethod.invoke(instance, value, excel.args(), cell, this.wb);
+        }
+        catch (Exception e)
+        {
+            log.error("涓嶈兘鏍煎紡鍖栨暟鎹� " + excel.handler(), e.getMessage());
+        }
+        return Convert.toStr(value);
+    }
+
+    /**
+     * 鍚堣缁熻淇℃伅
+     */
+    private void addStatisticsData(Integer index, String text, Excel entity)
+    {
+        if (entity != null && entity.isStatistics())
+        {
+            Double temp = 0D;
+            if (!statistics.containsKey(index))
+            {
+                statistics.put(index, temp);
+            }
+            try
+            {
+                temp = Double.valueOf(text);
+            }
+            catch (NumberFormatException e)
+            {
+            }
+            statistics.put(index, statistics.get(index) + temp);
+        }
+    }
+
+    /**
+     * 鍒涘缓缁熻琛�
+     */
+    public void addStatisticsRow()
+    {
+        if (statistics.size() > 0)
+        {
+            Row row = sheet.createRow(sheet.getLastRowNum() + 1);
+            Set<Integer> keys = statistics.keySet();
+            Cell cell = row.createCell(0);
+            cell.setCellStyle(styles.get("total"));
+            cell.setCellValue("鍚堣");
+
+            for (Integer key : keys)
+            {
+                cell = row.createCell(key);
+                cell.setCellStyle(styles.get("total"));
+                cell.setCellValue(DOUBLE_FORMAT.format(statistics.get(key)));
+            }
+            statistics.clear();
+        }
+    }
+
+    /**
+     * 缂栫爜鏂囦欢鍚�
+     */
+    public String encodingFilename(String filename)
+    {
+        filename = UUID.randomUUID() + "_" + filename + ".xlsx";
+        return filename;
+    }
+
+    /**
+     * 鑾峰彇涓嬭浇璺緞
+     * 
+     * @param filename 鏂囦欢鍚嶇О
+     */
+    public String getAbsoluteFile(String filename)
+    {
+        String downloadPath = BaseConfig.getDownloadPath() + filename;
+        File desc = new File(downloadPath);
+        if (!desc.getParentFile().exists())
+        {
+            desc.getParentFile().mkdirs();
+        }
+        return downloadPath;
+    }
+
+    /**
+     * 鑾峰彇bean涓殑灞炴�у��
+     * 
+     * @param vo 瀹炰綋瀵硅薄
+     * @param field 瀛楁
+     * @param excel 娉ㄨВ
+     * @return 鏈�缁堢殑灞炴�у��
+     * @throws Exception
+     */
+    private Object getTargetValue(T vo, Field field, Excel excel) throws Exception
+    {
+        Object o = field.get(vo);
+        if (StringUtils.isNotEmpty(excel.targetAttr()))
+        {
+            String target = excel.targetAttr();
+            if (target.contains("."))
+            {
+                String[] targets = target.split("[.]");
+                for (String name : targets)
+                {
+                    o = getValue(o, name);
+                }
+            }
+            else
+            {
+                o = getValue(o, target);
+            }
+        }
+        return o;
+    }
+
+    /**
+     * 浠ョ被鐨勫睘鎬х殑get鏂规硶鏂规硶褰㈠紡鑾峰彇鍊�
+     * 
+     * @param o
+     * @param name
+     * @return value
+     * @throws Exception
+     */
+    private Object getValue(Object o, String name) throws Exception
+    {
+        if (StringUtils.isNotNull(o) && StringUtils.isNotEmpty(name))
+        {
+            Class<?> clazz = o.getClass();
+            Field field = clazz.getDeclaredField(name);
+            field.setAccessible(true);
+            o = field.get(o);
+        }
+        return o;
+    }
+
+    /**
+     * 寰楀埌鎵�鏈夊畾涔夊瓧娈�
+     */
+    private void createExcelField()
+    {
+        this.fields = getFields();
+        this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList());
+        this.maxHeight = getRowHeight();
+    }
+
+    /**
+     * 鑾峰彇瀛楁娉ㄨВ淇℃伅
+     */
+    public List<Object[]> getFields()
+    {
+        List<Object[]> fields = new ArrayList<Object[]>();
+        List<Field> tempFields = new ArrayList<>();
+        tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields()));
+        tempFields.addAll(Arrays.asList(clazz.getDeclaredFields()));
+        for (Field field : tempFields)
+        {
+            if (!ArrayUtils.contains(this.excludeFields, field.getName()))
+            {
+                // 鍗曟敞瑙�
+                if (field.isAnnotationPresent(Excel.class))
+                {
+                    Excel attr = field.getAnnotation(Excel.class);
+                    if (attr != null && (attr.type() == Excel.Type.ALL || attr.type() == type))
+                    {
+                        field.setAccessible(true);
+                        fields.add(new Object[] { field, attr });
+                    }
+                    if (Collection.class.isAssignableFrom(field.getType()))
+                    {
+                        subMethod = getSubMethod(field.getName(), clazz);
+                        ParameterizedType pt = (ParameterizedType) field.getGenericType();
+                        Class<?> subClass = (Class<?>) pt.getActualTypeArguments()[0];
+                        this.subFields = FieldUtils.getFieldsListWithAnnotation(subClass, Excel.class);
+                    }
+                }
+
+                // 澶氭敞瑙�
+                if (field.isAnnotationPresent(Excels.class))
+                {
+                    Excels attrs = field.getAnnotation(Excels.class);
+                    Excel[] excels = attrs.value();
+                    for (Excel attr : excels)
+                    {
+                        if (!ArrayUtils.contains(this.excludeFields, field.getName() + "." + attr.targetAttr())
+                                && (attr != null && (attr.type() == Excel.Type.ALL || attr.type() == type)))
+                        {
+                            field.setAccessible(true);
+                            fields.add(new Object[] { field, attr });
+                        }
+                    }
+                }
+            }
+        }
+        return fields;
+    }
+
+    /**
+     * 鏍规嵁娉ㄨВ鑾峰彇鏈�澶ц楂�
+     */
+    public short getRowHeight()
+    {
+        double maxHeight = 0;
+        for (Object[] os : this.fields)
+        {
+            Excel excel = (Excel) os[1];
+            maxHeight = Math.max(maxHeight, excel.height());
+        }
+        return (short) (maxHeight * 20);
+    }
+
+    /**
+     * 鍒涘缓涓�涓伐浣滅翱
+     */
+    public void createWorkbook()
+    {
+        this.wb = new SXSSFWorkbook(500);
+        this.sheet = wb.createSheet();
+        wb.setSheetName(0, sheetName);
+        this.styles = createStyles(wb);
+    }
+
+    /**
+     * 鍒涘缓宸ヤ綔琛�
+     * 
+     * @param sheetNo sheet鏁伴噺
+     * @param index 搴忓彿
+     */
+    public void createSheet(int sheetNo, int index)
+    {
+        // 璁剧疆宸ヤ綔琛ㄧ殑鍚嶇О.
+        if (sheetNo > 1 && index > 0)
+        {
+            this.sheet = wb.createSheet();
+            this.createTitle();
+            wb.setSheetName(index, sheetName + index);
+        }
+    }
+
+    /**
+     * 鑾峰彇鍗曞厓鏍煎��
+     * 
+     * @param row 鑾峰彇鐨勮
+     * @param column 鑾峰彇鍗曞厓鏍煎垪鍙�
+     * @return 鍗曞厓鏍煎��
+     */
+    public Object getCellValue(Row row, int column)
+    {
+        if (row == null)
+        {
+            return row;
+        }
+        Object val = "";
+        try
+        {
+            Cell cell = row.getCell(column);
+            if (StringUtils.isNotNull(cell))
+            {
+                if (cell.getCellType() == CellType.NUMERIC || cell.getCellType() == CellType.FORMULA)
+                {
+                    val = cell.getNumericCellValue();
+                    if (DateUtil.isCellDateFormatted(cell))
+                    {
+                        val = DateUtil.getJavaDate((Double) val); // POI Excel 鏃ユ湡鏍煎紡杞崲
+                    }
+                    else
+                    {
+                        if ((Double) val % 1 != 0)
+                        {
+                            val = new BigDecimal(val.toString());
+                        }
+                        else
+                        {
+                            val = new DecimalFormat("0").format(val);
+                        }
+                    }
+                }
+                else if (cell.getCellType() == CellType.STRING)
+                {
+                    val = cell.getStringCellValue();
+                }
+                else if (cell.getCellType() == CellType.BOOLEAN)
+                {
+                    val = cell.getBooleanCellValue();
+                }
+                else if (cell.getCellType() == CellType.ERROR)
+                {
+                    val = cell.getErrorCellValue();
+                }
+
+            }
+        }
+        catch (Exception e)
+        {
+            return val;
+        }
+        return val;
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁鏄┖琛�
+     * 
+     * @param row 鍒ゆ柇鐨勮
+     * @return
+     */
+    private boolean isRowEmpty(Row row)
+    {
+        if (row == null)
+        {
+            return true;
+        }
+        for (int i = row.getFirstCellNum(); i < row.getLastCellNum(); i++)
+        {
+            Cell cell = row.getCell(i);
+            if (cell != null && cell.getCellType() != CellType.BLANK)
+            {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 鑾峰彇Excel2003鍥剧墖
+     *
+     * @param sheet 褰撳墠sheet瀵硅薄
+     * @param workbook 宸ヤ綔绨垮璞�
+     * @return Map key:鍥剧墖鍗曞厓鏍肩储寮曪紙1_1锛塖tring锛寁alue:鍥剧墖娴丳ictureData
+     */
+    public static Map<String, PictureData> getSheetPictures03(HSSFSheet sheet, HSSFWorkbook workbook)
+    {
+        Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();
+        List<HSSFPictureData> pictures = workbook.getAllPictures();
+        if (!pictures.isEmpty())
+        {
+            for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren())
+            {
+                HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor();
+                if (shape instanceof HSSFPicture)
+                {
+                    HSSFPicture pic = (HSSFPicture) shape;
+                    int pictureIndex = pic.getPictureIndex() - 1;
+                    HSSFPictureData picData = pictures.get(pictureIndex);
+                    String picIndex = anchor.getRow1() + "_" + anchor.getCol1();
+                    sheetIndexPicMap.put(picIndex, picData);
+                }
+            }
+            return sheetIndexPicMap;
+        }
+        else
+        {
+            return sheetIndexPicMap;
+        }
+    }
+
+    /**
+     * 鑾峰彇Excel2007鍥剧墖
+     *
+     * @param sheet 褰撳墠sheet瀵硅薄
+     * @param workbook 宸ヤ綔绨垮璞�
+     * @return Map key:鍥剧墖鍗曞厓鏍肩储寮曪紙1_1锛塖tring锛寁alue:鍥剧墖娴丳ictureData
+     */
+    public static Map<String, PictureData> getSheetPictures07(XSSFSheet sheet, XSSFWorkbook workbook)
+    {
+        Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();
+        for (POIXMLDocumentPart dr : sheet.getRelations())
+        {
+            if (dr instanceof XSSFDrawing)
+            {
+                XSSFDrawing drawing = (XSSFDrawing) dr;
+                List<XSSFShape> shapes = drawing.getShapes();
+                for (XSSFShape shape : shapes)
+                {
+                    if (shape instanceof XSSFPicture)
+                    {
+                        XSSFPicture pic = (XSSFPicture) shape;
+                        XSSFClientAnchor anchor = pic.getPreferredSize();
+                        CTMarker ctMarker = anchor.getFrom();
+                        String picIndex = ctMarker.getRow() + "_" + ctMarker.getCol();
+                        sheetIndexPicMap.put(picIndex, pic.getPictureData());
+                    }
+                }
+            }
+        }
+        return sheetIndexPicMap;
+    }
+
+    /**
+     * 鏍煎紡鍖栦笉鍚岀被鍨嬬殑鏃ユ湡瀵硅薄
+     * 
+     * @param dateFormat 鏃ユ湡鏍煎紡
+     * @param val 琚牸寮忓寲鐨勬棩鏈熷璞�
+     * @return 鏍煎紡鍖栧悗鐨勬棩鏈熷瓧绗�
+     */
+    public String parseDateToStr(String dateFormat, Object val)
+    {
+        if (val == null)
+        {
+            return "";
+        }
+        String str;
+        if (val instanceof Date)
+        {
+            str = DateUtils.parseDateToStr(dateFormat, (Date) val);
+        }
+        else if (val instanceof LocalDateTime)
+        {
+            str = DateUtils.parseDateToStr(dateFormat, DateUtils.toDate((LocalDateTime) val));
+        }
+        else if (val instanceof LocalDate)
+        {
+            str = DateUtils.parseDateToStr(dateFormat, DateUtils.toDate((LocalDate) val));
+        }
+        else
+        {
+            str = val.toString();
+        }
+        return str;
+    }
+
+    /**
+     * 鏄惁鏈夊璞$殑瀛愬垪琛�
+     */
+    public boolean isSubList()
+    {
+        return StringUtils.isNotNull(subFields) && subFields.size() > 0;
+    }
+
+    /**
+     * 鏄惁鏈夊璞$殑瀛愬垪琛紝闆嗗悎涓嶄负绌�
+     */
+    public boolean isSubListValue(T vo)
+    {
+        return StringUtils.isNotNull(subFields) && subFields.size() > 0 && StringUtils.isNotNull(getListCellValue(vo)) && getListCellValue(vo).size() > 0;
+    }
+
+    /**
+     * 鑾峰彇闆嗗悎鐨勫��
+     */
+    public Collection<?> getListCellValue(Object obj)
+    {
+        Object value;
+        try
+        {
+            value = subMethod.invoke(obj, new Object[] {});
+        }
+        catch (Exception e)
+        {
+            return new ArrayList<Object>();
+        }
+        return (Collection<?>) value;
+    }
+
+    /**
+     * 鑾峰彇瀵硅薄鐨勫瓙鍒楄〃鏂规硶
+     * 
+     * @param name 鍚嶇О
+     * @param pojoClass 绫诲璞�
+     * @return 瀛愬垪琛ㄦ柟娉�
+     */
+    public Method getSubMethod(String name, Class<?> pojoClass)
+    {
+        StringBuffer getMethodName = new StringBuffer("get");
+        getMethodName.append(name.substring(0, 1).toUpperCase());
+        getMethodName.append(name.substring(1));
+        Method method = null;
+        try
+        {
+            method = pojoClass.getMethod(getMethodName.toString(), new Class[] {});
+        }
+        catch (Exception e)
+        {
+            log.error("鑾峰彇瀵硅薄寮傚父{}", e.getMessage());
+        }
+        return method;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/reflect/ReflectUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/reflect/ReflectUtils.java
new file mode 100644
index 0000000..fd407bb
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/reflect/ReflectUtils.java
@@ -0,0 +1,410 @@
+package com.zhitan.common.utils.reflect;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.Date;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.Validate;
+import org.apache.poi.ss.usermodel.DateUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.zhitan.common.core.text.Convert;
+import com.zhitan.common.utils.DateUtils;
+
+/**
+ * 鍙嶅皠宸ュ叿绫�. 鎻愪緵璋冪敤getter/setter鏂规硶, 璁块棶绉佹湁鍙橀噺, 璋冪敤绉佹湁鏂规硶, 鑾峰彇娉涘瀷绫诲瀷Class, 琚獳OP杩囩殑鐪熷疄绫荤瓑宸ュ叿鍑芥暟.
+ * 
+ * @author zhitan
+ */
+@SuppressWarnings("rawtypes")
+public class ReflectUtils
+{
+    private static final String SETTER_PREFIX = "set";
+
+    private static final String GETTER_PREFIX = "get";
+
+    private static final String CGLIB_CLASS_SEPARATOR = "$$";
+
+    private static Logger logger = LoggerFactory.getLogger(ReflectUtils.class);
+
+    /**
+     * 璋冪敤Getter鏂规硶.
+     * 鏀寔澶氱骇锛屽锛氬璞″悕.瀵硅薄鍚�.鏂规硶
+     */
+    @SuppressWarnings("unchecked")
+    public static <E> E invokeGetter(Object obj, String propertyName)
+    {
+        Object object = obj;
+        for (String name : StringUtils.split(propertyName, "."))
+        {
+            String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(name);
+            object = invokeMethod(object, getterMethodName, new Class[] {}, new Object[] {});
+        }
+        return (E) object;
+    }
+
+    /**
+     * 璋冪敤Setter鏂规硶, 浠呭尮閰嶆柟娉曞悕銆�
+     * 鏀寔澶氱骇锛屽锛氬璞″悕.瀵硅薄鍚�.鏂规硶
+     */
+    public static <E> void invokeSetter(Object obj, String propertyName, E value)
+    {
+        Object object = obj;
+        String[] names = StringUtils.split(propertyName, ".");
+        for (int i = 0; i < names.length; i++)
+        {
+            if (i < names.length - 1)
+            {
+                String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(names[i]);
+                object = invokeMethod(object, getterMethodName, new Class[] {}, new Object[] {});
+            }
+            else
+            {
+                String setterMethodName = SETTER_PREFIX + StringUtils.capitalize(names[i]);
+                invokeMethodByName(object, setterMethodName, new Object[] { value });
+            }
+        }
+    }
+
+    /**
+     * 鐩存帴璇诲彇瀵硅薄灞炴�у��, 鏃犺private/protected淇グ绗�, 涓嶇粡杩噂etter鍑芥暟.
+     */
+    @SuppressWarnings("unchecked")
+    public static <E> E getFieldValue(final Object obj, final String fieldName)
+    {
+        Field field = getAccessibleField(obj, fieldName);
+        if (field == null)
+        {
+            logger.debug("鍦� [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + fieldName + "] 瀛楁 ");
+            return null;
+        }
+        E result = null;
+        try
+        {
+            result = (E) field.get(obj);
+        }
+        catch (IllegalAccessException e)
+        {
+            logger.error("涓嶅彲鑳芥姏鍑虹殑寮傚父{}", e.getMessage());
+        }
+        return result;
+    }
+
+    /**
+     * 鐩存帴璁剧疆瀵硅薄灞炴�у��, 鏃犺private/protected淇グ绗�, 涓嶇粡杩噑etter鍑芥暟.
+     */
+    public static <E> void setFieldValue(final Object obj, final String fieldName, final E value)
+    {
+        Field field = getAccessibleField(obj, fieldName);
+        if (field == null)
+        {
+            // throw new IllegalArgumentException("鍦� [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + fieldName + "] 瀛楁 ");
+            logger.debug("鍦� [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + fieldName + "] 瀛楁 ");
+            return;
+        }
+        try
+        {
+            field.set(obj, value);
+        }
+        catch (IllegalAccessException e)
+        {
+            logger.error("涓嶅彲鑳芥姏鍑虹殑寮傚父: {}", e.getMessage());
+        }
+    }
+
+    /**
+     * 鐩存帴璋冪敤瀵硅薄鏂规硶, 鏃犺private/protected淇グ绗�.
+     * 鐢ㄤ簬涓�娆℃�ц皟鐢ㄧ殑鎯呭喌锛屽惁鍒欏簲浣跨敤getAccessibleMethod()鍑芥暟鑾峰緱Method鍚庡弽澶嶈皟鐢�.
+     * 鍚屾椂鍖归厤鏂规硶鍚�+鍙傛暟绫诲瀷锛�
+     */
+    @SuppressWarnings("unchecked")
+    public static <E> E invokeMethod(final Object obj, final String methodName, final Class<?>[] parameterTypes,
+            final Object[] args)
+    {
+        if (obj == null || methodName == null)
+        {
+            return null;
+        }
+        Method method = getAccessibleMethod(obj, methodName, parameterTypes);
+        if (method == null)
+        {
+            logger.debug("鍦� [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + methodName + "] 鏂规硶 ");
+            return null;
+        }
+        try
+        {
+            return (E) method.invoke(obj, args);
+        }
+        catch (Exception e)
+        {
+            String msg = "method: " + method + ", obj: " + obj + ", args: " + args + "";
+            throw convertReflectionExceptionToUnchecked(msg, e);
+        }
+    }
+
+    /**
+     * 鐩存帴璋冪敤瀵硅薄鏂规硶, 鏃犺private/protected淇グ绗︼紝
+     * 鐢ㄤ簬涓�娆℃�ц皟鐢ㄧ殑鎯呭喌锛屽惁鍒欏簲浣跨敤getAccessibleMethodByName()鍑芥暟鑾峰緱Method鍚庡弽澶嶈皟鐢�.
+     * 鍙尮閰嶅嚱鏁板悕锛屽鏋滄湁澶氫釜鍚屽悕鍑芥暟璋冪敤绗竴涓��
+     */
+    @SuppressWarnings("unchecked")
+    public static <E> E invokeMethodByName(final Object obj, final String methodName, final Object[] args)
+    {
+        Method method = getAccessibleMethodByName(obj, methodName, args.length);
+        if (method == null)
+        {
+            // 濡傛灉涓虹┖涓嶆姤閿欙紝鐩存帴杩斿洖绌恒��
+            logger.debug("鍦� [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + methodName + "] 鏂规硶 ");
+            return null;
+        }
+        try
+        {
+            // 绫诲瀷杞崲锛堝皢鍙傛暟鏁版嵁绫诲瀷杞崲涓虹洰鏍囨柟娉曞弬鏁扮被鍨嬶級
+            Class<?>[] cs = method.getParameterTypes();
+            for (int i = 0; i < cs.length; i++)
+            {
+                if (args[i] != null && !args[i].getClass().equals(cs[i]))
+                {
+                    if (cs[i] == String.class)
+                    {
+                        args[i] = Convert.toStr(args[i]);
+                        if (StringUtils.endsWith((String) args[i], ".0"))
+                        {
+                            args[i] = StringUtils.substringBefore((String) args[i], ".0");
+                        }
+                    }
+                    else if (cs[i] == Integer.class)
+                    {
+                        args[i] = Convert.toInt(args[i]);
+                    }
+                    else if (cs[i] == Long.class)
+                    {
+                        args[i] = Convert.toLong(args[i]);
+                    }
+                    else if (cs[i] == Double.class)
+                    {
+                        args[i] = Convert.toDouble(args[i]);
+                    }
+                    else if (cs[i] == Float.class)
+                    {
+                        args[i] = Convert.toFloat(args[i]);
+                    }
+                    else if (cs[i] == Date.class)
+                    {
+                        if (args[i] instanceof String)
+                        {
+                            args[i] = DateUtils.parseDate(args[i]);
+                        }
+                        else
+                        {
+                            args[i] = DateUtil.getJavaDate((Double) args[i]);
+                        }
+                    }
+                    else if (cs[i] == boolean.class || cs[i] == Boolean.class)
+                    {
+                        args[i] = Convert.toBool(args[i]);
+                    }
+                }
+            }
+            return (E) method.invoke(obj, args);
+        }
+        catch (Exception e)
+        {
+            String msg = "method: " + method + ", obj: " + obj + ", args: " + args + "";
+            throw convertReflectionExceptionToUnchecked(msg, e);
+        }
+    }
+
+    /**
+     * 寰幆鍚戜笂杞瀷, 鑾峰彇瀵硅薄鐨凞eclaredField, 骞跺己鍒惰缃负鍙闂�.
+     * 濡傚悜涓婅浆鍨嬪埌Object浠嶆棤娉曟壘鍒�, 杩斿洖null.
+     */
+    public static Field getAccessibleField(final Object obj, final String fieldName)
+    {
+        // 涓虹┖涓嶆姤閿欍�傜洿鎺ヨ繑鍥� null
+        if (obj == null)
+        {
+            return null;
+        }
+        Validate.notBlank(fieldName, "fieldName can't be blank");
+        for (Class<?> superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass())
+        {
+            try
+            {
+                Field field = superClass.getDeclaredField(fieldName);
+                makeAccessible(field);
+                return field;
+            }
+            catch (NoSuchFieldException e)
+            {
+                continue;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 寰幆鍚戜笂杞瀷, 鑾峰彇瀵硅薄鐨凞eclaredMethod,骞跺己鍒惰缃负鍙闂�.
+     * 濡傚悜涓婅浆鍨嬪埌Object浠嶆棤娉曟壘鍒�, 杩斿洖null.
+     * 鍖归厤鍑芥暟鍚�+鍙傛暟绫诲瀷銆�
+     * 鐢ㄤ簬鏂规硶闇�瑕佽澶氭璋冪敤鐨勬儏鍐�. 鍏堜娇鐢ㄦ湰鍑芥暟鍏堝彇寰桵ethod,鐒跺悗璋冪敤Method.invoke(Object obj, Object... args)
+     */
+    public static Method getAccessibleMethod(final Object obj, final String methodName,
+            final Class<?>... parameterTypes)
+    {
+        // 涓虹┖涓嶆姤閿欍�傜洿鎺ヨ繑鍥� null
+        if (obj == null)
+        {
+            return null;
+        }
+        Validate.notBlank(methodName, "methodName can't be blank");
+        for (Class<?> searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass())
+        {
+            try
+            {
+                Method method = searchType.getDeclaredMethod(methodName, parameterTypes);
+                makeAccessible(method);
+                return method;
+            }
+            catch (NoSuchMethodException e)
+            {
+                continue;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 寰幆鍚戜笂杞瀷, 鑾峰彇瀵硅薄鐨凞eclaredMethod,骞跺己鍒惰缃负鍙闂�.
+     * 濡傚悜涓婅浆鍨嬪埌Object浠嶆棤娉曟壘鍒�, 杩斿洖null.
+     * 鍙尮閰嶅嚱鏁板悕銆�
+     * 鐢ㄤ簬鏂规硶闇�瑕佽澶氭璋冪敤鐨勬儏鍐�. 鍏堜娇鐢ㄦ湰鍑芥暟鍏堝彇寰桵ethod,鐒跺悗璋冪敤Method.invoke(Object obj, Object... args)
+     */
+    public static Method getAccessibleMethodByName(final Object obj, final String methodName, int argsNum)
+    {
+        // 涓虹┖涓嶆姤閿欍�傜洿鎺ヨ繑鍥� null
+        if (obj == null)
+        {
+            return null;
+        }
+        Validate.notBlank(methodName, "methodName can't be blank");
+        for (Class<?> searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass())
+        {
+            Method[] methods = searchType.getDeclaredMethods();
+            for (Method method : methods)
+            {
+                if (method.getName().equals(methodName) && method.getParameterTypes().length == argsNum)
+                {
+                    makeAccessible(method);
+                    return method;
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 鏀瑰彉private/protected鐨勬柟娉曚负public锛屽敖閲忎笉璋冪敤瀹為檯鏀瑰姩鐨勮鍙ワ紝閬垮厤JDK鐨凷ecurityManager鎶辨�ㄣ��
+     */
+    public static void makeAccessible(Method method)
+    {
+        if ((!Modifier.isPublic(method.getModifiers()) || !Modifier.isPublic(method.getDeclaringClass().getModifiers()))
+                && !method.isAccessible())
+        {
+            method.setAccessible(true);
+        }
+    }
+
+    /**
+     * 鏀瑰彉private/protected鐨勬垚鍛樺彉閲忎负public锛屽敖閲忎笉璋冪敤瀹為檯鏀瑰姩鐨勮鍙ワ紝閬垮厤JDK鐨凷ecurityManager鎶辨�ㄣ��
+     */
+    public static void makeAccessible(Field field)
+    {
+        if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers())
+                || Modifier.isFinal(field.getModifiers())) && !field.isAccessible())
+        {
+            field.setAccessible(true);
+        }
+    }
+
+    /**
+     * 閫氳繃鍙嶅皠, 鑾峰緱Class瀹氫箟涓0鏄庣殑娉涘瀷鍙傛暟鐨勭被鍨�, 娉ㄦ剰娉涘瀷蹇呴』瀹氫箟鍦ㄧ埗绫诲
+     * 濡傛棤娉曟壘鍒�, 杩斿洖Object.class.
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> Class<T> getClassGenricType(final Class clazz)
+    {
+        return getClassGenricType(clazz, 0);
+    }
+
+    /**
+     * 閫氳繃鍙嶅皠, 鑾峰緱Class瀹氫箟涓0鏄庣殑鐖剁被鐨勬硾鍨嬪弬鏁扮殑绫诲瀷.
+     * 濡傛棤娉曟壘鍒�, 杩斿洖Object.class.
+     */
+    public static Class getClassGenricType(final Class clazz, final int index)
+    {
+        Type genType = clazz.getGenericSuperclass();
+
+        if (!(genType instanceof ParameterizedType))
+        {
+            logger.debug(clazz.getSimpleName() + "'s superclass not ParameterizedType");
+            return Object.class;
+        }
+
+        Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
+
+        if (index >= params.length || index < 0)
+        {
+            logger.debug("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s Parameterized Type: "
+                    + params.length);
+            return Object.class;
+        }
+        if (!(params[index] instanceof Class))
+        {
+            logger.debug(clazz.getSimpleName() + " not set the actual class on superclass generic parameter");
+            return Object.class;
+        }
+
+        return (Class) params[index];
+    }
+
+    public static Class<?> getUserClass(Object instance)
+    {
+        if (instance == null)
+        {
+            throw new RuntimeException("Instance must not be null");
+        }
+        Class clazz = instance.getClass();
+        if (clazz != null && clazz.getName().contains(CGLIB_CLASS_SEPARATOR))
+        {
+            Class<?> superClass = clazz.getSuperclass();
+            if (superClass != null && !Object.class.equals(superClass))
+            {
+                return superClass;
+            }
+        }
+        return clazz;
+
+    }
+
+    /**
+     * 灏嗗弽灏勬椂鐨刢hecked exception杞崲涓簎nchecked exception.
+     */
+    public static RuntimeException convertReflectionExceptionToUnchecked(String msg, Exception e)
+    {
+        if (e instanceof IllegalAccessException || e instanceof IllegalArgumentException
+                || e instanceof NoSuchMethodException)
+        {
+            return new IllegalArgumentException(msg, e);
+        }
+        else if (e instanceof InvocationTargetException)
+        {
+            return new RuntimeException(msg, ((InvocationTargetException) e).getTargetException());
+        }
+        return new RuntimeException(msg, e);
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/sign/Base64.java b/zhitan-common/src/main/java/com/zhitan/common/utils/sign/Base64.java
new file mode 100644
index 0000000..1e9b825
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/sign/Base64.java
@@ -0,0 +1,291 @@
+package com.zhitan.common.utils.sign;
+
+/**
+ * Base64宸ュ叿绫�
+ * 
+ * @author zhitan
+ */
+public final class Base64
+{
+    static private final int     BASELENGTH           = 128;
+    static private final int     LOOKUPLENGTH         = 64;
+    static private final int     TWENTYFOURBITGROUP   = 24;
+    static private final int     EIGHTBIT             = 8;
+    static private final int     SIXTEENBIT           = 16;
+    static private final int     FOURBYTE             = 4;
+    static private final int     SIGN                 = -128;
+    static private final char    PAD                  = '=';
+    static final private byte[]  base64Alphabet       = new byte[BASELENGTH];
+    static final private char[]  lookUpBase64Alphabet = new char[LOOKUPLENGTH];
+
+    static
+    {
+        for (int i = 0; i < BASELENGTH; ++i)
+        {
+            base64Alphabet[i] = -1;
+        }
+        for (int i = 'Z'; i >= 'A'; i--)
+        {
+            base64Alphabet[i] = (byte) (i - 'A');
+        }
+        for (int i = 'z'; i >= 'a'; i--)
+        {
+            base64Alphabet[i] = (byte) (i - 'a' + 26);
+        }
+
+        for (int i = '9'; i >= '0'; i--)
+        {
+            base64Alphabet[i] = (byte) (i - '0' + 52);
+        }
+
+        base64Alphabet['+'] = 62;
+        base64Alphabet['/'] = 63;
+
+        for (int i = 0; i <= 25; i++)
+        {
+            lookUpBase64Alphabet[i] = (char) ('A' + i);
+        }
+
+        for (int i = 26, j = 0; i <= 51; i++, j++)
+        {
+            lookUpBase64Alphabet[i] = (char) ('a' + j);
+        }
+
+        for (int i = 52, j = 0; i <= 61; i++, j++)
+        {
+            lookUpBase64Alphabet[i] = (char) ('0' + j);
+        }
+        lookUpBase64Alphabet[62] = (char) '+';
+        lookUpBase64Alphabet[63] = (char) '/';
+    }
+
+    private static boolean isWhiteSpace(char octect)
+    {
+        return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9);
+    }
+
+    private static boolean isPad(char octect)
+    {
+        return (octect == PAD);
+    }
+
+    private static boolean isData(char octect)
+    {
+        return (octect < BASELENGTH && base64Alphabet[octect] != -1);
+    }
+
+    /**
+     * Encodes hex octects into Base64
+     *
+     * @param binaryData Array containing binaryData
+     * @return Encoded Base64 array
+     */
+    public static String encode(byte[] binaryData)
+    {
+        if (binaryData == null)
+        {
+            return null;
+        }
+
+        int lengthDataBits = binaryData.length * EIGHTBIT;
+        if (lengthDataBits == 0)
+        {
+            return "";
+        }
+
+        int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP;
+        int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP;
+        int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1 : numberTriplets;
+        char encodedData[] = null;
+
+        encodedData = new char[numberQuartet * 4];
+
+        byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0;
+
+        int encodedIndex = 0;
+        int dataIndex = 0;
+
+        for (int i = 0; i < numberTriplets; i++)
+        {
+            b1 = binaryData[dataIndex++];
+            b2 = binaryData[dataIndex++];
+            b3 = binaryData[dataIndex++];
+
+            l = (byte) (b2 & 0x0f);
+            k = (byte) (b1 & 0x03);
+
+            byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0);
+            byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0);
+            byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc);
+
+            encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
+            encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)];
+            encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3];
+            encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f];
+        }
+
+        // form integral number of 6-bit groups
+        if (fewerThan24bits == EIGHTBIT)
+        {
+            b1 = binaryData[dataIndex];
+            k = (byte) (b1 & 0x03);
+            byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0);
+            encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
+            encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4];
+            encodedData[encodedIndex++] = PAD;
+            encodedData[encodedIndex++] = PAD;
+        }
+        else if (fewerThan24bits == SIXTEENBIT)
+        {
+            b1 = binaryData[dataIndex];
+            b2 = binaryData[dataIndex + 1];
+            l = (byte) (b2 & 0x0f);
+            k = (byte) (b1 & 0x03);
+
+            byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0);
+            byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0);
+
+            encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
+            encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)];
+            encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2];
+            encodedData[encodedIndex++] = PAD;
+        }
+        return new String(encodedData);
+    }
+
+    /**
+     * Decodes Base64 data into octects
+     *
+     * @param encoded string containing Base64 data
+     * @return Array containind decoded data.
+     */
+    public static byte[] decode(String encoded)
+    {
+        if (encoded == null)
+        {
+            return null;
+        }
+
+        char[] base64Data = encoded.toCharArray();
+        // remove white spaces
+        int len = removeWhiteSpace(base64Data);
+
+        if (len % FOURBYTE != 0)
+        {
+            return null;// should be divisible by four
+        }
+
+        int numberQuadruple = (len / FOURBYTE);
+
+        if (numberQuadruple == 0)
+        {
+            return new byte[0];
+        }
+
+        byte decodedData[] = null;
+        byte b1 = 0, b2 = 0, b3 = 0, b4 = 0;
+        char d1 = 0, d2 = 0, d3 = 0, d4 = 0;
+
+        int i = 0;
+        int encodedIndex = 0;
+        int dataIndex = 0;
+        decodedData = new byte[(numberQuadruple) * 3];
+
+        for (; i < numberQuadruple - 1; i++)
+        {
+
+            if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++]))
+                    || !isData((d3 = base64Data[dataIndex++])) || !isData((d4 = base64Data[dataIndex++])))
+            {
+                return null;
+            } // if found "no data" just return null
+
+            b1 = base64Alphabet[d1];
+            b2 = base64Alphabet[d2];
+            b3 = base64Alphabet[d3];
+            b4 = base64Alphabet[d4];
+
+            decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
+            decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
+            decodedData[encodedIndex++] = (byte) (b3 << 6 | b4);
+        }
+
+        if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++])))
+        {
+            return null;// if found "no data" just return null
+        }
+
+        b1 = base64Alphabet[d1];
+        b2 = base64Alphabet[d2];
+
+        d3 = base64Data[dataIndex++];
+        d4 = base64Data[dataIndex++];
+        if (!isData((d3)) || !isData((d4)))
+        {// Check if they are PAD characters
+            if (isPad(d3) && isPad(d4))
+            {
+                if ((b2 & 0xf) != 0)// last 4 bits should be zero
+                {
+                    return null;
+                }
+                byte[] tmp = new byte[i * 3 + 1];
+                System.arraycopy(decodedData, 0, tmp, 0, i * 3);
+                tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
+                return tmp;
+            }
+            else if (!isPad(d3) && isPad(d4))
+            {
+                b3 = base64Alphabet[d3];
+                if ((b3 & 0x3) != 0)// last 2 bits should be zero
+                {
+                    return null;
+                }
+                byte[] tmp = new byte[i * 3 + 2];
+                System.arraycopy(decodedData, 0, tmp, 0, i * 3);
+                tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
+                tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
+                return tmp;
+            }
+            else
+            {
+                return null;
+            }
+        }
+        else
+        { // No PAD e.g 3cQl
+            b3 = base64Alphabet[d3];
+            b4 = base64Alphabet[d4];
+            decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
+            decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
+            decodedData[encodedIndex++] = (byte) (b3 << 6 | b4);
+
+        }
+        return decodedData;
+    }
+
+    /**
+     * remove WhiteSpace from MIME containing encoded Base64 data.
+     *
+     * @param data the byte array of base64 data (with WS)
+     * @return the new length
+     */
+    private static int removeWhiteSpace(char[] data)
+    {
+        if (data == null)
+        {
+            return 0;
+        }
+
+        // count characters that's not whitespace
+        int newSize = 0;
+        int len = data.length;
+        for (int i = 0; i < len; i++)
+        {
+            if (!isWhiteSpace(data[i]))
+            {
+                data[newSize++] = data[i];
+            }
+        }
+        return newSize;
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/sign/Md5Utils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/sign/Md5Utils.java
new file mode 100644
index 0000000..4c566f3
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/sign/Md5Utils.java
@@ -0,0 +1,67 @@
+package com.zhitan.common.utils.sign;
+
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Md5鍔犲瘑鏂规硶
+ * 
+ * @author zhitan
+ */
+public class Md5Utils
+{
+    private static final Logger log = LoggerFactory.getLogger(Md5Utils.class);
+
+    private static byte[] md5(String s)
+    {
+        MessageDigest algorithm;
+        try
+        {
+            algorithm = MessageDigest.getInstance("MD5");
+            algorithm.reset();
+            algorithm.update(s.getBytes("UTF-8"));
+            byte[] messageDigest = algorithm.digest();
+            return messageDigest;
+        }
+        catch (Exception e)
+        {
+            log.error("MD5 Error...", e);
+        }
+        return null;
+    }
+
+    private static final String toHex(byte hash[])
+    {
+        if (hash == null)
+        {
+            return null;
+        }
+        StringBuffer buf = new StringBuffer(hash.length * 2);
+        int i;
+
+        for (i = 0; i < hash.length; i++)
+        {
+            if ((hash[i] & 0xff) < 0x10)
+            {
+                buf.append("0");
+            }
+            buf.append(Long.toString(hash[i] & 0xff, 16));
+        }
+        return buf.toString();
+    }
+
+    public static String hash(String s)
+    {
+        try
+        {
+            return new String(toHex(md5(s)).getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8);
+        }
+        catch (Exception e)
+        {
+            log.error("not supported charset...{}", e);
+            return s;
+        }
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/spring/SpringUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/spring/SpringUtils.java
new file mode 100644
index 0000000..011f413
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/spring/SpringUtils.java
@@ -0,0 +1,158 @@
+package com.zhitan.common.utils.spring;
+
+import org.springframework.aop.framework.AopContext;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * spring宸ュ叿绫� 鏂逛究鍦ㄩ潪spring绠$悊鐜涓幏鍙朾ean
+ * 
+ * @author zhitan
+ */
+@Component
+public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware 
+{
+    /** Spring搴旂敤涓婁笅鏂囩幆澧� */
+    private static ConfigurableListableBeanFactory beanFactory;
+
+    private static ApplicationContext applicationContext;
+
+    @Override
+    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException 
+    {
+        SpringUtils.beanFactory = beanFactory;
+    }
+
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException 
+    {
+        SpringUtils.applicationContext = applicationContext;
+    }
+
+    /**
+     * 鑾峰彇瀵硅薄
+     *
+     * @param name
+     * @return Object 涓�涓互鎵�缁欏悕瀛楁敞鍐岀殑bean鐨勫疄渚�
+     * @throws org.springframework.beans.BeansException
+     *
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T getBean(String name) throws BeansException
+    {
+        return (T) beanFactory.getBean(name);
+    }
+
+    /**
+     * 鑾峰彇绫诲瀷涓簉equiredType鐨勫璞�
+     *
+     * @param clz
+     * @return
+     * @throws org.springframework.beans.BeansException
+     *
+     */
+    public static <T> T getBean(Class<T> clz) throws BeansException
+    {
+        T result = (T) beanFactory.getBean(clz);
+        return result;
+    }
+
+    /**
+     * 濡傛灉BeanFactory鍖呭惈涓�涓笌鎵�缁欏悕绉板尮閰嶇殑bean瀹氫箟锛屽垯杩斿洖true
+     *
+     * @param name
+     * @return boolean
+     */
+    public static boolean containsBean(String name)
+    {
+        return beanFactory.containsBean(name);
+    }
+
+    /**
+     * 鍒ゆ柇浠ョ粰瀹氬悕瀛楁敞鍐岀殑bean瀹氫箟鏄竴涓猻ingleton杩樻槸涓�涓猵rototype銆� 濡傛灉涓庣粰瀹氬悕瀛楃浉搴旂殑bean瀹氫箟娌℃湁琚壘鍒帮紝灏嗕細鎶涘嚭涓�涓紓甯革紙NoSuchBeanDefinitionException锛�
+     *
+     * @param name
+     * @return boolean
+     * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
+     *
+     */
+    public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException
+    {
+        return beanFactory.isSingleton(name);
+    }
+
+    /**
+     * @param name
+     * @return Class 娉ㄥ唽瀵硅薄鐨勭被鍨�
+     * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
+     *
+     */
+    public static Class<?> getType(String name) throws NoSuchBeanDefinitionException
+    {
+        return beanFactory.getType(name);
+    }
+
+    /**
+     * 濡傛灉缁欏畾鐨刡ean鍚嶅瓧鍦╞ean瀹氫箟涓湁鍒悕锛屽垯杩斿洖杩欎簺鍒悕
+     *
+     * @param name
+     * @return
+     * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
+     *
+     */
+    public static String[] getAliases(String name) throws NoSuchBeanDefinitionException
+    {
+        return beanFactory.getAliases(name);
+    }
+
+    /**
+     * 鑾峰彇aop浠g悊瀵硅薄
+     * 
+     * @param invoker
+     * @return
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T getAopProxy(T invoker)
+    {
+        return (T) AopContext.currentProxy();
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鐨勭幆澧冮厤缃紝鏃犻厤缃繑鍥瀗ull
+     *
+     * @return 褰撳墠鐨勭幆澧冮厤缃�
+     */
+    public static String[] getActiveProfiles()
+    {
+        return applicationContext.getEnvironment().getActiveProfiles();
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鐨勭幆澧冮厤缃紝褰撴湁澶氫釜鐜閰嶇疆鏃讹紝鍙幏鍙栫涓�涓�
+     *
+     * @return 褰撳墠鐨勭幆澧冮厤缃�
+     */
+    public static String getActiveProfile()
+    {
+        final String[] activeProfiles = getActiveProfiles();
+        return StringUtils.isNotEmpty(activeProfiles) ? activeProfiles[0] : null;
+    }
+
+    /**
+     * 鑾峰彇閰嶇疆鏂囦欢涓殑鍊�
+     *
+     * @param key 閰嶇疆鏂囦欢鐨刱ey
+     * @return 褰撳墠鐨勯厤缃枃浠剁殑鍊�
+     *
+     */
+    public static String getRequiredProperty(String key)
+    {
+        return applicationContext.getEnvironment().getRequiredProperty(key);
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/sql/SqlUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/sql/SqlUtil.java
new file mode 100644
index 0000000..9c5607e
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/sql/SqlUtil.java
@@ -0,0 +1,70 @@
+package com.zhitan.common.utils.sql;
+
+import com.zhitan.common.exception.UtilException;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * sql鎿嶄綔宸ュ叿绫�
+ * 
+ * @author zhitan
+ */
+public class SqlUtil
+{
+    /**
+     * 瀹氫箟甯哥敤鐨� sql鍏抽敭瀛�
+     */
+    public static String SQL_REGEX = "and |extractvalue|updatexml|exec |insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |or |+|user()";
+
+    /**
+     * 浠呮敮鎸佸瓧姣嶃�佹暟瀛椼�佷笅鍒掔嚎銆佺┖鏍笺�侀�楀彿銆佸皬鏁扮偣锛堟敮鎸佸涓瓧娈垫帓搴忥級
+     */
+    public static String SQL_PATTERN = "[a-zA-Z0-9_\\ \\,\\.]+";
+
+    /**
+     * 闄愬埗orderBy鏈�澶ч暱搴�
+     */
+    private static final int ORDER_BY_MAX_LENGTH = 500;
+
+    /**
+     * 妫�鏌ュ瓧绗︼紝闃叉娉ㄥ叆缁曡繃
+     */
+    public static String escapeOrderBySql(String value)
+    {
+        if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value))
+        {
+            throw new UtilException("鍙傛暟涓嶇鍚堣鑼冿紝涓嶈兘杩涜鏌ヨ");
+        }
+        if (StringUtils.length(value) > ORDER_BY_MAX_LENGTH)
+        {
+            throw new UtilException("鍙傛暟宸茶秴杩囨渶澶ч檺鍒讹紝涓嶈兘杩涜鏌ヨ");
+        }
+        return value;
+    }
+
+    /**
+     * 楠岃瘉 order by 璇硶鏄惁绗﹀悎瑙勮寖
+     */
+    public static boolean isValidOrderBySql(String value)
+    {
+        return value.matches(SQL_PATTERN);
+    }
+
+    /**
+     * SQL鍏抽敭瀛楁鏌�
+     */
+    public static void filterKeyword(String value)
+    {
+        if (StringUtils.isEmpty(value))
+        {
+            return;
+        }
+        String[] sqlKeywords = StringUtils.split(SQL_REGEX, "\\|");
+        for (String sqlKeyword : sqlKeywords)
+        {
+            if (StringUtils.indexOfIgnoreCase(value, sqlKeyword) > -1)
+            {
+                throw new UtilException("鍙傛暟瀛樺湪SQL娉ㄥ叆椋庨櫓");
+            }
+        }
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/time/Time24HourUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/time/Time24HourUtil.java
new file mode 100644
index 0000000..fbec3a6
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/time/Time24HourUtil.java
@@ -0,0 +1,101 @@
+package com.zhitan.common.utils.time;
+
+import java.util.HashMap;
+
+/**
+ * @description: 鍒ゆ柇鏃堕棿鏄惁瑕嗙洊24灏忔椂
+ * @author hph
+ * @date 2022-11-14  10:52
+ */
+public class Time24HourUtil {
+    public static void main(String[] args) throws Exception {
+        HashMap<String, String> map = new HashMap<>();
+        map.put("06:00:00-12:00:00", "灏�");
+        map.put("12:00:00-16:00:00", "宄�");
+        map.put("16:00:00-20:30:00", "骞�");
+        map.put("20:30:00-00:00:00", "宄�");
+        map.put("00:00:00-06:00:00", "璋�");
+
+        boolean b = checkTimeSpan(map);
+        System.out.print("鏄惁24灏忔椂" + b);
+    }
+
+    /**
+     * 妫�鏌� 鏃堕棿娈� 鏍煎紡鏄惁姝g‘
+     * 1銆佸皬鏃躲�佸垎閽熼兘鏄袱浣� 涓� 灏忔椂鏄�0-23锛屽垎閽熸槸0-59
+     * 2銆侀灏剧浉杩�
+     * 3銆佸叡24灏忔椂
+     *
+     * @param map
+     */
+    public static boolean checkTimeSpan(HashMap<String, String> map) {
+        // 鏍¢獙鏍煎紡
+        String regex = "([0-1]+[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])-([0-1]+[0-9]|2[0-3]):([0-5][0-9]:([0-5][0-9]))";
+        for (String key : map.keySet()) {
+            String[] tt = key.split("-");
+            if (tt[0].equals(tt[1])) {
+                return false;
+            }
+            if (!key.matches(regex)) {
+                return false;
+            }
+        }
+        // 鏍¢獙棣栧熬鐩歌繛
+        // 浠ョ涓�涓负鍩哄噯
+        int foundSpan = 0;
+        String span = "";
+        String startSpan = "";
+        String endSpan = "";
+        int index = 0;
+        // 鏈�澶氬惊鐜痬ap.keySet().size()娆″氨鑳芥壘鍒版墍鏈夌殑
+        // 缂虹偣鍦ㄤ簬锛屽鏋滀竴涓椂闂存涓�鐩存病鎵惧埌涓嬩竴涓紝杩樻槸浼氬惊鐜畬锛屾墠浼氶��鍑�
+        // 濡備綍 寰幆涓�閬嶅氨閫�鍑烘暣涓惊鐜憿
+        // 鍙橀噺澶锛屼笉鎯冲啀鍔犲彉閲忎簡锛屽お涔�
+        for (int i = 0; i < map.keySet().size(); i++) {
+            if (foundSpan == map.keySet().size()) {
+                break;
+            }
+            // 娌″姙娉曪紝杩樻槸鍔犱釜鍙橀噺鍚�
+            int temp = 0 ;
+            for (String value : map.keySet()) {
+                String[] tt = value.split("-");
+                // 绗竴娆�
+                if (index == 0) {
+                    span = tt[1];
+                    startSpan = tt[0];
+                    foundSpan++;
+                    index++;
+                }
+                // 鎵惧埌涓嬩竴涓椂闂存
+                if (span.equals(tt[0])) {
+                    foundSpan++;
+                    span = tt[1];
+                    // 鏈�鍚庝竴娆�
+                    if (foundSpan == map.keySet().size()) {
+                        endSpan = tt[1];
+                    }
+                    temp++;
+                    continue;
+                }
+
+            }
+            // 濡傛灉 涓�娆″惊鐜紝temp娌℃湁澧炲姞锛岄偅涔堝氨閫�鍑猴紝涓嶇敤鍐嶅惊鐜簡
+            if(temp == 0){
+                break;
+            }
+        }
+        if (foundSpan == map.keySet().size() && startSpan.equals(endSpan)) {
+            return true;
+        } else {
+            return false;
+        }
+
+        // 鏍¢獙 鏄惁鏄� 24灏忔椂
+        // 鎸夌悊璇� 鍙棣栧熬鐩歌繛浜嗭紝閭d箞鑲畾鏄�24灏忔椂
+
+
+    }
+
+}
+
+
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/time/TimeManager.java b/zhitan-common/src/main/java/com/zhitan/common/utils/time/TimeManager.java
new file mode 100644
index 0000000..97ffa06
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/time/TimeManager.java
@@ -0,0 +1,149 @@
+package com.zhitan.common.utils.time;
+
+import com.zhitan.common.enums.TimeType;
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+
+import java.util.Date;
+
+public class TimeManager {
+
+  public static final TimeType[] typeArray = {TimeType.LIVE, TimeType.DAY, TimeType.HOUR,
+      TimeType.MONTH, TimeType.SCHEDULING, TimeType.YEAR};
+  private static final DateTimeFormatter pastDataFormat = DateTimeFormat.forPattern
+      ("yyyyMMddHHmmss");
+  private static final DateTimeFormatter hourFormat = DateTimeFormat.forPattern("yyyyMMddHH");
+  private static final DateTimeFormatter dayFormat = DateTimeFormat.forPattern("yyyyMMdd");
+  private static final DateTimeFormatter monthFormat = DateTimeFormat.forPattern("yyyyMM");
+  private static final DateTimeFormatter yearFormat = DateTimeFormat.forPattern("yyyy");
+
+  private static final String livePrefix = "L";
+  private static final String hourPrefix = "H";
+  private static final String dayPrefix = "D";
+  private static final String monthPrefix = "M";
+  private static final String yearPrefix = "Y";
+
+  public static String getExecuteTimeCode(Date time, TimeType type, int delayTime) {
+    DateTime dateTime = new DateTime(time).plusSeconds(-delayTime);
+    return getTimeCode(dateTime.toDate(), type);
+  }
+
+  public static String getTimeCode(Date time, TimeType type) {
+    switch (type) {
+      case LIVE:
+        return livePrefix;
+      case DAY:
+        return dayPrefix + dayFormat.print(new DateTime(time));
+      case HOUR:
+        return hourPrefix + hourFormat.print(new DateTime(time));
+      case MONTH:
+        return monthPrefix + monthFormat.print(new DateTime(time));
+      case YEAR:
+        return yearPrefix + yearFormat.print(new DateTime(time));
+      default:
+        return null;
+    }
+  }
+
+  public static Date getBeginTime(String timeCode) {
+    Date beginTime = getTime(timeCode, 0);
+    if (getTimeType(timeCode) == TimeType.DAY) {
+      beginTime = new DateTime(beginTime).plusHours(9).toDate();
+    }
+
+    return beginTime;
+  }
+
+  public static Date getEndTime(String timeCode) {
+    Date endTime = getTime(timeCode, 1);
+    if (getTimeType(timeCode) == TimeType.DAY) {
+      endTime = new DateTime(endTime).plusHours(9).toDate();
+    }
+
+    return endTime;
+  }
+
+  public static Date getTime(String timeCode) {
+    return getTime(timeCode, 0);
+  }
+
+  public static Date getTime(String timeCode, int offset) {
+    TimeType type = getTimeType(timeCode);
+    String timeStr = timeCode.substring(1);
+    Date result = null;
+    DateTime dateTime;
+
+    try {
+      if (type == null) {
+        result = pastDataFormat.parseDateTime(timeStr).toDate();
+        if (offset != 0) {
+          dateTime = new DateTime(result);
+          dateTime = dateTime.plusSeconds(offset);
+          result = dateTime.toDate();
+        }
+      } else {
+        switch (type) {
+          case LIVE:
+            result = new Date();
+            break;
+          case DAY:
+            result = dayFormat.parseDateTime(timeStr).toDate();
+            if (offset != 0) {
+              dateTime = new DateTime(result);
+              dateTime = dateTime.plusDays(offset);
+              result = dateTime.toDate();
+            }
+            break;
+          case HOUR:
+            result = hourFormat.parseDateTime(timeStr).toDate();
+            if (offset != 0) {
+              dateTime = new DateTime(result);
+              dateTime = dateTime.plusHours(offset);
+              result = dateTime.toDate();
+            }
+            break;
+          case MONTH:
+            result = monthFormat.parseDateTime(timeStr).toDate();
+            if (offset != 0) {
+              dateTime = new DateTime(result);
+              dateTime = dateTime.plusMonths(offset);
+              result = dateTime.toDate();
+            }
+            break;
+          case YEAR:
+            result = yearFormat.parseDateTime(timeStr).toDate();
+            if (offset != 0) {
+              dateTime = new DateTime(result);
+              dateTime = dateTime.plusYears(offset);
+              result = dateTime.toDate();
+            }
+            break;
+          default:
+            break;
+        }
+      }
+    } catch (IllegalArgumentException e) {
+      e.printStackTrace();
+    }
+
+    return result;
+  }
+
+  public static TimeType getTimeType(String timeCode) {
+    switch (timeCode.substring(0, 1).toUpperCase()) {
+      case livePrefix:
+        return TimeType.LIVE;
+      case hourPrefix:
+        return TimeType.HOUR;
+      case dayPrefix:
+        return TimeType.DAY;
+      case monthPrefix:
+        return TimeType.MONTH;
+      case yearPrefix:
+        return TimeType.YEAR;
+      default:
+        return null;
+    }
+  }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/uuid/IdUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/uuid/IdUtils.java
new file mode 100644
index 0000000..b132e9d
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/uuid/IdUtils.java
@@ -0,0 +1,49 @@
+package com.zhitan.common.utils.uuid;
+
+/**
+ * ID鐢熸垚鍣ㄥ伐鍏风被
+ * 
+ * @author zhitan
+ */
+public class IdUtils
+{
+    /**
+     * 鑾峰彇闅忔満UUID
+     * 
+     * @return 闅忔満UUID
+     */
+    public static String randomUUID()
+    {
+        return UUID.randomUUID().toString();
+    }
+
+    /**
+     * 绠�鍖栫殑UUID锛屽幓鎺変簡妯嚎
+     * 
+     * @return 绠�鍖栫殑UUID锛屽幓鎺変簡妯嚎
+     */
+    public static String simpleUUID()
+    {
+        return UUID.randomUUID().toString(true);
+    }
+
+    /**
+     * 鑾峰彇闅忔満UUID锛屼娇鐢ㄦ�ц兘鏇村ソ鐨凾hreadLocalRandom鐢熸垚UUID
+     * 
+     * @return 闅忔満UUID
+     */
+    public static String fastUUID()
+    {
+        return UUID.fastUUID().toString();
+    }
+
+    /**
+     * 绠�鍖栫殑UUID锛屽幓鎺変簡妯嚎锛屼娇鐢ㄦ�ц兘鏇村ソ鐨凾hreadLocalRandom鐢熸垚UUID
+     * 
+     * @return 绠�鍖栫殑UUID锛屽幓鎺変簡妯嚎
+     */
+    public static String fastSimpleUUID()
+    {
+        return UUID.fastUUID().toString(true);
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/uuid/Seq.java b/zhitan-common/src/main/java/com/zhitan/common/utils/uuid/Seq.java
new file mode 100644
index 0000000..fd97c54
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/uuid/Seq.java
@@ -0,0 +1,86 @@
+package com.zhitan.common.utils.uuid;
+
+import java.util.concurrent.atomic.AtomicInteger;
+import com.zhitan.common.utils.DateUtils;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * @author zhitan 搴忓垪鐢熸垚绫�
+ */
+public class Seq
+{
+    // 閫氱敤搴忓垪绫诲瀷
+    public static final String commSeqType = "COMMON";
+
+    // 涓婁紶搴忓垪绫诲瀷
+    public static final String uploadSeqType = "UPLOAD";
+
+    // 閫氱敤鎺ュ彛搴忓垪鏁�
+    private static AtomicInteger commSeq = new AtomicInteger(1);
+
+    // 涓婁紶鎺ュ彛搴忓垪鏁�
+    private static AtomicInteger uploadSeq = new AtomicInteger(1);
+
+    // 鏈哄櫒鏍囪瘑
+    private static final String machineCode = "A";
+
+    /**
+     * 鑾峰彇閫氱敤搴忓垪鍙�
+     * 
+     * @return 搴忓垪鍊�
+     */
+    public static String getId()
+    {
+        return getId(commSeqType);
+    }
+    
+    /**
+     * 榛樿16浣嶅簭鍒楀彿 yyMMddHHmmss + 涓�浣嶆満鍣ㄦ爣璇� + 3闀垮害寰幆閫掑瀛楃涓�
+     * 
+     * @return 搴忓垪鍊�
+     */
+    public static String getId(String type)
+    {
+        AtomicInteger atomicInt = commSeq;
+        if (uploadSeqType.equals(type))
+        {
+            atomicInt = uploadSeq;
+        }
+        return getId(atomicInt, 3);
+    }
+
+    /**
+     * 閫氱敤鎺ュ彛搴忓垪鍙� yyMMddHHmmss + 涓�浣嶆満鍣ㄦ爣璇� + length闀垮害寰幆閫掑瀛楃涓�
+     * 
+     * @param atomicInt 搴忓垪鏁�
+     * @param length 鏁板�奸暱搴�
+     * @return 搴忓垪鍊�
+     */
+    public static String getId(AtomicInteger atomicInt, int length)
+    {
+        String result = DateUtils.dateTimeNow();
+        result += machineCode;
+        result += getSeq(atomicInt, length);
+        return result;
+    }
+
+    /**
+     * 搴忓垪寰幆閫掑瀛楃涓瞇1, 10 鐨� (length)骞傛鏂�), 鐢�0宸﹁ˉ榻恖ength浣嶆暟
+     * 
+     * @return 搴忓垪鍊�
+     */
+    private synchronized static String getSeq(AtomicInteger atomicInt, int length)
+    {
+        // 鍏堝彇鍊煎啀+1
+        int value = atomicInt.getAndIncrement();
+
+        // 濡傛灉鏇存柊鍚庡��>=10 鐨� (length)骞傛鏂瑰垯閲嶇疆涓�1
+        int maxSeq = (int) Math.pow(10, length);
+        if (atomicInt.get() >= maxSeq)
+        {
+            atomicInt.set(1);
+        }
+        // 杞瓧绗︿覆锛岀敤0宸﹁ˉ榻�
+        return StringUtils.padl(value, length);
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/uuid/UUID.java b/zhitan-common/src/main/java/com/zhitan/common/utils/uuid/UUID.java
new file mode 100644
index 0000000..7323721
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/uuid/UUID.java
@@ -0,0 +1,484 @@
+package com.zhitan.common.utils.uuid;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.util.Random;
+import java.util.concurrent.ThreadLocalRandom;
+import com.zhitan.common.exception.UtilException;
+
+/**
+ * 鎻愪緵閫氱敤鍞竴璇嗗埆鐮侊紙universally unique identifier锛夛紙UUID锛夊疄鐜�
+ *
+ * @author zhitan
+ */
+public final class UUID implements java.io.Serializable, Comparable<UUID>
+{
+    private static final long serialVersionUID = -1185015143654744140L;
+
+    /**
+     * SecureRandom 鐨勫崟渚�
+     *
+     */
+    private static class Holder
+    {
+        static final SecureRandom numberGenerator = getSecureRandom();
+    }
+
+    /** 姝UID鐨勬渶楂�64鏈夋晥浣� */
+    private final long mostSigBits;
+
+    /** 姝UID鐨勬渶浣�64鏈夋晥浣� */
+    private final long leastSigBits;
+
+    /**
+     * 绉佹湁鏋勯��
+     * 
+     * @param data 鏁版嵁
+     */
+    private UUID(byte[] data)
+    {
+        long msb = 0;
+        long lsb = 0;
+        assert data.length == 16 : "data must be 16 bytes in length";
+        for (int i = 0; i < 8; i++)
+        {
+            msb = (msb << 8) | (data[i] & 0xff);
+        }
+        for (int i = 8; i < 16; i++)
+        {
+            lsb = (lsb << 8) | (data[i] & 0xff);
+        }
+        this.mostSigBits = msb;
+        this.leastSigBits = lsb;
+    }
+
+    /**
+     * 浣跨敤鎸囧畾鐨勬暟鎹瀯閫犳柊鐨� UUID銆�
+     *
+     * @param mostSigBits 鐢ㄤ簬 {@code UUID} 鐨勬渶楂樻湁鏁� 64 浣�
+     * @param leastSigBits 鐢ㄤ簬 {@code UUID} 鐨勬渶浣庢湁鏁� 64 浣�
+     */
+    public UUID(long mostSigBits, long leastSigBits)
+    {
+        this.mostSigBits = mostSigBits;
+        this.leastSigBits = leastSigBits;
+    }
+
+    /**
+     * 鑾峰彇绫诲瀷 4锛堜吉闅忔満鐢熸垚鐨勶級UUID 鐨勯潤鎬佸伐鍘傘��
+     * 
+     * @return 闅忔満鐢熸垚鐨� {@code UUID}
+     */
+    public static UUID fastUUID()
+    {
+        return randomUUID(false);
+    }
+
+    /**
+     * 鑾峰彇绫诲瀷 4锛堜吉闅忔満鐢熸垚鐨勶級UUID 鐨勯潤鎬佸伐鍘傘�� 浣跨敤鍔犲瘑鐨勫己浼殢鏈烘暟鐢熸垚鍣ㄧ敓鎴愯 UUID銆�
+     * 
+     * @return 闅忔満鐢熸垚鐨� {@code UUID}
+     */
+    public static UUID randomUUID()
+    {
+        return randomUUID(true);
+    }
+
+    /**
+     * 鑾峰彇绫诲瀷 4锛堜吉闅忔満鐢熸垚鐨勶級UUID 鐨勯潤鎬佸伐鍘傘�� 浣跨敤鍔犲瘑鐨勫己浼殢鏈烘暟鐢熸垚鍣ㄧ敓鎴愯 UUID銆�
+     * 
+     * @param isSecure 鏄惁浣跨敤{@link SecureRandom}濡傛灉鏄彲浠ヨ幏寰楁洿瀹夊叏鐨勯殢鏈虹爜锛屽惁鍒欏彲浠ュ緱鍒版洿濂界殑鎬ц兘
+     * @return 闅忔満鐢熸垚鐨� {@code UUID}
+     */
+    public static UUID randomUUID(boolean isSecure)
+    {
+        final Random ng = isSecure ? Holder.numberGenerator : getRandom();
+
+        byte[] randomBytes = new byte[16];
+        ng.nextBytes(randomBytes);
+        randomBytes[6] &= 0x0f; /* clear version */
+        randomBytes[6] |= 0x40; /* set to version 4 */
+        randomBytes[8] &= 0x3f; /* clear variant */
+        randomBytes[8] |= 0x80; /* set to IETF variant */
+        return new UUID(randomBytes);
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鐨勫瓧鑺傛暟缁勮幏鍙栫被鍨� 3锛堝熀浜庡悕绉扮殑锛塙UID 鐨勯潤鎬佸伐鍘傘��
+     *
+     * @param name 鐢ㄤ簬鏋勯�� UUID 鐨勫瓧鑺傛暟缁勩��
+     *
+     * @return 鏍规嵁鎸囧畾鏁扮粍鐢熸垚鐨� {@code UUID}
+     */
+    public static UUID nameUUIDFromBytes(byte[] name)
+    {
+        MessageDigest md;
+        try
+        {
+            md = MessageDigest.getInstance("MD5");
+        }
+        catch (NoSuchAlgorithmException nsae)
+        {
+            throw new InternalError("MD5 not supported");
+        }
+        byte[] md5Bytes = md.digest(name);
+        md5Bytes[6] &= 0x0f; /* clear version */
+        md5Bytes[6] |= 0x30; /* set to version 3 */
+        md5Bytes[8] &= 0x3f; /* clear variant */
+        md5Bytes[8] |= 0x80; /* set to IETF variant */
+        return new UUID(md5Bytes);
+    }
+
+    /**
+     * 鏍规嵁 {@link #toString()} 鏂规硶涓弿杩扮殑瀛楃涓叉爣鍑嗚〃绀哄舰寮忓垱寤簕@code UUID}銆�
+     *
+     * @param name 鎸囧畾 {@code UUID} 瀛楃涓�
+     * @return 鍏锋湁鎸囧畾鍊肩殑 {@code UUID}
+     * @throws IllegalArgumentException 濡傛灉 name 涓� {@link #toString} 涓弿杩扮殑瀛楃涓茶〃绀哄舰寮忎笉绗︽姏鍑烘寮傚父
+     *
+     */
+    public static UUID fromString(String name)
+    {
+        String[] components = name.split("-");
+        if (components.length != 5)
+        {
+            throw new IllegalArgumentException("Invalid UUID string: " + name);
+        }
+        for (int i = 0; i < 5; i++)
+        {
+            components[i] = "0x" + components[i];
+        }
+
+        long mostSigBits = Long.decode(components[0]).longValue();
+        mostSigBits <<= 16;
+        mostSigBits |= Long.decode(components[1]).longValue();
+        mostSigBits <<= 16;
+        mostSigBits |= Long.decode(components[2]).longValue();
+
+        long leastSigBits = Long.decode(components[3]).longValue();
+        leastSigBits <<= 48;
+        leastSigBits |= Long.decode(components[4]).longValue();
+
+        return new UUID(mostSigBits, leastSigBits);
+    }
+
+    /**
+     * 杩斿洖姝� UUID 鐨� 128 浣嶅�间腑鐨勬渶浣庢湁鏁� 64 浣嶃��
+     *
+     * @return 姝� UUID 鐨� 128 浣嶅�间腑鐨勬渶浣庢湁鏁� 64 浣嶃��
+     */
+    public long getLeastSignificantBits()
+    {
+        return leastSigBits;
+    }
+
+    /**
+     * 杩斿洖姝� UUID 鐨� 128 浣嶅�间腑鐨勬渶楂樻湁鏁� 64 浣嶃��
+     *
+     * @return 姝� UUID 鐨� 128 浣嶅�间腑鏈�楂樻湁鏁� 64 浣嶃��
+     */
+    public long getMostSignificantBits()
+    {
+        return mostSigBits;
+    }
+
+    /**
+     * 涓庢 {@code UUID} 鐩稿叧鑱旂殑鐗堟湰鍙�. 鐗堟湰鍙锋弿杩版 {@code UUID} 鏄浣曠敓鎴愮殑銆�
+     * <p>
+     * 鐗堟湰鍙峰叿鏈変互涓嬪惈鎰�:
+     * <ul>
+     * <li>1 鍩轰簬鏃堕棿鐨� UUID
+     * <li>2 DCE 瀹夊叏 UUID
+     * <li>3 鍩轰簬鍚嶇О鐨� UUID
+     * <li>4 闅忔満鐢熸垚鐨� UUID
+     * </ul>
+     *
+     * @return 姝� {@code UUID} 鐨勭増鏈彿
+     */
+    public int version()
+    {
+        // Version is bits masked by 0x000000000000F000 in MS long
+        return (int) ((mostSigBits >> 12) & 0x0f);
+    }
+
+    /**
+     * 涓庢 {@code UUID} 鐩稿叧鑱旂殑鍙樹綋鍙枫�傚彉浣撳彿鎻忚堪 {@code UUID} 鐨勫竷灞�銆�
+     * <p>
+     * 鍙樹綋鍙峰叿鏈変互涓嬪惈鎰忥細
+     * <ul>
+     * <li>0 涓� NCS 鍚戝悗鍏煎淇濈暀
+     * <li>2 <a href="http://www.ietf.org/rfc/rfc4122.txt">IETF&nbsp;RFC&nbsp;4122</a>(Leach-Salz), 鐢ㄤ簬姝ょ被
+     * <li>6 淇濈暀锛屽井杞悜鍚庡吋瀹�
+     * <li>7 淇濈暀渚涗互鍚庡畾涔変娇鐢�
+     * </ul>
+     *
+     * @return 姝� {@code UUID} 鐩稿叧鑱旂殑鍙樹綋鍙�
+     */
+    public int variant()
+    {
+        // This field is composed of a varying number of bits.
+        // 0 - - Reserved for NCS backward compatibility
+        // 1 0 - The IETF aka Leach-Salz variant (used by this class)
+        // 1 1 0 Reserved, Microsoft backward compatibility
+        // 1 1 1 Reserved for future definition.
+        return (int) ((leastSigBits >>> (64 - (leastSigBits >>> 62))) & (leastSigBits >> 63));
+    }
+
+    /**
+     * 涓庢 UUID 鐩稿叧鑱旂殑鏃堕棿鎴冲�笺��
+     *
+     * <p>
+     * 60 浣嶇殑鏃堕棿鎴冲�兼牴鎹 {@code UUID} 鐨� time_low銆乼ime_mid 鍜� time_hi 瀛楁鏋勯�犮��<br>
+     * 鎵�寰楀埌鐨勬椂闂存埑浠� 100 姣井绉掍负鍗曚綅锛屼粠 UTC锛堥�氱敤鍗忚皟鏃堕棿锛� 1582 骞� 10 鏈� 15 鏃ラ浂鏃跺紑濮嬨��
+     *
+     * <p>
+     * 鏃堕棿鎴冲�间粎鍦ㄥ湪鍩轰簬鏃堕棿鐨� UUID锛堝叾 version 绫诲瀷涓� 1锛変腑鎵嶆湁鎰忎箟銆�<br>
+     * 濡傛灉姝� {@code UUID} 涓嶆槸鍩轰簬鏃堕棿鐨� UUID锛屽垯姝ゆ柟娉曟姏鍑� UnsupportedOperationException銆�
+     *
+     * @throws UnsupportedOperationException 濡傛灉姝� {@code UUID} 涓嶆槸 version 涓� 1 鐨� UUID銆�
+     */
+    public long timestamp() throws UnsupportedOperationException
+    {
+        checkTimeBase();
+        return (mostSigBits & 0x0FFFL) << 48//
+                | ((mostSigBits >> 16) & 0x0FFFFL) << 32//
+                | mostSigBits >>> 32;
+    }
+
+    /**
+     * 涓庢 UUID 鐩稿叧鑱旂殑鏃堕挓搴忓垪鍊笺��
+     *
+     * <p>
+     * 14 浣嶇殑鏃堕挓搴忓垪鍊兼牴鎹 UUID 鐨� clock_seq 瀛楁鏋勯�犮�俢lock_seq 瀛楁鐢ㄤ簬淇濊瘉鍦ㄥ熀浜庢椂闂寸殑 UUID 涓殑鏃堕棿鍞竴鎬с��
+     * <p>
+     * {@code clockSequence} 鍊间粎鍦ㄥ熀浜庢椂闂寸殑 UUID锛堝叾 version 绫诲瀷涓� 1锛変腑鎵嶆湁鎰忎箟銆� 濡傛灉姝� UUID 涓嶆槸鍩轰簬鏃堕棿鐨� UUID锛屽垯姝ゆ柟娉曟姏鍑�
+     * UnsupportedOperationException銆�
+     *
+     * @return 姝� {@code UUID} 鐨勬椂閽熷簭鍒�
+     *
+     * @throws UnsupportedOperationException 濡傛灉姝� UUID 鐨� version 涓嶄负 1
+     */
+    public int clockSequence() throws UnsupportedOperationException
+    {
+        checkTimeBase();
+        return (int) ((leastSigBits & 0x3FFF000000000000L) >>> 48);
+    }
+
+    /**
+     * 涓庢 UUID 鐩稿叧鐨勮妭鐐瑰�笺��
+     *
+     * <p>
+     * 48 浣嶇殑鑺傜偣鍊兼牴鎹 UUID 鐨� node 瀛楁鏋勯�犮�傛瀛楁鏃ㄥ湪鐢ㄤ簬淇濆瓨鏈哄櫒鐨� IEEE 802 鍦板潃锛岃鍦板潃鐢ㄤ簬鐢熸垚姝� UUID 浠ヤ繚璇佺┖闂村敮涓�鎬с��
+     * <p>
+     * 鑺傜偣鍊间粎鍦ㄥ熀浜庢椂闂寸殑 UUID锛堝叾 version 绫诲瀷涓� 1锛変腑鎵嶆湁鎰忎箟銆�<br>
+     * 濡傛灉姝� UUID 涓嶆槸鍩轰簬鏃堕棿鐨� UUID锛屽垯姝ゆ柟娉曟姏鍑� UnsupportedOperationException銆�
+     *
+     * @return 姝� {@code UUID} 鐨勮妭鐐瑰��
+     *
+     * @throws UnsupportedOperationException 濡傛灉姝� UUID 鐨� version 涓嶄负 1
+     */
+    public long node() throws UnsupportedOperationException
+    {
+        checkTimeBase();
+        return leastSigBits & 0x0000FFFFFFFFFFFFL;
+    }
+
+    /**
+     * 杩斿洖姝@code UUID} 鐨勫瓧绗︿覆琛ㄧ幇褰㈠紡銆�
+     *
+     * <p>
+     * UUID 鐨勫瓧绗︿覆琛ㄧず褰㈠紡鐢辨 BNF 鎻忚堪锛�
+     * 
+     * <pre>
+     * {@code
+     * UUID                   = <time_low>-<time_mid>-<time_high_and_version>-<variant_and_sequence>-<node>
+     * time_low               = 4*<hexOctet>
+     * time_mid               = 2*<hexOctet>
+     * time_high_and_version  = 2*<hexOctet>
+     * variant_and_sequence   = 2*<hexOctet>
+     * node                   = 6*<hexOctet>
+     * hexOctet               = <hexDigit><hexDigit>
+     * hexDigit               = [0-9a-fA-F]
+     * }
+     * </pre>
+     * 
+     * </blockquote>
+     *
+     * @return 姝@code UUID} 鐨勫瓧绗︿覆琛ㄧ幇褰㈠紡
+     * @see #toString(boolean)
+     */
+    @Override
+    public String toString()
+    {
+        return toString(false);
+    }
+
+    /**
+     * 杩斿洖姝@code UUID} 鐨勫瓧绗︿覆琛ㄧ幇褰㈠紡銆�
+     *
+     * <p>
+     * UUID 鐨勫瓧绗︿覆琛ㄧず褰㈠紡鐢辨 BNF 鎻忚堪锛�
+     * 
+     * <pre>
+     * {@code
+     * UUID                   = <time_low>-<time_mid>-<time_high_and_version>-<variant_and_sequence>-<node>
+     * time_low               = 4*<hexOctet>
+     * time_mid               = 2*<hexOctet>
+     * time_high_and_version  = 2*<hexOctet>
+     * variant_and_sequence   = 2*<hexOctet>
+     * node                   = 6*<hexOctet>
+     * hexOctet               = <hexDigit><hexDigit>
+     * hexDigit               = [0-9a-fA-F]
+     * }
+     * </pre>
+     * 
+     * </blockquote>
+     *
+     * @param isSimple 鏄惁绠�鍗曟ā寮忥紝绠�鍗曟ā寮忎负涓嶅甫'-'鐨刄UID瀛楃涓�
+     * @return 姝@code UUID} 鐨勫瓧绗︿覆琛ㄧ幇褰㈠紡
+     */
+    public String toString(boolean isSimple)
+    {
+        final StringBuilder builder = new StringBuilder(isSimple ? 32 : 36);
+        // time_low
+        builder.append(digits(mostSigBits >> 32, 8));
+        if (!isSimple)
+        {
+            builder.append('-');
+        }
+        // time_mid
+        builder.append(digits(mostSigBits >> 16, 4));
+        if (!isSimple)
+        {
+            builder.append('-');
+        }
+        // time_high_and_version
+        builder.append(digits(mostSigBits, 4));
+        if (!isSimple)
+        {
+            builder.append('-');
+        }
+        // variant_and_sequence
+        builder.append(digits(leastSigBits >> 48, 4));
+        if (!isSimple)
+        {
+            builder.append('-');
+        }
+        // node
+        builder.append(digits(leastSigBits, 12));
+
+        return builder.toString();
+    }
+
+    /**
+     * 杩斿洖姝� UUID 鐨勫搱甯岀爜銆�
+     *
+     * @return UUID 鐨勫搱甯岀爜鍊笺��
+     */
+    @Override
+    public int hashCode()
+    {
+        long hilo = mostSigBits ^ leastSigBits;
+        return ((int) (hilo >> 32)) ^ (int) hilo;
+    }
+
+    /**
+     * 灏嗘瀵硅薄涓庢寚瀹氬璞℃瘮杈冦��
+     * <p>
+     * 褰撲笖浠呭綋鍙傛暟涓嶄负 {@code null}銆佽�屾槸涓�涓� UUID 瀵硅薄銆佸叿鏈変笌姝� UUID 鐩稿悓鐨� varriant銆佸寘鍚浉鍚岀殑鍊硷紙姣忎竴浣嶅潎鐩稿悓锛夋椂锛岀粨鏋滄墠涓� {@code true}銆�
+     *
+     * @param obj 瑕佷笌涔嬫瘮杈冪殑瀵硅薄
+     *
+     * @return 濡傛灉瀵硅薄鐩稿悓锛屽垯杩斿洖 {@code true}锛涘惁鍒欒繑鍥� {@code false}
+     */
+    @Override
+    public boolean equals(Object obj)
+    {
+        if ((null == obj) || (obj.getClass() != UUID.class))
+        {
+            return false;
+        }
+        UUID id = (UUID) obj;
+        return (mostSigBits == id.mostSigBits && leastSigBits == id.leastSigBits);
+    }
+
+    // Comparison Operations
+
+    /**
+     * 灏嗘 UUID 涓庢寚瀹氱殑 UUID 姣旇緝銆�
+     *
+     * <p>
+     * 濡傛灉涓や釜 UUID 涓嶅悓锛屼笖绗竴涓� UUID 鐨勬渶楂樻湁鏁堝瓧娈靛ぇ浜庣浜屼釜 UUID 鐨勫搴斿瓧娈碉紝鍒欑涓�涓� UUID 澶т簬绗簩涓� UUID銆�
+     *
+     * @param val 涓庢 UUID 姣旇緝鐨� UUID
+     *
+     * @return 鍦ㄦ UUID 灏忎簬銆佺瓑浜庢垨澶т簬 val 鏃讹紝鍒嗗埆杩斿洖 -1銆�0 鎴� 1銆�
+     *
+     */
+    @Override
+    public int compareTo(UUID val)
+    {
+        // The ordering is intentionally set up so that the UUIDs
+        // can simply be numerically compared as two numbers
+        return (this.mostSigBits < val.mostSigBits ? -1 : //
+                (this.mostSigBits > val.mostSigBits ? 1 : //
+                        (this.leastSigBits < val.leastSigBits ? -1 : //
+                                (this.leastSigBits > val.leastSigBits ? 1 : //
+                                        0))));
+    }
+
+    // -------------------------------------------------------------------------------------------------------------------
+    // Private method start
+    /**
+     * 杩斿洖鎸囧畾鏁板瓧瀵瑰簲鐨刪ex鍊�
+     * 
+     * @param val 鍊�
+     * @param digits 浣�
+     * @return 鍊�
+     */
+    private static String digits(long val, int digits)
+    {
+        long hi = 1L << (digits * 4);
+        return Long.toHexString(hi | (val & (hi - 1))).substring(1);
+    }
+
+    /**
+     * 妫�鏌ユ槸鍚︿负time-based鐗堟湰UUID
+     */
+    private void checkTimeBase()
+    {
+        if (version() != 1)
+        {
+            throw new UnsupportedOperationException("Not a time-based UUID");
+        }
+    }
+
+    /**
+     * 鑾峰彇{@link SecureRandom}锛岀被鎻愪緵鍔犲瘑鐨勫己闅忔満鏁扮敓鎴愬櫒 (RNG)
+     * 
+     * @return {@link SecureRandom}
+     */
+    public static SecureRandom getSecureRandom()
+    {
+        try
+        {
+            return SecureRandom.getInstance("SHA1PRNG");
+        }
+        catch (NoSuchAlgorithmException e)
+        {
+            throw new UtilException(e);
+        }
+    }
+
+    /**
+     * 鑾峰彇闅忔満鏁扮敓鎴愬櫒瀵硅薄<br>
+     * ThreadLocalRandom鏄疛DK 7涔嬪悗鎻愪緵骞跺彂浜х敓闅忔満鏁帮紝鑳藉瑙e喅澶氫釜绾跨▼鍙戠敓鐨勭珵浜変簤澶恒��
+     * 
+     * @return {@link ThreadLocalRandom}
+     */
+    public static ThreadLocalRandom getRandom()
+    {
+        return ThreadLocalRandom.current();
+    }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/xss/Xss.java b/zhitan-common/src/main/java/com/zhitan/common/xss/Xss.java
new file mode 100644
index 0000000..fa3d55c
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/xss/Xss.java
@@ -0,0 +1,27 @@
+package com.zhitan.common.xss;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 鑷畾涔墄ss鏍¢獙娉ㄨВ
+ * 
+ * @author zhitan
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(value = { ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER })
+@Constraint(validatedBy = { XssValidator.class })
+public @interface Xss
+{
+    String message()
+
+    default "涓嶅厑璁镐换浣曡剼鏈繍琛�";
+
+    Class<?>[] groups() default {};
+
+    Class<? extends Payload>[] payload() default {};
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/xss/XssValidator.java b/zhitan-common/src/main/java/com/zhitan/common/xss/XssValidator.java
new file mode 100644
index 0000000..63c2a64
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/xss/XssValidator.java
@@ -0,0 +1,40 @@
+package com.zhitan.common.xss;
+
+import com.zhitan.common.utils.StringUtils;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 鑷畾涔墄ss鏍¢獙娉ㄨВ瀹炵幇
+ * 
+ * @author zhitan
+ */
+public class XssValidator implements ConstraintValidator<Xss, String>
+{
+    private static final String HTML_PATTERN = "<(\\S*?)[^>]*>.*?|<.*? />";
+
+    @Override
+    public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext)
+    {
+        if (StringUtils.isBlank(value))
+        {
+            return true;
+        }
+        return !containsHtml(value);
+    }
+
+    public static boolean containsHtml(String value)
+    {
+        StringBuilder sHtml = new StringBuilder();
+        Pattern pattern = Pattern.compile(HTML_PATTERN);
+        Matcher matcher = pattern.matcher(value);
+        while (matcher.find())
+        {
+            sHtml.append(matcher.group());
+        }
+        return pattern.matcher(sHtml).matches();
+    }
+}
\ No newline at end of file
diff --git a/zhitan-framework/pom.xml b/zhitan-framework/pom.xml
new file mode 100644
index 0000000..9bc2177
--- /dev/null
+++ b/zhitan-framework/pom.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>BaseAdminAPI</artifactId>
+        <groupId>com.zhitan</groupId>
+        <version>3.8.7</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>zhitan-framework</artifactId>
+
+    <description>
+        framework妗嗘灦鏍稿績
+    </description>
+
+    <dependencies>
+
+        <!-- SpringBoot Web瀹瑰櫒 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <exclusions>
+                <exclusion>
+                    <artifactId>spring-boot-starter-tomcat</artifactId>
+                    <groupId>org.springframework.boot</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <!-- web 瀹瑰櫒浣跨敤 undertow -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-undertow</artifactId>
+        </dependency>
+
+        <!-- SpringBoot 鎷︽埅鍣� -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
+
+        <!-- 闃块噷鏁版嵁搴撹繛鎺ユ睜 -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+        </dependency>
+
+        <!-- 楠岃瘉鐮� -->
+        <dependency>
+            <groupId>pro.fessional</groupId>
+            <artifactId>kaptcha</artifactId>
+            <exclusions>
+                <exclusion>
+                    <artifactId>servlet-api</artifactId>
+                    <groupId>javax.servlet</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <!-- 鑾峰彇绯荤粺淇℃伅 -->
+        <dependency>
+            <groupId>com.github.oshi</groupId>
+            <artifactId>oshi-core</artifactId>
+        </dependency>
+
+        <!-- 绯荤粺妯″潡-->
+        <dependency>
+            <groupId>com.zhitan</groupId>
+            <artifactId>zhitan-system</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-integration</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.integration</groupId>
+            <artifactId>spring-integration-mqtt</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/aspectj/DataScopeAspect.java b/zhitan-framework/src/main/java/com/zhitan/framework/aspectj/DataScopeAspect.java
new file mode 100644
index 0000000..effb219
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/aspectj/DataScopeAspect.java
@@ -0,0 +1,175 @@
+package com.zhitan.framework.aspectj;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.zhitan.framework.security.context.PermissionContextHolder;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.springframework.stereotype.Component;
+import com.zhitan.common.annotation.DataScope;
+import com.zhitan.common.core.domain.BaseEntity;
+import com.zhitan.common.core.domain.entity.SysRole;
+import com.zhitan.common.core.domain.entity.SysUser;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.core.text.Convert;
+import com.zhitan.common.utils.SecurityUtils;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 鏁版嵁杩囨护澶勭悊
+ *
+ * @author zhitan
+ */
+@Aspect
+@Component
+public class DataScopeAspect
+{
+    /**
+     * 鍏ㄩ儴鏁版嵁鏉冮檺
+     */
+    public static final String DATA_SCOPE_ALL = "1";
+
+    /**
+     * 鑷畾鏁版嵁鏉冮檺
+     */
+    public static final String DATA_SCOPE_CUSTOM = "2";
+
+    /**
+     * 閮ㄩ棬鏁版嵁鏉冮檺
+     */
+    public static final String DATA_SCOPE_DEPT = "3";
+
+    /**
+     * 閮ㄩ棬鍙婁互涓嬫暟鎹潈闄�
+     */
+    public static final String DATA_SCOPE_DEPT_AND_CHILD = "4";
+
+    /**
+     * 浠呮湰浜烘暟鎹潈闄�
+     */
+    public static final String DATA_SCOPE_SELF = "5";
+
+    /**
+     * 鏁版嵁鏉冮檺杩囨护鍏抽敭瀛�
+     */
+    public static final String DATA_SCOPE = "dataScope";
+
+    @Before("@annotation(controllerDataScope)")
+    public void doBefore(JoinPoint point, DataScope controllerDataScope) throws Throwable
+    {
+        clearDataScope(point);
+        handleDataScope(point, controllerDataScope);
+    }
+
+    protected void handleDataScope(final JoinPoint joinPoint, DataScope controllerDataScope)
+    {
+        // 鑾峰彇褰撳墠鐨勭敤鎴�
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if (StringUtils.isNotNull(loginUser))
+        {
+            SysUser currentUser = loginUser.getUser();
+            // 濡傛灉鏄秴绾х鐞嗗憳锛屽垯涓嶈繃婊ゆ暟鎹�
+            if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin())
+            {
+                String permission = StringUtils.defaultIfEmpty(controllerDataScope.permission(), PermissionContextHolder.getContext());
+                dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(),
+                        controllerDataScope.userAlias(), permission);
+            }
+        }
+    }
+
+    /**
+     * 鏁版嵁鑼冨洿杩囨护
+     *
+     * @param joinPoint 鍒囩偣
+     * @param user 鐢ㄦ埛
+     * @param deptAlias 閮ㄩ棬鍒悕
+     * @param userAlias 鐢ㄦ埛鍒悕
+     * @param permission 鏉冮檺瀛楃
+     */
+    public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias, String permission)
+    {
+        StringBuilder sqlString = new StringBuilder();
+        List<String> conditions = new ArrayList<String>();
+
+        for (SysRole role : user.getRoles())
+        {
+            String dataScope = role.getDataScope();
+            if (!DATA_SCOPE_CUSTOM.equals(dataScope) && conditions.contains(dataScope))
+            {
+                continue;
+            }
+            if (StringUtils.isNotEmpty(permission) && StringUtils.isNotEmpty(role.getPermissions())
+                    && !StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission)))
+            {
+                continue;
+            }
+            if (DATA_SCOPE_ALL.equals(dataScope))
+            {
+                sqlString = new StringBuilder();
+                conditions.add(dataScope);
+                break;
+            }
+            else if (DATA_SCOPE_CUSTOM.equals(dataScope))
+            {
+                sqlString.append(StringUtils.format(
+                        " OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias,
+                        role.getRoleId()));
+            }
+            else if (DATA_SCOPE_DEPT.equals(dataScope))
+            {
+                sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId()));
+            }
+            else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope))
+            {
+                sqlString.append(StringUtils.format(
+                        " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )",
+                        deptAlias, user.getDeptId(), user.getDeptId()));
+            }
+            else if (DATA_SCOPE_SELF.equals(dataScope))
+            {
+                if (StringUtils.isNotBlank(userAlias))
+                {
+                    sqlString.append(StringUtils.format(" OR {}.user_id = {} ", userAlias, user.getUserId()));
+                }
+                else
+                {
+                    // 鏁版嵁鏉冮檺涓轰粎鏈汉涓旀病鏈塽serAlias鍒悕涓嶆煡璇换浣曟暟鎹�
+                    sqlString.append(StringUtils.format(" OR {}.dept_id = 0 ", deptAlias));
+                }
+            }
+            conditions.add(dataScope);
+        }
+
+        // 澶氳鑹叉儏鍐典笅锛屾墍鏈夎鑹查兘涓嶅寘鍚紶閫掕繃鏉ョ殑鏉冮檺瀛楃锛岃繖涓椂鍊檚qlString涔熶細涓虹┖锛屾墍浠ヨ闄愬埗涓�涓�,涓嶆煡璇换浣曟暟鎹�
+        if (StringUtils.isEmpty(conditions))
+        {
+            sqlString.append(StringUtils.format(" OR {}.dept_id = 0 ", deptAlias));
+        }
+
+        if (StringUtils.isNotBlank(sqlString.toString()))
+        {
+            Object params = joinPoint.getArgs()[0];
+            if (StringUtils.isNotNull(params) && params instanceof BaseEntity)
+            {
+                BaseEntity baseEntity = (BaseEntity) params;
+                baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")");
+            }
+        }
+    }
+
+    /**
+     * 鎷兼帴鏉冮檺sql鍓嶅厛娓呯┖params.dataScope鍙傛暟闃叉娉ㄥ叆
+     */
+    private void clearDataScope(final JoinPoint joinPoint)
+    {
+        Object params = joinPoint.getArgs()[0];
+        if (StringUtils.isNotNull(params) && params instanceof BaseEntity)
+        {
+            BaseEntity baseEntity = (BaseEntity) params;
+            baseEntity.getParams().put(DATA_SCOPE, "");
+        }
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/aspectj/DataSourceAspect.java b/zhitan-framework/src/main/java/com/zhitan/framework/aspectj/DataSourceAspect.java
new file mode 100644
index 0000000..97db004
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/aspectj/DataSourceAspect.java
@@ -0,0 +1,73 @@
+package com.zhitan.framework.aspectj;
+
+import java.util.Objects;
+
+import com.zhitan.framework.datasource.DynamicDataSourceContextHolder;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.annotation.AnnotationUtils;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import com.zhitan.common.annotation.DataSource;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 澶氭暟鎹簮澶勭悊
+ * 
+ * @author zhitan
+ */
+@Aspect
+@Order(1)
+@Component
+public class DataSourceAspect
+{
+    protected Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Pointcut("@annotation(com.zhitan.common.annotation.DataSource)"
+            + "|| @within(com.zhitan.common.annotation.DataSource)")
+    public void dsPointCut()
+    {
+
+    }
+
+    @Around("dsPointCut()")
+    public Object around(ProceedingJoinPoint point) throws Throwable
+    {
+        DataSource dataSource = getDataSource(point);
+
+        if (StringUtils.isNotNull(dataSource))
+        {
+            DynamicDataSourceContextHolder.setDataSourceType(dataSource.value().name());
+        }
+
+        try
+        {
+            return point.proceed();
+        }
+        finally
+        {
+            // 閿�姣佹暟鎹簮 鍦ㄦ墽琛屾柟娉曚箣鍚�
+            DynamicDataSourceContextHolder.clearDataSourceType();
+        }
+    }
+
+    /**
+     * 鑾峰彇闇�瑕佸垏鎹㈢殑鏁版嵁婧�
+     */
+    public DataSource getDataSource(ProceedingJoinPoint point)
+    {
+        MethodSignature signature = (MethodSignature) point.getSignature();
+        DataSource dataSource = AnnotationUtils.findAnnotation(signature.getMethod(), DataSource.class);
+        if (Objects.nonNull(dataSource))
+        {
+            return dataSource;
+        }
+
+        return AnnotationUtils.findAnnotation(signature.getDeclaringType(), DataSource.class);
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/aspectj/LogAspect.java b/zhitan-framework/src/main/java/com/zhitan/framework/aspectj/LogAspect.java
new file mode 100644
index 0000000..a586f72
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/aspectj/LogAspect.java
@@ -0,0 +1,256 @@
+package com.zhitan.framework.aspectj;
+
+import java.util.Collection;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import com.zhitan.framework.manager.AsyncManager;
+import com.zhitan.framework.manager.factory.AsyncFactory;
+import org.apache.commons.lang3.ArrayUtils;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.AfterReturning;
+import org.aspectj.lang.annotation.AfterThrowing;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.NamedThreadLocal;
+import org.springframework.stereotype.Component;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.multipart.MultipartFile;
+import com.alibaba.fastjson2.JSON;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.domain.entity.SysUser;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.enums.BusinessStatus;
+import com.zhitan.common.enums.HttpMethod;
+import com.zhitan.common.filter.PropertyPreExcludeFilter;
+import com.zhitan.common.utils.SecurityUtils;
+import com.zhitan.common.utils.ServletUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.ip.IpUtils;
+import com.zhitan.system.domain.SysOperLog;
+
+/**
+ * 鎿嶄綔鏃ュ織璁板綍澶勭悊
+ * 
+ * @author zhitan
+ */
+@Aspect
+@Component
+public class LogAspect
+{
+    private static final Logger log = LoggerFactory.getLogger(LogAspect.class);
+
+    /** 鎺掗櫎鏁忔劅灞炴�у瓧娈� */
+    public static final String[] EXCLUDE_PROPERTIES = { "password", "oldPassword", "newPassword", "confirmPassword" };
+
+    /** 璁$畻鎿嶄綔娑堣�楁椂闂� */
+    private static final ThreadLocal<Long> TIME_THREADLOCAL = new NamedThreadLocal<Long>("Cost Time");
+
+    /**
+     * 澶勭悊璇锋眰鍓嶆墽琛�
+     */
+    @Before(value = "@annotation(controllerLog)")
+    public void boBefore(JoinPoint joinPoint, Log controllerLog)
+    {
+        TIME_THREADLOCAL.set(System.currentTimeMillis());
+    }
+
+    /**
+     * 澶勭悊瀹岃姹傚悗鎵ц
+     *
+     * @param joinPoint 鍒囩偣
+     */
+    @AfterReturning(pointcut = "@annotation(controllerLog)", returning = "jsonResult")
+    public void doAfterReturning(JoinPoint joinPoint, Log controllerLog, Object jsonResult)
+    {
+        handleLog(joinPoint, controllerLog, null, jsonResult);
+    }
+
+    /**
+     * 鎷︽埅寮傚父鎿嶄綔
+     * 
+     * @param joinPoint 鍒囩偣
+     * @param e 寮傚父
+     */
+    @AfterThrowing(value = "@annotation(controllerLog)", throwing = "e")
+    public void doAfterThrowing(JoinPoint joinPoint, Log controllerLog, Exception e)
+    {
+        handleLog(joinPoint, controllerLog, e, null);
+    }
+
+    protected void handleLog(final JoinPoint joinPoint, Log controllerLog, final Exception e, Object jsonResult)
+    {
+        try
+        {
+            // 鑾峰彇褰撳墠鐨勭敤鎴�
+            LoginUser loginUser = SecurityUtils.getLoginUser();
+
+            // *========鏁版嵁搴撴棩蹇�=========*//
+            SysOperLog operLog = new SysOperLog();
+            operLog.setStatus(BusinessStatus.SUCCESS.ordinal());
+            // 璇锋眰鐨勫湴鍧�
+            String ip = IpUtils.getIpAddr();
+            operLog.setOperIp(ip);
+            operLog.setOperUrl(StringUtils.substring(ServletUtils.getRequest().getRequestURI(), 0, 255));
+            if (loginUser != null)
+            {
+                operLog.setOperName(loginUser.getUsername());
+                SysUser currentUser = loginUser.getUser();
+                if (StringUtils.isNotNull(currentUser) && StringUtils.isNotNull(currentUser.getDept()))
+                {
+                    operLog.setDeptName(currentUser.getDept().getDeptName());
+                }
+            }
+
+            if (e != null)
+            {
+                operLog.setStatus(BusinessStatus.FAIL.ordinal());
+                operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000));
+            }
+            // 璁剧疆鏂规硶鍚嶇О
+            String className = joinPoint.getTarget().getClass().getName();
+            String methodName = joinPoint.getSignature().getName();
+            operLog.setMethod(className + "." + methodName + "()");
+            // 璁剧疆璇锋眰鏂瑰紡
+            operLog.setRequestMethod(ServletUtils.getRequest().getMethod());
+            // 澶勭悊璁剧疆娉ㄨВ涓婄殑鍙傛暟
+            getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult);
+            // 璁剧疆娑堣�楁椂闂�
+            operLog.setCostTime(System.currentTimeMillis() - TIME_THREADLOCAL.get());
+            // 淇濆瓨鏁版嵁搴�
+            AsyncManager.me().execute(AsyncFactory.recordOper(operLog));
+        }
+        catch (Exception exp)
+        {
+            // 璁板綍鏈湴寮傚父鏃ュ織
+            log.error("寮傚父淇℃伅:{}", exp.getMessage());
+            exp.printStackTrace();
+        }
+        finally
+        {
+            TIME_THREADLOCAL.remove();
+        }
+    }
+
+    /**
+     * 鑾峰彇娉ㄨВ涓鏂规硶鐨勬弿杩颁俊鎭� 鐢ㄤ簬Controller灞傛敞瑙�
+     * 
+     * @param log 鏃ュ織
+     * @param operLog 鎿嶄綔鏃ュ織
+     * @throws Exception
+     */
+    public void getControllerMethodDescription(JoinPoint joinPoint, Log log, SysOperLog operLog, Object jsonResult) throws Exception
+    {
+        // 璁剧疆action鍔ㄤ綔
+        operLog.setBusinessType(log.businessType().ordinal());
+        // 璁剧疆鏍囬
+        operLog.setTitle(log.title());
+        // 璁剧疆鎿嶄綔浜虹被鍒�
+        operLog.setOperatorType(log.operatorType().ordinal());
+        // 鏄惁闇�瑕佷繚瀛榬equest锛屽弬鏁板拰鍊�
+        if (log.isSaveRequestData())
+        {
+            // 鑾峰彇鍙傛暟鐨勪俊鎭紝浼犲叆鍒版暟鎹簱涓��
+            setRequestValue(joinPoint, operLog, log.excludeParamNames());
+        }
+        // 鏄惁闇�瑕佷繚瀛榬esponse锛屽弬鏁板拰鍊�
+        if (log.isSaveResponseData() && StringUtils.isNotNull(jsonResult))
+        {
+            operLog.setJsonResult(StringUtils.substring(JSON.toJSONString(jsonResult), 0, 2000));
+        }
+    }
+
+    /**
+     * 鑾峰彇璇锋眰鐨勫弬鏁帮紝鏀惧埌log涓�
+     * 
+     * @param operLog 鎿嶄綔鏃ュ織
+     * @throws Exception 寮傚父
+     */
+    private void setRequestValue(JoinPoint joinPoint, SysOperLog operLog, String[] excludeParamNames) throws Exception
+    {
+        Map<?, ?> paramsMap = ServletUtils.getParamMap(ServletUtils.getRequest());
+        String requestMethod = operLog.getRequestMethod();
+        if (StringUtils.isEmpty(paramsMap)
+                && (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod)))
+        {
+            String params = argsArrayToString(joinPoint.getArgs(), excludeParamNames);
+            operLog.setOperParam(StringUtils.substring(params, 0, 2000));
+        }
+        else
+        {
+            operLog.setOperParam(StringUtils.substring(JSON.toJSONString(paramsMap, excludePropertyPreFilter(excludeParamNames)), 0, 2000));
+        }
+    }
+
+    /**
+     * 鍙傛暟鎷艰
+     */
+    private String argsArrayToString(Object[] paramsArray, String[] excludeParamNames)
+    {
+        String params = "";
+        if (paramsArray != null && paramsArray.length > 0)
+        {
+            for (Object o : paramsArray)
+            {
+                if (StringUtils.isNotNull(o) && !isFilterObject(o))
+                {
+                    try
+                    {
+                        String jsonObj = JSON.toJSONString(o, excludePropertyPreFilter(excludeParamNames));
+                        params += jsonObj.toString() + " ";
+                    }
+                    catch (Exception e)
+                    {
+                    }
+                }
+            }
+        }
+        return params.trim();
+    }
+
+    /**
+     * 蹇界暐鏁忔劅灞炴��
+     */
+    public PropertyPreExcludeFilter excludePropertyPreFilter(String[] excludeParamNames)
+    {
+        return new PropertyPreExcludeFilter().addExcludes(ArrayUtils.addAll(EXCLUDE_PROPERTIES, excludeParamNames));
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁闇�瑕佽繃婊ょ殑瀵硅薄銆�
+     * 
+     * @param o 瀵硅薄淇℃伅銆�
+     * @return 濡傛灉鏄渶瑕佽繃婊ょ殑瀵硅薄锛屽垯杩斿洖true锛涘惁鍒欒繑鍥瀎alse銆�
+     */
+    @SuppressWarnings("rawtypes")
+    public boolean isFilterObject(final Object o)
+    {
+        Class<?> clazz = o.getClass();
+        if (clazz.isArray())
+        {
+            return clazz.getComponentType().isAssignableFrom(MultipartFile.class);
+        }
+        else if (Collection.class.isAssignableFrom(clazz))
+        {
+            Collection collection = (Collection) o;
+            for (Object value : collection)
+            {
+                return value instanceof MultipartFile;
+            }
+        }
+        else if (Map.class.isAssignableFrom(clazz))
+        {
+            Map map = (Map) o;
+            for (Object value : map.entrySet())
+            {
+                Map.Entry entry = (Map.Entry) value;
+                return entry.getValue() instanceof MultipartFile;
+            }
+        }
+        return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse
+                || o instanceof BindingResult;
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/aspectj/RateLimiterAspect.java b/zhitan-framework/src/main/java/com/zhitan/framework/aspectj/RateLimiterAspect.java
new file mode 100644
index 0000000..ab35d69
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/aspectj/RateLimiterAspect.java
@@ -0,0 +1,89 @@
+package com.zhitan.framework.aspectj;
+
+import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.List;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import javax.annotation.Resource;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.script.RedisScript;
+import org.springframework.stereotype.Component;
+import com.zhitan.common.annotation.RateLimiter;
+import com.zhitan.common.enums.LimitType;
+import com.zhitan.common.exception.ServiceException;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.ip.IpUtils;
+
+/**
+ * 闄愭祦澶勭悊
+ *
+ * @author zhitan
+ */
+@Aspect
+@Component
+public class RateLimiterAspect
+{
+    private static final Logger log = LoggerFactory.getLogger(RateLimiterAspect.class);
+
+    private RedisTemplate<Object, Object> redisTemplate;
+
+    private RedisScript<Long> limitScript;
+
+    @Resource
+    public void setRedisTemplate1(RedisTemplate<Object, Object> redisTemplate)
+    {
+        this.redisTemplate = redisTemplate;
+    }
+
+    @Resource
+    public void setLimitScript(RedisScript<Long> limitScript)
+    {
+        this.limitScript = limitScript;
+    }
+
+    @Before("@annotation(rateLimiter)")
+    public void doBefore(JoinPoint point, RateLimiter rateLimiter) throws Throwable
+    {
+        int time = rateLimiter.time();
+        int count = rateLimiter.count();
+
+        String combineKey = getCombineKey(rateLimiter, point);
+        List<Object> keys = Collections.singletonList(combineKey);
+        try
+        {
+            Long number = redisTemplate.execute(limitScript, keys, count, time);
+            if (StringUtils.isNull(number) || number.intValue() > count)
+            {
+                throw new ServiceException("璁块棶杩囦簬棰戠箒锛岃绋嶅�欏啀璇�");
+            }
+            log.info("闄愬埗璇锋眰'{}',褰撳墠璇锋眰'{}',缂撳瓨key'{}'", count, number.intValue(), combineKey);
+        }
+        catch (ServiceException e)
+        {
+            throw e;
+        }
+        catch (Exception e)
+        {
+            throw new RuntimeException("鏈嶅姟鍣ㄩ檺娴佸紓甯革紝璇风◢鍊欏啀璇�");
+        }
+    }
+
+    public String getCombineKey(RateLimiter rateLimiter, JoinPoint point)
+    {
+        StringBuffer stringBuffer = new StringBuffer(rateLimiter.key());
+        if (rateLimiter.limitType() == LimitType.IP)
+        {
+            stringBuffer.append(IpUtils.getIpAddr()).append("-");
+        }
+        MethodSignature signature = (MethodSignature) point.getSignature();
+        Method method = signature.getMethod();
+        Class<?> targetClass = method.getDeclaringClass();
+        stringBuffer.append(targetClass.getName()).append("-").append(method.getName());
+        return stringBuffer.toString();
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/config/ApplicationConfig.java b/zhitan-framework/src/main/java/com/zhitan/framework/config/ApplicationConfig.java
new file mode 100644
index 0000000..aa7738a
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/config/ApplicationConfig.java
@@ -0,0 +1,30 @@
+package com.zhitan.framework.config;
+
+import java.util.TimeZone;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+
+/**
+ * 绋嬪簭娉ㄨВ閰嶇疆
+ *
+ * @author zhitan
+ */
+@Configuration
+// 琛ㄧず閫氳繃aop妗嗘灦鏆撮湶璇ヤ唬鐞嗗璞�,AopContext鑳藉璁块棶
+@EnableAspectJAutoProxy(exposeProxy = true)
+// 鎸囧畾瑕佹壂鎻忕殑Mapper绫荤殑鍖呯殑璺緞
+@MapperScan("com.zhitan.**.mapper")
+public class ApplicationConfig
+{
+    /**
+     * 鏃跺尯閰嶇疆
+     */
+    @Bean
+    public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization()
+    {
+        return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault());
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/config/CaptchaConfig.java b/zhitan-framework/src/main/java/com/zhitan/framework/config/CaptchaConfig.java
new file mode 100644
index 0000000..c130e29
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/config/CaptchaConfig.java
@@ -0,0 +1,83 @@
+package com.zhitan.framework.config;
+
+import java.util.Properties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import com.google.code.kaptcha.impl.DefaultKaptcha;
+import com.google.code.kaptcha.util.Config;
+import static com.google.code.kaptcha.Constants.*;
+
+/**
+ * 楠岃瘉鐮侀厤缃�
+ * 
+ * @author zhitan
+ */
+@Configuration
+public class CaptchaConfig
+{
+    @Bean(name = "captchaProducer")
+    public DefaultKaptcha getKaptchaBean()
+    {
+        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
+        Properties properties = new Properties();
+        // 鏄惁鏈夎竟妗� 榛樿涓簍rue 鎴戜滑鍙互鑷繁璁剧疆yes锛宯o
+        properties.setProperty(KAPTCHA_BORDER, "yes");
+        // 楠岃瘉鐮佹枃鏈瓧绗﹂鑹� 榛樿涓篊olor.BLACK
+        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black");
+        // 楠岃瘉鐮佸浘鐗囧搴� 榛樿涓�200
+        properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160");
+        // 楠岃瘉鐮佸浘鐗囬珮搴� 榛樿涓�50
+        properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60");
+        // 楠岃瘉鐮佹枃鏈瓧绗﹀ぇ灏� 榛樿涓�40
+        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "38");
+        // KAPTCHA_SESSION_KEY
+        properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCode");
+        // 楠岃瘉鐮佹枃鏈瓧绗﹂暱搴� 榛樿涓�5
+        properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
+        // 楠岃瘉鐮佹枃鏈瓧浣撴牱寮� 榛樿涓簄ew Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)
+        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier");
+        // 鍥剧墖鏍峰紡 姘寸汗com.google.code.kaptcha.impl.WaterRipple 楸肩溂com.google.code.kaptcha.impl.FishEyeGimpy 闃村奖com.google.code.kaptcha.impl.ShadowGimpy
+        properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy");
+        Config config = new Config(properties);
+        defaultKaptcha.setConfig(config);
+        return defaultKaptcha;
+    }
+
+    @Bean(name = "captchaProducerMath")
+    public DefaultKaptcha getKaptchaBeanMath()
+    {
+        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
+        Properties properties = new Properties();
+        // 鏄惁鏈夎竟妗� 榛樿涓簍rue 鎴戜滑鍙互鑷繁璁剧疆yes锛宯o
+        properties.setProperty(KAPTCHA_BORDER, "yes");
+        // 杈规棰滆壊 榛樿涓篊olor.BLACK
+        properties.setProperty(KAPTCHA_BORDER_COLOR, "105,179,90");
+        // 楠岃瘉鐮佹枃鏈瓧绗﹂鑹� 榛樿涓篊olor.BLACK
+        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "blue");
+        // 楠岃瘉鐮佸浘鐗囧搴� 榛樿涓�200
+        properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160");
+        // 楠岃瘉鐮佸浘鐗囬珮搴� 榛樿涓�50
+        properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60");
+        // 楠岃瘉鐮佹枃鏈瓧绗﹀ぇ灏� 榛樿涓�40
+        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "35");
+        // KAPTCHA_SESSION_KEY
+        properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCodeMath");
+        // 楠岃瘉鐮佹枃鏈敓鎴愬櫒
+        properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, "com.zhitan.framework.config.KaptchaTextCreator");
+        // 楠岃瘉鐮佹枃鏈瓧绗﹂棿璺� 榛樿涓�2
+        properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_SPACE, "3");
+        // 楠岃瘉鐮佹枃鏈瓧绗﹂暱搴� 榛樿涓�5
+        properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "6");
+        // 楠岃瘉鐮佹枃鏈瓧浣撴牱寮� 榛樿涓簄ew Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)
+        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier");
+        // 楠岃瘉鐮佸櫔鐐归鑹� 榛樿涓篊olor.BLACK
+        properties.setProperty(KAPTCHA_NOISE_COLOR, "white");
+        // 骞叉壈瀹炵幇绫�
+        properties.setProperty(KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.NoNoise");
+        // 鍥剧墖鏍峰紡 姘寸汗com.google.code.kaptcha.impl.WaterRipple 楸肩溂com.google.code.kaptcha.impl.FishEyeGimpy 闃村奖com.google.code.kaptcha.impl.ShadowGimpy
+        properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy");
+        Config config = new Config(properties);
+        defaultKaptcha.setConfig(config);
+        return defaultKaptcha;
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/config/DruidConfig.java b/zhitan-framework/src/main/java/com/zhitan/framework/config/DruidConfig.java
new file mode 100644
index 0000000..6cd8c05
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/config/DruidConfig.java
@@ -0,0 +1,127 @@
+package com.zhitan.framework.config;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.sql.DataSource;
+
+import com.zhitan.framework.config.properties.DruidProperties;
+import com.zhitan.framework.datasource.DynamicDataSource;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
+import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
+import com.alibaba.druid.util.Utils;
+import com.zhitan.common.enums.DataSourceType;
+import com.zhitan.common.utils.spring.SpringUtils;
+
+/**
+ * druid 閰嶇疆澶氭暟鎹簮
+ * 
+ * @author zhitan
+ */
+@Configuration
+public class DruidConfig
+{
+    @Bean
+    @ConfigurationProperties("spring.datasource.druid.master")
+    public DataSource masterDataSource(DruidProperties druidProperties)
+    {
+        DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
+        return druidProperties.dataSource(dataSource);
+    }
+
+    @Bean
+    @ConfigurationProperties("spring.datasource.druid.slave")
+    @ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true")
+    public DataSource slaveDataSource(DruidProperties druidProperties)
+    {
+        DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
+        return druidProperties.dataSource(dataSource);
+    }
+
+    @Bean(name = "dynamicDataSource")
+    @Primary
+    public DynamicDataSource dataSource(DataSource masterDataSource)
+    {
+        Map<Object, Object> targetDataSources = new HashMap<>();
+        targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource);
+        setDataSource(targetDataSources, DataSourceType.SLAVE.name(), "slaveDataSource");
+        return new DynamicDataSource(masterDataSource, targetDataSources);
+    }
+    
+    /**
+     * 璁剧疆鏁版嵁婧�
+     * 
+     * @param targetDataSources 澶囬�夋暟鎹簮闆嗗悎
+     * @param sourceName 鏁版嵁婧愬悕绉�
+     * @param beanName bean鍚嶇О
+     */
+    public void setDataSource(Map<Object, Object> targetDataSources, String sourceName, String beanName)
+    {
+        try
+        {
+            DataSource dataSource = SpringUtils.getBean(beanName);
+            targetDataSources.put(sourceName, dataSource);
+        }
+        catch (Exception e)
+        {
+        }
+    }
+
+    /**
+     * 鍘婚櫎鐩戞帶椤甸潰搴曢儴鐨勫箍鍛�
+     */
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    @Bean
+    @ConditionalOnProperty(name = "spring.datasource.druid.statViewServlet.enabled", havingValue = "true")
+    public FilterRegistrationBean removeDruidFilterRegistrationBean(DruidStatProperties properties)
+    {
+        // 鑾峰彇web鐩戞帶椤甸潰鐨勫弬鏁�
+        DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
+        // 鎻愬彇common.js鐨勯厤缃矾寰�
+        String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*";
+        String commonJsPattern = pattern.replaceAll("\\*", "js/common.js");
+        final String filePath = "support/http/resources/js/common.js";
+        // 鍒涘缓filter杩涜杩囨护
+        Filter filter = new Filter()
+        {
+            @Override
+            public void init(javax.servlet.FilterConfig filterConfig) throws ServletException
+            {
+            }
+            @Override
+            public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+                    throws IOException, ServletException
+            {
+                chain.doFilter(request, response);
+                // 閲嶇疆缂撳啿鍖猴紝鍝嶅簲澶翠笉浼氳閲嶇疆
+                response.resetBuffer();
+                // 鑾峰彇common.js
+                String text = Utils.readFromResource(filePath);
+                // 姝e垯鏇挎崲banner, 闄ゅ幓搴曢儴鐨勫箍鍛婁俊鎭�
+                text = text.replaceAll("<a.*?banner\"></a><br/>", "");
+                text = text.replaceAll("powered.*?shrek.wang</a>", "");
+                response.getWriter().write(text);
+            }
+            @Override
+            public void destroy()
+            {
+            }
+        };
+        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
+        registrationBean.setFilter(filter);
+        registrationBean.addUrlPatterns(commonJsPattern);
+        return registrationBean;
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/config/FastJson2JsonRedisSerializer.java b/zhitan-framework/src/main/java/com/zhitan/framework/config/FastJson2JsonRedisSerializer.java
new file mode 100644
index 0000000..f4e65f2
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/config/FastJson2JsonRedisSerializer.java
@@ -0,0 +1,54 @@
+package com.zhitan.framework.config;
+
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.SerializationException;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONReader;
+import com.alibaba.fastjson2.JSONWriter;
+import com.alibaba.fastjson2.filter.Filter;
+import com.zhitan.common.constant.Constants;
+
+/**
+ * Redis浣跨敤FastJson搴忓垪鍖�
+ * 
+ * @author zhitan
+ */
+public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T>
+{
+    public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
+
+    static final Filter AUTO_TYPE_FILTER = JSONReader.autoTypeFilter(Constants.JSON_WHITELIST_STR);
+
+    private Class<T> clazz;
+
+    public FastJson2JsonRedisSerializer(Class<T> clazz)
+    {
+        super();
+        this.clazz = clazz;
+    }
+
+    @Override
+    public byte[] serialize(T t) throws SerializationException
+    {
+        if (t == null)
+        {
+            return new byte[0];
+        }
+        return JSON.toJSONString(t, JSONWriter.Feature.WriteClassName).getBytes(DEFAULT_CHARSET);
+    }
+
+    @Override
+    public T deserialize(byte[] bytes) throws SerializationException
+    {
+        if (bytes == null || bytes.length <= 0)
+        {
+            return null;
+        }
+        String str = new String(bytes, DEFAULT_CHARSET);
+
+        return JSON.parseObject(str, clazz, AUTO_TYPE_FILTER);
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/config/FilterConfig.java b/zhitan-framework/src/main/java/com/zhitan/framework/config/FilterConfig.java
new file mode 100644
index 0000000..65ea9b3
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/config/FilterConfig.java
@@ -0,0 +1,58 @@
+package com.zhitan.framework.config;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.servlet.DispatcherType;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import com.zhitan.common.filter.RepeatableFilter;
+import com.zhitan.common.filter.XssFilter;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * Filter閰嶇疆
+ *
+ * @author zhitan
+ */
+@Configuration
+public class FilterConfig
+{
+    @Value("${xss.excludes}")
+    private String excludes;
+
+    @Value("${xss.urlPatterns}")
+    private String urlPatterns;
+
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    @Bean
+    @ConditionalOnProperty(value = "xss.enabled", havingValue = "true")
+    public FilterRegistrationBean xssFilterRegistration()
+    {
+        FilterRegistrationBean registration = new FilterRegistrationBean();
+        registration.setDispatcherTypes(DispatcherType.REQUEST);
+        registration.setFilter(new XssFilter());
+        registration.addUrlPatterns(StringUtils.split(urlPatterns, ","));
+        registration.setName("xssFilter");
+        registration.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE);
+        Map<String, String> initParameters = new HashMap<String, String>();
+        initParameters.put("excludes", excludes);
+        registration.setInitParameters(initParameters);
+        return registration;
+    }
+
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    @Bean
+    public FilterRegistrationBean someFilterRegistration()
+    {
+        FilterRegistrationBean registration = new FilterRegistrationBean();
+        registration.setFilter(new RepeatableFilter());
+        registration.addUrlPatterns("/*");
+        registration.setName("repeatableFilter");
+        registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE);
+        return registration;
+    }
+
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/config/I18nConfig.java b/zhitan-framework/src/main/java/com/zhitan/framework/config/I18nConfig.java
new file mode 100644
index 0000000..92f2942
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/config/I18nConfig.java
@@ -0,0 +1,43 @@
+package com.zhitan.framework.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.LocaleResolver;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
+import org.springframework.web.servlet.i18n.SessionLocaleResolver;
+import com.zhitan.common.constant.Constants;
+
+/**
+ * 璧勬簮鏂囦欢閰嶇疆鍔犺浇
+ * 
+ * @author zhitan
+ */
+@Configuration
+public class I18nConfig implements WebMvcConfigurer
+{
+    @Bean
+    public LocaleResolver localeResolver()
+    {
+        SessionLocaleResolver slr = new SessionLocaleResolver();
+        // 榛樿璇█
+        slr.setDefaultLocale(Constants.DEFAULT_LOCALE);
+        return slr;
+    }
+
+    @Bean
+    public LocaleChangeInterceptor localeChangeInterceptor()
+    {
+        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
+        // 鍙傛暟鍚�
+        lci.setParamName("lang");
+        return lci;
+    }
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry)
+    {
+        registry.addInterceptor(localeChangeInterceptor());
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/config/KaptchaTextCreator.java b/zhitan-framework/src/main/java/com/zhitan/framework/config/KaptchaTextCreator.java
new file mode 100644
index 0000000..fac6899
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/config/KaptchaTextCreator.java
@@ -0,0 +1,68 @@
+package com.zhitan.framework.config;
+
+import java.util.Random;
+import com.google.code.kaptcha.text.impl.DefaultTextCreator;
+
+/**
+ * 楠岃瘉鐮佹枃鏈敓鎴愬櫒
+ *
+ * @author zhitan
+ */
+public class KaptchaTextCreator extends DefaultTextCreator
+{
+    private static final String[] CNUMBERS = "0,1,2,3,4,5,6,7,8,9,10".split(",");
+
+    @Override
+    public String getText()
+    {
+        Integer result = 0;
+        Random random = new Random();
+        int x = random.nextInt(10);
+        int y = random.nextInt(10);
+        StringBuilder suChinese = new StringBuilder();
+        int randomoperands = random.nextInt(3);
+        if (randomoperands == 0)
+        {
+            result = x * y;
+            suChinese.append(CNUMBERS[x]);
+            suChinese.append("*");
+            suChinese.append(CNUMBERS[y]);
+        }
+        else if (randomoperands == 1)
+        {
+            if ((x != 0) && y % x == 0)
+            {
+                result = y / x;
+                suChinese.append(CNUMBERS[y]);
+                suChinese.append("/");
+                suChinese.append(CNUMBERS[x]);
+            }
+            else
+            {
+                result = x + y;
+                suChinese.append(CNUMBERS[x]);
+                suChinese.append("+");
+                suChinese.append(CNUMBERS[y]);
+            }
+        }
+        else
+        {
+            if (x >= y)
+            {
+                result = x - y;
+                suChinese.append(CNUMBERS[x]);
+                suChinese.append("-");
+                suChinese.append(CNUMBERS[y]);
+            }
+            else
+            {
+                result = y - x;
+                suChinese.append(CNUMBERS[y]);
+                suChinese.append("-");
+                suChinese.append(CNUMBERS[x]);
+            }
+        }
+        suChinese.append("=?@" + result);
+        return suChinese.toString();
+    }
+}
\ No newline at end of file
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/config/MyBatisInterceptor.java b/zhitan-framework/src/main/java/com/zhitan/framework/config/MyBatisInterceptor.java
new file mode 100644
index 0000000..35b4538
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/config/MyBatisInterceptor.java
@@ -0,0 +1,121 @@
+package com.zhitan.framework.config;
+
+import com.sun.istack.internal.NotNull;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.utils.ReflectionUtils;
+import com.zhitan.common.utils.SecurityUtils;
+import com.zhitan.framework.constant.SQLFieldConst;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.binding.MapperMethod;
+import org.apache.ibatis.executor.Executor;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.mapping.SqlCommandType;
+import org.apache.ibatis.plugin.*;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.Optional;
+
+/**
+ * mybatis 鎷︽埅鍣�
+ *
+ * @author Silence
+ * @version 1.0
+ */
+@Slf4j
+@Component
+@Intercepts(
+        {@Signature(
+                type = Executor.class,
+                method = "update",
+                args = {MappedStatement.class, Object.class}
+        )})
+public class MyBatisInterceptor implements Interceptor {
+    /**
+     * 鎷︽埅鍣ㄥ鐞�
+     */
+    @Override
+    public Object intercept(Invocation invocation) throws Throwable {
+        MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
+        String sqlId = mappedStatement.getId();
+        log.debug("sqlId:{}", sqlId);
+        SqlCommandType commandType = mappedStatement.getSqlCommandType();
+        Object parameter = invocation.getArgs()[1];
+
+        if (parameter == null) {
+            return invocation.proceed();
+        }
+
+        LoginUser user = getLoginUser();
+        log.debug("sqlCommandType:{}", commandType);
+        switch (commandType) {
+            case INSERT:
+                setFieldValue(parameter, SQLFieldConst.CREATE_BY, user == null ? "" : user.getUsername());
+                setFieldValue(parameter, SQLFieldConst.CREATE_TIME, new Date());
+                break;
+            case UPDATE:
+                if (parameter instanceof MapperMethod.ParamMap) {
+                    MapperMethod.ParamMap<?> p = (MapperMethod.ParamMap<?>) parameter;
+                    String et = "et";
+                    if (p.containsKey(et)) {
+                        parameter = p.get(et);
+                    } else {
+                        parameter = p.get("param1");
+                    }
+                    if (parameter == null) {
+                        return invocation.proceed();
+                    }
+                }
+                setFieldValue(parameter, SQLFieldConst.UPDATE_BY, user == null ? "" : user.getUsername());
+                setFieldValue(parameter, SQLFieldConst.UPDATE_TIME, new Date());
+                break;
+            case UNKNOWN:
+            default:
+                break;
+        }
+        return invocation.proceed();
+    }
+
+    @Override
+    public Object plugin(Object target) {
+        return Plugin.wrap(target, this);
+    }
+
+    /**
+     * 璁剧疆娉ㄥ叆鐨勫睘鎬у��
+     *
+     * @param parameter SQL鎷︽埅鐨勫弬鏁�
+     * @param filter    杩囨护鏉′欢
+     * @param value     闇�瑕佽缃殑鍊�
+     */
+    private void setFieldValue(Object parameter, @NotNull String filter, Object value) {
+        Field[] fields = ReflectionUtils.getAllFields(parameter);
+        Optional<Field> fieldOptional = Arrays.stream(fields)
+                .filter(x -> filter.equals(x.getName()))
+                .findFirst();
+        if (fieldOptional.isPresent()) {
+            try {
+                Field field = fieldOptional.get();
+                field.setAccessible(true);
+                Object localValue = field.get(parameter);
+                field.setAccessible(false);
+                if (localValue == null || "".equals(localValue)) {
+                    field.setAccessible(true);
+                    field.set(parameter, value);
+                    field.setAccessible(false);
+                }
+            } catch (IllegalAccessException exception) {
+                log.error("SQL娉ㄥ叆澶辫触:filter:{},value:{}", filter, value);
+            }
+        }
+    }
+
+    /**
+     * 鑾峰彇鐧诲綍鐢ㄦ埛
+     */
+    private LoginUser getLoginUser() {
+        return SecurityUtils.getLoginUser();
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/config/MyBatisPlusConfig.java b/zhitan-framework/src/main/java/com/zhitan/framework/config/MyBatisPlusConfig.java
new file mode 100644
index 0000000..3180c5e
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/config/MyBatisPlusConfig.java
@@ -0,0 +1,63 @@
+package com.zhitan.framework.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+/**
+ * mybatis plus閰嶇疆
+ */
+@Configuration
+@EnableTransactionManagement(proxyTargetClass = true)
+public class MyBatisPlusConfig {
+
+    @Value("${pagehelper.maxPageSize}")
+    private Long maxPageSize;
+
+    /**
+     * MyBatisPlus鎷︽埅鍣紙鐢ㄤ簬鍒嗛〉锛�
+     */
+    @Bean
+    public MybatisPlusInterceptor paginationInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        // 鍒嗛〉鎻掍欢
+        interceptor.addInnerInterceptor(paginationInnerInterceptor());
+        // 涔愯閿佹彃浠�
+        interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor());
+        // 闃绘柇鎻掍欢
+        interceptor.addInnerInterceptor(blockAttackInnerInterceptor());
+        return interceptor;
+    }
+
+    /**
+     * 鍒嗛〉鎻掍欢锛岃嚜鍔ㄨ瘑鍒暟鎹簱绫诲瀷 https://baomidou.com/guide/interceptor-pagination.html
+     */
+    public PaginationInnerInterceptor paginationInnerInterceptor() {
+        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
+        // 璁剧疆鏁版嵁搴撶被鍨嬩负mysql
+        paginationInnerInterceptor.setDbType(DbType.POSTGRE_SQL);
+        // 璁剧疆鏈�澶у崟椤甸檺鍒舵暟閲忥紝榛樿 500 鏉★紝-1 涓嶅彈闄愬埗
+        paginationInnerInterceptor.setMaxLimit(maxPageSize);
+        return paginationInnerInterceptor;
+    }
+
+    /**
+     * 涔愯閿佹彃浠� https://baomidou.com/guide/interceptor-optimistic-locker.html
+     */
+    public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() {
+        return new OptimisticLockerInnerInterceptor();
+    }
+
+    /**
+     * 濡傛灉鏄鍏ㄨ〃鐨勫垹闄ゆ垨鏇存柊鎿嶄綔锛屽氨浼氱粓姝㈣鎿嶄綔 https://baomidou.com/guide/interceptor-block-attack.html
+     */
+    public BlockAttackInnerInterceptor blockAttackInnerInterceptor() {
+        return new BlockAttackInnerInterceptor();
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/config/RedisConfig.java b/zhitan-framework/src/main/java/com/zhitan/framework/config/RedisConfig.java
new file mode 100644
index 0000000..fdd31fb
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/config/RedisConfig.java
@@ -0,0 +1,69 @@
+package com.zhitan.framework.config;
+
+import org.springframework.cache.annotation.CachingConfigurerSupport;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.script.DefaultRedisScript;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+/**
+ * redis閰嶇疆
+ * 
+ * @author zhitan
+ */
+@Configuration
+@EnableCaching
+public class RedisConfig extends CachingConfigurerSupport
+{
+    @Bean
+    @SuppressWarnings(value = { "unchecked", "rawtypes" })
+    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory)
+    {
+        RedisTemplate<Object, Object> template = new RedisTemplate<>();
+        template.setConnectionFactory(connectionFactory);
+
+        FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
+
+        // 浣跨敤StringRedisSerializer鏉ュ簭鍒楀寲鍜屽弽搴忓垪鍖杛edis鐨刱ey鍊�
+        template.setKeySerializer(new StringRedisSerializer());
+        template.setValueSerializer(serializer);
+
+        // Hash鐨刱ey涔熼噰鐢⊿tringRedisSerializer鐨勫簭鍒楀寲鏂瑰紡
+        template.setHashKeySerializer(new StringRedisSerializer());
+        template.setHashValueSerializer(serializer);
+
+        template.afterPropertiesSet();
+        return template;
+    }
+
+    @Bean
+    public DefaultRedisScript<Long> limitScript()
+    {
+        DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();
+        redisScript.setScriptText(limitScriptText());
+        redisScript.setResultType(Long.class);
+        return redisScript;
+    }
+
+    /**
+     * 闄愭祦鑴氭湰
+     */
+    private String limitScriptText()
+    {
+        return "local key = KEYS[1]\n" +
+                "local count = tonumber(ARGV[1])\n" +
+                "local time = tonumber(ARGV[2])\n" +
+                "local current = redis.call('get', key);\n" +
+                "if current and tonumber(current) > count then\n" +
+                "    return tonumber(current);\n" +
+                "end\n" +
+                "current = redis.call('incr', key)\n" +
+                "if tonumber(current) == 1 then\n" +
+                "    redis.call('expire', key, time)\n" +
+                "end\n" +
+                "return tonumber(current);";
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/config/ResourcesConfig.java b/zhitan-framework/src/main/java/com/zhitan/framework/config/ResourcesConfig.java
new file mode 100644
index 0000000..029a0e1
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/config/ResourcesConfig.java
@@ -0,0 +1,74 @@
+package com.zhitan.framework.config;
+
+import java.util.concurrent.TimeUnit;
+
+import com.zhitan.framework.interceptor.RepeatSubmitInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.CacheControl;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+import org.springframework.web.filter.CorsFilter;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import com.zhitan.common.config.BaseConfig;
+import com.zhitan.common.constant.Constants;
+
+/**
+ * 閫氱敤閰嶇疆
+ * 
+ * @author zhitan
+ */
+@Configuration
+public class ResourcesConfig implements WebMvcConfigurer
+{
+    @Autowired
+    private RepeatSubmitInterceptor repeatSubmitInterceptor;
+
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry)
+    {
+        /** 鏈湴鏂囦欢涓婁紶璺緞 */
+        registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**")
+                .addResourceLocations("file:" + BaseConfig.getProfile() + "/");
+
+        /** swagger閰嶇疆 */
+        registry.addResourceHandler("/swagger-ui/**")
+                .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
+                .setCacheControl(CacheControl.maxAge(5, TimeUnit.HOURS).cachePublic());;
+    }
+
+    /**
+     * 鑷畾涔夋嫤鎴鍒�
+     */
+    @Override
+    public void addInterceptors(InterceptorRegistry registry)
+    {
+        registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**");
+    }
+
+    /**
+     * 璺ㄥ煙閰嶇疆
+     */
+    @Bean
+    public CorsFilter corsFilter()
+    {
+        CorsConfiguration config = new CorsConfiguration();
+        config.setAllowCredentials(true);
+        // 璁剧疆璁块棶婧愬湴鍧�
+        config.addAllowedOriginPattern("*");
+        // 璁剧疆璁块棶婧愯姹傚ご
+        config.addAllowedHeader("*");
+        // 璁剧疆璁块棶婧愯姹傛柟娉�
+        config.addAllowedMethod("*");
+        // 鏈夋晥鏈� 1800绉�
+        config.setMaxAge(1800L);
+        // 娣诲姞鏄犲皠璺緞锛屾嫤鎴竴鍒囪姹�
+        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+        source.registerCorsConfiguration("/**", config);
+        // 杩斿洖鏂扮殑CorsFilter
+        return new CorsFilter(source);
+    }
+}
\ No newline at end of file
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/config/SecurityConfig.java b/zhitan-framework/src/main/java/com/zhitan/framework/config/SecurityConfig.java
new file mode 100644
index 0000000..91909f6
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/config/SecurityConfig.java
@@ -0,0 +1,147 @@
+package com.zhitan.framework.config;
+
+import com.zhitan.framework.config.properties.PermitAllUrlProperties;
+import com.zhitan.framework.security.filter.JwtAuthenticationTokenFilter;
+import com.zhitan.framework.security.handle.AuthenticationEntryPointImpl;
+import com.zhitan.framework.security.handle.LogoutSuccessHandlerImpl;
+
+import javax.annotation.Resource;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.http.HttpMethod;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer;
+import org.springframework.security.config.http.SessionCreationPolicy;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+import org.springframework.security.web.authentication.logout.LogoutFilter;
+import org.springframework.web.filter.CorsFilter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * spring security閰嶇疆
+ *
+ * @author zhitan
+ */
+@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
+public class SecurityConfig extends WebSecurityConfigurerAdapter {
+    /**
+     * 鑷畾涔夌敤鎴疯璇侀�昏緫
+     */
+    @Resource
+    private UserDetailsService userDetailsService;
+
+    /**
+     * 璁よ瘉澶辫触澶勭悊绫�
+     */
+    @Resource
+    private AuthenticationEntryPointImpl unauthorizedHandler;
+
+    /**
+     * 閫�鍑哄鐞嗙被
+     */
+    @Resource
+    private LogoutSuccessHandlerImpl logoutSuccessHandler;
+
+    /**
+     * token璁よ瘉杩囨护鍣�
+     */
+    @Resource
+    private JwtAuthenticationTokenFilter authenticationTokenFilter;
+
+    /**
+     * 璺ㄥ煙杩囨护鍣�
+     */
+    @Resource
+    private CorsFilter corsFilter;
+
+    /**
+     * 鍏佽鍖垮悕璁块棶鐨勫湴鍧�
+     */
+    @Resource
+    private PermitAllUrlProperties permitAllUrl;
+
+    /**
+     * 瑙e喅 鏃犳硶鐩存帴娉ㄥ叆 AuthenticationManager
+     *
+     * @return
+     * @throws Exception
+     */
+    @Bean
+    @Override
+    public AuthenticationManager authenticationManagerBean() throws Exception {
+        return super.authenticationManagerBean();
+    }
+
+    /**
+     * anyRequest          |   鍖归厤鎵�鏈夎姹傝矾寰�
+     * access              |   SpringEl琛ㄨ揪寮忕粨鏋滀负true鏃跺彲浠ヨ闂�
+     * anonymous           |   鍖垮悕鍙互璁块棶
+     * denyAll             |   鐢ㄦ埛涓嶈兘璁块棶
+     * fullyAuthenticated  |   鐢ㄦ埛瀹屽叏璁よ瘉鍙互璁块棶锛堥潪remember-me涓嬭嚜鍔ㄧ櫥褰曪級
+     * hasAnyAuthority     |   濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧず鏉冮檺锛屽垯鍏朵腑浠讳綍涓�涓潈闄愬彲浠ヨ闂�
+     * hasAnyRole          |   濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧず瑙掕壊锛屽垯鍏朵腑浠讳綍涓�涓鑹插彲浠ヨ闂�
+     * hasAuthority        |   濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧず鏉冮檺锛屽垯鍏舵潈闄愬彲浠ヨ闂�
+     * hasIpAddress        |   濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧずIP鍦板潃锛屽鏋滅敤鎴稩P鍜屽弬鏁板尮閰嶏紝鍒欏彲浠ヨ闂�
+     * hasRole             |   濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧず瑙掕壊锛屽垯鍏惰鑹插彲浠ヨ闂�
+     * permitAll           |   鐢ㄦ埛鍙互浠绘剰璁块棶
+     * rememberMe          |   鍏佽閫氳繃remember-me鐧诲綍鐨勭敤鎴疯闂�
+     * authenticated       |   鐢ㄦ埛鐧诲綍鍚庡彲璁块棶
+     */
+    @Override
+    protected void configure(HttpSecurity httpSecurity) throws Exception {
+        // 娉ㄨВ鏍囪鍏佽鍖垮悕璁块棶鐨剈rl
+        ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry = httpSecurity.authorizeRequests();
+        permitAllUrl.getUrls().forEach(url -> registry.antMatchers(url).permitAll());
+        httpSecurity
+                // CSRF绂佺敤锛屽洜涓轰笉浣跨敤session
+                .csrf().disable()
+                // 绂佺敤HTTP鍝嶅簲鏍囧ご
+                .headers().cacheControl().disable().and()
+                // 璁よ瘉澶辫触澶勭悊绫�
+                .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
+                // 鍩轰簬token锛屾墍浠ヤ笉闇�瑕乻ession
+                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
+                // 杩囨护璇锋眰
+                .authorizeRequests()
+                // 瀵逛簬鐧诲綍login 娉ㄥ唽register 楠岃瘉鐮乧aptchaImage 鍏佽鍖垮悕璁块棶
+                .antMatchers("/login", "/register", "/captchaImage").permitAll()
+                // 闈欐�佽祫婧愶紝鍙尶鍚嶈闂�
+                .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
+                .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
+                // 闄や笂闈㈠鐨勬墍鏈夎姹傚叏閮ㄩ渶瑕侀壌鏉冭璇�
+                .anyRequest().authenticated()
+                .and()
+                .headers().frameOptions().disable();
+        // 娣诲姞Logout filter
+        httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
+        // 娣诲姞JWT filter
+        httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
+        // 娣诲姞CORS filter
+        httpSecurity.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class);
+        httpSecurity.addFilterBefore(corsFilter, LogoutFilter.class);
+    }
+
+    /**
+     * 寮烘暎鍒楀搱甯屽姞瀵嗗疄鐜�
+     */
+    @Bean
+    public BCryptPasswordEncoder bCryptPasswordEncoder() {
+        return new BCryptPasswordEncoder();
+    }
+
+    /**
+     * 韬唤璁よ瘉鎺ュ彛
+     */
+    @Override
+    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
+        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/config/ServerConfig.java b/zhitan-framework/src/main/java/com/zhitan/framework/config/ServerConfig.java
new file mode 100644
index 0000000..9cbe76c
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/config/ServerConfig.java
@@ -0,0 +1,32 @@
+package com.zhitan.framework.config;
+
+import javax.servlet.http.HttpServletRequest;
+import org.springframework.stereotype.Component;
+import com.zhitan.common.utils.ServletUtils;
+
+/**
+ * 鏈嶅姟鐩稿叧閰嶇疆
+ * 
+ * @author zhitan
+ */
+@Component
+public class ServerConfig
+{
+    /**
+     * 鑾峰彇瀹屾暣鐨勮姹傝矾寰勶紝鍖呮嫭锛氬煙鍚嶏紝绔彛锛屼笂涓嬫枃璁块棶璺緞
+     * 
+     * @return 鏈嶅姟鍦板潃
+     */
+    public String getUrl()
+    {
+        HttpServletRequest request = ServletUtils.getRequest();
+        return getDomain(request);
+    }
+
+    public static String getDomain(HttpServletRequest request)
+    {
+        StringBuffer url = request.getRequestURL();
+        String contextPath = request.getServletContext().getContextPath();
+        return url.delete(url.length() - request.getRequestURI().length(), url.length()).append(contextPath).toString();
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/config/ThreadPoolConfig.java b/zhitan-framework/src/main/java/com/zhitan/framework/config/ThreadPoolConfig.java
new file mode 100644
index 0000000..62610a9
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/config/ThreadPoolConfig.java
@@ -0,0 +1,63 @@
+package com.zhitan.framework.config;
+
+import com.zhitan.common.utils.Threads;
+import org.apache.commons.lang3.concurrent.BasicThreadFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * 绾跨▼姹犻厤缃�
+ *
+ * @author zhitan
+ **/
+@Configuration
+public class ThreadPoolConfig
+{
+    // 鏍稿績绾跨▼姹犲ぇ灏�
+    private int corePoolSize = 50;
+
+    // 鏈�澶у彲鍒涘缓鐨勭嚎绋嬫暟
+    private int maxPoolSize = 200;
+
+    // 闃熷垪鏈�澶ч暱搴�
+    private int queueCapacity = 1000;
+
+    // 绾跨▼姹犵淮鎶ょ嚎绋嬫墍鍏佽鐨勭┖闂叉椂闂�
+    private int keepAliveSeconds = 300;
+
+    @Bean(name = "threadPoolTaskExecutor")
+    public ThreadPoolTaskExecutor threadPoolTaskExecutor()
+    {
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        executor.setMaxPoolSize(maxPoolSize);
+        executor.setCorePoolSize(corePoolSize);
+        executor.setQueueCapacity(queueCapacity);
+        executor.setKeepAliveSeconds(keepAliveSeconds);
+        // 绾跨▼姹犲鎷掔粷浠诲姟(鏃犵嚎绋嬪彲鐢�)鐨勫鐞嗙瓥鐣�
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        return executor;
+    }
+
+    /**
+     * 鎵ц鍛ㄦ湡鎬ф垨瀹氭椂浠诲姟
+     */
+    @Bean(name = "scheduledExecutorService")
+    protected ScheduledExecutorService scheduledExecutorService()
+    {
+        return new ScheduledThreadPoolExecutor(corePoolSize,
+                new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build(),
+                new ThreadPoolExecutor.CallerRunsPolicy())
+        {
+            @Override
+            protected void afterExecute(Runnable r, Throwable t)
+            {
+                super.afterExecute(r, t);
+                Threads.printException(r, t);
+            }
+        };
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/config/properties/DruidProperties.java b/zhitan-framework/src/main/java/com/zhitan/framework/config/properties/DruidProperties.java
new file mode 100644
index 0000000..73868a0
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/config/properties/DruidProperties.java
@@ -0,0 +1,89 @@
+package com.zhitan.framework.config.properties;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import com.alibaba.druid.pool.DruidDataSource;
+
+/**
+ * druid 閰嶇疆灞炴��
+ * 
+ * @author zhitan
+ */
+@Configuration
+public class DruidProperties
+{
+    @Value("${spring.datasource.druid.initialSize}")
+    private int initialSize;
+
+    @Value("${spring.datasource.druid.minIdle}")
+    private int minIdle;
+
+    @Value("${spring.datasource.druid.maxActive}")
+    private int maxActive;
+
+    @Value("${spring.datasource.druid.maxWait}")
+    private int maxWait;
+
+    @Value("${spring.datasource.druid.connectTimeout}")
+    private int connectTimeout;
+
+    @Value("${spring.datasource.druid.socketTimeout}")
+    private int socketTimeout;
+
+    @Value("${spring.datasource.druid.timeBetweenEvictionRunsMillis}")
+    private int timeBetweenEvictionRunsMillis;
+
+    @Value("${spring.datasource.druid.minEvictableIdleTimeMillis}")
+    private int minEvictableIdleTimeMillis;
+
+    @Value("${spring.datasource.druid.maxEvictableIdleTimeMillis}")
+    private int maxEvictableIdleTimeMillis;
+
+    @Value("${spring.datasource.druid.validationQuery}")
+    private String validationQuery;
+
+    @Value("${spring.datasource.druid.testWhileIdle}")
+    private boolean testWhileIdle;
+
+    @Value("${spring.datasource.druid.testOnBorrow}")
+    private boolean testOnBorrow;
+
+    @Value("${spring.datasource.druid.testOnReturn}")
+    private boolean testOnReturn;
+
+    public DruidDataSource dataSource(DruidDataSource datasource)
+    {
+        /** 閰嶇疆鍒濆鍖栧ぇ灏忋�佹渶灏忋�佹渶澶� */
+        datasource.setInitialSize(initialSize);
+        datasource.setMaxActive(maxActive);
+        datasource.setMinIdle(minIdle);
+
+        /** 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂� */
+        datasource.setMaxWait(maxWait);
+        
+        /** 閰嶇疆椹卞姩杩炴帴瓒呮椂鏃堕棿锛屾娴嬫暟鎹簱寤虹珛杩炴帴鐨勮秴鏃舵椂闂达紝鍗曚綅鏄绉� */
+        datasource.setConnectTimeout(connectTimeout);
+        
+        /** 閰嶇疆缃戠粶瓒呮椂鏃堕棿锛岀瓑寰呮暟鎹簱鎿嶄綔瀹屾垚鐨勭綉缁滆秴鏃舵椂闂达紝鍗曚綅鏄绉� */
+        datasource.setSocketTimeout(socketTimeout);
+
+        /** 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣 */
+        datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
+
+        /** 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忋�佹渶澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 */
+        datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
+        datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis);
+
+        /**
+         * 鐢ㄦ潵妫�娴嬭繛鎺ユ槸鍚︽湁鏁堢殑sql锛岃姹傛槸涓�涓煡璇㈣鍙ワ紝甯哥敤select 'x'銆傚鏋渧alidationQuery涓簄ull锛宼estOnBorrow銆乼estOnReturn銆乼estWhileIdle閮戒笉浼氳捣浣滅敤銆�
+         */
+        datasource.setValidationQuery(validationQuery);
+        /** 寤鸿閰嶇疆涓簍rue锛屼笉褰卞搷鎬ц兘锛屽苟涓斾繚璇佸畨鍏ㄦ�с�傜敵璇疯繛鎺ョ殑鏃跺�欐娴嬶紝濡傛灉绌洪棽鏃堕棿澶т簬timeBetweenEvictionRunsMillis锛屾墽琛寁alidationQuery妫�娴嬭繛鎺ユ槸鍚︽湁鏁堛�� */
+        datasource.setTestWhileIdle(testWhileIdle);
+        /** 鐢宠杩炴帴鏃舵墽琛寁alidationQuery妫�娴嬭繛鎺ユ槸鍚︽湁鏁堬紝鍋氫簡杩欎釜閰嶇疆浼氶檷浣庢�ц兘銆� */
+        datasource.setTestOnBorrow(testOnBorrow);
+        /** 褰掕繕杩炴帴鏃舵墽琛寁alidationQuery妫�娴嬭繛鎺ユ槸鍚︽湁鏁堬紝鍋氫簡杩欎釜閰嶇疆浼氶檷浣庢�ц兘銆� */
+        datasource.setTestOnReturn(testOnReturn);
+        return datasource;
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/config/properties/PermitAllUrlProperties.java b/zhitan-framework/src/main/java/com/zhitan/framework/config/properties/PermitAllUrlProperties.java
new file mode 100644
index 0000000..79af358
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/config/properties/PermitAllUrlProperties.java
@@ -0,0 +1,73 @@
+package com.zhitan.framework.config.properties;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.regex.Pattern;
+import org.apache.commons.lang3.RegExUtils;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.AnnotationUtils;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
+import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
+import com.zhitan.common.annotation.Anonymous;
+
+/**
+ * 璁剧疆Anonymous娉ㄨВ鍏佽鍖垮悕璁块棶鐨剈rl
+ * 
+ * @author zhitan
+ */
+@Configuration
+public class PermitAllUrlProperties implements InitializingBean, ApplicationContextAware
+{
+    private static final Pattern PATTERN = Pattern.compile("\\{(.*?)\\}");
+
+    private ApplicationContext applicationContext;
+
+    private List<String> urls = new ArrayList<>();
+
+    public String ASTERISK = "*";
+
+    @Override
+    public void afterPropertiesSet()
+    {
+        RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
+        Map<RequestMappingInfo, HandlerMethod> map = mapping.getHandlerMethods();
+
+        map.keySet().forEach(info -> {
+            HandlerMethod handlerMethod = map.get(info);
+
+            // 鑾峰彇鏂规硶涓婅竟鐨勬敞瑙� 鏇夸唬path variable 涓� *
+            Anonymous method = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Anonymous.class);
+            Optional.ofNullable(method).ifPresent(anonymous -> Objects.requireNonNull(info.getPatternsCondition().getPatterns())
+                    .forEach(url -> urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK))));
+
+            // 鑾峰彇绫讳笂杈圭殑娉ㄨВ, 鏇夸唬path variable 涓� *
+            Anonymous controller = AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), Anonymous.class);
+            Optional.ofNullable(controller).ifPresent(anonymous -> Objects.requireNonNull(info.getPatternsCondition().getPatterns())
+                    .forEach(url -> urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK))));
+        });
+    }
+
+    @Override
+    public void setApplicationContext(ApplicationContext context) throws BeansException
+    {
+        this.applicationContext = context;
+    }
+
+    public List<String> getUrls()
+    {
+        return urls;
+    }
+
+    public void setUrls(List<String> urls)
+    {
+        this.urls = urls;
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/constant/SQLFieldConst.java b/zhitan-framework/src/main/java/com/zhitan/framework/constant/SQLFieldConst.java
new file mode 100644
index 0000000..783d52f
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/constant/SQLFieldConst.java
@@ -0,0 +1,23 @@
+package com.zhitan.framework.constant;
+
+/**
+ * sql 灞炴�у父閲�
+ */
+public class SQLFieldConst {
+    /**
+     * 鍒涘缓浜�
+     */
+    public static final String CREATE_BY = "createBy";
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    public static final String CREATE_TIME = "createTime";
+    /**
+     * 鏇存柊浜�
+     */
+    public static final String UPDATE_BY = "updateBy";
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    public static final String UPDATE_TIME = "updateTime";
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/datasource/DynamicDataSource.java b/zhitan-framework/src/main/java/com/zhitan/framework/datasource/DynamicDataSource.java
new file mode 100644
index 0000000..e2d8dca
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/datasource/DynamicDataSource.java
@@ -0,0 +1,26 @@
+package com.zhitan.framework.datasource;
+
+import java.util.Map;
+import javax.sql.DataSource;
+import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
+
+/**
+ * 鍔ㄦ�佹暟鎹簮
+ * 
+ * @author zhitan
+ */
+public class DynamicDataSource extends AbstractRoutingDataSource
+{
+    public DynamicDataSource(DataSource defaultTargetDataSource, Map<Object, Object> targetDataSources)
+    {
+        super.setDefaultTargetDataSource(defaultTargetDataSource);
+        super.setTargetDataSources(targetDataSources);
+        super.afterPropertiesSet();
+    }
+
+    @Override
+    protected Object determineCurrentLookupKey()
+    {
+        return DynamicDataSourceContextHolder.getDataSourceType();
+    }
+}
\ No newline at end of file
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/datasource/DynamicDataSourceContextHolder.java b/zhitan-framework/src/main/java/com/zhitan/framework/datasource/DynamicDataSourceContextHolder.java
new file mode 100644
index 0000000..1ce13f7
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/datasource/DynamicDataSourceContextHolder.java
@@ -0,0 +1,45 @@
+package com.zhitan.framework.datasource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 鏁版嵁婧愬垏鎹㈠鐞�
+ * 
+ * @author zhitan
+ */
+public class DynamicDataSourceContextHolder
+{
+    public static final Logger log = LoggerFactory.getLogger(DynamicDataSourceContextHolder.class);
+
+    /**
+     * 浣跨敤ThreadLocal缁存姢鍙橀噺锛孴hreadLocal涓烘瘡涓娇鐢ㄨ鍙橀噺鐨勭嚎绋嬫彁渚涚嫭绔嬬殑鍙橀噺鍓湰锛�
+     * 鎵�浠ユ瘡涓�涓嚎绋嬮兘鍙互鐙珛鍦版敼鍙樿嚜宸辩殑鍓湰锛岃�屼笉浼氬奖鍝嶅叾瀹冪嚎绋嬫墍瀵瑰簲鐨勫壇鏈��
+     */
+    private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();
+
+    /**
+     * 璁剧疆鏁版嵁婧愮殑鍙橀噺
+     */
+    public static void setDataSourceType(String dsType)
+    {
+        log.info("鍒囨崲鍒皗}鏁版嵁婧�", dsType);
+        CONTEXT_HOLDER.set(dsType);
+    }
+
+    /**
+     * 鑾峰緱鏁版嵁婧愮殑鍙橀噺
+     */
+    public static String getDataSourceType()
+    {
+        return CONTEXT_HOLDER.get();
+    }
+
+    /**
+     * 娓呯┖鏁版嵁婧愬彉閲�
+     */
+    public static void clearDataSourceType()
+    {
+        CONTEXT_HOLDER.remove();
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/interceptor/RepeatSubmitInterceptor.java b/zhitan-framework/src/main/java/com/zhitan/framework/interceptor/RepeatSubmitInterceptor.java
new file mode 100644
index 0000000..2e0c3ba
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/interceptor/RepeatSubmitInterceptor.java
@@ -0,0 +1,56 @@
+package com.zhitan.framework.interceptor;
+
+import java.lang.reflect.Method;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.stereotype.Component;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.HandlerInterceptor;
+import com.alibaba.fastjson2.JSON;
+import com.zhitan.common.annotation.RepeatSubmit;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.utils.ServletUtils;
+
+/**
+ * 闃叉閲嶅鎻愪氦鎷︽埅鍣�
+ *
+ * @author zhitan
+ */
+@Component
+public abstract class RepeatSubmitInterceptor implements HandlerInterceptor
+{
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
+    {
+        if (handler instanceof HandlerMethod)
+        {
+            HandlerMethod handlerMethod = (HandlerMethod) handler;
+            Method method = handlerMethod.getMethod();
+            RepeatSubmit annotation = method.getAnnotation(RepeatSubmit.class);
+            if (annotation != null)
+            {
+                if (this.isRepeatSubmit(request, annotation))
+                {
+                    AjaxResult ajaxResult = AjaxResult.error(annotation.message());
+                    ServletUtils.renderString(response, JSON.toJSONString(ajaxResult));
+                    return false;
+                }
+            }
+            return true;
+        }
+        else
+        {
+            return true;
+        }
+    }
+
+    /**
+     * 楠岃瘉鏄惁閲嶅鎻愪氦鐢卞瓙绫诲疄鐜板叿浣撶殑闃查噸澶嶆彁浜ょ殑瑙勫垯
+     *
+     * @param request 璇锋眰淇℃伅
+     * @param annotation 闃查噸澶嶆敞瑙e弬鏁�
+     * @return 缁撴灉
+     * @throws Exception
+     */
+    public abstract boolean isRepeatSubmit(HttpServletRequest request, RepeatSubmit annotation);
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/interceptor/impl/SameUrlDataInterceptor.java b/zhitan-framework/src/main/java/com/zhitan/framework/interceptor/impl/SameUrlDataInterceptor.java
new file mode 100644
index 0000000..e04e6f0
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/interceptor/impl/SameUrlDataInterceptor.java
@@ -0,0 +1,110 @@
+package com.zhitan.framework.interceptor.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import javax.servlet.http.HttpServletRequest;
+import javax.annotation.Resource;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import com.alibaba.fastjson2.JSON;
+import com.zhitan.common.annotation.RepeatSubmit;
+import com.zhitan.common.constant.CacheConstants;
+import com.zhitan.common.core.redis.RedisCache;
+import com.zhitan.common.filter.RepeatedlyRequestWrapper;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.http.HttpHelper;
+import com.zhitan.framework.interceptor.RepeatSubmitInterceptor;
+
+/**
+ * 鍒ゆ柇璇锋眰url鍜屾暟鎹槸鍚﹀拰涓婁竴娆$浉鍚岋紝
+ * 濡傛灉鍜屼笂娆$浉鍚岋紝鍒欐槸閲嶅鎻愪氦琛ㄥ崟銆� 鏈夋晥鏃堕棿涓�10绉掑唴銆�
+ * 
+ * @author zhitan
+ */
+@Component
+public class SameUrlDataInterceptor extends RepeatSubmitInterceptor
+{
+    public final String REPEAT_PARAMS = "repeatParams";
+
+    public final String REPEAT_TIME = "repeatTime";
+
+    // 浠ょ墝鑷畾涔夋爣璇�
+    @Value("${token.header}")
+    private String header;
+
+    @Resource
+    private RedisCache redisCache;
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public boolean isRepeatSubmit(HttpServletRequest request, RepeatSubmit annotation)
+    {
+        String nowParams = "";
+        if (request instanceof RepeatedlyRequestWrapper)
+        {
+            RepeatedlyRequestWrapper repeatedlyRequest = (RepeatedlyRequestWrapper) request;
+            nowParams = HttpHelper.getBodyString(repeatedlyRequest);
+        }
+
+        // body鍙傛暟涓虹┖锛岃幏鍙朠arameter鐨勬暟鎹�
+        if (StringUtils.isEmpty(nowParams))
+        {
+            nowParams = JSON.toJSONString(request.getParameterMap());
+        }
+        Map<String, Object> nowDataMap = new HashMap<String, Object>();
+        nowDataMap.put(REPEAT_PARAMS, nowParams);
+        nowDataMap.put(REPEAT_TIME, System.currentTimeMillis());
+
+        // 璇锋眰鍦板潃锛堜綔涓哄瓨鏀綾ache鐨刱ey鍊硷級
+        String url = request.getRequestURI();
+
+        // 鍞竴鍊硷紙娌℃湁娑堟伅澶村垯浣跨敤璇锋眰鍦板潃锛�
+        String submitKey = StringUtils.trimToEmpty(request.getHeader(header));
+
+        // 鍞竴鏍囪瘑锛堟寚瀹歬ey + url + 娑堟伅澶达級
+        String cacheRepeatKey = CacheConstants.REPEAT_SUBMIT_KEY + url + submitKey;
+
+        Object sessionObj = redisCache.getCacheObject(cacheRepeatKey);
+        if (sessionObj != null)
+        {
+            Map<String, Object> sessionMap = (Map<String, Object>) sessionObj;
+            if (sessionMap.containsKey(url))
+            {
+                Map<String, Object> preDataMap = (Map<String, Object>) sessionMap.get(url);
+                if (compareParams(nowDataMap, preDataMap) && compareTime(nowDataMap, preDataMap, annotation.interval()))
+                {
+                    return true;
+                }
+            }
+        }
+        Map<String, Object> cacheMap = new HashMap<String, Object>();
+        cacheMap.put(url, nowDataMap);
+        redisCache.setCacheObject(cacheRepeatKey, cacheMap, annotation.interval(), TimeUnit.MILLISECONDS);
+        return false;
+    }
+
+    /**
+     * 鍒ゆ柇鍙傛暟鏄惁鐩稿悓
+     */
+    private boolean compareParams(Map<String, Object> nowMap, Map<String, Object> preMap)
+    {
+        String nowParams = (String) nowMap.get(REPEAT_PARAMS);
+        String preParams = (String) preMap.get(REPEAT_PARAMS);
+        return nowParams.equals(preParams);
+    }
+
+    /**
+     * 鍒ゆ柇涓ゆ闂撮殧鏃堕棿
+     */
+    private boolean compareTime(Map<String, Object> nowMap, Map<String, Object> preMap, int interval)
+    {
+        long time1 = (Long) nowMap.get(REPEAT_TIME);
+        long time2 = (Long) preMap.get(REPEAT_TIME);
+        if ((time1 - time2) < interval)
+        {
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/manager/AsyncManager.java b/zhitan-framework/src/main/java/com/zhitan/framework/manager/AsyncManager.java
new file mode 100644
index 0000000..d104ea4
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/manager/AsyncManager.java
@@ -0,0 +1,55 @@
+package com.zhitan.framework.manager;
+
+import java.util.TimerTask;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import com.zhitan.common.utils.Threads;
+import com.zhitan.common.utils.spring.SpringUtils;
+
+/**
+ * 寮傛浠诲姟绠$悊鍣�
+ * 
+ * @author zhitan
+ */
+public class AsyncManager
+{
+    /**
+     * 鎿嶄綔寤惰繜10姣
+     */
+    private final int OPERATE_DELAY_TIME = 10;
+
+    /**
+     * 寮傛鎿嶄綔浠诲姟璋冨害绾跨▼姹�
+     */
+    private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService");
+
+    /**
+     * 鍗曚緥妯″紡
+     */
+    private AsyncManager(){}
+
+    private static AsyncManager me = new AsyncManager();
+
+    public static AsyncManager me()
+    {
+        return me;
+    }
+
+    /**
+     * 鎵ц浠诲姟
+     * 
+     * @param task 浠诲姟
+     */
+    public void execute(TimerTask task)
+    {
+        executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS);
+    }
+
+    /**
+     * 鍋滄浠诲姟绾跨▼姹�
+     */
+    public void shutdown()
+    {
+        Threads.shutdownAndAwaitTermination(executor);
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/manager/ShutdownManager.java b/zhitan-framework/src/main/java/com/zhitan/framework/manager/ShutdownManager.java
new file mode 100644
index 0000000..37c37b2
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/manager/ShutdownManager.java
@@ -0,0 +1,39 @@
+package com.zhitan.framework.manager;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import javax.annotation.PreDestroy;
+
+/**
+ * 纭繚搴旂敤閫�鍑烘椂鑳藉叧闂悗鍙扮嚎绋�
+ *
+ * @author zhitan
+ */
+@Component
+public class ShutdownManager
+{
+    private static final Logger logger = LoggerFactory.getLogger("sys-user");
+
+    @PreDestroy
+    public void destroy()
+    {
+        shutdownAsyncManager();
+    }
+
+    /**
+     * 鍋滄寮傛鎵ц浠诲姟
+     */
+    private void shutdownAsyncManager()
+    {
+        try
+        {
+            logger.info("====鍏抽棴鍚庡彴浠诲姟浠诲姟绾跨▼姹�====");
+            AsyncManager.me().shutdown();
+        }
+        catch (Exception e)
+        {
+            logger.error(e.getMessage(), e);
+        }
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/manager/factory/AsyncFactory.java b/zhitan-framework/src/main/java/com/zhitan/framework/manager/factory/AsyncFactory.java
new file mode 100644
index 0000000..6afa2f4
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/manager/factory/AsyncFactory.java
@@ -0,0 +1,102 @@
+package com.zhitan.framework.manager.factory;
+
+import java.util.TimerTask;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.utils.LogUtils;
+import com.zhitan.common.utils.ServletUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.ip.AddressUtils;
+import com.zhitan.common.utils.ip.IpUtils;
+import com.zhitan.common.utils.spring.SpringUtils;
+import com.zhitan.system.domain.SysLoginInfo;
+import com.zhitan.system.domain.SysOperLog;
+import com.zhitan.system.service.ISysLoginInfoService;
+import com.zhitan.system.service.ISysOperLogService;
+import eu.bitwalker.useragentutils.UserAgent;
+
+/**
+ * 寮傛宸ュ巶锛堜骇鐢熶换鍔$敤锛�
+ * 
+ * @author zhitan
+ */
+public class AsyncFactory
+{
+    private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user");
+
+    /**
+     * 璁板綍鐧诲綍淇℃伅
+     * 
+     * @param username 鐢ㄦ埛鍚�
+     * @param status 鐘舵��
+     * @param message 娑堟伅
+     * @param args 鍒楄〃
+     * @return 浠诲姟task
+     */
+    public static TimerTask recordLoginInfo(final String username, final String status, final String message,
+                                            final Object... args)
+    {
+        final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
+        final String ip = IpUtils.getIpAddr();
+        return new TimerTask()
+        {
+            @Override
+            public void run()
+            {
+                String address = AddressUtils.getRealAddressByIP(ip);
+                StringBuilder s = new StringBuilder();
+                s.append(LogUtils.getBlock(ip));
+                s.append(address);
+                s.append(LogUtils.getBlock(username));
+                s.append(LogUtils.getBlock(status));
+                s.append(LogUtils.getBlock(message));
+                // 鎵撳嵃淇℃伅鍒版棩蹇�
+                sys_user_logger.info(s.toString(), args);
+                // 鑾峰彇瀹㈡埛绔搷浣滅郴缁�
+                String os = userAgent.getOperatingSystem().getName();
+                // 鑾峰彇瀹㈡埛绔祻瑙堝櫒
+                String browser = userAgent.getBrowser().getName();
+                // 灏佽瀵硅薄
+                SysLoginInfo loginInfo = new SysLoginInfo();
+                loginInfo.setUserName(username);
+                loginInfo.setIpaddr(ip);
+                loginInfo.setLoginLocation(address);
+                loginInfo.setBrowser(browser);
+                loginInfo.setOs(os);
+                loginInfo.setMsg(message);
+                // 鏃ュ織鐘舵��
+                if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER))
+                {
+                    loginInfo.setStatus(Constants.SUCCESS);
+                }
+                else if (Constants.LOGIN_FAIL.equals(status))
+                {
+                    loginInfo.setStatus(Constants.FAIL);
+                }
+                // 鎻掑叆鏁版嵁
+                SpringUtils.getBean(ISysLoginInfoService.class).insertLoginInfo(loginInfo);
+            }
+        };
+    }
+
+    /**
+     * 鎿嶄綔鏃ュ織璁板綍
+     * 
+     * @param operLog 鎿嶄綔鏃ュ織淇℃伅
+     * @return 浠诲姟task
+     */
+    public static TimerTask recordOper(final SysOperLog operLog)
+    {
+        return new TimerTask()
+        {
+            @Override
+            public void run()
+            {
+                // 杩滅▼鏌ヨ鎿嶄綔鍦扮偣
+                operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp()));
+                SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog);
+            }
+        };
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/mqtt/MqttClientUtil.java b/zhitan-framework/src/main/java/com/zhitan/framework/mqtt/MqttClientUtil.java
new file mode 100644
index 0000000..be2a7e4
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/mqtt/MqttClientUtil.java
@@ -0,0 +1,130 @@
+package com.zhitan.framework.mqtt;
+
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.*;
+import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.Objects;
+@Component
+@Slf4j
+public class MqttClientUtil {
+    @Value("${mqtt.username}")
+    private String username;
+    @Value("${mqtt.password}")
+    private String password;
+    @Value("${mqtt.host}")//杩欎釜鏄畨瑁卪qtt鐨刬p浠ュ強绔彛锛�1883鏄痬qtt榛樿绔彛
+    private String host;
+    @Value("${mqtt.clientId}")//杩欎釜闅忎究鍐欎絾鏄槸鍞竴鐨勩��
+    private String clientId;
+    @Value("${mqtt.topics}") //杩欎釜鏄痬qtt鍙戦�佹秷鎭殑鍜变滑瑕佽闃呯殑topic, cyt/# 浠h〃浠yt/寮�濮嬬殑鎵�鏈塼opic閮芥帴鏀�
+    private String topic;
+    @Value("${mqtt.timeout}")//IOT_MQTT_Yield浼歜lock浣弔imeout鐨勬椂闂村幓灏濊瘯鎺ユ敹鏁版嵁锛岀洿鍒皌imeout鎵嶄細閫�鍑恒�傚彲浠ュ啓鍦ㄨ繖閲屼篃鍙互鍐欏湪yml閰嶇疆鏂囦欢涓�
+    private int timeOut;
+    @Value("${mqtt.keepalive}")
+    private int interval;
+    
+    @Autowired
+    private MqttMessageCallback mqttMessageCallback2;
+    private MqttClient mqttClient;
+    private MqttConnectOptions mqttConnectOptions;
+    @PostConstruct
+    private void init(){
+        connect(host, clientId, topic);
+    }
+    /**
+     * 閾炬帴mqtt
+     * @param host
+     * @param clientId
+     */
+    private void connect(String host,String clientId,String topic){
+        try{
+            mqttClient = new MqttClient(host,clientId,new MemoryPersistence());
+            mqttConnectOptions = getMqttConnectOptions();
+            //璁剧疆鍥炶皟鍑芥暟
+            mqttClient.setCallback(mqttMessageCallback2);
+            //閾炬帴mqtt
+            mqttClient.connect(mqttConnectOptions);
+            //璁㈤槄娑堟伅
+            mqttClient.subscribe(topic,2);
+        }catch (Exception e){
+            log.error("mqtt鏈嶅姟閾炬帴寮傚父!");
+            e.printStackTrace();
+        }
+    }
+    /**
+     * 璁剧疆閾炬帴瀵硅薄淇℃伅
+     * setCleanSession  true 鏂紑閾炬帴鍗虫竻妤氫細璇�  false 淇濈暀閾炬帴淇℃伅 绂荤嚎杩樹細缁х画鍙戞秷鎭�
+     * @return
+     */
+    private MqttConnectOptions getMqttConnectOptions(){
+        MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
+        mqttConnectOptions.setUserName(username);
+        mqttConnectOptions.setPassword(password.toCharArray());
+        mqttConnectOptions.setServerURIs(new String[]{host});
+        mqttConnectOptions.setKeepAliveInterval(interval);
+        mqttConnectOptions.setConnectionTimeout(timeOut);
+        mqttConnectOptions.setCleanSession(true);
+        return mqttConnectOptions;
+    }
+    /**
+     *mqtt閾炬帴鐘舵��
+     * @return
+     */
+    private boolean isConnect(){
+        if(Objects.isNull(this.mqttClient)){
+            return false;
+        }
+        return mqttClient.isConnected();
+    }
+    /**
+     * 璁剧疆閲嶈繛
+     * @throws Exception
+     */
+    private void reConnect() throws Exception{
+        if(Objects.nonNull(this.mqttClient)){
+            log.info("mqtt 鏈嶅姟宸查噸鏂伴摼鎺�...");
+            this.mqttClient.connect(this.mqttConnectOptions);
+        }
+    }
+    /**
+     * 鏂紑閾炬帴
+     * @throws Exception
+     */
+    private void closeConnect() throws Exception{
+        if(Objects.nonNull(this.mqttClient)){
+            log.info("mqtt 鏈嶅姟宸叉柇寮�閾炬帴...");
+            this.mqttClient.disconnect();
+        }
+    }
+    /**
+     * 鍙戝竷娑堟伅
+     * @param topic
+     * @param message
+     * @param qos
+     * @throws Exception
+     */
+    public void sendMessage(String topic,String message,int qos) throws Exception {
+        if(Objects.nonNull(this.mqttClient) && this.mqttClient.isConnected()){
+            MqttMessage mqttMessage = new MqttMessage();
+            mqttMessage.setPayload(message.getBytes());
+            mqttMessage.setQos(qos);
+            MqttTopic mqttTopic = mqttClient.getTopic(topic);
+            if(Objects.nonNull(mqttTopic)){
+                try{
+                    MqttDeliveryToken publish = mqttTopic.publish(mqttMessage);
+                    if(publish.isComplete()){
+                        log.info("娑堟伅鍙戦�佹垚鍔�---->{}",message);
+                    }
+                }catch(Exception e){
+                    log.error("娑堟伅鍙戦�佸紓甯�",e);
+                }
+            }
+        }else{
+            reConnect();
+        }
+    }
+}
\ No newline at end of file
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/mqtt/MqttMessageCallback.java b/zhitan-framework/src/main/java/com/zhitan/framework/mqtt/MqttMessageCallback.java
new file mode 100644
index 0000000..7f64714
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/mqtt/MqttMessageCallback.java
@@ -0,0 +1,47 @@
+package com.zhitan.framework.mqtt;
+
+import com.zhitan.realtimedata.data.influxdb.InfluxDBRepository;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
+import org.eclipse.paho.client.mqttv3.MqttCallback;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+public class MqttMessageCallback implements MqttCallback {
+
+    @Autowired
+    private InfluxDBRepository repository;
+    /**
+     * 閾炬帴涓㈠け鏃跺鐞�
+     * @param throwable
+     */
+    @Override
+    public void connectionLost(Throwable throwable) {
+        //鍙互鍋氶噸杩� 鎴栬�� 鍏朵粬涓氬姟澶勭悊
+    }
+    @Override
+    public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
+        log.info("鎺ユ敹鍒版秷鎭叿浣撲俊鎭�---->{}",new String(mqttMessage.getPayload()));
+//        final String msg = new String(mqttMessage.getPayload());
+//        JSONObject jsonObject = JSON.parseObject(msg);
+//        final String values = jsonObject.getString("values");
+//        final List<EletricData> eletricData = JSON.parseArray(values, EletricData.class);
+//        List<TagValue> tagValueList = new ArrayList<>();
+//        //缁撳悎涓氬姟 缂栧啓鍏蜂綋淇℃伅鍗冲彲
+//        eletricData.forEach(ele->{
+//            final String key = ele.getKey();
+//            TagValue tagValue = new TagValue();
+//            tagValue.setDataTime(new DateTime(ele.getTime()));
+//            tagValue.setValue(ele.getVaule());
+//            tagValue.setTagCode(key.substring(key.lastIndexOf(".") + 1));
+//            tagValueList.add(tagValue);
+//        });
+//        repository.store(tagValueList);
+    }
+    @Override
+    public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/mqtt/domain/EletricData.java b/zhitan-framework/src/main/java/com/zhitan/framework/mqtt/domain/EletricData.java
new file mode 100644
index 0000000..b4c075c
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/mqtt/domain/EletricData.java
@@ -0,0 +1,18 @@
+package com.zhitan.framework.mqtt.domain;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * description todu
+ *
+ * @author hmj
+ * @date 2024-11-06 18:29
+ */
+@Getter
+@Setter
+public class EletricData {
+    public String Key;
+    public Double Vaule;
+    public Long Time;
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/security/context/AuthenticationContextHolder.java b/zhitan-framework/src/main/java/com/zhitan/framework/security/context/AuthenticationContextHolder.java
new file mode 100644
index 0000000..505d8f2
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/security/context/AuthenticationContextHolder.java
@@ -0,0 +1,28 @@
+package com.zhitan.framework.security.context;
+
+import org.springframework.security.core.Authentication;
+
+/**
+ * 韬唤楠岃瘉淇℃伅
+ * 
+ * @author zhitan
+ */
+public class AuthenticationContextHolder
+{
+    private static final ThreadLocal<Authentication> contextHolder = new ThreadLocal<>();
+
+    public static Authentication getContext()
+    {
+        return contextHolder.get();
+    }
+
+    public static void setContext(Authentication context)
+    {
+        contextHolder.set(context);
+    }
+
+    public static void clearContext()
+    {
+        contextHolder.remove();
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/security/context/PermissionContextHolder.java b/zhitan-framework/src/main/java/com/zhitan/framework/security/context/PermissionContextHolder.java
new file mode 100644
index 0000000..bc6e3af
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/security/context/PermissionContextHolder.java
@@ -0,0 +1,27 @@
+package com.zhitan.framework.security.context;
+
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import com.zhitan.common.core.text.Convert;
+
+/**
+ * 鏉冮檺淇℃伅
+ * 
+ * @author zhitan
+ */
+public class PermissionContextHolder
+{
+    private static final String PERMISSION_CONTEXT_ATTRIBUTES = "PERMISSION_CONTEXT";
+
+    public static void setContext(String permission)
+    {
+        RequestContextHolder.currentRequestAttributes().setAttribute(PERMISSION_CONTEXT_ATTRIBUTES, permission,
+                RequestAttributes.SCOPE_REQUEST);
+    }
+
+    public static String getContext()
+    {
+        return Convert.toStr(RequestContextHolder.currentRequestAttributes().getAttribute(PERMISSION_CONTEXT_ATTRIBUTES,
+                RequestAttributes.SCOPE_REQUEST));
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/security/filter/JwtAuthenticationTokenFilter.java b/zhitan-framework/src/main/java/com/zhitan/framework/security/filter/JwtAuthenticationTokenFilter.java
new file mode 100644
index 0000000..508e3f3
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/security/filter/JwtAuthenticationTokenFilter.java
@@ -0,0 +1,44 @@
+package com.zhitan.framework.security.filter;
+
+import java.io.IOException;
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.annotation.Resource;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
+import org.springframework.stereotype.Component;
+import org.springframework.web.filter.OncePerRequestFilter;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.utils.SecurityUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.framework.web.service.TokenService;
+
+/**
+ * token杩囨护鍣� 楠岃瘉token鏈夋晥鎬�
+ * 
+ * @author zhitan
+ */
+@Component
+public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
+{
+    @Resource
+    private TokenService tokenService;
+
+    @Override
+    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
+            throws ServletException, IOException
+    {
+        LoginUser loginUser = tokenService.getLoginUser(request);
+        if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication()))
+        {
+            tokenService.verifyToken(loginUser);
+            UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());
+            authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
+            SecurityContextHolder.getContext().setAuthentication(authenticationToken);
+        }
+        chain.doFilter(request, response);
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/security/handle/AuthenticationEntryPointImpl.java b/zhitan-framework/src/main/java/com/zhitan/framework/security/handle/AuthenticationEntryPointImpl.java
new file mode 100644
index 0000000..e59f44b
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/security/handle/AuthenticationEntryPointImpl.java
@@ -0,0 +1,34 @@
+package com.zhitan.framework.security.handle;
+
+import java.io.IOException;
+import java.io.Serializable;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.web.AuthenticationEntryPoint;
+import org.springframework.stereotype.Component;
+import com.alibaba.fastjson2.JSON;
+import com.zhitan.common.constant.HttpStatus;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.utils.ServletUtils;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 璁よ瘉澶辫触澶勭悊绫� 杩斿洖鏈巿鏉�
+ * 
+ * @author zhitan
+ */
+@Component
+public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, Serializable
+{
+    private static final long serialVersionUID = -8970718410437077606L;
+
+    @Override
+    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e)
+            throws IOException
+    {
+        int code = HttpStatus.UNAUTHORIZED;
+        String msg = StringUtils.format("璇锋眰璁块棶锛歿}锛岃璇佸け璐ワ紝鏃犳硶璁块棶绯荤粺璧勬簮", request.getRequestURI());
+        ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(code, msg)));
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/security/handle/LogoutSuccessHandlerImpl.java b/zhitan-framework/src/main/java/com/zhitan/framework/security/handle/LogoutSuccessHandlerImpl.java
new file mode 100644
index 0000000..4064d5c
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/security/handle/LogoutSuccessHandlerImpl.java
@@ -0,0 +1,53 @@
+package com.zhitan.framework.security.handle;
+
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.annotation.Resource;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
+import com.alibaba.fastjson2.JSON;
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.utils.MessageUtils;
+import com.zhitan.common.utils.ServletUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.framework.manager.AsyncManager;
+import com.zhitan.framework.manager.factory.AsyncFactory;
+import com.zhitan.framework.web.service.TokenService;
+
+/**
+ * 鑷畾涔夐��鍑哄鐞嗙被 杩斿洖鎴愬姛
+ * 
+ * @author zhitan
+ */
+@Configuration
+public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler
+{
+    @Resource
+    private TokenService tokenService;
+
+    /**
+     * 閫�鍑哄鐞�
+     * 
+     * @return
+     */
+    @Override
+    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
+            throws IOException, ServletException
+    {
+        LoginUser loginUser = tokenService.getLoginUser(request);
+        if (StringUtils.isNotNull(loginUser))
+        {
+            String userName = loginUser.getUsername();
+            // 鍒犻櫎鐢ㄦ埛缂撳瓨璁板綍
+            tokenService.delLoginUser(loginUser.getToken());
+            // 璁板綍鐢ㄦ埛閫�鍑烘棩蹇�
+            AsyncManager.me().execute(AsyncFactory.recordLoginInfo(userName, Constants.LOGOUT, MessageUtils.message("user.logout.success")));
+        }
+        ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.success(MessageUtils.message("user.logout.success"))));
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/web/domain/Server.java b/zhitan-framework/src/main/java/com/zhitan/framework/web/domain/Server.java
new file mode 100644
index 0000000..d9550c8
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/web/domain/Server.java
@@ -0,0 +1,240 @@
+package com.zhitan.framework.web.domain;
+
+import java.net.UnknownHostException;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Properties;
+import com.zhitan.common.utils.Arith;
+import com.zhitan.common.utils.ip.IpUtils;
+import com.zhitan.framework.web.domain.server.Cpu;
+import com.zhitan.framework.web.domain.server.Jvm;
+import com.zhitan.framework.web.domain.server.Mem;
+import com.zhitan.framework.web.domain.server.Sys;
+import com.zhitan.framework.web.domain.server.SysFile;
+import oshi.SystemInfo;
+import oshi.hardware.CentralProcessor;
+import oshi.hardware.CentralProcessor.TickType;
+import oshi.hardware.GlobalMemory;
+import oshi.hardware.HardwareAbstractionLayer;
+import oshi.software.os.FileSystem;
+import oshi.software.os.OSFileStore;
+import oshi.software.os.OperatingSystem;
+import oshi.util.Util;
+
+/**
+ * 鏈嶅姟鍣ㄧ浉鍏充俊鎭�
+ * 
+ * @author zhitan
+ */
+public class Server
+{
+    private static final int OSHI_WAIT_SECOND = 1000;
+    
+    /**
+     * CPU鐩稿叧淇℃伅
+     */
+    private Cpu cpu = new Cpu();
+
+    /**
+     * 鍏у瓨鐩稿叧淇℃伅
+     */
+    private Mem mem = new Mem();
+
+    /**
+     * JVM鐩稿叧淇℃伅
+     */
+    private Jvm jvm = new Jvm();
+
+    /**
+     * 鏈嶅姟鍣ㄧ浉鍏充俊鎭�
+     */
+    private Sys sys = new Sys();
+
+    /**
+     * 纾佺洏鐩稿叧淇℃伅
+     */
+    private List<SysFile> sysFiles = new LinkedList<SysFile>();
+
+    public Cpu getCpu()
+    {
+        return cpu;
+    }
+
+    public void setCpu(Cpu cpu)
+    {
+        this.cpu = cpu;
+    }
+
+    public Mem getMem()
+    {
+        return mem;
+    }
+
+    public void setMem(Mem mem)
+    {
+        this.mem = mem;
+    }
+
+    public Jvm getJvm()
+    {
+        return jvm;
+    }
+
+    public void setJvm(Jvm jvm)
+    {
+        this.jvm = jvm;
+    }
+
+    public Sys getSys()
+    {
+        return sys;
+    }
+
+    public void setSys(Sys sys)
+    {
+        this.sys = sys;
+    }
+
+    public List<SysFile> getSysFiles()
+    {
+        return sysFiles;
+    }
+
+    public void setSysFiles(List<SysFile> sysFiles)
+    {
+        this.sysFiles = sysFiles;
+    }
+
+    public void copyTo() throws Exception
+    {
+        SystemInfo si = new SystemInfo();
+        HardwareAbstractionLayer hal = si.getHardware();
+
+        setCpuInfo(hal.getProcessor());
+
+        setMemInfo(hal.getMemory());
+
+        setSysInfo();
+
+        setJvmInfo();
+
+        setSysFiles(si.getOperatingSystem());
+    }
+
+    /**
+     * 璁剧疆CPU淇℃伅
+     */
+    private void setCpuInfo(CentralProcessor processor)
+    {
+        // CPU淇℃伅
+        long[] prevTicks = processor.getSystemCpuLoadTicks();
+        Util.sleep(OSHI_WAIT_SECOND);
+        long[] ticks = processor.getSystemCpuLoadTicks();
+        long nice = ticks[TickType.NICE.getIndex()] - prevTicks[TickType.NICE.getIndex()];
+        long irq = ticks[TickType.IRQ.getIndex()] - prevTicks[TickType.IRQ.getIndex()];
+        long softirq = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()];
+        long steal = ticks[TickType.STEAL.getIndex()] - prevTicks[TickType.STEAL.getIndex()];
+        long cSys = ticks[TickType.SYSTEM.getIndex()] - prevTicks[TickType.SYSTEM.getIndex()];
+        long user = ticks[TickType.USER.getIndex()] - prevTicks[TickType.USER.getIndex()];
+        long iowait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()];
+        long idle = ticks[TickType.IDLE.getIndex()] - prevTicks[TickType.IDLE.getIndex()];
+        long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;
+        cpu.setCpuNum(processor.getLogicalProcessorCount());
+        cpu.setTotal(totalCpu);
+        cpu.setSys(cSys);
+        cpu.setUsed(user);
+        cpu.setWait(iowait);
+        cpu.setFree(idle);
+    }
+
+    /**
+     * 璁剧疆鍐呭瓨淇℃伅
+     */
+    private void setMemInfo(GlobalMemory memory)
+    {
+        mem.setTotal(memory.getTotal());
+        mem.setUsed(memory.getTotal() - memory.getAvailable());
+        mem.setFree(memory.getAvailable());
+    }
+
+    /**
+     * 璁剧疆鏈嶅姟鍣ㄤ俊鎭�
+     */
+    private void setSysInfo()
+    {
+        Properties props = System.getProperties();
+        sys.setComputerName(IpUtils.getHostName());
+        sys.setComputerIp(IpUtils.getHostIp());
+        sys.setOsName(props.getProperty("os.name"));
+        sys.setOsArch(props.getProperty("os.arch"));
+        sys.setUserDir(props.getProperty("user.dir"));
+    }
+
+    /**
+     * 璁剧疆Java铏氭嫙鏈�
+     */
+    private void setJvmInfo() throws UnknownHostException
+    {
+        Properties props = System.getProperties();
+        jvm.setTotal(Runtime.getRuntime().totalMemory());
+        jvm.setMax(Runtime.getRuntime().maxMemory());
+        jvm.setFree(Runtime.getRuntime().freeMemory());
+        jvm.setVersion(props.getProperty("java.version"));
+        jvm.setHome(props.getProperty("java.home"));
+    }
+
+    /**
+     * 璁剧疆纾佺洏淇℃伅
+     */
+    private void setSysFiles(OperatingSystem os)
+    {
+        FileSystem fileSystem = os.getFileSystem();
+        List<OSFileStore> fsArray = fileSystem.getFileStores();
+        for (OSFileStore fs : fsArray)
+        {
+            long free = fs.getUsableSpace();
+            long total = fs.getTotalSpace();
+            long used = total - free;
+            SysFile sysFile = new SysFile();
+            sysFile.setDirName(fs.getMount());
+            sysFile.setSysTypeName(fs.getType());
+            sysFile.setTypeName(fs.getName());
+            sysFile.setTotal(convertFileSize(total));
+            sysFile.setFree(convertFileSize(free));
+            sysFile.setUsed(convertFileSize(used));
+            sysFile.setUsage(Arith.mul(Arith.div(used, total, 4), 100));
+            sysFiles.add(sysFile);
+        }
+    }
+
+    /**
+     * 瀛楄妭杞崲
+     * 
+     * @param size 瀛楄妭澶у皬
+     * @return 杞崲鍚庡��
+     */
+    public String convertFileSize(long size)
+    {
+        long kb = 1024;
+        long mb = kb * 1024;
+        long gb = mb * 1024;
+        if (size >= gb)
+        {
+            return String.format("%.1f GB", (float) size / gb);
+        }
+        else if (size >= mb)
+        {
+            float f = (float) size / mb;
+            return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f);
+        }
+        else if (size >= kb)
+        {
+            float f = (float) size / kb;
+            return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f);
+        }
+        else
+        {
+            return String.format("%d B", size);
+        }
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/Cpu.java b/zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/Cpu.java
new file mode 100644
index 0000000..9d056bc
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/Cpu.java
@@ -0,0 +1,101 @@
+package com.zhitan.framework.web.domain.server;
+
+import com.zhitan.common.utils.Arith;
+
+/**
+ * CPU鐩稿叧淇℃伅
+ * 
+ * @author zhitan
+ */
+public class Cpu
+{
+    /**
+     * 鏍稿績鏁�
+     */
+    private int cpuNum;
+
+    /**
+     * CPU鎬荤殑浣跨敤鐜�
+     */
+    private double total;
+
+    /**
+     * CPU绯荤粺浣跨敤鐜�
+     */
+    private double sys;
+
+    /**
+     * CPU鐢ㄦ埛浣跨敤鐜�
+     */
+    private double used;
+
+    /**
+     * CPU褰撳墠绛夊緟鐜�
+     */
+    private double wait;
+
+    /**
+     * CPU褰撳墠绌洪棽鐜�
+     */
+    private double free;
+
+    public int getCpuNum()
+    {
+        return cpuNum;
+    }
+
+    public void setCpuNum(int cpuNum)
+    {
+        this.cpuNum = cpuNum;
+    }
+
+    public double getTotal()
+    {
+        return Arith.round(Arith.mul(total, 100), 2);
+    }
+
+    public void setTotal(double total)
+    {
+        this.total = total;
+    }
+
+    public double getSys()
+    {
+        return Arith.round(Arith.mul(sys / total, 100), 2);
+    }
+
+    public void setSys(double sys)
+    {
+        this.sys = sys;
+    }
+
+    public double getUsed()
+    {
+        return Arith.round(Arith.mul(used / total, 100), 2);
+    }
+
+    public void setUsed(double used)
+    {
+        this.used = used;
+    }
+
+    public double getWait()
+    {
+        return Arith.round(Arith.mul(wait / total, 100), 2);
+    }
+
+    public void setWait(double wait)
+    {
+        this.wait = wait;
+    }
+
+    public double getFree()
+    {
+        return Arith.round(Arith.mul(free / total, 100), 2);
+    }
+
+    public void setFree(double free)
+    {
+        this.free = free;
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/Jvm.java b/zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/Jvm.java
new file mode 100644
index 0000000..2e8caf9
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/Jvm.java
@@ -0,0 +1,130 @@
+package com.zhitan.framework.web.domain.server;
+
+import java.lang.management.ManagementFactory;
+import com.zhitan.common.utils.Arith;
+import com.zhitan.common.utils.DateUtils;
+
+/**
+ * JVM鐩稿叧淇℃伅
+ * 
+ * @author zhitan
+ */
+public class Jvm
+{
+    /**
+     * 褰撳墠JVM鍗犵敤鐨勫唴瀛樻�绘暟(M)
+     */
+    private double total;
+
+    /**
+     * JVM鏈�澶у彲鐢ㄥ唴瀛樻�绘暟(M)
+     */
+    private double max;
+
+    /**
+     * JVM绌洪棽鍐呭瓨(M)
+     */
+    private double free;
+
+    /**
+     * JDK鐗堟湰
+     */
+    private String version;
+
+    /**
+     * JDK璺緞
+     */
+    private String home;
+
+    public double getTotal()
+    {
+        return Arith.div(total, (1024 * 1024), 2);
+    }
+
+    public void setTotal(double total)
+    {
+        this.total = total;
+    }
+
+    public double getMax()
+    {
+        return Arith.div(max, (1024 * 1024), 2);
+    }
+
+    public void setMax(double max)
+    {
+        this.max = max;
+    }
+
+    public double getFree()
+    {
+        return Arith.div(free, (1024 * 1024), 2);
+    }
+
+    public void setFree(double free)
+    {
+        this.free = free;
+    }
+
+    public double getUsed()
+    {
+        return Arith.div(total - free, (1024 * 1024), 2);
+    }
+
+    public double getUsage()
+    {
+        return Arith.mul(Arith.div(total - free, total, 4), 100);
+    }
+
+    /**
+     * 鑾峰彇JDK鍚嶇О
+     */
+    public String getName()
+    {
+        return ManagementFactory.getRuntimeMXBean().getVmName();
+    }
+
+    public String getVersion()
+    {
+        return version;
+    }
+
+    public void setVersion(String version)
+    {
+        this.version = version;
+    }
+
+    public String getHome()
+    {
+        return home;
+    }
+
+    public void setHome(String home)
+    {
+        this.home = home;
+    }
+
+    /**
+     * JDK鍚姩鏃堕棿
+     */
+    public String getStartTime()
+    {
+        return DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.getServerStartDate());
+    }
+
+    /**
+     * JDK杩愯鏃堕棿
+     */
+    public String getRunTime()
+    {
+        return DateUtils.timeDistance(DateUtils.getNowDate(), DateUtils.getServerStartDate());
+    }
+
+    /**
+     * 杩愯鍙傛暟
+     */
+    public String getInputArgs()
+    {
+        return ManagementFactory.getRuntimeMXBean().getInputArguments().toString();
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/Mem.java b/zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/Mem.java
new file mode 100644
index 0000000..516c362
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/Mem.java
@@ -0,0 +1,61 @@
+package com.zhitan.framework.web.domain.server;
+
+import com.zhitan.common.utils.Arith;
+
+/**
+ * 鍏у瓨鐩稿叧淇℃伅
+ * 
+ * @author zhitan
+ */
+public class Mem
+{
+    /**
+     * 鍐呭瓨鎬婚噺
+     */
+    private double total;
+
+    /**
+     * 宸茬敤鍐呭瓨
+     */
+    private double used;
+
+    /**
+     * 鍓╀綑鍐呭瓨
+     */
+    private double free;
+
+    public double getTotal()
+    {
+        return Arith.div(total, (1024 * 1024 * 1024), 2);
+    }
+
+    public void setTotal(long total)
+    {
+        this.total = total;
+    }
+
+    public double getUsed()
+    {
+        return Arith.div(used, (1024 * 1024 * 1024), 2);
+    }
+
+    public void setUsed(long used)
+    {
+        this.used = used;
+    }
+
+    public double getFree()
+    {
+        return Arith.div(free, (1024 * 1024 * 1024), 2);
+    }
+
+    public void setFree(long free)
+    {
+        this.free = free;
+    }
+
+    public double getUsage()
+    {
+        return Arith.mul(Arith.div(used, total, 4), 100);
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/Sys.java b/zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/Sys.java
new file mode 100644
index 0000000..29525a0
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/Sys.java
@@ -0,0 +1,84 @@
+package com.zhitan.framework.web.domain.server;
+
+/**
+ * 绯荤粺鐩稿叧淇℃伅
+ * 
+ * @author zhitan
+ */
+public class Sys
+{
+    /**
+     * 鏈嶅姟鍣ㄥ悕绉�
+     */
+    private String computerName;
+
+    /**
+     * 鏈嶅姟鍣↖p
+     */
+    private String computerIp;
+
+    /**
+     * 椤圭洰璺緞
+     */
+    private String userDir;
+
+    /**
+     * 鎿嶄綔绯荤粺
+     */
+    private String osName;
+
+    /**
+     * 绯荤粺鏋舵瀯
+     */
+    private String osArch;
+
+    public String getComputerName()
+    {
+        return computerName;
+    }
+
+    public void setComputerName(String computerName)
+    {
+        this.computerName = computerName;
+    }
+
+    public String getComputerIp()
+    {
+        return computerIp;
+    }
+
+    public void setComputerIp(String computerIp)
+    {
+        this.computerIp = computerIp;
+    }
+
+    public String getUserDir()
+    {
+        return userDir;
+    }
+
+    public void setUserDir(String userDir)
+    {
+        this.userDir = userDir;
+    }
+
+    public String getOsName()
+    {
+        return osName;
+    }
+
+    public void setOsName(String osName)
+    {
+        this.osName = osName;
+    }
+
+    public String getOsArch()
+    {
+        return osArch;
+    }
+
+    public void setOsArch(String osArch)
+    {
+        this.osArch = osArch;
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/SysFile.java b/zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/SysFile.java
new file mode 100644
index 0000000..84bb623
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/web/domain/server/SysFile.java
@@ -0,0 +1,114 @@
+package com.zhitan.framework.web.domain.server;
+
+/**
+ * 绯荤粺鏂囦欢鐩稿叧淇℃伅
+ * 
+ * @author zhitan
+ */
+public class SysFile
+{
+    /**
+     * 鐩樼璺緞
+     */
+    private String dirName;
+
+    /**
+     * 鐩樼绫诲瀷
+     */
+    private String sysTypeName;
+
+    /**
+     * 鏂囦欢绫诲瀷
+     */
+    private String typeName;
+
+    /**
+     * 鎬诲ぇ灏�
+     */
+    private String total;
+
+    /**
+     * 鍓╀綑澶у皬
+     */
+    private String free;
+
+    /**
+     * 宸茬粡浣跨敤閲�
+     */
+    private String used;
+
+    /**
+     * 璧勬簮鐨勪娇鐢ㄧ巼
+     */
+    private double usage;
+
+    public String getDirName()
+    {
+        return dirName;
+    }
+
+    public void setDirName(String dirName)
+    {
+        this.dirName = dirName;
+    }
+
+    public String getSysTypeName()
+    {
+        return sysTypeName;
+    }
+
+    public void setSysTypeName(String sysTypeName)
+    {
+        this.sysTypeName = sysTypeName;
+    }
+
+    public String getTypeName()
+    {
+        return typeName;
+    }
+
+    public void setTypeName(String typeName)
+    {
+        this.typeName = typeName;
+    }
+
+    public String getTotal()
+    {
+        return total;
+    }
+
+    public void setTotal(String total)
+    {
+        this.total = total;
+    }
+
+    public String getFree()
+    {
+        return free;
+    }
+
+    public void setFree(String free)
+    {
+        this.free = free;
+    }
+
+    public String getUsed()
+    {
+        return used;
+    }
+
+    public void setUsed(String used)
+    {
+        this.used = used;
+    }
+
+    public double getUsage()
+    {
+        return usage;
+    }
+
+    public void setUsage(double usage)
+    {
+        this.usage = usage;
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/web/exception/GlobalExceptionHandler.java b/zhitan-framework/src/main/java/com/zhitan/framework/web/exception/GlobalExceptionHandler.java
new file mode 100644
index 0000000..4bf4fe4
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/web/exception/GlobalExceptionHandler.java
@@ -0,0 +1,138 @@
+package com.zhitan.framework.web.exception;
+
+import javax.servlet.http.HttpServletRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.security.access.AccessDeniedException;
+import org.springframework.validation.BindException;
+import org.springframework.web.HttpRequestMethodNotSupportedException;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.MissingPathVariableException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
+import com.zhitan.common.constant.HttpStatus;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.exception.DemoModeException;
+import com.zhitan.common.exception.ServiceException;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 鍏ㄥ眬寮傚父澶勭悊鍣�
+ * 
+ * @author zhitan
+ */
+@RestControllerAdvice
+public class GlobalExceptionHandler
+{
+    private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
+
+    /**
+     * 鏉冮檺鏍¢獙寮傚父
+     */
+    @ExceptionHandler(AccessDeniedException.class)
+    public AjaxResult handleAccessDeniedException(AccessDeniedException e, HttpServletRequest request)
+    {
+        String requestURI = request.getRequestURI();
+        log.error("璇锋眰鍦板潃'{}',鏉冮檺鏍¢獙澶辫触'{}'", requestURI, e.getMessage());
+        return AjaxResult.error(HttpStatus.FORBIDDEN, "娌℃湁鏉冮檺锛岃鑱旂郴绠$悊鍛樻巿鏉�");
+    }
+
+    /**
+     * 璇锋眰鏂瑰紡涓嶆敮鎸�
+     */
+    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
+    public AjaxResult handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e,
+            HttpServletRequest request)
+    {
+        String requestURI = request.getRequestURI();
+        log.error("璇锋眰鍦板潃'{}',涓嶆敮鎸�'{}'璇锋眰", requestURI, e.getMethod());
+        return AjaxResult.error(e.getMessage());
+    }
+
+    /**
+     * 涓氬姟寮傚父
+     */
+    @ExceptionHandler(ServiceException.class)
+    public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request)
+    {
+        log.error(e.getMessage(), e);
+        Integer code = e.getCode();
+        return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage());
+    }
+
+    /**
+     * 璇锋眰璺緞涓己灏戝繀闇�鐨勮矾寰勫彉閲�
+     */
+    @ExceptionHandler(MissingPathVariableException.class)
+    public AjaxResult handleMissingPathVariableException(MissingPathVariableException e, HttpServletRequest request)
+    {
+        String requestURI = request.getRequestURI();
+        log.error("璇锋眰璺緞涓己灏戝繀闇�鐨勮矾寰勫彉閲�'{}',鍙戠敓绯荤粺寮傚父.", requestURI, e);
+        return AjaxResult.error(String.format("璇锋眰璺緞涓己灏戝繀闇�鐨勮矾寰勫彉閲廩%s]", e.getVariableName()));
+    }
+
+    /**
+     * 璇锋眰鍙傛暟绫诲瀷涓嶅尮閰�
+     */
+    @ExceptionHandler(MethodArgumentTypeMismatchException.class)
+    public AjaxResult handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e, HttpServletRequest request)
+    {
+        String requestURI = request.getRequestURI();
+        log.error("璇锋眰鍙傛暟绫诲瀷涓嶅尮閰�'{}',鍙戠敓绯荤粺寮傚父.", requestURI, e);
+        return AjaxResult.error(String.format("璇锋眰鍙傛暟绫诲瀷涓嶅尮閰嶏紝鍙傛暟[%s]瑕佹眰绫诲瀷涓猴細'%s'锛屼絾杈撳叆鍊间负锛�'%s'", e.getName(), e.getRequiredType().getName(), e.getValue()));
+    }
+
+    /**
+     * 鎷︽埅鏈煡鐨勮繍琛屾椂寮傚父
+     */
+    @ExceptionHandler(RuntimeException.class)
+    public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request)
+    {
+        String requestURI = request.getRequestURI();
+        log.error("璇锋眰鍦板潃'{}',鍙戠敓鏈煡寮傚父.", requestURI, e);
+        return AjaxResult.error(e.getMessage());
+    }
+
+    /**
+     * 绯荤粺寮傚父
+     */
+    @ExceptionHandler(Exception.class)
+    public AjaxResult handleException(Exception e, HttpServletRequest request)
+    {
+        String requestURI = request.getRequestURI();
+        log.error("璇锋眰鍦板潃'{}',鍙戠敓绯荤粺寮傚父.", requestURI, e);
+        return AjaxResult.error(e.getMessage());
+    }
+
+    /**
+     * 鑷畾涔夐獙璇佸紓甯�
+     */
+    @ExceptionHandler(BindException.class)
+    public AjaxResult handleBindException(BindException e)
+    {
+        log.error(e.getMessage(), e);
+        String message = e.getAllErrors().get(0).getDefaultMessage();
+        return AjaxResult.error(message);
+    }
+
+    /**
+     * 鑷畾涔夐獙璇佸紓甯�
+     */
+    @ExceptionHandler(MethodArgumentNotValidException.class)
+    public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e)
+    {
+        log.error(e.getMessage(), e);
+        String message = e.getBindingResult().getFieldError().getDefaultMessage();
+        return AjaxResult.error(message);
+    }
+
+    /**
+     * 婕旂ず妯″紡寮傚父
+     */
+    @ExceptionHandler(DemoModeException.class)
+    public AjaxResult handleDemoModeException(DemoModeException e)
+    {
+        return AjaxResult.error("婕旂ず妯″紡锛屼笉鍏佽鎿嶄綔");
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/web/service/PermissionService.java b/zhitan-framework/src/main/java/com/zhitan/framework/web/service/PermissionService.java
new file mode 100644
index 0000000..520d562
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/web/service/PermissionService.java
@@ -0,0 +1,161 @@
+package com.zhitan.framework.web.service;
+
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.core.domain.entity.SysRole;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.utils.SecurityUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.framework.security.context.PermissionContextHolder;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Set;
+
+/**
+ * 棣栧垱 鑷畾涔夋潈闄愬疄鐜帮紝ss鍙栬嚜SpringSecurity棣栧瓧姣�
+ *
+ * @author zhitan
+ */
+@Service("ss")
+public class PermissionService
+{
+    /**
+     * 楠岃瘉鐢ㄦ埛鏄惁鍏峰鏌愭潈闄�
+     *
+     * @param permission 鏉冮檺瀛楃涓�
+     * @return 鐢ㄦ埛鏄惁鍏峰鏌愭潈闄�
+     */
+    public boolean hasPermi(String permission)
+    {
+        return true;
+//        if (StringUtils.isEmpty(permission))
+//        {
+//            return false;
+//        }
+//        LoginUser loginUser = SecurityUtils.getLoginUser();
+//        if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getPermissions()))
+//        {
+//            return false;
+//        }
+//        PermissionContextHolder.setContext(permission);
+//        return hasPermissions(loginUser.getPermissions(), permission);
+    }
+
+    /**
+     * 楠岃瘉鐢ㄦ埛鏄惁涓嶅叿澶囨煇鏉冮檺锛屼笌 hasPermi閫昏緫鐩稿弽
+     *
+     * @param permission 鏉冮檺瀛楃涓�
+     * @return 鐢ㄦ埛鏄惁涓嶅叿澶囨煇鏉冮檺
+     */
+    public boolean lacksPermi(String permission)
+    {
+        return hasPermi(permission) != true;
+    }
+
+    /**
+     * 楠岃瘉鐢ㄦ埛鏄惁鍏锋湁浠ヤ笅浠绘剰涓�涓潈闄�
+     *
+     * @param permissions 浠� PERMISSION_DELIMETER 涓哄垎闅旂鐨勬潈闄愬垪琛�
+     * @return 鐢ㄦ埛鏄惁鍏锋湁浠ヤ笅浠绘剰涓�涓潈闄�
+     */
+    public boolean hasAnyPermi(String permissions)
+    {
+        if (StringUtils.isEmpty(permissions))
+        {
+            return false;
+        }
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getPermissions()))
+        {
+            return false;
+        }
+        PermissionContextHolder.setContext(permissions);
+        Set<String> authorities = loginUser.getPermissions();
+        for (String permission : permissions.split(Constants.PERMISSION_DELIMETER))
+        {
+            if (permission != null && hasPermissions(authorities, permission))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 鍒ゆ柇鐢ㄦ埛鏄惁鎷ユ湁鏌愪釜瑙掕壊
+     *
+     * @param role 瑙掕壊瀛楃涓�
+     * @return 鐢ㄦ埛鏄惁鍏峰鏌愯鑹�
+     */
+    public boolean hasRole(String role)
+    {
+        if (StringUtils.isEmpty(role))
+        {
+            return false;
+        }
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getUser().getRoles()))
+        {
+            return false;
+        }
+        for (SysRole sysRole : loginUser.getUser().getRoles())
+        {
+            String roleKey = sysRole.getRoleKey();
+            if (Constants.SUPER_ADMIN.equals(roleKey) || roleKey.equals(StringUtils.trim(role)))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 楠岃瘉鐢ㄦ埛鏄惁涓嶅叿澶囨煇瑙掕壊锛屼笌 isRole閫昏緫鐩稿弽銆�
+     *
+     * @param role 瑙掕壊鍚嶇О
+     * @return 鐢ㄦ埛鏄惁涓嶅叿澶囨煇瑙掕壊
+     */
+    public boolean lacksRole(String role)
+    {
+        return hasRole(role) != true;
+    }
+
+    /**
+     * 楠岃瘉鐢ㄦ埛鏄惁鍏锋湁浠ヤ笅浠绘剰涓�涓鑹�
+     *
+     * @param roles 浠� ROLE_NAMES_DELIMETER 涓哄垎闅旂鐨勮鑹插垪琛�
+     * @return 鐢ㄦ埛鏄惁鍏锋湁浠ヤ笅浠绘剰涓�涓鑹�
+     */
+    public boolean hasAnyRoles(String roles)
+    {
+        if (StringUtils.isEmpty(roles))
+        {
+            return false;
+        }
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getUser().getRoles()))
+        {
+            return false;
+        }
+        for (String role : roles.split(Constants.ROLE_DELIMETER))
+        {
+            if (hasRole(role))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁鍖呭惈鏉冮檺
+     *
+     * @param permissions 鏉冮檺鍒楄〃
+     * @param permission 鏉冮檺瀛楃涓�
+     * @return 鐢ㄦ埛鏄惁鍏峰鏌愭潈闄�
+     */
+    private boolean hasPermissions(Set<String> permissions, String permission)
+    {
+        return permissions.contains(Constants.ALL_PERMISSION) || permissions.contains(StringUtils.trim(permission));
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysLoginService.java b/zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysLoginService.java
new file mode 100644
index 0000000..d881545
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysLoginService.java
@@ -0,0 +1,181 @@
+package com.zhitan.framework.web.service;
+
+import javax.annotation.Resource;
+
+import com.zhitan.framework.manager.AsyncManager;
+import com.zhitan.framework.manager.factory.AsyncFactory;
+import com.zhitan.framework.security.context.AuthenticationContextHolder;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.stereotype.Component;
+import com.zhitan.common.constant.CacheConstants;
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.constant.UserConstants;
+import com.zhitan.common.core.domain.entity.SysUser;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.core.redis.RedisCache;
+import com.zhitan.common.exception.ServiceException;
+import com.zhitan.common.exception.user.BlackListException;
+import com.zhitan.common.exception.user.CaptchaException;
+import com.zhitan.common.exception.user.CaptchaExpireException;
+import com.zhitan.common.exception.user.UserNotExistsException;
+import com.zhitan.common.exception.user.UserPasswordNotMatchException;
+import com.zhitan.common.utils.DateUtils;
+import com.zhitan.common.utils.MessageUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.ip.IpUtils;
+import com.zhitan.system.service.ISysConfigService;
+import com.zhitan.system.service.ISysUserService;
+
+/**
+ * 鐧诲綍鏍¢獙鏂规硶
+ * 
+ * @author zhitan
+ */
+@Component
+public class SysLoginService
+{
+    @Resource
+    private TokenService tokenService;
+
+    @Resource
+    private AuthenticationManager authenticationManager;
+
+    @Resource
+    private RedisCache redisCache;
+    
+    @Resource
+    private ISysUserService userService;
+
+    @Resource
+    private ISysConfigService configService;
+
+    /**
+     * 鐧诲綍楠岃瘉
+     * 
+     * @param username 鐢ㄦ埛鍚�
+     * @param password 瀵嗙爜
+     * @param code 楠岃瘉鐮�
+     * @param uuid 鍞竴鏍囪瘑
+     * @return 缁撴灉
+     */
+    public String login(String username, String password, String code, String uuid)
+    {
+        // 楠岃瘉鐮佹牎楠�
+        validateCaptcha(username, code, uuid);
+        // 鐧诲綍鍓嶇疆鏍¢獙
+        loginPreCheck(username, password);
+        // 鐢ㄦ埛楠岃瘉
+        Authentication authentication = null;
+        try
+        {
+            UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password);
+            AuthenticationContextHolder.setContext(authenticationToken);
+            // 璇ユ柟娉曚細鍘昏皟鐢║serDetailsServiceImpl.loadUserByUsername
+            authentication = authenticationManager.authenticate(authenticationToken);
+        }
+        catch (Exception e)
+        {
+            if (e instanceof BadCredentialsException)
+            {
+                AsyncManager.me().execute(AsyncFactory.recordLoginInfo(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+                throw new UserPasswordNotMatchException();
+            }
+            else
+            {
+                AsyncManager.me().execute(AsyncFactory.recordLoginInfo(username, Constants.LOGIN_FAIL, e.getMessage()));
+                throw new ServiceException(e.getMessage());
+            }
+        }
+        finally
+        {
+            AuthenticationContextHolder.clearContext();
+        }
+        AsyncManager.me().execute(AsyncFactory.recordLoginInfo(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
+        LoginUser loginUser = (LoginUser) authentication.getPrincipal();
+        recordLoginInfo(loginUser.getUserId());
+        // 鐢熸垚token
+        return tokenService.createToken(loginUser);
+    }
+
+    /**
+     * 鏍¢獙楠岃瘉鐮�
+     * 
+     * @param username 鐢ㄦ埛鍚�
+     * @param code 楠岃瘉鐮�
+     * @param uuid 鍞竴鏍囪瘑
+     * @return 缁撴灉
+     */
+    public void validateCaptcha(String username, String code, String uuid)
+    {
+        boolean captchaEnabled = configService.selectCaptchaEnabled();
+        if (captchaEnabled)
+        {
+            String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");
+            String captcha = redisCache.getCacheObject(verifyKey);
+            redisCache.deleteObject(verifyKey);
+            if (captcha == null)
+            {
+                AsyncManager.me().execute(AsyncFactory.recordLoginInfo(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
+                throw new CaptchaExpireException();
+            }
+            if (!code.equalsIgnoreCase(captcha))
+            {
+                AsyncManager.me().execute(AsyncFactory.recordLoginInfo(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
+                throw new CaptchaException();
+            }
+        }
+    }
+
+    /**
+     * 鐧诲綍鍓嶇疆鏍¢獙
+     * @param username 鐢ㄦ埛鍚�
+     * @param password 鐢ㄦ埛瀵嗙爜
+     */
+    public void loginPreCheck(String username, String password)
+    {
+        // 鐢ㄦ埛鍚嶆垨瀵嗙爜涓虹┖ 閿欒
+        if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password))
+        {
+            AsyncManager.me().execute(AsyncFactory.recordLoginInfo(username, Constants.LOGIN_FAIL, MessageUtils.message("not.null")));
+            throw new UserNotExistsException();
+        }
+        // 瀵嗙爜濡傛灉涓嶅湪鎸囧畾鑼冨洿鍐� 閿欒
+        if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
+                || password.length() > UserConstants.PASSWORD_MAX_LENGTH)
+        {
+            AsyncManager.me().execute(AsyncFactory.recordLoginInfo(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+            throw new UserPasswordNotMatchException();
+        }
+        // 鐢ㄦ埛鍚嶄笉鍦ㄦ寚瀹氳寖鍥村唴 閿欒
+        if (username.length() < UserConstants.USERNAME_MIN_LENGTH
+                || username.length() > UserConstants.USERNAME_MAX_LENGTH)
+        {
+            AsyncManager.me().execute(AsyncFactory.recordLoginInfo(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+            throw new UserPasswordNotMatchException();
+        }
+        // IP榛戝悕鍗曟牎楠�
+        String blackStr = configService.selectConfigByKey("sys.login.blackIPList");
+        if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr()))
+        {
+            AsyncManager.me().execute(AsyncFactory.recordLoginInfo(username, Constants.LOGIN_FAIL, MessageUtils.message("login.blocked")));
+            throw new BlackListException();
+        }
+    }
+
+    /**
+     * 璁板綍鐧诲綍淇℃伅
+     *
+     * @param userId 鐢ㄦ埛ID
+     */
+    public void recordLoginInfo(Long userId)
+    {
+        SysUser sysUser = new SysUser();
+        sysUser.setUserId(userId);
+        sysUser.setLoginIp(IpUtils.getIpAddr());
+        sysUser.setLoginDate(DateUtils.getNowDate());
+        userService.updateUserProfile(sysUser);
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysPasswordService.java b/zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysPasswordService.java
new file mode 100644
index 0000000..c9efadd
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysPasswordService.java
@@ -0,0 +1,87 @@
+package com.zhitan.framework.web.service;
+
+import java.util.concurrent.TimeUnit;
+
+import com.zhitan.framework.security.context.AuthenticationContextHolder;
+import javax.annotation.Resource;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.core.Authentication;
+import org.springframework.stereotype.Component;
+import com.zhitan.common.constant.CacheConstants;
+import com.zhitan.common.core.domain.entity.SysUser;
+import com.zhitan.common.core.redis.RedisCache;
+import com.zhitan.common.exception.user.UserPasswordNotMatchException;
+import com.zhitan.common.exception.user.UserPasswordRetryLimitExceedException;
+import com.zhitan.common.utils.SecurityUtils;
+
+/**
+ * 鐧诲綍瀵嗙爜鏂规硶
+ * 
+ * @author zhitan
+ */
+@Component
+public class SysPasswordService
+{
+    @Resource
+    private RedisCache redisCache;
+
+    @Value(value = "${user.password.maxRetryCount}")
+    private int maxRetryCount;
+
+    @Value(value = "${user.password.lockTime}")
+    private int lockTime;
+
+    /**
+     * 鐧诲綍璐︽埛瀵嗙爜閿欒娆℃暟缂撳瓨閿悕
+     * 
+     * @param username 鐢ㄦ埛鍚�
+     * @return 缂撳瓨閿甼ey
+     */
+    private String getCacheKey(String username)
+    {
+        return CacheConstants.PWD_ERR_CNT_KEY + username;
+    }
+
+    public void validate(SysUser user)
+    {
+        Authentication usernamePasswordAuthenticationToken = AuthenticationContextHolder.getContext();
+        String username = usernamePasswordAuthenticationToken.getName();
+        String password = usernamePasswordAuthenticationToken.getCredentials().toString();
+
+        Integer retryCount = redisCache.getCacheObject(getCacheKey(username));
+
+        if (retryCount == null)
+        {
+            retryCount = 0;
+        }
+
+        if (retryCount >= Integer.valueOf(maxRetryCount).intValue())
+        {
+            throw new UserPasswordRetryLimitExceedException(maxRetryCount, lockTime);
+        }
+
+        if (!matches(user, password))
+        {
+            retryCount = retryCount + 1;
+            redisCache.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES);
+            throw new UserPasswordNotMatchException();
+        }
+        else
+        {
+            clearLoginRecordCache(username);
+        }
+    }
+
+    public boolean matches(SysUser user, String rawPassword)
+    {
+        return SecurityUtils.matchesPassword(rawPassword, user.getPassword());
+    }
+
+    public void clearLoginRecordCache(String loginName)
+    {
+        if (redisCache.hasKey(getCacheKey(loginName)))
+        {
+            redisCache.deleteObject(getCacheKey(loginName));
+        }
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysPermissionService.java b/zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysPermissionService.java
new file mode 100644
index 0000000..a0468da
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysPermissionService.java
@@ -0,0 +1,83 @@
+package com.zhitan.framework.web.service;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+import com.zhitan.common.core.domain.entity.SysRole;
+import com.zhitan.common.core.domain.entity.SysUser;
+import com.zhitan.system.service.ISysMenuService;
+import com.zhitan.system.service.ISysRoleService;
+
+/**
+ * 鐢ㄦ埛鏉冮檺澶勭悊
+ * 
+ * @author zhitan
+ */
+@Component
+public class SysPermissionService
+{
+    @Resource
+    private ISysRoleService roleService;
+
+    @Resource
+    private ISysMenuService menuService;
+
+    /**
+     * 鑾峰彇瑙掕壊鏁版嵁鏉冮檺
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 瑙掕壊鏉冮檺淇℃伅
+     */
+    public Set<String> getRolePermission(SysUser user)
+    {
+        Set<String> roles = new HashSet<String>();
+        // 绠$悊鍛樻嫢鏈夋墍鏈夋潈闄�
+        if (user.isAdmin())
+        {
+            roles.add("admin");
+        }
+        else
+        {
+            roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId()));
+        }
+        return roles;
+    }
+
+    /**
+     * 鑾峰彇鑿滃崟鏁版嵁鏉冮檺
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鑿滃崟鏉冮檺淇℃伅
+     */
+    public Set<String> getMenuPermission(SysUser user)
+    {
+        Set<String> perms = new HashSet<String>();
+        // 绠$悊鍛樻嫢鏈夋墍鏈夋潈闄�
+        if (user.isAdmin())
+        {
+            perms.add("*:*:*");
+        }
+        else
+        {
+            List<SysRole> roles = user.getRoles();
+            if (!CollectionUtils.isEmpty(roles))
+            {
+                // 澶氳鑹茶缃畃ermissions灞炴�э紝浠ヤ究鏁版嵁鏉冮檺鍖归厤鏉冮檺
+                for (SysRole role : roles)
+                {
+                    Set<String> rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId());
+                    role.setPermissions(rolePerms);
+                    perms.addAll(rolePerms);
+                }
+            }
+            else
+            {
+                perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId()));
+            }
+        }
+        return perms;
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysRegisterService.java b/zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysRegisterService.java
new file mode 100644
index 0000000..b2d1ef3
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysRegisterService.java
@@ -0,0 +1,115 @@
+package com.zhitan.framework.web.service;
+
+import com.zhitan.framework.manager.AsyncManager;
+import com.zhitan.framework.manager.factory.AsyncFactory;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Component;
+import com.zhitan.common.constant.CacheConstants;
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.constant.UserConstants;
+import com.zhitan.common.core.domain.entity.SysUser;
+import com.zhitan.common.core.domain.model.RegisterBody;
+import com.zhitan.common.core.redis.RedisCache;
+import com.zhitan.common.exception.user.CaptchaException;
+import com.zhitan.common.exception.user.CaptchaExpireException;
+import com.zhitan.common.utils.MessageUtils;
+import com.zhitan.common.utils.SecurityUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.system.service.ISysConfigService;
+import com.zhitan.system.service.ISysUserService;
+
+/**
+ * 娉ㄥ唽鏍¢獙鏂规硶
+ * 
+ * @author zhitan
+ */
+@Component
+public class SysRegisterService
+{
+    @Resource
+    private ISysUserService userService;
+
+    @Resource
+    private ISysConfigService configService;
+
+    @Resource
+    private RedisCache redisCache;
+
+    /**
+     * 娉ㄥ唽
+     */
+    public String register(RegisterBody registerBody)
+    {
+        String msg = "", username = registerBody.getUsername(), password = registerBody.getPassword();
+        SysUser sysUser = new SysUser();
+        sysUser.setUserName(username);
+
+        // 楠岃瘉鐮佸紑鍏�
+        boolean captchaEnabled = configService.selectCaptchaEnabled();
+        if (captchaEnabled)
+        {
+            validateCaptcha(username, registerBody.getCode(), registerBody.getUuid());
+        }
+
+        if (StringUtils.isEmpty(username))
+        {
+            msg = "鐢ㄦ埛鍚嶄笉鑳戒负绌�";
+        }
+        else if (StringUtils.isEmpty(password))
+        {
+            msg = "鐢ㄦ埛瀵嗙爜涓嶈兘涓虹┖";
+        }
+        else if (username.length() < UserConstants.USERNAME_MIN_LENGTH
+                || username.length() > UserConstants.USERNAME_MAX_LENGTH)
+        {
+            msg = "璐︽埛闀垮害蹇呴』鍦�2鍒�20涓瓧绗︿箣闂�";
+        }
+        else if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
+                || password.length() > UserConstants.PASSWORD_MAX_LENGTH)
+        {
+            msg = "瀵嗙爜闀垮害蹇呴』鍦�5鍒�20涓瓧绗︿箣闂�";
+        }
+        else if (!userService.checkUserNameUnique(sysUser))
+        {
+            msg = "淇濆瓨鐢ㄦ埛'" + username + "'澶辫触锛屾敞鍐岃处鍙峰凡瀛樺湪";
+        }
+        else
+        {
+            sysUser.setNickName(username);
+            sysUser.setPassword(SecurityUtils.encryptPassword(password));
+            boolean regFlag = userService.registerUser(sysUser);
+            if (!regFlag)
+            {
+                msg = "娉ㄥ唽澶辫触,璇疯仈绯荤郴缁熺鐞嗕汉鍛�";
+            }
+            else
+            {
+                AsyncManager.me().execute(AsyncFactory.recordLoginInfo(username, Constants.REGISTER, MessageUtils.message("user.register.success")));
+            }
+        }
+        return msg;
+    }
+
+    /**
+     * 鏍¢獙楠岃瘉鐮�
+     * 
+     * @param username 鐢ㄦ埛鍚�
+     * @param code 楠岃瘉鐮�
+     * @param uuid 鍞竴鏍囪瘑
+     * @return 缁撴灉
+     */
+    public void validateCaptcha(String username, String code, String uuid)
+    {
+        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");
+        String captcha = redisCache.getCacheObject(verifyKey);
+        redisCache.deleteObject(verifyKey);
+        if (captcha == null)
+        {
+            throw new CaptchaExpireException();
+        }
+        if (!code.equalsIgnoreCase(captcha))
+        {
+            throw new CaptchaException();
+        }
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/web/service/TokenService.java b/zhitan-framework/src/main/java/com/zhitan/framework/web/service/TokenService.java
new file mode 100644
index 0000000..6b884bf
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/web/service/TokenService.java
@@ -0,0 +1,230 @@
+package com.zhitan.framework.web.service;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import javax.servlet.http.HttpServletRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import javax.annotation.Resource;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import com.zhitan.common.constant.CacheConstants;
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.core.redis.RedisCache;
+import com.zhitan.common.utils.ServletUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.ip.AddressUtils;
+import com.zhitan.common.utils.ip.IpUtils;
+import com.zhitan.common.utils.uuid.IdUtils;
+import eu.bitwalker.useragentutils.UserAgent;
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+
+/**
+ * token楠岃瘉澶勭悊
+ *
+ * @author zhitan
+ */
+@Component
+public class TokenService
+{
+    private static final Logger log = LoggerFactory.getLogger(TokenService.class);
+
+    // 浠ょ墝鑷畾涔夋爣璇�
+    @Value("${token.header}")
+    private String header;
+
+    // 浠ょ墝绉橀挜
+    @Value("${token.secret}")
+    private String secret;
+
+    // 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛�
+    @Value("${token.expireTime}")
+    private int expireTime;
+
+    protected static final long MILLIS_SECOND = 1000;
+
+    protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND;
+
+    private static final Long MILLIS_MINUTE_TEN = 20 * 60 * 1000L;
+
+    @Resource
+    private RedisCache redisCache;
+
+    /**
+     * 鑾峰彇鐢ㄦ埛韬唤淇℃伅
+     *
+     * @return 鐢ㄦ埛淇℃伅
+     */
+    public LoginUser getLoginUser(HttpServletRequest request)
+    {
+        // 鑾峰彇璇锋眰鎼哄甫鐨勪护鐗�
+        String token = getToken(request);
+        if (StringUtils.isNotEmpty(token))
+        {
+            try
+            {
+                Claims claims = parseToken(token);
+                // 瑙f瀽瀵瑰簲鐨勬潈闄愪互鍙婄敤鎴蜂俊鎭�
+                String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
+                String userKey = getTokenKey(uuid);
+                return redisCache.getCacheObject(userKey);
+            }
+            catch (Exception e)
+            {
+                log.error("鑾峰彇鐢ㄦ埛淇℃伅寮傚父'{}'", e.getMessage());
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 璁剧疆鐢ㄦ埛韬唤淇℃伅
+     */
+    public void setLoginUser(LoginUser loginUser)
+    {
+        if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken()))
+        {
+            refreshToken(loginUser);
+        }
+    }
+
+    /**
+     * 鍒犻櫎鐢ㄦ埛韬唤淇℃伅
+     */
+    public void delLoginUser(String token)
+    {
+        if (StringUtils.isNotEmpty(token))
+        {
+            String userKey = getTokenKey(token);
+            redisCache.deleteObject(userKey);
+        }
+    }
+
+    /**
+     * 鍒涘缓浠ょ墝
+     *
+     * @param loginUser 鐢ㄦ埛淇℃伅
+     * @return 浠ょ墝
+     */
+    public String createToken(LoginUser loginUser)
+    {
+        String token = IdUtils.fastUUID();
+        loginUser.setToken(token);
+        setUserAgent(loginUser);
+        refreshToken(loginUser);
+
+        Map<String, Object> claims = new HashMap<>();
+        claims.put(Constants.LOGIN_USER_KEY, token);
+        return createToken(claims);
+    }
+
+    /**
+     * 楠岃瘉浠ょ墝鏈夋晥鏈燂紝鐩稿樊涓嶈冻20鍒嗛挓锛岃嚜鍔ㄥ埛鏂扮紦瀛�
+     *
+     * @param loginUser
+     * @return 浠ょ墝
+     */
+    public void verifyToken(LoginUser loginUser)
+    {
+        long expireTime = loginUser.getExpireTime();
+        long currentTime = System.currentTimeMillis();
+        if (expireTime - currentTime <= MILLIS_MINUTE_TEN)
+        {
+            refreshToken(loginUser);
+        }
+    }
+
+    /**
+     * 鍒锋柊浠ょ墝鏈夋晥鏈�
+     *
+     * @param loginUser 鐧诲綍淇℃伅
+     */
+    public void refreshToken(LoginUser loginUser)
+    {
+        loginUser.setLoginTime(System.currentTimeMillis());
+        loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
+        // 鏍规嵁uuid灏唋oginUser缂撳瓨
+        String userKey = getTokenKey(loginUser.getToken());
+        redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
+    }
+
+    /**
+     * 璁剧疆鐢ㄦ埛浠g悊淇℃伅
+     *
+     * @param loginUser 鐧诲綍淇℃伅
+     */
+    public void setUserAgent(LoginUser loginUser)
+    {
+        UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
+        String ip = IpUtils.getIpAddr();
+        loginUser.setIpaddr(ip);
+        loginUser.setLoginLocation(AddressUtils.getRealAddressByIP(ip));
+        loginUser.setBrowser(userAgent.getBrowser().getName());
+        loginUser.setOs(userAgent.getOperatingSystem().getName());
+    }
+
+    /**
+     * 浠庢暟鎹0鏄庣敓鎴愪护鐗�
+     *
+     * @param claims 鏁版嵁澹版槑
+     * @return 浠ょ墝
+     */
+    private String createToken(Map<String, Object> claims)
+    {
+        String token = Jwts.builder()
+                .setClaims(claims)
+                .signWith(SignatureAlgorithm.HS512, secret).compact();
+        return token;
+    }
+
+    /**
+     * 浠庝护鐗屼腑鑾峰彇鏁版嵁澹版槑
+     *
+     * @param token 浠ょ墝
+     * @return 鏁版嵁澹版槑
+     */
+    private Claims parseToken(String token)
+    {
+        return Jwts.parser()
+                .setSigningKey(secret)
+                .parseClaimsJws(token)
+                .getBody();
+    }
+
+    /**
+     * 浠庝护鐗屼腑鑾峰彇鐢ㄦ埛鍚�
+     *
+     * @param token 浠ょ墝
+     * @return 鐢ㄦ埛鍚�
+     */
+    public String getUsernameFromToken(String token)
+    {
+        Claims claims = parseToken(token);
+        return claims.getSubject();
+    }
+
+    /**
+     * 鑾峰彇璇锋眰token
+     *
+     * @param request
+     * @return token
+     */
+    private String getToken(HttpServletRequest request)
+    {
+        String token = request.getHeader(header);
+        if (StringUtils.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX))
+        {
+            token = token.replace(Constants.TOKEN_PREFIX, "");
+        }
+        return token;
+    }
+
+    private String getTokenKey(String uuid)
+    {
+        return CacheConstants.LOGIN_TOKEN_KEY + uuid;
+    }
+}
diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/web/service/UserDetailsServiceImpl.java b/zhitan-framework/src/main/java/com/zhitan/framework/web/service/UserDetailsServiceImpl.java
new file mode 100644
index 0000000..95cb696
--- /dev/null
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/web/service/UserDetailsServiceImpl.java
@@ -0,0 +1,66 @@
+package com.zhitan.framework.web.service;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import javax.annotation.Resource;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Service;
+import com.zhitan.common.core.domain.entity.SysUser;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.enums.UserStatus;
+import com.zhitan.common.exception.ServiceException;
+import com.zhitan.common.utils.MessageUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.system.service.ISysUserService;
+
+/**
+ * 鐢ㄦ埛楠岃瘉澶勭悊
+ *
+ * @author zhitan
+ */
+@Service
+public class UserDetailsServiceImpl implements UserDetailsService
+{
+    private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class);
+
+    @Resource
+    private ISysUserService userService;
+    
+    @Resource
+    private SysPasswordService passwordService;
+
+    @Resource
+    private SysPermissionService permissionService;
+
+    @Override
+    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
+    {
+        SysUser user = userService.selectUserByUserName(username);
+        if (StringUtils.isNull(user))
+        {
+            log.info("鐧诲綍鐢ㄦ埛锛歿} 涓嶅瓨鍦�.", username);
+            throw new ServiceException(MessageUtils.message("user.not.exists"));
+        }
+        else if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
+        {
+            log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍒犻櫎.", username);
+            throw new ServiceException(MessageUtils.message("user.password.delete"));
+        }
+        else if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
+        {
+            log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍋滅敤.", username);
+            throw new ServiceException(MessageUtils.message("user.blocked"));
+        }
+
+        passwordService.validate(user);
+
+        return createLoginUser(user);
+    }
+
+    public UserDetails createLoginUser(SysUser user)
+    {
+        return new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user));
+    }
+}
diff --git a/zhitan-generator/pom.xml b/zhitan-generator/pom.xml
new file mode 100644
index 0000000..80461ac
--- /dev/null
+++ b/zhitan-generator/pom.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>BaseAdminAPI</artifactId>
+        <groupId>com.zhitan</groupId>
+        <version>3.8.7</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>zhitan-generator</artifactId>
+
+    <description>
+        generator浠g爜鐢熸垚
+    </description>
+
+    <dependencies>
+
+        <!-- velocity浠g爜鐢熸垚浣跨敤妯℃澘 -->
+        <dependency>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity-engine-core</artifactId>
+        </dependency>
+
+        <!-- 閫氱敤宸ュ叿-->
+        <dependency>
+            <groupId>com.zhitan</groupId>
+            <artifactId>zhitan-common</artifactId>
+        </dependency>
+
+        <!-- 闃块噷鏁版嵁搴撹繛鎺ユ睜 -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+        </dependency>
+
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/zhitan-generator/src/main/java/com/zhitan/generator/config/GenConfig.java b/zhitan-generator/src/main/java/com/zhitan/generator/config/GenConfig.java
new file mode 100644
index 0000000..4988259
--- /dev/null
+++ b/zhitan-generator/src/main/java/com/zhitan/generator/config/GenConfig.java
@@ -0,0 +1,73 @@
+package com.zhitan.generator.config;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.stereotype.Component;
+
+/**
+ * 璇诲彇浠g爜鐢熸垚鐩稿叧閰嶇疆
+ * 
+ * @author zhitan
+ */
+@Component
+@ConfigurationProperties(prefix = "gen")
+@PropertySource(value = { "classpath:generator.yml" })
+public class GenConfig
+{
+    /** 浣滆�� */
+    public static String author;
+
+    /** 鐢熸垚鍖呰矾寰� */
+    public static String packageName;
+
+    /** 鑷姩鍘婚櫎琛ㄥ墠缂�锛岄粯璁ゆ槸false */
+    public static boolean autoRemovePre;
+
+    /** 琛ㄥ墠缂�(绫诲悕涓嶄細鍖呭惈琛ㄥ墠缂�) */
+    public static String tablePrefix;
+
+    public static String getAuthor()
+    {
+        return author;
+    }
+
+    @Value("${author}")
+    public void setAuthor(String author)
+    {
+        GenConfig.author = author;
+    }
+
+    public static String getPackageName()
+    {
+        return packageName;
+    }
+
+    @Value("${packageName}")
+    public void setPackageName(String packageName)
+    {
+        GenConfig.packageName = packageName;
+    }
+
+    public static boolean getAutoRemovePre()
+    {
+        return autoRemovePre;
+    }
+
+    @Value("${autoRemovePre}")
+    public void setAutoRemovePre(boolean autoRemovePre)
+    {
+        GenConfig.autoRemovePre = autoRemovePre;
+    }
+
+    public static String getTablePrefix()
+    {
+        return tablePrefix;
+    }
+
+    @Value("${tablePrefix}")
+    public void setTablePrefix(String tablePrefix)
+    {
+        GenConfig.tablePrefix = tablePrefix;
+    }
+}
diff --git a/zhitan-generator/src/main/java/com/zhitan/generator/controller/GenController.java b/zhitan-generator/src/main/java/com/zhitan/generator/controller/GenController.java
new file mode 100644
index 0000000..48c88a0
--- /dev/null
+++ b/zhitan-generator/src/main/java/com/zhitan/generator/controller/GenController.java
@@ -0,0 +1,258 @@
+package com.zhitan.generator.controller;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.io.IOUtils;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.alibaba.druid.DbType;
+import com.alibaba.druid.sql.SQLUtils;
+import com.alibaba.druid.sql.ast.SQLStatement;
+import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.core.text.Convert;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.SecurityUtils;
+import com.zhitan.common.utils.sql.SqlUtil;
+import com.zhitan.generator.domain.GenTable;
+import com.zhitan.generator.domain.GenTableColumn;
+import com.zhitan.generator.service.IGenTableColumnService;
+import com.zhitan.generator.service.IGenTableService;
+
+/**
+ * 浠g爜鐢熸垚 鎿嶄綔澶勭悊
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/tool/gen")
+public class GenController extends BaseController
+{
+    @Resource
+    private IGenTableService genTableService;
+
+    @Resource
+    private IGenTableColumnService genTableColumnService;
+
+    /**
+     * 鏌ヨ浠g爜鐢熸垚鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('tool:gen:list')")
+    @GetMapping("/list")
+    public TableDataInfo genList(GenTable genTable)
+    {
+        startPage();
+        List<GenTable> list = genTableService.selectGenTableList(genTable);
+        return getDataTable(list);
+    }
+
+    /**
+     * 淇敼浠g爜鐢熸垚涓氬姟
+     */
+    @PreAuthorize("@ss.hasPermi('tool:gen:query')")
+    @GetMapping(value = "/{tableId}")
+    public AjaxResult getInfo(@PathVariable Long tableId)
+    {
+        GenTable table = genTableService.selectGenTableById(tableId);
+        List<GenTable> tables = genTableService.selectGenTableAll();
+        List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(tableId);
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put("info", table);
+        map.put("rows", list);
+        map.put("tables", tables);
+        return success(map);
+    }
+
+    /**
+     * 鏌ヨ鏁版嵁搴撳垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('tool:gen:list')")
+    @GetMapping("/db/list")
+    public TableDataInfo dataList(GenTable genTable)
+    {
+        startPage();
+        List<GenTable> list = genTableService.selectDbTableList(genTable);
+        return getDataTable(list);
+    }
+
+    /**
+     * 鏌ヨ鏁版嵁琛ㄥ瓧娈靛垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('tool:gen:list')")
+    @GetMapping(value = "/column/{tableId}")
+    public TableDataInfo columnList(Long tableId)
+    {
+        TableDataInfo dataInfo = new TableDataInfo();
+        List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(tableId);
+        dataInfo.setRows(list);
+        dataInfo.setTotal(list.size());
+        return dataInfo;
+    }
+
+    /**
+     * 瀵煎叆琛ㄧ粨鏋勶紙淇濆瓨锛�
+     */
+    @PreAuthorize("@ss.hasPermi('tool:gen:import')")
+    @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.IMPORT)
+    @PostMapping("/importTable")
+    public AjaxResult importTableSave(String tables)
+    {
+        String[] tableNames = Convert.toStrArray(tables);
+        // 鏌ヨ琛ㄤ俊鎭�
+        List<GenTable> tableList = genTableService.selectDbTableListByNames(tableNames);
+        genTableService.importGenTable(tableList, SecurityUtils.getUsername());
+        return success();
+    }
+
+    /**
+     * 鍒涘缓琛ㄧ粨鏋勶紙淇濆瓨锛�
+     */
+    @PreAuthorize("@ss.hasRole('admin')")
+    @Log(title = "鍒涘缓琛�", businessType = BusinessType.OTHER)
+    @PostMapping("/createTable")
+    public AjaxResult createTableSave(String sql)
+    {
+        try
+        {
+            SqlUtil.filterKeyword(sql);
+            List<SQLStatement> sqlStatements = SQLUtils.parseStatements(sql, DbType.mysql);
+            List<String> tableNames = new ArrayList<>();
+            for (SQLStatement sqlStatement : sqlStatements)
+            {
+                if (sqlStatement instanceof MySqlCreateTableStatement)
+                {
+                    MySqlCreateTableStatement createTableStatement = (MySqlCreateTableStatement) sqlStatement;
+                    if (genTableService.createTable(createTableStatement.toString()))
+                    {
+                        String tableName = createTableStatement.getTableName().replaceAll("`", "");
+                        tableNames.add(tableName);
+                    }
+                }
+            }
+            List<GenTable> tableList = genTableService.selectDbTableListByNames(tableNames.toArray(new String[tableNames.size()]));
+            String operName = SecurityUtils.getUsername();
+            genTableService.importGenTable(tableList, operName);
+            return AjaxResult.success();
+        }
+        catch (Exception e)
+        {
+            logger.error(e.getMessage(), e);
+            return AjaxResult.error("鍒涘缓琛ㄧ粨鏋勫紓甯�");
+        }
+    }
+
+    /**
+     * 淇敼淇濆瓨浠g爜鐢熸垚涓氬姟
+     */
+    @PreAuthorize("@ss.hasPermi('tool:gen:edit')")
+    @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult editSave(@Validated @RequestBody GenTable genTable)
+    {
+        genTableService.validateEdit(genTable);
+        genTableService.updateGenTable(genTable);
+        return success();
+    }
+
+    /**
+     * 鍒犻櫎浠g爜鐢熸垚
+     */
+    @PreAuthorize("@ss.hasPermi('tool:gen:remove')")
+    @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{tableIds}")
+    public AjaxResult remove(@PathVariable Long[] tableIds)
+    {
+        genTableService.deleteGenTableByIds(tableIds);
+        return success();
+    }
+
+    /**
+     * 棰勮浠g爜
+     */
+    @PreAuthorize("@ss.hasPermi('tool:gen:preview')")
+    @GetMapping("/preview/{tableId}")
+    public AjaxResult preview(@PathVariable("tableId") Long tableId) throws IOException
+    {
+        Map<String, String> dataMap = genTableService.previewCode(tableId);
+        return success(dataMap);
+    }
+
+    /**
+     * 鐢熸垚浠g爜锛堜笅杞芥柟寮忥級
+     */
+    @PreAuthorize("@ss.hasPermi('tool:gen:code')")
+    @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.GENCODE)
+    @GetMapping("/download/{tableName}")
+    public void download(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException
+    {
+        byte[] data = genTableService.downloadCode(tableName);
+        genCode(response, data);
+    }
+
+    /**
+     * 鐢熸垚浠g爜锛堣嚜瀹氫箟璺緞锛�
+     */
+    @PreAuthorize("@ss.hasPermi('tool:gen:code')")
+    @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.GENCODE)
+    @GetMapping("/genCode/{tableName}")
+    public AjaxResult genCode(@PathVariable("tableName") String tableName)
+    {
+        genTableService.generatorCode(tableName);
+        return success();
+    }
+
+    /**
+     * 鍚屾鏁版嵁搴�
+     */
+    @PreAuthorize("@ss.hasPermi('tool:gen:edit')")
+    @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.UPDATE)
+    @GetMapping("/synchDb/{tableName}")
+    public AjaxResult synchDb(@PathVariable("tableName") String tableName)
+    {
+        genTableService.synchDb(tableName);
+        return success();
+    }
+
+    /**
+     * 鎵归噺鐢熸垚浠g爜
+     */
+    @PreAuthorize("@ss.hasPermi('tool:gen:code')")
+    @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.GENCODE)
+    @GetMapping("/batchGenCode")
+    public void batchGenCode(HttpServletResponse response, String tables) throws IOException
+    {
+        String[] tableNames = Convert.toStrArray(tables);
+        byte[] data = genTableService.downloadCode(tableNames);
+        genCode(response, data);
+    }
+
+    /**
+     * 鐢熸垚zip鏂囦欢
+     */
+    private void genCode(HttpServletResponse response, byte[] data) throws IOException
+    {
+        response.reset();
+        response.addHeader("Access-Control-Allow-Origin", "*");
+        response.addHeader("Access-Control-Expose-Headers", "Content-Disposition");
+        response.setHeader("Content-Disposition", "attachment; filename=\"admin.zip\"");
+        response.addHeader("Content-Length", "" + data.length);
+        response.setContentType("application/octet-stream; charset=UTF-8");
+        IOUtils.write(data, response.getOutputStream());
+    }
+}
\ No newline at end of file
diff --git a/zhitan-generator/src/main/java/com/zhitan/generator/domain/GenTable.java b/zhitan-generator/src/main/java/com/zhitan/generator/domain/GenTable.java
new file mode 100644
index 0000000..a10dcb8
--- /dev/null
+++ b/zhitan-generator/src/main/java/com/zhitan/generator/domain/GenTable.java
@@ -0,0 +1,385 @@
+package com.zhitan.generator.domain;
+
+import java.util.List;
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import org.apache.commons.lang3.ArrayUtils;
+import com.zhitan.common.constant.GenConstants;
+import com.zhitan.common.core.domain.BaseEntity;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 涓氬姟琛� gen_table
+ * 
+ * @author zhitan
+ */
+public class GenTable extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 缂栧彿 */
+    private Long tableId;
+
+    /** 琛ㄥ悕绉� */
+    @NotBlank(message = "琛ㄥ悕绉颁笉鑳戒负绌�")
+    private String tableName;
+
+    /** 琛ㄦ弿杩� */
+    @NotBlank(message = "琛ㄦ弿杩颁笉鑳戒负绌�")
+    private String tableComment;
+
+    /** 鍏宠仈鐖惰〃鐨勮〃鍚� */
+    private String subTableName;
+
+    /** 鏈〃鍏宠仈鐖惰〃鐨勫閿悕 */
+    private String subTableFkName;
+
+    /** 瀹炰綋绫诲悕绉�(棣栧瓧姣嶅ぇ鍐�) */
+    @NotBlank(message = "瀹炰綋绫诲悕绉颁笉鑳戒负绌�")
+    private String className;
+
+    /** 浣跨敤鐨勬ā鏉匡紙crud鍗曡〃鎿嶄綔 tree鏍戣〃鎿嶄綔 sub涓诲瓙琛ㄦ搷浣滐級 */
+    private String tplCategory;
+
+    /** 鍓嶇绫诲瀷锛坋lement-ui妯$増 element-plus妯$増锛� */
+    private String tplWebType;
+
+    /** 鐢熸垚鍖呰矾寰� */
+    @NotBlank(message = "鐢熸垚鍖呰矾寰勪笉鑳戒负绌�")
+    private String packageName;
+
+    /** 鐢熸垚妯″潡鍚� */
+    @NotBlank(message = "鐢熸垚妯″潡鍚嶄笉鑳戒负绌�")
+    private String moduleName;
+
+    /** 鐢熸垚涓氬姟鍚� */
+    @NotBlank(message = "鐢熸垚涓氬姟鍚嶄笉鑳戒负绌�")
+    private String businessName;
+
+    /** 鐢熸垚鍔熻兘鍚� */
+    @NotBlank(message = "鐢熸垚鍔熻兘鍚嶄笉鑳戒负绌�")
+    private String functionName;
+
+    /** 鐢熸垚浣滆�� */
+    @NotBlank(message = "浣滆�呬笉鑳戒负绌�")
+    private String functionAuthor;
+
+    /** 鐢熸垚浠g爜鏂瑰紡锛�0zip鍘嬬缉鍖� 1鑷畾涔夎矾寰勶級 */
+    private String genType;
+
+    /** 鐢熸垚璺緞锛堜笉濉粯璁ら」鐩矾寰勶級 */
+    private String genPath;
+
+    /** 涓婚敭淇℃伅 */
+    private GenTableColumn pkColumn;
+
+    /** 瀛愯〃淇℃伅 */
+    private GenTable subTable;
+
+    /** 琛ㄥ垪淇℃伅 */
+    @Valid
+    private List<GenTableColumn> columns;
+
+    /** 鍏跺畠鐢熸垚閫夐」 */
+    private String options;
+
+    /** 鏍戠紪鐮佸瓧娈� */
+    private String treeCode;
+
+    /** 鏍戠埗缂栫爜瀛楁 */
+    private String treeParentCode;
+
+    /** 鏍戝悕绉板瓧娈� */
+    private String treeName;
+
+    /** 涓婄骇鑿滃崟ID瀛楁 */
+    private String parentMenuId;
+
+    /** 涓婄骇鑿滃崟鍚嶇О瀛楁 */
+    private String parentMenuName;
+
+    public Long getTableId()
+    {
+        return tableId;
+    }
+
+    public void setTableId(Long tableId)
+    {
+        this.tableId = tableId;
+    }
+
+    public String getTableName()
+    {
+        return tableName;
+    }
+
+    public void setTableName(String tableName)
+    {
+        this.tableName = tableName;
+    }
+
+    public String getTableComment()
+    {
+        return tableComment;
+    }
+
+    public void setTableComment(String tableComment)
+    {
+        this.tableComment = tableComment;
+    }
+
+    public String getSubTableName()
+    {
+        return subTableName;
+    }
+
+    public void setSubTableName(String subTableName)
+    {
+        this.subTableName = subTableName;
+    }
+
+    public String getSubTableFkName()
+    {
+        return subTableFkName;
+    }
+
+    public void setSubTableFkName(String subTableFkName)
+    {
+        this.subTableFkName = subTableFkName;
+    }
+
+    public String getClassName()
+    {
+        return className;
+    }
+
+    public void setClassName(String className)
+    {
+        this.className = className;
+    }
+
+    public String getTplCategory()
+    {
+        return tplCategory;
+    }
+
+    public void setTplCategory(String tplCategory)
+    {
+        this.tplCategory = tplCategory;
+    }
+
+    public String getTplWebType()
+    {
+        return tplWebType;
+    }
+
+    public void setTplWebType(String tplWebType)
+    {
+        this.tplWebType = tplWebType;
+    }
+
+    public String getPackageName()
+    {
+        return packageName;
+    }
+
+    public void setPackageName(String packageName)
+    {
+        this.packageName = packageName;
+    }
+
+    public String getModuleName()
+    {
+        return moduleName;
+    }
+
+    public void setModuleName(String moduleName)
+    {
+        this.moduleName = moduleName;
+    }
+
+    public String getBusinessName()
+    {
+        return businessName;
+    }
+
+    public void setBusinessName(String businessName)
+    {
+        this.businessName = businessName;
+    }
+
+    public String getFunctionName()
+    {
+        return functionName;
+    }
+
+    public void setFunctionName(String functionName)
+    {
+        this.functionName = functionName;
+    }
+
+    public String getFunctionAuthor()
+    {
+        return functionAuthor;
+    }
+
+    public void setFunctionAuthor(String functionAuthor)
+    {
+        this.functionAuthor = functionAuthor;
+    }
+
+    public String getGenType()
+    {
+        return genType;
+    }
+
+    public void setGenType(String genType)
+    {
+        this.genType = genType;
+    }
+
+    public String getGenPath()
+    {
+        return genPath;
+    }
+
+    public void setGenPath(String genPath)
+    {
+        this.genPath = genPath;
+    }
+
+    public GenTableColumn getPkColumn()
+    {
+        return pkColumn;
+    }
+
+    public void setPkColumn(GenTableColumn pkColumn)
+    {
+        this.pkColumn = pkColumn;
+    }
+
+    public GenTable getSubTable()
+    {
+        return subTable;
+    }
+
+    public void setSubTable(GenTable subTable)
+    {
+        this.subTable = subTable;
+    }
+
+    public List<GenTableColumn> getColumns()
+    {
+        return columns;
+    }
+
+    public void setColumns(List<GenTableColumn> columns)
+    {
+        this.columns = columns;
+    }
+
+    public String getOptions()
+    {
+        return options;
+    }
+
+    public void setOptions(String options)
+    {
+        this.options = options;
+    }
+
+    public String getTreeCode()
+    {
+        return treeCode;
+    }
+
+    public void setTreeCode(String treeCode)
+    {
+        this.treeCode = treeCode;
+    }
+
+    public String getTreeParentCode()
+    {
+        return treeParentCode;
+    }
+
+    public void setTreeParentCode(String treeParentCode)
+    {
+        this.treeParentCode = treeParentCode;
+    }
+
+    public String getTreeName()
+    {
+        return treeName;
+    }
+
+    public void setTreeName(String treeName)
+    {
+        this.treeName = treeName;
+    }
+
+    public String getParentMenuId()
+    {
+        return parentMenuId;
+    }
+
+    public void setParentMenuId(String parentMenuId)
+    {
+        this.parentMenuId = parentMenuId;
+    }
+
+    public String getParentMenuName()
+    {
+        return parentMenuName;
+    }
+
+    public void setParentMenuName(String parentMenuName)
+    {
+        this.parentMenuName = parentMenuName;
+    }
+
+    public boolean isSub()
+    {
+        return isSub(this.tplCategory);
+    }
+
+    public static boolean isSub(String tplCategory)
+    {
+        return tplCategory != null && StringUtils.equals(GenConstants.TPL_SUB, tplCategory);
+    }
+
+    public boolean isTree()
+    {
+        return isTree(this.tplCategory);
+    }
+
+    public static boolean isTree(String tplCategory)
+    {
+        return tplCategory != null && StringUtils.equals(GenConstants.TPL_TREE, tplCategory);
+    }
+
+    public boolean isCrud()
+    {
+        return isCrud(this.tplCategory);
+    }
+
+    public static boolean isCrud(String tplCategory)
+    {
+        return tplCategory != null && StringUtils.equals(GenConstants.TPL_CRUD, tplCategory);
+    }
+
+    public boolean isSuperColumn(String javaField)
+    {
+        return isSuperColumn(this.tplCategory, javaField);
+    }
+
+    public static boolean isSuperColumn(String tplCategory, String javaField)
+    {
+        if (isTree(tplCategory))
+        {
+            return StringUtils.equalsAnyIgnoreCase(javaField,
+                    ArrayUtils.addAll(GenConstants.TREE_ENTITY, GenConstants.BASE_ENTITY));
+        }
+        return StringUtils.equalsAnyIgnoreCase(javaField, GenConstants.BASE_ENTITY);
+    }
+}
\ No newline at end of file
diff --git a/zhitan-generator/src/main/java/com/zhitan/generator/domain/GenTableColumn.java b/zhitan-generator/src/main/java/com/zhitan/generator/domain/GenTableColumn.java
new file mode 100644
index 0000000..db4cbc8
--- /dev/null
+++ b/zhitan-generator/src/main/java/com/zhitan/generator/domain/GenTableColumn.java
@@ -0,0 +1,373 @@
+package com.zhitan.generator.domain;
+
+import javax.validation.constraints.NotBlank;
+import com.zhitan.common.core.domain.BaseEntity;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 浠g爜鐢熸垚涓氬姟瀛楁琛� gen_table_column
+ * 
+ * @author zhitan
+ */
+public class GenTableColumn extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 缂栧彿 */
+    private Long columnId;
+
+    /** 褰掑睘琛ㄧ紪鍙� */
+    private Long tableId;
+
+    /** 鍒楀悕绉� */
+    private String columnName;
+
+    /** 鍒楁弿杩� */
+    private String columnComment;
+
+    /** 鍒楃被鍨� */
+    private String columnType;
+
+    /** JAVA绫诲瀷 */
+    private String javaType;
+
+    /** JAVA瀛楁鍚� */
+    @NotBlank(message = "Java灞炴�т笉鑳戒负绌�")
+    private String javaField;
+
+    /** 鏄惁涓婚敭锛�1鏄級 */
+    private String isPk;
+
+    /** 鏄惁鑷锛�1鏄級 */
+    private String isIncrement;
+
+    /** 鏄惁蹇呭~锛�1鏄級 */
+    private String isRequired;
+
+    /** 鏄惁涓烘彃鍏ュ瓧娈碉紙1鏄級 */
+    private String isInsert;
+
+    /** 鏄惁缂栬緫瀛楁锛�1鏄級 */
+    private String isEdit;
+
+    /** 鏄惁鍒楄〃瀛楁锛�1鏄級 */
+    private String isList;
+
+    /** 鏄惁鏌ヨ瀛楁锛�1鏄級 */
+    private String isQuery;
+
+    /** 鏌ヨ鏂瑰紡锛圗Q绛変簬銆丯E涓嶇瓑浜庛�丟T澶т簬銆丩T灏忎簬銆丩IKE妯$硦銆丅ETWEEN鑼冨洿锛� */
+    private String queryType;
+
+    /** 鏄剧ず绫诲瀷锛坕nput鏂囨湰妗嗐�乼extarea鏂囨湰鍩熴�乻elect涓嬫媺妗嗐�乧heckbox澶嶉�夋銆乺adio鍗曢�夋銆乨atetime鏃ユ湡鎺т欢銆乮mage鍥剧墖涓婁紶鎺т欢銆乽pload鏂囦欢涓婁紶鎺т欢銆乪ditor瀵屾枃鏈帶浠讹級 */
+    private String htmlType;
+
+    /** 瀛楀吀绫诲瀷 */
+    private String dictType;
+
+    /** 鎺掑簭 */
+    private Integer sort;
+
+    public void setColumnId(Long columnId)
+    {
+        this.columnId = columnId;
+    }
+
+    public Long getColumnId()
+    {
+        return columnId;
+    }
+
+    public void setTableId(Long tableId)
+    {
+        this.tableId = tableId;
+    }
+
+    public Long getTableId()
+    {
+        return tableId;
+    }
+
+    public void setColumnName(String columnName)
+    {
+        this.columnName = columnName;
+    }
+
+    public String getColumnName()
+    {
+        return columnName;
+    }
+
+    public void setColumnComment(String columnComment)
+    {
+        this.columnComment = columnComment;
+    }
+
+    public String getColumnComment()
+    {
+        return columnComment;
+    }
+
+    public void setColumnType(String columnType)
+    {
+        this.columnType = columnType;
+    }
+
+    public String getColumnType()
+    {
+        return columnType;
+    }
+
+    public void setJavaType(String javaType)
+    {
+        this.javaType = javaType;
+    }
+
+    public String getJavaType()
+    {
+        return javaType;
+    }
+
+    public void setJavaField(String javaField)
+    {
+        this.javaField = javaField;
+    }
+
+    public String getJavaField()
+    {
+        return javaField;
+    }
+
+    public String getCapJavaField()
+    {
+        return StringUtils.capitalize(javaField);
+    }
+
+    public void setIsPk(String isPk)
+    {
+        this.isPk = isPk;
+    }
+
+    public String getIsPk()
+    {
+        return isPk;
+    }
+
+    public boolean isPk()
+    {
+        return isPk(this.isPk);
+    }
+
+    public boolean isPk(String isPk)
+    {
+        return isPk != null && StringUtils.equals("1", isPk);
+    }
+
+    public String getIsIncrement()
+    {
+        return isIncrement;
+    }
+
+    public void setIsIncrement(String isIncrement)
+    {
+        this.isIncrement = isIncrement;
+    }
+
+    public boolean isIncrement()
+    {
+        return isIncrement(this.isIncrement);
+    }
+
+    public boolean isIncrement(String isIncrement)
+    {
+        return isIncrement != null && StringUtils.equals("1", isIncrement);
+    }
+
+    public void setIsRequired(String isRequired)
+    {
+        this.isRequired = isRequired;
+    }
+
+    public String getIsRequired()
+    {
+        return isRequired;
+    }
+
+    public boolean isRequired()
+    {
+        return isRequired(this.isRequired);
+    }
+
+    public boolean isRequired(String isRequired)
+    {
+        return isRequired != null && StringUtils.equals("1", isRequired);
+    }
+
+    public void setIsInsert(String isInsert)
+    {
+        this.isInsert = isInsert;
+    }
+
+    public String getIsInsert()
+    {
+        return isInsert;
+    }
+
+    public boolean isInsert()
+    {
+        return isInsert(this.isInsert);
+    }
+
+    public boolean isInsert(String isInsert)
+    {
+        return isInsert != null && StringUtils.equals("1", isInsert);
+    }
+
+    public void setIsEdit(String isEdit)
+    {
+        this.isEdit = isEdit;
+    }
+
+    public String getIsEdit()
+    {
+        return isEdit;
+    }
+
+    public boolean isEdit()
+    {
+        return isInsert(this.isEdit);
+    }
+
+    public boolean isEdit(String isEdit)
+    {
+        return isEdit != null && StringUtils.equals("1", isEdit);
+    }
+
+    public void setIsList(String isList)
+    {
+        this.isList = isList;
+    }
+
+    public String getIsList()
+    {
+        return isList;
+    }
+
+    public boolean isList()
+    {
+        return isList(this.isList);
+    }
+
+    public boolean isList(String isList)
+    {
+        return isList != null && StringUtils.equals("1", isList);
+    }
+
+    public void setIsQuery(String isQuery)
+    {
+        this.isQuery = isQuery;
+    }
+
+    public String getIsQuery()
+    {
+        return isQuery;
+    }
+
+    public boolean isQuery()
+    {
+        return isQuery(this.isQuery);
+    }
+
+    public boolean isQuery(String isQuery)
+    {
+        return isQuery != null && StringUtils.equals("1", isQuery);
+    }
+
+    public void setQueryType(String queryType)
+    {
+        this.queryType = queryType;
+    }
+
+    public String getQueryType()
+    {
+        return queryType;
+    }
+
+    public String getHtmlType()
+    {
+        return htmlType;
+    }
+
+    public void setHtmlType(String htmlType)
+    {
+        this.htmlType = htmlType;
+    }
+
+    public void setDictType(String dictType)
+    {
+        this.dictType = dictType;
+    }
+
+    public String getDictType()
+    {
+        return dictType;
+    }
+
+    public void setSort(Integer sort)
+    {
+        this.sort = sort;
+    }
+
+    public Integer getSort()
+    {
+        return sort;
+    }
+
+    public boolean isSuperColumn()
+    {
+        return isSuperColumn(this.javaField);
+    }
+
+    public static boolean isSuperColumn(String javaField)
+    {
+        return StringUtils.equalsAnyIgnoreCase(javaField,
+                // BaseEntity
+                "createBy", "createTime", "updateBy", "updateTime", "remark",
+                // TreeEntity
+                "parentName", "parentId", "orderNum", "ancestors");
+    }
+
+    public boolean isUsableColumn()
+    {
+        return isUsableColumn(javaField);
+    }
+
+    public static boolean isUsableColumn(String javaField)
+    {
+        // isSuperColumn()涓殑鍚嶅崟鐢ㄤ簬閬垮厤鐢熸垚澶氫綑Domain灞炴�э紝鑻ユ煇浜涘睘鎬у湪鐢熸垚椤甸潰鏃堕渶瑕佺敤鍒颁笉鑳藉拷鐣ワ紝鍒欐斁鍦ㄦ澶勭櫧鍚嶅崟
+        return StringUtils.equalsAnyIgnoreCase(javaField, "parentId", "orderNum", "remark");
+    }
+
+    public String readConverterExp()
+    {
+        String remarks = StringUtils.substringBetween(this.columnComment, "锛�", "锛�");
+        StringBuffer sb = new StringBuffer();
+        if (StringUtils.isNotEmpty(remarks))
+        {
+            for (String value : remarks.split(" "))
+            {
+                if (StringUtils.isNotEmpty(value))
+                {
+                    Object startStr = value.subSequence(0, 1);
+                    String endStr = value.substring(1);
+                    sb.append("").append(startStr).append("=").append(endStr).append(",");
+                }
+            }
+            return sb.deleteCharAt(sb.length() - 1).toString();
+        }
+        else
+        {
+            return this.columnComment;
+        }
+    }
+}
diff --git a/zhitan-generator/src/main/java/com/zhitan/generator/mapper/GenTableColumnMapper.java b/zhitan-generator/src/main/java/com/zhitan/generator/mapper/GenTableColumnMapper.java
new file mode 100644
index 0000000..4856225
--- /dev/null
+++ b/zhitan-generator/src/main/java/com/zhitan/generator/mapper/GenTableColumnMapper.java
@@ -0,0 +1,60 @@
+package com.zhitan.generator.mapper;
+
+import java.util.List;
+import com.zhitan.generator.domain.GenTableColumn;
+
+/**
+ * 涓氬姟瀛楁 鏁版嵁灞�
+ * 
+ * @author zhitan
+ */
+ public interface GenTableColumnMapper
+{
+    /**
+     * 鏍规嵁琛ㄥ悕绉版煡璇㈠垪淇℃伅
+     * 
+     * @param tableName 琛ㄥ悕绉�
+     * @return 鍒椾俊鎭�
+     */
+     List<GenTableColumn> selectDbTableColumnsByName(String tableName);
+
+    /**
+     * 鏌ヨ涓氬姟瀛楁鍒楄〃
+     * 
+     * @param tableId 涓氬姟瀛楁缂栧彿
+     * @return 涓氬姟瀛楁闆嗗悎
+     */
+     List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId);
+
+    /**
+     * 鏂板涓氬姟瀛楁
+     * 
+     * @param genTableColumn 涓氬姟瀛楁淇℃伅
+     * @return 缁撴灉
+     */
+     int insertGenTableColumn(GenTableColumn genTableColumn);
+
+    /**
+     * 淇敼涓氬姟瀛楁
+     * 
+     * @param genTableColumn 涓氬姟瀛楁淇℃伅
+     * @return 缁撴灉
+     */
+     int updateGenTableColumn(GenTableColumn genTableColumn);
+
+    /**
+     * 鍒犻櫎涓氬姟瀛楁
+     * 
+     * @param genTableColumns 鍒楁暟鎹�
+     * @return 缁撴灉
+     */
+     int deleteGenTableColumns(List<GenTableColumn> genTableColumns);
+
+    /**
+     * 鎵归噺鍒犻櫎涓氬姟瀛楁
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+     int deleteGenTableColumnByIds(Long[] ids);
+}
diff --git a/zhitan-generator/src/main/java/com/zhitan/generator/mapper/GenTableMapper.java b/zhitan-generator/src/main/java/com/zhitan/generator/mapper/GenTableMapper.java
new file mode 100644
index 0000000..c087468
--- /dev/null
+++ b/zhitan-generator/src/main/java/com/zhitan/generator/mapper/GenTableMapper.java
@@ -0,0 +1,91 @@
+package com.zhitan.generator.mapper;
+
+import java.util.List;
+import com.zhitan.generator.domain.GenTable;
+
+/**
+ * 涓氬姟 鏁版嵁灞�
+ * 
+ * @author zhitan
+ */
+public interface GenTableMapper
+{
+    /**
+     * 鏌ヨ涓氬姟鍒楄〃
+     * 
+     * @param genTable 涓氬姟淇℃伅
+     * @return 涓氬姟闆嗗悎
+     */
+    public List<GenTable> selectGenTableList(GenTable genTable);
+
+    /**
+     * 鏌ヨ鎹簱鍒楄〃
+     * 
+     * @param genTable 涓氬姟淇℃伅
+     * @return 鏁版嵁搴撹〃闆嗗悎
+     */
+    public List<GenTable> selectDbTableList(GenTable genTable);
+
+    /**
+     * 鏌ヨ鎹簱鍒楄〃
+     * 
+     * @param tableNames 琛ㄥ悕绉扮粍
+     * @return 鏁版嵁搴撹〃闆嗗悎
+     */
+    public List<GenTable> selectDbTableListByNames(String[] tableNames);
+
+    /**
+     * 鏌ヨ鎵�鏈夎〃淇℃伅
+     * 
+     * @return 琛ㄤ俊鎭泦鍚�
+     */
+    public List<GenTable> selectGenTableAll();
+
+    /**
+     * 鏌ヨ琛↖D涓氬姟淇℃伅
+     * 
+     * @param id 涓氬姟ID
+     * @return 涓氬姟淇℃伅
+     */
+    public GenTable selectGenTableById(Long id);
+
+    /**
+     * 鏌ヨ琛ㄥ悕绉颁笟鍔′俊鎭�
+     * 
+     * @param tableName 琛ㄥ悕绉�
+     * @return 涓氬姟淇℃伅
+     */
+    public GenTable selectGenTableByName(String tableName);
+
+    /**
+     * 鏂板涓氬姟
+     * 
+     * @param genTable 涓氬姟淇℃伅
+     * @return 缁撴灉
+     */
+    public int insertGenTable(GenTable genTable);
+
+    /**
+     * 淇敼涓氬姟
+     * 
+     * @param genTable 涓氬姟淇℃伅
+     * @return 缁撴灉
+     */
+    public int updateGenTable(GenTable genTable);
+
+    /**
+     * 鎵归噺鍒犻櫎涓氬姟
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteGenTableByIds(Long[] ids);
+
+    /**
+     * 鍒涘缓琛�
+     *
+     * @param sql 琛ㄧ粨鏋�
+     * @return 缁撴灉
+     */
+    public int createTable(String sql);
+}
diff --git a/zhitan-generator/src/main/java/com/zhitan/generator/service/GenTableColumnServiceImpl.java b/zhitan-generator/src/main/java/com/zhitan/generator/service/GenTableColumnServiceImpl.java
new file mode 100644
index 0000000..0ef3684
--- /dev/null
+++ b/zhitan-generator/src/main/java/com/zhitan/generator/service/GenTableColumnServiceImpl.java
@@ -0,0 +1,69 @@
+package com.zhitan.generator.service;
+
+import java.util.List;
+
+import com.zhitan.generator.domain.GenTableColumn;
+import com.zhitan.generator.mapper.GenTableColumnMapper;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Service;
+import com.zhitan.common.core.text.Convert;
+
+/**
+ * 涓氬姟瀛楁 鏈嶅姟灞傚疄鐜�
+ * 
+ * @author zhitan
+ */
+@Service
+public class GenTableColumnServiceImpl implements IGenTableColumnService 
+{
+	@Resource
+	private GenTableColumnMapper genTableColumnMapper;
+
+	/**
+     * 鏌ヨ涓氬姟瀛楁鍒楄〃
+     * 
+     * @param tableId 涓氬姟瀛楁缂栧彿
+     * @return 涓氬姟瀛楁闆嗗悎
+     */
+	@Override
+	public List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId)
+	{
+	    return genTableColumnMapper.selectGenTableColumnListByTableId(tableId);
+	}
+	
+    /**
+     * 鏂板涓氬姟瀛楁
+     * 
+     * @param genTableColumn 涓氬姟瀛楁淇℃伅
+     * @return 缁撴灉
+     */
+	@Override
+	public int insertGenTableColumn(GenTableColumn genTableColumn)
+	{
+	    return genTableColumnMapper.insertGenTableColumn(genTableColumn);
+	}
+	
+	/**
+     * 淇敼涓氬姟瀛楁
+     * 
+     * @param genTableColumn 涓氬姟瀛楁淇℃伅
+     * @return 缁撴灉
+     */
+	@Override
+	public int updateGenTableColumn(GenTableColumn genTableColumn)
+	{
+	    return genTableColumnMapper.updateGenTableColumn(genTableColumn);
+	}
+
+	/**
+     * 鍒犻櫎涓氬姟瀛楁瀵硅薄
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+	@Override
+	public int deleteGenTableColumnByIds(String ids)
+	{
+		return genTableColumnMapper.deleteGenTableColumnByIds(Convert.toLongArray(ids));
+	}
+}
diff --git a/zhitan-generator/src/main/java/com/zhitan/generator/service/GenTableServiceImpl.java b/zhitan-generator/src/main/java/com/zhitan/generator/service/GenTableServiceImpl.java
new file mode 100644
index 0000000..6125f08
--- /dev/null
+++ b/zhitan-generator/src/main/java/com/zhitan/generator/service/GenTableServiceImpl.java
@@ -0,0 +1,534 @@
+package com.zhitan.generator.service;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import com.zhitan.generator.domain.GenTable;
+import com.zhitan.generator.domain.GenTableColumn;
+import com.zhitan.generator.mapper.GenTableColumnMapper;
+import com.zhitan.generator.mapper.GenTableMapper;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.Velocity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.constant.GenConstants;
+import com.zhitan.common.core.text.CharsetKit;
+import com.zhitan.common.exception.ServiceException;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.generator.util.GenUtils;
+import com.zhitan.generator.util.VelocityInitializer;
+import com.zhitan.generator.util.VelocityUtils;
+
+import javax.annotation.Resource;
+
+/**
+ * 涓氬姟 鏈嶅姟灞傚疄鐜�
+ * 
+ * @author zhitan
+ */
+@Service
+public class GenTableServiceImpl implements IGenTableService
+{
+    private static final Logger log = LoggerFactory.getLogger(GenTableServiceImpl.class);
+
+    @Resource
+    private GenTableMapper genTableMapper;
+
+    @Resource
+    private GenTableColumnMapper genTableColumnMapper;
+
+    /**
+     * 鏌ヨ涓氬姟淇℃伅
+     * 
+     * @param id 涓氬姟ID
+     * @return 涓氬姟淇℃伅
+     */
+    @Override
+    public GenTable selectGenTableById(Long id)
+    {
+        GenTable genTable = genTableMapper.selectGenTableById(id);
+        setTableFromOptions(genTable);
+        return genTable;
+    }
+
+    /**
+     * 鏌ヨ涓氬姟鍒楄〃
+     * 
+     * @param genTable 涓氬姟淇℃伅
+     * @return 涓氬姟闆嗗悎
+     */
+    @Override
+    public List<GenTable> selectGenTableList(GenTable genTable)
+    {
+        return genTableMapper.selectGenTableList(genTable);
+    }
+
+    /**
+     * 鏌ヨ鎹簱鍒楄〃
+     * 
+     * @param genTable 涓氬姟淇℃伅
+     * @return 鏁版嵁搴撹〃闆嗗悎
+     */
+    @Override
+    public List<GenTable> selectDbTableList(GenTable genTable)
+    {
+        return genTableMapper.selectDbTableList(genTable);
+    }
+
+    /**
+     * 鏌ヨ鎹簱鍒楄〃
+     * 
+     * @param tableNames 琛ㄥ悕绉扮粍
+     * @return 鏁版嵁搴撹〃闆嗗悎
+     */
+    @Override
+    public List<GenTable> selectDbTableListByNames(String[] tableNames)
+    {
+        return genTableMapper.selectDbTableListByNames(tableNames);
+    }
+
+    /**
+     * 鏌ヨ鎵�鏈夎〃淇℃伅
+     * 
+     * @return 琛ㄤ俊鎭泦鍚�
+     */
+    @Override
+    public List<GenTable> selectGenTableAll()
+    {
+        return genTableMapper.selectGenTableAll();
+    }
+
+    /**
+     * 淇敼涓氬姟
+     * 
+     * @param genTable 涓氬姟淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    @Transactional
+    public void updateGenTable(GenTable genTable)
+    {
+        String options = JSON.toJSONString(genTable.getParams());
+        genTable.setOptions(options);
+        int row = genTableMapper.updateGenTable(genTable);
+        if (row > 0)
+        {
+            for (GenTableColumn cenTableColumn : genTable.getColumns())
+            {
+                genTableColumnMapper.updateGenTableColumn(cenTableColumn);
+            }
+        }
+    }
+
+    /**
+     * 鍒犻櫎涓氬姟瀵硅薄
+     * 
+     * @param tableIds 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    @Override
+    @Transactional
+    public void deleteGenTableByIds(Long[] tableIds)
+    {
+        genTableMapper.deleteGenTableByIds(tableIds);
+        genTableColumnMapper.deleteGenTableColumnByIds(tableIds);
+    }
+
+    /**
+     * 鍒涘缓琛�
+     *
+     * @param sql 鍒涘缓琛ㄨ鍙�
+     * @return 缁撴灉
+     */
+    @Override
+    public boolean createTable(String sql)
+    {
+        return genTableMapper.createTable(sql) == 0;
+    }
+
+    /**
+     * 瀵煎叆琛ㄧ粨鏋�
+     * 
+     * @param tableList 瀵煎叆琛ㄥ垪琛�
+     */
+    @Override
+    @Transactional
+    public void importGenTable(List<GenTable> tableList, String operName)
+    {
+        try
+        {
+            for (GenTable table : tableList)
+            {
+                String tableName = table.getTableName();
+                GenUtils.initTable(table, operName);
+                int row = genTableMapper.insertGenTable(table);
+                if (row > 0)
+                {
+                    // 淇濆瓨鍒椾俊鎭�
+                    List<GenTableColumn> genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName);
+                    for (GenTableColumn column : genTableColumns)
+                    {
+                        GenUtils.initColumnField(column, table);
+                        genTableColumnMapper.insertGenTableColumn(column);
+                    }
+                }
+            }
+        }
+        catch (Exception e)
+        {
+            throw new ServiceException("瀵煎叆澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    /**
+     * 棰勮浠g爜
+     * 
+     * @param tableId 琛ㄧ紪鍙�
+     * @return 棰勮鏁版嵁鍒楄〃
+     */
+    @Override
+    public Map<String, String> previewCode(Long tableId)
+    {
+        Map<String, String> dataMap = new LinkedHashMap<>();
+        // 鏌ヨ琛ㄤ俊鎭�
+        GenTable table = genTableMapper.selectGenTableById(tableId);
+        // 璁剧疆涓诲瓙琛ㄤ俊鎭�
+        setSubTable(table);
+        // 璁剧疆涓婚敭鍒椾俊鎭�
+        setPkColumn(table);
+        VelocityInitializer.initVelocity();
+
+        VelocityContext context = VelocityUtils.prepareContext(table);
+
+        // 鑾峰彇妯℃澘鍒楄〃
+        List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory(), table.getTplWebType());
+        for (String template : templates)
+        {
+            // 娓叉煋妯℃澘
+            StringWriter sw = new StringWriter();
+            Template tpl = Velocity.getTemplate(template, Constants.UTF8);
+            tpl.merge(context, sw);
+            dataMap.put(template, sw.toString());
+        }
+        return dataMap;
+    }
+
+    /**
+     * 鐢熸垚浠g爜锛堜笅杞芥柟寮忥級
+     * 
+     * @param tableName 琛ㄥ悕绉�
+     * @return 鏁版嵁
+     */
+    @Override
+    public byte[] downloadCode(String tableName)
+    {
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        ZipOutputStream zip = new ZipOutputStream(outputStream);
+        generatorCode(tableName, zip);
+        IOUtils.closeQuietly(zip);
+        return outputStream.toByteArray();
+    }
+
+    /**
+     * 鐢熸垚浠g爜锛堣嚜瀹氫箟璺緞锛�
+     * 
+     * @param tableName 琛ㄥ悕绉�
+     */
+    @Override
+    public void generatorCode(String tableName)
+    {
+        // 鏌ヨ琛ㄤ俊鎭�
+        GenTable table = genTableMapper.selectGenTableByName(tableName);
+        // 璁剧疆涓诲瓙琛ㄤ俊鎭�
+        setSubTable(table);
+        // 璁剧疆涓婚敭鍒椾俊鎭�
+        setPkColumn(table);
+
+        VelocityInitializer.initVelocity();
+
+        VelocityContext context = VelocityUtils.prepareContext(table);
+
+        // 鑾峰彇妯℃澘鍒楄〃
+        List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory(), table.getTplWebType());
+        for (String template : templates)
+        {
+            if (!StringUtils.containsAny(template, "sql.vm", "api.js.vm", "index.vue.vm", "index-tree.vue.vm"))
+            {
+                // 娓叉煋妯℃澘
+                StringWriter sw = new StringWriter();
+                Template tpl = Velocity.getTemplate(template, Constants.UTF8);
+                tpl.merge(context, sw);
+                try
+                {
+                    String path = getGenPath(table, template);
+                    FileUtils.writeStringToFile(new File(path), sw.toString(), CharsetKit.UTF_8);
+                }
+                catch (IOException e)
+                {
+                    throw new ServiceException("娓叉煋妯℃澘澶辫触锛岃〃鍚嶏細" + table.getTableName());
+                }
+            }
+        }
+    }
+
+    /**
+     * 鍚屾鏁版嵁搴�
+     * 
+     * @param tableName 琛ㄥ悕绉�
+     */
+    @Override
+    @Transactional
+    public void synchDb(String tableName)
+    {
+        GenTable table = genTableMapper.selectGenTableByName(tableName);
+        List<GenTableColumn> tableColumns = table.getColumns();
+        Map<String, GenTableColumn> tableColumnMap = tableColumns.stream().collect(Collectors.toMap(GenTableColumn::getColumnName, Function.identity()));
+
+        List<GenTableColumn> dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName);
+        if (StringUtils.isEmpty(dbTableColumns))
+        {
+            throw new ServiceException("鍚屾鏁版嵁澶辫触锛屽師琛ㄧ粨鏋勪笉瀛樺湪");
+        }
+        List<String> dbTableColumnNames = dbTableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList());
+
+        dbTableColumns.forEach(column -> {
+            GenUtils.initColumnField(column, table);
+            if (tableColumnMap.containsKey(column.getColumnName()))
+            {
+                GenTableColumn prevColumn = tableColumnMap.get(column.getColumnName());
+                column.setColumnId(prevColumn.getColumnId());
+                if (column.isList())
+                {
+                    // 濡傛灉鏄垪琛紝缁х画淇濈暀鏌ヨ鏂瑰紡/瀛楀吀绫诲瀷閫夐」
+                    column.setDictType(prevColumn.getDictType());
+                    column.setQueryType(prevColumn.getQueryType());
+                }
+                if (StringUtils.isNotEmpty(prevColumn.getIsRequired()) && !column.isPk()
+                        && (column.isInsert() || column.isEdit())
+                        && ((column.isUsableColumn()) || (!column.isSuperColumn())))
+                {
+                    // 濡傛灉鏄�(鏂板/淇敼&闈炰富閿�/闈炲拷鐣ュ強鐖跺睘鎬�)锛岀户缁繚鐣欏繀濉�/鏄剧ず绫诲瀷閫夐」
+                    column.setIsRequired(prevColumn.getIsRequired());
+                    column.setHtmlType(prevColumn.getHtmlType());
+                }
+                genTableColumnMapper.updateGenTableColumn(column);
+            }
+            else
+            {
+                genTableColumnMapper.insertGenTableColumn(column);
+            }
+        });
+
+        List<GenTableColumn> delColumns = tableColumns.stream().filter(column -> !dbTableColumnNames.contains(column.getColumnName())).collect(Collectors.toList());
+        if (StringUtils.isNotEmpty(delColumns))
+        {
+            genTableColumnMapper.deleteGenTableColumns(delColumns);
+        }
+    }
+
+    /**
+     * 鎵归噺鐢熸垚浠g爜锛堜笅杞芥柟寮忥級
+     * 
+     * @param tableNames 琛ㄦ暟缁�
+     * @return 鏁版嵁
+     */
+    @Override
+    public byte[] downloadCode(String[] tableNames)
+    {
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        ZipOutputStream zip = new ZipOutputStream(outputStream);
+        for (String tableName : tableNames)
+        {
+            generatorCode(tableName, zip);
+        }
+        IOUtils.closeQuietly(zip);
+        return outputStream.toByteArray();
+    }
+
+    /**
+     * 鏌ヨ琛ㄤ俊鎭苟鐢熸垚浠g爜
+     */
+    private void generatorCode(String tableName, ZipOutputStream zip)
+    {
+        // 鏌ヨ琛ㄤ俊鎭�
+        GenTable table = genTableMapper.selectGenTableByName(tableName);
+        // 璁剧疆涓诲瓙琛ㄤ俊鎭�
+        setSubTable(table);
+        // 璁剧疆涓婚敭鍒椾俊鎭�
+        setPkColumn(table);
+
+        VelocityInitializer.initVelocity();
+
+        VelocityContext context = VelocityUtils.prepareContext(table);
+
+        // 鑾峰彇妯℃澘鍒楄〃
+        List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory(), table.getTplWebType());
+        for (String template : templates)
+        {
+            // 娓叉煋妯℃澘
+            StringWriter sw = new StringWriter();
+            Template tpl = Velocity.getTemplate(template, Constants.UTF8);
+            tpl.merge(context, sw);
+            try
+            {
+                // 娣诲姞鍒皕ip
+                zip.putNextEntry(new ZipEntry(VelocityUtils.getFileName(template, table)));
+                IOUtils.write(sw.toString(), zip, Constants.UTF8);
+                IOUtils.closeQuietly(sw);
+                zip.flush();
+                zip.closeEntry();
+            }
+            catch (IOException e)
+            {
+                log.error("娓叉煋妯℃澘澶辫触锛岃〃鍚嶏細" + table.getTableName(), e);
+            }
+        }
+    }
+
+    /**
+     * 淇敼淇濆瓨鍙傛暟鏍¢獙
+     * 
+     * @param genTable 涓氬姟淇℃伅
+     */
+    @Override
+    public void validateEdit(GenTable genTable)
+    {
+        if (GenConstants.TPL_TREE.equals(genTable.getTplCategory()))
+        {
+            String options = JSON.toJSONString(genTable.getParams());
+            JSONObject paramsObj = JSON.parseObject(options);
+            if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_CODE)))
+            {
+                throw new ServiceException("鏍戠紪鐮佸瓧娈典笉鑳戒负绌�");
+            }
+            else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_PARENT_CODE)))
+            {
+                throw new ServiceException("鏍戠埗缂栫爜瀛楁涓嶈兘涓虹┖");
+            }
+            else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_NAME)))
+            {
+                throw new ServiceException("鏍戝悕绉板瓧娈典笉鑳戒负绌�");
+            }
+            else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory()))
+            {
+                if (StringUtils.isEmpty(genTable.getSubTableName()))
+                {
+                    throw new ServiceException("鍏宠仈瀛愯〃鐨勮〃鍚嶄笉鑳戒负绌�");
+                }
+                else if (StringUtils.isEmpty(genTable.getSubTableFkName()))
+                {
+                    throw new ServiceException("瀛愯〃鍏宠仈鐨勫閿悕涓嶈兘涓虹┖");
+                }
+            }
+        }
+    }
+
+    /**
+     * 璁剧疆涓婚敭鍒椾俊鎭�
+     * 
+     * @param table 涓氬姟琛ㄤ俊鎭�
+     */
+    public void setPkColumn(GenTable table)
+    {
+        for (GenTableColumn column : table.getColumns())
+        {
+            if (column.isPk())
+            {
+                table.setPkColumn(column);
+                break;
+            }
+        }
+        if (StringUtils.isNull(table.getPkColumn()))
+        {
+            table.setPkColumn(table.getColumns().get(0));
+        }
+        if (GenConstants.TPL_SUB.equals(table.getTplCategory()))
+        {
+            for (GenTableColumn column : table.getSubTable().getColumns())
+            {
+                if (column.isPk())
+                {
+                    table.getSubTable().setPkColumn(column);
+                    break;
+                }
+            }
+            if (StringUtils.isNull(table.getSubTable().getPkColumn()))
+            {
+                table.getSubTable().setPkColumn(table.getSubTable().getColumns().get(0));
+            }
+        }
+    }
+
+    /**
+     * 璁剧疆涓诲瓙琛ㄤ俊鎭�
+     * 
+     * @param table 涓氬姟琛ㄤ俊鎭�
+     */
+    public void setSubTable(GenTable table)
+    {
+        String subTableName = table.getSubTableName();
+        if (StringUtils.isNotEmpty(subTableName))
+        {
+            table.setSubTable(genTableMapper.selectGenTableByName(subTableName));
+        }
+    }
+
+    /**
+     * 璁剧疆浠g爜鐢熸垚鍏朵粬閫夐」鍊�
+     * 
+     * @param genTable 璁剧疆鍚庣殑鐢熸垚瀵硅薄
+     */
+    public void setTableFromOptions(GenTable genTable)
+    {
+        JSONObject paramsObj = JSON.parseObject(genTable.getOptions());
+        if (StringUtils.isNotNull(paramsObj))
+        {
+            String treeCode = paramsObj.getString(GenConstants.TREE_CODE);
+            String treeParentCode = paramsObj.getString(GenConstants.TREE_PARENT_CODE);
+            String treeName = paramsObj.getString(GenConstants.TREE_NAME);
+            String parentMenuId = paramsObj.getString(GenConstants.PARENT_MENU_ID);
+            String parentMenuName = paramsObj.getString(GenConstants.PARENT_MENU_NAME);
+
+            genTable.setTreeCode(treeCode);
+            genTable.setTreeParentCode(treeParentCode);
+            genTable.setTreeName(treeName);
+            genTable.setParentMenuId(parentMenuId);
+            genTable.setParentMenuName(parentMenuName);
+        }
+    }
+
+    /**
+     * 鑾峰彇浠g爜鐢熸垚鍦板潃
+     * 
+     * @param table 涓氬姟琛ㄤ俊鎭�
+     * @param template 妯℃澘鏂囦欢璺緞
+     * @return 鐢熸垚鍦板潃
+     */
+    public static String getGenPath(GenTable table, String template)
+    {
+        String genPath = table.getGenPath();
+        if (StringUtils.equals(genPath, "/"))
+        {
+            return System.getProperty("user.dir") + File.separator + "src" + File.separator + VelocityUtils.getFileName(template, table);
+        }
+        return genPath + File.separator + VelocityUtils.getFileName(template, table);
+    }
+}
\ No newline at end of file
diff --git a/zhitan-generator/src/main/java/com/zhitan/generator/service/IGenTableColumnService.java b/zhitan-generator/src/main/java/com/zhitan/generator/service/IGenTableColumnService.java
new file mode 100644
index 0000000..102e247
--- /dev/null
+++ b/zhitan-generator/src/main/java/com/zhitan/generator/service/IGenTableColumnService.java
@@ -0,0 +1,44 @@
+package com.zhitan.generator.service;
+
+import java.util.List;
+import com.zhitan.generator.domain.GenTableColumn;
+
+/**
+ * 涓氬姟瀛楁 鏈嶅姟灞�
+ * 
+ * @author zhitan
+ */
+public interface IGenTableColumnService
+{
+    /**
+     * 鏌ヨ涓氬姟瀛楁鍒楄〃
+     * 
+     * @param tableId 涓氬姟瀛楁缂栧彿
+     * @return 涓氬姟瀛楁闆嗗悎
+     */
+    public List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId);
+
+    /**
+     * 鏂板涓氬姟瀛楁
+     * 
+     * @param genTableColumn 涓氬姟瀛楁淇℃伅
+     * @return 缁撴灉
+     */
+    public int insertGenTableColumn(GenTableColumn genTableColumn);
+
+    /**
+     * 淇敼涓氬姟瀛楁
+     * 
+     * @param genTableColumn 涓氬姟瀛楁淇℃伅
+     * @return 缁撴灉
+     */
+    public int updateGenTableColumn(GenTableColumn genTableColumn);
+
+    /**
+     * 鍒犻櫎涓氬姟瀛楁淇℃伅
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteGenTableColumnByIds(String ids);
+}
diff --git a/zhitan-generator/src/main/java/com/zhitan/generator/service/IGenTableService.java b/zhitan-generator/src/main/java/com/zhitan/generator/service/IGenTableService.java
new file mode 100644
index 0000000..301cc7f
--- /dev/null
+++ b/zhitan-generator/src/main/java/com/zhitan/generator/service/IGenTableService.java
@@ -0,0 +1,130 @@
+package com.zhitan.generator.service;
+
+import java.util.List;
+import java.util.Map;
+import com.zhitan.generator.domain.GenTable;
+
+/**
+ * 涓氬姟 鏈嶅姟灞�
+ * 
+ * @author zhitan
+ */
+public interface IGenTableService
+{
+    /**
+     * 鏌ヨ涓氬姟鍒楄〃
+     * 
+     * @param genTable 涓氬姟淇℃伅
+     * @return 涓氬姟闆嗗悎
+     */
+    public List<GenTable> selectGenTableList(GenTable genTable);
+
+    /**
+     * 鏌ヨ鎹簱鍒楄〃
+     * 
+     * @param genTable 涓氬姟淇℃伅
+     * @return 鏁版嵁搴撹〃闆嗗悎
+     */
+    public List<GenTable> selectDbTableList(GenTable genTable);
+
+    /**
+     * 鏌ヨ鎹簱鍒楄〃
+     * 
+     * @param tableNames 琛ㄥ悕绉扮粍
+     * @return 鏁版嵁搴撹〃闆嗗悎
+     */
+    public List<GenTable> selectDbTableListByNames(String[] tableNames);
+
+    /**
+     * 鏌ヨ鎵�鏈夎〃淇℃伅
+     * 
+     * @return 琛ㄤ俊鎭泦鍚�
+     */
+    public List<GenTable> selectGenTableAll();
+
+    /**
+     * 鏌ヨ涓氬姟淇℃伅
+     * 
+     * @param id 涓氬姟ID
+     * @return 涓氬姟淇℃伅
+     */
+    public GenTable selectGenTableById(Long id);
+
+    /**
+     * 淇敼涓氬姟
+     * 
+     * @param genTable 涓氬姟淇℃伅
+     * @return 缁撴灉
+     */
+    public void updateGenTable(GenTable genTable);
+
+    /**
+     * 鍒犻櫎涓氬姟淇℃伅
+     * 
+     * @param tableIds 闇�瑕佸垹闄ょ殑琛ㄦ暟鎹甀D
+     * @return 缁撴灉
+     */
+    public void deleteGenTableByIds(Long[] tableIds);
+
+    /**
+     * 鍒涘缓琛�
+     *
+     * @param sql 鍒涘缓琛ㄨ鍙�
+     * @return 缁撴灉
+     */
+    public boolean createTable(String sql);
+
+    /**
+     * 瀵煎叆琛ㄧ粨鏋�
+     *
+     * @param tableList 瀵煎叆琛ㄥ垪琛�
+     * @param operName 鎿嶄綔浜哄憳
+     */
+    public void importGenTable(List<GenTable> tableList, String operName);
+
+    /**
+     * 棰勮浠g爜
+     * 
+     * @param tableId 琛ㄧ紪鍙�
+     * @return 棰勮鏁版嵁鍒楄〃
+     */
+    public Map<String, String> previewCode(Long tableId);
+
+    /**
+     * 鐢熸垚浠g爜锛堜笅杞芥柟寮忥級
+     * 
+     * @param tableName 琛ㄥ悕绉�
+     * @return 鏁版嵁
+     */
+    public byte[] downloadCode(String tableName);
+
+    /**
+     * 鐢熸垚浠g爜锛堣嚜瀹氫箟璺緞锛�
+     * 
+     * @param tableName 琛ㄥ悕绉�
+     * @return 鏁版嵁
+     */
+    public void generatorCode(String tableName);
+
+    /**
+     * 鍚屾鏁版嵁搴�
+     * 
+     * @param tableName 琛ㄥ悕绉�
+     */
+    public void synchDb(String tableName);
+
+    /**
+     * 鎵归噺鐢熸垚浠g爜锛堜笅杞芥柟寮忥級
+     * 
+     * @param tableNames 琛ㄦ暟缁�
+     * @return 鏁版嵁
+     */
+    public byte[] downloadCode(String[] tableNames);
+
+    /**
+     * 淇敼淇濆瓨鍙傛暟鏍¢獙
+     * 
+     * @param genTable 涓氬姟淇℃伅
+     */
+    public void validateEdit(GenTable genTable);
+}
diff --git a/zhitan-generator/src/main/java/com/zhitan/generator/util/GenUtils.java b/zhitan-generator/src/main/java/com/zhitan/generator/util/GenUtils.java
new file mode 100644
index 0000000..7ee48bb
--- /dev/null
+++ b/zhitan-generator/src/main/java/com/zhitan/generator/util/GenUtils.java
@@ -0,0 +1,258 @@
+package com.zhitan.generator.util;
+
+import java.util.Arrays;
+
+import com.zhitan.generator.config.GenConfig;
+import com.zhitan.generator.domain.GenTable;
+import com.zhitan.generator.domain.GenTableColumn;
+import org.apache.commons.lang3.RegExUtils;
+import com.zhitan.common.constant.GenConstants;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 浠g爜鐢熸垚鍣� 宸ュ叿绫�
+ * 
+ * @author zhitan
+ */
+public class GenUtils
+{
+    /**
+     * 鍒濆鍖栬〃淇℃伅
+     */
+    public static void initTable(GenTable genTable, String operName)
+    {
+        genTable.setClassName(convertClassName(genTable.getTableName()));
+        genTable.setPackageName(GenConfig.getPackageName());
+        genTable.setModuleName(getModuleName(GenConfig.getPackageName()));
+        genTable.setBusinessName(getBusinessName(genTable.getTableName()));
+        genTable.setFunctionName(replaceText(genTable.getTableComment()));
+        genTable.setFunctionAuthor(GenConfig.getAuthor());
+        genTable.setCreateBy(operName);
+    }
+
+    /**
+     * 鍒濆鍖栧垪灞炴�у瓧娈�
+     */
+    public static void initColumnField(GenTableColumn column, GenTable table)
+    {
+        String dataType = getDbType(column.getColumnType());
+        String columnName = column.getColumnName();
+        column.setTableId(table.getTableId());
+        column.setCreateBy(table.getCreateBy());
+        // 璁剧疆java瀛楁鍚�
+        column.setJavaField(StringUtils.toCamelCase(columnName));
+        // 璁剧疆榛樿绫诲瀷
+        column.setJavaType(GenConstants.TYPE_STRING);
+        column.setQueryType(GenConstants.QUERY_EQ);
+
+        if (arraysContains(GenConstants.COLUMNTYPE_STR, dataType) || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType))
+        {
+            // 瀛楃涓查暱搴﹁秴杩�500璁剧疆涓烘枃鏈煙
+            Integer columnLength = getColumnLength(column.getColumnType());
+            String htmlType = columnLength >= 500 || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType) ? GenConstants.HTML_TEXTAREA : GenConstants.HTML_INPUT;
+            column.setHtmlType(htmlType);
+        }
+        else if (arraysContains(GenConstants.COLUMNTYPE_TIME, dataType))
+        {
+            column.setJavaType(GenConstants.TYPE_DATE);
+            column.setHtmlType(GenConstants.HTML_DATETIME);
+        }
+        else if (arraysContains(GenConstants.COLUMNTYPE_NUMBER, dataType))
+        {
+            column.setHtmlType(GenConstants.HTML_INPUT);
+
+            // 濡傛灉鏄诞鐐瑰瀷 缁熶竴鐢˙igDecimal
+            String[] str = StringUtils.split(StringUtils.substringBetween(column.getColumnType(), "(", ")"), ",");
+            if (str != null && str.length == 2 && Integer.parseInt(str[1]) > 0)
+            {
+                column.setJavaType(GenConstants.TYPE_BIGDECIMAL);
+            }
+            // 濡傛灉鏄暣褰�
+            else if (str != null && str.length == 1 && Integer.parseInt(str[0]) <= 10)
+            {
+                column.setJavaType(GenConstants.TYPE_INTEGER);
+            }
+            // 闀挎暣褰�
+            else
+            {
+                column.setJavaType(GenConstants.TYPE_LONG);
+            }
+        }
+
+        // 鎻掑叆瀛楁锛堥粯璁ゆ墍鏈夊瓧娈甸兘闇�瑕佹彃鍏ワ級
+        column.setIsInsert(GenConstants.REQUIRE);
+
+        // 缂栬緫瀛楁
+        if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName) && !column.isPk())
+        {
+            column.setIsEdit(GenConstants.REQUIRE);
+        }
+        // 鍒楄〃瀛楁
+        if (!arraysContains(GenConstants.COLUMNNAME_NOT_LIST, columnName) && !column.isPk())
+        {
+            column.setIsList(GenConstants.REQUIRE);
+        }
+        // 鏌ヨ瀛楁
+        if (!arraysContains(GenConstants.COLUMNNAME_NOT_QUERY, columnName) && !column.isPk())
+        {
+            column.setIsQuery(GenConstants.REQUIRE);
+        }
+
+        // 鏌ヨ瀛楁绫诲瀷
+        if (StringUtils.endsWithIgnoreCase(columnName, "name"))
+        {
+            column.setQueryType(GenConstants.QUERY_LIKE);
+        }
+        // 鐘舵�佸瓧娈佃缃崟閫夋
+        if (StringUtils.endsWithIgnoreCase(columnName, "status"))
+        {
+            column.setHtmlType(GenConstants.HTML_RADIO);
+        }
+        // 绫诲瀷&鎬у埆瀛楁璁剧疆涓嬫媺妗�
+        else if (StringUtils.endsWithIgnoreCase(columnName, "type")
+                || StringUtils.endsWithIgnoreCase(columnName, "sex"))
+        {
+            column.setHtmlType(GenConstants.HTML_SELECT);
+        }
+        // 鍥剧墖瀛楁璁剧疆鍥剧墖涓婁紶鎺т欢
+        else if (StringUtils.endsWithIgnoreCase(columnName, "image"))
+        {
+            column.setHtmlType(GenConstants.HTML_IMAGE_UPLOAD);
+        }
+        // 鏂囦欢瀛楁璁剧疆鏂囦欢涓婁紶鎺т欢
+        else if (StringUtils.endsWithIgnoreCase(columnName, "file"))
+        {
+            column.setHtmlType(GenConstants.HTML_FILE_UPLOAD);
+        }
+        // 鍐呭瀛楁璁剧疆瀵屾枃鏈帶浠�
+        else if (StringUtils.endsWithIgnoreCase(columnName, "content"))
+        {
+            column.setHtmlType(GenConstants.HTML_EDITOR);
+        }
+    }
+
+    /**
+     * 鏍¢獙鏁扮粍鏄惁鍖呭惈鎸囧畾鍊�
+     * 
+     * @param arr 鏁扮粍
+     * @param targetValue 鍊�
+     * @return 鏄惁鍖呭惈
+     */
+    public static boolean arraysContains(String[] arr, String targetValue)
+    {
+        return Arrays.asList(arr).contains(targetValue);
+    }
+
+    /**
+     * 鑾峰彇妯″潡鍚�
+     * 
+     * @param packageName 鍖呭悕
+     * @return 妯″潡鍚�
+     */
+    public static String getModuleName(String packageName)
+    {
+        int lastIndex = packageName.lastIndexOf(".");
+        int nameLength = packageName.length();
+        return StringUtils.substring(packageName, lastIndex + 1, nameLength);
+    }
+
+    /**
+     * 鑾峰彇涓氬姟鍚�
+     * 
+     * @param tableName 琛ㄥ悕
+     * @return 涓氬姟鍚�
+     */
+    public static String getBusinessName(String tableName)
+    {
+        int lastIndex = tableName.lastIndexOf("_");
+        int nameLength = tableName.length();
+        return StringUtils.substring(tableName, lastIndex + 1, nameLength);
+    }
+
+    /**
+     * 琛ㄥ悕杞崲鎴怞ava绫诲悕
+     * 
+     * @param tableName 琛ㄥ悕绉�
+     * @return 绫诲悕
+     */
+    public static String convertClassName(String tableName)
+    {
+        boolean autoRemovePre = GenConfig.getAutoRemovePre();
+        String tablePrefix = GenConfig.getTablePrefix();
+        if (autoRemovePre && StringUtils.isNotEmpty(tablePrefix))
+        {
+            String[] searchList = StringUtils.split(tablePrefix, ",");
+            tableName = replaceFirst(tableName, searchList);
+        }
+        return StringUtils.convertToCamelCase(tableName);
+    }
+
+    /**
+     * 鎵归噺鏇挎崲鍓嶇紑
+     * 
+     * @param replacementm 鏇挎崲鍊�
+     * @param searchList 鏇挎崲鍒楄〃
+     * @return
+     */
+    public static String replaceFirst(String replacementm, String[] searchList)
+    {
+        String text = replacementm;
+        for (String searchString : searchList)
+        {
+            if (replacementm.startsWith(searchString))
+            {
+                text = replacementm.replaceFirst(searchString, "");
+                break;
+            }
+        }
+        return text;
+    }
+
+    /**
+     * 鍏抽敭瀛楁浛鎹�
+     * 
+     * @param text 闇�瑕佽鏇挎崲鐨勫悕瀛�
+     * @return 鏇挎崲鍚庣殑鍚嶅瓧
+     */
+    public static String replaceText(String text)
+    {
+        return RegExUtils.replaceAll(text, "(?:琛▅鑻ヤ緷)", "");
+    }
+
+    /**
+     * 鑾峰彇鏁版嵁搴撶被鍨嬪瓧娈�
+     * 
+     * @param columnType 鍒楃被鍨�
+     * @return 鎴彇鍚庣殑鍒楃被鍨�
+     */
+    public static String getDbType(String columnType)
+    {
+        if (StringUtils.indexOf(columnType, "(") > 0)
+        {
+            return StringUtils.substringBefore(columnType, "(");
+        }
+        else
+        {
+            return columnType;
+        }
+    }
+
+    /**
+     * 鑾峰彇瀛楁闀垮害
+     * 
+     * @param columnType 鍒楃被鍨�
+     * @return 鎴彇鍚庣殑鍒楃被鍨�
+     */
+    public static Integer getColumnLength(String columnType)
+    {
+        if (StringUtils.indexOf(columnType, "(") > 0)
+        {
+            String length = StringUtils.substringBetween(columnType, "(", ")");
+            return Integer.valueOf(length);
+        }
+        else
+        {
+            return 0;
+        }
+    }
+}
diff --git a/zhitan-generator/src/main/java/com/zhitan/generator/util/VelocityInitializer.java b/zhitan-generator/src/main/java/com/zhitan/generator/util/VelocityInitializer.java
new file mode 100644
index 0000000..4e9c003
--- /dev/null
+++ b/zhitan-generator/src/main/java/com/zhitan/generator/util/VelocityInitializer.java
@@ -0,0 +1,34 @@
+package com.zhitan.generator.util;
+
+import java.util.Properties;
+import org.apache.velocity.app.Velocity;
+import com.zhitan.common.constant.Constants;
+
+/**
+ * VelocityEngine宸ュ巶
+ * 
+ * @author zhitan
+ */
+public class VelocityInitializer
+{
+    /**
+     * 鍒濆鍖杤m鏂规硶
+     */
+    public static void initVelocity()
+    {
+        Properties p = new Properties();
+        try
+        {
+            // 鍔犺浇classpath鐩綍涓嬬殑vm鏂囦欢
+            p.setProperty("resource.loader.file.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
+            // 瀹氫箟瀛楃闆�
+            p.setProperty(Velocity.INPUT_ENCODING, Constants.UTF8);
+            // 鍒濆鍖朧elocity寮曟搸锛屾寚瀹氶厤缃甈roperties
+            Velocity.init(p);
+        }
+        catch (Exception e)
+        {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git a/zhitan-generator/src/main/java/com/zhitan/generator/util/VelocityUtils.java b/zhitan-generator/src/main/java/com/zhitan/generator/util/VelocityUtils.java
new file mode 100644
index 0000000..54bbeb4
--- /dev/null
+++ b/zhitan-generator/src/main/java/com/zhitan/generator/util/VelocityUtils.java
@@ -0,0 +1,409 @@
+package com.zhitan.generator.util;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import com.zhitan.generator.domain.GenTable;
+import com.zhitan.generator.domain.GenTableColumn;
+import org.apache.velocity.VelocityContext;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.zhitan.common.constant.GenConstants;
+import com.zhitan.common.utils.DateUtils;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 妯℃澘澶勭悊宸ュ叿绫�
+ * 
+ * @author zhitan
+ */
+public class VelocityUtils
+{
+    /** 椤圭洰绌洪棿璺緞 */
+    private static final String PROJECT_PATH = "main/java";
+
+    /** mybatis绌洪棿璺緞 */
+    private static final String MYBATIS_PATH = "main/resources/mapper";
+
+    /** 榛樿涓婄骇鑿滃崟锛岀郴缁熷伐鍏� */
+    private static final String DEFAULT_PARENT_MENU_ID = "3";
+
+    /**
+     * 璁剧疆妯℃澘鍙橀噺淇℃伅
+     *
+     * @return 妯℃澘鍒楄〃
+     */
+    public static VelocityContext prepareContext(GenTable genTable)
+    {
+        String moduleName = genTable.getModuleName();
+        String businessName = genTable.getBusinessName();
+        String packageName = genTable.getPackageName();
+        String tplCategory = genTable.getTplCategory();
+        String functionName = genTable.getFunctionName();
+
+        VelocityContext velocityContext = new VelocityContext();
+        velocityContext.put("tplCategory", genTable.getTplCategory());
+        velocityContext.put("tableName", genTable.getTableName());
+        velocityContext.put("functionName", StringUtils.isNotEmpty(functionName) ? functionName : "銆愯濉啓鍔熻兘鍚嶇О銆�");
+        velocityContext.put("ClassName", genTable.getClassName());
+        velocityContext.put("className", StringUtils.uncapitalize(genTable.getClassName()));
+        velocityContext.put("moduleName", genTable.getModuleName());
+        velocityContext.put("BusinessName", StringUtils.capitalize(genTable.getBusinessName()));
+        velocityContext.put("businessName", genTable.getBusinessName());
+        velocityContext.put("basePackage", getPackagePrefix(packageName));
+        velocityContext.put("packageName", packageName);
+        velocityContext.put("author", genTable.getFunctionAuthor());
+        velocityContext.put("datetime", DateUtils.getDate());
+        velocityContext.put("pkColumn", genTable.getPkColumn());
+        velocityContext.put("importList", getImportList(genTable));
+        velocityContext.put("permissionPrefix", getPermissionPrefix(moduleName, businessName));
+        velocityContext.put("columns", genTable.getColumns());
+        velocityContext.put("table", genTable);
+        velocityContext.put("dicts", getDicts(genTable));
+        setMenuVelocityContext(velocityContext, genTable);
+        if (GenConstants.TPL_TREE.equals(tplCategory))
+        {
+            setTreeVelocityContext(velocityContext, genTable);
+        }
+        if (GenConstants.TPL_SUB.equals(tplCategory))
+        {
+            setSubVelocityContext(velocityContext, genTable);
+        }
+        return velocityContext;
+    }
+
+    public static void setMenuVelocityContext(VelocityContext context, GenTable genTable)
+    {
+        String options = genTable.getOptions();
+        JSONObject paramsObj = JSON.parseObject(options);
+        String parentMenuId = getParentMenuId(paramsObj);
+        context.put("parentMenuId", parentMenuId);
+    }
+
+    public static void setTreeVelocityContext(VelocityContext context, GenTable genTable)
+    {
+        String options = genTable.getOptions();
+        JSONObject paramsObj = JSON.parseObject(options);
+        String treeCode = getTreecode(paramsObj);
+        String treeParentCode = getTreeParentCode(paramsObj);
+        String treeName = getTreeName(paramsObj);
+
+        context.put("treeCode", treeCode);
+        context.put("treeParentCode", treeParentCode);
+        context.put("treeName", treeName);
+        context.put("expandColumn", getExpandColumn(genTable));
+        if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE))
+        {
+            context.put("tree_parent_code", paramsObj.getString(GenConstants.TREE_PARENT_CODE));
+        }
+        if (paramsObj.containsKey(GenConstants.TREE_NAME))
+        {
+            context.put("tree_name", paramsObj.getString(GenConstants.TREE_NAME));
+        }
+    }
+
+    public static void setSubVelocityContext(VelocityContext context, GenTable genTable)
+    {
+        GenTable subTable = genTable.getSubTable();
+        String subTableName = genTable.getSubTableName();
+        String subTableFkName = genTable.getSubTableFkName();
+        String subClassName = genTable.getSubTable().getClassName();
+        String subTableFkClassName = StringUtils.convertToCamelCase(subTableFkName);
+
+        context.put("subTable", subTable);
+        context.put("subTableName", subTableName);
+        context.put("subTableFkName", subTableFkName);
+        context.put("subTableFkClassName", subTableFkClassName);
+        context.put("subTableFkclassName", StringUtils.uncapitalize(subTableFkClassName));
+        context.put("subClassName", subClassName);
+        context.put("subclassName", StringUtils.uncapitalize(subClassName));
+        context.put("subImportList", getImportList(genTable.getSubTable()));
+    }
+
+    /**
+     * 鑾峰彇妯℃澘淇℃伅
+     * @param tplCategory 鐢熸垚鐨勬ā鏉�
+     * @param tplWebType 鍓嶇绫诲瀷
+     * @return 妯℃澘鍒楄〃
+     */
+    public static List<String> getTemplateList(String tplCategory, String tplWebType)
+    {
+        String useWebType = "vm/vue";
+        if ("element-plus".equals(tplWebType))
+        {
+            useWebType = "vm/vue/v3";
+        }
+        List<String> templates = new ArrayList<String>();
+        templates.add("vm/java/domain.java.vm");
+        templates.add("vm/java/mapper.java.vm");
+        templates.add("vm/java/service.java.vm");
+        templates.add("vm/java/serviceImpl.java.vm");
+        templates.add("vm/java/controller.java.vm");
+        templates.add("vm/xml/mapper.xml.vm");
+        templates.add("vm/sql/sql.vm");
+        templates.add("vm/js/api.js.vm");
+        if (GenConstants.TPL_CRUD.equals(tplCategory))
+        {
+            templates.add(useWebType + "/index.vue.vm");
+        }
+        else if (GenConstants.TPL_TREE.equals(tplCategory))
+        {
+            templates.add(useWebType + "/index-tree.vue.vm");
+        }
+        else if (GenConstants.TPL_SUB.equals(tplCategory))
+        {
+            templates.add(useWebType + "/index.vue.vm");
+            templates.add("vm/java/sub-domain.java.vm");
+        }
+        return templates;
+    }
+
+    /**
+     * 鑾峰彇鏂囦欢鍚�
+     */
+    public static String getFileName(String template, GenTable genTable)
+    {
+        // 鏂囦欢鍚嶇О
+        String fileName = "";
+        // 鍖呰矾寰�
+        String packageName = genTable.getPackageName();
+        // 妯″潡鍚�
+        String moduleName = genTable.getModuleName();
+        // 澶у啓绫诲悕
+        String className = genTable.getClassName();
+        // 涓氬姟鍚嶇О
+        String businessName = genTable.getBusinessName();
+
+        String javaPath = PROJECT_PATH + "/" + StringUtils.replace(packageName, ".", "/");
+        String mybatisPath = MYBATIS_PATH + "/" + moduleName;
+        String vuePath = "vue";
+
+        if (template.contains("domain.java.vm"))
+        {
+            fileName = StringUtils.format("{}/domain/{}.java", javaPath, className);
+        }
+        if (template.contains("sub-domain.java.vm") && StringUtils.equals(GenConstants.TPL_SUB, genTable.getTplCategory()))
+        {
+            fileName = StringUtils.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName());
+        }
+        else if (template.contains("mapper.java.vm"))
+        {
+            fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className);
+        }
+        else if (template.contains("service.java.vm"))
+        {
+            fileName = StringUtils.format("{}/service/I{}Service.java", javaPath, className);
+        }
+        else if (template.contains("serviceImpl.java.vm"))
+        {
+            fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className);
+        }
+        else if (template.contains("controller.java.vm"))
+        {
+            fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className);
+        }
+        else if (template.contains("mapper.xml.vm"))
+        {
+            fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, className);
+        }
+        else if (template.contains("sql.vm"))
+        {
+            fileName = businessName + "Menu.sql";
+        }
+        else if (template.contains("api.js.vm"))
+        {
+            fileName = StringUtils.format("{}/api/{}/{}.js", vuePath, moduleName, businessName);
+        }
+        else if (template.contains("index.vue.vm"))
+        {
+            fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName);
+        }
+        else if (template.contains("index-tree.vue.vm"))
+        {
+            fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName);
+        }
+        return fileName;
+    }
+
+    /**
+     * 鑾峰彇鍖呭墠缂�
+     *
+     * @param packageName 鍖呭悕绉�
+     * @return 鍖呭墠缂�鍚嶇О
+     */
+    public static String getPackagePrefix(String packageName)
+    {
+        int lastIndex = packageName.lastIndexOf(".");
+        return StringUtils.substring(packageName, 0, lastIndex);
+    }
+
+    /**
+     * 鏍规嵁鍒楃被鍨嬭幏鍙栧鍏ュ寘
+     * 
+     * @param genTable 涓氬姟琛ㄥ璞�
+     * @return 杩斿洖闇�瑕佸鍏ョ殑鍖呭垪琛�
+     */
+    public static HashSet<String> getImportList(GenTable genTable)
+    {
+        List<GenTableColumn> columns = genTable.getColumns();
+        GenTable subGenTable = genTable.getSubTable();
+        HashSet<String> importList = new HashSet<String>();
+        if (StringUtils.isNotNull(subGenTable))
+        {
+            importList.add("java.util.List");
+        }
+        for (GenTableColumn column : columns)
+        {
+            if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType()))
+            {
+                importList.add("java.util.Date");
+                importList.add("com.fasterxml.jackson.annotation.JsonFormat");
+            }
+            else if (!column.isSuperColumn() && GenConstants.TYPE_BIGDECIMAL.equals(column.getJavaType()))
+            {
+                importList.add("java.math.BigDecimal");
+            }
+        }
+        return importList;
+    }
+
+    /**
+     * 鏍规嵁鍒楃被鍨嬭幏鍙栧瓧鍏哥粍
+     * 
+     * @param genTable 涓氬姟琛ㄥ璞�
+     * @return 杩斿洖瀛楀吀缁�
+     */
+    public static String getDicts(GenTable genTable)
+    {
+        List<GenTableColumn> columns = genTable.getColumns();
+        Set<String> dicts = new HashSet<String>();
+        addDicts(dicts, columns);
+        if (StringUtils.isNotNull(genTable.getSubTable()))
+        {
+            List<GenTableColumn> subColumns = genTable.getSubTable().getColumns();
+            addDicts(dicts, subColumns);
+        }
+        return StringUtils.join(dicts, ", ");
+    }
+
+    /**
+     * 娣诲姞瀛楀吀鍒楄〃
+     * 
+     * @param dicts 瀛楀吀鍒楄〃
+     * @param columns 鍒楅泦鍚�
+     */
+    public static void addDicts(Set<String> dicts, List<GenTableColumn> columns)
+    {
+        for (GenTableColumn column : columns)
+        {
+            if (!column.isSuperColumn() && StringUtils.isNotEmpty(column.getDictType()) && StringUtils.equalsAny(
+                    column.getHtmlType(),
+                    new String[] { GenConstants.HTML_SELECT, GenConstants.HTML_RADIO, GenConstants.HTML_CHECKBOX }))
+            {
+                dicts.add("'" + column.getDictType() + "'");
+            }
+        }
+    }
+
+    /**
+     * 鑾峰彇鏉冮檺鍓嶇紑
+     *
+     * @param moduleName 妯″潡鍚嶇О
+     * @param businessName 涓氬姟鍚嶇О
+     * @return 杩斿洖鏉冮檺鍓嶇紑
+     */
+    public static String getPermissionPrefix(String moduleName, String businessName)
+    {
+        return StringUtils.format("{}:{}", moduleName, businessName);
+    }
+
+    /**
+     * 鑾峰彇涓婄骇鑿滃崟ID瀛楁
+     *
+     * @param paramsObj 鐢熸垚鍏朵粬閫夐」
+     * @return 涓婄骇鑿滃崟ID瀛楁
+     */
+    public static String getParentMenuId(JSONObject paramsObj)
+    {
+        if (StringUtils.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.PARENT_MENU_ID)
+                && StringUtils.isNotEmpty(paramsObj.getString(GenConstants.PARENT_MENU_ID)))
+        {
+            return paramsObj.getString(GenConstants.PARENT_MENU_ID);
+        }
+        return DEFAULT_PARENT_MENU_ID;
+    }
+
+    /**
+     * 鑾峰彇鏍戠紪鐮�
+     *
+     * @param paramsObj 鐢熸垚鍏朵粬閫夐」
+     * @return 鏍戠紪鐮�
+     */
+    public static String getTreecode(JSONObject paramsObj)
+    {
+        if (paramsObj.containsKey(GenConstants.TREE_CODE))
+        {
+            return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_CODE));
+        }
+        return StringUtils.EMPTY;
+    }
+
+    /**
+     * 鑾峰彇鏍戠埗缂栫爜
+     *
+     * @param paramsObj 鐢熸垚鍏朵粬閫夐」
+     * @return 鏍戠埗缂栫爜
+     */
+    public static String getTreeParentCode(JSONObject paramsObj)
+    {
+        if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE))
+        {
+            return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_PARENT_CODE));
+        }
+        return StringUtils.EMPTY;
+    }
+
+    /**
+     * 鑾峰彇鏍戝悕绉�
+     *
+     * @param paramsObj 鐢熸垚鍏朵粬閫夐」
+     * @return 鏍戝悕绉�
+     */
+    public static String getTreeName(JSONObject paramsObj)
+    {
+        if (paramsObj.containsKey(GenConstants.TREE_NAME))
+        {
+            return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_NAME));
+        }
+        return StringUtils.EMPTY;
+    }
+
+    /**
+     * 鑾峰彇闇�瑕佸湪鍝竴鍒椾笂闈㈡樉绀哄睍寮�鎸夐挳
+     *
+     * @param genTable 涓氬姟琛ㄥ璞�
+     * @return 灞曞紑鎸夐挳鍒楀簭鍙�
+     */
+    public static int getExpandColumn(GenTable genTable)
+    {
+        String options = genTable.getOptions();
+        JSONObject paramsObj = JSON.parseObject(options);
+        String treeName = paramsObj.getString(GenConstants.TREE_NAME);
+        int num = 0;
+        for (GenTableColumn column : genTable.getColumns())
+        {
+            if (column.isList())
+            {
+                num++;
+                String columnName = column.getColumnName();
+                if (columnName.equals(treeName))
+                {
+                    break;
+                }
+            }
+        }
+        return num;
+    }
+}
diff --git a/zhitan-generator/src/main/resources/generator.yml b/zhitan-generator/src/main/resources/generator.yml
new file mode 100644
index 0000000..3d6ffea
--- /dev/null
+++ b/zhitan-generator/src/main/resources/generator.yml
@@ -0,0 +1,10 @@
+# 浠g爜鐢熸垚
+gen:
+  # 浣滆��
+  author: ZhiTan
+  # 榛樿鐢熸垚鍖呰矾寰� system 闇�鏀规垚鑷繁鐨勬ā鍧楀悕绉� 濡� system monitor tool
+  packageName: com.zhitan.system
+  # 鑷姩鍘婚櫎琛ㄥ墠缂�锛岄粯璁ゆ槸false
+  autoRemovePre: false
+  # 琛ㄥ墠缂�锛堢敓鎴愮被鍚嶄笉浼氬寘鍚〃鍓嶇紑锛屽涓敤閫楀彿鍒嗛殧锛�
+  tablePrefix: sys_
\ No newline at end of file
diff --git a/zhitan-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml b/zhitan-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml
new file mode 100644
index 0000000..8766496
--- /dev/null
+++ b/zhitan-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.generator.mapper.GenTableColumnMapper">
+
+    <resultMap type="GenTableColumn" id="GenTableColumnResult">
+        <id property="columnId" column="column_id"/>
+        <result property="tableId" column="table_id"/>
+        <result property="columnName" column="column_name"/>
+        <result property="columnComment" column="column_comment"/>
+        <result property="columnType" column="column_type"/>
+        <result property="javaType" column="java_type"/>
+        <result property="javaField" column="java_field"/>
+        <result property="isPk" column="is_pk"/>
+        <result property="isIncrement" column="is_increment"/>
+        <result property="isRequired" column="is_required"/>
+        <result property="isInsert" column="is_insert"/>
+        <result property="isEdit" column="is_edit"/>
+        <result property="isList" column="is_list"/>
+        <result property="isQuery" column="is_query"/>
+        <result property="queryType" column="query_type"/>
+        <result property="htmlType" column="html_type"/>
+        <result property="dictType" column="dict_type"/>
+        <result property="sort" column="sort"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <sql id="selectGenTableColumnVo">
+        select column_id,
+               table_id,
+               column_name,
+               column_comment,
+               column_type,
+               java_type,
+               java_field,
+               is_pk,
+               is_increment,
+               is_required,
+               is_insert,
+               is_edit,
+               is_list,
+               is_query,
+               query_type,
+               html_type,
+               dict_type,
+               sort,
+               create_by,
+               create_time,
+               update_by,
+               update_time
+        from gen_table_column
+    </sql>
+
+    <select id="selectGenTableColumnListByTableId" parameterType="Long" resultMap="GenTableColumnResult">
+        <include refid="selectGenTableColumnVo"/>
+        where table_id = #{tableId}
+        order by sort
+    </select>
+
+    <select id="selectDbTableColumnsByName" parameterType="String" resultMap="GenTableColumnResult">
+        SELECT A.attname                                 AS COLUMN_NAME,
+               col_description(A.attrelid, A.attnum)     AS column_comment,
+               T.typname                                 AS column_type,
+               CASE col.is_nullable WHEN 'NO' THEN 1 END AS is_required,
+               CASE col.is_identity WHEN 'NO' THEN 0 END AS is_pk,
+               col.ordinal_position                      AS sort,
+               '0'                                       AS is_increment
+        FROM pg_class C
+                 LEFT JOIN pg_attribute A ON A.attrelid = C.oid
+                 LEFT JOIN pg_type T ON A.atttypid = T.oid
+                 LEFT JOIN information_schema.COLUMNS col ON col.COLUMN_NAME = A.attname
+        WHERE C.relname = #{tableName}
+          AND col.TABLE_NAME = #{tableName}
+          AND A.attnum > 0
+        order by col.ordinal_position asc
+    </select>
+
+    <insert id="insertGenTableColumn" parameterType="GenTableColumn" useGeneratedKeys="true" keyProperty="columnId">
+        insert into gen_table_column (
+        <if test="tableId != null and tableId != ''">table_id,</if>
+        <if test="columnName != null and columnName != ''">column_name,</if>
+        <if test="columnComment != null and columnComment != ''">column_comment,</if>
+        <if test="columnType != null and columnType != ''">column_type,</if>
+        <if test="javaType != null and javaType != ''">java_type,</if>
+        <if test="javaField != null  and javaField != ''">java_field,</if>
+        <if test="isPk != null and isPk != ''">is_pk,</if>
+        <if test="isIncrement != null and isIncrement != ''">is_increment,</if>
+        <if test="isRequired != null and isRequired != ''">is_required,</if>
+        <if test="isInsert != null and isInsert != ''">is_insert,</if>
+        <if test="isEdit != null and isEdit != ''">is_edit,</if>
+        <if test="isList != null and isList != ''">is_list,</if>
+        <if test="isQuery != null and isQuery != ''">is_query,</if>
+        <if test="queryType != null and queryType != ''">query_type,</if>
+        <if test="htmlType != null and htmlType != ''">html_type,</if>
+        <if test="dictType != null and dictType != ''">dict_type,</if>
+        <if test="sort != null">sort,</if>
+        <if test="createBy != null and createBy != ''">create_by,</if>
+        create_time
+        )values(
+        <if test="tableId != null and tableId != ''">#{tableId},</if>
+        <if test="columnName != null and columnName != ''">#{columnName},</if>
+        <if test="columnComment != null and columnComment != ''">#{columnComment},</if>
+        <if test="columnType != null and columnType != ''">#{columnType},</if>
+        <if test="javaType != null and javaType != ''">#{javaType},</if>
+        <if test="javaField != null and javaField != ''">#{javaField},</if>
+        <if test="isPk != null and isPk != ''">#{isPk},</if>
+        <if test="isIncrement != null and isIncrement != ''">#{isIncrement},</if>
+        <if test="isRequired != null and isRequired != ''">#{isRequired},</if>
+        <if test="isInsert != null and isInsert != ''">#{isInsert},</if>
+        <if test="isEdit != null and isEdit != ''">#{isEdit},</if>
+        <if test="isList != null and isList != ''">#{isList},</if>
+        <if test="isQuery != null and isQuery != ''">#{isQuery},</if>
+        <if test="queryType != null and queryType != ''">#{queryType},</if>
+        <if test="htmlType != null and htmlType != ''">#{htmlType},</if>
+        <if test="dictType != null and dictType != ''">#{dictType},</if>
+        <if test="sort != null">#{sort},</if>
+        <if test="createBy != null and createBy != ''">#{createBy},</if>
+        now()
+        )
+    </insert>
+
+    <update id="updateGenTableColumn" parameterType="GenTableColumn">
+        update gen_table_column
+        <set>
+            column_comment = #{columnComment},
+            java_type = #{javaType},
+            java_field = #{javaField},
+            is_insert = #{isInsert},
+            is_edit = #{isEdit},
+            is_list = #{isList},
+            is_query = #{isQuery},
+            is_required = #{isRequired},
+            query_type = #{queryType},
+            html_type = #{htmlType},
+            dict_type = #{dictType},
+            sort = #{sort},
+            update_by = #{updateBy},
+            update_time = now()
+        </set>
+        where column_id = #{columnId}
+    </update>
+
+    <delete id="deleteGenTableColumnByIds" parameterType="Long">
+        delete from gen_table_column where table_id in
+        <foreach collection="array" item="tableId" open="(" separator="," close=")">
+            #{tableId}
+        </foreach>
+    </delete>
+
+</mapper>
diff --git a/zhitan-generator/src/main/resources/mapper/generator/GenTableMapper.xml b/zhitan-generator/src/main/resources/mapper/generator/GenTableMapper.xml
new file mode 100644
index 0000000..d34669a
--- /dev/null
+++ b/zhitan-generator/src/main/resources/mapper/generator/GenTableMapper.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+		PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+		"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.generator.mapper.GenTableMapper">
+
+	<resultMap type="com.zhitan.generator.domain.GenTable" id="GenTableResult">
+		<id property="tableId" column="table_id"/>
+		<result property="tableName" column="table_name"/>
+		<result property="tableComment" column="table_comment"/>
+		<result property="className" column="class_name"/>
+		<result property="tplCategory" column="tpl_category"/>
+		<result property="packageName" column="package_name"/>
+		<result property="moduleName" column="module_name"/>
+		<result property="businessName" column="business_name"/>
+		<result property="functionName" column="function_name"/>
+		<result property="functionAuthor" column="function_author"/>
+		<result property="options" column="options"/>
+		<result property="createBy" column="create_by"/>
+		<result property="createTime" column="create_time"/>
+		<result property="updateBy" column="update_by"/>
+		<result property="updateTime" column="update_time"/>
+		<result property="remark" column="remark"/>
+		<collection property="columns" javaType="java.util.List" resultMap="GenTableColumnResult"/>
+	</resultMap>
+
+	<resultMap type="com.zhitan.generator.domain.GenTableColumn" id="GenTableColumnResult">
+		<id property="columnId" column="column_id"/>
+		<result property="tableId" column="table_id"/>
+		<result property="columnName" column="column_name"/>
+		<result property="columnComment" column="column_comment"/>
+		<result property="columnType" column="column_type"/>
+		<result property="javaType" column="java_type"/>
+		<result property="javaField" column="java_field"/>
+		<result property="isPk" column="is_pk"/>
+		<result property="isIncrement" column="is_increment"/>
+		<result property="isRequired" column="is_required"/>
+		<result property="isInsert" column="is_insert"/>
+		<result property="isEdit" column="is_edit"/>
+		<result property="isList" column="is_list"/>
+		<result property="isQuery" column="is_query"/>
+		<result property="queryType" column="query_type"/>
+		<result property="htmlType" column="html_type"/>
+		<result property="dictType" column="dict_type"/>
+		<result property="sort" column="sort"/>
+		<result property="createBy" column="create_by"/>
+		<result property="createTime" column="create_time"/>
+		<result property="updateBy" column="update_by"/>
+		<result property="updateTime" column="update_time"/>
+	</resultMap>
+
+	<sql id="selectGenTableVo">
+		select table_id, table_name, table_comment, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, options, create_by, create_time, update_by, update_time, remark from gen_table
+	</sql>
+
+	<select id="selectGenTableList" parameterType="com.zhitan.generator.domain.GenTable"
+			resultMap="GenTableResult">
+		<include refid="selectGenTableVo"/>
+		<where>
+			<if test="tableName != null and tableName != ''">
+				AND lower(table_name) like lower(concat('%', #{tableName}, '%'))
+			</if>
+			<if test="tableComment != null and tableComment != ''">
+				AND lower(table_comment) like lower(concat('%', #{tableComment}, '%'))
+			</if>
+			<!-- 			<if test="beginTime != null and beginTime != ''">寮�濮嬫椂闂存绱� -->
+			<!-- 				AND date_format(create_time,'%y%m%d') &gt;= date_format(#{beginTime},'%y%m%d') -->
+			<!-- 			</if> -->
+			<!-- 			<if test="endTime != null and endTime != ''">缁撴潫鏃堕棿妫�绱� -->
+			<!-- 				AND date_format(create_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d') -->
+			<!-- 			</if> -->
+		</where>
+		order by table_id
+	</select>
+
+	<select id="selectDbTableList" parameterType="com.zhitan.generator.domain.GenTable"
+			resultMap="GenTableResult">
+		SELECT tablename AS table_name FROM pg_tables WHERE schemaname='public'
+		AND tablename NOT LIKE 'qrtz_%' AND tablename NOT LIKE 'gen_%'
+		AND tablename NOT IN (select table_name from gen_table)
+		<if test="tableName != null and tableName != ''">
+			AND lower(tablename) like lower(concat('%', #{tableName}, '%'))
+		</if>
+	</select>
+
+	<select id="selectDbTableListByNames" resultMap="GenTableResult">
+		SELECT C.relname AS table_name,CAST (obj_description (relfilenode,'pg_class') AS VARCHAR) AS table_comment,null
+		AS create_time,null AS update_time FROM pg_class C WHERE
+		C.relname IN (SELECT tablename FROM pg_tables WHERE schemaname='public' AND POSITION ('_2' IN tablename)=0)
+		and C.relname NOT LIKE 'qrtz_%' and C.relname NOT LIKE 'gen_%'
+		and C.relname in
+		<foreach collection="array" item="name" open="(" separator="," close=")">
+			#{name}
+		</foreach>
+		ORDER BY C.relname
+	</select>
+
+	<select id="selectGenTableById" parameterType="Long" resultMap="GenTableResult">
+		SELECT t.table_id, t.table_name, t.table_comment, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.options, t.remark,
+			   c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
+		FROM gen_table t
+				 LEFT JOIN gen_table_column c ON t.table_id = c.table_id
+		where t.table_id = #{tableId}
+	</select>
+
+	<select id="selectGenTableByName" parameterType="String" resultMap="GenTableResult">
+		SELECT t.table_id, t.table_name, t.table_comment, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.options, t.remark,
+			   c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
+		FROM gen_table t
+				 LEFT JOIN gen_table_column c ON t.table_id = c.table_id
+		where t.table_name = #{tableName}
+	</select>
+
+	<insert id="insertGenTable" parameterType="com.zhitan.generator.domain.GenTable"
+			useGeneratedKeys="true" keyProperty="tableId">
+		insert into gen_table (
+		<if test="tableName != null">table_name,</if>
+		<if test="tableComment != null and tableComment != ''">table_comment,</if>
+		<if test="className != null and className != ''">class_name,</if>
+		<if test="tplCategory != null and tplCategory != ''">tpl_category,</if>
+		<if test="packageName != null and packageName != ''">package_name,</if>
+		<if test="moduleName != null and moduleName != ''">module_name,</if>
+		<if test="businessName != null and businessName != ''">business_name,</if>
+		<if test="functionName != null and functionName != ''">function_name,</if>
+		<if test="functionAuthor != null and functionAuthor != ''">function_author,</if>
+		<if test="remark != null and remark != ''">remark,</if>
+		<if test="createBy != null and createBy != ''">create_by,</if>
+		create_time
+		)values(
+		<if test="tableName != null">#{tableName},</if>
+		<if test="tableComment != null and tableComment != ''">#{tableComment},</if>
+		<if test="className != null and className != ''">#{className},</if>
+		<if test="tplCategory != null and tplCategory != ''">#{tplCategory},</if>
+		<if test="packageName != null and packageName != ''">#{packageName},</if>
+		<if test="moduleName != null and moduleName != ''">#{moduleName},</if>
+		<if test="businessName != null and businessName != ''">#{businessName},</if>
+		<if test="functionName != null and functionName != ''">#{functionName},</if>
+		<if test="functionAuthor != null and functionAuthor != ''">#{functionAuthor},</if>
+		<if test="remark != null and remark != ''">#{remark},</if>
+		<if test="createBy != null and createBy != ''">#{createBy},</if>
+		now()
+		)
+	</insert>
+
+	<update id="updateGenTable" parameterType="com.zhitan.generator.domain.GenTable">
+		update gen_table
+		<set>
+			<if test="tableName != null">table_name = #{tableName},</if>
+			<if test="tableComment != null and tableComment != ''">table_comment = #{tableComment},</if>
+			<if test="className != null and className != ''">class_name = #{className},</if>
+			<if test="functionAuthor != null and functionAuthor != ''">function_author = #{functionAuthor},</if>
+			<if test="tplCategory != null and tplCategory != ''">tpl_category = #{tplCategory},</if>
+			<if test="packageName != null and packageName != ''">package_name = #{packageName},</if>
+			<if test="moduleName != null and moduleName != ''">module_name = #{moduleName},</if>
+			<if test="businessName != null and businessName != ''">business_name = #{businessName},</if>
+			<if test="functionName != null and functionName != ''">function_name = #{functionName},</if>
+			<if test="options != null and options != ''">options = #{options},</if>
+			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+			<if test="remark != null">remark = #{remark},</if>
+			update_time = now()
+		</set>
+		where table_id = #{tableId}
+	</update>
+
+	<delete id="deleteGenTableByIds" parameterType="Long">
+		delete from gen_table where table_id in
+		<foreach collection="array" item="tableId" open="(" separator="," close=")">
+			#{tableId}
+		</foreach>
+	</delete>
+
+</mapper> 
diff --git a/zhitan-generator/src/main/resources/vm/java/controller.java.vm b/zhitan-generator/src/main/resources/vm/java/controller.java.vm
new file mode 100644
index 0000000..bb7928a
--- /dev/null
+++ b/zhitan-generator/src/main/resources/vm/java/controller.java.vm
@@ -0,0 +1,108 @@
+package ${packageName}.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import javax.annotation.Resource;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.enums.BusinessType;
+import ${packageName}.domain.${ClassName};
+import ${packageName}.service.I${ClassName}Service;
+import com.zhitan.common.utils.poi.ExcelUtil;
+#if($table.crud || $table.sub)
+import com.zhitan.common.core.page.TableDataInfo;
+#elseif($table.tree)
+#end
+
+/**
+ * ${functionName}Controller
+ * 
+ * @author ${author}
+ * @date ${datetime}
+ */
+@RestController
+@RequestMapping("/${moduleName}/${businessName}")
+public class ${ClassName}Controller extends BaseController
+{
+    @Resource
+    private I${ClassName}Service ${className}Service;
+
+    /**
+     * 鏌ヨ${functionName}鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(${ClassName} ${className})
+    {
+        startPage();
+        List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});
+        return getDataTable(list);
+    }
+
+
+    /**
+     * 瀵煎嚭${functionName}鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')")
+    @Log(title = "${functionName}", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ${ClassName} ${className})
+    {
+        List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});
+        ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class);
+        util.exportExcel(response, list, "${functionName}鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇${functionName}璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:query')")
+    @GetMapping(value = "/{${pkColumn.javaField}}")
+    public AjaxResult getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField})
+    {
+        return success(${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}));
+    }
+
+    /**
+     * 鏂板${functionName}
+     */
+    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:add')")
+    @Log(title = "${functionName}", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ${ClassName} ${className})
+    {
+        return toAjax(${className}Service.insert${ClassName}(${className}));
+    }
+
+    /**
+     * 淇敼${functionName}
+     */
+    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:edit')")
+    @Log(title = "${functionName}", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ${ClassName} ${className})
+    {
+        return toAjax(${className}Service.update${ClassName}(${className}));
+    }
+
+    /**
+     * 鍒犻櫎${functionName}
+     */
+    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:remove')")
+    @Log(title = "${functionName}", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{${pkColumn.javaField}s}")
+    public AjaxResult remove(@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s)
+    {
+        return toAjax(${className}Service.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s));
+    }
+}
diff --git a/zhitan-generator/src/main/resources/vm/java/domain.java.vm b/zhitan-generator/src/main/resources/vm/java/domain.java.vm
new file mode 100644
index 0000000..da3cce5
--- /dev/null
+++ b/zhitan-generator/src/main/resources/vm/java/domain.java.vm
@@ -0,0 +1,112 @@
+package ${packageName}.domain;
+
+#foreach ($import in $importList)
+import ${import};
+#end
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zhitan.common.annotation.Excel;
+#if($table.crud || $table.sub)
+import com.zhitan.common.core.domain.BaseEntity;
+#elseif($table.tree)
+import com.zhitan.common.core.domain.TreeEntity;
+#end
+
+/**
+ * ${functionName}瀵硅薄 ${tableName}
+ *
+ * @author ${author}
+ * @date ${datetime}
+ */
+#if($table.crud || $table.sub)
+    #set($Entity="BaseEntity")
+#elseif($table.tree)
+    #set($Entity="TreeEntity")
+#end
+@TableName("${tableName}")
+public class ${ClassName} extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+#foreach ($column in $columns)
+    #if(!$table.isSuperColumn($column.javaField))
+    /** $column.columnComment */
+    #if($column.list)
+        #set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+        #if($parentheseIndex != -1)
+            #set($comment=$column.columnComment.substring(0, $parentheseIndex))
+        #else
+            #set($comment=$column.columnComment)
+        #end
+        #if($parentheseIndex != -1)
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+        #elseif($column.javaType == 'Date')
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
+        #else
+    @Excel(name = "${comment}")
+        #end
+    #end
+    #if($column.isPk == 1)
+    @TableId(value = "$column.columnName",type = IdType.AUTO)
+    #end
+    private $column.javaType $column.javaField;
+
+    #end
+#end
+#if($table.sub)
+/** $table.subTable.functionName淇℃伅 */
+private List<${subClassName}> ${subclassName}List;
+
+#end
+#foreach ($column in $columns)
+    #if(!$table.isSuperColumn($column.javaField))
+        #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
+            #set($AttrName=$column.javaField)
+        #else
+            #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+        #end
+        
+    public void set${AttrName}($column.javaType $column.javaField)
+    {
+        this.$column.javaField = $column.javaField;
+    }
+
+    public $column.javaType get${AttrName}()
+    {
+        return $column.javaField;
+    }
+    #end
+#end
+
+#if($table.sub)
+    public List<${subClassName}> get${subClassName}List()
+    {
+        return ${subclassName}List;
+    }
+
+    public void set${subClassName}List(List<${subClassName}> ${subclassName}List)
+    {
+        this.${subclassName}List = ${subclassName}List;
+    }
+
+#end
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+    #foreach ($column in $columns)
+        #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
+            #set($AttrName=$column.javaField)
+        #else
+            #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+        #end
+            .append("${column.javaField}", get${AttrName}())
+    #end
+    #if($table.sub)
+            .append("${subclassName}List", get${subClassName}List())
+    #end
+        .toString();
+    }
+}
diff --git a/zhitan-generator/src/main/resources/vm/java/mapper.java.vm b/zhitan-generator/src/main/resources/vm/java/mapper.java.vm
new file mode 100644
index 0000000..1435b4e
--- /dev/null
+++ b/zhitan-generator/src/main/resources/vm/java/mapper.java.vm
@@ -0,0 +1,91 @@
+package ${packageName}.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import ${packageName}.domain.${ClassName};
+#if($table.sub)
+import ${packageName}.domain.${subClassName};
+#end
+
+/**
+ * ${functionName}Mapper鎺ュ彛
+ *
+ * @author ${author}
+ * @date ${datetime}
+ */
+public interface ${ClassName}Mapper extends BaseMapper<${ClassName}> {
+    /**
+     * 鏌ヨ${functionName}
+     *
+     * @param ${pkColumn.javaField} ${functionName}涓婚敭
+     * @return ${functionName}
+     */
+    public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField});
+
+    /**
+     * 鏌ヨ${functionName}鍒楄〃
+     *
+     * @param ${className} ${functionName}
+     * @return ${functionName}闆嗗悎
+     */
+    public List<${ClassName}> select${ClassName}List(${ClassName} ${className});
+
+    /**
+     * 鏂板${functionName}
+     *
+     * @param ${className} ${functionName}
+     * @return 缁撴灉
+     */
+    public int insert${ClassName}(${ClassName} ${className});
+
+    /**
+     * 淇敼${functionName}
+     *
+     * @param ${className} ${functionName}
+     * @return 缁撴灉
+     */
+    public int update${ClassName}(${ClassName} ${className});
+
+    /**
+     * 鍒犻櫎${functionName}
+     *
+     * @param ${pkColumn.javaField} ${functionName}涓婚敭
+     * @return 缁撴灉
+     */
+    public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField});
+
+    /**
+     * 鎵归噺鍒犻櫎${functionName}
+     *
+     * @param ${pkColumn.javaField}s 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s);
+    #if($table.sub)
+
+        /**
+         * 鎵归噺鍒犻櫎${subTable.functionName}
+         *
+         * @param ${pkColumn.javaField}s 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+         * @return 缁撴灉
+         */
+        public int delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaType}[] ${pkColumn.javaField}s);
+
+        /**
+         * 鎵归噺鏂板${subTable.functionName}
+         *
+         * @param ${subclassName}List ${subTable.functionName}鍒楄〃
+         * @return 缁撴灉
+         */
+        public int batch${subClassName}(List<${subClassName}> ${subclassName}List);
+
+
+        /**
+         * 閫氳繃${functionName}涓婚敭鍒犻櫎${subTable.functionName}淇℃伅
+         *
+         * @param ${pkColumn.javaField} ${functionName}ID
+         * @return 缁撴灉
+         */
+        public int delete${subClassName}By${subTableFkClassName}(${pkColumn.javaType} ${pkColumn.javaField});
+    #end
+}
diff --git a/zhitan-generator/src/main/resources/vm/java/service.java.vm b/zhitan-generator/src/main/resources/vm/java/service.java.vm
new file mode 100644
index 0000000..149a552
--- /dev/null
+++ b/zhitan-generator/src/main/resources/vm/java/service.java.vm
@@ -0,0 +1,61 @@
+package ${packageName}.service;
+
+import java.util.List;
+import ${packageName}.domain.${ClassName};
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * ${functionName}Service鎺ュ彛
+ *
+ * @author ${author}
+ * @date ${datetime}
+ */
+public interface I${ClassName}Service extends IService<${ClassName}> {
+    /**
+     * 鏌ヨ${functionName}
+     *
+     * @param ${pkColumn.javaField} ${functionName}涓婚敭
+     * @return ${functionName}
+     */
+    public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField});
+
+    /**
+     * 鏌ヨ${functionName}鍒楄〃
+     *
+     * @param ${className} ${functionName}
+     * @return ${functionName}闆嗗悎
+     */
+    public List<${ClassName}> select${ClassName}List(${ClassName} ${className});
+
+    /**
+     * 鏂板${functionName}
+     *
+     * @param ${className} ${functionName}
+     * @return 缁撴灉
+     */
+    public int insert${ClassName}(${ClassName} ${className});
+
+    /**
+     * 淇敼${functionName}
+     *
+     * @param ${className} ${functionName}
+     * @return 缁撴灉
+     */
+    public int update${ClassName}(${ClassName} ${className});
+
+    /**
+     * 鎵归噺鍒犻櫎${functionName}
+     *
+     * @param ${pkColumn.javaField}s 闇�瑕佸垹闄ょ殑${functionName}涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s);
+
+    /**
+     * 鍒犻櫎${functionName}淇℃伅
+     *
+     * @param ${pkColumn.javaField} ${functionName}涓婚敭
+     * @return 缁撴灉
+     */
+    public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField});
+}
diff --git a/zhitan-generator/src/main/resources/vm/java/serviceImpl.java.vm b/zhitan-generator/src/main/resources/vm/java/serviceImpl.java.vm
new file mode 100644
index 0000000..c7087f2
--- /dev/null
+++ b/zhitan-generator/src/main/resources/vm/java/serviceImpl.java.vm
@@ -0,0 +1,162 @@
+package ${packageName}.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import java.util.List;
+    #foreach ($column in $columns)
+        #if($column.javaField == 'createTime' || $column.javaField == 'updateTime')
+        import com.zhitan.common.utils.DateUtils;
+            #break
+        #end
+    #end
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+    #if($table.sub)
+    import java.util.ArrayList;
+    import com.zhitan.common.utils.StringUtils;
+    import org.springframework.transaction.annotation.Transactional;
+    import ${packageName}.domain.${subClassName};
+    #end
+import ${packageName}.mapper.${ClassName}Mapper;
+import ${packageName}.domain.${ClassName};
+import ${packageName}.service.I${ClassName}Service;
+
+/**
+ * ${functionName}Service涓氬姟灞傚鐞�
+ *
+ * @author ${author}
+ * @date ${datetime}
+ */
+@Service
+public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${ClassName}> implements I${ClassName}Service {
+    @Autowired
+    private ${ClassName}Mapper ${className}Mapper;
+
+    /**
+     * 鏌ヨ${functionName}
+     *
+     * @param ${pkColumn.javaField} ${functionName}涓婚敭
+     * @return ${functionName}
+     */
+    @Override
+    public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) {
+        return ${className}Mapper.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField});
+    }
+
+    /**
+     * 鏌ヨ${functionName}鍒楄〃
+     *
+     * @param ${className} ${functionName}
+     * @return ${functionName}
+     */
+    @Override
+    public List<${ClassName}> select${ClassName}List(${ClassName} ${className}) {
+        return ${className}Mapper.select${ClassName}List(${className});
+    }
+
+    /**
+     * 鏂板${functionName}
+     *
+     * @param ${className} ${functionName}
+     * @return 缁撴灉
+     */
+        #if($table.sub)
+        @Transactional
+        #end
+    @Override
+    public int insert${ClassName}(${ClassName} ${className}) {
+    #foreach ($column in $columns)
+        #if($column.javaField == 'createTime')
+        ${className}.setCreateTime(DateUtils.getNowDate());
+        #end
+    #end
+    #if($table.sub)
+        int rows = ${className}Mapper.insert${ClassName}(${className});
+        insert${subClassName}(${className});
+        return rows;
+    #else
+        return ${className}Mapper.insert${ClassName}(${className});
+    #end
+    }
+
+    /**
+     * 淇敼${functionName}
+     *
+     * @param ${className} ${functionName}
+     * @return 缁撴灉
+     */
+        #if($table.sub)
+        @Transactional
+        #end
+    @Override
+    public int update${ClassName}(${ClassName} ${className}) {
+        #foreach ($column in $columns)
+            #if($column.javaField == 'updateTime')
+        ${className}.setUpdateTime(DateUtils.getNowDate());
+            #end
+        #end
+        #if($table.sub)
+                ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}());
+            insert${subClassName}(${className});
+        #end
+        return ${className}Mapper.update${ClassName}(${className});
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎${functionName}
+     *
+     * @param ${pkColumn.javaField}s 闇�瑕佸垹闄ょ殑${functionName}涓婚敭
+     * @return 缁撴灉
+     */
+        #if($table.sub)
+        @Transactional
+        #end
+    @Override
+    public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s) {
+        #if($table.sub)
+                ${className}Mapper.delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaField}s);
+        #end
+        return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s);
+    }
+
+    /**
+     * 鍒犻櫎${functionName}淇℃伅
+     *
+     * @param ${pkColumn.javaField} ${functionName}涓婚敭
+     * @return 缁撴灉
+     */
+        #if($table.sub)
+        @Transactional
+        #end
+    @Override
+    public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) {
+        #if($table.sub)
+                ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${pkColumn.javaField});
+        #end
+        return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField});
+    }
+    #if($table.sub)
+
+        /**
+         * 鏂板${subTable.functionName}淇℃伅
+         *
+         * @param ${className} ${functionName}瀵硅薄
+         */
+        public void insert${subClassName}(${ClassName} ${className}) {
+            List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List();
+            ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}();
+            if (StringUtils.isNotNull(${subclassName}List))
+            {
+                List<${subClassName}> list = new ArrayList<${subClassName}>();
+                for (${subClassName} ${subclassName} : ${subclassName}List)
+                {
+                    ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField});
+                    list.add(${subclassName});
+                }
+                if (list.size() > 0)
+                {
+                        ${className}Mapper.batch${subClassName}(list);
+                }
+            }
+        }
+    #end
+}
diff --git a/zhitan-generator/src/main/resources/vm/java/sub-domain.java.vm b/zhitan-generator/src/main/resources/vm/java/sub-domain.java.vm
new file mode 100644
index 0000000..d6d51d1
--- /dev/null
+++ b/zhitan-generator/src/main/resources/vm/java/sub-domain.java.vm
@@ -0,0 +1,73 @@
+package ${packageName}.domain;
+
+    #foreach ($import in $subImportList)
+    import ${import};
+    #end
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+
+/**
+ * ${subTable.functionName}瀵硅薄 ${subTableName}
+ *
+ * @author ${author}
+ * @date ${datetime}
+ */
+public class ${subClassName} extends BaseEntity {
+private static final long serialVersionUID = 1L;
+
+#foreach ($column in $subTable.columns)
+    #if(!$table.isSuperColumn($column.javaField))
+    /** $column.columnComment */
+        #if($column.list)
+            #set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+            #if($parentheseIndex != -1)
+                #set($comment=$column.columnComment.substring(0, $parentheseIndex))
+            #else
+                #set($comment=$column.columnComment)
+            #end
+            #if($parentheseIndex != -1)
+            @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+            #elseif($column.javaType == 'Date')
+            @JsonFormat(pattern = "yyyy-MM-dd")
+            @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
+            #else
+            @Excel(name = "${comment}")
+            #end
+        #end
+    private $column.javaType $column.javaField;
+
+    #end
+#end
+#foreach ($column in $subTable.columns)
+    #if(!$table.isSuperColumn($column.javaField))
+        #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
+            #set($AttrName=$column.javaField)
+        #else
+            #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+        #end
+    public void set${AttrName}($column.javaType $column.javaField) {
+            this.$column.javaField = $column.javaField;
+            }
+
+    public $column.javaType get${AttrName}() {
+            return $column.javaField;
+            }
+    #end
+#end
+
+@Override
+public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+    #foreach ($column in $subTable.columns)
+        #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
+            #set($AttrName=$column.javaField)
+        #else
+            #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+        #end
+            .append("${column.javaField}", get${AttrName}())
+    #end
+        .toString();
+        }
+        }
diff --git a/zhitan-generator/src/main/resources/vm/js/api.js.vm b/zhitan-generator/src/main/resources/vm/js/api.js.vm
new file mode 100644
index 0000000..9295524
--- /dev/null
+++ b/zhitan-generator/src/main/resources/vm/js/api.js.vm
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨ${functionName}鍒楄〃
+export function list${BusinessName}(query) {
+  return request({
+    url: '/${moduleName}/${businessName}/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨ${functionName}璇︾粏
+export function get${BusinessName}(${pkColumn.javaField}) {
+  return request({
+    url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField},
+    method: 'get'
+  })
+}
+
+// 鏂板${functionName}
+export function add${BusinessName}(data) {
+  return request({
+    url: '/${moduleName}/${businessName}',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼${functionName}
+export function update${BusinessName}(data) {
+  return request({
+    url: '/${moduleName}/${businessName}',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎${functionName}
+export function del${BusinessName}(${pkColumn.javaField}) {
+  return request({
+    url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField},
+    method: 'delete'
+  })
+}
diff --git a/zhitan-generator/src/main/resources/vm/sql/sql.vm b/zhitan-generator/src/main/resources/vm/sql/sql.vm
new file mode 100644
index 0000000..0575583
--- /dev/null
+++ b/zhitan-generator/src/main/resources/vm/sql/sql.vm
@@ -0,0 +1,22 @@
+-- 鑿滃崟 SQL
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}:list', '#', 'admin', sysdate(), '', null, '${functionName}鑿滃崟');
+
+-- 鎸夐挳鐖惰彍鍗旾D
+SELECT @parentId := LAST_INSERT_ID();
+
+-- 鎸夐挳 SQL
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('${functionName}鏌ヨ', @parentId, '1',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:query',        '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('${functionName}鏂板', @parentId, '2',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:add',          '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('${functionName}淇敼', @parentId, '3',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:edit',         '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('${functionName}鍒犻櫎', @parentId, '4',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:remove',       '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('${functionName}瀵煎嚭', @parentId, '5',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:export',       '#', 'admin', sysdate(), '', null, '');
\ No newline at end of file
diff --git a/zhitan-generator/src/main/resources/vm/vue/index-tree.vue.vm b/zhitan-generator/src/main/resources/vm/vue/index-tree.vue.vm
new file mode 100644
index 0000000..4819c2a
--- /dev/null
+++ b/zhitan-generator/src/main/resources/vm/vue/index-tree.vue.vm
@@ -0,0 +1,505 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+#foreach($column in $columns)
+#if($column.query)
+#set($dictType=$column.dictType)
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.htmlType == "input")
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-input
+          v-model="queryParams.${column.javaField}"
+          placeholder="璇疯緭鍏�${comment}"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType)
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-select v-model="queryParams.${column.javaField}" placeholder="璇烽�夋嫨${comment}" clearable>
+          <el-option
+            v-for="dict in dict.type.${dictType}"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && $dictType)
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-select v-model="queryParams.${column.javaField}" placeholder="璇烽�夋嫨${comment}" clearable>
+          <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+        </el-select>
+      </el-form-item>
+#elseif($column.htmlType == "datetime" && $column.queryType != "BETWEEN")
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-date-picker clearable
+          v-model="queryParams.${column.javaField}"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="閫夋嫨${comment}">
+        </el-date-picker>
+      </el-form-item>
+#elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+      <el-form-item label="${comment}">
+        <el-date-picker
+          v-model="daterange${AttrName}"
+          style="width: 240px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="寮�濮嬫棩鏈�"
+          end-placeholder="缁撴潫鏃ユ湡"
+        ></el-date-picker>
+      </el-form-item>
+#end
+#end
+#end
+      <el-form-item>
+	    <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['${moduleName}:${businessName}:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          plain
+          icon="el-icon-sort"
+          size="mini"
+          @click="toggleExpandAll"
+        >灞曞紑/鎶樺彔</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table
+      v-if="refreshTable"
+      v-loading="loading"
+      :data="${businessName}List"
+      row-key="${treeCode}"
+      :default-expand-all="isExpandAll"
+      :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
+    >
+#foreach($column in $columns)
+#set($javaField=$column.javaField)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.pk)
+#elseif($column.list && $column.htmlType == "datetime")
+      <el-table-column label="${comment}" align="center" prop="${javaField}" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.${javaField}, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+#elseif($column.list && $column.htmlType == "imageUpload")
+      <el-table-column label="${comment}" align="center" prop="${javaField}" width="100">
+        <template slot-scope="scope">
+          <image-preview :src="scope.row.${javaField}" :width="50" :height="50"/>
+        </template>
+      </el-table-column>
+#elseif($column.list && "" != $column.dictType)
+      <el-table-column label="${comment}" align="center" prop="${javaField}">
+        <template slot-scope="scope">
+#if($column.htmlType == "checkbox")
+          <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.${javaField} ? scope.row.${javaField}.split(',') : []"/>
+#else
+          <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.${javaField}"/>
+#end
+        </template>
+      </el-table-column>
+#elseif($column.list && "" != $javaField)
+#if(${foreach.index} == 1)
+      <el-table-column label="${comment}" prop="${javaField}" />
+#else
+      <el-table-column label="${comment}" align="center" prop="${javaField}" />
+#end
+#end
+#end
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['${moduleName}:${businessName}:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-plus"
+            @click="handleAdd(scope.row)"
+            v-hasPermi="['${moduleName}:${businessName}:add']"
+          >鏂板</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['${moduleName}:${businessName}:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 娣诲姞鎴栦慨鏀�${functionName}瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+#foreach($column in $columns)
+#set($field=$column.javaField)
+#if($column.insert && !$column.pk)
+#if(($column.usableColumn) || (!$column.superColumn))
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#set($dictType=$column.dictType)
+#if("" != $treeParentCode && $column.javaField == $treeParentCode)
+        <el-form-item label="${comment}" prop="${treeParentCode}">
+          <treeselect v-model="form.${treeParentCode}" :options="${businessName}Options" :normalizer="normalizer" placeholder="璇烽�夋嫨${comment}" />
+        </el-form-item>
+#elseif($column.htmlType == "input")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-input v-model="form.${field}" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+#elseif($column.htmlType == "imageUpload")
+        <el-form-item label="${comment}" prop="${field}">
+          <image-upload v-model="form.${field}"/>
+        </el-form-item>
+#elseif($column.htmlType == "fileUpload")
+        <el-form-item label="${comment}" prop="${field}">
+          <file-upload v-model="form.${field}"/>
+        </el-form-item>
+#elseif($column.htmlType == "editor")
+        <el-form-item label="${comment}">
+          <editor v-model="form.${field}" :min-height="192"/>
+        </el-form-item>
+#elseif($column.htmlType == "select" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-select v-model="form.${field}" placeholder="璇烽�夋嫨${comment}">
+            <el-option
+              v-for="dict in dict.type.${dictType}"
+              :key="dict.value"
+              :label="dict.label"
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+              :value="parseInt(dict.value)"
+#else
+              :value="dict.value"
+#end
+            ></el-option>
+          </el-select>
+        </el-form-item>
+#elseif($column.htmlType == "select" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-select v-model="form.${field}" placeholder="璇烽�夋嫨${comment}">
+            <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+          </el-select>
+        </el-form-item>
+#elseif($column.htmlType == "checkbox" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-checkbox-group v-model="form.${field}">
+            <el-checkbox
+              v-for="dict in dict.type.${dictType}"
+              :key="dict.value"
+              :label="dict.value">
+              {{dict.label}}
+            </el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+#elseif($column.htmlType == "checkbox" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-checkbox-group v-model="form.${field}">
+            <el-checkbox>璇烽�夋嫨瀛楀吀鐢熸垚</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+#elseif($column.htmlType == "radio" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-radio-group v-model="form.${field}">
+            <el-radio
+              v-for="dict in dict.type.${dictType}"
+              :key="dict.value"
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+              :label="parseInt(dict.value)"
+#else
+              :label="dict.value"
+#end
+            >{{dict.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+#elseif($column.htmlType == "radio" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-radio-group v-model="form.${field}">
+            <el-radio label="1">璇烽�夋嫨瀛楀吀鐢熸垚</el-radio>
+          </el-radio-group>
+        </el-form-item>
+#elseif($column.htmlType == "datetime")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-date-picker clearable
+            v-model="form.${field}"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="閫夋嫨${comment}">
+          </el-date-picker>
+        </el-form-item>
+#elseif($column.htmlType == "textarea")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-input v-model="form.${field}" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+#end
+#end
+#end
+#end
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from "@/api/${moduleName}/${businessName}";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+export default {
+  name: "${BusinessName}",
+#if(${dicts} != '')
+  dicts: [${dicts}],
+#end
+  components: {
+    Treeselect
+  },
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // ${functionName}琛ㄦ牸鏁版嵁
+      ${businessName}List: [],
+      // ${functionName}鏍戦�夐」
+      ${businessName}Options: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏄惁灞曞紑锛岄粯璁ゅ叏閮ㄥ睍寮�
+      isExpandAll: true,
+      // 閲嶆柊娓叉煋琛ㄦ牸鐘舵��
+      refreshTable: true,
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+      // $comment鏃堕棿鑼冨洿
+      daterange${AttrName}: [],
+#end
+#end
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+#foreach ($column in $columns)
+#if($column.query)
+        $column.javaField: null#if($foreach.count != $columns.size()),#end
+#end
+#end
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+#foreach ($column in $columns)
+#if($column.required)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+        $column.javaField: [
+          { required: true, message: "$comment涓嶈兘涓虹┖", trigger: #if($column.htmlType == "select" || $column.htmlType == "radio")"change"#else"blur"#end }
+        ]#if($foreach.count != $columns.size()),#end
+#end
+#end
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨ${functionName}鍒楄〃 */
+    getList() {
+      this.loading = true;
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+      this.queryParams.params = {};
+#break
+#end
+#end
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+      if (null != this.daterange${AttrName} && '' != this.daterange${AttrName}) {
+        this.queryParams.params["begin${AttrName}"] = this.daterange${AttrName}[0];
+        this.queryParams.params["end${AttrName}"] = this.daterange${AttrName}[1];
+      }
+#end
+#end
+      list${BusinessName}(this.queryParams).then(response => {
+        this.${businessName}List = this.handleTree(response.data, "${treeCode}", "${treeParentCode}");
+        this.loading = false;
+      });
+    },
+    /** 杞崲${functionName}鏁版嵁缁撴瀯 */
+    normalizer(node) {
+      if (node.children && !node.children.length) {
+        delete node.children;
+      }
+      return {
+        id: node.${treeCode},
+        label: node.${treeName},
+        children: node.children
+      };
+    },
+	/** 鏌ヨ${functionName}涓嬫媺鏍戠粨鏋� */
+    getTreeselect() {
+      list${BusinessName}().then(response => {
+        this.${businessName}Options = [];
+        const data = { ${treeCode}: 0, ${treeName}: '椤剁骇鑺傜偣', children: [] };
+        data.children = this.handleTree(response.data, "${treeCode}", "${treeParentCode}");
+        this.${businessName}Options.push(data);
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+        $column.javaField: []#if($foreach.count != $columns.size()),#end
+#else
+        $column.javaField: null#if($foreach.count != $columns.size()),#end
+#end
+#end
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+      this.daterange${AttrName} = [];
+#end
+#end
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd(row) {
+      this.reset();
+      this.getTreeselect();
+      if (row != null && row.${treeCode}) {
+        this.form.${treeParentCode} = row.${treeCode};
+      } else {
+        this.form.${treeParentCode} = 0;
+      }
+      this.open = true;
+      this.title = "娣诲姞${functionName}";
+    },
+    /** 灞曞紑/鎶樺彔鎿嶄綔 */
+    toggleExpandAll() {
+      this.refreshTable = false;
+      this.isExpandAll = !this.isExpandAll;
+      this.$nextTick(() => {
+        this.refreshTable = true;
+      });
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      this.getTreeselect();
+      if (row != null) {
+        this.form.${treeParentCode} = row.${treeParentCode};
+      }
+      get${BusinessName}(row.${pkColumn.javaField}).then(response => {
+        this.form = response.data;
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+        this.form.$column.javaField = this.form.${column.javaField}.split(",");
+#end
+#end
+        this.open = true;
+        this.title = "淇敼${functionName}";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.#[[$]]#refs["form"].validate(valid => {
+        if (valid) {
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+          this.form.$column.javaField = this.form.${column.javaField}.join(",");
+#end
+#end
+          if (this.form.${pkColumn.javaField} != null) {
+            update${BusinessName}(this.form).then(response => {
+              this.#[[$modal]]#.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            add${BusinessName}(this.form).then(response => {
+              this.#[[$modal]]#.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      this.#[[$modal]]#.confirm('鏄惁纭鍒犻櫎${functionName}缂栧彿涓�"' + row.${pkColumn.javaField} + '"鐨勬暟鎹」锛�').then(function() {
+        return del${BusinessName}(row.${pkColumn.javaField});
+      }).then(() => {
+        this.getList();
+        this.#[[$modal]]#.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    }
+  }
+};
+</script>
diff --git a/zhitan-generator/src/main/resources/vm/vue/index.vue.vm b/zhitan-generator/src/main/resources/vm/vue/index.vue.vm
new file mode 100644
index 0000000..6296014
--- /dev/null
+++ b/zhitan-generator/src/main/resources/vm/vue/index.vue.vm
@@ -0,0 +1,602 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+#foreach($column in $columns)
+#if($column.query)
+#set($dictType=$column.dictType)
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.htmlType == "input")
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-input
+          v-model="queryParams.${column.javaField}"
+          placeholder="璇疯緭鍏�${comment}"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType)
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-select v-model="queryParams.${column.javaField}" placeholder="璇烽�夋嫨${comment}" clearable>
+          <el-option
+            v-for="dict in dict.type.${dictType}"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && $dictType)
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-select v-model="queryParams.${column.javaField}" placeholder="璇烽�夋嫨${comment}" clearable>
+          <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+        </el-select>
+      </el-form-item>
+#elseif($column.htmlType == "datetime" && $column.queryType != "BETWEEN")
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-date-picker clearable
+          v-model="queryParams.${column.javaField}"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨${comment}">
+        </el-date-picker>
+      </el-form-item>
+#elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+      <el-form-item label="${comment}">
+        <el-date-picker
+          v-model="daterange${AttrName}"
+          style="width: 240px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="寮�濮嬫棩鏈�"
+          end-placeholder="缁撴潫鏃ユ湡"
+        ></el-date-picker>
+      </el-form-item>
+#end
+#end
+#end
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['${moduleName}:${businessName}:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['${moduleName}:${businessName}:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['${moduleName}:${businessName}:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['${moduleName}:${businessName}:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="${businessName}List" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+#foreach($column in $columns)
+#set($javaField=$column.javaField)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.pk)
+      <el-table-column label="${comment}" align="center" prop="${javaField}" />
+#elseif($column.list && $column.htmlType == "datetime")
+      <el-table-column label="${comment}" align="center" prop="${javaField}" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.${javaField}, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+#elseif($column.list && $column.htmlType == "imageUpload")
+      <el-table-column label="${comment}" align="center" prop="${javaField}" width="100">
+        <template slot-scope="scope">
+          <image-preview :src="scope.row.${javaField}" :width="50" :height="50"/>
+        </template>
+      </el-table-column>
+#elseif($column.list && "" != $column.dictType)
+      <el-table-column label="${comment}" align="center" prop="${javaField}">
+        <template slot-scope="scope">
+#if($column.htmlType == "checkbox")
+          <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.${javaField} ? scope.row.${javaField}.split(',') : []"/>
+#else
+          <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.${javaField}"/>
+#end
+        </template>
+      </el-table-column>
+#elseif($column.list && "" != $javaField)
+      <el-table-column label="${comment}" align="center" prop="${javaField}" />
+#end
+#end
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['${moduleName}:${businessName}:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['${moduleName}:${businessName}:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀�${functionName}瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+#foreach($column in $columns)
+#set($field=$column.javaField)
+#if($column.insert && !$column.pk)
+#if(($column.usableColumn) || (!$column.superColumn))
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#set($dictType=$column.dictType)
+#if($column.htmlType == "input")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-input v-model="form.${field}" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+#elseif($column.htmlType == "imageUpload")
+        <el-form-item label="${comment}" prop="${field}">
+          <image-upload v-model="form.${field}"/>
+        </el-form-item>
+#elseif($column.htmlType == "fileUpload")
+        <el-form-item label="${comment}" prop="${field}">
+          <file-upload v-model="form.${field}"/>
+        </el-form-item>
+#elseif($column.htmlType == "editor")
+        <el-form-item label="${comment}">
+          <editor v-model="form.${field}" :min-height="192"/>
+        </el-form-item>
+#elseif($column.htmlType == "select" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-select v-model="form.${field}" placeholder="璇烽�夋嫨${comment}">
+            <el-option
+              v-for="dict in dict.type.${dictType}"
+              :key="dict.value"
+              :label="dict.label"
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+              :value="parseInt(dict.value)"
+#else
+              :value="dict.value"
+#end
+            ></el-option>
+          </el-select>
+        </el-form-item>
+#elseif($column.htmlType == "select" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-select v-model="form.${field}" placeholder="璇烽�夋嫨${comment}">
+            <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+          </el-select>
+        </el-form-item>
+#elseif($column.htmlType == "checkbox" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-checkbox-group v-model="form.${field}">
+            <el-checkbox
+              v-for="dict in dict.type.${dictType}"
+              :key="dict.value"
+              :label="dict.value">
+              {{dict.label}}
+            </el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+#elseif($column.htmlType == "checkbox" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-checkbox-group v-model="form.${field}">
+            <el-checkbox>璇烽�夋嫨瀛楀吀鐢熸垚</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+#elseif($column.htmlType == "radio" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-radio-group v-model="form.${field}">
+            <el-radio
+              v-for="dict in dict.type.${dictType}"
+              :key="dict.value"
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+              :label="parseInt(dict.value)"
+#else
+              :label="dict.value"
+#end
+            >{{dict.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+#elseif($column.htmlType == "radio" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-radio-group v-model="form.${field}">
+            <el-radio label="1">璇烽�夋嫨瀛楀吀鐢熸垚</el-radio>
+          </el-radio-group>
+        </el-form-item>
+#elseif($column.htmlType == "datetime")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-date-picker clearable
+            v-model="form.${field}"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨${comment}">
+          </el-date-picker>
+        </el-form-item>
+#elseif($column.htmlType == "textarea")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-input v-model="form.${field}" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+#end
+#end
+#end
+#end
+#if($table.sub)
+        <el-divider content-position="center">${subTable.functionName}淇℃伅</el-divider>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+            <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd${subClassName}">娣诲姞</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDelete${subClassName}">鍒犻櫎</el-button>
+          </el-col>
+        </el-row>
+        <el-table :data="${subclassName}List" :row-class-name="row${subClassName}Index" @selection-change="handle${subClassName}SelectionChange" ref="${subclassName}">
+          <el-table-column type="selection" width="50" align="center" />
+          <el-table-column label="搴忓彿" align="center" prop="index" width="50"/>
+#foreach($column in $subTable.columns)
+#set($javaField=$column.javaField)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.pk || $javaField == ${subTableFkclassName})
+#elseif($column.list && $column.htmlType == "input")
+          <el-table-column label="$comment" prop="${javaField}" width="150">
+            <template slot-scope="scope">
+              <el-input v-model="scope.row.$javaField" placeholder="璇疯緭鍏�$comment" />
+            </template>
+          </el-table-column>
+#elseif($column.list && $column.htmlType == "datetime")
+          <el-table-column label="$comment" prop="${javaField}" width="240">
+            <template slot-scope="scope">
+              <el-date-picker clearable v-model="scope.row.$javaField" type="date" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨$comment" />
+            </template>
+          </el-table-column>
+#elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" != $column.dictType)
+          <el-table-column label="$comment" prop="${javaField}" width="150">
+            <template slot-scope="scope">
+              <el-select v-model="scope.row.$javaField" placeholder="璇烽�夋嫨$comment">
+                <el-option
+                  v-for="dict in dict.type.$column.dictType"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </template>
+          </el-table-column>
+#elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" == $column.dictType)
+          <el-table-column label="$comment" prop="${javaField}" width="150">
+            <template slot-scope="scope">
+              <el-select v-model="scope.row.$javaField" placeholder="璇烽�夋嫨$comment">
+                <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+              </el-select>
+            </template>
+          </el-table-column>
+#end
+#end
+        </el-table>
+#end
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from "@/api/${moduleName}/${businessName}";
+
+export default {
+  name: "${BusinessName}",
+#if(${dicts} != '')
+  dicts: [${dicts}],
+#end
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+#if($table.sub)
+      // 瀛愯〃閫変腑鏁版嵁
+      checked${subClassName}: [],
+#end
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // ${functionName}琛ㄦ牸鏁版嵁
+      ${businessName}List: [],
+#if($table.sub)
+      // ${subTable.functionName}琛ㄦ牸鏁版嵁
+      ${subclassName}List: [],
+#end
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+      // $comment鏃堕棿鑼冨洿
+      daterange${AttrName}: [],
+#end
+#end
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+#foreach ($column in $columns)
+#if($column.query)
+        $column.javaField: null#if($foreach.count != $columns.size()),#end
+#end
+#end
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+#foreach ($column in $columns)
+#if($column.required)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+        $column.javaField: [
+          { required: true, message: "$comment涓嶈兘涓虹┖", trigger: #if($column.htmlType == "select" || $column.htmlType == "radio")"change"#else"blur"#end }
+        ]#if($foreach.count != $columns.size()),#end
+#end
+#end
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨ${functionName}鍒楄〃 */
+    getList() {
+      this.loading = true;
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+      this.queryParams.params = {};
+#break
+#end
+#end
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+      if (null != this.daterange${AttrName} && '' != this.daterange${AttrName}) {
+        this.queryParams.params["begin${AttrName}"] = this.daterange${AttrName}[0];
+        this.queryParams.params["end${AttrName}"] = this.daterange${AttrName}[1];
+      }
+#end
+#end
+      list${BusinessName}(this.queryParams).then(response => {
+        this.${businessName}List = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+        $column.javaField: []#if($foreach.count != $columns.size()),#end
+#else
+        $column.javaField: null#if($foreach.count != $columns.size()),#end
+#end
+#end
+      };
+#if($table.sub)
+      this.${subclassName}List = [];
+#end
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+      this.daterange${AttrName} = [];
+#end
+#end
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.${pkColumn.javaField})
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞${functionName}";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const ${pkColumn.javaField} = row.${pkColumn.javaField} || this.ids
+      get${BusinessName}(${pkColumn.javaField}).then(response => {
+        this.form = response.data;
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+        this.form.$column.javaField = this.form.${column.javaField}.split(",");
+#end
+#end
+#if($table.sub)
+        this.${subclassName}List = response.data.${subclassName}List;
+#end
+        this.open = true;
+        this.title = "淇敼${functionName}";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.#[[$]]#refs["form"].validate(valid => {
+        if (valid) {
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+          this.form.$column.javaField = this.form.${column.javaField}.join(",");
+#end
+#end
+#if($table.sub)
+          this.form.${subclassName}List = this.${subclassName}List;
+#end
+          if (this.form.${pkColumn.javaField} != null) {
+            update${BusinessName}(this.form).then(response => {
+              this.#[[$modal]]#.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            add${BusinessName}(this.form).then(response => {
+              this.#[[$modal]]#.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const ${pkColumn.javaField}s = row.${pkColumn.javaField} || this.ids;
+      this.#[[$modal]]#.confirm('鏄惁纭鍒犻櫎${functionName}缂栧彿涓�"' + ${pkColumn.javaField}s + '"鐨勬暟鎹」锛�').then(function() {
+        return del${BusinessName}(${pkColumn.javaField}s);
+      }).then(() => {
+        this.getList();
+        this.#[[$modal]]#.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+#if($table.sub)
+	/** ${subTable.functionName}搴忓彿 */
+    row${subClassName}Index({ row, rowIndex }) {
+      row.index = rowIndex + 1;
+    },
+    /** ${subTable.functionName}娣诲姞鎸夐挳鎿嶄綔 */
+    handleAdd${subClassName}() {
+      let obj = {};
+#foreach($column in $subTable.columns)
+#if($column.pk || $column.javaField == ${subTableFkclassName})
+#elseif($column.list && "" != $javaField)
+      obj.$column.javaField = "";
+#end
+#end
+      this.${subclassName}List.push(obj);
+    },
+    /** ${subTable.functionName}鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete${subClassName}() {
+      if (this.checked${subClassName}.length == 0) {
+        this.#[[$modal]]#.msgError("璇峰厛閫夋嫨瑕佸垹闄ょ殑${subTable.functionName}鏁版嵁");
+      } else {
+        const ${subclassName}List = this.${subclassName}List;
+        const checked${subClassName} = this.checked${subClassName};
+        this.${subclassName}List = ${subclassName}List.filter(function(item) {
+          return checked${subClassName}.indexOf(item.index) == -1
+        });
+      }
+    },
+    /** 澶嶉�夋閫変腑鏁版嵁 */
+    handle${subClassName}SelectionChange(selection) {
+      this.checked${subClassName} = selection.map(item => item.index)
+    },
+#end
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('${moduleName}/${businessName}/export', {
+        ...this.queryParams
+      }, `${businessName}_#[[${new Date().getTime()}]]#.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/zhitan-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm b/zhitan-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm
new file mode 100644
index 0000000..c54d62b
--- /dev/null
+++ b/zhitan-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm
@@ -0,0 +1,474 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+#foreach($column in $columns)
+#if($column.query)
+#set($dictType=$column.dictType)
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.htmlType == "input")
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-input
+          v-model="queryParams.${column.javaField}"
+          placeholder="璇疯緭鍏�${comment}"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType)
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-select v-model="queryParams.${column.javaField}" placeholder="璇烽�夋嫨${comment}" clearable>
+          <el-option
+            v-for="dict in ${dictType}"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && $dictType)
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-select v-model="queryParams.${column.javaField}" placeholder="璇烽�夋嫨${comment}" clearable>
+          <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+        </el-select>
+      </el-form-item>
+#elseif($column.htmlType == "datetime" && $column.queryType != "BETWEEN")
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-date-picker clearable
+          v-model="queryParams.${column.javaField}"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="閫夋嫨${comment}">
+        </el-date-picker>
+      </el-form-item>
+#elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+      <el-form-item label="${comment}" style="width: 308px">
+        <el-date-picker
+          v-model="daterange${AttrName}"
+          value-format="YYYY-MM-DD"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="寮�濮嬫棩鏈�"
+          end-placeholder="缁撴潫鏃ユ湡"
+        ></el-date-picker>
+      </el-form-item>
+#end
+#end
+#end
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['${moduleName}:${businessName}:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          plain
+          icon="Sort"
+          @click="toggleExpandAll"
+        >灞曞紑/鎶樺彔</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table
+      v-if="refreshTable"
+      v-loading="loading"
+      :data="${businessName}List"
+      row-key="${treeCode}"
+      :default-expand-all="isExpandAll"
+      :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
+    >
+#foreach($column in $columns)
+#set($javaField=$column.javaField)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.pk)
+#elseif($column.list && $column.htmlType == "datetime")
+      <el-table-column label="${comment}" align="center" prop="${javaField}" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.${javaField}, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+#elseif($column.list && $column.htmlType == "imageUpload")
+      <el-table-column label="${comment}" align="center" prop="${javaField}" width="100">
+        <template #default="scope">
+          <image-preview :src="scope.row.${javaField}" :width="50" :height="50"/>
+        </template>
+      </el-table-column>
+#elseif($column.list && "" != $column.dictType)
+      <el-table-column label="${comment}" align="center" prop="${javaField}">
+        <template #default="scope">
+#if($column.htmlType == "checkbox")
+          <dict-tag :options="${column.dictType}" :value="scope.row.${javaField} ? scope.row.${javaField}.split(',') : []"/>
+#else
+          <dict-tag :options="${column.dictType}" :value="scope.row.${javaField}"/>
+#end
+        </template>
+      </el-table-column>
+#elseif($column.list && "" != $javaField)
+#if(${foreach.index} == 1)
+      <el-table-column label="${comment}" prop="${javaField}" />
+#else
+      <el-table-column label="${comment}" align="center" prop="${javaField}" />
+#end
+#end
+#end
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['${moduleName}:${businessName}:edit']">淇敼</el-button>
+          <el-button link type="primary" icon="Plus" @click="handleAdd(scope.row)" v-hasPermi="['${moduleName}:${businessName}:add']">鏂板</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['${moduleName}:${businessName}:remove']">鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 娣诲姞鎴栦慨鏀�${functionName}瀵硅瘽妗� -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="${businessName}Ref" :model="form" :rules="rules" label-width="80px">
+#foreach($column in $columns)
+#set($field=$column.javaField)
+#if($column.insert && !$column.pk)
+#if(($column.usableColumn) || (!$column.superColumn))
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#set($dictType=$column.dictType)
+#if("" != $treeParentCode && $column.javaField == $treeParentCode)
+        <el-form-item label="${comment}" prop="${treeParentCode}">
+          <el-tree-select
+            v-model="form.${treeParentCode}"
+            :data="${businessName}Options"
+            :props="{ value: '${treeCode}', label: '${treeName}', children: 'children' }"
+            value-key="${treeCode}"
+            placeholder="璇烽�夋嫨${comment}"
+            check-strictly
+          />
+        </el-form-item>
+#elseif($column.htmlType == "input")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-input v-model="form.${field}" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+#elseif($column.htmlType == "imageUpload")
+        <el-form-item label="${comment}" prop="${field}">
+          <image-upload v-model="form.${field}"/>
+        </el-form-item>
+#elseif($column.htmlType == "fileUpload")
+        <el-form-item label="${comment}" prop="${field}">
+          <file-upload v-model="form.${field}"/>
+        </el-form-item>
+#elseif($column.htmlType == "editor")
+        <el-form-item label="${comment}">
+          <editor v-model="form.${field}" :min-height="192"/>
+        </el-form-item>
+#elseif($column.htmlType == "select" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-select v-model="form.${field}" placeholder="璇烽�夋嫨${comment}">
+            <el-option
+              v-for="dict in ${dictType}"
+              :key="dict.value"
+              :label="dict.label"
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+              :value="parseInt(dict.value)"
+#else
+              :value="dict.value"
+#end
+            ></el-option>
+          </el-select>
+        </el-form-item>
+#elseif($column.htmlType == "select" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-select v-model="form.${field}" placeholder="璇烽�夋嫨${comment}">
+            <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+          </el-select>
+        </el-form-item>
+#elseif($column.htmlType == "checkbox" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-checkbox-group v-model="form.${field}">
+            <el-checkbox
+              v-for="dict in ${dictType}"
+              :key="dict.value"
+              :label="dict.value">
+              {{dict.label}}
+            </el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+#elseif($column.htmlType == "checkbox" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-checkbox-group v-model="form.${field}">
+            <el-checkbox>璇烽�夋嫨瀛楀吀鐢熸垚</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+#elseif($column.htmlType == "radio" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-radio-group v-model="form.${field}">
+            <el-radio
+              v-for="dict in ${dictType}"
+              :key="dict.value"
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+              :label="parseInt(dict.value)"
+#else
+              :label="dict.value"
+#end
+            >{{dict.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+#elseif($column.htmlType == "radio" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-radio-group v-model="form.${field}">
+            <el-radio label="1">璇烽�夋嫨瀛楀吀鐢熸垚</el-radio>
+          </el-radio-group>
+        </el-form-item>
+#elseif($column.htmlType == "datetime")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-date-picker clearable
+            v-model="form.${field}"
+            type="date"
+            value-format="YYYY-MM-DD"
+            placeholder="閫夋嫨${comment}">
+          </el-date-picker>
+        </el-form-item>
+#elseif($column.htmlType == "textarea")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-input v-model="form.${field}" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+#end
+#end
+#end
+#end
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+          <el-button @click="cancel">鍙� 娑�</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="${BusinessName}">
+import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from "@/api/${moduleName}/${businessName}";
+
+const { proxy } = getCurrentInstance();
+#if(${dicts} != '')
+#set($dictsNoSymbol=$dicts.replace("'", ""))
+const { ${dictsNoSymbol} } = proxy.useDict(${dicts});
+#end
+
+const ${businessName}List = ref([]);
+const ${businessName}Options = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const title = ref("");
+const isExpandAll = ref(true);
+const refreshTable = ref(true);
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+const daterange${AttrName} = ref([]);
+#end
+#end
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    #foreach ($column in $columns)
+#if($column.query)
+    $column.javaField: null#if($foreach.count != $columns.size()),#end
+#end
+#end
+  },
+  rules: {
+    #foreach ($column in $columns)
+#if($column.required)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+    $column.javaField: [
+      { required: true, message: "$comment涓嶈兘涓虹┖", trigger: #if($column.htmlType == "select" || $column.htmlType == "radio")"change"#else"blur"#end }
+    ]#if($foreach.count != $columns.size()),#end
+#end
+#end
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 鏌ヨ${functionName}鍒楄〃 */
+function getList() {
+  loading.value = true;
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+  queryParams.value.params = {};
+#break
+#end
+#end
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+  if (null != daterange${AttrName} && '' != daterange${AttrName}) {
+    queryParams.value.params["begin${AttrName}"] = daterange${AttrName}.value[0];
+    queryParams.value.params["end${AttrName}"] = daterange${AttrName}.value[1];
+  }
+#end
+#end
+  list${BusinessName}(queryParams.value).then(response => {
+    ${businessName}List.value = proxy.handleTree(response.data, "${treeCode}", "${treeParentCode}");
+    loading.value = false;
+  });
+}
+
+/** 鏌ヨ${functionName}涓嬫媺鏍戠粨鏋� */
+function getTreeselect() {
+  list${BusinessName}().then(response => {
+    ${businessName}Options.value = [];
+    const data = { ${treeCode}: 0, ${treeName}: '椤剁骇鑺傜偣', children: [] };
+    data.children = proxy.handleTree(response.data, "${treeCode}", "${treeParentCode}");
+    ${businessName}Options.value.push(data);
+  });
+}
+	
+// 鍙栨秷鎸夐挳
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+// 琛ㄥ崟閲嶇疆
+function reset() {
+  form.value = {
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+    $column.javaField: []#if($foreach.count != $columns.size()),#end
+#else
+    $column.javaField: null#if($foreach.count != $columns.size()),#end
+#end
+#end
+  };
+  proxy.resetForm("${businessName}Ref");
+}
+
+/** 鎼滅储鎸夐挳鎿嶄綔 */
+function handleQuery() {
+  getList();
+}
+
+/** 閲嶇疆鎸夐挳鎿嶄綔 */
+function resetQuery() {
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+  daterange${AttrName}.value = [];
+#end
+#end
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+/** 鏂板鎸夐挳鎿嶄綔 */
+function handleAdd(row) {
+  reset();
+  getTreeselect();
+  if (row != null && row.${treeCode}) {
+    form.value.${treeParentCode} = row.${treeCode};
+  } else {
+    form.value.${treeParentCode} = 0;
+  }
+  open.value = true;
+  title.value = "娣诲姞${functionName}";
+}
+
+/** 灞曞紑/鎶樺彔鎿嶄綔 */
+function toggleExpandAll() {
+  refreshTable.value = false;
+  isExpandAll.value = !isExpandAll.value;
+  nextTick(() => {
+    refreshTable.value = true;
+  });
+}
+
+/** 淇敼鎸夐挳鎿嶄綔 */
+async function handleUpdate(row) {
+  reset();
+  await getTreeselect();
+  if (row != null) {
+    form.value.${treeParentCode} = row.${treeParentCode};
+  }
+  get${BusinessName}(row.${pkColumn.javaField}).then(response => {
+    form.value = response.data;
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+    form.value.$column.javaField = form.value.${column.javaField}.split(",");
+#end
+#end
+    open.value = true;
+    title.value = "淇敼${functionName}";
+  });
+}
+
+/** 鎻愪氦鎸夐挳 */
+function submitForm() {
+  proxy.#[[$]]#refs["${businessName}Ref"].validate(valid => {
+    if (valid) {
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+      form.value.$column.javaField = form.value.${column.javaField}.join(",");
+#end
+#end
+      if (form.value.${pkColumn.javaField} != null) {
+        update${BusinessName}(form.value).then(response => {
+          proxy.#[[$modal]]#.msgSuccess("淇敼鎴愬姛");
+          open.value = false;
+          getList();
+        });
+      } else {
+        add${BusinessName}(form.value).then(response => {
+          proxy.#[[$modal]]#.msgSuccess("鏂板鎴愬姛");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+/** 鍒犻櫎鎸夐挳鎿嶄綔 */
+function handleDelete(row) {
+  proxy.#[[$modal]]#.confirm('鏄惁纭鍒犻櫎${functionName}缂栧彿涓�"' + row.${pkColumn.javaField} + '"鐨勬暟鎹」锛�').then(function() {
+    return del${BusinessName}(row.${pkColumn.javaField});
+  }).then(() => {
+    getList();
+    proxy.#[[$modal]]#.msgSuccess("鍒犻櫎鎴愬姛");
+  }).catch(() => {});
+}
+
+getList();
+</script>
diff --git a/zhitan-generator/src/main/resources/vm/vue/v3/index.vue.vm b/zhitan-generator/src/main/resources/vm/vue/v3/index.vue.vm
new file mode 100644
index 0000000..8b25665
--- /dev/null
+++ b/zhitan-generator/src/main/resources/vm/vue/v3/index.vue.vm
@@ -0,0 +1,590 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+#foreach($column in $columns)
+#if($column.query)
+#set($dictType=$column.dictType)
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.htmlType == "input")
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-input
+          v-model="queryParams.${column.javaField}"
+          placeholder="璇疯緭鍏�${comment}"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType)
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-select v-model="queryParams.${column.javaField}" placeholder="璇烽�夋嫨${comment}" clearable>
+          <el-option
+            v-for="dict in ${dictType}"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && $dictType)
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-select v-model="queryParams.${column.javaField}" placeholder="璇烽�夋嫨${comment}" clearable>
+          <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+        </el-select>
+      </el-form-item>
+#elseif($column.htmlType == "datetime" && $column.queryType != "BETWEEN")
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-date-picker clearable
+          v-model="queryParams.${column.javaField}"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="璇烽�夋嫨${comment}">
+        </el-date-picker>
+      </el-form-item>
+#elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+      <el-form-item label="${comment}" style="width: 308px">
+        <el-date-picker
+          v-model="daterange${AttrName}"
+          value-format="YYYY-MM-DD"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="寮�濮嬫棩鏈�"
+          end-placeholder="缁撴潫鏃ユ湡"
+        ></el-date-picker>
+      </el-form-item>
+#end
+#end
+#end
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['${moduleName}:${businessName}:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['${moduleName}:${businessName}:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['${moduleName}:${businessName}:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['${moduleName}:${businessName}:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="${businessName}List" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+#foreach($column in $columns)
+#set($javaField=$column.javaField)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.pk)
+      <el-table-column label="${comment}" align="center" prop="${javaField}" />
+#elseif($column.list && $column.htmlType == "datetime")
+      <el-table-column label="${comment}" align="center" prop="${javaField}" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.${javaField}, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+#elseif($column.list && $column.htmlType == "imageUpload")
+      <el-table-column label="${comment}" align="center" prop="${javaField}" width="100">
+        <template #default="scope">
+          <image-preview :src="scope.row.${javaField}" :width="50" :height="50"/>
+        </template>
+      </el-table-column>
+#elseif($column.list && "" != $column.dictType)
+      <el-table-column label="${comment}" align="center" prop="${javaField}">
+        <template #default="scope">
+#if($column.htmlType == "checkbox")
+          <dict-tag :options="${column.dictType}" :value="scope.row.${javaField} ? scope.row.${javaField}.split(',') : []"/>
+#else
+          <dict-tag :options="${column.dictType}" :value="scope.row.${javaField}"/>
+#end
+        </template>
+      </el-table-column>
+#elseif($column.list && "" != $javaField)
+      <el-table-column label="${comment}" align="center" prop="${javaField}" />
+#end
+#end
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['${moduleName}:${businessName}:edit']">淇敼</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['${moduleName}:${businessName}:remove']">鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀�${functionName}瀵硅瘽妗� -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="${businessName}Ref" :model="form" :rules="rules" label-width="80px">
+#foreach($column in $columns)
+#set($field=$column.javaField)
+#if($column.insert && !$column.pk)
+#if(($column.usableColumn) || (!$column.superColumn))
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#set($dictType=$column.dictType)
+#if($column.htmlType == "input")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-input v-model="form.${field}" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+#elseif($column.htmlType == "imageUpload")
+        <el-form-item label="${comment}" prop="${field}">
+          <image-upload v-model="form.${field}"/>
+        </el-form-item>
+#elseif($column.htmlType == "fileUpload")
+        <el-form-item label="${comment}" prop="${field}">
+          <file-upload v-model="form.${field}"/>
+        </el-form-item>
+#elseif($column.htmlType == "editor")
+        <el-form-item label="${comment}">
+          <editor v-model="form.${field}" :min-height="192"/>
+        </el-form-item>
+#elseif($column.htmlType == "select" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-select v-model="form.${field}" placeholder="璇烽�夋嫨${comment}">
+            <el-option
+              v-for="dict in ${dictType}"
+              :key="dict.value"
+              :label="dict.label"
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+              :value="parseInt(dict.value)"
+#else
+              :value="dict.value"
+#end
+            ></el-option>
+          </el-select>
+        </el-form-item>
+#elseif($column.htmlType == "select" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-select v-model="form.${field}" placeholder="璇烽�夋嫨${comment}">
+            <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+          </el-select>
+        </el-form-item>
+#elseif($column.htmlType == "checkbox" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-checkbox-group v-model="form.${field}">
+            <el-checkbox
+              v-for="dict in ${dictType}"
+              :key="dict.value"
+              :label="dict.value">
+              {{dict.label}}
+            </el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+#elseif($column.htmlType == "checkbox" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-checkbox-group v-model="form.${field}">
+            <el-checkbox>璇烽�夋嫨瀛楀吀鐢熸垚</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+#elseif($column.htmlType == "radio" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-radio-group v-model="form.${field}">
+            <el-radio
+              v-for="dict in ${dictType}"
+              :key="dict.value"
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+              :label="parseInt(dict.value)"
+#else
+              :label="dict.value"
+#end
+            >{{dict.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+#elseif($column.htmlType == "radio" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-radio-group v-model="form.${field}">
+            <el-radio label="1">璇烽�夋嫨瀛楀吀鐢熸垚</el-radio>
+          </el-radio-group>
+        </el-form-item>
+#elseif($column.htmlType == "datetime")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-date-picker clearable
+            v-model="form.${field}"
+            type="date"
+            value-format="YYYY-MM-DD"
+            placeholder="璇烽�夋嫨${comment}">
+          </el-date-picker>
+        </el-form-item>
+#elseif($column.htmlType == "textarea")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-input v-model="form.${field}" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+#end
+#end
+#end
+#end
+#if($table.sub)
+        <el-divider content-position="center">${subTable.functionName}淇℃伅</el-divider>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+            <el-button type="primary" icon="Plus" @click="handleAdd${subClassName}">娣诲姞</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button type="danger" icon="Delete" @click="handleDelete${subClassName}">鍒犻櫎</el-button>
+          </el-col>
+        </el-row>
+        <el-table :data="${subclassName}List" :row-class-name="row${subClassName}Index" @selection-change="handle${subClassName}SelectionChange" ref="${subclassName}">
+          <el-table-column type="selection" width="50" align="center" />
+          <el-table-column label="搴忓彿" align="center" prop="index" width="50"/>
+#foreach($column in $subTable.columns)
+#set($javaField=$column.javaField)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.pk || $javaField == ${subTableFkclassName})
+#elseif($column.list && $column.htmlType == "input")
+          <el-table-column label="$comment" prop="${javaField}" width="150">
+            <template #default="scope">
+              <el-input v-model="scope.row.$javaField" placeholder="璇疯緭鍏�$comment" />
+            </template>
+          </el-table-column>
+#elseif($column.list && $column.htmlType == "datetime")
+          <el-table-column label="$comment" prop="${javaField}" width="240">
+            <template #default="scope">
+              <el-date-picker clearable
+                v-model="scope.row.$javaField"
+                type="date"
+                value-format="YYYY-MM-DD"
+                placeholder="璇烽�夋嫨$comment">
+              </el-date-picker>
+            </template>
+          </el-table-column>
+#elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" != $column.dictType)
+          <el-table-column label="$comment" prop="${javaField}" width="150">
+            <template #default="scope">
+              <el-select v-model="scope.row.$javaField" placeholder="璇烽�夋嫨$comment">
+                <el-option
+                  v-for="dict in $column.dictType"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </template>
+          </el-table-column>
+#elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" == $column.dictType)
+          <el-table-column label="$comment" prop="${javaField}" width="150">
+            <template #default="scope">
+              <el-select v-model="scope.row.$javaField" placeholder="璇烽�夋嫨$comment">
+                <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+              </el-select>
+            </template>
+          </el-table-column>
+#end
+#end
+        </el-table>
+#end
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+          <el-button @click="cancel">鍙� 娑�</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="${BusinessName}">
+import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from "@/api/${moduleName}/${businessName}";
+
+const { proxy } = getCurrentInstance();
+#if(${dicts} != '')
+#set($dictsNoSymbol=$dicts.replace("'", ""))
+const { ${dictsNoSymbol} } = proxy.useDict(${dicts});
+#end
+
+const ${businessName}List = ref([]);
+#if($table.sub)
+const ${subclassName}List = ref([]);
+#end
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+#if($table.sub)
+const checked${subClassName} = ref([]);
+#end
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+const daterange${AttrName} = ref([]);
+#end
+#end
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    #foreach ($column in $columns)
+#if($column.query)
+    $column.javaField: null#if($foreach.count != $columns.size()),#end
+#end
+#end
+  },
+  rules: {
+    #foreach ($column in $columns)
+#if($column.required)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+    $column.javaField: [
+      { required: true, message: "$comment涓嶈兘涓虹┖", trigger: #if($column.htmlType == "select" || $column.htmlType == "radio")"change"#else"blur"#end }
+    ]#if($foreach.count != $columns.size()),#end
+#end
+#end
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 鏌ヨ${functionName}鍒楄〃 */
+function getList() {
+  loading.value = true;
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+  queryParams.value.params = {};
+#break
+#end
+#end
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+  if (null != daterange${AttrName} && '' != daterange${AttrName}) {
+    queryParams.value.params["begin${AttrName}"] = daterange${AttrName}.value[0];
+    queryParams.value.params["end${AttrName}"] = daterange${AttrName}.value[1];
+  }
+#end
+#end
+  list${BusinessName}(queryParams.value).then(response => {
+    ${businessName}List.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+// 鍙栨秷鎸夐挳
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+// 琛ㄥ崟閲嶇疆
+function reset() {
+  form.value = {
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+    $column.javaField: []#if($foreach.count != $columns.size()),#end
+#else
+    $column.javaField: null#if($foreach.count != $columns.size()),#end
+#end
+#end
+  };
+#if($table.sub)
+  ${subclassName}List.value = [];
+#end
+  proxy.resetForm("${businessName}Ref");
+}
+
+/** 鎼滅储鎸夐挳鎿嶄綔 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 閲嶇疆鎸夐挳鎿嶄綔 */
+function resetQuery() {
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+  daterange${AttrName}.value = [];
+#end
+#end
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+// 澶氶�夋閫変腑鏁版嵁
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.${pkColumn.javaField});
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+/** 鏂板鎸夐挳鎿嶄綔 */
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "娣诲姞${functionName}";
+}
+
+/** 淇敼鎸夐挳鎿嶄綔 */
+function handleUpdate(row) {
+  reset();
+  const _${pkColumn.javaField} = row.${pkColumn.javaField} || ids.value
+  get${BusinessName}(_${pkColumn.javaField}).then(response => {
+    form.value = response.data;
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+    form.value.$column.javaField = form.value.${column.javaField}.split(",");
+#end
+#end
+#if($table.sub)
+    ${subclassName}List.value = response.data.${subclassName}List;
+#end
+    open.value = true;
+    title.value = "淇敼${functionName}";
+  });
+}
+
+/** 鎻愪氦鎸夐挳 */
+function submitForm() {
+  proxy.#[[$]]#refs["${businessName}Ref"].validate(valid => {
+    if (valid) {
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+      form.value.$column.javaField = form.value.${column.javaField}.join(",");
+#end
+#end
+#if($table.sub)
+      form.value.${subclassName}List = ${subclassName}List.value;
+#end
+      if (form.value.${pkColumn.javaField} != null) {
+        update${BusinessName}(form.value).then(response => {
+          proxy.#[[$modal]]#.msgSuccess("淇敼鎴愬姛");
+          open.value = false;
+          getList();
+        });
+      } else {
+        add${BusinessName}(form.value).then(response => {
+          proxy.#[[$modal]]#.msgSuccess("鏂板鎴愬姛");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+/** 鍒犻櫎鎸夐挳鎿嶄綔 */
+function handleDelete(row) {
+  const _${pkColumn.javaField}s = row.${pkColumn.javaField} || ids.value;
+  proxy.#[[$modal]]#.confirm('鏄惁纭鍒犻櫎${functionName}缂栧彿涓�"' + _${pkColumn.javaField}s + '"鐨勬暟鎹」锛�').then(function() {
+    return del${BusinessName}(_${pkColumn.javaField}s);
+  }).then(() => {
+    getList();
+    proxy.#[[$modal]]#.msgSuccess("鍒犻櫎鎴愬姛");
+  }).catch(() => {});
+}
+
+#if($table.sub)
+/** ${subTable.functionName}搴忓彿 */
+function row${subClassName}Index({ row, rowIndex }) {
+  row.index = rowIndex + 1;
+}
+
+/** ${subTable.functionName}娣诲姞鎸夐挳鎿嶄綔 */
+function handleAdd${subClassName}() {
+  let obj = {};
+#foreach($column in $subTable.columns)
+#if($column.pk || $column.javaField == ${subTableFkclassName})
+#elseif($column.list && "" != $javaField)
+  obj.$column.javaField = "";
+#end
+#end
+  ${subclassName}List.value.push(obj);
+}
+
+/** ${subTable.functionName}鍒犻櫎鎸夐挳鎿嶄綔 */
+function handleDelete${subClassName}() {
+  if (checked${subClassName}.value.length == 0) {
+    proxy.#[[$modal]]#.msgError("璇峰厛閫夋嫨瑕佸垹闄ょ殑${subTable.functionName}鏁版嵁");
+  } else {
+    const ${subclassName}s = ${subclassName}List.value;
+    const checked${subClassName}s = checked${subClassName}.value;
+    ${subclassName}List.value = ${subclassName}s.filter(function(item) {
+      return checked${subClassName}s.indexOf(item.index) == -1
+    });
+  }
+}
+
+/** 澶嶉�夋閫変腑鏁版嵁 */
+function handle${subClassName}SelectionChange(selection) {
+  checked${subClassName}.value = selection.map(item => item.index)
+}
+
+#end
+/** 瀵煎嚭鎸夐挳鎿嶄綔 */
+function handleExport() {
+  proxy.download('${moduleName}/${businessName}/export', {
+    ...queryParams.value
+  }, `${businessName}_#[[${new Date().getTime()}]]#.xlsx`)
+}
+
+getList();
+</script>
diff --git a/zhitan-generator/src/main/resources/vm/xml/mapper.xml.vm b/zhitan-generator/src/main/resources/vm/xml/mapper.xml.vm
new file mode 100644
index 0000000..6559b8a
--- /dev/null
+++ b/zhitan-generator/src/main/resources/vm/xml/mapper.xml.vm
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="${packageName}.mapper.${ClassName}Mapper">
+
+    <resultMap type="${ClassName}" id="${ClassName}Result">
+#foreach ($column in $columns)
+        <result property="${column.javaField}"    column="${column.columnName}"    />
+#end
+    </resultMap>
+#if($table.sub)
+
+    <resultMap id="${ClassName}${subClassName}Result" type="${ClassName}" extends="${ClassName}Result">
+        <collection property="${subclassName}List" notNullColumn="sub_${subTable.pkColumn.columnName}" javaType="java.util.List" resultMap="${subClassName}Result" />
+    </resultMap>
+
+    <resultMap type="${subClassName}" id="${subClassName}Result">
+#foreach ($column in $subTable.columns)
+        <result property="${column.javaField}"    column="sub_${column.columnName}"    />
+#end
+    </resultMap>
+#end
+
+    <sql id="select${ClassName}Vo">
+        select#foreach($column in $columns) $column.columnName#if($foreach.count != $columns.size()),#end#end from ${tableName}
+    </sql>
+
+    <select id="select${ClassName}List" parameterType="${ClassName}" resultMap="${ClassName}Result">
+        <include refid="select${ClassName}Vo"/>
+        <where>
+#foreach($column in $columns)
+#set($queryType=$column.queryType)
+#set($javaField=$column.javaField)
+#set($javaType=$column.javaType)
+#set($columnName=$column.columnName)
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+#if($column.query)
+#if($column.queryType == "EQ")
+            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName = #{$javaField}</if>
+#elseif($queryType == "NE")
+            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName != #{$javaField}</if>
+#elseif($queryType == "GT")
+            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &gt; #{$javaField}</if>
+#elseif($queryType == "GTE")
+            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &gt;= #{$javaField}</if>
+#elseif($queryType == "LT")
+            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &lt; #{$javaField}</if>
+#elseif($queryType == "LTE")
+            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &lt;= #{$javaField}</if>
+#elseif($queryType == "LIKE")
+            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName like concat('%', #{$javaField}, '%')</if>
+#elseif($queryType == "BETWEEN")
+            <if test="params.begin$AttrName != null and params.begin$AttrName != '' and params.end$AttrName != null and params.end$AttrName != ''"> and $columnName between #{params.begin$AttrName} and #{params.end$AttrName}</if>
+#end
+#end
+#end
+        </where>
+    </select>
+
+    <select id="select${ClassName}By${pkColumn.capJavaField}" parameterType="${pkColumn.javaType}" resultMap="#if($table.sub)${ClassName}${subClassName}Result#else${ClassName}Result#end">
+        <include refid="select${ClassName}Vo"/>
+        where ${pkColumn.columnName} = #{${pkColumn.javaField}}
+    </select>
+
+    <insert id="insert${ClassName}" parameterType="${ClassName}"#if($pkColumn.increment) useGeneratedKeys="true" keyProperty="$pkColumn.javaField"#end>
+        insert into ${tableName}
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+#foreach($column in $columns)
+#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment)
+            <if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">$column.columnName,</if>
+#end
+#end
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+#foreach($column in $columns)
+#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment)
+            <if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">#{$column.javaField},</if>
+#end
+#end
+         </trim>
+    </insert>
+
+    <update id="update${ClassName}" parameterType="${ClassName}">
+        update ${tableName}
+        <trim prefix="SET" suffixOverrides=",">
+#foreach($column in $columns)
+#if($column.columnName != $pkColumn.columnName)
+            <if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">$column.columnName = #{$column.javaField},</if>
+#end
+#end
+        </trim>
+        where ${pkColumn.columnName} = #{${pkColumn.javaField}}
+    </update>
+
+    <delete id="delete${ClassName}By${pkColumn.capJavaField}" parameterType="${pkColumn.javaType}">
+        delete from ${tableName} where ${pkColumn.columnName} = #{${pkColumn.javaField}}
+    </delete>
+
+    <delete id="delete${ClassName}By${pkColumn.capJavaField}s" parameterType="String">
+        delete from ${tableName} where ${pkColumn.columnName} in
+        <foreach item="${pkColumn.javaField}" collection="array" open="(" separator="," close=")">
+            #{${pkColumn.javaField}}
+        </foreach>
+    </delete>
+#if($table.sub)
+
+    <delete id="delete${subClassName}By${subTableFkClassName}s" parameterType="String">
+        delete from ${subTableName} where ${subTableFkName} in
+        <foreach item="${subTableFkclassName}" collection="array" open="(" separator="," close=")">
+            #{${subTableFkclassName}}
+        </foreach>
+    </delete>
+
+    <delete id="delete${subClassName}By${subTableFkClassName}" parameterType="${pkColumn.javaType}">
+        delete from ${subTableName} where ${subTableFkName} = #{${subTableFkclassName}}
+    </delete>
+
+    <insert id="batch${subClassName}">
+        insert into ${subTableName}(#foreach($column in $subTable.columns) $column.columnName#if($foreach.count != $subTable.columns.size()),#end#end) values
+		<foreach item="item" index="index" collection="list" separator=",">
+            (#foreach($column in $subTable.columns) #{item.$column.javaField}#if($foreach.count != $subTable.columns.size()),#end#end)
+        </foreach>
+    </insert>
+#end
+</mapper>
\ No newline at end of file
diff --git a/zhitan-generator/target/classes/generator.yml b/zhitan-generator/target/classes/generator.yml
new file mode 100644
index 0000000..3d6ffea
--- /dev/null
+++ b/zhitan-generator/target/classes/generator.yml
@@ -0,0 +1,10 @@
+# 浠g爜鐢熸垚
+gen:
+  # 浣滆��
+  author: ZhiTan
+  # 榛樿鐢熸垚鍖呰矾寰� system 闇�鏀规垚鑷繁鐨勬ā鍧楀悕绉� 濡� system monitor tool
+  packageName: com.zhitan.system
+  # 鑷姩鍘婚櫎琛ㄥ墠缂�锛岄粯璁ゆ槸false
+  autoRemovePre: false
+  # 琛ㄥ墠缂�锛堢敓鎴愮被鍚嶄笉浼氬寘鍚〃鍓嶇紑锛屽涓敤閫楀彿鍒嗛殧锛�
+  tablePrefix: sys_
\ No newline at end of file
diff --git a/zhitan-generator/target/classes/mapper/generator/GenTableColumnMapper.xml b/zhitan-generator/target/classes/mapper/generator/GenTableColumnMapper.xml
new file mode 100644
index 0000000..8766496
--- /dev/null
+++ b/zhitan-generator/target/classes/mapper/generator/GenTableColumnMapper.xml
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.generator.mapper.GenTableColumnMapper">
+
+    <resultMap type="GenTableColumn" id="GenTableColumnResult">
+        <id property="columnId" column="column_id"/>
+        <result property="tableId" column="table_id"/>
+        <result property="columnName" column="column_name"/>
+        <result property="columnComment" column="column_comment"/>
+        <result property="columnType" column="column_type"/>
+        <result property="javaType" column="java_type"/>
+        <result property="javaField" column="java_field"/>
+        <result property="isPk" column="is_pk"/>
+        <result property="isIncrement" column="is_increment"/>
+        <result property="isRequired" column="is_required"/>
+        <result property="isInsert" column="is_insert"/>
+        <result property="isEdit" column="is_edit"/>
+        <result property="isList" column="is_list"/>
+        <result property="isQuery" column="is_query"/>
+        <result property="queryType" column="query_type"/>
+        <result property="htmlType" column="html_type"/>
+        <result property="dictType" column="dict_type"/>
+        <result property="sort" column="sort"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <sql id="selectGenTableColumnVo">
+        select column_id,
+               table_id,
+               column_name,
+               column_comment,
+               column_type,
+               java_type,
+               java_field,
+               is_pk,
+               is_increment,
+               is_required,
+               is_insert,
+               is_edit,
+               is_list,
+               is_query,
+               query_type,
+               html_type,
+               dict_type,
+               sort,
+               create_by,
+               create_time,
+               update_by,
+               update_time
+        from gen_table_column
+    </sql>
+
+    <select id="selectGenTableColumnListByTableId" parameterType="Long" resultMap="GenTableColumnResult">
+        <include refid="selectGenTableColumnVo"/>
+        where table_id = #{tableId}
+        order by sort
+    </select>
+
+    <select id="selectDbTableColumnsByName" parameterType="String" resultMap="GenTableColumnResult">
+        SELECT A.attname                                 AS COLUMN_NAME,
+               col_description(A.attrelid, A.attnum)     AS column_comment,
+               T.typname                                 AS column_type,
+               CASE col.is_nullable WHEN 'NO' THEN 1 END AS is_required,
+               CASE col.is_identity WHEN 'NO' THEN 0 END AS is_pk,
+               col.ordinal_position                      AS sort,
+               '0'                                       AS is_increment
+        FROM pg_class C
+                 LEFT JOIN pg_attribute A ON A.attrelid = C.oid
+                 LEFT JOIN pg_type T ON A.atttypid = T.oid
+                 LEFT JOIN information_schema.COLUMNS col ON col.COLUMN_NAME = A.attname
+        WHERE C.relname = #{tableName}
+          AND col.TABLE_NAME = #{tableName}
+          AND A.attnum > 0
+        order by col.ordinal_position asc
+    </select>
+
+    <insert id="insertGenTableColumn" parameterType="GenTableColumn" useGeneratedKeys="true" keyProperty="columnId">
+        insert into gen_table_column (
+        <if test="tableId != null and tableId != ''">table_id,</if>
+        <if test="columnName != null and columnName != ''">column_name,</if>
+        <if test="columnComment != null and columnComment != ''">column_comment,</if>
+        <if test="columnType != null and columnType != ''">column_type,</if>
+        <if test="javaType != null and javaType != ''">java_type,</if>
+        <if test="javaField != null  and javaField != ''">java_field,</if>
+        <if test="isPk != null and isPk != ''">is_pk,</if>
+        <if test="isIncrement != null and isIncrement != ''">is_increment,</if>
+        <if test="isRequired != null and isRequired != ''">is_required,</if>
+        <if test="isInsert != null and isInsert != ''">is_insert,</if>
+        <if test="isEdit != null and isEdit != ''">is_edit,</if>
+        <if test="isList != null and isList != ''">is_list,</if>
+        <if test="isQuery != null and isQuery != ''">is_query,</if>
+        <if test="queryType != null and queryType != ''">query_type,</if>
+        <if test="htmlType != null and htmlType != ''">html_type,</if>
+        <if test="dictType != null and dictType != ''">dict_type,</if>
+        <if test="sort != null">sort,</if>
+        <if test="createBy != null and createBy != ''">create_by,</if>
+        create_time
+        )values(
+        <if test="tableId != null and tableId != ''">#{tableId},</if>
+        <if test="columnName != null and columnName != ''">#{columnName},</if>
+        <if test="columnComment != null and columnComment != ''">#{columnComment},</if>
+        <if test="columnType != null and columnType != ''">#{columnType},</if>
+        <if test="javaType != null and javaType != ''">#{javaType},</if>
+        <if test="javaField != null and javaField != ''">#{javaField},</if>
+        <if test="isPk != null and isPk != ''">#{isPk},</if>
+        <if test="isIncrement != null and isIncrement != ''">#{isIncrement},</if>
+        <if test="isRequired != null and isRequired != ''">#{isRequired},</if>
+        <if test="isInsert != null and isInsert != ''">#{isInsert},</if>
+        <if test="isEdit != null and isEdit != ''">#{isEdit},</if>
+        <if test="isList != null and isList != ''">#{isList},</if>
+        <if test="isQuery != null and isQuery != ''">#{isQuery},</if>
+        <if test="queryType != null and queryType != ''">#{queryType},</if>
+        <if test="htmlType != null and htmlType != ''">#{htmlType},</if>
+        <if test="dictType != null and dictType != ''">#{dictType},</if>
+        <if test="sort != null">#{sort},</if>
+        <if test="createBy != null and createBy != ''">#{createBy},</if>
+        now()
+        )
+    </insert>
+
+    <update id="updateGenTableColumn" parameterType="GenTableColumn">
+        update gen_table_column
+        <set>
+            column_comment = #{columnComment},
+            java_type = #{javaType},
+            java_field = #{javaField},
+            is_insert = #{isInsert},
+            is_edit = #{isEdit},
+            is_list = #{isList},
+            is_query = #{isQuery},
+            is_required = #{isRequired},
+            query_type = #{queryType},
+            html_type = #{htmlType},
+            dict_type = #{dictType},
+            sort = #{sort},
+            update_by = #{updateBy},
+            update_time = now()
+        </set>
+        where column_id = #{columnId}
+    </update>
+
+    <delete id="deleteGenTableColumnByIds" parameterType="Long">
+        delete from gen_table_column where table_id in
+        <foreach collection="array" item="tableId" open="(" separator="," close=")">
+            #{tableId}
+        </foreach>
+    </delete>
+
+</mapper>
diff --git a/zhitan-generator/target/classes/mapper/generator/GenTableMapper.xml b/zhitan-generator/target/classes/mapper/generator/GenTableMapper.xml
new file mode 100644
index 0000000..d34669a
--- /dev/null
+++ b/zhitan-generator/target/classes/mapper/generator/GenTableMapper.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+		PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+		"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.generator.mapper.GenTableMapper">
+
+	<resultMap type="com.zhitan.generator.domain.GenTable" id="GenTableResult">
+		<id property="tableId" column="table_id"/>
+		<result property="tableName" column="table_name"/>
+		<result property="tableComment" column="table_comment"/>
+		<result property="className" column="class_name"/>
+		<result property="tplCategory" column="tpl_category"/>
+		<result property="packageName" column="package_name"/>
+		<result property="moduleName" column="module_name"/>
+		<result property="businessName" column="business_name"/>
+		<result property="functionName" column="function_name"/>
+		<result property="functionAuthor" column="function_author"/>
+		<result property="options" column="options"/>
+		<result property="createBy" column="create_by"/>
+		<result property="createTime" column="create_time"/>
+		<result property="updateBy" column="update_by"/>
+		<result property="updateTime" column="update_time"/>
+		<result property="remark" column="remark"/>
+		<collection property="columns" javaType="java.util.List" resultMap="GenTableColumnResult"/>
+	</resultMap>
+
+	<resultMap type="com.zhitan.generator.domain.GenTableColumn" id="GenTableColumnResult">
+		<id property="columnId" column="column_id"/>
+		<result property="tableId" column="table_id"/>
+		<result property="columnName" column="column_name"/>
+		<result property="columnComment" column="column_comment"/>
+		<result property="columnType" column="column_type"/>
+		<result property="javaType" column="java_type"/>
+		<result property="javaField" column="java_field"/>
+		<result property="isPk" column="is_pk"/>
+		<result property="isIncrement" column="is_increment"/>
+		<result property="isRequired" column="is_required"/>
+		<result property="isInsert" column="is_insert"/>
+		<result property="isEdit" column="is_edit"/>
+		<result property="isList" column="is_list"/>
+		<result property="isQuery" column="is_query"/>
+		<result property="queryType" column="query_type"/>
+		<result property="htmlType" column="html_type"/>
+		<result property="dictType" column="dict_type"/>
+		<result property="sort" column="sort"/>
+		<result property="createBy" column="create_by"/>
+		<result property="createTime" column="create_time"/>
+		<result property="updateBy" column="update_by"/>
+		<result property="updateTime" column="update_time"/>
+	</resultMap>
+
+	<sql id="selectGenTableVo">
+		select table_id, table_name, table_comment, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, options, create_by, create_time, update_by, update_time, remark from gen_table
+	</sql>
+
+	<select id="selectGenTableList" parameterType="com.zhitan.generator.domain.GenTable"
+			resultMap="GenTableResult">
+		<include refid="selectGenTableVo"/>
+		<where>
+			<if test="tableName != null and tableName != ''">
+				AND lower(table_name) like lower(concat('%', #{tableName}, '%'))
+			</if>
+			<if test="tableComment != null and tableComment != ''">
+				AND lower(table_comment) like lower(concat('%', #{tableComment}, '%'))
+			</if>
+			<!-- 			<if test="beginTime != null and beginTime != ''">寮�濮嬫椂闂存绱� -->
+			<!-- 				AND date_format(create_time,'%y%m%d') &gt;= date_format(#{beginTime},'%y%m%d') -->
+			<!-- 			</if> -->
+			<!-- 			<if test="endTime != null and endTime != ''">缁撴潫鏃堕棿妫�绱� -->
+			<!-- 				AND date_format(create_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d') -->
+			<!-- 			</if> -->
+		</where>
+		order by table_id
+	</select>
+
+	<select id="selectDbTableList" parameterType="com.zhitan.generator.domain.GenTable"
+			resultMap="GenTableResult">
+		SELECT tablename AS table_name FROM pg_tables WHERE schemaname='public'
+		AND tablename NOT LIKE 'qrtz_%' AND tablename NOT LIKE 'gen_%'
+		AND tablename NOT IN (select table_name from gen_table)
+		<if test="tableName != null and tableName != ''">
+			AND lower(tablename) like lower(concat('%', #{tableName}, '%'))
+		</if>
+	</select>
+
+	<select id="selectDbTableListByNames" resultMap="GenTableResult">
+		SELECT C.relname AS table_name,CAST (obj_description (relfilenode,'pg_class') AS VARCHAR) AS table_comment,null
+		AS create_time,null AS update_time FROM pg_class C WHERE
+		C.relname IN (SELECT tablename FROM pg_tables WHERE schemaname='public' AND POSITION ('_2' IN tablename)=0)
+		and C.relname NOT LIKE 'qrtz_%' and C.relname NOT LIKE 'gen_%'
+		and C.relname in
+		<foreach collection="array" item="name" open="(" separator="," close=")">
+			#{name}
+		</foreach>
+		ORDER BY C.relname
+	</select>
+
+	<select id="selectGenTableById" parameterType="Long" resultMap="GenTableResult">
+		SELECT t.table_id, t.table_name, t.table_comment, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.options, t.remark,
+			   c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
+		FROM gen_table t
+				 LEFT JOIN gen_table_column c ON t.table_id = c.table_id
+		where t.table_id = #{tableId}
+	</select>
+
+	<select id="selectGenTableByName" parameterType="String" resultMap="GenTableResult">
+		SELECT t.table_id, t.table_name, t.table_comment, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.options, t.remark,
+			   c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
+		FROM gen_table t
+				 LEFT JOIN gen_table_column c ON t.table_id = c.table_id
+		where t.table_name = #{tableName}
+	</select>
+
+	<insert id="insertGenTable" parameterType="com.zhitan.generator.domain.GenTable"
+			useGeneratedKeys="true" keyProperty="tableId">
+		insert into gen_table (
+		<if test="tableName != null">table_name,</if>
+		<if test="tableComment != null and tableComment != ''">table_comment,</if>
+		<if test="className != null and className != ''">class_name,</if>
+		<if test="tplCategory != null and tplCategory != ''">tpl_category,</if>
+		<if test="packageName != null and packageName != ''">package_name,</if>
+		<if test="moduleName != null and moduleName != ''">module_name,</if>
+		<if test="businessName != null and businessName != ''">business_name,</if>
+		<if test="functionName != null and functionName != ''">function_name,</if>
+		<if test="functionAuthor != null and functionAuthor != ''">function_author,</if>
+		<if test="remark != null and remark != ''">remark,</if>
+		<if test="createBy != null and createBy != ''">create_by,</if>
+		create_time
+		)values(
+		<if test="tableName != null">#{tableName},</if>
+		<if test="tableComment != null and tableComment != ''">#{tableComment},</if>
+		<if test="className != null and className != ''">#{className},</if>
+		<if test="tplCategory != null and tplCategory != ''">#{tplCategory},</if>
+		<if test="packageName != null and packageName != ''">#{packageName},</if>
+		<if test="moduleName != null and moduleName != ''">#{moduleName},</if>
+		<if test="businessName != null and businessName != ''">#{businessName},</if>
+		<if test="functionName != null and functionName != ''">#{functionName},</if>
+		<if test="functionAuthor != null and functionAuthor != ''">#{functionAuthor},</if>
+		<if test="remark != null and remark != ''">#{remark},</if>
+		<if test="createBy != null and createBy != ''">#{createBy},</if>
+		now()
+		)
+	</insert>
+
+	<update id="updateGenTable" parameterType="com.zhitan.generator.domain.GenTable">
+		update gen_table
+		<set>
+			<if test="tableName != null">table_name = #{tableName},</if>
+			<if test="tableComment != null and tableComment != ''">table_comment = #{tableComment},</if>
+			<if test="className != null and className != ''">class_name = #{className},</if>
+			<if test="functionAuthor != null and functionAuthor != ''">function_author = #{functionAuthor},</if>
+			<if test="tplCategory != null and tplCategory != ''">tpl_category = #{tplCategory},</if>
+			<if test="packageName != null and packageName != ''">package_name = #{packageName},</if>
+			<if test="moduleName != null and moduleName != ''">module_name = #{moduleName},</if>
+			<if test="businessName != null and businessName != ''">business_name = #{businessName},</if>
+			<if test="functionName != null and functionName != ''">function_name = #{functionName},</if>
+			<if test="options != null and options != ''">options = #{options},</if>
+			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+			<if test="remark != null">remark = #{remark},</if>
+			update_time = now()
+		</set>
+		where table_id = #{tableId}
+	</update>
+
+	<delete id="deleteGenTableByIds" parameterType="Long">
+		delete from gen_table where table_id in
+		<foreach collection="array" item="tableId" open="(" separator="," close=")">
+			#{tableId}
+		</foreach>
+	</delete>
+
+</mapper> 
diff --git a/zhitan-generator/target/classes/vm/java/controller.java.vm b/zhitan-generator/target/classes/vm/java/controller.java.vm
new file mode 100644
index 0000000..bb7928a
--- /dev/null
+++ b/zhitan-generator/target/classes/vm/java/controller.java.vm
@@ -0,0 +1,108 @@
+package ${packageName}.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import javax.annotation.Resource;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.enums.BusinessType;
+import ${packageName}.domain.${ClassName};
+import ${packageName}.service.I${ClassName}Service;
+import com.zhitan.common.utils.poi.ExcelUtil;
+#if($table.crud || $table.sub)
+import com.zhitan.common.core.page.TableDataInfo;
+#elseif($table.tree)
+#end
+
+/**
+ * ${functionName}Controller
+ * 
+ * @author ${author}
+ * @date ${datetime}
+ */
+@RestController
+@RequestMapping("/${moduleName}/${businessName}")
+public class ${ClassName}Controller extends BaseController
+{
+    @Resource
+    private I${ClassName}Service ${className}Service;
+
+    /**
+     * 鏌ヨ${functionName}鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(${ClassName} ${className})
+    {
+        startPage();
+        List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});
+        return getDataTable(list);
+    }
+
+
+    /**
+     * 瀵煎嚭${functionName}鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')")
+    @Log(title = "${functionName}", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ${ClassName} ${className})
+    {
+        List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});
+        ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class);
+        util.exportExcel(response, list, "${functionName}鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇${functionName}璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:query')")
+    @GetMapping(value = "/{${pkColumn.javaField}}")
+    public AjaxResult getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField})
+    {
+        return success(${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}));
+    }
+
+    /**
+     * 鏂板${functionName}
+     */
+    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:add')")
+    @Log(title = "${functionName}", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ${ClassName} ${className})
+    {
+        return toAjax(${className}Service.insert${ClassName}(${className}));
+    }
+
+    /**
+     * 淇敼${functionName}
+     */
+    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:edit')")
+    @Log(title = "${functionName}", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ${ClassName} ${className})
+    {
+        return toAjax(${className}Service.update${ClassName}(${className}));
+    }
+
+    /**
+     * 鍒犻櫎${functionName}
+     */
+    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:remove')")
+    @Log(title = "${functionName}", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{${pkColumn.javaField}s}")
+    public AjaxResult remove(@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s)
+    {
+        return toAjax(${className}Service.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s));
+    }
+}
diff --git a/zhitan-generator/target/classes/vm/java/domain.java.vm b/zhitan-generator/target/classes/vm/java/domain.java.vm
new file mode 100644
index 0000000..da3cce5
--- /dev/null
+++ b/zhitan-generator/target/classes/vm/java/domain.java.vm
@@ -0,0 +1,112 @@
+package ${packageName}.domain;
+
+#foreach ($import in $importList)
+import ${import};
+#end
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zhitan.common.annotation.Excel;
+#if($table.crud || $table.sub)
+import com.zhitan.common.core.domain.BaseEntity;
+#elseif($table.tree)
+import com.zhitan.common.core.domain.TreeEntity;
+#end
+
+/**
+ * ${functionName}瀵硅薄 ${tableName}
+ *
+ * @author ${author}
+ * @date ${datetime}
+ */
+#if($table.crud || $table.sub)
+    #set($Entity="BaseEntity")
+#elseif($table.tree)
+    #set($Entity="TreeEntity")
+#end
+@TableName("${tableName}")
+public class ${ClassName} extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+#foreach ($column in $columns)
+    #if(!$table.isSuperColumn($column.javaField))
+    /** $column.columnComment */
+    #if($column.list)
+        #set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+        #if($parentheseIndex != -1)
+            #set($comment=$column.columnComment.substring(0, $parentheseIndex))
+        #else
+            #set($comment=$column.columnComment)
+        #end
+        #if($parentheseIndex != -1)
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+        #elseif($column.javaType == 'Date')
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
+        #else
+    @Excel(name = "${comment}")
+        #end
+    #end
+    #if($column.isPk == 1)
+    @TableId(value = "$column.columnName",type = IdType.AUTO)
+    #end
+    private $column.javaType $column.javaField;
+
+    #end
+#end
+#if($table.sub)
+/** $table.subTable.functionName淇℃伅 */
+private List<${subClassName}> ${subclassName}List;
+
+#end
+#foreach ($column in $columns)
+    #if(!$table.isSuperColumn($column.javaField))
+        #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
+            #set($AttrName=$column.javaField)
+        #else
+            #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+        #end
+        
+    public void set${AttrName}($column.javaType $column.javaField)
+    {
+        this.$column.javaField = $column.javaField;
+    }
+
+    public $column.javaType get${AttrName}()
+    {
+        return $column.javaField;
+    }
+    #end
+#end
+
+#if($table.sub)
+    public List<${subClassName}> get${subClassName}List()
+    {
+        return ${subclassName}List;
+    }
+
+    public void set${subClassName}List(List<${subClassName}> ${subclassName}List)
+    {
+        this.${subclassName}List = ${subclassName}List;
+    }
+
+#end
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+    #foreach ($column in $columns)
+        #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
+            #set($AttrName=$column.javaField)
+        #else
+            #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+        #end
+            .append("${column.javaField}", get${AttrName}())
+    #end
+    #if($table.sub)
+            .append("${subclassName}List", get${subClassName}List())
+    #end
+        .toString();
+    }
+}
diff --git a/zhitan-generator/target/classes/vm/java/mapper.java.vm b/zhitan-generator/target/classes/vm/java/mapper.java.vm
new file mode 100644
index 0000000..1435b4e
--- /dev/null
+++ b/zhitan-generator/target/classes/vm/java/mapper.java.vm
@@ -0,0 +1,91 @@
+package ${packageName}.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import ${packageName}.domain.${ClassName};
+#if($table.sub)
+import ${packageName}.domain.${subClassName};
+#end
+
+/**
+ * ${functionName}Mapper鎺ュ彛
+ *
+ * @author ${author}
+ * @date ${datetime}
+ */
+public interface ${ClassName}Mapper extends BaseMapper<${ClassName}> {
+    /**
+     * 鏌ヨ${functionName}
+     *
+     * @param ${pkColumn.javaField} ${functionName}涓婚敭
+     * @return ${functionName}
+     */
+    public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField});
+
+    /**
+     * 鏌ヨ${functionName}鍒楄〃
+     *
+     * @param ${className} ${functionName}
+     * @return ${functionName}闆嗗悎
+     */
+    public List<${ClassName}> select${ClassName}List(${ClassName} ${className});
+
+    /**
+     * 鏂板${functionName}
+     *
+     * @param ${className} ${functionName}
+     * @return 缁撴灉
+     */
+    public int insert${ClassName}(${ClassName} ${className});
+
+    /**
+     * 淇敼${functionName}
+     *
+     * @param ${className} ${functionName}
+     * @return 缁撴灉
+     */
+    public int update${ClassName}(${ClassName} ${className});
+
+    /**
+     * 鍒犻櫎${functionName}
+     *
+     * @param ${pkColumn.javaField} ${functionName}涓婚敭
+     * @return 缁撴灉
+     */
+    public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField});
+
+    /**
+     * 鎵归噺鍒犻櫎${functionName}
+     *
+     * @param ${pkColumn.javaField}s 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s);
+    #if($table.sub)
+
+        /**
+         * 鎵归噺鍒犻櫎${subTable.functionName}
+         *
+         * @param ${pkColumn.javaField}s 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+         * @return 缁撴灉
+         */
+        public int delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaType}[] ${pkColumn.javaField}s);
+
+        /**
+         * 鎵归噺鏂板${subTable.functionName}
+         *
+         * @param ${subclassName}List ${subTable.functionName}鍒楄〃
+         * @return 缁撴灉
+         */
+        public int batch${subClassName}(List<${subClassName}> ${subclassName}List);
+
+
+        /**
+         * 閫氳繃${functionName}涓婚敭鍒犻櫎${subTable.functionName}淇℃伅
+         *
+         * @param ${pkColumn.javaField} ${functionName}ID
+         * @return 缁撴灉
+         */
+        public int delete${subClassName}By${subTableFkClassName}(${pkColumn.javaType} ${pkColumn.javaField});
+    #end
+}
diff --git a/zhitan-generator/target/classes/vm/java/service.java.vm b/zhitan-generator/target/classes/vm/java/service.java.vm
new file mode 100644
index 0000000..149a552
--- /dev/null
+++ b/zhitan-generator/target/classes/vm/java/service.java.vm
@@ -0,0 +1,61 @@
+package ${packageName}.service;
+
+import java.util.List;
+import ${packageName}.domain.${ClassName};
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * ${functionName}Service鎺ュ彛
+ *
+ * @author ${author}
+ * @date ${datetime}
+ */
+public interface I${ClassName}Service extends IService<${ClassName}> {
+    /**
+     * 鏌ヨ${functionName}
+     *
+     * @param ${pkColumn.javaField} ${functionName}涓婚敭
+     * @return ${functionName}
+     */
+    public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField});
+
+    /**
+     * 鏌ヨ${functionName}鍒楄〃
+     *
+     * @param ${className} ${functionName}
+     * @return ${functionName}闆嗗悎
+     */
+    public List<${ClassName}> select${ClassName}List(${ClassName} ${className});
+
+    /**
+     * 鏂板${functionName}
+     *
+     * @param ${className} ${functionName}
+     * @return 缁撴灉
+     */
+    public int insert${ClassName}(${ClassName} ${className});
+
+    /**
+     * 淇敼${functionName}
+     *
+     * @param ${className} ${functionName}
+     * @return 缁撴灉
+     */
+    public int update${ClassName}(${ClassName} ${className});
+
+    /**
+     * 鎵归噺鍒犻櫎${functionName}
+     *
+     * @param ${pkColumn.javaField}s 闇�瑕佸垹闄ょ殑${functionName}涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s);
+
+    /**
+     * 鍒犻櫎${functionName}淇℃伅
+     *
+     * @param ${pkColumn.javaField} ${functionName}涓婚敭
+     * @return 缁撴灉
+     */
+    public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField});
+}
diff --git a/zhitan-generator/target/classes/vm/java/serviceImpl.java.vm b/zhitan-generator/target/classes/vm/java/serviceImpl.java.vm
new file mode 100644
index 0000000..c7087f2
--- /dev/null
+++ b/zhitan-generator/target/classes/vm/java/serviceImpl.java.vm
@@ -0,0 +1,162 @@
+package ${packageName}.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import java.util.List;
+    #foreach ($column in $columns)
+        #if($column.javaField == 'createTime' || $column.javaField == 'updateTime')
+        import com.zhitan.common.utils.DateUtils;
+            #break
+        #end
+    #end
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+    #if($table.sub)
+    import java.util.ArrayList;
+    import com.zhitan.common.utils.StringUtils;
+    import org.springframework.transaction.annotation.Transactional;
+    import ${packageName}.domain.${subClassName};
+    #end
+import ${packageName}.mapper.${ClassName}Mapper;
+import ${packageName}.domain.${ClassName};
+import ${packageName}.service.I${ClassName}Service;
+
+/**
+ * ${functionName}Service涓氬姟灞傚鐞�
+ *
+ * @author ${author}
+ * @date ${datetime}
+ */
+@Service
+public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${ClassName}> implements I${ClassName}Service {
+    @Autowired
+    private ${ClassName}Mapper ${className}Mapper;
+
+    /**
+     * 鏌ヨ${functionName}
+     *
+     * @param ${pkColumn.javaField} ${functionName}涓婚敭
+     * @return ${functionName}
+     */
+    @Override
+    public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) {
+        return ${className}Mapper.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField});
+    }
+
+    /**
+     * 鏌ヨ${functionName}鍒楄〃
+     *
+     * @param ${className} ${functionName}
+     * @return ${functionName}
+     */
+    @Override
+    public List<${ClassName}> select${ClassName}List(${ClassName} ${className}) {
+        return ${className}Mapper.select${ClassName}List(${className});
+    }
+
+    /**
+     * 鏂板${functionName}
+     *
+     * @param ${className} ${functionName}
+     * @return 缁撴灉
+     */
+        #if($table.sub)
+        @Transactional
+        #end
+    @Override
+    public int insert${ClassName}(${ClassName} ${className}) {
+    #foreach ($column in $columns)
+        #if($column.javaField == 'createTime')
+        ${className}.setCreateTime(DateUtils.getNowDate());
+        #end
+    #end
+    #if($table.sub)
+        int rows = ${className}Mapper.insert${ClassName}(${className});
+        insert${subClassName}(${className});
+        return rows;
+    #else
+        return ${className}Mapper.insert${ClassName}(${className});
+    #end
+    }
+
+    /**
+     * 淇敼${functionName}
+     *
+     * @param ${className} ${functionName}
+     * @return 缁撴灉
+     */
+        #if($table.sub)
+        @Transactional
+        #end
+    @Override
+    public int update${ClassName}(${ClassName} ${className}) {
+        #foreach ($column in $columns)
+            #if($column.javaField == 'updateTime')
+        ${className}.setUpdateTime(DateUtils.getNowDate());
+            #end
+        #end
+        #if($table.sub)
+                ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}());
+            insert${subClassName}(${className});
+        #end
+        return ${className}Mapper.update${ClassName}(${className});
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎${functionName}
+     *
+     * @param ${pkColumn.javaField}s 闇�瑕佸垹闄ょ殑${functionName}涓婚敭
+     * @return 缁撴灉
+     */
+        #if($table.sub)
+        @Transactional
+        #end
+    @Override
+    public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s) {
+        #if($table.sub)
+                ${className}Mapper.delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaField}s);
+        #end
+        return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s);
+    }
+
+    /**
+     * 鍒犻櫎${functionName}淇℃伅
+     *
+     * @param ${pkColumn.javaField} ${functionName}涓婚敭
+     * @return 缁撴灉
+     */
+        #if($table.sub)
+        @Transactional
+        #end
+    @Override
+    public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) {
+        #if($table.sub)
+                ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${pkColumn.javaField});
+        #end
+        return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField});
+    }
+    #if($table.sub)
+
+        /**
+         * 鏂板${subTable.functionName}淇℃伅
+         *
+         * @param ${className} ${functionName}瀵硅薄
+         */
+        public void insert${subClassName}(${ClassName} ${className}) {
+            List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List();
+            ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}();
+            if (StringUtils.isNotNull(${subclassName}List))
+            {
+                List<${subClassName}> list = new ArrayList<${subClassName}>();
+                for (${subClassName} ${subclassName} : ${subclassName}List)
+                {
+                    ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField});
+                    list.add(${subclassName});
+                }
+                if (list.size() > 0)
+                {
+                        ${className}Mapper.batch${subClassName}(list);
+                }
+            }
+        }
+    #end
+}
diff --git a/zhitan-generator/target/classes/vm/java/sub-domain.java.vm b/zhitan-generator/target/classes/vm/java/sub-domain.java.vm
new file mode 100644
index 0000000..d6d51d1
--- /dev/null
+++ b/zhitan-generator/target/classes/vm/java/sub-domain.java.vm
@@ -0,0 +1,73 @@
+package ${packageName}.domain;
+
+    #foreach ($import in $subImportList)
+    import ${import};
+    #end
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+
+/**
+ * ${subTable.functionName}瀵硅薄 ${subTableName}
+ *
+ * @author ${author}
+ * @date ${datetime}
+ */
+public class ${subClassName} extends BaseEntity {
+private static final long serialVersionUID = 1L;
+
+#foreach ($column in $subTable.columns)
+    #if(!$table.isSuperColumn($column.javaField))
+    /** $column.columnComment */
+        #if($column.list)
+            #set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+            #if($parentheseIndex != -1)
+                #set($comment=$column.columnComment.substring(0, $parentheseIndex))
+            #else
+                #set($comment=$column.columnComment)
+            #end
+            #if($parentheseIndex != -1)
+            @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+            #elseif($column.javaType == 'Date')
+            @JsonFormat(pattern = "yyyy-MM-dd")
+            @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
+            #else
+            @Excel(name = "${comment}")
+            #end
+        #end
+    private $column.javaType $column.javaField;
+
+    #end
+#end
+#foreach ($column in $subTable.columns)
+    #if(!$table.isSuperColumn($column.javaField))
+        #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
+            #set($AttrName=$column.javaField)
+        #else
+            #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+        #end
+    public void set${AttrName}($column.javaType $column.javaField) {
+            this.$column.javaField = $column.javaField;
+            }
+
+    public $column.javaType get${AttrName}() {
+            return $column.javaField;
+            }
+    #end
+#end
+
+@Override
+public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+    #foreach ($column in $subTable.columns)
+        #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
+            #set($AttrName=$column.javaField)
+        #else
+            #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+        #end
+            .append("${column.javaField}", get${AttrName}())
+    #end
+        .toString();
+        }
+        }
diff --git a/zhitan-generator/target/classes/vm/js/api.js.vm b/zhitan-generator/target/classes/vm/js/api.js.vm
new file mode 100644
index 0000000..9295524
--- /dev/null
+++ b/zhitan-generator/target/classes/vm/js/api.js.vm
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨ${functionName}鍒楄〃
+export function list${BusinessName}(query) {
+  return request({
+    url: '/${moduleName}/${businessName}/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨ${functionName}璇︾粏
+export function get${BusinessName}(${pkColumn.javaField}) {
+  return request({
+    url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField},
+    method: 'get'
+  })
+}
+
+// 鏂板${functionName}
+export function add${BusinessName}(data) {
+  return request({
+    url: '/${moduleName}/${businessName}',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼${functionName}
+export function update${BusinessName}(data) {
+  return request({
+    url: '/${moduleName}/${businessName}',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎${functionName}
+export function del${BusinessName}(${pkColumn.javaField}) {
+  return request({
+    url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField},
+    method: 'delete'
+  })
+}
diff --git a/zhitan-generator/target/classes/vm/sql/sql.vm b/zhitan-generator/target/classes/vm/sql/sql.vm
new file mode 100644
index 0000000..0575583
--- /dev/null
+++ b/zhitan-generator/target/classes/vm/sql/sql.vm
@@ -0,0 +1,22 @@
+-- 鑿滃崟 SQL
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}:list', '#', 'admin', sysdate(), '', null, '${functionName}鑿滃崟');
+
+-- 鎸夐挳鐖惰彍鍗旾D
+SELECT @parentId := LAST_INSERT_ID();
+
+-- 鎸夐挳 SQL
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('${functionName}鏌ヨ', @parentId, '1',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:query',        '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('${functionName}鏂板', @parentId, '2',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:add',          '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('${functionName}淇敼', @parentId, '3',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:edit',         '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('${functionName}鍒犻櫎', @parentId, '4',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:remove',       '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('${functionName}瀵煎嚭', @parentId, '5',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:export',       '#', 'admin', sysdate(), '', null, '');
\ No newline at end of file
diff --git a/zhitan-generator/target/classes/vm/vue/index-tree.vue.vm b/zhitan-generator/target/classes/vm/vue/index-tree.vue.vm
new file mode 100644
index 0000000..4819c2a
--- /dev/null
+++ b/zhitan-generator/target/classes/vm/vue/index-tree.vue.vm
@@ -0,0 +1,505 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+#foreach($column in $columns)
+#if($column.query)
+#set($dictType=$column.dictType)
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.htmlType == "input")
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-input
+          v-model="queryParams.${column.javaField}"
+          placeholder="璇疯緭鍏�${comment}"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType)
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-select v-model="queryParams.${column.javaField}" placeholder="璇烽�夋嫨${comment}" clearable>
+          <el-option
+            v-for="dict in dict.type.${dictType}"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && $dictType)
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-select v-model="queryParams.${column.javaField}" placeholder="璇烽�夋嫨${comment}" clearable>
+          <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+        </el-select>
+      </el-form-item>
+#elseif($column.htmlType == "datetime" && $column.queryType != "BETWEEN")
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-date-picker clearable
+          v-model="queryParams.${column.javaField}"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="閫夋嫨${comment}">
+        </el-date-picker>
+      </el-form-item>
+#elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+      <el-form-item label="${comment}">
+        <el-date-picker
+          v-model="daterange${AttrName}"
+          style="width: 240px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="寮�濮嬫棩鏈�"
+          end-placeholder="缁撴潫鏃ユ湡"
+        ></el-date-picker>
+      </el-form-item>
+#end
+#end
+#end
+      <el-form-item>
+	    <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['${moduleName}:${businessName}:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          plain
+          icon="el-icon-sort"
+          size="mini"
+          @click="toggleExpandAll"
+        >灞曞紑/鎶樺彔</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table
+      v-if="refreshTable"
+      v-loading="loading"
+      :data="${businessName}List"
+      row-key="${treeCode}"
+      :default-expand-all="isExpandAll"
+      :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
+    >
+#foreach($column in $columns)
+#set($javaField=$column.javaField)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.pk)
+#elseif($column.list && $column.htmlType == "datetime")
+      <el-table-column label="${comment}" align="center" prop="${javaField}" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.${javaField}, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+#elseif($column.list && $column.htmlType == "imageUpload")
+      <el-table-column label="${comment}" align="center" prop="${javaField}" width="100">
+        <template slot-scope="scope">
+          <image-preview :src="scope.row.${javaField}" :width="50" :height="50"/>
+        </template>
+      </el-table-column>
+#elseif($column.list && "" != $column.dictType)
+      <el-table-column label="${comment}" align="center" prop="${javaField}">
+        <template slot-scope="scope">
+#if($column.htmlType == "checkbox")
+          <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.${javaField} ? scope.row.${javaField}.split(',') : []"/>
+#else
+          <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.${javaField}"/>
+#end
+        </template>
+      </el-table-column>
+#elseif($column.list && "" != $javaField)
+#if(${foreach.index} == 1)
+      <el-table-column label="${comment}" prop="${javaField}" />
+#else
+      <el-table-column label="${comment}" align="center" prop="${javaField}" />
+#end
+#end
+#end
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['${moduleName}:${businessName}:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-plus"
+            @click="handleAdd(scope.row)"
+            v-hasPermi="['${moduleName}:${businessName}:add']"
+          >鏂板</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['${moduleName}:${businessName}:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 娣诲姞鎴栦慨鏀�${functionName}瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+#foreach($column in $columns)
+#set($field=$column.javaField)
+#if($column.insert && !$column.pk)
+#if(($column.usableColumn) || (!$column.superColumn))
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#set($dictType=$column.dictType)
+#if("" != $treeParentCode && $column.javaField == $treeParentCode)
+        <el-form-item label="${comment}" prop="${treeParentCode}">
+          <treeselect v-model="form.${treeParentCode}" :options="${businessName}Options" :normalizer="normalizer" placeholder="璇烽�夋嫨${comment}" />
+        </el-form-item>
+#elseif($column.htmlType == "input")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-input v-model="form.${field}" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+#elseif($column.htmlType == "imageUpload")
+        <el-form-item label="${comment}" prop="${field}">
+          <image-upload v-model="form.${field}"/>
+        </el-form-item>
+#elseif($column.htmlType == "fileUpload")
+        <el-form-item label="${comment}" prop="${field}">
+          <file-upload v-model="form.${field}"/>
+        </el-form-item>
+#elseif($column.htmlType == "editor")
+        <el-form-item label="${comment}">
+          <editor v-model="form.${field}" :min-height="192"/>
+        </el-form-item>
+#elseif($column.htmlType == "select" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-select v-model="form.${field}" placeholder="璇烽�夋嫨${comment}">
+            <el-option
+              v-for="dict in dict.type.${dictType}"
+              :key="dict.value"
+              :label="dict.label"
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+              :value="parseInt(dict.value)"
+#else
+              :value="dict.value"
+#end
+            ></el-option>
+          </el-select>
+        </el-form-item>
+#elseif($column.htmlType == "select" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-select v-model="form.${field}" placeholder="璇烽�夋嫨${comment}">
+            <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+          </el-select>
+        </el-form-item>
+#elseif($column.htmlType == "checkbox" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-checkbox-group v-model="form.${field}">
+            <el-checkbox
+              v-for="dict in dict.type.${dictType}"
+              :key="dict.value"
+              :label="dict.value">
+              {{dict.label}}
+            </el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+#elseif($column.htmlType == "checkbox" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-checkbox-group v-model="form.${field}">
+            <el-checkbox>璇烽�夋嫨瀛楀吀鐢熸垚</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+#elseif($column.htmlType == "radio" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-radio-group v-model="form.${field}">
+            <el-radio
+              v-for="dict in dict.type.${dictType}"
+              :key="dict.value"
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+              :label="parseInt(dict.value)"
+#else
+              :label="dict.value"
+#end
+            >{{dict.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+#elseif($column.htmlType == "radio" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-radio-group v-model="form.${field}">
+            <el-radio label="1">璇烽�夋嫨瀛楀吀鐢熸垚</el-radio>
+          </el-radio-group>
+        </el-form-item>
+#elseif($column.htmlType == "datetime")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-date-picker clearable
+            v-model="form.${field}"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="閫夋嫨${comment}">
+          </el-date-picker>
+        </el-form-item>
+#elseif($column.htmlType == "textarea")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-input v-model="form.${field}" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+#end
+#end
+#end
+#end
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from "@/api/${moduleName}/${businessName}";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+export default {
+  name: "${BusinessName}",
+#if(${dicts} != '')
+  dicts: [${dicts}],
+#end
+  components: {
+    Treeselect
+  },
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // ${functionName}琛ㄦ牸鏁版嵁
+      ${businessName}List: [],
+      // ${functionName}鏍戦�夐」
+      ${businessName}Options: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏄惁灞曞紑锛岄粯璁ゅ叏閮ㄥ睍寮�
+      isExpandAll: true,
+      // 閲嶆柊娓叉煋琛ㄦ牸鐘舵��
+      refreshTable: true,
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+      // $comment鏃堕棿鑼冨洿
+      daterange${AttrName}: [],
+#end
+#end
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+#foreach ($column in $columns)
+#if($column.query)
+        $column.javaField: null#if($foreach.count != $columns.size()),#end
+#end
+#end
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+#foreach ($column in $columns)
+#if($column.required)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+        $column.javaField: [
+          { required: true, message: "$comment涓嶈兘涓虹┖", trigger: #if($column.htmlType == "select" || $column.htmlType == "radio")"change"#else"blur"#end }
+        ]#if($foreach.count != $columns.size()),#end
+#end
+#end
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨ${functionName}鍒楄〃 */
+    getList() {
+      this.loading = true;
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+      this.queryParams.params = {};
+#break
+#end
+#end
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+      if (null != this.daterange${AttrName} && '' != this.daterange${AttrName}) {
+        this.queryParams.params["begin${AttrName}"] = this.daterange${AttrName}[0];
+        this.queryParams.params["end${AttrName}"] = this.daterange${AttrName}[1];
+      }
+#end
+#end
+      list${BusinessName}(this.queryParams).then(response => {
+        this.${businessName}List = this.handleTree(response.data, "${treeCode}", "${treeParentCode}");
+        this.loading = false;
+      });
+    },
+    /** 杞崲${functionName}鏁版嵁缁撴瀯 */
+    normalizer(node) {
+      if (node.children && !node.children.length) {
+        delete node.children;
+      }
+      return {
+        id: node.${treeCode},
+        label: node.${treeName},
+        children: node.children
+      };
+    },
+	/** 鏌ヨ${functionName}涓嬫媺鏍戠粨鏋� */
+    getTreeselect() {
+      list${BusinessName}().then(response => {
+        this.${businessName}Options = [];
+        const data = { ${treeCode}: 0, ${treeName}: '椤剁骇鑺傜偣', children: [] };
+        data.children = this.handleTree(response.data, "${treeCode}", "${treeParentCode}");
+        this.${businessName}Options.push(data);
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+        $column.javaField: []#if($foreach.count != $columns.size()),#end
+#else
+        $column.javaField: null#if($foreach.count != $columns.size()),#end
+#end
+#end
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+      this.daterange${AttrName} = [];
+#end
+#end
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd(row) {
+      this.reset();
+      this.getTreeselect();
+      if (row != null && row.${treeCode}) {
+        this.form.${treeParentCode} = row.${treeCode};
+      } else {
+        this.form.${treeParentCode} = 0;
+      }
+      this.open = true;
+      this.title = "娣诲姞${functionName}";
+    },
+    /** 灞曞紑/鎶樺彔鎿嶄綔 */
+    toggleExpandAll() {
+      this.refreshTable = false;
+      this.isExpandAll = !this.isExpandAll;
+      this.$nextTick(() => {
+        this.refreshTable = true;
+      });
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      this.getTreeselect();
+      if (row != null) {
+        this.form.${treeParentCode} = row.${treeParentCode};
+      }
+      get${BusinessName}(row.${pkColumn.javaField}).then(response => {
+        this.form = response.data;
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+        this.form.$column.javaField = this.form.${column.javaField}.split(",");
+#end
+#end
+        this.open = true;
+        this.title = "淇敼${functionName}";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.#[[$]]#refs["form"].validate(valid => {
+        if (valid) {
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+          this.form.$column.javaField = this.form.${column.javaField}.join(",");
+#end
+#end
+          if (this.form.${pkColumn.javaField} != null) {
+            update${BusinessName}(this.form).then(response => {
+              this.#[[$modal]]#.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            add${BusinessName}(this.form).then(response => {
+              this.#[[$modal]]#.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      this.#[[$modal]]#.confirm('鏄惁纭鍒犻櫎${functionName}缂栧彿涓�"' + row.${pkColumn.javaField} + '"鐨勬暟鎹」锛�').then(function() {
+        return del${BusinessName}(row.${pkColumn.javaField});
+      }).then(() => {
+        this.getList();
+        this.#[[$modal]]#.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    }
+  }
+};
+</script>
diff --git a/zhitan-generator/target/classes/vm/vue/index.vue.vm b/zhitan-generator/target/classes/vm/vue/index.vue.vm
new file mode 100644
index 0000000..6296014
--- /dev/null
+++ b/zhitan-generator/target/classes/vm/vue/index.vue.vm
@@ -0,0 +1,602 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+#foreach($column in $columns)
+#if($column.query)
+#set($dictType=$column.dictType)
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.htmlType == "input")
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-input
+          v-model="queryParams.${column.javaField}"
+          placeholder="璇疯緭鍏�${comment}"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType)
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-select v-model="queryParams.${column.javaField}" placeholder="璇烽�夋嫨${comment}" clearable>
+          <el-option
+            v-for="dict in dict.type.${dictType}"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && $dictType)
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-select v-model="queryParams.${column.javaField}" placeholder="璇烽�夋嫨${comment}" clearable>
+          <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+        </el-select>
+      </el-form-item>
+#elseif($column.htmlType == "datetime" && $column.queryType != "BETWEEN")
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-date-picker clearable
+          v-model="queryParams.${column.javaField}"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨${comment}">
+        </el-date-picker>
+      </el-form-item>
+#elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+      <el-form-item label="${comment}">
+        <el-date-picker
+          v-model="daterange${AttrName}"
+          style="width: 240px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="寮�濮嬫棩鏈�"
+          end-placeholder="缁撴潫鏃ユ湡"
+        ></el-date-picker>
+      </el-form-item>
+#end
+#end
+#end
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['${moduleName}:${businessName}:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['${moduleName}:${businessName}:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['${moduleName}:${businessName}:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['${moduleName}:${businessName}:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="${businessName}List" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+#foreach($column in $columns)
+#set($javaField=$column.javaField)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.pk)
+      <el-table-column label="${comment}" align="center" prop="${javaField}" />
+#elseif($column.list && $column.htmlType == "datetime")
+      <el-table-column label="${comment}" align="center" prop="${javaField}" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.${javaField}, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+#elseif($column.list && $column.htmlType == "imageUpload")
+      <el-table-column label="${comment}" align="center" prop="${javaField}" width="100">
+        <template slot-scope="scope">
+          <image-preview :src="scope.row.${javaField}" :width="50" :height="50"/>
+        </template>
+      </el-table-column>
+#elseif($column.list && "" != $column.dictType)
+      <el-table-column label="${comment}" align="center" prop="${javaField}">
+        <template slot-scope="scope">
+#if($column.htmlType == "checkbox")
+          <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.${javaField} ? scope.row.${javaField}.split(',') : []"/>
+#else
+          <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.${javaField}"/>
+#end
+        </template>
+      </el-table-column>
+#elseif($column.list && "" != $javaField)
+      <el-table-column label="${comment}" align="center" prop="${javaField}" />
+#end
+#end
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['${moduleName}:${businessName}:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['${moduleName}:${businessName}:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀�${functionName}瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+#foreach($column in $columns)
+#set($field=$column.javaField)
+#if($column.insert && !$column.pk)
+#if(($column.usableColumn) || (!$column.superColumn))
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#set($dictType=$column.dictType)
+#if($column.htmlType == "input")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-input v-model="form.${field}" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+#elseif($column.htmlType == "imageUpload")
+        <el-form-item label="${comment}" prop="${field}">
+          <image-upload v-model="form.${field}"/>
+        </el-form-item>
+#elseif($column.htmlType == "fileUpload")
+        <el-form-item label="${comment}" prop="${field}">
+          <file-upload v-model="form.${field}"/>
+        </el-form-item>
+#elseif($column.htmlType == "editor")
+        <el-form-item label="${comment}">
+          <editor v-model="form.${field}" :min-height="192"/>
+        </el-form-item>
+#elseif($column.htmlType == "select" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-select v-model="form.${field}" placeholder="璇烽�夋嫨${comment}">
+            <el-option
+              v-for="dict in dict.type.${dictType}"
+              :key="dict.value"
+              :label="dict.label"
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+              :value="parseInt(dict.value)"
+#else
+              :value="dict.value"
+#end
+            ></el-option>
+          </el-select>
+        </el-form-item>
+#elseif($column.htmlType == "select" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-select v-model="form.${field}" placeholder="璇烽�夋嫨${comment}">
+            <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+          </el-select>
+        </el-form-item>
+#elseif($column.htmlType == "checkbox" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-checkbox-group v-model="form.${field}">
+            <el-checkbox
+              v-for="dict in dict.type.${dictType}"
+              :key="dict.value"
+              :label="dict.value">
+              {{dict.label}}
+            </el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+#elseif($column.htmlType == "checkbox" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-checkbox-group v-model="form.${field}">
+            <el-checkbox>璇烽�夋嫨瀛楀吀鐢熸垚</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+#elseif($column.htmlType == "radio" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-radio-group v-model="form.${field}">
+            <el-radio
+              v-for="dict in dict.type.${dictType}"
+              :key="dict.value"
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+              :label="parseInt(dict.value)"
+#else
+              :label="dict.value"
+#end
+            >{{dict.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+#elseif($column.htmlType == "radio" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-radio-group v-model="form.${field}">
+            <el-radio label="1">璇烽�夋嫨瀛楀吀鐢熸垚</el-radio>
+          </el-radio-group>
+        </el-form-item>
+#elseif($column.htmlType == "datetime")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-date-picker clearable
+            v-model="form.${field}"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨${comment}">
+          </el-date-picker>
+        </el-form-item>
+#elseif($column.htmlType == "textarea")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-input v-model="form.${field}" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+#end
+#end
+#end
+#end
+#if($table.sub)
+        <el-divider content-position="center">${subTable.functionName}淇℃伅</el-divider>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+            <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd${subClassName}">娣诲姞</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDelete${subClassName}">鍒犻櫎</el-button>
+          </el-col>
+        </el-row>
+        <el-table :data="${subclassName}List" :row-class-name="row${subClassName}Index" @selection-change="handle${subClassName}SelectionChange" ref="${subclassName}">
+          <el-table-column type="selection" width="50" align="center" />
+          <el-table-column label="搴忓彿" align="center" prop="index" width="50"/>
+#foreach($column in $subTable.columns)
+#set($javaField=$column.javaField)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.pk || $javaField == ${subTableFkclassName})
+#elseif($column.list && $column.htmlType == "input")
+          <el-table-column label="$comment" prop="${javaField}" width="150">
+            <template slot-scope="scope">
+              <el-input v-model="scope.row.$javaField" placeholder="璇疯緭鍏�$comment" />
+            </template>
+          </el-table-column>
+#elseif($column.list && $column.htmlType == "datetime")
+          <el-table-column label="$comment" prop="${javaField}" width="240">
+            <template slot-scope="scope">
+              <el-date-picker clearable v-model="scope.row.$javaField" type="date" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨$comment" />
+            </template>
+          </el-table-column>
+#elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" != $column.dictType)
+          <el-table-column label="$comment" prop="${javaField}" width="150">
+            <template slot-scope="scope">
+              <el-select v-model="scope.row.$javaField" placeholder="璇烽�夋嫨$comment">
+                <el-option
+                  v-for="dict in dict.type.$column.dictType"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </template>
+          </el-table-column>
+#elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" == $column.dictType)
+          <el-table-column label="$comment" prop="${javaField}" width="150">
+            <template slot-scope="scope">
+              <el-select v-model="scope.row.$javaField" placeholder="璇烽�夋嫨$comment">
+                <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+              </el-select>
+            </template>
+          </el-table-column>
+#end
+#end
+        </el-table>
+#end
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from "@/api/${moduleName}/${businessName}";
+
+export default {
+  name: "${BusinessName}",
+#if(${dicts} != '')
+  dicts: [${dicts}],
+#end
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+#if($table.sub)
+      // 瀛愯〃閫変腑鏁版嵁
+      checked${subClassName}: [],
+#end
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // ${functionName}琛ㄦ牸鏁版嵁
+      ${businessName}List: [],
+#if($table.sub)
+      // ${subTable.functionName}琛ㄦ牸鏁版嵁
+      ${subclassName}List: [],
+#end
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+      // $comment鏃堕棿鑼冨洿
+      daterange${AttrName}: [],
+#end
+#end
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+#foreach ($column in $columns)
+#if($column.query)
+        $column.javaField: null#if($foreach.count != $columns.size()),#end
+#end
+#end
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+#foreach ($column in $columns)
+#if($column.required)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+        $column.javaField: [
+          { required: true, message: "$comment涓嶈兘涓虹┖", trigger: #if($column.htmlType == "select" || $column.htmlType == "radio")"change"#else"blur"#end }
+        ]#if($foreach.count != $columns.size()),#end
+#end
+#end
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨ${functionName}鍒楄〃 */
+    getList() {
+      this.loading = true;
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+      this.queryParams.params = {};
+#break
+#end
+#end
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+      if (null != this.daterange${AttrName} && '' != this.daterange${AttrName}) {
+        this.queryParams.params["begin${AttrName}"] = this.daterange${AttrName}[0];
+        this.queryParams.params["end${AttrName}"] = this.daterange${AttrName}[1];
+      }
+#end
+#end
+      list${BusinessName}(this.queryParams).then(response => {
+        this.${businessName}List = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+        $column.javaField: []#if($foreach.count != $columns.size()),#end
+#else
+        $column.javaField: null#if($foreach.count != $columns.size()),#end
+#end
+#end
+      };
+#if($table.sub)
+      this.${subclassName}List = [];
+#end
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+      this.daterange${AttrName} = [];
+#end
+#end
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.${pkColumn.javaField})
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞${functionName}";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const ${pkColumn.javaField} = row.${pkColumn.javaField} || this.ids
+      get${BusinessName}(${pkColumn.javaField}).then(response => {
+        this.form = response.data;
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+        this.form.$column.javaField = this.form.${column.javaField}.split(",");
+#end
+#end
+#if($table.sub)
+        this.${subclassName}List = response.data.${subclassName}List;
+#end
+        this.open = true;
+        this.title = "淇敼${functionName}";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.#[[$]]#refs["form"].validate(valid => {
+        if (valid) {
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+          this.form.$column.javaField = this.form.${column.javaField}.join(",");
+#end
+#end
+#if($table.sub)
+          this.form.${subclassName}List = this.${subclassName}List;
+#end
+          if (this.form.${pkColumn.javaField} != null) {
+            update${BusinessName}(this.form).then(response => {
+              this.#[[$modal]]#.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            add${BusinessName}(this.form).then(response => {
+              this.#[[$modal]]#.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const ${pkColumn.javaField}s = row.${pkColumn.javaField} || this.ids;
+      this.#[[$modal]]#.confirm('鏄惁纭鍒犻櫎${functionName}缂栧彿涓�"' + ${pkColumn.javaField}s + '"鐨勬暟鎹」锛�').then(function() {
+        return del${BusinessName}(${pkColumn.javaField}s);
+      }).then(() => {
+        this.getList();
+        this.#[[$modal]]#.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+#if($table.sub)
+	/** ${subTable.functionName}搴忓彿 */
+    row${subClassName}Index({ row, rowIndex }) {
+      row.index = rowIndex + 1;
+    },
+    /** ${subTable.functionName}娣诲姞鎸夐挳鎿嶄綔 */
+    handleAdd${subClassName}() {
+      let obj = {};
+#foreach($column in $subTable.columns)
+#if($column.pk || $column.javaField == ${subTableFkclassName})
+#elseif($column.list && "" != $javaField)
+      obj.$column.javaField = "";
+#end
+#end
+      this.${subclassName}List.push(obj);
+    },
+    /** ${subTable.functionName}鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete${subClassName}() {
+      if (this.checked${subClassName}.length == 0) {
+        this.#[[$modal]]#.msgError("璇峰厛閫夋嫨瑕佸垹闄ょ殑${subTable.functionName}鏁版嵁");
+      } else {
+        const ${subclassName}List = this.${subclassName}List;
+        const checked${subClassName} = this.checked${subClassName};
+        this.${subclassName}List = ${subclassName}List.filter(function(item) {
+          return checked${subClassName}.indexOf(item.index) == -1
+        });
+      }
+    },
+    /** 澶嶉�夋閫変腑鏁版嵁 */
+    handle${subClassName}SelectionChange(selection) {
+      this.checked${subClassName} = selection.map(item => item.index)
+    },
+#end
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('${moduleName}/${businessName}/export', {
+        ...this.queryParams
+      }, `${businessName}_#[[${new Date().getTime()}]]#.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/zhitan-generator/target/classes/vm/vue/v3/index-tree.vue.vm b/zhitan-generator/target/classes/vm/vue/v3/index-tree.vue.vm
new file mode 100644
index 0000000..c54d62b
--- /dev/null
+++ b/zhitan-generator/target/classes/vm/vue/v3/index-tree.vue.vm
@@ -0,0 +1,474 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+#foreach($column in $columns)
+#if($column.query)
+#set($dictType=$column.dictType)
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.htmlType == "input")
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-input
+          v-model="queryParams.${column.javaField}"
+          placeholder="璇疯緭鍏�${comment}"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType)
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-select v-model="queryParams.${column.javaField}" placeholder="璇烽�夋嫨${comment}" clearable>
+          <el-option
+            v-for="dict in ${dictType}"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && $dictType)
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-select v-model="queryParams.${column.javaField}" placeholder="璇烽�夋嫨${comment}" clearable>
+          <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+        </el-select>
+      </el-form-item>
+#elseif($column.htmlType == "datetime" && $column.queryType != "BETWEEN")
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-date-picker clearable
+          v-model="queryParams.${column.javaField}"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="閫夋嫨${comment}">
+        </el-date-picker>
+      </el-form-item>
+#elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+      <el-form-item label="${comment}" style="width: 308px">
+        <el-date-picker
+          v-model="daterange${AttrName}"
+          value-format="YYYY-MM-DD"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="寮�濮嬫棩鏈�"
+          end-placeholder="缁撴潫鏃ユ湡"
+        ></el-date-picker>
+      </el-form-item>
+#end
+#end
+#end
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['${moduleName}:${businessName}:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          plain
+          icon="Sort"
+          @click="toggleExpandAll"
+        >灞曞紑/鎶樺彔</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table
+      v-if="refreshTable"
+      v-loading="loading"
+      :data="${businessName}List"
+      row-key="${treeCode}"
+      :default-expand-all="isExpandAll"
+      :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
+    >
+#foreach($column in $columns)
+#set($javaField=$column.javaField)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.pk)
+#elseif($column.list && $column.htmlType == "datetime")
+      <el-table-column label="${comment}" align="center" prop="${javaField}" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.${javaField}, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+#elseif($column.list && $column.htmlType == "imageUpload")
+      <el-table-column label="${comment}" align="center" prop="${javaField}" width="100">
+        <template #default="scope">
+          <image-preview :src="scope.row.${javaField}" :width="50" :height="50"/>
+        </template>
+      </el-table-column>
+#elseif($column.list && "" != $column.dictType)
+      <el-table-column label="${comment}" align="center" prop="${javaField}">
+        <template #default="scope">
+#if($column.htmlType == "checkbox")
+          <dict-tag :options="${column.dictType}" :value="scope.row.${javaField} ? scope.row.${javaField}.split(',') : []"/>
+#else
+          <dict-tag :options="${column.dictType}" :value="scope.row.${javaField}"/>
+#end
+        </template>
+      </el-table-column>
+#elseif($column.list && "" != $javaField)
+#if(${foreach.index} == 1)
+      <el-table-column label="${comment}" prop="${javaField}" />
+#else
+      <el-table-column label="${comment}" align="center" prop="${javaField}" />
+#end
+#end
+#end
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['${moduleName}:${businessName}:edit']">淇敼</el-button>
+          <el-button link type="primary" icon="Plus" @click="handleAdd(scope.row)" v-hasPermi="['${moduleName}:${businessName}:add']">鏂板</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['${moduleName}:${businessName}:remove']">鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 娣诲姞鎴栦慨鏀�${functionName}瀵硅瘽妗� -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="${businessName}Ref" :model="form" :rules="rules" label-width="80px">
+#foreach($column in $columns)
+#set($field=$column.javaField)
+#if($column.insert && !$column.pk)
+#if(($column.usableColumn) || (!$column.superColumn))
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#set($dictType=$column.dictType)
+#if("" != $treeParentCode && $column.javaField == $treeParentCode)
+        <el-form-item label="${comment}" prop="${treeParentCode}">
+          <el-tree-select
+            v-model="form.${treeParentCode}"
+            :data="${businessName}Options"
+            :props="{ value: '${treeCode}', label: '${treeName}', children: 'children' }"
+            value-key="${treeCode}"
+            placeholder="璇烽�夋嫨${comment}"
+            check-strictly
+          />
+        </el-form-item>
+#elseif($column.htmlType == "input")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-input v-model="form.${field}" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+#elseif($column.htmlType == "imageUpload")
+        <el-form-item label="${comment}" prop="${field}">
+          <image-upload v-model="form.${field}"/>
+        </el-form-item>
+#elseif($column.htmlType == "fileUpload")
+        <el-form-item label="${comment}" prop="${field}">
+          <file-upload v-model="form.${field}"/>
+        </el-form-item>
+#elseif($column.htmlType == "editor")
+        <el-form-item label="${comment}">
+          <editor v-model="form.${field}" :min-height="192"/>
+        </el-form-item>
+#elseif($column.htmlType == "select" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-select v-model="form.${field}" placeholder="璇烽�夋嫨${comment}">
+            <el-option
+              v-for="dict in ${dictType}"
+              :key="dict.value"
+              :label="dict.label"
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+              :value="parseInt(dict.value)"
+#else
+              :value="dict.value"
+#end
+            ></el-option>
+          </el-select>
+        </el-form-item>
+#elseif($column.htmlType == "select" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-select v-model="form.${field}" placeholder="璇烽�夋嫨${comment}">
+            <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+          </el-select>
+        </el-form-item>
+#elseif($column.htmlType == "checkbox" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-checkbox-group v-model="form.${field}">
+            <el-checkbox
+              v-for="dict in ${dictType}"
+              :key="dict.value"
+              :label="dict.value">
+              {{dict.label}}
+            </el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+#elseif($column.htmlType == "checkbox" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-checkbox-group v-model="form.${field}">
+            <el-checkbox>璇烽�夋嫨瀛楀吀鐢熸垚</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+#elseif($column.htmlType == "radio" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-radio-group v-model="form.${field}">
+            <el-radio
+              v-for="dict in ${dictType}"
+              :key="dict.value"
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+              :label="parseInt(dict.value)"
+#else
+              :label="dict.value"
+#end
+            >{{dict.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+#elseif($column.htmlType == "radio" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-radio-group v-model="form.${field}">
+            <el-radio label="1">璇烽�夋嫨瀛楀吀鐢熸垚</el-radio>
+          </el-radio-group>
+        </el-form-item>
+#elseif($column.htmlType == "datetime")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-date-picker clearable
+            v-model="form.${field}"
+            type="date"
+            value-format="YYYY-MM-DD"
+            placeholder="閫夋嫨${comment}">
+          </el-date-picker>
+        </el-form-item>
+#elseif($column.htmlType == "textarea")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-input v-model="form.${field}" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+#end
+#end
+#end
+#end
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+          <el-button @click="cancel">鍙� 娑�</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="${BusinessName}">
+import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from "@/api/${moduleName}/${businessName}";
+
+const { proxy } = getCurrentInstance();
+#if(${dicts} != '')
+#set($dictsNoSymbol=$dicts.replace("'", ""))
+const { ${dictsNoSymbol} } = proxy.useDict(${dicts});
+#end
+
+const ${businessName}List = ref([]);
+const ${businessName}Options = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const title = ref("");
+const isExpandAll = ref(true);
+const refreshTable = ref(true);
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+const daterange${AttrName} = ref([]);
+#end
+#end
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    #foreach ($column in $columns)
+#if($column.query)
+    $column.javaField: null#if($foreach.count != $columns.size()),#end
+#end
+#end
+  },
+  rules: {
+    #foreach ($column in $columns)
+#if($column.required)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+    $column.javaField: [
+      { required: true, message: "$comment涓嶈兘涓虹┖", trigger: #if($column.htmlType == "select" || $column.htmlType == "radio")"change"#else"blur"#end }
+    ]#if($foreach.count != $columns.size()),#end
+#end
+#end
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 鏌ヨ${functionName}鍒楄〃 */
+function getList() {
+  loading.value = true;
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+  queryParams.value.params = {};
+#break
+#end
+#end
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+  if (null != daterange${AttrName} && '' != daterange${AttrName}) {
+    queryParams.value.params["begin${AttrName}"] = daterange${AttrName}.value[0];
+    queryParams.value.params["end${AttrName}"] = daterange${AttrName}.value[1];
+  }
+#end
+#end
+  list${BusinessName}(queryParams.value).then(response => {
+    ${businessName}List.value = proxy.handleTree(response.data, "${treeCode}", "${treeParentCode}");
+    loading.value = false;
+  });
+}
+
+/** 鏌ヨ${functionName}涓嬫媺鏍戠粨鏋� */
+function getTreeselect() {
+  list${BusinessName}().then(response => {
+    ${businessName}Options.value = [];
+    const data = { ${treeCode}: 0, ${treeName}: '椤剁骇鑺傜偣', children: [] };
+    data.children = proxy.handleTree(response.data, "${treeCode}", "${treeParentCode}");
+    ${businessName}Options.value.push(data);
+  });
+}
+	
+// 鍙栨秷鎸夐挳
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+// 琛ㄥ崟閲嶇疆
+function reset() {
+  form.value = {
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+    $column.javaField: []#if($foreach.count != $columns.size()),#end
+#else
+    $column.javaField: null#if($foreach.count != $columns.size()),#end
+#end
+#end
+  };
+  proxy.resetForm("${businessName}Ref");
+}
+
+/** 鎼滅储鎸夐挳鎿嶄綔 */
+function handleQuery() {
+  getList();
+}
+
+/** 閲嶇疆鎸夐挳鎿嶄綔 */
+function resetQuery() {
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+  daterange${AttrName}.value = [];
+#end
+#end
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+/** 鏂板鎸夐挳鎿嶄綔 */
+function handleAdd(row) {
+  reset();
+  getTreeselect();
+  if (row != null && row.${treeCode}) {
+    form.value.${treeParentCode} = row.${treeCode};
+  } else {
+    form.value.${treeParentCode} = 0;
+  }
+  open.value = true;
+  title.value = "娣诲姞${functionName}";
+}
+
+/** 灞曞紑/鎶樺彔鎿嶄綔 */
+function toggleExpandAll() {
+  refreshTable.value = false;
+  isExpandAll.value = !isExpandAll.value;
+  nextTick(() => {
+    refreshTable.value = true;
+  });
+}
+
+/** 淇敼鎸夐挳鎿嶄綔 */
+async function handleUpdate(row) {
+  reset();
+  await getTreeselect();
+  if (row != null) {
+    form.value.${treeParentCode} = row.${treeParentCode};
+  }
+  get${BusinessName}(row.${pkColumn.javaField}).then(response => {
+    form.value = response.data;
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+    form.value.$column.javaField = form.value.${column.javaField}.split(",");
+#end
+#end
+    open.value = true;
+    title.value = "淇敼${functionName}";
+  });
+}
+
+/** 鎻愪氦鎸夐挳 */
+function submitForm() {
+  proxy.#[[$]]#refs["${businessName}Ref"].validate(valid => {
+    if (valid) {
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+      form.value.$column.javaField = form.value.${column.javaField}.join(",");
+#end
+#end
+      if (form.value.${pkColumn.javaField} != null) {
+        update${BusinessName}(form.value).then(response => {
+          proxy.#[[$modal]]#.msgSuccess("淇敼鎴愬姛");
+          open.value = false;
+          getList();
+        });
+      } else {
+        add${BusinessName}(form.value).then(response => {
+          proxy.#[[$modal]]#.msgSuccess("鏂板鎴愬姛");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+/** 鍒犻櫎鎸夐挳鎿嶄綔 */
+function handleDelete(row) {
+  proxy.#[[$modal]]#.confirm('鏄惁纭鍒犻櫎${functionName}缂栧彿涓�"' + row.${pkColumn.javaField} + '"鐨勬暟鎹」锛�').then(function() {
+    return del${BusinessName}(row.${pkColumn.javaField});
+  }).then(() => {
+    getList();
+    proxy.#[[$modal]]#.msgSuccess("鍒犻櫎鎴愬姛");
+  }).catch(() => {});
+}
+
+getList();
+</script>
diff --git a/zhitan-generator/target/classes/vm/vue/v3/index.vue.vm b/zhitan-generator/target/classes/vm/vue/v3/index.vue.vm
new file mode 100644
index 0000000..8b25665
--- /dev/null
+++ b/zhitan-generator/target/classes/vm/vue/v3/index.vue.vm
@@ -0,0 +1,590 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+#foreach($column in $columns)
+#if($column.query)
+#set($dictType=$column.dictType)
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.htmlType == "input")
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-input
+          v-model="queryParams.${column.javaField}"
+          placeholder="璇疯緭鍏�${comment}"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType)
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-select v-model="queryParams.${column.javaField}" placeholder="璇烽�夋嫨${comment}" clearable>
+          <el-option
+            v-for="dict in ${dictType}"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && $dictType)
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-select v-model="queryParams.${column.javaField}" placeholder="璇烽�夋嫨${comment}" clearable>
+          <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+        </el-select>
+      </el-form-item>
+#elseif($column.htmlType == "datetime" && $column.queryType != "BETWEEN")
+      <el-form-item label="${comment}" prop="${column.javaField}">
+        <el-date-picker clearable
+          v-model="queryParams.${column.javaField}"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="璇烽�夋嫨${comment}">
+        </el-date-picker>
+      </el-form-item>
+#elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+      <el-form-item label="${comment}" style="width: 308px">
+        <el-date-picker
+          v-model="daterange${AttrName}"
+          value-format="YYYY-MM-DD"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="寮�濮嬫棩鏈�"
+          end-placeholder="缁撴潫鏃ユ湡"
+        ></el-date-picker>
+      </el-form-item>
+#end
+#end
+#end
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['${moduleName}:${businessName}:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['${moduleName}:${businessName}:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['${moduleName}:${businessName}:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['${moduleName}:${businessName}:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="${businessName}List" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+#foreach($column in $columns)
+#set($javaField=$column.javaField)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.pk)
+      <el-table-column label="${comment}" align="center" prop="${javaField}" />
+#elseif($column.list && $column.htmlType == "datetime")
+      <el-table-column label="${comment}" align="center" prop="${javaField}" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.${javaField}, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+#elseif($column.list && $column.htmlType == "imageUpload")
+      <el-table-column label="${comment}" align="center" prop="${javaField}" width="100">
+        <template #default="scope">
+          <image-preview :src="scope.row.${javaField}" :width="50" :height="50"/>
+        </template>
+      </el-table-column>
+#elseif($column.list && "" != $column.dictType)
+      <el-table-column label="${comment}" align="center" prop="${javaField}">
+        <template #default="scope">
+#if($column.htmlType == "checkbox")
+          <dict-tag :options="${column.dictType}" :value="scope.row.${javaField} ? scope.row.${javaField}.split(',') : []"/>
+#else
+          <dict-tag :options="${column.dictType}" :value="scope.row.${javaField}"/>
+#end
+        </template>
+      </el-table-column>
+#elseif($column.list && "" != $javaField)
+      <el-table-column label="${comment}" align="center" prop="${javaField}" />
+#end
+#end
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['${moduleName}:${businessName}:edit']">淇敼</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['${moduleName}:${businessName}:remove']">鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀�${functionName}瀵硅瘽妗� -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="${businessName}Ref" :model="form" :rules="rules" label-width="80px">
+#foreach($column in $columns)
+#set($field=$column.javaField)
+#if($column.insert && !$column.pk)
+#if(($column.usableColumn) || (!$column.superColumn))
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#set($dictType=$column.dictType)
+#if($column.htmlType == "input")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-input v-model="form.${field}" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+#elseif($column.htmlType == "imageUpload")
+        <el-form-item label="${comment}" prop="${field}">
+          <image-upload v-model="form.${field}"/>
+        </el-form-item>
+#elseif($column.htmlType == "fileUpload")
+        <el-form-item label="${comment}" prop="${field}">
+          <file-upload v-model="form.${field}"/>
+        </el-form-item>
+#elseif($column.htmlType == "editor")
+        <el-form-item label="${comment}">
+          <editor v-model="form.${field}" :min-height="192"/>
+        </el-form-item>
+#elseif($column.htmlType == "select" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-select v-model="form.${field}" placeholder="璇烽�夋嫨${comment}">
+            <el-option
+              v-for="dict in ${dictType}"
+              :key="dict.value"
+              :label="dict.label"
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+              :value="parseInt(dict.value)"
+#else
+              :value="dict.value"
+#end
+            ></el-option>
+          </el-select>
+        </el-form-item>
+#elseif($column.htmlType == "select" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-select v-model="form.${field}" placeholder="璇烽�夋嫨${comment}">
+            <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+          </el-select>
+        </el-form-item>
+#elseif($column.htmlType == "checkbox" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-checkbox-group v-model="form.${field}">
+            <el-checkbox
+              v-for="dict in ${dictType}"
+              :key="dict.value"
+              :label="dict.value">
+              {{dict.label}}
+            </el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+#elseif($column.htmlType == "checkbox" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-checkbox-group v-model="form.${field}">
+            <el-checkbox>璇烽�夋嫨瀛楀吀鐢熸垚</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+#elseif($column.htmlType == "radio" && "" != $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-radio-group v-model="form.${field}">
+            <el-radio
+              v-for="dict in ${dictType}"
+              :key="dict.value"
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+              :label="parseInt(dict.value)"
+#else
+              :label="dict.value"
+#end
+            >{{dict.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+#elseif($column.htmlType == "radio" && $dictType)
+        <el-form-item label="${comment}" prop="${field}">
+          <el-radio-group v-model="form.${field}">
+            <el-radio label="1">璇烽�夋嫨瀛楀吀鐢熸垚</el-radio>
+          </el-radio-group>
+        </el-form-item>
+#elseif($column.htmlType == "datetime")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-date-picker clearable
+            v-model="form.${field}"
+            type="date"
+            value-format="YYYY-MM-DD"
+            placeholder="璇烽�夋嫨${comment}">
+          </el-date-picker>
+        </el-form-item>
+#elseif($column.htmlType == "textarea")
+        <el-form-item label="${comment}" prop="${field}">
+          <el-input v-model="form.${field}" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+#end
+#end
+#end
+#end
+#if($table.sub)
+        <el-divider content-position="center">${subTable.functionName}淇℃伅</el-divider>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+            <el-button type="primary" icon="Plus" @click="handleAdd${subClassName}">娣诲姞</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button type="danger" icon="Delete" @click="handleDelete${subClassName}">鍒犻櫎</el-button>
+          </el-col>
+        </el-row>
+        <el-table :data="${subclassName}List" :row-class-name="row${subClassName}Index" @selection-change="handle${subClassName}SelectionChange" ref="${subclassName}">
+          <el-table-column type="selection" width="50" align="center" />
+          <el-table-column label="搴忓彿" align="center" prop="index" width="50"/>
+#foreach($column in $subTable.columns)
+#set($javaField=$column.javaField)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.pk || $javaField == ${subTableFkclassName})
+#elseif($column.list && $column.htmlType == "input")
+          <el-table-column label="$comment" prop="${javaField}" width="150">
+            <template #default="scope">
+              <el-input v-model="scope.row.$javaField" placeholder="璇疯緭鍏�$comment" />
+            </template>
+          </el-table-column>
+#elseif($column.list && $column.htmlType == "datetime")
+          <el-table-column label="$comment" prop="${javaField}" width="240">
+            <template #default="scope">
+              <el-date-picker clearable
+                v-model="scope.row.$javaField"
+                type="date"
+                value-format="YYYY-MM-DD"
+                placeholder="璇烽�夋嫨$comment">
+              </el-date-picker>
+            </template>
+          </el-table-column>
+#elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" != $column.dictType)
+          <el-table-column label="$comment" prop="${javaField}" width="150">
+            <template #default="scope">
+              <el-select v-model="scope.row.$javaField" placeholder="璇烽�夋嫨$comment">
+                <el-option
+                  v-for="dict in $column.dictType"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </template>
+          </el-table-column>
+#elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" == $column.dictType)
+          <el-table-column label="$comment" prop="${javaField}" width="150">
+            <template #default="scope">
+              <el-select v-model="scope.row.$javaField" placeholder="璇烽�夋嫨$comment">
+                <el-option label="璇烽�夋嫨瀛楀吀鐢熸垚" value="" />
+              </el-select>
+            </template>
+          </el-table-column>
+#end
+#end
+        </el-table>
+#end
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+          <el-button @click="cancel">鍙� 娑�</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="${BusinessName}">
+import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from "@/api/${moduleName}/${businessName}";
+
+const { proxy } = getCurrentInstance();
+#if(${dicts} != '')
+#set($dictsNoSymbol=$dicts.replace("'", ""))
+const { ${dictsNoSymbol} } = proxy.useDict(${dicts});
+#end
+
+const ${businessName}List = ref([]);
+#if($table.sub)
+const ${subclassName}List = ref([]);
+#end
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+#if($table.sub)
+const checked${subClassName} = ref([]);
+#end
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+const daterange${AttrName} = ref([]);
+#end
+#end
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    #foreach ($column in $columns)
+#if($column.query)
+    $column.javaField: null#if($foreach.count != $columns.size()),#end
+#end
+#end
+  },
+  rules: {
+    #foreach ($column in $columns)
+#if($column.required)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+    $column.javaField: [
+      { required: true, message: "$comment涓嶈兘涓虹┖", trigger: #if($column.htmlType == "select" || $column.htmlType == "radio")"change"#else"blur"#end }
+    ]#if($foreach.count != $columns.size()),#end
+#end
+#end
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 鏌ヨ${functionName}鍒楄〃 */
+function getList() {
+  loading.value = true;
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+  queryParams.value.params = {};
+#break
+#end
+#end
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+  if (null != daterange${AttrName} && '' != daterange${AttrName}) {
+    queryParams.value.params["begin${AttrName}"] = daterange${AttrName}.value[0];
+    queryParams.value.params["end${AttrName}"] = daterange${AttrName}.value[1];
+  }
+#end
+#end
+  list${BusinessName}(queryParams.value).then(response => {
+    ${businessName}List.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+// 鍙栨秷鎸夐挳
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+// 琛ㄥ崟閲嶇疆
+function reset() {
+  form.value = {
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+    $column.javaField: []#if($foreach.count != $columns.size()),#end
+#else
+    $column.javaField: null#if($foreach.count != $columns.size()),#end
+#end
+#end
+  };
+#if($table.sub)
+  ${subclassName}List.value = [];
+#end
+  proxy.resetForm("${businessName}Ref");
+}
+
+/** 鎼滅储鎸夐挳鎿嶄綔 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 閲嶇疆鎸夐挳鎿嶄綔 */
+function resetQuery() {
+#foreach ($column in $columns)
+#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+  daterange${AttrName}.value = [];
+#end
+#end
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+// 澶氶�夋閫変腑鏁版嵁
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.${pkColumn.javaField});
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+/** 鏂板鎸夐挳鎿嶄綔 */
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "娣诲姞${functionName}";
+}
+
+/** 淇敼鎸夐挳鎿嶄綔 */
+function handleUpdate(row) {
+  reset();
+  const _${pkColumn.javaField} = row.${pkColumn.javaField} || ids.value
+  get${BusinessName}(_${pkColumn.javaField}).then(response => {
+    form.value = response.data;
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+    form.value.$column.javaField = form.value.${column.javaField}.split(",");
+#end
+#end
+#if($table.sub)
+    ${subclassName}List.value = response.data.${subclassName}List;
+#end
+    open.value = true;
+    title.value = "淇敼${functionName}";
+  });
+}
+
+/** 鎻愪氦鎸夐挳 */
+function submitForm() {
+  proxy.#[[$]]#refs["${businessName}Ref"].validate(valid => {
+    if (valid) {
+#foreach ($column in $columns)
+#if($column.htmlType == "checkbox")
+      form.value.$column.javaField = form.value.${column.javaField}.join(",");
+#end
+#end
+#if($table.sub)
+      form.value.${subclassName}List = ${subclassName}List.value;
+#end
+      if (form.value.${pkColumn.javaField} != null) {
+        update${BusinessName}(form.value).then(response => {
+          proxy.#[[$modal]]#.msgSuccess("淇敼鎴愬姛");
+          open.value = false;
+          getList();
+        });
+      } else {
+        add${BusinessName}(form.value).then(response => {
+          proxy.#[[$modal]]#.msgSuccess("鏂板鎴愬姛");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+/** 鍒犻櫎鎸夐挳鎿嶄綔 */
+function handleDelete(row) {
+  const _${pkColumn.javaField}s = row.${pkColumn.javaField} || ids.value;
+  proxy.#[[$modal]]#.confirm('鏄惁纭鍒犻櫎${functionName}缂栧彿涓�"' + _${pkColumn.javaField}s + '"鐨勬暟鎹」锛�').then(function() {
+    return del${BusinessName}(_${pkColumn.javaField}s);
+  }).then(() => {
+    getList();
+    proxy.#[[$modal]]#.msgSuccess("鍒犻櫎鎴愬姛");
+  }).catch(() => {});
+}
+
+#if($table.sub)
+/** ${subTable.functionName}搴忓彿 */
+function row${subClassName}Index({ row, rowIndex }) {
+  row.index = rowIndex + 1;
+}
+
+/** ${subTable.functionName}娣诲姞鎸夐挳鎿嶄綔 */
+function handleAdd${subClassName}() {
+  let obj = {};
+#foreach($column in $subTable.columns)
+#if($column.pk || $column.javaField == ${subTableFkclassName})
+#elseif($column.list && "" != $javaField)
+  obj.$column.javaField = "";
+#end
+#end
+  ${subclassName}List.value.push(obj);
+}
+
+/** ${subTable.functionName}鍒犻櫎鎸夐挳鎿嶄綔 */
+function handleDelete${subClassName}() {
+  if (checked${subClassName}.value.length == 0) {
+    proxy.#[[$modal]]#.msgError("璇峰厛閫夋嫨瑕佸垹闄ょ殑${subTable.functionName}鏁版嵁");
+  } else {
+    const ${subclassName}s = ${subclassName}List.value;
+    const checked${subClassName}s = checked${subClassName}.value;
+    ${subclassName}List.value = ${subclassName}s.filter(function(item) {
+      return checked${subClassName}s.indexOf(item.index) == -1
+    });
+  }
+}
+
+/** 澶嶉�夋閫変腑鏁版嵁 */
+function handle${subClassName}SelectionChange(selection) {
+  checked${subClassName}.value = selection.map(item => item.index)
+}
+
+#end
+/** 瀵煎嚭鎸夐挳鎿嶄綔 */
+function handleExport() {
+  proxy.download('${moduleName}/${businessName}/export', {
+    ...queryParams.value
+  }, `${businessName}_#[[${new Date().getTime()}]]#.xlsx`)
+}
+
+getList();
+</script>
diff --git a/zhitan-generator/target/classes/vm/xml/mapper.xml.vm b/zhitan-generator/target/classes/vm/xml/mapper.xml.vm
new file mode 100644
index 0000000..6559b8a
--- /dev/null
+++ b/zhitan-generator/target/classes/vm/xml/mapper.xml.vm
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="${packageName}.mapper.${ClassName}Mapper">
+
+    <resultMap type="${ClassName}" id="${ClassName}Result">
+#foreach ($column in $columns)
+        <result property="${column.javaField}"    column="${column.columnName}"    />
+#end
+    </resultMap>
+#if($table.sub)
+
+    <resultMap id="${ClassName}${subClassName}Result" type="${ClassName}" extends="${ClassName}Result">
+        <collection property="${subclassName}List" notNullColumn="sub_${subTable.pkColumn.columnName}" javaType="java.util.List" resultMap="${subClassName}Result" />
+    </resultMap>
+
+    <resultMap type="${subClassName}" id="${subClassName}Result">
+#foreach ($column in $subTable.columns)
+        <result property="${column.javaField}"    column="sub_${column.columnName}"    />
+#end
+    </resultMap>
+#end
+
+    <sql id="select${ClassName}Vo">
+        select#foreach($column in $columns) $column.columnName#if($foreach.count != $columns.size()),#end#end from ${tableName}
+    </sql>
+
+    <select id="select${ClassName}List" parameterType="${ClassName}" resultMap="${ClassName}Result">
+        <include refid="select${ClassName}Vo"/>
+        <where>
+#foreach($column in $columns)
+#set($queryType=$column.queryType)
+#set($javaField=$column.javaField)
+#set($javaType=$column.javaType)
+#set($columnName=$column.columnName)
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+#if($column.query)
+#if($column.queryType == "EQ")
+            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName = #{$javaField}</if>
+#elseif($queryType == "NE")
+            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName != #{$javaField}</if>
+#elseif($queryType == "GT")
+            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &gt; #{$javaField}</if>
+#elseif($queryType == "GTE")
+            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &gt;= #{$javaField}</if>
+#elseif($queryType == "LT")
+            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &lt; #{$javaField}</if>
+#elseif($queryType == "LTE")
+            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &lt;= #{$javaField}</if>
+#elseif($queryType == "LIKE")
+            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName like concat('%', #{$javaField}, '%')</if>
+#elseif($queryType == "BETWEEN")
+            <if test="params.begin$AttrName != null and params.begin$AttrName != '' and params.end$AttrName != null and params.end$AttrName != ''"> and $columnName between #{params.begin$AttrName} and #{params.end$AttrName}</if>
+#end
+#end
+#end
+        </where>
+    </select>
+
+    <select id="select${ClassName}By${pkColumn.capJavaField}" parameterType="${pkColumn.javaType}" resultMap="#if($table.sub)${ClassName}${subClassName}Result#else${ClassName}Result#end">
+        <include refid="select${ClassName}Vo"/>
+        where ${pkColumn.columnName} = #{${pkColumn.javaField}}
+    </select>
+
+    <insert id="insert${ClassName}" parameterType="${ClassName}"#if($pkColumn.increment) useGeneratedKeys="true" keyProperty="$pkColumn.javaField"#end>
+        insert into ${tableName}
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+#foreach($column in $columns)
+#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment)
+            <if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">$column.columnName,</if>
+#end
+#end
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+#foreach($column in $columns)
+#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment)
+            <if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">#{$column.javaField},</if>
+#end
+#end
+         </trim>
+    </insert>
+
+    <update id="update${ClassName}" parameterType="${ClassName}">
+        update ${tableName}
+        <trim prefix="SET" suffixOverrides=",">
+#foreach($column in $columns)
+#if($column.columnName != $pkColumn.columnName)
+            <if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">$column.columnName = #{$column.javaField},</if>
+#end
+#end
+        </trim>
+        where ${pkColumn.columnName} = #{${pkColumn.javaField}}
+    </update>
+
+    <delete id="delete${ClassName}By${pkColumn.capJavaField}" parameterType="${pkColumn.javaType}">
+        delete from ${tableName} where ${pkColumn.columnName} = #{${pkColumn.javaField}}
+    </delete>
+
+    <delete id="delete${ClassName}By${pkColumn.capJavaField}s" parameterType="String">
+        delete from ${tableName} where ${pkColumn.columnName} in
+        <foreach item="${pkColumn.javaField}" collection="array" open="(" separator="," close=")">
+            #{${pkColumn.javaField}}
+        </foreach>
+    </delete>
+#if($table.sub)
+
+    <delete id="delete${subClassName}By${subTableFkClassName}s" parameterType="String">
+        delete from ${subTableName} where ${subTableFkName} in
+        <foreach item="${subTableFkclassName}" collection="array" open="(" separator="," close=")">
+            #{${subTableFkclassName}}
+        </foreach>
+    </delete>
+
+    <delete id="delete${subClassName}By${subTableFkClassName}" parameterType="${pkColumn.javaType}">
+        delete from ${subTableName} where ${subTableFkName} = #{${subTableFkclassName}}
+    </delete>
+
+    <insert id="batch${subClassName}">
+        insert into ${subTableName}(#foreach($column in $subTable.columns) $column.columnName#if($foreach.count != $subTable.columns.size()),#end#end) values
+		<foreach item="item" index="index" collection="list" separator=",">
+            (#foreach($column in $subTable.columns) #{item.$column.javaField}#if($foreach.count != $subTable.columns.size()),#end#end)
+        </foreach>
+    </insert>
+#end
+</mapper>
\ No newline at end of file
diff --git a/zhitan-quartz/pom.xml b/zhitan-quartz/pom.xml
new file mode 100644
index 0000000..de7a4db
--- /dev/null
+++ b/zhitan-quartz/pom.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>BaseAdminAPI</artifactId>
+        <groupId>com.zhitan</groupId>
+        <version>3.8.7</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>zhitan-quartz</artifactId>
+
+    <description>
+        quartz瀹氭椂浠诲姟
+    </description>
+
+    <dependencies>
+
+        <!-- 瀹氭椂浠诲姟 -->
+        <dependency>
+            <groupId>org.quartz-scheduler</groupId>
+            <artifactId>quartz</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.mchange</groupId>
+                    <artifactId>c3p0</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <!-- 閫氱敤宸ュ叿-->
+        <dependency>
+            <groupId>com.zhitan</groupId>
+            <artifactId>zhitan-common</artifactId>
+        </dependency>
+
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/zhitan-quartz/src/main/java/com/zhitan/quartz/controller/SysJobController.java b/zhitan-quartz/src/main/java/com/zhitan/quartz/controller/SysJobController.java
new file mode 100644
index 0000000..2a35da4
--- /dev/null
+++ b/zhitan-quartz/src/main/java/com/zhitan/quartz/controller/SysJobController.java
@@ -0,0 +1,186 @@
+package com.zhitan.quartz.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.zhitan.quartz.domain.SysJob;
+import com.zhitan.quartz.service.ISysJobService;
+import com.zhitan.quartz.util.CronUtils;
+import com.zhitan.quartz.util.ScheduleUtils;
+import org.quartz.SchedulerException;
+import javax.annotation.Resource;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.exception.job.TaskException;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.poi.ExcelUtil;
+
+/**
+ * 璋冨害浠诲姟淇℃伅鎿嶄綔澶勭悊
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/monitor/job")
+public class SysJobController extends BaseController
+{
+    @Resource
+    private ISysJobService jobService;
+
+    /**
+     * 鏌ヨ瀹氭椂浠诲姟鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('monitor:job:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysJob sysJob)
+    {
+        startPage();
+        List<SysJob> list = jobService.selectJobList(sysJob);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭瀹氭椂浠诲姟鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('monitor:job:export')")
+    @Log(title = "瀹氭椂浠诲姟", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysJob sysJob)
+    {
+        List<SysJob> list = jobService.selectJobList(sysJob);
+        ExcelUtil<SysJob> util = new ExcelUtil<SysJob>(SysJob.class);
+        util.exportExcel(response, list, "瀹氭椂浠诲姟");
+    }
+
+    /**
+     * 鑾峰彇瀹氭椂浠诲姟璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('monitor:job:query')")
+    @GetMapping(value = "/{jobId}")
+    public AjaxResult getInfo(@PathVariable("jobId") Long jobId)
+    {
+        return success(jobService.selectJobById(jobId));
+    }
+
+    /**
+     * 鏂板瀹氭椂浠诲姟
+     */
+    @PreAuthorize("@ss.hasPermi('monitor:job:add')")
+    @Log(title = "瀹氭椂浠诲姟", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody SysJob job) throws SchedulerException, TaskException
+    {
+        if (!CronUtils.isValid(job.getCronExpression()))
+        {
+            return error("鏂板浠诲姟'" + job.getJobName() + "'澶辫触锛孋ron琛ㄨ揪寮忎笉姝g‘");
+        }
+        else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI))
+        {
+            return error("鏂板浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆涓嶅厑璁�'rmi'璋冪敤");
+        }
+        else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.LOOKUP_LDAP, Constants.LOOKUP_LDAPS }))
+        {
+            return error("鏂板浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆涓嶅厑璁�'ldap(s)'璋冪敤");
+        }
+        else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.HTTP, Constants.HTTPS }))
+        {
+            return error("鏂板浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆涓嶅厑璁�'http(s)'璋冪敤");
+        }
+        else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), Constants.JOB_ERROR_STR))
+        {
+            return error("鏂板浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆瀛樺湪杩濊");
+        }
+        else if (!ScheduleUtils.whiteList(job.getInvokeTarget()))
+        {
+            return error("鏂板浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆涓嶅湪鐧藉悕鍗曞唴");
+        }
+        job.setCreateBy(getUsername());
+        return toAjax(jobService.insertJob(job));
+    }
+
+    /**
+     * 淇敼瀹氭椂浠诲姟
+     */
+    @PreAuthorize("@ss.hasPermi('monitor:job:edit')")
+    @Log(title = "瀹氭椂浠诲姟", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody SysJob job) throws SchedulerException, TaskException
+    {
+        if (!CronUtils.isValid(job.getCronExpression()))
+        {
+            return error("淇敼浠诲姟'" + job.getJobName() + "'澶辫触锛孋ron琛ㄨ揪寮忎笉姝g‘");
+        }
+        else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI))
+        {
+            return error("淇敼浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆涓嶅厑璁�'rmi'璋冪敤");
+        }
+        else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.LOOKUP_LDAP, Constants.LOOKUP_LDAPS }))
+        {
+            return error("淇敼浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆涓嶅厑璁�'ldap(s)'璋冪敤");
+        }
+        else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.HTTP, Constants.HTTPS }))
+        {
+            return error("淇敼浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆涓嶅厑璁�'http(s)'璋冪敤");
+        }
+        else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), Constants.JOB_ERROR_STR))
+        {
+            return error("淇敼浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆瀛樺湪杩濊");
+        }
+        else if (!ScheduleUtils.whiteList(job.getInvokeTarget()))
+        {
+            return error("淇敼浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆涓嶅湪鐧藉悕鍗曞唴");
+        }
+        job.setUpdateBy(getUsername());
+        return toAjax(jobService.updateJob(job));
+    }
+
+    /**
+     * 瀹氭椂浠诲姟鐘舵�佷慨鏀�
+     */
+    @PreAuthorize("@ss.hasPermi('monitor:job:changeStatus')")
+    @Log(title = "瀹氭椂浠诲姟", businessType = BusinessType.UPDATE)
+    @PutMapping("/changeStatus")
+    public AjaxResult changeStatus(@RequestBody SysJob job) throws SchedulerException
+    {
+        SysJob newJob = jobService.selectJobById(job.getJobId());
+        newJob.setStatus(job.getStatus());
+        return toAjax(jobService.changeStatus(newJob));
+    }
+
+    /**
+     * 瀹氭椂浠诲姟绔嬪嵆鎵ц涓�娆�
+     */
+    @PreAuthorize("@ss.hasPermi('monitor:job:changeStatus')")
+    @Log(title = "瀹氭椂浠诲姟", businessType = BusinessType.UPDATE)
+    @PutMapping("/run")
+    public AjaxResult run(@RequestBody SysJob job) throws SchedulerException
+    {
+        boolean result = jobService.run(job);
+        return result ? success() : error("浠诲姟涓嶅瓨鍦ㄦ垨宸茶繃鏈燂紒");
+    }
+
+    /**
+     * 鍒犻櫎瀹氭椂浠诲姟
+     */
+    @PreAuthorize("@ss.hasPermi('monitor:job:remove')")
+    @Log(title = "瀹氭椂浠诲姟", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{jobIds}")
+    public AjaxResult remove(@PathVariable Long[] jobIds) throws SchedulerException, TaskException
+    {
+        jobService.deleteJobByIds(jobIds);
+        return success();
+    }
+}
diff --git a/zhitan-quartz/src/main/java/com/zhitan/quartz/controller/SysJobLogController.java b/zhitan-quartz/src/main/java/com/zhitan/quartz/controller/SysJobLogController.java
new file mode 100644
index 0000000..c97a137
--- /dev/null
+++ b/zhitan-quartz/src/main/java/com/zhitan/quartz/controller/SysJobLogController.java
@@ -0,0 +1,93 @@
+package com.zhitan.quartz.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.zhitan.quartz.service.ISysJobLogService;
+import javax.annotation.Resource;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.core.page.TableDataInfo;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.quartz.domain.SysJobLog;
+
+/**
+ * 璋冨害鏃ュ織鎿嶄綔澶勭悊
+ * 
+ * @author zhitan
+ */
+@RestController
+@RequestMapping("/monitor/jobLog")
+public class SysJobLogController extends BaseController
+{
+    @Resource
+    private ISysJobLogService jobLogService;
+
+    /**
+     * 鏌ヨ瀹氭椂浠诲姟璋冨害鏃ュ織鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('monitor:job:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysJobLog sysJobLog)
+    {
+        startPage();
+        List<SysJobLog> list = jobLogService.selectJobLogList(sysJobLog);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭瀹氭椂浠诲姟璋冨害鏃ュ織鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('monitor:job:export')")
+    @Log(title = "浠诲姟璋冨害鏃ュ織", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysJobLog sysJobLog)
+    {
+        List<SysJobLog> list = jobLogService.selectJobLogList(sysJobLog);
+        ExcelUtil<SysJobLog> util = new ExcelUtil<SysJobLog>(SysJobLog.class);
+        util.exportExcel(response, list, "璋冨害鏃ュ織");
+    }
+    
+    /**
+     * 鏍规嵁璋冨害缂栧彿鑾峰彇璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('monitor:job:query')")
+    @GetMapping(value = "/{jobLogId}")
+    public AjaxResult getInfo(@PathVariable Long jobLogId)
+    {
+        return success(jobLogService.selectJobLogById(jobLogId));
+    }
+
+
+    /**
+     * 鍒犻櫎瀹氭椂浠诲姟璋冨害鏃ュ織
+     */
+    @PreAuthorize("@ss.hasPermi('monitor:job:remove')")
+    @Log(title = "瀹氭椂浠诲姟璋冨害鏃ュ織", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{jobLogIds}")
+    public AjaxResult remove(@PathVariable Long[] jobLogIds)
+    {
+        return toAjax(jobLogService.deleteJobLogByIds(jobLogIds));
+    }
+
+    /**
+     * 娓呯┖瀹氭椂浠诲姟璋冨害鏃ュ織
+     */
+    @PreAuthorize("@ss.hasPermi('monitor:job:remove')")
+    @Log(title = "璋冨害鏃ュ織", businessType = BusinessType.CLEAN)
+    @DeleteMapping("/clean")
+    public AjaxResult clean()
+    {
+        jobLogService.cleanJobLog();
+        return success();
+    }
+}
diff --git a/zhitan-quartz/src/main/java/com/zhitan/quartz/domain/SysJob.java b/zhitan-quartz/src/main/java/com/zhitan/quartz/domain/SysJob.java
new file mode 100644
index 0000000..ea3162a
--- /dev/null
+++ b/zhitan-quartz/src/main/java/com/zhitan/quartz/domain/SysJob.java
@@ -0,0 +1,172 @@
+package com.zhitan.quartz.domain;
+
+import java.util.Date;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+
+import com.zhitan.quartz.util.CronUtils;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.annotation.Excel.ColumnType;
+import com.zhitan.common.constant.ScheduleConstants;
+import com.zhitan.common.core.domain.BaseEntity;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 瀹氭椂浠诲姟璋冨害琛� sys_job
+ * 
+ * @author zhitan
+ */
+public class SysJob extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 浠诲姟ID */
+    @Excel(name = "浠诲姟搴忓彿", cellType = ColumnType.NUMERIC)
+    private Long jobId;
+
+    /** 浠诲姟鍚嶇О */
+    @Excel(name = "浠诲姟鍚嶇О")
+    private String jobName;
+
+    /** 浠诲姟缁勫悕 */
+    @Excel(name = "浠诲姟缁勫悕")
+    private String jobGroup;
+
+    /** 璋冪敤鐩爣瀛楃涓� */
+    @Excel(name = "璋冪敤鐩爣瀛楃涓�")
+    private String invokeTarget;
+
+    /** cron鎵ц琛ㄨ揪寮� */
+    @Excel(name = "鎵ц琛ㄨ揪寮� ")
+    private String cronExpression;
+
+    /** cron璁″垝绛栫暐 */
+    @Excel(name = "璁″垝绛栫暐 ", readConverterExp = "0=榛樿,1=绔嬪嵆瑙﹀彂鎵ц,2=瑙﹀彂涓�娆℃墽琛�,3=涓嶈Е鍙戠珛鍗虫墽琛�")
+    private String misfirePolicy = ScheduleConstants.MISFIRE_DEFAULT;
+
+    /** 鏄惁骞跺彂鎵ц锛�0鍏佽 1绂佹锛� */
+    @Excel(name = "骞跺彂鎵ц", readConverterExp = "0=鍏佽,1=绂佹")
+    private String concurrent;
+
+    /** 浠诲姟鐘舵�侊紙0姝e父 1鏆傚仠锛� */
+    @Excel(name = "浠诲姟鐘舵��", readConverterExp = "0=姝e父,1=鏆傚仠")
+    private String status;
+
+    public Long getJobId()
+    {
+        return jobId;
+    }
+
+    public void setJobId(Long jobId)
+    {
+        this.jobId = jobId;
+    }
+
+    @NotBlank(message = "浠诲姟鍚嶇О涓嶈兘涓虹┖")
+    @Size(min = 0, max = 64, message = "浠诲姟鍚嶇О涓嶈兘瓒呰繃64涓瓧绗�")
+    public String getJobName()
+    {
+        return jobName;
+    }
+
+    public void setJobName(String jobName)
+    {
+        this.jobName = jobName;
+    }
+
+    public String getJobGroup()
+    {
+        return jobGroup;
+    }
+
+    public void setJobGroup(String jobGroup)
+    {
+        this.jobGroup = jobGroup;
+    }
+
+    @NotBlank(message = "璋冪敤鐩爣瀛楃涓蹭笉鑳戒负绌�")
+    @Size(min = 0, max = 500, message = "璋冪敤鐩爣瀛楃涓查暱搴︿笉鑳借秴杩�500涓瓧绗�")
+    public String getInvokeTarget()
+    {
+        return invokeTarget;
+    }
+
+    public void setInvokeTarget(String invokeTarget)
+    {
+        this.invokeTarget = invokeTarget;
+    }
+
+    @NotBlank(message = "Cron鎵ц琛ㄨ揪寮忎笉鑳戒负绌�")
+    @Size(min = 0, max = 255, message = "Cron鎵ц琛ㄨ揪寮忎笉鑳借秴杩�255涓瓧绗�")
+    public String getCronExpression()
+    {
+        return cronExpression;
+    }
+
+    public void setCronExpression(String cronExpression)
+    {
+        this.cronExpression = cronExpression;
+    }
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    public Date getNextValidTime()
+    {
+        if (StringUtils.isNotEmpty(cronExpression))
+        {
+            return CronUtils.getNextExecution(cronExpression);
+        }
+        return null;
+    }
+
+    public String getMisfirePolicy()
+    {
+        return misfirePolicy;
+    }
+
+    public void setMisfirePolicy(String misfirePolicy)
+    {
+        this.misfirePolicy = misfirePolicy;
+    }
+
+    public String getConcurrent()
+    {
+        return concurrent;
+    }
+
+    public void setConcurrent(String concurrent)
+    {
+        this.concurrent = concurrent;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("jobId", getJobId())
+            .append("jobName", getJobName())
+            .append("jobGroup", getJobGroup())
+            .append("cronExpression", getCronExpression())
+            .append("nextValidTime", getNextValidTime())
+            .append("misfirePolicy", getMisfirePolicy())
+            .append("concurrent", getConcurrent())
+            .append("status", getStatus())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}
diff --git a/zhitan-quartz/src/main/java/com/zhitan/quartz/domain/SysJobLog.java b/zhitan-quartz/src/main/java/com/zhitan/quartz/domain/SysJobLog.java
new file mode 100644
index 0000000..cd67ed5
--- /dev/null
+++ b/zhitan-quartz/src/main/java/com/zhitan/quartz/domain/SysJobLog.java
@@ -0,0 +1,155 @@
+package com.zhitan.quartz.domain;
+
+import java.util.Date;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+
+/**
+ * 瀹氭椂浠诲姟璋冨害鏃ュ織琛� sys_job_log
+ * 
+ * @author zhitan
+ */
+public class SysJobLog extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    @Excel(name = "鏃ュ織搴忓彿")
+    private Long jobLogId;
+
+    /** 浠诲姟鍚嶇О */
+    @Excel(name = "浠诲姟鍚嶇О")
+    private String jobName;
+
+    /** 浠诲姟缁勫悕 */
+    @Excel(name = "浠诲姟缁勫悕")
+    private String jobGroup;
+
+    /** 璋冪敤鐩爣瀛楃涓� */
+    @Excel(name = "璋冪敤鐩爣瀛楃涓�")
+    private String invokeTarget;
+
+    /** 鏃ュ織淇℃伅 */
+    @Excel(name = "鏃ュ織淇℃伅")
+    private String jobMessage;
+
+    /** 鎵ц鐘舵�侊紙0姝e父 1澶辫触锛� */
+    @Excel(name = "鎵ц鐘舵��", readConverterExp = "0=姝e父,1=澶辫触")
+    private String status;
+
+    /** 寮傚父淇℃伅 */
+    @Excel(name = "寮傚父淇℃伅")
+    private String exceptionInfo;
+
+    /** 寮�濮嬫椂闂� */
+    private Date startTime;
+
+    /** 鍋滄鏃堕棿 */
+    private Date stopTime;
+
+    public Long getJobLogId()
+    {
+        return jobLogId;
+    }
+
+    public void setJobLogId(Long jobLogId)
+    {
+        this.jobLogId = jobLogId;
+    }
+
+    public String getJobName()
+    {
+        return jobName;
+    }
+
+    public void setJobName(String jobName)
+    {
+        this.jobName = jobName;
+    }
+
+    public String getJobGroup()
+    {
+        return jobGroup;
+    }
+
+    public void setJobGroup(String jobGroup)
+    {
+        this.jobGroup = jobGroup;
+    }
+
+    public String getInvokeTarget()
+    {
+        return invokeTarget;
+    }
+
+    public void setInvokeTarget(String invokeTarget)
+    {
+        this.invokeTarget = invokeTarget;
+    }
+
+    public String getJobMessage()
+    {
+        return jobMessage;
+    }
+
+    public void setJobMessage(String jobMessage)
+    {
+        this.jobMessage = jobMessage;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    public String getExceptionInfo()
+    {
+        return exceptionInfo;
+    }
+
+    public void setExceptionInfo(String exceptionInfo)
+    {
+        this.exceptionInfo = exceptionInfo;
+    }
+
+    public Date getStartTime()
+    {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime)
+    {
+        this.startTime = startTime;
+    }
+    
+    public Date getStopTime()
+    {
+        return stopTime;
+    }
+
+    public void setStopTime(Date stopTime)
+    {
+        this.stopTime = stopTime;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("jobLogId", getJobLogId())
+            .append("jobName", getJobName())
+            .append("jobGroup", getJobGroup())
+            .append("jobMessage", getJobMessage())
+            .append("status", getStatus())
+            .append("exceptionInfo", getExceptionInfo())
+            .append("startTime", getStartTime())
+            .append("stopTime", getStopTime())
+            .toString();
+    }
+}
diff --git a/zhitan-quartz/src/main/java/com/zhitan/quartz/mapper/SysJobLogMapper.java b/zhitan-quartz/src/main/java/com/zhitan/quartz/mapper/SysJobLogMapper.java
new file mode 100644
index 0000000..9c6a6bf
--- /dev/null
+++ b/zhitan-quartz/src/main/java/com/zhitan/quartz/mapper/SysJobLogMapper.java
@@ -0,0 +1,64 @@
+package com.zhitan.quartz.mapper;
+
+import java.util.List;
+import com.zhitan.quartz.domain.SysJobLog;
+
+/**
+ * 璋冨害浠诲姟鏃ュ織淇℃伅 鏁版嵁灞�
+ * 
+ * @author zhitan
+ */
+public interface SysJobLogMapper
+{
+    /**
+     * 鑾峰彇quartz璋冨害鍣ㄦ棩蹇楃殑璁″垝浠诲姟
+     * 
+     * @param jobLog 璋冨害鏃ュ織淇℃伅
+     * @return 璋冨害浠诲姟鏃ュ織闆嗗悎
+     */
+    public List<SysJobLog> selectJobLogList(SysJobLog jobLog);
+
+    /**
+     * 鏌ヨ鎵�鏈夎皟搴︿换鍔℃棩蹇�
+     *
+     * @return 璋冨害浠诲姟鏃ュ織鍒楄〃
+     */
+    public List<SysJobLog> selectJobLogAll();
+
+    /**
+     * 閫氳繃璋冨害浠诲姟鏃ュ織ID鏌ヨ璋冨害淇℃伅
+     * 
+     * @param jobLogId 璋冨害浠诲姟鏃ュ織ID
+     * @return 璋冨害浠诲姟鏃ュ織瀵硅薄淇℃伅
+     */
+    public SysJobLog selectJobLogById(Long jobLogId);
+
+    /**
+     * 鏂板浠诲姟鏃ュ織
+     * 
+     * @param jobLog 璋冨害鏃ュ織淇℃伅
+     * @return 缁撴灉
+     */
+    public int insertJobLog(SysJobLog jobLog);
+
+    /**
+     * 鎵归噺鍒犻櫎璋冨害鏃ュ織淇℃伅
+     * 
+     * @param logIds 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteJobLogByIds(Long[] logIds);
+
+    /**
+     * 鍒犻櫎浠诲姟鏃ュ織
+     * 
+     * @param jobId 璋冨害鏃ュ織ID
+     * @return 缁撴灉
+     */
+    public int deleteJobLogById(Long jobId);
+
+    /**
+     * 娓呯┖浠诲姟鏃ュ織
+     */
+    public void cleanJobLog();
+}
diff --git a/zhitan-quartz/src/main/java/com/zhitan/quartz/mapper/SysJobMapper.java b/zhitan-quartz/src/main/java/com/zhitan/quartz/mapper/SysJobMapper.java
new file mode 100644
index 0000000..5c30eb5
--- /dev/null
+++ b/zhitan-quartz/src/main/java/com/zhitan/quartz/mapper/SysJobMapper.java
@@ -0,0 +1,67 @@
+package com.zhitan.quartz.mapper;
+
+import java.util.List;
+import com.zhitan.quartz.domain.SysJob;
+
+/**
+ * 璋冨害浠诲姟淇℃伅 鏁版嵁灞�
+ * 
+ * @author zhitan
+ */
+public interface SysJobMapper
+{
+    /**
+     * 鏌ヨ璋冨害浠诲姟鏃ュ織闆嗗悎
+     * 
+     * @param job 璋冨害淇℃伅
+     * @return 鎿嶄綔鏃ュ織闆嗗悎
+     */
+    public List<SysJob> selectJobList(SysJob job);
+
+    /**
+     * 鏌ヨ鎵�鏈夎皟搴︿换鍔�
+     * 
+     * @return 璋冨害浠诲姟鍒楄〃
+     */
+    public List<SysJob> selectJobAll();
+
+    /**
+     * 閫氳繃璋冨害ID鏌ヨ璋冨害浠诲姟淇℃伅
+     * 
+     * @param jobId 璋冨害ID
+     * @return 瑙掕壊瀵硅薄淇℃伅
+     */
+    public SysJob selectJobById(Long jobId);
+
+    /**
+     * 閫氳繃璋冨害ID鍒犻櫎璋冨害浠诲姟淇℃伅
+     * 
+     * @param jobId 璋冨害ID
+     * @return 缁撴灉
+     */
+    public int deleteJobById(Long jobId);
+
+    /**
+     * 鎵归噺鍒犻櫎璋冨害浠诲姟淇℃伅
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteJobByIds(Long[] ids);
+
+    /**
+     * 淇敼璋冨害浠诲姟淇℃伅
+     * 
+     * @param job 璋冨害浠诲姟淇℃伅
+     * @return 缁撴灉
+     */
+    public int updateJob(SysJob job);
+
+    /**
+     * 鏂板璋冨害浠诲姟淇℃伅
+     * 
+     * @param job 璋冨害浠诲姟淇℃伅
+     * @return 缁撴灉
+     */
+    public int insertJob(SysJob job);
+}
diff --git a/zhitan-quartz/src/main/java/com/zhitan/quartz/service/ISysJobLogService.java b/zhitan-quartz/src/main/java/com/zhitan/quartz/service/ISysJobLogService.java
new file mode 100644
index 0000000..7fc503b
--- /dev/null
+++ b/zhitan-quartz/src/main/java/com/zhitan/quartz/service/ISysJobLogService.java
@@ -0,0 +1,56 @@
+package com.zhitan.quartz.service;
+
+import java.util.List;
+import com.zhitan.quartz.domain.SysJobLog;
+
+/**
+ * 瀹氭椂浠诲姟璋冨害鏃ュ織淇℃伅淇℃伅 鏈嶅姟灞�
+ * 
+ * @author zhitan
+ */
+public interface ISysJobLogService
+{
+    /**
+     * 鑾峰彇quartz璋冨害鍣ㄦ棩蹇楃殑璁″垝浠诲姟
+     * 
+     * @param jobLog 璋冨害鏃ュ織淇℃伅
+     * @return 璋冨害浠诲姟鏃ュ織闆嗗悎
+     */
+    public List<SysJobLog> selectJobLogList(SysJobLog jobLog);
+
+    /**
+     * 閫氳繃璋冨害浠诲姟鏃ュ織ID鏌ヨ璋冨害淇℃伅
+     * 
+     * @param jobLogId 璋冨害浠诲姟鏃ュ織ID
+     * @return 璋冨害浠诲姟鏃ュ織瀵硅薄淇℃伅
+     */
+    public SysJobLog selectJobLogById(Long jobLogId);
+
+    /**
+     * 鏂板浠诲姟鏃ュ織
+     * 
+     * @param jobLog 璋冨害鏃ュ織淇℃伅
+     */
+    public void addJobLog(SysJobLog jobLog);
+
+    /**
+     * 鎵归噺鍒犻櫎璋冨害鏃ュ織淇℃伅
+     * 
+     * @param logIds 闇�瑕佸垹闄ょ殑鏃ュ織ID
+     * @return 缁撴灉
+     */
+    public int deleteJobLogByIds(Long[] logIds);
+
+    /**
+     * 鍒犻櫎浠诲姟鏃ュ織
+     * 
+     * @param jobId 璋冨害鏃ュ織ID
+     * @return 缁撴灉
+     */
+    public int deleteJobLogById(Long jobId);
+
+    /**
+     * 娓呯┖浠诲姟鏃ュ織
+     */
+    public void cleanJobLog();
+}
diff --git a/zhitan-quartz/src/main/java/com/zhitan/quartz/service/ISysJobService.java b/zhitan-quartz/src/main/java/com/zhitan/quartz/service/ISysJobService.java
new file mode 100644
index 0000000..9acc901
--- /dev/null
+++ b/zhitan-quartz/src/main/java/com/zhitan/quartz/service/ISysJobService.java
@@ -0,0 +1,102 @@
+package com.zhitan.quartz.service;
+
+import java.util.List;
+import org.quartz.SchedulerException;
+import com.zhitan.common.exception.job.TaskException;
+import com.zhitan.quartz.domain.SysJob;
+
+/**
+ * 瀹氭椂浠诲姟璋冨害淇℃伅淇℃伅 鏈嶅姟灞�
+ * 
+ * @author zhitan
+ */
+public interface ISysJobService
+{
+    /**
+     * 鑾峰彇quartz璋冨害鍣ㄧ殑璁″垝浠诲姟
+     * 
+     * @param job 璋冨害淇℃伅
+     * @return 璋冨害浠诲姟闆嗗悎
+     */
+    public List<SysJob> selectJobList(SysJob job);
+
+    /**
+     * 閫氳繃璋冨害浠诲姟ID鏌ヨ璋冨害淇℃伅
+     * 
+     * @param jobId 璋冨害浠诲姟ID
+     * @return 璋冨害浠诲姟瀵硅薄淇℃伅
+     */
+    public SysJob selectJobById(Long jobId);
+
+    /**
+     * 鏆傚仠浠诲姟
+     * 
+     * @param job 璋冨害淇℃伅
+     * @return 缁撴灉
+     */
+    public int pauseJob(SysJob job) throws SchedulerException;
+
+    /**
+     * 鎭㈠浠诲姟
+     * 
+     * @param job 璋冨害淇℃伅
+     * @return 缁撴灉
+     */
+    public int resumeJob(SysJob job) throws SchedulerException;
+
+    /**
+     * 鍒犻櫎浠诲姟鍚庯紝鎵�瀵瑰簲鐨則rigger涔熷皢琚垹闄�
+     * 
+     * @param job 璋冨害淇℃伅
+     * @return 缁撴灉
+     */
+    public int deleteJob(SysJob job) throws SchedulerException;
+
+    /**
+     * 鎵归噺鍒犻櫎璋冨害淇℃伅
+     * 
+     * @param jobIds 闇�瑕佸垹闄ょ殑浠诲姟ID
+     * @return 缁撴灉
+     */
+    public void deleteJobByIds(Long[] jobIds) throws SchedulerException;
+
+    /**
+     * 浠诲姟璋冨害鐘舵�佷慨鏀�
+     * 
+     * @param job 璋冨害淇℃伅
+     * @return 缁撴灉
+     */
+    public int changeStatus(SysJob job) throws SchedulerException;
+
+    /**
+     * 绔嬪嵆杩愯浠诲姟
+     * 
+     * @param job 璋冨害淇℃伅
+     * @return 缁撴灉
+     */
+    public boolean run(SysJob job) throws SchedulerException;
+
+    /**
+     * 鏂板浠诲姟
+     * 
+     * @param job 璋冨害淇℃伅
+     * @return 缁撴灉
+     */
+    public int insertJob(SysJob job) throws SchedulerException, TaskException;
+
+    /**
+     * 鏇存柊浠诲姟
+     * 
+     * @param job 璋冨害淇℃伅
+     * @return 缁撴灉
+     */
+    public int updateJob(SysJob job) throws SchedulerException, TaskException;
+
+    /**
+     * 鏍¢獙cron琛ㄨ揪寮忔槸鍚︽湁鏁�
+     * 
+     * @param cronExpression 琛ㄨ揪寮�
+     * @return 缁撴灉
+     */
+    public boolean checkCronExpressionIsValid(String cronExpression);
+}
diff --git a/zhitan-quartz/src/main/java/com/zhitan/quartz/service/impl/SysJobLogServiceImpl.java b/zhitan-quartz/src/main/java/com/zhitan/quartz/service/impl/SysJobLogServiceImpl.java
new file mode 100644
index 0000000..8192c0f
--- /dev/null
+++ b/zhitan-quartz/src/main/java/com/zhitan/quartz/service/impl/SysJobLogServiceImpl.java
@@ -0,0 +1,88 @@
+package com.zhitan.quartz.service.impl;
+
+import java.util.List;
+
+import com.zhitan.quartz.mapper.SysJobLogMapper;
+import com.zhitan.quartz.service.ISysJobLogService;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Service;
+import com.zhitan.quartz.domain.SysJobLog;
+
+/**
+ * 瀹氭椂浠诲姟璋冨害鏃ュ織淇℃伅 鏈嶅姟灞�
+ * 
+ * @author zhitan
+ */
+@Service
+public class SysJobLogServiceImpl implements ISysJobLogService
+{
+    @Resource
+    private SysJobLogMapper jobLogMapper;
+
+    /**
+     * 鑾峰彇quartz璋冨害鍣ㄦ棩蹇楃殑璁″垝浠诲姟
+     * 
+     * @param jobLog 璋冨害鏃ュ織淇℃伅
+     * @return 璋冨害浠诲姟鏃ュ織闆嗗悎
+     */
+    @Override
+    public List<SysJobLog> selectJobLogList(SysJobLog jobLog)
+    {
+        return jobLogMapper.selectJobLogList(jobLog);
+    }
+
+    /**
+     * 閫氳繃璋冨害浠诲姟鏃ュ織ID鏌ヨ璋冨害淇℃伅
+     * 
+     * @param jobLogId 璋冨害浠诲姟鏃ュ織ID
+     * @return 璋冨害浠诲姟鏃ュ織瀵硅薄淇℃伅
+     */
+    @Override
+    public SysJobLog selectJobLogById(Long jobLogId)
+    {
+        return jobLogMapper.selectJobLogById(jobLogId);
+    }
+
+    /**
+     * 鏂板浠诲姟鏃ュ織
+     * 
+     * @param jobLog 璋冨害鏃ュ織淇℃伅
+     */
+    @Override
+    public void addJobLog(SysJobLog jobLog)
+    {
+        jobLogMapper.insertJobLog(jobLog);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎璋冨害鏃ュ織淇℃伅
+     * 
+     * @param logIds 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteJobLogByIds(Long[] logIds)
+    {
+        return jobLogMapper.deleteJobLogByIds(logIds);
+    }
+
+    /**
+     * 鍒犻櫎浠诲姟鏃ュ織
+     * 
+     * @param jobId 璋冨害鏃ュ織ID
+     */
+    @Override
+    public int deleteJobLogById(Long jobId)
+    {
+        return jobLogMapper.deleteJobLogById(jobId);
+    }
+
+    /**
+     * 娓呯┖浠诲姟鏃ュ織
+     */
+    @Override
+    public void cleanJobLog()
+    {
+        jobLogMapper.cleanJobLog();
+    }
+}
diff --git a/zhitan-quartz/src/main/java/com/zhitan/quartz/service/impl/SysJobServiceImpl.java b/zhitan-quartz/src/main/java/com/zhitan/quartz/service/impl/SysJobServiceImpl.java
new file mode 100644
index 0000000..0cc5292
--- /dev/null
+++ b/zhitan-quartz/src/main/java/com/zhitan/quartz/service/impl/SysJobServiceImpl.java
@@ -0,0 +1,262 @@
+package com.zhitan.quartz.service.impl;
+
+import java.util.List;
+import javax.annotation.PostConstruct;
+
+import com.zhitan.quartz.mapper.SysJobMapper;
+import org.quartz.JobDataMap;
+import org.quartz.JobKey;
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.zhitan.common.constant.ScheduleConstants;
+import com.zhitan.common.exception.job.TaskException;
+import com.zhitan.quartz.domain.SysJob;
+import com.zhitan.quartz.service.ISysJobService;
+import com.zhitan.quartz.util.CronUtils;
+import com.zhitan.quartz.util.ScheduleUtils;
+
+/**
+ * 瀹氭椂浠诲姟璋冨害淇℃伅 鏈嶅姟灞�
+ * 
+ * @author zhitan
+ */
+@Service
+public class SysJobServiceImpl implements ISysJobService
+{
+    @Resource
+    private Scheduler scheduler;
+
+    @Resource
+    private SysJobMapper jobMapper;
+
+    /**
+     * 椤圭洰鍚姩鏃讹紝鍒濆鍖栧畾鏃跺櫒 涓昏鏄槻姝㈡墜鍔ㄤ慨鏀规暟鎹簱瀵艰嚧鏈悓姝ュ埌瀹氭椂浠诲姟澶勭悊锛堟敞锛氫笉鑳芥墜鍔ㄤ慨鏀规暟鎹簱ID鍜屼换鍔$粍鍚嶏紝鍚﹀垯浼氬鑷磋剰鏁版嵁锛�
+     */
+    @PostConstruct
+    public void init() throws SchedulerException, TaskException
+    {
+        scheduler.clear();
+        List<SysJob> jobList = jobMapper.selectJobAll();
+        for (SysJob job : jobList)
+        {
+            ScheduleUtils.createScheduleJob(scheduler, job);
+        }
+    }
+
+    /**
+     * 鑾峰彇quartz璋冨害鍣ㄧ殑璁″垝浠诲姟鍒楄〃
+     * 
+     * @param job 璋冨害淇℃伅
+     * @return
+     */
+    @Override
+    public List<SysJob> selectJobList(SysJob job)
+    {
+        return jobMapper.selectJobList(job);
+    }
+
+    /**
+     * 閫氳繃璋冨害浠诲姟ID鏌ヨ璋冨害淇℃伅
+     * 
+     * @param jobId 璋冨害浠诲姟ID
+     * @return 璋冨害浠诲姟瀵硅薄淇℃伅
+     */
+    @Override
+    public SysJob selectJobById(Long jobId)
+    {
+        return jobMapper.selectJobById(jobId);
+    }
+
+    /**
+     * 鏆傚仠浠诲姟
+     * 
+     * @param job 璋冨害淇℃伅
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int pauseJob(SysJob job) throws SchedulerException
+    {
+        Long jobId = job.getJobId();
+        String jobGroup = job.getJobGroup();
+        job.setStatus(ScheduleConstants.Status.PAUSE.getValue());
+        int rows = jobMapper.updateJob(job);
+        if (rows > 0)
+        {
+            scheduler.pauseJob(ScheduleUtils.getJobKey(jobId, jobGroup));
+        }
+        return rows;
+    }
+
+    /**
+     * 鎭㈠浠诲姟
+     * 
+     * @param job 璋冨害淇℃伅
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int resumeJob(SysJob job) throws SchedulerException
+    {
+        Long jobId = job.getJobId();
+        String jobGroup = job.getJobGroup();
+        job.setStatus(ScheduleConstants.Status.NORMAL.getValue());
+        int rows = jobMapper.updateJob(job);
+        if (rows > 0)
+        {
+            scheduler.resumeJob(ScheduleUtils.getJobKey(jobId, jobGroup));
+        }
+        return rows;
+    }
+
+    /**
+     * 鍒犻櫎浠诲姟鍚庯紝鎵�瀵瑰簲鐨則rigger涔熷皢琚垹闄�
+     * 
+     * @param job 璋冨害淇℃伅
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int deleteJob(SysJob job) throws SchedulerException
+    {
+        Long jobId = job.getJobId();
+        String jobGroup = job.getJobGroup();
+        int rows = jobMapper.deleteJobById(jobId);
+        if (rows > 0)
+        {
+            scheduler.deleteJob(ScheduleUtils.getJobKey(jobId, jobGroup));
+        }
+        return rows;
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎璋冨害淇℃伅
+     * 
+     * @param jobIds 闇�瑕佸垹闄ょ殑浠诲姟ID
+     * @return 缁撴灉
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteJobByIds(Long[] jobIds) throws SchedulerException
+    {
+        for (Long jobId : jobIds)
+        {
+            SysJob job = jobMapper.selectJobById(jobId);
+            deleteJob(job);
+        }
+    }
+
+    /**
+     * 浠诲姟璋冨害鐘舵�佷慨鏀�
+     * 
+     * @param job 璋冨害淇℃伅
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int changeStatus(SysJob job) throws SchedulerException
+    {
+        int rows = 0;
+        String status = job.getStatus();
+        if (ScheduleConstants.Status.NORMAL.getValue().equals(status))
+        {
+            rows = resumeJob(job);
+        }
+        else if (ScheduleConstants.Status.PAUSE.getValue().equals(status))
+        {
+            rows = pauseJob(job);
+        }
+        return rows;
+    }
+
+    /**
+     * 绔嬪嵆杩愯浠诲姟
+     * 
+     * @param job 璋冨害淇℃伅
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean run(SysJob job) throws SchedulerException
+    {
+        boolean result = false;
+        Long jobId = job.getJobId();
+        String jobGroup = job.getJobGroup();
+        SysJob properties = selectJobById(job.getJobId());
+        // 鍙傛暟
+        JobDataMap dataMap = new JobDataMap();
+        dataMap.put(ScheduleConstants.TASK_PROPERTIES, properties);
+        JobKey jobKey = ScheduleUtils.getJobKey(jobId, jobGroup);
+        if (scheduler.checkExists(jobKey))
+        {
+            result = true;
+            scheduler.triggerJob(jobKey, dataMap);
+        }
+        return result;
+    }
+
+    /**
+     * 鏂板浠诲姟
+     * 
+     * @param job 璋冨害淇℃伅 璋冨害淇℃伅
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int insertJob(SysJob job) throws SchedulerException, TaskException
+    {
+        job.setStatus(ScheduleConstants.Status.PAUSE.getValue());
+        int rows = jobMapper.insertJob(job);
+        if (rows > 0)
+        {
+            ScheduleUtils.createScheduleJob(scheduler, job);
+        }
+        return rows;
+    }
+
+    /**
+     * 鏇存柊浠诲姟鐨勬椂闂磋〃杈惧紡
+     * 
+     * @param job 璋冨害淇℃伅
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int updateJob(SysJob job) throws SchedulerException, TaskException
+    {
+        SysJob properties = selectJobById(job.getJobId());
+        int rows = jobMapper.updateJob(job);
+        if (rows > 0)
+        {
+            updateSchedulerJob(job, properties.getJobGroup());
+        }
+        return rows;
+    }
+
+    /**
+     * 鏇存柊浠诲姟
+     * 
+     * @param job 浠诲姟瀵硅薄
+     * @param jobGroup 浠诲姟缁勫悕
+     */
+    public void updateSchedulerJob(SysJob job, String jobGroup) throws SchedulerException, TaskException
+    {
+        Long jobId = job.getJobId();
+        // 鍒ゆ柇鏄惁瀛樺湪
+        JobKey jobKey = ScheduleUtils.getJobKey(jobId, jobGroup);
+        if (scheduler.checkExists(jobKey))
+        {
+            // 闃叉鍒涘缓鏃跺瓨鍦ㄦ暟鎹棶棰� 鍏堢Щ闄わ紝鐒跺悗鍦ㄦ墽琛屽垱寤烘搷浣�
+            scheduler.deleteJob(jobKey);
+        }
+        ScheduleUtils.createScheduleJob(scheduler, job);
+    }
+
+    /**
+     * 鏍¢獙cron琛ㄨ揪寮忔槸鍚︽湁鏁�
+     * 
+     * @param cronExpression 琛ㄨ揪寮�
+     * @return 缁撴灉
+     */
+    @Override
+    public boolean checkCronExpressionIsValid(String cronExpression)
+    {
+        return CronUtils.isValid(cronExpression);
+    }
+}
diff --git a/zhitan-quartz/src/main/java/com/zhitan/quartz/task/RyTask.java b/zhitan-quartz/src/main/java/com/zhitan/quartz/task/RyTask.java
new file mode 100644
index 0000000..2196f3f
--- /dev/null
+++ b/zhitan-quartz/src/main/java/com/zhitan/quartz/task/RyTask.java
@@ -0,0 +1,28 @@
+package com.zhitan.quartz.task;
+
+import org.springframework.stereotype.Component;
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 瀹氭椂浠诲姟璋冨害娴嬭瘯
+ * 
+ * @author zhitan
+ */
+@Component("ryTask")
+public class RyTask
+{
+    public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i)
+    {
+        System.out.println(StringUtils.format("鎵ц澶氬弬鏂规硶锛� 瀛楃涓茬被鍨媨}锛屽竷灏旂被鍨媨}锛岄暱鏁村瀷{}锛屾诞鐐瑰瀷{}锛屾暣褰}", s, b, l, d, i));
+    }
+
+    public void ryParams(String params)
+    {
+        System.out.println("鎵ц鏈夊弬鏂规硶锛�" + params);
+    }
+
+    public void ryNoParams()
+    {
+        System.out.println("鎵ц鏃犲弬鏂规硶");
+    }
+}
diff --git a/zhitan-quartz/src/main/java/com/zhitan/quartz/util/AbstractQuartzJob.java b/zhitan-quartz/src/main/java/com/zhitan/quartz/util/AbstractQuartzJob.java
new file mode 100644
index 0000000..9d86fcc
--- /dev/null
+++ b/zhitan-quartz/src/main/java/com/zhitan/quartz/util/AbstractQuartzJob.java
@@ -0,0 +1,108 @@
+package com.zhitan.quartz.util;
+
+import java.util.Date;
+
+import com.zhitan.quartz.service.ISysJobLogService;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.constant.ScheduleConstants;
+import com.zhitan.common.utils.ExceptionUtil;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.bean.BeanUtils;
+import com.zhitan.common.utils.spring.SpringUtils;
+import com.zhitan.quartz.domain.SysJob;
+import com.zhitan.quartz.domain.SysJobLog;
+
+/**
+ * 鎶借薄quartz璋冪敤
+ *
+ * @author zhitan
+ */
+public abstract class AbstractQuartzJob implements Job
+{
+    private static final Logger log = LoggerFactory.getLogger(AbstractQuartzJob.class);
+
+    /**
+     * 绾跨▼鏈湴鍙橀噺
+     */
+    private static ThreadLocal<Date> threadLocal = new ThreadLocal<>();
+
+    @Override
+    public void execute(JobExecutionContext context) throws JobExecutionException
+    {
+        SysJob sysJob = new SysJob();
+        BeanUtils.copyBeanProp(sysJob, context.getMergedJobDataMap().get(ScheduleConstants.TASK_PROPERTIES));
+        try
+        {
+            before(context, sysJob);
+            if (sysJob != null)
+            {
+                doExecute(context, sysJob);
+            }
+            after(context, sysJob, null);
+        }
+        catch (Exception e)
+        {
+            log.error("浠诲姟鎵ц寮傚父  - 锛�", e);
+            after(context, sysJob, e);
+        }
+    }
+
+    /**
+     * 鎵ц鍓�
+     *
+     * @param context 宸ヤ綔鎵ц涓婁笅鏂囧璞�
+     * @param sysJob 绯荤粺璁″垝浠诲姟
+     */
+    protected void before(JobExecutionContext context, SysJob sysJob)
+    {
+        threadLocal.set(new Date());
+    }
+
+    /**
+     * 鎵ц鍚�
+     *
+     * @param context 宸ヤ綔鎵ц涓婁笅鏂囧璞�
+     * @param sysJob 绯荤粺璁″垝浠诲姟
+     */
+    protected void after(JobExecutionContext context, SysJob sysJob, Exception e)
+    {
+        Date startTime = threadLocal.get();
+        threadLocal.remove();
+
+        final SysJobLog sysJobLog = new SysJobLog();
+        sysJobLog.setJobName(sysJob.getJobName());
+        sysJobLog.setJobGroup(sysJob.getJobGroup());
+        sysJobLog.setInvokeTarget(sysJob.getInvokeTarget());
+        sysJobLog.setStartTime(startTime);
+        sysJobLog.setStopTime(new Date());
+        long runMs = sysJobLog.getStopTime().getTime() - sysJobLog.getStartTime().getTime();
+        sysJobLog.setJobMessage(sysJobLog.getJobName() + " 鎬诲叡鑰楁椂锛�" + runMs + "姣");
+        if (e != null)
+        {
+            sysJobLog.setStatus(Constants.FAIL);
+            String errorMsg = StringUtils.substring(ExceptionUtil.getExceptionMessage(e), 0, 2000);
+            sysJobLog.setExceptionInfo(errorMsg);
+        }
+        else
+        {
+            sysJobLog.setStatus(Constants.SUCCESS);
+        }
+
+        // 鍐欏叆鏁版嵁搴撳綋涓�
+        SpringUtils.getBean(ISysJobLogService.class).addJobLog(sysJobLog);
+    }
+
+    /**
+     * 鎵ц鏂规硶锛岀敱瀛愮被閲嶈浇
+     *
+     * @param context 宸ヤ綔鎵ц涓婁笅鏂囧璞�
+     * @param sysJob 绯荤粺璁″垝浠诲姟
+     * @throws Exception 鎵ц杩囩▼涓殑寮傚父
+     */
+    protected abstract void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception;
+}
diff --git a/zhitan-quartz/src/main/java/com/zhitan/quartz/util/CronUtils.java b/zhitan-quartz/src/main/java/com/zhitan/quartz/util/CronUtils.java
new file mode 100644
index 0000000..b0e9629
--- /dev/null
+++ b/zhitan-quartz/src/main/java/com/zhitan/quartz/util/CronUtils.java
@@ -0,0 +1,63 @@
+package com.zhitan.quartz.util;
+
+import java.text.ParseException;
+import java.util.Date;
+import org.quartz.CronExpression;
+
+/**
+ * cron琛ㄨ揪寮忓伐鍏风被
+ * 
+ * @author zhitan
+ *
+ */
+public class CronUtils
+{
+    /**
+     * 杩斿洖涓�涓竷灏斿�间唬琛ㄤ竴涓粰瀹氱殑Cron琛ㄨ揪寮忕殑鏈夋晥鎬�
+     *
+     * @param cronExpression Cron琛ㄨ揪寮�
+     * @return boolean 琛ㄨ揪寮忔槸鍚︽湁鏁�
+     */
+    public static boolean isValid(String cronExpression)
+    {
+        return CronExpression.isValidExpression(cronExpression);
+    }
+
+    /**
+     * 杩斿洖涓�涓瓧绗︿覆鍊�,琛ㄧず璇ユ秷鎭棤鏁圕ron琛ㄨ揪寮忕粰鍑烘湁鏁堟��
+     *
+     * @param cronExpression Cron琛ㄨ揪寮�
+     * @return String 鏃犳晥鏃惰繑鍥炶〃杈惧紡閿欒鎻忚堪,濡傛灉鏈夋晥杩斿洖null
+     */
+    public static String getInvalidMessage(String cronExpression)
+    {
+        try
+        {
+            new CronExpression(cronExpression);
+            return null;
+        }
+        catch (ParseException pe)
+        {
+            return pe.getMessage();
+        }
+    }
+
+    /**
+     * 杩斿洖涓嬩竴涓墽琛屾椂闂存牴鎹粰瀹氱殑Cron琛ㄨ揪寮�
+     *
+     * @param cronExpression Cron琛ㄨ揪寮�
+     * @return Date 涓嬫Cron琛ㄨ揪寮忔墽琛屾椂闂�
+     */
+    public static Date getNextExecution(String cronExpression)
+    {
+        try
+        {
+            CronExpression cron = new CronExpression(cronExpression);
+            return cron.getNextValidTimeAfter(new Date(System.currentTimeMillis()));
+        }
+        catch (ParseException e)
+        {
+            throw new IllegalArgumentException(e.getMessage());
+        }
+    }
+}
diff --git a/zhitan-quartz/src/main/java/com/zhitan/quartz/util/JobInvokeUtil.java b/zhitan-quartz/src/main/java/com/zhitan/quartz/util/JobInvokeUtil.java
new file mode 100644
index 0000000..8751bec
--- /dev/null
+++ b/zhitan-quartz/src/main/java/com/zhitan/quartz/util/JobInvokeUtil.java
@@ -0,0 +1,182 @@
+package com.zhitan.quartz.util;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.LinkedList;
+import java.util.List;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.spring.SpringUtils;
+import com.zhitan.quartz.domain.SysJob;
+
+/**
+ * 浠诲姟鎵ц宸ュ叿
+ *
+ * @author zhitan
+ */
+public class JobInvokeUtil
+{
+    /**
+     * 鎵ц鏂规硶
+     *
+     * @param sysJob 绯荤粺浠诲姟
+     */
+    public static void invokeMethod(SysJob sysJob) throws Exception
+    {
+        String invokeTarget = sysJob.getInvokeTarget();
+        String beanName = getBeanName(invokeTarget);
+        String methodName = getMethodName(invokeTarget);
+        List<Object[]> methodParams = getMethodParams(invokeTarget);
+
+        if (!isValidClassName(beanName))
+        {
+            Object bean = SpringUtils.getBean(beanName);
+            invokeMethod(bean, methodName, methodParams);
+        }
+        else
+        {
+            Object bean = Class.forName(beanName).getDeclaredConstructor().newInstance();
+            invokeMethod(bean, methodName, methodParams);
+        }
+    }
+
+    /**
+     * 璋冪敤浠诲姟鏂规硶
+     *
+     * @param bean 鐩爣瀵硅薄
+     * @param methodName 鏂规硶鍚嶇О
+     * @param methodParams 鏂规硶鍙傛暟
+     */
+    private static void invokeMethod(Object bean, String methodName, List<Object[]> methodParams)
+            throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException,
+            InvocationTargetException
+    {
+        if (StringUtils.isNotNull(methodParams) && methodParams.size() > 0)
+        {
+            Method method = bean.getClass().getMethod(methodName, getMethodParamsType(methodParams));
+            method.invoke(bean, getMethodParamsValue(methodParams));
+        }
+        else
+        {
+            Method method = bean.getClass().getMethod(methodName);
+            method.invoke(bean);
+        }
+    }
+
+    /**
+     * 鏍¢獙鏄惁涓轰负class鍖呭悕
+     * 
+     * @param invokeTarget 鍚嶇О
+     * @return true鏄� false鍚�
+     */
+    public static boolean isValidClassName(String invokeTarget)
+    {
+        return StringUtils.countMatches(invokeTarget, ".") > 1;
+    }
+
+    /**
+     * 鑾峰彇bean鍚嶇О
+     * 
+     * @param invokeTarget 鐩爣瀛楃涓�
+     * @return bean鍚嶇О
+     */
+    public static String getBeanName(String invokeTarget)
+    {
+        String beanName = StringUtils.substringBefore(invokeTarget, "(");
+        return StringUtils.substringBeforeLast(beanName, ".");
+    }
+
+    /**
+     * 鑾峰彇bean鏂规硶
+     * 
+     * @param invokeTarget 鐩爣瀛楃涓�
+     * @return method鏂规硶
+     */
+    public static String getMethodName(String invokeTarget)
+    {
+        String methodName = StringUtils.substringBefore(invokeTarget, "(");
+        return StringUtils.substringAfterLast(methodName, ".");
+    }
+
+    /**
+     * 鑾峰彇method鏂规硶鍙傛暟鐩稿叧鍒楄〃
+     * 
+     * @param invokeTarget 鐩爣瀛楃涓�
+     * @return method鏂规硶鐩稿叧鍙傛暟鍒楄〃
+     */
+    public static List<Object[]> getMethodParams(String invokeTarget)
+    {
+        String methodStr = StringUtils.substringBetween(invokeTarget, "(", ")");
+        if (StringUtils.isEmpty(methodStr))
+        {
+            return null;
+        }
+        String[] methodParams = methodStr.split(",(?=([^\"']*[\"'][^\"']*[\"'])*[^\"']*$)");
+        List<Object[]> classs = new LinkedList<>();
+        for (int i = 0; i < methodParams.length; i++)
+        {
+            String str = StringUtils.trimToEmpty(methodParams[i]);
+            // String瀛楃涓茬被鍨嬶紝浠�'鎴�"寮�澶�
+            if (StringUtils.startsWithAny(str, "'", "\""))
+            {
+                classs.add(new Object[] { StringUtils.substring(str, 1, str.length() - 1), String.class });
+            }
+            // boolean甯冨皵绫诲瀷锛岀瓑浜巘rue鎴栬�協alse
+            else if ("true".equalsIgnoreCase(str) || "false".equalsIgnoreCase(str))
+            {
+                classs.add(new Object[] { Boolean.valueOf(str), Boolean.class });
+            }
+            // long闀挎暣褰紝浠缁撳熬
+            else if (StringUtils.endsWith(str, "L"))
+            {
+                classs.add(new Object[] { Long.valueOf(StringUtils.substring(str, 0, str.length() - 1)), Long.class });
+            }
+            // double娴偣绫诲瀷锛屼互D缁撳熬
+            else if (StringUtils.endsWith(str, "D"))
+            {
+                classs.add(new Object[] { Double.valueOf(StringUtils.substring(str, 0, str.length() - 1)), Double.class });
+            }
+            // 鍏朵粬绫诲瀷褰掔被涓烘暣褰�
+            else
+            {
+                classs.add(new Object[] { Integer.valueOf(str), Integer.class });
+            }
+        }
+        return classs;
+    }
+
+    /**
+     * 鑾峰彇鍙傛暟绫诲瀷
+     * 
+     * @param methodParams 鍙傛暟鐩稿叧鍒楄〃
+     * @return 鍙傛暟绫诲瀷鍒楄〃
+     */
+    public static Class<?>[] getMethodParamsType(List<Object[]> methodParams)
+    {
+        Class<?>[] classs = new Class<?>[methodParams.size()];
+        int index = 0;
+        for (Object[] os : methodParams)
+        {
+            classs[index] = (Class<?>) os[1];
+            index++;
+        }
+        return classs;
+    }
+
+    /**
+     * 鑾峰彇鍙傛暟鍊�
+     * 
+     * @param methodParams 鍙傛暟鐩稿叧鍒楄〃
+     * @return 鍙傛暟鍊煎垪琛�
+     */
+    public static Object[] getMethodParamsValue(List<Object[]> methodParams)
+    {
+        Object[] classs = new Object[methodParams.size()];
+        int index = 0;
+        for (Object[] os : methodParams)
+        {
+            classs[index] = (Object) os[0];
+            index++;
+        }
+        return classs;
+    }
+}
diff --git a/zhitan-quartz/src/main/java/com/zhitan/quartz/util/QuartzDisallowConcurrentExecution.java b/zhitan-quartz/src/main/java/com/zhitan/quartz/util/QuartzDisallowConcurrentExecution.java
new file mode 100644
index 0000000..f87024b
--- /dev/null
+++ b/zhitan-quartz/src/main/java/com/zhitan/quartz/util/QuartzDisallowConcurrentExecution.java
@@ -0,0 +1,21 @@
+package com.zhitan.quartz.util;
+
+import org.quartz.DisallowConcurrentExecution;
+import org.quartz.JobExecutionContext;
+import com.zhitan.quartz.domain.SysJob;
+
+/**
+ * 瀹氭椂浠诲姟澶勭悊锛堢姝㈠苟鍙戞墽琛岋級
+ * 
+ * @author zhitan
+ *
+ */
+@DisallowConcurrentExecution
+public class QuartzDisallowConcurrentExecution extends AbstractQuartzJob
+{
+    @Override
+    protected void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception
+    {
+        JobInvokeUtil.invokeMethod(sysJob);
+    }
+}
diff --git a/zhitan-quartz/src/main/java/com/zhitan/quartz/util/QuartzJobExecution.java b/zhitan-quartz/src/main/java/com/zhitan/quartz/util/QuartzJobExecution.java
new file mode 100644
index 0000000..3ccb971
--- /dev/null
+++ b/zhitan-quartz/src/main/java/com/zhitan/quartz/util/QuartzJobExecution.java
@@ -0,0 +1,19 @@
+package com.zhitan.quartz.util;
+
+import org.quartz.JobExecutionContext;
+import com.zhitan.quartz.domain.SysJob;
+
+/**
+ * 瀹氭椂浠诲姟澶勭悊锛堝厑璁稿苟鍙戞墽琛岋級
+ * 
+ * @author zhitan
+ *
+ */
+public class QuartzJobExecution extends AbstractQuartzJob
+{
+    @Override
+    protected void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception
+    {
+        JobInvokeUtil.invokeMethod(sysJob);
+    }
+}
diff --git a/zhitan-quartz/src/main/java/com/zhitan/quartz/util/ScheduleUtils.java b/zhitan-quartz/src/main/java/com/zhitan/quartz/util/ScheduleUtils.java
new file mode 100644
index 0000000..af93415
--- /dev/null
+++ b/zhitan-quartz/src/main/java/com/zhitan/quartz/util/ScheduleUtils.java
@@ -0,0 +1,141 @@
+package com.zhitan.quartz.util;
+
+import com.zhitan.quartz.domain.SysJob;
+import org.quartz.CronScheduleBuilder;
+import org.quartz.CronTrigger;
+import org.quartz.Job;
+import org.quartz.JobBuilder;
+import org.quartz.JobDetail;
+import org.quartz.JobKey;
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
+import org.quartz.TriggerBuilder;
+import org.quartz.TriggerKey;
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.constant.ScheduleConstants;
+import com.zhitan.common.exception.job.TaskException;
+import com.zhitan.common.exception.job.TaskException.Code;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.spring.SpringUtils;
+
+/**
+ * 瀹氭椂浠诲姟宸ュ叿绫�
+ * 
+ * @author zhitan
+ *
+ */
+public class ScheduleUtils
+{
+    /**
+     * 寰楀埌quartz浠诲姟绫�
+     *
+     * @param sysJob 鎵ц璁″垝
+     * @return 鍏蜂綋鎵ц浠诲姟绫�
+     */
+    private static Class<? extends Job> getQuartzJobClass(SysJob sysJob)
+    {
+        boolean isConcurrent = "0".equals(sysJob.getConcurrent());
+        return isConcurrent ? QuartzJobExecution.class : QuartzDisallowConcurrentExecution.class;
+    }
+
+    /**
+     * 鏋勫缓浠诲姟瑙﹀彂瀵硅薄
+     */
+    public static TriggerKey getTriggerKey(Long jobId, String jobGroup)
+    {
+        return TriggerKey.triggerKey(ScheduleConstants.TASK_CLASS_NAME + jobId, jobGroup);
+    }
+
+    /**
+     * 鏋勫缓浠诲姟閿璞�
+     */
+    public static JobKey getJobKey(Long jobId, String jobGroup)
+    {
+        return JobKey.jobKey(ScheduleConstants.TASK_CLASS_NAME + jobId, jobGroup);
+    }
+
+    /**
+     * 鍒涘缓瀹氭椂浠诲姟
+     */
+    public static void createScheduleJob(Scheduler scheduler, SysJob job) throws SchedulerException, TaskException
+    {
+        Class<? extends Job> jobClass = getQuartzJobClass(job);
+        // 鏋勫缓job淇℃伅
+        Long jobId = job.getJobId();
+        String jobGroup = job.getJobGroup();
+        JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(getJobKey(jobId, jobGroup)).build();
+
+        // 琛ㄨ揪寮忚皟搴︽瀯寤哄櫒
+        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());
+        cronScheduleBuilder = handleCronScheduleMisfirePolicy(job, cronScheduleBuilder);
+
+        // 鎸夋柊鐨刢ronExpression琛ㄨ揪寮忔瀯寤轰竴涓柊鐨則rigger
+        CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(jobId, jobGroup))
+                .withSchedule(cronScheduleBuilder).build();
+
+        // 鏀惧叆鍙傛暟锛岃繍琛屾椂鐨勬柟娉曞彲浠ヨ幏鍙�
+        jobDetail.getJobDataMap().put(ScheduleConstants.TASK_PROPERTIES, job);
+
+        // 鍒ゆ柇鏄惁瀛樺湪
+        if (scheduler.checkExists(getJobKey(jobId, jobGroup)))
+        {
+            // 闃叉鍒涘缓鏃跺瓨鍦ㄦ暟鎹棶棰� 鍏堢Щ闄わ紝鐒跺悗鍦ㄦ墽琛屽垱寤烘搷浣�
+            scheduler.deleteJob(getJobKey(jobId, jobGroup));
+        }
+
+        // 鍒ゆ柇浠诲姟鏄惁杩囨湡
+        if (StringUtils.isNotNull(CronUtils.getNextExecution(job.getCronExpression())))
+        {
+            // 鎵ц璋冨害浠诲姟
+            scheduler.scheduleJob(jobDetail, trigger);
+        }
+
+        // 鏆傚仠浠诲姟
+        if (job.getStatus().equals(ScheduleConstants.Status.PAUSE.getValue()))
+        {
+            scheduler.pauseJob(ScheduleUtils.getJobKey(jobId, jobGroup));
+        }
+    }
+
+    /**
+     * 璁剧疆瀹氭椂浠诲姟绛栫暐
+     */
+    public static CronScheduleBuilder handleCronScheduleMisfirePolicy(SysJob job, CronScheduleBuilder cb)
+            throws TaskException
+    {
+        switch (job.getMisfirePolicy())
+        {
+            case ScheduleConstants.MISFIRE_DEFAULT:
+                return cb;
+            case ScheduleConstants.MISFIRE_IGNORE_MISFIRES:
+                return cb.withMisfireHandlingInstructionIgnoreMisfires();
+            case ScheduleConstants.MISFIRE_FIRE_AND_PROCEED:
+                return cb.withMisfireHandlingInstructionFireAndProceed();
+            case ScheduleConstants.MISFIRE_DO_NOTHING:
+                return cb.withMisfireHandlingInstructionDoNothing();
+            default:
+                throw new TaskException("The task misfire policy '" + job.getMisfirePolicy()
+                        + "' cannot be used in cron schedule tasks", Code.CONFIG_ERROR);
+        }
+    }
+
+    /**
+     * 妫�鏌ュ寘鍚嶆槸鍚︿负鐧藉悕鍗曢厤缃�
+     * 
+     * @param invokeTarget 鐩爣瀛楃涓�
+     * @return 缁撴灉
+     */
+    public static boolean whiteList(String invokeTarget)
+    {
+        String packageName = StringUtils.substringBefore(invokeTarget, "(");
+        int count = StringUtils.countMatches(packageName, ".");
+        if (count > 1)
+        {
+            return StringUtils.containsAnyIgnoreCase(invokeTarget, Constants.JOB_WHITELIST_STR);
+        }
+        Object obj = SpringUtils.getBean(StringUtils.split(invokeTarget, ".")[0]);
+        String beanPackageName = obj.getClass().getPackage().getName();
+        return StringUtils.containsAnyIgnoreCase(beanPackageName, Constants.JOB_WHITELIST_STR)
+                && !StringUtils.containsAnyIgnoreCase(beanPackageName, Constants.JOB_ERROR_STR);
+    }
+}
diff --git a/zhitan-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml b/zhitan-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml
new file mode 100644
index 0000000..7c1192b
--- /dev/null
+++ b/zhitan-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.quartz.mapper.SysJobLogMapper">
+
+	<resultMap type="SysJobLog" id="SysJobLogResult">
+		<id     property="jobLogId"       column="job_log_id"      />
+		<result property="jobName"        column="job_name"        />
+		<result property="jobGroup"       column="job_group"       />
+		<result property="invokeTarget"   column="invoke_target"   />
+		<result property="jobMessage"     column="job_message"     />
+		<result property="status"         column="status"          />
+		<result property="exceptionInfo"  column="exception_info"  />
+		<result property="createTime"     column="create_time"     />
+	</resultMap>
+	
+	<sql id="selectJobLogVo">
+        select job_log_id, job_name, job_group, invoke_target, job_message, status, exception_info, create_time 
+		from sys_job_log
+    </sql>
+	
+	<select id="selectJobLogList" parameterType="SysJobLog" resultMap="SysJobLogResult">
+		<include refid="selectJobLogVo"/>
+		<where>
+			<if test="jobName != null and jobName != ''">
+				AND job_name like concat('%', #{jobName}, '%')
+			</if>
+			<if test="jobGroup != null and jobGroup != ''">
+				AND job_group = #{jobGroup}
+			</if>
+			<if test="status != null and status != ''">
+				AND status = #{status}
+			</if>
+			<if test="invokeTarget != null and invokeTarget != ''">
+				AND invoke_target like concat('%', #{invokeTarget}, '%')
+			</if>
+			<if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+				and date_format(create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
+			</if>
+			<if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+				and date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
+			</if>
+		</where>
+		order by create_time desc
+	</select>
+	
+	<select id="selectJobLogAll" resultMap="SysJobLogResult">
+		<include refid="selectJobLogVo"/>
+	</select>
+	
+	<select id="selectJobLogById" parameterType="Long" resultMap="SysJobLogResult">
+		<include refid="selectJobLogVo"/>
+		where job_log_id = #{jobLogId}
+	</select>
+	
+	<delete id="deleteJobLogById" parameterType="Long">
+ 		delete from sys_job_log where job_log_id = #{jobLogId}
+ 	</delete>
+ 	
+ 	<delete id="deleteJobLogByIds" parameterType="Long">
+ 		delete from sys_job_log where job_log_id in
+ 		<foreach collection="array" item="jobLogId" open="(" separator="," close=")">
+ 			#{jobLogId}
+        </foreach> 
+ 	</delete>
+ 	
+ 	<update id="cleanJobLog">
+        truncate table sys_job_log
+    </update>
+ 	
+ 	<insert id="insertJobLog" parameterType="SysJobLog">
+ 		insert into sys_job_log(
+ 			<if test="jobLogId != null and jobLogId != 0">job_log_id,</if>
+ 			<if test="jobName != null and jobName != ''">job_name,</if>
+ 			<if test="jobGroup != null and jobGroup != ''">job_group,</if>
+ 			<if test="invokeTarget != null and invokeTarget != ''">invoke_target,</if>
+ 			<if test="jobMessage != null and jobMessage != ''">job_message,</if>
+ 			<if test="status != null and status != ''">status,</if>
+ 			<if test="exceptionInfo != null and exceptionInfo != ''">exception_info,</if>
+ 			create_time
+ 		)values(
+ 			<if test="jobLogId != null and jobLogId != 0">#{jobLogId},</if>
+ 			<if test="jobName != null and jobName != ''">#{jobName},</if>
+ 			<if test="jobGroup != null and jobGroup != ''">#{jobGroup},</if>
+ 			<if test="invokeTarget != null and invokeTarget != ''">#{invokeTarget},</if>
+ 			<if test="jobMessage != null and jobMessage != ''">#{jobMessage},</if>
+ 			<if test="status != null and status != ''">#{status},</if>
+ 			<if test="exceptionInfo != null and exceptionInfo != ''">#{exceptionInfo},</if>
+ 			now()
+ 		)
+	</insert>
+
+</mapper> 
\ No newline at end of file
diff --git a/zhitan-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml b/zhitan-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml
new file mode 100644
index 0000000..2dfdd8d
--- /dev/null
+++ b/zhitan-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.quartz.mapper.SysJobMapper">
+
+	<resultMap type="SysJob" id="SysJobResult">
+		<id     property="jobId"          column="job_id"          />
+		<result property="jobName"        column="job_name"        />
+		<result property="jobGroup"       column="job_group"       />
+		<result property="invokeTarget"   column="invoke_target"   />
+		<result property="cronExpression" column="cron_expression" />
+		<result property="misfirePolicy"  column="misfire_policy"  />
+		<result property="concurrent"     column="concurrent"      />
+		<result property="status"         column="status"          />
+		<result property="createBy"       column="create_by"       />
+		<result property="createTime"     column="create_time"     />
+		<result property="updateBy"       column="update_by"       />
+		<result property="updateTime"     column="update_time"     />
+		<result property="remark"         column="remark"          />
+	</resultMap>
+	
+	<sql id="selectJobVo">
+        select job_id, job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark 
+		from sys_job
+    </sql>
+	
+	<select id="selectJobList" parameterType="SysJob" resultMap="SysJobResult">
+		<include refid="selectJobVo"/>
+		<where>
+			<if test="jobName != null and jobName != ''">
+				AND job_name like concat('%', #{jobName}, '%')
+			</if>
+			<if test="jobGroup != null and jobGroup != ''">
+				AND job_group = #{jobGroup}
+			</if>
+			<if test="status != null and status != ''">
+				AND status = #{status}
+			</if>
+			<if test="invokeTarget != null and invokeTarget != ''">
+				AND invoke_target like concat('%', #{invokeTarget}, '%')
+			</if>
+		</where>
+	</select>
+	
+	<select id="selectJobAll" resultMap="SysJobResult">
+		<include refid="selectJobVo"/>
+	</select>
+	
+	<select id="selectJobById" parameterType="Long" resultMap="SysJobResult">
+		<include refid="selectJobVo"/>
+		where job_id = #{jobId}
+	</select>
+	
+	<delete id="deleteJobById" parameterType="Long">
+ 		delete from sys_job where job_id = #{jobId}
+ 	</delete>
+ 	
+ 	<delete id="deleteJobByIds" parameterType="Long">
+ 		delete from sys_job where job_id in
+ 		<foreach collection="array" item="jobId" open="(" separator="," close=")">
+ 			#{jobId}
+        </foreach> 
+ 	</delete>
+ 	
+ 	<update id="updateJob" parameterType="SysJob">
+ 		update sys_job
+ 		<set>
+ 			<if test="jobName != null and jobName != ''">job_name = #{jobName},</if>
+ 			<if test="jobGroup != null and jobGroup != ''">job_group = #{jobGroup},</if>
+ 			<if test="invokeTarget != null and invokeTarget != ''">invoke_target = #{invokeTarget},</if>
+ 			<if test="cronExpression != null and cronExpression != ''">cron_expression = #{cronExpression},</if>
+ 			<if test="misfirePolicy != null and misfirePolicy != ''">misfire_policy = #{misfirePolicy},</if>
+ 			<if test="concurrent != null and concurrent != ''">concurrent = #{concurrent},</if>
+ 			<if test="status !=null">status = #{status},</if>
+ 			<if test="remark != null and remark != ''">remark = #{remark},</if>
+ 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+ 			update_time = now()
+ 		</set>
+ 		where job_id = #{jobId}
+	</update>
+ 	
+ 	<insert id="insertJob" parameterType="SysJob" useGeneratedKeys="true" keyProperty="jobId">
+ 		insert into sys_job(
+ 			<if test="jobId != null and jobId != 0">job_id,</if>
+ 			<if test="jobName != null and jobName != ''">job_name,</if>
+ 			<if test="jobGroup != null and jobGroup != ''">job_group,</if>
+ 			<if test="invokeTarget != null and invokeTarget != ''">invoke_target,</if>
+ 			<if test="cronExpression != null and cronExpression != ''">cron_expression,</if>
+ 			<if test="misfirePolicy != null and misfirePolicy != ''">misfire_policy,</if>
+ 			<if test="concurrent != null and concurrent != ''">concurrent,</if>
+ 			<if test="status != null and status != ''">status,</if>
+ 			<if test="remark != null and remark != ''">remark,</if>
+ 			<if test="createBy != null and createBy != ''">create_by,</if>
+ 			create_time
+ 		)values(
+ 			<if test="jobId != null and jobId != 0">#{jobId},</if>
+ 			<if test="jobName != null and jobName != ''">#{jobName},</if>
+ 			<if test="jobGroup != null and jobGroup != ''">#{jobGroup},</if>
+ 			<if test="invokeTarget != null and invokeTarget != ''">#{invokeTarget},</if>
+ 			<if test="cronExpression != null and cronExpression != ''">#{cronExpression},</if>
+ 			<if test="misfirePolicy != null and misfirePolicy != ''">#{misfirePolicy},</if>
+ 			<if test="concurrent != null and concurrent != ''">#{concurrent},</if>
+ 			<if test="status != null and status != ''">#{status},</if>
+ 			<if test="remark != null and remark != ''">#{remark},</if>
+ 			<if test="createBy != null and createBy != ''">#{createBy},</if>
+ 			now()
+ 		)
+	</insert>
+
+</mapper> 
\ No newline at end of file
diff --git a/zhitan-quartz/target/classes/mapper/quartz/SysJobLogMapper.xml b/zhitan-quartz/target/classes/mapper/quartz/SysJobLogMapper.xml
new file mode 100644
index 0000000..7c1192b
--- /dev/null
+++ b/zhitan-quartz/target/classes/mapper/quartz/SysJobLogMapper.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.quartz.mapper.SysJobLogMapper">
+
+	<resultMap type="SysJobLog" id="SysJobLogResult">
+		<id     property="jobLogId"       column="job_log_id"      />
+		<result property="jobName"        column="job_name"        />
+		<result property="jobGroup"       column="job_group"       />
+		<result property="invokeTarget"   column="invoke_target"   />
+		<result property="jobMessage"     column="job_message"     />
+		<result property="status"         column="status"          />
+		<result property="exceptionInfo"  column="exception_info"  />
+		<result property="createTime"     column="create_time"     />
+	</resultMap>
+	
+	<sql id="selectJobLogVo">
+        select job_log_id, job_name, job_group, invoke_target, job_message, status, exception_info, create_time 
+		from sys_job_log
+    </sql>
+	
+	<select id="selectJobLogList" parameterType="SysJobLog" resultMap="SysJobLogResult">
+		<include refid="selectJobLogVo"/>
+		<where>
+			<if test="jobName != null and jobName != ''">
+				AND job_name like concat('%', #{jobName}, '%')
+			</if>
+			<if test="jobGroup != null and jobGroup != ''">
+				AND job_group = #{jobGroup}
+			</if>
+			<if test="status != null and status != ''">
+				AND status = #{status}
+			</if>
+			<if test="invokeTarget != null and invokeTarget != ''">
+				AND invoke_target like concat('%', #{invokeTarget}, '%')
+			</if>
+			<if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+				and date_format(create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
+			</if>
+			<if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+				and date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
+			</if>
+		</where>
+		order by create_time desc
+	</select>
+	
+	<select id="selectJobLogAll" resultMap="SysJobLogResult">
+		<include refid="selectJobLogVo"/>
+	</select>
+	
+	<select id="selectJobLogById" parameterType="Long" resultMap="SysJobLogResult">
+		<include refid="selectJobLogVo"/>
+		where job_log_id = #{jobLogId}
+	</select>
+	
+	<delete id="deleteJobLogById" parameterType="Long">
+ 		delete from sys_job_log where job_log_id = #{jobLogId}
+ 	</delete>
+ 	
+ 	<delete id="deleteJobLogByIds" parameterType="Long">
+ 		delete from sys_job_log where job_log_id in
+ 		<foreach collection="array" item="jobLogId" open="(" separator="," close=")">
+ 			#{jobLogId}
+        </foreach> 
+ 	</delete>
+ 	
+ 	<update id="cleanJobLog">
+        truncate table sys_job_log
+    </update>
+ 	
+ 	<insert id="insertJobLog" parameterType="SysJobLog">
+ 		insert into sys_job_log(
+ 			<if test="jobLogId != null and jobLogId != 0">job_log_id,</if>
+ 			<if test="jobName != null and jobName != ''">job_name,</if>
+ 			<if test="jobGroup != null and jobGroup != ''">job_group,</if>
+ 			<if test="invokeTarget != null and invokeTarget != ''">invoke_target,</if>
+ 			<if test="jobMessage != null and jobMessage != ''">job_message,</if>
+ 			<if test="status != null and status != ''">status,</if>
+ 			<if test="exceptionInfo != null and exceptionInfo != ''">exception_info,</if>
+ 			create_time
+ 		)values(
+ 			<if test="jobLogId != null and jobLogId != 0">#{jobLogId},</if>
+ 			<if test="jobName != null and jobName != ''">#{jobName},</if>
+ 			<if test="jobGroup != null and jobGroup != ''">#{jobGroup},</if>
+ 			<if test="invokeTarget != null and invokeTarget != ''">#{invokeTarget},</if>
+ 			<if test="jobMessage != null and jobMessage != ''">#{jobMessage},</if>
+ 			<if test="status != null and status != ''">#{status},</if>
+ 			<if test="exceptionInfo != null and exceptionInfo != ''">#{exceptionInfo},</if>
+ 			now()
+ 		)
+	</insert>
+
+</mapper> 
\ No newline at end of file
diff --git a/zhitan-quartz/target/classes/mapper/quartz/SysJobMapper.xml b/zhitan-quartz/target/classes/mapper/quartz/SysJobMapper.xml
new file mode 100644
index 0000000..2dfdd8d
--- /dev/null
+++ b/zhitan-quartz/target/classes/mapper/quartz/SysJobMapper.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.quartz.mapper.SysJobMapper">
+
+	<resultMap type="SysJob" id="SysJobResult">
+		<id     property="jobId"          column="job_id"          />
+		<result property="jobName"        column="job_name"        />
+		<result property="jobGroup"       column="job_group"       />
+		<result property="invokeTarget"   column="invoke_target"   />
+		<result property="cronExpression" column="cron_expression" />
+		<result property="misfirePolicy"  column="misfire_policy"  />
+		<result property="concurrent"     column="concurrent"      />
+		<result property="status"         column="status"          />
+		<result property="createBy"       column="create_by"       />
+		<result property="createTime"     column="create_time"     />
+		<result property="updateBy"       column="update_by"       />
+		<result property="updateTime"     column="update_time"     />
+		<result property="remark"         column="remark"          />
+	</resultMap>
+	
+	<sql id="selectJobVo">
+        select job_id, job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark 
+		from sys_job
+    </sql>
+	
+	<select id="selectJobList" parameterType="SysJob" resultMap="SysJobResult">
+		<include refid="selectJobVo"/>
+		<where>
+			<if test="jobName != null and jobName != ''">
+				AND job_name like concat('%', #{jobName}, '%')
+			</if>
+			<if test="jobGroup != null and jobGroup != ''">
+				AND job_group = #{jobGroup}
+			</if>
+			<if test="status != null and status != ''">
+				AND status = #{status}
+			</if>
+			<if test="invokeTarget != null and invokeTarget != ''">
+				AND invoke_target like concat('%', #{invokeTarget}, '%')
+			</if>
+		</where>
+	</select>
+	
+	<select id="selectJobAll" resultMap="SysJobResult">
+		<include refid="selectJobVo"/>
+	</select>
+	
+	<select id="selectJobById" parameterType="Long" resultMap="SysJobResult">
+		<include refid="selectJobVo"/>
+		where job_id = #{jobId}
+	</select>
+	
+	<delete id="deleteJobById" parameterType="Long">
+ 		delete from sys_job where job_id = #{jobId}
+ 	</delete>
+ 	
+ 	<delete id="deleteJobByIds" parameterType="Long">
+ 		delete from sys_job where job_id in
+ 		<foreach collection="array" item="jobId" open="(" separator="," close=")">
+ 			#{jobId}
+        </foreach> 
+ 	</delete>
+ 	
+ 	<update id="updateJob" parameterType="SysJob">
+ 		update sys_job
+ 		<set>
+ 			<if test="jobName != null and jobName != ''">job_name = #{jobName},</if>
+ 			<if test="jobGroup != null and jobGroup != ''">job_group = #{jobGroup},</if>
+ 			<if test="invokeTarget != null and invokeTarget != ''">invoke_target = #{invokeTarget},</if>
+ 			<if test="cronExpression != null and cronExpression != ''">cron_expression = #{cronExpression},</if>
+ 			<if test="misfirePolicy != null and misfirePolicy != ''">misfire_policy = #{misfirePolicy},</if>
+ 			<if test="concurrent != null and concurrent != ''">concurrent = #{concurrent},</if>
+ 			<if test="status !=null">status = #{status},</if>
+ 			<if test="remark != null and remark != ''">remark = #{remark},</if>
+ 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+ 			update_time = now()
+ 		</set>
+ 		where job_id = #{jobId}
+	</update>
+ 	
+ 	<insert id="insertJob" parameterType="SysJob" useGeneratedKeys="true" keyProperty="jobId">
+ 		insert into sys_job(
+ 			<if test="jobId != null and jobId != 0">job_id,</if>
+ 			<if test="jobName != null and jobName != ''">job_name,</if>
+ 			<if test="jobGroup != null and jobGroup != ''">job_group,</if>
+ 			<if test="invokeTarget != null and invokeTarget != ''">invoke_target,</if>
+ 			<if test="cronExpression != null and cronExpression != ''">cron_expression,</if>
+ 			<if test="misfirePolicy != null and misfirePolicy != ''">misfire_policy,</if>
+ 			<if test="concurrent != null and concurrent != ''">concurrent,</if>
+ 			<if test="status != null and status != ''">status,</if>
+ 			<if test="remark != null and remark != ''">remark,</if>
+ 			<if test="createBy != null and createBy != ''">create_by,</if>
+ 			create_time
+ 		)values(
+ 			<if test="jobId != null and jobId != 0">#{jobId},</if>
+ 			<if test="jobName != null and jobName != ''">#{jobName},</if>
+ 			<if test="jobGroup != null and jobGroup != ''">#{jobGroup},</if>
+ 			<if test="invokeTarget != null and invokeTarget != ''">#{invokeTarget},</if>
+ 			<if test="cronExpression != null and cronExpression != ''">#{cronExpression},</if>
+ 			<if test="misfirePolicy != null and misfirePolicy != ''">#{misfirePolicy},</if>
+ 			<if test="concurrent != null and concurrent != ''">#{concurrent},</if>
+ 			<if test="status != null and status != ''">#{status},</if>
+ 			<if test="remark != null and remark != ''">#{remark},</if>
+ 			<if test="createBy != null and createBy != ''">#{createBy},</if>
+ 			now()
+ 		)
+	</insert>
+
+</mapper> 
\ No newline at end of file
diff --git a/zhitan-system/pom.xml b/zhitan-system/pom.xml
new file mode 100644
index 0000000..7886149
--- /dev/null
+++ b/zhitan-system/pom.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>BaseAdminAPI</artifactId>
+        <groupId>com.zhitan</groupId>
+        <version>3.8.7</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>zhitan-system</artifactId>
+
+    <description>
+        system绯荤粺妯″潡
+    </description>
+
+    <dependencies>
+
+        <!-- 閫氱敤宸ュ叿-->
+        <dependency>
+            <groupId>com.zhitan</groupId>
+            <artifactId>zhitan-common</artifactId>
+        </dependency>
+
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/domain/AlarmItem.java b/zhitan-system/src/main/java/com/zhitan/alarm/domain/AlarmItem.java
new file mode 100644
index 0000000..99d0f4d
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/domain/AlarmItem.java
@@ -0,0 +1,184 @@
+package com.zhitan.alarm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 棰勬姤璀﹁缃璞� warn_set
+ *
+ * @author sys
+ * @date 2020-03-02
+ */
+public class AlarmItem extends BaseEntity {
+
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * 涓婚敭id
+   */
+  private String id;
+
+  /**
+   * 鎸囨爣鐨勪富閿甶d
+   */
+  @Excel(name = "鎸囨爣鐨勪富閿甶d")
+  private String dwid;
+
+  /**
+   * 鎸囨爣缂栫爜
+   */
+  private String indexCode;
+
+  /**
+   * 鍚仠鐘舵�� 1鍚姩2鍋滄
+   */
+  @Excel(name = "鍚仠鐘舵�� 1鍚姩2鍋滄")
+  private String startStop;
+
+  /**
+   * 鏃舵
+   */
+  @Excel(name = "鏃舵")
+  private String timeSlot;
+
+  /**
+   * 闄�   1涓婇檺2涓嬮檺
+   */
+  @Excel(name = "闄�   1涓婇檺2涓嬮檺")
+  private String limitType;
+
+  /**
+   * 闄愬��
+   */
+  @Excel(name = "闄愬��")
+  private String limitVal;
+
+  /**
+   * 鎶ヨ绾у埆
+   */
+  @Excel(name = "鎶ヨ绾у埆")
+  private String alarmLevel;
+
+  public String getAlarmCode() {
+    return alarmCode;
+  }
+
+  public void setAlarmCode(String alarmCode) {
+    this.alarmCode = alarmCode;
+  }
+
+  /**
+   * 鎶ヨ缂栫爜鎷兼帴锛宨ndexid:time_slot:limit_type
+   */
+  private String alarmCode;
+
+  /**
+   * nodeid
+   */
+  @Excel(name = "鑺傜偣ID")
+  private String nodeId;
+
+  @TableField(exist = false)
+  private String calcText;
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getId() {
+    return id;
+  }
+
+  public void setDwid(String dwid) {
+    this.dwid = dwid;
+  }
+
+  public String getDwid() {
+    return dwid;
+  }
+
+  public void setStartStop(String startStop) {
+    this.startStop = startStop;
+  }
+
+  public String getStartStop() {
+    return startStop;
+  }
+
+  public void setTimeSlot(String timeSlot) {
+    this.timeSlot = timeSlot;
+  }
+
+  public String getTimeSlot() {
+    return timeSlot;
+  }
+
+  public void setLimitType(String limitType) {
+    this.limitType = limitType;
+  }
+
+  public String getLimitType() {
+    return limitType;
+  }
+
+  public void setLimitVal(String limitVal) {
+    this.limitVal = limitVal;
+  }
+
+  public String getLimitVal() {
+    return limitVal;
+  }
+
+  public void setAlarmLevel(String alarmLevel) {
+    this.alarmLevel = alarmLevel;
+  }
+
+  public String getAlarmLevel() {
+    return alarmLevel;
+  }
+
+  public void setNodeId(String nodeId) {
+    this.nodeId = nodeId;
+  }
+
+  public String getNodeId() {
+    return nodeId;
+  }
+
+  @Override
+  public String toString() {
+    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+        .append("id", getId())
+        .append("createTime", getCreateTime())
+        .append("createBy", getCreateBy())
+        .append("updateTime", getUpdateTime())
+        .append("updateBy", getUpdateBy())
+        .append("dwid", getDwid())
+        .append("startStop", getStartStop())
+        .append("timeSlot", getTimeSlot())
+        .append("limitType", getLimitType())
+        .append("limitVal", getLimitVal())
+        .append("alarmLevel", getAlarmLevel())
+        .append("nodeId", getNodeId())
+        .toString();
+  }
+
+    public String getCalcText() {
+        return calcText;
+    }
+
+    public void setCalcText(String calcText) {
+        this.calcText = calcText;
+    }
+
+  public String getIndexCode() {
+    return indexCode;
+  }
+
+  public void setIndexCode(String indexCode) {
+    this.indexCode = indexCode;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/domain/HistoryAlarm.java b/zhitan-system/src/main/java/com/zhitan/alarm/domain/HistoryAlarm.java
new file mode 100644
index 0000000..10e749d
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/domain/HistoryAlarm.java
@@ -0,0 +1,173 @@
+package com.zhitan.alarm.domain;
+
+
+import com.zhitan.common.enums.Quality;
+
+import java.util.Date;
+
+public class HistoryAlarm {
+
+  /**
+   * 涓婚敭
+   */
+  private String id;
+  /**
+   * 鎸囨爣涓婚敭
+   */
+  private String indexId;
+  /**
+   * 鎸囨爣鍚嶇О
+   */
+  private String indexName;
+  private String itemId;
+  /**
+   * 鎶ヨ閰嶇疆椤�
+   */
+  private AlarmItem alarmItem;
+  /**
+   * 闄愬��
+   */
+  private double limitingValue;
+  /**
+   * 鎶ヨ鏃剁殑鍊�
+   */
+  private double alarmValue;
+  /**
+   * 鎶ヨ鏄暟鎹川閲�
+   */
+  private Quality alarmValueQuality;
+  /**
+   * 鎶ヨ浜嬩欢
+   */
+  private Date beginTime;
+  /**
+   * 鎶ヨ缁撴潫鏃堕棿
+   */
+  private Date endTime;
+  private String timeCode;
+  /**
+   * 鎶ヨ鎸佺画鏃堕棿
+   */
+  private double duration;
+  /**
+   * 鎶ヨ鎻忚堪
+   */
+  private String content;
+
+  public String getAlarmCode() {
+    return alarmCode;
+  }
+
+  public void setAlarmCode(String alarmCode) {
+    this.alarmCode = alarmCode;
+  }
+
+  /**
+   * 鎶ヨ缂栫爜鎷兼帴锛宨ndexid:time_slot:limit_type
+   */
+  private String alarmCode;
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getIndexId() {
+    return indexId;
+  }
+
+  public void setIndexId(String indexId) {
+    this.indexId = indexId;
+  }
+
+  public String getIndexName() {
+    return indexName;
+  }
+
+  public void setIndexName(String indexName) {
+    this.indexName = indexName;
+  }
+
+  public AlarmItem getAlarmItem() {
+    return alarmItem;
+  }
+
+  public void setAlarmItem(AlarmItem alarmItem) {
+    this.alarmItem = alarmItem;
+  }
+
+  public double getLimitingValue() {
+    return limitingValue;
+  }
+
+  public void setLimitingValue(double limitingValue) {
+    this.limitingValue = limitingValue;
+  }
+
+  public double getAlarmValue() {
+    return alarmValue;
+  }
+
+  public void setAlarmValue(double alarmValue) {
+    this.alarmValue = alarmValue;
+  }
+
+  public Quality getAlarmValueQuality() {
+    return alarmValueQuality;
+  }
+
+  public void setAlarmValueQuality(Quality alarmValueQuality) {
+    this.alarmValueQuality = alarmValueQuality;
+  }
+
+  public Date getBeginTime() {
+    return beginTime;
+  }
+
+  public void setBeginTime(Date beginTime) {
+    this.beginTime = beginTime;
+  }
+
+  public Date getEndTime() {
+    return endTime;
+  }
+
+  public void setEndTime(Date endTime) {
+    this.endTime = endTime;
+  }
+
+  public double getDuration() {
+    return duration;
+  }
+
+  public void setDuration(double duration) {
+    this.duration = duration;
+  }
+
+  public String getContent() {
+    return content;
+  }
+
+  public void setContent(String content) {
+    this.content = content;
+  }
+
+  public String getItemId() {
+    return itemId;
+  }
+
+  public void setItemId(String itemId) {
+    this.itemId = itemId;
+  }
+
+  public String getTimeCode() {
+    return timeCode;
+  }
+
+  public void setTimeCode(String timeCode) {
+    this.timeCode = timeCode;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/domain/HistoryTable.java b/zhitan-system/src/main/java/com/zhitan/alarm/domain/HistoryTable.java
new file mode 100644
index 0000000..3134e15
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/domain/HistoryTable.java
@@ -0,0 +1,84 @@
+package com.zhitan.alarm.domain;
+
+
+import com.zhitan.common.annotation.Excel;
+
+/**
+ * 鍘嗗彶琛ㄦ牸瀵煎嚭
+ *
+ * @author
+ * @date 2020-03-20
+ */
+public class HistoryTable {
+
+    /**
+     * 鎶ヨ鏃堕棿
+     */
+    @Excel(name = "鎶ヨ鏃堕棿",width = 30)
+    private String alarmTime;
+
+    /**
+     * 鎸囨爣缂栫爜
+     */
+   @Excel(name = "鎸囨爣缂栫爜")
+   private String code;
+
+    /**
+     * 鎸囨爣鍚嶇О
+     */
+    @Excel(name = "鎸囨爣鍚嶇О")
+    private String indexName;
+
+    /**
+     * 鍗曚綅鍚嶇О
+     */
+    @Excel(name = "鍗曚綅鍚嶇О")
+    private String unitName;
+
+    /**
+     * 瀹炴椂鍊�
+     */
+    @Excel(name = "瀹炴椂鍊�")
+    private Double earlyWarningValue;
+
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getAlarmTime() {
+        return alarmTime;
+    }
+
+    public void setAlarmTime(String alarmTime) {
+        this.alarmTime = alarmTime;
+    }
+
+    public String getIndexName() {
+        return indexName;
+    }
+
+    public void setIndexName(String indexName) {
+        this.indexName = indexName;
+    }
+
+    public String getUnitName() {
+        return unitName;
+    }
+
+    public void setUnitName(String unitName) {
+        this.unitName = unitName;
+    }
+
+    public Double getEarlyWarningValue() {
+        return earlyWarningValue;
+    }
+
+    public void setEarlyWarningValue(Double earlyWarningValue) {
+        this.earlyWarningValue = earlyWarningValue;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/domain/JkHistoryAlarm.java b/zhitan-system/src/main/java/com/zhitan/alarm/domain/JkHistoryAlarm.java
new file mode 100644
index 0000000..d92e91c
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/domain/JkHistoryAlarm.java
@@ -0,0 +1,271 @@
+package com.zhitan.alarm.domain;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+
+import java.util.Date;
+
+
+public class JkHistoryAlarm extends BaseEntity {
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * 妯″瀷鑺傜偣鍚嶇О
+   * */
+  @Excel(name = "鍗曚綅鍚嶇О")
+  private String modelName;
+  /**
+   * 鎸囨爣缂栧彿
+   * */
+  @Excel(name = "鎸囨爣缂栫爜")
+  private String code;
+  /**
+   * 鎸囨爣鍚嶇О*/
+  @Excel(name = "鎸囨爣鍚嶇О")
+  private String indexName;
+  /**
+   * 鎸囨爣鍗曚綅绫诲瀷ID*/
+  @Excel(name = "鎸囨爣鍗曚綅")
+  private String unitId;
+  /**
+   * 鎶ヨ绾у埆*/
+  @Excel(name = "鎶ヨ绾у埆")
+  private String alarmLevel;
+  /**
+   * 闄愬�肩被鍨�
+   * */
+  @Excel(name = "闄愬�肩被鍨�")
+  private String limitType;
+  /**
+   * 闄愬��
+   * */
+  @Excel(name = "闄愬��")
+  private double limitingValue;
+  /**
+   * 鎶ヨ鍊�
+   * */
+  @Excel(name = "鎶ヨ鍊�")
+  private double alarmValue;
+  /**
+   * 鎸囨爣涓婚敭id
+   * */
+  private String indexId;
+  /**
+   * 妯″瀷鑺傜偣涓婚敭id
+   * */
+  private String nodeId;
+  /**
+   * 妯″瀷鏌ヨ灞傜骇鏍囧織 B鏈骇  ALL鍖呭惈涓嬬骇
+   * */
+  private String eierarchyFlag;
+  /**
+   * 鎸囨爣绫诲瀷 COLLECT閲囬泦鐐�  STATISTIC鎸囨爣
+   * */
+  private String indexType;
+
+  /** 鎶ヨ鏃堕暱 */
+  @Excel(name = "鎸佺画鏃堕暱(鍒嗛挓)")
+  private Double duration;
+
+  /**
+   * 鎶ヨ寮�濮嬫椂闂�
+   */
+  @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
+  @Excel(name = "鎶ヨ寮�濮嬫椂闂�", dateFormat = "yyyy-MM-dd HH:mm:ss")
+  private Date alarmBeginTime;
+
+  /**
+   * 鎶ヨ缁撴潫鏃堕棿
+   */
+  @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
+  @Excel(name = "鎶ヨ缁撴潫鏃堕棿", dateFormat = "yyyy-MM-dd HH:mm:ss")
+  private Date alarmEndTime;
+  /**
+   * SVG鏂囦欢鐨処D
+   */
+  private Integer svgId;
+  /** 鎶ヨ鍐呭 */
+  private String content;
+  private String id;
+  private String alarmValueQuality;
+  
+  private String energyId;
+  
+  /**
+   * 璁剧疆涓�涓嬫椂闂存牸寮忥紝鏍规嵁鏃堕棿鍒嗙粍
+   */
+  private String alarmTime;
+
+  public Double getDuration() {
+    return duration;
+  }
+
+  public void setDuration(Double duration) {
+    this.duration = duration;
+  }
+
+  public Date getAlarmBeginTime() {
+    return alarmBeginTime;
+  }
+
+  public void setAlarmBeginTime(Date alarmBeginTime) {
+    this.alarmBeginTime = alarmBeginTime;
+  }
+
+  public Date getAlarmEndTime() {
+    return alarmEndTime;
+  }
+
+  public void setAlarmEndTime(Date alarmEndTime) {
+    this.alarmEndTime = alarmEndTime;
+  }
+
+  public String getIndexType() {
+    return indexType;
+  }
+
+  public void setIndexType(String indexType) {
+    this.indexType = indexType;
+  }
+
+  public String getEierarchyFlag() {
+    return eierarchyFlag;
+  }
+
+  public void setEierarchyFlag(String eierarchyFlag) {
+    this.eierarchyFlag = eierarchyFlag;
+  }
+
+  public String getModelName() {
+    return modelName;
+  }
+
+  public void setModelName(String modelName) {
+    this.modelName = modelName;
+  }
+
+  public String getCode() {
+    return code;
+  }
+
+  public void setCode(String code) {
+    this.code = code;
+  }
+
+  public String getUnitId() {
+    return unitId;
+  }
+
+  public void setUnitId(String unitId) {
+    this.unitId = unitId;
+  }
+
+  public String getAlarmLevel() {
+    return alarmLevel;
+  }
+
+  public void setAlarmLevel(String alarmLevel) {
+    this.alarmLevel = alarmLevel;
+  }
+
+  public String getLimitType() {
+    return limitType;
+  }
+
+  public void setLimitType(String limitType) {
+    this.limitType = limitType;
+  }
+
+  public String getNodeId() {
+    return nodeId;
+  }
+
+  public void setNodeId(String nodeId) {
+    this.nodeId = nodeId;
+  }
+
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getIndexId() {
+    return indexId;
+  }
+
+  public void setIndexId(String indexId) {
+    this.indexId = indexId;
+  }
+
+  public String getIndexName() {
+    return indexName;
+  }
+
+  public void setIndexName(String indexName) {
+    this.indexName = indexName;
+  }
+
+
+  public double getLimitingValue() {
+    return limitingValue;
+  }
+
+  public void setLimitingValue(double limitingValue) {
+    this.limitingValue = limitingValue;
+  }
+
+  public double getAlarmValue() {
+    return alarmValue;
+  }
+
+  public void setAlarmValue(double alarmValue) {
+    this.alarmValue = alarmValue;
+  }
+
+  public String getAlarmValueQuality() {
+    return alarmValueQuality;
+  }
+
+  public void setAlarmValueQuality(String alarmValueQuality) {
+    this.alarmValueQuality = alarmValueQuality;
+  }
+
+
+  public String getContent() {
+    return content;
+  }
+
+  public void setContent(String content) {
+    this.content = content;
+  }
+
+  public Integer getSvgId() {
+    return svgId;
+  }
+
+  public void setSvgId(Integer svgId) {
+    this.svgId = svgId;
+  }
+
+  public String getEnergyId() {
+    return energyId;
+  }
+
+  public void setEnergyId(String energyId) {
+    this.energyId = energyId;
+  }
+
+  public String getAlarmTime() {
+    return alarmTime;
+  }
+
+  public void setAlarmTime(String alarmTime) {
+    this.alarmTime = alarmTime;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/domain/JkRealTimeAlarmList.java b/zhitan-system/src/main/java/com/zhitan/alarm/domain/JkRealTimeAlarmList.java
new file mode 100644
index 0000000..b3522ef
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/domain/JkRealTimeAlarmList.java
@@ -0,0 +1,208 @@
+package com.zhitan.alarm.domain;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhitan.common.core.domain.BaseEntity;
+
+import java.util.Date;
+
+
+public class JkRealTimeAlarmList extends BaseEntity {
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * 妯″瀷鑺傜偣鍚嶇О
+   * */
+  private String modelName;
+  /**
+   * 鎸囨爣缂栧彿
+   * */
+  private String code;
+  /**
+   * 鎸囨爣鍚嶇О*/
+  private String indexName;
+  /**
+   * 鎸囨爣鍗曚綅绫诲瀷ID*/
+  private String unitId;
+  /**
+   * 鎶ヨ绾у埆*/
+  private String alarmLevel;
+  /**
+   * 闄愬�肩被鍨�
+   * */
+  private String limitType;
+  /**
+   * 闄愬��
+   * */
+  private double limitingValue;
+  /**
+   * 鎶ヨ鍊�
+   * */
+  private double alarmValue;
+  /**
+   * 鎸囨爣涓婚敭id
+   * */
+  private String indexId;
+  /**
+   * 妯″瀷鑺傜偣涓婚敭id
+   * */
+  private String nodeId;
+  /**
+   * 妯″瀷鏌ヨ灞傜骇鏍囧織 B鏈骇  ALL鍖呭惈涓嬬骇
+   * */
+  private String eierarchyFlag;
+  /**
+   * 鎸囨爣绫诲瀷 COLLECT閲囬泦鐐�  STATISTIC鎸囨爣
+   * */
+  private String indexType;
+
+  /**
+   * 鎶ヨ寮�濮嬫椂闂�
+   */
+  @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
+  private Date alarmBeginTime;
+
+
+  private String id;
+  private String alarmValueQuality;
+  private String content;
+
+  public Date getAlarmBeginTime() {
+    return alarmBeginTime;
+  }
+
+  public void setAlarmBeginTime(Date alarmBeginTime) {
+    this.alarmBeginTime = alarmBeginTime;
+  }
+
+  public String getIndexType() {
+    return indexType;
+  }
+
+  public void setIndexType(String indexType) {
+    this.indexType = indexType;
+  }
+
+  public String getEierarchyFlag() {
+    return eierarchyFlag;
+  }
+
+  public void setEierarchyFlag(String eierarchyFlag) {
+    this.eierarchyFlag = eierarchyFlag;
+  }
+
+  public String getModelName() {
+    return modelName;
+  }
+
+  public void setModelName(String modelName) {
+    this.modelName = modelName;
+  }
+
+  public String getCode() {
+    return code;
+  }
+
+  public void setCode(String code) {
+    this.code = code;
+  }
+
+  public String getUnitId() {
+    return unitId;
+  }
+
+  public void setUnitId(String unitId) {
+    this.unitId = unitId;
+  }
+
+  public String getAlarmLevel() {
+    return alarmLevel;
+  }
+
+  public void setAlarmLevel(String alarmLevel) {
+    this.alarmLevel = alarmLevel;
+  }
+
+  public String getLimitType() {
+    return limitType;
+  }
+
+  public void setLimitType(String limitType) {
+    this.limitType = limitType;
+  }
+
+  public String getNodeId() {
+    return nodeId;
+  }
+
+  public void setNodeId(String nodeId) {
+    this.nodeId = nodeId;
+  }
+
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getIndexId() {
+    return indexId;
+  }
+
+  public void setIndexId(String indexId) {
+    this.indexId = indexId;
+  }
+
+  public String getIndexName() {
+    return indexName;
+  }
+
+  public void setIndexName(String indexName) {
+    this.indexName = indexName;
+  }
+
+//  public AlarmItem getAlarmItem() {
+//    return alarmItem;
+//  }
+//
+//  public void setAlarmItem(AlarmItem alarmItem) {
+//    this.alarmItem = alarmItem;
+//  }
+
+  public double getLimitingValue() {
+    return limitingValue;
+  }
+
+  public void setLimitingValue(double limitingValue) {
+    this.limitingValue = limitingValue;
+  }
+
+  public double getAlarmValue() {
+    return alarmValue;
+  }
+
+  public void setAlarmValue(double alarmValue) {
+    this.alarmValue = alarmValue;
+  }
+
+  public String getAlarmValueQuality() {
+    return alarmValueQuality;
+  }
+
+  public void setAlarmValueQuality(String alarmValueQuality) {
+    this.alarmValueQuality = alarmValueQuality;
+  }
+
+
+  public String getContent() {
+    return content;
+  }
+
+  public void setContent(String content) {
+    this.content = content;
+  }
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/domain/LimitType.java b/zhitan-system/src/main/java/com/zhitan/alarm/domain/LimitType.java
new file mode 100644
index 0000000..4c6d606
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/domain/LimitType.java
@@ -0,0 +1,119 @@
+package com.zhitan.alarm.domain;
+
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 鎶ヨ闄愬�肩被鍨嬬淮鎶ゅ璞� limit_type
+ *
+ * @author zw
+ * @date 2020-03-07
+ */
+@ApiModel(value = "鎶ヨ闄愬��")
+public class LimitType extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    @ApiModelProperty(value = "涓婚敭id")
+    private String id;
+
+    /** $column.columnComment */
+    @Excel(name = "闄愬�肩被鍨嬪悕绉�")
+    @ApiModelProperty(value = "闄愬�肩被鍨嬪悕绉�")
+    private String limitName;
+
+    /** $column.columnComment */
+    @Excel(name = "闄愬�肩被鍨嬬紪鐮�")
+    @ApiModelProperty(value = "闄愬�肩被鍨嬬紪鐮�")
+    private String limitCode;
+
+    /** $column.columnComment */
+    @Excel(name = "鑹插彿")
+    @ApiModelProperty(value = "鑹插彿")
+    private String colorNumber;
+
+    /** $column.columnComment */
+    @Excel(name = "姣旇緝杩愮畻绗�")
+    @ApiModelProperty(value = "姣旇緝杩愮畻绗�")
+    private String comparatorOperator;
+
+    /** $column.columnComment */
+    @Excel(name = "璀︽垝绫诲瀷")
+    @ApiModelProperty(value = "璀︽垝绫诲瀷")
+    private String alarmType;
+
+    public String getComparatorOperator() {
+        return comparatorOperator;
+    }
+
+    public void setComparatorOperator(String comparatorOperator) {
+        this.comparatorOperator = comparatorOperator;
+    }
+
+    public void setId(String id)
+    {
+        this.id = id;
+    }
+
+    public String getId()
+    {
+        return id;
+    }
+    public void setLimitName(String limitName)
+    {
+        this.limitName = limitName;
+    }
+
+    public String getLimitName()
+    {
+        return limitName;
+    }
+    public void setLimitCode(String limitCode)
+    {
+        this.limitCode = limitCode;
+    }
+
+    public String getLimitCode()
+    {
+        return limitCode;
+    }
+    public void setColorNumber(String colorNumber)
+    {
+        this.colorNumber = colorNumber;
+    }
+
+    public String getColorNumber()
+    {
+        return colorNumber;
+    }
+
+    public void setAlarmType(String alarmType)
+    {
+        this.alarmType = alarmType;
+    }
+
+    public String getAlarmType()
+    {
+        return alarmType;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("limitName", getLimitName())
+            .append("limitCode", getLimitCode())
+            .append("colorNumber", getColorNumber())
+            .append("alarmType", getAlarmType())
+            .append("createTime", getCreateTime())
+            .append("createBy", getCreateBy())
+            .append("updateTime", getUpdateTime())
+            .append("updateBy", getUpdateBy())
+            .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/domain/RealTimeAlarm.java b/zhitan-system/src/main/java/com/zhitan/alarm/domain/RealTimeAlarm.java
new file mode 100644
index 0000000..5a472ed
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/domain/RealTimeAlarm.java
@@ -0,0 +1,177 @@
+package com.zhitan.alarm.domain;
+
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.enums.Quality;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+public class RealTimeAlarm  {
+  private static final long serialVersionUID = 1L;
+
+  /** 涓婚敭id */
+  private String id;
+
+  /** 鎸囨爣id */
+  @Excel(name = "鎸囨爣id")
+  private String indexId;
+
+  /** 鎸囨爣鍚嶇О */
+  @Excel(name = "鎸囨爣鍚嶇О")
+  private String indexName;
+
+  /** 鎶ヨ椤筰d */
+  @Excel(name = "鎶ヨ椤筰d")
+  private String itemId;
+
+  /** 鎶ヨ闄愬�� */
+  @Excel(name = "鎶ヨ闄愬��")
+  private Double limitingValue;
+
+  /** 鎶ヨ鍊� */
+  @Excel(name = "鎶ヨ鍊�")
+  private Double alarmValue;
+
+  /** 鎶ヨ鍊艰川閲� */
+  @Excel(name = "鎶ヨ鍊艰川閲�")
+  private Quality alarmValueQuality;
+
+  private String timeCode;
+
+  /** 鎶ヨ鏃堕棿 */
+  @Excel(name = "鎶ヨ鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+  private Date beginTime;
+
+  /** 鍐呭 */
+  @Excel(name = "鍐呭")
+  private String content;
+
+  private AlarmItem alarmItem;
+
+  public String getAlarmCode() {
+    return alarmCode;
+  }
+
+  public void setAlarmCode(String alarmCode) {
+    this.alarmCode = alarmCode;
+  }
+
+  /**
+   * 鎶ヨ缂栫爜鎷兼帴锛宨ndexid:time_slot:limit_type
+   */
+  private String alarmCode;
+
+  public void setId(String id)
+  {
+    this.id = id;
+  }
+
+  public String getId()
+  {
+    return id;
+  }
+  public void setIndexId(String indexId)
+  {
+    this.indexId = indexId;
+  }
+
+  public String getIndexId()
+  {
+    return indexId;
+  }
+  public void setIndexName(String indexName)
+  {
+    this.indexName = indexName;
+  }
+
+  public String getIndexName()
+  {
+    return indexName;
+  }
+  public void setItemId(String itemId)
+  {
+    this.itemId = itemId;
+  }
+
+  public String getItemId()
+  {
+    return itemId;
+  }
+  public void setLimitingValue(Double limitingValue)
+  {
+    this.limitingValue = limitingValue;
+  }
+
+  public Double getLimitingValue()
+  {
+    return limitingValue;
+  }
+  public void setAlarmValue(Double alarmValue)
+  {
+    this.alarmValue = alarmValue;
+  }
+
+  public Double getAlarmValue()
+  {
+    return alarmValue;
+  }
+  public void setAlarmValueQuality(Quality alarmValueQuality)
+  {
+    this.alarmValueQuality = alarmValueQuality;
+  }
+
+  public Quality getAlarmValueQuality()
+  {
+    return alarmValueQuality;
+  }
+  public void setBeginTime(Date beginTime)
+  {
+    this.beginTime = beginTime;
+  }
+
+  public Date getBeginTime()
+  {
+    return beginTime;
+  }
+  public void setContent(String content)
+  {
+    this.content = content;
+  }
+
+  public String getContent()
+  {
+    return content;
+  }
+
+  @Override
+  public String toString() {
+    return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("indexId", getIndexId())
+            .append("indexName", getIndexName())
+            .append("itemId", getItemId())
+            .append("limitingValue", getLimitingValue())
+            .append("alarmValue", getAlarmValue())
+            .append("alarmValueQuality", getAlarmValueQuality())
+            .append("beginTime", getBeginTime())
+            .append("content", getContent())
+            .toString();
+  }
+
+  public String getTimeCode() {
+    return timeCode;
+  }
+
+  public void setTimeCode(String timeCode) {
+    this.timeCode = timeCode;
+  }
+
+  public AlarmItem getAlarmItem() {
+    return alarmItem;
+  }
+
+  public void setAlarmItem(AlarmItem alarmItem) {
+    this.alarmItem = alarmItem;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/domain/dto/AlarmAnalysisDTO.java b/zhitan-system/src/main/java/com/zhitan/alarm/domain/dto/AlarmAnalysisDTO.java
new file mode 100644
index 0000000..5ca1ddf
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/domain/dto/AlarmAnalysisDTO.java
@@ -0,0 +1,45 @@
+package com.zhitan.alarm.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhitan.common.annotation.Excel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * description 鎶ヨ缁熻鍒嗘瀽
+ * @author hmj
+ * @date 2024-10-16 17:55
+ */
+@Getter
+@Setter
+public class AlarmAnalysisDTO {
+    @ApiModelProperty(value = "鑺傜偣id")
+    private String nodeId;
+    @ApiModelProperty(value = "鏃堕棿绫诲瀷锛氬勾銆佹湀銆佹棩")
+    private String timeType;
+    @ApiModelProperty(value = "鏌ヨ鏃堕棿")
+    private Date dataTime;
+    @ApiModelProperty(value = "鑳芥簮绫诲瀷")
+    private String energyType;
+
+    /**
+     * 缁熻寮�濮嬫椂闂�
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "鎶ヨ寮�濮嬫椂闂�", dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date beginTime;
+
+    /**
+     * 缁熻寮�濮嬫椂闂�
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "鎶ヨ寮�濮嬫椂闂�", dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date endTime;
+
+    /** 妯″瀷缂栫爜 */
+    @Excel(name = "妯″瀷缂栫爜")
+    private String modelCode;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/domain/vo/AlarmAnalysisVO.java b/zhitan-system/src/main/java/com/zhitan/alarm/domain/vo/AlarmAnalysisVO.java
new file mode 100644
index 0000000..a6c2edd
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/domain/vo/AlarmAnalysisVO.java
@@ -0,0 +1,41 @@
+package com.zhitan.alarm.domain.vo;
+
+import com.zhitan.consumptionanalysis.domain.vo.ChartData;
+import com.zhitan.consumptionanalysis.domain.vo.EnergyProportion;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * description todu
+ *
+ * @author hmj
+ * @date 2024-10-26 17:38
+ */
+@Getter
+@Setter
+public class AlarmAnalysisVO {
+
+    /**
+     * @description: 鎶ヨ绫诲瀷鍗犳瘮
+     */
+    private List<EnergyProportion> alarmProportion;
+    
+    /**
+     * @description: 鑳芥簮绫诲瀷鍗犳瘮
+     */
+    private List<EnergyProportion> energyProportion;
+
+    /**
+     * @description: 鎶ヨ娆℃暟鏉″舰鍥�
+     */
+    private List<ChartData> chartDataList;
+    
+    
+    private Integer indexCount;
+    
+    private Integer yearCount;
+    
+    private Integer monthCount;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/mapper/AlarmItemMapper.java b/zhitan-system/src/main/java/com/zhitan/alarm/mapper/AlarmItemMapper.java
new file mode 100644
index 0000000..fd1f3b1
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/mapper/AlarmItemMapper.java
@@ -0,0 +1,129 @@
+package com.zhitan.alarm.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.alarm.domain.AlarmItem;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 棰勬姤璀﹁缃甅apper鎺ュ彛
+ *
+ * @author sys
+ * @date 2020-03-02
+ */
+public interface AlarmItemMapper extends BaseMapper<AlarmItem> {
+
+  /**
+   * 鏌ヨ棰勬姤璀﹁缃�
+   *
+   * @param id 棰勬姤璀﹁缃甀D
+   * @return 棰勬姤璀﹁缃�
+   */
+  AlarmItem selectAlarmItemById(String id);
+
+  /**
+   * 鏌ヨ棰勬姤璀﹁缃垪琛�
+   *
+   * @param alarmItem 棰勬姤璀﹁缃�
+   * @return 棰勬姤璀﹁缃泦鍚�
+   */
+  List<AlarmItem> selectAlarmItemList(AlarmItem alarmItem);
+
+  /**
+   * 鏂板棰勬姤璀﹁缃�
+   *
+   * @param alarmItem 棰勬姤璀﹁缃�
+   * @return 缁撴灉
+   */
+  int insertAlarmItem(AlarmItem alarmItem);
+
+  /**
+   * 淇敼棰勬姤璀﹁缃�
+   *
+   * @param alarmItem 棰勬姤璀﹁缃�
+   * @return 缁撴灉
+   */
+  int updateAlarmItem(AlarmItem alarmItem);
+
+  /**
+   * 鍒犻櫎棰勬姤璀﹁缃�
+   *
+   * @param id 棰勬姤璀﹁缃甀D
+   * @return 缁撴灉
+   */
+  int deleteAlarmItemById(String id);
+
+  /**
+   * 鎵归噺鍒犻櫎棰勬姤璀﹁缃�
+   *
+   * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+   * @return 缁撴灉
+   */
+  int deleteAlarmItemByIds(String[] ids);
+
+  /**
+   * 鏌ヨ棰勬姤璀﹁缃�
+   *
+   * @param id 棰勬姤璀﹁缃甀D
+   * @return 棰勬姤璀﹁缃�
+   */
+  List<AlarmItem> selectAlarmItemtingById(String id);
+
+  /**
+   * 淇敼棰勬姤璀﹁缃�
+   *
+   * @param ids       棰勬姤璀﹁缃�
+   * @param update_by 棰勬姤璀﹁缃�
+   * @param flag      棰勬姤璀﹁缃�
+   * @return 缁撴灉
+   */
+  int updateStartStop(@Param("ids") String[] ids,@Param("flag") String flag, @Param("update_by")String update_by);
+
+  /**
+   * @return 缁撴灉
+   */
+  String getStartStop(String indexid);
+
+  /**
+   * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆�
+   *
+   * @param data 銆愯濉啓鍔熻兘鍚嶇О銆�
+   * @param username 褰撳墠鐧诲綍浜虹敤鎴峰悕
+   * @return 缁撴灉
+   */
+  int updateLimitVal(@Param("data") List data, @Param("id") String id, String username);
+
+  /**
+   * 淇敼銆愭煡璇㈡槸鍚﹀瓨鍦ㄦ祴鐐硅缃��
+   *
+   * @return 缁撴灉
+   */
+  int selectCountById(String id);
+
+  /**
+   * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆�
+   *
+   * @param data 銆愯濉啓鍔熻兘鍚嶇О銆�
+   * @return 缁撴灉
+   */
+  int updateLimitValNoDel(@Param("data") List data, @Param("id") String id, @Param("username")String username);
+
+  /**
+   * 淇敼銆愭煡璇㈡槸鍚﹀瓨鍦ㄦ祴鐐硅缃��
+   *
+   * @return 缁撴灉
+   */
+  int deleteAllLimitVal(String id);
+
+  /**
+   * 鏌ヨ棰勬姤璀﹁缃�
+   *
+   * @param id 棰勬姤璀﹁缃甀D
+   * @return 棰勬姤璀﹁缃�
+   */
+  int getSettingCount(String id);
+
+  List<AlarmItem> getAllAlarmItem();
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/mapper/AlarmLimitTypeMapper.java b/zhitan-system/src/main/java/com/zhitan/alarm/mapper/AlarmLimitTypeMapper.java
new file mode 100644
index 0000000..0509457
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/mapper/AlarmLimitTypeMapper.java
@@ -0,0 +1,61 @@
+package com.zhitan.alarm.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.alarm.domain.LimitType;
+
+import java.util.List;
+
+/**
+ * @Description
+ * @Author zhoubg
+ * @Date 2024/10/11
+ */
+public interface AlarmLimitTypeMapper extends BaseMapper<LimitType> {
+    /**
+     * 鏌ヨ鎶ヨ闄愬�肩被鍨嬬淮鎶�
+     *
+     * @param id 鎶ヨ闄愬�肩被鍨嬬淮鎶D
+     * @return 鎶ヨ闄愬�肩被鍨嬬淮鎶�
+     */
+    public LimitType selectLimitTypeById(String id);
+
+    /**
+     * 鏌ヨ鎶ヨ闄愬�肩被鍨嬬淮鎶ゅ垪琛�
+     *
+     * @param limitType 鎶ヨ闄愬�肩被鍨嬬淮鎶�
+     * @return 鎶ヨ闄愬�肩被鍨嬬淮鎶ら泦鍚�
+     */
+    public List<LimitType> selectLimitTypeList(LimitType limitType);
+
+    /**
+     * 鏂板鎶ヨ闄愬�肩被鍨嬬淮鎶�
+     *
+     * @param limitType 鎶ヨ闄愬�肩被鍨嬬淮鎶�
+     * @return 缁撴灉
+     */
+    public int insertLimitType(LimitType limitType);
+
+    /**
+     * 淇敼鎶ヨ闄愬�肩被鍨嬬淮鎶�
+     *
+     * @param limitType 鎶ヨ闄愬�肩被鍨嬬淮鎶�
+     * @return 缁撴灉
+     */
+    public int updateLimitType(LimitType limitType);
+
+    /**
+     * 鍒犻櫎鎶ヨ闄愬�肩被鍨嬬淮鎶�
+     *
+     * @param id 鎶ヨ闄愬�肩被鍨嬬淮鎶D
+     * @return 缁撴灉
+     */
+    public int deleteLimitTypeById(String id);
+
+    /**
+     * 鎵归噺鍒犻櫎鎶ヨ闄愬�肩被鍨嬬淮鎶�
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteLimitTypeByIds(String[] ids);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/mapper/HistoryAlarmMapper.java b/zhitan-system/src/main/java/com/zhitan/alarm/mapper/HistoryAlarmMapper.java
new file mode 100644
index 0000000..ab16fbd
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/mapper/HistoryAlarmMapper.java
@@ -0,0 +1,44 @@
+package com.zhitan.alarm.mapper;
+
+
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.alarm.domain.HistoryAlarm;
+import com.zhitan.alarm.domain.JkHistoryAlarm;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 瀹炴椂鎶ヨ鑾峰彇Mapper鎺ュ彛
+ *
+ * @author sys
+ * @date 2020-03-02
+ */
+public interface HistoryAlarmMapper {
+
+  /**
+   * 鑾峰彇鍘嗗彶鎶ヨ闆嗗悎
+   *
+   * @param jkHistoryAlarm 鎶ヨ鍙傛暟
+   * @return 棰勬姤璀﹁缃泦鍚�
+   */
+  List<JkHistoryAlarm> selectJkHistoryAlarmList(JkHistoryAlarm jkHistoryAlarm);
+
+  List<JkHistoryAlarm> selectJkHistoryAlarmListExcel(JkHistoryAlarm jkHistoryAlarm);
+
+  /**
+   * 瀹炴椂妫�娴� 鍔熻兘 鐨勫 sheet椤�  灞曠ず 缁勬�佸浘  娴嬬偣 鎶ヨ淇℃伅
+   *
+   * @param jkHistoryAlarm
+   * @return
+   */
+  List<JkHistoryAlarm> selectHistoryAlarmNoteList(JkHistoryAlarm jkHistoryAlarm);
+
+  void updateHistoryAlarm(@Param("alarmCode") String alarmCode,
+      @Param("historyAlarm") HistoryAlarm historyAlarm);
+
+  Page<JkHistoryAlarm> selectJkHistoryAlarmPage(@Param("jkHistoryAlarm") JkHistoryAlarm jkHistoryAlarm,@Param("page")Page<?> page);
+
+  Integer selectCountByTime(@Param("beginTime") DateTime beginTime, @Param("endTime") DateTime endTime);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/mapper/RealtimeAlarmMapper.java b/zhitan-system/src/main/java/com/zhitan/alarm/mapper/RealtimeAlarmMapper.java
new file mode 100644
index 0000000..83ff8cd
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/mapper/RealtimeAlarmMapper.java
@@ -0,0 +1,83 @@
+package com.zhitan.alarm.mapper;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.alarm.domain.JkRealTimeAlarmList;
+import com.zhitan.alarm.domain.RealTimeAlarm;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 瀹炴椂鎶ヨ鐩戞帶Mapper鎺ュ彛
+ *
+ * @author sys
+ * @date 2020-03-18
+ */
+public interface RealtimeAlarmMapper {
+
+  /**
+   * 鏌ヨ瀹炴椂鎶ヨ鐩戞帶
+   *
+   * @param id 瀹炴椂鎶ヨ鐩戞帶ID
+   * @return 瀹炴椂鎶ヨ鐩戞帶
+   */
+  public RealTimeAlarm selectRealtimeAlarmById(String id);
+
+  /**
+   * 鏌ヨ瀹炴椂鎶ヨ鐩戞帶鍒楄〃
+   *
+   * @param realtimeAlarm 瀹炴椂鎶ヨ鐩戞帶
+   * @return 瀹炴椂鎶ヨ鐩戞帶闆嗗悎
+   */
+  public List<RealTimeAlarm> selectRealtimeAlarmList(RealTimeAlarm realtimeAlarm);
+
+  /**
+   * 鏂板瀹炴椂鎶ヨ鐩戞帶
+   *
+   * @param realtimeAlarm 瀹炴椂鎶ヨ鐩戞帶
+   * @return 缁撴灉
+   */
+  public int insertRealtimeAlarm(RealTimeAlarm realtimeAlarm);
+
+  /**
+   * 淇敼瀹炴椂鎶ヨ鐩戞帶
+   *
+   * @param realtimeAlarm 瀹炴椂鎶ヨ鐩戞帶
+   * @return 缁撴灉
+   */
+  public int updateRealtimeAlarm(RealTimeAlarm realtimeAlarm);
+
+  /**
+   * 鍒犻櫎瀹炴椂鎶ヨ鐩戞帶
+   *
+   * @param id 瀹炴椂鎶ヨ鐩戞帶ID
+   * @return 缁撴灉
+   */
+  public int deleteRealtimeAlarmById(String id);
+
+  /**
+   * 鎵归噺鍒犻櫎瀹炴椂鎶ヨ鐩戞帶
+   *
+   * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+   * @return 缁撴灉
+   */
+  public int deleteRealtimeAlarmByIds(String[] ids);
+
+  /**
+   * 瀹炴椂鎶ヨ鐩戞帶鐢ㄥ垪琛�
+   *
+   * @param jkRealTimeAlarmList 瀹炴椂鎶ヨ鐩戞帶
+   * @return 瀹炴椂鎶ヨ鐩戞帶闆嗗悎
+   */
+  public List<JkRealTimeAlarmList> selectRealtimeAlarmJkList(
+      JkRealTimeAlarmList jkRealTimeAlarmList);
+
+  RealTimeAlarm getRealTimeAlarmByAlarmCode(String alarmCode);
+
+  List<RealTimeAlarm> getRealTimeAlarm();
+
+  RealTimeAlarm getAlarmByItemIdAndTimeCode(String itemId, String timeCode);
+
+  Page<JkRealTimeAlarmList> selectRealtimeAlarmJkPage(@Param("realTimeAlarmList") JkRealTimeAlarmList realTimeAlarmList, @Param("page")Page<?> page);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmAnalyisisService.java b/zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmAnalyisisService.java
new file mode 100644
index 0000000..2c54007
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmAnalyisisService.java
@@ -0,0 +1,16 @@
+package com.zhitan.alarm.services;
+
+import com.zhitan.alarm.domain.dto.AlarmAnalysisDTO;
+import com.zhitan.alarm.domain.vo.AlarmAnalysisVO;
+
+/**
+ * description todu
+ *
+ * @author hmj
+ * @date 2024-10-26 17:33
+ */
+public interface IAlarmAnalyisisService {
+    AlarmAnalysisVO getByNodeId(AlarmAnalysisDTO alarmAnalysisDTO);
+
+    AlarmAnalysisVO getCountInfo(AlarmAnalysisDTO alarmAnalysisDTO);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmItemService.java b/zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmItemService.java
new file mode 100644
index 0000000..a7c64ce
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmItemService.java
@@ -0,0 +1,109 @@
+package com.zhitan.alarm.services;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.alarm.domain.AlarmItem;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 棰勬姤璀﹁缃甋ervice鎺ュ彛
+ *
+ * @author sys
+ * @date 2020-03-02
+ */
+public interface IAlarmItemService {
+
+  /**
+   * 鏌ヨ棰勬姤璀﹁缃�
+   *
+   * @param id 棰勬姤璀﹁缃甀D
+   * @return 棰勬姤璀﹁缃�
+   */
+  AlarmItem selectAlarmItemById(String id);
+
+  /**
+   * 鏌ヨ棰勬姤璀﹁缃垪琛�
+   *
+   * @param alarmItem 棰勬姤璀﹁缃�
+   * @return 棰勬姤璀﹁缃泦鍚�
+   */
+  List<AlarmItem> selectAlarmItemList(AlarmItem alarmItem);
+
+  /**
+   * 鏂板棰勬姤璀﹁缃�
+   *
+   * @param alarmItem 棰勬姤璀﹁缃�
+   * @return 缁撴灉
+   */
+  int insertAlarmItem(AlarmItem alarmItem);
+
+  /**
+   * 淇敼棰勬姤璀﹁缃�
+   *
+   * @param alarmItem 棰勬姤璀﹁缃�
+   * @return 缁撴灉
+   */
+  int updateAlarmItem(AlarmItem alarmItem);
+
+  /**
+   * 淇敼棰勬姤璀﹁缃�
+   *
+   * @param ids,flag 棰勬姤璀﹁缃�
+   * @return 缁撴灉
+   */
+  int updateStartStop(String[] ids, String flag, String username);
+
+  /**
+   * 鎵归噺鍒犻櫎棰勬姤璀﹁缃�
+   *
+   * @param ids 闇�瑕佸垹闄ょ殑棰勬姤璀﹁缃甀D
+   * @return 缁撴灉
+   */
+  int deleteAlarmItemByIds(String[] ids);
+
+  /**
+   * 鍒犻櫎棰勬姤璀﹁缃俊鎭�
+   *
+   * @param id 棰勬姤璀﹁缃甀D
+   * @return 缁撴灉
+   */
+  int deleteAlarmItemById(String id);
+
+  /**
+   * 鏌ヨ棰勬姤璀﹁缃垪琛�
+   *
+   * @param id 棰勬姤璀﹁缃�
+   * @return 棰勬姤璀﹁缃泦鍚�
+   */
+  List<AlarmItem> selectAlarmItemtingById(String id);
+
+  /**
+   * 鏌ヨ棰勬姤璀﹀垪琛ㄨ鍚仠鍊�
+   *
+   * @param indexid 棰勬姤璀﹁缃�
+   * @return 棰勬姤璀﹁缃泦鍚�
+   */
+  String getStartStop(String indexid);
+
+  /**
+   * 淇敼寮瑰嚭妗嗛檺鍊�
+   *
+   * @param data 銆愪慨鏀瑰脊鍑烘闄愬�笺��
+   * @return 缁撴灉
+   */
+  int updateLimitVal(List data, String username);
+
+  /**
+   * 鏌ヨ棰刬d涓嬭缃檺鍊肩殑鏁伴噺
+   *
+   * @param id 棰勬姤璀﹁缃�
+   * @return 鏁�
+   */
+  ArrayList getSettingCount(String[] id);
+
+  List<AlarmItem> getAllAlarmItem();
+
+  Page<AlarmItem> selectAlarmItemPage(AlarmItem alarmItem, Long pageNum, Long pageSize);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmLimitTypeService.java b/zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmLimitTypeService.java
new file mode 100644
index 0000000..1f7e977
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmLimitTypeService.java
@@ -0,0 +1,27 @@
+package com.zhitan.alarm.services;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.alarm.domain.LimitType;
+
+import java.util.List;
+
+/**
+ * @Description
+ * @Author zhoubg
+ * @Date 2024/10/11
+ */
+public interface IAlarmLimitTypeService {
+
+    int insertAlarmLimitType(LimitType alarmLimitType);
+
+    List<LimitType> selectAlarmLimitTypeList(LimitType alarmLimitType);
+
+    int updateAlarmLimitType(LimitType alarmLimitType);
+
+    int deleteLimitTypeByIds(String[] ids);
+
+    LimitType selectAlarmLimitTypeById(String id);
+
+
+    Page<LimitType> selectAlarmLimitTypePage(LimitType alarmLimitType, Long pageNum, Long pageSize);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/services/IHistoryAlarmService.java b/zhitan-system/src/main/java/com/zhitan/alarm/services/IHistoryAlarmService.java
new file mode 100644
index 0000000..b3dcc7c
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/services/IHistoryAlarmService.java
@@ -0,0 +1,36 @@
+package com.zhitan.alarm.services;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.alarm.domain.HistoryAlarm;
+import com.zhitan.alarm.domain.JkHistoryAlarm;
+import com.zhitan.common.enums.TimeType;
+
+import java.util.Date;
+import java.util.List;
+
+public interface IHistoryAlarmService {
+
+  List<HistoryAlarm> getHistoryAlarm(Date beginTime, Date endTime);
+
+  List<HistoryAlarm> getHistoryAlarm(Date beginTime, Date endTime, TimeType timeType);
+
+  List<HistoryAlarm> getHistoryAlarm(Date beginTime, Date endTime, String alarmType);
+  /**
+   * @param jkHistoryAlarm 鏍规嵁鍘嗗彶鎶ヨ瀵硅薄鍙栧��
+   * @return
+   */
+  List<JkHistoryAlarm> selectJkHistoryAlarmList(JkHistoryAlarm jkHistoryAlarm);
+  List<JkHistoryAlarm> selectJkHistoryAlarmListExcel(JkHistoryAlarm jkHistoryAlarm);
+
+  /**
+   * 瀹炴椂妫�娴� 鍔熻兘 鐨勫 sheet椤�  灞曠ず 缁勬�佸浘  娴嬬偣 鎶ヨ淇℃伅
+   * @param jkHistoryAlarm
+   * @return
+   */
+  List<JkHistoryAlarm> selectHistoryAlarmNoteList(JkHistoryAlarm jkHistoryAlarm);
+
+  void updateHistoryAlarm(String alarmCode, HistoryAlarm historyAlarm);
+
+  Page<JkHistoryAlarm> selectJkHistoryAlarmPage(JkHistoryAlarm jkHistoryAlarm, Long pageNum, Long pageSize);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/services/IRealtimeAlarmService.java b/zhitan-system/src/main/java/com/zhitan/alarm/services/IRealtimeAlarmService.java
new file mode 100644
index 0000000..c5982db
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/services/IRealtimeAlarmService.java
@@ -0,0 +1,45 @@
+package com.zhitan.alarm.services;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.alarm.domain.JkRealTimeAlarmList;
+import com.zhitan.alarm.domain.RealTimeAlarm;
+import com.zhitan.common.enums.TimeType;
+
+import java.util.List;
+
+public interface IRealtimeAlarmService {
+  /**
+   * 鑾峰彇褰撳墠鎵�鏈夊疄鏃舵姤璀﹁褰�
+   *
+   * @return 瀹炴椂鎶ヨ
+   */
+  List<RealTimeAlarm> getRealTimeAlarm();
+
+  /**
+   * @param timeType 鎶ヨ浜嬩欢绫诲瀷
+   * @return
+   */
+  List<RealTimeAlarm> getRealTimeAlarm(TimeType timeType);
+
+  /**
+   * @param alarmLevel 鎶ヨ绾у埆涓婇檺銆佷笂涓婇檺銆佷笅闄愪笅涓嬮檺
+   * @return
+   */
+  List<RealTimeAlarm> getRealTimeAlarm(String alarmLevel);
+
+  /**
+   * @param jkRealTimeAlarmList 瀹炴椂鎶ヨ鐩戞帶鐢ㄥ垪琛�
+   * @return
+   */
+  List<JkRealTimeAlarmList> selectRealtimeAlarmJkList(JkRealTimeAlarmList jkRealTimeAlarmList);
+
+
+  void insert(RealTimeAlarm realTimeAlarm);
+
+  RealTimeAlarm getRealTimeAlarmByAlarmCode(String alarmCode);
+
+  RealTimeAlarm getAlarmByItemIdAndTimeCode(String itemId, String timeCode);
+
+  Page<JkRealTimeAlarmList> selectRealtimeAlarmJkPage(JkRealTimeAlarmList jkRealTimeAlarmList, Long pageNum, Long pageSize);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java
new file mode 100644
index 0000000..bd02bb4
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java
@@ -0,0 +1,207 @@
+package com.zhitan.alarm.services.impl;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import com.zhitan.alarm.domain.JkHistoryAlarm;
+import com.zhitan.alarm.domain.dto.AlarmAnalysisDTO;
+import com.zhitan.alarm.domain.vo.AlarmAnalysisVO;
+import com.zhitan.alarm.mapper.HistoryAlarmMapper;
+import com.zhitan.alarm.services.IAlarmAnalyisisService;
+import com.zhitan.basicdata.domain.MeterImplement;
+import com.zhitan.basicdata.domain.SysEnergy;
+import com.zhitan.basicdata.mapper.MeterImplementMapper;
+import com.zhitan.basicdata.mapper.SysEnergyMapper;
+import com.zhitan.common.enums.IndexType;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.consumptionanalysis.domain.vo.ChartData;
+import com.zhitan.consumptionanalysis.domain.vo.EnergyProportion;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.domain.vo.ModelNodeIndexInfor;
+import com.zhitan.model.mapper.EnergyIndexMapper;
+import com.zhitan.model.mapper.ModelNodeMapper;
+import lombok.AllArgsConstructor;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.stereotype.Service;
+
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * description todu
+ *
+ * @author hmj
+ * @date 2024-10-26 17:34
+ */
+@Service
+@AllArgsConstructor
+public class AlarmAnalyisisServiceImpl implements IAlarmAnalyisisService {
+
+    private final ModelNodeMapper modelNodeMapper;
+    
+    private final HistoryAlarmMapper historyAlarmMapper;
+
+    private final MeterImplementMapper meterImplementMapper;
+    
+    private final EnergyIndexMapper energyIndexMapper;
+    
+    private final SysEnergyMapper sysEnergyMapper;
+    @Override
+    public AlarmAnalysisVO getByNodeId(AlarmAnalysisDTO alarmAnalysisDTO) {
+        AlarmAnalysisVO alarmAnalysisVO = new AlarmAnalysisVO();
+        List<EnergyProportion> alarmProportionList = new ArrayList<>();
+        for(IndexType indexType : IndexType.values()){
+            EnergyProportion proportion = new EnergyProportion();
+            proportion.setEnergyName(indexType.name());
+            proportion.setCount(0D);
+            proportion.setPercentage(0D);
+            alarmProportionList.add(proportion);
+        }
+                
+                
+        List<EnergyProportion> energyProportionList = new ArrayList<>();
+        final List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(new SysEnergy());
+        sysEnergies.forEach(sysEnergy -> {
+            EnergyProportion proportion = new EnergyProportion();
+            proportion.setEnergyName(sysEnergy.getEnersno());
+            proportion.setCount(0D);
+            proportion.setPercentage(0D);
+            energyProportionList.add(proportion);
+        });
+
+        List<ChartData> chartDataList = new ArrayList<>();
+        final String nodeId = alarmAnalysisDTO.getNodeId();
+        final Date queryTime = alarmAnalysisDTO.getDataTime();
+       
+        Date beginTime;
+        Date endTime;
+        String timeFormat;
+        String queryTimeType = alarmAnalysisDTO.getTimeType();
+        if (TimeType.DAY.name().equals(queryTimeType)) {
+            beginTime = DateUtil.beginOfDay(queryTime);
+            endTime = DateUtil.endOfDay(queryTime);
+            timeFormat = "yyyy-MM-dd HH";
+            // 鏈�
+        } else if (TimeType.MONTH.name().equals(queryTimeType)) {
+            beginTime = DateUtil.beginOfMonth(queryTime);
+            endTime = DateUtil.endOfMonth(queryTime);
+            timeFormat = "yyyy-MM-dd";
+            // 骞�
+        } else {
+            beginTime = DateUtil.beginOfYear(queryTime);
+            endTime = DateUtil.endOfYear(queryTime);
+            timeFormat = "yyyy-MM";
+        }
+        JkHistoryAlarm query = new JkHistoryAlarm();
+        query.setEierarchyFlag("ALL");
+        query.setBeginTime(DateUtil.format(beginTime,"yyyy-MM-dd HH:mm:ss"));
+        query.setEndTime(DateUtil.format(endTime,"yyyy-MM-dd HH:mm:ss"));
+        query.setNodeId(nodeId);
+        final List<JkHistoryAlarm> jkHistoryAlarms = historyAlarmMapper.selectJkHistoryAlarmList(query);
+        if(CollectionUtils.isNotEmpty(jkHistoryAlarms)) {
+            jkHistoryAlarms.forEach(alarm -> {
+                final String indexType = alarm.getIndexType();
+                final String indexId = alarm.getIndexId();
+                final String alarmNodeId = alarm.getNodeId();
+                if ("COLLECT".equals(indexType) && StringUtils.isEmpty(alarm.getEnergyId())) {
+                    //鏍规嵁nodeId鍜宨ndexId 鍘绘煡璇㈣閲忓櫒鍏�
+                    EnergyIndex energyIndex = energyIndexMapper.selectEnergyIndexById(indexId);
+                    final MeterImplement meterImplement = meterImplementMapper.selectMeterImplementById(energyIndex.getMeterId());
+                    alarm.setEnergyId(meterImplement.getEnergyType());
+                }
+            });
+            final Map<String, List<JkHistoryAlarm>> alarmTypeMap = jkHistoryAlarms.stream().collect(Collectors.groupingBy(JkHistoryAlarm::getIndexType));
+            alarmTypeMap.forEach((key, value) -> {
+                alarmProportionList.forEach(alarm->{
+                    if(alarm.getEnergyName().equals(key)){
+                        alarm.setEnergyName(key);
+                        alarm.setCount(format2Double(value.size()));
+                        double percentage = value.size() / jkHistoryAlarms.size() * 100;
+                        alarm.setPercentage(format2Double(percentage));
+                    }
+                });
+            });
+            final Map<String, List<JkHistoryAlarm>> energyTypeMap = jkHistoryAlarms.stream().collect(Collectors.groupingBy(JkHistoryAlarm::getEnergyId));
+            energyTypeMap.forEach((key, value) -> {
+                energyProportionList.forEach(en->{
+                    if(en.getEnergyName().equals(key)){
+                        en.setEnergyName(key);
+                        en.setCount(format2Double(value.size()));
+                        double percentage = value.size() / jkHistoryAlarms.size() * 100;
+                        en.setPercentage(format2Double(percentage));
+                    }
+                });
+                
+            });
+
+
+            jkHistoryAlarms.forEach(jkHistoryAlarm -> {
+                final String alarmBeginTime = DateUtil.format(jkHistoryAlarm.getAlarmBeginTime(), timeFormat);
+                jkHistoryAlarm.setAlarmTime(alarmBeginTime);
+            });
+            final Map<String, List<JkHistoryAlarm>> timeMap = jkHistoryAlarms.stream().collect(Collectors.groupingBy(JkHistoryAlarm::getAlarmTime));
+            while (!beginTime.after(endTime)) {
+                final String currentTime = DateUtil.format(beginTime, timeFormat);
+                final List<JkHistoryAlarm> value = timeMap.get(currentTime);
+                ChartData chartData = new ChartData();
+                chartData.setXData(currentTime);
+                chartData.setYValue(null == value?0:(double)value.size());
+                chartDataList.add(chartData);
+
+                switch (TimeType.valueOf(queryTimeType)) {
+                    case DAY:
+                        beginTime = DateUtil.offsetHour(beginTime, 1);
+                        break;
+                    case MONTH:
+                        beginTime = DateUtil.offsetDay(beginTime, 1);
+                        break;
+                    default:
+                        beginTime = DateUtil.offsetMonth(beginTime, 1);
+                        break;
+                }
+            }
+        }
+        alarmAnalysisVO.setAlarmProportion(alarmProportionList);
+        alarmAnalysisVO.setEnergyProportion(energyProportionList);
+        alarmAnalysisVO.setChartDataList(chartDataList);
+        return alarmAnalysisVO;
+    }
+
+
+    @Override
+    public AlarmAnalysisVO getCountInfo(AlarmAnalysisDTO alarmAnalysisDTO) {
+        AlarmAnalysisVO alarmAnalysisVO = new AlarmAnalysisVO();
+        final String nodeId = alarmAnalysisDTO.getNodeId();
+        final DateTime beginOfMonth = DateUtil.beginOfMonth(new Date());
+        final DateTime endOfMonth = DateUtil.endOfMonth(new Date());
+        final DateTime beginOfYear = DateUtil.beginOfYear(new Date());
+        final DateTime endOfYear = DateUtil.endOfYear(new Date());
+
+        /**
+         * 鏌ヨ鐐逛綅涓庣敤鑳藉崟鍏冧俊鎭�
+         */
+        List<ModelNodeIndexInfor> nodeIndexInforList = modelNodeMapper.getModelNodeIndexIdByNodeId(nodeId,null);
+        List<String> indexIds = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
+
+        Integer monthCount = historyAlarmMapper.selectCountByTime(beginOfMonth,endOfMonth);
+        Integer yearCount = historyAlarmMapper.selectCountByTime(beginOfYear,endOfYear);
+        
+        alarmAnalysisVO.setIndexCount(indexIds.size());
+        alarmAnalysisVO.setMonthCount(monthCount);
+        alarmAnalysisVO.setYearCount(yearCount);
+        return alarmAnalysisVO;
+    }
+
+    private double format2Double(double averageEnergy) {
+        // 鍒涘缓DecimalFormat瀵硅薄锛岃缃繚鐣欎袱浣嶅皬鏁�
+        DecimalFormat df = new DecimalFormat("#.00");
+
+        // 鏍煎紡鍖栫粨鏋�
+        String formattedResult = df.format(averageEnergy);
+        return Double.valueOf(formattedResult);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmItemServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmItemServiceImpl.java
new file mode 100644
index 0000000..8728104
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmItemServiceImpl.java
@@ -0,0 +1,204 @@
+package com.zhitan.alarm.services.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.alarm.domain.AlarmItem;
+import com.zhitan.alarm.mapper.AlarmItemMapper;
+import com.zhitan.alarm.services.IAlarmItemService;
+import com.zhitan.common.utils.DateUtils;
+import com.zhitan.common.utils.uuid.IdUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 棰勬姤璀﹁缃甋ervice涓氬姟灞傚鐞�
+ *
+ * @author sys
+ * @date 2020-03-02
+ */
+@Service
+public class AlarmItemServiceImpl implements IAlarmItemService {
+    @Autowired
+    private AlarmItemMapper alarmItemMapper;
+
+    /**
+     * 鏌ヨ棰勬姤璀﹁缃�
+     *
+     * @param id 棰勬姤璀﹁缃甀D
+     * @return 棰勬姤璀﹁缃�
+     */
+    @Override
+    public AlarmItem selectAlarmItemById(String id) {
+        return alarmItemMapper.selectAlarmItemById(id);
+    }
+
+    /**
+     * 鏌ヨ棰勬姤璀﹁缃垪琛�
+     *
+     * @param alarmItem 棰勬姤璀﹁缃�
+     * @return 棰勬姤璀﹁缃�
+     */
+    @Override
+    public List<AlarmItem> selectAlarmItemList(AlarmItem alarmItem) {
+        return alarmItemMapper.selectAlarmItemList(alarmItem);
+    }
+
+    /**
+     * 鏂板棰勬姤璀﹁缃�
+     *
+     * @param alarmItem 棰勬姤璀﹁缃�
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertAlarmItem(AlarmItem alarmItem) {
+        alarmItem.setCreateTime(DateUtils.getNowDate());
+        return alarmItemMapper.insertAlarmItem(alarmItem);
+    }
+
+    /**
+     * 淇敼棰勬姤璀﹁缃�
+     *
+     * @param alarmItem 棰勬姤璀﹁缃�
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateAlarmItem(AlarmItem alarmItem) {
+        alarmItem.setUpdateTime(DateUtils.getNowDate());
+        return alarmItemMapper.updateAlarmItem(alarmItem);
+    }
+
+    /**
+     * 淇敼棰勬姤璀﹁缃�
+     *
+     * @param ids,flag 棰勬姤璀﹁缃�
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateStartStop(String[] ids, String flag, String username) {
+
+        return alarmItemMapper.updateStartStop(ids, flag, username);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎棰勬姤璀﹁缃�
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑棰勬姤璀﹁缃甀D
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteAlarmItemByIds(String[] ids) {
+        return alarmItemMapper.deleteAlarmItemByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎棰勬姤璀﹁缃俊鎭�
+     *
+     * @param id 棰勬姤璀﹁缃甀D
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteAlarmItemById(String id) {
+        return alarmItemMapper.deleteAlarmItemById(id);
+    }
+
+    /**
+     * 鏌ヨ棰勬姤璀﹁缃�
+     *
+     * @param id 棰勬姤璀﹁缃甀D
+     * @return 棰勬姤璀﹁缃�
+     */
+    @Override
+    public List<AlarmItem> selectAlarmItemtingById(String id) {
+        return alarmItemMapper.selectAlarmItemtingById(id);
+    }
+
+    /**
+     * 鏌ヨ棰勬姤璀﹁缃�
+     *
+     * @return 棰勬姤璀﹁缃�
+     */
+    @Override
+    public String getStartStop(String indexid) {
+        return alarmItemMapper.getStartStop(indexid);
+    }
+
+    /**
+     * 淇敼寮瑰嚭妗嗛檺鍊�
+     *
+     * @param data 銆愪慨鏀瑰脊鍑烘闄愬�笺��
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateLimitVal(List data, String username) {
+        String id = "";
+        int num = 0;
+        int dataNum = data.size();
+        Map<String, Object> map = (Map<String, Object>) data.get(0);
+        id = map.get("indexId").toString();
+        for (int i = 0; i < data.size(); i++) {
+            Map<String, Object> map1 = (Map<String, Object>) data.get(i);
+            String val = map1.get("limitVal").toString().trim();
+            if ("".equals(val) || null == val) {
+                data.remove(i);
+                i--;
+                num++;
+            }
+            map1.put("id", IdUtils.fastUUID());
+            map1.put("alarmCode", map1.get("indexId").toString() + ":" + map1.get("timeSlotVal").toString() + ":" + map1.get("limitTypeVal").toString());
+        }
+        //鏌ヨ鏉℃暟
+        int count = alarmItemMapper.selectCountById(id);
+        if (num == dataNum) {//瀵规瘮鍏ㄧ┖鏁版嵁闇�瑕佹妸鏁版嵁搴撻噷id涓�鑷寸殑鍏ㄥ垹闄�
+            if (count > 0) {
+                return alarmItemMapper.deleteAllLimitVal(id);
+            } else {
+                return 1;
+            }
+        } else {
+            if (count > 0) {
+                alarmItemMapper.deleteAllLimitVal(id);
+                return alarmItemMapper.updateLimitValNoDel(data, id, username);
+            } else {
+                return alarmItemMapper.updateLimitValNoDel(data, id, username);
+            }
+        }
+    }
+
+    /**
+     * 鏌ヨ棰勬姤璀﹁缃�
+     *
+     * @param id 棰勬姤璀﹁缃甀D
+     * @return 棰勬姤璀﹁缃�
+     */
+    @Override
+    public ArrayList getSettingCount(String[] id) {
+        ArrayList list = new ArrayList();
+        for (int i = 0; i < id.length; i++) {
+            int count = alarmItemMapper.getSettingCount(id[i]);
+            if (count > 0) {
+                list.add(count);
+            } else {
+                list.add(0);
+            }
+        }
+
+        return list;
+    }
+
+    @Override
+    public List<AlarmItem> getAllAlarmItem() {
+        return alarmItemMapper.getAllAlarmItem();
+    }
+
+    @Override
+    public Page<AlarmItem> selectAlarmItemPage(AlarmItem alarmItem, Long pageNum, Long pageSize) {
+        LambdaQueryWrapper<AlarmItem> queryWrapper =new LambdaQueryWrapper<>();
+        queryWrapper.orderByDesc(AlarmItem::getCreateTime);
+        return alarmItemMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmLimitTypeServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmLimitTypeServiceImpl.java
new file mode 100644
index 0000000..246f166
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmLimitTypeServiceImpl.java
@@ -0,0 +1,78 @@
+package com.zhitan.alarm.services.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.alarm.domain.LimitType;
+import com.zhitan.alarm.mapper.AlarmLimitTypeMapper;
+import com.zhitan.alarm.services.IAlarmLimitTypeService;
+import com.zhitan.common.utils.DateUtils;
+import com.zhitan.common.utils.StringUtils;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * @Description
+ * @Author zhoubg
+ * @Date 2024/10/11
+ */
+@Service
+public class AlarmLimitTypeServiceImpl implements IAlarmLimitTypeService {
+
+    @Autowired
+    private AlarmLimitTypeMapper alarmLimitTypeMapper;
+
+    @Override
+    public int insertAlarmLimitType(LimitType alarmLimitType) {
+        alarmLimitType.setId(UUID.randomUUID().toString());
+        alarmLimitType.setCreateTime(DateUtils.getNowDate());
+        LambdaQueryWrapper<LimitType> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(LimitType::getLimitCode,alarmLimitType.getLimitCode());
+        final Long aLong = alarmLimitTypeMapper.selectCount(queryWrapper);
+        if(aLong>0){
+            throw new RuntimeException("闄愬埗鍊肩被鍨嬬紪鍙蜂笉鑳介噸澶�");
+        }
+        return alarmLimitTypeMapper.insertLimitType(alarmLimitType);
+    }
+
+    @Override
+    public List<LimitType> selectAlarmLimitTypeList(LimitType alarmLimitType) {
+        return alarmLimitTypeMapper.selectLimitTypeList(alarmLimitType);
+    }
+
+    @Override
+    public int updateAlarmLimitType(LimitType alarmLimitType) {
+        alarmLimitType.setUpdateTime(DateUtils.getNowDate());
+        LambdaQueryWrapper<LimitType> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(LimitType::getLimitCode,alarmLimitType.getLimitCode());
+        final List<LimitType> alarmLimitTypes = alarmLimitTypeMapper.selectList(queryWrapper);
+        if(CollectionUtils.isNotEmpty(alarmLimitTypes)){
+            final String id = alarmLimitTypes.get(0).getId();
+            if(!id.equals(alarmLimitType.getId())) {
+                throw new RuntimeException("闄愬埗鍊肩被鍨嬬紪鍙蜂笉鑳介噸澶�");
+            }
+        }
+        return alarmLimitTypeMapper.updateLimitType(alarmLimitType);
+    }
+
+    @Override
+    public int deleteLimitTypeByIds(String[] ids) {
+        return alarmLimitTypeMapper.deleteLimitTypeByIds(ids);
+    }
+
+    @Override
+    public LimitType selectAlarmLimitTypeById(String id) {
+        return alarmLimitTypeMapper.selectLimitTypeById(id);
+    }
+
+    @Override
+    public Page<LimitType> selectAlarmLimitTypePage(LimitType alarmLimitType, Long pageNum, Long pageSize) {
+        LambdaQueryWrapper<LimitType> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.like(StringUtils.isNotEmpty(alarmLimitType.getLimitName()),LimitType::getLimitName,alarmLimitType.getLimitName());
+        queryWrapper.orderByDesc(LimitType::getCreateTime);
+        return alarmLimitTypeMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/HistoryAlarmServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/HistoryAlarmServiceImpl.java
new file mode 100644
index 0000000..9b16045
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/HistoryAlarmServiceImpl.java
@@ -0,0 +1,90 @@
+package com.zhitan.alarm.services.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.alarm.domain.HistoryAlarm;
+import com.zhitan.alarm.domain.JkHistoryAlarm;
+import com.zhitan.alarm.mapper.HistoryAlarmMapper;
+import com.zhitan.alarm.services.IHistoryAlarmService;
+import com.zhitan.basicdata.domain.MeterImplement;
+import com.zhitan.basicdata.mapper.MeterImplementMapper;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.mapper.EnergyIndexMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class HistoryAlarmServiceImpl implements IHistoryAlarmService {
+
+  @Autowired
+  private HistoryAlarmMapper historyAlarmMapper;
+
+  @Autowired
+  private MeterImplementMapper meterImplementMapper;
+
+  @Autowired
+  private EnergyIndexMapper energyIndexMapper;
+
+
+  @Override
+  public List<HistoryAlarm> getHistoryAlarm(Date beginTime, Date endTime) {
+    return null;
+  }
+
+  @Override
+  public List<HistoryAlarm> getHistoryAlarm(Date beginTime, Date endTime, TimeType timeType) {
+    return null;
+  }
+
+  @Override
+  public List<HistoryAlarm> getHistoryAlarm(Date beginTime, Date endTime, String alarmType) {
+    return null;
+  }
+
+  @Override
+  public List<JkHistoryAlarm> selectJkHistoryAlarmList(JkHistoryAlarm jkHistoryAlarm) {
+    return historyAlarmMapper.selectJkHistoryAlarmList(jkHistoryAlarm);
+  }
+
+  @Override
+  public List<JkHistoryAlarm> selectJkHistoryAlarmListExcel(JkHistoryAlarm jkHistoryAlarm) {
+    return historyAlarmMapper.selectJkHistoryAlarmListExcel(jkHistoryAlarm);
+  }
+
+  /**
+   * 瀹炴椂妫�娴� 鍔熻兘 鐨勫 sheet椤�  灞曠ず 缁勬�佸浘  娴嬬偣 鎶ヨ淇℃伅
+   *
+   * @param jkHistoryAlarm
+   * @return
+   */
+  @Override
+  public List<JkHistoryAlarm> selectHistoryAlarmNoteList(JkHistoryAlarm jkHistoryAlarm) {
+    return historyAlarmMapper.selectHistoryAlarmNoteList(jkHistoryAlarm);
+  }
+
+  @Override
+  public void updateHistoryAlarm(String alarmCode, HistoryAlarm historyAlarm) {
+    historyAlarmMapper.updateHistoryAlarm(alarmCode, historyAlarm);
+  }
+
+  @Override
+  public Page<JkHistoryAlarm> selectJkHistoryAlarmPage(JkHistoryAlarm jkHistoryAlarm, Long pageNum, Long pageSize) {
+    final Page<JkHistoryAlarm> jkHistoryAlarmPage = historyAlarmMapper.selectJkHistoryAlarmPage(jkHistoryAlarm, new Page<>(pageNum, pageSize));
+    jkHistoryAlarmPage.getRecords().forEach(alarm->{
+      final String indexType = alarm.getIndexType();
+      final String indexId = alarm.getIndexId();
+      if("COLLECT".equals(indexType) && StringUtils.isEmpty(alarm.getEnergyId())){
+        //鏍规嵁nodeId鍜宨ndexId 鍘绘煡璇㈣閲忓櫒鍏�
+        EnergyIndex energyIndex = energyIndexMapper.selectEnergyIndexById(indexId);
+        final MeterImplement meterImplement = meterImplementMapper.selectMeterImplementById(energyIndex.getMeterId());
+        alarm.setEnergyId(meterImplement.getEnergyType());
+      }
+    });
+    return jkHistoryAlarmPage;
+  }
+  
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/RealtimeAlarmServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/RealtimeAlarmServiceImpl.java
new file mode 100644
index 0000000..ca992f5
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/RealtimeAlarmServiceImpl.java
@@ -0,0 +1,64 @@
+package com.zhitan.alarm.services.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.alarm.domain.JkRealTimeAlarmList;
+import com.zhitan.alarm.domain.RealTimeAlarm;
+import com.zhitan.alarm.mapper.RealtimeAlarmMapper;
+import com.zhitan.alarm.services.IRealtimeAlarmService;
+import com.zhitan.common.enums.TimeType;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class RealtimeAlarmServiceImpl implements IRealtimeAlarmService {
+
+  @Autowired
+  private RealtimeAlarmMapper realtimeAlarmMapper;
+
+  @Override
+  public List<RealTimeAlarm> getRealTimeAlarm() {
+    return realtimeAlarmMapper.getRealTimeAlarm();
+  }
+
+  @Override
+  public List<RealTimeAlarm> getRealTimeAlarm(TimeType timeType) {
+    return null;
+  }
+
+  @Override
+  public List<RealTimeAlarm> getRealTimeAlarm(String alarmLevel) {
+    return null;
+  }
+
+  /**
+   * @param jkRealTimeAlarmList 瀹炴椂鎶ヨ鐩戞帶鐢ㄥ垪琛�
+   * @return
+   */
+  @Override
+  public List<JkRealTimeAlarmList> selectRealtimeAlarmJkList(
+      JkRealTimeAlarmList jkRealTimeAlarmList) {
+      return realtimeAlarmMapper.selectRealtimeAlarmJkList(jkRealTimeAlarmList);
+  }
+
+  @Override
+  public void insert(RealTimeAlarm realTimeAlarm) {
+    realtimeAlarmMapper.insertRealtimeAlarm(realTimeAlarm);
+  }
+
+  @Override
+  public RealTimeAlarm getRealTimeAlarmByAlarmCode(String alarmCode) {
+    return realtimeAlarmMapper.getRealTimeAlarmByAlarmCode(alarmCode);
+  }
+
+  @Override
+  public RealTimeAlarm getAlarmByItemIdAndTimeCode(String itemId, String timeCode) {
+    return realtimeAlarmMapper.getAlarmByItemIdAndTimeCode(itemId, timeCode);
+  }
+
+  @Override
+  public Page<JkRealTimeAlarmList> selectRealtimeAlarmJkPage(JkRealTimeAlarmList jkRealTimeAlarmList, Long pageNum, Long pageSize) {
+    return realtimeAlarmMapper.selectRealtimeAlarmJkPage(jkRealTimeAlarmList,new Page<>(pageNum,pageSize));
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/domain/FacilityAnnex.java b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/FacilityAnnex.java
new file mode 100644
index 0000000..d4ba2c7
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/FacilityAnnex.java
@@ -0,0 +1,107 @@
+package com.zhitan.basicdata.domain;
+
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 璁惧妗f闄勪欢瀵硅薄 facility_annex
+ * 
+ * @author sys
+ * @date 2020-02-24
+ */
+public class FacilityAnnex extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 涓婚敭id */
+    private String id;
+
+    /** 璁惧妗fid */
+    private String facilityId;
+
+    /** 鏂囦欢鍚� */
+    @Excel(name = "鏂囦欢鍚�")
+    private String fileName;
+
+    /** 鏂囦欢鍚庣紑 */
+    private String filesuffix;
+
+    /** 鏂囦欢璺緞 */
+    private String filePath;
+
+    /** 鍒犻櫎鏍囧織 */
+    private String delFlage;
+
+    public void setId(String id) 
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+    public void setFacilityId(String facilityId) 
+    {
+        this.facilityId = facilityId;
+    }
+
+    public String getFacilityId() 
+    {
+        return facilityId;
+    }
+    public void setFileName(String fileName) 
+    {
+        this.fileName = fileName;
+    }
+
+    public String getFileName() 
+    {
+        return fileName;
+    }
+    public void setFilesuffix(String filesuffix) 
+    {
+        this.filesuffix = filesuffix;
+    }
+
+    public String getFilesuffix() 
+    {
+        return filesuffix;
+    }
+    public void setFilePath(String filePath) 
+    {
+        this.filePath = filePath;
+    }
+
+    public String getFilePath() 
+    {
+        return filePath;
+    }
+    public void setDelFlage(String delFlage) 
+    {
+        this.delFlage = delFlage;
+    }
+
+    public String getDelFlage() 
+    {
+        return delFlage;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("createTime", getCreateTime())
+            .append("createBy", getCreateBy())
+            .append("updateTime", getUpdateTime())
+            .append("updateBy", getUpdateBy())
+            .append("id", getId())
+            .append("facilityId", getFacilityId())
+            .append("fileName", getFileName())
+            .append("filesuffix", getFilesuffix())
+            .append("filePath", getFilePath())
+            .append("delFlage", getDelFlage())
+            .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/domain/FacilityArchives.java b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/FacilityArchives.java
new file mode 100644
index 0000000..573f514
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/FacilityArchives.java
@@ -0,0 +1,300 @@
+package com.zhitan.basicdata.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * 璁惧妗f瀵硅薄 facility_archives
+ *
+ * @author zhaowei
+ * @date 2020-02-24
+ */
+@ApiModel(value = "璁惧妗f")
+public class FacilityArchives extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 涓婚敭id */
+    @ApiModelProperty(value = "涓婚敭id")
+    private String id;
+
+    /** 缂栫爜 */
+    @Excel(name = "缂栫爜")
+    @ApiModelProperty(value = "缂栫爜")
+    private String code;
+
+    /** 璁惧鍚嶇О */
+    @Excel(name = "璁惧鍚嶇О")
+    @ApiModelProperty(value = "璁惧鍚嶇О")
+    private String facilityName;
+
+    /** 璁惧绫诲瀷 */
+    @Excel(name = "璁惧绫诲瀷")
+    @ApiModelProperty(value = "璁惧绫诲瀷")
+    private String facilityType;
+
+    /** 浣跨敤鍒嗗巶 */
+    @Excel(name = "浣跨敤鍒嗗巶")
+    @ApiModelProperty(value = "浣跨敤鍒嗗巶")
+    private String branchFactory;
+
+    /** 鐗╃悊浣嶇疆 */
+    @Excel(name = "鐗╃悊浣嶇疆")
+    @ApiModelProperty(value = "鐗╃悊浣嶇疆")
+    private String istallationLocationn;
+
+    /** 鑳借�楃瓑绾� */
+    @Excel(name = "鑳借�楃瓑绾�")
+    @ApiModelProperty(value = "鑳借�楃瓑绾�")
+    private String facilityGrade;
+
+    /** 棰濆畾鍔熺巼 */
+    @Excel(name = "棰濆畾鍔熺巼")
+    @ApiModelProperty(value = "棰濆畾鍔熺巼")
+    private String ratedPower;
+
+    /** 鐢熶骇鏃ユ湡 */
+    @Excel(name = "鐢熶骇鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
+    @ApiModelProperty(value = "鐢熶骇鏃ユ湡")
+    private Date productionDate;
+
+    /** 鎶曡繍鏃ユ湡 */
+    @Excel(name = "鎶曡繍鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
+    @ApiModelProperty(value = "鎶曡繍鏃ユ湡")
+    @JsonFormat(pattern="yyyy-MM-dd")
+    private Date putrunDate;
+
+    /** 鐢熶骇鍘傚 */
+    @Excel(name = "鐢熶骇鍘傚")
+    @ApiModelProperty(value = "鐢熶骇鍘傚")
+    private String manufacturer;
+
+    /** 璐熻矗浜� */
+    @Excel(name = "璐熻矗浜�")
+    @ApiModelProperty(value = "璐熻矗浜�")
+    private String personCharge;
+
+    /** 鎶�鏈弬鏁� */
+    @Excel(name = "鎶�鏈弬鏁�")
+    @ApiModelProperty(value = "鎶�鏈弬鏁�")
+    private String technicalData;
+
+    /** 璧峰鏃堕棿 */
+    @Excel(name = "璧峰鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+    @ApiModelProperty(value = "璧峰鏃堕棿")
+    private Date startTime;
+
+    /** 妫�瀹氬懆鏈� */
+    @Excel(name = "妫�瀹氬懆鏈�")
+    @ApiModelProperty(value = "妫�瀹氬懆鏈�")
+    private Integer checkCycle;
+
+    /** 鎻愰啋鍛ㄦ湡 */
+    @Excel(name = "鎻愰啋鍛ㄦ湡")
+    @ApiModelProperty(value = "鎻愰啋鍛ㄦ湡")
+    private Integer reminderCycle;
+    /** 鏄惁閲嶇偣璁惧 */
+    @Excel(name = "鏄惁閲嶇偣璁惧")
+    @ApiModelProperty(value = "鏄惁閲嶇偣璁惧")
+    private String pointFlag;
+
+    private boolean txflage;
+
+    public void setTxflage(boolean txflage)
+    {
+        this.txflage = txflage;
+    }
+    public boolean getTxflage()
+    {
+        return this.txflage;
+    }
+
+    public void setId(String id)
+    {
+        this.id = id;
+    }
+
+    public String getId()
+    {
+        return id;
+    }
+    public void setCode(String code)
+    {
+        this.code = code;
+    }
+
+    public String getCode()
+    {
+        return code;
+    }
+    public void setFacilityName(String facilityName)
+    {
+        this.facilityName = facilityName;
+    }
+
+    public String getFacilityName()
+    {
+        return facilityName;
+    }
+    public void setFacilityType(String facilityType)
+    {
+        this.facilityType = facilityType;
+    }
+
+    public String getFacilityType()
+    {
+        return facilityType;
+    }
+    public void setBranchFactory(String branchFactory)
+    {
+        this.branchFactory = branchFactory;
+    }
+
+    public String getBranchFactory()
+    {
+        return branchFactory;
+    }
+    public void setIstallationLocationn(String istallationLocationn)
+    {
+        this.istallationLocationn = istallationLocationn;
+    }
+
+    public String getIstallationLocationn()
+    {
+        return istallationLocationn;
+    }
+    public void setFacilityGrade(String facilityGrade)
+    {
+        this.facilityGrade = facilityGrade;
+    }
+
+    public String getFacilityGrade()
+    {
+        return facilityGrade;
+    }
+    public void setRatedPower(String ratedPower)
+    {
+        this.ratedPower = ratedPower;
+    }
+
+    public String getRatedPower()
+    {
+        return ratedPower;
+    }
+    public void setProductionDate(Date productionDate)
+    {
+        this.productionDate = productionDate;
+    }
+
+    public Date getProductionDate()
+    {
+        return productionDate;
+    }
+    public void setPutrunDate(Date putrunDate)
+    {
+        this.putrunDate = putrunDate;
+    }
+
+    public Date getPutrunDate()
+    {
+        return putrunDate;
+    }
+    public void setManufacturer(String manufacturer)
+    {
+        this.manufacturer = manufacturer;
+    }
+
+    public String getManufacturer()
+    {
+        return manufacturer;
+    }
+    public void setPersonCharge(String personCharge)
+    {
+        this.personCharge = personCharge;
+    }
+
+    public String getPersonCharge()
+    {
+        return personCharge;
+    }
+    public void setTechnicalData(String technicalData)
+    {
+        this.technicalData = technicalData;
+    }
+
+    public String getTechnicalData()
+    {
+        return technicalData;
+    }
+    public void setStartTime(Date startTime)
+    {
+        this.startTime = startTime;
+    }
+
+    public Date getStartTime()
+    {
+        return startTime;
+    }
+    public void setCheckCycle(Integer checkCycle)
+    {
+        this.checkCycle = checkCycle;
+    }
+
+    public Integer getCheckCycle()
+    {
+        return checkCycle;
+    }
+    public void setReminderCycle(Integer reminderCycle)
+    {
+        this.reminderCycle = reminderCycle;
+    }
+
+    public Integer getReminderCycle()
+    {
+        return reminderCycle;
+    }
+
+    public String getPointFlag() {
+        return pointFlag;
+    }
+
+    public void setPointFlag(String pointFlag) {
+        this.pointFlag = pointFlag;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("code", getCode())
+            .append("facilityName", getFacilityName())
+            .append("facilityType", getFacilityType())
+            .append("branchFactory", getBranchFactory())
+            .append("istallationLocationn", getIstallationLocationn())
+            .append("facilityGrade", getFacilityGrade())
+            .append("ratedPower", getRatedPower())
+            .append("productionDate", getProductionDate())
+            .append("putrunDate", getPutrunDate())
+            .append("manufacturer", getManufacturer())
+            .append("personCharge", getPersonCharge())
+            .append("technicalData", getTechnicalData())
+            .append("startTime", getStartTime())
+            .append("checkCycle", getCheckCycle())
+            .append("reminderCycle", getReminderCycle())
+            .append("remark", getRemark())
+            .append("createTime", getCreateTime())
+            .append("createBy", getCreateBy())
+            .append("updateTime", getUpdateTime())
+            .append("updateBy", getUpdateBy())
+                .append("txflage", getTxflage())
+                .append("pointFlag", getPointFlag())
+            .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/domain/MeterAnnex.java b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/MeterAnnex.java
new file mode 100644
index 0000000..debb85d
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/MeterAnnex.java
@@ -0,0 +1,107 @@
+package com.zhitan.basicdata.domain;
+
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 璁¢噺鍣ㄥ叿妗f闄勪欢瀵硅薄 meter_annex
+ * 
+ * @author zhaowei
+ * @date 2020-02-14
+ */
+public class MeterAnnex extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 涓婚敭 */
+    private String id;
+
+    /** 鍏宠仈meter_implement.id */
+    private String implementId;
+
+    /** 鏂囦欢鍚� */
+    @Excel(name = "鏂囦欢鍚�")
+    private String fileName;
+
+    /** 鏂囦欢鍚庣紑 */
+    private String fileSuffix;
+
+    /** 鏂囦欢璺緞 */
+    private String filePath;
+
+    /** 鍒犻櫎鏍囧織Y 鍒犻櫎  N鏈垹闄� */
+    private String delFlage;
+
+    public void setId(String id) 
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+    public void setImplementId(String implementId) 
+    {
+        this.implementId = implementId;
+    }
+
+    public String getImplementId() 
+    {
+        return implementId;
+    }
+    public void setFileName(String fileName) 
+    {
+        this.fileName = fileName;
+    }
+
+    public String getFileName() 
+    {
+        return fileName;
+    }
+    public void setFileSuffix(String fileSuffix) 
+    {
+        this.fileSuffix = fileSuffix;
+    }
+
+    public String getFileSuffix() 
+    {
+        return fileSuffix;
+    }
+    public void setFilePath(String filePath) 
+    {
+        this.filePath = filePath;
+    }
+
+    public String getFilePath() 
+    {
+        return filePath;
+    }
+    public void setDelFlage(String delFlage) 
+    {
+        this.delFlage = delFlage;
+    }
+
+    public String getDelFlage() 
+    {
+        return delFlage;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("implementId", getImplementId())
+            .append("fileName", getFileName())
+            .append("fileSuffix", getFileSuffix())
+            .append("filePath", getFilePath())
+            .append("delFlage", getDelFlage())
+            .append("createTime", getCreateTime())
+            .append("createBy", getCreateBy())
+            .append("updateTime", getUpdateTime())
+            .append("updateBy", getUpdateBy())
+            .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/domain/MeterImplement.java b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/MeterImplement.java
new file mode 100644
index 0000000..822d1d0
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/MeterImplement.java
@@ -0,0 +1,328 @@
+package com.zhitan.basicdata.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * 璁¢噺鍣ㄥ叿妗f缁存姢瀵硅薄 meter_implement
+ *
+ * @author zhaowei
+ * @date 2020-02-12
+ */
+@ApiModel(value = "璁¢噺鍣ㄥ叿")
+public class MeterImplement extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 涓婚敭 */
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+
+    /** 缂栫爜 */
+    @Excel(name = "缂栫爜")
+    @ApiModelProperty(value = "缂栫爜")
+    private String code;
+
+    /** 鍣ㄥ叿鍚嶇О */
+    @Excel(name = "鍣ㄥ叿鍚嶇О")
+    @ApiModelProperty(value = "鍣ㄥ叿鍚嶇О")
+    private String meterName;
+
+    /** 绉嶇被 */
+    @Excel(name = "绉嶇被")
+    @ApiModelProperty(value = "绉嶇被")
+    private String meterType;
+
+    /** 瑙勬牸鍨嬪彿 */
+    @Excel(name = "瑙勬牸鍨嬪彿")
+    @ApiModelProperty(value = "瑙勬牸鍨嬪彿")
+    private String modelNumber;
+
+    /** 娴嬮噺鑼冨洿 */
+    @Excel(name = "娴嬮噺鑼冨洿")
+    @ApiModelProperty(value = "娴嬮噺鑼冨洿")
+    private String measureRange;
+
+    /** 鐢熶骇鍘傚晢 */
+    @Excel(name = "鐢熶骇鍘傚晢")
+    @ApiModelProperty(value = "鐢熶骇鍘傚晢")
+    private String manufacturer;
+
+    /** 璐熻矗浜� */
+    @Excel(name = "璐熻矗浜�")
+    @ApiModelProperty(value = "")
+    private String personCharge;
+
+    /** 瀹夎浣嶇疆 */
+    @Excel(name = "瀹夎浣嶇疆")
+    @ApiModelProperty(value = "瀹夎浣嶇疆")
+    private String installactionLocation;
+
+    /** 璧峰鏃堕棿 */
+    @Excel(name = "璧峰鏃堕棿")
+    @ApiModelProperty(value = "璧峰鏃堕棿")
+    private Date startTime;
+
+    /** 鎶曡繍鏃堕棿 */
+    @Excel(name = "鎶曡繍鏃堕棿")
+    @ApiModelProperty(value = "鎶曡繍鏃堕棿")
+    private Date putrunTime;
+
+    /** 妫�瀹氬懆鏈� */
+    @Excel(name = "妫�瀹氬懆鏈�")
+    @ApiModelProperty(value = "妫�瀹氬懆鏈�")
+    private Integer checkCycle;
+
+    /** 鎻愰啋鍛ㄦ湡 */
+    @Excel(name = "鎻愰啋鍛ㄦ湡")
+    @ApiModelProperty(value = "鎻愰啋鍛ㄦ湡")
+    private Integer reminderCycle;
+
+    /** 鐘舵�� */
+    @Excel(name = "鐘舵��")
+    @ApiModelProperty(value = "鐘舵��")
+    private String meterStatus;
+
+    /** 閫昏緫鍒犻櫎鏍囧織,Y宸插垹闄�,N鏈垹闄� */
+    @ApiModelProperty(value = "閫昏緫鍒犻櫎鏍囧織,Y宸插垹闄�,N鏈垹闄�")
+    private String delFlage;
+    /** 妫�瀹氭彁閱掓爣蹇�  true 鎻愰啋 false涓嶉渶瑕佹彁閱� */
+    @ApiModelProperty(value = "妫�瀹氭彁閱掓爣蹇�  true 鎻愰啋 false涓嶉渶瑕佹彁閱�")
+    @TableField(exist = false)
+    private boolean txflage;
+
+
+    /** 鐘舵�� */
+    @Excel(name = "妫�娴嬭兘婧愮被鍨�")
+    @ApiModelProperty(value = "妫�娴嬭兘婧愮被鍨�")
+    private String energyType;
+
+    @Excel(name = "绾垮緞")
+    private String wireDiameter;
+
+    @ApiModelProperty(name = "缃戝叧涓婚敭")
+    private String gatewayId;
+
+    @Excel(name = "缃戝叧鍚嶇О")
+    private String gatewayName;
+
+    @Excel(name = "鍏佽鏈�澶у姛鐜�")
+    private String maxAllowablePower;
+
+    public String getGatewayId() {
+        return gatewayId;
+    }
+
+    public void setGatewayId(String gatewayId) {
+        this.gatewayId = gatewayId;
+    }
+
+    public String getGatewayName() {
+        return gatewayName;
+    }
+
+    public void setGatewayName(String gatewayName) {
+        this.gatewayName = gatewayName;
+    }
+
+    public void setTxflage(boolean txflage)
+    {
+        this.txflage = txflage;
+    }
+    public boolean getTxflage()
+    {
+        return this.txflage;
+    }
+    public void setId(String id)
+    {
+        this.id = id;
+    }
+
+    public String getId()
+    {
+        return id;
+    }
+    public void setCode(String code)
+    {
+        this.code = code;
+    }
+
+    public String getCode()
+    {
+        return code;
+    }
+    public void setMeterName(String meterName)
+    {
+        this.meterName = meterName;
+    }
+
+    public String getMeterName()
+    {
+        return meterName;
+    }
+    public void setMeterType(String meterType)
+    {
+        this.meterType = meterType;
+    }
+
+    public String getMeterType()
+    {
+        return meterType;
+    }
+    public void setModelNumber(String modelNumber)
+    {
+        this.modelNumber = modelNumber;
+    }
+
+    public String getModelNumber()
+    {
+        return modelNumber;
+    }
+    public void setMeasureRange(String measureRange)
+    {
+        this.measureRange = measureRange;
+    }
+
+    public String getMeasureRange()
+    {
+        return measureRange;
+    }
+    public void setManufacturer(String manufacturer)
+    {
+        this.manufacturer = manufacturer;
+    }
+
+    public String getManufacturer()
+    {
+        return manufacturer;
+    }
+    public void setPersonCharge(String personCharge)
+    {
+        this.personCharge = personCharge;
+    }
+
+    public String getPersonCharge()
+    {
+        return personCharge;
+    }
+    public void setInstallactionLocation(String installactionLocation)
+    {
+        this.installactionLocation = installactionLocation;
+    }
+
+    public String getInstallactionLocation()
+    {
+        return installactionLocation;
+    }
+    public void setStartTime(Date startTime)
+    {
+        this.startTime = startTime;
+    }
+
+    public Date getStartTime()
+    {
+        return startTime;
+    }
+    public void setCheckCycle(Integer checkCycle)
+    {
+        this.checkCycle = checkCycle;
+    }
+
+    public Integer getCheckCycle()
+    {
+        return checkCycle;
+    }
+    public void setReminderCycle(Integer reminderCycle)
+    {
+        this.reminderCycle = reminderCycle;
+    }
+
+    public Integer getReminderCycle()
+    {
+        return reminderCycle;
+    }
+    public void setMeterStatus(String meterStatus)
+    {
+        this.meterStatus = meterStatus;
+    }
+
+    public String getMeterStatus()
+    {
+        return meterStatus;
+    }
+    public void setDelFlage(String delFlage)
+    {
+        this.delFlage = delFlage;
+    }
+
+    public String getDelFlage()
+    {
+        return delFlage;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("code", getCode())
+            .append("meterName", getMeterName())
+            .append("meterType", getMeterType())
+            .append("modelNumber", getModelNumber())
+            .append("measureRange", getMeasureRange())
+            .append("manufacturer", getManufacturer())
+            .append("personCharge", getPersonCharge())
+            .append("installactionLocation", getInstallactionLocation())
+            .append("startTime", getStartTime())
+            .append("checkCycle", getCheckCycle())
+            .append("reminderCycle", getReminderCycle())
+            .append("meterStatus", getMeterStatus())
+            .append("delFlage", getDelFlage())
+            .append("remark", getRemark())
+            .append("createTime", getCreateTime())
+            .append("createBy", getCreateBy())
+            .append("updateTime", getUpdateTime())
+            .append("updateBy", getUpdateBy())
+            .append("txflage", getTxflage())
+            .append("energyType", getEnergyType())
+            .toString();
+    }
+
+    public Date getPutrunTime() {
+        return putrunTime;
+    }
+
+    public void setPutrunTime(Date putrunTime) {
+        this.putrunTime = putrunTime;
+    }
+
+    public String getEnergyType() {
+        return energyType;
+    }
+
+    public void setEnergyType(String energyType) {
+        this.energyType = energyType;
+    }
+
+    public String getWireDiameter() {
+        return wireDiameter;
+    }
+
+    public void setWireDiameter(String wireDiameter) {
+        this.wireDiameter = wireDiameter;
+    }
+
+    public String getMaxAllowablePower() {
+        return maxAllowablePower;
+    }
+
+    public void setMaxAllowablePower(String maxAllowablePower) {
+        this.maxAllowablePower = maxAllowablePower;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/domain/MeterImplementCount.java b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/MeterImplementCount.java
new file mode 100644
index 0000000..b3df3b1
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/MeterImplementCount.java
@@ -0,0 +1,245 @@
+package com.zhitan.basicdata.domain;
+
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * 璁¢噺鍣ㄥ叿缁熻鏌ヨ瀵硅薄 meter_implement
+ * 
+ * @author zhaowei
+ * @date 2020-02-21
+ */
+public class MeterImplementCount extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 缂栫爜 */
+    @Excel(name = "缂栫爜")
+    private String code;
+
+    /** 鍣ㄥ叿鍚嶇О */
+    @Excel(name = "鍣ㄥ叿鍚嶇О")
+    private String meterName;
+
+    /** 绉嶇被 */
+    @Excel(name = "绉嶇被")
+    private String meterType;
+
+    /** 瑙勬牸鍨嬪彿 */
+    @Excel(name = "瑙勬牸鍨嬪彿")
+    private String modelNumber;
+
+    /** 娴嬮噺鑼冨洿 */
+    @Excel(name = "娴嬮噺鑼冨洿")
+    private String measureRange;
+
+    /** 涓婚敭 */
+    private String id;
+
+    /** 鐢熶骇鍘傚晢 */
+    @Excel(name = "鐢熶骇鍘傚晢")
+    private String manufacturer;
+
+    /** 璐熻矗浜� */
+    private String personCharge;
+
+    /** 瀹夎浣嶇疆 */
+    @Excel(name = "瀹夎浣嶇疆")
+    private String installactionLocation;
+
+    /** 璧峰鏃堕棿 */
+    private Date startTime;
+
+    /** 鎶曡繍鏃堕棿 */
+    @Excel(name = "鎶曡繍鏃堕棿")
+    private Date putrunTime;
+
+
+    /** 妫�瀹氬懆鏈� */
+    private Integer checkCycle;
+
+    /** 鎻愰啋鍛ㄦ湡 */
+    private Integer reminderCycle;
+
+    /** 鐘舵�� */
+    @Excel(name = "鐘舵��")
+    private String meterStatus;
+
+    /** 閫昏緫鍒犻櫎鏍囧織,Y宸插垹闄�,N鏈垹闄� */
+    private String delFlage;
+
+    private boolean txflage;
+
+    public void setTxflage(boolean txflage)
+    {
+        this.txflage = txflage;
+    }
+    public boolean getTxflage()
+    {
+        return this.txflage;
+    }
+
+    public void setCode(String code) 
+    {
+        this.code = code;
+    }
+
+    public String getCode() 
+    {
+        return code;
+    }
+    public void setMeterName(String meterName) 
+    {
+        this.meterName = meterName;
+    }
+
+    public String getMeterName() 
+    {
+        return meterName;
+    }
+    public void setMeterType(String meterType) 
+    {
+        this.meterType = meterType;
+    }
+
+    public String getMeterType() 
+    {
+        return meterType;
+    }
+    public void setModelNumber(String modelNumber) 
+    {
+        this.modelNumber = modelNumber;
+    }
+
+    public String getModelNumber() 
+    {
+        return modelNumber;
+    }
+    public void setMeasureRange(String measureRange) 
+    {
+        this.measureRange = measureRange;
+    }
+
+    public String getMeasureRange() 
+    {
+        return measureRange;
+    }
+    public void setId(String id) 
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+    public void setManufacturer(String manufacturer) 
+    {
+        this.manufacturer = manufacturer;
+    }
+
+    public String getManufacturer() 
+    {
+        return manufacturer;
+    }
+    public void setPersonCharge(String personCharge) 
+    {
+        this.personCharge = personCharge;
+    }
+
+    public String getPersonCharge() 
+    {
+        return personCharge;
+    }
+    public void setInstallactionLocation(String installactionLocation) 
+    {
+        this.installactionLocation = installactionLocation;
+    }
+
+    public String getInstallactionLocation() 
+    {
+        return installactionLocation;
+    }
+    public void setStartTime(Date startTime) 
+    {
+        this.startTime = startTime;
+    }
+
+    public Date getStartTime() 
+    {
+        return startTime;
+    }
+    public void setCheckCycle(Integer checkCycle) 
+    {
+        this.checkCycle = checkCycle;
+    }
+
+    public Integer getCheckCycle() 
+    {
+        return checkCycle;
+    }
+    public void setReminderCycle(Integer reminderCycle) 
+    {
+        this.reminderCycle = reminderCycle;
+    }
+
+    public Integer getReminderCycle() 
+    {
+        return reminderCycle;
+    }
+    public void setMeterStatus(String meterStatus) 
+    {
+        this.meterStatus = meterStatus;
+    }
+
+    public String getMeterStatus() 
+    {
+        return meterStatus;
+    }
+    public void setDelFlage(String delFlage) 
+    {
+        this.delFlage = delFlage;
+    }
+
+    public String getDelFlage() 
+    {
+        return delFlage;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("code", getCode())
+            .append("meterName", getMeterName())
+            .append("meterType", getMeterType())
+            .append("modelNumber", getModelNumber())
+            .append("measureRange", getMeasureRange())
+            .append("id", getId())
+            .append("manufacturer", getManufacturer())
+            .append("personCharge", getPersonCharge())
+            .append("installactionLocation", getInstallactionLocation())
+            .append("startTime", getStartTime())
+            .append("checkCycle", getCheckCycle())
+            .append("reminderCycle", getReminderCycle())
+            .append("meterStatus", getMeterStatus())
+            .append("delFlage", getDelFlage())
+            .append("remark", getRemark())
+            .append("createTime", getCreateTime())
+            .append("createBy", getCreateBy())
+            .append("updateTime", getUpdateTime())
+            .append("updateBy", getUpdateBy())
+                .append("txflage", getTxflage())
+            .toString();
+    }
+    public Date getPutrunTime() {
+        return putrunTime;
+    }
+
+    public void setPutrunTime(Date putrunTime) {
+        this.putrunTime = putrunTime;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/domain/MeterImplementExcel.java b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/MeterImplementExcel.java
new file mode 100644
index 0000000..4dd1443
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/MeterImplementExcel.java
@@ -0,0 +1,245 @@
+package com.zhitan.basicdata.domain;
+
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 璁¢噺鍣ㄥ叿妗f缁存姢 瀵煎嚭 Excel涓撶敤瀵硅薄 meter_implement
+ * 
+ * @author zhaowei
+ * @date 2020-02-12
+ */
+public class MeterImplementExcel extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 涓婚敭 */
+    private String id;
+
+    /** 缂栫爜 */
+    @Excel(name = "缂栫爜")
+    private String code;
+
+    /** 鍣ㄥ叿鍚嶇О */
+    @Excel(name = "鍣ㄥ叿鍚嶇О")
+    private String meterName;
+
+    /** 绉嶇被 */
+    @Excel(name = "绉嶇被")
+    private String meterType;
+
+    /** 瑙勬牸鍨嬪彿 */
+    @Excel(name = "瑙勬牸鍨嬪彿")
+    private String modelNumber;
+
+    /** 娴嬮噺鑼冨洿 */
+    @Excel(name = "娴嬮噺鑼冨洿")
+    private String measureRange;
+
+    /** 鐢熶骇鍘傚晢 */
+    @Excel(name = "鐢熶骇鍘傚晢")
+    private String manufacturer;
+
+    /** 璐熻矗浜� */
+    @Excel(name = "璐熻矗浜�")
+    private String personCharge;
+
+    /** 瀹夎浣嶇疆 */
+    @Excel(name = "瀹夎浣嶇疆")
+    private String installactionLocation;
+
+    /** 璧峰鏃堕棿 */
+    @Excel(name = "璧峰鏃堕棿")
+    private String startTime;
+
+    /** 妫�瀹氬懆鏈� */
+    @Excel(name = "妫�瀹氬懆鏈�")
+    private Integer checkCycle;
+
+    /** 鎻愰啋鍛ㄦ湡 */
+    @Excel(name = "鎻愰啋鍛ㄦ湡")
+    private Integer reminderCycle;
+
+    /** 鐘舵�� */
+    @Excel(name = "鐘舵��")
+    private String meterStatus;
+
+    /** 閫昏緫鍒犻櫎鏍囧織,Y宸插垹闄�,N鏈垹闄� */
+    private String delFlage;
+
+    @Excel(name = "绾垮緞")
+    private String wireDiameter;
+
+    @Excel(name = "鍏佽鏈�澶у姛鐜�")
+    private String maxAllowablePower;
+
+    public void setId(String id) 
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+    public void setCode(String code) 
+    {
+        this.code = code;
+    }
+
+    public String getCode() 
+    {
+        return code;
+    }
+    public void setMeterName(String meterName) 
+    {
+        this.meterName = meterName;
+    }
+
+    public String getMeterName() 
+    {
+        return meterName;
+    }
+    public void setMeterType(String meterType) 
+    {
+        this.meterType = meterType;
+    }
+
+    public String getMeterType() 
+    {
+        return meterType;
+    }
+    public void setModelNumber(String modelNumber) 
+    {
+        this.modelNumber = modelNumber;
+    }
+
+    public String getModelNumber() 
+    {
+        return modelNumber;
+    }
+    public void setMeasureRange(String measureRange) 
+    {
+        this.measureRange = measureRange;
+    }
+
+    public String getMeasureRange() 
+    {
+        return measureRange;
+    }
+    public void setManufacturer(String manufacturer) 
+    {
+        this.manufacturer = manufacturer;
+    }
+
+    public String getManufacturer() 
+    {
+        return manufacturer;
+    }
+    public void setPersonCharge(String personCharge) 
+    {
+        this.personCharge = personCharge;
+    }
+
+    public String getPersonCharge() 
+    {
+        return personCharge;
+    }
+    public void setInstallactionLocation(String installactionLocation) 
+    {
+        this.installactionLocation = installactionLocation;
+    }
+
+    public String getInstallactionLocation() 
+    {
+        return installactionLocation;
+    }
+    public void setStartTime(String startTime)
+    {
+        this.startTime = startTime;
+    }
+
+    public String getStartTime()
+    {
+        return startTime;
+    }
+    public void setCheckCycle(Integer checkCycle) 
+    {
+        this.checkCycle = checkCycle;
+    }
+
+    public Integer getCheckCycle() 
+    {
+        return checkCycle;
+    }
+    public void setReminderCycle(Integer reminderCycle) 
+    {
+        this.reminderCycle = reminderCycle;
+    }
+
+    public Integer getReminderCycle() 
+    {
+        return reminderCycle;
+    }
+    public void setMeterStatus(String meterStatus) 
+    {
+        this.meterStatus = meterStatus;
+    }
+
+    public String getMeterStatus() 
+    {
+        return meterStatus;
+    }
+    public void setDelFlage(String delFlage) 
+    {
+        this.delFlage = delFlage;
+    }
+
+    public String getDelFlage() 
+    {
+        return delFlage;
+    }
+
+    public String getWireDiameter() {
+        return wireDiameter;
+    }
+
+    public void setWireDiameter(String wireDiameter) {
+        this.wireDiameter = wireDiameter;
+    }
+
+    public String getMaxAllowablePower() {
+        return maxAllowablePower;
+    }
+
+    public void setMaxAllowablePower(String maxAllowablePower) {
+        this.maxAllowablePower = maxAllowablePower;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("code", getCode())
+            .append("meterName", getMeterName())
+            .append("meterType", getMeterType())
+            .append("modelNumber", getModelNumber())
+            .append("measureRange", getMeasureRange())
+            .append("manufacturer", getManufacturer())
+            .append("personCharge", getPersonCharge())
+            .append("installactionLocation", getInstallactionLocation())
+            .append("startTime", getStartTime())
+            .append("checkCycle", getCheckCycle())
+            .append("reminderCycle", getReminderCycle())
+            .append("meterStatus", getMeterStatus())
+            .append("delFlage", getDelFlage())
+            .append("remark", getRemark())
+            .append("createTime", getCreateTime())
+            .append("createBy", getCreateBy())
+            .append("updateTime", getUpdateTime())
+            .append("updateBy", getUpdateBy())
+            .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysEnerclass.java b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysEnerclass.java
new file mode 100644
index 0000000..4a7ead3
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysEnerclass.java
@@ -0,0 +1,131 @@
+package com.zhitan.basicdata.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * 鑳芥簮鍝佺璁剧疆瀵硅薄 sys_enerclass
+ *
+ * @author ruoyi
+ * @date 2024-10-15
+ */
+@TableName("sys_enerclass")
+public class SysEnerclass extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** 鑳芥簮绫诲埆ID */
+    private Integer enerclassid;
+
+    /** 鑳芥簮绫诲埆鍚嶇О */
+    @Excel(name = "鑳芥簮绫诲埆鍚嶇О")
+    private String enerclassname;
+
+    /** 鎿嶄綔浜� */
+    @Excel(name = "鎿嶄綔浜�")
+    private String oprMan;
+
+    /** 鎿嶄綔鏃堕棿 */
+    @Excel(name = "鎿嶄綔鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date oprTime;
+
+    /** 鏇存柊浜� */
+    @Excel(name = "鏇存柊浜�")
+    private String modMan;
+
+    /** 鏇存柊鏃堕棿 */
+    @Excel(name = "鏇存柊鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date modTime;
+
+    /** 澶囨敞 */
+    @Excel(name = "澶囨敞")
+    private String note;
+
+        
+    public void setEnerclassid(Integer enerclassid)
+    {
+        this.enerclassid = enerclassid;
+    }
+
+    public Integer getEnerclassid()
+    {
+        return enerclassid;
+    }
+        
+    public void setEnerclassname(String enerclassname)
+    {
+        this.enerclassname = enerclassname;
+    }
+
+    public String getEnerclassname()
+    {
+        return enerclassname;
+    }
+        
+    public void setOprMan(String oprMan)
+    {
+        this.oprMan = oprMan;
+    }
+
+    public String getOprMan()
+    {
+        return oprMan;
+    }
+        
+    public void setOprTime(Date oprTime)
+    {
+        this.oprTime = oprTime;
+    }
+
+    public Date getOprTime()
+    {
+        return oprTime;
+    }
+        
+    public void setModMan(String modMan)
+    {
+        this.modMan = modMan;
+    }
+
+    public String getModMan()
+    {
+        return modMan;
+    }
+        
+    public void setModTime(Date modTime)
+    {
+        this.modTime = modTime;
+    }
+
+    public Date getModTime()
+    {
+        return modTime;
+    }
+        
+    public void setNote(String note)
+    {
+        this.note = note;
+    }
+
+    public String getNote()
+    {
+        return note;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("enerclassid", getEnerclassid())
+            .append("enerclassname", getEnerclassname())
+            .append("oprMan", getOprMan())
+            .append("oprTime", getOprTime())
+            .append("modMan", getModMan())
+            .append("modTime", getModTime())
+            .append("note", getNote())
+        .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysEnercoefficient.java b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysEnercoefficient.java
new file mode 100644
index 0000000..9dd85f6
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysEnercoefficient.java
@@ -0,0 +1,172 @@
+package com.zhitan.basicdata.domain;
+
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * 鑳芥簮鎶樻爣绯绘暟瀵硅薄 sys_enercoefficient
+ *
+ * @author sys
+ * @date 2020-02-18
+ */
+public class SysEnercoefficient extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 鎶樻爣绯绘暟ID */
+    private Integer ecid;
+
+    /** 鑳芥簮ID */
+    @Excel(name = "鑳芥簮ID")
+    private Integer enerid;
+
+    /** 绛変环鎶樻爣绯绘暟 */
+    @Excel(name = "绛変环鎶樻爣绯绘暟")
+    private double coefficient;
+
+    /** 褰撻噺鎶樻爣绯绘暟 */
+    @Excel(name = "褰撻噺鎶樻爣绯绘暟")
+    private double coefficient2;
+
+    /** 鎵ц鏃ユ湡 */
+    @Excel(name = "鎵ц鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date execdate;
+
+    /** 鎿嶄綔浜� */
+    private String oprMan;
+
+    /** 鎿嶄綔鏃堕棿 */
+    private Date oprTime;
+
+    /** 鏇存柊浜� */
+    private String modMan;
+
+    /** 鏇存柊鏃堕棿 */
+    private Date modTime;
+
+    /** 澶囨敞 */
+    @Excel(name = "澶囨敞")
+    private String note;
+
+    //  鑳芥簮鍚嶇О
+    private String enername;
+
+    public String getEnername() {
+        return enername;
+    }
+
+    public void setEnername(String enername) {
+        this.enername = enername;
+    }
+
+    public void setEcid(Integer ecid)
+    {
+        this.ecid = ecid;
+    }
+
+    public Integer getEcid()
+    {
+        return ecid;
+    }
+    public void setEnerid(Integer enerid)
+    {
+        this.enerid = enerid;
+    }
+
+    public Integer getEnerid()
+    {
+        return enerid;
+    }
+    public void setCoefficient(double coefficient)
+    {
+        this.coefficient = coefficient;
+    }
+
+    public double getCoefficient()
+    {
+        return coefficient;
+    }
+    public void setCoefficient2(double coefficient2)
+    {
+        this.coefficient2 = coefficient2;
+    }
+
+    public double getCoefficient2()
+    {
+        return coefficient2;
+    }
+    public void setExecdate(Date execdate)
+    {
+        this.execdate = execdate;
+    }
+
+    public Date getExecdate()
+    {
+        return execdate;
+    }
+    public void setOprMan(String oprMan)
+    {
+        this.oprMan = oprMan;
+    }
+
+    public String getOprMan()
+    {
+        return oprMan;
+    }
+    public void setOprTime(Date oprTime)
+    {
+        this.oprTime = oprTime;
+    }
+
+    public Date getOprTime()
+    {
+        return oprTime;
+    }
+    public void setModMan(String modMan)
+    {
+        this.modMan = modMan;
+    }
+
+    public String getModMan()
+    {
+        return modMan;
+    }
+    public void setModTime(Date modTime)
+    {
+        this.modTime = modTime;
+    }
+
+    public Date getModTime()
+    {
+        return modTime;
+    }
+    public void setNote(String note)
+    {
+        this.note = note;
+    }
+
+    public String getNote()
+    {
+        return note;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("ecid", getEcid())
+            .append("enerid", getEnerid())
+            .append("coefficient", getCoefficient())
+            .append("coefficient2", getCoefficient2())
+            .append("execdate", getExecdate())
+            .append("oprMan", getOprMan())
+            .append("oprTime", getOprTime())
+            .append("modMan", getModMan())
+            .append("modTime", getModTime())
+            .append("note", getNote())
+            .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysEnergy.java b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysEnergy.java
new file mode 100644
index 0000000..0233a98
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysEnergy.java
@@ -0,0 +1,322 @@
+package com.zhitan.basicdata.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 銆愯濉啓鍔熻兘鍚嶇О銆戝璞� sys_energy
+ *
+ * @author ZhiTan
+ * @date 2024-10-15
+ */
+@TableName("sys_energy")
+public class SysEnergy extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** 鑳芥簮鍚嶇О */
+    @Excel(name = "鑳芥簮鍚嶇О")
+    private String enername;
+
+    /** 璁¢噺鍗曚綅 */
+    @Excel(name = "璁¢噺鍗曚綅")
+    private String muid;
+
+    @TableField(exist = false)
+    private String muidString;
+
+    /** 鑳芥簮绫诲埆ID */
+    @Excel(name = "鑳芥簮绫诲埆ID")
+    private Integer enerclassid;
+
+    /** 鑳芥簮缂栧彿 */
+    @Excel(name = "鑳芥簮缂栧彿")
+    private String enersno;
+
+    /** 鏄惁瀛樺偍銆�0涓烘槸銆�1涓哄惁 */
+    @Excel(name = "鏄惁瀛樺偍銆�0涓烘槸銆�1涓哄惁")
+    private String isstorage;
+
+    /** 鑳芥簮绫诲瀷 */
+    @Excel(name = "鑳芥簮绫诲瀷")
+    @TableField(exist = false)
+    private String enerclassname;
+
+    /** 鏄惁鍌ㄥ瓨锛堝瓧绗︿覆锛� */
+    @TableField(exist = false)
+    private String isstorageString;
+
+    /** 鎿嶄綔浜� */
+    @Excel(name = "鎿嶄綔浜�")
+    private String oprMan;
+
+    /** 鎿嶄綔鏃堕棿 */
+    @Excel(name = "鎿嶄綔鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date oprTime;
+
+    /** 淇敼浜� */
+    @Excel(name = "淇敼浜�")
+    private String modMan;
+
+    /** 淇敼鏃堕棿 */
+    @Excel(name = "淇敼鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date modTime;
+
+    /** 澶囨敞 */
+    @Excel(name = "澶囨敞")
+    private String note;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private Integer enerid;
+
+    /** 绛変环鎶樻爣绯绘暟 */
+    @Excel(name = "绛変环鎶樻爣绯绘暟")
+    private BigDecimal coefficient;
+
+    //鎶樻爣绯绘暟note
+    @TableField(exist = false)
+    private String coefficientnote;
+
+    /** 鎶樻爣绯绘暟鎵ц鏃ユ湡 */
+    @Excel(name = "淇敼鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField(exist = false)
+    private Date coefficientexecdate;
+
+    /** 鎵ц鏃ユ湡 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "鎵ц鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date execdate;
+
+    /** 鍗曚环 */
+    @Excel(name = "鍗曚环")
+    private BigDecimal price;
+
+    /** 鎺掓斁鍥犲瓙 */
+    @Excel(name = "鎺掓斁鍥犲瓙")
+    private BigDecimal emissionFactors;
+
+        
+    public void setEnername(String enername)
+    {
+        this.enername = enername;
+    }
+
+    public String getEnername()
+    {
+        return enername;
+    }
+        
+    public void setMuid(String muid)
+    {
+        this.muid = muid;
+    }
+
+    public String getMuid()
+    {
+        return muid;
+    }
+        
+    public void setEnerclassid(Integer enerclassid)
+    {
+        this.enerclassid = enerclassid;
+    }
+
+    public Integer getEnerclassid()
+    {
+        return enerclassid;
+    }
+        
+    public void setEnersno(String enersno)
+    {
+        this.enersno = enersno;
+    }
+
+    public String getEnersno()
+    {
+        return enersno;
+    }
+        
+    public void setIsstorage(String isstorage)
+    {
+        this.isstorage = isstorage;
+    }
+
+    public String getIsstorage()
+    {
+        return isstorage;
+    }
+        
+    public void setOprMan(String oprMan)
+    {
+        this.oprMan = oprMan;
+    }
+
+    public String getOprMan()
+    {
+        return oprMan;
+    }
+        
+    public void setOprTime(Date oprTime)
+    {
+        this.oprTime = oprTime;
+    }
+
+    public Date getOprTime()
+    {
+        return oprTime;
+    }
+        
+    public void setModMan(String modMan)
+    {
+        this.modMan = modMan;
+    }
+
+    public String getModMan()
+    {
+        return modMan;
+    }
+        
+    public void setModTime(Date modTime)
+    {
+        this.modTime = modTime;
+    }
+
+    public Date getModTime()
+    {
+        return modTime;
+    }
+        
+    public void setNote(String note)
+    {
+        this.note = note;
+    }
+
+    public String getNote()
+    {
+        return note;
+    }
+        
+    public void setEnerid(Integer enerid)
+    {
+        this.enerid = enerid;
+    }
+
+    public Integer getEnerid()
+    {
+        return enerid;
+    }
+        
+    public void setCoefficient(BigDecimal coefficient)
+    {
+        this.coefficient = coefficient;
+    }
+
+    public BigDecimal getCoefficient()
+    {
+        return coefficient;
+    }
+        
+    public void setExecdate(Date execdate)
+    {
+        this.execdate = execdate;
+    }
+
+    public Date getExecdate()
+    {
+        return execdate;
+    }
+        
+    public void setPrice(BigDecimal price)
+    {
+        this.price = price;
+    }
+
+    public BigDecimal getPrice()
+    {
+        return price;
+    }
+        
+    public void setEmissionFactors(BigDecimal emissionFactors)
+    {
+        this.emissionFactors = emissionFactors;
+    }
+
+    public BigDecimal getEmissionFactors()
+    {
+        return emissionFactors;
+    }
+
+    public String getIsstorageString() {
+        return isstorageString;
+    }
+
+    public void setIsstorageString(String isstorageString) {
+        this.isstorageString = isstorageString;
+    }
+
+    public String getEnerclassname() {
+        return enerclassname;
+    }
+
+    public void setEnerclassname(String enerclassname) {
+        this.enerclassname = enerclassname;
+    }
+
+    public String getCoefficientnote() {
+        return coefficientnote;
+    }
+
+    public void setCoefficientnote(String coefficientnote) {
+        this.coefficientnote = coefficientnote;
+    }
+
+    public Date getCoefficientexecdate() {
+        return coefficientexecdate;
+    }
+
+    public void setCoefficientexecdate(Date coefficientexecdate) {
+        this.coefficientexecdate = coefficientexecdate;
+    }
+
+    public String getMuidString() {
+        return muidString;
+    }
+
+    public void setMuidString(String muidString) {
+        this.muidString = muidString;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("enername", getEnername())
+            .append("muid", getMuid())
+            .append("enerclassid", getEnerclassid())
+            .append("enersno", getEnersno())
+            .append("isstorage", getIsstorage())
+            .append("oprMan", getOprMan())
+            .append("oprTime", getOprTime())
+            .append("modMan", getModMan())
+            .append("modTime", getModTime())
+            .append("note", getNote())
+            .append("enerid", getEnerid())
+            .append("coefficient", getCoefficient())
+            .append("execdate", getExecdate())
+            .append("price", getPrice())
+            .append("emissionFactors", getEmissionFactors())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+        .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysPrice.java b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysPrice.java
new file mode 100644
index 0000000..dd35b10
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysPrice.java
@@ -0,0 +1,174 @@
+package com.zhitan.basicdata.domain;
+
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * 鍗曚环璁剧疆瀵硅薄 sys_price
+ *
+ * @author ruoyi
+ * @date 2020-02-15
+ */
+public class SysPrice extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 鍗曚环ID */
+    private Integer priceid;
+
+    /** ObjectID_瀵硅薄ID锛�
+銆�銆�鑳芥簮ID銆佸師鏂橧D鎴栦骇鍝両D
+ */
+    @Excel(name = "ObjectID_瀵硅薄ID锛� 鑳芥簮ID銆佸師鏂橧D鎴栦骇鍝両D ")
+    private Integer objectid;
+
+    /** ObjectType_瀵硅薄绫诲瀷
+銆�銆�1=鑳芥簮(Energy琛�)锛�2=鍘熸枡(Material琛�)锛�3=浜у搧(Product琛�) */
+    private Integer objecttype;
+
+    /** 鍗曚环 */
+    @Excel(name = "鍗曚环")
+    private Double price;
+
+    /** 鎵ц鏃ユ湡 */
+    @Excel(name = "鎵ц鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date execdate;
+
+    /** 鎿嶄綔浜� */
+    private String oprMan;
+
+    /** 鎿嶄綔鏃堕棿 */
+    private Date oprTime;
+
+    /** 鏇存柊浜� */
+    private String modMan;
+
+    /** 鏇存柊鏃堕棿 */
+    private Date modTime;
+
+    /** 澶囨敞 */
+    @Excel(name = "澶囨敞")
+    private String note;
+
+    //鑳芥簮鍚�
+    private String enername;
+
+    public String getEnername() {
+        return enername;
+    }
+
+    public void setEnername(String enername) {
+        this.enername = enername;
+    }
+
+    public void setPriceid(Integer priceid)
+    {
+        this.priceid = priceid;
+    }
+
+    public Integer getPriceid()
+    {
+        return priceid;
+    }
+    public void setObjectid(Integer objectid)
+    {
+        this.objectid = objectid;
+    }
+
+    public Integer getObjectid()
+    {
+        return objectid;
+    }
+    public void setObjecttype(Integer objecttype)
+    {
+        this.objecttype = objecttype;
+    }
+
+    public Integer getObjecttype()
+    {
+        return objecttype;
+    }
+    public void setPrice(Double price)
+    {
+        this.price = price;
+    }
+
+    public Double getPrice()
+    {
+        return price;
+    }
+    public void setExecdate(Date execdate)
+    {
+        this.execdate = execdate;
+    }
+
+    public Date getExecdate()
+    {
+        return execdate;
+    }
+    public void setOprMan(String oprMan)
+    {
+        this.oprMan = oprMan;
+    }
+
+    public String getOprMan()
+    {
+        return oprMan;
+    }
+    public void setOprTime(Date oprTime)
+    {
+        this.oprTime = oprTime;
+    }
+
+    public Date getOprTime()
+    {
+        return oprTime;
+    }
+    public void setModMan(String modMan)
+    {
+        this.modMan = modMan;
+    }
+
+    public String getModMan()
+    {
+        return modMan;
+    }
+    public void setModTime(Date modTime)
+    {
+        this.modTime = modTime;
+    }
+
+    public Date getModTime()
+    {
+        return modTime;
+    }
+    public void setNote(String note)
+    {
+        this.note = note;
+    }
+
+    public String getNote()
+    {
+        return note;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("priceid", getPriceid())
+            .append("objectid", getObjectid())
+            .append("objecttype", getObjecttype())
+            .append("price", getPrice())
+            .append("execdate", getExecdate())
+            .append("oprMan", getOprMan())
+            .append("oprTime", getOprTime())
+            .append("modMan", getModMan())
+            .append("modTime", getModTime())
+            .append("note", getNote())
+            .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysProduct.java b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysProduct.java
new file mode 100644
index 0000000..d3c11a7
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/SysProduct.java
@@ -0,0 +1,240 @@
+package com.zhitan.basicdata.domain;
+
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * 浜у搧瀵硅薄 sys_product
+ *
+ * @author sys
+ * @date 2020-02-19
+ */
+public class SysProduct extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 浜у搧ID */
+    private Integer productid;
+
+    /** 浜у搧鍚嶇О */
+    @Excel(name = "浜у搧鍚嶇О")
+    private String productname;
+
+    /** 浜у搧缂栧彿 */
+    @Excel(name = "浜у搧缂栧彿")
+    private String productsno;
+
+    /** 璁¢噺鍗曚綅 */
+    @Excel(name = "璁¢噺鍗曚綅")
+    private String muid;
+
+    /** 鐖剁骇浜у搧ID */
+    @Excel(name = "鐖剁骇浜у搧ID")
+    private Integer superid;
+
+    /** 鏄惁涓哄瓙绾� */
+    @Excel(name = "鏄惁涓哄瓙绾�")
+    private String issub;
+
+    /** 鎶樼畻绯绘暟 */
+    @Excel(name = "鎶樼畻绯绘暟")
+    private Double procofficient;
+
+    /** 鏄惁鏄剧ず */
+    @Excel(name = "鏄惁鏄剧ず")
+    private String isshow;
+
+    /** 鏄惁涓昏浜у搧 */
+    @Excel(name = "鏄惁涓昏浜у搧")
+    private String iscpnyproduct;
+
+    /** 鎿嶄綔浜� */
+    private String oprMan;
+
+    /** 鎿嶄綔鏃堕棿 */
+    private Date oprTime;
+
+    /** 鏇存柊浜� */
+    private String modMan;
+
+    /** 鏇存柊鏃堕棿 */
+    private Date modTime;
+
+    /** 澶囨敞 */
+    @Excel(name = "澶囨敞")
+    private String note;
+    //浠锋牸
+    private double price;
+
+    private String superidname;
+
+    public String getSuperidname() {
+        return superidname;
+    }
+
+    public void setSuperidname(String superidname) {
+        this.superidname = superidname;
+    }
+
+    public double getPrice() {
+        return price;
+    }
+
+    public void setPrice(double price) {
+        this.price = price;
+    }
+
+
+
+    public void setProductid(Integer productid)
+    {
+        this.productid = productid;
+    }
+
+    public Integer getProductid()
+    {
+        return productid;
+    }
+    public void setProductname(String productname)
+    {
+        this.productname = productname;
+    }
+
+    public String getProductname()
+    {
+        return productname;
+    }
+    public void setProductsno(String productsno)
+    {
+        this.productsno = productsno;
+    }
+
+    public String getProductsno()
+    {
+        return productsno;
+    }
+    public void setMuid(String muid)
+    {
+        this.muid = muid;
+    }
+
+    public String getMuid()
+    {
+        return muid;
+    }
+    public void setSuperid(Integer superid)
+    {
+        this.superid = superid;
+    }
+
+    public Integer getSuperid()
+    {
+        return superid;
+    }
+    public void setIssub(String issub)
+    {
+        this.issub = issub;
+    }
+
+    public String getIssub()
+    {
+        return issub;
+    }
+    public void setProcofficient(Double procofficient)
+    {
+        this.procofficient = procofficient;
+    }
+
+    public Double getProcofficient()
+    {
+        return procofficient;
+    }
+    public void setIsshow(String isshow)
+    {
+        this.isshow = isshow;
+    }
+
+    public String getIsshow()
+    {
+        return isshow;
+    }
+    public void setIscpnyproduct(String iscpnyproduct)
+    {
+        this.iscpnyproduct = iscpnyproduct;
+    }
+
+    public String getIscpnyproduct()
+    {
+        return iscpnyproduct;
+    }
+    public void setOprMan(String oprMan)
+    {
+        this.oprMan = oprMan;
+    }
+
+    public String getOprMan()
+    {
+        return oprMan;
+    }
+    public void setOprTime(Date oprTime)
+    {
+        this.oprTime = oprTime;
+    }
+
+    public Date getOprTime()
+    {
+        return oprTime;
+    }
+    public void setModMan(String modMan)
+    {
+        this.modMan = modMan;
+    }
+
+    public String getModMan()
+    {
+        return modMan;
+    }
+    public void setModTime(Date modTime)
+    {
+        this.modTime = modTime;
+    }
+
+    public Date getModTime()
+    {
+        return modTime;
+    }
+    public void setNote(String note)
+    {
+        this.note = note;
+    }
+
+    public String getNote()
+    {
+        return note;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("productid", getProductid())
+            .append("productname", getProductname())
+            .append("productsno", getProductsno())
+            .append("muid", getMuid())
+            .append("superid", getSuperid())
+            .append("issub", getIssub())
+            .append("procofficient", getProcofficient())
+            .append("isshow", getIsshow())
+            .append("iscpnyproduct", getIscpnyproduct())
+            .append("oprMan", getOprMan())
+            .append("oprTime", getOprTime())
+            .append("modMan", getModMan())
+            .append("modTime", getModTime())
+            .append("note", getNote())
+            .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/domain/vo/EnergyTypeModel.java b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/vo/EnergyTypeModel.java
new file mode 100644
index 0000000..26fda5e
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/vo/EnergyTypeModel.java
@@ -0,0 +1,28 @@
+package com.zhitan.basicdata.domain.vo;
+
+import com.zhitan.common.annotation.Excel;
+import lombok.Data;
+
+
+/**
+ * 鑳芥簮绫诲瀷淇℃伅绫�
+ *
+ * @Author: Zhujw
+ * @Date: 2023/5/23
+ */
+@Data
+public class EnergyTypeModel {
+
+    /**
+     * 鑳芥簮鍚嶇О
+     */
+    @Excel(name = "鑳芥簮鍚嶇О")
+    private String enername;
+
+    /**
+     * 鑳芥簮缂栧彿
+     */
+    @Excel(name = "鑳芥簮缂栧彿")
+    private String enersno;
+
+}
\ No newline at end of file
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/FacilityAnnexMapper.java b/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/FacilityAnnexMapper.java
new file mode 100644
index 0000000..65cc6a1
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/FacilityAnnexMapper.java
@@ -0,0 +1,63 @@
+package com.zhitan.basicdata.mapper;
+
+
+import com.zhitan.basicdata.domain.FacilityAnnex;
+
+import java.util.List;
+
+/**
+ * 璁惧妗f闄勪欢Mapper鎺ュ彛
+ *
+ * @author sys
+ * @date 2020-02-24
+ */
+public interface FacilityAnnexMapper
+{
+    /**
+     * 鏌ヨ璁惧妗f闄勪欢
+     *
+     * @param id 璁惧妗f闄勪欢ID
+     * @return 璁惧妗f闄勪欢
+     */
+    public FacilityAnnex selectFacilityAnnexById(String  id);
+
+    /**
+     * 鏌ヨ璁惧妗f闄勪欢鍒楄〃
+     *
+     * @param facilityAnnex 璁惧妗f闄勪欢
+     * @return 璁惧妗f闄勪欢闆嗗悎
+     */
+    public List<FacilityAnnex> selectFacilityAnnexList(FacilityAnnex facilityAnnex);
+
+    /**
+     * 鏂板璁惧妗f闄勪欢
+     *
+     * @param facilityAnnex 璁惧妗f闄勪欢
+     * @return 缁撴灉
+     */
+    public int insertFacilityAnnex(FacilityAnnex facilityAnnex);
+
+    /**
+     * 淇敼璁惧妗f闄勪欢
+     *
+     * @param facilityAnnex 璁惧妗f闄勪欢
+     * @return 缁撴灉
+     */
+    public int updateFacilityAnnex(FacilityAnnex facilityAnnex);
+
+    /**
+     * 鍒犻櫎璁惧妗f闄勪欢
+     *
+     * @param id 璁惧妗f闄勪欢ID
+     * @return 缁撴灉
+     */
+    public int deleteFacilityAnnexById(String id);
+
+    /**
+     * 鎵归噺鍒犻櫎璁惧妗f闄勪欢
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteFacilityAnnexByIds(String[] ids);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/FacilityArchivesMapper.java b/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/FacilityArchivesMapper.java
new file mode 100644
index 0000000..622477e
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/FacilityArchivesMapper.java
@@ -0,0 +1,95 @@
+package com.zhitan.basicdata.mapper;
+
+import com.zhitan.basicdata.domain.FacilityArchives;
+
+import java.util.List;
+
+/**
+ * 璁惧妗fMapper鎺ュ彛
+ *
+ * @author zhaowei
+ * @date 2020-02-24
+ */
+public interface FacilityArchivesMapper
+{
+    /**
+     * 鏌ヨ璁惧妗f
+     *
+     * @param id 璁惧妗fID
+     * @return 璁惧妗f
+     */
+    public FacilityArchives selectFacilityArchivesById(String id);
+
+    /**
+     * 鏌ヨ璁惧妗f鐨刢ode鏄惁瀛樺湪
+     *
+     * @param facilityArchives 璁惧妗ffacilityArchives
+     * @return 璁惧妗f
+     */
+    public FacilityArchives selectFacilityArchivesByCode(FacilityArchives facilityArchives);
+    /**
+     * 鏌ヨ璁惧妗f鍒楄〃
+     *
+     * @param facilityArchives 璁惧妗f
+     * @return 璁惧妗f闆嗗悎
+     */
+    public List<FacilityArchives> selectFacilityArchivesList(FacilityArchives facilityArchives);
+    /**
+     * 鏌ヨ璁惧妗f瀵煎嚭鍒楄〃
+     *
+     * @param facilityArchives 璁惧妗f
+     * @return 璁惧妗f闆嗗悎
+     */
+    public List<FacilityArchives> excelFacilityArchivesList(FacilityArchives facilityArchives);
+
+    /**
+     * 鏂板璁惧妗f
+     *
+     * @param facilityArchives 璁惧妗f
+     * @return 缁撴灉
+     */
+    public int insertFacilityArchives(FacilityArchives facilityArchives);
+
+    /**
+     * 淇敼璁惧妗f
+     *
+     * @param facilityArchives 璁惧妗f
+     * @return 缁撴灉
+     */
+    public int updateFacilityArchives(FacilityArchives facilityArchives);
+
+    /**
+     * 鍒犻櫎璁惧妗f
+     *
+     * @param id 璁惧妗fID
+     * @return 缁撴灉
+     */
+    public int deleteFacilityArchivesById(String id);
+
+    /**
+     * 鎵归噺鍒犻櫎璁惧妗f
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteFacilityArchivesByIds(String[] ids);
+
+
+
+/*
+    *
+     * 妫�瀹氭仮澶嶈澶囨。妗�
+     *
+     * @param id 璁惧妗fID
+     * @return 缁撴灉
+    public int resetFacilityArchivesById(String[] id);
+*/
+
+    /**
+     * 鎵归噺妫�瀹氭仮澶嶈澶囨。妗�
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int resetFacilityArchivesByIds(String[] ids);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterAnnexMapper.java b/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterAnnexMapper.java
new file mode 100644
index 0000000..2cdb5dc
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterAnnexMapper.java
@@ -0,0 +1,63 @@
+package com.zhitan.basicdata.mapper;
+
+
+import com.zhitan.basicdata.domain.MeterAnnex;
+
+import java.util.List;
+
+/**
+ * 璁¢噺鍣ㄥ叿妗f闄勪欢Mapper鎺ュ彛
+ * 
+ * @author zhaowei
+ * @date 2020-02-14
+ */
+public interface MeterAnnexMapper 
+{
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿妗f闄勪欢
+     * 
+     * @param id 璁¢噺鍣ㄥ叿妗f闄勪欢ID
+     * @return 璁¢噺鍣ㄥ叿妗f闄勪欢
+     */
+    public MeterAnnex selectMeterAnnexById(String id);
+
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿妗f闄勪欢鍒楄〃
+     * 
+     * @param meterAnnex 璁¢噺鍣ㄥ叿妗f闄勪欢
+     * @return 璁¢噺鍣ㄥ叿妗f闄勪欢闆嗗悎
+     */
+    public List<MeterAnnex> selectMeterAnnexList(MeterAnnex meterAnnex);
+
+    /**
+     * 鏂板璁¢噺鍣ㄥ叿妗f闄勪欢
+     * 
+     * @param meterAnnex 璁¢噺鍣ㄥ叿妗f闄勪欢
+     * @return 缁撴灉
+     */
+    public int insertMeterAnnex(MeterAnnex meterAnnex);
+
+    /**
+     * 淇敼璁¢噺鍣ㄥ叿妗f闄勪欢
+     * 
+     * @param meterAnnex 璁¢噺鍣ㄥ叿妗f闄勪欢
+     * @return 缁撴灉
+     */
+    public int updateMeterAnnex(MeterAnnex meterAnnex);
+
+    /**
+     * 鍒犻櫎璁¢噺鍣ㄥ叿妗f闄勪欢
+     * 
+     * @param id 璁¢噺鍣ㄥ叿妗f闄勪欢ID
+     * @return 缁撴灉
+     */
+    public int deleteMeterAnnexById(String id);
+
+    /**
+     * 鎵归噺鍒犻櫎璁¢噺鍣ㄥ叿妗f闄勪欢
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteMeterAnnexByIds(String[] ids);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterImplementCountMapper.java b/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterImplementCountMapper.java
new file mode 100644
index 0000000..806176f
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterImplementCountMapper.java
@@ -0,0 +1,63 @@
+package com.zhitan.basicdata.mapper;
+
+
+import com.zhitan.basicdata.domain.MeterImplementCount;
+
+import java.util.List;
+
+/**
+ * 璁¢噺鍣ㄥ叿缁熻鏌ヨMapper鎺ュ彛
+ * 
+ * @author zhaowei
+ * @date 2020-02-21
+ */
+public interface MeterImplementCountMapper 
+{
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * 
+     * @param code 璁¢噺鍣ㄥ叿缁熻鏌ヨID
+     * @return 璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     */
+    public MeterImplementCount selectMeterImplementCountById(String code);
+
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿缁熻鏌ヨ鍒楄〃
+     * 
+     * @param meterImplementCount 璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * @return 璁¢噺鍣ㄥ叿缁熻鏌ヨ闆嗗悎
+     */
+    public List<MeterImplementCount> selectMeterImplementCountList(MeterImplementCount meterImplementCount);
+
+    /**
+     * 鏂板璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * 
+     * @param meterImplementCount 璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * @return 缁撴灉
+     */
+    public int insertMeterImplementCount(MeterImplementCount meterImplementCount);
+
+    /**
+     * 淇敼璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * 
+     * @param meterImplementCount 璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * @return 缁撴灉
+     */
+    public int updateMeterImplementCount(MeterImplementCount meterImplementCount);
+
+    /**
+     * 鍒犻櫎璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * 
+     * @param code 璁¢噺鍣ㄥ叿缁熻鏌ヨID
+     * @return 缁撴灉
+     */
+    public int deleteMeterImplementCountById(String code);
+
+    /**
+     * 鎵归噺鍒犻櫎璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * 
+     * @param codes 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteMeterImplementCountByIds(String[] codes);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterImplementMapper.java b/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterImplementMapper.java
new file mode 100644
index 0000000..5f98943
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterImplementMapper.java
@@ -0,0 +1,89 @@
+package com.zhitan.basicdata.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.basicdata.domain.MeterImplement;
+import com.zhitan.basicdata.domain.MeterImplementExcel;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 璁¢噺鍣ㄥ叿妗f缁存姢Mapper鎺ュ彛
+ * 
+ * @author zhaowei
+ * @date 2020-02-12
+ */
+public interface MeterImplementMapper extends BaseMapper<MeterImplement>
+{
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢
+     * 
+     * @param id 璁¢噺鍣ㄥ叿妗f缁存姢ID
+     * @return 璁¢噺鍣ㄥ叿妗f缁存姢
+     */
+    public MeterImplement selectMeterImplementById(String id);
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢
+     *
+     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢缂栧彿
+     * @return 璁¢噺鍣ㄥ叿妗f缁存姢
+     */
+    public MeterImplement selectMeterImplementByCode(MeterImplement meterImplement);
+
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃
+     * 
+     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
+     * @return 璁¢噺鍣ㄥ叿妗f缁存姢闆嗗悎
+     */
+    public List<MeterImplement> selectMeterImplementList(MeterImplement meterImplement);
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢瀵煎嚭鍒楄〃锛屽叾涓瓧鍏稿瓧娈靛湪SQL涓繘琛岀炕璇�
+     *
+     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
+     * @return 璁¢噺鍣ㄥ叿妗f缁存姢闆嗗悎
+     */
+    public List<MeterImplementExcel> exectMeterImplementList(MeterImplement meterImplement);
+
+    /**
+     * 鏂板璁¢噺鍣ㄥ叿妗f缁存姢
+     * 
+     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
+     * @return 缁撴灉
+     */
+    public int insertMeterImplement(MeterImplement meterImplement);
+
+    /**
+     * 淇敼璁¢噺鍣ㄥ叿妗f缁存姢
+     * 
+     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
+     * @return 缁撴灉
+     */
+    public int updateMeterImplement(MeterImplement meterImplement);
+
+    /**
+     * 鍒犻櫎璁¢噺鍣ㄥ叿妗f缁存姢
+     * 
+     * @param id 璁¢噺鍣ㄥ叿妗f缁存姢ID
+     * @return 缁撴灉
+     */
+    public int deleteMeterImplementById(String id);
+
+    /**
+     * 鎵归噺鍒犻櫎璁¢噺鍣ㄥ叿妗f缁存姢
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteMeterImplementByIds(String[] ids);
+
+    /**
+     * 鏍规嵁id闆嗗悎鏌ヨ璁¢噺鍣ㄥ叿淇℃伅
+     *
+     * @param meterIdList   璁¢噺鍣ㄥ叿id
+     * @return
+     */
+    List<MeterImplement> listMeterImplementByIds(@Param("meterIdList") List<String> meterIdList);
+
+    MeterImplement selectByNodeIdIndexId(@Param("nodeId") String nodeId, @Param("indexId") String indexId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/SysEnerclassMapper.java b/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/SysEnerclassMapper.java
new file mode 100644
index 0000000..18033fa
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/SysEnerclassMapper.java
@@ -0,0 +1,72 @@
+package com.zhitan.basicdata.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.basicdata.domain.SysEnerclass;
+
+import java.util.List;
+
+/**
+ * 鑳芥簮鍝佺璁剧疆Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2020-02-10
+ */
+public interface SysEnerclassMapper extends BaseMapper<SysEnerclass>
+{
+    /**
+     * 鏌ヨ鑳芥簮鍝佺璁剧疆
+     *
+     * @param enerclassid 鑳芥簮鍝佺璁剧疆ID
+     * @return 鑳芥簮鍝佺璁剧疆
+     */
+    public SysEnerclass selectSysEnerclassById(Integer enerclassid);
+
+    /**
+     * 鏌ヨ鑳芥簮鍝佺璁剧疆鍒楄〃
+     *
+     * @param sysEnerclass 鑳芥簮鍝佺璁剧疆
+     * @return 鑳芥簮鍝佺璁剧疆闆嗗悎
+     */
+    public List<SysEnerclass> selectSysEnerclassList(SysEnerclass sysEnerclass);
+
+    /**
+     * 鏂板鑳芥簮鍝佺璁剧疆
+     *
+     * @param sysEnerclass 鑳芥簮鍝佺璁剧疆
+     * @return 缁撴灉
+     */
+    public int insertSysEnerclass(SysEnerclass sysEnerclass);
+
+    /**
+     * 淇敼鑳芥簮鍝佺璁剧疆
+     *
+     * @param sysEnerclass 鑳芥簮鍝佺璁剧疆
+     * @return 缁撴灉
+     */
+    public int updateSysEnerclass(SysEnerclass sysEnerclass);
+
+    /**
+     * 鍒犻櫎鑳芥簮鍝佺璁剧疆
+     *
+     * @param enerclassid 鑳芥簮鍝佺璁剧疆ID
+     * @return 缁撴灉
+     */
+    public int deleteSysEnerclassById(Integer enerclassid);
+
+    /**
+     * 鎵归噺鍒犻櫎鑳芥簮鍝佺璁剧疆
+     *
+     * @param enerclassids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteSysEnerclassByIds(Integer[] enerclassids);
+    /**
+     * 鏌ヨ涓�鏍风殑鑳芥簮鍚嶇О鏈夊嚑涓� 鑳芥簮鍚嶇О鍞竴鏍¢獙
+     */
+    int selectSameEnergyNameNum(String enerclassname);
+    /**
+     * 淇敼鐨勬椂鍊欐煡璇竴鏍疯兘婧愬悕绉扮殑id
+     */
+    Integer selectIdByName(String enerclassname);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/SysEnergyMapper.java b/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/SysEnergyMapper.java
new file mode 100644
index 0000000..275cf4b
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/SysEnergyMapper.java
@@ -0,0 +1,119 @@
+package com.zhitan.basicdata.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.basicdata.domain.SysEnergy;
+import com.zhitan.basicdata.domain.vo.EnergyTypeModel;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * energyMapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2020-02-12
+ */
+public interface SysEnergyMapper extends BaseMapper<SysEnergy>
+{
+    /**
+     * 鏌ヨ鑳芥簮绫诲瀷涓嬫媺妗�
+     *
+     * @param
+     * @return 缁撴灉
+     */
+    List getenerclassname();
+    /**
+     * 鏌ヨenergy
+     *
+     * @param
+     * @return energy
+     */
+    public SysEnergy selectSysEnergyById(Integer enerid);
+
+    /**
+     * 鏌ヨenergy鍒楄〃
+     *
+     * @param sysEnergy energy
+     * @return energy闆嗗悎
+     */
+    public List<SysEnergy> selectSysEnergyList(SysEnergy sysEnergy);
+
+    /**
+     * 鏂板energy
+     *
+     * @param sysEnergy energy
+     * @return 缁撴灉
+     */
+    public int insertSysEnergy(SysEnergy sysEnergy);
+
+    /**
+     * 淇敼energy
+     *
+     * @param sysEnergy energy
+     * @return 缁撴灉
+     */
+    public int updateSysEnergy(SysEnergy sysEnergy);
+
+    /**
+     * 鍒犻櫎energy
+     *
+     * @param
+     * @return 缁撴灉
+     */
+    public int deleteSysEnergyById(Integer enerid);
+
+    /**
+     * 鎵归噺鍒犻櫎energy
+     *
+     * @param
+     * @return 缁撴灉
+     */
+    public int deleteSysEnergyByIds(Integer[] enerids);
+    /**
+     * 閫氳繃鑳芥簮绫诲瀷鍚嶇О鏌ヨ 鑳芥簮绫诲瀷id
+     */
+    Integer getEnerClassid(String enerclassname);
+    /**
+     * 鏌ヨ涓�鏍风殑鑳芥簮鍚嶇О鏈夊嚑涓� 鑳芥簮鍚嶇О鍞竴鏍¢獙
+     */
+    int selectSameEnergyNameNum(String enername);
+    /**
+     * 淇敼鐨勬椂鍊欐煡璇竴鏍疯兘婧愬悕绉扮殑id
+     */
+    Integer selectIdByName(String enername);
+    /**
+     * 閫氳繃鑳芥簮id鏌ヨ鍗曚环淇℃伅
+     */
+    Integer getPriceCountByEnerid(SysEnergy sysEnergy);
+    /**
+     * 澧炲姞鍗曚环淇℃伅
+     */
+    Integer insertEnergyPrice(SysEnergy sysEnergy);
+    /**
+     * 淇敼鍗曚环淇℃伅
+     */
+    Integer updateEnergyPrice(SysEnergy sysEnergy);
+    /**
+     * 閫氳繃鑳芥簮id鏌ユ姌鏍囩郴鏁皀um
+     */
+    Integer getCoefficientCountByEnerid(Integer enerid);
+    /**
+     * 澧炲姞鎶樻爣绯绘暟淇℃伅
+     */
+    Integer insertEnergyCoefficient(SysEnergy sysEnergy);
+    /**
+     * 淇敼鎶樻爣绯绘暟淇℃伅
+     */
+    Integer updateEnergyCoefficient(SysEnergy sysEnergy);
+
+    /**
+     * 鏌ヨ鎵�鏈夎兘婧愮被鍨嬩俊鎭�
+     *
+     * @return 鎵�鏈夎兘婧愮被鍨�
+     */
+    List<EnergyTypeModel> listAllEnergyType();
+
+    Page<SysEnergy> selectSysEnergyPage(@Param("sysEnergy") SysEnergy sysEnergy, @Param("page")Page<?> page);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/services/IFacilityAnnexService.java b/zhitan-system/src/main/java/com/zhitan/basicdata/services/IFacilityAnnexService.java
new file mode 100644
index 0000000..05ee9ec
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/services/IFacilityAnnexService.java
@@ -0,0 +1,62 @@
+package com.zhitan.basicdata.services;
+
+import com.zhitan.basicdata.domain.FacilityAnnex;
+
+import java.util.List;
+
+/**
+ * 璁惧妗f闄勪欢Service鎺ュ彛
+ *
+ * @author sys
+ * @date 2020-02-24
+ */
+public interface IFacilityAnnexService
+{
+    /**
+     * 鏌ヨ璁惧妗f闄勪欢
+     *
+     * @param id 璁惧妗f闄勪欢ID
+     * @return 璁惧妗f闄勪欢
+     */
+    public FacilityAnnex selectFacilityAnnexById(String id);
+
+    /**
+     * 鏌ヨ璁惧妗f闄勪欢鍒楄〃
+     *
+     * @param facilityAnnex 璁惧妗f闄勪欢
+     * @return 璁惧妗f闄勪欢闆嗗悎
+     */
+    public List<FacilityAnnex> selectFacilityAnnexList(FacilityAnnex facilityAnnex);
+
+    /**
+     * 鏂板璁惧妗f闄勪欢
+     *
+     * @param facilityAnnex 璁惧妗f闄勪欢
+     * @return 缁撴灉
+     */
+    public int insertFacilityAnnex(FacilityAnnex facilityAnnex);
+
+    /**
+     * 淇敼璁惧妗f闄勪欢
+     *
+     * @param facilityAnnex 璁惧妗f闄勪欢
+     * @return 缁撴灉
+     */
+    public int updateFacilityAnnex(FacilityAnnex facilityAnnex);
+
+    /**
+     * 鎵归噺鍒犻櫎璁惧妗f闄勪欢
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑璁惧妗f闄勪欢ID
+     * @return 缁撴灉
+     */
+    public int deleteFacilityAnnexByIds(String[] ids);
+
+    /**
+     * 鍒犻櫎璁惧妗f闄勪欢淇℃伅
+     *
+     * @param id 璁惧妗f闄勪欢ID
+     * @return 缁撴灉
+     */
+    public int deleteFacilityAnnexById(String id);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/services/IFacilityArchivesService.java b/zhitan-system/src/main/java/com/zhitan/basicdata/services/IFacilityArchivesService.java
new file mode 100644
index 0000000..a3b486d
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/services/IFacilityArchivesService.java
@@ -0,0 +1,104 @@
+package com.zhitan.basicdata.services;
+
+import com.zhitan.basicdata.domain.FacilityArchives;
+import com.zhitan.common.core.domain.model.LoginUser;
+
+import java.util.List;
+
+/**
+ * 璁惧妗fService鎺ュ彛
+ *
+ * @author zhaowei
+ * @date 2020-02-24
+ */
+public interface IFacilityArchivesService
+{
+    /**
+     * 鏌ヨ璁惧妗f
+     *
+     * @param id 璁惧妗fID
+     * @return 璁惧妗f
+     */
+    public FacilityArchives selectFacilityArchivesById(String id);
+
+    /**
+     * 鏌ヨ璁惧妗fcode
+     *
+     * @param facilityArchives 璁惧妗f
+     * @return 璁惧妗f
+     */
+    public FacilityArchives selectFacilityArchivesByCode(FacilityArchives facilityArchives);
+
+    /**
+     * 鏌ヨ璁惧妗f鍒楄〃
+     *
+     * @param facilityArchives 璁惧妗f
+     * @return 璁惧妗f闆嗗悎
+     */
+    public List<FacilityArchives> selectFacilityArchivesList(FacilityArchives facilityArchives);
+    /**
+     * 鏌ヨ璁惧妗f鍒楄〃瀵煎嚭鍒楄〃
+     *
+     * @param facilityArchives 璁惧妗f
+     * @return 璁惧妗f闆嗗悎
+     */
+    public List<FacilityArchives> excelFacilityArchivesList(FacilityArchives facilityArchives);
+
+    /**
+     * 鏂板璁惧妗f
+     *
+     * @param facilityArchives 璁惧妗f
+     * @return 缁撴灉
+     */
+    public int insertFacilityArchives(FacilityArchives facilityArchives);
+
+    /**
+     * 淇敼璁惧妗f
+     *
+     * @param facilityArchives 璁惧妗f
+     * @return 缁撴灉
+     */
+    public int updateFacilityArchives(FacilityArchives facilityArchives);
+
+    /**
+     * 鎵归噺鍒犻櫎璁惧妗f
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑璁惧妗fID
+     * @return 缁撴灉
+     */
+    public int deleteFacilityArchivesByIds(String[] ids);
+
+    /**
+     * 鍒犻櫎璁惧妗f淇℃伅
+     *
+     * @param id 璁惧妗fID
+     * @return 缁撴灉
+     */
+    public int deleteFacilityArchivesById(String id);
+
+
+    /**
+     * 鎵归噺妫�瀹氭仮澶嶈澶囨。妗�
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑璁惧妗fID
+     * @return 缁撴灉
+     */
+    public int resetFacilityArchivesByIds(String[] ids);
+
+   /* *//**
+     * 妫�瀹氭仮澶嶈澶囨。妗堜俊鎭�
+     *
+     * @param id 璁惧妗fID
+     * @return 缁撴灉
+     *//*
+    public int resetFacilityArchivesById(String[] id);*/
+
+    /**
+     * Excel瀵煎叆 璁惧妗f缁存姢淇℃伅
+     *
+     * @param facilityArchivesList  瑕佸鍏ョ殑璁惧妗f闆嗗悎
+     * @param loginUser 鐧诲綍鐢ㄦ埛瀵硅薄
+     * @return 缁撴灉
+     */
+    public String excelImpSave(List<FacilityArchives> facilityArchivesList, LoginUser loginUser);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/services/IMeterAnnexService.java b/zhitan-system/src/main/java/com/zhitan/basicdata/services/IMeterAnnexService.java
new file mode 100644
index 0000000..97d007d
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/services/IMeterAnnexService.java
@@ -0,0 +1,63 @@
+package com.zhitan.basicdata.services;
+
+
+import com.zhitan.basicdata.domain.MeterAnnex;
+
+import java.util.List;
+
+/**
+ * 璁¢噺鍣ㄥ叿妗f闄勪欢Service鎺ュ彛
+ * 
+ * @author zhaowei
+ * @date 2020-02-14
+ */
+public interface IMeterAnnexService 
+{
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿妗f闄勪欢
+     * 
+     * @param id 璁¢噺鍣ㄥ叿妗f闄勪欢ID
+     * @return 璁¢噺鍣ㄥ叿妗f闄勪欢
+     */
+    public MeterAnnex selectMeterAnnexById(String id);
+
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿妗f闄勪欢鍒楄〃
+     * 
+     * @param meterAnnex 璁¢噺鍣ㄥ叿妗f闄勪欢
+     * @return 璁¢噺鍣ㄥ叿妗f闄勪欢闆嗗悎
+     */
+    public List<MeterAnnex> selectMeterAnnexList(MeterAnnex meterAnnex);
+
+    /**
+     * 鏂板璁¢噺鍣ㄥ叿妗f闄勪欢
+     * 
+     * @param meterAnnex 璁¢噺鍣ㄥ叿妗f闄勪欢
+     * @return 缁撴灉
+     */
+    public int insertMeterAnnex(MeterAnnex meterAnnex);
+
+    /**
+     * 淇敼璁¢噺鍣ㄥ叿妗f闄勪欢
+     * 
+     * @param meterAnnex 璁¢噺鍣ㄥ叿妗f闄勪欢
+     * @return 缁撴灉
+     */
+    public int updateMeterAnnex(MeterAnnex meterAnnex);
+
+    /**
+     * 鎵归噺鍒犻櫎璁¢噺鍣ㄥ叿妗f闄勪欢
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑璁¢噺鍣ㄥ叿妗f闄勪欢ID
+     * @return 缁撴灉
+     */
+    public int deleteMeterAnnexByIds(String[] ids);
+
+    /**
+     * 鍒犻櫎璁¢噺鍣ㄥ叿妗f闄勪欢淇℃伅
+     * 
+     * @param id 璁¢噺鍣ㄥ叿妗f闄勪欢ID
+     * @return 缁撴灉
+     */
+    public int deleteMeterAnnexById(String id);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/services/IMeterImplementCountService.java b/zhitan-system/src/main/java/com/zhitan/basicdata/services/IMeterImplementCountService.java
new file mode 100644
index 0000000..fb328ed
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/services/IMeterImplementCountService.java
@@ -0,0 +1,63 @@
+package com.zhitan.basicdata.services;
+
+
+import com.zhitan.basicdata.domain.MeterImplementCount;
+
+import java.util.List;
+
+/**
+ * 璁¢噺鍣ㄥ叿缁熻鏌ヨService鎺ュ彛
+ * 
+ * @author zhaowei
+ * @date 2020-02-21
+ */
+public interface IMeterImplementCountService 
+{
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * 
+     * @param code 璁¢噺鍣ㄥ叿缁熻鏌ヨID
+     * @return 璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     */
+    public MeterImplementCount selectMeterImplementCountById(String code);
+
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿缁熻鏌ヨ鍒楄〃
+     * 
+     * @param meterImplementCount 璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * @return 璁¢噺鍣ㄥ叿缁熻鏌ヨ闆嗗悎
+     */
+    public List<MeterImplementCount> selectMeterImplementCountList(MeterImplementCount meterImplementCount);
+
+    /**
+     * 鏂板璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * 
+     * @param meterImplementCount 璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * @return 缁撴灉
+     */
+    public int insertMeterImplementCount(MeterImplementCount meterImplementCount);
+
+    /**
+     * 淇敼璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * 
+     * @param meterImplementCount 璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * @return 缁撴灉
+     */
+    public int updateMeterImplementCount(MeterImplementCount meterImplementCount);
+
+    /**
+     * 鎵归噺鍒犻櫎璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * 
+     * @param codes 闇�瑕佸垹闄ょ殑璁¢噺鍣ㄥ叿缁熻鏌ヨID
+     * @return 缁撴灉
+     */
+    public int deleteMeterImplementCountByIds(String[] codes);
+
+    /**
+     * 鍒犻櫎璁¢噺鍣ㄥ叿缁熻鏌ヨ淇℃伅
+     * 
+     * @param code 璁¢噺鍣ㄥ叿缁熻鏌ヨID
+     * @return 缁撴灉
+     */
+    public int deleteMeterImplementCountById(String code);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/services/IMeterImplementService.java b/zhitan-system/src/main/java/com/zhitan/basicdata/services/IMeterImplementService.java
new file mode 100644
index 0000000..e39a40c
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/services/IMeterImplementService.java
@@ -0,0 +1,98 @@
+package com.zhitan.basicdata.services;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.basicdata.domain.MeterImplement;
+import com.zhitan.basicdata.domain.MeterImplementExcel;
+import com.zhitan.common.core.domain.model.LoginUser;
+
+import java.util.List;
+
+/**
+ * 璁¢噺鍣ㄥ叿妗f缁存姢Service鎺ュ彛
+ * 
+ * @author zhaowei
+ * @date 2020-02-12
+ */
+public interface IMeterImplementService 
+{
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢
+     * 
+     * @param id 璁¢噺鍣ㄥ叿妗f缁存姢ID
+     * @return 璁¢噺鍣ㄥ叿妗f缁存姢
+     */
+    public MeterImplement selectMeterImplementById(String id);
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢
+     *
+     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢缂栧彿
+     * @return 璁¢噺鍣ㄥ叿妗f缁存姢
+     */
+    public MeterImplement selectMeterImplementByCode(MeterImplement meterImplement);
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃
+     * 
+     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
+     * @return 璁¢噺鍣ㄥ叿妗f缁存姢闆嗗悎
+     */
+    public List<MeterImplement> selectMeterImplementList(MeterImplement meterImplement);
+
+    /**
+     * 瀵煎嚭璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃
+     *
+     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
+     * @return 璁¢噺鍣ㄥ叿妗f缁存姢闆嗗悎
+     */
+    public List<MeterImplementExcel> exectMeterImplementList(MeterImplement meterImplement);
+
+    /**
+     * 鏂板璁¢噺鍣ㄥ叿妗f缁存姢
+     * 
+     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
+     * @return 缁撴灉
+     */
+    public int insertMeterImplement(MeterImplement meterImplement);
+
+    /**
+     * 淇敼璁¢噺鍣ㄥ叿妗f缁存姢
+     * 
+     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
+     * @return 缁撴灉
+     */
+    public int updateMeterImplement(MeterImplement meterImplement);
+
+    /**
+     * 鎵归噺鍒犻櫎璁¢噺鍣ㄥ叿妗f缁存姢
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑璁¢噺鍣ㄥ叿妗f缁存姢ID
+     * @return 缁撴灉
+     */
+    public int deleteMeterImplementByIds(String[] ids);
+
+    /**
+     * 鍒犻櫎璁¢噺鍣ㄥ叿妗f缁存姢淇℃伅
+     * 
+     * @param id 璁¢噺鍣ㄥ叿妗f缁存姢ID
+     * @return 缁撴灉
+     */
+    public int deleteMeterImplementById(String id);
+
+    /**
+     * Excel瀵煎叆 璁¢噺鍣ㄥ叿妗f缁存姢淇℃伅
+     *
+     * @param meterImplementList 瑕佸鍏ョ殑璁¢噺鍣ㄥ叿妗f闆嗗悎
+     * @param loginUser          鐧诲綍鐢ㄦ埛瀵硅薄
+     * @return 缁撴灉
+     */
+    public String excelImpSave(List<MeterImplement> meterImplementList, LoginUser loginUser);
+
+    /**
+     * 鏍规嵁id闆嗗悎鏌ヨ璁¢噺鍣ㄥ叿淇℃伅
+     *
+     * @param meterIdList
+     * @return
+     */
+    List<MeterImplement> listMeterImplementByIds(List<String> meterIdList);
+
+    Page<MeterImplement> selectMeterImplementPage(MeterImplement meterImplement, Long pageNum, Long pageSize);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/services/ISysEnerclassService.java b/zhitan-system/src/main/java/com/zhitan/basicdata/services/ISysEnerclassService.java
new file mode 100644
index 0000000..c0b3be6
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/services/ISysEnerclassService.java
@@ -0,0 +1,74 @@
+package com.zhitan.basicdata.services;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.basicdata.domain.SysEnerclass;
+
+import java.util.List;
+
+/**
+ * 鑳芥簮鍝佺璁剧疆Service鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2020-02-10
+ */
+public interface ISysEnerclassService
+{
+    /**
+     * 鏌ヨ鑳芥簮鍝佺璁剧疆
+     *
+     * @param enerclassid 鑳芥簮鍝佺璁剧疆ID
+     * @return 鑳芥簮鍝佺璁剧疆
+     */
+    public SysEnerclass selectSysEnerclassById(Integer enerclassid);
+
+    /**
+     * 鏌ヨ鑳芥簮鍝佺璁剧疆鍒楄〃
+     *
+     * @param sysEnerclass 鑳芥簮鍝佺璁剧疆
+     * @return 鑳芥簮鍝佺璁剧疆闆嗗悎
+     */
+    public List<SysEnerclass> selectSysEnerclassList(SysEnerclass sysEnerclass);
+
+    /**
+     * 鏂板鑳芥簮鍝佺璁剧疆
+     *
+     * @param sysEnerclass 鑳芥簮鍝佺璁剧疆
+     * @return 缁撴灉
+     */
+    public int insertSysEnerclass(SysEnerclass sysEnerclass);
+
+    /**
+     * 淇敼鑳芥簮鍝佺璁剧疆
+     *
+     * @param sysEnerclass 鑳芥簮鍝佺璁剧疆
+     * @return 缁撴灉
+     */
+    public int updateSysEnerclass(SysEnerclass sysEnerclass);
+
+    /**
+     * 鎵归噺鍒犻櫎鑳芥簮鍝佺璁剧疆
+     *
+     * @param enerclassids 闇�瑕佸垹闄ょ殑鑳芥簮鍝佺璁剧疆ID
+     * @return 缁撴灉
+     */
+    public int deleteSysEnerclassByIds(Integer[] enerclassids);
+
+    /**
+     * 鍒犻櫎鑳芥簮鍝佺璁剧疆淇℃伅
+     *
+     * @param enerclassid 鑳芥簮鍝佺璁剧疆ID
+     * @return 缁撴灉
+     */
+    public int deleteSysEnerclassById(Integer enerclassid);
+    /**
+     * 鏌ヨ涓�鏍风殑鑳芥簮鍚嶇О鏈夊嚑涓� 鑳芥簮鍚嶇О鍞竴鏍¢獙
+     */
+    int selectSameEnergyNameNum(String enerclassname);
+    /**
+     * 淇敼鐨勬椂鍊欐煡璇竴鏍疯兘婧愬悕绉扮殑id
+     */
+    Integer selectIdByName(String enerclassname);
+
+    Page<SysEnerclass> selectSysEnerclassPage(SysEnerclass sysEnerclass, Long pageNum, Long pageSize);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/services/ISysEnergyService.java b/zhitan-system/src/main/java/com/zhitan/basicdata/services/ISysEnergyService.java
new file mode 100644
index 0000000..1397542
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/services/ISysEnergyService.java
@@ -0,0 +1,132 @@
+package com.zhitan.basicdata.services;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.basicdata.domain.SysEnergy;
+import com.zhitan.basicdata.domain.vo.EnergyTypeModel;
+
+import java.util.List;
+
+/**
+ * energyService鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2020-02-12
+ */
+public interface ISysEnergyService {
+    /**
+     * 鏌ヨenergy
+     *
+     * @param
+     * @return energy
+     */
+    SysEnergy selectSysEnergyById(Integer enerid);
+
+    /**
+     * 鏌ヨenergy鍒楄〃
+     *
+     * @param sysEnergy energy
+     * @return energy闆嗗悎
+     */
+    List<SysEnergy> selectSysEnergyList(SysEnergy sysEnergy);
+
+    /**
+     * 鏂板energy
+     *
+     * @param sysEnergy energy
+     * @return 缁撴灉
+     */
+    int insertSysEnergy(SysEnergy sysEnergy);
+
+    /**
+     * 淇敼energy
+     *
+     * @param sysEnergy energy
+     * @return 缁撴灉
+     */
+    int updateSysEnergy(SysEnergy sysEnergy);
+
+    /**
+     * 鎵归噺鍒犻櫎energy
+     *
+     * @param
+     * @return 缁撴灉
+     */
+    int deleteSysEnergyByIds(Integer[] enerids);
+
+    /**
+     * 鍒犻櫎energy淇℃伅
+     *
+     * @param
+     * @return 缁撴灉
+     */
+    int deleteSysEnergyById(Integer enerid);
+
+    /**
+     * 鏌ヨ鑳芥簮绫诲瀷涓嬫媺妗�
+     *
+     * @param
+     * @return 缁撴灉
+     */
+    List getenerclassname();
+
+    /**
+     * 鏌ヨ鑳芥簮绫诲瀷id by enerclassname
+     */
+    Integer getEnerClassid(String enerclassname);
+
+    /**
+     * 鏌ヨ涓�鏍风殑鑳芥簮鍚嶇О鏈夊嚑涓� 鑳芥簮鍚嶇О鍞竴鏍¢獙
+     */
+    SysEnergy selectSameEnergyNameNum(String enername);
+
+    /**
+     * 淇敼鐨勬椂鍊欐煡璇竴鏍疯兘婧愬悕绉扮殑id
+     */
+    Integer selectIdByName(String enername);
+    /**
+     * 閫氳繃鑳芥簮id鏌ヨ鍗曚环淇℃伅
+     */
+    Integer getPriceCountByEnerid(SysEnergy sysEnergy);
+    /**
+     * 澧炲姞鍗曚环淇℃伅
+     */
+    Integer insertEnergyPrice(SysEnergy sysEnergy);
+    /**
+     * 淇敼鍗曚环淇℃伅
+     */
+    Integer updateEnergyPrice(SysEnergy sysEnergy);
+    /**
+     * 閫氳繃鑳芥簮id鏌ユ姌鏍囩郴鏁皀um
+     */
+    Integer getCoefficientCountByEnerid(Integer enerid);
+
+    /**
+     * 澧炲姞鎶樻爣绯绘暟淇℃伅
+     */
+    Integer insertEnergyCoefficient(SysEnergy sysEnergy);
+
+    /**
+     * 淇敼鎶樻爣绯绘暟淇℃伅
+     */
+    Integer updateEnergyCoefficient(SysEnergy sysEnergy);
+
+    /**
+     * 鏌ヨ鎵�鏈夎兘婧愮被鍨嬩俊鎭�
+     *
+     * @return 鎵�鏈夎兘婧愮被鍨�
+     */
+    List<EnergyTypeModel> listAllEnergyType();
+
+    /**
+     * 鏍规嵁code鏌ヨ鑳芥簮淇℃伅
+     *
+     * @param code 缂栧彿
+     * @return
+     */
+    EnergyTypeModel getEnergyTypeByCode(String code);
+
+    Page<SysEnergy> selectSysEnergyPage(SysEnergy sysEnergy, Long pageNum, Long pageSize);
+
+    SysEnergy selectSameEnergyCodeNum(String enersno);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/FacilityAnnexServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/FacilityAnnexServiceImpl.java
new file mode 100644
index 0000000..eff3f68
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/FacilityAnnexServiceImpl.java
@@ -0,0 +1,97 @@
+package com.zhitan.basicdata.services.impl;
+
+import com.zhitan.basicdata.domain.FacilityAnnex;
+import com.zhitan.basicdata.mapper.FacilityAnnexMapper;
+import com.zhitan.basicdata.services.IFacilityAnnexService;
+import com.zhitan.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 璁惧妗f闄勪欢Service涓氬姟灞傚鐞�
+ *
+ * @author sys
+ * @date 2020-02-24
+ */
+@Service
+public class FacilityAnnexServiceImpl implements IFacilityAnnexService
+{
+    @Autowired
+    private FacilityAnnexMapper facilityAnnexMapper;
+
+    /**
+     * 鏌ヨ璁惧妗f闄勪欢
+     *
+     * @param id 璁惧妗f闄勪欢ID
+     * @return 璁惧妗f闄勪欢
+     */
+    @Override
+    public FacilityAnnex selectFacilityAnnexById(String id)
+    {
+        return facilityAnnexMapper.selectFacilityAnnexById(id);
+    }
+
+    /**
+     * 鏌ヨ璁惧妗f闄勪欢鍒楄〃
+     *
+     * @param facilityAnnex 璁惧妗f闄勪欢
+     * @return 璁惧妗f闄勪欢
+     */
+    @Override
+    public List<FacilityAnnex> selectFacilityAnnexList(FacilityAnnex facilityAnnex)
+    {
+        return facilityAnnexMapper.selectFacilityAnnexList(facilityAnnex);
+    }
+
+    /**
+     * 鏂板璁惧妗f闄勪欢
+     *
+     * @param facilityAnnex 璁惧妗f闄勪欢
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertFacilityAnnex(FacilityAnnex facilityAnnex)
+    {
+        facilityAnnex.setCreateTime(DateUtils.getNowDate());
+        return facilityAnnexMapper.insertFacilityAnnex(facilityAnnex);
+    }
+
+    /**
+     * 淇敼璁惧妗f闄勪欢
+     *
+     * @param facilityAnnex 璁惧妗f闄勪欢
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateFacilityAnnex(FacilityAnnex facilityAnnex)
+    {
+        facilityAnnex.setUpdateTime(DateUtils.getNowDate());
+        return facilityAnnexMapper.updateFacilityAnnex(facilityAnnex);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎璁惧妗f闄勪欢
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑璁惧妗f闄勪欢ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteFacilityAnnexByIds(String[] ids)
+    {
+        return facilityAnnexMapper.deleteFacilityAnnexByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎璁惧妗f闄勪欢淇℃伅
+     *
+     * @param id 璁惧妗f闄勪欢ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteFacilityAnnexById(String id)
+    {
+        return facilityAnnexMapper.deleteFacilityAnnexById(id);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/FacilityArchivesServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/FacilityArchivesServiceImpl.java
new file mode 100644
index 0000000..76beb0c
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/FacilityArchivesServiceImpl.java
@@ -0,0 +1,285 @@
+package com.zhitan.basicdata.services.impl;
+
+import com.zhitan.basicdata.domain.FacilityArchives;
+import com.zhitan.basicdata.mapper.FacilityArchivesMapper;
+import com.zhitan.basicdata.services.IFacilityArchivesService;
+import com.zhitan.common.core.domain.entity.SysDictData;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.exception.CustomException;
+import com.zhitan.common.utils.DateUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.system.mapper.SysDictDataMapper;
+import com.zhitan.system.service.impl.SysUserServiceImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+/**
+ * 璁惧妗fService涓氬姟灞傚鐞�
+ *
+ * @author zhaowei
+ * @date 2020-02-24
+ */
+@Service
+public class FacilityArchivesServiceImpl implements IFacilityArchivesService
+{
+    @Autowired
+    private FacilityArchivesMapper facilityArchivesMapper;
+
+    @Autowired
+    private SysDictDataMapper dictDataMapper;
+
+    private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
+
+
+    /**
+     * 鏌ヨ璁惧妗f
+     *
+     * @param id 璁惧妗fID
+     * @return 璁惧妗f
+     */
+    @Override
+    public FacilityArchives selectFacilityArchivesById(String id)
+    {
+        return facilityArchivesMapper.selectFacilityArchivesById(id);
+    }
+
+    /**
+     * 鏌ヨ璁惧妗f鏍规嵁code
+     *
+     * @param facilityArchives 璁惧妗fcode
+     * @return 璁惧妗f
+     */
+    @Override
+    public FacilityArchives selectFacilityArchivesByCode(FacilityArchives facilityArchives)
+    {
+        return facilityArchivesMapper.selectFacilityArchivesByCode(facilityArchives);
+    }
+
+    /**
+     * 鏌ヨ璁惧妗f鍒楄〃
+     *
+     * @param facilityArchives 璁惧妗f
+     * @return 璁惧妗f
+     */
+    @Override
+    public List<FacilityArchives> selectFacilityArchivesList(FacilityArchives facilityArchives)
+    {
+        return facilityArchivesMapper.selectFacilityArchivesList(facilityArchives);
+    }
+
+    /**
+     * 鏌ヨ璁惧妗f鍒楄〃瀵煎嚭鍒楄〃
+     *
+     * @param facilityArchives 璁惧妗f
+     * @return 璁惧妗f
+     */
+    @Override
+    public List<FacilityArchives> excelFacilityArchivesList(FacilityArchives facilityArchives)
+    {
+        return facilityArchivesMapper.excelFacilityArchivesList(facilityArchives);
+    }
+
+    /**
+     * 鏂板璁惧妗f
+     *
+     * @param facilityArchives 璁惧妗f
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertFacilityArchives(FacilityArchives facilityArchives)
+    {
+        facilityArchives.setCreateTime(DateUtils.getNowDate());
+        return facilityArchivesMapper.insertFacilityArchives(facilityArchives);
+    }
+
+    /**
+     * 淇敼璁惧妗f
+     *
+     * @param facilityArchives 璁惧妗f
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateFacilityArchives(FacilityArchives facilityArchives)
+    {
+        facilityArchives.setUpdateTime(DateUtils.getNowDate());
+        return facilityArchivesMapper.updateFacilityArchives(facilityArchives);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎璁惧妗f
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑璁惧妗fID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteFacilityArchivesByIds(String[] ids)
+    {
+        return facilityArchivesMapper.deleteFacilityArchivesByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎璁惧妗f淇℃伅
+     *
+     * @param id 璁惧妗fID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteFacilityArchivesById(String id)
+    {
+        return facilityArchivesMapper.deleteFacilityArchivesById(id);
+    }
+
+
+    /**
+     * 鎵归噺妫�瀹氭仮澶嶈澶囨。妗�
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑璁惧妗fID
+     * @return 缁撴灉
+     */
+    @Override
+    public int resetFacilityArchivesByIds(String[] ids)
+    {
+        return facilityArchivesMapper.resetFacilityArchivesByIds(ids);
+    }
+
+   /* *//**
+     * 妫�瀹氭仮澶嶈澶囨。妗堜俊鎭�
+     *
+     * @param id 璁惧妗fID
+     * @return 缁撴灉
+     *//*
+    @Override
+    public int resetFacilityArchivesById(String[] id)
+    {
+        return facilityArchivesMapper.resetFacilityArchivesById(id);
+    }
+*/
+    /**
+     * Excel瀵煎叆 璁惧妗f缁存姢淇℃伅
+     *
+     * @param facilityArchivesList  瑕佸鍏ョ殑璁惧妗f闆嗗悎
+     * @param loginUser 鐧诲綍鐢ㄦ埛瀵硅薄
+     * @return 缁撴灉
+     */
+    @Override
+    public String excelImpSave(List<FacilityArchives> facilityArchivesList, LoginUser loginUser)
+    {
+
+        if (StringUtils.isNull(facilityArchivesList) || facilityArchivesList.size() == 0)
+        {
+            throw new CustomException("瀵煎叆璁惧妗f涓嶈兘涓虹┖锛�");
+        }
+        int successNum = 0;
+        int failureNum = 0;
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+        //1銆佸瓧鍏告暟鎹炕璇�
+        // 璁惧绫诲瀷
+        List<SysDictData> facilityTypeList = dictDataMapper.selectDictDataByType("facility_type");
+        Map<String,String> facilityTypeMap = this.initDictMap(facilityTypeList);
+        // 浣跨敤鍒嗗巶
+        List<SysDictData> facilityBranchList = dictDataMapper.selectDictDataByType(
+                "branch_factory");
+        Map<String,String> facilityBranchMap = this.initDictMap(facilityBranchList);
+        //鑳借�楃瓑绾�
+        List<SysDictData> facilityGradeList = dictDataMapper.selectDictDataByType(
+                "facility_grade");
+        Map<String,String> facilityGradeMap = this.initDictMap(facilityGradeList);
+        for (FacilityArchives facilityArchives : facilityArchivesList)
+        {
+            try
+            {
+
+                //  妫�瀹氬懆鏈熴�佹彁閱掑懆鏈� 瀹氫箟鐨処nteger绫诲瀷锛屽鏋滄暟鎹笉鍖归厤浼氶粯璁や负0
+                facilityArchives.setCheckCycle(facilityArchives.getCheckCycle()==null?1:facilityArchives.getCheckCycle());
+                facilityArchives.setReminderCycle(facilityArchives.getReminderCycle()==null?1:facilityArchives.getReminderCycle());
+                // 2楠岃瘉 缂栫爜鏄惁瀛樺湪
+                FacilityArchives chekcFacilityImplement = facilityArchivesMapper.selectFacilityArchivesByCode(facilityArchives);
+                if (StringUtils.isNull(chekcFacilityImplement))
+                {
+                    //璁剧疆涓婚敭
+                    facilityArchives.setId(UUID.randomUUID().toString());
+                    //缈昏瘧 璁惧绫诲瀷 鏃犳垨鑰呭�间笉瀵瑰垯璁剧疆涓虹┖瀛楃涓�
+                    String facilityType= StringUtils.nvl(facilityTypeMap.get(facilityArchives.getFacilityType()+""),"");
+                    //鍒ゆ柇鐘舵�佹槸鍚︽纭�
+                    if(StringUtils.isEmpty(facilityType))
+                    {
+                        failureNum++;
+                        failureMsg.append("<br/>" + failureNum + "銆佺紪鍙� " + facilityArchives.getCode() + " 鐨勮澶囩被鍨嬮敊璇�");
+                        continue;
+                    }
+                    facilityArchives.setFacilityType(facilityType+"");
+                    //缈昏瘧 浣跨敤鍒嗗巶  鏃犳垨鑰呭�间笉瀵瑰垯璁剧疆涓虹┖瀛楃涓�
+                    String branchFactory= StringUtils.nvl(facilityBranchMap.get(facilityArchives.getBranchFactory()+""),"");
+                    if(StringUtils.isEmpty(branchFactory))
+                    {
+                        failureNum++;
+                        failureMsg.append("<br/>" + failureNum + "銆佺紪鍙� " + facilityArchives.getCode() + " 鐨勪娇鐢ㄥ垎鍘傞敊璇�");
+                        continue;
+                    }
+                    facilityArchives.setBranchFactory(branchFactory);
+
+                    //缈昏瘧 鑳借�楃瓑绾�  鏃犳垨鑰呭�间笉瀵瑰垯璁剧疆涓虹┖瀛楃涓�
+                    String facilityGrade= StringUtils.nvl(facilityGradeMap.get(facilityArchives.getFacilityGrade()+""),"");
+                    if(StringUtils.isEmpty(facilityGrade))
+                    {
+                        failureNum++;
+                        failureMsg.append("<br/>" + failureNum + "銆佺紪鍙� " + facilityArchives.getCode() + " 鐨勮兘鑰楃瓑绾ч敊璇�");
+                        continue;
+                    }
+                    facilityArchives.setFacilityGrade(facilityGrade);
+
+                    //璁剧疆寤虹珛浜哄拰寤虹珛鏃堕棿
+                    facilityArchives.setCreateBy(loginUser.getUsername());
+                    facilityArchives.setCreateTime(new Date());
+                    //瀛樺偍涓�鏉℃暟鎹�
+                    this.insertFacilityArchives(facilityArchives);
+                    successNum++;
+                    successMsg.append("<br/>" + successNum + "銆佺紪鍙� " + facilityArchives.getCode() + " 瀵煎叆鎴愬姛");
+                }
+                else
+                {
+                    failureNum++;
+                    failureMsg.append("<br/>" + failureNum + "銆佺紪鍙� " + facilityArchives.getCode() + " 宸插瓨鍦�");
+                }
+            }
+            catch (Exception e)
+            {
+                failureNum++;
+                String msg = "<br/>" + failureNum + "銆佺紪鍙� " + facilityArchives.getCode() + " 瀵煎叆澶辫触锛�";
+                failureMsg.append(msg + e.getMessage());
+                log.error(msg, e);
+            }
+        }
+        if (failureNum > 0)
+        {
+            failureMsg.insert(0, "寰堟姳姝夛紝瀵煎叆澶辫触锛佸叡 " + failureNum + " 鏉℃暟鎹牸寮忎笉姝g‘锛岄敊璇涓嬶細");
+            throw new CustomException(failureMsg.toString());
+        }
+        else
+        {
+            successMsg.insert(0, "鎭枩鎮紝鏁版嵁宸插叏閮ㄥ鍏ユ垚鍔燂紒鍏� " + successNum + " 鏉★紝鏁版嵁濡備笅锛�");
+        }
+        return successMsg.toString();
+    }
+
+    /**
+     * 灏嗗瓧鍏哥被鍨� 瀵瑰簲鐨� 瀛楀吀闆嗗悎  瀛樺叆map涓娇鐢�
+     * @param sysDictDataList
+     * @return
+     */
+    public Map initDictMap(List<SysDictData> sysDictDataList)
+    {
+        Map<String,String> map = new HashMap<String,String>();
+        for(SysDictData sysDictData : sysDictDataList)
+        {
+            //瀛樻斁 key=鏍囩鍚嶅瓧  value鏄� 璁剧疆鍊�
+            map.put(sysDictData.getDictLabel(),sysDictData.getDictValue());
+        }
+        return map;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/MeterAnnexServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/MeterAnnexServiceImpl.java
new file mode 100644
index 0000000..bbbd064
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/MeterAnnexServiceImpl.java
@@ -0,0 +1,97 @@
+package com.zhitan.basicdata.services.impl;
+
+import com.zhitan.basicdata.domain.MeterAnnex;
+import com.zhitan.basicdata.mapper.MeterAnnexMapper;
+import com.zhitan.basicdata.services.IMeterAnnexService;
+import com.zhitan.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 璁¢噺鍣ㄥ叿妗f闄勪欢Service涓氬姟灞傚鐞�
+ * 
+ * @author zhaowei
+ * @date 2020-02-14
+ */
+@Service
+public class MeterAnnexServiceImpl implements IMeterAnnexService 
+{
+    @Autowired
+    private MeterAnnexMapper meterAnnexMapper;
+
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿妗f闄勪欢
+     * 
+     * @param id 璁¢噺鍣ㄥ叿妗f闄勪欢ID
+     * @return 璁¢噺鍣ㄥ叿妗f闄勪欢
+     */
+    @Override
+    public MeterAnnex selectMeterAnnexById(String id)
+    {
+        return meterAnnexMapper.selectMeterAnnexById(id);
+    }
+
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿妗f闄勪欢鍒楄〃
+     * 
+     * @param meterAnnex 璁¢噺鍣ㄥ叿妗f闄勪欢
+     * @return 璁¢噺鍣ㄥ叿妗f闄勪欢
+     */
+    @Override
+    public List<MeterAnnex> selectMeterAnnexList(MeterAnnex meterAnnex)
+    {
+        return meterAnnexMapper.selectMeterAnnexList(meterAnnex);
+    }
+
+    /**
+     * 鏂板璁¢噺鍣ㄥ叿妗f闄勪欢
+     * 
+     * @param meterAnnex 璁¢噺鍣ㄥ叿妗f闄勪欢
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertMeterAnnex(MeterAnnex meterAnnex)
+    {
+        meterAnnex.setCreateTime(DateUtils.getNowDate());
+        return meterAnnexMapper.insertMeterAnnex(meterAnnex);
+    }
+
+    /**
+     * 淇敼璁¢噺鍣ㄥ叿妗f闄勪欢
+     * 
+     * @param meterAnnex 璁¢噺鍣ㄥ叿妗f闄勪欢
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateMeterAnnex(MeterAnnex meterAnnex)
+    {
+        meterAnnex.setUpdateTime(DateUtils.getNowDate());
+        return meterAnnexMapper.updateMeterAnnex(meterAnnex);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎璁¢噺鍣ㄥ叿妗f闄勪欢
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑璁¢噺鍣ㄥ叿妗f闄勪欢ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteMeterAnnexByIds(String[] ids)
+    {
+        return meterAnnexMapper.deleteMeterAnnexByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎璁¢噺鍣ㄥ叿妗f闄勪欢淇℃伅
+     * 
+     * @param id 璁¢噺鍣ㄥ叿妗f闄勪欢ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteMeterAnnexById(String id)
+    {
+        return meterAnnexMapper.deleteMeterAnnexById(id);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/MeterImplementCountServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/MeterImplementCountServiceImpl.java
new file mode 100644
index 0000000..9ea91e9
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/MeterImplementCountServiceImpl.java
@@ -0,0 +1,97 @@
+package com.zhitan.basicdata.services.impl;
+
+import com.zhitan.basicdata.domain.MeterImplementCount;
+import com.zhitan.basicdata.mapper.MeterImplementCountMapper;
+import com.zhitan.basicdata.services.IMeterImplementCountService;
+import com.zhitan.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 璁¢噺鍣ㄥ叿缁熻鏌ヨService涓氬姟灞傚鐞�
+ * 
+ * @author zhaowei
+ * @date 2020-02-21
+ */
+@Service
+public class MeterImplementCountServiceImpl implements IMeterImplementCountService 
+{
+    @Autowired
+    private MeterImplementCountMapper meterImplementCountMapper;
+
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * 
+     * @param code 璁¢噺鍣ㄥ叿缁熻鏌ヨID
+     * @return 璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     */
+    @Override
+    public MeterImplementCount selectMeterImplementCountById(String code)
+    {
+        return meterImplementCountMapper.selectMeterImplementCountById(code);
+    }
+
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿缁熻鏌ヨ鍒楄〃
+     * 
+     * @param meterImplementCount 璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * @return 璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     */
+    @Override
+    public List<MeterImplementCount> selectMeterImplementCountList(MeterImplementCount meterImplementCount)
+    {
+        return meterImplementCountMapper.selectMeterImplementCountList(meterImplementCount);
+    }
+
+    /**
+     * 鏂板璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * 
+     * @param meterImplementCount 璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertMeterImplementCount(MeterImplementCount meterImplementCount)
+    {
+        meterImplementCount.setCreateTime(DateUtils.getNowDate());
+        return meterImplementCountMapper.insertMeterImplementCount(meterImplementCount);
+    }
+
+    /**
+     * 淇敼璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * 
+     * @param meterImplementCount 璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateMeterImplementCount(MeterImplementCount meterImplementCount)
+    {
+        meterImplementCount.setUpdateTime(DateUtils.getNowDate());
+        return meterImplementCountMapper.updateMeterImplementCount(meterImplementCount);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎璁¢噺鍣ㄥ叿缁熻鏌ヨ
+     * 
+     * @param codes 闇�瑕佸垹闄ょ殑璁¢噺鍣ㄥ叿缁熻鏌ヨID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteMeterImplementCountByIds(String[] codes)
+    {
+        return meterImplementCountMapper.deleteMeterImplementCountByIds(codes);
+    }
+
+    /**
+     * 鍒犻櫎璁¢噺鍣ㄥ叿缁熻鏌ヨ淇℃伅
+     * 
+     * @param code 璁¢噺鍣ㄥ叿缁熻鏌ヨID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteMeterImplementCountById(String code)
+    {
+        return meterImplementCountMapper.deleteMeterImplementCountById(code);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/MeterImplementServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/MeterImplementServiceImpl.java
new file mode 100644
index 0000000..139e2a1
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/MeterImplementServiceImpl.java
@@ -0,0 +1,354 @@
+package com.zhitan.basicdata.services.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.basicdata.domain.MeterImplement;
+import com.zhitan.basicdata.domain.MeterImplementExcel;
+import com.zhitan.basicdata.mapper.MeterImplementMapper;
+import com.zhitan.basicdata.services.IMeterImplementService;
+import com.zhitan.common.core.domain.entity.SysDictData;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.enums.IndexType;
+import com.zhitan.common.exception.CustomException;
+import com.zhitan.common.utils.DateUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.gatewaysetting.domain.GatewaySetting;
+import com.zhitan.gatewaysetting.mapper.GatewaySettingMapper;
+import com.zhitan.model.domain.DaqTemplate;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.mapper.DaqTemplateMapper;
+import com.zhitan.model.mapper.EnergyIndexMapper;
+import com.zhitan.system.mapper.SysDictDataMapper;
+import com.zhitan.system.service.impl.SysUserServiceImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+/**
+ * 璁¢噺鍣ㄥ叿妗f缁存姢Service涓氬姟灞傚鐞�
+ *
+ * @author zhaowei
+ * @date 2020-02-12
+ */
+@Service
+public class MeterImplementServiceImpl implements IMeterImplementService
+{
+    @Autowired
+    private MeterImplementMapper meterImplementMapper;
+
+    @Autowired
+    private DaqTemplateMapper daqTemplateMapper;
+
+    @Autowired
+    private EnergyIndexMapper energyIndexMapper;
+
+    @Autowired
+    private SysDictDataMapper dictDataMapper;
+
+    private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
+    @Autowired
+    private GatewaySettingMapper gatewaySettingMapper;
+
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢
+     *
+     * @param id 璁¢噺鍣ㄥ叿妗f缁存姢ID
+     * @return 璁¢噺鍣ㄥ叿妗f缁存姢
+     */
+    @Override
+    public MeterImplement selectMeterImplementById(String id)
+    {
+        return meterImplementMapper.selectMeterImplementById(id);
+    }
+
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢
+     *
+     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢 缂栧彿
+     * @return 璁¢噺鍣ㄥ叿妗f缁存姢
+     */
+    @Override
+    public MeterImplement selectMeterImplementByCode(MeterImplement meterImplement) {
+        return meterImplementMapper.selectMeterImplementByCode(meterImplement);
+    }
+
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃
+     *
+     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
+     * @return 璁¢噺鍣ㄥ叿妗f缁存姢
+     */
+    @Override
+    public List<MeterImplement> selectMeterImplementList(MeterImplement meterImplement)
+    {
+        return meterImplementMapper.selectMeterImplementList(meterImplement);
+    }
+    /**
+     * 瀵煎嚭璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃
+     *
+     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
+     * @return 璁¢噺鍣ㄥ叿妗f缁存姢
+     */
+    @Override
+    public List<MeterImplementExcel> exectMeterImplementList(MeterImplement meterImplement)
+    {
+        return meterImplementMapper.exectMeterImplementList(meterImplement);
+    }
+
+    /**
+     * 鏂板璁¢噺鍣ㄥ叿妗f缁存姢
+     *
+     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertMeterImplement(MeterImplement meterImplement)
+    {
+        meterImplement.setCreateTime(DateUtils.getNowDate());
+
+        final int i = meterImplementMapper.insertMeterImplement(meterImplement);
+
+        DaqTemplate query = new DaqTemplate();
+        query.setDeviceType(meterImplement.getMeterType());
+        List<DaqTemplate> daqTemplates = daqTemplateMapper.selectDaqTemplateList(query);
+        if (daqTemplates.isEmpty()) {
+            return i;
+        }
+
+        List<EnergyIndex> energyIndices = new ArrayList<>();
+        daqTemplates.forEach(daqTemplate -> {
+            EnergyIndex energyIndex = new EnergyIndex();
+            energyIndex.setIndexId(UUID.randomUUID().toString());
+            energyIndex.setCode(meterImplement.getCode() + "_" + daqTemplate.getCode());
+            energyIndex.setName(daqTemplate.getName());
+            energyIndex.setUnitId(daqTemplate.getUnit());
+            energyIndex.setIndexType(IndexType.COLLECT);
+            energyIndex.setMeterId(meterImplement.getId());
+            energyIndices.add(energyIndex);
+        });
+
+        energyIndexMapper.deleteIndexByMeterId(meterImplement.getId());
+        energyIndexMapper.insertEnergyIndices(energyIndices);
+
+        //鍒ゆ柇鏄惁鍏宠仈缃戝叧淇℃伅锛屽鍔犱俊鎭�
+        if (StringUtils.isNotBlank(meterImplement.getGatewayId())) {
+            GatewaySetting gatewaySetting = new GatewaySetting();
+            gatewaySetting.setId(meterImplement.getGatewayId());
+            gatewaySetting.setDeviceNum(1);
+            gatewaySetting.setPtNum(energyIndices.size());
+            //鏇存柊鏁版嵁
+            gatewaySettingMapper.addNum(gatewaySetting);
+        }
+
+        return i;
+    }
+
+    /**
+     * 淇敼璁¢噺鍣ㄥ叿妗f缁存姢
+     *
+     * @param meterImplement 璁¢噺鍣ㄥ叿妗f缁存姢
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateMeterImplement(MeterImplement meterImplement)
+    {
+        meterImplement.setUpdateTime(DateUtils.getNowDate());
+        //鍒ゆ柇涔嬪墠鏄惁宸茬粡缁戝畾锛屽鏋滃凡缁忕粦瀹氾紝灏嗗師缃戝叧鍏宠仈鐨勮閲忓櫒鍏峰垹闄わ紝骞跺湪鏂板叧鑱旂殑缃戝叧鍐呭鍔狅紙璁¢噺鍣ㄥ叿鏁板拰娴嬬偣鏁伴噺锛�
+        //涔嬪墠鏈粦瀹氾紝淇敼鏃剁粦瀹氫簡锛氬湪鍏宠仈鐨勭綉鍏充笂澧炲姞
+        MeterImplement beforeUpdate = meterImplementMapper.selectMeterImplementById(meterImplement.getId());
+
+        if (StringUtils.isBlank(beforeUpdate.getGatewayId()) && StringUtils.isNotBlank(meterImplement.getGatewayId())) {
+            //鍘熺綉鍏虫病鍏宠仈锛屼慨鏀规椂鍏宠仈鐨勬柊缃戝叧锛氱洿鎺ュ鍔�
+            //鏇存柊鏁版嵁
+            gatewaySettingMapper.addNum(getGatewaySetting(meterImplement));
+
+        }else if (StringUtils.isNotBlank(beforeUpdate.getGatewayId())
+                && StringUtils.isNotBlank(meterImplement.getGatewayId())
+                && !beforeUpdate.getGatewayId().equals(meterImplement.getGatewayId())){
+            //鍘熺綉鍏冲叧鑱旓紝淇敼鏃舵崲浜嗙綉鍏筹細鍘熺綉鍏虫暟閲忔墸鍑忥紝鏂扮綉鍏虫暟閲忓鍔�
+            //鏇存柊鍘熺綉鍏�
+            gatewaySettingMapper.subNum(getGatewaySetting(beforeUpdate));
+            //鏇存柊鏂扮綉鍏�
+            gatewaySettingMapper.addNum(getGatewaySetting(meterImplement));
+
+        }else if (StringUtils.isNotBlank(beforeUpdate.getGatewayId()) && StringUtils.isBlank(meterImplement.getGatewayId())){
+            //鍘熸潵鍏宠仈浜嗙綉鍏筹紝淇敼鏃跺垹闄ゆ帀浜嗭紝鎵e噺鏁伴噺
+            gatewaySettingMapper.subNum(getGatewaySetting(beforeUpdate));
+        }
+
+        return meterImplementMapper.updateMeterImplement(meterImplement);
+    }
+
+    /**
+     * 鏍规嵁鍏宠仈鐨勭綉鍏充富閿幏鍙栨祴鐐规暟閲�
+     * @param meterImplement
+     * @return
+     */
+    public GatewaySetting getGatewaySetting(MeterImplement meterImplement) {
+        GatewaySetting gatewaySetting = new GatewaySetting();
+        gatewaySetting.setId(meterImplement.getGatewayId());
+        gatewaySetting.setDeviceNum(1);
+        QueryWrapper<EnergyIndex> energyIndexQueryWrapper = new QueryWrapper<>();
+        energyIndexQueryWrapper.eq("meter_id", meterImplement.getId());
+        int ptNum=energyIndexMapper.selectList(energyIndexQueryWrapper).size();
+        gatewaySetting.setPtNum(ptNum);
+        gatewaySetting.setUpdateBy(meterImplement.getUpdateBy());
+        return gatewaySetting;
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎璁¢噺鍣ㄥ叿妗f缁存姢
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑璁¢噺鍣ㄥ叿妗f缁存姢ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteMeterImplementByIds(String[] ids)
+    {
+        return meterImplementMapper.deleteMeterImplementByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎璁¢噺鍣ㄥ叿妗f缁存姢淇℃伅
+     *
+     * @param id 璁¢噺鍣ㄥ叿妗f缁存姢ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteMeterImplementById(String id)
+    {
+        return meterImplementMapper.deleteMeterImplementById(id);
+    }
+
+    /**
+     * Excel瀵煎叆 璁¢噺鍣ㄥ叿妗f缁存姢淇℃伅
+     *
+     * @param meterImplementList  瑕佸鍏ョ殑璁¢噺鍣ㄥ叿妗f闆嗗悎
+     * @param loginUser 鐧诲綍鐢ㄦ埛瀵硅薄
+     * @return 缁撴灉
+     */
+    @Override
+    public String excelImpSave(List<MeterImplement> meterImplementList, LoginUser loginUser)
+    {
+
+        if (StringUtils.isNull(meterImplementList) || meterImplementList.size() == 0)
+        {
+            throw new CustomException("瀵煎叆璁¢噺鍣ㄥ叿妗f涓嶈兘涓虹┖锛�");
+        }
+        int successNum = 0;
+        int failureNum = 0;
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+        //1銆佸瓧鍏告暟鎹炕璇�
+        //璁¢噺鍣ㄥ叿鐘舵��
+        List<SysDictData> meterStatusList = dictDataMapper.selectDictDataByType("meter_status");
+        Map<String,String> meterStatusMap = this.initDictMap(meterStatusList);
+        //璁¢噺鍣ㄥ叿绫诲瀷
+        List<SysDictData> meterTypeList = dictDataMapper.selectDictDataByType(
+                "sys_device_type");
+        Map<String,String> meterTypeMap = this.initDictMap(meterTypeList);
+
+        for (MeterImplement meterImplement : meterImplementList)
+        {
+            try
+            {
+                //  妫�瀹氬懆鏈熴�佹彁閱掑懆鏈� 瀹氫箟鐨処nteger绫诲瀷锛屽鏋滄暟鎹笉鍖归厤浼氶粯璁や负0
+                meterImplement.setCheckCycle(meterImplement.getCheckCycle()==null?1:meterImplement.getCheckCycle());
+                meterImplement.setReminderCycle(meterImplement.getReminderCycle()==null?1:meterImplement.getReminderCycle());
+                // 2楠岃瘉 缂栫爜鏄惁瀛樺湪
+                MeterImplement chekcMeterImplement = meterImplementMapper.selectMeterImplementByCode(meterImplement);
+                if (StringUtils.isNull(chekcMeterImplement))
+                {
+                    //璁剧疆涓婚敭
+                    meterImplement.setId(UUID.randomUUID().toString());
+                    //缈昏瘧鍣ㄥ叿鐘舵�� 鏃犳垨鑰呭�间笉瀵瑰垯璁剧疆涓虹┖瀛楃涓�
+                    String meterStatus= StringUtils.nvl(meterStatusMap.get(meterImplement.getMeterStatus()+""),"");
+                    //鍒ゆ柇鐘舵�佹槸鍚︽纭�
+                    if(StringUtils.isEmpty(meterStatus))
+                    {
+                        failureNum++;
+                        failureMsg.append("<br/>" + failureNum + "銆佺紪鍙� " + meterImplement.getCode() + " 鐨勭姸鎬侀敊璇�");
+                        continue;
+                    }
+                    meterImplement.setMeterStatus(meterStatus);
+                    //缈昏瘧鍣ㄥ叿绉嶇被  鏃犳垨鑰呭�间笉瀵瑰垯璁剧疆涓虹┖瀛楃涓�
+                    String meterType= StringUtils.nvl(meterTypeMap.get(meterImplement.getMeterType()+""),"");
+                    if(StringUtils.isEmpty(meterType))
+                    {
+                        failureNum++;
+                        failureMsg.append("<br/>" + failureNum + "銆佺紪鍙� " + meterImplement.getCode() + " 鐨勭绫婚敊璇�");
+                        continue;
+                    }
+                    meterImplement.setMeterType(meterType);
+                    //璁剧疆寤虹珛浜哄拰寤虹珛鏃堕棿
+                    meterImplement.setCreateBy(loginUser.getUsername());
+                    meterImplement.setCreateTime(new Date());
+                    //瀛樺偍涓�鏉℃暟鎹�
+                    this.insertMeterImplement(meterImplement);
+                    successNum++;
+                    successMsg.append("<br/>" + successNum + "銆佺紪鍙� " + meterImplement.getCode() + " 瀵煎叆鎴愬姛");
+                }
+                else
+                {
+                    failureNum++;
+                    failureMsg.append("<br/>" + failureNum + "銆佺紪鍙� " + meterImplement.getCode() + " 宸插瓨鍦�");
+                }
+            }
+            catch (Exception e)
+            {
+                failureNum++;
+                String msg = "<br/>" + failureNum + "銆佺紪鍙� " + meterImplement.getCode() + " 瀵煎叆澶辫触锛�";
+                failureMsg.append(msg + e.getMessage());
+                log.error(msg, e);
+            }
+        }
+        if (failureNum > 0) {
+            failureMsg.insert(0, "寰堟姳姝夛紝瀵煎叆澶辫触锛佸叡 " + failureNum + " 鏉℃暟鎹牸寮忎笉姝g‘锛岄敊璇涓嬶細");
+            throw new CustomException(failureMsg.toString());
+        } else {
+            successMsg.insert(0, "鎭枩鎮紝鏁版嵁宸插叏閮ㄥ鍏ユ垚鍔燂紒鍏� " + successNum + " 鏉★紝鏁版嵁濡備笅锛�");
+        }
+        return successMsg.toString();
+    }
+
+    /**
+     * 鏍规嵁id闆嗗悎鏌ヨ璁¢噺鍣ㄥ叿淇℃伅
+     *
+     * @param meterIdList 璁¢噺鍣ㄥ叿id
+     * @return
+     */
+    @Override
+    public List<MeterImplement> listMeterImplementByIds(List<String> meterIdList) {
+        return meterImplementMapper.listMeterImplementByIds(meterIdList);
+    }
+
+    /**
+     * 灏嗗瓧鍏哥被鍨� 瀵瑰簲鐨� 瀛楀吀闆嗗悎  瀛樺叆map涓娇鐢�
+     *
+     * @param sysDictDataList
+     * @return
+     */
+    public Map initDictMap(List<SysDictData> sysDictDataList) {
+        Map<String, String> map = new HashMap<String, String>();
+        for (SysDictData sysDictData : sysDictDataList) {
+            //瀛樻斁 key=鏍囩鍚嶅瓧  value鏄� 璁剧疆鍊�
+            map.put(sysDictData.getDictLabel(), sysDictData.getDictValue());
+        }
+        return map;
+    }
+
+    @Override
+    public Page<MeterImplement> selectMeterImplementPage(MeterImplement meterImplement, Long pageNum, Long pageSize) {
+        LambdaQueryWrapper<MeterImplement> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.like(StringUtils.isNotEmpty(meterImplement.getCode()),MeterImplement::getCode,meterImplement.getCode());
+        queryWrapper.like(StringUtils.isNotEmpty(meterImplement.getMeterName()),MeterImplement::getMeterName,meterImplement.getMeterName());
+        queryWrapper.eq(StringUtils.isNotEmpty(meterImplement.getMeterType()),MeterImplement::getMeterType,meterImplement.getMeterType());
+        queryWrapper.orderByDesc(MeterImplement::getCreateTime);
+        final Page<MeterImplement> meterImplementPage = meterImplementMapper.selectPage(new Page<>(pageNum, pageSize), queryWrapper);
+        return meterImplementPage;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/SysEnerclassServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/SysEnerclassServiceImpl.java
new file mode 100644
index 0000000..aa2edb3
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/SysEnerclassServiceImpl.java
@@ -0,0 +1,127 @@
+package com.zhitan.basicdata.services.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.basicdata.domain.SysEnerclass;
+import com.zhitan.basicdata.mapper.SysEnerclassMapper;
+import com.zhitan.basicdata.services.ISysEnerclassService;
+import com.zhitan.common.utils.SecurityUtils;
+import com.zhitan.common.utils.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 鑳芥簮鍝佺璁剧疆Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2020-02-10
+ */
+@Service
+public class SysEnerclassServiceImpl implements ISysEnerclassService
+{
+    @Autowired
+    private SysEnerclassMapper sysEnerclassMapper;
+
+    /**
+     * 鏌ヨ鑳芥簮鍝佺璁剧疆
+     *
+     * @param enerclassid 鑳芥簮鍝佺璁剧疆ID
+     * @return 鑳芥簮鍝佺璁剧疆
+     */
+    @Override
+    public SysEnerclass selectSysEnerclassById(Integer enerclassid)
+    {
+        return sysEnerclassMapper.selectSysEnerclassById(enerclassid);
+    }
+
+    /**
+     * 鏌ヨ鑳芥簮鍝佺璁剧疆鍒楄〃
+     *
+     * @param sysEnerclass 鑳芥簮鍝佺璁剧疆
+     * @return 鑳芥簮鍝佺璁剧疆
+     */
+    @Override
+    public List<SysEnerclass> selectSysEnerclassList(SysEnerclass sysEnerclass)
+    {
+        return sysEnerclassMapper.selectSysEnerclassList(sysEnerclass);
+    }
+
+    /**
+     * 鏂板鑳芥簮鍝佺璁剧疆
+     *
+     * @param sysEnerclass 鑳芥簮鍝佺璁剧疆
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertSysEnerclass(SysEnerclass sysEnerclass) {
+        //鑾峰彇褰撳墠鐧诲綍浜�
+        String nowMan = SecurityUtils.getUsername();
+        sysEnerclass.setModMan(nowMan);
+        sysEnerclass.setOprMan(nowMan);
+        sysEnerclass.setCreateBy(nowMan);
+        sysEnerclass.setUpdateBy(nowMan);
+        return sysEnerclassMapper.insertSysEnerclass(sysEnerclass);
+    }
+
+    /**
+     * 淇敼鑳芥簮鍝佺璁剧疆
+     *
+     * @param sysEnerclass 鑳芥簮鍝佺璁剧疆
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateSysEnerclass(SysEnerclass sysEnerclass) {
+        String nowMan = SecurityUtils.getUsername();
+        sysEnerclass.setModMan(nowMan);
+        sysEnerclass.setUpdateBy(nowMan);
+        return sysEnerclassMapper.updateSysEnerclass(sysEnerclass);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎鑳芥簮鍝佺璁剧疆
+     *
+     * @param enerclassids 闇�瑕佸垹闄ょ殑鑳芥簮鍝佺璁剧疆ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteSysEnerclassByIds(Integer[] enerclassids)
+    {
+        return sysEnerclassMapper.deleteSysEnerclassByIds(enerclassids);
+    }
+
+    /**
+     * 鍒犻櫎鑳芥簮鍝佺璁剧疆淇℃伅
+     *
+     * @param enerclassid 鑳芥簮鍝佺璁剧疆ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteSysEnerclassById(Integer enerclassid)
+    {
+        return sysEnerclassMapper.deleteSysEnerclassById(enerclassid);
+    }
+    /**
+     * 鏌ヨ涓�鏍风殑鑳芥簮鍚嶇О鏈夊嚑涓� 鑳芥簮鍚嶇О鍞竴鏍¢獙
+     */
+    @Override
+    public int selectSameEnergyNameNum(String enerclassname) {
+        return sysEnerclassMapper.selectSameEnergyNameNum(enerclassname);
+    }
+    /**
+     * 淇敼鐨勬椂鍊欐煡璇竴鏍疯兘婧愬悕绉扮殑id
+     */
+    @Override
+    public Integer selectIdByName(String enerclassname) {
+        return sysEnerclassMapper.selectIdByName(enerclassname);
+    }
+
+    @Override
+    public Page<SysEnerclass> selectSysEnerclassPage(SysEnerclass sysEnerclass, Long pageNum, Long pageSize) {
+        LambdaQueryWrapper<SysEnerclass> queryWrapper = new LambdaQueryWrapper<SysEnerclass>();
+        queryWrapper.like(StringUtils.isNotEmpty(sysEnerclass.getEnerclassname()),SysEnerclass::getEnerclassname,sysEnerclass.getEnerclassname());
+        queryWrapper.orderByDesc(SysEnerclass::getCreateTime);
+        return sysEnerclassMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/SysEnergyServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/SysEnergyServiceImpl.java
new file mode 100644
index 0000000..5a6e681
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/SysEnergyServiceImpl.java
@@ -0,0 +1,235 @@
+package com.zhitan.basicdata.services.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.basicdata.domain.SysEnergy;
+import com.zhitan.basicdata.domain.vo.EnergyTypeModel;
+import com.zhitan.basicdata.mapper.SysEnergyMapper;
+import com.zhitan.basicdata.services.ISysEnergyService;
+import com.zhitan.common.constant.UserConstants;
+import com.zhitan.common.utils.SecurityUtils;
+import com.zhitan.system.mapper.SysDictDataMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * energyService涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2020-02-12
+ */
+@Service
+public class SysEnergyServiceImpl implements ISysEnergyService
+{
+    @Autowired
+    private SysEnergyMapper sysEnergyMapper;
+    
+    @Autowired
+    private SysDictDataMapper sysDictDataMapper;
+
+    /**
+     * 鏌ヨenergy
+     *
+     * @param
+     * @return energy
+     */
+    @Override
+    public SysEnergy selectSysEnergyById(Integer enerid)
+    {
+        return sysEnergyMapper.selectSysEnergyById(enerid);
+    }
+
+    /**
+     * 鏌ヨenergy鍒楄〃
+     *
+     * @param sysEnergy energy
+     * @return energy
+     */
+    @Override
+    public List<SysEnergy> selectSysEnergyList(SysEnergy sysEnergy)
+    {
+        String s = "1";
+        //鏀惧叆  鏄惁鍌ㄥ瓨锛堝瓧绗︿覆锛�
+        List<SysEnergy> list = sysEnergyMapper.selectSysEnergyList(sysEnergy);
+        for (SysEnergy energy : list) {
+            if (UserConstants.YES.equals(energy.getIsstorage())) {
+                energy.setIsstorageString("鏄�");
+            }else {
+                energy.setIsstorageString("鍚�");
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 鏂板energy
+     *
+     * @param sysEnergy energy
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertSysEnergy(SysEnergy sysEnergy)
+    {
+        //鑾峰彇褰撳墠鐧诲綍浜�
+        String nowMan = SecurityUtils.getUsername();
+        sysEnergy.setModMan(nowMan);
+        sysEnergy.setOprMan(nowMan);
+        sysEnergy.setIsstorage(sysEnergy.getIsstorageString());
+        sysEnergy.setMuid(sysEnergy.getMuidString());
+        return sysEnergyMapper.insertSysEnergy(sysEnergy);
+    }
+
+    /**
+     * 淇敼energy
+     *
+     * @param sysEnergy energy
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateSysEnergy(SysEnergy sysEnergy)
+    {
+        String nowMan = SecurityUtils.getUsername();
+        sysEnergy.setModMan(nowMan);
+        sysEnergy.setIsstorage(sysEnergy.getIsstorageString());
+        sysEnergy.setMuid(sysEnergy.getMuidString());
+        return sysEnergyMapper.updateSysEnergy(sysEnergy);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎energy
+     *
+     * @param
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteSysEnergyByIds(Integer[] enerids)
+    {
+        return sysEnergyMapper.deleteSysEnergyByIds(enerids);
+    }
+
+    /**
+     * 鍒犻櫎energy淇℃伅
+     *
+     * @param
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteSysEnergyById(Integer enerid)
+    {
+        return sysEnergyMapper.deleteSysEnergyById(enerid);
+    }
+    /**
+     * 鏌ヨ鑳芥簮绫诲瀷涓嬫媺妗�
+     *
+     * @param
+     * @return 缁撴灉
+     */
+    @Override
+    public List getenerclassname() {
+        return sysEnergyMapper.getenerclassname();
+    }
+
+    @Override
+    public Integer getEnerClassid(String enerclassname) {
+        return sysEnergyMapper.getEnerClassid(enerclassname);
+    }
+
+    /**
+     * 鏌ヨ涓�鏍风殑鑳芥簮鍚嶇О鏈夊嚑涓� 鑳芥簮鍚嶇О鍞竴鏍¢獙
+     */
+    @Override
+    public SysEnergy selectSameEnergyNameNum(String enername) {
+        LambdaQueryWrapper<SysEnergy> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SysEnergy::getEnername,enername);
+        return sysEnergyMapper.selectOne(queryWrapper);
+    }
+    /**
+     * 淇敼鐨勬椂鍊欐煡璇竴鏍疯兘婧愬悕绉扮殑id
+     */
+    @Override
+    public Integer selectIdByName(String enername) {
+        return sysEnergyMapper.selectIdByName(enername);
+    }
+
+    @Override
+    public Integer getPriceCountByEnerid(SysEnergy sysEnergy) {
+        return sysEnergyMapper.getPriceCountByEnerid(sysEnergy);
+    }
+
+    @Override
+    public Integer insertEnergyPrice(SysEnergy sysEnergy) {
+        //鑾峰彇褰撳墠鐧诲綍浜�
+        String nowMan = SecurityUtils.getUsername();
+        sysEnergy.setModMan(nowMan);
+        sysEnergy.setOprMan(nowMan);
+        return sysEnergyMapper.insertEnergyPrice(sysEnergy);
+    }
+
+    @Override
+    public Integer updateEnergyPrice(SysEnergy sysEnergy) {
+        String nowMan = SecurityUtils.getUsername();
+        sysEnergy.setModMan(nowMan);
+        return sysEnergyMapper.updateEnergyPrice(sysEnergy);
+    }
+
+    @Override
+    public Integer getCoefficientCountByEnerid(Integer enerid) {
+        return sysEnergyMapper.getCoefficientCountByEnerid(enerid);
+    }
+
+    @Override
+    public Integer insertEnergyCoefficient(SysEnergy sysEnergy) {
+        //鑾峰彇褰撳墠鐧诲綍浜�
+        String nowMan = SecurityUtils.getUsername();
+        sysEnergy.setModMan(nowMan);
+        sysEnergy.setOprMan(nowMan);
+        return sysEnergyMapper.insertEnergyCoefficient(sysEnergy);
+    }
+
+    @Override
+    public Integer updateEnergyCoefficient(SysEnergy sysEnergy) {
+        String nowMan = SecurityUtils.getUsername();
+        sysEnergy.setModMan(nowMan);
+        return sysEnergyMapper.updateEnergyCoefficient(sysEnergy);
+    }
+
+    /**
+     * 鏌ヨ鎵�鏈夎兘婧愮被鍨嬩俊鎭�
+     *
+     * @return 鎵�鏈夎兘婧愮被鍨�
+     */
+    @Override
+    public List<EnergyTypeModel> listAllEnergyType() {
+        return sysEnergyMapper.listAllEnergyType();
+    }
+
+    /**
+     * 鏍规嵁code鏌ヨ鑳芥簮淇℃伅
+     *
+     * @param code 缂栧彿
+     * @return
+     */
+    @Override
+    public EnergyTypeModel getEnergyTypeByCode(String code) {
+        Optional<EnergyTypeModel> first = sysEnergyMapper.listAllEnergyType().stream()
+                .filter(li -> code.equals(li.getEnersno())).findFirst();
+        return first.orElse(null);
+    }
+
+    @Override
+    public Page<SysEnergy> selectSysEnergyPage(SysEnergy sysEnergy, Long pageNum, Long pageSize) {
+        
+        final Page<SysEnergy> sysEnergyPage = sysEnergyMapper.selectSysEnergyPage(sysEnergy,new Page<>(pageNum,pageSize));
+        return sysEnergyPage;
+    }
+
+    @Override
+    public SysEnergy selectSameEnergyCodeNum(String enersno) {
+        LambdaQueryWrapper<SysEnergy> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SysEnergy::getEnersno,enersno);
+        return sysEnergyMapper.selectOne(queryWrapper);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/Comprehensive.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/Comprehensive.java
new file mode 100644
index 0000000..253367b
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/Comprehensive.java
@@ -0,0 +1,386 @@
+package com.zhitan.comprehensivestatistics.domain;
+
+
+import com.zhitan.common.annotation.Excel;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+public  class Comprehensive implements Serializable {
+  private static final long serialVersionUID = -2777479013884125925L;
+  private String indexId;
+  @Excel(name = "鎸囨爣鍚嶇О")
+  private String indexName;
+  private String value;
+  private Date dataTime;
+  private String timeType;
+  @Excel(name = "1")
+  private Double value1;
+  @Excel(name = "2")
+  private Double value2;
+  @Excel(name = "3")
+  private Double value3;
+  @Excel(name = "4")
+  private Double value4;
+  @Excel(name = "5")
+  private Double value5;
+  @Excel(name = "6")
+  private Double value6;
+  @Excel(name = "7")
+  private Double value7;
+  @Excel(name = "8")
+  private Double value8;
+  @Excel(name = "9")
+  private Double value9;
+  @Excel(name = "10")
+  private Double value10;
+  @Excel(name = "11")
+  private Double value11;
+  @Excel(name = "12")
+  private Double value12;
+  @Excel(name = "13")
+  private Double value13;
+  @Excel(name = "14")
+  private Double value14;
+  @Excel(name = "15")
+  private Double value15;
+  @Excel(name = "16")
+  private Double value16;
+  @Excel(name = "17")
+  private Double value17;
+  @Excel(name = "18")
+  private Double value18;
+  @Excel(name = "19")
+  private Double value19;
+  @Excel(name = "20")
+  private Double value20;
+  @Excel(name = "21")
+  private Double value21;
+  @Excel(name = "22")
+  private Double value22;
+  @Excel(name = "23")
+  private Double value23;
+  @Excel(name = "24")
+  private Double value24;
+  @Excel(name = "25")
+  private Double value25;
+  @Excel(name = "16")
+  private Double value26;
+  @Excel(name = "27")
+  private Double value27;
+  @Excel(name = "28")
+  private Double value28;
+  @Excel(name = "29")
+  private Double value29;
+  @Excel(name = "30")
+  private Double value30;
+  @Excel(name = "31")
+  private Double value31;
+  private List<Map> tablehead =new ArrayList<>();
+  private List<Comprehensive> tabledata =new ArrayList<>();
+  public String getIndexId() {
+    return indexId;
+  }
+
+  public void setIndexId(String indexId) {
+    this.indexId = indexId;
+  }
+
+  public String getIndexName() {
+    return indexName;
+  }
+
+  public void setIndexName(String indexName) {
+    this.indexName = indexName;
+  }
+
+  public String getValue() {
+    return value;
+  }
+
+  public void setValue(String value) {
+    this.value = value;
+  }
+
+  public String getTimeType() {
+    return timeType;
+  }
+
+  public void setTimeType(String timeType) {
+    this.timeType = timeType;
+  }
+
+  public Date getDataTime() {
+    return dataTime;
+  }
+
+  public void setDataTime(Date dataTime) {
+    this.dataTime = dataTime;
+  }
+
+  public Double getValue1() {
+    return value1;
+  }
+
+  public void setValue1(Double value1) {
+    this.value1 = value1;
+  }
+
+  public Double getValue2() {
+    return value2;
+  }
+
+  public void setValue2(Double value2) {
+    this.value2 = value2;
+  }
+
+  public Double getValue3() {
+    return value3;
+  }
+
+  public void setValue3(Double value3) {
+    this.value3 = value3;
+  }
+
+  public Double getValue4() {
+    return value4;
+  }
+
+  public void setValue4(Double value4) {
+    this.value4 = value4;
+  }
+
+  public Double getValue5() {
+    return value5;
+  }
+
+  public void setValue5(Double value5) {
+    this.value5 = value5;
+  }
+
+  public Double getValue6() {
+    return value6;
+  }
+
+  public void setValue6(Double value6) {
+    this.value6 = value6;
+  }
+
+  public Double getValue7() {
+    return value7;
+  }
+
+  public void setValue7(Double value7) {
+    this.value7 = value7;
+  }
+
+  public Double getValue8() {
+    return value8;
+  }
+
+  public void setValue8(Double value8) {
+    this.value8 = value8;
+  }
+
+  public Double getValue9() {
+    return value9;
+  }
+
+  public void setValue9(Double value9) {
+    this.value9 = value9;
+  }
+
+  public Double getValue10() {
+    return value10;
+  }
+
+  public void setValue10(Double value10) {
+    this.value10 = value10;
+  }
+
+  public Double getValue11() {
+    return value11;
+  }
+
+  public void setValue11(Double value11) {
+    this.value11 = value11;
+  }
+
+  public Double getValue12() {
+    return value12;
+  }
+
+  public void setValue12(Double value12) {
+    this.value12 = value12;
+  }
+
+  public Double getValue13() {
+    return value13;
+  }
+
+  public void setValue13(Double value13) {
+    this.value13 = value13;
+  }
+
+  public Double getValue14() {
+    return value14;
+  }
+
+  public void setValue14(Double value14) {
+    this.value14 = value14;
+  }
+
+  public Double getValue15() {
+    return value15;
+  }
+
+  public void setValue15(Double value15) {
+    this.value15 = value15;
+  }
+
+  public Double getValue16() {
+    return value16;
+  }
+
+  public void setValue16(Double value16) {
+    this.value16 = value16;
+  }
+
+  public Double getValue17() {
+    return value17;
+  }
+
+  public void setValue17(Double value17) {
+    this.value17 = value17;
+  }
+
+  public Double getValue18() {
+    return value18;
+  }
+
+  public void setValue18(Double value18) {
+    this.value18 = value18;
+  }
+
+  public Double getValue19() {
+    return value19;
+  }
+
+  public void setValue19(Double value19) {
+    this.value19 = value19;
+  }
+
+  public Double getValue20() {
+    return value20;
+  }
+
+  public void setValue20(Double value20) {
+    this.value20 = value20;
+  }
+
+  public Double getValue21() {
+    return value21;
+  }
+
+  public void setValue21(Double value21) {
+    this.value21 = value21;
+  }
+
+  public Double getValue22() {
+    return value22;
+  }
+
+  public void setValue22(Double value22) {
+    this.value22 = value22;
+  }
+
+  public Double getValue23() {
+    return value23;
+  }
+
+  public void setValue23(Double value23) {
+    this.value23 = value23;
+  }
+
+  public Double getValue24() {
+    return value24;
+  }
+
+  public void setValue24(Double value24) {
+    this.value24 = value24;
+  }
+
+  public Double getValue25() {
+    return value25;
+  }
+
+  public void setValue25(Double value25) {
+    this.value25 = value25;
+  }
+
+  public Double getValue26() {
+    return value26;
+  }
+
+  public void setValue26(Double value26) {
+    this.value26 = value26;
+  }
+
+  public Double getValue27() {
+    return value27;
+  }
+
+  public void setValue27(Double value27) {
+    this.value27 = value27;
+  }
+
+  public Double getValue28() {
+    return value28;
+  }
+
+  public void setValue28(Double value28) {
+    this.value28 = value28;
+  }
+
+  public Double getValue29() {
+    return value29;
+  }
+
+  public void setValue29(Double value29) {
+    this.value29 = value29;
+  }
+
+  public Double getValue30() {
+    return value30;
+  }
+
+  public void setValue30(Double value30) {
+    this.value30 = value30;
+  }
+
+  public Double getValue31() {
+    return value31;
+  }
+
+  public void setValue31(Double value31) {
+    this.value31 = value31;
+  }
+
+  public List<Map> getTablehead() {
+    return tablehead;
+  }
+
+  public void setTablehead(List<Map> tablehead) {
+    this.tablehead = tablehead;
+  }
+  public List<Comprehensive> getTabledata() {
+    return tabledata;
+  }
+
+  public void setTabledata(List<Comprehensive> tabledata) {
+    this.tabledata = tabledata;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/ComprehensiveStatistics.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/ComprehensiveStatistics.java
new file mode 100644
index 0000000..211953c
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/ComprehensiveStatistics.java
@@ -0,0 +1,186 @@
+package com.zhitan.comprehensivestatistics.domain;
+
+
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.enums.Quality;
+import com.zhitan.common.enums.TimeType;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public  class ComprehensiveStatistics implements Serializable {
+  private static final long serialVersionUID = -2777479013884125925L;
+
+  private String indexId;
+  private String indexStorageId;
+  @Excel(name = "鎸囨爣Id")
+  private String indexCode;
+  private String indexName;
+  private Date beginTime;
+  private Date endTime;
+  private Date dataTime;
+  private String timeCode;
+  private TimeType timeType;
+  @Excel(name = "鑳借�楅噺")
+  private Double value;
+  private Quality quality;
+  private String unitId;
+  private Date createTime;
+  private Date updateTime;
+  private String remark;
+  @Excel(name = "鍚嶇О")
+  private String name;
+  private String indexType;
+  private String facilityName;
+  private String valueScale;
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getIndexId() {
+    return indexId;
+  }
+
+  public void setIndexId(String indexId) {
+    this.indexId = indexId;
+  }
+
+  public String getIndexStorageId() {
+    return indexStorageId;
+  }
+
+  public void setIndexStorageId(String indexStorageId) {
+    this.indexStorageId = indexStorageId;
+  }
+
+  public String getIndexCode() {
+    return indexCode;
+  }
+
+  public void setIndexCode(String indexCode) {
+    this.indexCode = indexCode;
+  }
+
+  public String getIndexName() {
+    return indexName;
+  }
+
+  public void setIndexName(String indexName) {
+    this.indexName = indexName;
+  }
+
+  public Date getBeginTime() {
+    return beginTime;
+  }
+
+  public void setBeginTime(Date beginTime) {
+    this.beginTime = beginTime;
+  }
+
+  public Date getEndTime() {
+    return endTime;
+  }
+
+  public void setEndTime(Date endTime) {
+    this.endTime = endTime;
+  }
+
+  public Date getDataTime() {
+    return dataTime;
+  }
+
+  public void setDataTime(Date dataTime) {
+    this.dataTime = dataTime;
+  }
+
+  public String getTimeCode() {
+    return timeCode;
+  }
+
+  public void setTimeCode(String timeCode) {
+    this.timeCode = timeCode;
+  }
+
+  public TimeType getTimeType() {
+    return timeType;
+  }
+
+  public void setTimeType(TimeType timeType) {
+    this.timeType = timeType;
+  }
+
+  public Double getValue() {
+    return value;
+  }
+
+  public void setValue(Double value) {
+    this.value = value;
+  }
+
+  public Quality getQuality() {
+    return quality;
+  }
+
+  public void setQuality(Quality quality) {
+    this.quality = quality;
+  }
+
+  public String getUnitId() {
+    return unitId;
+  }
+
+  public void setUnitId(String unitId) {
+    this.unitId = unitId;
+  }
+
+  public Date getCreateTime() {
+    return createTime;
+  }
+
+  public void setCreateTime(Date createTime) {
+    this.createTime = createTime;
+  }
+
+  public Date getUpdateTime() {
+    return updateTime;
+  }
+
+  public void setUpdateTime(Date updateTime) {
+    this.updateTime = updateTime;
+  }
+
+  public String getRemark() {
+    return remark;
+  }
+
+  public void setRemark(String remark) {
+    this.remark = remark;
+  }
+
+  public String getIndexType() {
+    return indexType;
+  }
+  public void setIndexType(String indexType) {
+    this.indexType = indexType;
+  }
+
+  public String getFacilityName() {
+    return facilityName;
+  }
+
+  public void setFacilityName(String facilityName) {
+    this.facilityName = facilityName;
+  }
+
+  public String getValueScale() {
+    return valueScale;
+  }
+
+  public void setValueScale(String valueScale) {
+    this.valueScale = valueScale;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/DailyComprehensive.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/DailyComprehensive.java
new file mode 100644
index 0000000..5c59c18
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/DailyComprehensive.java
@@ -0,0 +1,79 @@
+package com.zhitan.comprehensivestatistics.domain;
+
+import com.zhitan.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 
+ * @author sys
+ * @date 2020-03-25
+ */
+@Data
+public class DailyComprehensive implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String indexId;
+    @Excel(name = "鎸囨爣鍚嶇О")
+    private String indexName;
+    private String value;
+    private Date dataTime;
+    private String timeType;
+    private String timeCode;
+    private String unitId;
+    @Excel(name = "0鏃�")
+    private String value0;
+    @Excel(name = "1鏃�")
+    private String value1;
+    @Excel(name = "2鏃�")
+    private String value2;
+    @Excel(name = "3鏃�")
+    private String value3;
+    @Excel(name = "4鏃�")
+    private String value4;
+    @Excel(name = "5鏃�")
+    private String value5;
+    @Excel(name = "6鏃�")
+    private String value6;
+    @Excel(name = "7鏃�")
+    private String value7;
+    @Excel(name = "8鏃�")
+    private String value8;
+    @Excel(name = "9鏃�")
+    private String value9;
+    @Excel(name = "10鏃�")
+    private String value10;
+    @Excel(name = "11鏃�")
+    private String value11;
+    @Excel(name = "12鏃�")
+    private String value12;
+    @Excel(name = "13鏃�")
+    private String value13;
+    @Excel(name = "14鏃�")
+    private String value14;
+    @Excel(name = "15鏃�")
+    private String value15;
+    @Excel(name = "16鏃�")
+    private String value16;
+    @Excel(name = "17鏃�")
+    private String value17;
+    @Excel(name = "18鏃�")
+    private String value18;
+    @Excel(name = "19鏃�")
+    private String value19;
+    @Excel(name = "20鏃�")
+    private String value20;
+    @Excel(name = "21鏃�")
+    private String value21;
+    @Excel(name = "22鏃�")
+    private String value22;
+    @Excel(name = "23鏃�")
+    private String value23;
+    private List<Map> tablehead =new ArrayList<>();
+    private List<DailyComprehensive> tabledata =new ArrayList<>();
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/ComprehensiveStatisticsMapper.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/ComprehensiveStatisticsMapper.java
new file mode 100644
index 0000000..cad5907
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/ComprehensiveStatisticsMapper.java
@@ -0,0 +1,20 @@
+package com.zhitan.comprehensivestatistics.mapper;
+
+import com.zhitan.basicdata.domain.FacilityArchives;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.comprehensivestatistics.domain.ComprehensiveStatistics;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+public interface ComprehensiveStatisticsMapper {
+    List<FacilityArchives> getFacilityArchives();
+    List<ComprehensiveStatistics> getDatasByList(@Param("indexIds") List<String> indexIds, @Param("beginTime") Date beginTime,
+                                                 @Param("endTime") Date endTime,
+                                                 @Param("timeType") TimeType timeType);
+    List<ComprehensiveStatistics> getDatasByIndex(@Param("indexIds") List<String> indexIds, @Param("timeCode") String timeCode);
+    List<ComprehensiveStatistics> getDatasIndex(@Param("indexIds") List<String> indexIds,@Param("timeCode") String timeCode);
+    List<ComprehensiveStatistics> getEnergyByIndex(@Param("indexType") String indexType);
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/DailyComprehensiveMapper.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/DailyComprehensiveMapper.java
new file mode 100644
index 0000000..08777d9
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/DailyComprehensiveMapper.java
@@ -0,0 +1,30 @@
+package com.zhitan.comprehensivestatistics.mapper;
+
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.comprehensivestatistics.domain.DailyComprehensive;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ *鍏ㄥ巶缁煎悎鑳借�楃粺璁� 鏃�
+ * 
+ * @author sys
+ * @date 2020-03-25
+ */
+public interface DailyComprehensiveMapper {
+    public List<DailyComprehensive> getDailyComprehensiveList(@Param("nodeId") String nodeId,
+                                                              @Param("dataList") List<DailyComprehensive> dataList,
+                                                              @Param("beginTime") Date beginTime,
+                                                              @Param("endTime") Date endTime,
+                                                              @Param("timeType") TimeType timeType,
+                                                              @Param("indexStorageId") String indexStorageId);
+
+    List<DailyComprehensive> getListChart(@Param("indexId") String indexId,
+                                            @Param("beginTime") Date beginTime,
+                                            @Param("endTime") Date endTime,
+                                            @Param("timeType") TimeType timeType,
+                                            @Param("indexStorageId")  String indexStorageId);
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/IComprehensiveStatisticsService.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/IComprehensiveStatisticsService.java
new file mode 100644
index 0000000..f6be25e
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/IComprehensiveStatisticsService.java
@@ -0,0 +1,23 @@
+package com.zhitan.comprehensivestatistics.service;
+
+
+import com.zhitan.basicdata.domain.FacilityArchives;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.comprehensivestatistics.domain.ComprehensiveStatistics;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2020-02-07
+ */
+public interface IComprehensiveStatisticsService {
+    List<FacilityArchives> getFacilityArchives();
+    List<ComprehensiveStatistics> getDatasByList(List<String> indexIds, Date beginTime, Date endTime, TimeType timeType);
+    List<ComprehensiveStatistics> getDatasByIndex(List<String> indexIds,Date beginTime, TimeType timeType);
+    List<ComprehensiveStatistics>  getDatasIndex(List<String> indexIds,Date dataTime, TimeType timeType);
+    List<ComprehensiveStatistics> getEnergyByIndex(String indexType);
+}
\ No newline at end of file
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/IDailyComprehensiveService.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/IDailyComprehensiveService.java
new file mode 100644
index 0000000..5378839
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/IDailyComprehensiveService.java
@@ -0,0 +1,19 @@
+package com.zhitan.comprehensivestatistics.service;
+
+
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.comprehensivestatistics.domain.DailyComprehensive;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鍏ㄥ巶缁煎悎鑳借�楃粺璁� 鏃�
+ * 
+ * @author sys
+ * @date 2020-03-25
+ */
+public interface IDailyComprehensiveService {
+    public List<DailyComprehensive> getDailyComprehensiveList(String nodeId, List<DailyComprehensive> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
+    List<DailyComprehensive> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/impl/ComprehensiveStatisticsImpl.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/impl/ComprehensiveStatisticsImpl.java
new file mode 100644
index 0000000..2211995
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/impl/ComprehensiveStatisticsImpl.java
@@ -0,0 +1,60 @@
+package com.zhitan.comprehensivestatistics.service.impl;
+
+import com.zhitan.basicdata.domain.FacilityArchives;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.common.utils.time.TimeManager;
+import com.zhitan.comprehensivestatistics.domain.ComprehensiveStatistics;
+import com.zhitan.comprehensivestatistics.mapper.ComprehensiveStatisticsMapper;
+import com.zhitan.comprehensivestatistics.service.IComprehensiveStatisticsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2020-02-07
+ */
+@Service
+public  class ComprehensiveStatisticsImpl implements IComprehensiveStatisticsService {
+    @Autowired
+    private ComprehensiveStatisticsMapper statisticsMapperpper;
+    @Override
+    public List<FacilityArchives> getFacilityArchives() {
+        return statisticsMapperpper.getFacilityArchives();
+    }
+
+    @Override
+    public List<ComprehensiveStatistics> getDatasByList(List<String> indexIds, Date beginTime, Date endTime, TimeType timeType) {
+        if (indexIds != null && !indexIds.isEmpty()) {
+            return statisticsMapperpper.getDatasByList(indexIds, beginTime,endTime,timeType);
+        }
+        return Collections.emptyList();
+    }
+    @Override
+    public List<ComprehensiveStatistics> getDatasByIndex(List<String> indexIds, Date dataTime, TimeType timeType) {
+        if (indexIds != null && !indexIds.isEmpty()) {
+            String timeCode = TimeManager.getTimeCode(dataTime, timeType);
+            return statisticsMapperpper.getDatasByIndex(indexIds, timeCode);
+        }
+        return Collections.emptyList();
+    }
+    @Override
+    public List<ComprehensiveStatistics> getDatasIndex(List<String> indexIds, Date dataTime, TimeType timeType) {
+        if (indexIds != null && !indexIds.isEmpty()) {
+            String timeCode = TimeManager.getTimeCode(dataTime, timeType);
+            return statisticsMapperpper.getDatasIndex(indexIds, timeCode);
+        }
+        return Collections.emptyList();
+    }
+    @Override
+    public List<ComprehensiveStatistics> getEnergyByIndex(String indexType) {
+            return statisticsMapperpper.getEnergyByIndex(indexType);
+    }
+
+}
\ No newline at end of file
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/impl/DailyComprehensiveServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/impl/DailyComprehensiveServiceImpl.java
new file mode 100644
index 0000000..19fd4b5
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/impl/DailyComprehensiveServiceImpl.java
@@ -0,0 +1,41 @@
+package com.zhitan.comprehensivestatistics.service.impl;
+
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.comprehensivestatistics.domain.DailyComprehensive;
+import com.zhitan.comprehensivestatistics.mapper.DailyComprehensiveMapper;
+import com.zhitan.comprehensivestatistics.service.IDailyComprehensiveService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 涓氬姟灞傚鐞�
+ * 
+ * @author sys
+ * @date 2020-03-25
+ */
+@Service
+public class DailyComprehensiveServiceImpl implements IDailyComprehensiveService {
+    @Autowired
+    private DailyComprehensiveMapper dailyMapper;
+
+    public List<DailyComprehensive> getDailyComprehensiveList(String nodeId, List<DailyComprehensive> dataList,
+                                                              Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
+
+        if (StringUtils.isNotEmpty(nodeId)) {
+            return dailyMapper.getDailyComprehensiveList(nodeId, dataList, beginTime, endTime, timeType, indexStorageId);
+        }
+        return Collections.emptyList();
+    }
+    @Override
+    public List<DailyComprehensive> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
+        if (indexId != null && !indexId.isEmpty()) {
+            return dailyMapper.getListChart(indexId,beginTime,endTime,timeType,indexStorageId);
+        }
+        return Collections.emptyList();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/dto/ConsumptionAnalysisDTO.java b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/dto/ConsumptionAnalysisDTO.java
new file mode 100644
index 0000000..0e6a6e1
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/dto/ConsumptionAnalysisDTO.java
@@ -0,0 +1,52 @@
+package com.zhitan.consumptionanalysis.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhitan.common.annotation.Excel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * description 鑳借�楀姣斿垎鏋�
+ *
+ * @author hmj
+ * @date 2024-10-16 17:55
+ */
+@Getter
+@Setter
+public class ConsumptionAnalysisDTO {
+    @ApiModelProperty(value = "鑺傜偣id")
+    private String nodeId;
+    @ApiModelProperty(value = "鏃堕棿绫诲瀷锛氬勾銆佹湀銆佹棩")
+    private String timeType;
+    @ApiModelProperty(value = "鏌ヨ鏃堕棿")
+    private Date dataTime;
+    @ApiModelProperty(value = "鑳芥簮绫诲瀷")
+    private String energyType;
+    @ApiModelProperty(value = "鍒嗘瀽绫诲瀷")
+    private String analysisType;
+
+    /**
+     * 缁熻寮�濮嬫椂闂�
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "鎶ヨ寮�濮嬫椂闂�", dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date beginTime;
+
+    /**
+     * 缁熻寮�濮嬫椂闂�
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "鎶ヨ寮�濮嬫椂闂�", dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date endTime;
+
+    /** 妯″瀷缂栫爜 */
+    @Excel(name = "妯″瀷缂栫爜")
+    private String modelCode;
+
+    /** 浜у搧绫诲瀷 */
+    @Excel(name = "浜у搧绫诲瀷")
+    private String prodType;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ChartData.java b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ChartData.java
new file mode 100644
index 0000000..fbd8c97
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ChartData.java
@@ -0,0 +1,18 @@
+package com.zhitan.consumptionanalysis.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class ChartData{
+    @ApiModelProperty(value = "X杞�")
+    private String xData;
+    @ApiModelProperty(value = "鏈湡鍊�")
+    private Double yValue;
+    @ApiModelProperty(value = "鍚屾湡鍊�")
+    private Double yCompareValue;
+    @ApiModelProperty(value = "姣斿��")
+    private Double yQOQ;
+}
\ No newline at end of file
diff --git a/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ConsumptionAnalysisData.java b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ConsumptionAnalysisData.java
new file mode 100644
index 0000000..f3db119
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ConsumptionAnalysisData.java
@@ -0,0 +1,64 @@
+package com.zhitan.consumptionanalysis.domain.vo;
+
+/**
+ * description todu
+ *
+ * @author hmj
+ * @date 2024-10-16 18:04
+ */
+public class ConsumptionAnalysisData {
+
+    /**
+     * currentTime : 2024-10-01 00:00:00
+     * currentValue : 33.97
+     * compareTime : 2023-10-01 00:00:00
+     * contrastValues : 71.49
+     * ratio : -52
+     */
+    
+    private String currentTime;
+    private double currentValue;
+    private String compareTime;
+    private double compareValue;
+    private double ratio;
+
+    public String getCurrentTime() {
+        return currentTime;
+    }
+
+    public void setCurrentTime(String currentTime) {
+        this.currentTime = currentTime;
+    }
+
+    public double getCurrentValue() {
+        return currentValue;
+    }
+
+    public void setCurrentValue(double currentValue) {
+        this.currentValue = currentValue;
+    }
+
+    public String getCompareTime() {
+        return compareTime;
+    }
+
+    public void setCompareTime(String compareTime) {
+        this.compareTime = compareTime;
+    }
+
+    public double getCompareValue() {
+        return compareValue;
+    }
+
+    public void setCompareValue(double compareValue) {
+        this.compareValue = compareValue;
+    }
+
+    public double getRatio() {
+        return ratio;
+    }
+
+    public void setRatio(double ratio) {
+        this.ratio = ratio;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ConsumptionAnalysisVO.java b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ConsumptionAnalysisVO.java
new file mode 100644
index 0000000..6ce1fdf
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ConsumptionAnalysisVO.java
@@ -0,0 +1,31 @@
+package com.zhitan.consumptionanalysis.domain.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * description 鑳借�楀姣斿垎鏋�
+ *
+ * @author hmj
+ * @date 2024-10-16 17:55
+ */
+@Getter
+@Setter
+public class ConsumptionAnalysisVO {
+    
+    private List<ConsumptionAnalysisData> dataList;
+    
+    private List<ChartData> chartDataList;
+    
+    private List<EnergyProportion> energyProportion;
+    
+    private ConsumptionAnalysisData tongbi;
+    
+    private ConsumptionAnalysisData huanbi;
+    
+    private Double planCount;
+    
+    private Double prodCount;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/EnergyProportion.java b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/EnergyProportion.java
new file mode 100644
index 0000000..43600ac
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/EnergyProportion.java
@@ -0,0 +1,19 @@
+package com.zhitan.consumptionanalysis.domain.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * description 涓粙璐ㄨ兘鑰楀崰姣�
+ *
+ * @author hmj
+ * @date 2024-10-21 17:26
+ */
+@Getter
+@Setter
+public class EnergyProportion {
+    public String energyNo;
+    public String energyName;
+    public Double count;
+    public Double percentage;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ProductEnergyAnalysisData.java b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ProductEnergyAnalysisData.java
new file mode 100644
index 0000000..7b5769f
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ProductEnergyAnalysisData.java
@@ -0,0 +1,47 @@
+package com.zhitan.consumptionanalysis.domain.vo;
+
+/**
+ * description todu
+ *
+ * @author hmj
+ * @date 2024-10-16 18:04
+ */
+public class ProductEnergyAnalysisData {
+    
+    private String dateTime;
+    private double productCount;
+    private double energyCount;
+    private double average;
+
+    public String getDateTime() {
+        return dateTime;
+    }
+
+    public void setDateTime(String dateTime) {
+        this.dateTime = dateTime;
+    }
+
+    public double getProductCount() {
+        return productCount;
+    }
+
+    public void setProductCount(double productCount) {
+        this.productCount = productCount;
+    }
+
+    public double getEnergyCount() {
+        return energyCount;
+    }
+
+    public void setEnergyCount(double energyCount) {
+        this.energyCount = energyCount;
+    }
+
+    public double getAverage() {
+        return average;
+    }
+
+    public void setAverage(double average) {
+        this.average = average;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ProductEnergyAnalysisVO.java b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ProductEnergyAnalysisVO.java
new file mode 100644
index 0000000..a7ab818
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/ProductEnergyAnalysisVO.java
@@ -0,0 +1,46 @@
+package com.zhitan.consumptionanalysis.domain.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * description 浜у搧鍗曡�楀垎鏋�
+ *
+ * @author hmj
+ * @date 2024-10-16 17:55
+ */
+@Getter
+@Setter
+public class ProductEnergyAnalysisVO {
+    
+
+    /**
+     * 鎵规鑳借�椾笌浜ч噺瓒嬪娍鍒嗘瀽
+     */
+    private List<ProductEnergyAnalysisData> chart;
+    
+    
+    /**
+     * 骞冲潎鎵规鍗曡��
+     */
+    private Double averageEnergy;
+    /**
+     * 骞冲潎鎵规鍗曡��
+     */
+    private Double totalEnergy;
+    /**
+     * 骞冲潎鎵规鍗曡��
+     */
+    private Double totalProduct;
+
+    /**
+     * 鍚屾瘮
+     */
+    private Double tongbi;
+    /**
+     * 鐜瘮
+     */
+    private Double huanbi;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/RankingChartData.java b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/RankingChartData.java
new file mode 100644
index 0000000..990e644
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/RankingChartData.java
@@ -0,0 +1,19 @@
+package com.zhitan.consumptionanalysis.domain.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * description todu
+ *
+ * @author hmj
+ * @date 2024-10-18 11:16
+ */
+@Getter
+@Setter
+public class RankingChartData {
+    public String name;
+    public List<Double> data;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/RankingDataVO.java b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/RankingDataVO.java
new file mode 100644
index 0000000..7766ca4
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/RankingDataVO.java
@@ -0,0 +1,20 @@
+package com.zhitan.consumptionanalysis.domain.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * description todu
+ *
+ * @author hmj
+ * @date 2024-10-18 10:43
+ */
+@Getter
+@Setter
+public class RankingDataVO {
+    public String nodeId;
+    public String nodeName;
+    public List<RankingEnergyData> data;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/RankingEnergyData.java b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/RankingEnergyData.java
new file mode 100644
index 0000000..2bb1fb2
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/domain/vo/RankingEnergyData.java
@@ -0,0 +1,14 @@
+package com.zhitan.consumptionanalysis.domain.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class RankingEnergyData {
+    public String nodeId;
+    public String nodeName;
+    public String energyTypeNo;
+    public String energyTypeName;
+    public Double energyConsumption;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/service/IConsumptionAnalysisService.java b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/service/IConsumptionAnalysisService.java
new file mode 100644
index 0000000..5e38357
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/service/IConsumptionAnalysisService.java
@@ -0,0 +1,31 @@
+package com.zhitan.consumptionanalysis.service;
+
+import com.zhitan.consumptionanalysis.domain.dto.ConsumptionAnalysisDTO;
+import com.zhitan.consumptionanalysis.domain.vo.ConsumptionAnalysisVO;
+import com.zhitan.consumptionanalysis.domain.vo.ProductEnergyAnalysisVO;
+import com.zhitan.consumptionanalysis.domain.vo.RankingDataVO;
+import com.zhitan.consumptionanalysis.domain.vo.RankingEnergyData;
+
+import java.util.List;
+
+/**
+ * description 鑳借�楀姣斿垎鏋�
+ *
+ * @author hmj
+ * @date 2024-10-16 17:54
+ */
+public interface IConsumptionAnalysisService {
+    ConsumptionAnalysisVO getByArea(ConsumptionAnalysisDTO dto);
+
+    List<RankingDataVO> getByDepartment(ConsumptionAnalysisDTO dto);
+
+    ConsumptionAnalysisVO getComprehensiveEnergy(ConsumptionAnalysisDTO dto);
+
+    ConsumptionAnalysisVO getYOY(ConsumptionAnalysisDTO dto);
+
+    List<RankingEnergyData> getEnergyRanking(ConsumptionAnalysisDTO dto);
+
+    ConsumptionAnalysisVO getPlanAndProdCount(ConsumptionAnalysisDTO dto);
+
+    ProductEnergyAnalysisVO getProdEnergy(ConsumptionAnalysisDTO dto);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/service/impl/ConsumptionAnalysisServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/service/impl/ConsumptionAnalysisServiceImpl.java
new file mode 100644
index 0000000..ef04d02
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/consumptionanalysis/service/impl/ConsumptionAnalysisServiceImpl.java
@@ -0,0 +1,1168 @@
+package com.zhitan.consumptionanalysis.service.impl;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zhitan.basicdata.domain.SysEnergy;
+import com.zhitan.basicdata.mapper.SysEnergyMapper;
+import com.zhitan.common.constant.CommonConst;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.consumptionanalysis.domain.dto.ConsumptionAnalysisDTO;
+import com.zhitan.consumptionanalysis.domain.vo.*;
+import com.zhitan.consumptionanalysis.service.IConsumptionAnalysisService;
+import com.zhitan.dataitem.service.IDataItemService;
+import com.zhitan.energyIndicators.domain.EnergyIndicators;
+import com.zhitan.energyIndicators.mapper.EnergyIndicatorsMapper;
+import com.zhitan.model.domain.vo.ModelNodeIndexInfor;
+import com.zhitan.model.mapper.ModelNodeMapper;
+import com.zhitan.model.service.IModelNodeService;
+import com.zhitan.productoutput.domain.ProductOutput;
+import com.zhitan.productoutput.mapper.ProductOutputMapper;
+import com.zhitan.realtimedata.domain.DataItem;
+import lombok.AllArgsConstructor;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * description todu
+ *
+ * @author hmj
+ * @date 2024-10-16 18:25
+ */
+@Service
+@AllArgsConstructor
+public class ConsumptionAnalysisServiceImpl implements IConsumptionAnalysisService {
+
+    private final ModelNodeMapper modelNodeMapper;
+
+    private final EnergyIndicatorsMapper energyIndicatorsMapper;
+    
+    private final ProductOutputMapper productOutputMapper;
+    
+    private final SysEnergyMapper sysEnergyMapper;
+
+    private final IDataItemService dataItemService;
+
+    private final IModelNodeService modelNodeService;
+    
+    @Override
+    public ConsumptionAnalysisVO getByArea(ConsumptionAnalysisDTO dto) {
+        List<ConsumptionAnalysisData> dataList = new ArrayList<>();
+        List<ChartData> chartDataList = new ArrayList<>();
+        
+        ConsumptionAnalysisVO consumptionAnalysisVO = new ConsumptionAnalysisVO();
+        final String analysisType = dto.getAnalysisType();
+        final String nodeId = dto.getNodeId();
+        final String energyType = dto.getEnergyType();
+        final Date queryTime = dto.getDataTime();
+
+        /**
+         * 鏌ヨ鐐逛綅涓庣敤鑳藉崟鍏冧俊鎭�
+         */
+        List<ModelNodeIndexInfor> nodeIndexInforList = modelNodeMapper.getModelNodeIndexIdByNodeId(nodeId,energyType);
+
+//        if (CollectionUtils.isEmpty(nodeIndexInforList)) {
+//            return consumptionAnalysisVO;
+//        }
+        List<String> indexIds = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
+        Date beginTime;
+        Date endTime;
+        Date lastTime;
+        Date lastEndTime;
+        String queryTimeType = dto.getTimeType();
+        String shixuTimeType;
+        String timeFormat;
+        if (TimeType.DAY.name().equals(queryTimeType)) {
+            beginTime = DateUtil.beginOfDay(queryTime);
+            endTime = DateUtil.endOfDay(queryTime);
+            shixuTimeType = TimeType.HOUR.name();
+            if ("YOY".equals(analysisType)) {
+                //鍚屾瘮鍒嗘瀽锛屾椂闂村彇鍘诲勾鐨�
+                lastTime = DateUtil.offsetMonth(beginTime, -12);
+                lastEndTime = DateUtil.offsetMonth(endTime, -12);
+            }else {
+                //鐜瘮鍒嗘瀽锛屾椂闂村彇 鏄ㄥぉ
+                lastTime = DateUtil.offsetDay(beginTime, -1);
+                lastEndTime = DateUtil.offsetDay(endTime, -1);
+            }
+            timeFormat = "yyyy-MM-dd HH";
+            // 鏈�
+        } else if (TimeType.MONTH.name().equals(queryTimeType)) {
+            beginTime = DateUtil.beginOfMonth(queryTime);
+            endTime = DateUtil.endOfMonth(queryTime);
+            shixuTimeType = TimeType.DAY.name();
+            if ("YOY".equals(analysisType)) {
+                //鍚屾瘮鍒嗘瀽锛屾椂闂村彇鍘诲勾鐨�
+                lastTime = DateUtil.offsetMonth(beginTime, -12);
+                lastEndTime = DateUtil.offsetMonth(endTime, -12);
+            }else {
+                //鐜瘮鍒嗘瀽锛屾椂闂村彇 鏄ㄥぉ
+                lastTime = DateUtil.offsetMonth(beginTime, -1);
+                lastEndTime = DateUtil.offsetMonth(endTime, -1);
+            }
+            timeFormat = "yyyy-MM-dd";
+            // 骞�
+        } else {
+            beginTime = DateUtil.beginOfYear(queryTime);
+            endTime = DateUtil.endOfYear(queryTime);
+            shixuTimeType = TimeType.MONTH.name();
+            if ("YOY".equals(analysisType)) {
+                //鍚屾瘮鍒嗘瀽锛屾椂闂村彇鍘诲勾鐨�
+                lastTime = DateUtil.offsetMonth(beginTime, -12);
+                lastEndTime = DateUtil.offsetMonth(endTime, -12);
+            }else {
+                //鐜瘮鍒嗘瀽锛屾椂闂村彇 鏄ㄥぉ
+                lastTime = DateUtil.offsetMonth(beginTime,  -1);
+                lastEndTime = DateUtil.offsetMonth(endTime,  -1);
+            }
+            
+            timeFormat = "yyyy-MM";
+        }
+        // 鏍规嵁indexId鏌ヨdataItem
+        List<DataItem> dataItemList = new ArrayList<>();
+        List<DataItem> lastDataItemList = new ArrayList<>();
+        if(CollectionUtils.isNotEmpty(indexIds)) {
+            dataItemList = dataItemService.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, shixuTimeType, indexIds);
+            lastDataItemList = dataItemService.getDataItemTimeRangeInforByIndexIds(lastTime, lastEndTime, shixuTimeType, indexIds);
+        }
+        Map<String, List<DataItem>> dataItemMap = dataItemList.stream().collect(Collectors.groupingBy(li -> DateUtil.format(li.getDataTime(), timeFormat)));
+        Map<String, List<DataItem>> lastDataItemMap = lastDataItemList.stream().collect(Collectors.groupingBy(li -> DateUtil.format(li.getDataTime(), timeFormat)));
+        //  鍊嶇巼
+        BigDecimal multiple = BigDecimal.valueOf(CommonConst.DIGIT_100);
+
+        while (!beginTime.after(endTime)) {
+            ConsumptionAnalysisData data = new ConsumptionAnalysisData();
+            final String currentTime = DateUtil.format(beginTime, timeFormat);
+            final String compareTime;
+            DateTime dateTime;
+            if (TimeType.DAY.name().equals(queryTimeType)) {
+               
+                if ("YOY".equals(analysisType)) {
+                    //鍚屾瘮鍒嗘瀽锛屾椂闂村彇鍘诲勾鐨�
+                    dateTime = DateUtil.offsetMonth(beginTime, -12);
+                }else {
+                    //鐜瘮鍒嗘瀽锛屾椂闂村彇 鏄ㄥぉ
+                    dateTime = DateUtil.offsetDay(beginTime, -1);
+                }
+                compareTime = DateUtil.format(dateTime, timeFormat);
+                // 鏈�
+            } else if (TimeType.MONTH.name().equals(queryTimeType)) {
+                if ("YOY".equals(analysisType)) {
+                    //鍚屾瘮鍒嗘瀽锛屾椂闂村彇鍘诲勾鐨�
+                    dateTime = DateUtil.offsetMonth(beginTime, -12);
+                }else {
+                    //鐜瘮鍒嗘瀽锛屾椂闂村彇 鏄ㄥぉ
+                    dateTime = DateUtil.offsetMonth(beginTime, -1);
+                }
+                compareTime = DateUtil.format(dateTime, timeFormat);
+                // 骞�
+            } else {
+                if ("YOY".equals(analysisType)) {
+                    //鍚屾瘮鍒嗘瀽锛屾椂闂村彇鍘诲勾鐨�
+                    dateTime = DateUtil.offsetMonth(beginTime, -12);
+                }else {
+                    //鐜瘮鍒嗘瀽锛屾椂闂村彇 鏄ㄥぉ
+                    dateTime = DateUtil.offsetMonth(beginTime,  -1);
+                }
+                compareTime = DateUtil.format(dateTime, timeFormat);
+            }
+            
+            
+            final List<DataItem> dataItems = dataItemMap.get(currentTime);
+            final List<DataItem> lastDataItems = lastDataItemMap.get(compareTime);
+            BigDecimal sum = new BigDecimal(0);
+            BigDecimal lastSum = new BigDecimal(0);
+            if (CollectionUtils.isNotEmpty(dataItems)) {
+                 // 姹傚拰
+                 sum = BigDecimal.valueOf(dataItems.stream()
+                        .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
+            }
+            
+            if(CollectionUtils.isNotEmpty(lastDataItems)) {
+                lastSum = BigDecimal.valueOf(lastDataItems.stream()
+                        .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
+            }
+            data.setCurrentValue(sum.doubleValue());
+            data.setCompareValue(lastSum.doubleValue());
+            data.setCurrentTime(currentTime);
+            data.setCompareTime(compareTime);
+            
+
+            if ("YOY".equals(analysisType)) {
+                //鍚屾瘮鍒嗘瀽
+                BigDecimal ratio = BigDecimal.ZERO;
+                if (lastSum.compareTo(BigDecimal.ZERO) != 0) {
+                    ratio = sum.subtract(lastSum).divide(lastSum, CommonConst.DIGIT_2, RoundingMode.HALF_UP).multiply(multiple);
+                }
+                data.setRatio(ratio.doubleValue());
+            } else if ("QOQ".equals(analysisType)) {
+                //鐜瘮鍒嗘瀽
+
+                BigDecimal ratio = BigDecimal.ZERO;
+                if (lastSum.compareTo(BigDecimal.ZERO) != 0) {
+                    ratio = sum.subtract(lastSum).divide(lastSum, CommonConst.DIGIT_2, RoundingMode.HALF_UP).multiply(multiple);
+                }
+                data.setRatio(ratio.doubleValue());
+            }
+
+            dataList.add(data);
+
+            switch (TimeType.valueOf(queryTimeType)) {
+                case DAY:
+                    beginTime = DateUtil.offsetHour(beginTime, 1);
+                    break;
+                case MONTH:
+                    beginTime = DateUtil.offsetDay(beginTime, 1);
+                    break;
+                default:
+                    beginTime = DateUtil.offsetMonth(beginTime, 1);
+                    break;
+            }
+        }
+
+        dataList.stream().forEach(dataItem -> {
+            ChartData chartData = new ChartData();
+            chartData.setXData(dataItem.getCurrentTime());
+            chartData.setYQOQ(dataItem.getRatio());
+            chartData.setYCompareValue(dataItem.getCompareValue());
+            chartData.setYValue(dataItem.getCurrentValue());
+
+            chartDataList.add(chartData);
+
+        });
+        
+        consumptionAnalysisVO.setDataList(dataList);
+        consumptionAnalysisVO.setChartDataList(chartDataList);
+        return consumptionAnalysisVO;
+    }
+
+    @Override
+    public List<RankingDataVO> getByDepartment(ConsumptionAnalysisDTO dto) {
+        List<RankingDataVO> rankingDataVOArrayList = new ArrayList<>();
+        List<RankingEnergyData> rankingEnergyData = new ArrayList<>();
+        final Date queryTime = dto.getDataTime();
+        String queryTimeType = dto.getTimeType();
+        // 鍒涘缓涓�涓狹ap鏉ュ瓨鍌ㄦ�诲拰
+        Map<String, BigDecimal> result = new HashMap<>();
+        
+        
+        //鏍规嵁妯″瀷鍚嶇О鏌ヨmodelCode
+        final String parentId = dto.getNodeId();
+        
+        //鏍规嵁鎬荤粨鐐规煡璇�
+        final List<ModelNodeIndexInfor> nodeIndexInforList = modelNodeMapper.getModelNodeByParentId(parentId);
+
+        final List<String> eneryIdList = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getEnergyId).distinct().collect(Collectors.toList());
+        final LambdaQueryWrapper<SysEnergy> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(CollectionUtils.isNotEmpty(eneryIdList),SysEnergy::getEnersno,eneryIdList);
+        final List<SysEnergy> sysEnergies = sysEnergyMapper.selectList(queryWrapper);
+        final Map<String, String> energyNameMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, SysEnergy::getEnername));
+        final Map<String, String> nodeNameMap = new HashMap<>();
+        nodeIndexInforList.forEach(n->{
+            final String nodeId = n.getNodeId();
+            final String name = n.getName();
+            if(!nodeNameMap.containsKey(nodeId)){
+                nodeNameMap.put(nodeId,name);
+            }
+        });
+
+        // 鎸夌収鐐逛綅杩涜鍒嗙粍
+        Map<String, List<ModelNodeIndexInfor>> nodeIndexMap = nodeIndexInforList.stream().collect(
+                Collectors.groupingBy(ModelNodeIndexInfor::getNodeId));
+        
+        // 鏍规嵁nodeId鑾峰彇鑳芥簮绫诲瀷
+        // 鎵�鏈夌偣浣嶄俊鎭�
+        List<String> indexIds = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getIndexId).distinct().collect(Collectors.toList());
+
+        Date beginTime;
+        Date endTime;
+        String shixuTimeType;
+        if (TimeType.DAY.name().equals(queryTimeType)) {
+            beginTime = DateUtil.beginOfDay(queryTime);
+            endTime = DateUtil.endOfDay(queryTime);
+            shixuTimeType = TimeType.HOUR.name();
+            // 鏈�
+        } else if (TimeType.MONTH.name().equals(queryTimeType)) {
+            beginTime = DateUtil.beginOfMonth(queryTime);
+            endTime = DateUtil.endOfMonth(queryTime);
+            shixuTimeType = TimeType.DAY.name();
+            // 骞�
+        } else {
+            beginTime = DateUtil.beginOfYear(queryTime);
+            endTime = DateUtil.endOfYear(queryTime);
+            shixuTimeType = TimeType.MONTH.name();
+        }
+        
+        
+        // 鏍规嵁indexId鏌ヨdataItem
+        List<DataItem> dataItemList = new ArrayList<>();
+        if(CollectionUtils.isNotEmpty(indexIds)) {
+            dataItemList = dataItemService.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, shixuTimeType, indexIds);
+        }
+        final Map<String, List<DataItem>> dataItemMap = dataItemList.stream().collect(Collectors.groupingBy(DataItem::getIndexId));
+        
+        // 鏍规嵁鐐逛綅鍒嗙粍锛屾眰鍜�
+        Map<String,BigDecimal> dataItemTotalMap = new HashMap<>();
+        dataItemMap.forEach((key,value)->{
+            BigDecimal sum = BigDecimal.valueOf(value.stream()
+                    .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
+            dataItemTotalMap.put(key,sum);
+        });
+
+        
+        
+        nodeIndexMap.forEach((nodeId,indexList)->{
+            indexList.forEach(index->{
+                final String energyId = index.getEnergyId();
+                final String indexId = index.getIndexId();
+                final BigDecimal total = dataItemTotalMap.getOrDefault(indexId, BigDecimal.ZERO);
+                String key = nodeId + "@@" + energyId; // 浣跨敤nodeId鍜宔nergyId浣滀负閿�
+                result.put(key, result.getOrDefault(key, BigDecimal.ZERO).add(total)); // 绱姞鑳借�楅噺
+            });
+        });
+
+        // 鎵撳嵃缁撴灉
+        for (Map.Entry<String, BigDecimal> entry : result.entrySet()) {
+            RankingEnergyData chartData = new RankingEnergyData();
+            String[] keys = entry.getKey().split("@@");
+            String nodeId = keys[0];
+            String energyId = keys[1];
+            BigDecimal totalEnergy = entry.getValue();
+            chartData.setEnergyTypeNo(energyId);
+            chartData.setEnergyTypeName(energyNameMap.getOrDefault(energyId,""));
+            chartData.setNodeName(nodeNameMap.getOrDefault(nodeId,""));
+            chartData.setEnergyConsumption(totalEnergy.doubleValue());
+            chartData.setNodeId(nodeId);
+            rankingEnergyData.add(chartData);
+            
+        }
+        final Map<String, List<RankingEnergyData>> collect = rankingEnergyData.stream().collect(Collectors.groupingBy(RankingEnergyData::getNodeId));
+        nodeNameMap.forEach((key,value)->{
+            final List<RankingEnergyData> rankingEnergyData1 = collect.get(key);
+            RankingDataVO rankingDataVO = new RankingDataVO();
+            rankingDataVO.setNodeId(key);
+            rankingDataVO.setNodeName(value);
+            rankingDataVO.setData(rankingEnergyData1);
+            rankingDataVOArrayList.add(rankingDataVO);
+        });
+        
+        return rankingDataVOArrayList;
+    }
+
+    /**
+     * 鏌ヨ鐐逛綅涓庣敤鑳藉崟鍏冧俊鎭�
+     *
+     * @param nodeId
+     * @return
+     */
+    private List<ModelNodeIndexInfor> listModelNodeIndexIdRelationInfor(String nodeId) {
+        List<ModelNodeIndexInfor> nodeInforList = modelNodeService.listModelNodeIndexIdRelationInforByParentId(nodeId);
+        // 濡傛灉鏄┖瀛樺湪涓ょ鎯呭喌锛�1锛歩d鏈夐棶棰橈紝2锛氭渶搴曞眰
+        if (CollectionUtils.isEmpty(nodeInforList)) {
+            List<ModelNodeIndexInfor> inforList = modelNodeService.getModelNodeIndexIdRelationInforByNodeId(nodeId);
+            if (CollectionUtils.isNotEmpty(inforList)) {
+                nodeInforList.addAll(inforList);
+            }
+        }
+        return nodeInforList;
+    }
+
+    @Override
+    public ConsumptionAnalysisVO getComprehensiveEnergy(ConsumptionAnalysisDTO dto) {
+        List<ConsumptionAnalysisData> dataList = new ArrayList<>();
+        List<ChartData> chartDataList = new ArrayList<>();
+        List<EnergyProportion> energyProportionList = new ArrayList<>();
+
+        ConsumptionAnalysisVO consumptionAnalysisVO = new ConsumptionAnalysisVO();
+        
+        //todo hmj 缁煎悎鑳借�楀厛榛樿鍙栧悓姣�
+        final String analysisType = "YOY";
+        final String nodeId = dto.getNodeId();
+        final String energyType = dto.getEnergyType();
+        final Date queryTime = dto.getDataTime();
+
+        /**
+         * 鏌ヨ鐐逛綅涓庣敤鑳藉崟鍏冧俊鎭�
+         */
+        List<ModelNodeIndexInfor> nodeIndexInforList = modelNodeMapper.getModelNodeIndexIdByNodeId(nodeId,energyType);
+
+//        if (CollectionUtils.isEmpty(nodeIndexInforList)) {
+//            return consumptionAnalysisVO;
+//        }
+
+        final List<String> eneryIdList = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getEnergyId).distinct().collect(Collectors.toList());
+        final LambdaQueryWrapper<SysEnergy> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(CollectionUtils.isNotEmpty(eneryIdList),SysEnergy::getEnersno,eneryIdList);
+        final List<SysEnergy> sysEnergies = sysEnergyMapper.selectList(queryWrapper);
+        final Map<String, Object> energyCoefficientMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, SysEnergy::getCoefficient));
+        final Map<String, String> energyNameMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno,SysEnergy::getEnername));
+        final Map<String, String> indexIdEnergyIdMap = new HashMap<>();
+        nodeIndexInforList.forEach(n->{
+            final String indexId = n.getIndexId();
+            final String energyId = n.getEnergyId();
+            if(!indexIdEnergyIdMap.containsKey(indexId)){
+                indexIdEnergyIdMap.put(indexId,energyId);
+            }
+        });
+        List<String> indexIds = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
+        Date beginTime;
+        Date endTime;
+        Date lastTime;
+        Date lastEndTime;
+        String queryTimeType = dto.getTimeType();
+        String shixuTimeType;
+        String timeFormat;
+        if (TimeType.DAY.name().equals(queryTimeType)) {
+            beginTime = DateUtil.beginOfDay(queryTime);
+            endTime = DateUtil.endOfDay(queryTime);
+            shixuTimeType = TimeType.HOUR.name();
+            if ("YOY".equals(analysisType)) {
+                //鍚屾瘮鍒嗘瀽锛屾椂闂村彇鍘诲勾鐨�
+                lastTime = DateUtil.offsetMonth(beginTime, -12);
+                lastEndTime = DateUtil.offsetMonth(endTime, -12);
+            }else {
+                //鐜瘮鍒嗘瀽锛屾椂闂村彇 鏄ㄥぉ
+                lastTime = DateUtil.offsetDay(beginTime, -1);
+                lastEndTime = DateUtil.offsetDay(endTime, -1);
+            }
+            timeFormat = "yyyy-MM-dd HH";
+            // 鏈�
+        } else if (TimeType.MONTH.name().equals(queryTimeType)) {
+            beginTime = DateUtil.beginOfMonth(queryTime);
+            endTime = DateUtil.endOfMonth(queryTime);
+            shixuTimeType = TimeType.DAY.name();
+            if ("YOY".equals(analysisType)) {
+                //鍚屾瘮鍒嗘瀽锛屾椂闂村彇鍘诲勾鐨�
+                lastTime = DateUtil.offsetMonth(beginTime, -12);
+                lastEndTime = DateUtil.offsetMonth(endTime, -12);
+            }else {
+                //鐜瘮鍒嗘瀽锛屾椂闂村彇 鏄ㄥぉ
+                lastTime = DateUtil.offsetMonth(beginTime, -1);
+                lastEndTime = DateUtil.offsetMonth(endTime, -1);
+            }
+            timeFormat = "yyyy-MM-dd";
+            // 骞�
+        } else {
+            beginTime = DateUtil.beginOfYear(queryTime);
+            endTime = DateUtil.endOfYear(queryTime);
+            shixuTimeType = TimeType.MONTH.name();
+            if ("YOY".equals(analysisType)) {
+                //鍚屾瘮鍒嗘瀽锛屾椂闂村彇鍘诲勾鐨�
+                lastTime = DateUtil.offsetMonth(beginTime, -12);
+                lastEndTime = DateUtil.offsetMonth(endTime, -12);
+            }else {
+                //鐜瘮鍒嗘瀽锛屾椂闂村彇 鏄ㄥぉ
+                lastTime = DateUtil.offsetMonth(beginTime,  -1);
+                lastEndTime = DateUtil.offsetMonth(endTime,  -1);
+            }
+
+            timeFormat = "yyyy-MM";
+        }
+        // 鏍规嵁indexId鏌ヨdataItem
+        List<DataItem> dataItemList = new ArrayList<>();
+        List<DataItem> lastDataItemList = new ArrayList<>();
+        if(CollectionUtils.isNotEmpty(indexIds)) {
+            dataItemList = dataItemService.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, shixuTimeType, indexIds);
+            lastDataItemList = dataItemService.getDataItemTimeRangeInforByIndexIds(lastTime, lastEndTime, shixuTimeType, indexIds);
+        }
+        Map<String, List<DataItem>> dataItemMap = dataItemList.stream().collect(Collectors.groupingBy(li -> DateUtil.format(li.getDataTime(), timeFormat)));
+        Map<String, List<DataItem>> lastDataItemMap = lastDataItemList.stream().collect(Collectors.groupingBy(li -> DateUtil.format(li.getDataTime(), timeFormat)));
+        //  鍊嶇巼
+        BigDecimal multiple = BigDecimal.valueOf(CommonConst.DIGIT_100);
+
+        Map<String,Double> energyProportionMap = new HashMap<>();
+        while (!beginTime.after(endTime)) {
+            ConsumptionAnalysisData data = new ConsumptionAnalysisData();
+            final String currentTime = DateUtil.format(beginTime, timeFormat);
+            final String compareTime;
+            DateTime dateTime;
+            if (TimeType.DAY.name().equals(queryTimeType)) {
+
+                if ("YOY".equals(analysisType)) {
+                    //鍚屾瘮鍒嗘瀽锛屾椂闂村彇鍘诲勾鐨�
+                    dateTime = DateUtil.offsetMonth(beginTime, -12);
+                }else {
+                    //鐜瘮鍒嗘瀽锛屾椂闂村彇 鏄ㄥぉ
+                    dateTime = DateUtil.offsetDay(beginTime, -1);
+                }
+                compareTime = DateUtil.format(dateTime, timeFormat);
+                // 鏈�
+            } else if (TimeType.MONTH.name().equals(queryTimeType)) {
+                if ("YOY".equals(analysisType)) {
+                    //鍚屾瘮鍒嗘瀽锛屾椂闂村彇鍘诲勾鐨�
+                    dateTime = DateUtil.offsetMonth(beginTime, -12);
+                }else {
+                    //鐜瘮鍒嗘瀽锛屾椂闂村彇 鏄ㄥぉ
+                    dateTime = DateUtil.offsetMonth(beginTime, -1);
+                }
+                compareTime = DateUtil.format(dateTime, timeFormat);
+                // 骞�
+            } else {
+                if ("YOY".equals(analysisType)) {
+                    //鍚屾瘮鍒嗘瀽锛屾椂闂村彇鍘诲勾鐨�
+                    dateTime = DateUtil.offsetMonth(beginTime, -12);
+                }else {
+                    //鐜瘮鍒嗘瀽锛屾椂闂村彇 鏄ㄥぉ
+                    dateTime = DateUtil.offsetMonth(beginTime,  -1);
+                }
+                compareTime = DateUtil.format(dateTime, timeFormat);
+            }
+
+
+            final List<DataItem> dataItems = dataItemMap.get(currentTime);
+            final List<DataItem> lastDataItems = lastDataItemMap.get(compareTime);
+            BigDecimal sum = new BigDecimal(0);
+            BigDecimal lastSum = new BigDecimal(0);
+            if (CollectionUtils.isNotEmpty(dataItems)) {
+                // 姹傚拰
+                for (int i=0;i<dataItems.size(); i++){
+                    final DataItem dataItem = dataItems.get(i);
+                    final String indexId = dataItem.getIndexId();
+                    final String energyId = indexIdEnergyIdMap.get(indexId);
+                    
+                    final BigDecimal coefficient = (BigDecimal) energyCoefficientMap.get(energyId);
+                    if(coefficient == null){
+                        throw new RuntimeException("鑳芥簮绫诲瀷" + energyId + "娌℃湁閰嶇疆鎶樻爣绯绘暟锛屾棤娉曡绠�");
+                    }
+                    
+                    sum = sum.add(new BigDecimal(dataItem.getValue()).multiply(coefficient)).setScale(2, RoundingMode.HALF_UP);;
+//                    if(energyProportionMap.containsKey(energyId)) {
+//                        energyProportionMap.put(energyId,energyProportionMap.get(energyId) + sum.doubleValue());
+//                    }else {
+//                        energyProportionMap.put(energyId, sum.doubleValue());
+//                    }
+                }
+                
+            }
+
+            if(CollectionUtils.isNotEmpty(lastDataItems)) {
+                for (int i=0;i<lastDataItems.size(); i++){
+                    final DataItem dataItem = lastDataItems.get(i);
+                    final String indexId = dataItem.getIndexId();
+                    final String energyId = indexIdEnergyIdMap.get(indexId);
+
+                    final BigDecimal coefficient = (BigDecimal) energyCoefficientMap.get(energyId);
+                    if(coefficient == null){
+                        throw new RuntimeException("鑳芥簮绫诲瀷" + energyId + "娌℃湁閰嶇疆鎶樻爣绯绘暟锛屾棤娉曡绠�");
+                    }
+
+                    lastSum = lastSum.add(new BigDecimal(dataItem.getValue()).multiply(coefficient)).setScale(2, RoundingMode.HALF_UP);;
+                }
+            }
+            data.setCurrentValue(sum.doubleValue());
+            data.setCompareValue(lastSum.doubleValue());
+            data.setCurrentTime(currentTime);
+            data.setCompareTime(compareTime);
+
+
+            if ("YOY".equals(analysisType)) {
+                //鍚屾瘮鍒嗘瀽
+                BigDecimal ratio = BigDecimal.ZERO;
+                if (lastSum.compareTo(BigDecimal.ZERO) != 0) {
+                    ratio = sum.subtract(lastSum).divide(lastSum, CommonConst.DIGIT_2, RoundingMode.HALF_UP).multiply(multiple);
+                }
+                data.setRatio(ratio.doubleValue());
+            } else if ("QOQ".equals(analysisType)) {
+                //鐜瘮鍒嗘瀽
+
+                BigDecimal ratio = BigDecimal.ZERO;
+                if (lastSum.compareTo(BigDecimal.ZERO) != 0) {
+                    ratio = sum.subtract(lastSum).divide(lastSum, CommonConst.DIGIT_2, RoundingMode.HALF_UP).multiply(multiple);
+                }
+                data.setRatio(ratio.doubleValue());
+            }
+
+            dataList.add(data);
+
+            switch (TimeType.valueOf(queryTimeType)) {
+                case DAY:
+                    beginTime = DateUtil.offsetHour(beginTime, 1);
+                    break;
+                case MONTH:
+                    beginTime = DateUtil.offsetDay(beginTime, 1);
+                    break;
+                default:
+                    beginTime = DateUtil.offsetMonth(beginTime, 1);
+                    break;
+            }
+        }
+
+        dataList.stream().forEach(dataItem -> {
+            ChartData chartData = new ChartData();
+            chartData.setXData(dataItem.getCurrentTime());
+            chartData.setYQOQ(dataItem.getRatio());
+            chartData.setYCompareValue(dataItem.getCompareValue());
+            chartData.setYValue(dataItem.getCurrentValue());
+
+            chartDataList.add(chartData);
+
+        });
+        
+        Double eneryTotal =  energyProportionMap.values().stream().mapToDouble(Double::doubleValue).sum();
+
+        Map<String, List<DataItem>> indexDataItemMap = dataItemList.stream().collect(Collectors.groupingBy(DataItem::getIndexId));
+        
+        indexDataItemMap.forEach((indexId,value)->{
+            final String energyId = indexIdEnergyIdMap.get(indexId);
+
+            final BigDecimal coefficient = (BigDecimal) energyCoefficientMap.get(energyId);
+            if(coefficient == null){
+                throw new RuntimeException("鑳芥簮绫诲瀷" + energyId + "娌℃湁閰嶇疆鎶樻爣绯绘暟锛屾棤娉曡绠�");
+            }
+
+            final double sum = value.stream().map(DataItem::getValue).mapToDouble(Double::doubleValue).sum();
+            if(energyProportionMap.containsKey(energyId)) {
+                energyProportionMap.put(energyId,energyProportionMap.get(energyId) + sum * coefficient.doubleValue());
+            }else {
+                energyProportionMap.put(energyId, sum * coefficient.doubleValue());
+            }
+        });
+       
+        energyProportionMap.forEach((key,value)->{
+            EnergyProportion energyProportion = new EnergyProportion();
+            energyProportion.setEnergyNo(key);
+            energyProportion.setEnergyName(energyNameMap.getOrDefault(key,""));
+            energyProportion.setCount(value);
+            energyProportion.setPercentage(value/eneryTotal * 100);
+            
+            energyProportionList.add(energyProportion);
+        });
+
+        consumptionAnalysisVO.setEnergyProportion(energyProportionList);
+        consumptionAnalysisVO.setDataList(dataList);
+        consumptionAnalysisVO.setChartDataList(chartDataList);
+        return consumptionAnalysisVO;
+    }
+
+    @Override
+    public ConsumptionAnalysisVO getYOY(ConsumptionAnalysisDTO dto) {
+        ConsumptionAnalysisVO consumptionAnalysisVO = new ConsumptionAnalysisVO();
+        ConsumptionAnalysisData tongbi = new ConsumptionAnalysisData();
+        ConsumptionAnalysisData huanbi = new ConsumptionAnalysisData();
+        final String queryTimeType = dto.getTimeType();
+        final Date queryTime = dto.getDataTime();
+
+        String timeFormat;
+        if (TimeType.DAY.name().equals(queryTimeType)) {
+            timeFormat = "yyyy-MM-dd";
+            // 鏈�
+        } else if (TimeType.MONTH.name().equals(queryTimeType)) {
+            timeFormat = "yyyy-MM";
+            // 骞�
+        } else {
+            timeFormat = "yyyy";
+        }
+        
+        final Double currTotalEnergy = getTotalEnergy(dto);
+
+        DateTime tongbiTime = DateUtil.offsetMonth(queryTime, -12);
+        dto.setDataTime(tongbiTime);
+        final Double tongbiTotalEnergy = getTotalEnergy(dto);
+        
+        DateTime huanbiTime = DateUtil.offsetMonth(queryTime, -1);
+        dto.setDataTime(huanbiTime);
+        final Double huanbiTotalEnergy = getTotalEnergy(dto);
+
+        
+        tongbi.setCurrentTime(DateUtil.format(queryTime,timeFormat));
+        tongbi.setCompareTime(DateUtil.format(tongbiTime,timeFormat));
+        tongbi.setCurrentValue(currTotalEnergy);
+        tongbi.setCompareValue(tongbiTotalEnergy);
+        if(tongbiTotalEnergy != 0) {
+            final double tongbiRatio = (currTotalEnergy - tongbiTotalEnergy) / tongbiTotalEnergy * 100;
+            BigDecimal bd = new BigDecimal(tongbiRatio);
+            bd = bd.setScale(2, RoundingMode.HALF_UP);
+            tongbi.setRatio(bd.doubleValue());
+        }else {
+            tongbi.setRatio(0);
+        }
+        
+        huanbi.setCurrentTime(DateUtil.format(queryTime,timeFormat));
+        huanbi.setCompareTime(DateUtil.format(huanbiTime,timeFormat));
+        huanbi.setCompareValue(huanbiTotalEnergy);
+        huanbi.setCurrentValue(currTotalEnergy);
+     
+        if(huanbiTotalEnergy != 0) {
+            final double huanbiRatio = (currTotalEnergy - huanbiTotalEnergy) / huanbiTotalEnergy * 100;
+            BigDecimal bd = new BigDecimal(huanbiRatio);
+            bd = bd.setScale(2, RoundingMode.HALF_UP);
+            huanbi.setRatio(bd.doubleValue());
+        }else {
+            huanbi.setRatio(0);
+        }
+        consumptionAnalysisVO.setTongbi(tongbi);
+        consumptionAnalysisVO.setHuanbi(huanbi);
+        return consumptionAnalysisVO;
+    }
+    
+    public Double getTotalEnergy(ConsumptionAnalysisDTO dto){
+        //todo hmj 缁煎悎鑳借�楀厛榛樿鍙栧悓姣�
+        final String nodeId = dto.getNodeId();
+        final String energyType = dto.getEnergyType();
+        final Date queryTime = dto.getDataTime();
+
+        /**
+         * 鏌ヨ鐐逛綅涓庣敤鑳藉崟鍏冧俊鎭�
+         */
+        List<ModelNodeIndexInfor> nodeIndexInforList = modelNodeMapper.getModelNodeIndexIdByNodeId(nodeId,energyType);
+
+//        if (CollectionUtils.isEmpty(nodeIndexInforList)) {
+//            return consumptionAnalysisVO;
+//        }
+
+        final List<String> eneryIdList = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getEnergyId).distinct().collect(Collectors.toList());
+        final LambdaQueryWrapper<SysEnergy> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(CollectionUtils.isNotEmpty(eneryIdList),SysEnergy::getEnersno,eneryIdList);
+        final List<SysEnergy> sysEnergies = sysEnergyMapper.selectList(queryWrapper);
+        final Map<String, Object> energyCoefficientMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, SysEnergy::getCoefficient));
+        final Map<String, String> indexIdEnergyIdMap = new HashMap<>();
+        nodeIndexInforList.forEach(n->{
+            final String indexId = n.getIndexId();
+            final String energyId = n.getEnergyId();
+            if(!indexIdEnergyIdMap.containsKey(indexId)){
+                indexIdEnergyIdMap.put(indexId,energyId);
+            }
+        });
+        List<String> indexIds = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
+        Date beginTime;
+        Date endTime;
+        String queryTimeType = dto.getTimeType();
+        String shixuTimeType;
+        String timeFormat;
+        if (TimeType.DAY.name().equals(queryTimeType)) {
+            beginTime = DateUtil.beginOfDay(queryTime);
+            endTime = DateUtil.endOfDay(queryTime);
+            shixuTimeType = TimeType.HOUR.name();
+            timeFormat = "yyyy-MM-dd HH";
+            // 鏈�
+        } else if (TimeType.MONTH.name().equals(queryTimeType)) {
+            beginTime = DateUtil.beginOfMonth(queryTime);
+            endTime = DateUtil.endOfMonth(queryTime);
+            shixuTimeType = TimeType.DAY.name();
+            timeFormat = "yyyy-MM-dd";
+            // 骞�
+        } else {
+            beginTime = DateUtil.beginOfYear(queryTime);
+            endTime = DateUtil.endOfYear(queryTime);
+            shixuTimeType = TimeType.MONTH.name();
+            timeFormat = "yyyy-MM";
+        }
+        // 鏍规嵁indexId鏌ヨdataItem
+        List<DataItem> dataItemList = new ArrayList<>();
+        if(CollectionUtils.isNotEmpty(indexIds)) {
+            dataItemList = dataItemService.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, shixuTimeType, indexIds);
+        }
+        Map<String, List<DataItem>> dataItemMap = dataItemList.stream().collect(Collectors.groupingBy(li -> DateUtil.format(li.getDataTime(), timeFormat)));
+
+        Map<String,Double> energyProportionMap = new HashMap<>();
+        while (!beginTime.after(endTime)) {
+            final String currentTime = DateUtil.format(beginTime, timeFormat);
+
+            final List<DataItem> dataItems = dataItemMap.get(currentTime);
+            BigDecimal sum = new BigDecimal(0);
+            if (CollectionUtils.isNotEmpty(dataItems)) {
+                // 姹傚拰
+                for (int i=0;i<dataItems.size(); i++){
+                    final DataItem dataItem = dataItems.get(i);
+                    final String indexId = dataItem.getIndexId();
+                    final String energyId = indexIdEnergyIdMap.get(indexId);
+
+                    final BigDecimal coefficient = (BigDecimal) energyCoefficientMap.get(energyId);
+                    if(coefficient == null){
+                        throw new RuntimeException("鑳芥簮绫诲瀷" + energyId + "娌℃湁閰嶇疆鎶樻爣绯绘暟锛屾棤娉曡绠�");
+                    }
+
+                    sum = sum.add(new BigDecimal(dataItem.getValue()).multiply(coefficient)).setScale(2, RoundingMode.HALF_UP);;
+//                    if(energyProportionMap.containsKey(energyId)) {
+//                        energyProportionMap.put(energyId,energyProportionMap.get(energyId) + sum.doubleValue());
+//                    }else {
+//                        energyProportionMap.put(energyId, sum.doubleValue());
+//                    }
+                }
+
+            }
+
+            switch (TimeType.valueOf(queryTimeType)) {
+                case DAY:
+                    beginTime = DateUtil.offsetHour(beginTime, 1);
+                    break;
+                case MONTH:
+                    beginTime = DateUtil.offsetDay(beginTime, 1);
+                    break;
+                default:
+                    beginTime = DateUtil.offsetMonth(beginTime, 1);
+                    break;
+            }
+        }
+
+
+
+        
+        Map<String, List<DataItem>> indexDataItemMap = dataItemList.stream().collect(Collectors.groupingBy(DataItem::getIndexId));
+
+        indexDataItemMap.forEach((indexId,value)->{
+            final String energyId = indexIdEnergyIdMap.get(indexId);
+
+            final BigDecimal coefficient = (BigDecimal) energyCoefficientMap.get(energyId);
+            if(coefficient == null){
+                throw new RuntimeException("鑳芥簮绫诲瀷" + energyId + "娌℃湁閰嶇疆鎶樻爣绯绘暟锛屾棤娉曡绠�");
+            }
+
+            final double sum = value.stream().map(DataItem::getValue).mapToDouble(Double::doubleValue).sum();
+            if(energyProportionMap.containsKey(energyId)) {
+                energyProportionMap.put(energyId,energyProportionMap.get(energyId) + sum * coefficient.doubleValue());
+            }else {
+                energyProportionMap.put(energyId, sum * coefficient.doubleValue());
+            }
+        });
+        Double eneryTotal =  energyProportionMap.values().stream().mapToDouble(Double::doubleValue).sum();
+        return eneryTotal.doubleValue();
+    }
+
+    @Override
+    public List<RankingEnergyData> getEnergyRanking(ConsumptionAnalysisDTO dto) {
+        List<RankingEnergyData> energyDataList = new ArrayList<>();
+        //todo hmj 缁煎悎鑳借�楀厛榛樿鍙栧悓姣�
+        final String nodeId = dto.getNodeId();
+        final Date queryTime = dto.getDataTime();
+
+        /**
+         * 鏌ヨ鐐逛綅涓庣敤鑳藉崟鍏冧俊鎭�
+         */
+        List<ModelNodeIndexInfor> nodeIndexInforList = modelNodeMapper.getModelNodeByParentId(nodeId);
+        final Map<String, String> nodeNameMap = new HashMap<>();
+        nodeIndexInforList.forEach(n->{
+            final String id = n.getNodeId();
+            final String name = n.getName();
+            if(!nodeNameMap.containsKey(id)){
+                nodeNameMap.put(id,name);
+            }
+        });
+        // 鎸夌収鐐逛綅杩涜鍒嗙粍
+        Map<String, List<ModelNodeIndexInfor>> nodeIndexMap = nodeIndexInforList.stream().collect(
+                Collectors.groupingBy(ModelNodeIndexInfor::getNodeId));
+        final List<String> eneryIdList = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getEnergyId).distinct().collect(Collectors.toList());
+        final LambdaQueryWrapper<SysEnergy> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(CollectionUtils.isNotEmpty(eneryIdList),SysEnergy::getEnersno,eneryIdList);
+        final List<SysEnergy> sysEnergies = sysEnergyMapper.selectList(queryWrapper);
+        //鑳芥簮缂栧彿鍜岃兘婧愭姌鏍囩郴鏁�
+        final Map<String, Object> energyCoefficientMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, SysEnergy::getCoefficient));
+        //index鍜岃兘婧�
+        final Map<String, String> indexIdEnergyIdMap = new HashMap<>();
+        nodeIndexInforList.forEach(n->{
+            final String indexId = n.getIndexId();
+            final String energyId = n.getEnergyId();
+            if(!indexIdEnergyIdMap.containsKey(indexId)){
+                indexIdEnergyIdMap.put(indexId,energyId);
+            }
+        });
+        List<String> indexIds = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
+        Date beginTime;
+        Date endTime;
+        String queryTimeType = dto.getTimeType();
+        String shixuTimeType;
+        if (TimeType.DAY.name().equals(queryTimeType)) {
+            beginTime = DateUtil.beginOfDay(queryTime);
+            endTime = DateUtil.endOfDay(queryTime);
+            shixuTimeType = TimeType.HOUR.name();
+            // 鏈�
+        } else if (TimeType.MONTH.name().equals(queryTimeType)) {
+            beginTime = DateUtil.beginOfMonth(queryTime);
+            endTime = DateUtil.endOfMonth(queryTime);
+            shixuTimeType = TimeType.DAY.name();
+            // 骞�
+        } else {
+            beginTime = DateUtil.beginOfYear(queryTime);
+            endTime = DateUtil.endOfYear(queryTime);
+            shixuTimeType = TimeType.MONTH.name();
+        }
+        // 鏍规嵁indexId鏌ヨdataItem
+        List<DataItem> dataItemList = new ArrayList<>();
+        if(CollectionUtils.isNotEmpty(indexIds)) {
+            dataItemList = dataItemService.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, shixuTimeType, indexIds);
+        }
+        Map<String, List<DataItem>> dataItemMap = dataItemList.stream().collect(Collectors.groupingBy(DataItem::getIndexId));
+
+        Map<String,BigDecimal> resultMap = new HashMap<>();
+        nodeIndexMap.forEach((key, value) -> {
+            // 鎵惧嚭indexIds
+            List<String> indexIdList = value.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
+            
+            indexIdList.forEach(indexId->{
+                final List<DataItem> dataItems = dataItemMap.get(indexId);
+                final String energyId = indexIdEnergyIdMap.get(indexId);
+                final BigDecimal coefficient = (BigDecimal) energyCoefficientMap.get(energyId);
+                
+                if(CollectionUtils.isNotEmpty(dataItems) ){
+                    BigDecimal sum = BigDecimal.valueOf(dataItems.stream()
+                            .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP).multiply(coefficient);
+
+                    if (resultMap.containsKey(key)) {
+                        resultMap.put(key, resultMap.get(key).add(sum));
+                    } else {
+                        resultMap.put(key, sum);
+                    }
+                }
+            });
+        });
+
+        resultMap.forEach((key,value)->{
+            RankingEnergyData rankingEnergyData = new RankingEnergyData();
+            rankingEnergyData.setNodeId(key);
+            rankingEnergyData.setNodeName(nodeNameMap.get(key));
+            rankingEnergyData.setEnergyConsumption(value.doubleValue());
+            energyDataList.add(rankingEnergyData);
+        });
+        Collections.sort(energyDataList, Comparator.comparingDouble((RankingEnergyData item) -> item.getEnergyConsumption()).reversed());
+        // 鑾峰彇鍓�5鏉¤褰�
+        List<RankingEnergyData> top5Items = energyDataList.subList(0, Math.min(5, energyDataList.size()));
+
+        return top5Items;
+    }
+
+    @Override
+    public ConsumptionAnalysisVO getPlanAndProdCount(ConsumptionAnalysisDTO dto) {
+        ConsumptionAnalysisVO consumptionAnalysisVO = new ConsumptionAnalysisVO();
+        final Date queryTime = dto.getDataTime();
+        String queryTimeType = dto.getTimeType();
+
+        Date beginTime;
+        Date endTime;
+        long between;
+        String timeFormat;
+        if (TimeType.MONTH.name().equals(queryTimeType)) {
+            beginTime = DateUtil.beginOfMonth(queryTime);
+            endTime = DateUtil.endOfMonth(queryTime);
+            between = DateUtil.between(beginTime, endTime, DateUnit.DAY) + 1;
+            timeFormat = "yyyy-MM";
+            // 骞�
+        } else {
+            between = 12;
+            timeFormat = "yyyy";
+        }
+
+        LambdaQueryWrapper<EnergyIndicators> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EnergyIndicators::getTimeType,queryTimeType);
+        queryWrapper.eq(EnergyIndicators::getDataTime,DateUtil.format(dto.getDataTime(),timeFormat));
+        queryWrapper.eq(EnergyIndicators::getNodeId,dto.getNodeId());
+        queryWrapper.eq(EnergyIndicators::getEnergyType,dto.getEnergyType());
+        // 0 鏄鍒掗噺
+        queryWrapper.eq(EnergyIndicators::getIndicatorsType,"0");
+        final EnergyIndicators plan = energyIndicatorsMapper.selectOne(queryWrapper);
+        if(null != plan && null!= plan.getNumber()) {
+            consumptionAnalysisVO.setPlanCount(plan.getNumber().divide(new BigDecimal(between), CommonConst.DIGIT_2, RoundingMode.HALF_UP).doubleValue());
+        }else {
+            consumptionAnalysisVO.setPlanCount(0D);
+        }
+        queryWrapper.clear();
+
+
+        queryWrapper.eq(EnergyIndicators::getTimeType,queryTimeType);
+        queryWrapper.eq(EnergyIndicators::getDataTime,DateUtil.format(dto.getDataTime(),timeFormat));
+        queryWrapper.eq(EnergyIndicators::getNodeId,dto.getNodeId());
+        queryWrapper.eq(EnergyIndicators::getEnergyType,dto.getEnergyType());
+        queryWrapper.eq(EnergyIndicators::getIndicatorsType,"1");
+        final EnergyIndicators prod = energyIndicatorsMapper.selectOne(queryWrapper);
+        if(null != prod && null!= prod.getNumber()) {
+            consumptionAnalysisVO.setPlanCount(prod.getNumber().divide(new BigDecimal(between), CommonConst.DIGIT_2, RoundingMode.HALF_UP).doubleValue());
+        }else {
+            consumptionAnalysisVO.setProdCount(0D);
+        }
+        return consumptionAnalysisVO;
+    }
+
+    @Override
+    public ProductEnergyAnalysisVO getProdEnergy(ConsumptionAnalysisDTO dto) {
+        List<ProductEnergyAnalysisData> chart = new ArrayList<>();
+        List<ConsumptionAnalysisData> dataList = new ArrayList<>();
+
+        ProductEnergyAnalysisVO productEnergyAnalysisVO = new ProductEnergyAnalysisVO();
+
+        final String nodeId = dto.getNodeId();
+        final String energyType = dto.getEnergyType();
+        final Date queryTime = dto.getDataTime();
+
+        /**
+         * 鏌ヨ鐐逛綅涓庣敤鑳藉崟鍏冧俊鎭�
+         */
+        List<ModelNodeIndexInfor> nodeIndexInforList = modelNodeMapper.getModelNodeIndexIdByNodeId(nodeId,energyType);
+
+        final List<String> eneryIdList = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getEnergyId).distinct().collect(Collectors.toList());
+        final LambdaQueryWrapper<SysEnergy> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(CollectionUtils.isNotEmpty(eneryIdList),SysEnergy::getEnersno,eneryIdList);
+        final List<SysEnergy> sysEnergies = sysEnergyMapper.selectList(queryWrapper);
+        final Map<String, Object> energyCoefficientMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, SysEnergy::getCoefficient));
+        final Map<String, String> indexIdEnergyIdMap = new HashMap<>();
+        nodeIndexInforList.forEach(n->{
+            final String indexId = n.getIndexId();
+            final String energyId = n.getEnergyId();
+            if(!indexIdEnergyIdMap.containsKey(indexId)){
+                indexIdEnergyIdMap.put(indexId,energyId);
+            }
+        });
+        List<String> indexIds = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
+        Date beginTime;
+        Date endTime;
+        String queryTimeType = dto.getTimeType();
+        String shixuTimeType;
+        String timeFormat;
+        if (TimeType.DAY.name().equals(queryTimeType)) {
+            beginTime = DateUtil.beginOfDay(queryTime);
+            endTime = DateUtil.endOfDay(queryTime);
+            shixuTimeType = TimeType.HOUR.name();
+            timeFormat = "yyyy-MM-dd HH";
+            // 鏈�
+        } else if (TimeType.MONTH.name().equals(queryTimeType)) {
+            beginTime = DateUtil.beginOfMonth(queryTime);
+            endTime = DateUtil.endOfMonth(queryTime);
+            shixuTimeType = TimeType.DAY.name();
+            timeFormat = "yyyy-MM-dd";
+            // 骞�
+        } else {
+            beginTime = DateUtil.beginOfYear(queryTime);
+            endTime = DateUtil.endOfYear(queryTime);
+            shixuTimeType = TimeType.MONTH.name();
+            timeFormat = "yyyy-MM";
+        }
+        
+        
+
+        // 鏍规嵁indexId鏌ヨdataItem
+        List<DataItem> dataItemList = new ArrayList<>();
+        if(CollectionUtils.isNotEmpty(indexIds)) {
+            dataItemList = dataItemService.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, shixuTimeType, indexIds);
+        }
+        Map<String, List<DataItem>> dataItemMap = dataItemList.stream().collect(Collectors.groupingBy(li -> DateUtil.format(li.getDataTime(), timeFormat)));
+        Map<String, List<ProductOutput>> prodCountMap = new HashMap<>();
+        while (!beginTime.after(endTime)) {
+            //鏌ヨ寮�濮嬫椂闂村拰缁撴潫鏃堕棿涔嬮棿鐨勪骇閲�
+            LambdaQueryWrapper<ProductOutput> indicatorsWrapper = new LambdaQueryWrapper<>();
+            indicatorsWrapper.eq(ProductOutput::getTimeType,shixuTimeType);
+            indicatorsWrapper.eq(ProductOutput::getNodeId,dto.getNodeId());
+            indicatorsWrapper.eq(ProductOutput::getDataTime,DateUtil.format(beginTime,timeFormat));
+            List<ProductOutput> energyIndicators = productOutputMapper.selectList(indicatorsWrapper);
+            prodCountMap.put(DateUtil.format(beginTime,timeFormat),energyIndicators);
+            
+            ConsumptionAnalysisData data = new ConsumptionAnalysisData();
+            final String currentTime = DateUtil.format(beginTime, timeFormat);
+
+            final List<DataItem> dataItems = dataItemMap.get(currentTime);
+            BigDecimal sum = new BigDecimal(0);
+            if (CollectionUtils.isNotEmpty(dataItems)) {
+                // 姹傚拰
+                for (int i=0;i<dataItems.size(); i++){
+                    final DataItem dataItem = dataItems.get(i);
+                    final String indexId = dataItem.getIndexId();
+                    final String energyId = indexIdEnergyIdMap.get(indexId);
+
+                    final BigDecimal coefficient = (BigDecimal) energyCoefficientMap.get(energyId);
+                    if(coefficient == null){
+                        throw new RuntimeException("鑳芥簮绫诲瀷" + energyId + "娌℃湁閰嶇疆鎶樻爣绯绘暟锛屾棤娉曡绠�");
+                    }
+
+                    sum = sum.add(new BigDecimal(dataItem.getValue()).multiply(coefficient)).setScale(2, RoundingMode.HALF_UP);;
+                }
+
+            }
+
+            data.setCurrentValue(sum.doubleValue());
+            data.setCurrentTime(currentTime);
+
+            dataList.add(data);
+
+            switch (TimeType.valueOf(queryTimeType)) {
+                case DAY:
+                    beginTime = DateUtil.offsetHour(beginTime, 1);
+                    break;
+                case MONTH:
+                    beginTime = DateUtil.offsetDay(beginTime, 1);
+                    break;
+                default:
+                    beginTime = DateUtil.offsetMonth(beginTime, 1);
+                    break;
+            }
+        }
+        dataList.forEach(d->{
+            ProductEnergyAnalysisData productEnergyAnalysisData = new ProductEnergyAnalysisData();
+            final String currentTime = d.getCurrentTime();
+            
+            productEnergyAnalysisData.setDateTime(currentTime);
+            
+            final List<ProductOutput> productOutputs = prodCountMap.get(currentTime);
+            if(StringUtils.isEmpty(dto.getProdType())){
+                productEnergyAnalysisData.setEnergyCount(format2Double(d.getCurrentValue()));
+                final double sum = productOutputs.stream().map(ProductOutput::getNumber).mapToDouble(BigDecimal::doubleValue).sum();
+                productEnergyAnalysisData.setProductCount(format2Double(sum));
+                if(sum != 0) {
+                    final double averageEnergy = productEnergyAnalysisData.getEnergyCount() / productEnergyAnalysisData.getProductCount();
+                    // 鍒涘缓DecimalFormat瀵硅薄锛岃缃繚鐣欎袱浣嶅皬鏁�
+                    DecimalFormat df = new DecimalFormat("#.00");
+
+                    // 鏍煎紡鍖栫粨鏋�
+                    String formattedResult = df.format(averageEnergy);
+                    productEnergyAnalysisData.setAverage(Double.valueOf(formattedResult));
+                }else {
+                    productEnergyAnalysisData.setAverage(0);
+                }
+            }else {
+                if(CollectionUtils.isNotEmpty(productOutputs)) {
+                    final Map<String, List<ProductOutput>> productTypeMap = productOutputs.stream().collect(Collectors.groupingBy(ProductOutput::getProductType));
+                    final double sum = productOutputs.stream().map(ProductOutput::getNumber).mapToDouble(BigDecimal::doubleValue).sum();
+                    final List<ProductOutput> outputList = productTypeMap.get(dto.getProdType());
+                    if(CollectionUtils.isNotEmpty(outputList)) {
+                        final double enengyProd = outputList.stream().map(ProductOutput::getNumber).mapToDouble(BigDecimal::doubleValue).sum();
+                        productEnergyAnalysisData.setProductCount(format2Double(enengyProd));
+                        productEnergyAnalysisData.setEnergyCount(format2Double(d.getCurrentValue() * enengyProd / sum));
+                        if (enengyProd != 0) {
+                            final double averageEnergy = productEnergyAnalysisData.getEnergyCount() / productEnergyAnalysisData.getProductCount();
+                            double formattedResult = format2Double(averageEnergy);
+                            productEnergyAnalysisData.setAverage(formattedResult);
+                        } else {
+                            productEnergyAnalysisData.setAverage(0);
+                        }
+                    }else {
+                        productEnergyAnalysisData.setProductCount(0);
+                        productEnergyAnalysisData.setEnergyCount(d.getCurrentValue());
+                        productEnergyAnalysisData.setAverage(0);
+                    }
+                }else {
+                    productEnergyAnalysisData.setProductCount(0);
+                    productEnergyAnalysisData.setEnergyCount(d.getCurrentValue());
+                    productEnergyAnalysisData.setAverage(0);
+                }
+            }
+            
+           
+            chart.add(productEnergyAnalysisData);
+        });
+
+        productEnergyAnalysisVO.setChart(chart);
+        final double totalEnergy = chart.stream().map(ProductEnergyAnalysisData::getEnergyCount).mapToDouble(Double::doubleValue).sum();
+        final double totalProd = chart.stream().map(ProductEnergyAnalysisData::getProductCount).mapToDouble(Double::doubleValue).sum();
+        productEnergyAnalysisVO.setTotalEnergy(format2Double(totalEnergy));
+        productEnergyAnalysisVO.setTotalProduct(format2Double(totalProd));
+        if(totalProd != 0) {
+            productEnergyAnalysisVO.setAverageEnergy(format2Double(totalEnergy / totalProd));
+        }else {
+            productEnergyAnalysisVO.setAverageEnergy(0D);
+        }
+        return productEnergyAnalysisVO;
+    }
+
+    private double format2Double(double averageEnergy) {
+        // 鍒涘缓DecimalFormat瀵硅薄锛岃缃繚鐣欎袱浣嶅皬鏁�
+        DecimalFormat df = new DecimalFormat("#.00");
+
+        // 鏍煎紡鍖栫粨鏋�
+        String formattedResult = df.format(averageEnergy);
+        return Double.valueOf(formattedResult);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/dataitem/domain/DataEntry.java b/zhitan-system/src/main/java/com/zhitan/dataitem/domain/DataEntry.java
new file mode 100644
index 0000000..c4a7b0f
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/dataitem/domain/DataEntry.java
@@ -0,0 +1,112 @@
+package com.zhitan.dataitem.domain;
+
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * stagseDataEntry瀵硅薄 data_item
+ * 
+ * @author sys
+ * @date 2020-03-25
+ */
+public class DataEntry extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    @Excel(name = "鎸囨爣id")
+    private String indexId;
+
+    @Excel(name = "鎸囨爣code")
+    private String timeCode;
+
+    @Excel(name = "鍊�")
+    private String value;
+
+    @Excel(name = "寮�濮嬫椂闂�")
+    private Date beginTime;
+
+    @Excel(name = "缁撴潫鏃堕棿")
+    private Date endTime;
+
+    private String quality;
+
+    @Excel(name = "鏃堕棿绫诲瀷")
+    private String timeType;
+
+    @Excel(name = "鏁版嵁鏃堕棿")
+    private Date dataTime;
+
+    public void setIndexId(String indexId) 
+    {
+        this.indexId = indexId;
+    }
+
+    public String getIndexId() 
+    {
+        return indexId;
+    }
+    public void setTimeCode(String timeCode) 
+    {
+        this.timeCode = timeCode;
+    }
+
+    public String getTimeCode() 
+    {
+        return timeCode;
+    }
+    public void setBeginTime(Date beginTime) 
+    {
+        this.beginTime = beginTime;
+    }
+
+    public String getValue() {return value;}
+
+    public void setValue(String value) {this.value = value;}
+
+    public void setQuality(String quality)
+    {
+        this.quality = quality;
+    }
+
+    public String getQuality() 
+    {
+        return quality;
+    }
+    public void setTimeType(String timeType) 
+    {
+        this.timeType = timeType;
+    }
+
+    public String getTimeType() 
+    {
+        return timeType;
+    }
+    public void setDataTime(Date dataTime) 
+    {
+        this.dataTime = dataTime;
+    }
+
+    public Date getDataTime() 
+    {
+        return dataTime;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("createTime", getCreateTime())
+            .append("updateTime", getUpdateTime())
+            .append("indexId", getIndexId())
+            .append("timeCode", getTimeCode())
+            .append("beginTime", getBeginTime())
+            .append("endTime", getEndTime())
+            .append("quality", getQuality())
+            .append("timeType", getTimeType())
+            .append("value", getValue())
+            .append("dataTime", getDataTime())
+            .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/dataitem/domain/StagseDataEntry.java b/zhitan-system/src/main/java/com/zhitan/dataitem/domain/StagseDataEntry.java
new file mode 100644
index 0000000..c1062d6
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/dataitem/domain/StagseDataEntry.java
@@ -0,0 +1,50 @@
+package com.zhitan.dataitem.domain;
+
+import com.zhitan.common.enums.TimeType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * stagseDataEntry瀵硅薄 data_item
+ *
+ * @author sys
+ * @date 2020-03-25
+ */
+@Data
+@ApiModel(value = "闃舵褰曞叆瀹炰綋")
+public class StagseDataEntry implements Serializable {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty(value = "鑺傜偣id")
+    private String nodeId;
+    @ApiModelProperty(value = "鏃堕棿绫诲瀷")
+    private TimeType timeType;
+    @ApiModelProperty(value = "鎸囨爣id")
+    private String indexId;
+    @ApiModelProperty(value = "鎸囨爣缂栫爜")
+    private String indexCode;
+    @ApiModelProperty(value = "璁$畻鏂瑰紡")
+    private String calcType;
+    @ApiModelProperty(value = "缂栫爜")
+    private String code;
+    @ApiModelProperty(value = "鍚嶇О")
+    private String name;
+    @ApiModelProperty(value = "鍗曚綅")
+    private String unitId;
+    @ApiModelProperty(value = "鍊�")
+    private Double value;
+    @ApiModelProperty(value = "鏃堕棿缂栫爜")
+    private String timeCode;
+    @ApiModelProperty(value = "鏃ユ湡")
+    private Date dataTime;
+    @ApiModelProperty(value = "鏃ユ湡瀛楃涓�")
+    private String dataTimeStr;
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    private Date beginTime;
+    @ApiModelProperty(value = "缁撴潫鏃堕棿")
+    private Date endTime;
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java b/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java
new file mode 100644
index 0000000..e34439c
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java
@@ -0,0 +1,78 @@
+package com.zhitan.dataitem.mapper;
+
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.dataitem.domain.StagseDataEntry;
+import com.zhitan.realtimedata.domain.DataItem;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 闃舵鏁版嵁褰曞叆鎺ュ彛
+ * 
+ * @author sys
+ * @date 2020-03-25
+ */
+public interface DataItemMapper {
+    /**
+     * 闃舵鏁版嵁褰曞叆
+     *
+     * @param stagseDataEntry
+     * @return 缁撴灉
+     */
+    public List<StagseDataEntry> getSettingIndex(StagseDataEntry stagseDataEntry);
+
+    public List<StagseDataEntry> getSettingEdit(StagseDataEntry stagseDataEntry);
+
+    List<StagseDataEntry> stagseDataByCode(@Param("nodeId") String nodeId,
+                                           @Param("indexCodes") List<String> indexCodes,
+                                           @Param("timeType") TimeType timeType,
+                                           @Param("beginTime") Date beginTime,
+                                           @Param("endTime") Date endTime,
+                                           @Param("calcType") String calcType);
+
+    /**
+     * 鏍规嵁indexId涓庢椂闂磋寖鍥存煡璇ataitem淇℃伅
+     *
+     * @param beginTime 寮�濮嬫椂闂�
+     * @param endTime   鎴鏃堕棿
+     * @param timeType  鏃堕棿绫诲瀷
+     * @param indexIds  鐐逛綅闆嗗悎
+     * @return
+     */
+    List<DataItem> getDataItemTimeRangeInforByIndexIds(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime,
+                                                       @Param("timeType") String timeType, @Param("indexIds") List<String> indexIds);
+
+    /**
+     * 鏍规嵁indexId涓庢椂闂磋寖鍥存煡璇ataitem鍚堣淇℃伅
+     *
+     * @param beginTime 寮�濮嬫椂闂�
+     * @param endTime   鎴鏃堕棿
+     * @param timeType  鏃堕棿绫诲瀷
+     * @param indexIds  鐐逛綅闆嗗悎
+     * @return
+     */
+    BigDecimal getDataItemTimeRangeValueByIndexIds(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime,
+                                                   @Param("timeType") String timeType, @Param("indexIds") List<String> indexIds);
+
+    /**
+     * 鏍规嵁indexId涓庢椂闂寸紪鐮佹煡璇㈢偣浣嶅�煎悎璁�
+     *
+     * @param timeCode 鏃堕棿缂栫爜
+     * @param indexIds 鐐逛綅id闆嗗悎
+     * @return
+     */
+    List<DataItem> getDataItemInforByIndexIds(@Param("timeCode") String timeCode, @Param("indexIds") List<String> indexIds);
+
+    /**
+     * 鏍规嵁indexId涓庢椂闂寸紪鐮佹煡璇㈠悎璁″��
+     *
+     * @param timeCode 鏃堕棿缂栫爜
+     * @param indexIds 鐐逛綅id闆嗗悎
+     * @return
+     */
+    BigDecimal getDataItemValueByIndexIds(@Param("timeCode") String timeCode, @Param("indexIds") List<String> indexIds);
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java b/zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java
new file mode 100644
index 0000000..6266f72
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java
@@ -0,0 +1,80 @@
+package com.zhitan.dataitem.service;
+
+
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.dataitem.domain.StagseDataEntry;
+import com.zhitan.realtimedata.domain.DataItem;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 闃舵鏁版嵁褰曞叆鎺ュ彛
+ * 
+ * @author sys
+ * @date 2020-03-25
+ */
+public interface IDataItemService {
+    /**
+     * 鏌ヨ闇�瑕佹墜鍔ㄥ綍鍏ョ殑闃舵鏁版嵁
+     * 
+     * @param stagseDataEntry
+     * @return stagseDataEntry闆嗗悎
+     */
+    public List<StagseDataEntry> getSettingIndex(StagseDataEntry stagseDataEntry);
+
+    /**
+     * 鏌ヨ淇敼鎵嬪姩褰曞叆鐨勯樁娈垫暟鎹�
+     *
+     * @param stagseDataEntry
+     * @return stagseDataEntry闆嗗悎
+     */
+    public List<StagseDataEntry> getSettingEdit(StagseDataEntry stagseDataEntry);
+
+    public List<StagseDataEntry> stagseDataEntry(String nodeId, List<String> indexCodes,
+                                                 TimeType timeType,
+                                                 Date beginTime,
+                                                 Date endTime,
+                                                 String calcType);
+
+    /**
+     * 鏍规嵁indexId涓庢椂闂磋寖鍥存煡璇ataitem鍚堣淇℃伅
+     *
+     * @param beginTime 寮�濮嬫椂闂�
+     * @param endTime   鎴鏃堕棿
+     * @param timeType  鏃堕棿绫诲瀷
+     * @param indexIds  鐐逛綅闆嗗悎
+     * @return
+     */
+    BigDecimal getDataItemTimeRangeValueByIndexIds(Date beginTime, Date endTime, String timeType, List<String> indexIds);
+
+    /**
+     * 鏍规嵁indexId涓庢椂闂磋寖鍥存煡璇ataitem淇℃伅
+     *
+     * @param beginTime 寮�濮嬫椂闂�
+     * @param endTime   鎴鏃堕棿
+     * @param timeType  鏃堕棿绫诲瀷
+     * @param indexIds  鐐逛綅闆嗗悎
+     * @return
+     */
+    List<DataItem> getDataItemTimeRangeInforByIndexIds(Date beginTime, Date endTime, String timeType, List<String> indexIds);
+
+    /**
+     * 鏍规嵁indexId涓庢椂闂寸紪鐮佹煡璇㈢偣浣嶅�煎悎璁�
+     *
+     * @param timeCode 鏃堕棿缂栫爜
+     * @param indexIds 鐐逛綅id闆嗗悎
+     * @return
+     */
+    List<DataItem> getDataItemInforByIndexIds(String timeCode, List<String> indexIds);
+
+    /**
+     * 鏍规嵁indexId涓庢椂闂寸紪鐮佹煡璇㈠悎璁″��
+     *
+     * @param timeCode 鏃堕棿缂栫爜
+     * @param indexIds 鐐逛綅id闆嗗悎
+     * @return
+     */
+    BigDecimal getDataItemValueByIndexIds(String timeCode, List<String> indexIds);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java
new file mode 100644
index 0000000..0b82a1d
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java
@@ -0,0 +1,106 @@
+package com.zhitan.dataitem.service.impl;
+
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.dataitem.domain.StagseDataEntry;
+import com.zhitan.dataitem.mapper.DataItemMapper;
+import com.zhitan.dataitem.service.IDataItemService;
+import com.zhitan.realtimedata.domain.DataItem;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * stagseDataEntryService涓氬姟灞傚鐞�
+ *
+ * @author sys
+ * @date 2020-03-25
+ */
+@Service
+@AllArgsConstructor
+public class DataItemServiceImpl implements IDataItemService {
+
+    private final DataItemMapper dataItemMapper;
+
+
+    /**
+     * 鏌ヨ闇�瑕佹墜鍔ㄥ綍鍏ョ殑闃舵鏁版嵁
+     *
+     * @param stagseDataEntry
+     * @return 缁撴灉
+     */
+    @Override
+    public List<StagseDataEntry> getSettingIndex(StagseDataEntry stagseDataEntry) {
+        return dataItemMapper.getSettingIndex(stagseDataEntry);
+    }
+
+    /**
+     * 鏌ヨ淇敼鎵嬪姩褰曞叆鐨勯樁娈垫暟鎹�
+     *
+     * @param stagseDataEntry
+     * @return 缁撴灉
+     */
+    @Override
+    public List<StagseDataEntry> getSettingEdit(StagseDataEntry stagseDataEntry) {
+        return dataItemMapper.getSettingEdit(stagseDataEntry);
+    }
+
+    @Override
+    public List<StagseDataEntry> stagseDataEntry(String nodeId, List<String> indexCodes, TimeType timeType, Date beginTime, Date endTime, String calcType) {
+        return dataItemMapper.stagseDataByCode(nodeId, indexCodes, timeType, beginTime, endTime, calcType);
+    }
+
+    /**
+     * 鏍规嵁indexId涓庢椂闂磋寖鍥存煡璇ataitem鍚堣淇℃伅
+     *
+     * @param beginTime 寮�濮嬫椂闂�
+     * @param endTime   鎴鏃堕棿
+     * @param timeType  鏃堕棿绫诲瀷
+     * @param indexIds  鐐逛綅闆嗗悎
+     * @return
+     */
+    @Override
+    public BigDecimal getDataItemTimeRangeValueByIndexIds(Date beginTime, Date endTime, String timeType, List<String> indexIds) {
+        return dataItemMapper.getDataItemTimeRangeValueByIndexIds(beginTime, endTime, timeType, indexIds);
+    }
+
+    /**
+     * 鏍规嵁indexId涓庢椂闂磋寖鍥存煡璇ataitem淇℃伅
+     *
+     * @param beginTime 寮�濮嬫椂闂�
+     * @param endTime   鎴鏃堕棿
+     * @param timeType  鏃堕棿绫诲瀷
+     * @param indexIds  鐐逛綅闆嗗悎
+     * @return
+     */
+    @Override
+    public List<DataItem> getDataItemTimeRangeInforByIndexIds(Date beginTime, Date endTime, String timeType, List<String> indexIds) {
+        return dataItemMapper.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, timeType, indexIds);
+    }
+
+    /**
+     * 鏍规嵁indexId涓庢椂闂寸紪鐮佹煡璇㈢偣浣嶅�煎悎璁�
+     *
+     * @param timeCode 鏃堕棿缂栫爜
+     * @param indexIds 鐐逛綅id闆嗗悎
+     * @return
+     */
+    @Override
+    public List<DataItem> getDataItemInforByIndexIds(String timeCode, List<String> indexIds) {
+        return dataItemMapper.getDataItemInforByIndexIds(timeCode, indexIds);
+    }
+
+    /**
+     * 鏍规嵁indexId涓庢椂闂寸紪鐮佹煡璇㈠悎璁″��
+     *
+     * @param timeCode 鏃堕棿缂栫爜
+     * @param indexIds 鐐逛綅id闆嗗悎
+     * @return
+     */
+    @Override
+    public BigDecimal getDataItemValueByIndexIds(String timeCode, List<String> indexIds) {
+        return dataItemMapper.getDataItemValueByIndexIds(timeCode, indexIds);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyIndicators/domain/EnergyIndicators.java b/zhitan-system/src/main/java/com/zhitan/energyIndicators/domain/EnergyIndicators.java
new file mode 100644
index 0000000..9c7ecdc
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyIndicators/domain/EnergyIndicators.java
@@ -0,0 +1,196 @@
+package com.zhitan.energyIndicators.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zhitan.common.core.domain.BaseEntity;
+import lombok.Data;
+import com.zhitan.common.annotation.Excel;
+
+import java.math.BigDecimal;
+
+/**
+ * 鑳芥簮鎸囨爣瀵硅薄 energy_indicators
+ *
+ * @author ZhiTan
+ * @date 2024-10-25
+ */
+@TableName("energy_indicators")
+@Data
+public class EnergyIndicators extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** 鐢ㄨ兘鍗曞厓id锛坢odel_node锛� */
+    @Excel(name = "鐢ㄨ兘鍗曞厓id", readConverterExp = "model_node")
+    private String nodeId;
+
+    /** 鏃堕棿绫诲瀷锛堝勾銆佹湀銆佹棩锛� */
+    @Excel(name = "鏃堕棿绫诲瀷", readConverterExp = "骞淬�佹湀銆佹棩")
+    private String timeType;
+
+    /** 鏃堕棿 */
+    @Excel(name = "鏃堕棿")
+    private String dataTime;
+
+    /** 鍚嶇О */
+    @Excel(name = "鍚嶇О")
+    private String name;
+
+    /** 浜ч噺 */
+    @Excel(name = "浜ч噺")
+    private BigDecimal number;
+
+    /** 鍗曚綅 */
+    @Excel(name = "鍗曚綅")
+    private String unit;
+
+    /** 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛� */
+    private String delFlag;
+
+    /** 鑳芥簮绫诲瀷锛屽瓧鍏搁」energy_type */
+    @Excel(name = "鑳芥簮绫诲瀷锛屽瓧鍏搁」energy_type")
+    private String energyType;
+
+    /** 鎸囨爣绫诲瀷锛屽瓧鍏搁」indicators_type */
+    @Excel(name = "鎸囨爣绫诲瀷锛屽瓧鍏搁」indicators_type")
+    private String indicatorsType;
+
+    /** 涓婚敭 */
+    @Excel(name = "涓婚敭")
+    private String energyIndicatorsId;
+
+    /** 鑺傜偣鍚嶇О */
+    @Excel(name = "鑺傜偣鍚嶇О")
+    private String nodeName;
+
+//
+//    public void setNodeId(String nodeId)
+//    {
+//        this.nodeId = nodeId;
+//    }
+//
+//    public String getNodeId()
+//    {
+//        return nodeId;
+//    }
+//
+//    public void setTimeType(String timeType)
+//    {
+//        this.timeType = timeType;
+//    }
+//
+//    public String getTimeType()
+//    {
+//        return timeType;
+//    }
+//
+//    public void setDataTime(String dataTime)
+//    {
+//        this.dataTime = dataTime;
+//    }
+//
+//    public String getDataTime()
+//    {
+//        return dataTime;
+//    }
+//
+//    public void setName(String name)
+//    {
+//        this.name = name;
+//    }
+//
+//    public String getName()
+//    {
+//        return name;
+//    }
+//
+//    public void setNumber(String number)
+//    {
+//        this.number = number;
+//    }
+//
+//    public String getNumber()
+//    {
+//        return number;
+//    }
+//
+//    public void setUnit(String unit)
+//    {
+//        this.unit = unit;
+//    }
+//
+//    public String getUnit()
+//    {
+//        return unit;
+//    }
+//
+//    public void setDelFlag(String delFlag)
+//    {
+//        this.delFlag = delFlag;
+//    }
+//
+//    public String getDelFlag()
+//    {
+//        return delFlag;
+//    }
+//
+//    public void setEnergyType(String energyType)
+//    {
+//        this.energyType = energyType;
+//    }
+//
+//    public String getEnergyType()
+//    {
+//        return energyType;
+//    }
+//
+//    public void setIndicatorsType(String indicatorsType)
+//    {
+//        this.indicatorsType = indicatorsType;
+//    }
+//
+//    public String getIndicatorsType()
+//    {
+//        return indicatorsType;
+//    }
+//
+//    public void setEnergyIndicatorsId(String energyIndicatorsId)
+//    {
+//        this.energyIndicatorsId = energyIndicatorsId;
+//    }
+//
+//    public String getEnergyIndicatorsId()
+//    {
+//        return energyIndicatorsId;
+//    }
+//
+//    public void setNodeName(String nodeName)
+//    {
+//        this.nodeName = nodeName;
+//    }
+//
+//    public String getNodeName()
+//    {
+//        return nodeName;
+//    }
+//
+//    @Override
+//    public String toString() {
+//        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+//            .append("nodeId", getNodeId())
+//            .append("timeType", getTimeType())
+//            .append("dataTime", getDataTime())
+//            .append("name", getName())
+//            .append("number", getNumber())
+//            .append("unit", getUnit())
+//            .append("delFlag", getDelFlag())
+//            .append("createBy", getCreateBy())
+//            .append("createTime", getCreateTime())
+//            .append("updateBy", getUpdateBy())
+//            .append("updateTime", getUpdateTime())
+//            .append("remark", getRemark())
+//            .append("energyType", getEnergyType())
+//            .append("indicatorsType", getIndicatorsType())
+//            .append("energyIndicatorsId", getEnergyIndicatorsId())
+//            .append("nodeName", getNodeName())
+//        .toString();
+//    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyIndicators/mapper/EnergyIndicatorsMapper.java b/zhitan-system/src/main/java/com/zhitan/energyIndicators/mapper/EnergyIndicatorsMapper.java
new file mode 100644
index 0000000..91b96f1
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyIndicators/mapper/EnergyIndicatorsMapper.java
@@ -0,0 +1,62 @@
+package com.zhitan.energyIndicators.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.energyIndicators.domain.EnergyIndicators;
+
+import java.util.List;
+
+/**
+ * 鑳芥簮鎸囨爣Mapper鎺ュ彛
+ *
+ * @author ZhiTan
+ * @date 2024-10-25
+ */
+public interface EnergyIndicatorsMapper extends BaseMapper<EnergyIndicators> {
+    /**
+     * 鏌ヨ鑳芥簮鎸囨爣
+     *
+     * @param nodeId 鑳芥簮鎸囨爣涓婚敭
+     * @return 鑳芥簮鎸囨爣
+     */
+    public EnergyIndicators selectEnergyIndicatorsByNodeId(String nodeId);
+
+    /**
+     * 鏌ヨ鑳芥簮鎸囨爣鍒楄〃
+     *
+     * @param energyIndicators 鑳芥簮鎸囨爣
+     * @return 鑳芥簮鎸囨爣闆嗗悎
+     */
+    public List<EnergyIndicators> selectEnergyIndicatorsList(EnergyIndicators energyIndicators);
+
+    /**
+     * 鏂板鑳芥簮鎸囨爣
+     *
+     * @param energyIndicators 鑳芥簮鎸囨爣
+     * @return 缁撴灉
+     */
+    public int insertEnergyIndicators(EnergyIndicators energyIndicators);
+
+    /**
+     * 淇敼鑳芥簮鎸囨爣
+     *
+     * @param energyIndicators 鑳芥簮鎸囨爣
+     * @return 缁撴灉
+     */
+    public int updateEnergyIndicators(EnergyIndicators energyIndicators);
+
+    /**
+     * 鍒犻櫎鑳芥簮鎸囨爣
+     *
+     * @param energyIndicatorsId 鑳芥簮鎸囨爣涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteEnergyIndicatorsByEnergyIndicatorsId(String energyIndicatorsId);
+
+    /**
+     * 鎵归噺鍒犻櫎鑳芥簮鎸囨爣
+     *
+     * @param energyIndicatorsIdS 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteEnergyIndicatorsByEnergyIndicatorsIds(String[] energyIndicatorsIdS);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyIndicators/service/IEnergyIndicatorsService.java b/zhitan-system/src/main/java/com/zhitan/energyIndicators/service/IEnergyIndicatorsService.java
new file mode 100644
index 0000000..27590c6
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyIndicators/service/IEnergyIndicatorsService.java
@@ -0,0 +1,67 @@
+package com.zhitan.energyIndicators.service;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhitan.energyIndicators.domain.EnergyIndicators;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * 鑳芥簮鎸囨爣Service鎺ュ彛
+ *
+ * @author ZhiTan
+ * @date 2024-10-25
+ */
+public interface IEnergyIndicatorsService extends IService<EnergyIndicators> {
+    /**
+     * 鏌ヨ鑳芥簮鎸囨爣
+     *
+     * @param nodeId 鑳芥簮鎸囨爣涓婚敭
+     * @return 鑳芥簮鎸囨爣
+     */
+    public EnergyIndicators selectEnergyIndicatorsByNodeId(String nodeId);
+
+    /**
+     * 鏌ヨ鑳芥簮鎸囨爣鍒楄〃
+     *
+     * @param energyIndicators 鑳芥簮鎸囨爣
+     * @return 鑳芥簮鎸囨爣闆嗗悎
+     */
+    public Page<EnergyIndicators> selectEnergyIndicatorsPage(EnergyIndicators energyIndicators, Long pageNum, Long pageSize);
+
+    public List<EnergyIndicators> selectEnergyIndicatorsList(EnergyIndicators energyIndicators);
+
+    /**
+     * 鏂板鑳芥簮鎸囨爣
+     *
+     * @param energyIndicators 鑳芥簮鎸囨爣
+     * @return 缁撴灉
+     */
+    public int insertEnergyIndicators(EnergyIndicators energyIndicators);
+
+    /**
+     * 淇敼鑳芥簮鎸囨爣
+     *
+     * @param energyIndicators 鑳芥簮鎸囨爣
+     * @return 缁撴灉
+     */
+    public int updateEnergyIndicators(EnergyIndicators energyIndicators);
+
+    /**
+     * 鎵归噺鍒犻櫎鑳芥簮鎸囨爣
+     *
+     * @param energyIndicatorsIds 闇�瑕佸垹闄ょ殑鑳芥簮鎸囨爣涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteEnergyIndicatorsByEnergyIndicatorsIds(String[] energyIndicatorsIds);
+
+    /**
+     * 鍒犻櫎鑳芥簮鎸囨爣淇℃伅
+     *
+     * @param energyIndicatorsId 鑳芥簮鎸囨爣涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteEnergyIndicatorsByEnergyIndicatorsId(String energyIndicatorsId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyIndicators/service/impl/EnergyIndicatorsServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/energyIndicators/service/impl/EnergyIndicatorsServiceImpl.java
new file mode 100644
index 0000000..e011db8
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyIndicators/service/impl/EnergyIndicatorsServiceImpl.java
@@ -0,0 +1,108 @@
+package com.zhitan.energyIndicators.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import java.util.List;
+        import com.zhitan.common.utils.DateUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.energyIndicators.domain.EnergyIndicators;
+import com.zhitan.energyIndicators.mapper.EnergyIndicatorsMapper;
+import com.zhitan.energyIndicators.service.IEnergyIndicatorsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鑳芥簮鎸囨爣Service涓氬姟灞傚鐞�
+ *
+ * @author ZhiTan
+ * @date 2024-10-25
+ */
+@Service
+public class EnergyIndicatorsServiceImpl extends ServiceImpl<EnergyIndicatorsMapper, EnergyIndicators> implements IEnergyIndicatorsService {
+    @Autowired
+    private EnergyIndicatorsMapper energyIndicatorsMapper;
+
+    /**
+     * 鏌ヨ鑳芥簮鎸囨爣
+     *
+     * @param nodeId 鑳芥簮鎸囨爣涓婚敭
+     * @return 鑳芥簮鎸囨爣
+     */
+    @Override
+    public EnergyIndicators selectEnergyIndicatorsByNodeId(String nodeId) {
+        return energyIndicatorsMapper.selectEnergyIndicatorsByNodeId(nodeId);
+    }
+
+    @Override
+    public Page<EnergyIndicators> selectEnergyIndicatorsPage(EnergyIndicators energyIndicators, Long pageNum, Long pageSize) {
+        LambdaQueryWrapper<EnergyIndicators> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(StringUtils.isNotEmpty(energyIndicators.getTimeType()),EnergyIndicators::getTimeType,energyIndicators.getTimeType());
+        wrapper.eq(StringUtils.isNotEmpty(energyIndicators.getDataTime()),EnergyIndicators::getDataTime,energyIndicators.getDataTime());
+        wrapper.like(StringUtils.isNotEmpty(energyIndicators.getName()),EnergyIndicators::getName,energyIndicators.getName());
+        wrapper.between(StringUtils.isNotEmpty(energyIndicators.getBeginTime()),EnergyIndicators::getDataTime,energyIndicators.getBeginTime(),energyIndicators.getEndTime());
+        wrapper.eq(StringUtils.isNotEmpty(energyIndicators.getEnergyType()),EnergyIndicators::getEnergyType,energyIndicators.getEnergyType());
+        wrapper.eq(StringUtils.isNotEmpty(energyIndicators.getIndicatorsType()),EnergyIndicators::getIndicatorsType,energyIndicators.getIndicatorsType());
+        wrapper.eq(StringUtils.isNotEmpty(energyIndicators.getNodeId()),EnergyIndicators::getNodeId,energyIndicators.getNodeId());
+        wrapper.orderByDesc(EnergyIndicators::getCreateTime);
+        Page<EnergyIndicators> page = energyIndicatorsMapper.selectPage(new Page<EnergyIndicators>(pageNum, pageSize), wrapper);
+        return page;
+//        return energyIndicatorsMapper.selectEnergyIndicatorsList(energyIndicators);
+    }
+    /**
+     * 鏌ヨ鑳芥簮鎸囨爣鍒楄〃
+     *
+     * @param energyIndicators 鑳芥簮鎸囨爣
+     * @return 鑳芥簮鎸囨爣
+     */
+    @Override
+    public List<EnergyIndicators> selectEnergyIndicatorsList(EnergyIndicators energyIndicators) {
+        return energyIndicatorsMapper.selectEnergyIndicatorsList(energyIndicators);
+    }
+
+    /**
+     * 鏂板鑳芥簮鎸囨爣
+     *
+     * @param energyIndicators 鑳芥簮鎸囨爣
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertEnergyIndicators(EnergyIndicators energyIndicators) {
+        energyIndicators.setCreateTime(DateUtils.getNowDate());
+        return energyIndicatorsMapper.insertEnergyIndicators(energyIndicators);
+    }
+
+    /**
+     * 淇敼鑳芥簮鎸囨爣
+     *
+     * @param energyIndicators 鑳芥簮鎸囨爣
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateEnergyIndicators(EnergyIndicators energyIndicators) {
+        energyIndicators.setUpdateTime(DateUtils.getNowDate());
+        return energyIndicatorsMapper.updateEnergyIndicators(energyIndicators);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎鑳芥簮鎸囨爣
+     *
+     * @param energyIndicatorsId 闇�瑕佸垹闄ょ殑鑳芥簮鎸囨爣涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteEnergyIndicatorsByEnergyIndicatorsIds(String[] energyIndicatorsId) {
+        return energyIndicatorsMapper.deleteEnergyIndicatorsByEnergyIndicatorsIds(energyIndicatorsId);
+    }
+
+    /**
+     * 鍒犻櫎鑳芥簮鎸囨爣淇℃伅
+     *
+     * @param energyIndicatorsId 鑳芥簮鎸囨爣涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteEnergyIndicatorsByEnergyIndicatorsId(String energyIndicatorsId) {
+        return energyIndicatorsMapper.deleteEnergyIndicatorsByEnergyIndicatorsId(energyIndicatorsId);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/gatewaysetting/domain/GatewaySetting.java b/zhitan-system/src/main/java/com/zhitan/gatewaysetting/domain/GatewaySetting.java
new file mode 100644
index 0000000..a09a6f8
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/gatewaysetting/domain/GatewaySetting.java
@@ -0,0 +1,62 @@
+package com.zhitan.gatewaysetting.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 缃戝叧閰嶇疆淇℃伅瀵硅薄 gateway_setting
+ *
+ * @author ZhiTan
+ * @date 2024-10-30
+ */
+@TableName("gateway_setting")
+@Data
+public class GatewaySetting extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** UUID涓婚敭 */
+    private String id;
+
+    /** 缃戝叧缂栧彿 */
+    @Excel(name = "缃戝叧缂栧彿")
+    private String gatewayNum;
+
+    /** 缃戝叧鍚嶇О */
+    @Excel(name = "缃戝叧鍚嶇О")
+    private String gatewayName;
+
+    /** 瑙勬牸鍨嬪彿 */
+    @Excel(name = "瑙勬牸鍨嬪彿")
+    private String specsModel;
+
+    /** 瀹夎浣嶇疆 */
+    @Excel(name = "瀹夎浣嶇疆")
+    private String installLocation;
+
+    /** ip鍦板潃 */
+    @Excel(name = "ip鍦板潃")
+    private String ipAdd;
+
+    /** 杩愯鐘舵�侊細鏈煡銆佺绾裤�佸湪绾� */
+    @Excel(name = "杩愯鐘舵��")
+    private String runStatus;
+
+    /** 蹇冭烦鏃堕棿 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "蹇冭烦鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date hbtTime;
+
+    /** 璁¢噺鍣ㄥ叿鏁伴噺 */
+    @Excel(name = "璁¢噺鍣ㄥ叿鏁伴噺")
+    private Integer deviceNum;
+
+    /** 鐩戞祴鐐规暟閲� */
+    @Excel(name = "閲囬泦鐐规暟閲�")
+    private Integer ptNum;
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/gatewaysetting/mapper/GatewaySettingMapper.java b/zhitan-system/src/main/java/com/zhitan/gatewaysetting/mapper/GatewaySettingMapper.java
new file mode 100644
index 0000000..d7d92ca
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/gatewaysetting/mapper/GatewaySettingMapper.java
@@ -0,0 +1,83 @@
+package com.zhitan.gatewaysetting.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.gatewaysetting.domain.GatewaySetting;
+
+import java.util.List;
+
+/**
+ * 缃戝叧閰嶇疆淇℃伅Mapper鎺ュ彛
+ *
+ * @author ZhiTan
+ * @date 2024-10-30
+ */
+public interface GatewaySettingMapper extends BaseMapper<GatewaySetting> {
+    /**
+     * 鏌ヨ缃戝叧閰嶇疆淇℃伅
+     *
+     * @param id 缃戝叧閰嶇疆淇℃伅涓婚敭
+     * @return 缃戝叧閰嶇疆淇℃伅
+     */
+    public GatewaySetting selectGatewaySettingById(String id);
+
+    /**
+     * 鏌ヨ缃戝叧閰嶇疆淇℃伅鍒楄〃
+     *
+     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
+     * @return 缃戝叧閰嶇疆淇℃伅闆嗗悎
+     */
+    public List<GatewaySetting> selectGatewaySettingList(GatewaySetting gatewaySetting);
+
+    /**
+     * 鏂板缃戝叧閰嶇疆淇℃伅
+     *
+     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
+     * @return 缁撴灉
+     */
+    public int insertGatewaySetting(GatewaySetting gatewaySetting);
+
+    /**
+     * 淇敼缃戝叧閰嶇疆淇℃伅
+     *
+     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
+     * @return 缁撴灉
+     */
+    public int updateGatewaySetting(GatewaySetting gatewaySetting);
+
+    /**
+     * 鍒犻櫎缃戝叧閰嶇疆淇℃伅
+     *
+     * @param id 缃戝叧閰嶇疆淇℃伅涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteGatewaySettingById(String id);
+
+    /**
+     * 鎵归噺鍒犻櫎缃戝叧閰嶇疆淇℃伅
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteGatewaySettingByIds(String[] ids);
+
+    /**
+     * 鏍¢獙缃戝叧缂栫爜鏄惁鍞竴
+     *
+     * @param gatewaySetting 鏍¢獙鍙傛暟
+     * @return 缁撴灉
+     */
+    int checkOne(GatewaySetting gatewaySetting);
+
+    /**
+     * 缁熻璁¢噺鍣ㄥ叿鏁伴噺鍜屾祴鐐规暟閲�
+     *
+     * @param gatewaySetting 杩囨护鍙傛暟
+     * @return 缁撴灉
+     */
+    GatewaySetting ptNum(GatewaySetting gatewaySetting);
+
+    int addNum(GatewaySetting gatewaySetting);
+
+    int subNum(GatewaySetting gatewaySetting);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/gatewaysetting/service/IGatewaySettingService.java b/zhitan-system/src/main/java/com/zhitan/gatewaysetting/service/IGatewaySettingService.java
new file mode 100644
index 0000000..740348c
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/gatewaysetting/service/IGatewaySettingService.java
@@ -0,0 +1,85 @@
+package com.zhitan.gatewaysetting.service;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhitan.gatewaysetting.domain.GatewaySetting;
+
+import java.util.List;
+
+/**
+ * 缃戝叧閰嶇疆淇℃伅Service鎺ュ彛
+ *
+ * @author ZhiTan
+ * @date 2024-10-30
+ */
+public interface IGatewaySettingService extends IService<GatewaySetting> {
+    /**
+     * 鏌ヨ缃戝叧閰嶇疆淇℃伅
+     *
+     * @param id 缃戝叧閰嶇疆淇℃伅涓婚敭
+     * @return 缃戝叧閰嶇疆淇℃伅
+     */
+    public GatewaySetting selectGatewaySettingById(String id);
+
+    /**
+     * 鏌ヨ缃戝叧閰嶇疆淇℃伅鍒楄〃
+     *
+     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
+     * @return 缃戝叧閰嶇疆淇℃伅闆嗗悎
+     */
+    public List<GatewaySetting> selectGatewaySettingList(GatewaySetting gatewaySetting);
+
+    /**
+     * 鏂板缃戝叧閰嶇疆淇℃伅
+     *
+     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
+     * @return 缁撴灉
+     */
+    public int insertGatewaySetting(GatewaySetting gatewaySetting);
+
+    /**
+     * 淇敼缃戝叧閰嶇疆淇℃伅
+     *
+     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
+     * @return 缁撴灉
+     */
+    public int updateGatewaySetting(GatewaySetting gatewaySetting);
+
+    /**
+     * 鎵归噺鍒犻櫎缃戝叧閰嶇疆淇℃伅
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑缃戝叧閰嶇疆淇℃伅涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteGatewaySettingByIds(String[] ids);
+
+    /**
+     * 鍒犻櫎缃戝叧閰嶇疆淇℃伅淇℃伅
+     *
+     * @param id 缃戝叧閰嶇疆淇℃伅涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteGatewaySettingById(String id);
+
+    /**
+     * 鏍¢獙缃戝叧缂栫爜鏄惁鍞竴
+     * @param gatewaySetting
+     * @return
+     */
+    public int checkOne(GatewaySetting gatewaySetting);
+
+    /**
+     * 鏌ヨ璁¢噺鍣ㄥ叿鏁伴噺鍜岀洃娴嬬偣浣嶆暟閲�
+     * @param gatewaySetting
+     * @return
+     */
+    GatewaySetting ptNum(GatewaySetting gatewaySetting);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param gatewaySetting
+     * @return
+     */
+    Page<GatewaySetting> selectGatewaySettingPage(GatewaySetting gatewaySetting,Long pageNum, Long pageSize);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/gatewaysetting/service/impl/GatewaySettingServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/gatewaysetting/service/impl/GatewaySettingServiceImpl.java
new file mode 100644
index 0000000..5039796
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/gatewaysetting/service/impl/GatewaySettingServiceImpl.java
@@ -0,0 +1,127 @@
+package com.zhitan.gatewaysetting.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import java.util.List;
+import com.zhitan.common.utils.DateUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.energyIndicators.domain.EnergyIndicators;
+import com.zhitan.gatewaysetting.domain.GatewaySetting;
+import com.zhitan.gatewaysetting.mapper.GatewaySettingMapper;
+import com.zhitan.gatewaysetting.service.IGatewaySettingService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 缃戝叧閰嶇疆淇℃伅Service涓氬姟灞傚鐞�
+ *
+ * @author ZhiTan
+ * @date 2024-10-30
+ */
+@Service
+public class GatewaySettingServiceImpl extends ServiceImpl<GatewaySettingMapper, GatewaySetting> implements IGatewaySettingService {
+    @Autowired
+    private GatewaySettingMapper gatewaySettingMapper;
+
+    /**
+     * 鏌ヨ缃戝叧閰嶇疆淇℃伅
+     *
+     * @param id 缃戝叧閰嶇疆淇℃伅涓婚敭
+     * @return 缃戝叧閰嶇疆淇℃伅
+     */
+    @Override
+    public GatewaySetting selectGatewaySettingById(String id) {
+        return gatewaySettingMapper.selectGatewaySettingById(id);
+    }
+
+    /**
+     * 鏌ヨ缃戝叧閰嶇疆淇℃伅鍒楄〃
+     *
+     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
+     * @return 缃戝叧閰嶇疆淇℃伅
+     */
+    @Override
+    public List<GatewaySetting> selectGatewaySettingList(GatewaySetting gatewaySetting) {
+        return gatewaySettingMapper.selectGatewaySettingList(gatewaySetting);
+    }
+
+    /**
+     * 鏂板缃戝叧閰嶇疆淇℃伅
+     *
+     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertGatewaySetting(GatewaySetting gatewaySetting) {
+        gatewaySetting.setCreateTime(DateUtils.getNowDate());
+        return gatewaySettingMapper.insertGatewaySetting(gatewaySetting);
+    }
+
+    /**
+     * 淇敼缃戝叧閰嶇疆淇℃伅
+     *
+     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateGatewaySetting(GatewaySetting gatewaySetting) {
+        gatewaySetting.setUpdateTime(DateUtils.getNowDate());
+        return gatewaySettingMapper.updateGatewaySetting(gatewaySetting);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎缃戝叧閰嶇疆淇℃伅
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑缃戝叧閰嶇疆淇℃伅涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteGatewaySettingByIds(String[] ids) {
+        return gatewaySettingMapper.deleteGatewaySettingByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎缃戝叧閰嶇疆淇℃伅淇℃伅
+     *
+     * @param id 缃戝叧閰嶇疆淇℃伅涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteGatewaySettingById(String id) {
+        return gatewaySettingMapper.deleteGatewaySettingById(id);
+    }
+
+    /**
+     * 鏍¢獙缃戝叧缂栫爜鏄惁鍞竴
+     * @param gatewaySetting
+     * @return
+     */
+    @Override
+    public int checkOne(GatewaySetting gatewaySetting) {
+        return gatewaySettingMapper.checkOne(gatewaySetting);
+    }
+
+    /**
+     *
+     * @param gatewaySetting 杩囨护鍙傛暟
+     * @return 缁撴灉
+     */
+    @Override
+    public GatewaySetting ptNum(GatewaySetting gatewaySetting) {
+        return gatewaySettingMapper.ptNum(gatewaySetting);
+    }
+
+    /**
+     * 鏌ヨ缃戝叧閰嶇疆淇℃伅鍒楄〃鍒嗛〉
+     *
+     * @param gatewaySetting 缃戝叧閰嶇疆淇℃伅
+     * @return 缃戝叧閰嶇疆淇℃伅
+     */
+    @Override
+    public Page<GatewaySetting> selectGatewaySettingPage(GatewaySetting gatewaySetting,Long pageNum, Long pageSize) {
+        LambdaQueryWrapper<GatewaySetting> queryWrapper = new LambdaQueryWrapper<GatewaySetting>();
+        queryWrapper.orderByDesc(GatewaySetting::getCreateTime);
+        return gatewaySettingMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/home/domain/vo/HomeEnergyConsumptionTrendVO.java b/zhitan-system/src/main/java/com/zhitan/home/domain/vo/HomeEnergyConsumptionTrendVO.java
new file mode 100644
index 0000000..1a3815c
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/home/domain/vo/HomeEnergyConsumptionTrendVO.java
@@ -0,0 +1,18 @@
+package com.zhitan.home.domain.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * description 棣栭〉-鑳芥簮瓒嬪娍
+ *
+ * @author hmj
+ * @date 2024-11-01 17:10
+ */
+@Getter
+@Setter
+public class HomeEnergyConsumptionTrendVO {
+    private String[] xdata;
+    private Double[][] ydata;
+    private String[] legend;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/home/domain/vo/HomeEnergyStatisticsVO.java b/zhitan-system/src/main/java/com/zhitan/home/domain/vo/HomeEnergyStatisticsVO.java
new file mode 100644
index 0000000..2445f83
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/home/domain/vo/HomeEnergyStatisticsVO.java
@@ -0,0 +1,47 @@
+package com.zhitan.home.domain.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class HomeEnergyStatisticsVO {
+
+    /**
+     * 鑳芥簮绫诲瀷缂栧彿
+     */
+    private String energyNo;
+    /**
+     * 鑳芥簮绫诲瀷鍚嶇О
+     */
+    private String energyName;
+
+    /**
+     * 鑳芥簮鍗曚綅
+     */
+    private String energyUnit;
+
+    /**
+     * 鍚堣鍊�
+     */
+    private Double count;
+
+    /**
+     * 鍚屾瘮
+     */
+    private Double tongbi;
+
+    /**
+     * 鐜瘮
+     */
+    private Double huanbi;
+
+    /** 绛変环鎶樻爣绯绘暟 */
+    private String coefficient;
+
+    /**
+     * 杞崲涓哄惃鏍囩叅
+     */
+    private Double tonCount;
+}
+
diff --git a/zhitan-system/src/main/java/com/zhitan/home/domain/vo/HomePeakValleyVO.java b/zhitan-system/src/main/java/com/zhitan/home/domain/vo/HomePeakValleyVO.java
new file mode 100644
index 0000000..cf802c6
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/home/domain/vo/HomePeakValleyVO.java
@@ -0,0 +1,26 @@
+package com.zhitan.home.domain.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * description todu
+ *
+ * @author hmj
+ * @date 2024-11-01 15:12
+ */
+@Getter
+@Setter
+public class HomePeakValleyVO {
+    //灏栥�佸嘲銆佸钩銆佽胺 鏃舵
+    public String timeType;
+
+    //灏栥�佸嘲銆佸钩銆佽胺 鏃舵
+    public String timeName;
+    
+    //浣跨敤閲�
+    public Double count;
+    
+    //鐧惧垎姣�
+    public Double percentage;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java
new file mode 100644
index 0000000..00d47cb
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java
@@ -0,0 +1,456 @@
+package com.zhitan.home.service;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zhitan.basicdata.domain.SysEnergy;
+import com.zhitan.basicdata.mapper.SysEnergyMapper;
+import com.zhitan.common.constant.CommonConst;
+import com.zhitan.common.core.domain.entity.SysDictData;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.consumptionanalysis.domain.vo.RankingEnergyData;
+import com.zhitan.dataitem.service.IDataItemService;
+import com.zhitan.home.domain.vo.HomeEnergyConsumptionTrendVO;
+import com.zhitan.home.domain.vo.HomeEnergyStatisticsVO;
+import com.zhitan.home.domain.vo.HomePeakValleyVO;
+import com.zhitan.home.service.impl.IHomePageService;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.domain.ModelNode;
+import com.zhitan.model.domain.vo.ModelNodeIndexInfor;
+import com.zhitan.model.mapper.ModelNodeMapper;
+import com.zhitan.model.service.IEnergyIndexService;
+import com.zhitan.model.service.IModelNodeService;
+import com.zhitan.peakvalley.domain.ElectricityDataItem;
+import com.zhitan.peakvalley.mapper.PeakValleyMapper;
+import com.zhitan.realtimedata.domain.DataItem;
+import com.zhitan.system.service.ISysDictDataService;
+import lombok.AllArgsConstructor;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * description todu
+ *
+ * @author hmj
+ * @date 2024-10-31 18:07
+ */
+@Service
+@AllArgsConstructor
+public class HomePageServiceImpl implements IHomePageService {
+
+    private final SysEnergyMapper sysEnergyMapper;
+
+    private final IModelNodeService modelNodeService;
+
+    private final IDataItemService dataItemService;
+
+    private final IEnergyIndexService energyIndexService;
+
+    private final ISysDictDataService sysDictDataService;
+
+    @Resource
+    private ModelNodeMapper modelNodeMapper;
+    @Resource
+    private PeakValleyMapper electricityDataItemMapper;
+
+
+    @Override
+    public List<HomeEnergyStatisticsVO> energyConsumptionSummation(String timeType, String modelcode) {
+        Date currentTime = new Date();
+//        Date currentTime = DateUtil.parseDateTime("2023-04-11 00:00:00");
+
+        DateTime tongbiTime = DateUtil.offsetMonth(currentTime, -12);
+        DateTime huanbiTime = DateUtil.offsetMonth(currentTime, -1);
+        final List<HomeEnergyStatisticsVO> current = getEnergyTotalByTime(timeType, modelcode, currentTime);
+        final List<HomeEnergyStatisticsVO> tongbi = getEnergyTotalByTime(timeType, modelcode, tongbiTime);
+        final List<HomeEnergyStatisticsVO> huanbi = getEnergyTotalByTime(timeType, modelcode, huanbiTime);
+
+        final Map<String, List<HomeEnergyStatisticsVO>> tongbiMap = tongbi.stream().collect(Collectors.groupingBy(HomeEnergyStatisticsVO::getEnergyNo));
+        final Map<String, List<HomeEnergyStatisticsVO>> huanbiMap = huanbi.stream().collect(Collectors.groupingBy(HomeEnergyStatisticsVO::getEnergyNo));
+
+        current.stream().forEach(vo->{
+            final String energyNo = vo.getEnergyNo();
+            final Double count = vo.getCount();
+            final Double tongbiCount = tongbiMap.get(energyNo).stream().map(HomeEnergyStatisticsVO::getCount).mapToDouble(Double::doubleValue).sum();
+            final Double huanbiCount = huanbiMap.get(energyNo).stream().map(HomeEnergyStatisticsVO::getCount).mapToDouble(Double::doubleValue).sum();
+
+            vo.setTonCount(format2Double( vo.getCount() * Double.valueOf(vo.getCoefficient())));
+            if (tongbiCount != 0) {
+                vo.setTongbi(format2Double( (count - tongbiCount) / tongbiCount * 100));
+            }else {
+                vo.setTongbi(0D);
+            }
+
+            if (huanbiCount != 0) {
+                vo.setHuanbi (format2Double((count - huanbiCount) / huanbiCount * 100));
+            }else {
+                vo.setHuanbi(0D);
+            }
+        });
+        return current;
+    }
+
+    private List<HomeEnergyStatisticsVO> getEnergyTotalByTime(String timeType, String modelcode, Date queryTime) {
+        List<HomeEnergyStatisticsVO> voList = new ArrayList<>();
+
+        Date beginTime;
+        Date endTime;
+        String shixuTimeType;
+        if (TimeType.DAY.name().equals(timeType)) {
+            beginTime = DateUtil.beginOfDay(queryTime);
+            endTime = DateUtil.endOfDay(beginTime);
+            shixuTimeType = TimeType.HOUR.name();
+            // 鏈�
+        } else if (TimeType.MONTH.name().equals(timeType)) {
+            beginTime = DateUtil.beginOfMonth(queryTime);
+            endTime = DateUtil.endOfMonth(beginTime);
+            shixuTimeType = TimeType.DAY.name();
+            // 骞�
+        } else {
+            beginTime = DateUtil.beginOfYear(queryTime);
+            endTime = DateUtil.endOfYear(beginTime);
+            shixuTimeType = TimeType.MONTH.name();
+        }
+
+        // 鏌ヨ鎵�鏈夎兘婧愮被鍨�
+        List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(new SysEnergy());
+        voList = sysEnergies.stream().map(dict -> {
+            HomeEnergyStatisticsVO vo = new HomeEnergyStatisticsVO();
+            vo.setEnergyName(dict.getEnername());
+            vo.setEnergyNo(dict.getEnersno());
+            vo.setEnergyUnit(dict.getMuid());
+            vo.setCount(0D);
+            vo.setTonCount(0D);
+            vo.setCoefficient(dict.getCoefficient().toString());
+            return vo;
+        }).sorted(Comparator.comparing(HomeEnergyStatisticsVO::getEnergyName)).collect(Collectors.toList());
+        // 閫氳繃code鑾峰彇modelnode瀵瑰簲index淇℃伅
+        ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(modelcode);
+        if (ObjectUtils.isEmpty(modelNode)) {
+            return voList;
+        }
+        List<ModelNodeIndexInfor> inforList = modelNodeService.getModelNodeIndexIdRelationInforByNodeId(modelNode.getNodeId());
+        List<String> indexIds = inforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
+        // 閫氳繃indexIds鎵綿ata_Item鏁版嵁
+        List<DataItem> itemList = dataItemService.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, shixuTimeType, indexIds);
+        // 鏌ヨ鐐逛綅璇︾粏淇℃伅
+        List<EnergyIndex> energyIndexInforList = energyIndexService.getEnergyIndexByIds(indexIds);
+        // 鑾峰彇鐐逛綅鑳芥簮绫诲瀷
+        Map<String, List<String>> energyTypeMap = energyIndexInforList.stream()
+                .filter(l -> StringUtils.isNotEmpty(l.getEnergyId())).collect(Collectors.groupingBy(
+                        EnergyIndex::getEnergyId, Collectors.mapping(EnergyIndex::getIndexId, Collectors.toList())
+                ));
+
+        for (HomeEnergyStatisticsVO ratioVO : voList) {
+            List<String> indexs = energyTypeMap.get(ratioVO.getEnergyNo());
+            if (CollectionUtils.isEmpty(indexs)) {
+                ratioVO.setCount(0D);
+            }else {
+                // 鎵惧埌鍚堣鍊�
+                double doubleCount = itemList.stream().filter(li -> indexs.contains(li.getIndexId())).mapToDouble(DataItem::getValue).sum();
+                ratioVO.setCount(format2Double(doubleCount));
+            }
+        }
+        return voList;
+    }
+
+    private double format2Double(double averageEnergy) {
+        // 鍒涘缓DecimalFormat瀵硅薄锛岃缃繚鐣欎袱浣嶅皬鏁�
+        DecimalFormat df = new DecimalFormat("#.00");
+
+        // 鏍煎紡鍖栫粨鏋�
+        String formattedResult = df.format(averageEnergy);
+        return Double.valueOf(formattedResult);
+    }
+
+    @Override
+    public List<HomePeakValleyVO> peakValley(String timeType, String modelcode) {
+        List<HomePeakValleyVO> voList = new ArrayList<>();
+        // 鏌ヨ鍣ㄥ叿绫诲瀷
+        final List<SysDictData> electricityPrice = sysDictDataService.selectDictDataByType("electricity_price");
+        electricityPrice.stream().forEach(v->{
+            HomePeakValleyVO vo = new HomePeakValleyVO();
+            vo.setTimeName(v.getDictLabel());
+            vo.setTimeType(v.getDictValue());
+            vo.setCount(0D);
+            vo.setPercentage(0D);
+            voList.add(vo);
+        });
+
+
+        Date queryTime = new Date();
+//        Date queryTime = DateUtil.parseDateTime("2024-08-28 00:00:00");
+        Date beginTime;
+        Date endTime;
+        String shixuTimeType;
+        if (TimeType.DAY.name().equals(timeType)) {
+            beginTime = DateUtil.beginOfDay(queryTime);
+            endTime = DateUtil.endOfDay(beginTime);
+            shixuTimeType = TimeType.HOUR.name();
+            // 鏈�
+        } else if (TimeType.MONTH.name().equals(timeType)) {
+            beginTime = DateUtil.beginOfMonth(queryTime);
+            endTime = DateUtil.endOfMonth(beginTime);
+            shixuTimeType = TimeType.DAY.name();
+            // 骞�
+        } else {
+            beginTime = DateUtil.beginOfYear(queryTime);
+            endTime = DateUtil.endOfYear(beginTime);
+            shixuTimeType = TimeType.MONTH.name();
+        }
+
+        Map<String, List<ElectricityDataItem>> electricityDataMap;
+        // 鏌ヨ鐐逛綅淇℃伅
+        final ModelNode firstModeNodeInfo = modelNodeMapper.getFirstModeNodeInfo(modelcode);
+        if(null == firstModeNodeInfo){
+            return voList;
+        }
+
+        double totalElectric;
+        // 鏌ヨ鐐逛綅淇℃伅
+        List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(modelcode, firstModeNodeInfo.getNodeId());
+        if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
+            Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
+            List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatistics(indexSet, beginTime, endTime, shixuTimeType);
+            if(null != dataItemList){
+                totalElectric = dataItemList.stream().map(ElectricityDataItem::getElectricity).mapToDouble(BigDecimal::doubleValue).sum();
+            } else {
+                totalElectric = 0;
+            }
+            electricityDataMap = dataItemList.stream()
+                    .collect(Collectors.groupingBy(ElectricityDataItem::getElectricityType));
+        } else {
+            totalElectric = 0;
+            electricityDataMap = null;
+        }
+        if(null != electricityDataMap) {
+            voList.stream().forEach(vo -> {
+                final List<ElectricityDataItem> electricityDataItems = electricityDataMap.get(vo.getTimeType());
+                if(null != electricityDataItems) {
+                    final double sum = electricityDataItems.stream().map(ElectricityDataItem::getElectricity).mapToDouble(BigDecimal::doubleValue).sum();
+                    vo.setCount(sum);
+                    if(totalElectric != 0) {
+                        vo.setPercentage(format2Double(sum / totalElectric * 100));
+                    }
+                }
+            });
+        }
+        return voList;
+    }
+
+    @Override
+    public HomeEnergyConsumptionTrendVO energyConsumptionTrend(String timeType, String modelcode) {
+        HomeEnergyConsumptionTrendVO vo = new HomeEnergyConsumptionTrendVO();
+        List<List<Double>> ydataList = new ArrayList<>();
+        List<String> xdataList = new ArrayList<>();
+        // 鏌ヨ鎵�鏈夎兘婧愮被鍨�
+        List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(new SysEnergy());
+        final Map<String, Object> energyCollectMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, SysEnergy::getCoefficient));
+        final Map<String, String> energyNameMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, SysEnergy::getEnername));
+
+
+        Date queryTime = new Date();
+//        Date queryTime = DateUtil.parseDateTime("2023-03-28 00:00:00");
+        Date beginTime;
+        Date endTime;
+        String shixuTimeType;
+        String timeFormat;
+        if (TimeType.DAY.name().equals(timeType)) {
+            beginTime = DateUtil.beginOfDay(queryTime);
+            endTime = DateUtil.endOfDay(beginTime);
+            shixuTimeType = TimeType.HOUR.name();
+            timeFormat = "yyyy-MM-dd HH";
+            // 鏈�
+        } else if (TimeType.MONTH.name().equals(timeType)) {
+            beginTime = DateUtil.beginOfMonth(queryTime);
+            endTime = DateUtil.endOfMonth(beginTime);
+            shixuTimeType = TimeType.DAY.name();
+            timeFormat = "yyyy-MM-dd";
+            // 骞�
+        } else {
+            beginTime = DateUtil.beginOfYear(queryTime);
+            endTime = DateUtil.endOfYear(beginTime);
+            shixuTimeType = TimeType.MONTH.name();
+            timeFormat = "yyyy-MM";
+        }
+
+
+        // 閫氳繃code鑾峰彇modelnode瀵瑰簲index淇℃伅
+        ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(modelcode);
+        if (ObjectUtils.isEmpty(modelNode)) {
+            return vo;
+        }
+        List<ModelNodeIndexInfor> inforList = modelNodeService.getModelNodeIndexIdRelationInforByNodeId(modelNode.getNodeId());
+        List<String> indexIds = inforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
+        // 閫氳繃indexIds鎵綿ata_Item鏁版嵁
+        List<DataItem> itemList = dataItemService.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, shixuTimeType, indexIds);
+        final Map<String, List<DataItem>> dataItemMap = itemList.stream().collect(Collectors.groupingBy(li -> DateUtil.format(li.getDataTime(), timeFormat)));
+        // 鏌ヨ鐐逛綅璇︾粏淇℃伅
+        List<EnergyIndex> energyIndexInforList = energyIndexService.getEnergyIndexByIds(indexIds);
+        // 鑾峰彇鐐逛綅鑳芥簮绫诲瀷
+        Map<String, List<String>> energyTypeMap = energyIndexInforList.stream()
+                .filter(l -> StringUtils.isNotEmpty(l.getEnergyId())).collect(Collectors.groupingBy(
+                        EnergyIndex::getEnergyId, Collectors.mapping(EnergyIndex::getIndexId, Collectors.toList())
+                ));
+        while (!beginTime.after(endTime)) {
+            final String currentTime = DateUtil.format(beginTime, timeFormat);
+            xdataList.add(currentTime);
+            final List<DataItem> dataItems = dataItemMap.get(currentTime);
+            List<Double> energyCount = new ArrayList<>();
+            energyTypeMap.forEach((energyType,IndexIdList)->{
+                double sum;
+                if(null == dataItems){
+                    sum = 0;
+                }else {
+                    sum = dataItems.stream().filter(li -> IndexIdList.contains(li.getIndexId())).mapToDouble(DataItem::getValue).sum();
+                }
+                final BigDecimal coefficient = (BigDecimal) energyCollectMap.get(energyType);
+                energyCount.add(sum * coefficient.doubleValue());
+            });
+            ydataList.add(energyCount);
+            switch (TimeType.valueOf(timeType)) {
+                case DAY:
+                    beginTime = DateUtil.offsetHour(beginTime, 1);
+                    break;
+                case MONTH:
+                    beginTime = DateUtil.offsetDay(beginTime, 1);
+                    break;
+                default:
+                    beginTime = DateUtil.offsetMonth(beginTime, 1);
+                    break;
+            }
+        }
+        vo.setXdata(xdataList.toArray(new String[0]));
+        Double[][] array = new Double[sysEnergies.size()][xdataList.size()];
+        List<String> lengList = new ArrayList<>();
+        energyCollectMap.keySet().forEach(key->{
+            final String name = energyNameMap.get(key);
+            lengList.add(name);
+        });
+
+        for(int i = 0; i < ydataList.size(); i++){
+            final List<Double> doubleList = ydataList.get(i);
+            for(int n = 0; n < doubleList.size(); n++){
+                array[n][i] = format2Double(doubleList.get(n));
+            }
+        }
+        vo.setYdata(array);
+        vo.setLegend(lengList.toArray(new String[0]));
+        return vo;
+    }
+
+    @Override
+    public List<RankingEnergyData> energyConsumptionRanking(String modelcode, String timeType) {
+        List<RankingEnergyData> energyDataList = new ArrayList<>();
+        String nodeCategory = "2";
+        LambdaQueryWrapper<ModelNode> modelNodeLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        modelNodeLambdaQueryWrapper.eq(ModelNode::getModelCode,modelcode);
+        modelNodeLambdaQueryWrapper.eq(ModelNode::getNodeCategory,nodeCategory);
+        List<ModelNode> modelNodeList = modelNodeMapper.selectList(modelNodeLambdaQueryWrapper);
+        if(CollectionUtils.isEmpty(modelNodeList)){
+            return energyDataList;
+        }
+        final List<String> nodeIds = modelNodeList.stream().map(ModelNode::getNodeId).collect(Collectors.toList());
+        List<ModelNodeIndexInfor> nodeIndexInforList = modelNodeMapper.selectIndexByNodeIds(modelcode ,nodeIds);
+
+        final Map<String, String> nodeNameMap = new HashMap<>();
+        nodeIndexInforList.forEach(n->{
+            final String id = n.getNodeId();
+            final String name = n.getName();
+            if(!nodeNameMap.containsKey(id)){
+                nodeNameMap.put(id,name);
+            }
+        });
+
+        // 鎸夌収鐐逛綅杩涜鍒嗙粍
+        Map<String, List<ModelNodeIndexInfor>> nodeIndexMap = nodeIndexInforList.stream().collect(
+                Collectors.groupingBy(ModelNodeIndexInfor::getNodeId));
+        final List<String> eneryIdList = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getEnergyId).distinct().collect(Collectors.toList());
+        final LambdaQueryWrapper<SysEnergy> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(CollectionUtils.isNotEmpty(eneryIdList),SysEnergy::getEnersno,eneryIdList);
+        final List<SysEnergy> sysEnergies = sysEnergyMapper.selectList(queryWrapper);
+        //鑳芥簮缂栧彿鍜岃兘婧愭姌鏍囩郴鏁�
+        final Map<String, Object> energyCoefficientMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, SysEnergy::getCoefficient));
+        //index鍜岃兘婧�
+        final Map<String, String> indexIdEnergyIdMap = new HashMap<>();
+        nodeIndexInforList.forEach(n->{
+            final String indexId = n.getIndexId();
+            final String energyId = n.getEnergyId();
+            if(!indexIdEnergyIdMap.containsKey(indexId)){
+                indexIdEnergyIdMap.put(indexId,energyId);
+            }
+        });
+        List<String> indexIds = nodeIndexInforList.stream().filter(l -> StringUtils.isNotEmpty(l.getIndexId())).map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
+//        Date queryTime = new Date();
+        Date queryTime = DateUtil.parseDateTime("2023-03-28 00:00:00");
+        Date beginTime;
+        Date endTime;
+        String shixuTimeType;
+        if (TimeType.DAY.name().equals(timeType)) {
+            beginTime = DateUtil.beginOfDay(queryTime);
+            endTime = DateUtil.endOfDay(queryTime);
+            shixuTimeType = TimeType.HOUR.name();
+            // 鏈�
+        } else if (TimeType.MONTH.name().equals(timeType)) {
+            beginTime = DateUtil.beginOfMonth(queryTime);
+            endTime = DateUtil.endOfMonth(queryTime);
+            shixuTimeType = TimeType.DAY.name();
+            // 骞�
+        } else {
+            beginTime = DateUtil.beginOfYear(queryTime);
+            endTime = DateUtil.endOfYear(queryTime);
+            shixuTimeType = TimeType.MONTH.name();
+        }
+        // 鏍规嵁indexId鏌ヨdataItem
+        List<DataItem> dataItemList = new ArrayList<>();
+        if(CollectionUtils.isNotEmpty(indexIds)) {
+            dataItemList = dataItemService.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, shixuTimeType, indexIds);
+        }
+        Map<String, List<DataItem>> dataItemMap = dataItemList.stream().collect(Collectors.groupingBy(DataItem::getIndexId));
+
+        Map<String,BigDecimal> resultMap = new HashMap<>();
+        nodeIndexMap.forEach((key, value) -> {
+            // 鎵惧嚭indexIds
+            List<String> indexIdList = value.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
+
+            indexIdList.forEach(indexId->{
+                final List<DataItem> dataItems = dataItemMap.get(indexId);
+                final String energyId = indexIdEnergyIdMap.get(indexId);
+                final BigDecimal coefficient = (BigDecimal) energyCoefficientMap.get(energyId);
+
+                if(CollectionUtils.isNotEmpty(dataItems) ){
+                    BigDecimal sum = BigDecimal.valueOf(dataItems.stream()
+                            .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP).multiply(coefficient);
+
+                    if (resultMap.containsKey(key)) {
+                        resultMap.put(key, resultMap.get(key).add(sum));
+                    } else {
+                        resultMap.put(key, sum);
+                    }
+                }
+            });
+        });
+
+        resultMap.forEach((key,value)->{
+            RankingEnergyData rankingEnergyData = new RankingEnergyData();
+            rankingEnergyData.setNodeId(key);
+            rankingEnergyData.setNodeName(nodeNameMap.get(key));
+            rankingEnergyData.setEnergyConsumption(value.doubleValue());
+            energyDataList.add(rankingEnergyData);
+        });
+        Collections.sort(energyDataList, Comparator.comparingDouble((RankingEnergyData item) -> item.getEnergyConsumption()).reversed());
+        // 鑾峰彇鍓�5鏉¤褰�
+        List<RankingEnergyData> top5Items = energyDataList.subList(0, Math.min(5, energyDataList.size()));
+
+        return top5Items;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/home/service/impl/IHomePageService.java b/zhitan-system/src/main/java/com/zhitan/home/service/impl/IHomePageService.java
new file mode 100644
index 0000000..bfa0031
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/home/service/impl/IHomePageService.java
@@ -0,0 +1,24 @@
+package com.zhitan.home.service.impl;
+
+import com.zhitan.consumptionanalysis.domain.vo.RankingEnergyData;
+import com.zhitan.home.domain.vo.HomeEnergyConsumptionTrendVO;
+import com.zhitan.home.domain.vo.HomeEnergyStatisticsVO;
+import com.zhitan.home.domain.vo.HomePeakValleyVO;
+
+import java.util.List;
+
+/**
+ * description todu
+ *
+ * @author hmj
+ * @date 2024-10-31 18:07
+ */
+public interface IHomePageService {
+    List<HomeEnergyStatisticsVO> energyConsumptionSummation(String timeType, String modelcode);
+
+    List<HomePeakValleyVO> peakValley(String timeType, String modelcode);
+
+    HomeEnergyConsumptionTrendVO energyConsumptionTrend(String timeType, String modelcode);
+
+    List<RankingEnergyData> energyConsumptionRanking(String modelcode, String timeType);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/keyequipment/domain/DailyKeyEquipment.java b/zhitan-system/src/main/java/com/zhitan/keyequipment/domain/DailyKeyEquipment.java
new file mode 100644
index 0000000..254a6ac
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/keyequipment/domain/DailyKeyEquipment.java
@@ -0,0 +1,320 @@
+package com.zhitan.keyequipment.domain;
+
+import com.zhitan.common.annotation.Excel;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *閲嶇偣璁惧鑳借�楃粺璁� 鏃�
+ *
+ * @author sys
+ * @date 2021-01-11
+ */
+public class DailyKeyEquipment implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String indexId;
+    @Excel(name = "鎸囨爣鍚嶇О")
+    private String indexName;
+    private String value;
+    private Date dataTime;
+    private String timeType;
+    private String timeCode;
+    private String unitId;
+    @Excel(name = "1鏃�")
+    private Double value1;
+    @Excel(name = "2鏃�")
+    private Double value2;
+    @Excel(name = "3鏃�")
+    private Double value3;
+    @Excel(name = "4鏃�")
+    private Double value4;
+    @Excel(name = "5鏃�")
+    private Double value5;
+    @Excel(name = "6鏃�")
+    private Double value6;
+    @Excel(name = "7鏃�")
+    private Double value7;
+    @Excel(name = "8鏃�")
+    private Double value8;
+    @Excel(name = "9鏃�")
+    private Double value9;
+    @Excel(name = "10鏃�")
+    private Double value10;
+    @Excel(name = "11鏃�")
+    private Double value11;
+    @Excel(name = "12鏃�")
+    private Double value12;
+    @Excel(name = "13鏃�")
+    private Double value13;
+    @Excel(name = "14鏃�")
+    private Double value14;
+    @Excel(name = "15鏃�")
+    private Double value15;
+    @Excel(name = "16鏃�")
+    private Double value16;
+    @Excel(name = "17鏃�")
+    private Double value17;
+    @Excel(name = "18鏃�")
+    private Double value18;
+    @Excel(name = "19鏃�")
+    private Double value19;
+    @Excel(name = "20鏃�")
+    private Double value20;
+    @Excel(name = "21鏃�")
+    private Double value21;
+    @Excel(name = "22鏃�")
+    private Double value22;
+    @Excel(name = "23鏃�")
+    private Double value23;
+    @Excel(name = "0鏃�")
+    private Double value0;
+    public String getIndexId() {
+        return indexId;
+    }
+
+    public void setIndexId(String indexId) {
+        this.indexId = indexId;
+    }
+
+    public String getIndexName() {
+        return indexName;
+    }
+
+    public void setIndexName(String indexName) {
+        this.indexName = indexName;
+    }
+
+    public String getUnitId() {
+        return unitId;
+    }
+
+    public void setUnitId(String unitId) {
+        this.unitId = unitId;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getTimeType() {
+        return timeType;
+    }
+
+    public void setTimeType(String timeType) {
+        this.timeType = timeType;
+    }
+
+    public Date getDataTime() {
+        return dataTime;
+    }
+
+    public void setDataTime(Date dataTime) {
+        this.dataTime = dataTime;
+    }
+
+    public Double getValue1() {
+        return value1;
+    }
+
+    public void setValue1(Double value1) {
+        this.value1 = value1;
+    }
+
+    public Double getValue2() {
+        return value2;
+    }
+
+    public void setValue2(Double value2) {
+        this.value2 = value2;
+    }
+
+    public Double getValue3() {
+        return value3;
+    }
+
+    public void setValue3(Double value3) {
+        this.value3 = value3;
+    }
+
+    public Double getValue4() {
+        return value4;
+    }
+
+    public void setValue4(Double value4) {
+        this.value4 = value4;
+    }
+
+    public Double getValue5() {
+        return value5;
+    }
+
+    public void setValue5(Double value5) {
+        this.value5 = value5;
+    }
+
+    public Double getValue6() {
+        return value6;
+    }
+
+    public void setValue6(Double value6) {
+        this.value6 = value6;
+    }
+
+    public Double getValue7() {
+        return value7;
+    }
+
+    public void setValue7(Double value7) {
+        this.value7 = value7;
+    }
+
+    public Double getValue8() {
+        return value8;
+    }
+
+    public void setValue8(Double value8) {
+        this.value8 = value8;
+    }
+
+    public Double getValue9() {
+        return value9;
+    }
+
+    public void setValue9(Double value9) {
+        this.value9 = value9;
+    }
+
+    public Double getValue10() {
+        return value10;
+    }
+
+    public void setValue10(Double value10) {
+        this.value10 = value10;
+    }
+
+    public Double getValue11() {
+        return value11;
+    }
+
+    public void setValue11(Double value11) {
+        this.value11 = value11;
+    }
+
+    public Double getValue12() {
+        return value12;
+    }
+
+    public void setValue12(Double value12) {
+        this.value12 = value12;
+    }
+
+    public Double getValue13() {
+        return value13;
+    }
+
+    public void setValue13(Double value13) {
+        this.value13 = value13;
+    }
+
+    public Double getValue14() {
+        return value14;
+    }
+
+    public void setValue14(Double value14) {
+        this.value14 = value14;
+    }
+
+    public Double getValue15() {
+        return value15;
+    }
+
+    public void setValue15(Double value15) {
+        this.value15 = value15;
+    }
+
+    public Double getValue16() {
+        return value16;
+    }
+
+    public void setValue16(Double value16) {
+        this.value16 = value16;
+    }
+
+    public Double getValue17() {
+        return value17;
+    }
+
+    public void setValue17(Double value17) {
+        this.value17 = value17;
+    }
+
+    public Double getValue18() {
+        return value18;
+    }
+
+    public void setValue18(Double value18) {
+        this.value18 = value18;
+    }
+
+    public Double getValue19() {
+        return value19;
+    }
+
+    public void setValue19(Double value19) {
+        this.value19 = value19;
+    }
+
+    public Double getValue20() {
+        return value20;
+    }
+
+    public void setValue20(Double value20) {
+        this.value20 = value20;
+    }
+
+    public Double getValue21() {
+        return value21;
+    }
+
+    public void setValue21(Double value21) {
+        this.value21 = value21;
+    }
+
+    public Double getValue22() {
+        return value22;
+    }
+
+    public void setValue22(Double value22) {
+        this.value22 = value22;
+    }
+
+    public Double getValue23() {
+        return value23;
+    }
+
+    public void setValue23(Double value23) {
+        this.value23 = value23;
+    }
+
+    public Double getValue0() {
+        return value0;
+    }
+
+    public void setValue0(Double value0) {
+        this.value0 = value0;
+    }
+
+    public String getTimeCode() {
+        return timeCode;
+    }
+
+    public void setTimeCode(String timeCode) {
+        this.timeCode = timeCode;
+    }
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/keyequipment/domain/MonthlyKeyEquipment.java b/zhitan-system/src/main/java/com/zhitan/keyequipment/domain/MonthlyKeyEquipment.java
new file mode 100644
index 0000000..bdd34a4
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/keyequipment/domain/MonthlyKeyEquipment.java
@@ -0,0 +1,428 @@
+package com.zhitan.keyequipment.domain;
+
+
+import com.zhitan.common.annotation.Excel;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *閲嶇偣璁惧鑳借�楃粺璁� 鏈�
+ *
+ * @author sys
+ * @date 2021-01-11
+ */
+public class MonthlyKeyEquipment implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String indexId;
+    @Excel(name = "鎸囨爣鍚嶇О")
+    private String indexName;
+    private String value;
+    private Date dataTime;
+    private String timeType;
+    private String timeCode;
+    @Excel(name = "1鏃�")
+    private Double value1;
+    @Excel(name = "2鏃�")
+    private Double value2;
+    @Excel(name = "3鏃�")
+    private Double value3;
+    @Excel(name = "4鏃�")
+    private Double value4;
+    @Excel(name = "5鏃�")
+    private Double value5;
+    @Excel(name = "6鏃�")
+    private Double value6;
+    @Excel(name = "7鏃�")
+    private Double value7;
+    @Excel(name = "8鏃�")
+    private Double value8;
+    @Excel(name = "9鏃�")
+    private Double value9;
+    @Excel(name = "10鏃�")
+    private Double value10;
+    @Excel(name = "11鏃�")
+    private Double value11;
+    @Excel(name = "12鏃�")
+    private Double value12;
+    @Excel(name = "13鏃�")
+    private Double value13;
+    @Excel(name = "14鏃�")
+    private Double value14;
+    @Excel(name = "15鏃�")
+    private Double value15;
+    @Excel(name = "16鏃�")
+    private Double value16;
+    @Excel(name = "17鏃�")
+    private Double value17;
+    @Excel(name = "18鏃�")
+    private Double value18;
+    @Excel(name = "19鏃�")
+    private Double value19;
+    @Excel(name = "20鏃�")
+    private Double value20;
+    @Excel(name = "21鏃�")
+    private Double value21;
+    @Excel(name = "22鏃�")
+    private Double value22;
+    @Excel(name = "23鏃�")
+    private Double value23;
+    @Excel(name = "24鏃�")
+    private Double value24;
+    @Excel(name = "25鏃�")
+    private Double value25;
+    @Excel(name = "26鏃�")
+    private Double value26;
+    @Excel(name = "27鏃�")
+    private Double value27;
+    @Excel(name = "28鏃�")
+    private Double value28;
+    @Excel(name = "29鏃�")
+    private Double value29;
+    @Excel(name = "30鏃�")
+    private Double value30;
+    @Excel(name = "31鏃�")
+    private Double value31;
+    private Integer count;
+    private String unitId;
+    /** 鎬昏褰曟暟 */
+    private long total;
+    private List<Map> tablehead =new ArrayList<>();
+    private List<MonthlyKeyEquipment> tabledata =new ArrayList<>();
+    public String getIndexId() {
+        return indexId;
+    }
+
+    public void setIndexId(String indexId) {
+        this.indexId = indexId;
+    }
+
+    public String getIndexName() {
+        return indexName;
+    }
+
+    public void setIndexName(String indexName) {
+        this.indexName = indexName;
+    }
+    public String getUnitId() {
+        return unitId;
+    }
+
+    public void setUnitId(String unitId) {
+        this.unitId = unitId;
+    }
+
+    public String getTimeCode() {
+        return timeCode;
+    }
+
+    public void setTimeCode(String timeCode) {
+        this.timeCode = timeCode;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getTimeType() {
+        return timeType;
+    }
+
+    public void setTimeType(String timeType) {
+        this.timeType = timeType;
+    }
+
+    public Date getDataTime() {
+        return dataTime;
+    }
+
+    public void setDataTime(Date dataTime) {
+        this.dataTime = dataTime;
+    }
+
+    public Double getValue1() {
+        return value1;
+    }
+
+    public void setValue1(Double value1) {
+        this.value1 = value1;
+    }
+
+    public Double getValue2() {
+        return value2;
+    }
+
+    public void setValue2(Double value2) {
+        this.value2 = value2;
+    }
+
+    public Double getValue3() {
+        return value3;
+    }
+
+    public void setValue3(Double value3) {
+        this.value3 = value3;
+    }
+
+    public Double getValue4() {
+        return value4;
+    }
+
+    public void setValue4(Double value4) {
+        this.value4 = value4;
+    }
+
+    public Double getValue5() {
+        return value5;
+    }
+
+    public void setValue5(Double value5) {
+        this.value5 = value5;
+    }
+
+    public Double getValue6() {
+        return value6;
+    }
+
+    public void setValue6(Double value6) {
+        this.value6 = value6;
+    }
+
+    public Double getValue7() {
+        return value7;
+    }
+
+    public void setValue7(Double value7) {
+        this.value7 = value7;
+    }
+
+    public Double getValue8() {
+        return value8;
+    }
+
+    public void setValue8(Double value8) {
+        this.value8 = value8;
+    }
+
+    public Double getValue9() {
+        return value9;
+    }
+
+    public void setValue9(Double value9) {
+        this.value9 = value9;
+    }
+
+    public Double getValue10() {
+        return value10;
+    }
+
+    public void setValue10(Double value10) {
+        this.value10 = value10;
+    }
+
+    public Double getValue11() {
+        return value11;
+    }
+
+    public void setValue11(Double value11) {
+        this.value11 = value11;
+    }
+
+    public Double getValue12() {
+        return value12;
+    }
+
+    public void setValue12(Double value12) {
+        this.value12 = value12;
+    }
+
+    public Double getValue13() {
+        return value13;
+    }
+
+    public void setValue13(Double value13) {
+        this.value13 = value13;
+    }
+
+    public Double getValue14() {
+        return value14;
+    }
+
+    public void setValue14(Double value14) {
+        this.value14 = value14;
+    }
+
+    public Double getValue15() {
+        return value15;
+    }
+
+    public void setValue15(Double value15) {
+        this.value15 = value15;
+    }
+
+    public Double getValue16() {
+        return value16;
+    }
+
+    public void setValue16(Double value16) {
+        this.value16 = value16;
+    }
+
+    public Double getValue17() {
+        return value17;
+    }
+
+    public void setValue17(Double value17) {
+        this.value17 = value17;
+    }
+
+    public Double getValue18() {
+        return value18;
+    }
+
+    public void setValue18(Double value18) {
+        this.value18 = value18;
+    }
+
+    public Double getValue19() {
+        return value19;
+    }
+
+    public void setValue19(Double value19) {
+        this.value19 = value19;
+    }
+
+    public Double getValue20() {
+        return value20;
+    }
+
+    public void setValue20(Double value20) {
+        this.value20 = value20;
+    }
+
+    public Double getValue21() {
+        return value21;
+    }
+
+    public void setValue21(Double value21) {
+        this.value21 = value21;
+    }
+
+    public Double getValue22() {
+        return value22;
+    }
+
+    public void setValue22(Double value22) {
+        this.value22 = value22;
+    }
+
+    public Double getValue23() {
+        return value23;
+    }
+
+    public void setValue23(Double value23) {
+        this.value23 = value23;
+    }
+
+    public Double getValue24() {
+        return value24;
+    }
+
+    public void setValue24(Double value24) {
+        this.value24 = value24;
+    }
+
+    public Double getValue25() {
+        return value25;
+    }
+
+    public void setValue25(Double value25) {
+        this.value25 = value25;
+    }
+
+    public Double getValue26() {
+        return value26;
+    }
+
+    public void setValue26(Double value26) {
+        this.value26 = value26;
+    }
+
+    public Double getValue27() {
+        return value27;
+    }
+
+    public void setValue27(Double value27) {
+        this.value27 = value27;
+    }
+
+    public Double getValue28() {
+        return value28;
+    }
+
+    public void setValue28(Double value28) {
+        this.value28 = value28;
+    }
+
+    public Double getValue29() {
+        return value29;
+    }
+
+    public void setValue29(Double value29) {
+        this.value29 = value29;
+    }
+
+    public Double getValue30() {
+        return value30;
+    }
+
+    public void setValue30(Double value30) {
+        this.value30 = value30;
+    }
+
+    public Double getValue31() {
+        return value31;
+    }
+
+    public void setValue31(Double value31) {
+        this.value31 = value31;
+    }
+
+    public List<Map> getTablehead() {
+        return tablehead;
+    }
+
+    public void setTablehead(List<Map> tablehead) {
+        this.tablehead = tablehead;
+    }
+    public List<MonthlyKeyEquipment> getTabledata() {
+        return tabledata;
+    }
+
+    public void setTabledata(List<MonthlyKeyEquipment> tabledata) {
+        this.tabledata = tabledata;
+    }
+
+    public Integer getCount() {
+        return count;
+    }
+
+    public void setCount(Integer count) {
+        this.count = count;
+    }
+
+    public long getTotal() {
+        return total;
+    }
+
+    public void setTotal(long total) {
+        this.total = total;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/keyequipment/domain/YearKeyEquipment.java b/zhitan-system/src/main/java/com/zhitan/keyequipment/domain/YearKeyEquipment.java
new file mode 100644
index 0000000..3d7d2f6
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/keyequipment/domain/YearKeyEquipment.java
@@ -0,0 +1,198 @@
+package com.zhitan.keyequipment.domain;
+
+
+import com.zhitan.common.annotation.Excel;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *閲嶇偣璁惧鑳借�楃粺璁� 骞�
+ *
+ * @author sys
+ * @date 2021-01-11
+ */
+public class YearKeyEquipment implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String indexId;
+    @Excel(name = "鎸囨爣鍚嶇О")
+    private String indexName;
+    private String value;
+    private Date dataTime;
+    private String timeType;
+    @Excel(name = "1鏈�")
+    private Double value1;
+    @Excel(name = "2鏈�")
+    private Double value2;
+    @Excel(name = "3鏈�")
+    private Double value3;
+    @Excel(name = "4鏈�")
+    private Double value4;
+    @Excel(name = "5鏈�")
+    private Double value5;
+    @Excel(name = "6鏈�")
+    private Double value6;
+    @Excel(name = "7鏈�")
+    private Double value7;
+    @Excel(name = "8鏈�")
+    private Double value8;
+    @Excel(name = "9鏈�")
+    private Double value9;
+    @Excel(name = "10鏈�")
+    private Double value10;
+    @Excel(name = "11鏈�")
+    private Double value11;
+    @Excel(name = "12鏈�")
+    private Double value12;
+    private String timeCode;
+    private  String unitId;
+    public String getIndexId() {
+        return indexId;
+    }
+
+    public void setIndexId(String indexId) {
+        this.indexId = indexId;
+    }
+
+    public String getIndexName() {
+        return indexName;
+    }
+
+    public void setIndexName(String indexName) {
+        this.indexName = indexName;
+    }
+    public String getUnitId() {
+        return unitId;
+    }
+
+    public void setUnitId(String unitId) {
+        this.unitId = unitId;
+    }
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getTimeType() {
+        return timeType;
+    }
+
+    public void setTimeType(String timeType) {
+        this.timeType = timeType;
+    }
+
+    public Date getDataTime() {
+        return dataTime;
+    }
+
+    public void setDataTime(Date dataTime) {
+        this.dataTime = dataTime;
+    }
+
+    public Double getValue1() {
+        return value1;
+    }
+
+    public void setValue1(Double value1) {
+        this.value1 = value1;
+    }
+
+    public Double getValue2() {
+        return value2;
+    }
+
+    public void setValue2(Double value2) {
+        this.value2 = value2;
+    }
+
+    public Double getValue3() {
+        return value3;
+    }
+
+    public void setValue3(Double value3) {
+        this.value3 = value3;
+    }
+
+    public Double getValue4() {
+        return value4;
+    }
+
+    public void setValue4(Double value4) {
+        this.value4 = value4;
+    }
+
+    public Double getValue5() {
+        return value5;
+    }
+
+    public void setValue5(Double value5) {
+        this.value5 = value5;
+    }
+
+    public Double getValue6() {
+        return value6;
+    }
+
+    public void setValue6(Double value6) {
+        this.value6 = value6;
+    }
+
+    public Double getValue7() {
+        return value7;
+    }
+
+    public void setValue7(Double value7) {
+        this.value7 = value7;
+    }
+
+    public Double getValue8() {
+        return value8;
+    }
+
+    public void setValue8(Double value8) {
+        this.value8 = value8;
+    }
+
+    public Double getValue9() {
+        return value9;
+    }
+
+    public void setValue9(Double value9) {
+        this.value9 = value9;
+    }
+
+    public Double getValue10() {
+        return value10;
+    }
+
+    public void setValue10(Double value10) {
+        this.value10 = value10;
+    }
+
+    public Double getValue11() {
+        return value11;
+    }
+
+    public void setValue11(Double value11) {
+        this.value11 = value11;
+    }
+
+    public Double getValue12() {
+        return value12;
+    }
+
+    public void setValue12(Double value12) {
+        this.value12 = value12;
+    }
+    public String getTimeCode() {
+        return timeCode;
+    }
+
+    public void setTimeCode(String timeCode) {
+        this.timeCode = timeCode;
+    }
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/keyequipment/mapper/DailyKeyEquipmentMapper.java b/zhitan-system/src/main/java/com/zhitan/keyequipment/mapper/DailyKeyEquipmentMapper.java
new file mode 100644
index 0000000..4ef9af3
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/keyequipment/mapper/DailyKeyEquipmentMapper.java
@@ -0,0 +1,31 @@
+package com.zhitan.keyequipment.mapper;
+
+import com.zhitan.basicdata.domain.FacilityArchives;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.keyequipment.domain.DailyKeyEquipment;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ *閲嶇偣璁惧鑳借�楃粺璁� 鏃�
+ *
+ * @author sys
+ * @date 2021-01-11
+ */
+public interface DailyKeyEquipmentMapper {
+    public List<DailyKeyEquipment> getdailyKeyEquipmentList(@Param("indexIds") List<String> indexIds,
+                                                            @Param("dataList") List<DailyKeyEquipment> dataList,
+                                                            @Param("beginTime") Date beginTime,
+                                                            @Param("endTime") Date endTime,
+                                                            @Param("timeType") TimeType timeType,
+                                                            @Param("indexStorageId") String indexStorageId);
+    List<DailyKeyEquipment> getListChart(@Param("indexId") String indexId,
+                                            @Param("beginTime") Date beginTime,
+                                            @Param("endTime") Date endTime,
+                                            @Param("timeType") TimeType timeType,
+                                            @Param("indexStorageId")  String indexStorageId);
+    List<FacilityArchives> getFacilityArchives();
+    List<FacilityArchives> getPointFacility();
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/keyequipment/mapper/MonthlyKeyEquipmentMapper.java b/zhitan-system/src/main/java/com/zhitan/keyequipment/mapper/MonthlyKeyEquipmentMapper.java
new file mode 100644
index 0000000..557bbdb
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/keyequipment/mapper/MonthlyKeyEquipmentMapper.java
@@ -0,0 +1,29 @@
+package com.zhitan.keyequipment.mapper;
+
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.keyequipment.domain.MonthlyKeyEquipment;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ *閲嶇偣璁惧鑳借�楃粺璁� 鏈�
+ *
+ * @author sys
+ * @date 2021-01-11
+ */
+public interface MonthlyKeyEquipmentMapper {
+    public List<MonthlyKeyEquipment> getMonthlyKeyEquipmentList(@Param("indexIds") List<String> indexIds,
+                                                                @Param("dataList") List<MonthlyKeyEquipment> dataList,
+                                                                @Param("beginTime") Date beginTime,
+                                                                @Param("endTime") Date endTime,
+                                                                @Param("timeType") TimeType timeType,
+                                                                @Param("indexStorageId") String indexStorageId);
+    List<MonthlyKeyEquipment> getListChart(@Param("indexId") String indexId,
+                                               @Param("beginTime") Date beginTime,
+                                               @Param("endTime") Date endTime,
+                                               @Param("timeType") TimeType timeType,
+                                               @Param("indexStorageId") String indexStorageId);
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/keyequipment/mapper/YearKeyEquipmentMapper.java b/zhitan-system/src/main/java/com/zhitan/keyequipment/mapper/YearKeyEquipmentMapper.java
new file mode 100644
index 0000000..12e61dd
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/keyequipment/mapper/YearKeyEquipmentMapper.java
@@ -0,0 +1,29 @@
+package com.zhitan.keyequipment.mapper;
+
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.keyequipment.domain.YearKeyEquipment;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ *閲嶇偣璁惧鑳借�楃粺璁� 骞�
+ *
+ * @author sys
+ * @date 2021-01-11
+ */
+public interface YearKeyEquipmentMapper {
+    public List<YearKeyEquipment> getYearKeyEquipmentList(@Param("indexIds") List<String> indexIds,
+                                                          @Param("dataList") List<YearKeyEquipment> dataList,
+                                                          @Param("beginTime") Date beginTime,
+                                                          @Param("endTime") Date endTime,
+                                                          @Param("timeType") TimeType timeType,
+                                                          @Param("indexStorageId") String indexStorageId);
+    List<YearKeyEquipment> getListChart(@Param("indexId") String indexId,
+                                            @Param("beginTime") Date beginTime,
+                                            @Param("endTime") Date endTime,
+                                            @Param("timeType") TimeType timeType,
+                                            @Param("indexStorageId") String indexStorageId);
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/keyequipment/service/IDailyKeyEquipmentService.java b/zhitan-system/src/main/java/com/zhitan/keyequipment/service/IDailyKeyEquipmentService.java
new file mode 100644
index 0000000..feb1c27
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/keyequipment/service/IDailyKeyEquipmentService.java
@@ -0,0 +1,21 @@
+package com.zhitan.keyequipment.service;
+
+import com.zhitan.basicdata.domain.FacilityArchives;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.keyequipment.domain.DailyKeyEquipment;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ *閲嶇偣璁惧鑳借�楃粺璁� 鏃�
+ *
+ * @author sys
+ * @date 2021-01-11
+ */
+public interface IDailyKeyEquipmentService {
+    public List<DailyKeyEquipment> getdailyKeyEquipmentList(List<String> indexIds, List<DailyKeyEquipment> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
+    public List<DailyKeyEquipment> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
+    public List<FacilityArchives> getFacilityArchives();
+    public List<FacilityArchives> getPointFacility();
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/keyequipment/service/IMonthlyKeyEquipmentService.java b/zhitan-system/src/main/java/com/zhitan/keyequipment/service/IMonthlyKeyEquipmentService.java
new file mode 100644
index 0000000..e3a2cbc
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/keyequipment/service/IMonthlyKeyEquipmentService.java
@@ -0,0 +1,19 @@
+package com.zhitan.keyequipment.service;
+
+
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.keyequipment.domain.MonthlyKeyEquipment;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ *閲嶇偣璁惧鑳借�楃粺璁� 鏈�
+ *
+ * @author sys
+ * @date 2021-01-11
+ */
+public interface IMonthlyKeyEquipmentService {
+    public List<MonthlyKeyEquipment> getMonthlyKeyEquipmentList(List<String> indexIds, List<MonthlyKeyEquipment> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
+    List<MonthlyKeyEquipment> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/keyequipment/service/IYearKeyEquipmentService.java b/zhitan-system/src/main/java/com/zhitan/keyequipment/service/IYearKeyEquipmentService.java
new file mode 100644
index 0000000..e97d0c3
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/keyequipment/service/IYearKeyEquipmentService.java
@@ -0,0 +1,19 @@
+package com.zhitan.keyequipment.service;
+
+
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.keyequipment.domain.YearKeyEquipment;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ *閲嶇偣璁惧鑳借�楃粺璁� 骞�
+ *
+ * @author sys
+ * @date 2021-01-11
+ */
+public interface IYearKeyEquipmentService {
+    public List<YearKeyEquipment> getYearKeyEquipmentList(List<String> indexIds, List<YearKeyEquipment> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
+    List<YearKeyEquipment> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/keyequipment/service/impl/DailyKeyEquipmentServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/keyequipment/service/impl/DailyKeyEquipmentServiceImpl.java
new file mode 100644
index 0000000..d0acd5b
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/keyequipment/service/impl/DailyKeyEquipmentServiceImpl.java
@@ -0,0 +1,48 @@
+package com.zhitan.keyequipment.service.impl;
+
+import com.zhitan.basicdata.domain.FacilityArchives;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.keyequipment.domain.DailyKeyEquipment;
+import com.zhitan.keyequipment.mapper.DailyKeyEquipmentMapper;
+import com.zhitan.keyequipment.service.IDailyKeyEquipmentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *閲嶇偣璁惧鑳借�楃粺璁� 鏃�
+ *
+ * @author sys
+ * @date 2021-01-11
+ */
+@Service
+public class DailyKeyEquipmentServiceImpl implements IDailyKeyEquipmentService {
+    @Autowired
+    private DailyKeyEquipmentMapper dailyKeyEquipmentMapper;
+
+    @Override
+    public List<DailyKeyEquipment> getdailyKeyEquipmentList(List<String> indexIds, List<DailyKeyEquipment> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
+        if (indexIds != null && !indexIds.isEmpty()) {
+            return dailyKeyEquipmentMapper.getdailyKeyEquipmentList(indexIds, dataList, beginTime, endTime, timeType, indexStorageId);
+        }
+        return Collections.emptyList();
+    }
+    @Override
+    public List<DailyKeyEquipment> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
+        if (indexId != null && !indexId.isEmpty()) {
+            return dailyKeyEquipmentMapper.getListChart(indexId,beginTime,endTime,timeType,indexStorageId);
+        }
+        return Collections.emptyList();
+    }
+    @Override
+    public List<FacilityArchives> getFacilityArchives() {
+        return dailyKeyEquipmentMapper.getFacilityArchives();
+    }
+    @Override
+    public List<FacilityArchives> getPointFacility() {
+        return dailyKeyEquipmentMapper.getPointFacility();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/keyequipment/service/impl/MonthlyKeyEquipmentServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/keyequipment/service/impl/MonthlyKeyEquipmentServiceImpl.java
new file mode 100644
index 0000000..d76e549
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/keyequipment/service/impl/MonthlyKeyEquipmentServiceImpl.java
@@ -0,0 +1,40 @@
+package com.zhitan.keyequipment.service.impl;
+
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.keyequipment.domain.MonthlyKeyEquipment;
+import com.zhitan.keyequipment.mapper.MonthlyKeyEquipmentMapper;
+import com.zhitan.keyequipment.service.IMonthlyKeyEquipmentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *閲嶇偣璁惧鑳借�楃粺璁� 鏈�
+ *
+ * @author sys
+ * @date 2021-01-11
+ */
+@Service
+public class MonthlyKeyEquipmentServiceImpl implements IMonthlyKeyEquipmentService {
+    @Autowired
+    private MonthlyKeyEquipmentMapper monthlyKeyEquipmentMapper;
+
+    @Override
+    public List<MonthlyKeyEquipment> getMonthlyKeyEquipmentList(List<String> indexIds, List<MonthlyKeyEquipment> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
+        if (indexIds != null && !indexIds.isEmpty()) {
+            return monthlyKeyEquipmentMapper.getMonthlyKeyEquipmentList(indexIds, dataList, beginTime, endTime, timeType, indexStorageId);
+        }
+        return Collections.emptyList();
+    }
+
+    @Override
+    public List<MonthlyKeyEquipment> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
+        if (indexId != null && !indexId.isEmpty()) {
+            return monthlyKeyEquipmentMapper.getListChart(indexId,beginTime,endTime,timeType,indexStorageId);
+        }
+        return Collections.emptyList();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/keyequipment/service/impl/YearKeyEquipmentServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/keyequipment/service/impl/YearKeyEquipmentServiceImpl.java
new file mode 100644
index 0000000..15c24d6
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/keyequipment/service/impl/YearKeyEquipmentServiceImpl.java
@@ -0,0 +1,38 @@
+package com.zhitan.keyequipment.service.impl;
+
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.keyequipment.domain.YearKeyEquipment;
+import com.zhitan.keyequipment.mapper.YearKeyEquipmentMapper;
+import com.zhitan.keyequipment.service.IYearKeyEquipmentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *閲嶇偣璁惧鑳借�楃粺璁� 骞�
+ *
+ * @author sys
+ * @date 2021-01-11
+ */
+@Service
+public class YearKeyEquipmentServiceImpl implements IYearKeyEquipmentService {
+    @Autowired
+    private YearKeyEquipmentMapper yearKeyEquipmentMapper;
+
+    public List<YearKeyEquipment> getYearKeyEquipmentList(List<String> indexIds, List<YearKeyEquipment> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
+        if (indexIds != null && !indexIds.isEmpty()) {
+            return yearKeyEquipmentMapper.getYearKeyEquipmentList(indexIds, dataList, beginTime, endTime, timeType, indexStorageId);
+        }
+        return Collections.emptyList();
+    }
+    @Override
+    public List<YearKeyEquipment> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
+        if (indexId != null && !indexId.isEmpty()) {
+            return yearKeyEquipmentMapper.getListChart(indexId,beginTime,endTime,timeType,indexStorageId);
+        }
+        return Collections.emptyList();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/meter/domain/MeterConfig.java b/zhitan-system/src/main/java/com/zhitan/meter/domain/MeterConfig.java
new file mode 100644
index 0000000..ff7a5e0
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/meter/domain/MeterConfig.java
@@ -0,0 +1,182 @@
+package com.zhitan.meter.domain;
+
+import com.zhitan.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @ClassName: MeterConfiguration
+ * @Author: Yarry
+ * @CreateTime: 2024-09-23 13-44-42
+ * @Description: TODO
+ * @Version: 1.0
+ * @Since: JDK1.8
+ */
+
+@ApiModel(value = "鐐逛綅閰嶇疆淇℃伅")
+public class MeterConfig extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓婚敭
+     */
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+
+    /**
+     * 琛ㄥ悕
+     */
+    @ApiModelProperty(value = "琛ㄥ悕")
+    private String tableName;
+
+    /**
+     * 鐐逛綅code
+     */
+    @ApiModelProperty(value = "鐐逛綅code")
+    private String code;
+
+    /**
+     * 閲囬泦绫诲瀷銆�0锛氶噰闆嗙被锛�1璁$畻绫汇��
+     */
+    @ApiModelProperty(value = "閲囬泦绫诲瀷")
+    private String indexType;
+
+
+    /**
+     * 琛ㄥご鍊�
+     */
+    @ApiModelProperty(value = "琛ㄥご鍊�")
+    private String tableValue;
+
+    /**
+     * 姝ラ暱鏈�灏忓��
+     */
+    @ApiModelProperty(value = "姝ラ暱鏈�灏忓��")
+    private String stepMin;
+
+    /**
+     * 姝ラ暱鏈�澶у��
+     */
+    @ApiModelProperty(value = "姝ラ暱鏈�澶у��")
+    private String stepMax;
+
+
+    /**
+     * 鏈�灏忓��
+     */
+    @ApiModelProperty(value = "鏈�灏忓��")
+    private String minValue;
+
+    /**
+     * 鏈�澶у��
+     */
+    @ApiModelProperty(value = "鏈�澶у��")
+    private String maxValue;
+
+    public MeterConfig() {
+    }
+
+    public MeterConfig(String id, String tableName, String code, String indexType, String tableValue, String stepMin, String stepMax, String minValue, String maxValue) {
+        this.id = id;
+        this.tableName = tableName;
+        this.code = code;
+        this.indexType = indexType;
+        this.tableValue = tableValue;
+        this.stepMin = stepMin;
+        this.stepMax = stepMax;
+        this.minValue = minValue;
+        this.maxValue = maxValue;
+    }
+
+    public MeterConfig(String code) {
+        super();
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getIndexType() {
+        return indexType;
+    }
+
+    public void setIndexType(String indexType) {
+        this.indexType = indexType;
+    }
+
+    public String getTableValue() {
+        return tableValue;
+    }
+
+    public void setTableValue(String tableValue) {
+        this.tableValue = tableValue;
+    }
+
+    public String getStepMin() {
+        return stepMin;
+    }
+
+    public void setStepMin(String stepMin) {
+        this.stepMin = stepMin;
+    }
+
+    public String getStepMax() {
+        return stepMax;
+    }
+
+    public void setStepMax(String stepMax) {
+        this.stepMax = stepMax;
+    }
+
+    public String getMinValue() {
+        return minValue;
+    }
+
+    public void setMinValue(String minValue) {
+        this.minValue = minValue;
+    }
+
+    public String getMaxValue() {
+        return maxValue;
+    }
+
+    public void setMaxValue(String maxValue) {
+        this.maxValue = maxValue;
+    }
+
+    @Override
+    public String toString() {
+        return "MeterConfig{" +
+                "id='" + id + '\'' +
+                ", tableName='" + tableName + '\'' +
+                ", code='" + code + '\'' +
+                ", indexType='" + indexType + '\'' +
+                ", tableValue='" + tableValue + '\'' +
+                ", stepMin='" + stepMin + '\'' +
+                ", stepMax='" + stepMax + '\'' +
+                ", minValue='" + minValue + '\'' +
+                ", maxValue='" + maxValue + '\'' +
+                '}';
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/meter/domain/MeterImplements.java b/zhitan-system/src/main/java/com/zhitan/meter/domain/MeterImplements.java
new file mode 100644
index 0000000..624aaec
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/meter/domain/MeterImplements.java
@@ -0,0 +1,267 @@
+package com.zhitan.meter.domain;
+
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * 璁¢噺鍣ㄥ叿瀵硅薄 meter_implement
+ *
+ * @author zhaowei
+ * @date 2020-02-12
+ */
+@ApiModel(value = "璁¢噺鍣ㄥ叿")
+public class MeterImplements extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 涓婚敭 */
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+
+    /** 缂栫爜 */
+    @Excel(name = "缂栫爜")
+    @ApiModelProperty(value = "缂栫爜")
+    private String code;
+
+    /** 鍣ㄥ叿鍚嶇О */
+    @Excel(name = "鍣ㄥ叿鍚嶇О")
+    @ApiModelProperty(value = "鍣ㄥ叿鍚嶇О")
+    private String meterName;
+
+    /** 绉嶇被 */
+    @Excel(name = "绉嶇被")
+    @ApiModelProperty(value = "绉嶇被")
+    private String meterType;
+
+    /** 瑙勬牸鍨嬪彿 */
+    @Excel(name = "瑙勬牸鍨嬪彿")
+    @ApiModelProperty(value = "瑙勬牸鍨嬪彿")
+    private String modelNumber;
+
+    /** 娴嬮噺鑼冨洿 */
+    @Excel(name = "娴嬮噺鑼冨洿")
+    @ApiModelProperty(value = "娴嬮噺鑼冨洿")
+    private String measureRange;
+
+    /** 鐢熶骇鍘傚晢 */
+    @Excel(name = "鐢熶骇鍘傚晢")
+    @ApiModelProperty(value = "鐢熶骇鍘傚晢")
+    private String manufacturer;
+
+    /** 璐熻矗浜� */
+    @Excel(name = "璐熻矗浜�")
+    @ApiModelProperty(value = "")
+    private String personCharge;
+
+    /** 瀹夎浣嶇疆 */
+    @Excel(name = "瀹夎浣嶇疆")
+    @ApiModelProperty(value = "瀹夎浣嶇疆")
+    private String installactionLocation;
+
+    /** 璧峰鏃堕棿 */
+    @Excel(name = "璧峰鏃堕棿")
+    @ApiModelProperty(value = "璧峰鏃堕棿")
+    private Date startTime;
+
+    /** 鎶曡繍鏃堕棿 */
+    @Excel(name = "鎶曡繍鏃堕棿")
+    @ApiModelProperty(value = "鎶曡繍鏃堕棿")
+    private Date putrunTime;
+
+    /** 妫�瀹氬懆鏈� */
+    @Excel(name = "妫�瀹氬懆鏈�")
+    @ApiModelProperty(value = "妫�瀹氬懆鏈�")
+    private Integer checkCycle;
+
+    /** 鎻愰啋鍛ㄦ湡 */
+    @Excel(name = "鎻愰啋鍛ㄦ湡")
+    @ApiModelProperty(value = "鎻愰啋鍛ㄦ湡")
+    private Integer reminderCycle;
+
+    /** 鐘舵�� */
+    @Excel(name = "鐘舵��")
+    @ApiModelProperty(value = "鐘舵��")
+    private String meterStatus;
+
+    /** 閫昏緫鍒犻櫎鏍囧織,Y宸插垹闄�,N鏈垹闄� */
+    @ApiModelProperty(value = "閫昏緫鍒犻櫎鏍囧織,Y宸插垹闄�,N鏈垹闄�")
+    private String delFlage;
+    /** 妫�瀹氭彁閱掓爣蹇�  true 鎻愰啋 false涓嶉渶瑕佹彁閱� */
+    @ApiModelProperty(value = "妫�瀹氭彁閱掓爣蹇�  true 鎻愰啋 false涓嶉渶瑕佹彁閱�")
+    private boolean txflage;
+
+    public void setTxflage(boolean txflage)
+    {
+        this.txflage = txflage;
+    }
+    public boolean getTxflage()
+    {
+        return this.txflage;
+    }
+    public void setId(String id)
+    {
+        this.id = id;
+    }
+
+    public String getId()
+    {
+        return id;
+    }
+    public void setCode(String code)
+    {
+        this.code = code;
+    }
+
+    public String getCode()
+    {
+        return code;
+    }
+    public void setMeterName(String meterName)
+    {
+        this.meterName = meterName;
+    }
+
+    public String getMeterName()
+    {
+        return meterName;
+    }
+    public void setMeterType(String meterType)
+    {
+        this.meterType = meterType;
+    }
+
+    public String getMeterType()
+    {
+        return meterType;
+    }
+    public void setModelNumber(String modelNumber)
+    {
+        this.modelNumber = modelNumber;
+    }
+
+    public String getModelNumber()
+    {
+        return modelNumber;
+    }
+    public void setMeasureRange(String measureRange)
+    {
+        this.measureRange = measureRange;
+    }
+
+    public String getMeasureRange()
+    {
+        return measureRange;
+    }
+    public void setManufacturer(String manufacturer)
+    {
+        this.manufacturer = manufacturer;
+    }
+
+    public String getManufacturer()
+    {
+        return manufacturer;
+    }
+    public void setPersonCharge(String personCharge)
+    {
+        this.personCharge = personCharge;
+    }
+
+    public String getPersonCharge()
+    {
+        return personCharge;
+    }
+    public void setInstallactionLocation(String installactionLocation)
+    {
+        this.installactionLocation = installactionLocation;
+    }
+
+    public String getInstallactionLocation()
+    {
+        return installactionLocation;
+    }
+    public void setStartTime(Date startTime)
+    {
+        this.startTime = startTime;
+    }
+
+    public Date getStartTime()
+    {
+        return startTime;
+    }
+    public void setCheckCycle(Integer checkCycle)
+    {
+        this.checkCycle = checkCycle;
+    }
+
+    public Integer getCheckCycle()
+    {
+        return checkCycle;
+    }
+    public void setReminderCycle(Integer reminderCycle)
+    {
+        this.reminderCycle = reminderCycle;
+    }
+
+    public Integer getReminderCycle()
+    {
+        return reminderCycle;
+    }
+    public void setMeterStatus(String meterStatus)
+    {
+        this.meterStatus = meterStatus;
+    }
+
+    public String getMeterStatus()
+    {
+        return meterStatus;
+    }
+    public void setDelFlage(String delFlage)
+    {
+        this.delFlage = delFlage;
+    }
+
+    public String getDelFlage()
+    {
+        return delFlage;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("code", getCode())
+            .append("meterName", getMeterName())
+            .append("meterType", getMeterType())
+            .append("modelNumber", getModelNumber())
+            .append("measureRange", getMeasureRange())
+            .append("manufacturer", getManufacturer())
+            .append("personCharge", getPersonCharge())
+            .append("installactionLocation", getInstallactionLocation())
+            .append("startTime", getStartTime())
+            .append("checkCycle", getCheckCycle())
+            .append("reminderCycle", getReminderCycle())
+            .append("meterStatus", getMeterStatus())
+            .append("delFlage", getDelFlage())
+            .append("remark", getRemark())
+            .append("createTime", getCreateTime())
+            .append("createBy", getCreateBy())
+            .append("updateTime", getUpdateTime())
+            .append("updateBy", getUpdateBy())
+            .append("txflage", getTxflage())
+            .toString();
+    }
+
+    public Date getPutrunTime() {
+        return putrunTime;
+    }
+
+    public void setPutrunTime(Date putrunTime) {
+        this.putrunTime = putrunTime;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/meter/domain/MeterParam.java b/zhitan-system/src/main/java/com/zhitan/meter/domain/MeterParam.java
new file mode 100644
index 0000000..a580932
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/meter/domain/MeterParam.java
@@ -0,0 +1,104 @@
+package com.zhitan.meter.domain;
+
+import io.swagger.annotations.ApiModel;
+
+import java.util.Objects;
+
+/**
+ * @ClassName: MeterParam
+ * @Author: Yarry
+ * @CreateTime: 2024-09-28 11-32-01
+ * @Description: TODO
+ * @Version: 1.0
+ * @Since: JDK1.8
+ */
+
+@ApiModel(value = "鏌ヨ閰嶇疆淇℃伅")
+public class MeterParam {
+    private static final long serialVersionUID = 1L;
+
+    private String id;
+
+    private String meterName;
+
+    private String indexId;
+
+    private String code;
+
+    private String name;
+
+    public MeterParam() {
+    }
+
+    public MeterParam(String id, String meterName, String indexId, String code, String name) {
+        this.id = id;
+        this.meterName = meterName;
+        this.indexId = indexId;
+        this.code = code;
+        this.name = name;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getMeterName() {
+        return meterName;
+    }
+
+    public void setMeterName(String meterName) {
+        this.meterName = meterName;
+    }
+
+    public String getIndexId() {
+        return indexId;
+    }
+
+    public void setIndexId(String indexId) {
+        this.indexId = indexId;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public String toString() {
+        return "MeterParam{" +
+                "id='" + id + '\'' +
+                ", meterName='" + meterName + '\'' +
+                ", indexId='" + indexId + '\'' +
+                ", code='" + code + '\'' +
+                ", name='" + name + '\'' +
+                '}';
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        MeterParam that = (MeterParam) o;
+        return Objects.equals(id, that.id) && Objects.equals(meterName, that.meterName) && Objects.equals(indexId, that.indexId) && Objects.equals(code, that.code) && Objects.equals(name, that.name);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, meterName, indexId, code, name);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/meter/mapper/MetersMapper.java b/zhitan-system/src/main/java/com/zhitan/meter/mapper/MetersMapper.java
new file mode 100644
index 0000000..f360acd
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/meter/mapper/MetersMapper.java
@@ -0,0 +1,42 @@
+package com.zhitan.meter.mapper;
+
+
+import com.zhitan.meter.domain.MeterConfig;
+import com.zhitan.meter.domain.MeterImplements;
+import com.zhitan.meter.domain.MeterParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @InterfaceName: MeterImplementMapper
+ * @Author: Yarry
+ * @CreateTime: 2024-09-20 16-23-18
+ * @Description: TODO
+ * @Version: 1.0
+ * @Since: JDK1.8
+ */
+public interface MetersMapper {
+
+    /**
+     * 鑾峰彇鎵�鏈夎閲忚〃鏁版嵁
+     * @param meterType
+     * @return
+     */
+    List<MeterImplements> listMeterData(@Param("meterType") String meterType);
+
+    /**
+     * 鑾峰彇鐐逛綅閰嶇疆鏁版嵁
+     * @param meterType
+     * @param indexType
+     * @return
+     */
+    List<MeterParam> listConfigurationData(@Param("meterType") String meterType, @Param("indexType") String indexType);
+
+    /**
+     * 鑾峰彇鐐逛綅閰嶇疆鏁版嵁
+     * @param indexType
+     * @return
+     */
+    List<MeterConfig> listConfigData(@Param("indexType") String indexType);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/meter/services/IMetersService.java b/zhitan-system/src/main/java/com/zhitan/meter/services/IMetersService.java
new file mode 100644
index 0000000..d400483
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/meter/services/IMetersService.java
@@ -0,0 +1,40 @@
+package com.zhitan.meter.services;
+
+import com.zhitan.meter.domain.MeterConfig;
+import com.zhitan.meter.domain.MeterImplements;
+import com.zhitan.meter.domain.MeterParam;
+
+import java.util.List;
+
+/**
+ * @InterfaceName: IMeterImplementService
+ * @Author: Yarry
+ * @CreateTime: 2024-09-20 16-21-54
+ * @Description: TODO
+ * @Version: 1.0
+ * @Since: JDK1.8
+ */
+public interface IMetersService {
+
+    /**
+     * 鑾峰彇鎵�鏈夎閲忚〃鏁版嵁
+     * @return
+     */
+    List<MeterImplements> listMeterData(String meterType);
+
+    /**
+     * 鑾峰彇鐐逛綅閰嶇疆鏁版嵁
+     * @param meterType
+     * @param indexType
+     * @return
+     */
+    List<MeterParam> listConfigurationData(String meterType, String indexType);
+
+    /**
+     * 鑾峰彇鐐逛綅code閰嶇疆鏁版嵁
+     *
+     * @param indexType
+     * @return
+     */
+    List<MeterConfig> listConfigData(String indexType);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/meter/services/impl/MetersServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/meter/services/impl/MetersServiceImpl.java
new file mode 100644
index 0000000..00d4428
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/meter/services/impl/MetersServiceImpl.java
@@ -0,0 +1,58 @@
+package com.zhitan.meter.services.impl;
+
+import com.zhitan.meter.domain.MeterConfig;
+import com.zhitan.meter.domain.MeterImplements;
+import com.zhitan.meter.domain.MeterParam;
+import com.zhitan.meter.mapper.MetersMapper;
+import com.zhitan.meter.services.IMetersService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @ClassName: MeterImplementServiceImpl
+ * @Author: Yarry
+ * @CreateTime: 2024-09-20 16-22-19
+ * @Description: TODO
+ * @Version: 1.0
+ * @Since: JDK1.8
+ */
+
+@Service
+public class MetersServiceImpl implements IMetersService {
+
+    @Resource
+    private MetersMapper metersMapper;
+
+
+    /**
+     * 鑾峰彇鎵�鏈夎閲忚〃鏁版嵁
+     * @return
+     */
+    @Override
+    public List<MeterImplements> listMeterData(String meterType) {
+        return metersMapper.listMeterData(meterType);
+    }
+
+    /**
+     * 鑾峰彇鐐逛綅閰嶇疆鏁版嵁
+     *
+     * @return
+     */
+    @Override
+    public List<MeterParam> listConfigurationData(String meterType, String indexType) {
+        return metersMapper.listConfigurationData(meterType, indexType);
+    }
+
+    /**
+     * 鑾峰彇鐐逛綅code閰嶇疆鏁版嵁
+     *
+     * @param indexType
+     * @return
+     */
+    @Override
+    public List<MeterConfig> listConfigData(String indexType) {
+        return metersMapper.listConfigData(indexType);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/CalcFunction.java b/zhitan-system/src/main/java/com/zhitan/model/domain/CalcFunction.java
new file mode 100644
index 0000000..8887cef
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/domain/CalcFunction.java
@@ -0,0 +1,86 @@
+package com.zhitan.model.domain;
+
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 璁$畻鍑芥暟瀵硅薄 calc_function
+ *
+ * @author fanxinfu
+ * @date 2020-03-10
+ */
+@ApiModel(value = "璁$畻鍑芥暟")
+public class CalcFunction extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 涓婚敭 */
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+
+    /** 鍑芥暟鍚� */
+    @Excel(name = "鍑芥暟鍚�")
+    @ApiModelProperty(value = "鍑芥暟鍚�")
+    private String funcName;
+
+    /** 鍑芥暟鏂囨湰 */
+    @Excel(name = "鍑芥暟鏂囨湰")
+    @ApiModelProperty(value = "鍑芥暟鏂囨湰")
+    private String funcText;
+
+    /** 浠嬬粛 */
+    @Excel(name = "浠嬬粛")
+    @ApiModelProperty(value = "浠嬬粛")
+    private String info;
+
+    public void setInfo(String info)
+    {
+        this.info = info;
+    }
+
+    public String getInfo()
+    {
+        return info;
+    }
+    public void setId(String id)
+    {
+        this.id = id;
+    }
+
+    public String getId()
+    {
+        return id;
+    }
+    public void setFuncName(String funcName)
+    {
+        this.funcName = funcName;
+    }
+
+    public String getFuncName()
+    {
+        return funcName;
+    }
+    public void setFuncText(String funcText)
+    {
+        this.funcText = funcText;
+    }
+
+    public String getFuncText()
+    {
+        return funcText;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("info", getInfo())
+            .append("id", getId())
+            .append("funcName", getFuncName())
+            .append("funcText", getFuncText())
+            .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/DaqTemplate.java b/zhitan-system/src/main/java/com/zhitan/model/domain/DaqTemplate.java
new file mode 100644
index 0000000..30df1fa
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/domain/DaqTemplate.java
@@ -0,0 +1,93 @@
+package com.zhitan.model.domain;
+
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 閲囬泦鍙傛暟妯℃澘瀵硅薄 daq_template
+ *
+ * @author ruoyi
+ * @date 2020-02-08
+ */
+public class DaqTemplate extends BaseEntity {
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * 涓婚敭
+   */
+  private String id;
+
+  /**
+   * 鍙傛暟缂栫爜
+   */
+  @Excel(name = "鍙傛暟缂栫爜")
+  private String code;
+
+  /**
+   * 鍙傛暟鍚嶇О
+   */
+  @Excel(name = "鍙傛暟鍚嶇О")
+  private String name;
+
+  /**
+   * 鍙傛暟鎵�灞炵被鍨�
+   */
+  @Excel(name = "鍙傛暟鎵�灞炵被鍨�")
+  private String deviceType;
+
+  @Excel(name = "鍗曚綅")
+  private String unit;
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getId() {
+    return id;
+  }
+
+  public void setCode(String code) {
+    this.code = code;
+  }
+
+  public String getCode() {
+    return code;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setDeviceType(String deviceType) {
+    this.deviceType = deviceType;
+  }
+
+  public String getDeviceType() {
+    return deviceType;
+  }
+
+  @Override
+  public String toString() {
+    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+        .append("id", getId())
+        .append("code", getCode())
+        .append("name", getName())
+        .append("deviceType", getDeviceType())
+        .append("unit", getUnit())
+        .toString();
+  }
+
+  public String getUnit() {
+    return unit;
+  }
+
+  public void setUnit(String unit) {
+    this.unit = unit;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java b/zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java
new file mode 100644
index 0000000..aa59f95
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java
@@ -0,0 +1,218 @@
+package com.zhitan.model.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import com.zhitan.common.enums.IndexType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import org.springframework.data.annotation.Transient;
+
+
+/**
+ * 鎸囨爣淇℃伅瀵硅薄 energy_index
+ *
+ * @author fanxinfu
+ * @date 2020-02-14
+ */
+@ApiModel(value = "鎸囨爣淇℃伅")
+public class EnergyIndex extends BaseEntity {
+
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * 涓婚敭
+   */
+  @ApiModelProperty(value = "涓婚敭")
+  private String indexId;
+
+  /**
+   * 鎸囨爣鍚嶇О
+   */
+  @ApiModelProperty(value = "鎸囨爣鍚嶇О")
+  @Excel(name = "鎸囨爣鍚嶇О", prompt = "蹇呭~")
+  private String name;
+
+  /**
+   * 鎸囨爣缂栫爜
+   */
+  @ApiModelProperty(value = "鎸囨爣缂栫爜")
+  @Excel(name = "鎸囨爣缂栫爜", prompt = "蹇呭~")
+  private String code;
+
+  /**
+   * 绯荤粺鎸囨爣绫诲瀷
+   */
+  @ApiModelProperty(value = "绯荤粺鎸囨爣绫诲瀷")
+  private IndexType indexType;
+
+  @Excel(name = "鎸囨爣绫诲瀷", combo = "COLLECT,STATISTIC")
+  @ApiModelProperty(value = "")
+  @TableField(exist = false)
+  private String indexTypeCode;
+
+  /**
+   * 鎸囨爣鍒嗙被
+   */
+  @Excel(name = "鎸囨爣鍒嗙被")
+  @ApiModelProperty(value = "鎸囨爣鍒嗙被")
+  private String indexCategory;
+
+  /**
+   * 鍗曚綅涓婚敭
+   */
+  @Excel(name = "鍗曚綅涓婚敭")
+  @ApiModelProperty(value = "鍗曚綅涓婚敭")
+  private String unitId;
+
+  @Excel(name = "鎵�灞炶妭鐐�", prompt = "蹇呭~")
+  @ApiModelProperty(value = "鎵�灞炶妭鐐�")
+  @TableField(exist = false)
+  private String nodeId;
+
+  @ApiModelProperty(value = "琛ㄨid")
+  private String meterId;
+  @ApiModelProperty(value = "椤哄簭鍙�")
+  @Excel(name = "椤哄簭鍙�")
+  private int orderNum;
+
+  @ApiModelProperty(value = "")
+  private String equipment;
+  @ApiModelProperty(value = "id")
+  private String energyId;
+
+  @Transient
+  @TableField(exist = false)
+  private  String meterName;
+  public void setIndexId(String indexId) {
+    this.indexId = indexId;
+  }
+
+  public String getIndexId() {
+    return indexId;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setCode(String code) {
+    this.code = code;
+  }
+
+  public String getCode() {
+    return code;
+  }
+
+  public void setIndexType(IndexType indexType) {
+    this.indexType = indexType;
+    if (StringUtils.isBlank(this.indexTypeCode)) {
+      this.indexTypeCode = indexType.name();
+    }
+  }
+
+  public IndexType getIndexType() {
+    if (indexType == null && StringUtils.isNotBlank(this.indexTypeCode)) {
+      return IndexType.valueOf(indexTypeCode);
+    }
+
+    return indexType;
+  }
+
+  public void setUnitId(String unitId) {
+    this.unitId = unitId;
+  }
+
+  public String getUnitId() {
+    return unitId;
+  }
+
+  @Override
+  public String toString() {
+    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+        .append("indexId", getIndexId())
+        .append("name", getName())
+        .append("code", getCode())
+        .append("indexType", getIndexType())
+        .append("remark", getRemark())
+        .append("unitId", getUnitId())
+        .toString();
+  }
+
+  public String getNodeId() {
+    return nodeId;
+  }
+
+  public void setNodeId(String nodeId) {
+    this.nodeId = nodeId;
+  }
+
+  public String getMeterId() {
+    return meterId;
+  }
+
+  public void setMeterId(String meterId) {
+    this.meterId = meterId;
+  }
+
+  public String getIndexCategory() {
+    return indexCategory;
+  }
+
+  public void setIndexCategory(String indexCategory) {
+    this.indexCategory = indexCategory;
+  }
+
+  public String getIndexTypeCode() {
+    if (StringUtils.isBlank(indexTypeCode) && this.indexType != null) {
+      return this.indexType.name();
+    }
+    return indexTypeCode;
+  }
+
+  public void setIndexTypeCode(String indexTypeCode) {
+    this.indexTypeCode = indexTypeCode;
+    if (this.indexType == null) {
+      this.indexType = IndexType.valueOf(indexTypeCode);
+    }
+  }
+
+  public int getOrderNum() {
+    return orderNum;
+  }
+
+  public void setOrderNum(int orderNum) {
+    this.orderNum = orderNum;
+  }
+
+  public String getEquipment() {
+    return equipment;
+  }
+
+  public void setEquipment(String equipment) {
+    this.equipment = equipment;
+  }
+
+  public String getEnergyId() {
+    return energyId;
+  }
+
+  public void setEnergyId(String energyId) {
+    this.energyId = energyId;
+  }
+
+  public String getMeterName() {
+    return meterName;
+  }
+
+  public void setMeterName(String meterName) {
+    this.meterName = meterName;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndexQuery.java b/zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndexQuery.java
new file mode 100644
index 0000000..4370cae
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndexQuery.java
@@ -0,0 +1,54 @@
+package com.zhitan.model.domain;
+
+import com.zhitan.common.enums.IndexType;
+
+public class EnergyIndexQuery {
+
+  private String nodeId;
+  private String codeOrName;
+  private String indexCategory;
+  private IndexType indexType;
+
+  public EnergyIndexQuery() {
+  }
+
+  public EnergyIndexQuery(String nodeId, String codeOrName, String indexCategory,
+      IndexType energyType) {
+    this.nodeId = nodeId;
+    this.codeOrName = codeOrName;
+    this.indexCategory = indexCategory;
+    this.indexType = energyType;
+  }
+
+  public String getNodeId() {
+    return nodeId;
+  }
+
+  public void setNodeId(String nodeId) {
+    this.nodeId = nodeId;
+  }
+
+  public String getCodeOrName() {
+    return codeOrName;
+  }
+
+  public void setCodeOrName(String codeOrName) {
+    this.codeOrName = codeOrName;
+  }
+
+  public String getIndexCategory() {
+    return indexCategory;
+  }
+
+  public void setIndexCategory(String indexCategory) {
+    this.indexCategory = indexCategory;
+  }
+
+  public IndexType getIndexType() {
+    return indexType;
+  }
+
+  public void setIndexType(IndexType indexType) {
+    this.indexType = indexType;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/IndexFormula.java b/zhitan-system/src/main/java/com/zhitan/model/domain/IndexFormula.java
new file mode 100644
index 0000000..cf8e5b1
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/domain/IndexFormula.java
@@ -0,0 +1,54 @@
+package com.zhitan.model.domain;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class IndexFormula {
+
+  private String id;
+  private String formulaText;
+  private String indexId;
+  private Integer isPvCalc;
+
+  public Integer getIsPvCalc() {
+    return isPvCalc;
+  }
+
+  public void setIsPvCalc(Integer isPvCalc) {
+    this.isPvCalc = isPvCalc;
+  }
+  private List<IndexFormulaParam> indexFormulaParams = new ArrayList<>();
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getFormulaText() {
+    return formulaText;
+  }
+
+  public void setFormulaText(String formulaText) {
+    this.formulaText = formulaText;
+  }
+
+  public String getIndexId() {
+    return indexId;
+  }
+
+  public void setIndexId(String indexId) {
+    this.indexId = indexId;
+  }
+
+  public List<IndexFormulaParam> getIndexFormulaParams() {
+    return indexFormulaParams;
+  }
+
+  public void setIndexFormulaParams(
+      List<IndexFormulaParam> indexFormulaParams) {
+    this.indexFormulaParams = indexFormulaParams;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/IndexFormulaParam.java b/zhitan-system/src/main/java/com/zhitan/model/domain/IndexFormulaParam.java
new file mode 100644
index 0000000..94eb1cf
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/domain/IndexFormulaParam.java
@@ -0,0 +1,50 @@
+package com.zhitan.model.domain;
+
+public class IndexFormulaParam {
+
+  private String id;
+  private String indexId;
+  private String formulaId;
+  private String paramName;
+  private String paramValue;
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getIndexId() {
+    return indexId;
+  }
+
+  public void setIndexId(String indexId) {
+    this.indexId = indexId;
+  }
+
+  public String getFormulaId() {
+    return formulaId;
+  }
+
+  public void setFormulaId(String formulaId) {
+    this.formulaId = formulaId;
+  }
+
+  public String getParamName() {
+    return paramName;
+  }
+
+  public void setParamName(String paramName) {
+    this.paramName = paramName;
+  }
+
+  public String getParamValue() {
+    return paramValue;
+  }
+
+  public void setParamValue(String paramValue) {
+    this.paramValue = paramValue;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/IndexStorage.java b/zhitan-system/src/main/java/com/zhitan/model/domain/IndexStorage.java
new file mode 100644
index 0000000..304e715
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/domain/IndexStorage.java
@@ -0,0 +1,94 @@
+package com.zhitan.model.domain;
+
+import com.zhitan.common.enums.CalcType;
+import com.zhitan.common.enums.TimeType;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author fanxinfu
+ */
+public class IndexStorage implements Serializable {
+
+  private String id;
+  private String indexId;
+  private TimeType timeType;
+  private CalcType calcType;
+  private String calcText;
+  private Date createTime;
+  private Date updateTime;
+  private Integer isPvCalc;
+
+  public Integer getIsPvCalc() {
+    return isPvCalc;
+  }
+
+  public void setIsPvCalc(Integer isPvCalc) {
+    this.isPvCalc = isPvCalc;
+  }
+
+  private List<String> paramIndex = new ArrayList<>();
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getIndexId() {
+    return indexId;
+  }
+
+  public void setIndexId(String indexId) {
+    this.indexId = indexId;
+  }
+
+  public TimeType getTimeType() {
+    return timeType;
+  }
+
+  public void setTimeType(TimeType timeType) {
+    this.timeType = timeType;
+  }
+
+  public CalcType getCalcType() {
+    return calcType;
+  }
+
+  public void setCalcType(CalcType calcType) {
+    this.calcType = calcType;
+  }
+
+  public String getCalcText() {
+    return calcText;
+  }
+
+  public void setCalcText(String calcText) {
+    this.calcText = calcText;
+  }
+
+  public Date getCreateTime() {
+    return createTime;
+  }
+
+  public void setCreateTime(Date createTime) {
+    this.createTime = createTime;
+  }
+
+  public Date getUpdateTime() {
+    return updateTime;
+  }
+
+  public void setUpdateTime(Date updateTime) {
+    this.updateTime = updateTime;
+  }
+
+  public List<String> getParamIndex() {
+    return paramIndex;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/IndexStorageParam.java b/zhitan-system/src/main/java/com/zhitan/model/domain/IndexStorageParam.java
new file mode 100644
index 0000000..571a3bf
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/domain/IndexStorageParam.java
@@ -0,0 +1,23 @@
+package com.zhitan.model.domain;
+
+public class IndexStorageParam {
+
+  private String storageId;
+  private String indexId;
+
+  public String getStorageId() {
+    return storageId;
+  }
+
+  public void setStorageId(String storageId) {
+    this.storageId = storageId;
+  }
+
+  public String getIndexId() {
+    return indexId;
+  }
+
+  public void setIndexId(String indexId) {
+    this.indexId = indexId;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/ModelInfo.java b/zhitan-system/src/main/java/com/zhitan/model/domain/ModelInfo.java
new file mode 100644
index 0000000..e598e3c
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/domain/ModelInfo.java
@@ -0,0 +1,75 @@
+package com.zhitan.model.domain;
+
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 妯″瀷瀵硅薄 model_info
+ * 
+ * @author fanxinfu
+ * @date 2020-02-17
+ */
+public class ModelInfo extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 妯″瀷缂栫爜 */
+    @Excel(name = "妯″瀷缂栫爜")
+    private String modelCode;
+
+    /** 妯″瀷鍚嶇О */
+    @Excel(name = "妯″瀷鍚嶇О")
+    private String modelName;
+
+    /** 鏄惁鏄剧ず */
+    private Integer isShow;
+
+    private String modelType;
+
+    public void setModelCode(String modelCode) 
+    {
+        this.modelCode = modelCode;
+    }
+
+    public String getModelCode() 
+    {
+        return modelCode;
+    }
+    public void setModelName(String modelName) 
+    {
+        this.modelName = modelName;
+    }
+
+    public String getModelName() 
+    {
+        return modelName;
+    }
+    public void setIsShow(Integer isShow) 
+    {
+        this.isShow = isShow;
+    }
+
+    public Integer getIsShow() 
+    {
+        return isShow;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("modelCode", getModelCode())
+            .append("modelName", getModelName())
+            .append("isShow", getIsShow())
+            .toString();
+    }
+
+    public String getModelType() {
+        return modelType;
+    }
+
+    public void setModelType(String modelType) {
+        this.modelType = modelType;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/ModelNode.java b/zhitan-system/src/main/java/com/zhitan/model/domain/ModelNode.java
new file mode 100644
index 0000000..f92f526
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/domain/ModelNode.java
@@ -0,0 +1,145 @@
+package com.zhitan.model.domain;
+
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 妯″瀷鑺傜偣瀵硅薄 model_node
+ *
+ * @author fanxinfu
+ * @date 2020-02-10
+ */
+public class ModelNode extends BaseEntity {
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * 涓婚敭
+   */
+  private String nodeId;
+
+  /**
+   * 缂栫爜
+   */
+  @Excel(name = "缂栫爜")
+  private String code;
+
+  /**
+   * 鍚嶇О
+   */
+  @Excel(name = "鍚嶇О")
+  private String name;
+
+  /**
+   * 鐖惰妭鐐� id
+   */
+  private String parentId;
+
+  /**
+   * 鍦板潃
+   */
+  private String address;
+
+  /**
+   * 妯″瀷 id
+   */
+  private String modelCode;
+
+  private String nodeCategory;
+
+  private int orderNum;
+
+  @TableField(exist = false)
+  private List<ModelNode> children = new ArrayList<>();
+
+  public void setNodeId(String nodeId) {
+    this.nodeId = nodeId;
+  }
+
+  public String getNodeId() {
+    return nodeId;
+  }
+
+  public void setCode(String code) {
+    this.code = code;
+  }
+
+  public String getCode() {
+    return code;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setParentId(String parentId) {
+    this.parentId = parentId;
+  }
+
+  public String getParentId() {
+    return parentId;
+  }
+
+  public void setAddress(String address) {
+    this.address = address;
+  }
+
+  public String getAddress() {
+    return address;
+  }
+
+  @Override
+  public String toString() {
+    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+        .append("nodeId", getNodeId())
+        .append("code", getCode())
+        .append("name", getName())
+        .append("parentId", getParentId())
+        .append("address", getAddress())
+        .append("modelCode", getModelCode())
+        .append("orderNum", getOrderNum())
+        .toString();
+  }
+
+  public List<ModelNode> getChildren() {
+    return children;
+  }
+
+  public void setChildren(List<ModelNode> children) {
+    this.children = children;
+  }
+
+  public String getModelCode() {
+    return modelCode;
+  }
+
+  public void setModelCode(String modelCode) {
+    this.modelCode = modelCode;
+  }
+
+  public int getOrderNum() {
+    return orderNum;
+  }
+
+  public void setOrderNum(int orderNum) {
+    this.orderNum = orderNum;
+  }
+
+  public String getNodeCategory() {
+    return nodeCategory;
+  }
+
+  public void setNodeCategory(String nodeCategory) {
+    this.nodeCategory = nodeCategory;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/TreeObject.java b/zhitan-system/src/main/java/com/zhitan/model/domain/TreeObject.java
new file mode 100644
index 0000000..17e9061
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/domain/TreeObject.java
@@ -0,0 +1,76 @@
+package com.zhitan.model.domain;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Treeselect鏍戠粨鏋勫疄浣撶被
+ *
+ * @author ruoyi
+ */
+public class TreeObject implements Serializable {
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * 鑺傜偣ID
+   */
+  private String id;
+
+  /**
+   * 鑺傜偣鍚嶇О
+   */
+  private String label;
+
+  private String nodeCategory;
+  /**
+   * 瀛愯妭鐐�
+   */
+  @JsonInclude(JsonInclude.Include.NON_EMPTY)
+  private List<TreeObject> children;
+
+  public TreeObject() {
+
+  }
+
+  public TreeObject(ModelNode modelNode) {
+    this.id = modelNode.getNodeId();
+    this.label = modelNode.getName();
+    this.nodeCategory= modelNode.getNodeCategory();
+    this.children = modelNode.getChildren().stream().map(TreeObject::new).collect(Collectors.toList());
+  }
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getLabel() {
+    return label;
+  }
+
+  public void setLabel(String label) {
+    this.label = label;
+  }
+
+  public List<TreeObject> getChildren() {
+    return children;
+  }
+
+  public void setChildren(List<TreeObject> children) {
+    this.children = children;
+  }
+
+  public String getNodeCategory() {
+    return nodeCategory;
+  }
+
+  public void setNodeCategory(String nodeCategory) {
+    this.nodeCategory = nodeCategory;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/vo/ModelNodeIndexInfor.java b/zhitan-system/src/main/java/com/zhitan/model/domain/vo/ModelNodeIndexInfor.java
new file mode 100644
index 0000000..e7446e3
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/domain/vo/ModelNodeIndexInfor.java
@@ -0,0 +1,66 @@
+package com.zhitan.model.domain.vo;
+
+
+import com.zhitan.common.core.domain.BaseEntity;
+
+/**
+ * 妯″瀷鑺傜偣涓庣偣浣嶅叧绯诲璞�
+ *
+ * @Author: Zhujw
+ * @Date: 2023/3/2
+ */
+public class ModelNodeIndexInfor extends BaseEntity {
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * 涓婚敭
+   */
+  private String nodeId;
+
+  /**
+   * 鍚嶇О
+   */
+  private String name;
+
+  /**
+   * 鐐逛綅id
+   */
+  private String indexId;
+  
+  /**
+   * 鑳芥簮绫诲瀷
+   */
+  private String energyId;
+
+  public String getNodeId() {
+    return nodeId;
+  }
+
+  public void setNodeId(String nodeId) {
+    this.nodeId = nodeId;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getIndexId() {
+    return indexId;
+  }
+
+  public void setIndexId(String indexId) {
+    this.indexId = indexId;
+  }
+
+  public String getEnergyId() {
+    return energyId;
+  }
+
+  public void setEnergyId(String energyId) {
+    this.energyId = energyId;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/vo/PointDataVO.java b/zhitan-system/src/main/java/com/zhitan/model/domain/vo/PointDataVO.java
new file mode 100644
index 0000000..7707f63
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/domain/vo/PointDataVO.java
@@ -0,0 +1,36 @@
+package com.zhitan.model.domain.vo;
+
+/**
+ * 妯″瀷鐐逛綅id涓庡悕绉�
+ *
+ * @Author: Zhujw
+ * @Date: 2023/3/6
+ */
+public class PointDataVO {
+
+  /**
+   * 鐐逛綅id
+   */
+  private String indexId;
+
+  /**
+   * 鐐逛綅鍚嶇О
+   */
+  private String indexName;
+
+  public String getIndexId() {
+    return indexId;
+  }
+
+  public void setIndexId(String indexId) {
+    this.indexId = indexId;
+  }
+
+  public String getIndexName() {
+    return indexName;
+  }
+
+  public void setIndexName(String indexName) {
+    this.indexName = indexName;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/mapper/CalcFunctionMapper.java b/zhitan-system/src/main/java/com/zhitan/model/mapper/CalcFunctionMapper.java
new file mode 100644
index 0000000..a69747b
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/mapper/CalcFunctionMapper.java
@@ -0,0 +1,62 @@
+package com.zhitan.model.mapper;
+
+import com.zhitan.model.domain.CalcFunction;
+
+import java.util.List;
+
+/**
+ * 璁$畻鍑芥暟Mapper鎺ュ彛
+ * 
+ * @author fanxinfu
+ * @date 2020-03-10
+ */
+public interface CalcFunctionMapper 
+{
+    /**
+     * 鏌ヨ璁$畻鍑芥暟
+     * 
+     * @param id 璁$畻鍑芥暟ID
+     * @return 璁$畻鍑芥暟
+     */
+    public CalcFunction selectCalcFunctionById(String id);
+
+    /**
+     * 鏌ヨ璁$畻鍑芥暟鍒楄〃
+     * 
+     * @param calcFunction 璁$畻鍑芥暟
+     * @return 璁$畻鍑芥暟闆嗗悎
+     */
+    public List<CalcFunction> selectCalcFunctionList(CalcFunction calcFunction);
+
+    /**
+     * 鏂板璁$畻鍑芥暟
+     * 
+     * @param calcFunction 璁$畻鍑芥暟
+     * @return 缁撴灉
+     */
+    public int insertCalcFunction(CalcFunction calcFunction);
+
+    /**
+     * 淇敼璁$畻鍑芥暟
+     * 
+     * @param calcFunction 璁$畻鍑芥暟
+     * @return 缁撴灉
+     */
+    public int updateCalcFunction(CalcFunction calcFunction);
+
+    /**
+     * 鍒犻櫎璁$畻鍑芥暟
+     * 
+     * @param id 璁$畻鍑芥暟ID
+     * @return 缁撴灉
+     */
+    public int deleteCalcFunctionById(String id);
+
+    /**
+     * 鎵归噺鍒犻櫎璁$畻鍑芥暟
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteCalcFunctionByIds(String[] ids);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/mapper/DaqTemplateMapper.java b/zhitan-system/src/main/java/com/zhitan/model/mapper/DaqTemplateMapper.java
new file mode 100644
index 0000000..905ad07
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/mapper/DaqTemplateMapper.java
@@ -0,0 +1,74 @@
+package com.zhitan.model.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.model.domain.DaqTemplate;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 閲囬泦鍙傛暟妯℃澘Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2020-02-08
+ */
+public interface DaqTemplateMapper extends BaseMapper<DaqTemplate> {
+    /**
+     * 鏌ヨ閲囬泦鍙傛暟妯℃澘
+     *
+     * @param id 閲囬泦鍙傛暟妯℃澘ID
+     * @return 閲囬泦鍙傛暟妯℃澘
+     */
+    DaqTemplate selectDaqTemplateById(String id);
+
+    /**
+     * 鏌ヨ閲囬泦鍙傛暟妯℃澘鍒楄〃
+     *
+     * @param daqTemplate 閲囬泦鍙傛暟妯℃澘
+     * @return 閲囬泦鍙傛暟妯℃澘闆嗗悎
+     */
+    List<DaqTemplate> selectDaqTemplateList(DaqTemplate daqTemplate);
+
+    /**
+     * 鏂板閲囬泦鍙傛暟妯℃澘
+     *
+     * @param daqTemplate 閲囬泦鍙傛暟妯℃澘
+     * @return 缁撴灉
+     */
+    int insertDaqTemplate(DaqTemplate daqTemplate);
+
+    /**
+     * 淇敼閲囬泦鍙傛暟妯℃澘
+     *
+     * @param daqTemplate 閲囬泦鍙傛暟妯℃澘
+     * @return 缁撴灉
+     */
+    int updateDaqTemplate(DaqTemplate daqTemplate);
+
+    /**
+     * 鍒犻櫎閲囬泦鍙傛暟妯℃澘
+     *
+     * @param id 閲囬泦鍙傛暟妯℃澘ID
+     * @return 缁撴灉
+     */
+    int deleteDaqTemplateById(String id);
+
+    /**
+     * 鎵归噺鍒犻櫎閲囬泦鍙傛暟妯℃澘
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    int deleteDaqTemplateByIds(String[] ids);
+
+    int dapHasExist(@Param("code") String code, @Param("deviceType") String deviceType);
+
+    int dapHasExistWhenUpdate(@Param("id") String id, @Param("code") String code, @Param("deviceType") String deviceType);
+
+    /**
+     * 鏌ヨ鎸囨爣妯℃澘淇℃伅
+     *
+     * @return 缁撴灉
+     */
+    List<DaqTemplate> listTemplate();
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/mapper/EnergyIndexMapper.java b/zhitan-system/src/main/java/com/zhitan/model/mapper/EnergyIndexMapper.java
new file mode 100644
index 0000000..e1e08e8
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/mapper/EnergyIndexMapper.java
@@ -0,0 +1,101 @@
+package com.zhitan.model.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.domain.EnergyIndexQuery;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 鎸囨爣淇℃伅Mapper鎺ュ彛
+ *
+ * @author fanxinfu
+ * @date 2020-02-14
+ */
+public interface EnergyIndexMapper extends BaseMapper<EnergyIndex> {
+
+  EnergyIndex getiEnergyIndexByCode(String code);
+
+  List<EnergyIndex> listIndexByMeterIds(@Param("nodeId") String nodeId,@Param("meterIds") List<String> meterIds);
+
+  /**
+   * 鏌ヨ鎸囨爣淇℃伅
+   *
+   * @param indexId 鎸囨爣淇℃伅ID
+   * @return 鎸囨爣淇℃伅
+   */
+  EnergyIndex selectEnergyIndexById(String indexId);
+
+  List<EnergyIndex> selectEnergyIndexByIds(@Param("indexIds") List<String> indexIds);
+
+  /**
+   * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
+   *
+   * @param energyIndex 鎸囨爣淇℃伅
+   * @return 鎸囨爣淇℃伅闆嗗悎
+   */
+  List<EnergyIndex> selectEnergyIndexList(EnergyIndex energyIndex);
+
+  /**
+   * 鏂板鎸囨爣淇℃伅
+   *
+   * @param nodeId
+   * @param energyIndex 鎸囨爣淇℃伅
+   * @return 缁撴灉
+   */
+  int insertEnergyIndex(EnergyIndex energyIndex);
+
+  /**
+   * 淇敼鎸囨爣淇℃伅
+   *
+   * @param energyIndex 鎸囨爣淇℃伅
+   * @return 缁撴灉
+   */
+  int updateEnergyIndex(EnergyIndex energyIndex);
+
+  /**
+   * 鎵归噺鍒犻櫎鎸囨爣淇℃伅
+   *
+   *
+   * @param nodeId
+   * @param indexIds 闇�瑕佸垹闄ょ殑鏁版嵁ID
+   * @return 缁撴灉
+   */
+  int deleteEnergyIndexByIds(@Param("nodeId") String nodeId, @Param("indexIds")String[] indexIds);
+
+  int energyIndexHasExist(String code);
+
+  int energyIndexHasExistWhenUpdate(@Param("indexId") String indexId, @Param("code") String code);
+
+  void insertEnergyIndices(@Param("energyIndices") List<EnergyIndex> energyIndices);
+
+  List<EnergyIndex> getMeterIndex(String meterId);
+
+  void deleteIndexByMeterId(String meterId);
+
+  int modelHasConfig(String modelCode);
+
+  List<EnergyIndex> selectCollectIndex(String deviceId);
+
+  List<EnergyIndex> getEnergyIndexByIds(List<String> indexIds);
+
+  List<EnergyIndex> getEnergyIndexByCodes(List<String> indexCodes);
+
+  List<EnergyIndex> getIndexByNodeAndChildrenNode(String nodeId);
+
+  List<EnergyIndex> searchIndexByNodeAndChildrenNode(@Param("nodeId")String nodeId, @Param("filter")String filter);
+
+  List<EnergyIndex> selectEnergyIndex(EnergyIndexQuery query);
+
+  void removeNodeIndex(@Param("nodeId")String nodeId, @Param("indexIds")List<String> indexIds);
+
+  void saveEnergyIndex(List<EnergyIndex> insertData);
+
+  List<EnergyIndex> getEnergyIndexMeterByCodes(List<String> indexCodes);
+
+  int insertNodeIndex(@Param("nodeId")String nodeId, @Param("indexId")String indexId);
+
+  Page<EnergyIndex> selectEnergyIndexPage(@Param("page")Page<?> page, @Param("query") EnergyIndexQuery energyIndexQuery);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/mapper/IndexFormulaMapper.java b/zhitan-system/src/main/java/com/zhitan/model/mapper/IndexFormulaMapper.java
new file mode 100644
index 0000000..2e7053c
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/mapper/IndexFormulaMapper.java
@@ -0,0 +1,20 @@
+package com.zhitan.model.mapper;
+
+import com.zhitan.model.domain.IndexFormula;
+import com.zhitan.model.domain.IndexFormulaParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface IndexFormulaMapper {
+
+  void insertIndexFormula(IndexFormula indexFormula);
+
+  void updateIndexFormula(IndexFormula indexFormula);
+
+  void saveIndexFormulaParam(@Param("indexId") String indexId, @Param("indexFormulaParams") List<IndexFormulaParam> indexFormulaParams);
+
+  IndexFormula getFormula(String indexId);
+
+  List<IndexFormulaParam> getFormulaParam(String indexId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/mapper/IndexStorageMapper.java b/zhitan-system/src/main/java/com/zhitan/model/mapper/IndexStorageMapper.java
new file mode 100644
index 0000000..4151dbd
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/mapper/IndexStorageMapper.java
@@ -0,0 +1,26 @@
+package com.zhitan.model.mapper;
+
+import com.zhitan.common.enums.CalcType;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.model.domain.IndexStorage;
+import com.zhitan.model.domain.IndexStorageParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface IndexStorageMapper {
+
+  void insertIndexStorage(IndexStorage storage);
+
+  void updateIndexStorage(IndexStorage storage);
+
+  List<IndexStorage> getIndexStorage(String indexId);
+
+  void saveParams(@Param("storageId")String storageId, @Param("parameterIds")List<String> parameterIds);
+
+  List<IndexStorageParam> getAllParameter();
+
+  List<IndexStorage> getAllCalcIndexStorage(CalcType calc);
+
+  IndexStorage getWithTimetype(@Param("indexId") String indexId, @Param("timeType") TimeType timeType);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelInfoMapper.java b/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelInfoMapper.java
new file mode 100644
index 0000000..ad08605
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelInfoMapper.java
@@ -0,0 +1,63 @@
+package com.zhitan.model.mapper;
+
+
+import com.zhitan.model.domain.ModelInfo;
+
+import java.util.List;
+
+/**
+ * 妯″瀷Mapper鎺ュ彛
+ * 
+ * @author fanxinfu
+ * @date 2020-02-17
+ */
+public interface ModelInfoMapper 
+{
+    /**
+     * 鏌ヨ妯″瀷
+     * 
+     * @param modelCode 妯″瀷ID
+     * @return 妯″瀷
+     */
+    ModelInfo selectModelInfoById(String modelCode);
+
+    /**
+     * 鏌ヨ妯″瀷鍒楄〃
+     * 
+     * @param modelInfo 妯″瀷
+     * @return 妯″瀷闆嗗悎
+     */
+    List<ModelInfo> selectModelInfoList(ModelInfo modelInfo);
+
+    /**
+     * 鏂板妯″瀷
+     * 
+     * @param modelInfo 妯″瀷
+     * @return 缁撴灉
+     */
+    int insertModelInfo(ModelInfo modelInfo);
+
+    /**
+     * 淇敼妯″瀷
+     * 
+     * @param modelInfo 妯″瀷
+     * @return 缁撴灉
+     */
+    int updateModelInfo(ModelInfo modelInfo);
+
+    /**
+     * 鍒犻櫎妯″瀷
+     * 
+     * @param modelCode 妯″瀷ID
+     * @return 缁撴灉
+     */
+    int deleteModelInfoById(String modelCode);
+
+    /**
+     * 鎵归噺鍒犻櫎妯″瀷
+     * 
+     * @param modelCodes 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    int deleteModelInfoByCode(String modelCodes);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java b/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java
new file mode 100644
index 0000000..3df1018
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java
@@ -0,0 +1,199 @@
+package com.zhitan.model.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.basicdata.domain.MeterImplement;
+import com.zhitan.basicdata.domain.SysEnergy;
+import com.zhitan.basicdata.domain.SysProduct;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.domain.ModelNode;
+import com.zhitan.model.domain.vo.ModelNodeIndexInfor;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 妯″瀷鑺傜偣Mapper鎺ュ彛
+ *
+ * @author fanxinfu
+ * @date 2020-02-10
+ */
+public interface ModelNodeMapper  extends BaseMapper<ModelNode> {
+
+    /**
+     * 鏌ヨ妯″瀷鑺傜偣
+     *
+     * @param nodeId 妯″瀷鑺傜偣ID
+     * @return 妯″瀷鑺傜偣
+     */
+    ModelNode selectModelNodeById(String nodeId);
+
+    /**
+     * 鏌ヨ妯″瀷鑺傜偣鍒楄〃
+     *
+     * @param modelNode 妯″瀷鑺傜偣
+     * @return 妯″瀷鑺傜偣闆嗗悎
+     */
+    List<ModelNode> selectModelNodeList(ModelNode modelNode);
+
+    /**
+     * 鏂板妯″瀷鑺傜偣
+     *
+     * @param modelNode 妯″瀷鑺傜偣
+     * @return 缁撴灉
+     */
+    int insertModelNode(ModelNode modelNode);
+
+    /**
+     * 淇敼妯″瀷鑺傜偣
+     *
+     * @param modelNode 妯″瀷鑺傜偣
+     * @return 缁撴灉
+     */
+    int updateModelNode(ModelNode modelNode);
+
+    /**
+     * 鍒犻櫎妯″瀷鑺傜偣
+     *
+     * @param nodeId 妯″瀷鑺傜偣ID
+     * @return 缁撴灉
+     */
+    int deleteModelNodeById(String nodeId);
+
+    /**
+     * 鎵归噺鍒犻櫎妯″瀷鑺傜偣
+     *
+     * @param nodeIds 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    int deleteModelNodeByIds(String[] nodeIds);
+
+    List<ModelNode> getModelNodeByModelCode(String modelCode);
+
+    int getMaxOrder(String parentId);
+
+    void updateModelNodeParent(@Param("nodeId") String nodeId, @Param("parentId") String parentId);
+
+    void updateModelNodeOrder(@Param("orders") Map<String, Integer> orders);
+
+    int modelNodeHasExist(@Param("code") String code, @Param("modelCode") String modelCode);
+
+    int modelNodeHasExistWhenUpdate(@Param("nodeId") String nodeId, @Param("code") String code,
+                                    @Param("modelCode") String modelCode);
+
+    void setDevice(@Param("nodeId") String nodeId, @Param("deviceIds") String[] deviceIds);
+
+    List<MeterImplement> getSettingDevice(String nodeId);
+
+    List<EnergyIndex> getSettingIndex(String nodeId);
+
+
+    void delDevice(@Param("nodeId") String nodeId, @Param("deviceIds") String[] deviceIds);
+
+    List<SysEnergy> getSettingEnergy(String nodeId);
+
+    void setEnergy(@Param("nodeId") String nodeId, @Param("energyIds") Integer[] energyIds);
+
+    void delEnergy(@Param("nodeId") String nodeId, @Param("energyIds") Integer[] energyIds);
+
+    List<SysProduct> getSettingProduct(String nodeId);
+
+    void setProduct(@Param("nodeId") String nodeId, @Param("productIds") Integer[] productIds);
+
+    void delProduct(@Param("nodeId") String nodeId, @Param("productIds") Integer[] productIds);
+
+    void setIndex(@Param("nodeId") String nodeId, @Param("indexType") String indexType,
+                  @Param("indexIds") String[] indexIds);
+
+    void delIndex(@Param("nodeId") String nodeId, @Param("indexIds") String[] indexIds);
+
+    Page<EnergyIndex> getSettingIndexByType(@Param("indexType") String indexType,
+                                            @Param("nodeId") String nodeId,
+                                            @Param("code") String code,
+                                            @Param("name") String name,
+                                            @Param("page") Page<?> page);
+
+    List<ModelNode> getModelNodeByNodeCodes(List<String> nodeCodes);
+
+    List<ModelNode> getModelNodeByModelCodeWithAuth(@Param("modelCode") String modelCode,
+                                                    @Param("userId") String userId);
+
+    List<EnergyIndex> getSettingIndexByWhere(@Param("nodeId") String nodeId, @Param("indexName") String indexName);
+
+    /**
+     * 鏍规嵁nodeIds鑾峰彇idexId淇℃伅
+     *
+     * @param nodeIds
+     * @return
+     */
+    List<String> listIndesxByCodeList(@Param("nodeIds") List<String> nodeIds);
+
+    /**
+     * 鏍规嵁nodeCode鏌ヨ妯″瀷鑺傜偣涓庣偣浣峣d涔嬮棿鐨勫叧绯讳俊鎭�
+     *
+     * @param code
+     * @return
+     */
+    List<ModelNodeIndexInfor> getModelNodeIndexIdRelationInforByCode(@Param("code") String code);
+
+    /**
+     * 鏍规嵁nodeId鏌ヨ瀵瑰簲璇︾粏淇℃伅
+     *
+     * @param nodeId
+     * @return
+     */
+    List<ModelNodeIndexInfor> getModelNodeIndexIdRelationInforByNodeId(@Param("nodeId") String nodeId);
+
+    /**
+     * 鏍规嵁鐖秈d鏌ヨ璇︾粏淇℃伅
+     *
+     * @param parentId
+     * @return
+     */
+    List<ModelNodeIndexInfor> listModelNodeIndexIdRelationInforByParentId(@Param("parentId") String parentId);
+
+    /**
+     * 鏍规嵁code鏌ヨ鐖剁骇淇℃伅
+     *
+     * @param indexCode
+     * @return
+     */
+    ModelNode getModelNodeByModelCodeByIndexCode(@Param("indexCode") String indexCode);
+
+    /**
+     * 鏍规嵁妯″瀷缂栧彿鍜岃妭鐐筰d鏌ヨ鐐逛綅id
+     *
+     * @param modelCode 妯″瀷缂栧彿
+     * @param nodeId    鑺傜偣id
+     * @return 缁撴灉
+     */
+    List<ModelNodeIndexInfor> selectIndexByModelCodeAndNodeId(@Param("modelCode") String modelCode, @Param("nodeId") String nodeId);
+
+    void delIndexNodeIdAndIndexType(@Param("nodeId")String nodeId, @Param("indexType")String indexType);
+
+    void setIndexAndNodeId(@Param("nodeId")String nodeId, @Param("indexIds")String[] indexIds);
+
+    List<MeterImplement> getSettingDeviceIndex(@Param("nodeId")String nodeId,@Param("energyType")String energyType);
+
+    /**
+     * @description: 鏍规嵁鑺傜偣id鍜岃兘婧愮被鍨嬫煡璇㈢偣浣嶄俊鎭�
+     * @param nodeId
+     * @author: hmj
+     * @date: 2024/10/16 19:16
+     */
+    List<ModelNodeIndexInfor> getModelNodeIndexIdByNodeId(@Param("nodeId")String nodeId, @Param("energyType")String energyType);
+
+    /**
+     * @description: 鏍规嵁nodeId鏌ヨ瀛愯妭鐐圭殑鎵�鏈夌粺璁℃寚鏍�
+     * @param parentId
+     * @return java.util.List<com.zhitan.model.domain.vo.ModelNodeIndexInfor>
+     * @author: hmj
+     * @date: 2024/10/18 16:12
+     */
+    List<ModelNodeIndexInfor> getModelNodeByParentId(String parentId);
+
+    ModelNode getFirstModeNodeInfo(String modelCode);
+
+    List<ModelNodeIndexInfor> selectIndexByNodeIds(@Param("modelCode") String modelCode,@Param("nodeIds") List<String> nodeIds);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/ICalcFunctionService.java b/zhitan-system/src/main/java/com/zhitan/model/service/ICalcFunctionService.java
new file mode 100644
index 0000000..91a79ab
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/ICalcFunctionService.java
@@ -0,0 +1,62 @@
+package com.zhitan.model.service;
+
+import com.zhitan.model.domain.CalcFunction;
+
+import java.util.List;
+
+/**
+ * 璁$畻鍑芥暟Service鎺ュ彛
+ * 
+ * @author fanxinfu
+ * @date 2020-03-10
+ */
+public interface ICalcFunctionService 
+{
+    /**
+     * 鏌ヨ璁$畻鍑芥暟
+     * 
+     * @param id 璁$畻鍑芥暟ID
+     * @return 璁$畻鍑芥暟
+     */
+    public CalcFunction selectCalcFunctionById(String id);
+
+    /**
+     * 鏌ヨ璁$畻鍑芥暟鍒楄〃
+     * 
+     * @param calcFunction 璁$畻鍑芥暟
+     * @return 璁$畻鍑芥暟闆嗗悎
+     */
+    public List<CalcFunction> selectCalcFunctionList(CalcFunction calcFunction);
+
+    /**
+     * 鏂板璁$畻鍑芥暟
+     * 
+     * @param calcFunction 璁$畻鍑芥暟
+     * @return 缁撴灉
+     */
+    public int insertCalcFunction(CalcFunction calcFunction);
+
+    /**
+     * 淇敼璁$畻鍑芥暟
+     * 
+     * @param calcFunction 璁$畻鍑芥暟
+     * @return 缁撴灉
+     */
+    public int updateCalcFunction(CalcFunction calcFunction);
+
+    /**
+     * 鎵归噺鍒犻櫎璁$畻鍑芥暟
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑璁$畻鍑芥暟ID
+     * @return 缁撴灉
+     */
+    public int deleteCalcFunctionByIds(String[] ids);
+
+    /**
+     * 鍒犻櫎璁$畻鍑芥暟淇℃伅
+     * 
+     * @param id 璁$畻鍑芥暟ID
+     * @return 缁撴灉
+     */
+    public int deleteCalcFunctionById(String id);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/IDaqTemplateService.java b/zhitan-system/src/main/java/com/zhitan/model/service/IDaqTemplateService.java
new file mode 100644
index 0000000..e722df0
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/IDaqTemplateService.java
@@ -0,0 +1,91 @@
+package com.zhitan.model.service;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.model.domain.DaqTemplate;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 閲囬泦鍙傛暟妯℃澘Service鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2020-02-08
+ */
+public interface IDaqTemplateService {
+    /**
+     * 鏌ヨ閲囬泦鍙傛暟妯℃澘
+     *
+     * @param id 閲囬泦鍙傛暟妯℃澘ID
+     * @return 閲囬泦鍙傛暟妯℃澘
+     */
+    DaqTemplate selectDaqTemplateById(String id);
+
+    /**
+     * 鏌ヨ閲囬泦鍙傛暟妯℃澘鍒楄〃
+     *
+     * @param daqTemplate 閲囬泦鍙傛暟妯℃澘
+     * @return 閲囬泦鍙傛暟妯℃澘闆嗗悎
+     */
+    List<DaqTemplate> selectDaqTemplateList(DaqTemplate daqTemplate);
+
+    /**
+     * 鏂板閲囬泦鍙傛暟妯℃澘
+     *
+     * @param daqTemplate 閲囬泦鍙傛暟妯℃澘
+     * @return 缁撴灉
+     */
+    int insertDaqTemplate(DaqTemplate daqTemplate);
+
+    /**
+     * 淇敼閲囬泦鍙傛暟妯℃澘
+     *
+     * @param daqTemplate 閲囬泦鍙傛暟妯℃澘
+     * @return 缁撴灉
+     */
+    int updateDaqTemplate(DaqTemplate daqTemplate);
+
+    /**
+     * 鎵归噺鍒犻櫎閲囬泦鍙傛暟妯℃澘
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑閲囬泦鍙傛暟妯℃澘ID
+     * @return 缁撴灉
+     */
+    int deleteDaqTemplateByIds(String[] ids);
+
+    /**
+     * 鍒犻櫎閲囬泦鍙傛暟妯℃澘淇℃伅
+     *
+     * @param id 閲囬泦鍙傛暟妯℃澘ID
+     * @return 缁撴灉
+     */
+    int deleteDaqTemplateById(String id);
+
+    /**
+     * 鏌ヨ鐩稿悓璁惧绫诲瀷涓嬫槸鍚︽湁閲嶅鐨勭紪鐮�
+     *
+     * @param code       鍙傛暟缂栫爜
+     * @param deviceType 璁惧绫诲瀷
+     * @return 鏄惁瀛樺湪
+     */
+    boolean dapHasExist(String code, String deviceType);
+
+    boolean dapHasExist(DaqTemplate daqTemplate);
+
+    /**
+     * 鏌ヨ鎸囨爣妯℃澘
+     *
+     * @return 缁撴灉
+     */
+    List<DaqTemplate> listTemplate();
+
+    /**
+     * 鏌ヨ鎸囨爣妯℃澘map
+     *
+     * @return 缁撴灉
+     */
+    Map<String, List<DaqTemplate>> listTemplateMap();
+
+    Page<DaqTemplate> selectDaqTemplatePage(DaqTemplate daqTemplate, Long pageNum, Long pageSize);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java b/zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java
new file mode 100644
index 0000000..6807f7e
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java
@@ -0,0 +1,119 @@
+package com.zhitan.model.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.domain.EnergyIndexQuery;
+
+import java.util.List;
+
+/**
+ * 鎸囨爣淇℃伅Service鎺ュ彛
+ *
+ * @author fanxinfu
+ * @date 2020-02-14
+ */
+public interface IEnergyIndexService  {
+
+  EnergyIndex getiEnergyIndexByCode(String code);
+
+  /**
+   * 鏍规嵁璁¢噺鍣ㄥ叿id闆嗗悎鏌ヨ鐐逛綅淇℃伅
+   *
+   * @param meterId 璁¢噺鍣ㄥ叿id闆嗗悎
+   * @return
+   */
+  List<EnergyIndex> listIndexByMeterIds(String nodeId,List<String> meterId);
+
+  /**
+   * 鏌ヨ鎸囨爣淇℃伅
+   *
+   * @param indexId 鎸囨爣淇℃伅ID
+   * @return 鎸囨爣淇℃伅
+   */
+  EnergyIndex selectEnergyIndexById(String indexId);
+
+  /**
+   * 鏌ヨ鎸囨爣淇℃伅
+   *
+   * @param indexId 鎸囨爣淇℃伅ID
+   * @return 鎸囨爣淇℃伅
+   */
+  List<EnergyIndex> selectEnergyIndexByIds(List<String> indexId);
+
+  /**
+   * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
+   *
+   * @param energyIndex 鎸囨爣淇℃伅
+   * @return 鎸囨爣淇℃伅闆嗗悎
+   */
+  List<EnergyIndex> selectEnergyIndexList(EnergyIndex energyIndex);
+
+  /**
+   * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
+   *
+   * @param query 鎸囨爣淇℃伅
+   * @return 鎸囨爣淇℃伅闆嗗悎
+   */
+  List<EnergyIndex> selectEnergyIndexList(EnergyIndexQuery query);
+
+  /**
+   * 鏂板鎸囨爣淇℃伅
+   *
+   * @param nodeId
+   * @param energyIndex 鎸囨爣淇℃伅
+   * @return 缁撴灉
+   */
+  int insertEnergyIndex(String nodeId, EnergyIndex energyIndex);
+
+  /**
+   * 淇敼鎸囨爣淇℃伅
+   *
+   * @param energyIndex 鎸囨爣淇℃伅
+   * @return 缁撴灉
+   */
+  int updateEnergyIndex(EnergyIndex energyIndex);
+
+  /**
+   * 鎵归噺鍒犻櫎鎸囨爣淇℃伅
+   *
+   *
+   * @param nodeId
+   * @param indexIds 闇�瑕佸垹闄ょ殑鎸囨爣淇℃伅ID
+   * @return 缁撴灉
+   */
+  int deleteEnergyIndexByIds(String nodeId, String[] indexIds);
+
+  boolean energyIndexHasExist(String code);
+
+  boolean energyIndexHasExist(String indexId, String code);
+
+  AjaxResult addMeterIndex(String meterId);
+
+  List<EnergyIndex> getMeterIndex(String meterId);
+
+  boolean modelHasConfig(String modelCode);
+
+  List<EnergyIndex> selectCollectIndex(String deviceId);
+
+  List<EnergyIndex> getEnergyIndexByIds(List<String> indexIds);
+
+  List<EnergyIndex> getEnergyIndexByCodes(List<String> indexCodes);
+
+  List<EnergyIndex> getIndexByNodeAndChildrenNode(String nodeId);
+
+  List<EnergyIndex> searchIndexByNodeAndChildrenNode(String nodeId, String filter);
+
+  void removeNodeIndex(String nodeId, List<String> removeLink);
+
+  AjaxResult importEnergyIndex(List<EnergyIndex> energyIndexList, boolean updateSupport);
+
+  List<EnergyIndex> getEnergyIndexMeterByCodes(List<String> indexCodes);
+
+  Page<EnergyIndex> selectEnergyIndexPage(EnergyIndexQuery query, Long pageNum, Long pageSize);
+
+  Page<EnergyIndex> getMeterIndexList(List<String> meterIndexIds,String code,
+                                      String name,Long pageNum, Long pageSize);
+
+  List<EnergyIndex> getIndexByCode(String code,String nodeId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/IIndexStorageService.java b/zhitan-system/src/main/java/com/zhitan/model/service/IIndexStorageService.java
new file mode 100644
index 0000000..13243b7
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/IIndexStorageService.java
@@ -0,0 +1,25 @@
+package com.zhitan.model.service;
+
+
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.model.domain.IndexFormula;
+import com.zhitan.model.domain.IndexStorage;
+
+import java.util.List;
+
+/**
+ * @author fanxinfu
+ */
+public interface IIndexStorageService {
+
+  void saveIndexStorage(String indexId, List<IndexStorage> indexStorage);
+
+    void saveFormulaAndStorage(IndexFormula indexFormula, List<IndexStorage> indexStorage,
+                               String indexId);
+
+  List<IndexStorage> getIndexStorage(String indexId);
+
+  List<IndexStorage> getAllCalcIndexStorage();
+
+  IndexStorage getIndexStorage(String indexId, TimeType timeType);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/IModelInfoService.java b/zhitan-system/src/main/java/com/zhitan/model/service/IModelInfoService.java
new file mode 100644
index 0000000..5c9ae48
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/IModelInfoService.java
@@ -0,0 +1,72 @@
+package com.zhitan.model.service;
+
+
+import com.zhitan.model.domain.ModelInfo;
+import com.zhitan.model.domain.vo.PointDataVO;
+
+import java.util.List;
+
+/**
+ * 妯″瀷Service鎺ュ彛
+ * 
+ * @author fanxinfu
+ * @date 2020-02-17
+ */
+public interface IModelInfoService 
+{
+    /**
+     * 鏌ヨ妯″瀷
+     * 
+     * @param modelCode 妯″瀷ID
+     * @return 妯″瀷
+     */
+    public ModelInfo selectModelInfoById(String modelCode);
+
+    /**
+     * 鏌ヨ妯″瀷鍒楄〃
+     * 
+     * @param modelInfo 妯″瀷
+     * @return 妯″瀷闆嗗悎
+     */
+    public List<ModelInfo> selectModelInfoList(ModelInfo modelInfo);
+
+    /**
+     * 鏂板妯″瀷
+     * 
+     * @param modelInfo 妯″瀷
+     * @return 缁撴灉
+     */
+    public int insertModelInfo(ModelInfo modelInfo);
+
+    /**
+     * 淇敼妯″瀷
+     * 
+     * @param modelInfo 妯″瀷
+     * @return 缁撴灉
+     */
+    public int updateModelInfo(ModelInfo modelInfo);
+
+    /**
+     * 鎵归噺鍒犻櫎妯″瀷
+     * 
+     * @param modelCode 闇�瑕佸垹闄ょ殑妯″瀷ID
+     * @return 缁撴灉
+     */
+    public int deleteModelInfoByCode(String modelCode);
+
+    /**
+     * 鍒犻櫎妯″瀷淇℃伅
+     * 
+     * @param modelCode 妯″瀷ID
+     * @return 缁撴灉
+     */
+    public int deleteModelInfoById(String modelCode);
+
+    /**
+     * 鏍规嵁妯″瀷id鏌ヨ瀵瑰簲鐐逛綅淇℃伅
+     *
+     * @param modelId 鏌ヨ妯″瀷id
+     * @return
+     */
+    List<PointDataVO> listEnergyIndexByModelId(String modelId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/IModelNodeService.java b/zhitan-system/src/main/java/com/zhitan/model/service/IModelNodeService.java
new file mode 100644
index 0000000..fe47140
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/IModelNodeService.java
@@ -0,0 +1,159 @@
+package com.zhitan.model.service;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.basicdata.domain.MeterImplement;
+import com.zhitan.basicdata.domain.SysEnergy;
+import com.zhitan.basicdata.domain.SysProduct;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.domain.ModelNode;
+import com.zhitan.model.domain.TreeObject;
+import com.zhitan.model.domain.vo.ModelNodeIndexInfor;
+
+import java.util.List;
+
+/**
+ * 妯″瀷鑺傜偣Service鎺ュ彛
+ *
+ * @author fanxinfu
+ * @date 2020-02-10
+ */
+public interface IModelNodeService {
+  /**
+   * 鏌ヨ妯″瀷鑺傜偣
+   *
+   * @param nodeId 妯″瀷鑺傜偣ID
+   * @return 妯″瀷鑺傜偣
+   */
+  ModelNode selectModelNodeById(String nodeId);
+
+  /**
+   * 鏌ヨ妯″瀷鑺傜偣鍒楄〃
+   *
+   * @param modelNode 妯″瀷鑺傜偣
+   * @return 妯″瀷鑺傜偣闆嗗悎
+   */
+  List<ModelNode> selectModelNodeList(ModelNode modelNode);
+
+  /**
+   * 鏂板妯″瀷鑺傜偣
+   *
+   * @param modelNode 妯″瀷鑺傜偣
+   * @return 缁撴灉
+   */
+  int insertModelNode(ModelNode modelNode);
+
+  /**
+   * 淇敼妯″瀷鑺傜偣
+   *
+   * @param modelNode 妯″瀷鑺傜偣
+   * @return 缁撴灉
+   */
+  int updateModelNode(ModelNode modelNode);
+
+  /**
+   * 鎵归噺鍒犻櫎妯″瀷鑺傜偣
+   *
+   * @param nodeIds 闇�瑕佸垹闄ょ殑妯″瀷鑺傜偣ID
+   * @return 缁撴灉
+   */
+  int deleteModelNodeByIds(String[] nodeIds);
+
+  /**
+   * 鍒犻櫎妯″瀷鑺傜偣淇℃伅
+   *
+   * @param nodeId 妯″瀷鑺傜偣ID
+   * @return 缁撴灉
+   */
+  int deleteModelNodeById(String nodeId);
+
+  List<ModelNode> getModelNodeByModelCode(String modelCode);
+
+  List<TreeObject> buildModelNodeTree(List<ModelNode> list);
+
+  void updateOrder(String nodeId, String parentId, String[] children);
+
+  boolean modelNodeHasExist(String code, String modelCode);
+
+  boolean modelNodeHasExist(ModelNode modelNode);
+
+  boolean hasEnergyIndex(String nodeId);
+
+  void setDevice(String nodeId, String[] deviceIds);
+
+  List<MeterImplement> getSettingDevice(String nodeId);
+
+  List<EnergyIndex> getSettingIndex(String nodeId);
+
+  List<EnergyIndex> getSettingIndexByWhere(String nodeId,String indexName);
+
+  void delDevice(String nodeId, String[] deviceIds);
+
+  List<SysEnergy> getSettingEnergy(String nodeId);
+
+  void setEnergy(String nodeId, Integer[] energyIds);
+
+  void delEnergy(String nodeId, Integer[] energyIds);
+
+  List<SysProduct> getSettingProduct(String nodeId);
+
+  void setProduct(String nodeId, Integer[] productIds);
+
+  void delProduct(String nodeId, Integer[] productIds);
+
+  void setIndex(String nodeId, String indexType, String[] indexIds);
+
+  void delIndex(String nodeId, String[] indexIds);
+
+  Page<EnergyIndex> getSettingIndex(String indexType, String nodeId, String code,
+                                    String name, Long pageNum, Long pageSize);
+
+  List<ModelNode> getModelNodeByNodeCodes(List<String> nodeCodes);
+
+  List<ModelNode> getModelNodeByModelCodeWithAuth(String modelCode, Long userId);
+
+  /**
+   * 鏍规嵁nodeCode鑾峰彇瀵瑰簲鐐逛綅淇℃伅
+   *
+   * @param nodeCode
+   * @return
+   */
+  List<String> listIndexIdsByModelCode(String nodeCode);
+
+  /**
+   * 鏍规嵁nodeCode鏌ヨ妯″瀷鑺傜偣涓庡瓙鐐逛綅id涔嬮棿鐨勫叧绯讳俊鎭�
+   *
+   * @param code
+   * @return
+   */
+  List<ModelNodeIndexInfor> getModelNodeIndexIdRelationInforByCode(String code);
+
+  /**
+   * 鏍规嵁nodeId鏌ヨ瀵瑰簲璇︾粏淇℃伅
+   *
+   * @param nodeId
+   * @return
+   */
+  List<ModelNodeIndexInfor> getModelNodeIndexIdRelationInforByNodeId(String nodeId);
+
+  /**
+   * 鏍规嵁鐖秈d鏌ヨ璇︾粏淇℃伅
+   *
+   * @param parentId
+   * @return
+   */
+  List<ModelNodeIndexInfor> listModelNodeIndexIdRelationInforByParentId(String parentId);
+
+  /**
+   * 鏍规嵁code鏌ヨ鐖剁骇淇℃伅
+   *
+   * @param indexCode
+   * @return
+   */
+  ModelNode getModelNodeByModelCodeByIndexCode(String indexCode);
+
+  Page<EnergyIndex> getIndexByMeterImplement(String nodeId,String code,
+                                             String name,Long pageNum, Long pageSize);
+
+  List<MeterImplement> getSettingDeviceIndex(String nodeId,String energyType);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/IndexFormulaService.java b/zhitan-system/src/main/java/com/zhitan/model/service/IndexFormulaService.java
new file mode 100644
index 0000000..90bb134
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/IndexFormulaService.java
@@ -0,0 +1,11 @@
+package com.zhitan.model.service;
+
+
+import com.zhitan.model.domain.IndexFormula;
+
+public interface IndexFormulaService {
+
+  void saveIndexFormula(IndexFormula indexFormula);
+
+  IndexFormula getIndexFormula(String indexId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/impl/CalcFunctionServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/model/service/impl/CalcFunctionServiceImpl.java
new file mode 100644
index 0000000..f18767e
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/impl/CalcFunctionServiceImpl.java
@@ -0,0 +1,94 @@
+package com.zhitan.model.service.impl;
+
+import com.zhitan.model.domain.CalcFunction;
+import com.zhitan.model.mapper.CalcFunctionMapper;
+import com.zhitan.model.service.ICalcFunctionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 璁$畻鍑芥暟Service涓氬姟灞傚鐞�
+ * 
+ * @author fanxinfu
+ * @date 2020-03-10
+ */
+@Service
+public class CalcFunctionServiceImpl implements ICalcFunctionService 
+{
+    @Autowired
+    private CalcFunctionMapper calcFunctionMapper;
+
+    /**
+     * 鏌ヨ璁$畻鍑芥暟
+     * 
+     * @param id 璁$畻鍑芥暟ID
+     * @return 璁$畻鍑芥暟
+     */
+    @Override
+    public CalcFunction selectCalcFunctionById(String id)
+    {
+        return calcFunctionMapper.selectCalcFunctionById(id);
+    }
+
+    /**
+     * 鏌ヨ璁$畻鍑芥暟鍒楄〃
+     * 
+     * @param calcFunction 璁$畻鍑芥暟
+     * @return 璁$畻鍑芥暟
+     */
+    @Override
+    public List<CalcFunction> selectCalcFunctionList(CalcFunction calcFunction)
+    {
+        return calcFunctionMapper.selectCalcFunctionList(calcFunction);
+    }
+
+    /**
+     * 鏂板璁$畻鍑芥暟
+     * 
+     * @param calcFunction 璁$畻鍑芥暟
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertCalcFunction(CalcFunction calcFunction)
+    {
+        return calcFunctionMapper.insertCalcFunction(calcFunction);
+    }
+
+    /**
+     * 淇敼璁$畻鍑芥暟
+     * 
+     * @param calcFunction 璁$畻鍑芥暟
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateCalcFunction(CalcFunction calcFunction)
+    {
+        return calcFunctionMapper.updateCalcFunction(calcFunction);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎璁$畻鍑芥暟
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑璁$畻鍑芥暟ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteCalcFunctionByIds(String[] ids)
+    {
+        return calcFunctionMapper.deleteCalcFunctionByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎璁$畻鍑芥暟淇℃伅
+     * 
+     * @param id 璁$畻鍑芥暟ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteCalcFunctionById(String id)
+    {
+        return calcFunctionMapper.deleteCalcFunctionById(id);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/impl/DaqTemplateServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/model/service/impl/DaqTemplateServiceImpl.java
new file mode 100644
index 0000000..c1d84f2
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/impl/DaqTemplateServiceImpl.java
@@ -0,0 +1,165 @@
+package com.zhitan.model.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.core.redis.RedisCache;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.model.domain.DaqTemplate;
+import com.zhitan.model.mapper.DaqTemplateMapper;
+import com.zhitan.model.service.IDaqTemplateService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+/**
+ * 閲囬泦鍙傛暟妯℃澘Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2020-02-08
+ */
+@Service
+public class DaqTemplateServiceImpl implements IDaqTemplateService {
+    @Resource
+    private RedisCache cache;
+    @Autowired
+    private DaqTemplateMapper daqTemplateMapper;
+
+
+    /**
+     * 鏌ヨ閲囬泦鍙傛暟妯℃澘
+     *
+     * @param id 閲囬泦鍙傛暟妯℃澘ID
+     * @return 閲囬泦鍙傛暟妯℃澘
+     */
+    @Override
+    public DaqTemplate selectDaqTemplateById(String id) {
+        return daqTemplateMapper.selectDaqTemplateById(id);
+    }
+
+    /**
+     * 鏌ヨ閲囬泦鍙傛暟妯℃澘鍒楄〃
+     *
+     * @param daqTemplate 閲囬泦鍙傛暟妯℃澘
+     * @return 閲囬泦鍙傛暟妯℃澘
+     */
+    @Override
+    public List<DaqTemplate> selectDaqTemplateList(DaqTemplate daqTemplate) {
+        return daqTemplateMapper.selectDaqTemplateList(daqTemplate);
+    }
+
+    /**
+     * 鏂板閲囬泦鍙傛暟妯℃澘
+     *
+     * @param daqTemplate 閲囬泦鍙傛暟妯℃澘
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertDaqTemplate(DaqTemplate daqTemplate) {
+        return daqTemplateMapper.insertDaqTemplate(daqTemplate);
+    }
+
+    /**
+     * 淇敼閲囬泦鍙傛暟妯℃澘
+     *
+     * @param daqTemplate 閲囬泦鍙傛暟妯℃澘
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateDaqTemplate(DaqTemplate daqTemplate) {
+        return daqTemplateMapper.updateDaqTemplate(daqTemplate);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎閲囬泦鍙傛暟妯℃澘
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑閲囬泦鍙傛暟妯℃澘ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteDaqTemplateByIds(String[] ids) {
+        return daqTemplateMapper.deleteDaqTemplateByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎閲囬泦鍙傛暟妯℃澘淇℃伅
+     *
+     * @param id 閲囬泦鍙傛暟妯℃澘ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteDaqTemplateById(String id) {
+        return daqTemplateMapper.deleteDaqTemplateById(id);
+    }
+
+    @Override
+    public boolean dapHasExist(String code, String deviceType) {
+        int count = daqTemplateMapper.dapHasExist(code, deviceType);
+        return count > 0;
+    }
+
+    @Override
+    public boolean dapHasExist(DaqTemplate daqTemplate) {
+        int count = daqTemplateMapper.dapHasExistWhenUpdate(daqTemplate.getId(), daqTemplate.getCode(), daqTemplate.getDeviceType());
+        return count > 0;
+    }
+
+    /**
+     * 鏌ヨ鎸囨爣妯℃澘
+     *
+     * @return 缁撴灉
+     */
+    @Override
+    public List<DaqTemplate> listTemplate() {
+        Object cacheObject = cache.getCacheObject(Constants.DAQ_TEMPLATE_KEY);
+        if (ObjectUtils.isNotEmpty(cacheObject)) {
+            return JSONObject.parseArray(cacheObject.toString(), DaqTemplate.class);
+        }
+
+        List<DaqTemplate> daqTemplates = daqTemplateMapper.listTemplate();
+        if (CollectionUtils.isEmpty(daqTemplates)) {
+            return Collections.emptyList();
+        }
+
+        String jsonString = JSONObject.toJSONString(daqTemplates);
+        cache.setCacheObject(Constants.DAQ_TEMPLATE_KEY, jsonString, 6, TimeUnit.HOURS);
+        return daqTemplates;
+    }
+
+    /**
+     * 鏌ヨ鎸囨爣妯℃澘map
+     *
+     * @return 缁撴灉
+     */
+    @Override
+    public Map<String, List<DaqTemplate>> listTemplateMap() {
+        Map<String, List<DaqTemplate>> map = new HashMap<>();
+        List<DaqTemplate> daqTemplates = this.listTemplate();
+
+        if (CollectionUtils.isNotEmpty(daqTemplates)) {
+            return daqTemplates.stream().collect(Collectors.groupingBy(DaqTemplate::getCode));
+        }
+        return map;
+    }
+
+    @Override
+    public Page<DaqTemplate> selectDaqTemplatePage(DaqTemplate daqTemplate, Long pageNum, Long pageSize) {
+        LambdaQueryWrapper<DaqTemplate> wrapper = new LambdaQueryWrapper<>();
+        wrapper.like(StringUtils.isNotEmpty(daqTemplate.getCode()),DaqTemplate::getCode,daqTemplate.getCode());
+        wrapper.like(StringUtils.isNotEmpty(daqTemplate.getName()),DaqTemplate::getName,daqTemplate.getName());
+        wrapper.eq(StringUtils.isNotEmpty(daqTemplate.getDeviceType()),DaqTemplate::getDeviceType,daqTemplate.getDeviceType());
+        wrapper.orderByDesc(DaqTemplate::getCreateTime);
+        Page<DaqTemplate> page = daqTemplateMapper.selectPage(new Page<DaqTemplate>(pageNum, pageSize), wrapper);
+        return page;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java
new file mode 100644
index 0000000..de563bb
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java
@@ -0,0 +1,327 @@
+package com.zhitan.model.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.basicdata.domain.MeterImplement;
+import com.zhitan.basicdata.services.IMeterImplementService;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.enums.IndexType;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.model.domain.DaqTemplate;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.domain.EnergyIndexQuery;
+import com.zhitan.model.domain.ModelNode;
+import com.zhitan.model.mapper.EnergyIndexMapper;
+import com.zhitan.model.mapper.ModelNodeMapper;
+import com.zhitan.model.service.IDaqTemplateService;
+import com.zhitan.model.service.IEnergyIndexService;
+import com.zhitan.model.service.IModelNodeService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
+
+/**
+ * 鎸囨爣淇℃伅Service涓氬姟灞傚鐞�
+ *
+ * @author fanxinfu
+ * @date 2020-02-14
+ */
+@Service
+public class EnergyIndexServiceImpl implements IEnergyIndexService {
+
+  @Autowired
+  private EnergyIndexMapper energyIndexMapper;
+  @Autowired
+  private IDaqTemplateService daqTemplateService;
+  @Autowired
+  private IMeterImplementService meterImplementService;
+  @Autowired
+  private IModelNodeService modelNodeService;
+
+  @Autowired
+  private ModelNodeMapper modelNodeMapper;
+
+  @Override
+  public EnergyIndex getiEnergyIndexByCode(String code) {
+    return energyIndexMapper.getiEnergyIndexByCode(code);
+  }
+
+  @Override
+  public List<EnergyIndex> listIndexByMeterIds(String nodeId, List<String> meterId) {
+    return energyIndexMapper.listIndexByMeterIds(nodeId,meterId);
+  }
+
+  /**
+   * 鏌ヨ鎸囨爣淇℃伅
+   *
+   * @param indexId 鎸囨爣淇℃伅ID
+   * @return 鎸囨爣淇℃伅
+   */
+  @Override
+  public EnergyIndex selectEnergyIndexById(String indexId) {
+    return energyIndexMapper.selectEnergyIndexById(indexId);
+  }
+
+  @Override
+  public List<EnergyIndex> selectEnergyIndexByIds(List<String> indexId) {
+    if (CollectionUtils.isEmpty(indexId)) {
+      return Collections.emptyList();
+    }
+    return energyIndexMapper.selectEnergyIndexByIds(indexId);
+  }
+
+  @Override
+  public List<EnergyIndex> selectEnergyIndexList(EnergyIndex energyIndex) {
+    return energyIndexMapper.selectEnergyIndexList(energyIndex);
+  }
+
+  /**
+   * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
+   *
+   * @param energyIndex 鎸囨爣淇℃伅
+   * @return 鎸囨爣淇℃伅
+   */
+  @Override
+  public List<EnergyIndex> selectEnergyIndexList(EnergyIndexQuery query) {
+    return energyIndexMapper.selectEnergyIndex(query);
+  }
+
+  /**
+   * 鏂板鎸囨爣淇℃伅
+   *
+   * @param nodeId
+   * @param energyIndex 鎸囨爣淇℃伅
+   * @return 缁撴灉
+   */
+  @Override
+  public int insertEnergyIndex(String nodeId, EnergyIndex energyIndex) {
+    energyIndex.setNodeId(nodeId);
+    energyIndexMapper.insertEnergyIndex( energyIndex);
+    return energyIndexMapper.insertNodeIndex(nodeId,energyIndex.getIndexId());
+  }
+
+  /**
+   * 淇敼鎸囨爣淇℃伅
+   *
+   * @param energyIndex 鎸囨爣淇℃伅
+   * @return 缁撴灉
+   */
+  @Override
+  public int updateEnergyIndex(EnergyIndex energyIndex) {
+    return energyIndexMapper.updateEnergyIndex(energyIndex);
+  }
+
+  /**
+   * 鎵归噺鍒犻櫎鎸囨爣淇℃伅
+   *
+   * @param nodeId
+   * @param indexIds 闇�瑕佸垹闄ょ殑鎸囨爣淇℃伅ID
+   * @return 缁撴灉
+   */
+  @Override
+  public int deleteEnergyIndexByIds(String nodeId, String[] indexIds) {
+    return energyIndexMapper.deleteEnergyIndexByIds(nodeId, indexIds);
+  }
+
+  @Override
+  public boolean energyIndexHasExist(String code) {
+    int count = energyIndexMapper.energyIndexHasExist(code);
+    return count > 0;
+  }
+
+  @Override
+  public boolean energyIndexHasExist(String indexId, String code) {
+    int count = energyIndexMapper.energyIndexHasExistWhenUpdate(indexId, code);
+    return count > 0;
+  }
+
+  @Override
+  public AjaxResult addMeterIndex(String meterId) {
+    MeterImplement meterImplement = meterImplementService.selectMeterImplementById(meterId);
+    if (meterImplement == null) {
+      return AjaxResult.error("鎵句笉鍒板搴旂殑璁¢噺鍣ㄥ叿锛�");
+    }
+
+    DaqTemplate query = new DaqTemplate();
+    query.setDeviceType(meterImplement.getMeterType());
+    List<DaqTemplate> daqTemplates = daqTemplateService.selectDaqTemplateList(query);
+    if (daqTemplates.isEmpty()) {
+      return AjaxResult.error("璁¢噺鍣ㄥ叿鎵�灞炵殑绫诲瀷娌℃湁鎵惧埌瀵瑰簲鐨勬ā鏉匡紒");
+    }
+
+    List<EnergyIndex> energyIndices = new ArrayList<>();
+    daqTemplates.forEach(daqTemplate -> {
+      EnergyIndex energyIndex = new EnergyIndex();
+      energyIndex.setIndexId(UUID.randomUUID().toString());
+      energyIndex.setCode(meterImplement.getCode() + "_" + daqTemplate.getCode());
+      energyIndex.setName(daqTemplate.getName());
+      energyIndex.setUnitId(daqTemplate.getUnit());
+      energyIndex.setIndexType(IndexType.COLLECT);
+      energyIndex.setMeterId(meterId);
+      energyIndices.add(energyIndex);
+    });
+
+    energyIndexMapper.deleteIndexByMeterId(meterId);
+    energyIndexMapper.insertEnergyIndices(energyIndices);
+    return AjaxResult.success();
+  }
+
+  @Override
+  public List<EnergyIndex> getMeterIndex(String meterId) {
+    return energyIndexMapper.getMeterIndex(meterId);
+  }
+
+  @Override
+  public boolean modelHasConfig(String modelCode) {
+    int count = energyIndexMapper.modelHasConfig(modelCode);
+    return count > 0;
+  }
+
+  @Override
+  public List<EnergyIndex> selectCollectIndex(String deviceId) {
+    return energyIndexMapper.selectCollectIndex(deviceId);
+  }
+
+  @Override
+  public List<EnergyIndex> getEnergyIndexByIds(List<String> indexIds) {
+    return energyIndexMapper.getEnergyIndexByIds(indexIds);
+  }
+
+  @Override
+  public List<EnergyIndex> getEnergyIndexByCodes(List<String> indexCodes) {
+    if (indexCodes.isEmpty()) {
+      return new ArrayList<>();
+    }
+
+    return energyIndexMapper.getEnergyIndexByCodes(indexCodes);
+  }
+
+  @Override
+  public List<EnergyIndex> getIndexByNodeAndChildrenNode(String nodeId) {
+    return energyIndexMapper.getIndexByNodeAndChildrenNode(nodeId);
+  }
+
+  @Override
+  public List<EnergyIndex> searchIndexByNodeAndChildrenNode(String nodeId, String filter) {
+    return energyIndexMapper.searchIndexByNodeAndChildrenNode(nodeId, filter);
+  }
+
+  @Override
+  public void removeNodeIndex(String nodeId, List<String> removeLink) {
+    energyIndexMapper.removeNodeIndex(nodeId, removeLink);
+  }
+
+  @Override
+  public AjaxResult importEnergyIndex(List<EnergyIndex> energyIndexList, boolean updateSupport) {
+    List<String> codes = energyIndexList.stream().map(EnergyIndex::getCode)
+        .collect(Collectors.toList());
+    List<String> nodeCodes = energyIndexList.stream().map(EnergyIndex::getNodeId)
+        .collect(Collectors.toList());
+    List<EnergyIndex> indexList = energyIndexMapper.getEnergyIndexByCodes(codes);
+    List<ModelNode> modelNodes = modelNodeService.getModelNodeByNodeCodes(nodeCodes);
+    Map<String, String> nodeCodeToId = modelNodes.stream()
+        .collect(Collectors.toMap(ModelNode::getCode, ModelNode::getNodeId));
+    Set<String> cacheIndexCodes = indexList.stream().map(EnergyIndex::getCode)
+        .collect(Collectors.toSet());
+
+    List<EnergyIndex> insertData = new ArrayList<>();
+    List<EnergyIndex> updateData = new ArrayList<>();
+    List<String> errorNodeCode = new ArrayList<>();
+    List<String> insertIndexCode = new ArrayList<>();
+    AtomicBoolean existDuplicateCode = new AtomicBoolean(false);
+    energyIndexList.forEach(energyIndex -> {
+      if (cacheIndexCodes.contains(energyIndex.getCode())) {
+        updateData.add(energyIndex);
+      } else {
+        String nodeCode = energyIndex.getNodeId();
+        if (nodeCodeToId.containsKey(nodeCode)) {
+          if (!insertIndexCode.contains(energyIndex.getCode())) {
+            insertIndexCode.add(energyIndex.getCode());
+            energyIndex.setIndexId(UUID.randomUUID().toString());
+            energyIndex.setNodeId(nodeCodeToId.get(nodeCode));
+            insertData.add(energyIndex);
+          } else {
+            existDuplicateCode.set(true);
+          }
+        } else if (!errorNodeCode.contains(nodeCode)) {
+          errorNodeCode.add(nodeCode);
+        }
+      }
+    });
+
+    if (updateSupport && !updateData.isEmpty()) {
+      updateData.forEach(energyIndexMapper::updateEnergyIndex);
+    }
+
+    if (!insertData.isEmpty()) {
+      energyIndexMapper.saveEnergyIndex(insertData);
+    }
+
+    String errMsg = "";
+    if (existDuplicateCode.get()) {
+      errMsg += "瀛樺湪閲嶅鐨勬寚鏍囩紪鐮侊紝宸茶嚜鍔ㄨ繃婊わ紒";
+    }
+
+    if (!errorNodeCode.isEmpty()) {
+      errMsg += String.join(",", errorNodeCode) + "娌℃湁鎵惧埌瀵瑰簲鐨勮妭鐐规暟鎹紝鍥犳鍏朵笅鐨勬墍鏈夋寚鏍囧鍏ュけ璐ワ紒";
+    }
+
+    if (StringUtils.isNotBlank(errMsg)) {
+      return AjaxResult.error(errMsg);
+    }
+    return AjaxResult.success("瀵煎叆鎴愬姛锛�");
+  }
+
+  @Override
+  public List<EnergyIndex> getEnergyIndexMeterByCodes(List<String> indexCodes) {
+    if (indexCodes.isEmpty()) {
+      return new ArrayList<>();
+    }
+
+    return energyIndexMapper.getEnergyIndexMeterByCodes(indexCodes);
+  }
+
+  /**
+   * @description: hmj 鍒嗛〉鏌ヨ
+   * @param query
+   * @param pageNum
+   * @param pageSize
+   * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.zhitan.model.domain.EnergyIndex>
+   * @author: hmj
+   * @date: 2024/10/11 23:56
+   */
+  @Override
+  public Page<EnergyIndex> selectEnergyIndexPage(EnergyIndexQuery query, Long pageNum, Long pageSize) {
+    return  energyIndexMapper.selectEnergyIndexPage(new Page<>(pageNum,pageSize),query);
+  }
+
+  @Override
+  public Page<EnergyIndex> getMeterIndexList(List<String> meterIndexIds,String code,
+                                             String name,Long pageNum, Long pageSize) {
+    LambdaQueryWrapper<EnergyIndex> queryWrapper = new LambdaQueryWrapper<>();
+    queryWrapper.in(EnergyIndex::getMeterId,meterIndexIds);
+    queryWrapper.like(StringUtils.isNotEmpty(code),EnergyIndex::getCode,code);
+    queryWrapper.like(StringUtils.isNotEmpty(name),EnergyIndex::getName,name);
+    return energyIndexMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper);
+  }
+
+  @Override
+  public List<EnergyIndex> getIndexByCode(String code, String nodeId) {
+    final List<MeterImplement> settingDevice = modelNodeMapper.getSettingDevice(nodeId);
+    if(CollectionUtils.isEmpty(settingDevice)){
+       return new ArrayList<>();
+    }
+    final List<String> deviceIds = settingDevice.stream().map(MeterImplement::getId).collect(Collectors.toList());
+
+    LambdaQueryWrapper<EnergyIndex> queryWrapper = new LambdaQueryWrapper<>();
+    if(StringUtils.isNotEmpty(code)) {
+      queryWrapper.like(EnergyIndex::getCode, code).or().like(EnergyIndex::getName, code);
+    }
+    queryWrapper.in(EnergyIndex::getMeterId,deviceIds);
+    return energyIndexMapper.selectList(queryWrapper);
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/impl/IndexFormulaServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/model/service/impl/IndexFormulaServiceImpl.java
new file mode 100644
index 0000000..b0e6925
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/impl/IndexFormulaServiceImpl.java
@@ -0,0 +1,56 @@
+package com.zhitan.model.service.impl;
+
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.uuid.UUID;
+import com.zhitan.model.domain.IndexFormula;
+import com.zhitan.model.domain.IndexFormulaParam;
+import com.zhitan.model.mapper.IndexFormulaMapper;
+import com.zhitan.model.service.IndexFormulaService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author fanxinfu
+ */
+@Service
+public class IndexFormulaServiceImpl implements IndexFormulaService {
+
+  @Autowired
+  private IndexFormulaMapper indexFormulaMapper;
+
+  @Override
+  public void saveIndexFormula(IndexFormula indexFormula) {
+    if (StringUtils.isEmpty(indexFormula.getId())) {
+      indexFormula.setId(UUID.fastUUID().toString());
+      indexFormulaMapper.insertIndexFormula(indexFormula);
+    } else {
+      indexFormulaMapper.updateIndexFormula(indexFormula);
+    }
+
+    indexFormula.getIndexFormulaParams().forEach(param -> {
+      param.setId(UUID.fastUUID().toString());
+      param.setFormulaId(indexFormula.getId());
+      param.setIndexId(indexFormula.getIndexId());
+    });
+    indexFormulaMapper
+        .saveIndexFormulaParam(indexFormula.getIndexId(), indexFormula.getIndexFormulaParams());
+  }
+
+  @Override
+  public IndexFormula getIndexFormula(String indexId) {
+    IndexFormula indexFormula = indexFormulaMapper.getFormula(indexId);
+    if (indexFormula != null) {
+      List<IndexFormulaParam> indexFormulaParams = indexFormulaMapper.getFormulaParam(indexId);
+      if (!indexFormulaParams.isEmpty()) {
+        indexFormula.setIndexFormulaParams(indexFormulaParams);
+      }
+    } else {
+      indexFormula = new IndexFormula();
+    }
+
+    return indexFormula;
+  }
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/impl/IndexStorageServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/model/service/impl/IndexStorageServiceImpl.java
new file mode 100644
index 0000000..07ff1b3
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/impl/IndexStorageServiceImpl.java
@@ -0,0 +1,100 @@
+package com.zhitan.model.service.impl;
+
+import com.zhitan.common.enums.CalcType;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.model.domain.*;
+import com.zhitan.model.mapper.IndexStorageMapper;
+import com.zhitan.model.service.IEnergyIndexService;
+import com.zhitan.model.service.IIndexStorageService;
+import com.zhitan.model.service.IndexFormulaService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+import static org.apache.commons.lang3.StringUtils.equalsIgnoreCase;
+
+@Service
+public class IndexStorageServiceImpl implements IIndexStorageService {
+
+  @Autowired
+  private IndexStorageMapper indexStorageMapper;
+  @Autowired
+  private IndexFormulaService indexFormulaService;
+  @Autowired
+  private IEnergyIndexService energyIndexService;
+
+  @Override
+  public void saveIndexStorage(String indexId, List<IndexStorage> indexStorage) {
+    indexStorage.forEach(storage -> {
+      storage.setIndexId(indexId);
+      if (StringUtils.isEmpty(storage.getId())) {
+        storage.setId(UUID.randomUUID().toString());
+        indexStorageMapper.insertIndexStorage(storage);
+      } else {
+        indexStorageMapper.updateIndexStorage(storage);
+      }
+
+      indexStorageMapper.saveParams(storage.getId(), storage.getParamIndex());
+    });
+  }
+
+  @Override
+  @Transactional(rollbackFor = Exception.class)
+  public void saveFormulaAndStorage(IndexFormula indexFormula, List<IndexStorage> indexStorage,
+                                    String indexId) {
+    indexFormulaService.saveIndexFormula(indexFormula);
+    String calcText = indexFormula.getFormulaText();
+    List<String> paramNames = new ArrayList<>();
+    for (IndexFormulaParam param : indexFormula.getIndexFormulaParams()) {
+        calcText = calcText
+                .replace("(" + param.getParamName() + ")", "(" + String.format("'%s'", param.getParamValue()) + ")");
+        paramNames.add(param.getParamValue());
+    }
+
+    List<EnergyIndex> energyIndexList = energyIndexService.getEnergyIndexByCodes(paramNames);
+    List<String> paramIndex = energyIndexList.stream()
+        .map(EnergyIndex::getIndexId)
+        .collect(Collectors.toList());
+    for (IndexStorage storage : indexStorage) {
+      storage.setCalcText(calcText);
+      storage.setIsPvCalc(indexFormula.getIsPvCalc());
+      storage.getParamIndex().addAll(paramIndex);
+    }
+
+    saveIndexStorage(indexId, indexStorage);
+  }
+
+  @Override
+  public List<IndexStorage> getIndexStorage(String indexId) {
+    return indexStorageMapper.getIndexStorage(indexId);
+  }
+
+  @Override
+  public List<IndexStorage> getAllCalcIndexStorage() {
+    List<IndexStorage> indexStorageList = indexStorageMapper.getAllCalcIndexStorage(CalcType.CALC);
+    List<IndexStorageParam> params = indexStorageMapper.getAllParameter();
+    indexStorageList.forEach(storage -> {
+      List<String> indexIds = params.stream()
+          .filter(f -> equalsIgnoreCase(f.getStorageId(), storage.getId()))
+          .map(IndexStorageParam::getIndexId)
+          .collect(Collectors.toList());
+      if (!indexIds.isEmpty()) {
+        storage.getParamIndex().addAll(indexIds);
+      }
+    });
+
+    return indexStorageList;
+  }
+
+  @Override
+  public IndexStorage getIndexStorage(String indexId, TimeType timeType) {
+    return indexStorageMapper.getWithTimetype(indexId, timeType);
+  }
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/impl/ModelInfoServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/model/service/impl/ModelInfoServiceImpl.java
new file mode 100644
index 0000000..c896514
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/impl/ModelInfoServiceImpl.java
@@ -0,0 +1,158 @@
+package com.zhitan.model.service.impl;
+
+import com.zhitan.basicdata.domain.MeterImplement;
+import com.zhitan.basicdata.services.IMeterImplementService;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.domain.ModelInfo;
+import com.zhitan.model.domain.vo.ModelNodeIndexInfor;
+import com.zhitan.model.domain.vo.PointDataVO;
+import com.zhitan.model.mapper.ModelInfoMapper;
+import com.zhitan.model.service.IEnergyIndexService;
+import com.zhitan.model.service.IModelInfoService;
+import com.zhitan.model.service.IModelNodeService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+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.stream.Collectors;
+
+/**
+ * 妯″瀷Service涓氬姟灞傚鐞�
+ *
+ * @author fanxinfu
+ * @date 2020-02-17
+ */
+@Service
+public class ModelInfoServiceImpl implements IModelInfoService {
+  @Autowired
+  private ModelInfoMapper modelInfoMapper;
+
+  @Autowired
+  private final IModelNodeService modelNodeService;
+
+  @Autowired
+  private final IEnergyIndexService energyIndexService;
+
+  @Autowired
+  private final IMeterImplementService meterImplementService;
+
+  public ModelInfoServiceImpl(IModelNodeService modelNodeService,
+                              IEnergyIndexService energyIndexService,
+                              IMeterImplementService meterImplementService) {
+    this.modelNodeService = modelNodeService;
+    this.energyIndexService = energyIndexService;
+    this.meterImplementService = meterImplementService;
+  }
+
+  /**
+   * 鏌ヨ妯″瀷
+   *
+   * @param modelCode 妯″瀷ID
+   * @return 妯″瀷
+   */
+  @Override
+  public ModelInfo selectModelInfoById(String modelCode) {
+    return modelInfoMapper.selectModelInfoById(modelCode);
+  }
+
+  /**
+   * 鏌ヨ妯″瀷鍒楄〃
+   *
+   * @param modelInfo 妯″瀷
+   * @return 妯″瀷
+   */
+  @Override
+  public List<ModelInfo> selectModelInfoList(ModelInfo modelInfo) {
+    return modelInfoMapper.selectModelInfoList(modelInfo);
+  }
+
+  /**
+   * 鏂板妯″瀷
+   *
+   * @param modelInfo 妯″瀷
+   * @return 缁撴灉
+   */
+  @Override
+  public int insertModelInfo(ModelInfo modelInfo) {
+    return modelInfoMapper.insertModelInfo(modelInfo);
+  }
+
+  /**
+   * 淇敼妯″瀷
+   *
+   * @param modelInfo 妯″瀷
+   * @return 缁撴灉
+   */
+  @Override
+  public int updateModelInfo(ModelInfo modelInfo) {
+    return modelInfoMapper.updateModelInfo(modelInfo);
+  }
+
+  /**
+   * 鎵归噺鍒犻櫎妯″瀷
+   *
+   * @param modelCode 闇�瑕佸垹闄ょ殑妯″瀷ID
+   * @return 缁撴灉
+   */
+  @Override
+  public int deleteModelInfoByCode(String modelCode) {
+    return modelInfoMapper.deleteModelInfoByCode(modelCode);
+  }
+
+  /**
+   * 鍒犻櫎妯″瀷淇℃伅
+   *
+   * @param modelCode 妯″瀷ID
+   * @return 缁撴灉
+   */
+  @Override
+  public int deleteModelInfoById(String modelCode) {
+    return modelInfoMapper.deleteModelInfoById(modelCode);
+  }
+
+  /**
+   * 鏍规嵁妯″瀷id鏌ヨ瀵瑰簲鐐逛綅淇℃伅
+   *
+   * @param modelId 鏌ヨ妯″瀷id
+   * @return
+   */
+  @Override
+  public List<PointDataVO> listEnergyIndexByModelId(String modelId) {
+    List<PointDataVO> voList = new ArrayList<>();
+    // 鏍规嵁id鏌ヨ涓嬬骇id涓巌ndexId
+    List<ModelNodeIndexInfor> inforList = modelNodeService.listModelNodeIndexIdRelationInforByParentId(modelId);
+    if (CollectionUtils.isEmpty(inforList)) {
+      List<ModelNodeIndexInfor> indexInforList = modelNodeService.getModelNodeIndexIdRelationInforByNodeId(modelId);
+      if (CollectionUtils.isEmpty(indexInforList)) {
+        return voList;
+      }
+      inforList.addAll(indexInforList);
+    }
+    // 鍘婚櫎鎵�鏈夌偣浣峣d淇℃伅
+    List<String> indexIds = inforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
+    List<EnergyIndex> energyIndexList = energyIndexService.getEnergyIndexByIds(indexIds);
+    // 鏍规嵁indexid鏌ヨ瀵瑰簲璁¢噺鍣ㄥ叿淇℃伅
+    List<String> meterIds = energyIndexList.stream().map(EnergyIndex::getMeterId).collect(Collectors.toList());
+    Map<String, List<MeterImplement>> meterImplementMap = meterImplementService.listMeterImplementByIds(meterIds).stream()
+            .filter(li -> StringUtils.isNotEmpty(li.getInstallactionLocation()))
+            .collect(Collectors.groupingBy(MeterImplement::getId));
+    for (EnergyIndex indexInfo : energyIndexList) {
+
+      PointDataVO pointData = new PointDataVO();
+      String indexName = indexInfo.getName();
+      List<MeterImplement> meterImplements = meterImplementMap.get(indexInfo.getMeterId());
+      if (CollectionUtils.isNotEmpty(meterImplements)) {
+        MeterImplement infor = meterImplements.get(0);
+        indexName = infor.getInstallactionLocation() + "_" + infor.getMeterName() + "_" + indexName;
+      }
+      pointData.setIndexName(indexName);
+      pointData.setIndexId(indexInfo.getIndexId());
+      voList.add(pointData);
+    }
+    return voList;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/impl/ModelNodeServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/model/service/impl/ModelNodeServiceImpl.java
new file mode 100644
index 0000000..f67f0a2
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/impl/ModelNodeServiceImpl.java
@@ -0,0 +1,359 @@
+package com.zhitan.model.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.basicdata.domain.MeterImplement;
+import com.zhitan.basicdata.domain.SysEnergy;
+import com.zhitan.basicdata.domain.SysProduct;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.domain.ModelNode;
+import com.zhitan.model.domain.TreeObject;
+import com.zhitan.model.domain.vo.ModelNodeIndexInfor;
+import com.zhitan.model.mapper.ModelNodeMapper;
+import com.zhitan.model.service.IEnergyIndexService;
+import com.zhitan.model.service.IModelNodeService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static org.apache.commons.lang3.StringUtils.equalsAnyIgnoreCase;
+import static org.apache.commons.lang3.StringUtils.isBlank;
+
+/**
+ * 妯″瀷鑺傜偣Service涓氬姟灞傚鐞�
+ *
+ * @author fanxinfu
+ * @date 2020-02-10
+ */
+@Service
+public class ModelNodeServiceImpl implements IModelNodeService {
+
+  @Autowired
+  private ModelNodeMapper modelNodeMapper;
+
+  @Autowired
+  private IEnergyIndexService energyIndexService;
+
+  /**
+   * 鏌ヨ妯″瀷鑺傜偣
+   *
+   * @param nodeId 妯″瀷鑺傜偣ID
+   * @return 妯″瀷鑺傜偣
+   */
+  @Override
+  public ModelNode selectModelNodeById(String nodeId) {
+    return modelNodeMapper.selectModelNodeById(nodeId);
+  }
+
+  /**
+   * 鏌ヨ妯″瀷鑺傜偣鍒楄〃
+   *
+   * @param modelNode 妯″瀷鑺傜偣
+   * @return 妯″瀷鑺傜偣
+   */
+  @Override
+  public List<ModelNode> selectModelNodeList(ModelNode modelNode) {
+    return modelNodeMapper.selectModelNodeList(modelNode);
+  }
+
+  /**
+   * 鏂板妯″瀷鑺傜偣
+   *
+   * @param modelNode 妯″瀷鑺傜偣
+   * @return 缁撴灉
+   */
+  @Override
+  public int insertModelNode(ModelNode modelNode) {
+    int maxOrder = modelNodeMapper.getMaxOrder(modelNode.getParentId());
+    modelNode.setOrderNum(maxOrder + 1);
+    return modelNodeMapper.insertModelNode(modelNode);
+  }
+
+  /**
+   * 淇敼妯″瀷鑺傜偣
+   *
+   * @param modelNode 妯″瀷鑺傜偣
+   * @return 缁撴灉
+   */
+  @Override
+  public int updateModelNode(ModelNode modelNode) {
+    return modelNodeMapper.updateModelNode(modelNode);
+  }
+
+  /**
+   * 鎵归噺鍒犻櫎妯″瀷鑺傜偣
+   *
+   * @param nodeIds 闇�瑕佸垹闄ょ殑妯″瀷鑺傜偣ID
+   * @return 缁撴灉
+   */
+  @Override
+  public int deleteModelNodeByIds(String[] nodeIds) {
+    return modelNodeMapper.deleteModelNodeByIds(nodeIds);
+  }
+
+  /**
+   * 鍒犻櫎妯″瀷鑺傜偣淇℃伅
+   *
+   * @param nodeId 妯″瀷鑺傜偣ID
+   * @return 缁撴灉
+   */
+  @Override
+  public int deleteModelNodeById(String nodeId) {
+    return modelNodeMapper.deleteModelNodeById(nodeId);
+  }
+
+  @Override
+  public List<ModelNode> getModelNodeByModelCode(String modelCode) {
+    return modelNodeMapper.getModelNodeByModelCode(modelCode);
+  }
+
+  @Override
+  public List<TreeObject> buildModelNodeTree(List<ModelNode> modelNodes) {
+    List<ModelNode> modelNodeTree = modelNodes.stream()
+        .filter(f -> isBlank(f.getParentId()))
+        .collect(Collectors.toList());
+    for (ModelNode modelNode : modelNodeTree) {
+      List<ModelNode> children = modelNodes.stream()
+          .filter(f -> equalsAnyIgnoreCase(f.getParentId(), modelNode.getNodeId()))
+          .collect(Collectors.toList());
+      buildTree(modelNode, children, modelNodes);
+    }
+
+    return modelNodeTree.stream().map(TreeObject::new).collect(Collectors.toList());
+  }
+
+  @Override
+  public void updateOrder(String nodeId, String parentId, String[] children) {
+    modelNodeMapper.updateModelNodeParent(nodeId, parentId);
+    Map<String, Integer> orders = new HashMap<>();
+    for (int i = 0; i < children.length; i++) {
+      orders.put(children[i], i);
+    }
+    modelNodeMapper.updateModelNodeOrder(orders);
+  }
+
+  @Override
+  public boolean modelNodeHasExist(String code, String modelCode) {
+    int count = modelNodeMapper.modelNodeHasExist(code, modelCode);
+    return count > 0;
+  }
+
+  @Override
+  public boolean modelNodeHasExist(ModelNode modelNode) {
+    int count = modelNodeMapper
+        .modelNodeHasExistWhenUpdate(modelNode.getNodeId(), modelNode.getCode(),
+            modelNode.getModelCode());
+    return count > 0;
+  }
+
+  @Override
+  public boolean hasEnergyIndex(String nodeId) {
+    EnergyIndex energyIndex = new EnergyIndex();
+    energyIndex.setNodeId(nodeId);
+    List<EnergyIndex> energyIndices = energyIndexService.selectEnergyIndexList(energyIndex);
+    return energyIndices.size() > 0;
+  }
+
+  @Override
+  public void setDevice(String nodeId, String[] deviceIds) {
+    modelNodeMapper.setDevice(nodeId, deviceIds);
+  }
+
+  @Override
+  public List<MeterImplement> getSettingDevice(String nodeId) {
+    return modelNodeMapper.getSettingDevice(nodeId);
+  }
+
+  @Override
+  public List<EnergyIndex> getSettingIndex(String nodeId) {
+    return modelNodeMapper.getSettingIndex(nodeId);
+  }
+
+  @Override
+  public List<EnergyIndex> getSettingIndexByWhere(String nodeId,String indexName) {
+    return modelNodeMapper.getSettingIndexByWhere(nodeId,indexName);
+  }
+
+  @Override
+  public void delDevice(String nodeId, String[] deviceIds) {
+    if (deviceIds.length == 0) {
+      return;
+    }
+
+    modelNodeMapper.delDevice(nodeId, deviceIds);
+  }
+
+  @Override
+  public List<SysEnergy> getSettingEnergy(String nodeId) {
+    return modelNodeMapper.getSettingEnergy(nodeId);
+  }
+
+  @Override
+  public void setEnergy(String nodeId, Integer[] energyIds) {
+    modelNodeMapper.setEnergy(nodeId, energyIds);
+  }
+
+  @Override
+  public void delEnergy(String nodeId, Integer[] energyIds) {
+    if (energyIds.length == 0) {
+      return;
+    }
+
+    modelNodeMapper.delEnergy(nodeId, energyIds);
+  }
+
+  @Override
+  public List<SysProduct> getSettingProduct(String nodeId) {
+    return modelNodeMapper.getSettingProduct(nodeId);
+  }
+
+  @Override
+  public void setProduct(String nodeId, Integer[] productIds) {
+    modelNodeMapper.setProduct(nodeId, productIds);
+  }
+
+  @Override
+  public void delProduct(String nodeId, Integer[] productIds) {
+    if (productIds.length == 0) {
+      return;
+    }
+
+    modelNodeMapper.delProduct(nodeId, productIds);
+  }
+
+  @Override
+  public void setIndex(String nodeId, String indexType, String[] indexIds) {
+    modelNodeMapper.delIndexNodeIdAndIndexType(nodeId,indexType);
+    modelNodeMapper.setIndexAndNodeId(nodeId,  indexIds);
+  }
+
+  @Override
+  public void delIndex(String nodeId, String[] indexIds) {
+    if (indexIds.length == 0) {
+      return;
+    }
+
+    modelNodeMapper.delIndex(nodeId, indexIds);
+  }
+
+  @Override
+  public Page<EnergyIndex> getSettingIndex(String indexType, String nodeId, String code,
+                                           String name, Long pageNum, Long pageSize) {
+    return modelNodeMapper.getSettingIndexByType(indexType, nodeId,
+            code,name,
+            new Page<>(pageNum,pageSize));
+  }
+
+  @Override
+  public List<ModelNode> getModelNodeByNodeCodes(List<String> nodeCodes) {
+    return modelNodeMapper.getModelNodeByNodeCodes(nodeCodes);
+  }
+
+  @Override
+  public List<ModelNode> getModelNodeByModelCodeWithAuth(String modelCode, Long userId) {
+    return modelNodeMapper.getModelNodeByModelCodeWithAuth(modelCode, String.valueOf(userId));
+  }
+
+  /**
+   * 鏍规嵁nodeCode鑾峰彇瀵瑰簲鐐逛綅淇℃伅
+   *
+   * @param nodeCode
+   * @return
+   */
+  @Override
+  public List<String> listIndexIdsByModelCode(String nodeCode) {
+    // 鏍规嵁code鑾峰彇modelNode淇℃伅
+    List<ModelNode> modelNodeList = getModelNodeByModelCode(nodeCode);
+    if (CollectionUtils.isEmpty(modelNodeList)) {
+      return Collections.emptyList();
+    }
+    List<String> nodeIds = modelNodeList.stream().map(ModelNode::getNodeId).collect(Collectors.toList());
+
+    return modelNodeMapper.listIndesxByCodeList(nodeIds);
+  }
+
+  /**
+   * 鏍规嵁nodeCode鏌ヨ妯″瀷鑺傜偣涓庣偣浣峣d涔嬮棿鐨勫叧绯讳俊鎭�
+   *
+   * @param code
+   * @return
+   */
+  @Override
+  public List<ModelNodeIndexInfor> getModelNodeIndexIdRelationInforByCode(String code) {
+    return modelNodeMapper.getModelNodeIndexIdRelationInforByCode(code);
+  }
+
+  /**
+   * 鏍规嵁nodeId鏌ヨ瀵瑰簲璇︾粏淇℃伅
+   *
+   * @param nodeId
+   * @return
+   */
+  @Override
+  public List<ModelNodeIndexInfor> getModelNodeIndexIdRelationInforByNodeId(String nodeId) {
+    return modelNodeMapper.getModelNodeIndexIdRelationInforByNodeId(nodeId);
+  }
+
+  /**
+   * 鏍规嵁鐖秈d鏌ヨ璇︾粏淇℃伅
+   *
+   * @param parentId
+   * @return
+   */
+  @Override
+  public List<ModelNodeIndexInfor> listModelNodeIndexIdRelationInforByParentId(String parentId) {
+    return modelNodeMapper.listModelNodeIndexIdRelationInforByParentId(parentId);
+  }
+
+  /**
+   * 鏍规嵁code鏌ヨ鐖剁骇淇℃伅
+   *
+   * @param indexCode
+   * @return
+   */
+  @Override
+  public ModelNode getModelNodeByModelCodeByIndexCode(String indexCode) {
+    return modelNodeMapper.getModelNodeByModelCodeByIndexCode(indexCode);
+  }
+
+  private void buildTree(ModelNode parent, List<ModelNode> children, List<ModelNode> modelNodes) {
+    parent.setChildren(children);
+
+    for (ModelNode modelNode : children) {
+      List<ModelNode> tmp = modelNodes.stream()
+              .filter(f -> equalsAnyIgnoreCase(f.getParentId(), modelNode.getNodeId()))
+              .collect(Collectors.toList());
+      if (!tmp.isEmpty()) {
+        buildTree(modelNode, tmp, modelNodes);
+      }
+    }
+  }
+
+  @Override
+  public Page<EnergyIndex> getIndexByMeterImplement(String nodeId, 
+                                                    String code,
+                                                    String name,
+                                                    Long pageNum, 
+                                                    Long pageSize) {
+
+    final List<MeterImplement> settingDevice = modelNodeMapper.getSettingDevice(nodeId);
+    if(CollectionUtils.isEmpty(settingDevice)){
+      return new Page<EnergyIndex>();
+    }
+    final List<String> meterImpIds = settingDevice.stream().map(MeterImplement::getId).collect(Collectors.toList());
+    final Page<EnergyIndex> energyIndexByIds = energyIndexService.getMeterIndexList(meterImpIds,code,name,pageNum,pageSize);
+    
+    return energyIndexByIds;
+  }
+
+  @Override
+  public List<MeterImplement> getSettingDeviceIndex(String nodeId, String energyType) {
+    return modelNodeMapper.getSettingDeviceIndex(nodeId,energyType);
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/ElectricityDataItem.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/ElectricityDataItem.java
new file mode 100644
index 0000000..f30adf7
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/ElectricityDataItem.java
@@ -0,0 +1,106 @@
+package com.zhitan.peakvalley.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhitan.common.annotation.Excel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 灏栧嘲骞宠胺鏁版嵁琛�
+ *
+ * @author sys
+ * @date 2024-08-27
+ */
+@Data
+public class ElectricityDataItem {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鐐逛綅id
+     */
+    @Excel(name = "鐐逛綅id")
+    private String indexId;
+
+    /**
+     * 鏃堕棿缂栧彿
+     */
+    @Excel(name = "鏃堕棿缂栧彿")
+    private String timeCode;
+
+    /**
+     * 鏃堕棿绫诲瀷
+     */
+    @Excel(name = "鏃堕棿绫诲瀷")
+    private String timeType;
+
+    /**
+     * 鐢ㄧ數绫诲瀷宄般�佸钩銆佽胺绛�
+     */
+    @Excel(name = "鐢ㄧ數绫诲瀷宄般�佸钩銆佽胺绛�")
+    private String electricityType;
+
+    /**
+     * 鎸囨爣缂栫爜锛屽啑浣欏瓧娈碉紝鍙互鐢� code 鏌ヨ
+     */
+    @Excel(name = "鎸囨爣缂栫爜锛屽啑浣欏瓧娈碉紝鍙互鐢� code 鏌ヨ")
+    private String indexCode;
+
+    /**
+     * 鏁版嵁鏃堕棿
+     */
+    @Excel(name = "鏁版嵁鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date dataTime;
+
+    /**
+     * 寮�濮嬫椂闂�
+     */
+    @Excel(name = "寮�濮嬫椂闂�", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date beginTime;
+
+    /**
+     * 缁撴潫鏃堕棿
+     */
+    @Excel(name = "缁撴潫鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date endTime;
+
+    /**
+     * 鐢ㄧ數閲�
+     */
+    @Excel(name = "鐢ㄧ數閲�")
+    private BigDecimal electricity;
+
+    /**
+     * 鐢佃垂
+     */
+    @Excel(name = "鐢佃垂")
+    private BigDecimal cost;
+
+    /**
+     * 鍗曚环
+     */
+    @Excel(name = "鍗曚环")
+    private BigDecimal price;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/ElectricityPrice.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/ElectricityPrice.java
new file mode 100644
index 0000000..58ac0cb
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/ElectricityPrice.java
@@ -0,0 +1,131 @@
+package com.zhitan.peakvalley.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 銆愯濉啓鍔熻兘鍚嶇О銆戝璞� electricity_price
+ *
+ * @author ZhiTan
+ * @date 2024-10-10
+ */
+@TableName("electricity_price")
+public class ElectricityPrice extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** 涓婚敭 */
+    private String id;
+
+    /** 鐖剁骇id */
+    @Excel(name = "鐖剁骇id")
+    @NotEmpty(message = "鐖剁骇id涓嶈兘涓虹┖")
+    private String parentId;
+
+    /** 鐢ㄧ數绫诲瀷锛堝皷銆佸嘲銆佸钩銆佽胺銆佹繁璋凤級 */
+    @Excel(name = "鐢ㄧ數绫诲瀷", readConverterExp = "灏栥�佸嘲銆佸钩銆佽胺銆佹繁璋�")
+    @NotEmpty(message = "鐢ㄧ數绫诲瀷涓嶈兘涓虹┖")
+    private String type;
+
+    /** 鏃舵寮�濮嬫椂闂� */
+    @JsonFormat(pattern = "HH:mm:ss")
+    @Excel(name = "鏃舵寮�濮嬫椂闂�", width = 30, dateFormat = "HH:mm:ss")
+    @NotNull(message = "鏃舵寮�濮嬫椂闂翠笉鑳戒负绌�")
+    private Date startTime;
+
+    /** 鏃舵缁撴潫鏃堕棿 */
+    @JsonFormat(pattern = "HH:mm:ss")
+    @Excel(name = "鏃舵缁撴潫鏃堕棿", width = 30, dateFormat = "HH:mm:ss")
+    @NotNull(message = "鏃舵缁撴潫鏃堕棿涓嶈兘涓虹┖")
+    private Date stopTime;
+
+    /** 鐢典环 */
+    @Excel(name = "鐢典环")
+    @NotEmpty(message = "鐢典环涓嶈兘涓虹┖")
+    private BigDecimal effecticityPrice;
+        
+    public void setId(String id)
+    {
+        this.id = id;
+    }
+
+    public String getId()
+    {
+        return id;
+    }
+        
+    public void setParentId(String parentId)
+    {
+        this.parentId = parentId;
+    }
+
+    public String getParentId()
+    {
+        return parentId;
+    }
+        
+    public void setType(String type)
+    {
+        this.type = type;
+    }
+
+    public String getType()
+    {
+        return type;
+    }
+        
+    public void setStartTime(Date startTime)
+    {
+        this.startTime = startTime;
+    }
+
+    public Date getStartTime()
+    {
+        return startTime;
+    }
+        
+    public void setStopTime(Date stopTime)
+    {
+        this.stopTime = stopTime;
+    }
+
+    public Date getStopTime()
+    {
+        return stopTime;
+    }
+        
+    public void setEffecticityPrice(BigDecimal effecticityPrice)
+    {
+        this.effecticityPrice = effecticityPrice;
+    }
+
+    public BigDecimal getEffecticityPrice()
+    {
+        return effecticityPrice;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("parentId", getParentId())
+            .append("type", getType())
+            .append("startTime", getStartTime())
+            .append("stopTime", getStopTime())
+            .append("effecticityPrice", getEffecticityPrice())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+        .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/ElectricityPriceDate.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/ElectricityPriceDate.java
new file mode 100644
index 0000000..05262a3
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/ElectricityPriceDate.java
@@ -0,0 +1,76 @@
+package com.zhitan.peakvalley.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * 灏栧嘲骞宠胺鐢典环鏃堕棿娈靛璞� electricity_price_date
+ *
+ * @author ZhiTan
+ * @date 2024-10-10
+ */
+@TableName("electricity_price_date")
+public class ElectricityPriceDate extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** 涓婚敭 */
+    private String id;
+
+    /** 寮�濮嬫椂闂� */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "寮�濮嬫椂闂�", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date beginDate;
+
+    /** 缁撴潫鏃堕棿 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "缁撴潫鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date endDate;
+
+    public void setId(String id)
+    {
+        this.id = id;
+    }
+
+    public String getId()
+    {
+        return id;
+    }
+    public void setBeginDate(Date beginDate)
+    {
+        this.beginDate = beginDate;
+    }
+
+    public Date getBeginDate()
+    {
+        return beginDate;
+    }
+    public void setEndDate(Date endDate)
+    {
+        this.endDate = endDate;
+    }
+
+    public Date getEndDate()
+    {
+        return endDate;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("beginDate", getBeginDate())
+            .append("endDate", getEndDate())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+        .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityDataItemListDTO.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityDataItemListDTO.java
new file mode 100644
index 0000000..0679990
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityDataItemListDTO.java
@@ -0,0 +1,68 @@
+package com.zhitan.peakvalley.domain.dto;
+
+import com.zhitan.common.enums.TimeType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+
+/**
+ * 灏栧嘲骞宠胺鏁版嵁鍒楄〃瀹炰綋绫� electricityDataItem
+ *
+ * @author ruoyi
+ * @date 2024-06-19
+ */
+@Data
+@ApiModel(value = "灏栧嘲骞宠胺鏁版嵁鍒楄〃瀹炰綋绫�")
+public class ElectricityDataItemListDTO {
+
+    /**
+     * 妯″瀷缂栧彿
+     */
+    @ApiModelProperty(value = "妯″瀷缂栧彿")
+    @NotBlank(message = "妯″瀷缂栧彿涓嶈兘涓虹┖!")
+    private String modelCode;
+
+    /**
+     * 鑺傜偣id
+     */
+    @ApiModelProperty(value = "鑺傜偣id")
+    @NotBlank(message = "鑺傜偣id涓嶈兘涓虹┖!")
+    private String nodeId;
+
+    /**
+     * 鏃堕棿绫诲瀷
+     */
+    @ApiModelProperty(value = "鏃堕棿绫诲瀷")
+    @NotBlank(message = "鏃堕棿绫诲瀷涓嶈兘涓虹┖!")
+    private String timeType;
+
+    /**
+     * 鏌ヨ鏃堕棿
+     */
+    @ApiModelProperty(value = "鏌ヨ鏃堕棿")
+    @NotNull(message = "鏌ヨ鏃堕棿涓嶈兘涓虹┖!")
+    @DateTimeFormat(pattern = "yyyy-MM")
+    private Date queryTime;
+
+
+    public String getTimeType() {
+
+        switch (TimeType.valueOf(this.timeType)) {
+            case HOUR:
+            case DAY:
+                return TimeType.HOUR.name();
+            case MONTH:
+                return TimeType.DAY.name();
+            case YEAR:
+                return TimeType.MONTH.name();
+            default:
+                return TimeType.DAY.name();
+        }
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityTypeSettingAddDTO.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityTypeSettingAddDTO.java
new file mode 100644
index 0000000..96e8f47
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityTypeSettingAddDTO.java
@@ -0,0 +1,86 @@
+package com.zhitan.peakvalley.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.DecimalMin;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 璁¤垂瑙勫垯瀵硅薄 rules
+ *
+ * @author ruoyi
+ * @date 2024-06-19
+ */
+@Data
+@ApiModel(value = "璁¤垂瑙勫垯鏂板璇锋眰瀹炰綋绫�")
+public class ElectricityTypeSettingAddDTO {
+
+    /**
+     * 瑙勫垯鍚嶇О
+     */
+    @ApiModelProperty(value = "瑙勫垯鍚嶇О")
+    @NotBlank(message = "瑙勫垯鍚嶇О涓嶈兘涓虹┖!")
+    private String name;
+
+    /**
+     * 鐢熸晥鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "鐢熸晥鏃堕棿")
+    @NotNull(message = "鐢熸晥鏃堕棿涓嶈兘涓虹┖!")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date effectiveDate;
+
+    /**
+     * 灏栨椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "灏栨椂娈电數璐逛环鏍�")
+    @NotNull(message = "灏栨椂娈电數璐逛环鏍间笉鑳戒负绌�!")
+    @DecimalMin(value = "0", message = "灏栨椂娈电數璐逛环鏍兼渶灏忎负0")
+    private BigDecimal sharpFee;
+
+    /**
+     * 宄版椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "宄版椂娈电數璐逛环鏍�")
+    @NotNull(message = "宄版椂娈电數璐逛环鏍间笉鑳戒负绌�!")
+    @DecimalMin(value = "0", message = "宄版椂娈电數璐逛环鏍兼渶灏忎负0")
+    private BigDecimal peakFee;
+
+    /**
+     * 骞虫椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "骞虫椂娈电數璐逛环鏍�")
+    @NotNull(message = "骞虫椂娈电數璐逛环鏍间笉鑳戒负绌�!")
+    @DecimalMin(value = "0", message = "骞虫椂娈电數璐逛环鏍兼渶灏忎负0")
+    private BigDecimal flatFee;
+
+    /**
+     * 璋锋椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "璋锋椂娈电數璐逛环鏍�")
+    @NotNull(message = "璋锋椂娈电數璐逛环鏍间笉鑳戒负绌�!")
+    @DecimalMin(value = "0", message = "璋锋椂娈电數璐逛环鏍兼渶灏忎负0")
+    private BigDecimal valleyFee;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+    /**
+     * 璁¤垂绛栫暐璇︽儏鍒楄〃
+     */
+    @ApiModelProperty(value = "璁¤垂绛栫暐璇︽儏鍒楄〃")
+    @NotNull(message = "灏栧嘲骞宠胺鏃堕棿娈典笉鑳戒负绌�!")
+    private List<ElectricityTypeSettingItemAddDTO> ruleDetailList;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityTypeSettingItemAddDTO.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityTypeSettingItemAddDTO.java
new file mode 100644
index 0000000..da6a256
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityTypeSettingItemAddDTO.java
@@ -0,0 +1,42 @@
+package com.zhitan.peakvalley.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 浠锋牸瀵硅薄 rule_details
+ *
+ * @author ruoyi
+ * @date 2024-06-14
+ */
+@Data
+@ApiModel(value = "璁¤垂瑙勫垯璐圭敤绫诲瀷鍙婃椂闂存鏂板璇锋眰绫�")
+public class ElectricityTypeSettingItemAddDTO {
+
+    /**
+     * 璐圭敤绫诲瀷鏃堕棿娈�
+     */
+    @ApiModelProperty(value = "璐圭敤绫诲瀷鏃堕棿娈�")
+    @NotNull(message = "璐圭敤绫诲瀷鏃堕棿娈典笉鑳戒负绌�!")
+    @Min(value = 1, message = "璐圭敤绫诲瀷鏃堕棿娈垫渶灏忓�间负1")
+    @Max(value = 48, message = "璐圭敤绫诲瀷鏃堕棿娈垫渶澶у�间负48")
+    private Integer timePeriod;
+
+    /**
+     * 鏃堕棿娈电被鍨� 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
+     */
+    @ApiModelProperty(value = "鏃堕棿娈电被鍨�")
+    @NotNull(message = "鏃堕棿娈电被鍨嬩笉鑳戒负绌�!")
+    private String type;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityTypeSettingItemUpdateDTO.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityTypeSettingItemUpdateDTO.java
new file mode 100644
index 0000000..777559d
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityTypeSettingItemUpdateDTO.java
@@ -0,0 +1,38 @@
+package com.zhitan.peakvalley.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 浠锋牸瀵硅薄 rule_details
+ *
+ * @author ruoyi
+ * @date 2024-06-14
+ */
+@Data
+@ApiModel(value = "璁¤垂瑙勫垯璐圭敤绫诲瀷鍙婃椂闂存鏇存柊璇锋眰绫�")
+public class ElectricityTypeSettingItemUpdateDTO {
+
+    /**
+     * 璁¤垂瑙勫垯瀛愯〃id
+     */
+    @ApiModelProperty(value = "璁¤垂瑙勫垯瀛愯〃id")
+    @NotNull(message = "璁¤垂瑙勫垯瀛愯〃id涓嶈兘涓虹┖!")
+    private String id;
+
+    /**
+     * 鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
+     */
+    @ApiModelProperty(value = "璐圭敤绫诲瀷")
+    @NotNull(message = "璐圭敤绫诲瀷涓嶈兘涓虹┖!")
+    private String type;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityTypeSettingUpdateDTO.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityTypeSettingUpdateDTO.java
new file mode 100644
index 0000000..0bcf585
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/ElectricityTypeSettingUpdateDTO.java
@@ -0,0 +1,93 @@
+package com.zhitan.peakvalley.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.DecimalMin;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 璁¤垂瑙勫垯瀵硅薄 rules
+ *
+ * @author ruoyi
+ * @date 2024-06-19
+ */
+@Data
+@ApiModel(value = "璁¤垂瑙勫垯鏇存柊璇锋眰瀹炰綋绫�")
+public class ElectricityTypeSettingUpdateDTO {
+
+    /**
+     * 涓婚敭
+     */
+    @NotNull(message = "id涓嶈兘涓虹┖!")
+    @ApiModelProperty(value = "璁¤垂瑙勫垯id")
+    private String id;
+
+    /**
+     * 瑙勫垯鍚嶇О
+     */
+    @NotBlank(message = "瑙勫垯鍚嶇О涓嶈兘涓虹┖!")
+    @ApiModelProperty(value = "瑙勫垯鍚嶇О")
+    private String name;
+
+    /**
+     * 鐢熸晥鏃堕棿
+     */
+    @ApiModelProperty(value = "鐢熸晥鏃堕棿")
+    @NotNull(message = "鐢熸晥鏃堕棿涓嶈兘涓虹┖!")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date effectiveDate;
+
+    /**
+     * 灏栨椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "灏栨椂娈电數璐逛环鏍�")
+    @NotNull(message = "灏栨椂娈电數璐逛环鏍间笉鑳戒负绌�!")
+    @DecimalMin(value = "0", message = "灏栨椂娈电數璐逛环鏍兼渶灏忎负0")
+    private BigDecimal sharpFee;
+
+    /**
+     * 宄版椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "宄版椂娈电數璐逛环鏍�")
+    @NotNull(message = "宄版椂娈电數璐逛环鏍间笉鑳戒负绌�!")
+    @DecimalMin(value = "0", message = "宄版椂娈电數璐逛环鏍兼渶灏忎负0")
+    private BigDecimal peakFee;
+
+    /**
+     * 骞虫椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "骞虫椂娈电數璐逛环鏍�")
+    @NotNull(message = "骞虫椂娈电數璐逛环鏍间笉鑳戒负绌�!")
+    @DecimalMin(value = "0", message = "骞虫椂娈电數璐逛环鏍兼渶灏忎负0")
+    private BigDecimal flatFee;
+
+    /**
+     * 璋锋椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "璋锋椂娈电數璐逛环鏍�")
+    @NotNull(message = "璋锋椂娈电數璐逛环鏍间笉鑳戒负绌�!")
+    @DecimalMin(value = "0", message = "璋锋椂娈电數璐逛环鏍兼渶灏忎负0")
+    private BigDecimal valleyFee;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+    /**
+     * 璁¤垂绛栫暐璇︽儏鍒楄〃
+     */
+    @ApiModelProperty(value = "璁¤垂绛栫暐璇︽儏鍒楄〃")
+    @NotNull(message = "灏栧嘲骞宠胺鏃堕棿娈典笉鑳戒负绌�!")
+    private List<ElectricityTypeSettingItemUpdateDTO> ruleDetailList;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/PeakValleyDTO.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/PeakValleyDTO.java
new file mode 100644
index 0000000..b9f6021
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/dto/PeakValleyDTO.java
@@ -0,0 +1,65 @@
+package com.zhitan.peakvalley.domain.dto;
+
+import com.zhitan.common.enums.TimeType;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * description 
+ *
+ * @author hmj
+ * @date 2024-09-24 16:49
+ */
+@Data
+public class PeakValleyDTO {
+
+    /**
+     * 妯″瀷缂栧彿
+     */
+    @ApiModelProperty(value = "妯″瀷缂栧彿")
+    @NotBlank(message = "妯″瀷缂栧彿涓嶈兘涓虹┖!")
+    private String modelCode;
+
+    /**
+     * 鑺傜偣id
+     */
+    @ApiModelProperty(value = "鑺傜偣id")
+    @NotBlank(message = "鑺傜偣id涓嶈兘涓虹┖!")
+    private String nodeId;
+
+    /**
+     * 鏃堕棿绫诲瀷
+     */
+    @ApiModelProperty(value = "鏃堕棿绫诲瀷")
+    @NotBlank(message = "鏃堕棿绫诲瀷涓嶈兘涓虹┖!")
+    private String timeType;
+
+    /**
+     * 鏌ヨ鏃堕棿
+     */
+    @ApiModelProperty(value = "鏌ヨ鏃堕棿")
+    @NotNull(message = "鏌ヨ鏃堕棿涓嶈兘涓虹┖!")
+    @DateTimeFormat(pattern = "yyyy-MM")
+    private Date queryTime;
+
+
+    public String getTimeType() {
+
+        switch (TimeType.valueOf(this.timeType)) {
+            case HOUR:
+            case DAY:
+                return TimeType.HOUR.name();
+            case MONTH:
+                return TimeType.DAY.name();
+            case YEAR:
+                return TimeType.MONTH.name();
+            default:
+                return TimeType.DAY.name();
+        }
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/ElectricityPeriodFeeDetailVO.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/ElectricityPeriodFeeDetailVO.java
new file mode 100644
index 0000000..8c7384f
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/ElectricityPeriodFeeDetailVO.java
@@ -0,0 +1,54 @@
+package com.zhitan.peakvalley.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "璁¤垂瑙勫垯鍚勬椂娈电殑璐圭敤杩斿洖瀹炰綋")
+public class ElectricityPeriodFeeDetailVO {
+
+    /**
+     * 璐圭敤绫诲瀷鏃堕棿娈�
+     */
+    @ApiModelProperty(value = "璐圭敤绫诲瀷鏃堕棿娈�")
+    private Integer timePeriod;
+
+    /**
+     * 鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
+     */
+    @ApiModelProperty(value = "璐圭敤绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺")
+    private Integer type;
+
+    /**
+     * 鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
+     */
+    @ApiModelProperty(value = "璐圭敤绫诲瀷鎻忚堪")
+    private String typeDesc;
+
+    /**
+     * 鐢佃垂浠锋牸
+     */
+    @ApiModelProperty(value = "鐢佃垂浠锋牸")
+    private BigDecimal electricityFee;
+
+    /**
+     * 鏈嶅姟璐逛环鏍�
+     */
+    @ApiModelProperty(value = "鏈嶅姟璐逛环鏍�")
+    private BigDecimal serviceFee;
+
+    /**
+     * 鍋滆溅璐逛环鏍�
+     */
+    @ApiModelProperty(value = "鍋滆溅璐逛环鏍�")
+    private BigDecimal parkingFee;
+
+    /**
+     * 瓒呮椂鍗犵敤璐逛环鏍�
+     */
+    @ApiModelProperty(value = "瓒呮椂鍗犵敤璐逛环鏍�")
+    private BigDecimal occupancyFee;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/ElectricityTypeSettingItemQueryVO.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/ElectricityTypeSettingItemQueryVO.java
new file mode 100644
index 0000000..3680d71
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/ElectricityTypeSettingItemQueryVO.java
@@ -0,0 +1,151 @@
+package com.zhitan.peakvalley.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 璁¤垂瑙勫垯瀵硅薄 rules
+ *
+ * @author ruoyi
+ * @date 2024-06-19
+ */
+@Data
+@ApiModel(value = "璁¤垂瑙勫垯璇︽儏鏌ヨ杩斿洖瀹炰綋绫�")
+public class ElectricityTypeSettingItemQueryVO {
+
+    /**
+     * 涓婚敭
+     */
+    @ApiModelProperty(value = "璁¤垂瑙勫垯id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private String id;
+
+    /**
+     * 瑙勫垯鍚嶇О
+     */
+    @ApiModelProperty(value = "瑙勫垯鍚嶇О")
+    private String name;
+
+    /**
+     * 鐢熸晥鏃堕棿
+     */
+    @ApiModelProperty(value = "鐢熸晥鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date effectiveDate;
+
+    /**
+     * 灏栨椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "灏栨椂娈电數璐逛环鏍�")
+    private BigDecimal sharpFee;
+
+    /**
+     * 宄版椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "宄版椂娈电數璐逛环鏍�")
+    private BigDecimal peakFee;
+
+    /**
+     * 骞虫椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "骞虫椂娈电數璐逛环鏍�")
+    private BigDecimal flatFee;
+
+    /**
+     * 璋锋椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "璋锋椂娈电數璐逛环鏍�")
+    private BigDecimal valleyFee;
+
+    /**
+     * 灏栨椂娈垫湇鍔¤垂浠锋牸
+     */
+    @ApiModelProperty(value = "灏栨椂娈垫湇鍔¤垂浠锋牸")
+    private BigDecimal sharpServiceFee;
+
+    /**
+     * 宄版椂娈垫湇鍔¤垂浠锋牸
+     */
+    @ApiModelProperty(value = "宄版椂娈垫湇鍔¤垂浠锋牸")
+    private BigDecimal peakServiceFee;
+
+    /**
+     * 骞虫椂娈垫湇鍔¤垂浠锋牸
+     */
+    @ApiModelProperty(value = "骞虫椂娈垫湇鍔¤垂浠锋牸")
+    private BigDecimal flatServiceFee;
+
+    /**
+     * 璋锋椂娈垫湇鍔¤垂浠锋牸
+     */
+    @ApiModelProperty(value = "璋锋椂娈垫湇鍔¤垂浠锋牸")
+    private BigDecimal valleyServiceFee;
+
+    /**
+     * 灏栨椂娈靛仠杞﹁垂浠锋牸
+     */
+    @ApiModelProperty(value = "灏栨椂娈靛仠杞﹁垂浠锋牸")
+    private BigDecimal sharpParkingFee;
+
+    /**
+     * 宄版椂娈靛仠杞﹁垂浠锋牸
+     */
+    @ApiModelProperty(value = "宄版椂娈靛仠杞﹁垂浠锋牸")
+    private BigDecimal peakParkingFee;
+
+    /**
+     * 骞虫椂娈靛仠杞﹁垂浠锋牸
+     */
+    @ApiModelProperty(value = "骞虫椂娈靛仠杞﹁垂浠锋牸")
+    private BigDecimal flatParkingFee;
+
+    /**
+     * 璋锋椂娈靛仠杞﹁垂浠锋牸
+     */
+    @ApiModelProperty(value = "璋锋椂娈靛仠杞﹁垂浠锋牸")
+    private BigDecimal valleyParkingFee;
+
+    /**
+     * 灏栨椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸
+     */
+    @ApiModelProperty(value = "灏栨椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸")
+    private BigDecimal sharpOccupancyFee;
+
+    /**
+     * 宄版椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸
+     */
+    @ApiModelProperty(value = "宄版椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸")
+    private BigDecimal peakOccupancyFee;
+
+    /**
+     * 骞虫椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸
+     */
+    @ApiModelProperty(value = "骞虫椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸")
+    private BigDecimal flatOccupancyFee;
+
+    /**
+     * 璋锋椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸
+     */
+    @ApiModelProperty(value = "璋锋椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸")
+    private BigDecimal valleyOccupancyFee;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+    /**
+     * 璁¤垂绛栫暐璇︽儏鍒楄〃
+     */
+    @ApiModelProperty(value = "璁¤垂绛栫暐鏃堕棿娈佃鎯呭垪琛�")
+    private List<ElectricityTypeSettingItemVO> ruleDetailList;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/ElectricityTypeSettingItemVO.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/ElectricityTypeSettingItemVO.java
new file mode 100644
index 0000000..4b24036
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/ElectricityTypeSettingItemVO.java
@@ -0,0 +1,59 @@
+package com.zhitan.peakvalley.domain.vo;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * 浠锋牸瀵硅薄 rule_details
+ *
+ * @author ruoyi
+ * @date 2024-06-14
+ */
+@Data
+@ApiModel(value = "璁¤垂瑙勫垯璇︽儏鏌ヨ杩斿洖鏃堕棿娈靛疄浣撶被")
+public class ElectricityTypeSettingItemVO {
+
+    /**
+     * 涓婚敭
+     */
+    @ApiModelProperty(value = "璁¤垂瑙勫垯瀛愯〃id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    /**
+     * 璁¤垂瑙勫垯id
+     */
+    @ApiModelProperty(value = "璁¤垂瑙勫垯id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long ruleId;
+
+    /**
+     * 璐圭敤绫诲瀷鏃堕棿娈�
+     */
+    @ApiModelProperty(value = "璐圭敤绫诲瀷鏃堕棿娈�")
+    private Integer timePeriod;
+
+    /**
+     * 鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
+     */
+    @ApiModelProperty(value = "璐圭敤绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺")
+    private String type;
+
+    /**
+     * 鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
+     */
+    @ApiModelProperty(value = "璐圭敤绫诲瀷鎻忚堪")
+    private String typeDesc;
+
+    /**
+     * 缁勭粐鏋舵瀯id
+     */
+    @ApiModelProperty(value = "缁勭粐鏋舵瀯id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long deptId;
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/ElectricityTypeSettingPageListVO.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/ElectricityTypeSettingPageListVO.java
new file mode 100644
index 0000000..dce01f6
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/ElectricityTypeSettingPageListVO.java
@@ -0,0 +1,66 @@
+package com.zhitan.peakvalley.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 璁¤垂瑙勫垯瀵硅薄 rules
+ *
+ * @author ruoyi
+ * @date 2024-06-19
+ */
+@Data
+@ApiModel(value = "璁¤垂瑙勫垯鍒嗛〉鏌ヨ杩斿洖瀹炰綋绫�")
+public class ElectricityTypeSettingPageListVO {
+
+    /**
+     * 涓婚敭
+     */
+    @ApiModelProperty(value = "璁¤垂瑙勫垯id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private String id;
+
+    /**
+     * 瑙勫垯鍚嶇О
+     */
+    @ApiModelProperty(value = "瑙勫垯鍚嶇О")
+    private String name;
+
+    /**
+     * 鏄惁鐢熸晥
+     */
+    @ApiModelProperty(value = "鏄惁鐢熸晥")
+    private boolean isEffective;
+
+    /**
+     * 鐢熸晥鏃堕棿
+     */
+    @ApiModelProperty(value = "鐢熸晥鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date effectiveDate;
+
+    /**
+     * 鍒涘缓鑰�
+     */
+    @ApiModelProperty(value = "鍒涘缓鑰�")
+    private String createBy;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyDayDataVO.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyDayDataVO.java
new file mode 100644
index 0000000..3b71de4
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyDayDataVO.java
@@ -0,0 +1,89 @@
+package com.zhitan.peakvalley.domain.vo.peakvalley;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 灏栧嘲骞宠胺鎸夊ぉ缁熻鎶ヨ〃 vo
+ */
+@Data
+@NoArgsConstructor
+@ApiModel(value = "灏栧嘲骞宠胺鎸夊ぉ缁熻鎶ヨ〃 vo", description = "灏栧嘲骞宠胺鎸夊ぉ缁熻鎶ヨ〃 vo")
+public class PeakValleyDayDataVO {
+
+    /**
+     * 鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "鏃堕棿")
+    private Date time;
+
+    /**
+     * 灏栬垂鐢�
+     */
+    @ApiModelProperty(value = "灏栬垂鐢�")
+    private BigDecimal sharpFee;
+
+    /**
+     * 灏栫數閲�
+     */
+    @ApiModelProperty(value = "灏栫數閲�")
+    private BigDecimal sharpPower;
+
+    /**
+     * 宄拌垂鐢�
+     */
+    @ApiModelProperty(value = "宄拌垂鐢�")
+    private BigDecimal peakFee;
+
+    /**
+     * 宄扮數閲�
+     */
+    @ApiModelProperty(value = "宄扮數閲�")
+    private BigDecimal peakPower;
+
+    /**
+     * 骞宠垂鐢�
+     */
+    @ApiModelProperty(value = "骞宠垂鐢�")
+    private BigDecimal flatFee;
+
+    /**
+     * 骞崇數閲�
+     */
+    @ApiModelProperty(value = "骞崇數閲�")
+    private BigDecimal flatPower;
+
+    /**
+     * 璋疯垂鐢�
+     */
+    @ApiModelProperty(value = "璋疯垂鐢�")
+    private BigDecimal valleyFee;
+
+    /**
+     * 璋风數閲�
+     */
+    @ApiModelProperty(value = "璋风數閲�")
+    private BigDecimal valleyPower;
+
+
+    public PeakValleyDayDataVO(Date time, BigDecimal sharpFee, BigDecimal sharpPower, BigDecimal peakFee,
+                               BigDecimal peakPower, BigDecimal flatFee, BigDecimal flatPower, BigDecimal valleyFee,
+                               BigDecimal valleyPower) {
+        this.time = time;
+        this.sharpFee = sharpFee;
+        this.sharpPower = sharpPower;
+        this.peakFee = peakFee;
+        this.peakPower = peakPower;
+        this.flatFee = flatFee;
+        this.flatPower = flatPower;
+        this.valleyFee = valleyFee;
+        this.valleyPower = valleyPower;
+    }
+}
\ No newline at end of file
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyDayTotalVO.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyDayTotalVO.java
new file mode 100644
index 0000000..2a6a2fa
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyDayTotalVO.java
@@ -0,0 +1,250 @@
+package com.zhitan.peakvalley.domain.vo.peakvalley;
+
+/**
+ * description 灏栧嘲璇勪及
+ *
+ * @author hmj
+ * @date 2024-10-14 9:40
+ */
+public class PeakValleyDayTotalVO {
+
+    /**
+     * totalPowerConsumption : 540.76
+     * totalCost : 505.349
+     * tipPowerConsumption : 184.85
+     * tipPowerProportion : 34.35
+     * tipPowerCost : 184.85
+     * tipPowerCostProportion : 36.64
+     * peakPowerConsumption : 179.2
+     * peakPowerProportion : 33.33
+     * peakPowerCost : 170.24
+     * peakPowerCostProportion : 33.66
+     * flatPowerConsumption : 88.91
+     * flatPowerProportion : 16.16
+     * flatPowerCost : 80.019
+     * flatPowerCostProportion : 15.84
+     * troughPowerConsumption : 87.8
+     * troughPowerProportion : 16.16
+     * troughPowerCost : 70.24
+     * troughPowerCostProportion : 13.86
+     */
+
+    /**
+     * 鑰楃數閲忓悎璁�
+     */
+    private double totalPowerConsumption;
+
+    /**
+     * 璐圭敤鍚堣
+     */
+    private double totalCost;
+    /**
+     * 灏栨椂娈电敤鐢甸噺
+     */
+    private double tipPowerConsumption;
+    /**
+     * 灏栨椂娈电敤鐢甸噺鐧惧垎姣�
+     */
+    private double tipPowerProportion;
+    /**
+     * 灏栨椂娈佃垂鐢�
+     */
+    private double tipPowerCost;
+    /**
+     * 灏栨椂娈佃垂鐢ㄧ櫨鍒嗘瘮
+     */
+    private double tipPowerCostProportion;
+    /**
+     * 宄版椂娈电敤鐢甸噺
+     */
+    private double peakPowerConsumption;
+    /**
+     * 宄版椂娈电敤鐢电櫨鍒嗘瘮
+     */
+    private double peakPowerProportion;
+    /**
+     * 宄版椂娈佃垂鐢�
+     */
+    private double peakPowerCost;
+    /**
+     * 宄版椂娈佃垂鐢ㄧ櫨鍒嗘瘮
+     */
+    private double peakPowerCostProportion;
+    /**
+     * 骞虫椂娈电敤鐢甸噺
+     */
+    private double flatPowerConsumption;
+    /**
+     * 骞虫椂娈电敤鐧惧垎姣�
+     */
+    private double flatPowerProportion;
+    /**
+     * 骞虫椂娈佃垂鐢�
+     */
+    private double flatPowerCost;
+    /**
+     * 骞虫椂娈佃垂鐢ㄧ櫨鍒嗘瘮
+     */
+    private double flatPowerCostProportion;
+    /**
+     * 璋锋椂娈电敤鐢甸噺
+     */
+    private double troughPowerConsumption;
+    /**
+     * 璋锋椂娈电敤鐢电櫨鍒嗘瘮
+     */
+    private double troughPowerProportion;
+    /**
+     * 璋锋椂娈佃垂鐢�
+     */
+    private double troughPowerCost;
+    /**
+     * 璋锋椂娈佃垂鐢ㄥ垎涓嶅垎
+     */
+    private double troughPowerCostProportion;
+
+    public double getTotalPowerConsumption() {
+        return totalPowerConsumption;
+    }
+
+    public void setTotalPowerConsumption(double totalPowerConsumption) {
+        this.totalPowerConsumption = totalPowerConsumption;
+    }
+
+    public double getTotalCost() {
+        return totalCost;
+    }
+
+    public void setTotalCost(double totalCost) {
+        this.totalCost = totalCost;
+    }
+
+    public double getTipPowerConsumption() {
+        return tipPowerConsumption;
+    }
+
+    public void setTipPowerConsumption(double tipPowerConsumption) {
+        this.tipPowerConsumption = tipPowerConsumption;
+    }
+
+    public double getTipPowerProportion() {
+        return tipPowerProportion;
+    }
+
+    public void setTipPowerProportion(double tipPowerProportion) {
+        this.tipPowerProportion = tipPowerProportion;
+    }
+
+    public double getTipPowerCost() {
+        return tipPowerCost;
+    }
+
+    public void setTipPowerCost(double tipPowerCost) {
+        this.tipPowerCost = tipPowerCost;
+    }
+
+    public double getTipPowerCostProportion() {
+        return tipPowerCostProportion;
+    }
+
+    public void setTipPowerCostProportion(double tipPowerCostProportion) {
+        this.tipPowerCostProportion = tipPowerCostProportion;
+    }
+
+    public double getPeakPowerConsumption() {
+        return peakPowerConsumption;
+    }
+
+    public void setPeakPowerConsumption(double peakPowerConsumption) {
+        this.peakPowerConsumption = peakPowerConsumption;
+    }
+
+    public double getPeakPowerProportion() {
+        return peakPowerProportion;
+    }
+
+    public void setPeakPowerProportion(double peakPowerProportion) {
+        this.peakPowerProportion = peakPowerProportion;
+    }
+
+    public double getPeakPowerCost() {
+        return peakPowerCost;
+    }
+
+    public void setPeakPowerCost(double peakPowerCost) {
+        this.peakPowerCost = peakPowerCost;
+    }
+
+    public double getPeakPowerCostProportion() {
+        return peakPowerCostProportion;
+    }
+
+    public void setPeakPowerCostProportion(double peakPowerCostProportion) {
+        this.peakPowerCostProportion = peakPowerCostProportion;
+    }
+
+    public double getFlatPowerConsumption() {
+        return flatPowerConsumption;
+    }
+
+    public void setFlatPowerConsumption(double flatPowerConsumption) {
+        this.flatPowerConsumption = flatPowerConsumption;
+    }
+
+    public double getFlatPowerProportion() {
+        return flatPowerProportion;
+    }
+
+    public void setFlatPowerProportion(double flatPowerProportion) {
+        this.flatPowerProportion = flatPowerProportion;
+    }
+
+    public double getFlatPowerCost() {
+        return flatPowerCost;
+    }
+
+    public void setFlatPowerCost(double flatPowerCost) {
+        this.flatPowerCost = flatPowerCost;
+    }
+
+    public double getFlatPowerCostProportion() {
+        return flatPowerCostProportion;
+    }
+
+    public void setFlatPowerCostProportion(double flatPowerCostProportion) {
+        this.flatPowerCostProportion = flatPowerCostProportion;
+    }
+
+    public double getTroughPowerConsumption() {
+        return troughPowerConsumption;
+    }
+
+    public void setTroughPowerConsumption(double troughPowerConsumption) {
+        this.troughPowerConsumption = troughPowerConsumption;
+    }
+
+    public double getTroughPowerProportion() {
+        return troughPowerProportion;
+    }
+
+    public void setTroughPowerProportion(double troughPowerProportion) {
+        this.troughPowerProportion = troughPowerProportion;
+    }
+
+    public double getTroughPowerCost() {
+        return troughPowerCost;
+    }
+
+    public void setTroughPowerCost(double troughPowerCost) {
+        this.troughPowerCost = troughPowerCost;
+    }
+
+    public double getTroughPowerCostProportion() {
+        return troughPowerCostProportion;
+    }
+
+    public void setTroughPowerCostProportion(double troughPowerCostProportion) {
+        this.troughPowerCostProportion = troughPowerCostProportion;
+    }
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyDayVO.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyDayVO.java
new file mode 100644
index 0000000..ef807cf
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyDayVO.java
@@ -0,0 +1,18 @@
+package com.zhitan.peakvalley.domain.vo.peakvalley;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @author hmj
+ * @date 2024-09-24 15:59
+ */
+@Getter
+@Setter
+public class PeakValleyDayVO {
+    List<PeakValleyLineChatVO> costList;
+    List<PeakValleyLineChatVO> powerConsumptionList;
+    PeakValleyDayTotalVO totalVO;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyHourDataVO.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyHourDataVO.java
new file mode 100644
index 0000000..3ad2d7b
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyHourDataVO.java
@@ -0,0 +1,115 @@
+package com.zhitan.peakvalley.domain.vo.peakvalley;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhitan.common.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 灏栧嘲骞宠胺鎸夊皬鏃剁粺璁℃姤琛� vo
+ */
+@Data
+@NoArgsConstructor
+@ApiModel(value = "灏栧嘲骞宠胺鎸夊皬鏃剁粺璁℃姤琛� vo", description = "灏栧嘲骞宠胺鎸夊皬鏃剁粺璁℃姤琛� vo")
+public class PeakValleyHourDataVO {
+
+    /**
+     * 鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH")
+    @ApiModelProperty(value = "鏃堕棿")
+    @Excel(name = "鏃堕棿")
+    private Date time;
+
+    /**
+     * 灏栬垂鐢�
+     */
+    @ApiModelProperty(value = "灏栬垂鐢�")
+    @Excel(name = "灏栬垂鐢�")
+    private BigDecimal sharpFee;
+
+    /**
+     * 灏栫數閲�
+     */
+    @ApiModelProperty(value = "灏栫數閲�")
+    @Excel(name = "灏栫數閲�")
+    private BigDecimal sharpPower;
+
+    /**
+     * 宄拌垂鐢�
+     */
+    @ApiModelProperty(value = "宄拌垂鐢�")
+    @Excel(name = "宄拌垂鐢�")
+    private BigDecimal peakFee;
+
+    /**
+     * 宄扮數閲�
+     */
+    @ApiModelProperty(value = "宄扮數閲�")
+    @Excel(name = "宄扮數閲�")
+    private BigDecimal peakPower;
+
+    /**
+     * 骞宠垂鐢�
+     */
+    @ApiModelProperty(value = "骞宠垂鐢�")
+    @Excel(name = "骞宠垂鐢�")
+    private BigDecimal flatFee;
+
+    /**
+     * 骞崇數閲�
+     */
+    @ApiModelProperty(value = "骞崇數閲�")
+    @Excel(name = "骞崇數閲�")
+    private BigDecimal flatPower;
+
+    /**
+     * 璋疯垂鐢�
+     */
+    @ApiModelProperty(value = "璋疯垂鐢�")
+    @Excel(name = "璋疯垂鐢�")
+    private BigDecimal valleyFee;
+
+    /**
+     * 璋风數閲�
+     */
+    @ApiModelProperty(value = "璋风數閲�")
+    @Excel(name = "璋风數閲�")
+    private BigDecimal valleyPower;
+
+    /**
+     * 鎬昏垂鐢�
+     */
+    @ApiModelProperty(value = "鎬昏垂鐢�")
+    @Excel(name = "鎬昏垂鐢�")
+    private BigDecimal totalFee;
+
+    /**
+     * 鎬荤數閲�
+     */
+    @ApiModelProperty(value = "鎬荤數閲�")
+    @Excel(name = "鎬荤數閲�")
+    private BigDecimal totalPower;
+
+
+    public PeakValleyHourDataVO(Date time, BigDecimal sharpFee, BigDecimal sharpPower, BigDecimal peakFee,
+                                BigDecimal peakPower, BigDecimal flatFee, BigDecimal flatPower, BigDecimal valleyFee,
+                                BigDecimal valleyPower) {
+        this.time = time;
+        this.sharpFee = sharpFee;
+        this.sharpPower = sharpPower;
+        this.peakFee = peakFee;
+        this.peakPower = peakPower;
+        this.flatFee = flatFee;
+        this.flatPower = flatPower;
+        this.valleyFee = valleyFee;
+        this.valleyPower = valleyPower;
+        this.totalPower = sharpPower.add(peakPower).add(valleyPower).add(flatPower);
+        this.totalFee = sharpFee.add(peakFee).add(valleyFee).add(flatFee);
+    }
+}
\ No newline at end of file
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyHourVO.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyHourVO.java
new file mode 100644
index 0000000..236aa96
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyHourVO.java
@@ -0,0 +1,18 @@
+package com.zhitan.peakvalley.domain.vo.peakvalley;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @author hmj
+ * @date 2024-09-24 15:59
+ */
+@Getter
+@Setter
+public class PeakValleyHourVO {
+    List<PeakValleyHourDataVO> dataList;
+    List<PeakValleyLineChatVO> lineChat;
+    PeakValleyPieChatVO pieChat;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyLineChatVO.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyLineChatVO.java
new file mode 100644
index 0000000..1aa5068
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyLineChatVO.java
@@ -0,0 +1,28 @@
+package com.zhitan.peakvalley.domain.vo.peakvalley;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * description 灏栧嘲骞宠胺鏌辩姸鍥�
+ *
+ * @author hmj
+ * @date 2024-09-24 16:32
+ */
+@Getter
+@Setter
+public class PeakValleyLineChatVO {
+    @ApiModelProperty(value = "2024-09-24 00", name = "鏃堕棿")
+    private String xdata;
+    @ApiModelProperty(value = "0", name = "灏�")
+    private BigDecimal ytip;
+    @ApiModelProperty(value = "0", name = "宄�")
+    private BigDecimal ypeak;
+    @ApiModelProperty(value = "0", name = "骞�")
+    private BigDecimal yflat;
+    @ApiModelProperty(value = "0", name = "璋�")
+    private BigDecimal ytrough;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyPieChatVO.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyPieChatVO.java
new file mode 100644
index 0000000..0221dad
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyPieChatVO.java
@@ -0,0 +1,53 @@
+package com.zhitan.peakvalley.domain.vo.peakvalley;
+
+/**
+ * description 灏栧嘲骞宠胺楗肩姸鍥�
+ *
+ * @author hmj
+ * @date 2024-09-24 16:39
+ */
+public class PeakValleyPieChatVO {
+    /**
+     * tip : 35.69
+     * peak : 64.31
+     * flat : 0.00
+     * trough : 0.00
+     */
+
+    private String tip;
+    private String peak;
+    private String flat;
+    private String trough;
+
+    public String getTip() {
+        return tip;
+    }
+
+    public void setTip(String tip) {
+        this.tip = tip;
+    }
+
+    public String getPeak() {
+        return peak;
+    }
+
+    public void setPeak(String peak) {
+        this.peak = peak;
+    }
+
+    public String getFlat() {
+        return flat;
+    }
+
+    public void setFlat(String flat) {
+        this.flat = flat;
+    }
+
+    public String getTrough() {
+        return trough;
+    }
+
+    public void setTrough(String trough) {
+        this.trough = trough;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/ElectricityPriceDateMapper.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/ElectricityPriceDateMapper.java
new file mode 100644
index 0000000..1f5343e
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/ElectricityPriceDateMapper.java
@@ -0,0 +1,62 @@
+package com.zhitan.peakvalley.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.peakvalley.domain.ElectricityPriceDate;
+
+import java.util.List;
+
+/**
+ * 灏栧嘲骞宠胺鐢典环鏃堕棿娈礛apper鎺ュ彛
+ *
+ * @author ZhiTan
+ * @date 2024-10-10
+ */
+public interface ElectricityPriceDateMapper extends BaseMapper<ElectricityPriceDate> {
+    /**
+     * 鏌ヨ灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     *
+     * @param id 灏栧嘲骞宠胺鐢典环鏃堕棿娈典富閿�
+     * @return 灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     */
+    public ElectricityPriceDate selectElectricityPriceDateById(String id);
+
+    /**
+     * 鏌ヨ灏栧嘲骞宠胺鐢典环鏃堕棿娈靛垪琛�
+     *
+     * @param electricityPriceDate 灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     * @return 灏栧嘲骞宠胺鐢典环鏃堕棿娈甸泦鍚�
+     */
+    public List<ElectricityPriceDate> selectElectricityPriceDateList(ElectricityPriceDate electricityPriceDate);
+
+    /**
+     * 鏂板灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     *
+     * @param electricityPriceDate 灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     * @return 缁撴灉
+     */
+    public int insertElectricityPriceDate(ElectricityPriceDate electricityPriceDate);
+
+    /**
+     * 淇敼灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     *
+     * @param electricityPriceDate 灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     * @return 缁撴灉
+     */
+    public int updateElectricityPriceDate(ElectricityPriceDate electricityPriceDate);
+
+    /**
+     * 鍒犻櫎灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     *
+     * @param id 灏栧嘲骞宠胺鐢典环鏃堕棿娈典富閿�
+     * @return 缁撴灉
+     */
+    public int deleteElectricityPriceDateById(String id);
+
+    /**
+     * 鎵归噺鍒犻櫎灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteElectricityPriceDateByIds(String[] ids);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/ElectricityPriceMapper.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/ElectricityPriceMapper.java
new file mode 100644
index 0000000..36d79f9
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/ElectricityPriceMapper.java
@@ -0,0 +1,62 @@
+package com.zhitan.peakvalley.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.peakvalley.domain.ElectricityPrice;
+
+import java.util.List;
+
+/**
+ * 銆愬皷宄板钩璋风數浠锋槑缁嗐�慚apper鎺ュ彛
+ *
+ * @author ZhiTan
+ * @date 2024-10-10
+ */
+public interface ElectricityPriceMapper extends BaseMapper<ElectricityPrice> {
+    /**
+     * 鏌ヨ銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     *
+     * @param id 銆愬皷宄板钩璋风數浠锋槑缁嗐�戜富閿�
+     * @return 銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     */
+    public ElectricityPrice selectElectricityPriceById(String id);
+
+    /**
+     * 鏌ヨ銆愬皷宄板钩璋风數浠锋槑缁嗐�戝垪琛�
+     *
+     * @param electricityPrice 銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     * @return 銆愬皷宄板钩璋风數浠锋槑缁嗐�戦泦鍚�
+     */
+    public List<ElectricityPrice> selectElectricityPriceList(ElectricityPrice electricityPrice);
+
+    /**
+     * 鏂板銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     *
+     * @param electricityPrice 銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     * @return 缁撴灉
+     */
+    public int insertElectricityPrice(ElectricityPrice electricityPrice);
+
+    /**
+     * 淇敼銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     *
+     * @param electricityPrice 銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     * @return 缁撴灉
+     */
+    public int updateElectricityPrice(ElectricityPrice electricityPrice);
+
+    /**
+     * 鍒犻櫎銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     *
+     * @param id 銆愬皷宄板钩璋风數浠锋槑缁嗐�戜富閿�
+     * @return 缁撴灉
+     */
+    public int deleteElectricityPriceById(String id);
+
+    /**
+     * 鎵归噺鍒犻櫎銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteElectricityPriceByIds(String[] ids);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/PeakValleyMapper.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/PeakValleyMapper.java
new file mode 100644
index 0000000..22b3312
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/PeakValleyMapper.java
@@ -0,0 +1,30 @@
+package com.zhitan.peakvalley.mapper;
+
+
+import com.zhitan.peakvalley.domain.ElectricityDataItem;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 灏栧嘲骞宠胺鏁版嵁瀵硅薄 Mapper鎺ュ彛
+ *
+ * @author sys
+ * @date 2024-08-27
+ */
+public interface PeakValleyMapper {
+
+    /**
+     * 鏌ヨ灏栧嘲骞宠胺缁熻鏁版嵁
+     *
+     * @param indexIdSet 鐐逛綅id闆嗗悎
+     * @param startTime  寮�濮嬫椂闂�
+     * @param endTime    鎴鏃堕棿
+     * @param timeType   鏃堕棿绫诲瀷
+     * @return 缁撴灉
+     */
+    List<ElectricityDataItem> getDataStatistics(@Param("indexIdSet") Set<String> indexIdSet, @Param("startTime") Date startTime,
+                                                @Param("endTime") Date endTime, @Param("timeType") String timeType);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/service/IElectricityPriceDateService.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/service/IElectricityPriceDateService.java
new file mode 100644
index 0000000..0d4d337
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/service/IElectricityPriceDateService.java
@@ -0,0 +1,65 @@
+package com.zhitan.peakvalley.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhitan.peakvalley.domain.ElectricityPriceDate;
+
+import java.util.List;
+
+/**
+ * 灏栧嘲骞宠胺鐢典环鏃堕棿娈礢ervice鎺ュ彛
+ *
+ * @author ZhiTan
+ * @date 2024-10-10
+ */
+public interface IElectricityPriceDateService extends IService<ElectricityPriceDate> {
+    /**
+     * 鏌ヨ灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     *
+     * @param id 灏栧嘲骞宠胺鐢典环鏃堕棿娈典富閿�
+     * @return 灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     */
+    public ElectricityPriceDate selectElectricityPriceDateById(String id);
+
+    /**
+     * 鏌ヨ灏栧嘲骞宠胺鐢典环鏃堕棿娈靛垪琛�
+     *
+     * @param electricityPriceDate 灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     * @return 灏栧嘲骞宠胺鐢典环鏃堕棿娈甸泦鍚�
+     */
+    public List<ElectricityPriceDate> selectElectricityPriceDateList(ElectricityPriceDate electricityPriceDate);
+
+    /**
+     * 鏂板灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     *
+     * @param electricityPriceDate 灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     * @return 缁撴灉
+     */
+    public int insertElectricityPriceDate(ElectricityPriceDate electricityPriceDate);
+
+    /**
+     * 淇敼灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     *
+     * @param electricityPriceDate 灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     * @return 缁撴灉
+     */
+    public int updateElectricityPriceDate(ElectricityPriceDate electricityPriceDate);
+
+    /**
+     * 鎵归噺鍒犻櫎灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑灏栧嘲骞宠胺鐢典环鏃堕棿娈典富閿泦鍚�
+     * @return 缁撴灉
+     */
+    public int deleteElectricityPriceDateByIds(String[] ids);
+
+    /**
+     * 鍒犻櫎灏栧嘲骞宠胺鐢典环鏃堕棿娈典俊鎭�
+     *
+     * @param id 灏栧嘲骞宠胺鐢典环鏃堕棿娈典富閿�
+     * @return 缁撴灉
+     */
+    public int deleteElectricityPriceDateById(String id);
+
+    Page<ElectricityPriceDate> selectElectricityPriceDatePage(ElectricityPriceDate electricityPriceDate, Long pageNum, Long pageSize);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/service/IElectricityPriceService.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/service/IElectricityPriceService.java
new file mode 100644
index 0000000..1d1b6c3
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/service/IElectricityPriceService.java
@@ -0,0 +1,64 @@
+package com.zhitan.peakvalley.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhitan.peakvalley.domain.ElectricityPrice;
+
+import java.util.List;
+
+/**
+ * 銆愬皷宄板钩璋风數浠锋槑缁嗐�慡ervice鎺ュ彛
+ *
+ * @author ZhiTan
+ * @date 2024-10-10
+ */
+public interface IElectricityPriceService extends IService<ElectricityPrice> {
+    /**
+     * 鏌ヨ銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     *
+     * @param id 銆愬皷宄板钩璋风數浠锋槑缁嗐�戜富閿�
+     * @return 銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     */
+    public ElectricityPrice selectElectricityPriceById(String id);
+
+    /**
+     * 鏌ヨ銆愬皷宄板钩璋风數浠锋槑缁嗐�戝垪琛�
+     *
+     * @param electricityPrice 銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     * @return 銆愬皷宄板钩璋风數浠锋槑缁嗐�戦泦鍚�
+     */
+    public List<ElectricityPrice> selectElectricityPriceList(ElectricityPrice electricityPrice);
+
+    /**
+     * 鏂板銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     *
+     * @param electricityPrice 銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     * @return 缁撴灉
+     */
+    public int insertElectricityPrice(ElectricityPrice electricityPrice);
+
+    /**
+     * 淇敼銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     *
+     * @param electricityPrice 銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     * @return 缁撴灉
+     */
+    public int updateElectricityPrice(ElectricityPrice electricityPrice);
+
+    /**
+     * 鎵归噺鍒犻櫎銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑銆愬皷宄板钩璋风數浠锋槑缁嗐�戜富閿泦鍚�
+     * @return 缁撴灉
+     */
+    public int deleteElectricityPriceByIds(String[] ids);
+
+    /**
+     * 鍒犻櫎銆愬皷宄板钩璋风數浠锋槑缁嗐�戜俊鎭�
+     *
+     * @param id 銆愬皷宄板钩璋风數浠锋槑缁嗐�戜富閿�
+     * @return 缁撴灉
+     */
+    public int deleteElectricityPriceById(String id);
+
+    void saveList(List<ElectricityPrice> electricityPriceList);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/service/IPeakValleyService.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/service/IPeakValleyService.java
new file mode 100644
index 0000000..f62ac2d
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/service/IPeakValleyService.java
@@ -0,0 +1,45 @@
+package com.zhitan.peakvalley.service;
+
+
+import com.zhitan.peakvalley.domain.dto.ElectricityDataItemListDTO;
+import com.zhitan.peakvalley.domain.dto.PeakValleyDTO;
+import com.zhitan.peakvalley.domain.vo.peakvalley.PeakValleyDayVO;
+import com.zhitan.peakvalley.domain.vo.peakvalley.PeakValleyHourDataVO;
+import com.zhitan.peakvalley.domain.vo.peakvalley.PeakValleyHourVO;
+
+import java.util.List;
+
+/**
+ * 灏栧嘲骞宠胺鏁版嵁Service鎺ュ彛
+ *
+ * @author sys
+ * @date 2024-08-27
+ */
+public interface IPeakValleyService {
+
+    /**
+     * 鏌ヨ缁熻鏁版嵁
+     *
+     * @param dto 璇锋眰鍙傛暟
+     * @return 缁撴灉
+     */
+    List<PeakValleyHourDataVO> getDataStatistics(ElectricityDataItemListDTO dto);
+
+    /**
+     * 灏栧嘲骞宠胺鍒嗘椂缁熻
+     *
+     * @param dto 璇锋眰鍙傛暟
+     * @return 缁撴灉
+     */
+    PeakValleyDayVO segmentAnalysisDay(PeakValleyDTO dto);
+
+    /**
+     * 灏栧嘲骞宠胺鍒嗘椂缁熻
+     *
+     * @param dto 璇锋眰鍙傛暟
+     * @return 缁撴灉
+     */
+    PeakValleyHourVO segmentAnalysisHour(PeakValleyDTO dto);
+
+    List<PeakValleyHourDataVO> segmentAnalysisHourExport(PeakValleyDTO dto);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/ElectricityPriceDateServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/ElectricityPriceDateServiceImpl.java
new file mode 100644
index 0000000..00fa4b2
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/ElectricityPriceDateServiceImpl.java
@@ -0,0 +1,106 @@
+package com.zhitan.peakvalley.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhitan.common.utils.DateUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.uuid.UUID;
+import com.zhitan.peakvalley.domain.ElectricityPriceDate;
+import com.zhitan.peakvalley.mapper.ElectricityPriceDateMapper;
+import com.zhitan.peakvalley.service.IElectricityPriceDateService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 灏栧嘲骞宠胺鐢典环鏃堕棿娈礢ervice涓氬姟灞傚鐞�
+ *
+ * @author ZhiTan
+ * @date 2024-10-10
+ */
+@Service
+public class ElectricityPriceDateServiceImpl extends ServiceImpl<ElectricityPriceDateMapper, ElectricityPriceDate> implements IElectricityPriceDateService {
+    @Autowired
+    private ElectricityPriceDateMapper electricityPriceDateMapper;
+
+    /**
+     * 鏌ヨ灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     *
+     * @param id 灏栧嘲骞宠胺鐢典环鏃堕棿娈典富閿�
+     * @return 灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     */
+    @Override
+    public ElectricityPriceDate selectElectricityPriceDateById(String id) {
+        return electricityPriceDateMapper.selectElectricityPriceDateById(id);
+    }
+
+    /**
+     * 鏌ヨ灏栧嘲骞宠胺鐢典环鏃堕棿娈靛垪琛�
+     *
+     * @param electricityPriceDate 灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     * @return 灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     */
+    @Override
+    public List<ElectricityPriceDate> selectElectricityPriceDateList(ElectricityPriceDate electricityPriceDate) {
+        return electricityPriceDateMapper.selectElectricityPriceDateList(electricityPriceDate);
+    }
+
+    /**
+     * 鏂板灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     *
+     * @param electricityPriceDate 灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertElectricityPriceDate(ElectricityPriceDate electricityPriceDate) {
+        electricityPriceDate.setCreateTime(DateUtils.getNowDate());
+        electricityPriceDate.setId(UUID.fastUUID().toString());
+        return electricityPriceDateMapper.insertElectricityPriceDate(electricityPriceDate);
+    }
+
+    /**
+     * 淇敼灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     *
+     * @param electricityPriceDate 灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateElectricityPriceDate(ElectricityPriceDate electricityPriceDate) {
+        electricityPriceDate.setUpdateTime(DateUtils.getNowDate());
+        return electricityPriceDateMapper.updateElectricityPriceDate(electricityPriceDate);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎灏栧嘲骞宠胺鐢典环鏃堕棿娈�
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑灏栧嘲骞宠胺鐢典环鏃堕棿娈典富閿�
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteElectricityPriceDateByIds(String[] ids) {
+        return electricityPriceDateMapper.deleteElectricityPriceDateByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎灏栧嘲骞宠胺鐢典环鏃堕棿娈典俊鎭�
+     *
+     * @param id 灏栧嘲骞宠胺鐢典环鏃堕棿娈典富閿�
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteElectricityPriceDateById(String id) {
+        return electricityPriceDateMapper.deleteElectricityPriceDateById(id);
+    }
+
+    @Override
+    public Page<ElectricityPriceDate> selectElectricityPriceDatePage(ElectricityPriceDate electricityPriceDate, Long pageNum, Long pageSize) {
+
+        LambdaQueryWrapper<ElectricityPriceDate> wrapper = new LambdaQueryWrapper<>();
+        wrapper.like(StringUtils.isNotEmpty(electricityPriceDate.getRemark()),ElectricityPriceDate::getRemark,electricityPriceDate.getRemark());
+        wrapper.orderByDesc(ElectricityPriceDate::getCreateTime);
+        Page<ElectricityPriceDate> page = electricityPriceDateMapper.selectPage(new Page<ElectricityPriceDate>(pageNum, pageSize), wrapper);
+        return page;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/ElectricityPriceServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/ElectricityPriceServiceImpl.java
new file mode 100644
index 0000000..9486058
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/ElectricityPriceServiceImpl.java
@@ -0,0 +1,150 @@
+package com.zhitan.peakvalley.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhitan.common.utils.DateUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.time.Time24HourUtil;
+import com.zhitan.peakvalley.domain.ElectricityPrice;
+import com.zhitan.peakvalley.mapper.ElectricityPriceMapper;
+import com.zhitan.peakvalley.service.IElectricityPriceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * 銆愬皷宄板钩璋风數浠锋槑缁嗐�慡ervice涓氬姟灞傚鐞�
+ *
+ * @author ZhiTan
+ * @date 2024-10-10
+ */
+@Service
+public class ElectricityPriceServiceImpl extends ServiceImpl<ElectricityPriceMapper, ElectricityPrice> implements IElectricityPriceService {
+    @Autowired
+    private ElectricityPriceMapper electricityPriceMapper;
+
+    /**
+     * 鏌ヨ銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     *
+     * @param id 銆愬皷宄板钩璋风數浠锋槑缁嗐�戜富閿�
+     * @return 銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     */
+    @Override
+    public ElectricityPrice selectElectricityPriceById(String id) {
+        return electricityPriceMapper.selectElectricityPriceById(id);
+    }
+
+    /**
+     * 鏌ヨ銆愬皷宄板钩璋风數浠锋槑缁嗐�戝垪琛�
+     *
+     * @param electricityPrice 銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     * @return 銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     */
+    @Override
+    public List<ElectricityPrice> selectElectricityPriceList(ElectricityPrice electricityPrice) {
+        if(StringUtils.isEmpty(electricityPrice.getParentId())){
+            throw new RuntimeException("鐖剁骇id涓嶈兘涓虹┖");
+        }
+        return electricityPriceMapper.selectElectricityPriceList(electricityPrice);
+    }
+
+    /**
+     * 鏂板銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     *
+     * @param electricityPrice 銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertElectricityPrice(ElectricityPrice electricityPrice) {
+        electricityPrice.setCreateTime(DateUtils.getNowDate());
+        return electricityPriceMapper.insertElectricityPrice(electricityPrice);
+    }
+
+    /**
+     * 淇敼銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     *
+     * @param electricityPrice 銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateElectricityPrice(ElectricityPrice electricityPrice) {
+        electricityPrice.setUpdateTime(DateUtils.getNowDate());
+        return electricityPriceMapper.updateElectricityPrice(electricityPrice);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎銆愬皷宄板钩璋风數浠锋槑缁嗐��
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑銆愬皷宄板钩璋风數浠锋槑缁嗐�戜富閿�
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteElectricityPriceByIds(String[] ids) {
+        return electricityPriceMapper.deleteElectricityPriceByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎銆愬皷宄板钩璋风數浠锋槑缁嗐�戜俊鎭�
+     *
+     * @param id 銆愬皷宄板钩璋风數浠锋槑缁嗐�戜富閿�
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteElectricityPriceById(String id) {
+        return electricityPriceMapper.deleteElectricityPriceById(id);
+    }
+
+    @Override
+    public void saveList(List<ElectricityPrice> electricityPriceList) {
+        if(CollectionUtil.isEmpty(electricityPriceList)){
+            throw new RuntimeException("浠锋牸鏄庣粏涓嶈兘涓虹┖锛�");
+        }
+        
+        //鏍¢獙鏃堕棿鏄惁閲嶅彔
+        boolean isOverlap = checkIntersection(electricityPriceList);
+        if(isOverlap){
+            throw new RuntimeException("鏃堕棿娈靛瓨鍦ㄩ噸鍙狅紝璇锋鏌ワ紒");
+        }
+
+        HashMap<String,String> collect = new HashMap<>();
+        electricityPriceList.forEach(electricityPrice -> {
+            collect.put(DateUtils.getHhMmSs(electricityPrice.getStartTime()) + "-" + DateUtils.getHhMmSs(electricityPrice.getStopTime()),electricityPrice.getType());
+        });
+        boolean is24Hour = Time24HourUtil.checkTimeSpan(collect);
+        if(!is24Hour){
+            throw new RuntimeException("鏃堕棿娌℃湁瑕嗙洊24灏忔椂");
+        }
+
+        String parentId = electricityPriceList.get(0).getParentId();
+        LambdaQueryWrapper<ElectricityPrice> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ElectricityPrice::getParentId,parentId);
+        if(electricityPriceMapper.selectCount(queryWrapper)>0) {
+            electricityPriceMapper.delete(queryWrapper);
+        }
+        Collection<ElectricityPrice> collection = new ArrayList<>(electricityPriceList);
+        saveBatch(collection);
+    }
+
+    public static boolean checkIntersection(List<ElectricityPrice> dtoList) {
+        int length = dtoList.size();
+        for (int i = 0; i < length; i++) {
+            long startTimeI = dtoList.get(i).getStartTime().getTime();
+            long endTimeI = dtoList.get(i).getStopTime().getTime();
+
+            for (int j = i + 1; j < length; j++) {
+                long startTimeJ = dtoList.get(j).getStartTime().getTime();
+                long endTimeJ = dtoList.get(j).getStopTime().getTime();
+
+                if (startTimeI < endTimeJ && startTimeJ < endTimeI) {
+                    return true;  // 瀛樺湪鐩镐氦锛岃繑鍥瀟rue
+                }
+            }
+        }
+        return false;  // 涓嶅瓨鍦ㄧ浉浜わ紝杩斿洖false
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/PeakValleyServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/PeakValleyServiceImpl.java
new file mode 100644
index 0000000..e607910
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/PeakValleyServiceImpl.java
@@ -0,0 +1,475 @@
+package com.zhitan.peakvalley.service.impl;
+
+
+import cn.hutool.core.date.DateUtil;
+import com.zhitan.common.enums.ElectricityTypeEnum;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.common.utils.DateUtils;
+import com.zhitan.model.domain.vo.ModelNodeIndexInfor;
+import com.zhitan.model.mapper.ModelNodeMapper;
+import com.zhitan.peakvalley.domain.ElectricityDataItem;
+import com.zhitan.peakvalley.domain.dto.ElectricityDataItemListDTO;
+import com.zhitan.peakvalley.domain.dto.PeakValleyDTO;
+import com.zhitan.peakvalley.domain.vo.peakvalley.*;
+import com.zhitan.peakvalley.mapper.PeakValleyMapper;
+import com.zhitan.peakvalley.service.IPeakValleyService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
+
+/**
+ * 灏栧嘲骞宠胺鏁版嵁Service涓氬姟灞傚鐞�
+ *
+ * @author sys
+ * @date 2024-08-27
+ */
+@Service
+public class PeakValleyServiceImpl implements IPeakValleyService {
+    @Resource
+    private ModelNodeMapper modelNodeMapper;
+    @Resource
+    private PeakValleyMapper electricityDataItemMapper;
+
+
+    /**
+     * 鏌ヨ缁熻鏁版嵁
+     *
+     * @param dto 璇锋眰鍙傛暟
+     * @return 缁撴灉
+     */
+    @Override
+    public List<PeakValleyHourDataVO> getDataStatistics(ElectricityDataItemListDTO dto) {
+        List<PeakValleyHourDataVO> reportVOList = new ArrayList<>();
+        // 鏌ヨ鏃堕棿鑼冨洿
+        Date startTime = DateUtil.beginOfMonth(dto.getQueryTime());
+        Date endTime = DateUtil.endOfMonth(startTime);
+        String timeType = dto.getTimeType();
+
+        Map<String, List<ElectricityDataItem>> electricityDataMap = new HashMap<>();
+        // 鏌ヨ鐐逛綅淇℃伅
+        List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(dto.getModelCode(), dto.getNodeId());
+        if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
+            Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
+            List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatistics(indexSet, startTime, endTime, timeType);
+
+            electricityDataMap = dataItemList.stream()
+                    .collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime())));
+        }
+        while (!startTime.after(endTime)) {
+            String mapKey = DateUtil.formatDateTime(startTime);
+            List<ElectricityDataItem> dataItemList = electricityDataMap.get(mapKey);
+
+            BigDecimal sharpFee = BigDecimal.ZERO;
+            BigDecimal sharpPower = BigDecimal.ZERO;
+            BigDecimal peakFee = BigDecimal.ZERO;
+            BigDecimal peakPower = BigDecimal.ZERO;
+            BigDecimal flatFee = BigDecimal.ZERO;
+            BigDecimal flatPower = BigDecimal.ZERO;
+            BigDecimal valleyFee = BigDecimal.ZERO;
+            BigDecimal valleyPower = BigDecimal.ZERO;
+
+            if (CollectionUtils.isNotEmpty(dataItemList)) {
+                for (ElectricityDataItem electricityDataItem : dataItemList) {
+                    String electricityType = electricityDataItem.getElectricityType();
+
+                    if (ElectricityTypeEnum.SHARP.name().equals(electricityType)) {
+                        sharpFee = sharpFee.add(electricityDataItem.getCost());
+                        sharpPower = sharpPower.add(electricityDataItem.getElectricity());
+                    } else if (ElectricityTypeEnum.PEAK.name().equals(electricityType)) {
+                        peakFee = peakFee.add(electricityDataItem.getCost());
+                        peakPower = peakPower.add(electricityDataItem.getElectricity());
+                    } else if (ElectricityTypeEnum.FLAT.name().equals(electricityType)) {
+                        flatFee = flatFee.add(electricityDataItem.getCost());
+                        flatPower = flatPower.add(electricityDataItem.getElectricity());
+                    } else {
+                        valleyFee = valleyFee.add(electricityDataItem.getCost());
+                        valleyPower = valleyPower.add(electricityDataItem.getElectricity());
+                    }
+                }
+            }
+            PeakValleyHourDataVO peakAndValleyReportVO = new PeakValleyHourDataVO(startTime, sharpFee, sharpPower,
+                    peakFee, peakPower, flatFee, flatPower, valleyFee, valleyPower);
+
+            reportVOList.add(peakAndValleyReportVO);
+            switch (TimeType.valueOf(timeType)) {
+                case HOUR:
+                    startTime = DateUtil.offsetHour(startTime, 1);
+                    break;
+                case DAY:
+                    startTime = DateUtil.offsetDay(startTime, 1);
+                    break;
+                case MONTH:
+                    startTime = DateUtil.offsetMonth(startTime, 1);
+                    break;
+                default:
+                    startTime = DateUtil.offsetMonth(startTime, 12);
+                    break;
+            }
+        }
+
+        return reportVOList;
+    }
+
+
+    @Override
+    public PeakValleyDayVO segmentAnalysisDay(PeakValleyDTO dto) {
+        PeakValleyDayVO peakValleyVO = new PeakValleyDayVO();
+        List<PeakValleyDayDataVO> reportVOList = new ArrayList<>();
+        // 鏌ヨ鏃堕棿鑼冨洿
+        Date startTime = DateUtil.beginOfMonth(dto.getQueryTime());
+        Date endTime = DateUtil.endOfMonth(startTime);
+        String timeType = dto.getTimeType();
+
+        Map<String, List<ElectricityDataItem>> electricityDataMap = new HashMap<>();
+        // 鏌ヨ鐐逛綅淇℃伅
+        List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(dto.getModelCode(), dto.getNodeId());
+        if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
+            Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
+            List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatistics(indexSet, startTime, endTime, timeType);
+
+            electricityDataMap = dataItemList.stream()
+                    .collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime())));
+        }
+        while (!startTime.after(endTime)) {
+            String mapKey = DateUtil.formatDateTime(startTime);
+            List<ElectricityDataItem> dataItemList = electricityDataMap.get(mapKey);
+
+            BigDecimal sharpFee = BigDecimal.ZERO;
+            BigDecimal sharpPower = BigDecimal.ZERO;
+            BigDecimal peakFee = BigDecimal.ZERO;
+            BigDecimal peakPower = BigDecimal.ZERO;
+            BigDecimal flatFee = BigDecimal.ZERO;
+            BigDecimal flatPower = BigDecimal.ZERO;
+            BigDecimal valleyFee = BigDecimal.ZERO;
+            BigDecimal valleyPower = BigDecimal.ZERO;
+
+            if (CollectionUtils.isNotEmpty(dataItemList)) {
+                for (ElectricityDataItem electricityDataItem : dataItemList) {
+                    String electricityType = electricityDataItem.getElectricityType();
+
+                    if (ElectricityTypeEnum.SHARP.name().equals(electricityType)) {
+                        sharpFee = sharpFee.add(electricityDataItem.getCost());
+                        sharpPower = sharpPower.add(electricityDataItem.getElectricity());
+                    } else if (ElectricityTypeEnum.PEAK.name().equals(electricityType)) {
+                        peakFee = peakFee.add(electricityDataItem.getCost());
+                        peakPower = peakPower.add(electricityDataItem.getElectricity());
+                    } else if (ElectricityTypeEnum.FLAT.name().equals(electricityType)) {
+                        flatFee = flatFee.add(electricityDataItem.getCost());
+                        flatPower = flatPower.add(electricityDataItem.getElectricity());
+                    } else {
+                        valleyFee = valleyFee.add(electricityDataItem.getCost());
+                        valleyPower = valleyPower.add(electricityDataItem.getElectricity());
+                    }
+                }
+            }
+            PeakValleyDayDataVO peakAndValleyReportVO = new PeakValleyDayDataVO(startTime, sharpFee, sharpPower,
+                    peakFee, peakPower, flatFee, flatPower, valleyFee, valleyPower);
+
+            reportVOList.add(peakAndValleyReportVO);
+            switch (TimeType.valueOf(timeType)) {
+                case HOUR:
+                    startTime = DateUtil.offsetHour(startTime, 1);
+                    break;
+                case DAY:
+                    startTime = DateUtil.offsetDay(startTime, 1);
+                    break;
+                case MONTH:
+                    startTime = DateUtil.offsetMonth(startTime, 1);
+                    break;
+                default:
+                    startTime = DateUtil.offsetMonth(startTime, 12);
+                    break;
+            }
+        }
+        List<PeakValleyLineChatVO> costList = new ArrayList<>();
+        List<PeakValleyLineChatVO> powerConsumptionList = new ArrayList<>();
+        PeakValleyDayTotalVO peakValleyDayTotalVO = new PeakValleyDayTotalVO();
+
+        AtomicReference<BigDecimal> flatFreeCount = new AtomicReference<>(BigDecimal.ZERO);
+        AtomicReference<BigDecimal> tipFreeCount = new AtomicReference<>(BigDecimal.ZERO);
+        AtomicReference<BigDecimal> troughFreeCount = new AtomicReference<>(BigDecimal.ZERO);
+        AtomicReference<BigDecimal> peakFreeCount = new AtomicReference<>(BigDecimal.ZERO);
+        AtomicReference<BigDecimal> flatCount = new AtomicReference<>(BigDecimal.ZERO);
+        AtomicReference<BigDecimal> tipCount = new AtomicReference<>(BigDecimal.ZERO);
+        AtomicReference<BigDecimal> troughCount = new AtomicReference<>(BigDecimal.ZERO);
+        AtomicReference<BigDecimal> peakCount = new AtomicReference<>(BigDecimal.ZERO);
+        
+        reportVOList.stream().forEach(r->{
+            PeakValleyLineChatVO costVO = new PeakValleyLineChatVO();
+            PeakValleyLineChatVO powerConsumptionVO = new PeakValleyLineChatVO();
+            
+            /**
+             * 鐢ㄧ數閲�
+             */
+            final BigDecimal peakPower = r.getPeakPower();
+            final BigDecimal valleyPower = r.getValleyPower();
+            final BigDecimal sharpPower = r.getSharpPower();
+            final BigDecimal flatPower = r.getFlatPower();
+            powerConsumptionVO.setXdata(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,r.getTime()));
+            powerConsumptionVO.setYtip(sharpPower);
+            powerConsumptionVO.setYpeak(peakPower);
+            powerConsumptionVO.setYtrough(valleyPower);
+            powerConsumptionVO.setYflat(flatPower);
+            powerConsumptionList.add(powerConsumptionVO);
+
+            /**
+             * 鐢ㄧ數璐圭敤
+             */
+            final BigDecimal peakFee = r.getPeakFee();
+            final BigDecimal valleyFee = r.getValleyFee();
+            final BigDecimal sharpFee = r.getSharpFee();
+            final BigDecimal flatFee = r.getFlatFee();
+            costVO.setXdata(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,r.getTime()));
+            costVO.setYtip(sharpFee);
+            costVO.setYpeak(peakFee);
+            costVO.setYtrough(valleyFee);
+            costVO.setYflat(flatFee);
+            costList.add(costVO);
+
+            flatCount.set(flatCount.get().add(r.getFlatPower()));
+            tipCount.set(tipCount.get().add(r.getSharpPower()));
+            troughCount.set(troughCount.get().add(r.getValleyPower()));
+            peakCount.set(peakCount.get().add(r.getPeakPower()));
+
+            flatFreeCount.set(flatFreeCount.get().add(r.getFlatFee()));
+            tipFreeCount.set(tipFreeCount.get().add(r.getSharpFee()));
+            troughFreeCount.set(troughFreeCount.get().add(r.getValleyFee()));
+            peakFreeCount.set(peakFreeCount.get().add(r.getPeakFee()));
+        });
+
+        peakValleyDayTotalVO.setPeakPowerCost(peakFreeCount.get().doubleValue());   
+        peakValleyDayTotalVO.setPeakPowerConsumption(peakCount.get().doubleValue());
+        peakValleyDayTotalVO.setFlatPowerCost(flatFreeCount.get().doubleValue());
+        peakValleyDayTotalVO.setFlatPowerConsumption(flatCount.get().doubleValue());
+        peakValleyDayTotalVO.setTipPowerCost(tipFreeCount.get().doubleValue());
+        peakValleyDayTotalVO.setTipPowerConsumption(tipCount.get().doubleValue());
+        peakValleyDayTotalVO.setTroughPowerCost(troughFreeCount.get().doubleValue());
+        peakValleyDayTotalVO.setTroughPowerConsumption(troughCount.get().doubleValue());
+
+        BigDecimal powerTotal = peakCount.get().add(tipCount.get()).add(troughCount.get()).add(flatCount.get());
+        if(powerTotal.compareTo(BigDecimal.ZERO) > 0) {
+            peakValleyDayTotalVO.setPeakPowerProportion(peakCount.get().divide(powerTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
+            peakValleyDayTotalVO.setFlatPowerProportion(flatCount.get().divide(powerTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
+            peakValleyDayTotalVO.setTipPowerProportion(tipCount.get().divide(powerTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
+            peakValleyDayTotalVO.setTroughPowerProportion(troughCount.get().divide(powerTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
+        }else {
+            peakValleyDayTotalVO.setPeakPowerProportion(0);
+            peakValleyDayTotalVO.setFlatPowerProportion(0);
+            peakValleyDayTotalVO.setTipPowerProportion(0);
+            peakValleyDayTotalVO.setTroughPowerProportion(0);
+        }
+
+        BigDecimal freeTotal = peakFreeCount.get().add(tipFreeCount.get()).add(troughFreeCount.get()).add(flatFreeCount.get());
+        if(freeTotal.compareTo(BigDecimal.ZERO) > 0) {
+            peakValleyDayTotalVO.setPeakPowerCostProportion(peakFreeCount.get().divide(freeTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
+            peakValleyDayTotalVO.setFlatPowerCostProportion(flatFreeCount.get().divide(freeTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
+            peakValleyDayTotalVO.setTipPowerCostProportion(tipFreeCount.get().divide(freeTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
+            peakValleyDayTotalVO.setTroughPowerCostProportion(troughFreeCount.get().divide(freeTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
+        }else {
+            peakValleyDayTotalVO.setPeakPowerCostProportion(0);
+            peakValleyDayTotalVO.setFlatPowerCostProportion(0);
+            peakValleyDayTotalVO.setTipPowerCostProportion(0);
+            peakValleyDayTotalVO.setTroughPowerCostProportion(0);
+        }
+        
+        peakValleyDayTotalVO.setTotalCost(powerTotal.doubleValue());
+        peakValleyDayTotalVO.setTotalPowerConsumption(freeTotal.doubleValue());
+        peakValleyVO.setTotalVO(peakValleyDayTotalVO);
+        peakValleyVO.setCostList(costList);
+        peakValleyVO.setPowerConsumptionList(powerConsumptionList);
+        
+        return peakValleyVO;
+    }
+
+    @Override
+    public PeakValleyHourVO segmentAnalysisHour(PeakValleyDTO dto) {
+        PeakValleyHourVO peakValleyVO = new PeakValleyHourVO();
+        List<PeakValleyHourDataVO> reportVOList = new ArrayList<>();
+        // 鏌ヨ鏃堕棿鑼冨洿
+        Date startTime = DateUtil.beginOfDay(dto.getQueryTime());
+        Date endTime = DateUtil.endOfDay(startTime);
+        String timeType = dto.getTimeType();
+
+        Map<String, List<ElectricityDataItem>> electricityDataMap = new HashMap<>();
+        // 鏌ヨ鐐逛綅淇℃伅
+        List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(dto.getModelCode(), dto.getNodeId());
+        if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
+            Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
+            List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatistics(indexSet, startTime, endTime, timeType);
+
+            electricityDataMap = dataItemList.stream()
+                    .collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime())));
+        }
+        while (!startTime.after(endTime)) {
+            String mapKey = DateUtil.formatDateTime(startTime);
+            List<ElectricityDataItem> dataItemList = electricityDataMap.get(mapKey);
+
+            BigDecimal sharpFee = BigDecimal.ZERO;
+            BigDecimal sharpPower = BigDecimal.ZERO;
+            BigDecimal peakFee = BigDecimal.ZERO;
+            BigDecimal peakPower = BigDecimal.ZERO;
+            BigDecimal flatFee = BigDecimal.ZERO;
+            BigDecimal flatPower = BigDecimal.ZERO;
+            BigDecimal valleyFee = BigDecimal.ZERO;
+            BigDecimal valleyPower = BigDecimal.ZERO;
+
+            if (CollectionUtils.isNotEmpty(dataItemList)) {
+                for (ElectricityDataItem electricityDataItem : dataItemList) {
+                    String electricityType = electricityDataItem.getElectricityType();
+
+                    if (ElectricityTypeEnum.SHARP.name().equals(electricityType)) {
+                        sharpFee = sharpFee.add(electricityDataItem.getCost());
+                        sharpPower = sharpPower.add(electricityDataItem.getElectricity());
+                    } else if (ElectricityTypeEnum.PEAK.name().equals(electricityType)) {
+                        peakFee = peakFee.add(electricityDataItem.getCost());
+                        peakPower = peakPower.add(electricityDataItem.getElectricity());
+                    } else if (ElectricityTypeEnum.FLAT.name().equals(electricityType)) {
+                        flatFee = flatFee.add(electricityDataItem.getCost());
+                        flatPower = flatPower.add(electricityDataItem.getElectricity());
+                    } else {
+                        valleyFee = valleyFee.add(electricityDataItem.getCost());
+                        valleyPower = valleyPower.add(electricityDataItem.getElectricity());
+                    }
+                }
+            }
+            PeakValleyHourDataVO peakAndValleyReportVO = new PeakValleyHourDataVO(startTime, sharpFee, sharpPower,
+                    peakFee, peakPower, flatFee, flatPower, valleyFee, valleyPower);
+
+            reportVOList.add(peakAndValleyReportVO);
+            switch (TimeType.valueOf(timeType)) {
+                case HOUR:
+                    startTime = DateUtil.offsetHour(startTime, 1);
+                    break;
+                case DAY:
+                    startTime = DateUtil.offsetDay(startTime, 1);
+                    break;
+                case MONTH:
+                    startTime = DateUtil.offsetMonth(startTime, 1);
+                    break;
+                default:
+                    startTime = DateUtil.offsetMonth(startTime, 12);
+                    break;
+            }
+        }
+
+        peakValleyVO.setDataList(reportVOList);
+        List<PeakValleyLineChatVO> peakValleyLineChatVOS = new ArrayList<>();
+        AtomicReference<BigDecimal> flatCount = new AtomicReference<>(BigDecimal.ZERO);
+        AtomicReference<BigDecimal> tipCount = new AtomicReference<>(BigDecimal.ZERO);
+        AtomicReference<BigDecimal> troughCount = new AtomicReference<>(BigDecimal.ZERO);
+        AtomicReference<BigDecimal> peakCount = new AtomicReference<>(BigDecimal.ZERO);
+        reportVOList.stream().forEach(r->{
+            PeakValleyLineChatVO lineChatVO = new PeakValleyLineChatVO();
+            lineChatVO.setXdata(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,r.getTime()));
+            lineChatVO.setYtip(r.getSharpPower());
+            lineChatVO.setYflat(r.getFlatPower());
+            lineChatVO.setYtrough(r.getValleyPower());
+            lineChatVO.setYpeak(r.getPeakPower());
+            peakValleyLineChatVOS.add(lineChatVO);
+            BigDecimal flat  = flatCount.get().add(r.getFlatPower());
+            flatCount.set(flat);
+            BigDecimal tip  = tipCount.get().add(r.getSharpPower());
+            tipCount.set(tip);
+            BigDecimal trough  = troughCount.get().add(r.getValleyPower());
+            troughCount.set(trough);
+            BigDecimal peak  = peakCount.get().add(r.getPeakPower());
+            peakCount.set(peak);
+
+        });
+        PeakValleyPieChatVO peakValleyPieChatVO = new PeakValleyPieChatVO();
+        BigDecimal total = peakCount.get().add(tipCount.get()).add(troughCount.get()).add(flatCount.get()).multiply(new BigDecimal(0.01));
+        if(total.compareTo(BigDecimal.ZERO) > 0) {
+            peakValleyPieChatVO.setPeak(peakCount.get().divide(total, 2, RoundingMode.HALF_UP).toString());
+            peakValleyPieChatVO.setFlat(flatCount.get().divide(total, 2, RoundingMode.HALF_UP).toString());
+            peakValleyPieChatVO.setTip(tipCount.get().divide(total, 2, RoundingMode.HALF_UP).toString());
+            peakValleyPieChatVO.setTrough(troughCount.get().divide(total, 2, RoundingMode.HALF_UP).toString());
+        }else {
+            peakValleyPieChatVO.setPeak("0");
+            peakValleyPieChatVO.setFlat("0");
+            peakValleyPieChatVO.setTip("0");
+            peakValleyPieChatVO.setTrough("0");
+        }
+        peakValleyVO.setPieChat(peakValleyPieChatVO);
+        peakValleyVO.setLineChat(peakValleyLineChatVOS);
+        return peakValleyVO;
+    }
+
+    @Override
+    public List<PeakValleyHourDataVO> segmentAnalysisHourExport(PeakValleyDTO dto) {
+        List<PeakValleyHourDataVO> reportVOList = new ArrayList<>();
+        // 鏌ヨ鏃堕棿鑼冨洿
+        Date startTime = DateUtil.beginOfDay(dto.getQueryTime());
+        Date endTime = DateUtil.endOfDay(startTime);
+        String timeType = dto.getTimeType();
+
+        Map<String, List<ElectricityDataItem>> electricityDataMap = new HashMap<>();
+        // 鏌ヨ鐐逛綅淇℃伅
+        List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(dto.getModelCode(), dto.getNodeId());
+        if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
+            Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
+            List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatistics(indexSet, startTime, endTime, timeType);
+
+            electricityDataMap = dataItemList.stream()
+                    .collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime())));
+        }
+        while (!startTime.after(endTime)) {
+            String mapKey = DateUtil.formatDateTime(startTime);
+            List<ElectricityDataItem> dataItemList = electricityDataMap.get(mapKey);
+
+            BigDecimal sharpFee = BigDecimal.ZERO;
+            BigDecimal sharpPower = BigDecimal.ZERO;
+            BigDecimal peakFee = BigDecimal.ZERO;
+            BigDecimal peakPower = BigDecimal.ZERO;
+            BigDecimal flatFee = BigDecimal.ZERO;
+            BigDecimal flatPower = BigDecimal.ZERO;
+            BigDecimal valleyFee = BigDecimal.ZERO;
+            BigDecimal valleyPower = BigDecimal.ZERO;
+
+            if (CollectionUtils.isNotEmpty(dataItemList)) {
+                for (ElectricityDataItem electricityDataItem : dataItemList) {
+                    String electricityType = electricityDataItem.getElectricityType();
+
+                    if (ElectricityTypeEnum.SHARP.name().equals(electricityType)) {
+                        sharpFee = sharpFee.add(electricityDataItem.getCost());
+                        sharpPower = sharpPower.add(electricityDataItem.getElectricity());
+                    } else if (ElectricityTypeEnum.PEAK.name().equals(electricityType)) {
+                        peakFee = peakFee.add(electricityDataItem.getCost());
+                        peakPower = peakPower.add(electricityDataItem.getElectricity());
+                    } else if (ElectricityTypeEnum.FLAT.name().equals(electricityType)) {
+                        flatFee = flatFee.add(electricityDataItem.getCost());
+                        flatPower = flatPower.add(electricityDataItem.getElectricity());
+                    } else {
+                        valleyFee = valleyFee.add(electricityDataItem.getCost());
+                        valleyPower = valleyPower.add(electricityDataItem.getElectricity());
+                    }
+                }
+            }
+            PeakValleyHourDataVO peakAndValleyReportVO = new PeakValleyHourDataVO(startTime, sharpFee, sharpPower,
+                    peakFee, peakPower, flatFee, flatPower, valleyFee, valleyPower);
+
+            reportVOList.add(peakAndValleyReportVO);
+            switch (TimeType.valueOf(timeType)) {
+                case HOUR:
+                    startTime = DateUtil.offsetHour(startTime, 1);
+                    break;
+                case DAY:
+                    startTime = DateUtil.offsetDay(startTime, 1);
+                    break;
+                case MONTH:
+                    startTime = DateUtil.offsetMonth(startTime, 1);
+                    break;
+                default:
+                    startTime = DateUtil.offsetMonth(startTime, 12);
+                    break;
+            }
+        }
+
+       return reportVOList;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/productoutput/domain/ProductOutput.java b/zhitan-system/src/main/java/com/zhitan/productoutput/domain/ProductOutput.java
new file mode 100644
index 0000000..570ecd6
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/productoutput/domain/ProductOutput.java
@@ -0,0 +1,165 @@
+package com.zhitan.productoutput.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.math.BigDecimal;
+
+/**
+ * 浜у搧浜ч噺瀵硅薄 product_output
+ *
+ * @author ZhiTan
+ * @date 2024-10-08
+ */
+@TableName("product_output")
+public class ProductOutput extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** productOutputId */
+    @Excel(name = "productOutputId")
+    private String productOutputId;
+
+    /** 鐢ㄨ兘鍗曞厓id锛坢odel_node锛� */
+    @Excel(name = "鐢ㄨ兘鍗曞厓id")
+    private String nodeId;
+
+    /** 鐢ㄨ兘鍗曞厓id锛坢odel_node锛� */
+    @Excel(name = "鐢ㄨ兘鍗曞厓鍚嶇О")
+    private String nodeName;
+
+    /** 鏃堕棿绫诲瀷锛堝勾銆佹湀銆佹棩锛� */
+    @Excel(name = "鏃堕棿绫诲瀷")
+    private String timeType;
+
+    /** 鏃堕棿 */
+    @Excel(name = "鏃堕棿")
+    private String dataTime;
+
+    /** 鍚嶇О */
+    @Excel(name = "鍚嶇О")
+    private String name;
+
+    /** 浜ч噺 */
+    @Excel(name = "浜ч噺")
+    private BigDecimal number;
+
+    /** 鍗曚綅 */
+    @Excel(name = "鍗曚綅")
+    private String unit;
+
+    /** 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛� */
+    private String delFlag;
+
+    /** 1浜ч噺2浠〃3鎸囨爣 */
+    @Excel(name = "1浜ч噺2浠〃3鎸囨爣")
+    private String dataType;
+
+    /** productOutputId */
+    @Excel(name = "productType")
+    private String productType;
+
+    public String getProductType() {
+        return productType;
+    }
+
+    public void setProductType(String productType) {
+        this.productType = productType;
+    }
+
+    public String getProductOutputId() {
+        return productOutputId;
+    }
+
+    public void setProductOutputId(String productOutputId) {
+        this.productOutputId = productOutputId;
+    }
+
+    public void setNodeId(String nodeId){
+        this.nodeId = nodeId;
+    }
+
+    public String getNodeId() {
+        return nodeId;
+    }
+    public void setTimeType(String timeType) {
+        this.timeType = timeType;
+    }
+
+    public String getTimeType() {
+        return timeType;
+    }
+    public void setDataTime(String dataTime) {
+        this.dataTime = dataTime;
+    }
+
+    public String getDataTime() {
+        return dataTime;
+    }
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+    public void setNumber(BigDecimal number) {
+        this.number = number;
+    }
+
+    public BigDecimal getNumber() {
+        return number;
+    }
+    public void setUnit(String unit) {
+        this.unit = unit;
+    }
+
+    public String getUnit() {
+        return unit;
+    }
+    public void setDelFlag(String delFlag) {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() {
+        return delFlag;
+    }
+    public void setDataType(String dataType) {
+        this.dataType = dataType;
+    }
+
+    public String getDataType() {
+        return dataType;
+    }
+
+    public String getNodeName() {
+        return nodeName;
+    }
+
+    public void setNodeName(String nodeName) {
+        this.nodeName = nodeName;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("productOutputId", getProductOutputId())
+            .append("nodeId", getNodeId())
+            .append("nodeName", getNodeName())
+            .append("timeType", getTimeType())
+            .append("dataTime", getDataTime())
+            .append("name", getName())
+            .append("number", getNumber())
+            .append("unit", getUnit())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .append("dataType", getDataType())
+        .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/productoutput/mapper/ProductOutputMapper.java b/zhitan-system/src/main/java/com/zhitan/productoutput/mapper/ProductOutputMapper.java
new file mode 100644
index 0000000..10fd88f
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/productoutput/mapper/ProductOutputMapper.java
@@ -0,0 +1,62 @@
+package com.zhitan.productoutput.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.productoutput.domain.ProductOutput;
+
+import java.util.List;
+
+/**
+ * 浜у搧浜ч噺Mapper鎺ュ彛
+ *
+ * @author ZhiTan
+ * @date 2024-10-08
+ */
+public interface ProductOutputMapper extends BaseMapper<ProductOutput> {
+    /**
+     * 鏌ヨ浜у搧浜ч噺
+     *
+     * @param nodeId 浜у搧浜ч噺涓婚敭
+     * @return 浜у搧浜ч噺
+     */
+    public ProductOutput selectProductOutputById(String nodeId);
+
+    /**
+     * 鏌ヨ浜у搧浜ч噺鍒楄〃
+     *
+     * @param productOutput 浜у搧浜ч噺
+     * @return 浜у搧浜ч噺闆嗗悎
+     */
+    public List<ProductOutput> selectProductOutputList(ProductOutput productOutput);
+
+    /**
+     * 鏂板浜у搧浜ч噺
+     *
+     * @param productOutput 浜у搧浜ч噺
+     * @return 缁撴灉
+     */
+    public int insertProductOutput(ProductOutput productOutput);
+
+    /**
+     * 淇敼浜у搧浜ч噺
+     *
+     * @param productOutput 浜у搧浜ч噺
+     * @return 缁撴灉
+     */
+    public int updateProductOutput(ProductOutput productOutput);
+
+    /**
+     * 鍒犻櫎浜у搧浜ч噺
+     *
+     * @param nodeId 浜у搧浜ч噺涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteProductOutputById(String nodeId);
+
+    /**
+     * 鎵归噺鍒犻櫎浜у搧浜ч噺
+     *
+     * @param nodeIds 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteProductOutputByIds(String[] nodeIds);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/productoutput/services/IProductOutputService.java b/zhitan-system/src/main/java/com/zhitan/productoutput/services/IProductOutputService.java
new file mode 100644
index 0000000..1438996
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/productoutput/services/IProductOutputService.java
@@ -0,0 +1,65 @@
+package com.zhitan.productoutput.services;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhitan.productoutput.domain.ProductOutput;
+
+import java.util.List;
+
+/**
+ * 浜у搧浜ч噺Service鎺ュ彛
+ *
+ * @author ZhiTan
+ * @date 2024-10-08
+ */
+public interface IProductOutputService extends IService<ProductOutput> {
+    /**
+     * 鏌ヨ浜у搧浜ч噺
+     *
+     * @param nodeId 浜у搧浜ч噺涓婚敭
+     * @return 浜у搧浜ч噺
+     */
+    public ProductOutput selectProductOutputById(String nodeId);
+
+    /**
+     * 鏌ヨ浜у搧浜ч噺鍒楄〃
+     *
+     * @param productOutput 浜у搧浜ч噺
+     * @return 浜у搧浜ч噺闆嗗悎
+     */
+    public List<ProductOutput> selectProductOutputList(ProductOutput productOutput);
+
+    /**
+     * 鏂板浜у搧浜ч噺
+     *
+     * @param productOutput 浜у搧浜ч噺
+     * @return 缁撴灉
+     */
+    public int insertProductOutput(ProductOutput productOutput);
+
+    /**
+     * 淇敼浜у搧浜ч噺
+     *
+     * @param productOutput 浜у搧浜ч噺
+     * @return 缁撴灉
+     */
+    public int updateProductOutput(ProductOutput productOutput);
+
+    /**
+     * 鎵归噺鍒犻櫎浜у搧浜ч噺
+     *
+     * @param nodeIds 闇�瑕佸垹闄ょ殑浜у搧浜ч噺涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteProductOutputByIds(String[] nodeIds);
+
+    /**
+     * 鍒犻櫎浜у搧浜ч噺淇℃伅
+     *
+     * @param nodeId 浜у搧浜ч噺涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteProductOutputById(String nodeId);
+
+    Page<ProductOutput> selectProductOutputPage(ProductOutput productOutput, Long pageNum, Long pageSize);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/productoutput/services/impl/ProductOutputServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/productoutput/services/impl/ProductOutputServiceImpl.java
new file mode 100644
index 0000000..f2b6829
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/productoutput/services/impl/ProductOutputServiceImpl.java
@@ -0,0 +1,108 @@
+package com.zhitan.productoutput.services.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhitan.common.utils.DateUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.productoutput.domain.ProductOutput;
+import com.zhitan.productoutput.mapper.ProductOutputMapper;
+import com.zhitan.productoutput.services.IProductOutputService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 浜у搧浜ч噺Service涓氬姟灞傚鐞�
+ *
+ * @author ZhiTan
+ * @date 2024-10-08
+ */
+@Service
+public class ProductOutputServiceImpl extends ServiceImpl<ProductOutputMapper, ProductOutput> implements IProductOutputService {
+    @Autowired
+    private ProductOutputMapper productOutputMapper;
+
+    /**
+     * 鏌ヨ浜у搧浜ч噺
+     *
+     * @param nodeId 浜у搧浜ч噺涓婚敭
+     * @return 浜у搧浜ч噺
+     */
+    @Override
+    public ProductOutput selectProductOutputById(String nodeId) {
+        return productOutputMapper.selectProductOutputById(nodeId);
+    }
+
+    /**
+     * 鏌ヨ浜у搧浜ч噺鍒楄〃
+     *
+     * @param productOutput 浜у搧浜ч噺
+     * @return 浜у搧浜ч噺
+     */
+    @Override
+    public List<ProductOutput> selectProductOutputList(ProductOutput productOutput) {
+        return productOutputMapper.selectProductOutputList(productOutput);
+    }
+
+    /**
+     * 鏂板浜у搧浜ч噺
+     *
+     * @param productOutput 浜у搧浜ч噺
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertProductOutput(ProductOutput productOutput) {
+        productOutput.setCreateTime(DateUtils.getNowDate());
+        return productOutputMapper.insertProductOutput(productOutput);
+    }
+
+    /**
+     * 淇敼浜у搧浜ч噺
+     *
+     * @param productOutput 浜у搧浜ч噺
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateProductOutput(ProductOutput productOutput) {
+                productOutput.setUpdateTime(DateUtils.getNowDate());
+        return productOutputMapper.updateProductOutput(productOutput);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎浜у搧浜ч噺
+     *
+     * @param nodeIds 闇�瑕佸垹闄ょ殑浜у搧浜ч噺涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteProductOutputByIds(String[] nodeIds) {
+        return productOutputMapper.deleteProductOutputByIds(nodeIds);
+    }
+
+    /**
+     * 鍒犻櫎浜у搧浜ч噺淇℃伅
+     *
+     * @param nodeId 浜у搧浜ч噺涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteProductOutputById(String nodeId) {
+        return productOutputMapper.deleteProductOutputById(nodeId);
+    }
+
+    @Override
+    public Page<ProductOutput> selectProductOutputPage(ProductOutput productOutput, Long pageNum, Long pageSize) {
+        LambdaQueryWrapper<ProductOutput> wrapper = new LambdaQueryWrapper<>();
+        wrapper.like(StringUtils.isNotEmpty(productOutput.getName()),ProductOutput::getName,productOutput.getName());
+        wrapper.between(StringUtils.isNotEmpty(productOutput.getBeginTime()),ProductOutput::getDataTime,productOutput.getBeginTime(),productOutput.getEndTime());
+        wrapper.eq(StringUtils.isNotEmpty(productOutput.getDataType()),ProductOutput::getDataType,productOutput.getDataType());
+        wrapper.like(StringUtils.isNotEmpty(productOutput.getDataTime()),ProductOutput::getDataTime,productOutput.getDataTime());
+        wrapper.eq(StringUtils.isNotEmpty(productOutput.getProductType()),ProductOutput::getProductType,productOutput.getProductType());
+        wrapper.eq(StringUtils.isNotEmpty(productOutput.getNodeId()),ProductOutput::getNodeId,productOutput.getNodeId());
+        wrapper.orderByDesc(ProductOutput::getCreateTime);
+        Page<ProductOutput> page = productOutputMapper.selectPage(new Page<ProductOutput>(pageNum, pageSize), wrapper);
+        return page;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/config/RtdbConfig.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/config/RtdbConfig.java
new file mode 100644
index 0000000..a91da2b
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/config/RtdbConfig.java
@@ -0,0 +1,22 @@
+package com.zhitan.realtimedata.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author fanxinfu
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "rtdb")
+public class RtdbConfig {
+
+  public String org;
+
+  public String host;
+
+  public String token;
+
+  public String bucket;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/data/VirtualRtdb.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/data/VirtualRtdb.java
new file mode 100644
index 0000000..7dfb3f7
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/data/VirtualRtdb.java
@@ -0,0 +1,167 @@
+package com.zhitan.realtimedata.data;
+
+import com.zhitan.common.enums.CollectionModes;
+import com.zhitan.common.enums.Quality;
+import com.zhitan.common.enums.RetrievalModes;
+import com.zhitan.realtimedata.domain.TagValue;
+import com.zhitan.realtimedata.service.RealtimeDatabase;
+import org.joda.time.DateTime;
+import org.joda.time.Seconds;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Random;
+
+public class VirtualRtdb implements RealtimeDatabase {
+
+  /**
+   * 鍏抽棴杩炴帴
+   */
+  @Override
+  public void close() {
+
+  }
+
+  /**
+   * 鏍规嵁鐐逛綅鍙疯幏鍙栧疄鏃舵暟鎹�
+   *
+   * @param tagCodes 鐐逛綅鍙峰垪琛�
+   * @return
+   */
+  @Override
+  public List<TagValue> retrieve(List<String> tagCodes) throws Exception {
+    List<TagValue> tagValues = new ArrayList<>();
+    Random random = new Random();
+    tagCodes.forEach(tagCode -> {
+      TagValue value = new TagValue();
+      value.setTagCode(tagCode);
+      value.setDataTime(DateTime.now().toDate());
+      value.setQuality(Quality.GOOD);
+      value.setValue(random.nextDouble() * 100);
+      tagValues.add(value);
+    });
+
+    return tagValues;
+  }
+
+  /**
+   * 鏍规嵁鐐逛綅鍙疯幏鍙栨煇涓�鏃跺埢鐨勫巻鍙叉暟鎹�
+   *
+   * @param tagCodes 鐐逛綅鍙烽泦鍚�
+   * @param dataTime 鍘嗗彶鏃跺埢
+   * @param timeCode 鍖哄垎鏃堕棿绫诲瀷鐨則ime code
+   * @return
+   */
+  @Override
+  public List<TagValue> retrieve(List<String> tagCodes, Date dataTime,String timeCode) throws Exception {
+    List<TagValue> tagValues = new ArrayList<>();
+    Random random = new Random();
+    tagCodes.forEach(tagCode -> {
+      TagValue value = new TagValue();
+      value.setTagCode(tagCode);
+      value.setDataTime(dataTime);
+      value.setQuality(Quality.GOOD);
+      value.setValue(random.nextDouble() * 100);
+      tagValues.add(value);
+    });
+
+    return tagValues;
+  }
+
+  /**
+   * 鏍规嵁鏌ヨ鏂瑰紡鑾峰彇涓�娈垫椂闂村唴鐨勫巻鍙叉暟鎹�
+   *
+   * @param tagCodes       鐐逛綅鍙烽泦鍚�
+   * @param beginTime      寮�濮嬫椂闂�
+   * @param endTime        缁撴潫鏃堕棿
+   * @param retrievalModes 鏌ヨ鏂瑰紡锛堝惊鐜�佹嫙鍚堛�佸叏閮級
+   * @param pointCount     瑕佹煡璇㈢殑鏁版嵁涓暟
+   * @return
+   */
+  @Override
+  public List<TagValue> retrieve(List<String> tagCodes, Date beginTime, Date endTime,
+                                 RetrievalModes retrievalModes, int pointCount) throws Exception {
+    List<TagValue> tagValues = new ArrayList<>();
+    Random random = new Random();
+    pointCount = retrievalModes == RetrievalModes.Full ? 200 : pointCount;
+    int finalPointCount = pointCount;
+    int span =
+        Seconds.secondsBetween(new DateTime(beginTime), new DateTime(endTime)).getSeconds();
+    int interval = span / finalPointCount;
+    tagCodes.forEach(tagCode -> {
+      for (int i = 1; i <= finalPointCount; i++) {
+        TagValue value = new TagValue();
+        value.setTagCode(tagCode);
+        value.setDataTime(new DateTime(beginTime).plusSeconds(interval * i).toDate());
+        value.setQuality(Quality.GOOD);
+        value.setValue(random.nextDouble() * 100);
+        tagValues.add(value);
+      }
+    });
+
+    return tagValues;
+  }
+
+  /**
+   * 姹囨�诲疄鏃舵暟鎹�
+   *
+   * @param tagCodes        鐐逛綅鍙烽泦鍚�
+   * @param beginTime       寮�濮嬫椂闂�
+   * @param endTime         缁撴潫鏃堕棿
+   * @param collectionModes 姹囨�绘柟寮忥紙鏈�澶у�笺�佹渶灏忓�笺�佸钩鍧囧�笺�佹眰鍜岀瓑锛�
+   * @return
+   */
+  @Override
+  public List<TagValue> statistics(List<String> tagCodes, Date beginTime, Date endTime,
+      CollectionModes collectionModes) throws Exception {
+    List<TagValue> tagValues = new ArrayList<>();
+    Random random = new Random();
+    tagCodes.forEach(tagCode -> {
+      TagValue value = new TagValue();
+      value.setTagCode(tagCode);
+      value.setDataTime(beginTime);
+      value.setQuality(Quality.GOOD);
+      value.setValue(random.nextDouble() * 1000);
+      tagValues.add(value);
+    });
+
+    return tagValues;
+  }
+
+  /**
+   * 鎻掑叆瀹炴椂鏁版嵁
+   *
+   * @param tagValues 瀹炴椂鏁版嵁闆嗗悎
+   * @return
+   */
+  @Override
+  public Boolean storeData(List<TagValue> tagValues) throws Exception {
+    return true;
+  }
+
+  /**
+   * 鎻掑叆鍘嗗彶鏁版嵁
+   *
+   * @param tagValues 鍘嗗彶鏁版嵁闆嗗悎
+   * @return
+   */
+  @Override
+  public Boolean insertData(List<TagValue> tagValues) throws Exception {
+    return true;
+  }
+
+  /**
+   * 鎵撳紑杩炴帴
+   *
+   * @param host     瀹炴椂鏁版嵁搴撳湴鍧�
+   * @param port     绔彛鍙�
+   * @param userName 鐧诲綍鐢ㄦ埛鍚�
+   * @param pwd      鐧诲綍瀵嗙爜
+   * @return 鏄惁杩炴帴鎴愬姛
+   */
+  @Override
+  public boolean open(String host, int port, String userName, String pwd) throws Exception {
+    return true;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/data/influxdb/InfluxDBRepository.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/data/influxdb/InfluxDBRepository.java
new file mode 100644
index 0000000..0e0af58
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/data/influxdb/InfluxDBRepository.java
@@ -0,0 +1,231 @@
+package com.zhitan.realtimedata.data.influxdb;
+
+import com.influxdb.client.InfluxDBClient;
+import com.influxdb.client.InfluxDBClientFactory;
+import com.influxdb.client.QueryApi;
+import com.influxdb.client.WriteApiBlocking;
+import com.influxdb.client.domain.HealthCheck;
+import com.influxdb.client.domain.WritePrecision;
+import com.influxdb.query.FluxRecord;
+import com.influxdb.query.FluxTable;
+import com.zhitan.common.enums.CollectionModes;
+import com.zhitan.common.enums.GroupTimeType;
+import com.zhitan.common.enums.Quality;
+import com.zhitan.realtimedata.config.RtdbConfig;
+import com.zhitan.realtimedata.domain.TagValue;
+import com.zhitan.realtimedata.domain.WritePoint;
+import lombok.extern.slf4j.Slf4j;
+import org.joda.time.DateTime;
+import org.joda.time.Duration;
+import org.springframework.stereotype.Repository;
+
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 瀹炴椂搴撳垵杩炴帴
+ *
+ * @Author: Zhujw
+ * @Date: 2023/5/24
+ */
+@Repository
+@Slf4j
+public class InfluxDBRepository {
+
+    private final RtdbConfig config;
+
+    private InfluxDBClient client;
+
+    public InfluxDBRepository(RtdbConfig config) {
+        this.config = config;
+        connectInfluxDB();
+    }
+
+    private void connectInfluxDB() {
+        char[] token = config.getToken().toCharArray();
+        if (client == null) {
+            client = InfluxDBClientFactory.create(config.getHost(), token, config.getOrg(),
+                    config.getBucket());
+        }
+        log.error("--------------------瀹炴椂鏁版嵁搴撹繛鎺ユ垚鍔�--------------------");
+        HealthCheck health = client.health();
+        if (health.getStatus() == HealthCheck.StatusEnum.FAIL) {
+            client.close();
+            client = InfluxDBClientFactory.create(config.getHost(), token, config.getOrg(),
+                    config.getBucket());
+        }
+    }
+
+    public void store(List<TagValue> tagValues) {
+        WriteApiBlocking write = client.getWriteApiBlocking();
+        List<WritePoint> writePoints = new ArrayList<>();
+        tagValues.forEach(tagValue -> {
+            WritePoint point = new WritePoint(tagValue.getTagCode(), tagValue.getValue(),
+                    Instant.ofEpochMilli(tagValue.getDataTime().getTime()));
+            writePoints.add(point);
+        });
+        write.writeMeasurements(WritePrecision.MS, writePoints);
+    }
+
+    public TagValue query(String tagCode, Date time) {
+        List<TagValue> values = query(Collections.singletonList(tagCode), time);
+        return !values.isEmpty() ? values.get(0) : new TagValue();
+    }
+
+    public TagValue query(String tagCode) {
+        List<TagValue> values = query(Collections.singletonList(tagCode));
+        return !values.isEmpty() ? values.get(0) : new TagValue();
+    }
+
+    public List<TagValue> query(List<String> tagCodes, Date time) {
+        DateTime endTime = new DateTime(time);
+        DateTime beginTime = endTime.plusDays(-1);
+        return getTagValues(beginTime, endTime, tagCodes);
+    }
+
+    public List<TagValue> query(List<String> tagCodes) {
+        DateTime beginTime = DateTime.now().plusDays(-1);
+        DateTime endTime = DateTime.now();
+        return getTagValues(beginTime, endTime, tagCodes);
+    }
+
+    /**
+     * 鑾峰彇涓�涓皬鏃跺唴鎵�鏈夋暟鎹�
+     *
+     * @param tagCodes 娴嬬偣缂栧彿
+     * @param time     寮�濮嬫椂闂�
+     * @return 娴嬬偣缁熻缁撴灉
+     */
+    public List<TagValue> queryOneHour(List<String> tagCodes, Date time) {
+        DateTime beginTime = new DateTime(time);
+        DateTime endTime = beginTime.plusHours(1);
+        return getHistoryData(tagCodes, beginTime.toDate(), endTime.toDate());
+    }
+
+    private List<TagValue> getHistoryData(List<String> tagCodes, Date beginTime, Date endTime) {
+        DateTime begin = new DateTime(beginTime);
+        DateTime end = new DateTime(endTime);
+        StringBuilder timeRange = new StringBuilder()
+                .append("|> range(start: ").append(Instant.ofEpochMilli(begin.getMillis()).toString())
+                .append(", stop: ").append(Instant.ofEpochMilli(end.getMillis()).toString())
+                .append(")");
+        StringBuilder fluxSql = getStringBuilder(timeRange,
+                tagCodes);
+        log.info(String.valueOf(fluxSql));
+        return getTagValues(fluxSql);
+    }
+
+    public List<TagValue> getHistoryData(List<String> tagCodes, Date beginTime, Date endTime,
+                                         long interval) {
+        DateTime begin = new DateTime(beginTime);
+        DateTime end = new DateTime(endTime);
+        StringBuilder timeRange = new StringBuilder()
+                .append("|> range(start: ").append(Instant.ofEpochMilli(begin.getMillis()).toString())
+                .append(", stop: ").append(Instant.ofEpochMilli(end.getMillis()).toString())
+                .append(")");
+        StringBuilder fluxSql = getStringBuilder(timeRange, tagCodes);
+        fluxSql.append("|> aggregateWindow(every: ").append(interval)
+                .append("s, fn: last, createEmpty:  false)");
+        log.info(String.valueOf(fluxSql));
+        return getTagValues(fluxSql);
+    }
+
+    public List<TagValue> getHistoryData(List<String> tagCodes, Date beginTime, Date endTime,
+                                         int pointCount) {
+        DateTime begin = new DateTime(beginTime);
+        DateTime end = new DateTime(endTime);
+        long millis = new Duration(begin, end).getMillis();
+        long interval = millis / pointCount / 1000;
+        return getHistoryData(tagCodes, beginTime, endTime, interval);
+    }
+
+    private StringBuilder getStringBuilder(StringBuilder timeRange,
+                                           List<String> tagCodes) {
+        StringBuilder fluxSql = new StringBuilder();
+        fluxSql.append("from(bucket: \"").append(config.getBucket()).append("\")")
+                .append(timeRange).append("|> filter(fn: (r) => r[\"_measurement\"] == \"")
+                .append("meilin\")");
+        if (!tagCodes.isEmpty()) {
+            fluxSql.append("|> filter(fn: (r) => r[\"tag\"] =~ /");
+            List<String> filter = new ArrayList<>(tagCodes);
+            fluxSql.append(String.join("|", filter));
+            fluxSql.append("/)");
+        }
+        fluxSql.append("|> group(columns: [\"tag\"])");
+        log.info(String.valueOf(fluxSql));
+        return fluxSql;
+    }
+
+    private List<TagValue> getTagValues(StringBuilder fluxSql) {
+        QueryApi query = client.getQueryApi();
+
+        List<FluxTable> tables = query.query(fluxSql.toString());
+
+        List<TagValue> values = new ArrayList<>();
+        for (FluxTable fluxTable : tables) {
+            List<FluxRecord> records = fluxTable.getRecords();
+            for (FluxRecord fluxRecord : records) {
+                String tag = String.valueOf(fluxRecord.getValueByKey("tag"));
+                Double value = (Double) fluxRecord.getValueByKey("_value");
+                Date time = fluxRecord.getTime() == null ? null
+                        : new DateTime(fluxRecord.getTime().toString()).toDate();
+                TagValue tagValue = new TagValue();
+                tagValue.setValue(value);
+                tagValue.setDataTime(time);
+                tagValue.setTagCode(tag);
+                tagValue.setQuality(Quality.GOOD);
+                values.add(tagValue);
+            }
+        }
+        return values;
+    }
+
+    public List<TagValue> statistics(List<String> tagCodes, Date beginTime, Date endTime,
+                                     CollectionModes queryType) {
+        DateTime begin = new DateTime(beginTime);
+        DateTime end = new DateTime(endTime);
+        return getTagValues(begin, end, tagCodes, queryType);
+    }
+
+    public List<TagValue> statistics(List<String> tagCodes, Date beginTime, Date endTime,
+                                     CollectionModes queryType, GroupTimeType timeType) {
+        DateTime begin = new DateTime(beginTime);
+        DateTime end = new DateTime(endTime);
+        StringBuilder timeRange = new StringBuilder()
+                .append("|> range(start: ").append(Instant.ofEpochMilli(begin.getMillis()).toString())
+                .append(", stop: ").append(Instant.ofEpochMilli(end.getMillis()).toString())
+                .append(")");
+        StringBuilder fluxSql = getStringBuilder(timeRange, tagCodes);
+        fluxSql.append("|> aggregateWindow(every: 1")
+                .append(timeType.name())
+                .append(", fn: ")
+                .append(queryType.name())
+                .append(", createEmpty: false)")
+                .append("|>yield(name: \"")
+                .append(queryType.name())
+                .append("\")");
+        log.info(String.valueOf(fluxSql));
+        return getTagValues(fluxSql);
+    }
+
+    private List<TagValue> getTagValues(DateTime begin, DateTime end, List<String> tagCodes) {
+        return getTagValues(begin, end, tagCodes, CollectionModes.last);
+    }
+
+    private List<TagValue> getTagValues(DateTime begin, DateTime end, List<String> tagCodes,
+                                        CollectionModes queryType) {
+        StringBuilder timeRange = new StringBuilder()
+                .append("|> range(start: ").append(Instant.ofEpochMilli(begin.getMillis()).toString())
+                .append(", stop: ").append(Instant.ofEpochMilli(end.getMillis()).toString())
+                .append(")");
+        StringBuilder fluxSql = getStringBuilder(timeRange, tagCodes);
+        fluxSql.append("|> ");
+        fluxSql.append(queryType.name());
+        fluxSql.append("()");
+        log.info(String.valueOf(fluxSql));
+        return getTagValues(fluxSql);
+    }
+}
\ No newline at end of file
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/data/influxdb/QueryType.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/data/influxdb/QueryType.java
new file mode 100644
index 0000000..8c33911
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/data/influxdb/QueryType.java
@@ -0,0 +1,45 @@
+package com.zhitan.realtimedata.data.influxdb;
+
+/**
+ * @author 鑼冩柊瀵�
+ * <p>
+ * 鑾峰彇瀹炴椂鏁版嵁鏂瑰紡.
+ */
+public enum QueryType {
+  /**
+   * 鍘熷
+   */
+  FULL,
+  /**
+   * 鎻掑��
+   */
+  MEAN,
+  /**
+   * 鏈�灏�
+   */
+  MIN,
+  /**
+   * 鏈�澶�
+   */
+  MAX,
+  /**
+   * 鏈�鏃�
+   */
+  FIRST,
+  /**
+   * 鏈�鍚�
+   */
+  LAST,
+  /**
+   * 涓綅鏁�
+   */
+  MEDIAN,
+  /**
+   * 姹傚拰
+   */
+  SUM,
+  /**
+   * 绉垎
+   */
+  INTEGRAL
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/DataItem.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/DataItem.java
new file mode 100644
index 0000000..e5127f0
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/DataItem.java
@@ -0,0 +1,168 @@
+package com.zhitan.realtimedata.domain;
+
+import com.zhitan.common.enums.Quality;
+import com.zhitan.common.enums.TimeType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 鍛ㄦ湡鏁版嵁椤�.
+ */
+@ApiModel(value = "dataItem瀵硅薄")
+public class DataItem implements Serializable {
+  private static final long serialVersionUID = -2777479013884125925L;
+
+  @ApiModelProperty(value = "鎸囨爣id")
+  private String indexId;
+  @ApiModelProperty(value = "鎸囨爣搴搃d")
+  private String indexStorageId;
+  @ApiModelProperty(value = "鎸囨爣code")
+  private String indexCode;
+  @ApiModelProperty(value = "鎸囨爣鍚嶇О")
+  private String indexName;
+  @ApiModelProperty(value = "寮�濮嬫椂闂�")
+  private Date beginTime;
+  @ApiModelProperty(value = "缁撴潫鏃堕棿")
+  private Date endTime;
+  @ApiModelProperty(value = "鏃ユ湡")
+  private Date dataTime;
+  @ApiModelProperty(value = "鏃堕棿绫诲瀷缂栫爜")
+  private String timeCode;
+  @ApiModelProperty(value = "鏃堕棿绫诲瀷")
+  private TimeType timeType;
+  @ApiModelProperty(value = "鍊�")
+  private Double value;
+  @ApiModelProperty(value = "璐ㄩ噺")
+  private Quality quality;
+  @ApiModelProperty(value = "")
+  private String unitId;
+  @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+  private Date createTime;
+  @ApiModelProperty(value = "鏇存柊鏃堕棿")
+  private Date updateTime;
+  @ApiModelProperty(value = "澶囨敞")
+  private String remark;
+
+  public String getIndexId() {
+    return indexId;
+  }
+
+  public void setIndexId(String indexId) {
+    this.indexId = indexId;
+  }
+
+  public String getIndexStorageId() {
+    return indexStorageId;
+  }
+
+  public void setIndexStorageId(String indexStorageId) {
+    this.indexStorageId = indexStorageId;
+  }
+
+  public String getIndexCode() {
+    return indexCode;
+  }
+
+  public void setIndexCode(String indexCode) {
+    this.indexCode = indexCode;
+  }
+
+  public String getIndexName() {
+    return indexName;
+  }
+
+  public void setIndexName(String indexName) {
+    this.indexName = indexName;
+  }
+
+  public Date getBeginTime() {
+    return beginTime;
+  }
+
+  public void setBeginTime(Date beginTime) {
+    this.beginTime = beginTime;
+  }
+
+  public Date getEndTime() {
+    return endTime;
+  }
+
+  public void setEndTime(Date endTime) {
+    this.endTime = endTime;
+  }
+
+  public Date getDataTime() {
+    return dataTime;
+  }
+
+  public void setDataTime(Date dataTime) {
+    this.dataTime = dataTime;
+  }
+
+  public String getTimeCode() {
+    return timeCode;
+  }
+
+  public void setTimeCode(String timeCode) {
+    this.timeCode = timeCode;
+  }
+
+  public TimeType getTimeType() {
+    return timeType;
+  }
+
+  public void setTimeType(TimeType timeType) {
+    this.timeType = timeType;
+  }
+
+  public Double getValue() {
+    return value;
+  }
+
+  public void setValue(Double value) {
+    this.value = value;
+  }
+
+  public Quality getQuality() {
+    return quality;
+  }
+
+  public void setQuality(Quality quality) {
+    this.quality = quality;
+  }
+
+  public String getUnitId() {
+    return unitId;
+  }
+
+  public void setUnitId(String unitId) {
+    this.unitId = unitId;
+  }
+
+  public Date getCreateTime() {
+    return createTime;
+  }
+
+  public void setCreateTime(Date createTime) {
+    this.createTime = createTime;
+  }
+
+  public Date getUpdateTime() {
+    return updateTime;
+  }
+
+  public void setUpdateTime(Date updateTime) {
+    this.updateTime = updateTime;
+  }
+
+  public String getRemark() {
+    return remark;
+  }
+
+  public void setRemark(String remark) {
+    this.remark = remark;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/ElectricityDataDetail.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/ElectricityDataDetail.java
new file mode 100644
index 0000000..f747166
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/ElectricityDataDetail.java
@@ -0,0 +1,157 @@
+package com.zhitan.realtimedata.domain;
+
+import com.zhitan.common.enums.TimeType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 鍛ㄦ湡鏁版嵁椤�.
+ */
+@ApiModel(value = "dataItem瀵硅薄")
+public class ElectricityDataDetail implements Serializable {
+    private static final long serialVersionUID = -2777479013884125925L;
+
+    @ApiModelProperty(value = "鎸囨爣id")
+    private String indexId;
+    @ApiModelProperty(value = "鏃堕棿绫诲瀷缂栫爜")
+    private String timeCode;
+    @ApiModelProperty(value = "灏栧嘲骞宠胺鐨勭被鍨�")
+    private String electricityType;
+    @ApiModelProperty(value = "鎸囨爣code")
+    private String indexCode;
+    @ApiModelProperty(value = "鏃ユ湡")
+    private Date dataTime;
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    private Date beginTime;
+    @ApiModelProperty(value = "缁撴潫鏃堕棿")
+    private Date endTime;
+    @ApiModelProperty(value = "灏栧嘲骞宠胺鐨勭被鍨�")
+    private double electricity;
+    @ApiModelProperty(value = "鍊�")
+    private Double cost;
+    @ApiModelProperty(value = "鍊�")
+    private Double price;
+    @ApiModelProperty(value = "鏃堕棿绫诲瀷")
+    private TimeType timeType;
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private Date createTime;
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    private Date updateTime;
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+    public String getIndexId() {
+        return indexId;
+    }
+
+    public void setIndexId(String indexId) {
+        this.indexId = indexId;
+    }
+
+    public String getTimeCode() {
+        return timeCode;
+    }
+
+    public void setTimeCode(String timeCode) {
+        this.timeCode = timeCode;
+    }
+
+    public String getElectricityType() {
+        return electricityType;
+    }
+
+    public void setElectricityType(String electricityType) {
+        this.electricityType = electricityType;
+    }
+
+    public String getIndexCode() {
+        return indexCode;
+    }
+
+    public void setIndexCode(String indexCode) {
+        this.indexCode = indexCode;
+    }
+
+    public Date getDataTime() {
+        return dataTime;
+    }
+
+    public void setDataTime(Date dataTime) {
+        this.dataTime = dataTime;
+    }
+
+    public Date getBeginTime() {
+        return beginTime;
+    }
+
+    public void setBeginTime(Date beginTime) {
+        this.beginTime = beginTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public double getElectricity() {
+        return electricity;
+    }
+
+    public void setElectricity(double electricity) {
+        this.electricity = electricity;
+    }
+
+    public Double getCost() {
+        return cost;
+    }
+
+    public void setCost(Double cost) {
+        this.cost = cost;
+    }
+
+    public Double getPrice() {
+        return price;
+    }
+
+    public void setPrice(Double price) {
+        this.price = price;
+    }
+
+    public TimeType getTimeType() {
+        return timeType;
+    }
+
+    public void setTimeType(TimeType timeType) {
+        this.timeType = timeType;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/StatisticResult.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/StatisticResult.java
new file mode 100644
index 0000000..06a4a9e
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/StatisticResult.java
@@ -0,0 +1,95 @@
+package com.zhitan.realtimedata.domain;
+
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import com.zhitan.common.utils.DateUtils;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class StatisticResult extends BaseEntity {
+  /**
+   * 鎸囨爣涓婚敭
+   */
+  @Excel(name = "鎸囨爣涓婚敭")
+  private String indexId;
+  /**
+   * 鎸囨爣缂栫爜
+   */
+  @Excel(name = "鎸囨爣缂栫爜")
+  private String indexCode;
+  /**
+   * 鎸囨爣鍚嶇О
+   */
+  @Excel(name = "鎸囨爣鍚嶇О")
+  private String indexName;
+  /**
+   * 鍗曚綅涓婚敭
+   */
+  @Excel(name = "鍗曚綅涓婚敭")
+  private String unitId;
+  /**
+   * 鏁版嵁鏃堕棿
+   */
+  @Excel(name = "鏁版嵁鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Excel.Type.EXPORT)
+  private Date dataTime;
+  /**
+   * 鏈湡鍊�
+   */
+  @Excel(name = "鏈湡鍊�")
+  private double currentValue;
+  /**
+   * 涓婃湡鍊�
+   */
+  @Excel(name = "涓婃湡鍊�")
+  private double previousValue;
+  /**
+   * 鍚屾湡鍊�
+   */
+  @Excel(name = "鍚屾湡鍊�")
+  private double lastYearValue;
+  /**
+   * 鏈�澶у��
+   */
+  @Excel(name = "鏈�澶у��")
+  private double maxValue;
+  /**
+   * 鏈�灏忓��
+   */
+  @Excel(name = "鏈�灏忓��")
+  private double minValue;
+  /**
+   * 骞冲潎鍊�
+   */
+  @Excel(name = "骞冲潎鍊�")
+  private double avgValue;
+  //鏃堕棿
+  private String formatdate;
+
+  public void setFormatdate(String formatdate) {
+    this.formatdate = DateUtils.parseDateToStr(formatdate,this.dataTime);
+  }
+
+  /**
+   * 鍚屾瘮.
+   */
+  public double getYoy() {
+    if (lastYearValue != 0) {
+      return (currentValue - lastYearValue) / lastYearValue * 100;
+    }
+    return 0;
+  }
+
+  /**
+   * 鐜瘮.
+   * @return
+   */
+  public double getQoq() {
+    if (previousValue != 0) {
+      return (currentValue - previousValue) / previousValue * 100;
+    }
+    return 0;
+  }
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/SysEquipmentFile.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/SysEquipmentFile.java
new file mode 100644
index 0000000..5ced53d
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/SysEquipmentFile.java
@@ -0,0 +1,18 @@
+package com.zhitan.realtimedata.domain;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 鎷撴墤鍥惧璞� sys_equipmentfile
+ *
+ */
+@Data
+public class SysEquipmentFile {
+
+  private String nodeId;
+  private String filePath;
+  private String svgType;
+  private List<SysSvgInfo> infoList;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/SysSvgInfo.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/SysSvgInfo.java
new file mode 100644
index 0000000..e95a176
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/SysSvgInfo.java
@@ -0,0 +1,11 @@
+package com.zhitan.realtimedata.domain;
+
+import lombok.Data;
+
+@Data
+public class SysSvgInfo {
+
+  private String id;
+  private String param;
+  private String tag;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/TagValue.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/TagValue.java
new file mode 100644
index 0000000..d569649
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/TagValue.java
@@ -0,0 +1,99 @@
+package com.zhitan.realtimedata.domain;
+
+import com.zhitan.common.enums.Quality;
+import com.zhitan.common.utils.DateUtils;
+
+import java.util.Date;
+
+/**
+ * @author 鑼冩柊瀵�
+ *
+ * 娴嬬偣鏁版嵁瀹炰綋绫�.
+ */
+public class TagValue {
+
+  /**
+   * 娴嬬偣缂栫爜.
+   */
+  private String tagCode;
+
+  /**
+   * 娴嬬偣鏁版嵁鏃堕棿.
+   */
+  private Date dataTime;
+
+  /**
+   * 娴嬬偣鍊�.
+   */
+  private Double value;
+
+  /**
+   * 娴嬬偣鏁版嵁璐ㄩ噺.
+   */
+  private Quality quality;
+
+  /**
+   * 璇︾粏鐨勮川閲忕紪鐮�.
+   */
+  private Integer qualityDetail;
+
+  private String showDataTime;
+
+  public String getTagCode() {
+    return tagCode;
+  }
+
+  public void setTagCode(String tagCode) {
+    this.tagCode = tagCode;
+  }
+
+  public Date getDataTime() {
+    return dataTime;
+  }
+
+  public void setDataTime(Date dataTime) {
+    this.dataTime = dataTime;
+  }
+
+  public Double getValue() {
+    return value;
+  }
+
+  public void setValue(Double value) {
+    this.value = value;
+  }
+
+  public Quality getQuality() {
+    return quality;
+  }
+
+  public void setQuality(Quality quality) {
+    this.quality = quality;
+  }
+
+  public Integer getQualityDetail() {
+    return qualityDetail;
+  }
+
+  public void setQualityDetail(Integer qualityDetail) {
+    this.qualityDetail = qualityDetail;
+  }
+
+  public String getShowDataTime() {
+    return showDataTime;
+  }
+
+  public void setShowDataTime(String format) {
+    this.showDataTime = DateUtils.parseDateToStr(format,this.getDataTime());;
+  }
+  @Override
+  public String toString() {
+    return "TagValue{" +
+        "tagCode='" + tagCode + '\'' +
+        ", dataTime=" + dataTime +
+        ", value=" + value +
+        ", quality=" + quality +
+        ", qualityDetail=" + qualityDetail +
+        '}';
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/TagValueResult.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/TagValueResult.java
new file mode 100644
index 0000000..20c3291
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/TagValueResult.java
@@ -0,0 +1,91 @@
+package com.zhitan.realtimedata.domain;
+
+import com.zhitan.common.enums.Quality;
+
+import java.util.Date;
+
+public class TagValueResult {
+
+  /**
+   * 娴嬬偣缂栫爜.
+   */
+  private String tagCode;
+
+  private String tagName;
+  private String unitId;
+
+  /**
+   * 娴嬬偣鏁版嵁鏃堕棿.
+   */
+  private Date dataTime;
+
+  /**
+   * 娴嬬偣鍊�.
+   */
+  private Double value;
+
+  /**
+   * 娴嬬偣鏁版嵁璐ㄩ噺.
+   */
+  private Quality quality;
+  /**
+   * 璁¢噺鍣ㄥ叿鍚嶇О
+   */
+  private String meteName;
+
+  public String getTagCode() {
+    return tagCode;
+  }
+
+  public void setTagCode(String tagCode) {
+    this.tagCode = tagCode;
+  }
+
+  public String getTagName() {
+    return tagName;
+  }
+
+  public void setTagName(String tagName) {
+    this.tagName = tagName;
+  }
+
+  public String getUnitId() {
+    return unitId;
+  }
+
+  public void setUnitId(String unitId) {
+    this.unitId = unitId;
+  }
+
+  public Date getDataTime() {
+    return dataTime;
+  }
+
+  public void setDataTime(Date dataTime) {
+    this.dataTime = dataTime;
+  }
+
+  public Double getValue() {
+    return value;
+  }
+
+  public void setValue(Double value) {
+    this.value = value;
+  }
+
+  public Quality getQuality() {
+    return quality;
+  }
+
+  public void setQuality(Quality quality) {
+    this.quality = quality;
+  }
+
+  public String getMeteName() {
+    return meteName;
+  }
+
+  public void setMeteName(String meteName) {
+    this.meteName = meteName;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/WritePoint.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/WritePoint.java
new file mode 100644
index 0000000..7e97092
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/WritePoint.java
@@ -0,0 +1,26 @@
+package com.zhitan.realtimedata.domain;
+
+import com.influxdb.annotations.Column;
+import com.influxdb.annotations.Measurement;
+
+import java.time.Instant;
+
+/**
+ * @author fanxinfu
+ */
+@Measurement(name = "meilin")
+public class WritePoint {
+
+  @Column(tag = true)
+  private String tag;
+  @Column
+  private Double value;
+  @Column(timestamp = true)
+  private Instant time;
+
+  public WritePoint(String tag, Double value, Instant time) {
+    this.tag = tag;
+    this.value = value;
+    this.time = time;
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/dto/EnergyIndexMonitorDTO.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/dto/EnergyIndexMonitorDTO.java
new file mode 100644
index 0000000..25f1407
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/dto/EnergyIndexMonitorDTO.java
@@ -0,0 +1,54 @@
+package com.zhitan.realtimedata.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @Description 鑳芥簮鐐逛綅鐩戞祴璇锋眰 DTO
+ * @Author zhoubg
+ * @date 2024-10-15
+ **/
+@ApiModel(value = "鎸囨爣淇℃伅")
+public class EnergyIndexMonitorDTO {
+    /**
+     * 鐐逛綅绫诲瀷
+     */
+    @ApiModelProperty(value = "鐐逛綅绫诲瀷")
+    private String indexType;
+
+    /**
+     * 妯″瀷id
+     */
+    @NotBlank(message = "鏈壘鍒版ā鍨嬩俊鎭�")
+    @ApiModelProperty(value = "妯″瀷id")
+    private String nodeId;
+
+    @ApiModelProperty(value = "鑳芥簮绫诲瀷")
+    private String energyType;
+
+    public String getIndexType() {
+        return indexType;
+    }
+
+    public void setIndexType(String indexType) {
+        this.indexType = indexType;
+    }
+
+    public String getNodeId() {
+        return nodeId;
+    }
+
+    public void setNodeId(String nodeId) {
+        this.nodeId = nodeId;
+    }
+
+    public String getEnergyType() {
+        return energyType;
+    }
+
+    public void setEnergyType(String energyType) {
+        this.energyType = energyType;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/EquipmentPointParametersExcel.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/EquipmentPointParametersExcel.java
new file mode 100644
index 0000000..1b1a208
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/EquipmentPointParametersExcel.java
@@ -0,0 +1,70 @@
+package com.zhitan.realtimedata.domain.vo;
+
+import com.zhitan.common.annotation.Excel;
+
+/**
+ * @Description 璁惧鐐逛綅瀹炴椂鏁版嵁杩斿洖 Excel
+ * @Author zhoubg
+ * @date 2024-10-17
+ **/
+
+public class EquipmentPointParametersExcel {
+
+    /**
+     * 鐐逛綅鍚嶇О
+     *
+     */
+    @Excel(name = "鐐逛綅鍚嶇О")
+    private String indexName;
+
+    /**
+     * 鍊�
+     */
+    @Excel(name = "褰撳墠鍊�")
+    private String value;
+
+    /**
+     * 鍗曚綅
+     */
+    @Excel(name = "鍗曚綅")
+    private String indexUnit;
+
+    /**
+     * 鏃堕棿瀛楃涓�
+     */
+    @Excel(name = "鏃堕棿")
+    private String timeString;
+
+
+    public String getIndexName() {
+        return indexName;
+    }
+
+    public void setIndexName(String indexName) {
+        this.indexName = indexName;
+    }
+
+    public String getIndexUnit() {
+        return indexUnit;
+    }
+
+    public void setIndexUnit(String indexUnit) {
+        this.indexUnit = indexUnit;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getTimeString() {
+        return timeString;
+    }
+
+    public void setTimeString(String timeString) {
+        this.timeString = timeString;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/EquipmentPointParametersVO.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/EquipmentPointParametersVO.java
new file mode 100644
index 0000000..7ce7699
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/EquipmentPointParametersVO.java
@@ -0,0 +1,76 @@
+package com.zhitan.realtimedata.domain.vo;
+
+/**
+ * @Description 璁惧鐐逛綅瀹炴椂鏁版嵁杩斿洖 vo
+ * @Author zhoubg
+ * @date 2024-10-15
+ **/
+
+public class EquipmentPointParametersVO {
+
+    /**
+     * 鐐逛綅缂栫爜
+     */
+    private String code;
+
+    /**
+     * 鐐逛綅鍚嶇О
+     */
+    private String indexName;
+
+    /**
+     * 鏃堕棿瀛楃涓�
+     */
+    private String timeString;
+
+    /**
+     * 鐐逛綅鍗曚綅
+     */
+    private String indexUnit;
+
+    /**
+     * 鍊�
+     */
+    private String value;
+
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getIndexName() {
+        return indexName;
+    }
+
+    public void setIndexName(String indexName) {
+        this.indexName = indexName;
+    }
+
+    public String getIndexUnit() {
+        return indexUnit;
+    }
+
+    public void setIndexUnit(String indexUnit) {
+        this.indexUnit = indexUnit;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getTimeString() {
+        return timeString;
+    }
+
+    public void setTimeString(String timeString) {
+        this.timeString = timeString;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/ExportrealtimeTrendVO.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/ExportrealtimeTrendVO.java
new file mode 100644
index 0000000..4c136a4
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/ExportrealtimeTrendVO.java
@@ -0,0 +1,17 @@
+package com.zhitan.realtimedata.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @Description 瀵煎嚭瀹炴椂鏁版嵁璇锋眰 vo
+ * @Author zhoubg
+ * @date 2024-10-18
+ **/
+@Data
+public class ExportrealtimeTrendVO {
+
+    private String tagCode;
+    private String dataTime;
+
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/RealTimeDataVO.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/RealTimeDataVO.java
new file mode 100644
index 0000000..a1c051f
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/RealTimeDataVO.java
@@ -0,0 +1,20 @@
+package com.zhitan.realtimedata.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Description
+ * @Author zhoubg
+ * @date 2024-10-16
+ **/
+@Data
+public class RealTimeDataVO {
+    @ApiModelProperty(value = "鑳芥簮绫诲瀷鍚嶇О")
+    private String energyTypeName;
+
+    @ApiModelProperty(value = "浼犳劅鍣ㄤ俊鎭泦鍚�")
+    private List<SensorParamModel> deviceArray;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/RealTimeHistoryDataVO.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/RealTimeHistoryDataVO.java
new file mode 100644
index 0000000..b00791f
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/RealTimeHistoryDataVO.java
@@ -0,0 +1,21 @@
+package com.zhitan.realtimedata.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @Description
+ * @Author zhoubg
+ * @date 2024-10-18
+ **/
+@Data
+public class RealTimeHistoryDataVO {
+
+    @ApiModelProperty(value = "鏃堕棿鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "鍊�")
+    private BigDecimal value;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/RealTimeIndexModel.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/RealTimeIndexModel.java
new file mode 100644
index 0000000..5a2fb58
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/RealTimeIndexModel.java
@@ -0,0 +1,40 @@
+package com.zhitan.realtimedata.domain.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @Description 瀹炴椂鏁版嵁-鑳芥簮鐐逛綅鏁版嵁
+ *
+ * @Author zhoubg
+ * @date 2024-10-16
+ **/
+@Data
+public class RealTimeIndexModel {
+
+    /**
+     * 鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 鐐逛綅缂栫爜
+     */
+    private String indexCode;
+
+    /**
+     * 鍗曚綅
+     */
+    private String unit;
+
+    /**
+     * 鍊�
+     */
+    private BigDecimal value;
+    
+    /**
+     * 鏃堕棿
+     */
+    private String dataTime;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/SensorParamModel.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/SensorParamModel.java
new file mode 100644
index 0000000..3fb8307
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/SensorParamModel.java
@@ -0,0 +1,31 @@
+package com.zhitan.realtimedata.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+
+/**
+ * @Description 浼犳劅鍣ㄦ暟鎹�
+ * @Author zhoubg
+ * @date 2024-10-16
+ **/
+@Data
+public class SensorParamModel {
+
+    @ApiModelProperty(value = "璁惧鍚嶇О")
+    private String deviceName;
+
+    @ApiModelProperty(value = "鑳芥簮绫诲瀷鍚嶇О")
+    private String energyTypeName;
+
+    @ApiModelProperty(name = "绾垮緞")
+    private String wireDiameter;
+
+    @ApiModelProperty(name = "鍏佽鏈�澶у姛鐜�")
+    private String maxAllowablePower;
+    
+    @ApiModelProperty(value = "鐐逛綅淇℃伅")
+    private List<RealTimeIndexModel> energyIndexArray;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/mapper/PeriodDataMapper.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/mapper/PeriodDataMapper.java
new file mode 100644
index 0000000..0b46502
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/mapper/PeriodDataMapper.java
@@ -0,0 +1,104 @@
+package com.zhitan.realtimedata.mapper;
+
+import com.zhitan.common.enums.Quality;
+import com.zhitan.common.enums.StatisticType;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.realtimedata.domain.DataItem;
+import com.zhitan.realtimedata.domain.ElectricityDataDetail;
+import com.zhitan.realtimedata.domain.StatisticResult;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 闃舵鏁版嵁鏌ヨ锛屾暟鎹闂帴鍙�.
+ */
+public interface PeriodDataMapper {
+
+    void save(@Param("dataItem") DataItem dataItem);
+
+    void insert(@Param("dataItem") DataItem dataItem);
+
+    void insertTOUData(@Param("dataItem") ElectricityDataDetail dataItem);
+
+    void insertTOUDataItems(@Param("dataItems") List<ElectricityDataDetail> dataItems);
+
+    void update(@Param("dataItem") DataItem dataItem);
+
+    DataItem getDataByIndex(@Param("indexId") String indexId,
+                            @Param("timeCode") String timeCode);
+
+    List<DataItem> getDatasByIndex(@Param("indexIds") List<String> indexIds,
+                                   @Param("timeCode") String timeCode);
+
+    List<DataItem> getPeriodDatasByIndex(@Param("indexIds") List<String> indexIds,
+                                         @Param("beginTime") Date beginTime,
+                                         @Param("endTime") Date endTime,
+                                         @Param("timeType") TimeType timeType);
+
+    Double dataStatisticsByIndex(@Param("indexId") String indexId,
+                                 @Param("statisticType") StatisticType statisticType,
+                                 @Param("timeType") TimeType timeType,
+                                 @Param("beginTime") Date beginTime,
+                                 @Param("endTime") Date endTime);
+
+    List<DataItem> dataStatisticsByIndexs(@Param("indexIds") List<String> indexIds,
+                                          @Param("statisticType") StatisticType
+                                                  statisticType,
+                                          @Param("timeType") TimeType timeType,
+                                          @Param("beginTime") Date beginTime,
+                                          @Param("endTime") Date endTime);
+
+    List<DataItem> statistic(@Param("indexIds") List<String> indexIds,
+                             @Param("timeType") TimeType timeType,
+                             @Param("beginTime") Date beginTime,
+                             @Param("endTime") Date endTime);
+
+    List<DataItem> statisticByCode(@Param("indexCodes") List<String> indexCodes,
+                                   @Param("timeType") TimeType timeType,
+                                   @Param("beginTime") Date beginTime,
+                                   @Param("endTime") Date endTime);
+
+    List<StatisticResult> getStatisticDatasById(@Param("indexIds") List<String> indexIds,
+                                                @Param("timeType") TimeType timeType);
+
+    List<StatisticResult> getStatisticDatasByCode(@Param("indexCodes") List<String> indexCodes,
+                                                  @Param("timeType") TimeType timeType);
+
+    List<DataItem> dataStatisticsByCodes(@Param("indexCodes") List<String> indexCodes,
+                                         @Param("statisticType") StatisticType statisticType,
+                                         @Param("timeType") TimeType timeType,
+                                         @Param("beginTime") Date beginTime,
+                                         @Param("endTime") Date endTime);
+
+    String hasExist(@Param("indexId") String indexId,
+                    @Param("timeCode") String timeCode);
+
+    void saveDataList(@Param("dataItemVlues") List<DataItem> datas);
+
+    List<DataItem> getPeriodDatasByIndexAndQuality(@Param("indexIds") List<String> indexIds,
+                                                   @Param("beginTime") Date beginTime,
+                                                   @Param("endTime") Date endTime,
+                                                   @Param("timeType") TimeType timeType,
+                                                   @Param("quality") Quality quality);
+
+    List<DataItem> dataStatisticsFilterByCodes(@Param("indexCodes") List<String> indexCodes,
+                                               @Param("statisticType") StatisticType statisticType,
+                                               @Param("timeType") TimeType timeType,
+                                               @Param("beginTime") Date beginTime,
+                                               @Param("endTime") Date endTime,
+                                               @Param("isFilter") boolean isFilter);
+
+    void delete(@Param("indexId") String indexId,
+                @Param("timeType") TimeType timeType,
+                @Param("beginTime") Date beginTime,
+                @Param("endTime") Date endTime);
+
+    DataItem getDataByIndexCode(String indexCode, String timeCode);
+
+    List<String> queryDataItemIsExist(@Param("queryMap") Map<String, List<String>> queryMap);
+
+    void insertDataList(List<DataItem> insertData);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/mapper/SysEquipmentFileMapper.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/mapper/SysEquipmentFileMapper.java
new file mode 100644
index 0000000..cb1727a
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/mapper/SysEquipmentFileMapper.java
@@ -0,0 +1,24 @@
+package com.zhitan.realtimedata.mapper;
+
+import com.zhitan.realtimedata.domain.SysEquipmentFile;
+import com.zhitan.realtimedata.domain.SysSvgInfo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 缁勬�佸浘Mapper鎺ュ彛
+ *
+ * @author sys
+ * @date 2020-02-24
+ */
+public interface SysEquipmentFileMapper {
+
+  void saveEquipmentFile(SysEquipmentFile sysEquipmentfile);
+
+  void saveSettingInfo(@Param("nodeId") String nodeId, @Param("svgInfo") List<SysSvgInfo> svgInfo);
+
+  SysEquipmentFile getConfigure(String nodeId);
+
+  List<SysSvgInfo> getConfigureTag(String nodeId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/IPeriodDataService.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/IPeriodDataService.java
new file mode 100644
index 0000000..df242b7
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/IPeriodDataService.java
@@ -0,0 +1,314 @@
+package com.zhitan.realtimedata.service;
+
+
+import com.zhitan.common.enums.Quality;
+import com.zhitan.common.enums.StatisticType;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.realtimedata.domain.DataItem;
+import com.zhitan.realtimedata.domain.ElectricityDataDetail;
+import com.zhitan.realtimedata.domain.StatisticResult;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 闃舵鏁版嵁鏌ヨ鎺ュ彛.
+ */
+public interface IPeriodDataService {
+
+    /**
+     * 淇濆瓨鎸囨爣鏁版嵁.
+     *
+     * @param data 鎸囨爣鏁版嵁
+     */
+    void save(DataItem data);
+
+    /**
+     * 灏栧嘲骞宠胺
+     */
+    void saveTOUData(ElectricityDataDetail data);
+
+    /**
+     * 鎵归噺淇濆瓨鍛ㄦ湡鏁版嵁.
+     *
+     * @param dataItems 瑕佷繚瀛樼殑鏁版嵁闆嗗悎
+     */
+    void save(List<DataItem> dataItems);
+
+    void saveTOUData(List<ElectricityDataDetail> dataItems);
+
+    /**
+     * 鎵归噺淇濆瓨鏁版嵁锛屼笉澶勭悊寮傚父
+     * 閲囩敤merge淇濆瓨鏁版嵁锛屽鏋滄壒閲忎繚瀛樺け璐ヨ窇鍑哄紓甯�
+     *
+     * @param dataItems
+     */
+    void savePeriodData(List<DataItem> dataItems);
+
+    /**
+     * 淇敼鎸囨爣鏁版嵁.
+     *
+     * @param data 鎸囨爣鏁版嵁
+     */
+    void update(DataItem data);
+
+    /**
+     * 鑾峰彇鎸囨爣鏁版嵁.
+     *
+     * @param indexId  璁$畻鎸囨爣
+     * @param timeCode 鏃堕棿缂栫爜
+     */
+    DataItem getDataByIndex(String indexId, String timeCode);
+
+    /**
+     * 鑾峰彇鎸囨爣鏌愪竴鏃跺埢鐨勬暟鎹�.
+     *
+     * @param indexId  璁$畻鎸囨爣
+     * @param dataTime 鏃堕棿
+     * @param timeType 鍛ㄦ湡绫诲瀷
+     */
+    DataItem getDataByIndex(String indexId, Date dataTime, TimeType timeType);
+
+    /**
+     * 鑾峰彇璁$畻鎸囨爣鏁版嵁.
+     *
+     * @param indexIds 璁$畻鎸囨爣
+     * @param timeCode 鏃堕棿缂栧彿
+     * @return 璁$畻鎸囨爣鏁版嵁
+     */
+    List<DataItem> getDataItemsByIndex(List<String> indexIds, String timeCode);
+
+    /**
+     * 鑾峰彇璁$畻鎸囨爣鏁版嵁.
+     *
+     * @param indexIds 璁$畻鎸囨爣闆嗗悎
+     * @param dataTime 鏃堕棿
+     * @param timeType 鍛ㄦ湡绫诲瀷
+     * @return 璁$畻鎸囨爣鏁版嵁
+     */
+    List<DataItem> getDataItemsByIndex(List<String> indexIds,
+                                       Date dataTime,
+                                       TimeType timeType);
+
+    /**
+     * 鑾峰彇鎸囨爣鏌愪竴鏃跺埢鐨勬暟鎹�.
+     *
+     * @param indexIds  璁$畻鎸囨爣瀛樺偍闆嗗悎
+     * @param beginTime 寮�濮嬫椂闂�
+     * @param endTime   缁撴潫鏃堕棿
+     * @param timeType  鍛ㄦ湡绫诲瀷
+     */
+    List<DataItem> getDataItemsByIndex(List<String> indexIds,
+                                       Date beginTime,
+                                       Date endTime,
+                                       TimeType timeType);
+
+    /**
+     * 鑾峰彇鎸囨爣鏌愪竴鏃跺埢鐨勬暟鎹�.
+     *
+     * @param indexId   璁$畻鎸囨爣瀛樺偍闆嗗悎
+     * @param beginTime 寮�濮嬫椂闂�
+     * @param endTime   缁撴潫鏃堕棿
+     * @param timeType  鍛ㄦ湡绫诲瀷
+     */
+    List<DataItem> getDataItemsByIndex(String indexId,
+                                       Date beginTime,
+                                       Date endTime,
+                                       TimeType timeType);
+
+    /**
+     * 鑾峰彇鎸囨爣鏌愪竴鏃跺埢鐨勬暟鎹�.
+     *
+     * @param indexIds  璁$畻鎸囨爣瀛樺偍闆嗗悎
+     * @param beginTime 寮�濮嬫椂闂�
+     * @param endTime   缁撴潫鏃堕棿
+     * @param timeType  鍛ㄦ湡绫诲瀷
+     */
+    List<DataItem> getDataItemsByIndex(List<String> indexIds,
+                                       Date beginTime,
+                                       Date endTime,
+                                       TimeType timeType,
+                                       Quality quality);
+
+    /**
+     * 鑾峰彇缁熻鏁版嵁.
+     *
+     * @param indexId       璁$畻鎸囨爣
+     * @param statisticType 缁熻绫诲瀷
+     * @param timeType      鏃堕棿绫诲瀷
+     * @param beginTime     寮�濮嬫椂闂�
+     * @param endTime       缁撴潫鏃堕棿
+     */
+    double dataStatisticsByIndex(String indexId,
+                                 StatisticType statisticType,
+                                 TimeType timeType,
+                                 Date beginTime,
+                                 Date endTime);
+
+    /**
+     * 鑾峰彇缁熻鏁版嵁.
+     *
+     * @param indexIds      璁$畻鎸囨爣闆嗗悎
+     * @param statisticType 缁熻绫诲瀷
+     * @param timeType      鏃堕棿绫诲瀷
+     * @param beginTime     寮�濮嬫椂闂�
+     * @param endTime       缁撴潫鏃堕棿
+     */
+    List<DataItem> dataStatisticsByIndexes(List<String> indexIds,
+                                           StatisticType statisticType,
+                                           TimeType timeType,
+                                           Date beginTime,
+                                           Date endTime);
+
+
+    /**
+     * 鑾峰彇缁熻鏁版嵁.
+     *
+     * @param indexCode     璁$畻鎸囨爣
+     * @param statisticType 缁熻绫诲瀷
+     * @param timeType      鏃堕棿绫诲瀷
+     * @param beginTime     寮�濮嬫椂闂�
+     * @param endTime       缁撴潫鏃堕棿
+     */
+    double dataStatisticsByCode(String indexCode,
+                                StatisticType statisticType,
+                                TimeType timeType,
+                                Date beginTime,
+                                Date endTime);
+
+    /**
+     * 鑾峰彇缁熻鏁版嵁.
+     *
+     * @param indexCodes    璁$畻鎸囨爣闆嗗悎
+     * @param statisticType 缁熻绫诲瀷
+     * @param timeType      鏃堕棿绫诲瀷
+     * @param beginTime     寮�濮嬫椂闂�
+     * @param endTime       缁撴潫鏃堕棿
+     */
+    List<DataItem> dataStatisticsByCodes(List<String> indexCodes,
+                                         StatisticType statisticType,
+                                         TimeType timeType,
+                                         Date beginTime,
+                                         Date endTime);
+
+    /**
+     * 鑾峰彇缁熻鏁版嵁.
+     *
+     * @param indexCodes    璁$畻鎸囨爣闆嗗悎
+     * @param statisticType 缁熻绫诲瀷
+     * @param timeType      鏃堕棿绫诲瀷
+     * @param beginTime     寮�濮嬫椂闂�
+     * @param endTime       缁撴潫鏃堕棿
+     */
+    List<DataItem> dataStatisticsByCodes(List<String> indexCodes,
+                                         StatisticType statisticType,
+                                         TimeType timeType,
+                                         Date beginTime,
+                                         Date endTime,
+                                         boolean isFilter);
+
+    /**
+     * 缁熻鎸囨爣鏈湡鍊笺�佷笂鏈熷�笺�佸悓鏈熷�笺�佹渶澶у�笺�佹渶灏忓�煎拰骞冲潎鍊�.
+     *
+     * @param indexId  鎸囨爣涓婚敭
+     * @param timeType 鏃堕棿鍛ㄦ湡绫诲瀷
+     * @param dataTime 鏁版嵁鏃堕棿
+     * @return 缁熻缁撴瀯
+     */
+    StatisticResult statisticById(String indexId, TimeType timeType, Date dataTime);
+
+    /**
+     * 缁熻鎸囨爣鏈湡鍊笺�佷笂鏈熷�笺�佸悓鏈熷�笺�佹渶澶у�笺�佹渶灏忓�煎拰骞冲潎鍊�.
+     *
+     * @param indexIds 鎸囨爣涓婚敭
+     * @param timeType 鏃堕棿鍛ㄦ湡绫诲瀷
+     * @param dataTime 鏁版嵁鏃堕棿
+     * @return 缁熻缁撴灉
+     */
+    List<StatisticResult> statisticById(List<String> indexIds, TimeType timeType, Date dataTime);
+
+    /**
+     * 缁熻涓�娈垫椂闂村懆鏈熷唴鎸囨爣姣忎釜鏁版嵁鏃堕棿鐨勬湰鏈熷�笺�佷笂鏈熷�笺�佸悓鏈熷�笺�佹渶澶у�笺�佹渶灏忓�煎拰骞冲潎鍊�.
+     *
+     * @param indexId   鎸囨爣涓婚敭
+     * @param timeType  鏃堕棿鍛ㄦ湡绫诲瀷
+     * @param beginTime 寮�濮嬫椂闂�
+     * @param endTime   缁撴潫鏃堕棿
+     * @return 缁熻缁撴灉
+     */
+    List<StatisticResult> statisticById(String indexId, TimeType timeType, Date beginTime, Date endTime);
+
+    /**
+     * 缁熻涓�娈垫椂闂村懆鏈熷唴鎸囨爣姣忎釜鏁版嵁鏃堕棿鐨勬湰鏈熷�笺�佷笂鏈熷�笺�佸悓鏈熷�笺�佹渶澶у�笺�佹渶灏忓�煎拰骞冲潎鍊�.
+     *
+     * @param indexIds  鎸囨爣涓婚敭
+     * @param timeType  鏃堕棿鍛ㄦ湡绫诲瀷
+     * @param beginTime 寮�濮嬫椂闂�
+     * @param endTime   缁撴潫鏃堕棿
+     * @return 缁熻缁撴灉
+     */
+    List<StatisticResult> statisticById(List<String> indexIds, TimeType timeType, Date beginTime, Date endTime);
+
+
+    /**
+     * 缁熻涓�娈垫椂闂村懆鏈熷唴鎸囨爣姣忎釜鏁版嵁鏃堕棿鐨勬湰鏈熷�笺�佷笂鏈熷��
+     * 杩欓噷鏄笂鏈熸暟鍊肩暐鏈変笉鍚岋紝灏忔椂鐨勬槸鏄ㄥぉ鐨勶紝鏃ユ暟鎹槸涓婁釜鏈堢殑锛屾湀鏄幓骞寸殑
+     *
+     * @param indexIds  鎸囨爣涓婚敭
+     * @param timeType  鏃堕棿鍛ㄦ湡绫诲瀷
+     * @param beginTime 寮�濮嬫椂闂�
+     * @param endTime   缁撴潫鏃堕棿
+     * @return 缁熻缁撴灉
+     */
+    List<StatisticResult> statisticOtherCycle(List<String> indexIds, TimeType timeType, Date beginTime, Date endTime);
+
+    /**
+     * 缁熻鎸囨爣鏈湡鍊笺�佷笂鏈熷�笺�佸悓鏈熷�笺�佹渶澶у�笺�佹渶灏忓�煎拰骞冲潎鍊�.
+     *
+     * @param indexCode 鎸囨爣涓婚敭
+     * @param timeType  鏃堕棿鍛ㄦ湡绫诲瀷
+     * @param dataTime  鏁版嵁鏃堕棿
+     * @return 缁熻缁撴瀯
+     */
+    StatisticResult statisticByCode(String indexCode, TimeType timeType, Date dataTime);
+
+    /**
+     * 缁熻鎸囨爣鏈湡鍊笺�佷笂鏈熷�笺�佸悓鏈熷�笺�佹渶澶у�笺�佹渶灏忓�煎拰骞冲潎鍊�.
+     *
+     * @param indexCodes 鎸囨爣涓婚敭
+     * @param timeType   鏃堕棿鍛ㄦ湡绫诲瀷
+     * @param dataTime   鏁版嵁鏃堕棿
+     * @return 缁熻缁撴灉
+     */
+    List<StatisticResult> statisticByCode(List<String> indexCodes, TimeType timeType, Date dataTime);
+
+    /**
+     * 缁熻涓�娈垫椂闂村懆鏈熷唴鎸囨爣姣忎釜鏁版嵁鏃堕棿鐨勬湰鏈熷�笺�佷笂鏈熷�笺�佸悓鏈熷�笺�佹渶澶у�笺�佹渶灏忓�煎拰骞冲潎鍊�.
+     *
+     * @param indexCode 鎸囨爣涓婚敭
+     * @param timeType  鏃堕棿鍛ㄦ湡绫诲瀷
+     * @param beginTime 寮�濮嬫椂闂�
+     * @param endTime   缁撴潫鏃堕棿
+     * @return 缁熻缁撴灉
+     */
+    List<StatisticResult> statisticByCode(String indexCode, TimeType timeType, Date beginTime, Date endTime);
+
+    /**
+     * 缁熻涓�娈垫椂闂村懆鏈熷唴鎸囨爣姣忎釜鏁版嵁鏃堕棿鐨勬湰鏈熷�笺�佷笂鏈熷�笺�佸悓鏈熷�笺�佹渶澶у�笺�佹渶灏忓�煎拰骞冲潎鍊�.
+     *
+     * @param indexCodes 鎸囨爣涓婚敭
+     * @param timeType   鏃堕棿鍛ㄦ湡绫诲瀷
+     * @param beginTime  寮�濮嬫椂闂�
+     * @param endTime    缁撴潫鏃堕棿
+     * @return 缁熻缁撴灉
+     */
+    List<StatisticResult> statisticByCode(List<String> indexCodes, TimeType timeType, Date beginTime, Date endTime);
+
+    /**
+     * 鑾峰彇鎸囨爣鏁版嵁.
+     *
+     * @param indexCode 璁$畻鎸囨爣缂栫爜
+     * @param timeCode  鏃堕棿缂栫爜
+     */
+    DataItem getDataByIndexCode(String indexCode, String timeCode);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/ISysEquipmentFileService.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/ISysEquipmentFileService.java
new file mode 100644
index 0000000..0a0dc48
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/ISysEquipmentFileService.java
@@ -0,0 +1,31 @@
+package com.zhitan.realtimedata.service;
+
+
+import com.zhitan.realtimedata.domain.SysEquipmentFile;
+import com.zhitan.realtimedata.domain.SysSvgInfo;
+
+import java.util.List;
+
+/**
+ * 鎷撴墤鍥維ervice鎺ュ彛
+ */
+public interface ISysEquipmentFileService {
+
+  void saveEquipmentFile(SysEquipmentFile sysEquipmentfile);
+
+  void saveSettingInfo(String nodeId, List<SysSvgInfo> svgInfo);
+
+  /**
+   * 鑾峰彇鎷撴墤鍥鹃厤缃俊鎭�
+   * @param nodeId 妯″瀷鑺傜偣 id
+   * @return
+   */
+  SysEquipmentFile getConfigure(String nodeId);
+
+  /**
+   * 鑾峰彇鎷撴墤鍥鹃厤缃殑鐐逛綅鍙�
+   * @param nodeId 妯″瀷鑺傜偣 id
+   * @return
+   */
+  List<SysSvgInfo> getConfigureTag(String nodeId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabase.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabase.java
new file mode 100644
index 0000000..4df580f
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabase.java
@@ -0,0 +1,88 @@
+package com.zhitan.realtimedata.service;
+
+import com.zhitan.common.enums.CollectionModes;
+import com.zhitan.common.enums.RetrievalModes;
+import com.zhitan.realtimedata.domain.TagValue;
+
+import java.util.Date;
+import java.util.List;
+
+public interface RealtimeDatabase {
+
+    long id = System.currentTimeMillis();
+
+    /**
+     * 鍏抽棴杩炴帴
+     */
+    void close();
+
+    /**
+     * 鏍规嵁鐐逛綅鍙疯幏鍙栧疄鏃舵暟鎹�
+     *
+     * @param tagCodes 鐐逛綅鍙峰垪琛�
+     * @return
+     */
+    List<TagValue> retrieve(List<String> tagCodes) throws Exception;
+
+    /**
+     * 鏍规嵁鐐逛綅鍙疯幏鍙栨煇涓�鏃跺埢鐨勫巻鍙叉暟鎹�
+     *
+     * @param tagCodes 鐐逛綅鍙烽泦鍚�
+     * @param dataTime 鍘嗗彶鏃跺埢
+     * @param timeCode 鍖哄垎鏃堕棿绫诲瀷鐨則imeCode
+     * @return
+     */
+    List<TagValue> retrieve(List<String> tagCodes, Date dataTime,String timeCode) throws Exception;
+
+    /**
+     * 鏍规嵁鏌ヨ鏂瑰紡鑾峰彇涓�娈垫椂闂村唴鐨勫巻鍙叉暟鎹�
+     *
+     * @param tagCodes       鐐逛綅鍙烽泦鍚�
+     * @param beginTime      寮�濮嬫椂闂�
+     * @param endTime        缁撴潫鏃堕棿
+     * @param retrievalModes 鏌ヨ鏂瑰紡锛堝惊鐜�佹嫙鍚堛�佸叏閮級
+     * @param pointCount     瑕佹煡璇㈢殑鏁版嵁涓暟
+     * @return
+     */
+    List<TagValue> retrieve(List<String> tagCodes, Date beginTime, Date endTime,
+                            RetrievalModes retrievalModes, int pointCount) throws Exception;
+
+    /**
+     * 姹囨�诲疄鏃舵暟鎹�
+     *
+     * @param tagCodes        鐐逛綅鍙烽泦鍚�
+     * @param beginTime       寮�濮嬫椂闂�
+     * @param endTime         缁撴潫鏃堕棿
+     * @param collectionModes 姹囨�绘柟寮忥紙鏈�澶у�笺�佹渶灏忓�笺�佸钩鍧囧�笺�佹眰鍜岀瓑锛�
+     * @return
+     */
+    List<TagValue> statistics(List<String> tagCodes, Date beginTime, Date endTime,
+                              CollectionModes collectionModes) throws Exception;
+
+    /**
+     * 鎻掑叆瀹炴椂鏁版嵁
+     *
+     * @param tagValues 瀹炴椂鏁版嵁闆嗗悎
+     * @return
+     */
+    Boolean storeData(List<TagValue> tagValues) throws Exception;
+
+    /**
+     * 鎻掑叆鍘嗗彶鏁版嵁
+     *
+     * @param tagValues 鍘嗗彶鏁版嵁闆嗗悎
+     * @return
+     */
+    Boolean insertData(List<TagValue> tagValues) throws Exception;
+
+    /**
+     * 鎵撳紑杩炴帴
+     *
+     * @param host     瀹炴椂鏁版嵁搴撳湴鍧�
+     * @param port     绔彛鍙�
+     * @param userName 鐧诲綍鐢ㄦ埛鍚�
+     * @param pwd      鐧诲綍瀵嗙爜
+     * @return 鏄惁杩炴帴鎴愬姛
+     */
+    boolean open(String host, int port, String userName, String pwd) throws Exception;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java
new file mode 100644
index 0000000..956a5cd
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java
@@ -0,0 +1,108 @@
+package com.zhitan.realtimedata.service;
+
+
+import com.zhitan.common.enums.CollectionModes;
+import com.zhitan.realtimedata.domain.TagValue;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author 鑼冩柊瀵� 瀹炴椂鏁版嵁搴撹闂帴鍙�.
+ */
+public interface RealtimeDatabaseService {
+
+    /**
+     * 鑾峰彇鍗曚釜娴嬬偣鐨勫疄鏃舵暟鎹�.
+     *
+     * @param tagCode 娴嬬偣缂栧彿
+     * @return 娴嬭瘯瀹炴椂鏁版嵁
+     */
+    TagValue retrieve(String tagCode);
+
+    /**
+     * 鑾峰彇鎵归噺娴嬬偣鐨勫疄鏃舵暟鎹�.
+     *
+     * @param tagCodes 娴嬬偣缂栫爜闆嗗悎
+     * @return 瀹炴椂鏁版嵁闆嗗悎
+     */
+    List<TagValue> retrieve(List<String> tagCodes);
+
+    /**
+     * 鑾峰彇娴嬬偣鐨勫巻鍙叉椂鍒诲��.
+     *
+     * @param tagCode  娴嬬偣缂栧彿
+     * @param dataTime 鍘嗗彶鏃跺埢
+     * @return 娴嬬偣鍘嗗彶鏃跺埢鍊�
+     */
+    TagValue retrieve(String tagCode, Date dataTime);
+
+    /**
+     * 鑾峰彇鎵归噺娴嬬偣鐨勫巻鍙叉椂鍒诲��.
+     *
+     * @param tagCodes 娴嬬偣缂栧彿闆嗗悎
+     * @param dataTime 鍘嗗彶鏃跺埢
+     * @return 娴嬭瘯鍘嗗彶鏃跺埢鏁版嵁闆嗗悎
+     */
+    List<TagValue> retrieve(List<String> tagCodes, Date dataTime);
+
+    /**
+     * 鑾峰彇涓�娈垫椂闂村唴娴嬬偣鐨勫巻鍙叉暟鎹�.
+     *
+     * @param tagCode    娴嬬偣缂栧彿
+     * @param beginTime  寮�濮嬫椂闂�
+     * @param endTime    缁撴潫鏃堕棿
+     * @param pointCount 娴嬬偣寰楀埌鐨勬暟鎹釜鏁�
+     * @return 娴嬬偣鍘嗗彶鏁版嵁
+     */
+    List<TagValue> retrieve(String tagCode, Date beginTime, Date endTime, int pointCount);
+
+    /**
+     * 鑾峰彇涓�娈垫椂闂村唴鎵归噺娴嬬偣鐨勫巻鍙叉暟鎹�.
+     *
+     * @param tagCodes   娴嬬偣缂栧彿闆嗗悎
+     * @param beginTime  寮�濮嬫椂闂�
+     * @param endTime    缁撴潫鏃堕棿
+     * @param pointCount 姣忎釜娴嬬偣寰楀埌鐨勬暟鎹釜鏁�
+     * @return 娴嬬偣鍘嗗彶鏁版嵁
+     */
+    List<TagValue> retrieve(List<String> tagCodes, Date beginTime, Date endTime, int pointCount);
+
+    /**
+     * 鑾峰彇娴嬬偣鍦ㄤ竴娈垫椂闂村唴鐨勭粺璁℃暟鎹�.
+     *
+     * @param tagCode         娴嬬偣缂栧彿
+     * @param beginTime       寮�濮嬫椂闂�
+     * @param endTime         缁撴潫鏃堕棿
+     * @param collectionModes 缁熻绫诲瀷
+     * @return 娴嬬偣缁熻缁撴灉
+     */
+    TagValue statistics(String tagCode, Date beginTime, Date endTime,
+                        CollectionModes collectionModes);
+
+    /**
+     * 鑾峰彇娴嬬偣鍦ㄤ竴娈垫椂闂村唴鐨勭粺璁℃暟鎹�.
+     *
+     * @param tagCodes        娴嬬偣缂栧彿闆嗗悎
+     * @param beginTime       寮�濮嬫椂闂�
+     * @param endTime         缁撴潫鏃堕棿
+     * @param collectionModes 缁熻绫诲瀷
+     * @return 娴嬬偣缁熻缁撴灉
+     */
+    List<TagValue> statistics(List<String> tagCodes, Date beginTime, Date endTime,
+                              CollectionModes collectionModes);
+
+    /**
+     * 瀛樺偍娴嬬偣鐨勫疄鏃舵暟鎹�.
+     *
+     * @param tagValues 娴嬬偣瀹炴椂鏁版嵁
+     */
+    void storeData(List<TagValue> tagValues);
+
+    /**
+     * 鎻掑叆娴嬬偣鍘嗗彶鏃跺埢鏁版嵁.
+     *
+     * @param tagValues 娴嬬偣鍘嗗彶鏃跺埢鏁版嵁
+     */
+    void insertData(List<TagValue> tagValues);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeTrendService.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeTrendService.java
new file mode 100644
index 0000000..dcf9b02
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeTrendService.java
@@ -0,0 +1,35 @@
+package com.zhitan.realtimedata.service;
+
+import com.zhitan.realtimedata.domain.dto.EnergyIndexMonitorDTO;
+import com.zhitan.realtimedata.domain.vo.EquipmentPointParametersExcel;
+import com.zhitan.realtimedata.domain.vo.ExportrealtimeTrendVO;
+import com.zhitan.realtimedata.domain.vo.RealTimeDataVO;
+import com.zhitan.realtimedata.domain.vo.RealTimeHistoryDataVO;
+
+import java.util.List;
+
+/**
+ * @Description
+ * @Author zhoubg
+ * @date 2024-10-15
+ **/
+public interface RealtimeTrendService {
+
+    List<RealTimeDataVO> list(EnergyIndexMonitorDTO energyIndexMonitorDTO);
+
+    /**
+     * 鏍规嵁code鑾峰彇鎸囧畾鏃ユ湡鐨勫巻鍙茬偣浣嶆暟鎹�
+     * @param tagCode 鐐逛綅code
+     * @param dataTime 鏃堕棿
+     * @return
+     */
+    List<RealTimeHistoryDataVO> chartByDay(String tagCode, String dataTime);
+
+
+    /**
+     * 瀵煎嚭瀹炴椂鐩戞祴Excel淇℃伅
+     * @return
+     */
+    List<EquipmentPointParametersExcel> export(ExportrealtimeTrendVO exportrealtimeTrendVO);
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/PeriodDataServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/PeriodDataServiceImpl.java
new file mode 100644
index 0000000..f21060c
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/PeriodDataServiceImpl.java
@@ -0,0 +1,635 @@
+package com.zhitan.realtimedata.service.impl;
+
+import com.zhitan.common.enums.Quality;
+import com.zhitan.common.enums.StatisticType;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.time.TimeManager;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.realtimedata.domain.*;
+import com.zhitan.realtimedata.mapper.PeriodDataMapper;
+import com.zhitan.model.service.IEnergyIndexService;
+import com.zhitan.realtimedata.service.IPeriodDataService;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * Created by chongru on 2016-1-22.
+ */
+@Service
+public class PeriodDataServiceImpl implements IPeriodDataService {
+    private Logger logger = LogManager.getLogger(PeriodDataServiceImpl.class);
+    @Autowired
+    private PeriodDataMapper periodDataMapper;
+
+    @Autowired
+    private IEnergyIndexService energyIndexService;
+
+    @Override
+    public void save(DataItem data) {
+        String item = periodDataMapper.hasExist(data.getIndexId(), data.getTimeCode());
+        if (StringUtils.isEmpty(item)) {
+            periodDataMapper.insert(data);
+        } else {
+            update(data);
+        }
+    }
+
+    @Override
+    public void saveTOUData(ElectricityDataDetail data) {
+        periodDataMapper.insertTOUData(data);
+    }
+
+    @Override
+    public void saveTOUData(List<ElectricityDataDetail> dataItems) {
+        List<List<ElectricityDataDetail>> splitData = splitList(dataItems, 100);
+        splitData.parallelStream().forEach(dataPart -> {
+            try {
+                periodDataMapper.insertTOUDataItems(dataPart);
+            } catch (Exception ex) {
+                logger.error("鎵归噺淇濆瓨鏁版嵁澶辫触", ex);
+                dataPart.parallelStream().forEach(dataItem -> {
+                    try {
+                        periodDataMapper.insertTOUData(dataItem);
+                    } catch (Exception singleEx) {
+                        logger.error("鍗曚釜鎸囨爣鏁版嵁淇濆瓨澶辫触锛併��" + dataItem + "銆�", singleEx);
+                    }
+                });
+            }
+        });
+    }
+
+    @Override
+    public void save(List<DataItem> dataItems) {
+        List<List<DataItem>> splitData = splitList(dataItems, 100);
+        splitData.parallelStream().forEach(dataPart -> {
+            try {
+                periodDataMapper.saveDataList(dataPart);
+            } catch (Exception ex) {
+                logger.error("鎵归噺淇濆瓨鏁版嵁澶辫触", ex);
+                dataPart.parallelStream().forEach(dataItem -> {
+                    try {
+                        periodDataMapper.save(dataItem);
+                    } catch (Exception singleEx) {
+                        logger.error("鍗曚釜鎸囨爣鏁版嵁淇濆瓨澶辫触锛併��" + dataItem + "銆�", singleEx);
+                    }
+                });
+            }
+        });
+    }
+
+    @Override
+    public void savePeriodData(List<DataItem> dataItems) {
+        Map<String, List<String>> map = dataItems.stream()
+                .collect(Collectors.groupingBy(DataItem::getTimeCode,
+                        Collectors.mapping(DataItem::getIndexId, Collectors.toList())));
+        List<String> keys = periodDataMapper.queryDataItemIsExist(map);
+        List<DataItem> insertData = dataItems.stream()
+                .filter(
+                        item -> !keys.contains(String.format("%s:%s", item.getTimeCode(), item.getIndexId())))
+                .collect(Collectors.toList());
+        if (!insertData.isEmpty()) {
+            periodDataMapper.insertDataList(insertData);
+        }
+
+        List<DataItem> updateData = dataItems.stream()
+                .filter(
+                        item -> keys.contains(String.format("%s:%s", item.getTimeCode(), item.getIndexId())))
+                .collect(Collectors.toList());
+        if (!updateData.isEmpty()) {
+            periodDataMapper.saveDataList(updateData);
+        }
+    }
+
+    @Override
+    public void update(DataItem data) {
+        periodDataMapper.update(data);
+    }
+
+    @Override
+    public DataItem getDataByIndex(String indexId, String timeCode) {
+        if (StringUtils.isEmpty(indexId)) {
+            return null;
+        }
+
+        return periodDataMapper.getDataByIndex(indexId, timeCode);
+    }
+
+    @Override
+    public DataItem getDataByIndex(String indexId, Date dataTime, TimeType timeType) {
+        if (StringUtils.isEmpty(indexId)) {
+            return null;
+        }
+
+        String timeCode = TimeManager.getTimeCode(dataTime, timeType);
+        return getDataByIndex(indexId, timeCode);
+    }
+
+    @Override
+    public List<DataItem> getDataItemsByIndex(List<String> indexIds, String timeCode) {
+        if (indexIds != null && !indexIds.isEmpty()) {
+            return periodDataMapper.getDatasByIndex(indexIds, timeCode);
+        }
+
+        return Collections.emptyList();
+    }
+
+    @Override
+    public List<DataItem> getDataItemsByIndex(List<String> indexIds, Date dataTime, TimeType timeType) {
+        if (indexIds != null && !indexIds.isEmpty()) {
+            String timeCode = TimeManager.getTimeCode(dataTime, timeType);
+            return periodDataMapper.getDatasByIndex(indexIds, timeCode);
+        }
+
+        return Collections.emptyList();
+    }
+
+    @Override
+    public List<DataItem> getDataItemsByIndex(List<String> indexIds, Date beginTime,
+                                              Date endTime, TimeType timeType) {
+        if (indexIds != null && !indexIds.isEmpty()) {
+            return periodDataMapper.getPeriodDatasByIndex(indexIds, beginTime, endTime, timeType);
+        }
+
+        return Collections.emptyList();
+    }
+
+    @Override
+    public List<DataItem> getDataItemsByIndex(String indexId,
+                                              Date beginTime,
+                                              Date endTime,
+                                              TimeType timeType) {
+        if (StringUtils.isEmpty(indexId)) {
+            return Collections.emptyList();
+        }
+
+        List<String> indexIds = new ArrayList<>();
+        indexIds.add(indexId);
+        return periodDataMapper.getPeriodDatasByIndex(indexIds, beginTime, endTime, timeType);
+    }
+
+    @Override
+    public List<DataItem> getDataItemsByIndex(List<String> indexIds, Date beginTime, Date endTime,
+                                              TimeType timeType, Quality quality) {
+        if (indexIds != null && !indexIds.isEmpty()) {
+            return periodDataMapper.getPeriodDatasByIndexAndQuality(indexIds,
+                    beginTime,
+                    endTime,
+                    timeType,
+                    quality);
+        }
+
+        return Collections.emptyList();
+    }
+
+    @Override
+    public double dataStatisticsByIndex(String indexId,
+                                        StatisticType statisticType,
+                                        TimeType timeType,
+                                        Date beginTime,
+                                        Date endTime) {
+        if (StringUtils.isEmpty(indexId)) {
+            return 0;
+        }
+
+        Double value = periodDataMapper.dataStatisticsByIndex(
+                indexId,
+                statisticType,
+                timeType,
+                beginTime,
+                endTime);
+
+        return value == null ? 0 : value;
+    }
+
+    @Override
+    public List<DataItem> dataStatisticsByIndexes(List<String> indexIds, StatisticType
+            statisticType, TimeType timeType, Date beginTime, Date endTime) {
+        if (indexIds == null || indexIds.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        return periodDataMapper.dataStatisticsByIndexs(
+                indexIds,
+                statisticType,
+                timeType,
+                beginTime,
+                endTime);
+    }
+
+    @Override
+    public double dataStatisticsByCode(String indexCode, StatisticType
+            statisticType, TimeType timeType, Date beginTime, Date endTime) {
+        if (StringUtils.isEmpty(indexCode)) {
+            return 0;
+        }
+
+        List<String> indexCodes = Collections.singletonList(indexCode);
+        List<DataItem> dataItems = dataStatisticsByCodes(
+                indexCodes,
+                statisticType,
+                timeType,
+                beginTime,
+                endTime);
+        if (!dataItems.isEmpty()) {
+            return dataItems.get(0).getValue();
+        }
+
+        return 0;
+    }
+
+    @Override
+    public List<DataItem> dataStatisticsByCodes(List<String> indexCodes,
+                                                StatisticType statisticType, TimeType timeType,
+                                                Date beginTime, Date endTime) {
+        if (indexCodes == null || indexCodes.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        return periodDataMapper.dataStatisticsByCodes(
+                indexCodes,
+                statisticType,
+                timeType,
+                beginTime,
+                endTime);
+    }
+
+    @Override
+    public List<DataItem> dataStatisticsByCodes(List<String> indexCodes,
+                                                StatisticType statisticType,
+                                                TimeType timeType,
+                                                Date beginTime, Date endTime,
+                                                boolean isFilter) {
+        if (indexCodes == null || indexCodes.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        return periodDataMapper.dataStatisticsFilterByCodes(
+                indexCodes,
+                statisticType,
+                timeType,
+                beginTime,
+                endTime,
+                isFilter);
+    }
+
+    @Override
+    public StatisticResult statisticById(String indexId, TimeType timeType, Date dataTime) {
+        if (StringUtils.isEmpty(indexId)) {
+            return null;
+        }
+
+        List<String> indexIds = Collections.singletonList(indexId);
+        List<StatisticResult> results = statisticById(indexIds, timeType, dataTime);
+        if (!results.isEmpty()) {
+            return results.get(0);
+        }
+
+        return new StatisticResult();
+    }
+
+    @Override
+    public List<StatisticResult> statisticById(List<String> indexIds, TimeType timeType, Date dataTime) {
+        if (indexIds == null || indexIds.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        String timeCode = TimeManager.getTimeCode(dataTime, timeType);
+        return statisticById(indexIds, timeType,
+                TimeManager.getBeginTime(timeCode), TimeManager.getEndTime(timeCode));
+    }
+
+    @Override
+    public List<StatisticResult> statisticById(String indexId, TimeType timeType,
+                                               Date beginTime, Date endTime) {
+        if (StringUtils.isEmpty(indexId)) {
+            return Collections.emptyList();
+        }
+
+        List<String> indexIds = Collections.singletonList(indexId);
+        return statisticById(indexIds, timeType, beginTime, endTime);
+    }
+
+    @Override
+    public List<StatisticResult> statisticById(List<String> indexIds, TimeType timeType,
+                                               Date beginTime, Date endTime) {
+        if (indexIds == null || indexIds.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        ReBuildTime reBuildTime = new ReBuildTime(timeType, beginTime, endTime).invoke();
+        DateTime begin = reBuildTime.getBegin();
+        DateTime end = reBuildTime.getEnd();
+
+        DateTime lastYearOfBeginTime = begin.plusYears(-1);
+        DateTime lastYearOfEndTime = end.plusYears(-1);
+        DateTime previousOfBeginTime = getTime(begin, timeType, -1, STATISTIC_QUERY_TYPE);
+        DateTime previousOfEndTime = getTime(end, timeType, -1, STATISTIC_QUERY_TYPE);
+
+        List<EnergyIndex> aggregateIndexList = energyIndexService.getEnergyIndexByIds(indexIds);
+        List<DataItem> currentValues = periodDataMapper.statistic(indexIds,
+                timeType,
+                begin.toDate(),
+                end.toDate());
+        List<DataItem> previousValues = periodDataMapper.statistic(indexIds,
+                timeType,
+                previousOfBeginTime.toDate(),
+                previousOfEndTime.toDate());
+        List<DataItem> lastYearValues = periodDataMapper.statistic(indexIds,
+                timeType,
+                lastYearOfBeginTime.toDate(),
+                lastYearOfEndTime.toDate());
+
+        List<StatisticResult> statisticResults =
+                periodDataMapper.getStatisticDatasById(indexIds, timeType);
+
+        return buildNewDatas(aggregateIndexList, timeType, currentValues, previousValues,
+                lastYearValues, statisticResults, begin, end, STATISTIC_QUERY_TYPE);
+    }
+
+    /**
+     * 缁熻涓�娈垫椂闂村懆鏈熷唴鎸囨爣姣忎釜鏁版嵁鏃堕棿鐨勬湰鏈熷�笺�佷笂鏈熷��
+     * 杩欓噷鏄笂鏈熸暟鍊肩暐鏈変笉鍚岋紝灏忔椂鐨勬槸鏄ㄥぉ鐨勶紝鏃ユ暟鎹槸涓婁釜鏈堢殑锛屾湀鏄幓骞寸殑
+     *
+     * @param indexIds  鎸囨爣涓婚敭
+     * @param timeType  鏃堕棿鍛ㄦ湡绫诲瀷
+     * @param beginTime 寮�濮嬫椂闂�
+     * @param endTime   缁撴潫鏃堕棿
+     * @return 缁熻缁撴灉
+     */
+    @Override
+    public List<StatisticResult> statisticOtherCycle(List<String> indexIds, TimeType timeType, Date beginTime, Date endTime) {
+        if (indexIds == null || indexIds.isEmpty()) {
+            return Collections.emptyList();
+        }
+        String type = "other";
+        ReBuildTime reBuildTime = new ReBuildTime(timeType, beginTime, endTime).invoke();
+        DateTime begin = reBuildTime.getBegin();
+        DateTime end = reBuildTime.getEnd();
+        DateTime previousOfBeginTime = getTime(begin, timeType, -1, type);
+        DateTime previousOfEndTime = getTime(end, timeType, -1, type);
+        List<EnergyIndex> aggregateIndexList = energyIndexService.getEnergyIndexByIds(indexIds);
+        List<DataItem> currentValues = periodDataMapper.statistic(indexIds,
+                timeType,
+                begin.toDate(),
+                end.toDate());
+        List<DataItem> previousValues = periodDataMapper.statistic(indexIds,
+                timeType,
+                previousOfBeginTime.toDate(),
+                previousOfEndTime.toDate());
+        return buildNewDatas(aggregateIndexList, timeType, currentValues, previousValues,
+                new ArrayList<>(), null, begin, end, type);
+    }
+
+    @Override
+    public StatisticResult statisticByCode(String indexCode,
+                                           TimeType timeType, Date dataTime) {
+        if (StringUtils.isEmpty(indexCode)) {
+            return null;
+        }
+
+        List<String> indexCodes = Collections.singletonList(indexCode);
+        List<StatisticResult> results = statisticByCode(indexCodes, timeType, dataTime);
+        if (!results.isEmpty()) {
+            return results.get(0);
+        }
+
+        return new StatisticResult();
+    }
+
+    @Override
+    public List<StatisticResult> statisticByCode(List<String> indexCodes,
+                                                 TimeType timeType, Date dataTime) {
+        if (indexCodes == null || indexCodes.isEmpty()
+        ) {
+            return Collections.emptyList();
+        }
+
+        String timeCode = TimeManager.getTimeCode(dataTime, timeType);
+        return statisticByCode(indexCodes, timeType,
+                TimeManager.getBeginTime(timeCode), TimeManager.getEndTime(timeCode));
+    }
+
+    @Override
+    public List<StatisticResult> statisticByCode(String indexCode, TimeType timeType,
+                                                 Date beginTime, Date endTime) {
+        if (StringUtils.isEmpty(indexCode)) {
+            return Collections.emptyList();
+        }
+
+        List<String> indexCodes = Collections.singletonList(indexCode);
+        return statisticByCode(indexCodes, timeType, beginTime, endTime);
+    }
+
+    private final static String STATISTIC_QUERY_TYPE = "normal";
+
+    @Override
+    public List<StatisticResult> statisticByCode(List<String> indexCodes,
+                                                 TimeType timeType, Date beginTime, Date endTime) {
+        if (indexCodes == null || indexCodes.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        ReBuildTime reBuildTime = new ReBuildTime(timeType, beginTime, endTime).invoke();
+        DateTime begin = reBuildTime.getBegin();
+        DateTime end = reBuildTime.getEnd();
+
+        List<EnergyIndex> aggregateIndexList =
+                energyIndexService.getEnergyIndexByCodes(indexCodes);
+        DateTime lastYearOfBeginTime = begin.plusYears(-1);
+        DateTime lastYearOfEndTime = end.plusYears(-1);
+        DateTime previousOfBeginTime = getTime(begin, timeType, -1, STATISTIC_QUERY_TYPE);
+        DateTime previousOfEndTime = getTime(end, timeType, -1, STATISTIC_QUERY_TYPE);
+
+        List<DataItem> currentValues = periodDataMapper.statisticByCode(
+                indexCodes,
+                timeType,
+                begin.toDate(),
+                end.toDate());
+        List<DataItem> previousValues = periodDataMapper.statisticByCode(
+                indexCodes,
+                timeType,
+                previousOfBeginTime.toDate(),
+                previousOfEndTime.toDate());
+        List<DataItem> lastYearValues = periodDataMapper.statisticByCode(
+                indexCodes,
+                timeType,
+                lastYearOfBeginTime.toDate(),
+                lastYearOfEndTime.toDate());
+
+        List<StatisticResult> statisticResults =
+                periodDataMapper.getStatisticDatasByCode(indexCodes, timeType);
+
+        return buildNewDatas(aggregateIndexList,
+                timeType,
+                currentValues,
+                previousValues,
+                lastYearValues,
+                statisticResults, begin, end, STATISTIC_QUERY_TYPE);
+    }
+
+    @Override
+    public DataItem getDataByIndexCode(String indexCode, String timeCode) {
+        return periodDataMapper.getDataByIndexCode(indexCode, timeCode);
+    }
+
+    private DataItem findValue(List<DataItem> items, String indexId, DateTime dataTime) {
+        Optional<DataItem> value = items.stream()
+                .filter(f -> StringUtils.equalsIgnoreCase(f.getIndexId(), indexId)
+                        && dataTime.equals(new DateTime(f.getDataTime())))
+                .findAny();
+        return value.orElseGet(DataItem::new);
+
+    }
+
+    private DateTime getTime(DateTime time, TimeType timeType, int offset, String type) {
+        if (STATISTIC_QUERY_TYPE.equalsIgnoreCase(type)) {
+            if (timeType == TimeType.HOUR) {
+                return time.plusHours(offset);
+            } else if (timeType == TimeType.DAY) {
+                return time.plusDays(offset);
+            } else if (timeType == TimeType.MONTH) {
+                return time.plusMonths(offset);
+            } else if (timeType == TimeType.YEAR) {
+                return time.plusYears(offset);
+            }
+            return time;
+        } else {
+            switch (timeType) {
+                case HOUR:
+                    return time.plusDays(offset);
+                case DAY:
+                    return time.plusMonths(offset);
+                case MONTH:
+                case YEAR:
+                    return time.plusYears(offset);
+                default:
+                    return time;
+            }
+        }
+    }
+
+
+    private List<StatisticResult> buildNewDatas(List<EnergyIndex> indexList, TimeType timeType,
+                                                List<DataItem> currentValues,
+                                                List<DataItem> previousValues,
+                                                List<DataItem> lastYearValues,
+                                                List<StatisticResult> statisticResults,
+                                                DateTime beginTime,
+                                                DateTime endTime, String type) {
+        List<StatisticResult> results = new ArrayList<>();
+        indexList.forEach(index -> {
+            DateTime tmpTime = beginTime;
+            String indexId = index.getIndexId();
+            Optional<StatisticResult> statisticResult;
+            if (statisticResults == null) {
+                statisticResult = Optional.empty();
+            } else {
+                statisticResult = statisticResults.stream()
+                        .filter(f -> StringUtils.equalsIgnoreCase(f.getIndexId(), indexId))
+                        .findFirst();
+            }
+
+            while (tmpTime.isBefore(endTime)) {
+                StatisticResult result = new StatisticResult();
+                result.setIndexId(indexId);
+                result.setIndexCode(index.getCode());
+                result.setIndexName(index.getName());
+                result.setUnitId(index.getUnitId());
+
+                if (statisticResult.isPresent()) {
+                    result.setMaxValue(statisticResult.get().getMaxValue());
+                    result.setMinValue(statisticResult.get().getMinValue());
+                    result.setAvgValue(statisticResult.get().getAvgValue());
+                }
+
+                result.setDataTime(tmpTime.toDate());
+                DataItem currentValue = findValue(currentValues, indexId, tmpTime);
+                result.setCurrentValue(currentValue.getValue() == null ? 0 : currentValue.getValue());
+
+                DateTime preTime = getTime(tmpTime, timeType, -1, type);
+                DataItem previousValue = findValue(previousValues, indexId, preTime);
+                result.setPreviousValue(previousValue.getValue() == null ? 0 : previousValue.getValue());
+
+                DateTime lastYearTime = tmpTime.plusYears(-1);
+                DataItem lastYearValue = findValue(lastYearValues, indexId, lastYearTime);
+                result.setLastYearValue(lastYearValue.getValue() == null ? 0 : lastYearValue.getValue());
+                results.add(result);
+                tmpTime = getTime(tmpTime, timeType, 1, STATISTIC_QUERY_TYPE);
+            }
+        });
+
+        return results;
+    }
+
+    public static <E> List<List<E>> splitList(List<E> targetList, Integer splitSize) {
+        if (targetList == null) {
+            return Collections.emptyList();
+        }
+
+        int size = targetList.size();
+        List<List<E>> resultList = new ArrayList<>();
+        if (size <= splitSize) {
+            resultList.add(targetList);
+        } else {
+            for (int i = 0; i < size; i += splitSize) {
+                //鐢ㄤ簬闄愬埗鏈�鍚庝竴閮ㄥ垎size灏忎簬splitSize鐨刲ist
+                int limit = i + splitSize;
+                if (limit > size) {
+                    limit = size;
+                }
+                resultList.add(targetList.subList(i, limit));
+            }
+        }
+        return resultList;
+    }
+
+    private static class ReBuildTime {
+        private TimeType timeType;
+        private Date beginTime;
+        private Date endTime;
+        private DateTime begin;
+        private DateTime end;
+
+        public ReBuildTime(TimeType timeType, Date beginTime, Date endTime) {
+            this.timeType = timeType;
+            this.beginTime = beginTime;
+            this.endTime = endTime;
+        }
+
+        public DateTime getBegin() {
+            return begin;
+        }
+
+        public DateTime getEnd() {
+            return end;
+        }
+
+        public ReBuildTime invoke() {
+            begin = new DateTime(beginTime);
+            end = new DateTime(endTime);
+            DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:00:00");
+            if (timeType == TimeType.HOUR) {
+                formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:00:00");
+            } else if (timeType == TimeType.DAY) {
+                formatter = DateTimeFormat.forPattern("yyyy-MM-dd");
+            } else if (timeType == TimeType.MONTH) {
+                formatter = DateTimeFormat.forPattern("yyyy-MM-01");
+            } else if (timeType == TimeType.YEAR) {
+                formatter = DateTimeFormat.forPattern("yyyy-01-01");
+            }
+
+            begin = formatter.parseDateTime(begin.toString(formatter));
+            end = formatter.parseDateTime(end.toString(formatter));
+            return this;
+        }
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java
new file mode 100644
index 0000000..bb8b97b
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java
@@ -0,0 +1,149 @@
+package com.zhitan.realtimedata.service.impl;
+
+import com.google.common.collect.Lists;
+import com.zhitan.common.enums.CollectionModes;
+import com.zhitan.realtimedata.data.influxdb.InfluxDBRepository;
+import com.zhitan.realtimedata.domain.TagValue;
+import com.zhitan.realtimedata.service.RealtimeDatabaseService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 瀹炴椂鏁版嵁搴撳彇鏁版湇鍔″疄鐜扮被.
+ */
+@Service
+public class RealtimeDatabaseServiceImpl implements RealtimeDatabaseService {
+
+    private final InfluxDBRepository repository;
+
+    public RealtimeDatabaseServiceImpl(InfluxDBRepository repository) {
+        this.repository = repository;
+    }
+
+    /**
+     * 鑾峰彇鍗曚釜娴嬬偣鐨勫疄鏃舵暟鎹�.
+     *
+     * @param tagCode 娴嬬偣缂栧彿
+     * @return 娴嬭瘯瀹炴椂鏁版嵁
+     */
+    @Override
+    public TagValue retrieve(String tagCode) {
+        return repository.query(tagCode);
+    }
+
+    /**
+     * 鑾峰彇鎵归噺娴嬬偣鐨勫疄鏃舵暟鎹�.
+     *
+     * @param tagCodes 娴嬬偣缂栫爜闆嗗悎
+     * @return 瀹炴椂鏁版嵁闆嗗悎
+     */
+    @Override
+    public List<TagValue> retrieve(List<String> tagCodes) {
+        return repository.query(tagCodes);
+    }
+
+    /**
+     * 鑾峰彇娴嬬偣鐨勫巻鍙叉椂鍒诲��.
+     *
+     * @param tagCode  娴嬬偣缂栧彿
+     * @param dataTime 鍘嗗彶鏃跺埢
+     * @return 娴嬬偣鍘嗗彶鏃跺埢鍊�
+     */
+    @Override
+    public TagValue retrieve(String tagCode, Date dataTime) {
+        return repository.query(tagCode, dataTime);
+    }
+
+    /**
+     * 鑾峰彇鎵归噺娴嬬偣鐨勫巻鍙叉椂鍒诲��.
+     *
+     * @param tagCodes 娴嬬偣缂栧彿闆嗗悎
+     * @param dataTime 鍘嗗彶鏃跺埢
+     * @return 娴嬭瘯鍘嗗彶鏃跺埢鏁版嵁闆嗗悎
+     */
+    @Override
+    public List<TagValue> retrieve(List<String> tagCodes, Date dataTime) {
+        return repository.query(tagCodes, dataTime);
+    }
+
+    /**
+     * 鑾峰彇涓�娈垫椂闂村唴娴嬬偣鐨勫巻鍙叉暟鎹�.
+     *
+     * @param tagCode    娴嬬偣缂栧彿
+     * @param beginTime  寮�濮嬫椂闂�
+     * @param endTime    缁撴潫鏃堕棿
+     * @param pointCount 娴嬬偣寰楀埌鐨勬暟鎹釜鏁�
+     * @return 娴嬬偣鍘嗗彶鏁版嵁
+     */
+    @Override
+    public List<TagValue> retrieve(String tagCode, Date beginTime, Date endTime, int pointCount) {
+        return repository.getHistoryData(Lists.newArrayList(tagCode), beginTime, endTime, pointCount);
+    }
+
+    /**
+     * 鑾峰彇涓�娈垫椂闂村唴鎵归噺娴嬬偣鐨勫巻鍙叉暟鎹�.
+     *
+     * @param tagCodes  娴嬬偣缂栧彿闆嗗悎
+     * @param beginTime 寮�濮嬫椂闂�
+     * @param endTime   缁撴潫鏃堕棿
+     * @return 娴嬬偣鍘嗗彶鏁版嵁
+     */
+    @Override
+    public List<TagValue> retrieve(List<String> tagCodes, Date beginTime, Date endTime, int pointCount) {
+        return repository.getHistoryData(tagCodes, beginTime, endTime, pointCount);
+    }
+
+    /**
+     * 鑾峰彇娴嬬偣鍦ㄤ竴娈垫椂闂村唴鐨勭粺璁℃暟鎹�.
+     *
+     * @param tagCode         娴嬬偣缂栧彿
+     * @param beginTime       寮�濮嬫椂闂�
+     * @param endTime         缁撴潫鏃堕棿
+     * @param collectionModes 缁熻绫诲瀷
+     * @return 娴嬬偣缁熻缁撴灉
+     */
+    @Override
+    public TagValue statistics(String tagCode, Date beginTime, Date endTime, CollectionModes collectionModes) {
+        List<TagValue> tagValues = repository.statistics(Collections.singletonList(tagCode), beginTime, endTime, collectionModes);
+        return CollectionUtils.isEmpty(tagValues) ? tagValues.get(0) : null;
+    }
+
+    /**
+     * 鑾峰彇娴嬬偣鍦ㄤ竴娈垫椂闂村唴鐨勭粺璁℃暟鎹�.
+     *
+     * @param tagCodes        娴嬬偣缂栧彿闆嗗悎
+     * @param beginTime       寮�濮嬫椂闂�
+     * @param endTime         缁撴潫鏃堕棿
+     * @param collectionModes 缁熻绫诲瀷
+     * @return 娴嬬偣缁熻缁撴灉
+     */
+    @Override
+    public List<TagValue> statistics(List<String> tagCodes, Date beginTime, Date endTime, CollectionModes collectionModes) {
+        return repository.statistics(tagCodes, beginTime, endTime, collectionModes);
+    }
+
+    /**
+     * 瀛樺偍娴嬬偣鐨勫疄鏃舵暟鎹�.
+     *
+     * @param tagValues 娴嬬偣瀹炴椂鏁版嵁
+     */
+    @Override
+    public void storeData(List<TagValue> tagValues) {
+        repository.store(tagValues);
+    }
+
+    /**
+     * 鎻掑叆娴嬬偣鍘嗗彶鏃跺埢鏁版嵁.
+     *
+     * @param tagValues 娴嬬偣鍘嗗彶鏃跺埢鏁版嵁
+     */
+    @Override
+    public void insertData(List<TagValue> tagValues) {
+        repository.store(tagValues);
+    }
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeTrendServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeTrendServiceImpl.java
new file mode 100644
index 0000000..35bf68d
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeTrendServiceImpl.java
@@ -0,0 +1,169 @@
+package com.zhitan.realtimedata.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.zhitan.basicdata.domain.MeterImplement;
+import com.zhitan.basicdata.services.IMeterImplementService;
+import com.zhitan.common.core.domain.entity.SysDictData;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.service.IEnergyIndexService;
+import com.zhitan.model.service.IModelNodeService;
+import com.zhitan.realtimedata.domain.TagValue;
+import com.zhitan.realtimedata.domain.dto.EnergyIndexMonitorDTO;
+import com.zhitan.realtimedata.domain.vo.*;
+import com.zhitan.realtimedata.service.RealtimeDatabaseService;
+import com.zhitan.realtimedata.service.RealtimeTrendService;
+import com.zhitan.system.service.ISysDictDataService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description
+ * @Author zhoubg
+ * @date 2024-10-15
+ **/
+@Service
+public class RealtimeTrendServiceImpl implements RealtimeTrendService {
+
+    @Autowired
+    private  IModelNodeService modelNodeService;
+
+    @Autowired
+    private  IEnergyIndexService energyIndexService;
+
+    @Autowired
+    private IMeterImplementService meterImplementService;
+
+    @Autowired
+    private RealtimeDatabaseService realtimeDatabaseService;
+
+    @Autowired
+    private ISysDictDataService dictDataService;
+
+    @Autowired
+    private IEnergyIndexService iEnergyIndexService;
+
+    @Override
+    public List<RealTimeDataVO> list(EnergyIndexMonitorDTO dto) {
+
+        List<RealTimeDataVO> realTimeList = new ArrayList<>();
+        if (StringUtils.isEmpty(dto.getNodeId())) {
+            return realTimeList;
+        }
+
+        // 鏍规嵁妯″瀷id鏌ヨ璁¢噺鍣ㄥ叿淇℃伅
+        String nodeId = dto.getNodeId();
+        List<MeterImplement> meterImplementList = modelNodeService.getSettingDeviceIndex(nodeId,dto.getEnergyType());
+        if (CollectionUtils.isEmpty(meterImplementList)) {
+            return realTimeList;
+        }
+        List<String> meterIds = meterImplementList.stream().map(MeterImplement::getId).collect(Collectors.toList());
+        if(CollectionUtils.isEmpty(meterIds)){
+            throw new RuntimeException("璇峰厛娣诲姞璁¢噺鍣ㄥ叿锛�");
+        }
+        List<EnergyIndex> energyIndexList = energyIndexService.listIndexByMeterIds(nodeId,meterIds);
+
+        // 鏌ヨ瀹炴椂鏁版嵁
+        List<String> meterCodes = meterImplementList.stream().map(MeterImplement::getCode).collect(Collectors.toList());
+        List<TagValue> tagValueList = realtimeDatabaseService.retrieve(meterCodes);
+
+        Map<String, List<EnergyIndex>> meterIndexMap = energyIndexList.stream().collect(Collectors.groupingBy(
+                EnergyIndex::getMeterId));
+
+        // 鏌ヨ鍣ㄥ叿绫诲瀷
+        Map<String, String> typeMap = dictDataService.selectDictDataByType("sys_device_type")
+                .stream().collect(Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel));
+
+        typeMap.forEach((key, value) -> {
+            RealTimeDataVO vo = new RealTimeDataVO();
+            vo.setEnergyTypeName(value);
+            List<SensorParamModel> sensorModelList = new ArrayList<>();
+            meterImplementList.stream().filter(li -> key.equals(li.getMeterType())).forEach(meter -> {
+                SensorParamModel sensorModel = new SensorParamModel();
+                sensorModel.setDeviceName(meter.getMeterName());
+                sensorModel.setEnergyTypeName(value);
+                sensorModel.setWireDiameter(meter.getWireDiameter());
+                sensorModel.setMaxAllowablePower(meter.getMaxAllowablePower());
+                List<RealTimeIndexModel> indexModelList = new ArrayList<>();
+                List<EnergyIndex> indexList = meterIndexMap.get(meter.getId());
+
+                if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(indexList)) {
+                    List<String> indexCodeList = indexList.stream().map(EnergyIndex::getCode).collect(Collectors.toList());
+                    Map<String, String> tagValueMap = tagValueList.stream().filter(li -> indexCodeList.contains(li.getTagCode()))
+                            .collect(Collectors.toMap(TagValue::getTagCode,o->o.getValue() + "@" + DateUtil.format(o.getDataTime(),"yyyy-MM-dd HH:mm:ss" )));
+                    for (EnergyIndex energyIndex : indexList) {
+                        RealTimeIndexModel model = new RealTimeIndexModel();
+                        String code = energyIndex.getCode();
+                        model.setIndexCode(code);
+                        model.setName(energyIndex.getName());
+                        model.setUnit(energyIndex.getUnitId());
+                        String tagValue = tagValueMap.get(code);
+                      
+                        if (StringUtils.isNotEmpty(tagValue)) {
+                            final String[] split = tagValue.split("@");
+                            model.setDataTime(split[1]);
+                            model.setValue( new BigDecimal(split[0]).setScale(2,RoundingMode.HALF_UP));
+                        }
+                        indexModelList.add(model);
+                    }
+                }
+                sensorModel.setEnergyIndexArray(indexModelList);
+                sensorModelList.add(sensorModel);
+            });
+            vo.setDeviceArray(sensorModelList);
+            realTimeList.add(vo);
+        });
+        return realTimeList;
+    }
+
+    @Override
+    public List<RealTimeHistoryDataVO> chartByDay(String tagCode, String dataTime) {
+        List<RealTimeHistoryDataVO> realTimeList = new ArrayList<>();
+        Date begin = DateUtil.parseDateTime(dataTime);
+        Date finish = DateUtil.offsetDay(begin, 1);
+        long millis = finish.getTime() - begin.getTime();
+        int pointCount = Integer.parseInt(String.valueOf(millis / (1000 * 60 * 15)));
+        List<TagValue> tagValueList = realtimeDatabaseService.retrieve(tagCode,begin,finish,pointCount);
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(tagValueList)) {
+            for (TagValue tagValue : tagValueList) {
+                RealTimeHistoryDataVO historyData = new RealTimeHistoryDataVO();
+                historyData.setName(DateUtil.formatDateTime(tagValue.getDataTime()));
+                historyData.setValue(BigDecimal.valueOf(tagValue.getValue()).setScale(2, RoundingMode.HALF_UP));
+                realTimeList.add(historyData);
+            }
+        }
+        return realTimeList;
+    }
+
+    @Override
+    public List<EquipmentPointParametersExcel> export(ExportrealtimeTrendVO exportrealtimeTrendVO) {
+
+        String tagCode = exportrealtimeTrendVO.getTagCode();
+        List<EquipmentPointParametersExcel> excelList = new ArrayList<>();
+        Date begin = DateUtil.parseDateTime(exportrealtimeTrendVO.getDataTime());
+        Date finish = DateUtil.offsetDay(begin, 1);
+        long millis = finish.getTime() - begin.getTime();
+        int pointCount = Integer.parseInt(String.valueOf(millis / (1000 * 60 * 15)));
+        List<TagValue> tagValueList = realtimeDatabaseService.retrieve(tagCode,begin,finish,pointCount);
+        // 鑾峰彇鍗曚綅
+        EnergyIndex energyIndex = iEnergyIndexService.getiEnergyIndexByCode(tagCode);
+        tagValueList.forEach(li ->{
+            EquipmentPointParametersExcel item = new EquipmentPointParametersExcel();
+            item.setIndexName(li.getTagCode());
+            item.setIndexUnit(energyIndex.getUnitId());
+            item.setTimeString(DateUtil.formatDateTime(li.getDataTime()));
+            item.setValue(li.getValue().toString());
+            excelList.add(item);
+        });
+       return excelList;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/SysEquipmentFileServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/SysEquipmentFileServiceImpl.java
new file mode 100644
index 0000000..4da704a
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/SysEquipmentFileServiceImpl.java
@@ -0,0 +1,47 @@
+package com.zhitan.realtimedata.service.impl;
+
+import com.zhitan.realtimedata.domain.SysEquipmentFile;
+import com.zhitan.realtimedata.domain.SysSvgInfo;
+import com.zhitan.realtimedata.mapper.SysEquipmentFileMapper;
+import com.zhitan.realtimedata.service.ISysEquipmentFileService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 鎷撴墤鍥維ervice涓氬姟灞傚鐞�
+ *
+ */
+@Service
+public class SysEquipmentFileServiceImpl implements ISysEquipmentFileService {
+
+  @Autowired
+  private SysEquipmentFileMapper equipmentFileMapper;
+
+  @Override
+  public void saveEquipmentFile(SysEquipmentFile sysEquipmentFile) {
+    equipmentFileMapper.saveEquipmentFile(sysEquipmentFile);
+  }
+
+  @Override
+  public void saveSettingInfo(String nodeId, List<SysSvgInfo> svgInfo) {
+    equipmentFileMapper.saveSettingInfo(nodeId, svgInfo);
+  }
+
+  @Override
+  public SysEquipmentFile getConfigure(String nodeId) {
+    SysEquipmentFile sysEquipmentFile = equipmentFileMapper.getConfigure(nodeId);
+    List<SysSvgInfo> infos = getConfigureTag(nodeId);
+    if (sysEquipmentFile != null) {
+      sysEquipmentFile.setInfoList(infos);
+    }
+
+    return sysEquipmentFile;
+  }
+
+  @Override
+  public List<SysSvgInfo> getConfigureTag(String nodeId) {
+    return equipmentFileMapper.getConfigureTag(nodeId);
+  }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/domain/SysCache.java b/zhitan-system/src/main/java/com/zhitan/system/domain/SysCache.java
new file mode 100644
index 0000000..2ee1613
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/domain/SysCache.java
@@ -0,0 +1,81 @@
+package com.zhitan.system.domain;
+
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 缂撳瓨淇℃伅
+ * 
+ * @author zhitan
+ */
+public class SysCache
+{
+    /** 缂撳瓨鍚嶇О */
+    private String cacheName = "";
+
+    /** 缂撳瓨閿悕 */
+    private String cacheKey = "";
+
+    /** 缂撳瓨鍐呭 */
+    private String cacheValue = "";
+
+    /** 澶囨敞 */
+    private String remark = "";
+
+    public SysCache()
+    {
+
+    }
+
+    public SysCache(String cacheName, String remark)
+    {
+        this.cacheName = cacheName;
+        this.remark = remark;
+    }
+
+    public SysCache(String cacheName, String cacheKey, String cacheValue)
+    {
+        this.cacheName = StringUtils.replace(cacheName, ":", "");
+        this.cacheKey = StringUtils.replace(cacheKey, cacheName, "");
+        this.cacheValue = cacheValue;
+    }
+
+    public String getCacheName()
+    {
+        return cacheName;
+    }
+
+    public void setCacheName(String cacheName)
+    {
+        this.cacheName = cacheName;
+    }
+
+    public String getCacheKey()
+    {
+        return cacheKey;
+    }
+
+    public void setCacheKey(String cacheKey)
+    {
+        this.cacheKey = cacheKey;
+    }
+
+    public String getCacheValue()
+    {
+        return cacheValue;
+    }
+
+    public void setCacheValue(String cacheValue)
+    {
+        this.cacheValue = cacheValue;
+    }
+
+    public String getRemark()
+    {
+        return remark;
+    }
+
+    public void setRemark(String remark)
+    {
+        this.remark = remark;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/domain/SysConfig.java b/zhitan-system/src/main/java/com/zhitan/system/domain/SysConfig.java
new file mode 100644
index 0000000..aaea5c3
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/domain/SysConfig.java
@@ -0,0 +1,115 @@
+package com.zhitan.system.domain;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.annotation.Excel.ColumnType;
+import com.zhitan.common.core.domain.BaseEntity;
+
+/**
+ * 鍙傛暟閰嶇疆琛� sys_config
+ *
+ * @author zhitan
+ */
+@TableName("sys_config")
+public class SysConfig extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鍙傛暟涓婚敭
+     */
+    @TableId
+    @Excel(name = "鍙傛暟涓婚敭", cellType = ColumnType.NUMERIC)
+    private Long configId;
+
+    /**
+     * 鍙傛暟鍚嶇О
+     */
+    @Excel(name = "鍙傛暟鍚嶇О")
+    private String configName;
+
+    /**
+     * 鍙傛暟閿悕
+     */
+    @Excel(name = "鍙傛暟閿悕")
+    private String configKey;
+
+    /**
+     * 鍙傛暟閿��
+     */
+    @Excel(name = "鍙傛暟閿��")
+    private String configValue;
+
+    /**
+     * 绯荤粺鍐呯疆锛圷鏄� N鍚︼級
+     */
+    @Excel(name = "绯荤粺鍐呯疆", readConverterExp = "Y=鏄�,N=鍚�")
+    private String configType;
+
+    public Long getConfigId() {
+        return configId;
+    }
+
+    public void setConfigId(Long configId) {
+        this.configId = configId;
+    }
+
+    @NotBlank(message = "鍙傛暟鍚嶇О涓嶈兘涓虹┖")
+    @Size(min = 0, max = 100, message = "鍙傛暟鍚嶇О涓嶈兘瓒呰繃100涓瓧绗�")
+    public String getConfigName() {
+        return configName;
+    }
+
+    public void setConfigName(String configName) {
+        this.configName = configName;
+    }
+
+    @NotBlank(message = "鍙傛暟閿悕闀垮害涓嶈兘涓虹┖")
+    @Size(min = 0, max = 100, message = "鍙傛暟閿悕闀垮害涓嶈兘瓒呰繃100涓瓧绗�")
+    public String getConfigKey() {
+        return configKey;
+    }
+
+    public void setConfigKey(String configKey) {
+        this.configKey = configKey;
+    }
+
+    @NotBlank(message = "鍙傛暟閿�间笉鑳戒负绌�")
+    @Size(min = 0, max = 500, message = "鍙傛暟閿�奸暱搴︿笉鑳借秴杩�500涓瓧绗�")
+    public String getConfigValue() {
+        return configValue;
+    }
+
+    public void setConfigValue(String configValue) {
+        this.configValue = configValue;
+    }
+
+    public String getConfigType() {
+        return configType;
+    }
+
+    public void setConfigType(String configType) {
+        this.configType = configType;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("configId", getConfigId())
+                .append("configName", getConfigName())
+                .append("configKey", getConfigKey())
+                .append("configValue", getConfigValue())
+                .append("configType", getConfigType())
+                .append("createBy", getCreateBy())
+                .append("createTime", getCreateTime())
+                .append("updateBy", getUpdateBy())
+                .append("updateTime", getUpdateTime())
+                .append("remark", getRemark())
+                .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/domain/SysLoginInfo.java b/zhitan-system/src/main/java/com/zhitan/system/domain/SysLoginInfo.java
new file mode 100644
index 0000000..ea72305
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/domain/SysLoginInfo.java
@@ -0,0 +1,149 @@
+package com.zhitan.system.domain;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.annotation.Excel.ColumnType;
+import com.zhitan.common.core.domain.BaseEntity;
+
+/**
+ * 绯荤粺璁块棶璁板綍琛� sys_logininfor
+ * 
+ * @author zhitan
+ */
+@TableName("sys_logininfor")
+public class SysLoginInfo extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    @TableId
+    @Excel(name = "搴忓彿", cellType = ColumnType.NUMERIC)
+    private Long infoId;
+
+    /** 鐢ㄦ埛璐﹀彿 */
+    @Excel(name = "鐢ㄦ埛璐﹀彿")
+    private String userName;
+
+    /** 鐧诲綍鐘舵�� 0鎴愬姛 1澶辫触 */
+    @Excel(name = "鐧诲綍鐘舵��", readConverterExp = "0=鎴愬姛,1=澶辫触")
+    private String status;
+
+    /** 鐧诲綍IP鍦板潃 */
+    @Excel(name = "鐧诲綍鍦板潃")
+    private String ipaddr;
+
+    /** 鐧诲綍鍦扮偣 */
+    @Excel(name = "鐧诲綍鍦扮偣")
+    private String loginLocation;
+
+    /** 娴忚鍣ㄧ被鍨� */
+    @Excel(name = "娴忚鍣�")
+    private String browser;
+
+    /** 鎿嶄綔绯荤粺 */
+    @Excel(name = "鎿嶄綔绯荤粺")
+    private String os;
+
+    /** 鎻愮ず娑堟伅 */
+    @Excel(name = "鎻愮ず娑堟伅")
+    private String msg;
+
+    /** 璁块棶鏃堕棿 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "璁块棶鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date loginTime;
+
+    public Long getInfoId()
+    {
+        return infoId;
+    }
+
+    public void setInfoId(Long infoId)
+    {
+        this.infoId = infoId;
+    }
+
+    public String getUserName()
+    {
+        return userName;
+    }
+
+    public void setUserName(String userName)
+    {
+        this.userName = userName;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    public String getIpaddr()
+    {
+        return ipaddr;
+    }
+
+    public void setIpaddr(String ipaddr)
+    {
+        this.ipaddr = ipaddr;
+    }
+
+    public String getLoginLocation()
+    {
+        return loginLocation;
+    }
+
+    public void setLoginLocation(String loginLocation)
+    {
+        this.loginLocation = loginLocation;
+    }
+
+    public String getBrowser()
+    {
+        return browser;
+    }
+
+    public void setBrowser(String browser)
+    {
+        this.browser = browser;
+    }
+
+    public String getOs()
+    {
+        return os;
+    }
+
+    public void setOs(String os)
+    {
+        this.os = os;
+    }
+
+    public String getMsg()
+    {
+        return msg;
+    }
+
+    public void setMsg(String msg)
+    {
+        this.msg = msg;
+    }
+
+    public Date getLoginTime()
+    {
+        return loginTime;
+    }
+
+    public void setLoginTime(Date loginTime)
+    {
+        this.loginTime = loginTime;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/domain/SysNameConfig.java b/zhitan-system/src/main/java/com/zhitan/system/domain/SysNameConfig.java
new file mode 100644
index 0000000..16bae8a
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/domain/SysNameConfig.java
@@ -0,0 +1,104 @@
+package com.zhitan.system.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 绯荤粺鍚嶇О閰嶇疆瀵硅薄 sys_name_config
+ *
+ * @author ZhiTan
+ * @date 2024-11-05
+ */
+@TableName("sys_name_config")
+public class SysNameConfig extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** 绯荤粺鍚嶇О */
+    @Excel(name = "绯荤粺鍚嶇О")
+    private String systemName;
+
+    /** 宸︿笂瑙抣ogo */
+    @Excel(name = "宸︿笂瑙抣ogo")
+    private String leftLogo;
+
+    /** 搴曢儴鐗堟潈 */
+    @Excel(name = "搴曢儴鐗堟潈")
+    private String copyRight;
+
+    /** 涓婚敭 */
+    private String id;
+
+    /** 棣栭〉logo */
+    @Excel(name = "棣栭〉logo")
+    private String homeLogo;
+
+        
+    public void setSystemName(String systemName)
+    {
+        this.systemName = systemName;
+    }
+
+    public String getSystemName()
+    {
+        return systemName;
+    }
+        
+    public void setLeftLogo(String leftLogo)
+    {
+        this.leftLogo = leftLogo;
+    }
+
+    public String getLeftLogo()
+    {
+        return leftLogo;
+    }
+        
+    public void setCopyRight(String copyRight)
+    {
+        this.copyRight = copyRight;
+    }
+
+    public String getCopyRight()
+    {
+        return copyRight;
+    }
+        
+    public void setId(String id)
+    {
+        this.id = id;
+    }
+
+    public String getId()
+    {
+        return id;
+    }
+        
+    public void setHomeLogo(String homeLogo)
+    {
+        this.homeLogo = homeLogo;
+    }
+
+    public String getHomeLogo()
+    {
+        return homeLogo;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("systemName", getSystemName())
+            .append("leftLogo", getLeftLogo())
+            .append("copyRight", getCopyRight())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .append("id", getId())
+            .append("homeLogo", getHomeLogo())
+        .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/domain/SysNotice.java b/zhitan-system/src/main/java/com/zhitan/system/domain/SysNotice.java
new file mode 100644
index 0000000..91417fb
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/domain/SysNotice.java
@@ -0,0 +1,105 @@
+package com.zhitan.system.domain;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zhitan.common.core.domain.BaseEntity;
+import com.zhitan.common.xss.Xss;
+
+/**
+ * 閫氱煡鍏憡琛� sys_notice
+ * 
+ * @author zhitan
+ */
+public class SysNotice extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 鍏憡ID */
+    @TableId
+    private Long noticeId;
+
+    /** 鍏憡鏍囬 */
+    private String noticeTitle;
+
+    /** 鍏憡绫诲瀷锛�1閫氱煡 2鍏憡锛� */
+    private String noticeType;
+
+    /** 鍏憡鍐呭 */
+    private String noticeContent;
+
+    /** 鍏憡鐘舵�侊紙0姝e父 1鍏抽棴锛� */
+    private String status;
+
+    public Long getNoticeId()
+    {
+        return noticeId;
+    }
+
+    public void setNoticeId(Long noticeId)
+    {
+        this.noticeId = noticeId;
+    }
+
+    public void setNoticeTitle(String noticeTitle)
+    {
+        this.noticeTitle = noticeTitle;
+    }
+
+    @Xss(message = "鍏憡鏍囬涓嶈兘鍖呭惈鑴氭湰瀛楃")
+    @NotBlank(message = "鍏憡鏍囬涓嶈兘涓虹┖")
+    @Size(min = 0, max = 50, message = "鍏憡鏍囬涓嶈兘瓒呰繃50涓瓧绗�")
+    public String getNoticeTitle()
+    {
+        return noticeTitle;
+    }
+
+    public void setNoticeType(String noticeType)
+    {
+        this.noticeType = noticeType;
+    }
+
+    public String getNoticeType()
+    {
+        return noticeType;
+    }
+
+    public void setNoticeContent(String noticeContent)
+    {
+        this.noticeContent = noticeContent;
+    }
+
+    public String getNoticeContent()
+    {
+        return noticeContent;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("noticeId", getNoticeId())
+            .append("noticeTitle", getNoticeTitle())
+            .append("noticeType", getNoticeType())
+            .append("noticeContent", getNoticeContent())
+            .append("status", getStatus())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/domain/SysOperLog.java b/zhitan-system/src/main/java/com/zhitan/system/domain/SysOperLog.java
new file mode 100644
index 0000000..92607b7
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/domain/SysOperLog.java
@@ -0,0 +1,272 @@
+package com.zhitan.system.domain;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.annotation.Excel.ColumnType;
+import com.zhitan.common.core.domain.BaseEntity;
+
+/**
+ * 鎿嶄綔鏃ュ織璁板綍琛� oper_log
+ * 
+ * @author zhitan
+ */
+public class SysOperLog extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 鏃ュ織涓婚敭 */
+    @TableId
+    @Excel(name = "鎿嶄綔搴忓彿", cellType = ColumnType.NUMERIC)
+    private Long operId;
+
+    /** 鎿嶄綔妯″潡 */
+    @Excel(name = "鎿嶄綔妯″潡")
+    private String title;
+
+    /** 涓氬姟绫诲瀷锛�0鍏跺畠 1鏂板 2淇敼 3鍒犻櫎锛� */
+    @Excel(name = "涓氬姟绫诲瀷", readConverterExp = "0=鍏跺畠,1=鏂板,2=淇敼,3=鍒犻櫎,4=鎺堟潈,5=瀵煎嚭,6=瀵煎叆,7=寮洪��,8=鐢熸垚浠g爜,9=娓呯┖鏁版嵁")
+    private Integer businessType;
+
+    /** 涓氬姟绫诲瀷鏁扮粍 */
+    private Integer[] businessTypes;
+
+    /** 璇锋眰鏂规硶 */
+    @Excel(name = "璇锋眰鏂规硶")
+    private String method;
+
+    /** 璇锋眰鏂瑰紡 */
+    @Excel(name = "璇锋眰鏂瑰紡")
+    private String requestMethod;
+
+    /** 鎿嶄綔绫诲埆锛�0鍏跺畠 1鍚庡彴鐢ㄦ埛 2鎵嬫満绔敤鎴凤級 */
+    @Excel(name = "鎿嶄綔绫诲埆", readConverterExp = "0=鍏跺畠,1=鍚庡彴鐢ㄦ埛,2=鎵嬫満绔敤鎴�")
+    private Integer operatorType;
+
+    /** 鎿嶄綔浜哄憳 */
+    @Excel(name = "鎿嶄綔浜哄憳")
+    private String operName;
+
+    /** 閮ㄩ棬鍚嶇О */
+    @Excel(name = "閮ㄩ棬鍚嶇О")
+    private String deptName;
+
+    /** 璇锋眰url */
+    @Excel(name = "璇锋眰鍦板潃")
+    private String operUrl;
+
+    /** 鎿嶄綔鍦板潃 */
+    @Excel(name = "鎿嶄綔鍦板潃")
+    private String operIp;
+
+    /** 鎿嶄綔鍦扮偣 */
+    @Excel(name = "鎿嶄綔鍦扮偣")
+    private String operLocation;
+
+    /** 璇锋眰鍙傛暟 */
+    @Excel(name = "璇锋眰鍙傛暟")
+    private String operParam;
+
+    /** 杩斿洖鍙傛暟 */
+    @Excel(name = "杩斿洖鍙傛暟")
+    private String jsonResult;
+
+    /** 鎿嶄綔鐘舵�侊紙0姝e父 1寮傚父锛� */
+    @Excel(name = "鐘舵��", readConverterExp = "0=姝e父,1=寮傚父")
+    private Integer status;
+
+    /** 閿欒娑堟伅 */
+    @Excel(name = "閿欒娑堟伅")
+    private String errorMsg;
+
+    /** 鎿嶄綔鏃堕棿 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "鎿嶄綔鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date operTime;
+
+    /** 娑堣�楁椂闂� */
+    @Excel(name = "娑堣�楁椂闂�", suffix = "姣")
+    private Long costTime;
+
+    public Long getOperId()
+    {
+        return operId;
+    }
+
+    public void setOperId(Long operId)
+    {
+        this.operId = operId;
+    }
+
+    public String getTitle()
+    {
+        return title;
+    }
+
+    public void setTitle(String title)
+    {
+        this.title = title;
+    }
+
+    public Integer getBusinessType()
+    {
+        return businessType;
+    }
+
+    public void setBusinessType(Integer businessType)
+    {
+        this.businessType = businessType;
+    }
+
+    public Integer[] getBusinessTypes()
+    {
+        return businessTypes;
+    }
+
+    public void setBusinessTypes(Integer[] businessTypes)
+    {
+        this.businessTypes = businessTypes;
+    }
+
+    public String getMethod()
+    {
+        return method;
+    }
+
+    public void setMethod(String method)
+    {
+        this.method = method;
+    }
+
+    public String getRequestMethod()
+    {
+        return requestMethod;
+    }
+
+    public void setRequestMethod(String requestMethod)
+    {
+        this.requestMethod = requestMethod;
+    }
+
+    public Integer getOperatorType()
+    {
+        return operatorType;
+    }
+
+    public void setOperatorType(Integer operatorType)
+    {
+        this.operatorType = operatorType;
+    }
+
+    public String getOperName()
+    {
+        return operName;
+    }
+
+    public void setOperName(String operName)
+    {
+        this.operName = operName;
+    }
+
+    public String getDeptName()
+    {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName)
+    {
+        this.deptName = deptName;
+    }
+
+    public String getOperUrl()
+    {
+        return operUrl;
+    }
+
+    public void setOperUrl(String operUrl)
+    {
+        this.operUrl = operUrl;
+    }
+
+    public String getOperIp()
+    {
+        return operIp;
+    }
+
+    public void setOperIp(String operIp)
+    {
+        this.operIp = operIp;
+    }
+
+    public String getOperLocation()
+    {
+        return operLocation;
+    }
+
+    public void setOperLocation(String operLocation)
+    {
+        this.operLocation = operLocation;
+    }
+
+    public String getOperParam()
+    {
+        return operParam;
+    }
+
+    public void setOperParam(String operParam)
+    {
+        this.operParam = operParam;
+    }
+
+    public String getJsonResult()
+    {
+        return jsonResult;
+    }
+
+    public void setJsonResult(String jsonResult)
+    {
+        this.jsonResult = jsonResult;
+    }
+
+    public Integer getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(Integer status)
+    {
+        this.status = status;
+    }
+
+    public String getErrorMsg()
+    {
+        return errorMsg;
+    }
+
+    public void setErrorMsg(String errorMsg)
+    {
+        this.errorMsg = errorMsg;
+    }
+
+    public Date getOperTime()
+    {
+        return operTime;
+    }
+
+    public void setOperTime(Date operTime)
+    {
+        this.operTime = operTime;
+    }
+
+    public Long getCostTime()
+    {
+        return costTime;
+    }
+
+    public void setCostTime(Long costTime)
+    {
+        this.costTime = costTime;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/domain/SysPost.java b/zhitan-system/src/main/java/com/zhitan/system/domain/SysPost.java
new file mode 100644
index 0000000..be46283
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/domain/SysPost.java
@@ -0,0 +1,127 @@
+package com.zhitan.system.domain;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zhitan.common.annotation.Excel;
+import com.zhitan.common.annotation.Excel.ColumnType;
+import com.zhitan.common.core.domain.BaseEntity;
+
+/**
+ * 宀椾綅琛� sys_post
+ * 
+ * @author zhitan
+ */
+public class SysPost extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 宀椾綅搴忓彿 */
+    @TableId
+    @Excel(name = "宀椾綅搴忓彿", cellType = ColumnType.NUMERIC)
+    private Long postId;
+
+    /** 宀椾綅缂栫爜 */
+    @Excel(name = "宀椾綅缂栫爜")
+    private String postCode;
+
+    /** 宀椾綅鍚嶇О */
+    @Excel(name = "宀椾綅鍚嶇О")
+    private String postName;
+
+    /** 宀椾綅鎺掑簭 */
+    @Excel(name = "宀椾綅鎺掑簭")
+    private Integer postSort;
+
+    /** 鐘舵�侊紙0姝e父 1鍋滅敤锛� */
+    @Excel(name = "鐘舵��", readConverterExp = "0=姝e父,1=鍋滅敤")
+    private String status;
+
+    /** 鐢ㄦ埛鏄惁瀛樺湪姝ゅ矖浣嶆爣璇� 榛樿涓嶅瓨鍦� */
+    private boolean flag = false;
+
+    public Long getPostId()
+    {
+        return postId;
+    }
+
+    public void setPostId(Long postId)
+    {
+        this.postId = postId;
+    }
+
+    @NotBlank(message = "宀椾綅缂栫爜涓嶈兘涓虹┖")
+    @Size(min = 0, max = 64, message = "宀椾綅缂栫爜闀垮害涓嶈兘瓒呰繃64涓瓧绗�")
+    public String getPostCode()
+    {
+        return postCode;
+    }
+
+    public void setPostCode(String postCode)
+    {
+        this.postCode = postCode;
+    }
+
+    @NotBlank(message = "宀椾綅鍚嶇О涓嶈兘涓虹┖")
+    @Size(min = 0, max = 50, message = "宀椾綅鍚嶇О闀垮害涓嶈兘瓒呰繃50涓瓧绗�")
+    public String getPostName()
+    {
+        return postName;
+    }
+
+    public void setPostName(String postName)
+    {
+        this.postName = postName;
+    }
+
+    @NotNull(message = "鏄剧ず椤哄簭涓嶈兘涓虹┖")
+    public Integer getPostSort()
+    {
+        return postSort;
+    }
+
+    public void setPostSort(Integer postSort)
+    {
+        this.postSort = postSort;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    public boolean isFlag()
+    {
+        return flag;
+    }
+
+    public void setFlag(boolean flag)
+    {
+        this.flag = flag;
+    }
+    
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("postId", getPostId())
+            .append("postCode", getPostCode())
+            .append("postName", getPostName())
+            .append("postSort", getPostSort())
+            .append("status", getStatus())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/domain/SysRoleDept.java b/zhitan-system/src/main/java/com/zhitan/system/domain/SysRoleDept.java
new file mode 100644
index 0000000..6dffb23
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/domain/SysRoleDept.java
@@ -0,0 +1,46 @@
+package com.zhitan.system.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 瑙掕壊鍜岄儴闂ㄥ叧鑱� sys_role_dept
+ * 
+ * @author zhitan
+ */
+public class SysRoleDept
+{
+    /** 瑙掕壊ID */
+    private Long roleId;
+    
+    /** 閮ㄩ棬ID */
+    private Long deptId;
+
+    public Long getRoleId()
+    {
+        return roleId;
+    }
+
+    public void setRoleId(Long roleId)
+    {
+        this.roleId = roleId;
+    }
+
+    public Long getDeptId()
+    {
+        return deptId;
+    }
+
+    public void setDeptId(Long deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("roleId", getRoleId())
+            .append("deptId", getDeptId())
+            .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/domain/SysRoleMenu.java b/zhitan-system/src/main/java/com/zhitan/system/domain/SysRoleMenu.java
new file mode 100644
index 0000000..554f7ee
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/domain/SysRoleMenu.java
@@ -0,0 +1,46 @@
+package com.zhitan.system.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 瑙掕壊鍜岃彍鍗曞叧鑱� sys_role_menu
+ * 
+ * @author zhitan
+ */
+public class SysRoleMenu
+{
+    /** 瑙掕壊ID */
+    private Long roleId;
+    
+    /** 鑿滃崟ID */
+    private Long menuId;
+
+    public Long getRoleId()
+    {
+        return roleId;
+    }
+
+    public void setRoleId(Long roleId)
+    {
+        this.roleId = roleId;
+    }
+
+    public Long getMenuId()
+    {
+        return menuId;
+    }
+
+    public void setMenuId(Long menuId)
+    {
+        this.menuId = menuId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("roleId", getRoleId())
+            .append("menuId", getMenuId())
+            .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/domain/SysUserOnline.java b/zhitan-system/src/main/java/com/zhitan/system/domain/SysUserOnline.java
new file mode 100644
index 0000000..ccca548
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/domain/SysUserOnline.java
@@ -0,0 +1,113 @@
+package com.zhitan.system.domain;
+
+/**
+ * 褰撳墠鍦ㄧ嚎浼氳瘽
+ * 
+ * @author zhitan
+ */
+public class SysUserOnline
+{
+    /** 浼氳瘽缂栧彿 */
+    private String tokenId;
+
+    /** 閮ㄩ棬鍚嶇О */
+    private String deptName;
+
+    /** 鐢ㄦ埛鍚嶇О */
+    private String userName;
+
+    /** 鐧诲綍IP鍦板潃 */
+    private String ipaddr;
+
+    /** 鐧诲綍鍦板潃 */
+    private String loginLocation;
+
+    /** 娴忚鍣ㄧ被鍨� */
+    private String browser;
+
+    /** 鎿嶄綔绯荤粺 */
+    private String os;
+
+    /** 鐧诲綍鏃堕棿 */
+    private Long loginTime;
+
+    public String getTokenId()
+    {
+        return tokenId;
+    }
+
+    public void setTokenId(String tokenId)
+    {
+        this.tokenId = tokenId;
+    }
+
+    public String getDeptName()
+    {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName)
+    {
+        this.deptName = deptName;
+    }
+
+    public String getUserName()
+    {
+        return userName;
+    }
+
+    public void setUserName(String userName)
+    {
+        this.userName = userName;
+    }
+
+    public String getIpaddr()
+    {
+        return ipaddr;
+    }
+
+    public void setIpaddr(String ipaddr)
+    {
+        this.ipaddr = ipaddr;
+    }
+
+    public String getLoginLocation()
+    {
+        return loginLocation;
+    }
+
+    public void setLoginLocation(String loginLocation)
+    {
+        this.loginLocation = loginLocation;
+    }
+
+    public String getBrowser()
+    {
+        return browser;
+    }
+
+    public void setBrowser(String browser)
+    {
+        this.browser = browser;
+    }
+
+    public String getOs()
+    {
+        return os;
+    }
+
+    public void setOs(String os)
+    {
+        this.os = os;
+    }
+
+    public Long getLoginTime()
+    {
+        return loginTime;
+    }
+
+    public void setLoginTime(Long loginTime)
+    {
+        this.loginTime = loginTime;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/domain/SysUserPost.java b/zhitan-system/src/main/java/com/zhitan/system/domain/SysUserPost.java
new file mode 100644
index 0000000..5f9c4e5
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/domain/SysUserPost.java
@@ -0,0 +1,46 @@
+package com.zhitan.system.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 鐢ㄦ埛鍜屽矖浣嶅叧鑱� sys_user_post
+ * 
+ * @author zhitan
+ */
+public class SysUserPost
+{
+    /** 鐢ㄦ埛ID */
+    private Long userId;
+    
+    /** 宀椾綅ID */
+    private Long postId;
+
+    public Long getUserId()
+    {
+        return userId;
+    }
+
+    public void setUserId(Long userId)
+    {
+        this.userId = userId;
+    }
+
+    public Long getPostId()
+    {
+        return postId;
+    }
+
+    public void setPostId(Long postId)
+    {
+        this.postId = postId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("userId", getUserId())
+            .append("postId", getPostId())
+            .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/domain/SysUserRole.java b/zhitan-system/src/main/java/com/zhitan/system/domain/SysUserRole.java
new file mode 100644
index 0000000..977d16c
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/domain/SysUserRole.java
@@ -0,0 +1,46 @@
+package com.zhitan.system.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 鐢ㄦ埛鍜岃鑹插叧鑱� sys_user_role
+ * 
+ * @author zhitan
+ */
+public class SysUserRole
+{
+    /** 鐢ㄦ埛ID */
+    private Long userId;
+    
+    /** 瑙掕壊ID */
+    private Long roleId;
+
+    public Long getUserId()
+    {
+        return userId;
+    }
+
+    public void setUserId(Long userId)
+    {
+        this.userId = userId;
+    }
+
+    public Long getRoleId()
+    {
+        return roleId;
+    }
+
+    public void setRoleId(Long roleId)
+    {
+        this.roleId = roleId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("userId", getUserId())
+            .append("roleId", getRoleId())
+            .toString();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/domain/vo/MetaVo.java b/zhitan-system/src/main/java/com/zhitan/system/domain/vo/MetaVo.java
new file mode 100644
index 0000000..e5c19b1
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/domain/vo/MetaVo.java
@@ -0,0 +1,106 @@
+package com.zhitan.system.domain.vo;
+
+import com.zhitan.common.utils.StringUtils;
+
+/**
+ * 璺敱鏄剧ず淇℃伅
+ * 
+ * @author zhitan
+ */
+public class MetaVo
+{
+    /**
+     * 璁剧疆璇ヨ矾鐢卞湪渚ц竟鏍忓拰闈㈠寘灞戜腑灞曠ず鐨勫悕瀛�
+     */
+    private String title;
+
+    /**
+     * 璁剧疆璇ヨ矾鐢辩殑鍥炬爣锛屽搴旇矾寰剆rc/assets/icons/svg
+     */
+    private String icon;
+
+    /**
+     * 璁剧疆涓簍rue锛屽垯涓嶄細琚� <keep-alive>缂撳瓨
+     */
+    private boolean noCache;
+
+    /**
+     * 鍐呴摼鍦板潃锛坔ttp(s)://寮�澶达級
+     */
+    private String link;
+
+    public MetaVo()
+    {
+    }
+
+    public MetaVo(String title, String icon)
+    {
+        this.title = title;
+        this.icon = icon;
+    }
+
+    public MetaVo(String title, String icon, boolean noCache)
+    {
+        this.title = title;
+        this.icon = icon;
+        this.noCache = noCache;
+    }
+
+    public MetaVo(String title, String icon, String link)
+    {
+        this.title = title;
+        this.icon = icon;
+        this.link = link;
+    }
+
+    public MetaVo(String title, String icon, boolean noCache, String link)
+    {
+        this.title = title;
+        this.icon = icon;
+        this.noCache = noCache;
+        if (StringUtils.ishttp(link))
+        {
+            this.link = link;
+        }
+    }
+
+    public boolean isNoCache()
+    {
+        return noCache;
+    }
+
+    public void setNoCache(boolean noCache)
+    {
+        this.noCache = noCache;
+    }
+
+    public String getTitle()
+    {
+        return title;
+    }
+
+    public void setTitle(String title)
+    {
+        this.title = title;
+    }
+
+    public String getIcon()
+    {
+        return icon;
+    }
+
+    public void setIcon(String icon)
+    {
+        this.icon = icon;
+    }
+
+    public String getLink()
+    {
+        return link;
+    }
+
+    public void setLink(String link)
+    {
+        this.link = link;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/domain/vo/RouterVo.java b/zhitan-system/src/main/java/com/zhitan/system/domain/vo/RouterVo.java
new file mode 100644
index 0000000..4ca9343
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/domain/vo/RouterVo.java
@@ -0,0 +1,148 @@
+package com.zhitan.system.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import java.util.List;
+
+/**
+ * 璺敱閰嶇疆淇℃伅
+ * 
+ * @author zhitan
+ */
+@JsonInclude(JsonInclude.Include.NON_EMPTY)
+public class RouterVo
+{
+    /**
+     * 璺敱鍚嶅瓧
+     */
+    private String name;
+
+    /**
+     * 璺敱鍦板潃
+     */
+    private String path;
+
+    /**
+     * 鏄惁闅愯棌璺敱锛屽綋璁剧疆 true 鐨勬椂鍊欒璺敱涓嶄細鍐嶄晶杈规爮鍑虹幇
+     */
+    private boolean hidden;
+
+    /**
+     * 閲嶅畾鍚戝湴鍧�锛屽綋璁剧疆 noRedirect 鐨勬椂鍊欒璺敱鍦ㄩ潰鍖呭睉瀵艰埅涓笉鍙鐐瑰嚮
+     */
+    private String redirect;
+
+    /**
+     * 缁勪欢鍦板潃
+     */
+    private String component;
+
+    /**
+     * 璺敱鍙傛暟锛氬 {"id": 1, "name": "ry"}
+     */
+    private String query;
+
+    /**
+     * 褰撲綘涓�涓矾鐢变笅闈㈢殑 children 澹版槑鐨勮矾鐢卞ぇ浜�1涓椂锛岃嚜鍔ㄤ細鍙樻垚宓屽鐨勬ā寮�--濡傜粍浠堕〉闈�
+     */
+    private Boolean alwaysShow;
+
+    /**
+     * 鍏朵粬鍏冪礌
+     */
+    private MetaVo meta;
+
+    /**
+     * 瀛愯矾鐢�
+     */
+    private List<RouterVo> children;
+
+    public String getName()
+    {
+        return name;
+    }
+
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+
+    public String getPath()
+    {
+        return path;
+    }
+
+    public void setPath(String path)
+    {
+        this.path = path;
+    }
+
+    public boolean getHidden()
+    {
+        return hidden;
+    }
+
+    public void setHidden(boolean hidden)
+    {
+        this.hidden = hidden;
+    }
+
+    public String getRedirect()
+    {
+        return redirect;
+    }
+
+    public void setRedirect(String redirect)
+    {
+        this.redirect = redirect;
+    }
+
+    public String getComponent()
+    {
+        return component;
+    }
+
+    public void setComponent(String component)
+    {
+        this.component = component;
+    }
+
+    public String getQuery()
+    {
+        return query;
+    }
+
+    public void setQuery(String query)
+    {
+        this.query = query;
+    }
+
+    public Boolean getAlwaysShow()
+    {
+        return alwaysShow;
+    }
+
+    public void setAlwaysShow(Boolean alwaysShow)
+    {
+        this.alwaysShow = alwaysShow;
+    }
+
+    public MetaVo getMeta()
+    {
+        return meta;
+    }
+
+    public void setMeta(MetaVo meta)
+    {
+        this.meta = meta;
+    }
+
+    public List<RouterVo> getChildren()
+    {
+        return children;
+    }
+
+    public void setChildren(List<RouterVo> children)
+    {
+        this.children = children;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/mapper/SysConfigMapper.java b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysConfigMapper.java
new file mode 100644
index 0000000..a1f36a2
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysConfigMapper.java
@@ -0,0 +1,78 @@
+package com.zhitan.system.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.system.domain.SysConfig;
+
+/**
+ * 鍙傛暟閰嶇疆 鏁版嵁灞�
+ * 
+ * @author zhitan
+ */
+ public interface SysConfigMapper extends BaseMapper<SysConfig>
+{
+    /**
+     * 鏌ヨ鍙傛暟閰嶇疆淇℃伅
+     * 
+     * @param config 鍙傛暟閰嶇疆淇℃伅
+     * @return 鍙傛暟閰嶇疆淇℃伅
+     */
+     SysConfig selectConfig(SysConfig config);
+
+    /**
+     * 閫氳繃ID鏌ヨ閰嶇疆
+     * 
+     * @param configId 鍙傛暟ID
+     * @return 鍙傛暟閰嶇疆淇℃伅
+     */
+     SysConfig selectConfigById(Long configId);
+
+    /**
+     * 鏌ヨ鍙傛暟閰嶇疆鍒楄〃
+     * 
+     * @param config 鍙傛暟閰嶇疆淇℃伅
+     * @return 鍙傛暟閰嶇疆闆嗗悎
+     */
+     List<SysConfig> selectConfigList(SysConfig config);
+
+    /**
+     * 鏍规嵁閿悕鏌ヨ鍙傛暟閰嶇疆淇℃伅
+     * 
+     * @param configKey 鍙傛暟閿悕
+     * @return 鍙傛暟閰嶇疆淇℃伅
+     */
+     SysConfig checkConfigKeyUnique(String configKey);
+
+    /**
+     * 鏂板鍙傛暟閰嶇疆
+     * 
+     * @param config 鍙傛暟閰嶇疆淇℃伅
+     * @return 缁撴灉
+     */
+     int insertConfig(SysConfig config);
+
+    /**
+     * 淇敼鍙傛暟閰嶇疆
+     * 
+     * @param config 鍙傛暟閰嶇疆淇℃伅
+     * @return 缁撴灉
+     */
+     int updateConfig(SysConfig config);
+
+    /**
+     * 鍒犻櫎鍙傛暟閰嶇疆
+     * 
+     * @param configId 鍙傛暟ID
+     * @return 缁撴灉
+     */
+     int deleteConfigById(Long configId);
+
+    /**
+     * 鎵归噺鍒犻櫎鍙傛暟淇℃伅
+     * 
+     * @param configIds 闇�瑕佸垹闄ょ殑鍙傛暟ID
+     * @return 缁撴灉
+     */
+     int deleteConfigByIds(Long[] configIds);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/mapper/SysDeptMapper.java b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysDeptMapper.java
new file mode 100644
index 0000000..ba3bab7
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysDeptMapper.java
@@ -0,0 +1,120 @@
+package com.zhitan.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.common.core.domain.entity.SysDept;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 閮ㄩ棬绠$悊 鏁版嵁灞�
+ * 
+ * @author zhitan
+ */
+ public interface SysDeptMapper extends BaseMapper<SysDept>
+{
+    /**
+     * 鏌ヨ閮ㄩ棬绠$悊鏁版嵁
+     * 
+     * @param dept 閮ㄩ棬淇℃伅
+     * @return 閮ㄩ棬淇℃伅闆嗗悎
+     */
+     List<SysDept> selectDeptList(SysDept dept);
+
+    /**
+     * 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戜俊鎭�
+     * 
+     * @param roleId 瑙掕壊ID
+     * @param deptCheckStrictly 閮ㄩ棬鏍戦�夋嫨椤规槸鍚﹀叧鑱旀樉绀�
+     * @return 閫変腑閮ㄩ棬鍒楄〃
+     */
+     List<Long> selectDeptListByRoleId(@Param("roleId") Long roleId, @Param("deptCheckStrictly") boolean deptCheckStrictly);
+
+    /**
+     * 鏍规嵁閮ㄩ棬ID鏌ヨ淇℃伅
+     * 
+     * @param deptId 閮ㄩ棬ID
+     * @return 閮ㄩ棬淇℃伅
+     */
+     SysDept selectDeptById(Long deptId);
+
+    /**
+     * 鏍规嵁ID鏌ヨ鎵�鏈夊瓙閮ㄩ棬
+     * 
+     * @param deptId 閮ㄩ棬ID
+     * @return 閮ㄩ棬鍒楄〃
+     */
+     List<SysDept> selectChildrenDeptById(Long deptId);
+
+    /**
+     * 鏍规嵁ID鏌ヨ鎵�鏈夊瓙閮ㄩ棬锛堟甯哥姸鎬侊級
+     * 
+     * @param deptId 閮ㄩ棬ID
+     * @return 瀛愰儴闂ㄦ暟
+     */
+     int selectNormalChildrenDeptById(Long deptId);
+
+    /**
+     * 鏄惁瀛樺湪瀛愯妭鐐�
+     * 
+     * @param deptId 閮ㄩ棬ID
+     * @return 缁撴灉
+     */
+     int hasChildByDeptId(Long deptId);
+
+    /**
+     * 鏌ヨ閮ㄩ棬鏄惁瀛樺湪鐢ㄦ埛
+     * 
+     * @param deptId 閮ㄩ棬ID
+     * @return 缁撴灉
+     */
+     int checkDeptExistUser(Long deptId);
+
+    /**
+     * 鏍¢獙閮ㄩ棬鍚嶇О鏄惁鍞竴
+     * 
+     * @param deptName 閮ㄩ棬鍚嶇О
+     * @param parentId 鐖堕儴闂↖D
+     * @return 缁撴灉
+     */
+     SysDept checkDeptNameUnique(@Param("deptName") String deptName, @Param("parentId") Long parentId);
+
+    /**
+     * 鏂板閮ㄩ棬淇℃伅
+     * 
+     * @param dept 閮ㄩ棬淇℃伅
+     * @return 缁撴灉
+     */
+     int insertDept(SysDept dept);
+
+    /**
+     * 淇敼閮ㄩ棬淇℃伅
+     * 
+     * @param dept 閮ㄩ棬淇℃伅
+     * @return 缁撴灉
+     */
+     int updateDept(SysDept dept);
+
+    /**
+     * 淇敼鎵�鍦ㄩ儴闂ㄦ甯哥姸鎬�
+     * 
+     * @param deptIds 閮ㄩ棬ID缁�
+     */
+     void updateDeptStatusNormal(@Param("depts")Long[] deptIds);
+
+    /**
+     * 淇敼瀛愬厓绱犲叧绯�
+     * 
+     * @param depts 瀛愬厓绱�
+     * @return 缁撴灉
+     */
+     int updateDeptChildren(@Param("depts") List<SysDept> depts);
+
+    /**
+     * 鍒犻櫎閮ㄩ棬绠$悊淇℃伅
+     * 
+     * @param deptId 閮ㄩ棬ID
+     * @return 缁撴灉
+     */
+     int deleteDeptById(Long deptId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/mapper/SysDictDataMapper.java b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysDictDataMapper.java
new file mode 100644
index 0000000..c702d76
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysDictDataMapper.java
@@ -0,0 +1,97 @@
+package com.zhitan.system.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import com.zhitan.common.core.domain.entity.SysDictData;
+
+/**
+ * 瀛楀吀琛� 鏁版嵁灞�
+ * 
+ * @author zhitan
+ */
+ public interface SysDictDataMapper extends BaseMapper<SysDictData>
+{
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀鏁版嵁
+     * 
+     * @param dictData 瀛楀吀鏁版嵁淇℃伅
+     * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅
+     */
+     List<SysDictData> selectDictDataList(SysDictData dictData);
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁
+     * 
+     * @param dictType 瀛楀吀绫诲瀷
+     * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅
+     */
+     List<SysDictData> selectDictDataByType(String dictType);
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏搁敭鍊兼煡璇㈠瓧鍏告暟鎹俊鎭�
+     * 
+     * @param dictType 瀛楀吀绫诲瀷
+     * @param dictValue 瀛楀吀閿��
+     * @return 瀛楀吀鏍囩
+     */
+     String selectDictLabel(@Param("dictType") String dictType, @Param("dictValue") String dictValue);
+
+    /**
+     * 鏍规嵁瀛楀吀鏁版嵁ID鏌ヨ淇℃伅
+     * 
+     * @param dictCode 瀛楀吀鏁版嵁ID
+     * @return 瀛楀吀鏁版嵁
+     */
+     SysDictData selectDictDataById(Long dictCode);
+
+    /**
+     * 鏌ヨ瀛楀吀鏁版嵁
+     * 
+     * @param dictType 瀛楀吀绫诲瀷
+     * @return 瀛楀吀鏁版嵁
+     */
+     int countDictDataByType(String dictType);
+
+    /**
+     * 閫氳繃瀛楀吀ID鍒犻櫎瀛楀吀鏁版嵁淇℃伅
+     * 
+     * @param dictCode 瀛楀吀鏁版嵁ID
+     * @return 缁撴灉
+     */
+     int deleteDictDataById(Long dictCode);
+
+    /**
+     * 鎵归噺鍒犻櫎瀛楀吀鏁版嵁淇℃伅
+     * 
+     * @param dictCodes 闇�瑕佸垹闄ょ殑瀛楀吀鏁版嵁ID
+     * @return 缁撴灉
+     */
+     int deleteDictDataByIds(Long[] dictCodes);
+
+    /**
+     * 鏂板瀛楀吀鏁版嵁淇℃伅
+     * 
+     * @param dictData 瀛楀吀鏁版嵁淇℃伅
+     * @return 缁撴灉
+     */
+     int insertDictData(SysDictData dictData);
+
+    /**
+     * 淇敼瀛楀吀鏁版嵁淇℃伅
+     * 
+     * @param dictData 瀛楀吀鏁版嵁淇℃伅
+     * @return 缁撴灉
+     */
+     int updateDictData(SysDictData dictData);
+
+    /**
+     * 鍚屾淇敼瀛楀吀绫诲瀷
+     * 
+     * @param oldDictType 鏃у瓧鍏哥被鍨�
+     * @param newDictType 鏂版棫瀛楀吀绫诲瀷
+     * @return 缁撴灉
+     */
+     int updateDictDataType(@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/mapper/SysDictTypeMapper.java b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysDictTypeMapper.java
new file mode 100644
index 0000000..a6f26d9
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysDictTypeMapper.java
@@ -0,0 +1,85 @@
+package com.zhitan.system.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.common.core.domain.entity.SysDictType;
+
+/**
+ * 瀛楀吀琛� 鏁版嵁灞�
+ * 
+ * @author zhitan
+ */
+ public interface SysDictTypeMapper extends BaseMapper<SysDictType>
+{
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀绫诲瀷
+     * 
+     * @param dictType 瀛楀吀绫诲瀷淇℃伅
+     * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅
+     */
+     List<SysDictType> selectDictTypeList(SysDictType dictType);
+
+    /**
+     * 鏍规嵁鎵�鏈夊瓧鍏哥被鍨�
+     * 
+     * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅
+     */
+     List<SysDictType> selectDictTypeAll();
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷ID鏌ヨ淇℃伅
+     * 
+     * @param dictId 瀛楀吀绫诲瀷ID
+     * @return 瀛楀吀绫诲瀷
+     */
+     SysDictType selectDictTypeById(Long dictId);
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ淇℃伅
+     * 
+     * @param dictType 瀛楀吀绫诲瀷
+     * @return 瀛楀吀绫诲瀷
+     */
+     SysDictType selectDictTypeByType(String dictType);
+
+    /**
+     * 閫氳繃瀛楀吀ID鍒犻櫎瀛楀吀淇℃伅
+     * 
+     * @param dictId 瀛楀吀ID
+     * @return 缁撴灉
+     */
+     int deleteDictTypeById(Long dictId);
+
+    /**
+     * 鎵归噺鍒犻櫎瀛楀吀绫诲瀷淇℃伅
+     * 
+     * @param dictIds 闇�瑕佸垹闄ょ殑瀛楀吀ID
+     * @return 缁撴灉
+     */
+     int deleteDictTypeByIds(Long[] dictIds);
+
+    /**
+     * 鏂板瀛楀吀绫诲瀷淇℃伅
+     * 
+     * @param dictType 瀛楀吀绫诲瀷淇℃伅
+     * @return 缁撴灉
+     */
+     int insertDictType(SysDictType dictType);
+
+    /**
+     * 淇敼瀛楀吀绫诲瀷淇℃伅
+     * 
+     * @param dictType 瀛楀吀绫诲瀷淇℃伅
+     * @return 缁撴灉
+     */
+     int updateDictType(SysDictType dictType);
+
+    /**
+     * 鏍¢獙瀛楀吀绫诲瀷绉版槸鍚﹀敮涓�
+     * 
+     * @param dictType 瀛楀吀绫诲瀷
+     * @return 缁撴灉
+     */
+     SysDictType checkDictTypeUnique(String dictType);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/mapper/SysLoginInfoMapper.java b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysLoginInfoMapper.java
new file mode 100644
index 0000000..ae9e7d4
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysLoginInfoMapper.java
@@ -0,0 +1,44 @@
+package com.zhitan.system.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.system.domain.SysLoginInfo;
+
+/**
+ * 绯荤粺璁块棶鏃ュ織鎯呭喌淇℃伅 鏁版嵁灞�
+ * 
+ * @author zhitan
+ */
+public interface SysLoginInfoMapper extends BaseMapper<SysLoginInfo>
+{
+    /**
+     * 鏂板绯荤粺鐧诲綍鏃ュ織
+     * 
+     * @param loginInfo 璁块棶鏃ュ織瀵硅薄
+     */
+     void insertLoginInfo(SysLoginInfo loginInfo);
+
+    /**
+     * 鏌ヨ绯荤粺鐧诲綍鏃ュ織闆嗗悎
+     * 
+     * @param loginInfo 璁块棶鏃ュ織瀵硅薄
+     * @return 鐧诲綍璁板綍闆嗗悎
+     */
+     List<SysLoginInfo> selectLoginInfoList(SysLoginInfo loginInfo);
+
+    /**
+     * 鎵归噺鍒犻櫎绯荤粺鐧诲綍鏃ュ織
+     *
+     * @param infoIds 闇�瑕佸垹闄ょ殑鐧诲綍鏃ュ織ID
+     * @return 缁撴灉
+     */
+     int deleteLoginInfoByIds(Long[] infoIds);
+
+    /**
+     * 娓呯┖绯荤粺鐧诲綍鏃ュ織
+     *
+     * @return 缁撴灉
+     */
+     int cleanLoginInfo();
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/mapper/SysMenuMapper.java b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysMenuMapper.java
new file mode 100644
index 0000000..f1050c5
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysMenuMapper.java
@@ -0,0 +1,127 @@
+package com.zhitan.system.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import com.zhitan.common.core.domain.entity.SysMenu;
+
+/**
+ * 鑿滃崟琛� 鏁版嵁灞�
+ *
+ * @author zhitan
+ */
+ public interface SysMenuMapper extends BaseMapper<SysMenu>
+{
+    /**
+     * 鏌ヨ绯荤粺鑿滃崟鍒楄〃
+     *
+     * @param menu 鑿滃崟淇℃伅
+     * @return 鑿滃崟鍒楄〃
+     */
+     List<SysMenu> selectMenuList(SysMenu menu);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛鎵�鏈夋潈闄�
+     *
+     * @return 鏉冮檺鍒楄〃
+     */
+     List<String> selectMenuPerms();
+
+    /**
+     * 鏍规嵁鐢ㄦ埛鏌ヨ绯荤粺鑿滃崟鍒楄〃
+     *
+     * @param menu 鑿滃崟淇℃伅
+     * @return 鑿滃崟鍒楄〃
+     */
+     List<SysMenu> selectMenuListByUserId(SysMenu menu);
+
+    /**
+     * 鏍规嵁瑙掕壊ID鏌ヨ鏉冮檺
+     * 
+     * @param roleId 瑙掕壊ID
+     * @return 鏉冮檺鍒楄〃
+     */
+     List<String> selectMenuPermsByRoleId(Long roleId);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鏉冮檺
+     *
+     * @param userId 鐢ㄦ埛ID
+     * @return 鏉冮檺鍒楄〃
+     */
+     List<String> selectMenuPermsByUserId(Long userId);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鑿滃崟
+     *
+     * @return 鑿滃崟鍒楄〃
+     */
+     List<SysMenu> selectMenuTreeAll();
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鑿滃崟
+     *
+     * @param userId 鐢ㄦ埛ID
+     * @return 鑿滃崟鍒楄〃
+     */
+     List<SysMenu> selectMenuTreeByUserId(Long userId);
+
+    /**
+     * 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟鏍戜俊鎭�
+     * 
+     * @param roleId 瑙掕壊ID
+     * @param menuCheckStrictly 鑿滃崟鏍戦�夋嫨椤规槸鍚﹀叧鑱旀樉绀�
+     * @return 閫変腑鑿滃崟鍒楄〃
+     */
+     List<Long> selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly);
+
+    /**
+     * 鏍规嵁鑿滃崟ID鏌ヨ淇℃伅
+     *
+     * @param menuId 鑿滃崟ID
+     * @return 鑿滃崟淇℃伅
+     */
+     SysMenu selectMenuById(Long menuId);
+
+    /**
+     * 鏄惁瀛樺湪鑿滃崟瀛愯妭鐐�
+     *
+     * @param menuId 鑿滃崟ID
+     * @return 缁撴灉
+     */
+     int hasChildByMenuId(Long menuId);
+
+    /**
+     * 鏂板鑿滃崟淇℃伅
+     *
+     * @param menu 鑿滃崟淇℃伅
+     * @return 缁撴灉
+     */
+     int insertMenu(SysMenu menu);
+
+    /**
+     * 淇敼鑿滃崟淇℃伅
+     *
+     * @param menu 鑿滃崟淇℃伅
+     * @return 缁撴灉
+     */
+     int updateMenu(SysMenu menu);
+
+    /**
+     * 鍒犻櫎鑿滃崟绠$悊淇℃伅
+     *
+     * @param menuId 鑿滃崟ID
+     * @return 缁撴灉
+     */
+     int deleteMenuById(Long menuId);
+
+    /**
+     * 鏍¢獙鑿滃崟鍚嶇О鏄惁鍞竴
+     *
+     * @param menuName 鑿滃崟鍚嶇О
+     * @param parentId 鐖惰彍鍗旾D
+     * @return 缁撴灉
+     */
+     SysMenu checkMenuNameUnique(@Param("menuName") String menuName, @Param("parentId") Long parentId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/mapper/SysNameConfigMapper.java b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysNameConfigMapper.java
new file mode 100644
index 0000000..f7f006d
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysNameConfigMapper.java
@@ -0,0 +1,62 @@
+package com.zhitan.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.system.domain.SysNameConfig;
+
+import java.util.List;
+
+/**
+ * 绯荤粺鍚嶇О閰嶇疆Mapper鎺ュ彛
+ *
+ * @author ZhiTan
+ * @date 2024-11-05
+ */
+public interface SysNameConfigMapper extends BaseMapper<SysNameConfig> {
+    /**
+     * 鏌ヨ绯荤粺鍚嶇О閰嶇疆
+     *
+     * @param systemName 绯荤粺鍚嶇О閰嶇疆涓婚敭
+     * @return 绯荤粺鍚嶇О閰嶇疆
+     */
+    public SysNameConfig selectSysNameConfigBySystemName(String systemName);
+
+    /**
+     * 鏌ヨ绯荤粺鍚嶇О閰嶇疆鍒楄〃
+     *
+     * @param sysNameConfig 绯荤粺鍚嶇О閰嶇疆
+     * @return 绯荤粺鍚嶇О閰嶇疆闆嗗悎
+     */
+    public List<SysNameConfig> selectSysNameConfigList(SysNameConfig sysNameConfig);
+
+    /**
+     * 鏂板绯荤粺鍚嶇О閰嶇疆
+     *
+     * @param sysNameConfig 绯荤粺鍚嶇О閰嶇疆
+     * @return 缁撴灉
+     */
+    public int insertSysNameConfig(SysNameConfig sysNameConfig);
+
+    /**
+     * 淇敼绯荤粺鍚嶇О閰嶇疆
+     *
+     * @param sysNameConfig 绯荤粺鍚嶇О閰嶇疆
+     * @return 缁撴灉
+     */
+    public int updateSysNameConfig(SysNameConfig sysNameConfig);
+
+    /**
+     * 鍒犻櫎绯荤粺鍚嶇О閰嶇疆
+     *
+     * @param systemName 绯荤粺鍚嶇О閰嶇疆涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteSysNameConfigBySystemName(String systemName);
+
+    /**
+     * 鎵归噺鍒犻櫎绯荤粺鍚嶇О閰嶇疆
+     *
+     * @param systemNames 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteSysNameConfigBySystemNames(String[] systemNames);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/mapper/SysNoticeMapper.java b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysNoticeMapper.java
new file mode 100644
index 0000000..efab727
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysNoticeMapper.java
@@ -0,0 +1,62 @@
+package com.zhitan.system.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.system.domain.SysNotice;
+
+/**
+ * 閫氱煡鍏憡琛� 鏁版嵁灞�
+ * 
+ * @author zhitan
+ */
+ public interface SysNoticeMapper extends BaseMapper<SysNotice>
+{
+    /**
+     * 鏌ヨ鍏憡淇℃伅
+     * 
+     * @param noticeId 鍏憡ID
+     * @return 鍏憡淇℃伅
+     */
+     SysNotice selectNoticeById(Long noticeId);
+
+    /**
+     * 鏌ヨ鍏憡鍒楄〃
+     * 
+     * @param notice 鍏憡淇℃伅
+     * @return 鍏憡闆嗗悎
+     */
+     List<SysNotice> selectNoticeList(SysNotice notice);
+
+    /**
+     * 鏂板鍏憡
+     * 
+     * @param notice 鍏憡淇℃伅
+     * @return 缁撴灉
+     */
+     int insertNotice(SysNotice notice);
+
+    /**
+     * 淇敼鍏憡
+     * 
+     * @param notice 鍏憡淇℃伅
+     * @return 缁撴灉
+     */
+     int updateNotice(SysNotice notice);
+
+    /**
+     * 鎵归噺鍒犻櫎鍏憡
+     * 
+     * @param noticeId 鍏憡ID
+     * @return 缁撴灉
+     */
+     int deleteNoticeById(Long noticeId);
+
+    /**
+     * 鎵归噺鍒犻櫎鍏憡淇℃伅
+     * 
+     * @param noticeIds 闇�瑕佸垹闄ょ殑鍏憡ID
+     * @return 缁撴灉
+     */
+     int deleteNoticeByIds(Long[] noticeIds);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/mapper/SysOperLogMapper.java b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysOperLogMapper.java
new file mode 100644
index 0000000..26051f1
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysOperLogMapper.java
@@ -0,0 +1,50 @@
+package com.zhitan.system.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.system.domain.SysOperLog;
+
+/**
+ * 鎿嶄綔鏃ュ織 鏁版嵁灞�
+ * 
+ * @author zhitan
+ */
+ public interface SysOperLogMapper extends BaseMapper<SysOperLog>
+{
+    /**
+     * 鏂板鎿嶄綔鏃ュ織
+     * 
+     * @param operLog 鎿嶄綔鏃ュ織瀵硅薄
+     */
+     void insertOperlog(SysOperLog operLog);
+
+    /**
+     * 鏌ヨ绯荤粺鎿嶄綔鏃ュ織闆嗗悎
+     * 
+     * @param operLog 鎿嶄綔鏃ュ織瀵硅薄
+     * @return 鎿嶄綔鏃ュ織闆嗗悎
+     */
+     List<SysOperLog> selectOperLogList(SysOperLog operLog);
+
+    /**
+     * 鎵归噺鍒犻櫎绯荤粺鎿嶄綔鏃ュ織
+     * 
+     * @param operIds 闇�瑕佸垹闄ょ殑鎿嶄綔鏃ュ織ID
+     * @return 缁撴灉
+     */
+     int deleteOperLogByIds(Long[] operIds);
+
+    /**
+     * 鏌ヨ鎿嶄綔鏃ュ織璇︾粏
+     * 
+     * @param operId 鎿嶄綔ID
+     * @return 鎿嶄綔鏃ュ織瀵硅薄
+     */
+     SysOperLog selectOperLogById(Long operId);
+
+    /**
+     * 娓呯┖鎿嶄綔鏃ュ織
+     */
+     void cleanOperLog();
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/mapper/SysPostMapper.java b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysPostMapper.java
new file mode 100644
index 0000000..9b154de
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysPostMapper.java
@@ -0,0 +1,101 @@
+package com.zhitan.system.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.system.domain.SysPost;
+
+/**
+ * 宀椾綅淇℃伅 鏁版嵁灞�
+ * 
+ * @author zhitan
+ */
+public interface SysPostMapper extends BaseMapper<SysPost>
+{
+    /**
+     * 鏌ヨ宀椾綅鏁版嵁闆嗗悎
+     * 
+     * @param post 宀椾綅淇℃伅
+     * @return 宀椾綅鏁版嵁闆嗗悎
+     */
+    public List<SysPost> selectPostList(SysPost post);
+
+    /**
+     * 鏌ヨ鎵�鏈夊矖浣�
+     * 
+     * @return 宀椾綅鍒楄〃
+     */
+    public List<SysPost> selectPostAll();
+
+    /**
+     * 閫氳繃宀椾綅ID鏌ヨ宀椾綅淇℃伅
+     * 
+     * @param postId 宀椾綅ID
+     * @return 瑙掕壊瀵硅薄淇℃伅
+     */
+    public SysPost selectPostById(Long postId);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鑾峰彇宀椾綅閫夋嫨妗嗗垪琛�
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 閫変腑宀椾綅ID鍒楄〃
+     */
+    public List<Long> selectPostListByUserId(Long userId);
+
+    /**
+     * 鏌ヨ鐢ㄦ埛鎵�灞炲矖浣嶇粍
+     * 
+     * @param userName 鐢ㄦ埛鍚�
+     * @return 缁撴灉
+     */
+    public List<SysPost> selectPostsByUserName(String userName);
+
+    /**
+     * 鍒犻櫎宀椾綅淇℃伅
+     * 
+     * @param postId 宀椾綅ID
+     * @return 缁撴灉
+     */
+    public int deletePostById(Long postId);
+
+    /**
+     * 鎵归噺鍒犻櫎宀椾綅淇℃伅
+     * 
+     * @param postIds 闇�瑕佸垹闄ょ殑宀椾綅ID
+     * @return 缁撴灉
+     */
+    public int deletePostByIds(Long[] postIds);
+
+    /**
+     * 淇敼宀椾綅淇℃伅
+     * 
+     * @param post 宀椾綅淇℃伅
+     * @return 缁撴灉
+     */
+    public int updatePost(SysPost post);
+
+    /**
+     * 鏂板宀椾綅淇℃伅
+     * 
+     * @param post 宀椾綅淇℃伅
+     * @return 缁撴灉
+     */
+    public int insertPost(SysPost post);
+
+    /**
+     * 鏍¢獙宀椾綅鍚嶇О
+     * 
+     * @param postName 宀椾綅鍚嶇О
+     * @return 缁撴灉
+     */
+    public SysPost checkPostNameUnique(String postName);
+
+    /**
+     * 鏍¢獙宀椾綅缂栫爜
+     * 
+     * @param postCode 宀椾綅缂栫爜
+     * @return 缁撴灉
+     */
+    public SysPost checkPostCodeUnique(String postCode);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/mapper/SysRoleDeptMapper.java b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysRoleDeptMapper.java
new file mode 100644
index 0000000..b1730d3
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysRoleDeptMapper.java
@@ -0,0 +1,46 @@
+package com.zhitan.system.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.system.domain.SysRoleDept;
+
+/**
+ * 瑙掕壊涓庨儴闂ㄥ叧鑱旇〃 鏁版嵁灞�
+ * 
+ * @author zhitan
+ */
+ public interface SysRoleDeptMapper extends BaseMapper<SysRoleDept>
+{
+    /**
+     * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊鍜岄儴闂ㄥ叧鑱�
+     * 
+     * @param roleId 瑙掕壊ID
+     * @return 缁撴灉
+     */
+     int deleteRoleDeptByRoleId(Long roleId);
+
+    /**
+     * 鎵归噺鍒犻櫎瑙掕壊閮ㄩ棬鍏宠仈淇℃伅
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+     int deleteRoleDept(Long[] ids);
+
+    /**
+     * 鏌ヨ閮ㄩ棬浣跨敤鏁伴噺
+     * 
+     * @param deptId 閮ㄩ棬ID
+     * @return 缁撴灉
+     */
+     int selectCountRoleDeptByDeptId(Long deptId);
+
+    /**
+     * 鎵归噺鏂板瑙掕壊閮ㄩ棬淇℃伅
+     * 
+     * @param roleDeptList 瑙掕壊閮ㄩ棬鍒楄〃
+     * @return 缁撴灉
+     */
+     int batchRoleDept(List<SysRoleDept> roleDeptList);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/mapper/SysRoleMapper.java b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysRoleMapper.java
new file mode 100644
index 0000000..d065396
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysRoleMapper.java
@@ -0,0 +1,109 @@
+package com.zhitan.system.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.common.core.domain.entity.SysRole;
+
+/**
+ * 瑙掕壊琛� 鏁版嵁灞�
+ * 
+ * @author zhitan
+ */
+ public interface SysRoleMapper extends BaseMapper<SysRole>
+{
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瑙掕壊鏁版嵁
+     * 
+     * @param role 瑙掕壊淇℃伅
+     * @return 瑙掕壊鏁版嵁闆嗗悎淇℃伅
+     */
+     List<SysRole> selectRoleList(SysRole role);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 瑙掕壊鍒楄〃
+     */
+     List<SysRole> selectRolePermissionByUserId(Long userId);
+
+    /**
+     * 鏌ヨ鎵�鏈夎鑹�
+     * 
+     * @return 瑙掕壊鍒楄〃
+     */
+     List<SysRole> selectRoleAll();
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鑾峰彇瑙掕壊閫夋嫨妗嗗垪琛�
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 閫変腑瑙掕壊ID鍒楄〃
+     */
+     List<Long> selectRoleListByUserId(Long userId);
+
+    /**
+     * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊
+     * 
+     * @param roleId 瑙掕壊ID
+     * @return 瑙掕壊瀵硅薄淇℃伅
+     */
+     SysRole selectRoleById(Long roleId);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊
+     * 
+     * @param userName 鐢ㄦ埛鍚�
+     * @return 瑙掕壊鍒楄〃
+     */
+     List<SysRole> selectRolesByUserName(String userName);
+
+    /**
+     * 鏍¢獙瑙掕壊鍚嶇О鏄惁鍞竴
+     * 
+     * @param roleName 瑙掕壊鍚嶇О
+     * @return 瑙掕壊淇℃伅
+     */
+     SysRole checkRoleNameUnique(String roleName);
+
+    /**
+     * 鏍¢獙瑙掕壊鏉冮檺鏄惁鍞竴
+     * 
+     * @param roleKey 瑙掕壊鏉冮檺
+     * @return 瑙掕壊淇℃伅
+     */
+     SysRole checkRoleKeyUnique(String roleKey);
+
+    /**
+     * 淇敼瑙掕壊淇℃伅
+     * 
+     * @param role 瑙掕壊淇℃伅
+     * @return 缁撴灉
+     */
+     int updateRole(SysRole role);
+
+    /**
+     * 鏂板瑙掕壊淇℃伅
+     * 
+     * @param role 瑙掕壊淇℃伅
+     * @return 缁撴灉
+     */
+     int insertRole(SysRole role);
+
+    /**
+     * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊
+     * 
+     * @param roleId 瑙掕壊ID
+     * @return 缁撴灉
+     */
+     int deleteRoleById(Long roleId);
+
+    /**
+     * 鎵归噺鍒犻櫎瑙掕壊淇℃伅
+     * 
+     * @param roleIds 闇�瑕佸垹闄ょ殑瑙掕壊ID
+     * @return 缁撴灉
+     */
+     int deleteRoleByIds(Long[] roleIds);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/mapper/SysRoleMenuMapper.java b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysRoleMenuMapper.java
new file mode 100644
index 0000000..2f209e6
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysRoleMenuMapper.java
@@ -0,0 +1,46 @@
+package com.zhitan.system.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.system.domain.SysRoleMenu;
+
+/**
+ * 瑙掕壊涓庤彍鍗曞叧鑱旇〃 鏁版嵁灞�
+ * 
+ * @author zhitan
+ */
+ public interface SysRoleMenuMapper extends BaseMapper<SysRoleMenu>
+{
+    /**
+     * 鏌ヨ鑿滃崟浣跨敤鏁伴噺
+     * 
+     * @param menuId 鑿滃崟ID
+     * @return 缁撴灉
+     */
+     int checkMenuExistRole(Long menuId);
+
+    /**
+     * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊鍜岃彍鍗曞叧鑱�
+     * 
+     * @param roleId 瑙掕壊ID
+     * @return 缁撴灉
+     */
+     int deleteRoleMenuByRoleId(Long roleId);
+
+    /**
+     * 鎵归噺鍒犻櫎瑙掕壊鑿滃崟鍏宠仈淇℃伅
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+     int deleteRoleMenu(Long[] ids);
+
+    /**
+     * 鎵归噺鏂板瑙掕壊鑿滃崟淇℃伅
+     * 
+     * @param roleMenuList 瑙掕壊鑿滃崟鍒楄〃
+     * @return 缁撴灉
+     */
+     int batchRoleMenu(List<SysRoleMenu> roleMenuList);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/mapper/SysUserMapper.java b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysUserMapper.java
new file mode 100644
index 0000000..1799b9f
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysUserMapper.java
@@ -0,0 +1,129 @@
+package com.zhitan.system.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import com.zhitan.common.core.domain.entity.SysUser;
+
+/**
+ * 鐢ㄦ埛琛� 鏁版嵁灞�
+ * 
+ * @author zhitan
+ */
+ public interface SysUserMapper extends BaseMapper<SysUser>
+{
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鐢ㄦ埛鍒楄〃
+     * 
+     * @param sysUser 鐢ㄦ埛淇℃伅
+     * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
+     */
+     List<SysUser> selectUserList(SysUser sysUser);
+
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ宸查厤鐢ㄦ埛瑙掕壊鍒楄〃
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
+     */
+     List<SysUser> selectAllocatedList(SysUser user);
+
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鏈垎閰嶇敤鎴疯鑹插垪琛�
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
+     */
+     List<SysUser> selectUnallocatedList(SysUser user);
+
+    /**
+     * 閫氳繃鐢ㄦ埛鍚嶆煡璇㈢敤鎴�
+     * 
+     * @param userName 鐢ㄦ埛鍚�
+     * @return 鐢ㄦ埛瀵硅薄淇℃伅
+     */
+     SysUser selectUserByUserName(String userName);
+
+    /**
+     * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 鐢ㄦ埛瀵硅薄淇℃伅
+     */
+     SysUser selectUserById(Long userId);
+
+    /**
+     * 鏂板鐢ㄦ埛淇℃伅
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 缁撴灉
+     */
+     int insertUser(SysUser user);
+
+    /**
+     * 淇敼鐢ㄦ埛淇℃伅
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 缁撴灉
+     */
+     int updateUser(SysUser user);
+
+    /**
+     * 淇敼鐢ㄦ埛澶村儚
+     * 
+     * @param userName 鐢ㄦ埛鍚�
+     * @param avatar 澶村儚鍦板潃
+     * @return 缁撴灉
+     */
+     int updateUserAvatar(@Param("userName") String userName, @Param("avatar") String avatar);
+
+    /**
+     * 閲嶇疆鐢ㄦ埛瀵嗙爜
+     * 
+     * @param userName 鐢ㄦ埛鍚�
+     * @param password 瀵嗙爜
+     * @return 缁撴灉
+     */
+     int resetUserPwd(@Param("userName") String userName, @Param("password") String password);
+
+    /**
+     * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 缁撴灉
+     */
+     int deleteUserById(Long userId);
+
+    /**
+     * 鎵归噺鍒犻櫎鐢ㄦ埛淇℃伅
+     * 
+     * @param userIds 闇�瑕佸垹闄ょ殑鐢ㄦ埛ID
+     * @return 缁撴灉
+     */
+     int deleteUserByIds(Long[] userIds);
+
+    /**
+     * 鏍¢獙鐢ㄦ埛鍚嶇О鏄惁鍞竴
+     * 
+     * @param userName 鐢ㄦ埛鍚嶇О
+     * @return 缁撴灉
+     */
+     SysUser checkUserNameUnique(String userName);
+
+    /**
+     * 鏍¢獙鎵嬫満鍙风爜鏄惁鍞竴
+     *
+     * @param phoneNumber 鎵嬫満鍙风爜
+     * @return 缁撴灉
+     */
+     SysUser checkPhoneUnique(String phoneNumber);
+
+    /**
+     * 鏍¢獙email鏄惁鍞竴
+     *
+     * @param email 鐢ㄦ埛閭
+     * @return 缁撴灉
+     */
+     SysUser checkEmailUnique(String email);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/mapper/SysUserPostMapper.java b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysUserPostMapper.java
new file mode 100644
index 0000000..d70d013
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysUserPostMapper.java
@@ -0,0 +1,46 @@
+package com.zhitan.system.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.system.domain.SysUserPost;
+
+/**
+ * 鐢ㄦ埛涓庡矖浣嶅叧鑱旇〃 鏁版嵁灞�
+ * 
+ * @author zhitan
+ */
+ public interface SysUserPostMapper extends BaseMapper<SysUserPost>
+{
+    /**
+     * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛鍜屽矖浣嶅叧鑱�
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 缁撴灉
+     */
+     int deleteUserPostByUserId(Long userId);
+
+    /**
+     * 閫氳繃宀椾綅ID鏌ヨ宀椾綅浣跨敤鏁伴噺
+     * 
+     * @param postId 宀椾綅ID
+     * @return 缁撴灉
+     */
+     int countUserPostById(Long postId);
+
+    /**
+     * 鎵归噺鍒犻櫎鐢ㄦ埛鍜屽矖浣嶅叧鑱�
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+     int deleteUserPost(Long[] ids);
+
+    /**
+     * 鎵归噺鏂板鐢ㄦ埛宀椾綅淇℃伅
+     * 
+     * @param userPostList 鐢ㄦ埛宀椾綅鍒楄〃
+     * @return 缁撴灉
+     */
+     int batchUserPost(List<SysUserPost> userPostList);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/mapper/SysUserRoleMapper.java b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysUserRoleMapper.java
new file mode 100644
index 0000000..9cb7682
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/mapper/SysUserRoleMapper.java
@@ -0,0 +1,63 @@
+package com.zhitan.system.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import com.zhitan.system.domain.SysUserRole;
+
+/**
+ * 鐢ㄦ埛涓庤鑹插叧鑱旇〃 鏁版嵁灞�
+ *
+ * @author zhitan
+ */
+ public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
+    /**
+     * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛鍜岃鑹插叧鑱�
+     *
+     * @param userId 鐢ㄦ埛ID
+     * @return 缁撴灉
+     */
+     int deleteUserRoleByUserId(Long userId);
+
+    /**
+     * 鎵归噺鍒犻櫎鐢ㄦ埛鍜岃鑹插叧鑱�
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+     int deleteUserRole(Long[] ids);
+
+    /**
+     * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊浣跨敤鏁伴噺
+     *
+     * @param roleId 瑙掕壊ID
+     * @return 缁撴灉
+     */
+     int countUserRoleByRoleId(Long roleId);
+
+    /**
+     * 鎵归噺鏂板鐢ㄦ埛瑙掕壊淇℃伅
+     *
+     * @param userRoleList 鐢ㄦ埛瑙掕壊鍒楄〃
+     * @return 缁撴灉
+     */
+     int batchUserRole(List<SysUserRole> userRoleList);
+
+    /**
+     * 鍒犻櫎鐢ㄦ埛鍜岃鑹插叧鑱斾俊鎭�
+     *
+     * @param userRole 鐢ㄦ埛鍜岃鑹插叧鑱斾俊鎭�
+     * @return 缁撴灉
+     */
+     int deleteUserRoleInfo(SysUserRole userRole);
+
+    /**
+     * 鎵归噺鍙栨秷鎺堟潈鐢ㄦ埛瑙掕壊
+     *
+     * @param roleId  瑙掕壊ID
+     * @param userIds 闇�瑕佸垹闄ょ殑鐢ㄦ埛鏁版嵁ID
+     * @return 缁撴灉
+     */
+     int deleteUserRoleInfos(@Param("roleId") Long roleId, @Param("userIds") Long[] userIds);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/ISysConfigService.java b/zhitan-system/src/main/java/com/zhitan/system/service/ISysConfigService.java
new file mode 100644
index 0000000..6be22b5
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/ISysConfigService.java
@@ -0,0 +1,89 @@
+package com.zhitan.system.service;
+
+import java.util.List;
+import com.zhitan.system.domain.SysConfig;
+
+/**
+ * 鍙傛暟閰嶇疆 鏈嶅姟灞�
+ * 
+ * @author zhitan
+ */
+ public interface ISysConfigService
+{
+    /**
+     * 鏌ヨ鍙傛暟閰嶇疆淇℃伅
+     * 
+     * @param configId 鍙傛暟閰嶇疆ID
+     * @return 鍙傛暟閰嶇疆淇℃伅
+     */
+     SysConfig selectConfigById(Long configId);
+
+    /**
+     * 鏍规嵁閿悕鏌ヨ鍙傛暟閰嶇疆淇℃伅
+     * 
+     * @param configKey 鍙傛暟閿悕
+     * @return 鍙傛暟閿��
+     */
+     String selectConfigByKey(String configKey);
+
+    /**
+     * 鑾峰彇楠岃瘉鐮佸紑鍏�
+     * 
+     * @return true寮�鍚紝false鍏抽棴
+     */
+     boolean selectCaptchaEnabled();
+
+    /**
+     * 鏌ヨ鍙傛暟閰嶇疆鍒楄〃
+     * 
+     * @param config 鍙傛暟閰嶇疆淇℃伅
+     * @return 鍙傛暟閰嶇疆闆嗗悎
+     */
+     List<SysConfig> selectConfigList(SysConfig config);
+
+    /**
+     * 鏂板鍙傛暟閰嶇疆
+     * 
+     * @param config 鍙傛暟閰嶇疆淇℃伅
+     * @return 缁撴灉
+     */
+     int insertConfig(SysConfig config);
+
+    /**
+     * 淇敼鍙傛暟閰嶇疆
+     * 
+     * @param config 鍙傛暟閰嶇疆淇℃伅
+     * @return 缁撴灉
+     */
+     int updateConfig(SysConfig config);
+
+    /**
+     * 鎵归噺鍒犻櫎鍙傛暟淇℃伅
+     * 
+     * @param configIds 闇�瑕佸垹闄ょ殑鍙傛暟ID
+     */
+     void deleteConfigByIds(Long[] configIds);
+
+    /**
+     * 鍔犺浇鍙傛暟缂撳瓨鏁版嵁
+     */
+     void loadingConfigCache();
+
+    /**
+     * 娓呯┖鍙傛暟缂撳瓨鏁版嵁
+     */
+     void clearConfigCache();
+
+    /**
+     * 閲嶇疆鍙傛暟缂撳瓨鏁版嵁
+     */
+     void resetConfigCache();
+
+    /**
+     * 鏍¢獙鍙傛暟閿悕鏄惁鍞竴
+     * 
+     * @param config 鍙傛暟淇℃伅
+     * @return 缁撴灉
+     */
+     boolean checkConfigKeyUnique(SysConfig config);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/ISysDeptService.java b/zhitan-system/src/main/java/com/zhitan/system/service/ISysDeptService.java
new file mode 100644
index 0000000..75139ca
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/ISysDeptService.java
@@ -0,0 +1,124 @@
+package com.zhitan.system.service;
+
+import java.util.List;
+import com.zhitan.common.core.domain.TreeSelect;
+import com.zhitan.common.core.domain.entity.SysDept;
+
+/**
+ * 閮ㄩ棬绠$悊 鏈嶅姟灞�
+ * 
+ * @author zhitan
+ */
+ public interface ISysDeptService
+{
+    /**
+     * 鏌ヨ閮ㄩ棬绠$悊鏁版嵁
+     * 
+     * @param dept 閮ㄩ棬淇℃伅
+     * @return 閮ㄩ棬淇℃伅闆嗗悎
+     */
+     List<SysDept> selectDeptList(SysDept dept);
+
+    /**
+     * 鏌ヨ閮ㄩ棬鏍戠粨鏋勪俊鎭�
+     * 
+     * @param dept 閮ㄩ棬淇℃伅
+     * @return 閮ㄩ棬鏍戜俊鎭泦鍚�
+     */
+     List<TreeSelect> selectDeptTreeList(SysDept dept);
+
+    /**
+     * 鏋勫缓鍓嶇鎵�闇�瑕佹爲缁撴瀯
+     * 
+     * @param depts 閮ㄩ棬鍒楄〃
+     * @return 鏍戠粨鏋勫垪琛�
+     */
+     List<SysDept> buildDeptTree(List<SysDept> depts);
+
+    /**
+     * 鏋勫缓鍓嶇鎵�闇�瑕佷笅鎷夋爲缁撴瀯
+     * 
+     * @param depts 閮ㄩ棬鍒楄〃
+     * @return 涓嬫媺鏍戠粨鏋勫垪琛�
+     */
+     List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts);
+
+    /**
+     * 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戜俊鎭�
+     * 
+     * @param roleId 瑙掕壊ID
+     * @return 閫変腑閮ㄩ棬鍒楄〃
+     */
+     List<Long> selectDeptListByRoleId(Long roleId);
+
+    /**
+     * 鏍规嵁閮ㄩ棬ID鏌ヨ淇℃伅
+     * 
+     * @param deptId 閮ㄩ棬ID
+     * @return 閮ㄩ棬淇℃伅
+     */
+     SysDept selectDeptById(Long deptId);
+
+    /**
+     * 鏍规嵁ID鏌ヨ鎵�鏈夊瓙閮ㄩ棬锛堟甯哥姸鎬侊級
+     * 
+     * @param deptId 閮ㄩ棬ID
+     * @return 瀛愰儴闂ㄦ暟
+     */
+     int selectNormalChildrenDeptById(Long deptId);
+
+    /**
+     * 鏄惁瀛樺湪閮ㄩ棬瀛愯妭鐐�
+     * 
+     * @param deptId 閮ㄩ棬ID
+     * @return 缁撴灉
+     */
+     boolean hasChildByDeptId(Long deptId);
+
+    /**
+     * 鏌ヨ閮ㄩ棬鏄惁瀛樺湪鐢ㄦ埛
+     * 
+     * @param deptId 閮ㄩ棬ID
+     * @return 缁撴灉 true 瀛樺湪 false 涓嶅瓨鍦�
+     */
+     boolean checkDeptExistUser(Long deptId);
+
+    /**
+     * 鏍¢獙閮ㄩ棬鍚嶇О鏄惁鍞竴
+     * 
+     * @param dept 閮ㄩ棬淇℃伅
+     * @return 缁撴灉
+     */
+     boolean checkDeptNameUnique(SysDept dept);
+
+    /**
+     * 鏍¢獙閮ㄩ棬鏄惁鏈夋暟鎹潈闄�
+     * 
+     * @param deptId 閮ㄩ棬id
+     */
+     void checkDeptDataScope(Long deptId);
+
+    /**
+     * 鏂板淇濆瓨閮ㄩ棬淇℃伅
+     * 
+     * @param dept 閮ㄩ棬淇℃伅
+     * @return 缁撴灉
+     */
+     int insertDept(SysDept dept);
+
+    /**
+     * 淇敼淇濆瓨閮ㄩ棬淇℃伅
+     * 
+     * @param dept 閮ㄩ棬淇℃伅
+     * @return 缁撴灉
+     */
+     int updateDept(SysDept dept);
+
+    /**
+     * 鍒犻櫎閮ㄩ棬绠$悊淇℃伅
+     * 
+     * @param deptId 閮ㄩ棬ID
+     * @return 缁撴灉
+     */
+     int deleteDeptById(Long deptId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/ISysDictDataService.java b/zhitan-system/src/main/java/com/zhitan/system/service/ISysDictDataService.java
new file mode 100644
index 0000000..f0c9153
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/ISysDictDataService.java
@@ -0,0 +1,70 @@
+package com.zhitan.system.service;
+
+import java.util.List;
+import com.zhitan.common.core.domain.entity.SysDictData;
+
+/**
+ * 瀛楀吀 涓氬姟灞�
+ * 
+ * @author zhitan
+ */
+public interface ISysDictDataService
+{
+
+
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀鏁版嵁
+     * 
+     * @param dictData 瀛楀吀鏁版嵁淇℃伅
+     * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅
+     */
+     List<SysDictData> selectDictDataList(SysDictData dictData);
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏搁敭鍊兼煡璇㈠瓧鍏告暟鎹俊鎭�
+     * 
+     * @param dictType 瀛楀吀绫诲瀷
+     * @param dictValue 瀛楀吀閿��
+     * @return 瀛楀吀鏍囩
+     */
+     String selectDictLabel(String dictType, String dictValue);
+
+    /**
+     * 鏍规嵁瀛楀吀鏁版嵁ID鏌ヨ淇℃伅
+     * 
+     * @param dictCode 瀛楀吀鏁版嵁ID
+     * @return 瀛楀吀鏁版嵁
+     */
+     SysDictData selectDictDataById(Long dictCode);
+
+    /**
+     * 鎵归噺鍒犻櫎瀛楀吀鏁版嵁淇℃伅
+     * 
+     * @param dictCodes 闇�瑕佸垹闄ょ殑瀛楀吀鏁版嵁ID
+     */
+     void deleteDictDataByIds(Long[] dictCodes);
+
+    /**
+     * 鏂板淇濆瓨瀛楀吀鏁版嵁淇℃伅
+     * 
+     * @param dictData 瀛楀吀鏁版嵁淇℃伅
+     * @return 缁撴灉
+     */
+     int insertDictData(SysDictData dictData);
+
+    /**
+     * 淇敼淇濆瓨瀛楀吀鏁版嵁淇℃伅
+     * 
+     * @param dictData 瀛楀吀鏁版嵁淇℃伅
+     * @return 缁撴灉
+     */
+     int updateDictData(SysDictData dictData);
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁
+     *
+     * @param dictType 瀛楀吀绫诲瀷
+     * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅
+     */
+    List<SysDictData> selectDictDataByType(String dictType);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/ISysDictTypeService.java b/zhitan-system/src/main/java/com/zhitan/system/service/ISysDictTypeService.java
new file mode 100644
index 0000000..ce8e194
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/ISysDictTypeService.java
@@ -0,0 +1,103 @@
+package com.zhitan.system.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhitan.common.core.domain.entity.SysDictData;
+import com.zhitan.common.core.domain.entity.SysDictType;
+
+import java.util.List;
+
+/**
+ * 瀛楀吀 涓氬姟灞�
+ * 
+ * @author zhitan
+ */
+public interface ISysDictTypeService extends IService<SysDictType>
+{
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀绫诲瀷
+     * 
+     * @param dictType 瀛楀吀绫诲瀷淇℃伅
+     * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅
+     */
+     List<SysDictType> selectDictTypeList(SysDictType dictType);
+
+    /**
+     * 鏍规嵁鎵�鏈夊瓧鍏哥被鍨�
+     * 
+     * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅
+     */
+     List<SysDictType> selectDictTypeAll();
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁
+     * 
+     * @param dictType 瀛楀吀绫诲瀷
+     * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅
+     */
+     List<SysDictData> selectDictDataByType(String dictType);
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷ID鏌ヨ淇℃伅
+     * 
+     * @param dictId 瀛楀吀绫诲瀷ID
+     * @return 瀛楀吀绫诲瀷
+     */
+     SysDictType selectDictTypeById(Long dictId);
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ淇℃伅
+     * 
+     * @param dictType 瀛楀吀绫诲瀷
+     * @return 瀛楀吀绫诲瀷
+     */
+     SysDictType selectDictTypeByType(String dictType);
+
+    /**
+     * 鎵归噺鍒犻櫎瀛楀吀淇℃伅
+     * 
+     * @param dictIds 闇�瑕佸垹闄ょ殑瀛楀吀ID
+     */
+     void deleteDictTypeByIds(Long[] dictIds);
+
+    /**
+     * 鍔犺浇瀛楀吀缂撳瓨鏁版嵁
+     */
+     void loadingDictCache();
+
+    /**
+     * 娓呯┖瀛楀吀缂撳瓨鏁版嵁
+     */
+     void clearDictCache();
+
+    /**
+     * 閲嶇疆瀛楀吀缂撳瓨鏁版嵁
+     */
+     void resetDictCache();
+
+    /**
+     * 鏂板淇濆瓨瀛楀吀绫诲瀷淇℃伅
+     * 
+     * @param dictType 瀛楀吀绫诲瀷淇℃伅
+     * @return 缁撴灉
+     */
+     int insertDictType(SysDictType dictType);
+
+    /**
+     * 淇敼淇濆瓨瀛楀吀绫诲瀷淇℃伅
+     * 
+     * @param dictType 瀛楀吀绫诲瀷淇℃伅
+     * @return 缁撴灉
+     */
+     int updateDictType(SysDictType dictType);
+
+    /**
+     * 鏍¢獙瀛楀吀绫诲瀷绉版槸鍚﹀敮涓�
+     * 
+     * @param dictType 瀛楀吀绫诲瀷
+     * @return 缁撴灉
+     */
+     boolean checkDictTypeUnique(SysDictType dictType);
+
+    Page<SysDictType> selectDictTypePageList(SysDictType dictType, Long pageNum, Long pageSize);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/ISysLoginInfoService.java b/zhitan-system/src/main/java/com/zhitan/system/service/ISysLoginInfoService.java
new file mode 100644
index 0000000..c32aebe
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/ISysLoginInfoService.java
@@ -0,0 +1,40 @@
+package com.zhitan.system.service;
+
+import java.util.List;
+import com.zhitan.system.domain.SysLoginInfo;
+
+/**
+ * 绯荤粺璁块棶鏃ュ織鎯呭喌淇℃伅 鏈嶅姟灞�
+ * 
+ * @author zhitan
+ */
+public interface ISysLoginInfoService
+{
+    /**
+     * 鏂板绯荤粺鐧诲綍鏃ュ織
+     * 
+     * @param loginInfo 璁块棶鏃ュ織瀵硅薄
+     */
+     void insertLoginInfo(SysLoginInfo loginInfo);
+
+    /**
+     * 鏌ヨ绯荤粺鐧诲綍鏃ュ織闆嗗悎
+     * 
+     * @param loginInfo 璁块棶鏃ュ織瀵硅薄
+     * @return 鐧诲綍璁板綍闆嗗悎
+     */
+     List<SysLoginInfo> selectLogininforList(SysLoginInfo loginInfo);
+
+    /**
+     * 鎵归噺鍒犻櫎绯荤粺鐧诲綍鏃ュ織
+     * 
+     * @param infoIds 闇�瑕佸垹闄ょ殑鐧诲綍鏃ュ織ID
+     * @return 缁撴灉
+     */
+     int deleteLoginInfoByIds(Long[] infoIds);
+
+    /**
+     * 娓呯┖绯荤粺鐧诲綍鏃ュ織
+     */
+     void cleanLoginInfo();
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/ISysMenuService.java b/zhitan-system/src/main/java/com/zhitan/system/service/ISysMenuService.java
new file mode 100644
index 0000000..0449da7
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/ISysMenuService.java
@@ -0,0 +1,144 @@
+package com.zhitan.system.service;
+
+import java.util.List;
+import java.util.Set;
+import com.zhitan.common.core.domain.TreeSelect;
+import com.zhitan.common.core.domain.entity.SysMenu;
+import com.zhitan.system.domain.vo.RouterVo;
+
+/**
+ * 鑿滃崟 涓氬姟灞�
+ * 
+ * @author zhitan
+ */
+public interface ISysMenuService
+{
+    /**
+     * 鏍规嵁鐢ㄦ埛鏌ヨ绯荤粺鑿滃崟鍒楄〃
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 鑿滃崟鍒楄〃
+     */
+     List<SysMenu> selectMenuList(Long userId);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛鏌ヨ绯荤粺鑿滃崟鍒楄〃
+     * 
+     * @param menu 鑿滃崟淇℃伅
+     * @param userId 鐢ㄦ埛ID
+     * @return 鑿滃崟鍒楄〃
+     */
+     List<SysMenu> selectMenuList(SysMenu menu, Long userId);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鏉冮檺
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 鏉冮檺鍒楄〃
+     */
+     Set<String> selectMenuPermsByUserId(Long userId);
+
+    /**
+     * 鏍规嵁瑙掕壊ID鏌ヨ鏉冮檺
+     * 
+     * @param roleId 瑙掕壊ID
+     * @return 鏉冮檺鍒楄〃
+     */
+     Set<String> selectMenuPermsByRoleId(Long roleId);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鑿滃崟鏍戜俊鎭�
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 鑿滃崟鍒楄〃
+     */
+     List<SysMenu> selectMenuTreeByUserId(Long userId);
+
+    /**
+     * 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟鏍戜俊鎭�
+     * 
+     * @param roleId 瑙掕壊ID
+     * @return 閫変腑鑿滃崟鍒楄〃
+     */
+     List<Long> selectMenuListByRoleId(Long roleId);
+
+    /**
+     * 鏋勫缓鍓嶇璺敱鎵�闇�瑕佺殑鑿滃崟
+     * 
+     * @param menus 鑿滃崟鍒楄〃
+     * @return 璺敱鍒楄〃
+     */
+     List<RouterVo> buildMenus(List<SysMenu> menus);
+
+    /**
+     * 鏋勫缓鍓嶇鎵�闇�瑕佹爲缁撴瀯
+     * 
+     * @param menus 鑿滃崟鍒楄〃
+     * @return 鏍戠粨鏋勫垪琛�
+     */
+     List<SysMenu> buildMenuTree(List<SysMenu> menus);
+
+    /**
+     * 鏋勫缓鍓嶇鎵�闇�瑕佷笅鎷夋爲缁撴瀯
+     * 
+     * @param menus 鑿滃崟鍒楄〃
+     * @return 涓嬫媺鏍戠粨鏋勫垪琛�
+     */
+     List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus);
+
+    /**
+     * 鏍规嵁鑿滃崟ID鏌ヨ淇℃伅
+     * 
+     * @param menuId 鑿滃崟ID
+     * @return 鑿滃崟淇℃伅
+     */
+     SysMenu selectMenuById(Long menuId);
+
+    /**
+     * 鏄惁瀛樺湪鑿滃崟瀛愯妭鐐�
+     * 
+     * @param menuId 鑿滃崟ID
+     * @return 缁撴灉 true 瀛樺湪 false 涓嶅瓨鍦�
+     */
+     boolean hasChildByMenuId(Long menuId);
+
+    /**
+     * 鏌ヨ鑿滃崟鏄惁瀛樺湪瑙掕壊
+     * 
+     * @param menuId 鑿滃崟ID
+     * @return 缁撴灉 true 瀛樺湪 false 涓嶅瓨鍦�
+     */
+     boolean checkMenuExistRole(Long menuId);
+
+    /**
+     * 鏂板淇濆瓨鑿滃崟淇℃伅
+     * 
+     * @param menu 鑿滃崟淇℃伅
+     * @return 缁撴灉
+     */
+     int insertMenu(SysMenu menu);
+
+    /**
+     * 淇敼淇濆瓨鑿滃崟淇℃伅
+     * 
+     * @param menu 鑿滃崟淇℃伅
+     * @return 缁撴灉
+     */
+     int updateMenu(SysMenu menu);
+
+    /**
+     * 鍒犻櫎鑿滃崟绠$悊淇℃伅
+     * 
+     * @param menuId 鑿滃崟ID
+     * @return 缁撴灉
+     */
+     int deleteMenuById(Long menuId);
+
+    /**
+     * 鏍¢獙鑿滃崟鍚嶇О鏄惁鍞竴
+     * 
+     * @param menu 鑿滃崟淇℃伅
+     * @return 缁撴灉
+     */
+     boolean checkMenuNameUnique(SysMenu menu);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/ISysNameConfigService.java b/zhitan-system/src/main/java/com/zhitan/system/service/ISysNameConfigService.java
new file mode 100644
index 0000000..3f5485d
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/ISysNameConfigService.java
@@ -0,0 +1,15 @@
+package com.zhitan.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhitan.system.domain.SysNameConfig;
+
+/**
+ * 绯荤粺鍚嶇О閰嶇疆Service鎺ュ彛
+ *
+ * @author ZhiTan
+ * @date 2024-11-05
+ */
+public interface ISysNameConfigService extends IService<SysNameConfig> {
+
+    SysNameConfig getSysNameConfig();
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/ISysNoticeService.java b/zhitan-system/src/main/java/com/zhitan/system/service/ISysNoticeService.java
new file mode 100644
index 0000000..c8d1f85
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/ISysNoticeService.java
@@ -0,0 +1,60 @@
+package com.zhitan.system.service;
+
+import java.util.List;
+import com.zhitan.system.domain.SysNotice;
+
+/**
+ * 鍏憡 鏈嶅姟灞�
+ * 
+ * @author zhitan
+ */
+public interface ISysNoticeService
+{
+    /**
+     * 鏌ヨ鍏憡淇℃伅
+     * 
+     * @param noticeId 鍏憡ID
+     * @return 鍏憡淇℃伅
+     */
+     SysNotice selectNoticeById(Long noticeId);
+
+    /**
+     * 鏌ヨ鍏憡鍒楄〃
+     * 
+     * @param notice 鍏憡淇℃伅
+     * @return 鍏憡闆嗗悎
+     */
+     List<SysNotice> selectNoticeList(SysNotice notice);
+
+    /**
+     * 鏂板鍏憡
+     * 
+     * @param notice 鍏憡淇℃伅
+     * @return 缁撴灉
+     */
+     int insertNotice(SysNotice notice);
+
+    /**
+     * 淇敼鍏憡
+     * 
+     * @param notice 鍏憡淇℃伅
+     * @return 缁撴灉
+     */
+     int updateNotice(SysNotice notice);
+
+    /**
+     * 鍒犻櫎鍏憡淇℃伅
+     * 
+     * @param noticeId 鍏憡ID
+     * @return 缁撴灉
+     */
+     int deleteNoticeById(Long noticeId);
+    
+    /**
+     * 鎵归噺鍒犻櫎鍏憡淇℃伅
+     * 
+     * @param noticeIds 闇�瑕佸垹闄ょ殑鍏憡ID
+     * @return 缁撴灉
+     */
+     int deleteNoticeByIds(Long[] noticeIds);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/ISysOperLogService.java b/zhitan-system/src/main/java/com/zhitan/system/service/ISysOperLogService.java
new file mode 100644
index 0000000..3878568
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/ISysOperLogService.java
@@ -0,0 +1,48 @@
+package com.zhitan.system.service;
+
+import java.util.List;
+import com.zhitan.system.domain.SysOperLog;
+
+/**
+ * 鎿嶄綔鏃ュ織 鏈嶅姟灞�
+ * 
+ * @author zhitan
+ */
+public interface ISysOperLogService
+{
+    /**
+     * 鏂板鎿嶄綔鏃ュ織
+     * 
+     * @param operLog 鎿嶄綔鏃ュ織瀵硅薄
+     */
+     void insertOperlog(SysOperLog operLog);
+
+    /**
+     * 鏌ヨ绯荤粺鎿嶄綔鏃ュ織闆嗗悎
+     * 
+     * @param operLog 鎿嶄綔鏃ュ織瀵硅薄
+     * @return 鎿嶄綔鏃ュ織闆嗗悎
+     */
+     List<SysOperLog> selectOperLogList(SysOperLog operLog);
+
+    /**
+     * 鎵归噺鍒犻櫎绯荤粺鎿嶄綔鏃ュ織
+     * 
+     * @param operIds 闇�瑕佸垹闄ょ殑鎿嶄綔鏃ュ織ID
+     * @return 缁撴灉
+     */
+     int deleteOperLogByIds(Long[] operIds);
+
+    /**
+     * 鏌ヨ鎿嶄綔鏃ュ織璇︾粏
+     * 
+     * @param operId 鎿嶄綔ID
+     * @return 鎿嶄綔鏃ュ織瀵硅薄
+     */
+     SysOperLog selectOperLogById(Long operId);
+
+    /**
+     * 娓呯┖鎿嶄綔鏃ュ織
+     */
+     void cleanOperLog();
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/ISysPostService.java b/zhitan-system/src/main/java/com/zhitan/system/service/ISysPostService.java
new file mode 100644
index 0000000..c7a4cf6
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/ISysPostService.java
@@ -0,0 +1,99 @@
+package com.zhitan.system.service;
+
+import java.util.List;
+import com.zhitan.system.domain.SysPost;
+
+/**
+ * 宀椾綅淇℃伅 鏈嶅姟灞�
+ * 
+ * @author zhitan
+ */
+public interface ISysPostService
+{
+    /**
+     * 鏌ヨ宀椾綅淇℃伅闆嗗悎
+     * 
+     * @param post 宀椾綅淇℃伅
+     * @return 宀椾綅鍒楄〃
+     */
+     List<SysPost> selectPostList(SysPost post);
+
+    /**
+     * 鏌ヨ鎵�鏈夊矖浣�
+     * 
+     * @return 宀椾綅鍒楄〃
+     */
+     List<SysPost> selectPostAll();
+
+    /**
+     * 閫氳繃宀椾綅ID鏌ヨ宀椾綅淇℃伅
+     * 
+     * @param postId 宀椾綅ID
+     * @return 瑙掕壊瀵硅薄淇℃伅
+     */
+     SysPost selectPostById(Long postId);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鑾峰彇宀椾綅閫夋嫨妗嗗垪琛�
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 閫変腑宀椾綅ID鍒楄〃
+     */
+     List<Long> selectPostListByUserId(Long userId);
+
+    /**
+     * 鏍¢獙宀椾綅鍚嶇О
+     * 
+     * @param post 宀椾綅淇℃伅
+     * @return 缁撴灉
+     */
+     boolean checkPostNameUnique(SysPost post);
+
+    /**
+     * 鏍¢獙宀椾綅缂栫爜
+     * 
+     * @param post 宀椾綅淇℃伅
+     * @return 缁撴灉
+     */
+     boolean checkPostCodeUnique(SysPost post);
+
+    /**
+     * 閫氳繃宀椾綅ID鏌ヨ宀椾綅浣跨敤鏁伴噺
+     * 
+     * @param postId 宀椾綅ID
+     * @return 缁撴灉
+     */
+     int countUserPostById(Long postId);
+
+    /**
+     * 鍒犻櫎宀椾綅淇℃伅
+     * 
+     * @param postId 宀椾綅ID
+     * @return 缁撴灉
+     */
+     int deletePostById(Long postId);
+
+    /**
+     * 鎵归噺鍒犻櫎宀椾綅淇℃伅
+     * 
+     * @param postIds 闇�瑕佸垹闄ょ殑宀椾綅ID
+     * @return 缁撴灉
+     */
+     int deletePostByIds(Long[] postIds);
+
+    /**
+     * 鏂板淇濆瓨宀椾綅淇℃伅
+     * 
+     * @param post 宀椾綅淇℃伅
+     * @return 缁撴灉
+     */
+     int insertPost(SysPost post);
+
+    /**
+     * 淇敼淇濆瓨宀椾綅淇℃伅
+     * 
+     * @param post 宀椾綅淇℃伅
+     * @return 缁撴灉
+     */
+     int updatePost(SysPost post);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/ISysRoleService.java b/zhitan-system/src/main/java/com/zhitan/system/service/ISysRoleService.java
new file mode 100644
index 0000000..e66d772
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/ISysRoleService.java
@@ -0,0 +1,173 @@
+package com.zhitan.system.service;
+
+import java.util.List;
+import java.util.Set;
+import com.zhitan.common.core.domain.entity.SysRole;
+import com.zhitan.system.domain.SysUserRole;
+
+/**
+ * 瑙掕壊涓氬姟灞�
+ * 
+ * @author zhitan
+ */
+public interface ISysRoleService
+{
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瑙掕壊鏁版嵁
+     * 
+     * @param role 瑙掕壊淇℃伅
+     * @return 瑙掕壊鏁版嵁闆嗗悎淇℃伅
+     */
+     List<SysRole> selectRoleList(SysRole role);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊鍒楄〃
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 瑙掕壊鍒楄〃
+     */
+     List<SysRole> selectRolesByUserId(Long userId);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊鏉冮檺
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 鏉冮檺鍒楄〃
+     */
+     Set<String> selectRolePermissionByUserId(Long userId);
+
+    /**
+     * 鏌ヨ鎵�鏈夎鑹�
+     * 
+     * @return 瑙掕壊鍒楄〃
+     */
+     List<SysRole> selectRoleAll();
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鑾峰彇瑙掕壊閫夋嫨妗嗗垪琛�
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 閫変腑瑙掕壊ID鍒楄〃
+     */
+     List<Long> selectRoleListByUserId(Long userId);
+
+    /**
+     * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊
+     * 
+     * @param roleId 瑙掕壊ID
+     * @return 瑙掕壊瀵硅薄淇℃伅
+     */
+     SysRole selectRoleById(Long roleId);
+
+    /**
+     * 鏍¢獙瑙掕壊鍚嶇О鏄惁鍞竴
+     * 
+     * @param role 瑙掕壊淇℃伅
+     * @return 缁撴灉
+     */
+     boolean checkRoleNameUnique(SysRole role);
+
+    /**
+     * 鏍¢獙瑙掕壊鏉冮檺鏄惁鍞竴
+     * 
+     * @param role 瑙掕壊淇℃伅
+     * @return 缁撴灉
+     */
+     boolean checkRoleKeyUnique(SysRole role);
+
+    /**
+     * 鏍¢獙瑙掕壊鏄惁鍏佽鎿嶄綔
+     * 
+     * @param role 瑙掕壊淇℃伅
+     */
+     void checkRoleAllowed(SysRole role);
+
+    /**
+     * 鏍¢獙瑙掕壊鏄惁鏈夋暟鎹潈闄�
+     * 
+     * @param roleId 瑙掕壊id
+     */
+     void checkRoleDataScope(Long roleId);
+
+    /**
+     * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊浣跨敤鏁伴噺
+     * 
+     * @param roleId 瑙掕壊ID
+     * @return 缁撴灉
+     */
+     int countUserRoleByRoleId(Long roleId);
+
+    /**
+     * 鏂板淇濆瓨瑙掕壊淇℃伅
+     * 
+     * @param role 瑙掕壊淇℃伅
+     * @return 缁撴灉
+     */
+     int insertRole(SysRole role);
+
+    /**
+     * 淇敼淇濆瓨瑙掕壊淇℃伅
+     * 
+     * @param role 瑙掕壊淇℃伅
+     * @return 缁撴灉
+     */
+     int updateRole(SysRole role);
+
+    /**
+     * 淇敼瑙掕壊鐘舵��
+     * 
+     * @param role 瑙掕壊淇℃伅
+     * @return 缁撴灉
+     */
+     int updateRoleStatus(SysRole role);
+
+    /**
+     * 淇敼鏁版嵁鏉冮檺淇℃伅
+     * 
+     * @param role 瑙掕壊淇℃伅
+     * @return 缁撴灉
+     */
+     int authDataScope(SysRole role);
+
+    /**
+     * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊
+     * 
+     * @param roleId 瑙掕壊ID
+     * @return 缁撴灉
+     */
+     int deleteRoleById(Long roleId);
+
+    /**
+     * 鎵归噺鍒犻櫎瑙掕壊淇℃伅
+     * 
+     * @param roleIds 闇�瑕佸垹闄ょ殑瑙掕壊ID
+     * @return 缁撴灉
+     */
+     int deleteRoleByIds(Long[] roleIds);
+
+    /**
+     * 鍙栨秷鎺堟潈鐢ㄦ埛瑙掕壊
+     * 
+     * @param userRole 鐢ㄦ埛鍜岃鑹插叧鑱斾俊鎭�
+     * @return 缁撴灉
+     */
+     int deleteAuthUser(SysUserRole userRole);
+
+    /**
+     * 鎵归噺鍙栨秷鎺堟潈鐢ㄦ埛瑙掕壊
+     * 
+     * @param roleId 瑙掕壊ID
+     * @param userIds 闇�瑕佸彇娑堟巿鏉冪殑鐢ㄦ埛鏁版嵁ID
+     * @return 缁撴灉
+     */
+     int deleteAuthUsers(Long roleId, Long[] userIds);
+
+    /**
+     * 鎵归噺閫夋嫨鎺堟潈鐢ㄦ埛瑙掕壊
+     * 
+     * @param roleId 瑙掕壊ID
+     * @param userIds 闇�瑕佸垹闄ょ殑鐢ㄦ埛鏁版嵁ID
+     * @return 缁撴灉
+     */
+     int insertAuthUsers(Long roleId, Long[] userIds);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/ISysUserOnlineService.java b/zhitan-system/src/main/java/com/zhitan/system/service/ISysUserOnlineService.java
new file mode 100644
index 0000000..db0c661
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/ISysUserOnlineService.java
@@ -0,0 +1,48 @@
+package com.zhitan.system.service;
+
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.system.domain.SysUserOnline;
+
+/**
+ * 鍦ㄧ嚎鐢ㄦ埛 鏈嶅姟灞�
+ * 
+ * @author zhitan
+ */
+public interface ISysUserOnlineService
+{
+    /**
+     * 閫氳繃鐧诲綍鍦板潃鏌ヨ淇℃伅
+     * 
+     * @param ipaddr 鐧诲綍鍦板潃
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅
+     */
+     SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user);
+
+    /**
+     * 閫氳繃鐢ㄦ埛鍚嶇О鏌ヨ淇℃伅
+     * 
+     * @param userName 鐢ㄦ埛鍚嶇О
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅
+     */
+     SysUserOnline selectOnlineByUserName(String userName, LoginUser user);
+
+    /**
+     * 閫氳繃鐧诲綍鍦板潃/鐢ㄦ埛鍚嶇О鏌ヨ淇℃伅
+     * 
+     * @param ipaddr 鐧诲綍鍦板潃
+     * @param userName 鐢ㄦ埛鍚嶇О
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅
+     */
+     SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user);
+
+    /**
+     * 璁剧疆鍦ㄧ嚎鐢ㄦ埛淇℃伅
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鍦ㄧ嚎鐢ㄦ埛
+     */
+     SysUserOnline loginUserToUserOnline(LoginUser user);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/ISysUserService.java b/zhitan-system/src/main/java/com/zhitan/system/service/ISysUserService.java
new file mode 100644
index 0000000..851bfe0
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/ISysUserService.java
@@ -0,0 +1,206 @@
+package com.zhitan.system.service;
+
+import java.util.List;
+import com.zhitan.common.core.domain.entity.SysUser;
+
+/**
+ * 鐢ㄦ埛 涓氬姟灞�
+ * 
+ * @author zhitan
+ */
+public interface ISysUserService
+{
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鐢ㄦ埛鍒楄〃
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
+     */
+     List<SysUser> selectUserList(SysUser user);
+
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪琛�
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
+     */
+     List<SysUser> selectAllocatedList(SysUser user);
+
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鏈垎閰嶇敤鎴疯鑹插垪琛�
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
+     */
+     List<SysUser> selectUnallocatedList(SysUser user);
+
+    /**
+     * 閫氳繃鐢ㄦ埛鍚嶆煡璇㈢敤鎴�
+     * 
+     * @param userName 鐢ㄦ埛鍚�
+     * @return 鐢ㄦ埛瀵硅薄淇℃伅
+     */
+     SysUser selectUserByUserName(String userName);
+
+    /**
+     * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 鐢ㄦ埛瀵硅薄淇℃伅
+     */
+     SysUser selectUserById(Long userId);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鐢ㄦ埛鎵�灞炶鑹茬粍
+     * 
+     * @param userName 鐢ㄦ埛鍚�
+     * @return 缁撴灉
+     */
+     String selectUserRoleGroup(String userName);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鐢ㄦ埛鎵�灞炲矖浣嶇粍
+     * 
+     * @param userName 鐢ㄦ埛鍚�
+     * @return 缁撴灉
+     */
+     String selectUserPostGroup(String userName);
+
+    /**
+     * 鏍¢獙鐢ㄦ埛鍚嶇О鏄惁鍞竴
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 缁撴灉
+     */
+     boolean checkUserNameUnique(SysUser user);
+
+    /**
+     * 鏍¢獙鎵嬫満鍙风爜鏄惁鍞竴
+     *
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 缁撴灉
+     */
+     boolean checkPhoneUnique(SysUser user);
+
+    /**
+     * 鏍¢獙email鏄惁鍞竴
+     *
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 缁撴灉
+     */
+     boolean checkEmailUnique(SysUser user);
+
+    /**
+     * 鏍¢獙鐢ㄦ埛鏄惁鍏佽鎿嶄綔
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     */
+     void checkUserAllowed(SysUser user);
+
+    /**
+     * 鏍¢獙鐢ㄦ埛鏄惁鏈夋暟鎹潈闄�
+     * 
+     * @param userId 鐢ㄦ埛id
+     */
+     void checkUserDataScope(Long userId);
+
+    /**
+     * 鏂板鐢ㄦ埛淇℃伅
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 缁撴灉
+     */
+     int insertUser(SysUser user);
+
+    /**
+     * 娉ㄥ唽鐢ㄦ埛淇℃伅
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 缁撴灉
+     */
+     boolean registerUser(SysUser user);
+
+    /**
+     * 淇敼鐢ㄦ埛淇℃伅
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 缁撴灉
+     */
+     int updateUser(SysUser user);
+
+    /**
+     * 鐢ㄦ埛鎺堟潈瑙掕壊
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @param roleIds 瑙掕壊缁�
+     */
+     void insertUserAuth(Long userId, Long[] roleIds);
+
+    /**
+     * 淇敼鐢ㄦ埛鐘舵��
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 缁撴灉
+     */
+     int updateUserStatus(SysUser user);
+
+    /**
+     * 淇敼鐢ㄦ埛鍩烘湰淇℃伅
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 缁撴灉
+     */
+     int updateUserProfile(SysUser user);
+
+    /**
+     * 淇敼鐢ㄦ埛澶村儚
+     * 
+     * @param userName 鐢ㄦ埛鍚�
+     * @param avatar 澶村儚鍦板潃
+     * @return 缁撴灉
+     */
+     boolean updateUserAvatar(String userName, String avatar);
+
+    /**
+     * 閲嶇疆鐢ㄦ埛瀵嗙爜
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 缁撴灉
+     */
+     int resetPwd(SysUser user);
+
+    /**
+     * 閲嶇疆鐢ㄦ埛瀵嗙爜
+     * 
+     * @param userName 鐢ㄦ埛鍚�
+     * @param password 瀵嗙爜
+     * @return 缁撴灉
+     */
+     int resetUserPwd(String userName, String password);
+
+    /**
+     * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 缁撴灉
+     */
+     int deleteUserById(Long userId);
+
+    /**
+     * 鎵归噺鍒犻櫎鐢ㄦ埛淇℃伅
+     * 
+     * @param userIds 闇�瑕佸垹闄ょ殑鐢ㄦ埛ID
+     * @return 缁撴灉
+     */
+     int deleteUserByIds(Long[] userIds);
+
+    /**
+     * 瀵煎叆鐢ㄦ埛鏁版嵁
+     * 
+     * @param userList 鐢ㄦ埛鏁版嵁鍒楄〃
+     * @param isUpdateSupport 鏄惁鏇存柊鏀寔锛屽鏋滃凡瀛樺湪锛屽垯杩涜鏇存柊鏁版嵁
+     * @param operName 鎿嶄綔鐢ㄦ埛
+     * @return 缁撴灉
+     */
+     String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysConfigServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysConfigServiceImpl.java
new file mode 100644
index 0000000..d3b2a5e
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysConfigServiceImpl.java
@@ -0,0 +1,234 @@
+package com.zhitan.system.service.impl;
+
+import java.util.Collection;
+import java.util.List;
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.zhitan.common.annotation.DataSource;
+import com.zhitan.common.constant.CacheConstants;
+import com.zhitan.common.constant.UserConstants;
+import com.zhitan.common.core.redis.RedisCache;
+import com.zhitan.common.core.text.Convert;
+import com.zhitan.common.enums.DataSourceType;
+import com.zhitan.common.exception.ServiceException;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.system.domain.SysConfig;
+import com.zhitan.system.mapper.SysConfigMapper;
+import com.zhitan.system.service.ISysConfigService;
+
+/**
+ * 鍙傛暟閰嶇疆 鏈嶅姟灞傚疄鐜�
+ * 
+ * @author zhitan
+ */
+@Service
+public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper,SysConfig> implements ISysConfigService
+{
+    @Resource
+    private SysConfigMapper sysConfigMapper;
+
+    @Resource
+    private RedisCache redisCache;
+
+    /**
+     * 椤圭洰鍚姩鏃讹紝鍒濆鍖栧弬鏁板埌缂撳瓨
+     */
+    @PostConstruct
+    public void init()
+    {
+        loadingConfigCache();
+    }
+
+    /**
+     * 鏌ヨ鍙傛暟閰嶇疆淇℃伅
+     * 
+     * @param configId 鍙傛暟閰嶇疆ID
+     * @return 鍙傛暟閰嶇疆淇℃伅
+     */
+    @Override
+    @DataSource(DataSourceType.MASTER)
+    public SysConfig selectConfigById(Long configId)
+    {
+        SysConfig config = new SysConfig();
+        config.setConfigId(configId);
+        return sysConfigMapper.selectConfig(config);
+    }
+
+    /**
+     * 鏍规嵁閿悕鏌ヨ鍙傛暟閰嶇疆淇℃伅
+     * 
+     * @param configKey 鍙傛暟key
+     * @return 鍙傛暟閿��
+     */
+    @Override
+    public String selectConfigByKey(String configKey)
+    {
+        String configValue = Convert.toStr(redisCache.getCacheObject(getCacheKey(configKey)));
+        if (StringUtils.isNotEmpty(configValue))
+        {
+            return configValue;
+        }
+        SysConfig config = new SysConfig();
+        config.setConfigKey(configKey);
+        SysConfig retConfig = sysConfigMapper.selectConfig(config);
+        if (StringUtils.isNotNull(retConfig))
+        {
+            redisCache.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue());
+            return retConfig.getConfigValue();
+        }
+        return StringUtils.EMPTY;
+    }
+
+    /**
+     * 鑾峰彇楠岃瘉鐮佸紑鍏�
+     * 
+     * @return true寮�鍚紝false鍏抽棴
+     */
+    @Override
+    public boolean selectCaptchaEnabled()
+    {
+        String captchaEnabled = selectConfigByKey("sys.account.captchaEnabled");
+        if (StringUtils.isEmpty(captchaEnabled))
+        {
+            return true;
+        }
+        return Convert.toBool(captchaEnabled);
+    }
+
+    /**
+     * 鏌ヨ鍙傛暟閰嶇疆鍒楄〃
+     * 
+     * @param config 鍙傛暟閰嶇疆淇℃伅
+     * @return 鍙傛暟閰嶇疆闆嗗悎
+     */
+    @Override
+    public List<SysConfig> selectConfigList(SysConfig config)
+    {
+        return sysConfigMapper.selectConfigList(config);
+    }
+
+    /**
+     * 鏂板鍙傛暟閰嶇疆
+     * 
+     * @param config 鍙傛暟閰嶇疆淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertConfig(SysConfig config)
+    {
+        int row = sysConfigMapper.insertConfig(config);
+        if (row > 0)
+        {
+            redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
+        }
+        return row;
+    }
+
+    /**
+     * 淇敼鍙傛暟閰嶇疆
+     * 
+     * @param config 鍙傛暟閰嶇疆淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateConfig(SysConfig config)
+    {
+        SysConfig temp = sysConfigMapper.selectConfigById(config.getConfigId());
+        if (!StringUtils.equals(temp.getConfigKey(), config.getConfigKey()))
+        {
+            redisCache.deleteObject(getCacheKey(temp.getConfigKey()));
+        }
+
+        int row = sysConfigMapper.updateConfig(config);
+        if (row > 0)
+        {
+            redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
+        }
+        return row;
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎鍙傛暟淇℃伅
+     * 
+     * @param configIds 闇�瑕佸垹闄ょ殑鍙傛暟ID
+     */
+    @Override
+    public void deleteConfigByIds(Long[] configIds)
+    {
+        for (Long configId : configIds)
+        {
+            SysConfig config = selectConfigById(configId);
+            if (StringUtils.equals(UserConstants.YES, config.getConfigType()))
+            {
+                throw new ServiceException(String.format("鍐呯疆鍙傛暟銆�%1$s銆戜笉鑳藉垹闄� ", config.getConfigKey()));
+            }
+            sysConfigMapper.deleteConfigById(configId);
+            redisCache.deleteObject(getCacheKey(config.getConfigKey()));
+        }
+    }
+
+    /**
+     * 鍔犺浇鍙傛暟缂撳瓨鏁版嵁
+     */
+    @Override
+    public void loadingConfigCache()
+    {
+        List<SysConfig> configsList = sysConfigMapper.selectConfigList(new SysConfig());
+        for (SysConfig config : configsList)
+        {
+            redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
+        }
+    }
+
+    /**
+     * 娓呯┖鍙傛暟缂撳瓨鏁版嵁
+     */
+    @Override
+    public void clearConfigCache()
+    {
+        Collection<String> keys = redisCache.keys(CacheConstants.SYS_CONFIG_KEY + "*");
+        redisCache.deleteObject(keys);
+    }
+
+    /**
+     * 閲嶇疆鍙傛暟缂撳瓨鏁版嵁
+     */
+    @Override
+    public void resetConfigCache()
+    {
+        clearConfigCache();
+        loadingConfigCache();
+    }
+
+    /**
+     * 鏍¢獙鍙傛暟閿悕鏄惁鍞竴
+     * 
+     * @param config 鍙傛暟閰嶇疆淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public boolean checkConfigKeyUnique(SysConfig config)
+    {
+        Long configId = StringUtils.isNull(config.getConfigId()) ? -1L : config.getConfigId();
+        SysConfig info = sysConfigMapper.checkConfigKeyUnique(config.getConfigKey());
+        if (StringUtils.isNotNull(info) && info.getConfigId().longValue() != configId.longValue())
+        {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+
+    /**
+     * 璁剧疆cache key
+     * 
+     * @param configKey 鍙傛暟閿�
+     * @return 缂撳瓨閿甼ey
+     */
+    private String getCacheKey(String configKey)
+    {
+        return CacheConstants.SYS_CONFIG_KEY + configKey;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysDeptServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysDeptServiceImpl.java
new file mode 100644
index 0000000..a42f9bf
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysDeptServiceImpl.java
@@ -0,0 +1,340 @@
+package com.zhitan.system.service.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.annotation.Resource;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.zhitan.common.annotation.DataScope;
+import com.zhitan.common.constant.UserConstants;
+import com.zhitan.common.core.domain.TreeSelect;
+import com.zhitan.common.core.domain.entity.SysDept;
+import com.zhitan.common.core.domain.entity.SysRole;
+import com.zhitan.common.core.domain.entity.SysUser;
+import com.zhitan.common.core.text.Convert;
+import com.zhitan.common.exception.ServiceException;
+import com.zhitan.common.utils.SecurityUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.spring.SpringUtils;
+import com.zhitan.system.mapper.SysDeptMapper;
+import com.zhitan.system.mapper.SysRoleMapper;
+import com.zhitan.system.service.ISysDeptService;
+
+/**
+ * 閮ㄩ棬绠$悊 鏈嶅姟瀹炵幇
+ * 
+ * @author zhitan
+ */
+@Service
+public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper,SysDept> implements ISysDeptService
+{
+    @Resource
+    private SysDeptMapper deptMapper;
+
+    @Resource
+    private SysRoleMapper roleMapper;
+
+    /**
+     * 鏌ヨ閮ㄩ棬绠$悊鏁版嵁
+     * 
+     * @param dept 閮ㄩ棬淇℃伅
+     * @return 閮ㄩ棬淇℃伅闆嗗悎
+     */
+    @Override
+    @DataScope(deptAlias = "d")
+    public List<SysDept> selectDeptList(SysDept dept)
+    {
+        return deptMapper.selectDeptList(dept);
+    }
+
+    /**
+     * 鏌ヨ閮ㄩ棬鏍戠粨鏋勪俊鎭�
+     * 
+     * @param dept 閮ㄩ棬淇℃伅
+     * @return 閮ㄩ棬鏍戜俊鎭泦鍚�
+     */
+    @Override
+    public List<TreeSelect> selectDeptTreeList(SysDept dept)
+    {
+        List<SysDept> depts = SpringUtils.getAopProxy(this).selectDeptList(dept);
+        return buildDeptTreeSelect(depts);
+    }
+
+    /**
+     * 鏋勫缓鍓嶇鎵�闇�瑕佹爲缁撴瀯
+     * 
+     * @param depts 閮ㄩ棬鍒楄〃
+     * @return 鏍戠粨鏋勫垪琛�
+     */
+    @Override
+    public List<SysDept> buildDeptTree(List<SysDept> depts)
+    {
+        List<SysDept> returnList = new ArrayList<SysDept>();
+        List<Long> tempList = depts.stream().map(SysDept::getDeptId).collect(Collectors.toList());
+        for (SysDept dept : depts)
+        {
+            // 濡傛灉鏄《绾ц妭鐐�, 閬嶅巻璇ョ埗鑺傜偣鐨勬墍鏈夊瓙鑺傜偣
+            if (!tempList.contains(dept.getParentId()))
+            {
+                recursionFn(depts, dept);
+                returnList.add(dept);
+            }
+        }
+        if (returnList.isEmpty())
+        {
+            returnList = depts;
+        }
+        return returnList;
+    }
+
+    /**
+     * 鏋勫缓鍓嶇鎵�闇�瑕佷笅鎷夋爲缁撴瀯
+     * 
+     * @param depts 閮ㄩ棬鍒楄〃
+     * @return 涓嬫媺鏍戠粨鏋勫垪琛�
+     */
+    @Override
+    public List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts)
+    {
+        List<SysDept> deptTrees = buildDeptTree(depts);
+        return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
+    }
+
+    /**
+     * 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戜俊鎭�
+     * 
+     * @param roleId 瑙掕壊ID
+     * @return 閫変腑閮ㄩ棬鍒楄〃
+     */
+    @Override
+    public List<Long> selectDeptListByRoleId(Long roleId)
+    {
+        SysRole role = roleMapper.selectRoleById(roleId);
+        return deptMapper.selectDeptListByRoleId(roleId, role.isDeptCheckStrictly());
+    }
+
+    /**
+     * 鏍规嵁閮ㄩ棬ID鏌ヨ淇℃伅
+     * 
+     * @param deptId 閮ㄩ棬ID
+     * @return 閮ㄩ棬淇℃伅
+     */
+    @Override
+    public SysDept selectDeptById(Long deptId)
+    {
+        return deptMapper.selectDeptById(deptId);
+    }
+
+    /**
+     * 鏍规嵁ID鏌ヨ鎵�鏈夊瓙閮ㄩ棬锛堟甯哥姸鎬侊級
+     * 
+     * @param deptId 閮ㄩ棬ID
+     * @return 瀛愰儴闂ㄦ暟
+     */
+    @Override
+    public int selectNormalChildrenDeptById(Long deptId)
+    {
+        return deptMapper.selectNormalChildrenDeptById(deptId);
+    }
+
+    /**
+     * 鏄惁瀛樺湪瀛愯妭鐐�
+     * 
+     * @param deptId 閮ㄩ棬ID
+     * @return 缁撴灉
+     */
+    @Override
+    public boolean hasChildByDeptId(Long deptId)
+    {
+        int result = deptMapper.hasChildByDeptId(deptId);
+        return result > 0;
+    }
+
+    /**
+     * 鏌ヨ閮ㄩ棬鏄惁瀛樺湪鐢ㄦ埛
+     * 
+     * @param deptId 閮ㄩ棬ID
+     * @return 缁撴灉 true 瀛樺湪 false 涓嶅瓨鍦�
+     */
+    @Override
+    public boolean checkDeptExistUser(Long deptId)
+    {
+        int result = deptMapper.checkDeptExistUser(deptId);
+        return result > 0;
+    }
+
+    /**
+     * 鏍¢獙閮ㄩ棬鍚嶇О鏄惁鍞竴
+     * 
+     * @param dept 閮ㄩ棬淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public boolean checkDeptNameUnique(SysDept dept)
+    {
+        Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId();
+        SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId());
+        if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue())
+        {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+
+    /**
+     * 鏍¢獙閮ㄩ棬鏄惁鏈夋暟鎹潈闄�
+     * 
+     * @param deptId 閮ㄩ棬id
+     */
+    @Override
+    public void checkDeptDataScope(Long deptId)
+    {
+        if (!SysUser.isAdmin(SecurityUtils.getUserId()))
+        {
+            SysDept dept = new SysDept();
+            dept.setDeptId(deptId);
+            List<SysDept> depts = SpringUtils.getAopProxy(this).selectDeptList(dept);
+            if (StringUtils.isEmpty(depts))
+            {
+                throw new ServiceException("娌℃湁鏉冮檺璁块棶閮ㄩ棬鏁版嵁锛�");
+            }
+        }
+    }
+
+    /**
+     * 鏂板淇濆瓨閮ㄩ棬淇℃伅
+     * 
+     * @param dept 閮ㄩ棬淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertDept(SysDept dept)
+    {
+        SysDept info = deptMapper.selectDeptById(dept.getParentId());
+        // 濡傛灉鐖惰妭鐐逛笉涓烘甯哥姸鎬�,鍒欎笉鍏佽鏂板瀛愯妭鐐�
+        if (!UserConstants.DEPT_NORMAL.equals(info.getStatus()))
+        {
+            throw new ServiceException("閮ㄩ棬鍋滅敤锛屼笉鍏佽鏂板");
+        }
+        dept.setAncestors(info.getAncestors() + "," + dept.getParentId());
+        return deptMapper.insertDept(dept);
+    }
+
+    /**
+     * 淇敼淇濆瓨閮ㄩ棬淇℃伅
+     * 
+     * @param dept 閮ㄩ棬淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateDept(SysDept dept)
+    {
+        SysDept newParentDept = deptMapper.selectDeptById(dept.getParentId());
+        SysDept oldDept = deptMapper.selectDeptById(dept.getDeptId());
+        if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept))
+        {
+            String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId();
+            String oldAncestors = oldDept.getAncestors();
+            dept.setAncestors(newAncestors);
+            updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors);
+        }
+        int result = deptMapper.updateDept(dept);
+        if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty(dept.getAncestors())
+                && !StringUtils.equals("0", dept.getAncestors()))
+        {
+            // 濡傛灉璇ラ儴闂ㄦ槸鍚敤鐘舵�侊紝鍒欏惎鐢ㄨ閮ㄩ棬鐨勬墍鏈変笂绾ч儴闂�
+            updateParentDeptStatusNormal(dept);
+        }
+        return result;
+    }
+
+    /**
+     * 淇敼璇ラ儴闂ㄧ殑鐖剁骇閮ㄩ棬鐘舵��
+     * 
+     * @param dept 褰撳墠閮ㄩ棬
+     */
+    private void updateParentDeptStatusNormal(SysDept dept)
+    {
+        String ancestors = dept.getAncestors();
+        Long[] deptIds = Convert.toLongArray(ancestors);
+        deptMapper.updateDeptStatusNormal(deptIds);
+    }
+
+    /**
+     * 淇敼瀛愬厓绱犲叧绯�
+     * 
+     * @param deptId 琚慨鏀圭殑閮ㄩ棬ID
+     * @param newAncestors 鏂扮殑鐖禝D闆嗗悎
+     * @param oldAncestors 鏃х殑鐖禝D闆嗗悎
+     */
+    public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors)
+    {
+        List<SysDept> children = deptMapper.selectChildrenDeptById(deptId);
+        for (SysDept child : children)
+        {
+            child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors));
+        }
+        if (children.size() > 0)
+        {
+            deptMapper.updateDeptChildren(children);
+        }
+    }
+
+    /**
+     * 鍒犻櫎閮ㄩ棬绠$悊淇℃伅
+     * 
+     * @param deptId 閮ㄩ棬ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteDeptById(Long deptId)
+    {
+        return deptMapper.deleteDeptById(deptId);
+    }
+
+    /**
+     * 閫掑綊鍒楄〃
+     */
+    private void recursionFn(List<SysDept> list, SysDept t)
+    {
+        // 寰楀埌瀛愯妭鐐瑰垪琛�
+        List<SysDept> childList = getChildList(list, t);
+        t.setChildren(childList);
+        for (SysDept tChild : childList)
+        {
+            if (hasChild(list, tChild))
+            {
+                recursionFn(list, tChild);
+            }
+        }
+    }
+
+    /**
+     * 寰楀埌瀛愯妭鐐瑰垪琛�
+     */
+    private List<SysDept> getChildList(List<SysDept> list, SysDept t)
+    {
+        List<SysDept> tlist = new ArrayList<SysDept>();
+        Iterator<SysDept> it = list.iterator();
+        while (it.hasNext())
+        {
+            SysDept n = (SysDept) it.next();
+            if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue())
+            {
+                tlist.add(n);
+            }
+        }
+        return tlist;
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁鏈夊瓙鑺傜偣
+     */
+    private boolean hasChild(List<SysDept> list, SysDept t)
+    {
+        return getChildList(list, t).size() > 0;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysDictDataServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysDictDataServiceImpl.java
new file mode 100644
index 0000000..362be25
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysDictDataServiceImpl.java
@@ -0,0 +1,118 @@
+package com.zhitan.system.service.impl;
+
+import java.util.List;
+import javax.annotation.Resource;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.zhitan.common.core.domain.entity.SysDictData;
+import com.zhitan.common.utils.DictUtils;
+import com.zhitan.system.mapper.SysDictDataMapper;
+import com.zhitan.system.service.ISysDictDataService;
+
+/**
+ * 瀛楀吀 涓氬姟灞傚鐞�
+ * 
+ * @author zhitan
+ */
+@Service
+public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper,SysDictData> implements ISysDictDataService
+{
+    @Resource
+    private SysDictDataMapper dictDataMapper;
+
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀鏁版嵁
+     * 
+     * @param dictData 瀛楀吀鏁版嵁淇℃伅
+     * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅
+     */
+    @Override
+    public List<SysDictData> selectDictDataList(SysDictData dictData)
+    {
+        return dictDataMapper.selectDictDataList(dictData);
+    }
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏搁敭鍊兼煡璇㈠瓧鍏告暟鎹俊鎭�
+     * 
+     * @param dictType 瀛楀吀绫诲瀷
+     * @param dictValue 瀛楀吀閿��
+     * @return 瀛楀吀鏍囩
+     */
+    @Override
+    public String selectDictLabel(String dictType, String dictValue)
+    {
+        return dictDataMapper.selectDictLabel(dictType, dictValue);
+    }
+
+    /**
+     * 鏍规嵁瀛楀吀鏁版嵁ID鏌ヨ淇℃伅
+     * 
+     * @param dictCode 瀛楀吀鏁版嵁ID
+     * @return 瀛楀吀鏁版嵁
+     */
+    @Override
+    public SysDictData selectDictDataById(Long dictCode)
+    {
+        return dictDataMapper.selectDictDataById(dictCode);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎瀛楀吀鏁版嵁淇℃伅
+     * 
+     * @param dictCodes 闇�瑕佸垹闄ょ殑瀛楀吀鏁版嵁ID
+     */
+    @Override
+    public void deleteDictDataByIds(Long[] dictCodes)
+    {
+        for (Long dictCode : dictCodes)
+        {
+            SysDictData data = selectDictDataById(dictCode);
+            dictDataMapper.deleteDictDataById(dictCode);
+            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
+            DictUtils.setDictCache(data.getDictType(), dictDatas);
+        }
+    }
+
+    /**
+     * 鏂板淇濆瓨瀛楀吀鏁版嵁淇℃伅
+     * 
+     * @param data 瀛楀吀鏁版嵁淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertDictData(SysDictData data)
+    {
+        int row = dictDataMapper.insertDictData(data);
+        if (row > 0)
+        {
+            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
+            DictUtils.setDictCache(data.getDictType(), dictDatas);
+        }
+        return row;
+    }
+
+    /**
+     * 淇敼淇濆瓨瀛楀吀鏁版嵁淇℃伅
+     * 
+     * @param data 瀛楀吀鏁版嵁淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateDictData(SysDictData data)
+    {
+        int row = dictDataMapper.updateDictData(data);
+        if (row > 0)
+        {
+            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
+            DictUtils.setDictCache(data.getDictType(), dictDatas);
+        }
+        return row;
+    }
+
+    @Override
+    public List<SysDictData> selectDictDataByType(String dictType) {
+        return dictDataMapper.selectDictDataByType(dictType);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysDictTypeServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysDictTypeServiceImpl.java
new file mode 100644
index 0000000..0ba257f
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysDictTypeServiceImpl.java
@@ -0,0 +1,239 @@
+package com.zhitan.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhitan.common.constant.UserConstants;
+import com.zhitan.common.core.domain.entity.SysDictData;
+import com.zhitan.common.core.domain.entity.SysDictType;
+import com.zhitan.common.exception.ServiceException;
+import com.zhitan.common.utils.DictUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.system.mapper.SysDictDataMapper;
+import com.zhitan.system.mapper.SysDictTypeMapper;
+import com.zhitan.system.service.ISysDictTypeService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 瀛楀吀 涓氬姟灞傚鐞�
+ * 
+ * @author zhitan
+ */
+@Service
+public class SysDictTypeServiceImpl extends ServiceImpl<SysDictTypeMapper,SysDictType> implements ISysDictTypeService
+{
+    @Resource
+    private SysDictTypeMapper dictTypeMapper;
+
+    @Resource
+    private SysDictDataMapper dictDataMapper;
+
+    /**
+     * 椤圭洰鍚姩鏃讹紝鍒濆鍖栧瓧鍏稿埌缂撳瓨
+     */
+    @PostConstruct
+    public void init()
+    {
+        loadingDictCache();
+    }
+
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀绫诲瀷
+     * 
+     * @param dictType 瀛楀吀绫诲瀷淇℃伅
+     * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅
+     */
+    @Override
+    public List<SysDictType> selectDictTypeList(SysDictType dictType)
+    {
+        return dictTypeMapper.selectDictTypeList(dictType);
+    }
+
+    /**
+     * 鏍规嵁鎵�鏈夊瓧鍏哥被鍨�
+     * 
+     * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅
+     */
+    @Override
+    public List<SysDictType> selectDictTypeAll()
+    {
+        return dictTypeMapper.selectDictTypeAll();
+    }
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁
+     * 
+     * @param dictType 瀛楀吀绫诲瀷
+     * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅
+     */
+    @Override
+    public List<SysDictData> selectDictDataByType(String dictType)
+    {
+        List<SysDictData> dictDatas = DictUtils.getDictCache(dictType);
+        if (StringUtils.isNotEmpty(dictDatas))
+        {
+            return dictDatas;
+        }
+        dictDatas = dictDataMapper.selectDictDataByType(dictType);
+        if (StringUtils.isNotEmpty(dictDatas))
+        {
+            DictUtils.setDictCache(dictType, dictDatas);
+            return dictDatas;
+        }
+        return null;
+    }
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷ID鏌ヨ淇℃伅
+     * 
+     * @param dictId 瀛楀吀绫诲瀷ID
+     * @return 瀛楀吀绫诲瀷
+     */
+    @Override
+    public SysDictType selectDictTypeById(Long dictId)
+    {
+        return dictTypeMapper.selectDictTypeById(dictId);
+    }
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ淇℃伅
+     * 
+     * @param dictType 瀛楀吀绫诲瀷
+     * @return 瀛楀吀绫诲瀷
+     */
+    @Override
+    public SysDictType selectDictTypeByType(String dictType)
+    {
+        return dictTypeMapper.selectDictTypeByType(dictType);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎瀛楀吀绫诲瀷淇℃伅
+     * 
+     * @param dictIds 闇�瑕佸垹闄ょ殑瀛楀吀ID
+     */
+    @Override
+    public void deleteDictTypeByIds(Long[] dictIds)
+    {
+        for (Long dictId : dictIds)
+        {
+            SysDictType dictType = selectDictTypeById(dictId);
+            if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0)
+            {
+                throw new ServiceException(String.format("%1$s宸插垎閰�,涓嶈兘鍒犻櫎", dictType.getDictName()));
+            }
+            dictTypeMapper.deleteDictTypeById(dictId);
+            DictUtils.removeDictCache(dictType.getDictType());
+        }
+    }
+
+    /**
+     * 鍔犺浇瀛楀吀缂撳瓨鏁版嵁
+     */
+    @Override
+    public void loadingDictCache()
+    {
+        SysDictData dictData = new SysDictData();
+        dictData.setStatus("0");
+        Map<String, List<SysDictData>> dictDataMap = dictDataMapper.selectDictDataList(dictData).stream().collect(Collectors.groupingBy(SysDictData::getDictType));
+        for (Map.Entry<String, List<SysDictData>> entry : dictDataMap.entrySet())
+        {
+            DictUtils.setDictCache(entry.getKey(), entry.getValue().stream().sorted(Comparator.comparing(SysDictData::getDictSort)).collect(Collectors.toList()));
+        }
+    }
+
+    /**
+     * 娓呯┖瀛楀吀缂撳瓨鏁版嵁
+     */
+    @Override
+    public void clearDictCache()
+    {
+        DictUtils.clearDictCache();
+    }
+
+    /**
+     * 閲嶇疆瀛楀吀缂撳瓨鏁版嵁
+     */
+    @Override
+    public void resetDictCache()
+    {
+        clearDictCache();
+        loadingDictCache();
+    }
+
+    /**
+     * 鏂板淇濆瓨瀛楀吀绫诲瀷淇℃伅
+     * 
+     * @param dict 瀛楀吀绫诲瀷淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertDictType(SysDictType dict)
+    {
+        int row = dictTypeMapper.insertDictType(dict);
+        if (row > 0)
+        {
+            DictUtils.setDictCache(dict.getDictType(), null);
+        }
+        return row;
+    }
+
+    /**
+     * 淇敼淇濆瓨瀛楀吀绫诲瀷淇℃伅
+     * 
+     * @param dict 瀛楀吀绫诲瀷淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    @Transactional
+    public int updateDictType(SysDictType dict)
+    {
+        SysDictType oldDict = dictTypeMapper.selectDictTypeById(dict.getDictId());
+        dictDataMapper.updateDictDataType(oldDict.getDictType(), dict.getDictType());
+        int row = dictTypeMapper.updateDictType(dict);
+        if (row > 0)
+        {
+            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType());
+            DictUtils.setDictCache(dict.getDictType(), dictDatas);
+        }
+        return row;
+    }
+
+    /**
+     * 鏍¢獙瀛楀吀绫诲瀷绉版槸鍚﹀敮涓�
+     * 
+     * @param dict 瀛楀吀绫诲瀷
+     * @return 缁撴灉
+     */
+    @Override
+    public boolean checkDictTypeUnique(SysDictType dict)
+    {
+        Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId();
+        SysDictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType());
+        if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue())
+        {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+
+    @Override
+    public Page<SysDictType> selectDictTypePageList(SysDictType dictType, Long pageNum, Long pageSize) {
+        LambdaQueryWrapper<SysDictType> wrapper = new LambdaQueryWrapper<>();
+        wrapper.like(StringUtils.isNotEmpty(dictType.getDictName()),SysDictType::getDictName,dictType.getDictName());
+        wrapper.like(StringUtils.isNotEmpty(dictType.getDictType()),SysDictType::getDictType,dictType.getDictType());
+        wrapper.eq(StringUtils.isNotEmpty(dictType.getStatus()),SysDictType::getStatus,dictType.getStatus());
+        wrapper.between(StringUtils.isNotEmpty(dictType.getBeginTime()),SysDictType::getCreateTime,dictType.getBeginTime(),dictType.getEndTime());
+        wrapper.orderByDesc(SysDictType::getCreateTime);
+        Page<SysDictType> page = dictTypeMapper.selectPage(new Page<SysDictType>(pageNum, pageSize), wrapper);
+        return page;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysLoginInfoServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysLoginInfoServiceImpl.java
new file mode 100644
index 0000000..2edd2fe
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysLoginInfoServiceImpl.java
@@ -0,0 +1,67 @@
+package com.zhitan.system.service.impl;
+
+import java.util.List;
+import javax.annotation.Resource;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.zhitan.system.domain.SysLoginInfo;
+import com.zhitan.system.mapper.SysLoginInfoMapper;
+import com.zhitan.system.service.ISysLoginInfoService;
+
+/**
+ * 绯荤粺璁块棶鏃ュ織鎯呭喌淇℃伅 鏈嶅姟灞傚鐞�
+ * 
+ * @author zhitan
+ */
+@Service
+public class SysLoginInfoServiceImpl extends ServiceImpl<SysLoginInfoMapper,SysLoginInfo> implements ISysLoginInfoService
+{
+
+    @Resource
+    private SysLoginInfoMapper loginInfoMapper;
+
+    /**
+     * 鏂板绯荤粺鐧诲綍鏃ュ織
+     * 
+     * @param loginInfo 璁块棶鏃ュ織瀵硅薄
+     */
+    @Override
+    public void insertLoginInfo(SysLoginInfo loginInfo)
+    {
+        loginInfoMapper.insertLoginInfo(loginInfo);
+    }
+
+    /**
+     * 鏌ヨ绯荤粺鐧诲綍鏃ュ織闆嗗悎
+     * 
+     * @param loginInfo 璁块棶鏃ュ織瀵硅薄
+     * @return 鐧诲綍璁板綍闆嗗悎
+     */
+    @Override
+    public List<SysLoginInfo> selectLogininforList(SysLoginInfo loginInfo)
+    {
+        return loginInfoMapper.selectLoginInfoList(loginInfo);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎绯荤粺鐧诲綍鏃ュ織
+     * 
+     * @param infoIds 闇�瑕佸垹闄ょ殑鐧诲綍鏃ュ織ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteLoginInfoByIds(Long[] infoIds)
+    {
+        return loginInfoMapper.deleteLoginInfoByIds(infoIds);
+    }
+
+    /**
+     * 娓呯┖绯荤粺鐧诲綍鏃ュ織
+     */
+    @Override
+    public void cleanLoginInfo()
+    {
+        loginInfoMapper.cleanLoginInfo();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysMenuServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysMenuServiceImpl.java
new file mode 100644
index 0000000..e513f1e
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysMenuServiceImpl.java
@@ -0,0 +1,531 @@
+package com.zhitan.system.service.impl;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+import javax.annotation.Resource;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.constant.UserConstants;
+import com.zhitan.common.core.domain.TreeSelect;
+import com.zhitan.common.core.domain.entity.SysMenu;
+import com.zhitan.common.core.domain.entity.SysRole;
+import com.zhitan.common.core.domain.entity.SysUser;
+import com.zhitan.common.utils.SecurityUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.system.domain.vo.MetaVo;
+import com.zhitan.system.domain.vo.RouterVo;
+import com.zhitan.system.mapper.SysMenuMapper;
+import com.zhitan.system.mapper.SysRoleMapper;
+import com.zhitan.system.mapper.SysRoleMenuMapper;
+import com.zhitan.system.service.ISysMenuService;
+
+/**
+ * 鑿滃崟 涓氬姟灞傚鐞�
+ * 
+ * @author zhitan
+ */
+@Service
+public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper,SysMenu> implements ISysMenuService
+{
+    @Resource
+    private SysMenuMapper menuMapper;
+
+    @Resource
+    private SysRoleMapper roleMapper;
+
+    @Resource
+    private SysRoleMenuMapper roleMenuMapper;
+
+    /**
+     * 鏍规嵁鐢ㄦ埛鏌ヨ绯荤粺鑿滃崟鍒楄〃
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 鑿滃崟鍒楄〃
+     */
+    @Override
+    public List<SysMenu> selectMenuList(Long userId)
+    {
+        return selectMenuList(new SysMenu(), userId);
+    }
+
+    /**
+     * 鏌ヨ绯荤粺鑿滃崟鍒楄〃
+     * 
+     * @param menu 鑿滃崟淇℃伅
+     * @return 鑿滃崟鍒楄〃
+     */
+    @Override
+    public List<SysMenu> selectMenuList(SysMenu menu, Long userId)
+    {
+        List<SysMenu> menuList = null;
+        // 绠$悊鍛樻樉绀烘墍鏈夎彍鍗曚俊鎭�
+        if (SysUser.isAdmin(userId))
+        {
+            menuList = menuMapper.selectMenuList(menu);
+        }
+        else
+        {
+            menu.getParams().put("userId", userId);
+            menuList = menuMapper.selectMenuListByUserId(menu);
+        }
+        return menuList;
+    }
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鏉冮檺
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 鏉冮檺鍒楄〃
+     */
+    @Override
+    public Set<String> selectMenuPermsByUserId(Long userId)
+    {
+        List<String> perms = menuMapper.selectMenuPermsByUserId(userId);
+        Set<String> permsSet = new HashSet<>();
+        for (String perm : perms)
+        {
+            if (StringUtils.isNotEmpty(perm))
+            {
+                permsSet.addAll(Arrays.asList(perm.trim().split(",")));
+            }
+        }
+        return permsSet;
+    }
+
+    /**
+     * 鏍规嵁瑙掕壊ID鏌ヨ鏉冮檺
+     * 
+     * @param roleId 瑙掕壊ID
+     * @return 鏉冮檺鍒楄〃
+     */
+    @Override
+    public Set<String> selectMenuPermsByRoleId(Long roleId)
+    {
+        List<String> perms = menuMapper.selectMenuPermsByRoleId(roleId);
+        Set<String> permsSet = new HashSet<>();
+        for (String perm : perms)
+        {
+            if (StringUtils.isNotEmpty(perm))
+            {
+                permsSet.addAll(Arrays.asList(perm.trim().split(",")));
+            }
+        }
+        return permsSet;
+    }
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鑿滃崟
+     * 
+     * @param userId 鐢ㄦ埛鍚嶇О
+     * @return 鑿滃崟鍒楄〃
+     */
+    @Override
+    public List<SysMenu> selectMenuTreeByUserId(Long userId)
+    {
+        List<SysMenu> menus = null;
+        if (SecurityUtils.isAdmin(userId))
+        {
+            menus = menuMapper.selectMenuTreeAll();
+        }
+        else
+        {
+            menus = menuMapper.selectMenuTreeByUserId(userId);
+        }
+        return getChildPerms(menus, 0);
+    }
+
+    /**
+     * 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟鏍戜俊鎭�
+     * 
+     * @param roleId 瑙掕壊ID
+     * @return 閫変腑鑿滃崟鍒楄〃
+     */
+    @Override
+    public List<Long> selectMenuListByRoleId(Long roleId)
+    {
+        SysRole role = roleMapper.selectRoleById(roleId);
+        return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly());
+    }
+
+    /**
+     * 鏋勫缓鍓嶇璺敱鎵�闇�瑕佺殑鑿滃崟
+     * 
+     * @param menus 鑿滃崟鍒楄〃
+     * @return 璺敱鍒楄〃
+     */
+    @Override
+    public List<RouterVo> buildMenus(List<SysMenu> menus)
+    {
+        List<RouterVo> routers = new LinkedList<RouterVo>();
+        for (SysMenu menu : menus)
+        {
+            RouterVo router = new RouterVo();
+            router.setHidden("1".equals(menu.getVisible()));
+            router.setName(getRouteName(menu));
+            router.setPath(getRouterPath(menu));
+            router.setComponent(getComponent(menu));
+            router.setQuery(menu.getQuery());
+            router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath()));
+            List<SysMenu> cMenus = menu.getChildren();
+            if (StringUtils.isNotEmpty(cMenus) && UserConstants.TYPE_DIR.equals(menu.getMenuType()))
+            {
+                router.setAlwaysShow(true);
+                router.setRedirect("noRedirect");
+                router.setChildren(buildMenus(cMenus));
+            }
+            else if (isMenuFrame(menu))
+            {
+                router.setMeta(null);
+                List<RouterVo> childrenList = new ArrayList<RouterVo>();
+                RouterVo children = new RouterVo();
+                children.setPath(menu.getPath());
+                children.setComponent(menu.getComponent());
+                children.setName(StringUtils.capitalize(menu.getPath()));
+                children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath()));
+                children.setQuery(menu.getQuery());
+                childrenList.add(children);
+                router.setChildren(childrenList);
+            }
+            else if (menu.getParentId().intValue() == 0 && isInnerLink(menu))
+            {
+                router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon()));
+                router.setPath("/");
+                List<RouterVo> childrenList = new ArrayList<RouterVo>();
+                RouterVo children = new RouterVo();
+                String routerPath = innerLinkReplaceEach(menu.getPath());
+                children.setPath(routerPath);
+                children.setComponent(UserConstants.INNER_LINK);
+                children.setName(StringUtils.capitalize(routerPath));
+                children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), menu.getPath()));
+                childrenList.add(children);
+                router.setChildren(childrenList);
+            }
+            routers.add(router);
+        }
+        return routers;
+    }
+
+    /**
+     * 鏋勫缓鍓嶇鎵�闇�瑕佹爲缁撴瀯
+     * 
+     * @param menus 鑿滃崟鍒楄〃
+     * @return 鏍戠粨鏋勫垪琛�
+     */
+    @Override
+    public List<SysMenu> buildMenuTree(List<SysMenu> menus)
+    {
+        List<SysMenu> returnList = new ArrayList<SysMenu>();
+        List<Long> tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList());
+        for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext();)
+        {
+            SysMenu menu = (SysMenu) iterator.next();
+            // 濡傛灉鏄《绾ц妭鐐�, 閬嶅巻璇ョ埗鑺傜偣鐨勬墍鏈夊瓙鑺傜偣
+            if (!tempList.contains(menu.getParentId()))
+            {
+                recursionFn(menus, menu);
+                returnList.add(menu);
+            }
+        }
+        if (returnList.isEmpty())
+        {
+            returnList = menus;
+        }
+        return returnList;
+    }
+
+    /**
+     * 鏋勫缓鍓嶇鎵�闇�瑕佷笅鎷夋爲缁撴瀯
+     * 
+     * @param menus 鑿滃崟鍒楄〃
+     * @return 涓嬫媺鏍戠粨鏋勫垪琛�
+     */
+    @Override
+    public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus)
+    {
+        List<SysMenu> menuTrees = buildMenuTree(menus);
+        return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
+    }
+
+    /**
+     * 鏍规嵁鑿滃崟ID鏌ヨ淇℃伅
+     * 
+     * @param menuId 鑿滃崟ID
+     * @return 鑿滃崟淇℃伅
+     */
+    @Override
+    public SysMenu selectMenuById(Long menuId)
+    {
+        return menuMapper.selectMenuById(menuId);
+    }
+
+    /**
+     * 鏄惁瀛樺湪鑿滃崟瀛愯妭鐐�
+     * 
+     * @param menuId 鑿滃崟ID
+     * @return 缁撴灉
+     */
+    @Override
+    public boolean hasChildByMenuId(Long menuId)
+    {
+        int result = menuMapper.hasChildByMenuId(menuId);
+        return result > 0;
+    }
+
+    /**
+     * 鏌ヨ鑿滃崟浣跨敤鏁伴噺
+     * 
+     * @param menuId 鑿滃崟ID
+     * @return 缁撴灉
+     */
+    @Override
+    public boolean checkMenuExistRole(Long menuId)
+    {
+        int result = roleMenuMapper.checkMenuExistRole(menuId);
+        return result > 0;
+    }
+
+    /**
+     * 鏂板淇濆瓨鑿滃崟淇℃伅
+     * 
+     * @param menu 鑿滃崟淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertMenu(SysMenu menu)
+    {
+        return menuMapper.insertMenu(menu);
+    }
+
+    /**
+     * 淇敼淇濆瓨鑿滃崟淇℃伅
+     * 
+     * @param menu 鑿滃崟淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateMenu(SysMenu menu)
+    {
+        return menuMapper.updateMenu(menu);
+    }
+
+    /**
+     * 鍒犻櫎鑿滃崟绠$悊淇℃伅
+     * 
+     * @param menuId 鑿滃崟ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteMenuById(Long menuId)
+    {
+        return menuMapper.deleteMenuById(menuId);
+    }
+
+    /**
+     * 鏍¢獙鑿滃崟鍚嶇О鏄惁鍞竴
+     * 
+     * @param menu 鑿滃崟淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public boolean checkMenuNameUnique(SysMenu menu)
+    {
+        Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId();
+        SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId());
+        if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue())
+        {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+
+    /**
+     * 鑾峰彇璺敱鍚嶇О
+     * 
+     * @param menu 鑿滃崟淇℃伅
+     * @return 璺敱鍚嶇О
+     */
+    public String getRouteName(SysMenu menu)
+    {
+        String routerName = StringUtils.capitalize(menu.getPath());
+        // 闈炲閾惧苟涓旀槸涓�绾х洰褰曪紙绫诲瀷涓虹洰褰曪級
+        if (isMenuFrame(menu))
+        {
+            routerName = StringUtils.EMPTY;
+        }
+        return routerName;
+    }
+
+    /**
+     * 鑾峰彇璺敱鍦板潃
+     * 
+     * @param menu 鑿滃崟淇℃伅
+     * @return 璺敱鍦板潃
+     */
+    public String getRouterPath(SysMenu menu)
+    {
+        String routerPath = menu.getPath();
+        // 鍐呴摼鎵撳紑澶栫綉鏂瑰紡
+        if (menu.getParentId().intValue() != 0 && isInnerLink(menu))
+        {
+            routerPath = innerLinkReplaceEach(routerPath);
+        }
+        // 闈炲閾惧苟涓旀槸涓�绾х洰褰曪紙绫诲瀷涓虹洰褰曪級
+        if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType())
+                && UserConstants.NO_FRAME.equals(menu.getIsFrame()))
+        {
+            routerPath = "/" + menu.getPath();
+        }
+        // 闈炲閾惧苟涓旀槸涓�绾х洰褰曪紙绫诲瀷涓鸿彍鍗曪級
+        else if (isMenuFrame(menu))
+        {
+            routerPath = "/";
+        }
+        return routerPath;
+    }
+
+    /**
+     * 鑾峰彇缁勪欢淇℃伅
+     * 
+     * @param menu 鑿滃崟淇℃伅
+     * @return 缁勪欢淇℃伅
+     */
+    public String getComponent(SysMenu menu)
+    {
+        String component = UserConstants.LAYOUT;
+        if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu))
+        {
+            component = menu.getComponent();
+        }
+        else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu))
+        {
+            component = UserConstants.INNER_LINK;
+        }
+        else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu))
+        {
+            component = UserConstants.PARENT_VIEW;
+        }
+        return component;
+    }
+
+    /**
+     * 鏄惁涓鸿彍鍗曞唴閮ㄨ烦杞�
+     * 
+     * @param menu 鑿滃崟淇℃伅
+     * @return 缁撴灉
+     */
+    public boolean isMenuFrame(SysMenu menu)
+    {
+        return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType())
+                && menu.getIsFrame().equals(UserConstants.NO_FRAME);
+    }
+
+    /**
+     * 鏄惁涓哄唴閾剧粍浠�
+     * 
+     * @param menu 鑿滃崟淇℃伅
+     * @return 缁撴灉
+     */
+    public boolean isInnerLink(SysMenu menu)
+    {
+        return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath());
+    }
+
+    /**
+     * 鏄惁涓簆arent_view缁勪欢
+     * 
+     * @param menu 鑿滃崟淇℃伅
+     * @return 缁撴灉
+     */
+    public boolean isParentView(SysMenu menu)
+    {
+        return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType());
+    }
+
+    /**
+     * 鏍规嵁鐖惰妭鐐圭殑ID鑾峰彇鎵�鏈夊瓙鑺傜偣
+     * 
+     * @param list 鍒嗙被琛�
+     * @param parentId 浼犲叆鐨勭埗鑺傜偣ID
+     * @return String
+     */
+    public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId)
+    {
+        List<SysMenu> returnList = new ArrayList<SysMenu>();
+        for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext();)
+        {
+            SysMenu t = (SysMenu) iterator.next();
+            // 涓�銆佹牴鎹紶鍏ョ殑鏌愪釜鐖惰妭鐐笽D,閬嶅巻璇ョ埗鑺傜偣鐨勬墍鏈夊瓙鑺傜偣
+            if (t.getParentId() == parentId)
+            {
+                recursionFn(list, t);
+                returnList.add(t);
+            }
+        }
+        return returnList;
+    }
+
+    /**
+     * 閫掑綊鍒楄〃
+     * 
+     * @param list 鍒嗙被琛�
+     * @param t 瀛愯妭鐐�
+     */
+    private void recursionFn(List<SysMenu> list, SysMenu t)
+    {
+        // 寰楀埌瀛愯妭鐐瑰垪琛�
+        List<SysMenu> childList = getChildList(list, t);
+        t.setChildren(childList);
+        for (SysMenu tChild : childList)
+        {
+            if (hasChild(list, tChild))
+            {
+                recursionFn(list, tChild);
+            }
+        }
+    }
+
+    /**
+     * 寰楀埌瀛愯妭鐐瑰垪琛�
+     */
+    private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t)
+    {
+        List<SysMenu> tlist = new ArrayList<SysMenu>();
+        Iterator<SysMenu> it = list.iterator();
+        while (it.hasNext())
+        {
+            SysMenu n = (SysMenu) it.next();
+            if (n.getParentId().longValue() == t.getMenuId().longValue())
+            {
+                tlist.add(n);
+            }
+        }
+        return tlist;
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁鏈夊瓙鑺傜偣
+     */
+    private boolean hasChild(List<SysMenu> list, SysMenu t)
+    {
+        return getChildList(list, t).size() > 0;
+    }
+
+    /**
+     * 鍐呴摼鍩熷悕鐗规畩瀛楃鏇挎崲
+     * 
+     * @return 鏇挎崲鍚庣殑鍐呴摼鍩熷悕
+     */
+    public String innerLinkReplaceEach(String path)
+    {
+        return StringUtils.replaceEach(path, new String[] { Constants.HTTP, Constants.HTTPS, Constants.WWW, ".", ":" },
+                new String[] { "", "", "", "/", "/" });
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysNameConfigServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysNameConfigServiceImpl.java
new file mode 100644
index 0000000..7933476
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysNameConfigServiceImpl.java
@@ -0,0 +1,27 @@
+package com.zhitan.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhitan.system.domain.SysNameConfig;
+import com.zhitan.system.mapper.SysNameConfigMapper;
+import com.zhitan.system.service.ISysNameConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 绯荤粺鍚嶇О閰嶇疆Service涓氬姟灞傚鐞�
+ *
+ * @author ZhiTan
+ * @date 2024-11-05
+ */
+@Service
+public class SysNameConfigServiceImpl extends ServiceImpl<SysNameConfigMapper, SysNameConfig> implements ISysNameConfigService {
+    @Autowired
+    private SysNameConfigMapper sysNameConfigMapper;
+
+    @Override
+    public SysNameConfig getSysNameConfig() {
+        LambdaQueryWrapper<SysNameConfig> wrapper = new LambdaQueryWrapper<>();
+        return sysNameConfigMapper.selectOne(wrapper);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysNoticeServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysNoticeServiceImpl.java
new file mode 100644
index 0000000..f969f5a
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysNoticeServiceImpl.java
@@ -0,0 +1,94 @@
+package com.zhitan.system.service.impl;
+
+import java.util.List;
+import javax.annotation.Resource;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.zhitan.system.domain.SysNotice;
+import com.zhitan.system.mapper.SysNoticeMapper;
+import com.zhitan.system.service.ISysNoticeService;
+
+/**
+ * 鍏憡 鏈嶅姟灞傚疄鐜�
+ * 
+ * @author zhitan
+ */
+@Service
+public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper,SysNotice> implements ISysNoticeService
+{
+    @Resource
+    private SysNoticeMapper noticeMapper;
+
+    /**
+     * 鏌ヨ鍏憡淇℃伅
+     * 
+     * @param noticeId 鍏憡ID
+     * @return 鍏憡淇℃伅
+     */
+    @Override
+    public SysNotice selectNoticeById(Long noticeId)
+    {
+        return noticeMapper.selectNoticeById(noticeId);
+    }
+
+    /**
+     * 鏌ヨ鍏憡鍒楄〃
+     * 
+     * @param notice 鍏憡淇℃伅
+     * @return 鍏憡闆嗗悎
+     */
+    @Override
+    public List<SysNotice> selectNoticeList(SysNotice notice)
+    {
+        return noticeMapper.selectNoticeList(notice);
+    }
+
+    /**
+     * 鏂板鍏憡
+     * 
+     * @param notice 鍏憡淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertNotice(SysNotice notice)
+    {
+        return noticeMapper.insertNotice(notice);
+    }
+
+    /**
+     * 淇敼鍏憡
+     * 
+     * @param notice 鍏憡淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateNotice(SysNotice notice)
+    {
+        return noticeMapper.updateNotice(notice);
+    }
+
+    /**
+     * 鍒犻櫎鍏憡瀵硅薄
+     * 
+     * @param noticeId 鍏憡ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteNoticeById(Long noticeId)
+    {
+        return noticeMapper.deleteNoticeById(noticeId);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎鍏憡淇℃伅
+     * 
+     * @param noticeIds 闇�瑕佸垹闄ょ殑鍏憡ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteNoticeByIds(Long[] noticeIds)
+    {
+        return noticeMapper.deleteNoticeByIds(noticeIds);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysOperLogServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysOperLogServiceImpl.java
new file mode 100644
index 0000000..f9534cc
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysOperLogServiceImpl.java
@@ -0,0 +1,78 @@
+package com.zhitan.system.service.impl;
+
+import java.util.List;
+import javax.annotation.Resource;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.zhitan.system.domain.SysOperLog;
+import com.zhitan.system.mapper.SysOperLogMapper;
+import com.zhitan.system.service.ISysOperLogService;
+
+/**
+ * 鎿嶄綔鏃ュ織 鏈嶅姟灞傚鐞�
+ * 
+ * @author zhitan
+ */
+@Service
+public class SysOperLogServiceImpl extends ServiceImpl<SysOperLogMapper,SysOperLog> implements ISysOperLogService
+{
+    @Resource
+    private SysOperLogMapper operLogMapper;
+
+    /**
+     * 鏂板鎿嶄綔鏃ュ織
+     * 
+     * @param operLog 鎿嶄綔鏃ュ織瀵硅薄
+     */
+    @Override
+    public void insertOperlog(SysOperLog operLog)
+    {
+        operLogMapper.insertOperlog(operLog);
+    }
+
+    /**
+     * 鏌ヨ绯荤粺鎿嶄綔鏃ュ織闆嗗悎
+     * 
+     * @param operLog 鎿嶄綔鏃ュ織瀵硅薄
+     * @return 鎿嶄綔鏃ュ織闆嗗悎
+     */
+    @Override
+    public List<SysOperLog> selectOperLogList(SysOperLog operLog)
+    {
+        return operLogMapper.selectOperLogList(operLog);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎绯荤粺鎿嶄綔鏃ュ織
+     * 
+     * @param operIds 闇�瑕佸垹闄ょ殑鎿嶄綔鏃ュ織ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteOperLogByIds(Long[] operIds)
+    {
+        return operLogMapper.deleteOperLogByIds(operIds);
+    }
+
+    /**
+     * 鏌ヨ鎿嶄綔鏃ュ織璇︾粏
+     * 
+     * @param operId 鎿嶄綔ID
+     * @return 鎿嶄綔鏃ュ織瀵硅薄
+     */
+    @Override
+    public SysOperLog selectOperLogById(Long operId)
+    {
+        return operLogMapper.selectOperLogById(operId);
+    }
+
+    /**
+     * 娓呯┖鎿嶄綔鏃ュ織
+     */
+    @Override
+    public void cleanOperLog()
+    {
+        operLogMapper.cleanOperLog();
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysPostServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysPostServiceImpl.java
new file mode 100644
index 0000000..20784a9
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysPostServiceImpl.java
@@ -0,0 +1,180 @@
+package com.zhitan.system.service.impl;
+
+import java.util.List;
+import javax.annotation.Resource;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.zhitan.common.constant.UserConstants;
+import com.zhitan.common.exception.ServiceException;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.system.domain.SysPost;
+import com.zhitan.system.mapper.SysPostMapper;
+import com.zhitan.system.mapper.SysUserPostMapper;
+import com.zhitan.system.service.ISysPostService;
+
+/**
+ * 宀椾綅淇℃伅 鏈嶅姟灞傚鐞�
+ * 
+ * @author zhitan
+ */
+@Service
+public class SysPostServiceImpl extends ServiceImpl<SysPostMapper,SysPost> implements ISysPostService
+{
+    @Resource
+    private SysPostMapper postMapper;
+
+    @Resource
+    private SysUserPostMapper userPostMapper;
+
+    /**
+     * 鏌ヨ宀椾綅淇℃伅闆嗗悎
+     * 
+     * @param post 宀椾綅淇℃伅
+     * @return 宀椾綅淇℃伅闆嗗悎
+     */
+    @Override
+    public List<SysPost> selectPostList(SysPost post)
+    {
+        return postMapper.selectPostList(post);
+    }
+
+    /**
+     * 鏌ヨ鎵�鏈夊矖浣�
+     * 
+     * @return 宀椾綅鍒楄〃
+     */
+    @Override
+    public List<SysPost> selectPostAll()
+    {
+        return postMapper.selectPostAll();
+    }
+
+    /**
+     * 閫氳繃宀椾綅ID鏌ヨ宀椾綅淇℃伅
+     * 
+     * @param postId 宀椾綅ID
+     * @return 瑙掕壊瀵硅薄淇℃伅
+     */
+    @Override
+    public SysPost selectPostById(Long postId)
+    {
+        return postMapper.selectPostById(postId);
+    }
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鑾峰彇宀椾綅閫夋嫨妗嗗垪琛�
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 閫変腑宀椾綅ID鍒楄〃
+     */
+    @Override
+    public List<Long> selectPostListByUserId(Long userId)
+    {
+        return postMapper.selectPostListByUserId(userId);
+    }
+
+    /**
+     * 鏍¢獙宀椾綅鍚嶇О鏄惁鍞竴
+     * 
+     * @param post 宀椾綅淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public boolean checkPostNameUnique(SysPost post)
+    {
+        Long postId = StringUtils.isNull(post.getPostId()) ? -1L : post.getPostId();
+        SysPost info = postMapper.checkPostNameUnique(post.getPostName());
+        if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue())
+        {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+
+    /**
+     * 鏍¢獙宀椾綅缂栫爜鏄惁鍞竴
+     * 
+     * @param post 宀椾綅淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public boolean checkPostCodeUnique(SysPost post)
+    {
+        Long postId = StringUtils.isNull(post.getPostId()) ? -1L : post.getPostId();
+        SysPost info = postMapper.checkPostCodeUnique(post.getPostCode());
+        if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue())
+        {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+
+    /**
+     * 閫氳繃宀椾綅ID鏌ヨ宀椾綅浣跨敤鏁伴噺
+     * 
+     * @param postId 宀椾綅ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int countUserPostById(Long postId)
+    {
+        return userPostMapper.countUserPostById(postId);
+    }
+
+    /**
+     * 鍒犻櫎宀椾綅淇℃伅
+     * 
+     * @param postId 宀椾綅ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deletePostById(Long postId)
+    {
+        return postMapper.deletePostById(postId);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎宀椾綅淇℃伅
+     * 
+     * @param postIds 闇�瑕佸垹闄ょ殑宀椾綅ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deletePostByIds(Long[] postIds)
+    {
+        for (Long postId : postIds)
+        {
+            SysPost post = selectPostById(postId);
+            if (countUserPostById(postId) > 0)
+            {
+                throw new ServiceException(String.format("%1$s宸插垎閰�,涓嶈兘鍒犻櫎", post.getPostName()));
+            }
+        }
+        return postMapper.deletePostByIds(postIds);
+    }
+
+    /**
+     * 鏂板淇濆瓨宀椾綅淇℃伅
+     * 
+     * @param post 宀椾綅淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertPost(SysPost post)
+    {
+        return postMapper.insertPost(post);
+    }
+
+    /**
+     * 淇敼淇濆瓨宀椾綅淇℃伅
+     * 
+     * @param post 宀椾綅淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int updatePost(SysPost post)
+    {
+        return postMapper.updatePost(post);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysRoleServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysRoleServiceImpl.java
new file mode 100644
index 0000000..4fa1fc9
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysRoleServiceImpl.java
@@ -0,0 +1,426 @@
+package com.zhitan.system.service.impl;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import javax.annotation.Resource;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.zhitan.common.annotation.DataScope;
+import com.zhitan.common.constant.UserConstants;
+import com.zhitan.common.core.domain.entity.SysRole;
+import com.zhitan.common.core.domain.entity.SysUser;
+import com.zhitan.common.exception.ServiceException;
+import com.zhitan.common.utils.SecurityUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.spring.SpringUtils;
+import com.zhitan.system.domain.SysRoleDept;
+import com.zhitan.system.domain.SysRoleMenu;
+import com.zhitan.system.domain.SysUserRole;
+import com.zhitan.system.mapper.SysRoleDeptMapper;
+import com.zhitan.system.mapper.SysRoleMapper;
+import com.zhitan.system.mapper.SysRoleMenuMapper;
+import com.zhitan.system.mapper.SysUserRoleMapper;
+import com.zhitan.system.service.ISysRoleService;
+
+/**
+ * 瑙掕壊 涓氬姟灞傚鐞�
+ * 
+ * @author zhitan
+ */
+@Service
+public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper,SysRole> implements ISysRoleService
+{
+    @Resource
+    private SysRoleMapper roleMapper;
+
+    @Resource
+    private SysRoleMenuMapper roleMenuMapper;
+
+    @Resource
+    private SysUserRoleMapper userRoleMapper;
+
+    @Resource
+    private SysRoleDeptMapper roleDeptMapper;
+
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瑙掕壊鏁版嵁
+     * 
+     * @param role 瑙掕壊淇℃伅
+     * @return 瑙掕壊鏁版嵁闆嗗悎淇℃伅
+     */
+    @Override
+    @DataScope(deptAlias = "d")
+    public List<SysRole> selectRoleList(SysRole role)
+    {
+        return roleMapper.selectRoleList(role);
+    }
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 瑙掕壊鍒楄〃
+     */
+    @Override
+    public List<SysRole> selectRolesByUserId(Long userId)
+    {
+        List<SysRole> userRoles = roleMapper.selectRolePermissionByUserId(userId);
+        List<SysRole> roles = selectRoleAll();
+        for (SysRole role : roles)
+        {
+            for (SysRole userRole : userRoles)
+            {
+                if (role.getRoleId().longValue() == userRole.getRoleId().longValue())
+                {
+                    role.setFlag(true);
+                    break;
+                }
+            }
+        }
+        return roles;
+    }
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鏌ヨ鏉冮檺
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 鏉冮檺鍒楄〃
+     */
+    @Override
+    public Set<String> selectRolePermissionByUserId(Long userId)
+    {
+        List<SysRole> perms = roleMapper.selectRolePermissionByUserId(userId);
+        Set<String> permsSet = new HashSet<>();
+        for (SysRole perm : perms)
+        {
+            if (StringUtils.isNotNull(perm))
+            {
+                permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(",")));
+            }
+        }
+        return permsSet;
+    }
+
+    /**
+     * 鏌ヨ鎵�鏈夎鑹�
+     * 
+     * @return 瑙掕壊鍒楄〃
+     */
+    @Override
+    public List<SysRole> selectRoleAll()
+    {
+        return SpringUtils.getAopProxy(this).selectRoleList(new SysRole());
+    }
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鑾峰彇瑙掕壊閫夋嫨妗嗗垪琛�
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 閫変腑瑙掕壊ID鍒楄〃
+     */
+    @Override
+    public List<Long> selectRoleListByUserId(Long userId)
+    {
+        return roleMapper.selectRoleListByUserId(userId);
+    }
+
+    /**
+     * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊
+     * 
+     * @param roleId 瑙掕壊ID
+     * @return 瑙掕壊瀵硅薄淇℃伅
+     */
+    @Override
+    public SysRole selectRoleById(Long roleId)
+    {
+        return roleMapper.selectRoleById(roleId);
+    }
+
+    /**
+     * 鏍¢獙瑙掕壊鍚嶇О鏄惁鍞竴
+     * 
+     * @param role 瑙掕壊淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public boolean checkRoleNameUnique(SysRole role)
+    {
+        Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId();
+        SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName());
+        if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue())
+        {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+
+    /**
+     * 鏍¢獙瑙掕壊鏉冮檺鏄惁鍞竴
+     * 
+     * @param role 瑙掕壊淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public boolean checkRoleKeyUnique(SysRole role)
+    {
+        Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId();
+        SysRole info = roleMapper.checkRoleKeyUnique(role.getRoleKey());
+        if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue())
+        {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+
+    /**
+     * 鏍¢獙瑙掕壊鏄惁鍏佽鎿嶄綔
+     * 
+     * @param role 瑙掕壊淇℃伅
+     */
+    @Override
+    public void checkRoleAllowed(SysRole role)
+    {
+        if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin())
+        {
+            throw new ServiceException("涓嶅厑璁告搷浣滆秴绾х鐞嗗憳瑙掕壊");
+        }
+    }
+
+    /**
+     * 鏍¢獙瑙掕壊鏄惁鏈夋暟鎹潈闄�
+     * 
+     * @param roleId 瑙掕壊id
+     */
+    @Override
+    public void checkRoleDataScope(Long roleId)
+    {
+        if (!SysUser.isAdmin(SecurityUtils.getUserId()))
+        {
+            SysRole role = new SysRole();
+            role.setRoleId(roleId);
+            List<SysRole> roles = SpringUtils.getAopProxy(this).selectRoleList(role);
+            if (StringUtils.isEmpty(roles))
+            {
+                throw new ServiceException("娌℃湁鏉冮檺璁块棶瑙掕壊鏁版嵁锛�");
+            }
+        }
+    }
+
+    /**
+     * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊浣跨敤鏁伴噺
+     * 
+     * @param roleId 瑙掕壊ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int countUserRoleByRoleId(Long roleId)
+    {
+        return userRoleMapper.countUserRoleByRoleId(roleId);
+    }
+
+    /**
+     * 鏂板淇濆瓨瑙掕壊淇℃伅
+     * 
+     * @param role 瑙掕壊淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    @Transactional
+    public int insertRole(SysRole role)
+    {
+        // 鏂板瑙掕壊淇℃伅
+        roleMapper.insertRole(role);
+        return insertRoleMenu(role);
+    }
+
+    /**
+     * 淇敼淇濆瓨瑙掕壊淇℃伅
+     * 
+     * @param role 瑙掕壊淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    @Transactional
+    public int updateRole(SysRole role)
+    {
+        // 淇敼瑙掕壊淇℃伅
+        roleMapper.updateRole(role);
+        // 鍒犻櫎瑙掕壊涓庤彍鍗曞叧鑱�
+        roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId());
+        return insertRoleMenu(role);
+    }
+
+    /**
+     * 淇敼瑙掕壊鐘舵��
+     * 
+     * @param role 瑙掕壊淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateRoleStatus(SysRole role)
+    {
+        return roleMapper.updateRole(role);
+    }
+
+    /**
+     * 淇敼鏁版嵁鏉冮檺淇℃伅
+     * 
+     * @param role 瑙掕壊淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    @Transactional
+    public int authDataScope(SysRole role)
+    {
+        // 淇敼瑙掕壊淇℃伅
+        roleMapper.updateRole(role);
+        // 鍒犻櫎瑙掕壊涓庨儴闂ㄥ叧鑱�
+        roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId());
+        // 鏂板瑙掕壊鍜岄儴闂ㄤ俊鎭紙鏁版嵁鏉冮檺锛�
+        return insertRoleDept(role);
+    }
+
+    /**
+     * 鏂板瑙掕壊鑿滃崟淇℃伅
+     * 
+     * @param role 瑙掕壊瀵硅薄
+     */
+    public int insertRoleMenu(SysRole role)
+    {
+        int rows = 1;
+        // 鏂板鐢ㄦ埛涓庤鑹茬鐞�
+        List<SysRoleMenu> list = new ArrayList<SysRoleMenu>();
+        for (Long menuId : role.getMenuIds())
+        {
+            SysRoleMenu rm = new SysRoleMenu();
+            rm.setRoleId(role.getRoleId());
+            rm.setMenuId(menuId);
+            list.add(rm);
+        }
+        if (list.size() > 0)
+        {
+            rows = roleMenuMapper.batchRoleMenu(list);
+        }
+        return rows;
+    }
+
+    /**
+     * 鏂板瑙掕壊閮ㄩ棬淇℃伅(鏁版嵁鏉冮檺)
+     *
+     * @param role 瑙掕壊瀵硅薄
+     */
+    public int insertRoleDept(SysRole role)
+    {
+        int rows = 1;
+        // 鏂板瑙掕壊涓庨儴闂紙鏁版嵁鏉冮檺锛夌鐞�
+        List<SysRoleDept> list = new ArrayList<SysRoleDept>();
+        for (Long deptId : role.getDeptIds())
+        {
+            SysRoleDept rd = new SysRoleDept();
+            rd.setRoleId(role.getRoleId());
+            rd.setDeptId(deptId);
+            list.add(rd);
+        }
+        if (list.size() > 0)
+        {
+            rows = roleDeptMapper.batchRoleDept(list);
+        }
+        return rows;
+    }
+
+    /**
+     * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊
+     * 
+     * @param roleId 瑙掕壊ID
+     * @return 缁撴灉
+     */
+    @Override
+    @Transactional
+    public int deleteRoleById(Long roleId)
+    {
+        // 鍒犻櫎瑙掕壊涓庤彍鍗曞叧鑱�
+        roleMenuMapper.deleteRoleMenuByRoleId(roleId);
+        // 鍒犻櫎瑙掕壊涓庨儴闂ㄥ叧鑱�
+        roleDeptMapper.deleteRoleDeptByRoleId(roleId);
+        return roleMapper.deleteRoleById(roleId);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎瑙掕壊淇℃伅
+     * 
+     * @param roleIds 闇�瑕佸垹闄ょ殑瑙掕壊ID
+     * @return 缁撴灉
+     */
+    @Override
+    @Transactional
+    public int deleteRoleByIds(Long[] roleIds)
+    {
+        for (Long roleId : roleIds)
+        {
+            checkRoleAllowed(new SysRole(roleId));
+            checkRoleDataScope(roleId);
+            SysRole role = selectRoleById(roleId);
+            if (countUserRoleByRoleId(roleId) > 0)
+            {
+                throw new ServiceException(String.format("%1$s宸插垎閰�,涓嶈兘鍒犻櫎", role.getRoleName()));
+            }
+        }
+        // 鍒犻櫎瑙掕壊涓庤彍鍗曞叧鑱�
+        roleMenuMapper.deleteRoleMenu(roleIds);
+        // 鍒犻櫎瑙掕壊涓庨儴闂ㄥ叧鑱�
+        roleDeptMapper.deleteRoleDept(roleIds);
+        return roleMapper.deleteRoleByIds(roleIds);
+    }
+
+    /**
+     * 鍙栨秷鎺堟潈鐢ㄦ埛瑙掕壊
+     * 
+     * @param userRole 鐢ㄦ埛鍜岃鑹插叧鑱斾俊鎭�
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteAuthUser(SysUserRole userRole)
+    {
+        return userRoleMapper.deleteUserRoleInfo(userRole);
+    }
+
+    /**
+     * 鎵归噺鍙栨秷鎺堟潈鐢ㄦ埛瑙掕壊
+     * 
+     * @param roleId 瑙掕壊ID
+     * @param userIds 闇�瑕佸彇娑堟巿鏉冪殑鐢ㄦ埛鏁版嵁ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteAuthUsers(Long roleId, Long[] userIds)
+    {
+        return userRoleMapper.deleteUserRoleInfos(roleId, userIds);
+    }
+
+    /**
+     * 鎵归噺閫夋嫨鎺堟潈鐢ㄦ埛瑙掕壊
+     * 
+     * @param roleId 瑙掕壊ID
+     * @param userIds 闇�瑕佹巿鏉冪殑鐢ㄦ埛鏁版嵁ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertAuthUsers(Long roleId, Long[] userIds)
+    {
+        // 鏂板鐢ㄦ埛涓庤鑹茬鐞�
+        List<SysUserRole> list = new ArrayList<SysUserRole>();
+        for (Long userId : userIds)
+        {
+            SysUserRole ur = new SysUserRole();
+            ur.setUserId(userId);
+            ur.setRoleId(roleId);
+            list.add(ur);
+        }
+        return userRoleMapper.batchUserRole(list);
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysUserOnlineServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysUserOnlineServiceImpl.java
new file mode 100644
index 0000000..ffd7f65
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysUserOnlineServiceImpl.java
@@ -0,0 +1,96 @@
+package com.zhitan.system.service.impl;
+
+import org.springframework.stereotype.Service;
+import com.zhitan.common.core.domain.model.LoginUser;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.system.domain.SysUserOnline;
+import com.zhitan.system.service.ISysUserOnlineService;
+
+/**
+ * 鍦ㄧ嚎鐢ㄦ埛 鏈嶅姟灞傚鐞�
+ * 
+ * @author zhitan
+ */
+@Service
+public class SysUserOnlineServiceImpl implements ISysUserOnlineService
+{
+    /**
+     * 閫氳繃鐧诲綍鍦板潃鏌ヨ淇℃伅
+     * 
+     * @param ipaddr 鐧诲綍鍦板潃
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅
+     */
+    @Override
+    public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user)
+    {
+        if (StringUtils.equals(ipaddr, user.getIpaddr()))
+        {
+            return loginUserToUserOnline(user);
+        }
+        return null;
+    }
+
+    /**
+     * 閫氳繃鐢ㄦ埛鍚嶇О鏌ヨ淇℃伅
+     * 
+     * @param userName 鐢ㄦ埛鍚嶇О
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅
+     */
+    @Override
+    public SysUserOnline selectOnlineByUserName(String userName, LoginUser user)
+    {
+        if (StringUtils.equals(userName, user.getUsername()))
+        {
+            return loginUserToUserOnline(user);
+        }
+        return null;
+    }
+
+    /**
+     * 閫氳繃鐧诲綍鍦板潃/鐢ㄦ埛鍚嶇О鏌ヨ淇℃伅
+     * 
+     * @param ipaddr 鐧诲綍鍦板潃
+     * @param userName 鐢ㄦ埛鍚嶇О
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅
+     */
+    @Override
+    public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user)
+    {
+        if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername()))
+        {
+            return loginUserToUserOnline(user);
+        }
+        return null;
+    }
+
+    /**
+     * 璁剧疆鍦ㄧ嚎鐢ㄦ埛淇℃伅
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鍦ㄧ嚎鐢ㄦ埛
+     */
+    @Override
+    public SysUserOnline loginUserToUserOnline(LoginUser user)
+    {
+        if (StringUtils.isNull(user) || StringUtils.isNull(user.getUser()))
+        {
+            return null;
+        }
+        SysUserOnline sysUserOnline = new SysUserOnline();
+        sysUserOnline.setTokenId(user.getToken());
+        sysUserOnline.setUserName(user.getUsername());
+        sysUserOnline.setIpaddr(user.getIpaddr());
+        sysUserOnline.setLoginLocation(user.getLoginLocation());
+        sysUserOnline.setBrowser(user.getBrowser());
+        sysUserOnline.setOs(user.getOs());
+        sysUserOnline.setLoginTime(user.getLoginTime());
+        if (StringUtils.isNotNull(user.getUser().getDept()))
+        {
+            sysUserOnline.setDeptName(user.getUser().getDept().getDeptName());
+        }
+        return sysUserOnline;
+    }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysUserServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysUserServiceImpl.java
new file mode 100644
index 0000000..5c6544a
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/system/service/impl/SysUserServiceImpl.java
@@ -0,0 +1,494 @@
+package com.zhitan.system.service.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.validation.Validator;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import com.zhitan.common.annotation.DataScope;
+import com.zhitan.common.constant.UserConstants;
+import com.zhitan.common.core.domain.entity.SysRole;
+import com.zhitan.common.core.domain.entity.SysUser;
+import com.zhitan.common.exception.ServiceException;
+import com.zhitan.common.utils.SecurityUtils;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.bean.BeanValidators;
+import com.zhitan.common.utils.spring.SpringUtils;
+import com.zhitan.system.domain.SysPost;
+import com.zhitan.system.domain.SysUserPost;
+import com.zhitan.system.domain.SysUserRole;
+import com.zhitan.system.mapper.SysPostMapper;
+import com.zhitan.system.mapper.SysRoleMapper;
+import com.zhitan.system.mapper.SysUserMapper;
+import com.zhitan.system.mapper.SysUserPostMapper;
+import com.zhitan.system.mapper.SysUserRoleMapper;
+import com.zhitan.system.service.ISysConfigService;
+import com.zhitan.system.service.ISysUserService;
+
+/**
+ * 鐢ㄦ埛 涓氬姟灞傚鐞�
+ *
+ * @author zhitan
+ */
+@Service
+public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {
+    private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
+
+    @Resource
+    private SysUserMapper userMapper;
+
+    @Resource
+    private SysRoleMapper roleMapper;
+
+    @Resource
+    private SysPostMapper postMapper;
+
+    @Resource
+    private SysUserRoleMapper userRoleMapper;
+
+    @Resource
+    private SysUserPostMapper userPostMapper;
+
+    @Resource
+    private ISysConfigService configService;
+
+    @Resource
+    protected Validator validator;
+
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鐢ㄦ埛鍒楄〃
+     *
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
+     */
+    @Override
+    @DataScope(deptAlias = "d", userAlias = "u")
+    public List<SysUser> selectUserList(SysUser user) {
+        return userMapper.selectUserList(user);
+    }
+
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪琛�
+     *
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
+     */
+    @Override
+    @DataScope(deptAlias = "d", userAlias = "u")
+    public List<SysUser> selectAllocatedList(SysUser user) {
+        return userMapper.selectAllocatedList(user);
+    }
+
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鏈垎閰嶇敤鎴疯鑹插垪琛�
+     *
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
+     */
+    @Override
+    @DataScope(deptAlias = "d", userAlias = "u")
+    public List<SysUser> selectUnallocatedList(SysUser user) {
+        return userMapper.selectUnallocatedList(user);
+    }
+
+    /**
+     * 閫氳繃鐢ㄦ埛鍚嶆煡璇㈢敤鎴�
+     *
+     * @param userName 鐢ㄦ埛鍚�
+     * @return 鐢ㄦ埛瀵硅薄淇℃伅
+     */
+    @Override
+    public SysUser selectUserByUserName(String userName) {
+        return userMapper.selectUserByUserName(userName);
+    }
+
+    /**
+     * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛
+     *
+     * @param userId 鐢ㄦ埛ID
+     * @return 鐢ㄦ埛瀵硅薄淇℃伅
+     */
+    @Override
+    public SysUser selectUserById(Long userId) {
+        return userMapper.selectUserById(userId);
+    }
+
+    /**
+     * 鏌ヨ鐢ㄦ埛鎵�灞炶鑹茬粍
+     *
+     * @param userName 鐢ㄦ埛鍚�
+     * @return 缁撴灉
+     */
+    @Override
+    public String selectUserRoleGroup(String userName) {
+        List<SysRole> list = roleMapper.selectRolesByUserName(userName);
+        if (CollectionUtils.isEmpty(list)) {
+            return StringUtils.EMPTY;
+        }
+        return list.stream().map(SysRole::getRoleName).collect(Collectors.joining(","));
+    }
+
+    /**
+     * 鏌ヨ鐢ㄦ埛鎵�灞炲矖浣嶇粍
+     *
+     * @param userName 鐢ㄦ埛鍚�
+     * @return 缁撴灉
+     */
+    @Override
+    public String selectUserPostGroup(String userName) {
+        List<SysPost> list = postMapper.selectPostsByUserName(userName);
+        if (CollectionUtils.isEmpty(list)) {
+            return StringUtils.EMPTY;
+        }
+        return list.stream().map(SysPost::getPostName).collect(Collectors.joining(","));
+    }
+
+    /**
+     * 鏍¢獙鐢ㄦ埛鍚嶇О鏄惁鍞竴
+     *
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public boolean checkUserNameUnique(SysUser user) {
+        Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
+        SysUser info = userMapper.checkUserNameUnique(user.getUserName());
+        if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+
+    /**
+     * 鏍¢獙鎵嬫満鍙风爜鏄惁鍞竴
+     *
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return
+     */
+    @Override
+    public boolean checkPhoneUnique(SysUser user) {
+        Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
+        SysUser info = userMapper.checkPhoneUnique(user.getPhoneNumber());
+        if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+
+    /**
+     * 鏍¢獙email鏄惁鍞竴
+     *
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return
+     */
+    @Override
+    public boolean checkEmailUnique(SysUser user) {
+        Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
+        SysUser info = userMapper.checkEmailUnique(user.getEmail());
+        if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+
+    /**
+     * 鏍¢獙鐢ㄦ埛鏄惁鍏佽鎿嶄綔
+     *
+     * @param user 鐢ㄦ埛淇℃伅
+     */
+    @Override
+    public void checkUserAllowed(SysUser user) {
+        if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) {
+            throw new ServiceException("涓嶅厑璁告搷浣滆秴绾х鐞嗗憳鐢ㄦ埛");
+        }
+    }
+
+    /**
+     * 鏍¢獙鐢ㄦ埛鏄惁鏈夋暟鎹潈闄�
+     *
+     * @param userId 鐢ㄦ埛id
+     */
+    @Override
+    public void checkUserDataScope(Long userId) {
+        if (!SysUser.isAdmin(SecurityUtils.getUserId())) {
+            SysUser user = new SysUser();
+            user.setUserId(userId);
+            List<SysUser> users = SpringUtils.getAopProxy(this).selectUserList(user);
+            if (StringUtils.isEmpty(users)) {
+                throw new ServiceException("娌℃湁鏉冮檺璁块棶鐢ㄦ埛鏁版嵁锛�");
+            }
+        }
+    }
+
+    /**
+     * 鏂板淇濆瓨鐢ㄦ埛淇℃伅
+     *
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    @Transactional
+    public int insertUser(SysUser user) {
+        // 鏂板鐢ㄦ埛淇℃伅
+        int rows = userMapper.insertUser(user);
+        // 鏂板鐢ㄦ埛宀椾綅鍏宠仈
+        insertUserPost(user);
+        // 鏂板鐢ㄦ埛涓庤鑹茬鐞�
+        insertUserRole(user);
+        return rows;
+    }
+
+    /**
+     * 娉ㄥ唽鐢ㄦ埛淇℃伅
+     *
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public boolean registerUser(SysUser user) {
+        return userMapper.insertUser(user) > 0;
+    }
+
+    /**
+     * 淇敼淇濆瓨鐢ㄦ埛淇℃伅
+     *
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    @Transactional
+    public int updateUser(SysUser user) {
+        Long userId = user.getUserId();
+        // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱�
+        userRoleMapper.deleteUserRoleByUserId(userId);
+        // 鏂板鐢ㄦ埛涓庤鑹茬鐞�
+        insertUserRole(user);
+        // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶅叧鑱�
+        userPostMapper.deleteUserPostByUserId(userId);
+        // 鏂板鐢ㄦ埛涓庡矖浣嶇鐞�
+        insertUserPost(user);
+        return userMapper.updateUser(user);
+    }
+
+    /**
+     * 鐢ㄦ埛鎺堟潈瑙掕壊
+     *
+     * @param userId  鐢ㄦ埛ID
+     * @param roleIds 瑙掕壊缁�
+     */
+    @Override
+    @Transactional
+    public void insertUserAuth(Long userId, Long[] roleIds) {
+        userRoleMapper.deleteUserRoleByUserId(userId);
+        insertUserRole(userId, roleIds);
+    }
+
+    /**
+     * 淇敼鐢ㄦ埛鐘舵��
+     *
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateUserStatus(SysUser user) {
+        return userMapper.updateUser(user);
+    }
+
+    /**
+     * 淇敼鐢ㄦ埛鍩烘湰淇℃伅
+     *
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateUserProfile(SysUser user) {
+        return userMapper.updateUser(user);
+    }
+
+    /**
+     * 淇敼鐢ㄦ埛澶村儚
+     *
+     * @param userName 鐢ㄦ埛鍚�
+     * @param avatar   澶村儚鍦板潃
+     * @return 缁撴灉
+     */
+    @Override
+    public boolean updateUserAvatar(String userName, String avatar) {
+        return userMapper.updateUserAvatar(userName, avatar) > 0;
+    }
+
+    /**
+     * 閲嶇疆鐢ㄦ埛瀵嗙爜
+     *
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int resetPwd(SysUser user) {
+        return userMapper.updateUser(user);
+    }
+
+    /**
+     * 閲嶇疆鐢ㄦ埛瀵嗙爜
+     *
+     * @param userName 鐢ㄦ埛鍚�
+     * @param password 瀵嗙爜
+     * @return 缁撴灉
+     */
+    @Override
+    public int resetUserPwd(String userName, String password) {
+        return userMapper.resetUserPwd(userName, password);
+    }
+
+    /**
+     * 鏂板鐢ㄦ埛瑙掕壊淇℃伅
+     *
+     * @param user 鐢ㄦ埛瀵硅薄
+     */
+    public void insertUserRole(SysUser user) {
+        this.insertUserRole(user.getUserId(), user.getRoleIds());
+    }
+
+    /**
+     * 鏂板鐢ㄦ埛宀椾綅淇℃伅
+     *
+     * @param user 鐢ㄦ埛瀵硅薄
+     */
+    public void insertUserPost(SysUser user) {
+        Long[] posts = user.getPostIds();
+        if (StringUtils.isNotEmpty(posts)) {
+            // 鏂板鐢ㄦ埛涓庡矖浣嶇鐞�
+            List<SysUserPost> list = new ArrayList<SysUserPost>(posts.length);
+            for (Long postId : posts) {
+                SysUserPost up = new SysUserPost();
+                up.setUserId(user.getUserId());
+                up.setPostId(postId);
+                list.add(up);
+            }
+            userPostMapper.batchUserPost(list);
+        }
+    }
+
+    /**
+     * 鏂板鐢ㄦ埛瑙掕壊淇℃伅
+     *
+     * @param userId  鐢ㄦ埛ID
+     * @param roleIds 瑙掕壊缁�
+     */
+    public void insertUserRole(Long userId, Long[] roleIds) {
+        if (StringUtils.isNotEmpty(roleIds)) {
+            // 鏂板鐢ㄦ埛涓庤鑹茬鐞�
+            List<SysUserRole> list = new ArrayList<SysUserRole>(roleIds.length);
+            for (Long roleId : roleIds) {
+                SysUserRole ur = new SysUserRole();
+                ur.setUserId(userId);
+                ur.setRoleId(roleId);
+                list.add(ur);
+            }
+            userRoleMapper.batchUserRole(list);
+        }
+    }
+
+    /**
+     * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛
+     *
+     * @param userId 鐢ㄦ埛ID
+     * @return 缁撴灉
+     */
+    @Override
+    @Transactional
+    public int deleteUserById(Long userId) {
+        // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱�
+        userRoleMapper.deleteUserRoleByUserId(userId);
+        // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶈〃
+        userPostMapper.deleteUserPostByUserId(userId);
+        return userMapper.deleteUserById(userId);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎鐢ㄦ埛淇℃伅
+     *
+     * @param userIds 闇�瑕佸垹闄ょ殑鐢ㄦ埛ID
+     * @return 缁撴灉
+     */
+    @Override
+    @Transactional
+    public int deleteUserByIds(Long[] userIds) {
+        for (Long userId : userIds) {
+            checkUserAllowed(new SysUser(userId));
+            checkUserDataScope(userId);
+        }
+        // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱�
+        userRoleMapper.deleteUserRole(userIds);
+        // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶅叧鑱�
+        userPostMapper.deleteUserPost(userIds);
+        return userMapper.deleteUserByIds(userIds);
+    }
+
+    /**
+     * 瀵煎叆鐢ㄦ埛鏁版嵁
+     *
+     * @param userList        鐢ㄦ埛鏁版嵁鍒楄〃
+     * @param isUpdateSupport 鏄惁鏇存柊鏀寔锛屽鏋滃凡瀛樺湪锛屽垯杩涜鏇存柊鏁版嵁
+     * @param operName        鎿嶄綔鐢ㄦ埛
+     * @return 缁撴灉
+     */
+    @Override
+    public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) {
+        if (StringUtils.isNull(userList) || userList.size() == 0) {
+            throw new ServiceException("瀵煎叆鐢ㄦ埛鏁版嵁涓嶈兘涓虹┖锛�");
+        }
+        int successNum = 0;
+        int failureNum = 0;
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+        String password = configService.selectConfigByKey("sys.user.initPassword");
+        for (SysUser user : userList) {
+            try {
+                // 楠岃瘉鏄惁瀛樺湪杩欎釜鐢ㄦ埛
+                SysUser u = userMapper.selectUserByUserName(user.getUserName());
+                if (StringUtils.isNull(u)) {
+                    BeanValidators.validateWithException(validator, user);
+                    user.setPassword(SecurityUtils.encryptPassword(password));
+                    user.setCreateBy(operName);
+                    userMapper.insertUser(user);
+                    successNum++;
+                    successMsg.append("<br/>" + successNum + "銆佽处鍙� " + user.getUserName() + " 瀵煎叆鎴愬姛");
+                } else if (isUpdateSupport) {
+                    BeanValidators.validateWithException(validator, user);
+                    checkUserAllowed(u);
+                    checkUserDataScope(u.getUserId());
+                    user.setUserId(u.getUserId());
+                    user.setUpdateBy(operName);
+                    userMapper.updateUser(user);
+                    successNum++;
+                    successMsg.append("<br/>" + successNum + "銆佽处鍙� " + user.getUserName() + " 鏇存柊鎴愬姛");
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>" + failureNum + "銆佽处鍙� " + user.getUserName() + " 宸插瓨鍦�");
+                }
+            } catch (Exception e) {
+                failureNum++;
+                String msg = "<br/>" + failureNum + "銆佽处鍙� " + user.getUserName() + " 瀵煎叆澶辫触锛�";
+                failureMsg.append(msg + e.getMessage());
+                log.error(msg, e);
+            }
+        }
+        if (failureNum > 0) {
+            failureMsg.insert(0, "寰堟姳姝夛紝瀵煎叆澶辫触锛佸叡 " + failureNum + " 鏉℃暟鎹牸寮忎笉姝g‘锛岄敊璇涓嬶細");
+            throw new ServiceException(failureMsg.toString());
+        } else {
+            successMsg.insert(0, "鎭枩鎮紝鏁版嵁宸插叏閮ㄥ鍏ユ垚鍔燂紒鍏� " + successNum + " 鏉★紝鏁版嵁濡備笅锛�");
+        }
+        return successMsg.toString();
+    }
+}
diff --git a/zhitan-system/src/main/resources/mapper/alarm/AlarmItemMapper.xml b/zhitan-system/src/main/resources/mapper/alarm/AlarmItemMapper.xml
new file mode 100644
index 0000000..9ff1f59
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/alarm/AlarmItemMapper.xml
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.alarm.mapper.AlarmItemMapper">
+
+  <resultMap type="AlarmItem" id="AlarmItemResult">
+    <result property="id" column="id"/>
+    <result property="createTime" column="create_time"/>
+    <result property="createBy" column="create_by"/>
+    <result property="updateTime" column="update_time"/>
+    <result property="updateBy" column="update_by"/>
+    <result property="dwid" column="dwid"/>
+    <result property="startStop" column="start_stop"/>
+    <result property="timeSlot" column="time_slot"/>
+    <result property="limitType" column="limit_type"/>
+    <result property="limitVal" column="limit_val"/>
+    <result property="alarmLevel" column="alarm_level"/>
+    <result property="nodeId" column="node_id"/>
+    <result property="indexCode" column="index_code"/>
+    <result property="alarmCode" column="alarm_code"/>
+  </resultMap>
+
+  <sql id="selectAlarmItemVo">
+    select id,
+           create_time,
+           create_by,
+           update_time,
+           update_by,
+           dwid,
+           start_stop,
+           time_slot,
+           limit_type,
+           limit_val,
+           alarm_level,
+           node_id
+    from alarm_item
+  </sql>
+
+  <select id="selectAlarmItemList" parameterType="AlarmItem" resultMap="AlarmItemResult">
+    <include refid="selectAlarmItemVo"/>
+    <where>
+    </where>
+  </select>
+
+  <select id="selectAlarmItemById" parameterType="String" resultMap="AlarmItemResult">
+    <include refid="selectAlarmItemVo"/>
+    where id = #{id}
+  </select>
+
+  <insert id="insertAlarmItem" parameterType="AlarmItem">
+    insert into alarm_item
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null  and id != ''">id,</if>
+      <if test="createTime != null ">create_time,</if>
+      <if test="createBy != null  and createBy != ''">create_by,</if>
+      <if test="updateTime != null ">update_time,</if>
+      <if test="updateBy != null  and updateBy != ''">update_by,</if>
+      <if test="dwid != null  and dwid != ''">dwid,</if>
+      <if test="startStop != null  and startStop != ''">start_stop,</if>
+      <if test="timeSlot != null  and timeSlot != ''">time_slot,</if>
+      <if test="limit_type != null  and limit_type != ''">limit_type,</if>
+      <if test="limitVal != null  and limitVal != ''">limit_val,</if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null  and id != ''">#{id},</if>
+      <if test="createTime != null ">#{createTime},</if>
+      <if test="createBy != null  and createBy != ''">#{createBy},</if>
+      <if test="updateTime != null ">#{updateTime},</if>
+      <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+      <if test="dwid != null  and dwid != ''">#{dwid},</if>
+      <if test="startStop != null  and startStop != ''">#{startStop},</if>
+      <if test="timeSlot != null  and timeSlot != ''">#{timeSlot},</if>
+      <if test="limitType != null  and limitType != ''">#{limitType},</if>
+      <if test="limitVal != null  and limitVal != ''">#{limitVal},</if>
+    </trim>
+  </insert>
+
+  <update id="updateAlarmItem" parameterType="AlarmItem">
+    update alarm_item
+    <trim prefix="SET" suffixOverrides=",">
+      <if test="createTime != null ">create_time = #{createTime},</if>
+      <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
+      <if test="updateTime != null ">update_time = #{updateTime},</if>
+      <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+      <if test="dwid != null  and dwid != ''">dwid = #{dwid},</if>
+      <if test="startStop != null  and startStop != ''">start_stop = #{startStop},</if>
+      <if test="timeSlot != null  and timeSlot != ''">time_slot = #{timeSlot},</if>
+      <if test="limitType != null  and limitType != ''">limit = #{limitType},</if>
+      <if test="limitVal != null  and limitVal != ''">limit_val = #{limitVal},</if>
+    </trim>
+    where id = #{id}
+  </update>
+
+  <delete id="deleteAlarmItemById" parameterType="String">
+    delete
+    from alarm_item
+    where id = #{id}
+  </delete>
+
+  <delete id="deleteAlarmItemByIds" parameterType="String">
+    delete from alarm_item where id in
+    <foreach item="id" collection="array" open="(" separator="," close=")">
+      #{id}
+    </foreach>
+  </delete>
+
+  <select id="selectAlarmItemtingById" parameterType="String" resultMap="AlarmItemResult">
+    <include refid="selectAlarmItemVo"/>
+    where dwid = #{id}
+  </select>
+
+  <update id="updateStartStop">
+    update alarm_item SET start_stop=#{flag},update_time=now(),update_by=#{update_by} where dwid in
+    <foreach item="id" collection="ids" open="(" separator="," close=")">
+      #{id}
+    </foreach>
+  </update>
+  <select id="getStartStop" resultType="String">
+    select DISTINCT start_stop
+    from alarm_item
+    where dwid = #{indexid};
+  </select>
+
+  <update id="updateLimitVal">
+    delete from alarm_item where dwid = #{id};
+    <foreach collection="data" item="item" index="index" separator=";">
+      insert into alarm_item
+      <trim prefix="(" suffix=")" suffixOverrides=",">
+        <if test="id != null  and id != ''">id,</if>
+        <if test="item.indexId != null  and item.indexId != ''">dwid,</if>
+        <if test="item.state != null  and item.state != ''">start_stop,</if>
+        <if test="item.timeSlotVal != null  and item.timeSlotVal != ''">time_slot,</if>
+        <if test="item.limitTypeVal != null  and item.limitTypeVal != ''">limit_type,</if>
+        <if test="item.limitVal != null  and item.limitVal != ''">limit_val,</if>
+        <if test="item.alarmLevel != null  and item.alarmLevel != ''">alarm_level,</if>
+        <if test="item.nodeId != null  and item.nodeId != ''">node_id,</if>
+        <if test="id != null  and id != ''">update_time,</if>
+        <if test="id != null  and id != ''">create_time,</if>
+        <if test="id != null  and id != ''">update_by,</if>
+        <if test="id != null  and id != ''">create_by,</if>
+        <if test="id != null  and id != ''">alarm_code,</if>
+      </trim>
+      <trim prefix="values (" suffix=")" suffixOverrides=",">
+        <if test="id != null  and id != ''">#{item.id},</if>
+        <if test="item.indexId != null  and item.indexId != ''">#{item.indexId},</if>
+        <if test="item.state != null  and item.state != ''">#{item.state},</if>
+        <if test="item.timeSlotVal != null  and item.timeSlotVal != ''">#{item.timeSlotVal},</if>
+        <if test="item.limitTypeVal != null  and item.limitTypeVal != ''">#{item.limitTypeVal},</if>
+        <if test="item.limitVal != null  and item.limitVal != ''">#{item.limitVal},</if>
+        <if test="item.alarmLevel != null  and item.alarmLevel != ''">#{item.alarmLevel},</if>
+        <if test="item.nodeId != null  and item.nodeId != ''">#{item.nodeId},</if>
+        <if test="id != null  and id != ''">now(),</if>
+        <if test="id != null  and id != ''">now(),</if>
+        <if test="id != null  and id != ''">#{username},</if>
+        <if test="id != null  and id != ''">#{username},</if>
+        <if test="id != null  and id != ''">#{item.alarmCode},</if>
+      </trim>
+    </foreach>
+  </update>
+<!--  <insert id="updateLimitValNoDel">-->
+<!--    <foreach collection="data" item="item" index="index" separator=";">-->
+<!--      insert into alarm_item-->
+<!--      <trim prefix="(" suffix=")" suffixOverrides=",">-->
+<!--        <if test="id != null  and id != ''">id,</if>-->
+<!--        <if test="item.indexId != null  and item.indexId != ''">dwid,</if>-->
+<!--        <if test="item.state != null  and item.state != ''">start_stop,</if>-->
+<!--        <if test="item.timeSlotVal != null  and item.timeSlotVal != ''">time_slot,</if>-->
+<!--        <if test="item.limitTypeVal != null  and item.limitTypeVal != ''">limit_type,</if>-->
+<!--        <if test="item.limitVal != null  and item.limitVal != ''">limit_val,</if>-->
+<!--        <if test="item.alarmLevel != null  and item.alarmLevel != ''">alarm_level,</if>-->
+<!--        <if test="item.nodeId != null  and item.nodeId != ''">node_id,</if>-->
+<!--        <if test="id != null  and id != ''">update_time,</if>-->
+<!--        <if test="id != null  and id != ''">create_time,</if>-->
+<!--        <if test="id != null  and id != ''">update_by,</if>-->
+<!--        <if test="id != null  and id != ''">create_by,</if>-->
+<!--        <if test="id != null  and id != ''">alarm_code,</if>-->
+<!--      </trim>-->
+<!--      <trim prefix="values (" suffix=")" suffixOverrides=",">-->
+<!--        <if test="id != null  and id != ''">#{item.id},</if>-->
+<!--        <if test="item.indexId != null  and item.indexId != ''">#{item.indexId},</if>-->
+<!--        <if test="item.state != null  and item.state != ''">#{item.state},</if>-->
+<!--        <if test="item.timeSlotVal != null  and item.timeSlotVal != ''">#{item.timeSlotVal},</if>-->
+<!--        <if test="item.limitTypeVal != null  and item.limitTypeVal != ''">#{item.limitTypeVal},</if>-->
+<!--        <if test="item.limitVal != null  and item.limitVal != ''">#{item.limitVal},</if>-->
+<!--        <if test="item.alarmLevel != null  and item.alarmLevel != ''">#{item.alarmLevel},</if>-->
+<!--        <if test="item.nodeId != null  and item.nodeId != ''">#{item.nodeId},</if>-->
+<!--        <if test="id != null  and id != ''">now(),</if>-->
+<!--        <if test="id != null  and id != ''">now(),</if>-->
+<!--        <if test="id != null  and id != ''">#{username},</if>-->
+<!--        <if test="id != null  and id != ''">#{username},</if>-->
+<!--        <if test="id != null  and id != ''">#{item.alarm_code},</if>-->
+<!--      </trim>-->
+<!--    </foreach>-->
+<!--  </insert>-->
+  <insert id="updateLimitValNoDel">
+    insert into alarm_item (id, create_time, create_by, update_time, update_by, dwid, start_stop, time_slot,
+        limit_type,  limit_val, alarm_level, node_id, alarm_code)
+    values 
+    <foreach collection="data" item="item" index="index" separator=",">
+        (#{item.id},now(),#{username},now(),#{username},#{item.indexId},#{item.state},#{item.timeSlotVal},
+        #{item.limitTypeVal},#{item.limitVal},#{item.alarmLevel},#{item.nodeId},#{item.alarmCode})
+    </foreach>
+  </insert>
+  <select id="selectCountById" resultType="int">
+    select count(id)
+    from alarm_item
+    where dwid = #{id};
+  </select>
+  <delete id="deleteAllLimitVal">
+    delete
+    from alarm_item
+    where dwid = #{id};
+  </delete>
+  <select id="getSettingCount" resultType="int">
+    select count(id)
+    from alarm_item
+    where dwid = #{id};
+  </select>
+  <select id="getAllAlarmItem" resultMap="AlarmItemResult">
+    select ai.*, ei.code as index_code
+    from alarm_item ai
+           left join energy_index ei on ai.dwid = ei.index_id
+    where start_stop = '1';
+  </select>
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/alarm/AlarmLimitTypeMapper.xml b/zhitan-system/src/main/resources/mapper/alarm/AlarmLimitTypeMapper.xml
new file mode 100644
index 0000000..42f3d6e
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/alarm/AlarmLimitTypeMapper.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.alarm.mapper.AlarmLimitTypeMapper">
+
+    <resultMap type="LimitType" id="LimitTypeResult">
+        <result property="id" column="id"/>
+        <result property="limitName" column="limit_name"/>
+        <result property="limitCode" column="limit_code"/>
+        <result property="colorNumber" column="color_number"/>
+        <result property="comparatorOperator" column="comparator_operator"/>
+        <result property="createTime" column="create_time"/>
+        <result property="createBy" column="create_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="updateBy"    column="update_by"    />
+        <result property="alarmType"    column="alarm_type"    />
+    </resultMap>
+
+    <sql id="selectLimitTypeVo">
+        select id, limit_name, limit_code, color_number,comparator_operator,alarm_type,create_time, create_by, update_time, update_by from limit_type
+    </sql>
+
+    <select id="selectLimitTypeList" parameterType="LimitType" resultMap="LimitTypeResult">
+        <include refid="selectLimitTypeVo"/>
+        <where>
+            <if test="limitName != null  and limitName != ''"> and limit_name like concat('%', #{limitName}, '%')</if>
+        </where>
+        order by limit_code
+    </select>
+
+    <select id="selectLimitTypeById" parameterType="String" resultMap="LimitTypeResult">
+        <include refid="selectLimitTypeVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertLimitType" parameterType="LimitType">
+        insert into limit_type
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">id,</if>
+            <if test="limitName != null  and limitName != ''">limit_name,</if>
+            <if test="limitCode != null  and limitCode != ''">limit_code,</if>
+            <if test="colorNumber != null  and colorNumber != ''">color_number,</if>
+            <if test="createTime != null ">create_time,</if>
+            <if test="createBy != null  and createBy != ''">create_by,</if>
+            <if test="updateTime != null ">update_time,</if>
+            <if test="updateBy != null  and updateBy != ''">update_by,</if>
+            <if test="comparatorOperator != null  and comparatorOperator != ''">comparator_operator,</if>
+            <if test="alarmType != null  and alarmType != ''">alarm_type,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">#{id},</if>
+            <if test="limitName != null  and limitName != ''">#{limitName},</if>
+            <if test="limitCode != null  and limitCode != ''">#{limitCode},</if>
+            <if test="colorNumber != null  and colorNumber != ''">#{colorNumber},</if>
+            <if test="createTime != null ">#{createTime},</if>
+            <if test="createBy != null  and createBy != ''">#{createBy},</if>
+            <if test="updateTime != null ">#{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+            <if test="comparatorOperator != null  and comparatorOperator != ''">#{comparatorOperator},</if>
+            <if test="alarmType != null  and alarmType != ''">#{alarmType},</if>
+        </trim>
+    </insert>
+
+    <update id="updateLimitType" parameterType="LimitType">
+        update limit_type
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="limitName != null  and limitName != ''">limit_name = #{limitName},</if>
+            <if test="limitCode != null  and limitCode != ''">limit_code = #{limitCode},</if>
+            <if test="colorNumber != null  and colorNumber != ''">color_number = #{colorNumber},</if>
+            <if test="createTime != null ">create_time = #{createTime},</if>
+            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
+            <if test="updateTime != null ">update_time = #{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="comparatorOperator != null  and comparatorOperator != ''">comparator_operator = #{comparatorOperator},</if>
+            <if test="alarmType != null  and alarmType != ''">alarm_type = #{alarmType},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteLimitTypeById" parameterType="String">
+        delete from limit_type where id = #{id}
+    </delete>
+
+    <delete id="deleteLimitTypeByIds" parameterType="String">
+        delete from limit_type where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/alarm/HistoryAlarmMapper.xml b/zhitan-system/src/main/resources/mapper/alarm/HistoryAlarmMapper.xml
new file mode 100644
index 0000000..d7d6f6e
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/alarm/HistoryAlarmMapper.xml
@@ -0,0 +1,339 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.alarm.mapper.HistoryAlarmMapper">
+
+  <resultMap type="HistoryAlarm" id="HistoryAlarmResult">
+    <result property="id" column="id"/>
+    <result property="endTime" column="end_time"/>
+    <result property="indexId" column="index_id"/>
+    <result property="indexName" column="index_name"/>
+    <result property="itemId" column="item_id"/>
+    <result property="limitingValue" column="limiting_value"/>
+    <result property="alarmValue" column="alarm_value"/>
+    <result property="alarmValueQuality" column="alarm_value_quality"/>
+    <result property="beginTime" column="begin_time"/>
+    <result property="duration" column="duration"/>
+    <result property="content" column="content"/>
+  </resultMap>
+
+  <resultMap type="JkHistoryAlarm" id="JkHistoryAlarmResult">
+    <result property="modelName" column="modelname"/>
+    <result property="code" column="code"/>
+    <result property="indexName" column="indexname"/>
+    <result property="unitId" column="unit_id"/>
+    <result property="alarmLevel" column="alarm_level"/>
+    <result property="limitType" column="limit_type"/>
+    <result property="limitingValue" column="limiting_value"/>
+    <result property="alarmBeginTime" column="begin_time"/>
+    <result property="alarmValue" column="alarm_value"/>
+    <result property="indexId" column="index_id"/>
+    <result property="nodeId" column="node_id"/>
+    <result property="duration" column="duration"/>
+    <result property="alarmBeginTime" column="begin_time"/>
+    <result property="alarmEndTime" column="end_time"/>
+  </resultMap>
+
+  <sql id="selectHistoryAlarmVo">
+    select id,
+           index_id,
+           index_name,
+           item_id,
+           limiting_value,
+           alarm_value,
+           alarm_value_quality,
+           begin_time,
+           end_time,
+           duration,
+           content
+    from history_alarm
+  </sql>
+
+  <select id="selectHistoryAlarmList" parameterType="HistoryAlarm" resultMap="HistoryAlarmResult">
+    <include refid="selectHistoryAlarmVo"/>
+    <where>
+      <if test="indexName != null  and indexName != ''">and index_name like concat('%',
+        #{indexName}, '%')
+      </if>
+      <if test="itemId != null  and itemId != ''">and item_id like concat('%', #{itemId}, '%')</if>
+      <if test="limitingValue != null ">and limiting_value like concat('%', #{limitingValue}, '%')
+      </if>
+      <if test="alarmValue != null ">and alarm_value like concat('%', #{alarmValue}, '%')</if>
+      <if test="alarmValueQuality != null  and alarmValueQuality != ''">and alarm_value_quality like
+        concat('%', #{alarmValueQuality}, '%')
+      </if>
+      <if test="beginTime != null ">and begin_time like concat('%', #{beginTime}, '%')</if>
+      <if test="endTime != null ">and end_time like concat('%', #{endTime}, '%')</if>
+      <if test="duration != null ">and duration like concat('%', #{duration}, '%')</if>
+      <if test="content != null  and content != ''">and content like concat('%', #{content}, '%')
+      </if>
+    </where>
+  </select>
+
+  <select id="selectHistoryAlarmById" parameterType="String" resultMap="HistoryAlarmResult">
+    <include refid="selectHistoryAlarmVo"/>
+    where id = #{id}
+  </select>
+
+
+  <update id="updateHistoryAlarm" parameterType="HistoryAlarm">
+    delete from realtime_alarm where alarm_code = #{alarmCode};
+    insert into history_alarm
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="historyAlarm.id != null  and historyAlarm.id != ''">id,</if>
+      <if test="historyAlarm.indexId != null  and historyAlarm.indexId != ''">index_id,</if>
+      <if test="historyAlarm.indexName != null  and historyAlarm.indexName != ''">index_name,</if>
+      <if test="historyAlarm.itemId != null  and historyAlarm.itemId != ''">item_id,</if>
+      <if test="historyAlarm.limitingValue != null ">limiting_value,</if>
+      <if test="historyAlarm.alarmValue != null ">alarm_value,</if>
+      <if test="historyAlarm.alarmValueQuality != null">alarm_value_quality,</if>
+      <if test="historyAlarm.beginTime != null ">begin_time,</if>
+      <if test="historyAlarm.endTime != null ">end_time,</if>
+      <if test="historyAlarm.duration != null ">duration,</if>
+      <if test="historyAlarm.content != null  and historyAlarm.content != ''">content,</if>
+      <if test="historyAlarm.timeCode != null and historyAlarm.timeCode != ''">time_code,</if>
+      <if test="historyAlarm.alarmCode != null and historyAlarm.alarmCode != ''">alarm_code,</if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="historyAlarm.id != null  and historyAlarm.id != ''">#{historyAlarm.id},</if>
+      <if test="historyAlarm.indexId != null  and historyAlarm.indexId != ''">#{historyAlarm.indexId},</if>
+      <if test="historyAlarm.indexName != null  and historyAlarm.indexName != ''">#{historyAlarm.indexName},</if>
+      <if test="historyAlarm.itemId != null  and historyAlarm.itemId != ''">#{historyAlarm.itemId},</if>
+      <if test="historyAlarm.limitingValue != null ">#{historyAlarm.limitingValue},</if>
+      <if test="historyAlarm.alarmValue != null ">#{historyAlarm.alarmValue},</if>
+      <if test="historyAlarm.alarmValueQuality != null">#{historyAlarm.alarmValueQuality},</if>
+      <if test="historyAlarm.beginTime != null ">#{historyAlarm.beginTime},</if>
+      <if test="historyAlarm.endTime != null ">#{historyAlarm.endTime},</if>
+      <if test="historyAlarm.duration != null ">#{historyAlarm.duration},</if>
+      <if test="historyAlarm.content != null  and historyAlarm.content != ''">#{historyAlarm.content},</if>
+      <if test="historyAlarm.timeCode != null and historyAlarm.timeCode != ''">#{historyAlarm.timeCode},</if>
+      <if test="historyAlarm.alarmCode != null and historyAlarm.alarmCode != ''">#{historyAlarm.alarmCode},</if>
+    </trim>
+    ;
+  </update>
+
+  <delete id="deleteHistoryAlarmById" parameterType="String">
+    delete
+    from history_alarm
+    where id = #{id}
+  </delete>
+
+  <delete id="deleteHistoryAlarmByIds" parameterType="String">
+    delete from history_alarm where id in
+    <foreach item="id" collection="array" open="(" separator="," close=")">
+      #{id}
+    </foreach>
+  </delete>
+
+  <!--鍘嗗彶 鎶ヨ鍒楄〃椤甸潰 閲囬泦鐐� 涓婚〉闈㈠垪琛ㄦ煡璇�-->
+  <select id="selectJkHistoryAlarmList" parameterType="JkHistoryAlarm"
+    resultMap="JkHistoryAlarmResult">
+    SELECT
+    mo."name" AS modelname,
+    ei.code,
+    ei.NAME AS indexname,
+    ei.unit_id,
+    alit.alarm_level,
+    alit.limit_type,
+    bj.limiting_value,
+    bj.begin_time,
+    bj.end_time,
+    bj.alarm_value,
+    bj.duration,
+    ei.index_id,
+    ei.index_type,
+    mo.node_id
+    FROM
+    energy_index ei,
+    node_index ni,
+    model_node mo,
+    history_alarm bj ,
+    alarm_item alit
+    WHERE
+    ni.node_id IN (
+    SELECT node_id FROM model_node WHERE address LIKE (
+    SELECT address FROM model_node WHERE node_id = #{nodeId} )
+    <if test='eierarchyFlag=="ALL"'>
+      || '%'
+    </if>
+    )
+    AND ei.index_id = ni.index_id
+    AND mo.node_id = ni.node_id
+    AND bj.index_id = ei.index_id
+    AND alit.alarm_code = bj.alarm_code
+    AND alit.time_slot='LIVE'
+    <if test="indexType != null  and indexType != ''">
+        AND ei.index_type=#{indexType}
+    </if>
+    <if test="indexName != null  and indexName != ''">and ei.name like concat('%', #{indexName},
+      '%')
+    </if>
+    <if test="limitType != null  and limitType != ''">and alit.limit_type=#{limitType}</if>
+    <if test="alarmLevel != null  and alarmLevel != ''">and alit.alarm_level=#{alarmLevel}</if>
+    <if test="beginTime != null and beginTime != ''">and begin_time &gt;=
+      to_timestamp(#{beginTime},'yyyy-mm-dd hh24:mi:ss')
+    </if>
+    <if test="endTime != null and endTime != ''">and begin_time &lt;=
+      to_timestamp(#{endTime},'yyyy-mm-dd hh24:mi:ss')
+    </if>
+    order by alarm_level,mo.node_id,limit_type asc
+  </select>
+
+  <select id="selectJkHistoryAlarmListExcel" parameterType="JkHistoryAlarm"
+    resultMap="JkHistoryAlarmResult">
+    SELECT
+    mo."name" AS modelname,
+    ei.code,
+    ei.NAME AS indexname,
+    fun_getdicedata('sys_unit',ei.unit_id) as unit_id,
+    fun_getdicedata('alarm_level',alit.alarm_level) as alarm_level,
+    lt.limit_name as limit_type,
+    bj.limiting_value,
+    bj.begin_time,
+    bj.end_time,
+    bj.alarm_value,
+    bj.duration,
+    ei.index_id,
+    mo.node_id
+    FROM
+    energy_index ei,
+    node_index ni,
+    model_node mo,
+    history_alarm bj ,
+    alarm_item alit,
+    limit_type lt
+    WHERE
+    ni.node_id IN (
+    SELECT node_id FROM model_node WHERE address LIKE (
+    SELECT address FROM model_node WHERE node_id = #{nodeId} )
+    <if test='eierarchyFlag=="ALL"'>
+      || '%'
+    </if>
+    )
+    AND ei.index_id = ni.index_id
+    AND mo.node_id = ni.node_id
+    AND bj.index_id = ei.index_id
+    AND alit.alarm_code = bj.alarm_code
+    AND alit.time_slot='LIVE'
+    AND ei.index_type=#{indexType}
+    AND lt.limit_code=alit.limit_type
+    <if test="indexName != null  and indexName != ''">and ei.name like concat('%', #{indexName},
+      '%')
+    </if>
+    <if test="limitType != null  and limitType != ''">and alit.limit_type=#{limitType}</if>
+    <if test="alarmLevel != null  and alarmLevel != ''">and alit.alarm_level=#{alarmLevel}</if>
+    <if test="beginTime != null and beginTime != '' ">and begin_time &gt;=
+      to_timestamp(#{beginTime},'yyyy-mm-dd hh24:mi:ss')
+    </if>
+    <if test="endTime != null and endTime != ''">and begin_time &lt;=
+      to_timestamp(#{endTime},'yyyy-mm-dd hh24:mi:ss')
+    </if>
+    order by alarm_level,mo.node_id,limit_type asc
+  </select>
+
+  <select id="selectHistoryAlarmNoteList" parameterType="JkHistoryAlarm"
+    resultMap="JkHistoryAlarmResult">
+    SELECT
+    ei.code,
+    ei.NAME AS indexname,
+    fun_getdicedata('sys_unit',ei.unit_id) as unit_id,
+    fun_getdicedata('alarm_level',alit.alarm_level) as alarm_level,
+    lt.limit_name as limit_type,
+    bj.limiting_value,
+    bj.begin_time,
+    bj.end_time,
+    bj.alarm_value,
+    bj.duration,
+    ei.index_id
+    FROM
+    energy_index ei,
+    history_alarm bj ,
+    sys_svg_info svg,
+    alarm_item alit,
+    limit_type lt
+    WHERE
+    svg.node_id=#{nodeId}
+    AND ei.code = svg.tag
+    AND bj.index_id = ei.index_id
+    AND alit.alarm_code = bj.alarm_code
+    AND alit.time_slot='LIVE'
+    AND ei.index_type=#{indexType}
+    AND lt.limit_code=alit.limit_type
+    <if test="indexName != null  and indexName != ''">and ei.name like concat('%', #{indexName},
+      '%')
+    </if>
+    <if test="limitType != null  and limitType != ''">and alit.limit_type=#{limitType}</if>
+    <if test="alarmLevel != null  and alarmLevel != ''">and alit.alarm_level=#{alarmLevel}</if>
+    <if test="beginTime != null and beginTime != '' ">and begin_time &gt;=
+      to_timestamp(#{beginTime},'yyyy-mm-dd hh24:mi:ss')
+    </if>
+    <if test="endTime != null and endTime != ''">and begin_time &lt;=
+      to_timestamp(#{endTime},'yyyy-mm-dd hh24:mi:ss')
+    </if>
+    order by alarm_level,limit_type asc
+  </select>
+  <select id="selectJkHistoryAlarmPage" resultType="JkHistoryAlarm">
+    SELECT
+    mo."name" AS modelname,
+    ei.code,
+    ei.NAME AS indexname,
+    ei.unit_id,
+    alit.alarm_level,
+    alit.limit_type,
+    bj.limiting_value,
+    bj.begin_time,
+    bj.end_time,
+    bj.alarm_value,
+    bj.duration,
+    ei.index_id,
+    ei.index_type,
+    ei.energy_id,
+    mo.node_id
+    FROM
+    energy_index ei,
+    node_index ni,
+    model_node mo,
+    history_alarm bj ,
+    alarm_item alit
+    WHERE
+    ni.node_id IN (
+    SELECT node_id FROM model_node WHERE address LIKE (
+    SELECT address FROM model_node WHERE node_id = #{jkHistoryAlarm.nodeId} )
+    <if test='jkHistoryAlarm.eierarchyFlag=="ALL"'>
+      || '%'
+    </if>
+    )
+    AND ei.index_id = ni.index_id
+    AND mo.node_id = ni.node_id
+    AND bj.index_id = ei.index_id
+    AND alit.alarm_code = bj.alarm_code
+    AND alit.time_slot='LIVE'
+    AND ei.index_type=#{jkHistoryAlarm.indexType}
+    <if test="jkHistoryAlarm.indexName != null  and jkHistoryAlarm.indexName != ''">and ei.name like concat('%', #{jkHistoryAlarm.indexName},
+      '%')
+    </if>
+    <if test="jkHistoryAlarm.limitType != null  and jkHistoryAlarm.limitType != ''">and alit.limit_type=#{jkHistoryAlarm.limitType}</if>
+    <if test="jkHistoryAlarm.alarmLevel != null  and jkHistoryAlarm.alarmLevel != ''">and alit.alarm_level=#{jkHistoryAlarm.alarmLevel}</if>
+    <if test="jkHistoryAlarm.beginTime != null and jkHistoryAlarm.beginTime != ''">and begin_time &gt;=
+      to_timestamp(#{jkHistoryAlarm.beginTime},'yyyy-mm-dd hh24:mi:ss')
+    </if>
+    <if test="jkHistoryAlarm.endTime != null and jkHistoryAlarm.endTime != ''">and begin_time &lt;=
+      to_timestamp(#{jkHistoryAlarm.endTime},'yyyy-mm-dd hh24:mi:ss')
+    </if>
+    order by alarm_level,mo.node_id,limit_type asc
+  </select>
+  <select id="selectCountByTime" resultType="java.lang.Integer">
+    select count(0)
+    from history_alarm 
+    <where>
+      <if test="beginTime != null ">
+       and begin_time &gt;= #{beginTime}
+      </if>
+      <if test="endTime != null ">
+      and begin_time &lt;= #{endTime}
+      </if>
+    </where>
+  </select>
+
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/alarm/RealtimeAlarmMapper.xml b/zhitan-system/src/main/resources/mapper/alarm/RealtimeAlarmMapper.xml
new file mode 100644
index 0000000..01c252d
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/alarm/RealtimeAlarmMapper.xml
@@ -0,0 +1,238 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.alarm.mapper.RealtimeAlarmMapper">
+
+
+    <resultMap type="com.zhitan.alarm.domain.RealTimeAlarm"
+               id="RealTimeAlarmResult">
+        <result property="id" column="id"/>
+        <result property="indexId" column="index_id"/>
+        <result property="indexName" column="index_name"/>
+        <result property="itemId" column="item_id"/>
+        <result property="limitingValue" column="limiting_value"/>
+        <result property="alarmValue" column="alarm_value"/>
+        <result property="alarmValueQuality" column="alarm_value_quality"/>
+        <result property="beginTime" column="begin_time"/>
+        <result property="content" column="content"/>
+    <result property="timeCode" column="time_code"/>
+    <result property="alarmCode" column="alarm_code"/>
+        <association property="alarmItem"
+                     javaType="com.zhitan.alarm.domain.AlarmItem">
+            <result property="id" column="itemId"/>
+            <result property="timeSlot" column="time_slot"/>
+            <result property="limitType" column="limit_type"/>
+            <result property="alarmLevel" column="alarm_level"/>
+        </association>
+  </resultMap>
+
+  <resultMap type="JkRealTimeAlarmList" id="JkRealTimeAlarmListResult">
+    <result property="modelName" column="modelname"/>
+    <result property="code" column="code"/>
+    <result property="indexName" column="indexname"/>
+    <result property="unitId" column="unit_id"/>
+    <result property="alarmLevel" column="alarm_level"/>
+    <result property="limitType" column="limit_type"/>
+    <result property="limitingValue" column="limiting_value"/>
+    <result property="alarmBeginTime" column="begin_time"/>
+    <result property="alarmValue" column="alarm_value"/>
+    <result property="indexId" column="index_id"/>
+    <result property="nodeId" column="node_id"/>
+  </resultMap>
+
+
+  <select id="selectRealtimeAlarmList" parameterType="RealTimeAlarm"
+    resultMap="RealTimeAlarmResult">
+    select id, index_id, index_name, item_id, limiting_value, alarm_value, alarm_value_quality,
+    begin_time, content from realtime_alarm
+    <where>
+      <if test="indexName != null  and indexName != ''">and index_name like concat('%',
+        #{indexName}, '%')
+      </if>
+      <if test="itemId != null  and itemId != ''">and item_id like concat('%', #{itemId}, '%')</if>
+      <if test="limitingValue != null ">and limiting_value like concat('%', #{limitingValue}, '%')
+      </if>
+      <if test="alarmValue != null ">and alarm_value like concat('%', #{alarmValue}, '%')</if>
+      <if test="alarmValueQuality != null">and alarm_value_quality like
+        concat('%', #{alarmValueQuality}, '%')
+      </if>
+      <if test="beginTime != null ">and begin_time like concat('%', #{beginTime}, '%')</if>
+      <if test="content != null  and content != ''">and content like concat('%', #{content}, '%')
+      </if>
+    </where>
+  </select>
+
+  <select id="selectRealtimeAlarmById" parameterType="String" resultMap="RealTimeAlarmResult">
+    select id,
+           index_id,
+           index_name,
+           item_id,
+           limiting_value,
+           alarm_value,
+           alarm_value_quality,
+           begin_time,
+           content
+    from realtime_alarm
+    where id = #{id}
+  </select>
+
+  <insert id="insertRealtimeAlarm" parameterType="RealTimeAlarm">
+    insert into realtime_alarm
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null  and id != ''">id,</if>
+      <if test="indexId != null  and indexId != ''">index_id,</if>
+      <if test="indexName != null  and indexName != ''">index_name,</if>
+      <if test="itemId != null  and itemId != ''">item_id,</if>
+      <if test="limitingValue != null ">limiting_value,</if>
+      <if test="alarmValue != null ">alarm_value,</if>
+      <if test="alarmValueQuality != null">alarm_value_quality,</if>
+      <if test="beginTime != null ">begin_time,</if>
+      <if test="content != null  and content != ''">content,</if>
+      <if test="timeCode != null  and timeCode != ''">time_code,</if>
+      <if test="alarmCode != null  and alarmCode != ''">alarm_code,</if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null  and id != ''">#{id},</if>
+      <if test="indexId != null  and indexId != ''">#{indexId},</if>
+      <if test="indexName != null  and indexName != ''">#{indexName},</if>
+      <if test="itemId != null  and itemId != ''">#{itemId},</if>
+      <if test="limitingValue != null ">#{limitingValue},</if>
+      <if test="alarmValue != null ">#{alarmValue},</if>
+      <if test="alarmValueQuality != null">#{alarmValueQuality},</if>
+      <if test="beginTime != null ">#{beginTime},</if>
+      <if test="content != null  and content != ''">#{content},</if>
+      <if test="timeCode != null  and timeCode != ''">#{timeCode},</if>
+      <if test="alarmCode != null  and alarmCode != ''">#{alarmCode},</if>
+    </trim>
+  </insert>
+
+  <update id="updateRealtimeAlarm" parameterType="RealTimeAlarm">
+    update realtime_alarm
+    <trim prefix="SET" suffixOverrides=",">
+      <if test="indexId != null  and indexId != ''">index_id = #{indexId},</if>
+      <if test="indexName != null  and indexName != ''">index_name = #{indexName},</if>
+      <if test="itemId != null  and itemId != ''">item_id = #{itemId},</if>
+      <if test="limitingValue != null ">limiting_value = #{limitingValue},</if>
+      <if test="alarmValue != null ">alarm_value = #{alarmValue},</if>
+      <if test="alarmValueQuality != null">alarm_value_quality =
+        #{alarmValueQuality},
+      </if>
+      <if test="beginTime != null ">begin_time = #{beginTime},</if>
+      <if test="content != null  and content != ''">content = #{content},</if>
+    </trim>
+    where id = #{id}
+  </update>
+
+  <delete id="deleteRealtimeAlarmById" parameterType="String">
+    delete
+    from realtime_alarm
+    where id = #{id}
+  </delete>
+
+  <delete id="deleteRealtimeAlarmByIds" parameterType="String">
+    delete from realtime_alarm where id in
+    <foreach item="id" collection="array" open="(" separator="," close=")">
+      #{id}
+    </foreach>
+  </delete>
+
+  <!--瀹炴椂鎶ヨ鍒楄〃椤甸潰 閲囬泦鐐� 涓婚〉闈㈠垪琛ㄦ煡璇�-->
+  <select id="selectRealtimeAlarmJkList" parameterType="JkRealTimeAlarmList"
+    resultMap="JkRealTimeAlarmListResult">
+    SELECT
+    mo."name" AS modelname,
+    ei.code,
+    ei.NAME AS indexname,
+    ei.unit_id,
+    alit.alarm_level,
+    alit.limit_type,
+    bj.limiting_value,
+    bj.begin_time,
+    round(cast(bj.alarm_value as numeric ),2) as alarm_value,
+    ei.index_id,
+    mo.node_id
+    FROM
+    energy_index ei,
+    node_index ni,
+    model_node mo,
+    realtime_alarm bj ,
+    alarm_item alit
+    WHERE
+    ni.node_id IN (
+    SELECT node_id FROM model_node WHERE address LIKE (
+    SELECT address FROM model_node WHERE node_id = #{nodeId} )
+    <if test='eierarchyFlag=="ALL"'>
+      || '%'
+    </if>
+    )
+    AND ei.index_id = ni.index_id
+    AND mo.node_id = ni.node_id
+    AND bj.index_id = ei.index_id
+    AND alit.alarm_code = bj.alarm_code
+    AND alit.time_slot='LIVE'
+    AND ei.index_type=#{indexType}
+    <if test="indexName != null  and indexName != ''">and ei.name like concat('%', #{indexName},
+      '%')
+    </if>
+    <if test="limitType != null  and limitType != ''">and alit.limit_type=#{limitType}</if>
+    <if test="alarmLevel != null  and alarmLevel != ''">and alit.alarm_level=#{alarmLevel}</if>
+    order by alarm_level,mo.node_id,limit_type asc
+  </select>
+  <select id="getRealTimeAlarmByAlarmCode" resultMap="RealTimeAlarmResult">
+    select *
+    from realtime_alarm
+    where alarm_code = #{itemId}
+  </select>
+  <select id="getRealTimeAlarm" resultMap="RealTimeAlarmResult">
+    select *
+    from realtime_alarm ra
+  </select>
+  <select id="getAlarmByItemIdAndTimeCode" resultMap="RealTimeAlarmResult">
+    select *
+    from realtime_alarm
+    where item_id = #{itemId}
+      and time_code = #{timeCode}
+  </select>
+  <select id="selectRealtimeAlarmJkPage" resultMap="JkRealTimeAlarmListResult">
+    SELECT
+    mo."name" AS modelname,
+    ei.code,
+    ei.NAME AS indexname,
+    ei.unit_id,
+    alit.alarm_level,
+    alit.limit_type,
+    bj.limiting_value,
+    bj.begin_time,
+    round(cast(bj.alarm_value as numeric ),2) as alarm_value,
+    ei.index_id,
+    mo.node_id
+    FROM
+    energy_index ei,
+    node_index ni,
+    model_node mo,
+    realtime_alarm bj ,
+    alarm_item alit
+    WHERE
+    ni.node_id IN (
+    SELECT node_id FROM model_node WHERE address LIKE (
+    SELECT address FROM model_node WHERE node_id = #{realTimeAlarmList.nodeId} )
+    <if test='realTimeAlarmList.eierarchyFlag=="ALL"'>
+      || '%'
+    </if>
+    )
+    AND ei.index_id = ni.index_id
+    AND mo.node_id = ni.node_id
+    AND bj.index_id = ei.index_id
+    AND alit.alarm_code = bj.alarm_code
+    AND alit.time_slot='LIVE'
+    AND ei.index_type=#{realTimeAlarmList.indexType}
+    <if test="realTimeAlarmList.indexName != null  and realTimeAlarmList.indexName != ''">and ei.name like concat('%', #{realTimeAlarmList.indexName},
+      '%')
+    </if>
+    <if test="realTimeAlarmList.limitType != null  and realTimeAlarmList.limitType != ''">and alit.limit_type=#{realTimeAlarmList.limitType}</if>
+    <if test="realTimeAlarmList.alarmLevel != null  and realTimeAlarmList.alarmLevel != ''">and alit.alarm_level=#{realTimeAlarmList.alarmLevel}</if>
+    order by alarm_level,mo.node_id,limit_type asc
+  </select>
+
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/auxiliaryinput/ProductOutputMapper.xml b/zhitan-system/src/main/resources/mapper/auxiliaryinput/ProductOutputMapper.xml
new file mode 100644
index 0000000..b195d5a
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/auxiliaryinput/ProductOutputMapper.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.productoutput.mapper.ProductOutputMapper">
+
+    <resultMap type="ProductOutput" id="ProductOutputResult">
+        <result property="productOutputId"    column="product_output_id"    />
+        <result property="nodeId"    column="node_id"    />
+        <result property="nodeName"    column="node_name"    />
+        <result property="timeType"    column="time_type"    />
+        <result property="dataTime"    column="data_time"    />
+        <result property="name"    column="name"    />
+        <result property="number"    column="number"    />
+        <result property="unit"    column="unit"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="dataType"    column="data_type"    />
+        <result property="productType"    column="product_type"    />
+    </resultMap>
+
+    <sql id="selectProductOutputVo">
+        select product_output_id, node_name, node_id, time_type, data_time, name, number, unit, del_flag, create_by, create_time, update_by, update_time, remark, data_type,product_type from product_output
+    </sql>
+
+    <select id="selectProductOutputList" parameterType="ProductOutput" resultMap="ProductOutputResult">
+        <include refid="selectProductOutputVo"/>
+        <where>
+            <if test="productOutputId != null  and productOutputId != ''"> and product_output_id = #{productOutputId}</if>
+            <if test="nodeId != null  and nodeId != ''"> and node_id = #{nodeId}</if>
+            <if test="nodeName != null  and nodeName != ''"> and node_name = #{nodeName}</if>
+            <if test="timeType != null  and timeType != ''"> and time_type = #{timeType}</if>
+            <if test="dataTime != null "> and data_time = #{dataTime}</if>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="number != null  and number != ''"> and number = #{number}</if>
+            <if test="unit != null  and unit != ''"> and unit = #{unit}</if>
+            <if test="dataType != null  and dataType != ''"> and data_type = #{dataType}</if>
+            <if test="productType != null  and productType != ''"> and product_type = #{productType}</if>
+        </where>
+    </select>
+
+    <select id="selectProductOutputById" parameterType="String" resultMap="ProductOutputResult">
+        <include refid="selectProductOutputVo"/>
+        where  product_output_id = #{productOutputId}
+    </select>
+
+    <insert id="insertProductOutput" parameterType="ProductOutput">
+        insert into product_output
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="productOutputId != null">product_output_id,</if>
+            <if test="nodeId != null">node_id,</if>
+            <if test="nodeName != null">node_name,</if>
+            <if test="timeType != null">time_type,</if>
+            <if test="dataTime != null">data_time,</if>
+            <if test="name != null">name,</if>
+            <if test="number != null">number,</if>
+            <if test="unit != null">unit,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+            <if test="dataType != null">data_type,</if>
+            <if test="productType != null">product_type,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="productOutputId != null">#{productOutputId},</if>
+            <if test="nodeId != null">#{nodeId},</if>
+            <if test="nodeName != null">#{nodeName},</if>
+            <if test="timeType != null">#{timeType},</if>
+            <if test="dataTime != null">#{dataTime},</if>
+            <if test="name != null">#{name},</if>
+            <if test="number != null">#{number},</if>
+            <if test="unit != null">#{unit},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="dataType != null">#{dataType},</if>
+            <if test="productType != null">#{productType},</if>
+        </trim>
+    </insert>
+
+    <update id="updateProductOutput" parameterType="ProductOutput">
+        update product_output
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="timeType != null">time_type = #{timeType},</if>
+            <if test="dataTime != null">data_time = #{dataTime},</if>
+            <if test="name != null">name = #{name},</if>
+            <if test="number != null">number = #{number},</if>
+            <if test="unit != null">unit = #{unit},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="dataType != null">data_type = #{dataType},</if>
+            <if test="productType != null">product_type = #{productType},</if>
+        </trim>
+        where product_output_id = #{productOutputId}
+    </update>
+
+    <delete id="deleteProductOutputById" parameterType="String">
+        delete from product_output where product_output_id = #{productOutputId}
+    </delete>
+
+    <delete id="deleteProductOutputByIds" parameterType="String">
+        delete from product_output where product_output_id in
+        <foreach item="productOutputId" collection="array" open="(" separator="," close=")">
+            #{productOutputId}
+        </foreach>
+    </delete>
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/basicdata/FacilityAnnexMapper.xml b/zhitan-system/src/main/resources/mapper/basicdata/FacilityAnnexMapper.xml
new file mode 100644
index 0000000..fb8f4ef
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/basicdata/FacilityAnnexMapper.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.basicdata.mapper.FacilityAnnexMapper">
+    
+    <resultMap type="FacilityAnnex" id="FacilityAnnexResult">
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="id"    column="id"    />
+        <result property="facilityId"    column="facility_id"    />
+        <result property="fileName"    column="file_name"    />
+        <result property="filesuffix"    column="file_suffix"    />
+        <result property="filePath"    column="file_path"    />
+        <result property="delFlage"    column="del_flage"    />
+    </resultMap>
+
+    <sql id="selectFacilityAnnexVo">
+        select create_time, create_by, update_time, update_by, id, facility_id, file_name, file_suffix, file_path, del_flage from facility_annex
+    </sql>
+
+    <select id="selectFacilityAnnexList" parameterType="FacilityAnnex" resultMap="FacilityAnnexResult">
+        <include refid="selectFacilityAnnexVo"/>
+        <where>
+            del_flage='N'
+            <if test="fileName != null  and fileName != ''"> and file_name like concat('%', #{fileName}, '%')</if>
+            <if test="facilityId != null  and facilityId != ''"> and facility_id=#{facilityId}</if>
+        </where>
+    </select>
+    
+    <select id="selectFacilityAnnexById" parameterType="Date" resultMap="FacilityAnnexResult">
+        <include refid="selectFacilityAnnexVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertFacilityAnnex" parameterType="FacilityAnnex">
+        insert into facility_annex
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="createTime != null ">create_time,</if>
+            <if test="createBy != null  and createBy != ''">create_by,</if>
+            <if test="updateTime != null ">update_time,</if>
+            <if test="updateBy != null  and updateBy != ''">update_by,</if>
+            <if test="id != null  and id != ''">id,</if>
+            <if test="facilityId != null  and facilityId != ''">facility_id,</if>
+            <if test="fileName != null  and fileName != ''">file_name,</if>
+            <if test="filesuffix != null  and filesuffix != ''">file_suffix,</if>
+            <if test="filePath != null  and filePath != ''">file_path,</if>
+            <if test="delFlage != null  and delFlage != ''">del_flage,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="createTime != null ">#{createTime},</if>
+            <if test="createBy != null  and createBy != ''">#{createBy},</if>
+            <if test="updateTime != null ">#{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+            <if test="id != null  and id != ''">#{id},</if>
+            <if test="facilityId != null  and facilityId != ''">#{facilityId},</if>
+            <if test="fileName != null  and fileName != ''">#{fileName},</if>
+            <if test="filesuffix != null  and filesuffix != ''">#{filesuffix},</if>
+            <if test="filePath != null  and filePath != ''">#{filePath},</if>
+            <if test="delFlage != null  and delFlage != ''">#{delFlage},</if>
+         </trim>
+    </insert>
+
+    <update id="updateFacilityAnnex" parameterType="FacilityAnnex">
+        update facility_annex
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
+            <if test="updateTime != null ">update_time = #{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="id != null  and id != ''">id = #{id},</if>
+            <if test="facilityId != null  and facilityId != ''">facility_id = #{facilityId},</if>
+            <if test="fileName != null  and fileName != ''">file_name = #{fileName},</if>
+            <if test="filesuffix != null  and filesuffix != ''">file_suffix = #{filesuffix},</if>
+            <if test="filePath != null  and filePath != ''">file_path = #{filePath},</if>
+            <if test="delFlage != null  and delFlage != ''">del_flage = #{delFlage},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteFacilityAnnexById" parameterType="Date">
+        <!--delete from facility_annex where create_time = #{createTime}-->
+        update facility_annex set del_flage='Y',update_time=now() where id = #{id}
+    </delete>
+
+    <delete id="deleteFacilityAnnexByIds" parameterType="String">
+        <!--delete from facility_annex where create_time in-->
+        update facility_annex set del_flage='Y',update_time=now() where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+    
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/basicdata/FacilityArchivesMapper.xml b/zhitan-system/src/main/resources/mapper/basicdata/FacilityArchivesMapper.xml
new file mode 100644
index 0000000..bdebaaf
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/basicdata/FacilityArchivesMapper.xml
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.basicdata.mapper.FacilityArchivesMapper">
+
+    <resultMap type="FacilityArchives" id="FacilityArchivesResult">
+        <result property="id"    column="id"    />
+        <result property="code"    column="code"    />
+        <result property="facilityName"    column="facility_name"    />
+        <result property="facilityType"    column="facility_type"    />
+        <result property="branchFactory"    column="branch_factory"    />
+        <result property="istallationLocationn"    column="installation_location"    />
+        <result property="facilityGrade"    column="facility_grade"    />
+        <result property="ratedPower"    column="rated_power"    />
+        <result property="productionDate"    column="production_date"    />
+        <result property="putrunDate"    column="putrun_date"    />
+        <result property="manufacturer"    column="manufacturer"    />
+        <result property="personCharge"    column="person_charge"    />
+        <result property="technicalData"    column="technical_data"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="checkCycle"    column="check_cycle"    />
+        <result property="reminderCycle"    column="reminder_cycle"    />
+        <result property="remark"    column="remark"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="txflage"    column="txflage"    />
+        <result property="pointFlag"    column="point_flag"    />
+    </resultMap>
+
+    <sql id="selectFacilityArchivesVo">
+        select id, code, facility_name, facility_type, branch_factory, installation_location, facility_grade, rated_power, production_date, putrun_date, manufacturer, person_charge, technical_data, start_time, check_cycle, reminder_cycle, remark, create_time, create_by, update_time, update_by,point_flag,(start_time+check_cycle-reminder_cycle)&lt;=current_date as txflage from facility_archives
+    </sql>
+
+    <select id="selectFacilityArchivesList" parameterType="FacilityArchives" resultMap="FacilityArchivesResult">
+        <include refid="selectFacilityArchivesVo"/>
+        <where>
+            <if test="code != null  and code != ''"> and code like concat('%', #{code}, '%')</if>
+            <if test="facilityName != null  and facilityName != ''"> and facility_name like concat('%', #{facilityName}, '%')</if>
+            <if test="manufacturer != null  and manufacturer != ''"> and manufacturer like concat('%', #{manufacturer}, '%')</if>
+            <if test="facilityType != null  and facilityType != ''"> and facility_type = #{facilityType}</if>
+            <if test="branchFactory != null  and branchFactory != ''"> and branch_factory = #{branchFactory}</if>
+            <if test="istallationLocationn != null  and istallationLocationn != ''"> and installation_location like concat('%', #{istallationLocationn}, '%')</if>
+            <if test="facilityGrade != null  and facilityGrade != ''"> and facility_grade = #{facilityGrade}</if>
+            <if test="ratedPower != null  and ratedPower != ''"> and to_number(rated_power,'9999999999') >= to_number(#{ratedPower},'9999999999')</if>
+        </where>
+        order by code
+    </select>
+
+    <select id="selectFacilityArchivesById" parameterType="String" resultMap="FacilityArchivesResult">
+        <include refid="selectFacilityArchivesVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertFacilityArchives" parameterType="FacilityArchives">
+        insert into facility_archives
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">id,</if>
+            <if test="code != null  and code != ''">code,</if>
+            <if test="facilityName != null  and facilityName != ''">facility_name,</if>
+            <if test="facilityType != null  and facilityType != ''">facility_type,</if>
+            <if test="branchFactory != null  and branchFactory != ''">branch_factory,</if>
+            <if test="istallationLocationn != null  and istallationLocationn != ''">installation_location,</if>
+            <if test="facilityGrade != null  and facilityGrade != ''">facility_grade,</if>
+            <if test="ratedPower != null  and ratedPower != ''">rated_power,</if>
+            <if test="productionDate != null ">production_date,</if>
+            <if test="putrunDate != null ">putrun_date,</if>
+            <if test="manufacturer != null  and manufacturer != ''">manufacturer,</if>
+            <if test="personCharge != null  and personCharge != ''">person_charge,</if>
+            <if test="technicalData != null  and technicalData != ''">technical_data,</if>
+            <if test="startTime != null ">start_time,</if>
+            <if test="checkCycle != null ">check_cycle,</if>
+            <if test="reminderCycle != null ">reminder_cycle,</if>
+            <if test="remark != null  and remark != ''">remark,</if>
+            <if test="createTime != null ">create_time,</if>
+            <if test="createBy != null  and createBy != ''">create_by,</if>
+            <if test="updateTime != null ">update_time,</if>
+            <if test="updateBy != null  and updateBy != ''">update_by,</if>
+            <if test="pointFlag != null  and pointFlag != ''">point_flag,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">#{id},</if>
+            <if test="code != null  and code != ''">#{code},</if>
+            <if test="facilityName != null  and facilityName != ''">#{facilityName},</if>
+            <if test="facilityType != null  and facilityType != ''">#{facilityType},</if>
+            <if test="branchFactory != null  and branchFactory != ''">#{branchFactory},</if>
+            <if test="istallationLocationn != null  and istallationLocationn != ''">#{istallationLocationn},</if>
+            <if test="facilityGrade != null  and facilityGrade != ''">#{facilityGrade},</if>
+            <if test="ratedPower != null  and ratedPower != ''">#{ratedPower},</if>
+            <if test="productionDate != null ">#{productionDate},</if>
+            <if test="putrunDate != null ">#{putrunDate},</if>
+            <if test="manufacturer != null  and manufacturer != ''">#{manufacturer},</if>
+            <if test="personCharge != null  and personCharge != ''">#{personCharge},</if>
+            <if test="technicalData != null  and technicalData != ''">#{technicalData},</if>
+            <if test="startTime != null ">#{startTime},</if>
+            <if test="checkCycle != null ">#{checkCycle},</if>
+            <if test="reminderCycle != null ">#{reminderCycle},</if>
+            <if test="remark != null  and remark != ''">#{remark},</if>
+            <if test="createTime != null ">#{createTime},</if>
+            <if test="createBy != null  and createBy != ''">#{createBy},</if>
+            <if test="updateTime != null ">#{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+            <if test="pointFlag != null  and pointFlag != ''">#{pointFlag},</if>
+         </trim>
+    </insert>
+
+    <update id="updateFacilityArchives" parameterType="FacilityArchives">
+        update facility_archives
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="code != null  and code != ''">code = #{code},</if>
+            <if test="facilityName != null  and facilityName != ''">facility_name = #{facilityName},</if>
+            <if test="facilityType != null  and facilityType != ''">facility_type = #{facilityType},</if>
+            <if test="branchFactory != null  and branchFactory != ''">branch_factory = #{branchFactory},</if>
+            <if test="istallationLocationn != null  and istallationLocationn != ''">installation_location = #{istallationLocationn},</if>
+            <if test="facilityGrade != null  and facilityGrade != ''">facility_grade = #{facilityGrade},</if>
+            <if test="ratedPower != null  and ratedPower != ''">rated_power = #{ratedPower},</if>
+            <if test="productionDate != null ">production_date = #{productionDate},</if>
+            <if test="putrunDate != null ">putrun_date = #{putrunDate},</if>
+            <if test="manufacturer != null  and manufacturer != ''">manufacturer = #{manufacturer},</if>
+            <if test="personCharge != null  and personCharge != ''">person_charge = #{personCharge},</if>
+            <if test="technicalData != null  and technicalData != ''">technical_data = #{technicalData},</if>
+            <if test="startTime != null ">start_time = #{startTime},</if>
+            <if test="checkCycle != null ">check_cycle = #{checkCycle},</if>
+            <if test="reminderCycle != null ">reminder_cycle = #{reminderCycle},</if>
+            <if test="remark != null  and remark != ''">remark = #{remark},</if>
+            <if test="createTime != null ">create_time = #{createTime},</if>
+            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
+            <if test="updateTime != null ">update_time = #{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="pointFlag != null  and pointFlag != ''">point_flag = #{pointFlag},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteFacilityArchivesById" parameterType="String">
+        delete from facility_archives where id = #{id}
+    </delete>
+
+    <delete id="deleteFacilityArchivesByIds" parameterType="String">
+        delete from facility_archives where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+
+    <update id="resetFacilityArchivesByIds" parameterType="String" >
+        update facility_archives
+        set start_time = NOW()
+        where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
+    <select id="selectFacilityArchivesByCode" parameterType="FacilityArchives" resultMap="FacilityArchivesResult">
+        <include refid="selectFacilityArchivesVo"/>
+        where code = #{code}
+        <if test="id != null  and id != ''"> and id != #{id} or id is null</if>
+    </select>
+    <select id="excelFacilityArchivesList" parameterType="FacilityArchives" resultMap="FacilityArchivesResult">
+        select id, code, facility_name, fun_getDiceData('facility_type',facility_type) as facility_type,
+        fun_getDiceData('branch_factory',branch_factory) as branch_factory, installation_location,
+        fun_getDiceData('facility_grade',facility_grade) as facility_grade, rated_power, to_char(production_date,'YYYY-MM-DD') as  production_date,
+        to_char(putrun_date,'YYYY-MM-DD') as putrun_date, manufacturer, person_charge,
+          technical_data, start_time, check_cycle, reminder_cycle, remark, create_time, create_by,
+           update_time, update_by
+        from facility_archives
+        <where>
+            <if test="code != null  and code != ''"> and code like concat('%', #{code}, '%')</if>
+            <if test="facilityName != null  and facilityName != ''"> and facility_name like concat('%', #{facilityName}, '%')</if>
+            <if test="manufacturer != null  and manufacturer != ''"> and manufacturer like concat('%', #{manufacturer}, '%')</if>
+            <if test="facilityType != null  and facilityType != ''"> and facility_type = #{facilityType}</if>
+            <if test="branchFactory != null  and branchFactory != ''"> and branch_factory = #{branchFactory}</if>
+            <if test="istallationLocationn != null  and istallationLocationn != ''"> and installation_location like concat('%', #{istallationLocationn}, '%')</if>
+            <if test="facilityGrade != null  and facilityGrade != ''"> and facility_grade = #{facilityGrade}</if>
+            <if test="ratedPower != null  and ratedPower != ''"> and to_number(rated_power,'9999999999') >= #{ratedPower}</if>
+        </where>
+        order by code
+    </select>
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/basicdata/MeterAnnexMapper.xml b/zhitan-system/src/main/resources/mapper/basicdata/MeterAnnexMapper.xml
new file mode 100644
index 0000000..915eb5f
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/basicdata/MeterAnnexMapper.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.basicdata.mapper.MeterAnnexMapper">
+    
+    <resultMap type="MeterAnnex" id="MeterAnnexResult">
+        <result property="id"    column="id"    />
+        <result property="implementId"    column="implement_id"    />
+        <result property="fileName"    column="file_name"    />
+        <result property="fileSuffix"    column="file_suffix"    />
+        <result property="filePath"    column="file_path"    />
+        <result property="delFlage"    column="del_flage"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="updateBy"    column="update_by"    />
+    </resultMap>
+
+    <sql id="selectMeterAnnexVo">
+        select id, implement_id, file_name, file_suffix, file_path, del_flage, create_time, create_by, update_time, update_by from meter_annex
+    </sql>
+
+    <select id="selectMeterAnnexList" parameterType="MeterAnnex" resultMap="MeterAnnexResult">
+        <include refid="selectMeterAnnexVo"/>
+        <where>
+            del_flage='N'
+            <if test="fileName != null  and fileName != ''"> and file_name like concat('%', #{fileName}, '%')</if>
+            <if test="implementId != null  and implementId != ''"> and implement_id=#{implementId}</if>
+        </where>
+    </select>
+    
+    <select id="selectMeterAnnexById" parameterType="String" resultMap="MeterAnnexResult">
+        <include refid="selectMeterAnnexVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertMeterAnnex" parameterType="MeterAnnex">
+        insert into meter_annex
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">id,</if>
+            <if test="implementId != null  and implementId != ''">implement_id,</if>
+            <if test="fileName != null  and fileName != ''">file_name,</if>
+            <if test="fileSuffix != null  and fileSuffix != ''">file_suffix,</if>
+            <if test="filePath != null  and filePath != ''">file_path,</if>
+            <if test="delFlage != null  and delFlage != ''">del_flage,</if>
+            <if test="createTime != null ">create_time,</if>
+            <if test="createBy != null  and createBy != ''">create_by,</if>
+            <if test="updateTime != null ">update_time,</if>
+            <if test="updateBy != null  and updateBy != ''">update_by,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">#{id},</if>
+            <if test="implementId != null  and implementId != ''">#{implementId},</if>
+            <if test="fileName != null  and fileName != ''">#{fileName},</if>
+            <if test="fileSuffix != null  and fileSuffix != ''">#{fileSuffix},</if>
+            <if test="filePath != null  and filePath != ''">#{filePath},</if>
+            <if test="delFlage != null  and delFlage != ''">#{delFlage},</if>
+            <if test="createTime != null ">#{createTime},</if>
+            <if test="createBy != null  and createBy != ''">#{createBy},</if>
+            <if test="updateTime != null ">#{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+         </trim>
+    </insert>
+
+    <update id="updateMeterAnnex" parameterType="MeterAnnex">
+        update meter_annex
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="implementId != null  and implementId != ''">implement_id = #{implementId},</if>
+            <if test="fileName != null  and fileName != ''">file_name = #{fileName},</if>
+            <if test="fileSuffix != null  and fileSuffix != ''">file_suffix = #{fileSuffix},</if>
+            <if test="filePath != null  and filePath != ''">file_path = #{filePath},</if>
+            <if test="delFlage != null  and delFlage != ''">del_flage = #{delFlage},</if>
+            <if test="createTime != null ">create_time = #{createTime},</if>
+            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
+            <if test="updateTime != null ">update_time = #{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteMeterAnnexById" parameterType="String">
+        <!--delete from meter_annex where id = #{id}-->
+        update meter_annex set del_flage='Y' where id = #{id}
+    </delete>
+
+    <delete id="deleteMeterAnnexByIds" parameterType="String">
+        <!--delete from meter_annex where id in -->
+        update meter_annex set del_flage='Y' where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+    
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/basicdata/MeterImplementCountMapper.xml b/zhitan-system/src/main/resources/mapper/basicdata/MeterImplementCountMapper.xml
new file mode 100644
index 0000000..9563b33
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/basicdata/MeterImplementCountMapper.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.basicdata.mapper.MeterImplementCountMapper">
+    
+    <resultMap type="MeterImplementCount" id="MeterImplementCountResult">
+        <result property="code"    column="code"    />
+        <result property="meterName"    column="meter_name"    />
+        <result property="meterType"    column="meter_type"    />
+        <result property="modelNumber"    column="model_number"    />
+        <result property="measureRange"    column="measure_range"    />
+        <result property="id"    column="id"    />
+        <result property="manufacturer"    column="manufacturer"    />
+        <result property="personCharge"    column="person_charge"    />
+        <result property="installactionLocation"    column="installaction_location"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="checkCycle"    column="check_cycle"    />
+        <result property="reminderCycle"    column="reminder_cycle"    />
+        <result property="meterStatus"    column="meter_status"    />
+        <result property="delFlage"    column="del_flage"    />
+        <result property="remark"    column="remark"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="txflage"    column="txflage"    />
+        <result property="putrunTime"    column="putrun_time"    />
+    </resultMap>
+
+    <sql id="selectMeterImplementCountVo">
+         select id, code, meter_name, meter_type, model_number, measure_range, manufacturer, person_charge, installaction_location, start_time, check_cycle, reminder_cycle, meter_status, del_flage, remark, putrun_time, create_time, create_by, update_time, update_by,(start_time+check_cycle-reminder_cycle)&lt;=current_date as txflage from meter_implement
+    </sql>
+
+    <select id="selectMeterImplementCountList" parameterType="MeterImplementCount" resultMap="MeterImplementCountResult">
+        <include refid="selectMeterImplementCountVo"/>
+        <where>  
+            <if test="code != null  and code != ''"> and code like concat('%', #{code}, '%')</if>
+            <if test="meterName != null  and meterName != ''"> and meter_name like concat('%', #{meterName}, '%')</if>
+            <if test="meterType != null  and meterType != ''"> and meter_type = #{meterType}</if>
+            <if test="measureRange != null  and measureRange != ''"> and measure_range like concat('%', #{measureRange}, '%')</if>
+            <if test="manufacturer != null  and manufacturer != ''"> and manufacturer like concat('%', #{manufacturer}, '%')</if>
+            <if test="installactionLocation != null  and installactionLocation != ''"> and installaction_location like concat('%', #{installactionLocation}, '%')</if>
+        </where>
+    </select>
+    
+    <select id="selectMeterImplementCountById" parameterType="String" resultMap="MeterImplementCountResult">
+        <include refid="selectMeterImplementCountVo"/>
+        where code = #{code}
+    </select>
+        
+    <insert id="insertMeterImplementCount" parameterType="MeterImplementCount">
+        insert into meter_implement
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="code != null  and code != ''">code,</if>
+            <if test="meterName != null  and meterName != ''">meter_name,</if>
+            <if test="meterType != null  and meterType != ''">meter_type,</if>
+            <if test="modelNumber != null  and modelNumber != ''">model_number,</if>
+            <if test="measureRange != null  and measureRange != ''">measure_range,</if>
+            <if test="id != null  and id != ''">id,</if>
+            <if test="manufacturer != null  and manufacturer != ''">manufacturer,</if>
+            <if test="personCharge != null  and personCharge != ''">person_charge,</if>
+            <if test="installactionLocation != null  and installactionLocation != ''">installaction_location,</if>
+            <if test="startTime != null ">start_time,</if>
+            <if test="checkCycle != null ">check_cycle,</if>
+            <if test="reminderCycle != null ">reminder_cycle,</if>
+            <if test="meterStatus != null  and meterStatus != ''">meter_status,</if>
+            <if test="delFlage != null  and delFlage != ''">del_flage,</if>
+            <if test="remark != null  and remark != ''">remark,</if>
+            <if test="createTime != null ">create_time,</if>
+            <if test="createBy != null  and createBy != ''">create_by,</if>
+            <if test="updateTime != null ">update_time,</if>
+            <if test="updateBy != null  and updateBy != ''">update_by,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="code != null  and code != ''">#{code},</if>
+            <if test="meterName != null  and meterName != ''">#{meterName},</if>
+            <if test="meterType != null  and meterType != ''">#{meterType},</if>
+            <if test="modelNumber != null  and modelNumber != ''">#{modelNumber},</if>
+            <if test="measureRange != null  and measureRange != ''">#{measureRange},</if>
+            <if test="id != null  and id != ''">#{id},</if>
+            <if test="manufacturer != null  and manufacturer != ''">#{manufacturer},</if>
+            <if test="personCharge != null  and personCharge != ''">#{personCharge},</if>
+            <if test="installactionLocation != null  and installactionLocation != ''">#{installactionLocation},</if>
+            <if test="startTime != null ">#{startTime},</if>
+            <if test="checkCycle != null ">#{checkCycle},</if>
+            <if test="reminderCycle != null ">#{reminderCycle},</if>
+            <if test="meterStatus != null  and meterStatus != ''">#{meterStatus},</if>
+            <if test="delFlage != null  and delFlage != ''">#{delFlage},</if>
+            <if test="remark != null  and remark != ''">#{remark},</if>
+            <if test="createTime != null ">#{createTime},</if>
+            <if test="createBy != null  and createBy != ''">#{createBy},</if>
+            <if test="updateTime != null ">#{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+         </trim>
+    </insert>
+
+    <update id="updateMeterImplementCount" parameterType="MeterImplementCount">
+        update meter_implement
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="meterName != null  and meterName != ''">meter_name = #{meterName},</if>
+            <if test="meterType != null  and meterType != ''">meter_type = #{meterType},</if>
+            <if test="modelNumber != null  and modelNumber != ''">model_number = #{modelNumber},</if>
+            <if test="measureRange != null  and measureRange != ''">measure_range = #{measureRange},</if>
+            <if test="id != null  and id != ''">id = #{id},</if>
+            <if test="manufacturer != null  and manufacturer != ''">manufacturer = #{manufacturer},</if>
+            <if test="personCharge != null  and personCharge != ''">person_charge = #{personCharge},</if>
+            <if test="installactionLocation != null  and installactionLocation != ''">installaction_location = #{installactionLocation},</if>
+            <if test="startTime != null ">start_time = #{startTime},</if>
+            <if test="checkCycle != null ">check_cycle = #{checkCycle},</if>
+            <if test="reminderCycle != null ">reminder_cycle = #{reminderCycle},</if>
+            <if test="meterStatus != null  and meterStatus != ''">meter_status = #{meterStatus},</if>
+            <if test="delFlage != null  and delFlage != ''">del_flage = #{delFlage},</if>
+            <if test="remark != null  and remark != ''">remark = #{remark},</if>
+            <if test="createTime != null ">create_time = #{createTime},</if>
+            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
+            <if test="updateTime != null ">update_time = #{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+        </trim>
+        where code = #{code}
+    </update>
+
+    <delete id="deleteMeterImplementCountById" parameterType="String">
+        delete from meter_implement where code = #{code}
+    </delete>
+
+  <!--  <delete id="deleteMeterImplementCountByIds" parameterType="String">
+        delete from meter_implement where code in 
+        <foreach item="code" collection="array" open="(" separator="," close=")">
+            #{code}
+        </foreach>
+    </delete>-->
+
+    <update id="deleteMeterImplementCountByIds" parameterType="String" >
+        update meter_implement
+        set start_time = NOW()
+        where code in
+        <foreach item="code" collection="array" open="(" separator="," close=")">
+        #{code}
+        </foreach>
+    </update>
+    
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/basicdata/MeterImplementMapper.xml b/zhitan-system/src/main/resources/mapper/basicdata/MeterImplementMapper.xml
new file mode 100644
index 0000000..2ec89c1
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/basicdata/MeterImplementMapper.xml
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.basicdata.mapper.MeterImplementMapper">
+
+    <resultMap type="MeterImplement" id="MeterImplementResult">
+        <result property="id"    column="id"    />
+        <result property="code"    column="code"    />
+        <result property="meterName"    column="meter_name"    />
+        <result property="meterType"    column="meter_type"    />
+        <result property="modelNumber"    column="model_number"    />
+        <result property="measureRange"    column="measure_range"    />
+        <result property="manufacturer"    column="manufacturer"    />
+        <result property="personCharge"    column="person_charge"    />
+        <result property="installactionLocation"    column="installaction_location"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="checkCycle"    column="check_cycle"    />
+        <result property="reminderCycle"    column="reminder_cycle"    />
+        <result property="meterStatus"    column="meter_status"    />
+        <result property="delFlage"    column="del_flage"    />
+        <result property="remark"    column="remark"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="txflage"    column="txflage"    />
+        <result property="putrunTime"    column="putrun_time"    />
+        <result property="wireDiameter"    column="wire_diameter"    />
+        <result property="maxAllowablePower"    column="max_allowable_power"    />
+        <result property="gatewayId"    column="gateway_id"    />
+        <result property="gatewayName"    column="gateway_name"    />
+    </resultMap>
+    <resultMap type="MeterImplementExcel" id="MeterImplementResultExcel">
+        <result property="id"    column="id"    />
+        <result property="code"    column="code"    />
+        <result property="meterName"    column="meter_name"    />
+        <result property="meterType"    column="meter_type"    />
+        <result property="modelNumber"    column="model_number"    />
+        <result property="measureRange"    column="measure_range"    />
+        <result property="manufacturer"    column="manufacturer"    />
+        <result property="personCharge"    column="person_charge"    />
+        <result property="installactionLocation"    column="installaction_location"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="checkCycle"    column="check_cycle"    />
+        <result property="reminderCycle"    column="reminder_cycle"    />
+        <result property="meterStatus"    column="meter_status"    />
+        <result property="delFlage"    column="del_flage"    />
+        <result property="remark"    column="remark"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="energyType"    column="energy_type"    />
+        <result property="wireDiameter"    column="wire_diameter"    />
+        <result property="maxAllowablePower"    column="max_allowable_power"    />
+    </resultMap>
+    <sql id="selectMeterImplementVo">
+        select id,energy_type, code, meter_name, meter_type, model_number, measure_range, manufacturer, person_charge, installaction_location, start_time, check_cycle, reminder_cycle, meter_status, del_flage, remark, putrun_time,create_time, create_by, update_time, update_by,(start_time+check_cycle-reminder_cycle)&lt;=current_date as txflage,wire_diameter,max_allowable_power,gateway_id,gateway_name from meter_implement
+    </sql>
+
+    <select id="selectMeterImplementList" parameterType="MeterImplement" resultMap="MeterImplementResult">
+        <include refid="selectMeterImplementVo"/>
+        <where>
+            del_flage='N'
+            <if test="code != null  and code != ''"> and code like concat('%', #{code}, '%')</if>
+            <if test="meterName != null  and meterName != ''"> and meter_name like concat('%', #{meterName}, '%')</if>
+            <if test="meterType != null  and meterType != ''"> and meter_type = #{meterType}</if>
+            <if test="measureRange != null  and measureRange != ''"> and measure_range like concat('%', #{measureRange}, '%')</if>
+            <if test="manufacturer != null  and manufacturer != ''"> and manufacturer like concat('%', #{manufacturer}, '%')</if>
+            <if test="installactionLocation != null  and installactionLocation != ''"> and installaction_location like concat('%', #{installactionLocation}, '%')</if>
+        </where>
+        order by code
+    </select>
+
+    <select id="exectMeterImplementList" parameterType="MeterImplement" resultMap="MeterImplementResultExcel">
+        select id,energy_type, code, meter_name, fun_getDiceData('sys_device_type',meter_status) as meter_type, model_number, measure_range, manufacturer,
+        person_charge, installaction_location, to_char(start_time,'YYYY-MM-DD') start_time, check_cycle, reminder_cycle, fun_getDiceData('meter_status',meter_status) as meter_status,
+        del_flage, remark, create_time, create_by, update_time, update_by,wire_diameter,max_allowable_power,gateway_name
+        from meter_implement
+        <where>
+            del_flage='N'
+            <if test="code != null  and code != ''"> and code like concat('%', #{code}, '%')</if>
+            <if test="meterName != null  and meterName != ''"> and meter_name like concat('%', #{meterName}, '%')</if>
+            <if test="meterType != null  and meterType != ''"> and meter_type = #{meterType}</if>
+            <if test="measureRange != null  and measureRange != ''"> and measure_range like concat('%', #{measureRange}, '%')</if>
+            <if test="manufacturer != null  and manufacturer != ''"> and manufacturer like concat('%', #{manufacturer}, '%')</if>
+            <if test="installactionLocation != null  and installactionLocation != ''"> and installaction_location like concat('%', #{installactionLocation}, '%')</if>
+        </where>
+        order by code
+    </select>
+
+    <select id="selectMeterImplementById" parameterType="String" resultMap="MeterImplementResult">
+        <include refid="selectMeterImplementVo"/>
+        where id = #{id}
+    </select>
+
+    <select id="selectMeterImplementByCode" parameterType="MeterImplement" resultMap="MeterImplementResult">
+        <include refid="selectMeterImplementVo"/>
+        where code = #{code}
+        <if test="id != null  and id != ''"> and id != #{id} or id is null</if>
+    </select>
+
+    <select id="listMeterImplementByIds" resultMap="MeterImplementResult">
+        SELECT
+            "id",
+            energy_type,
+            code,
+            meter_name,
+            meter_type,
+            meter_status,
+            installaction_location,
+            wire_diameter,
+            max_allowable_power
+        FROM
+            "meter_implement"
+        WHERE
+            id IN
+            <foreach collection="meterIdList" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+    </select>
+    <select id="selectByNodeIdIndexId" resultType="com.zhitan.basicdata.domain.MeterImplement">
+        <include refid="selectMeterImplementVo"/>
+         mi
+        JOIN node_device nd ON mi.id = nd.device_id
+        JOIN node_index ni ON ni.node_id = nd.node_id
+        where ni.node_id= #{nodeId} and index_id= #{indexId}
+    </select>
+
+    <insert id="insertMeterImplement" parameterType="MeterImplement">
+        insert into meter_implement
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">id,</if>
+            <if test="energyType != null  and energyType != ''">energy_type,</if>
+            <if test="code != null  and code != ''">code,</if>
+            <if test="meterName != null  and meterName != ''">meter_name,</if>
+            <if test="meterType != null  and meterType != ''">meter_type,</if>
+            <if test="modelNumber != null  and modelNumber != ''">model_number,</if>
+            <if test="measureRange != null  and measureRange != ''">measure_range,</if>
+            <if test="manufacturer != null  and manufacturer != ''">manufacturer,</if>
+            <if test="personCharge != null  and personCharge != ''">person_charge,</if>
+            <if test="installactionLocation != null  and installactionLocation != ''">installaction_location,</if>
+            <if test="startTime != null ">start_time,</if>
+            <if test="putrunTime != null ">putrun_time,</if>
+            <if test="checkCycle != null ">check_cycle,</if>
+            <if test="reminderCycle != null ">reminder_cycle,</if>
+            <if test="meterStatus != null  and meterStatus != ''">meter_status,</if>
+            <if test="delFlage != null  and delFlage != ''">del_flage,</if>
+            <if test="remark != null  and remark != ''">remark,</if>
+            <if test="createTime != null ">create_time,</if>
+            <if test="createBy != null  and createBy != ''">create_by,</if>
+            <if test="updateTime != null ">update_time,</if>
+            <if test="updateBy != null  and updateBy != ''">update_by,</if>
+            <if test="wireDiameter != null  and wireDiameter != ''">wire_diameter,</if>
+            <if test="maxAllowablePower != null  and maxAllowablePower != ''">max_allowable_power,</if>
+            <if test="gatewayId != null  and gatewayId != ''">gateway_id,</if>
+            <if test="gatewayName != null and gatewayName != ''">gateway_name,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">#{id},</if>
+            <if test="energyType != null  and energyType != ''">#{energyType},</if>
+            <if test="code != null  and code != ''">#{code},</if>
+            <if test="meterName != null  and meterName != ''">#{meterName},</if>
+            <if test="meterType != null  and meterType != ''">#{meterType},</if>
+            <if test="modelNumber != null  and modelNumber != ''">#{modelNumber},</if>
+            <if test="measureRange != null  and measureRange != ''">#{measureRange},</if>
+            <if test="manufacturer != null  and manufacturer != ''">#{manufacturer},</if>
+            <if test="personCharge != null  and personCharge != ''">#{personCharge},</if>
+            <if test="installactionLocation != null  and installactionLocation != ''">#{installactionLocation},</if>
+            <if test="startTime != null ">#{startTime},</if>
+            <if test="putrunTime != null ">#{putrunTime},</if>
+            <if test="checkCycle != null ">#{checkCycle},</if>
+            <if test="reminderCycle != null ">#{reminderCycle},</if>
+            <if test="meterStatus != null  and meterStatus != ''">#{meterStatus},</if>
+            <if test="delFlage != null  and delFlage != ''">#{delFlage},</if>
+            <if test="remark != null  and remark != ''">#{remark},</if>
+            <if test="createTime != null ">#{createTime},</if>
+            <if test="createBy != null  and createBy != ''">#{createBy},</if>
+            <if test="updateTime != null ">#{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+            <if test="wireDiameter != null  and wireDiameter != ''">#{wire_diameter},</if>
+            <if test="maxAllowablePower != null  and maxAllowablePower != ''">#{max_allowable_power},</if>
+            <if test="gatewayId != null  and gatewayId != ''">#{gatewayId},</if>
+            <if test="gatewayName != null and gatewayName != ''">#{gatewayName},</if>
+         </trim>
+    </insert>
+
+    <update id="updateMeterImplement" parameterType="MeterImplement">
+        update meter_implement
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="code != null  and code != ''">code = #{code},</if>
+            <if test="energyType != null  and energyType != ''">energy_type = #{energyType},</if>
+            <if test="meterName != null  and meterName != ''">meter_name = #{meterName},</if>
+            <if test="meterType != null  and meterType != ''">meter_type = #{meterType},</if>
+            <if test="modelNumber != null  and modelNumber != ''">model_number = #{modelNumber},</if>
+            <if test="measureRange != null  and measureRange != ''">measure_range = #{measureRange},</if>
+            <if test="manufacturer != null  and manufacturer != ''">manufacturer = #{manufacturer},</if>
+            <if test="personCharge != null  and personCharge != ''">person_charge = #{personCharge},</if>
+            <if test="installactionLocation != null  and installactionLocation != ''">installaction_location = #{installactionLocation},</if>
+            <if test="startTime != null ">start_time = #{startTime},</if>
+            <if test="putrunTime != null ">putrun_time = #{putrunTime},</if>
+            <if test="checkCycle != null ">check_cycle = #{checkCycle},</if>
+            <if test="reminderCycle != null ">reminder_cycle = #{reminderCycle},</if>
+            <if test="meterStatus != null  and meterStatus != ''">meter_status = #{meterStatus},</if>
+            <if test="delFlage != null  and delFlage != ''">del_flage = #{delFlage},</if>
+            <if test="remark != null  and remark != ''">remark = #{remark},</if>
+            <if test="createTime != null ">create_time = #{createTime},</if>
+            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
+            <if test="updateTime != null ">update_time = #{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="wireDiameter != null  and wireDiameter != ''">wire_diameter = #{wireDiameter},</if>
+            <if test="maxAllowablePower != null  and maxAllowablePower != ''">max_allowable_power = #{maxAllowablePower},</if>
+            <if test="gatewayId != null and gatewayId != ''">gateway_id = #{gatewayId},</if>
+            <if test="gatewayName != null and gatewayName != ''">gateway_name = #{gatewayName},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteMeterImplementById" parameterType="String">
+        <!--update meter_implement set del_flage='Y' where id = #{id} 鍏堢敤鐗╃悊鍒犻櫎锛屽悗鏈熸湁蹇呰鍐嶆墦寮�閫昏緫鍒犻櫎-->
+        delete from meter_implement where id = #{id}
+    </delete>
+
+    <delete id="deleteMeterImplementByIds" parameterType="String">
+        <!--update meter_implement set del_flage='Y' where id in 鍏堢敤鐗╃悊鍒犻櫎锛屽悗鏈熸湁蹇呰鍐嶆墦寮�閫昏緫鍒犻櫎-->
+        delete from meter_implement where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/basicdata/SysEnerclassMapper.xml b/zhitan-system/src/main/resources/mapper/basicdata/SysEnerclassMapper.xml
new file mode 100644
index 0000000..42996bd
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/basicdata/SysEnerclassMapper.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.basicdata.mapper.SysEnerclassMapper">
+
+    <resultMap type="SysEnerclass" id="SysEnerclassResult">
+        <result property="enerclassid" column="enerclassid"/>
+        <result property="enerclassname" column="enerclassname"/>
+        <result property="oprMan" column="opr_man"/>
+        <result property="oprTime" column="opr_time"/>
+        <result property="modMan" column="mod_man"/>
+        <result property="modTime" column="mod_time"/>
+        <result property="note" column="note"/>
+    </resultMap>
+
+    <sql id="selectSysEnerclassVo">
+        select enerclassid, enerclassname, opr_man, opr_time, mod_man, mod_time, note from sys_enerclass
+    </sql>
+
+    <select id="selectSysEnerclassList" parameterType="SysEnerclass" resultMap="SysEnerclassResult">
+        <include refid="selectSysEnerclassVo"/>
+        <where>
+            <if test="enerclassname != null  and enerclassname != ''"> and enerclassname like concat('%', #{enerclassname}, '%')</if>
+        </where>
+    </select>
+
+    <select id="selectSysEnerclassById" parameterType="Integer" resultMap="SysEnerclassResult">
+        <include refid="selectSysEnerclassVo"/>
+        where enerclassid = #{enerclassid}
+    </select>
+
+    <insert id="insertSysEnerclass" parameterType="SysEnerclass">
+        insert into sys_enerclass
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            mod_time,
+            opr_time,
+            <if test="note != null  and note != ''">note,</if>
+            <if test="enerclassid != null ">enerclassid,</if>
+            <if test="enerclassname != null  and enerclassname != ''">enerclassname,</if>
+            <if test="oprMan != null  and oprMan != ''">opr_man,</if>
+            <if test="modMan != null  and modMan != ''">mod_man,</if>
+            <if test="remark != null  and remark != ''">remark,</if>
+            <if test="createTime != null ">create_time,</if>
+            <if test="createBy != null  and createBy != ''">create_by,</if>
+            <if test="updateTime != null ">update_time,</if>
+            <if test="updateBy != null  and updateBy != ''">update_by,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            now(),
+            now(),
+            <if test="note != null  and note != ''">#{note},</if>
+            <if test="enerclassid != null ">#{enerclassid},</if>
+            <if test="enerclassname != null  and enerclassname != ''">#{enerclassname},</if>
+            <if test="oprMan != null  and oprMan != ''">#{oprMan},</if>
+            <if test="modMan != null  and modMan != ''">#{modMan},</if>
+            <if test="remark != null  and remark != ''">#{remark},</if>
+            <if test="createTime != null ">#{createTime},</if>
+            <if test="createBy != null  and createBy != ''">#{createBy},</if>
+            <if test="updateTime != null ">#{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+        </trim>
+    </insert>
+
+    <update id="updateSysEnerclass" parameterType="SysEnerclass">
+        update sys_enerclass
+        <trim prefix="SET" suffixOverrides=",">
+            mod_time = now(),
+            update_time = now(),
+            <if test="enerclassname != null  and enerclassname != ''">enerclassname = #{enerclassname},</if>
+            <if test="modMan != null  and modMan != ''">mod_man = #{modMan},</if>
+            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="note != null  and note != ''">note = #{note},</if>
+        </trim>
+        where enerclassid = #{enerclassid}
+    </update>
+
+    <delete id="deleteSysEnerclassById" parameterType="Integer">
+        delete from sys_enerclass where enerclassid = #{enerclassid}
+    </delete>
+
+    <delete id="deleteSysEnerclassByIds" parameterType="String">
+        delete from sys_enerclass where enerclassid in
+        <foreach item="enerclassid" collection="array" open="(" separator="," close=")">
+            #{enerclassid}
+        </foreach>
+    </delete>
+
+    <select id="selectSameEnergyNameNum" parameterType="String" resultType="Integer">
+        select COUNT(enerclassid) from sys_enerclass where enerclassname = #{enerclassname}
+    </select>
+
+    <select id="selectIdByName" parameterType="String" resultType="Integer">
+        select enerclassid from sys_enerclass where enerclassname = #{enerclassname}
+    </select>
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/basicdata/SysEnergyMapper.xml b/zhitan-system/src/main/resources/mapper/basicdata/SysEnergyMapper.xml
new file mode 100644
index 0000000..9d17b9e
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/basicdata/SysEnergyMapper.xml
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.basicdata.mapper.SysEnergyMapper">
+
+    <resultMap type="SysEnergy" id="SysEnergyResult">
+        <result property="enername"    column="enername"    />
+        <result property="muid"    column="muid"    />
+        <result property="enerclassid"    column="enerclassid"    />
+        <result property="enerclassname"    column="enerclassname"    />
+        <result property="enersno"    column="enersno"    />
+        <result property="isstorage"    column="isstorage"    />
+        <result property="oprMan"    column="opr_man"    />
+        <result property="oprTime"    column="opr_time"    />
+        <result property="modMan"    column="mod_man"    />
+        <result property="modTime"    column="mod_time"    />
+        <result property="note"    column="note"    />
+        <result property="enerid"    column="enerid"    />
+        <result property="coefficient"    column="coefficient"    />
+        <result property="execdate"    column="execdate"    />
+        <result property="price"    column="price"    />
+        <result property="emissionFactors"    column="emission_factors"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectSysEnergyVo">
+        select enername, muid, enerclassid, enersno, isstorage, opr_man, opr_time, mod_man, mod_time, note, enerid, coefficient, execdate, price, emission_factors, create_by, create_time, update_by, update_time, remark from sys_energy
+    </sql>
+    <select id="getenerclassname" resultType="SysEnerclass">
+        select enerclassid,enerclassname from sys_enerclass order by create_time
+    </select>
+
+    <select id="selectSysEnergyList" parameterType="SysEnergy" resultMap="SysEnergyResult">
+        <include refid="selectSysEnergyVo"/>
+        <where>
+            <if test="enername != null  and enername != ''"> and enername like concat('%', #{enername}, '%')</if>
+            <if test="muid != null  and muid != ''"> and muid = #{muid}</if>
+            <if test="enerclassid != null  and enerclassid != ''"> and enerclassid = #{enerclassid}</if>
+            <if test="enersno != null  and enersno != ''"> and enersno = #{enersno}</if>
+            <if test="isstorage != null  and isstorage != ''"> and isstorage = #{isstorage}</if>
+            <if test="oprMan != null  and oprMan != ''"> and opr_man = #{oprMan}</if>
+            <if test="oprTime != null "> and opr_time = #{oprTime}</if>
+            <if test="modMan != null  and modMan != ''"> and mod_man = #{modMan}</if>
+            <if test="modTime != null "> and mod_time = #{modTime}</if>
+            <if test="note != null  and note != ''"> and note = #{note}</if>
+            <if test="enerid != null  and enerid != ''"> and enerid = #{enerid}</if>
+            <if test="coefficient != null  and coefficient != ''"> and coefficient = #{coefficient}</if>
+            <if test="execdate != null "> and execdate = #{execdate}</if>
+            <if test="price != null  and price != ''"> and price = #{price}</if>
+            <if test="emissionFactors != null  and emissionFactors != ''"> and emission_factors = #{emissionFactors}</if>
+        </where>
+        order by create_time
+    </select>
+
+    <select id="selectSysEnergyById" parameterType="Integer" resultMap="SysEnergyResult">
+        <include refid="selectSysEnergyVo"/>
+        where enerid = #{enerid}
+    </select>
+
+    <insert id="insertSysEnergy" parameterType="SysEnergy">
+        insert into sys_energy
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="enername != null">enername,</if>
+            <if test="muid != null">muid,</if>
+            <if test="enerclassid != null">enerclassid,</if>
+            <if test="enersno != null">enersno,</if>
+            <if test="isstorage != null">isstorage,</if>
+            <if test="oprMan != null and oprMan != ''">opr_man,</if>
+            <if test="oprTime != null">opr_time,</if>
+            <if test="modMan != null">mod_man,</if>
+            <if test="modTime != null">mod_time,</if>
+            <if test="note != null">note,</if>
+            <if test="enerid != null and enerid != ''">enerid,</if>
+            <if test="coefficient != null">coefficient,</if>
+            <if test="execdate != null">execdate,</if>
+            <if test="price != null">price,</if>
+            <if test="emissionFactors != null">emission_factors,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="enername != null">#{enername},</if>
+            <if test="muid != null">#{muid},</if>
+            <if test="enerclassid != null">#{enerclassid},</if>
+            <if test="enersno != null">#{enersno},</if>
+            <if test="isstorage != null">#{isstorage},</if>
+            <if test="oprMan != null and oprMan != ''">#{oprMan},</if>
+            <if test="oprTime != null">now(),</if>
+            <if test="modMan != null">#{modMan},</if>
+            <if test="modTime != null">now(),,</if>
+            <if test="note != null">#{note},</if>
+            <if test="enerid != null and enerid != ''">#{enerid},</if>
+            <if test="coefficient != null">#{coefficient},</if>
+            <if test="execdate != null">#{execdate},</if>
+            <if test="price != null">#{price},</if>
+            <if test="emissionFactors != null">#{emissionFactors},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateSysEnergy" parameterType="SysEnergy">
+        update sys_energy
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="muid != null">muid = #{muid},</if>
+            <if test="enerclassid != null">enerclassid = #{enerclassid},</if>
+            <if test="enername != null">enername = #{enername},</if>
+            <if test="enersno != null">enersno = #{enersno},</if>
+            <if test="isstorage != null">isstorage = #{isstorage},</if>
+            <if test="oprMan != null and oprMan != ''">opr_man = #{oprMan},</if>
+            <if test="oprTime != null">opr_time = now(),</if>
+            <if test="modMan != null">mod_man = #{modMan},</if>
+            <if test="modTime != null">mod_time = now(),</if>
+            <if test="note != null">note = #{note},</if>
+            <if test="enerid != null and enerid != ''">enerid = #{enerid},</if>
+            <if test="coefficient != null">coefficient = #{coefficient},</if>
+            <if test="execdate != null">execdate = #{execdate},</if>
+            <if test="price != null">price = #{price},</if>
+            <if test="emissionFactors != null">emission_factors = #{emissionFactors},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where enerid = #{enerid}
+    </update>
+
+    <delete id="deleteSysEnergyById" parameterType="String">
+        delete from sys_energy where enerid = #{enerid}
+    </delete>
+
+    <delete id="deleteSysEnergyByIds" parameterType="String">
+        delete from sys_energy where enerid in
+        <foreach item="enerid" collection="array" open="(" separator="," close=")">
+            #{enerid}
+        </foreach>
+    </delete>
+
+    <select id="getEnerClassid" parameterType="String" resultType="Integer">
+        select enerclassid from sys_enerclass where enerclassname = #{enerclassname}
+    </select>
+
+    <select id="selectSameEnergyNameNum" parameterType="String" resultType="Integer">
+        select COUNT(enerid) from sys_energy where enername = #{enername}
+    </select>
+
+    <select id="selectIdByName" parameterType="String" resultType="Integer">
+        select enerid from sys_energy where enername = #{enername}
+    </select>
+
+    <select id="getPriceCountByEnerid" parameterType="SysEnergy" resultType="Integer">
+        select COUNT(objectid) from sys_price where objectid = #{enerid} and objecttype = 1 and execdate = #{execdate}
+    </select>
+
+    <insert id="insertEnergyPrice" parameterType="SysEnergy">
+        insert into sys_price
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            mod_time,
+            opr_time,
+            <if test="oprMan != null  and oprMan != ''">opr_man,</if>
+            <if test="modMan != null  and modMan != ''">mod_man,</if>
+            objectid,
+            objecttype,
+            price,
+            execdate,
+            <if test="note != null  and note != ''">note,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            now(),
+            now(),
+            <if test="oprMan != null  and oprMan != ''">#{oprMan},</if>
+            <if test="modMan != null  and modMan != ''">#{modMan},</if>
+            <if test="enerid != null ">#{enerid},</if>
+            1,
+            #{price},
+            #{execdate},
+            <if test="note != null  and note != ''">#{pricenote},</if>
+        </trim>
+    </insert>
+
+    <update id="updateEnergyPrice" parameterType="SysEnergy" >
+        update sys_price
+        <trim prefix="SET" suffixOverrides=",">
+            mod_time = now(),
+            <if test="modMan != null  and modMan != ''">mod_man = #{modMan},</if>
+            price = #{price},
+            execdate = #{execdate},
+            <if test="note != null  and note != ''">note = #{pricenote},</if>
+        </trim>
+    </update>
+
+    <select id="getCoefficientCountByEnerid" parameterType="Integer" resultType="Integer">
+        select COUNT(enerid) from sys_enercoefficient where enerid = #{enerid}
+    </select>
+
+    <select id="listAllEnergyType" resultType="EnergyTypeModel">
+        select enername, enersno from sys_energy
+    </select>
+
+    <insert id="insertEnergyCoefficient" parameterType="SysEnergy">
+        insert into sys_enercoefficient
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            mod_time,
+            opr_time,
+            <if test="oprMan != null  and oprMan != ''">opr_man,</if>
+            <if test="modMan != null  and modMan != ''">mod_man,</if>
+            enerid,
+            coefficient,
+            coefficient2,
+            carbon_emission_coefficient,
+            execdate,
+            <if test="note != null  and note != ''">note,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            now(),
+            now(),
+            <if test="oprMan != null  and oprMan != ''">#{oprMan},</if>
+            <if test="modMan != null  and modMan != ''">#{modMan},</if>
+            <if test="enerid != null ">#{enerid},</if>
+            #{coefficient},
+            #{coefficient2},
+            #{carbonEmissionCoefficient},
+            #{coefficientexecdate},
+            <if test="note != null  and note != ''">#{coefficientnote},</if>
+        </trim>
+    </insert>
+
+    <update id="updateEnergyCoefficient" parameterType="SysEnergy" >
+        update sys_enercoefficient
+        <trim prefix="SET" suffixOverrides=",">
+            mod_time = now(),
+            <if test="modMan != null  and modMan != ''">mod_man = #{modMan},</if>
+            coefficient = #{coefficient},
+            coefficient2 = #{coefficient2},
+            execdate = #{coefficientexecdate},
+            carbon_emission_coefficient = #{carbonEmissionCoefficient},
+            <if test="note != null  and note != ''">note = #{coefficientnote},</if>
+        </trim>
+        where enerid = #{enerid}
+    </update>
+
+
+    <select id="selectSysEnergyPage"  resultMap="SysEnergyResult">
+        select a.*,b.enerclassname from sys_energy a left join sys_enerclass b on a.enerclassid = b.enerclassid
+        <where>
+            <if test="sysEnergy.enername != null  and sysEnergy.enername != ''"> and a.enername like concat('%', #{sysEnergy.enername}, '%')</if>
+            <if test="sysEnergy.enerclassid != null  and sysEnergy.enerclassid != ''"> and a.enerclassid = #{sysEnergy.enerclassid}</if>
+        </where>
+        order by a.create_time
+    </select>
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/comprehensivestatistics/ComprehensiveStatisticsMapper.xml b/zhitan-system/src/main/resources/mapper/comprehensivestatistics/ComprehensiveStatisticsMapper.xml
new file mode 100644
index 0000000..9ace200
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/comprehensivestatistics/ComprehensiveStatisticsMapper.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.comprehensivestatistics.mapper.ComprehensiveStatisticsMapper">
+    <resultMap id="dataItemMap" type="com.zhitan.comprehensivestatistics.domain.ComprehensiveStatistics">
+        <id column="index_id" property="indexId"/>
+        <id column="time_code" property="timeCode"/>
+        <id column="index_code" property="indexCode"/>
+        <id column="index_name" property="indexName"/>
+        <result column="begin_time" property="beginTime"/>
+        <result column="end_time" property="endTime"/>
+        <result column="data_time" property="dataTime"/>
+        <result column="value" property="value"/>
+        <result column="time_type" property="timeType"/>
+        <result column="quality" property="quality"/>
+        <result column="unit_id" property="unitId"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="remark" property="remark"/>
+        <result column="name" property="name"/>
+        <result column="index_type" property="indexType"/>
+        <result column="facility_name" property="facilityName"/>
+    </resultMap>
+    <resultMap id="comprehensiveMap" type="com.zhitan.comprehensivestatistics.domain.Comprehensive">
+        <result column="index_id" property="indexId"/>
+        <result column="index_name" property="indexName"/>
+        <result column="time_type" property="timeType"/>
+        <result column="value1" property="value1"/>
+        <result column="value2" property="value2"/>
+        <result column="value3" property="value3"/>
+        <result column="value4" property="value4"/>
+        <result column="value5" property="value5"/>
+        <result column="value6" property="value6"/>
+        <result column="value7" property="value7"/>
+        <result column="value8" property="value8"/>
+        <result column="value9" property="value9"/>
+        <result column="value10" property="value10"/>
+        <result column="value11" property="value11"/>
+        <result column="value12" property="value12"/>
+        <result column="value13" property="value13"/>
+        <result column="value14" property="value14"/>
+        <result column="value15" property="value15"/>
+        <result column="value16" property="value16"/>
+        <result column="value17" property="value17"/>
+        <result column="value18" property="value18"/>
+        <result column="value19" property="value19"/>
+        <result column="value20" property="value20"/>
+        <result column="value21" property="value21"/>
+        <result column="value22" property="value22"/>
+        <result column="value23" property="value23"/>
+        <result column="value24" property="value24"/>
+        <result column="value25" property="value25"/>
+        <result column="value26" property="value26"/>
+        <result column="value27" property="value27"/>
+        <result column="value28" property="value28"/>
+        <result column="value29" property="value29"/>
+        <result column="value30" property="value30"/>
+        <result column="value31" property="value31"/>
+    </resultMap>
+
+    <sql id="itemHead">
+        SELECT di.index_id,
+               di.time_code,
+               di.time_type,
+               di.begin_time,
+               di.end_time,
+               di.data_time,
+               di.value,
+               di.quality,
+               di.create_time,
+               di.update_time,
+               ci.code AS "index_code",
+               ci.name AS "index_name",
+               ci.unit_id AS unitId,
+               f.facility_name AS facilityName
+        FROM data_item di
+               LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+               LEFT JOIN facility_archives f ON f."id"=ci.equipment
+    </sql>
+    <select id="getStatisticsEnergy" resultType="com.zhitan.basicdata.domain.SysEnergy">
+        select enerid, enersno, enername,( SELECT d.dict_label FROM sys_dict_data d WHERE dict_type = 'sys_unit' AND d.dict_code	= e.muid) muidName
+        from sys_energy e
+               left join node_energy ne on e.enerid = ne.energy_id
+        where ne.node_id = #{nodeId};
+    </select>
+    <select id="getDatasByIndex" resultMap="dataItemMap">
+        SELECT
+            e.NAME,
+            e.index_code,
+            di.index_id,
+            di.time_code,
+            di.time_type,
+            di.begin_time,
+            di.end_time,
+            di.data_time,
+            di.VALUE,
+            di.quality,
+            di.create_time,
+            di.update_time
+        FROM
+            data_item di
+            LEFT JOIN energy_statistics e ON di.index_id = e.index_id
+        where di.time_code = #{timeCode}
+            AND di.index_id in
+            <foreach item="indexId" index="index" collection="indexIds" open="(" separator="," close=")">
+                #{indexId}
+            </foreach>
+    </select>
+    <select id="getEnergyByIndex" resultMap="dataItemMap">
+       select "name",index_id from  energy_statistics where index_type=#{indexType}
+    </select>
+    <select id="getFacilityArchives" resultType="com.zhitan.basicdata.domain.FacilityArchives">
+        SELECT ID,code,facility_name AS facilityName FROM facility_archives
+    </select>
+
+    <select id="getDatasIndex" resultMap="dataItemMap">
+        SELECT di.index_id,
+        di.time_code,
+        di.time_type,
+        di.begin_time,
+        di.end_time,
+        di.data_time,
+        di.value,
+        di.quality,
+        di.create_time,
+        di.update_time,
+        ci.code AS "index_code",
+        ci.name AS "index_name",
+        ci.unit_id AS unitId,
+        f.facility_name AS "facility_name"
+        FROM data_item di
+        LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+        LEFT JOIN facility_archives f ON f."id"=ci.equipment
+        where di.time_code = #{timeCode}
+        AND di.index_id in
+        <foreach item="indexId" index="index" collection="indexIds"
+                 open="(" separator="," close=")">
+            #{indexId}
+        </foreach>
+         and ci.equipment is not null
+        ORDER BY di."value" desc
+    </select>
+
+    <select id="getDatasByList" resultMap="dataItemMap">
+        SELECT
+            e.NAME,
+            e.index_code,
+            di.index_id,
+            di.time_code,
+            di.time_type,
+            di.begin_time,
+            di.end_time,
+            di.data_time,
+            di.VALUE,
+            di.quality,
+            di.create_time,
+            di.update_time
+        FROM
+            data_item di
+            LEFT JOIN energy_statistics e ON di.index_id = e.index_id
+        where di.time_type = #{timeType}
+            AND di.data_time &gt;= #{beginTime}
+            AND di.data_time &lt; #{endTime}
+            AND di.index_id in
+            <foreach item="indexId" index="index" collection="indexIds"
+                     open="(" separator="," close=")">
+                #{indexId}
+            </foreach>
+        ORDER BY di."value" desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/zhitan-system/src/main/resources/mapper/comprehensivestatistics/DailyComprehensiveMapper.xml b/zhitan-system/src/main/resources/mapper/comprehensivestatistics/DailyComprehensiveMapper.xml
new file mode 100644
index 0000000..0380045
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/comprehensivestatistics/DailyComprehensiveMapper.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.comprehensivestatistics.mapper.DailyComprehensiveMapper">
+    <resultMap id="dataItemMap" type="com.zhitan.comprehensivestatistics.domain.DailyComprehensive">
+        <result column="index_id" property="indexId"/>
+        <result column="index_name" property="indexName"/>
+        <result column="time_type" property="timeType"/>
+        <result column="time_code" property="timeCode"/>
+        <result column="unit_id" property="unitId"/>
+        <result column="value1" property="value1"/>
+        <result column="value2" property="value2"/>
+        <result column="value3" property="value3"/>
+        <result column="value4" property="value4"/>
+        <result column="value5" property="value5"/>
+        <result column="value6" property="value6"/>
+        <result column="value7" property="value7"/>
+        <result column="value8" property="value8"/>
+        <result column="value9" property="value9"/>
+        <result column="value10" property="value10"/>
+        <result column="value11" property="value11"/>
+        <result column="value12" property="value12"/>
+        <result column="value13" property="value13"/>
+        <result column="value14" property="value14"/>
+        <result column="value15" property="value15"/>
+        <result column="value16" property="value16"/>
+        <result column="value17" property="value17"/>
+        <result column="value18" property="value18"/>
+        <result column="value19" property="value19"/>
+        <result column="value20" property="value20"/>
+        <result column="value21" property="value21"/>
+        <result column="value22" property="value22"/>
+        <result column="value23" property="value23"/>
+        <result column="value0" property="value0"/>
+    </resultMap>
+    <!--鍏ㄥ巶鑳借�楃粺璁�-->
+    <select id="getdailyComprehensiveList" resultMap="dataItemMap">
+        SELECT
+            aa.index_id,
+            aa.index_name,
+            <foreach item="item" index="index" collection="dataList">
+                COALESCE ( MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ), null ) AS ${item.value},
+            </foreach>
+            aa.time_type,
+            aa.order_num orderNum
+        FROM
+            (
+            SELECT
+                ni.index_id,
+                ei."name" AS "index_name",
+                di."value",
+                di.data_time,
+                di.time_type,
+                mn.order_num
+            FROM
+                model_node mn
+                LEFT JOIN node_index ni ON ni.node_id = mn.node_id
+                LEFT JOIN energy_index ei ON ei.index_id = ni.index_id
+                LEFT JOIN data_item di ON ni.index_id = di.index_id
+            WHERE
+                mn.parent_id = #{nodeId}
+                AND di.data_time >= #{beginTime}
+                AND di.data_time &lt; #{endTime}
+                AND di.time_type = #{timeType}
+                <if test="indexStorageId !='' and indexStorageId !=null">
+                    and ei.energy_id=#{indexStorageId}
+                </if>
+            ) aa
+        GROUP BY
+            aa.index_id, aa.index_name, aa.time_type, aa.order_num
+        ORDER BY aa.order_num ASC
+    </select>
+
+    <select id="getListChart" resultMap="dataItemMap">
+        SELECT
+            di.index_id,
+            ci.name AS "index_name",
+            ci.unit_id,
+            di."value",
+            di.data_time,
+            di.time_type,
+            di.time_code
+        FROM
+        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+        WHERE
+            di.index_id =#{indexId}
+            AND di.data_time &lt; #{endTime}
+            AND di.data_time >= #{beginTime}
+            AND di.time_type = #{timeType}
+        ORDER BY data_time ASC
+    </select>
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/dataitem/DataItemMapper.xml b/zhitan-system/src/main/resources/mapper/dataitem/DataItemMapper.xml
new file mode 100644
index 0000000..327e8d1
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/dataitem/DataItemMapper.xml
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.dataitem.mapper.DataItemMapper">
+    <resultMap type="StagseDataEntry" id="stagseDataEntryResult">
+        <result property="code" column="code"/>
+        <result property="name" column="name"/>
+        <result property="indexId" column="index_id"/>
+        <result property="timeType" column="time_type"/>
+        <result property="unitId" column="unit_id"/>
+        <result property="calcType" column="calc_type"/>
+        <result property="value" column="value"/>
+        <result property="timeCode" column="time_code"/>
+        <result property="dataTime" column="data_time"/>
+    </resultMap>
+
+    <select id="getSettingIndex" parameterType="StagseDataEntry" resultMap="stagseDataEntryResult">
+
+        SELECT
+        ei.index_id,
+        code,
+        NAME,
+        si.time_type,
+        ei.unit_id
+        FROM
+        energy_index ei
+        LEFT JOIN node_index ni ON ei.index_id = ni.index_id
+        LEFT JOIN index_storage si ON si.index_id = ei.index_id
+        WHERE
+        not EXISTS ( SELECT index_id FROM data_item WHERE index_id =ei.index_id and  data_time >= #{beginTime} AND data_time &lt;= #{endTime}) AND
+        ni.node_id =  #{nodeId}
+        and si.time_type = #{timeType}
+        AND si.calc_type = #{calcType}
+   </select>
+    <select id="getSettingEdit" parameterType="StagseDataEntry" resultMap="stagseDataEntryResult">
+        SELECT
+            ei.index_id,
+            code,
+            NAME,
+            si.time_type,
+            ei.unit_id,
+            di.value,
+            di.data_time
+        FROM
+            energy_index ei
+            LEFT JOIN node_index ni ON ei.index_id = ni.index_id
+            LEFT JOIN index_storage si ON si.index_id = ei.index_id
+            LEFT JOIN data_item di on di.index_id=ei.index_id
+        WHERE
+            ni.node_id = #{nodeId}
+            and si.time_type = #{timeType}
+            AND si.calc_type = #{calcType}
+            AND data_time &gt;= #{beginTime}
+            AND data_time &lt;= #{endTime}
+    </select>
+    <select id="stagseDataByCode" parameterType="StagseDataEntry" resultMap="stagseDataEntryResult">
+        SELECT
+            ei.index_id,
+            code,
+            NAME,
+            ei.unit_id,
+            di.value,
+            di.data_time,
+            di.time_type
+        FROM
+            energy_index ei
+            LEFT JOIN node_index ni ON ei.index_id = ni.index_id
+            LEFT JOIN data_item di on di.index_id=ei.index_id
+        WHERE
+            ni.node_id = #{nodeId}
+            and ei.code IN
+            <foreach item="indexCode" index="index" collection="indexCodes"
+                     open="(" separator="," close=")">
+                #{indexCode}
+            </foreach>
+            and di.time_type = #{timeType}
+            AND di.data_time &gt;= #{beginTime}
+            AND di.data_time &lt;= #{endTime}
+    </select>
+
+    <select id="getDataItemTimeRangeInforByIndexIds" resultType="com.zhitan.realtimedata.domain.DataItem">
+        SELECT
+        index_id indexId,
+        data_time dataTime,
+        "value"
+        FROM
+        "data_item"
+        WHERE
+        index_id IN
+        <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
+            #{indexId}
+        </foreach>
+            AND ( data_time &gt;= #{beginTime} AND data_time &lt; #{endTime} )
+            AND time_type = #{timeType}
+    </select>
+
+    <select id="getDataItemTimeRangeValueByIndexIds" resultType="java.math.BigDecimal">
+        SELECT
+            COALESCE (SUM ( "value" ), 0)
+        FROM
+            "data_item"
+        WHERE
+            index_id IN
+            <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
+                #{indexId}
+            </foreach>
+            AND ( data_time &gt;= #{beginTime} AND data_time &lt; #{endTime} )
+            AND time_type = #{timeType}
+    </select>
+
+    <select id="getDataItemInforByIndexIds" resultType="com.zhitan.realtimedata.domain.DataItem">
+        SELECT
+        index_id indexId,
+        data_time dataTime,
+        "value"
+        FROM
+        "data_item"
+        WHERE
+        index_id IN
+        <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
+            #{indexId}
+            </foreach>
+            AND time_code = #{timeCode}
+    </select>
+
+    <select id="getDataItemValueByIndexIds" resultType="java.math.BigDecimal">
+        SELECT
+            COALESCE (SUM ( "value" ), 0)
+        FROM
+            "data_item"
+        WHERE
+            index_id IN
+            <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
+                #{indexId}
+            </foreach>
+            AND time_code = #{timeCode}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/zhitan-system/src/main/resources/mapper/energyIndicators/EnergyIndicatorsMapper.xml b/zhitan-system/src/main/resources/mapper/energyIndicators/EnergyIndicatorsMapper.xml
new file mode 100644
index 0000000..1f377ad
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/energyIndicators/EnergyIndicatorsMapper.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.energyIndicators.mapper.EnergyIndicatorsMapper">
+
+    <resultMap type="EnergyIndicators" id="EnergyIndicatorsResult">
+        <result property="nodeId"    column="node_id"    />
+        <result property="timeType"    column="time_type"    />
+        <result property="dataTime"    column="data_time"    />
+        <result property="name"    column="name"    />
+        <result property="number"    column="number"    />
+        <result property="unit"    column="unit"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="energyType"    column="energy_type"    />
+        <result property="indicatorsType"    column="indicators_type"    />
+        <result property="energyIndicatorsId"    column="energy_indicators_id"    />
+        <result property="nodeName"    column="node_name"    />
+    </resultMap>
+
+    <sql id="selectEnergyIndicatorsVo">
+        select node_id, time_type, data_time, name, number, unit, del_flag, create_by, create_time, update_by, update_time, remark,
+               energy_type, indicators_type, energy_indicators_id, node_name from energy_indicators
+    </sql>
+
+    <select id="selectEnergyIndicatorsList" parameterType="EnergyIndicators" resultMap="EnergyIndicatorsResult">
+        <include refid="selectEnergyIndicatorsVo"/>
+        <where>
+            <if test="nodeId != null  and nodeId != ''"> and node_id = #{nodeId}</if>
+            <if test="timeType != null  and timeType != ''"> and time_type = #{timeType}</if>
+            <if test="dataTime != null  and dataTime != ''"> and data_time = #{dataTime}</if>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="number != null "> and number = #{number}</if>
+            <if test="unit != null  and unit != ''"> and unit = #{unit}</if>
+            <if test="energyType != null  and energyType != ''"> and energy_type = #{energyType}</if>
+            <if test="indicatorsType != null  and indicatorsType != ''"> and indicators_type = #{indicatorsType}</if>
+            <if test="energyIndicatorsId != null  and energyIndicatorsId != ''"> and energy_indicators_id = #{energyIndicatorsId}</if>
+            <if test="nodeName != null  and nodeName != ''"> and node_name like concat('%', #{nodeName}, '%')</if>
+        </where>
+    </select>
+
+    <select id="selectEnergyIndicatorsByNodeId" parameterType="String" resultMap="EnergyIndicatorsResult">
+        <include refid="selectEnergyIndicatorsVo"/>
+        where energy_indicators_id = #{nodeId}
+    </select>
+
+    <insert id="insertEnergyIndicators" parameterType="EnergyIndicators">
+        insert into energy_indicators
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="nodeId != null">node_id,</if>
+            <if test="timeType != null">time_type,</if>
+            <if test="dataTime != null">data_time,</if>
+            <if test="name != null">name,</if>
+            <if test="number != null">number,</if>
+            <if test="unit != null">unit,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+            <if test="energyType != null">energy_type,</if>
+            <if test="indicatorsType != null">indicators_type,</if>
+            <if test="energyIndicatorsId != null and energyIndicatorsId != ''">energy_indicators_id,</if>
+            <if test="nodeName != null">node_name,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="nodeId != null">#{nodeId},</if>
+            <if test="timeType != null">#{timeType},</if>
+            <if test="dataTime != null">#{dataTime},</if>
+            <if test="name != null">#{name},</if>
+            <if test="number != null">#{number},</if>
+            <if test="unit != null">#{unit},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="energyType != null">#{energyType},</if>
+            <if test="indicatorsType != null">#{indicatorsType},</if>
+            <if test="energyIndicatorsId != null and energyIndicatorsId != ''">#{energyIndicatorsId},</if>
+            <if test="nodeName != null">#{nodeName},</if>
+         </trim>
+    </insert>
+
+    <update id="updateEnergyIndicators" parameterType="EnergyIndicators">
+        update energy_indicators
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="timeType != null">time_type = #{timeType},</if>
+            <if test="dataTime != null">data_time = #{dataTime},</if>
+            <if test="name != null">name = #{name},</if>
+            <if test="number != null">number = #{number},</if>
+            <if test="unit != null">unit = #{unit},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="energyType != null">energy_type = #{energyType},</if>
+            <if test="indicatorsType != null">indicators_type = #{indicatorsType},</if>
+            <if test="energyIndicatorsId != null and energyIndicatorsId != ''">energy_indicators_id = #{energyIndicatorsId},</if>
+            <if test="nodeName != null">node_name = #{nodeName},</if>
+        </trim>
+        where energy_indicators_id = #{energyIndicatorsId}
+    </update>
+
+    <delete id="deleteEnergyIndicatorsByEnergyIndicatorsId" parameterType="String">
+        delete from energy_indicators where energy_indicators_id = #{energyIndicatorsId}
+    </delete>
+
+    <delete id="deleteEnergyIndicatorsByEnergyIndicatorsIds" parameterType="String">
+        delete from energy_indicators where energy_indicators_id in
+        <foreach item="energyIndicatorsId" collection="array" open="(" separator="," close=")">
+            #{energyIndicatorsId}
+        </foreach>
+    </delete>
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/gatewaysetting/GatewaySettingMapper.xml b/zhitan-system/src/main/resources/mapper/gatewaysetting/GatewaySettingMapper.xml
new file mode 100644
index 0000000..0b19ef1
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/gatewaysetting/GatewaySettingMapper.xml
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.gatewaysetting.mapper.GatewaySettingMapper">
+
+    <resultMap type="GatewaySetting" id="GatewaySettingResult">
+        <result property="id"    column="id"    />
+        <result property="gatewayNum"    column="gateway_num"    />
+        <result property="gatewayName"    column="gateway_name"    />
+        <result property="specsModel"    column="specs_model"    />
+        <result property="installLocation"    column="install_location"    />
+        <result property="ipAdd"    column="ip_add"    />
+        <result property="runStatus"    column="run_status"    />
+        <result property="hbtTime"    column="hbt_time"    />
+        <result property="deviceNum"    column="device_num"    />
+        <result property="ptNum"    column="pt_num"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectGatewaySettingVo">
+        select id, gateway_num, gateway_name, specs_model, install_location, ip_add, run_status, hbt_time, device_num, pt_num, create_by, create_time, update_by, update_time from gateway_setting
+    </sql>
+
+    <select id="selectGatewaySettingList" parameterType="GatewaySetting" resultMap="GatewaySettingResult">
+        <include refid="selectGatewaySettingVo"/>
+        <where>
+            <if test="gatewayNum != null  and gatewayNum != ''"> and gateway_num = #{gatewayNum}</if>
+            <if test="gatewayName != null  and gatewayName != ''"> and gateway_name like concat('%', #{gatewayName}, '%')</if>
+            <if test="specsModel != null  and specsModel != ''"> and specs_model = #{specsModel}</if>
+            <if test="installLocation != null  and installLocation != ''"> and install_location = #{installLocation}</if>
+            <if test="ipAdd != null  and ipAdd != ''"> and ip_add = #{ipAdd}</if>
+            <if test="runStatus != null  and runStatus != ''"> and run_status = #{runStatus}</if>
+            <if test="hbtTime != null "> and hbt_time = #{hbtTime}</if>
+            <if test="deviceNum != null  and deviceNum != ''"> and device_num = #{deviceNum}</if>
+            <if test="ptNum != null  and ptNum != ''"> and pt_num = #{ptNum}</if>
+        </where>
+    </select>
+
+    <select id="selectGatewaySettingById" parameterType="String" resultMap="GatewaySettingResult">
+        <include refid="selectGatewaySettingVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertGatewaySetting" parameterType="GatewaySetting">
+        insert into gateway_setting
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null and id != ''">id,</if>
+            <if test="gatewayNum != null">gateway_num,</if>
+            <if test="gatewayName != null">gateway_name,</if>
+            <if test="specsModel != null">specs_model,</if>
+            <if test="installLocation != null">install_location,</if>
+            <if test="ipAdd != null">ip_add,</if>
+            <if test="runStatus != null">run_status,</if>
+            <if test="hbtTime != null">hbt_time,</if>
+            <if test="deviceNum != null">device_num,</if>
+            <if test="ptNum != null">pt_num,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null and id != ''">#{id},</if>
+            <if test="gatewayNum != null">#{gatewayNum},</if>
+            <if test="gatewayName != null">#{gatewayName},</if>
+            <if test="specsModel != null">#{specsModel},</if>
+            <if test="installLocation != null">#{installLocation},</if>
+            <if test="ipAdd != null">#{ipAdd},</if>
+            <if test="runStatus != null">#{runStatus},</if>
+            <if test="hbtTime != null">#{hbtTime},</if>
+            <if test="deviceNum != null">#{deviceNum},</if>
+            <if test="ptNum != null">#{ptNum},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+        </trim>
+    </insert>
+
+    <update id="updateGatewaySetting" parameterType="GatewaySetting">
+        update gateway_setting
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="gatewayNum != null">gateway_num = #{gatewayNum},</if>
+            <if test="gatewayName != null">gateway_name = #{gatewayName},</if>
+            <if test="specsModel != null">specs_model = #{specsModel},</if>
+            <if test="installLocation != null">install_location = #{installLocation},</if>
+            <if test="ipAdd != null">ip_add = #{ipAdd},</if>
+            <if test="runStatus != null">run_status = #{runStatus},</if>
+            <if test="hbtTime != null">hbt_time = #{hbtTime},</if>
+            <if test="deviceNum != null">device_num = #{deviceNum},</if>
+            <if test="ptNum != null">pt_num = #{ptNum},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteGatewaySettingById" parameterType="String">
+        delete from gateway_setting where id = #{id}
+    </delete>
+
+    <delete id="deleteGatewaySettingByIds" parameterType="String">
+        delete from gateway_setting where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <select id="checkOne" resultType="int" parameterType="GatewaySetting">
+        select count(1) from gateway_setting
+        where
+        gateway_num=#{gatewayNum}
+        <if test="id!=null and id !=''">
+            and id != #{id}
+        </if>
+
+    </select>
+
+    <select id="ptNum" resultType="com.zhitan.gatewaysetting.domain.GatewaySetting" parameterType="GatewaySetting">
+            select sum(device_num) device_num,sum(pt_num) pt_num from gateway_setting
+        <where>
+        <if test="gatewayNum != null  and gatewayNum != ''"> and gateway_num = #{gatewayNum}</if>
+        <if test="gatewayName != null  and gatewayName != ''"> and gateway_name like concat('%', #{gatewayName}, '%')</if>
+        <if test="specsModel != null  and specsModel != ''"> and specs_model = #{specsModel}</if>
+        <if test="installLocation != null  and installLocation != ''"> and install_location = #{installLocation}</if>
+        <if test="ipAdd != null  and ipAdd != ''"> and ip_add = #{ipAdd}</if>
+        <if test="runStatus != null  and runStatus != ''"> and run_status = #{runStatus}</if>
+        <if test="hbtTime != null "> and hbt_time = #{hbtTime}</if>
+        <if test="deviceNum != null  and deviceNum != ''"> and device_num = #{deviceNum}</if>
+        <if test="ptNum != null  and ptNum != ''"> and pt_num = #{ptNum}</if>
+    </where>
+    </select>
+
+    <update id="addNum" parameterType="GatewaySetting">
+        update gateway_setting set device_num = COALESCE(NULLIF(device_num,null),'0')+ #{deviceNum}, pt_num = COALESCE(NULLIF(pt_num,null),'0')+#{ptNum},update_time=now(),update_by=#{updateBy}
+        where id = #{id}
+    </update>
+
+    <update id="subNum" parameterType="GatewaySetting">
+        update gateway_setting set device_num =
+            CASE
+
+                WHEN COALESCE(NULLIF(device_num,null),'0')- #{deviceNum} > 0 THEN
+                    COALESCE(NULLIF(device_num,null),'0')- #{deviceNum} ELSE 0
+                END
+            , pt_num =
+                CASE
+
+                    WHEN COALESCE(NULLIF(pt_num,null),'0')-#{ptNum} > 0 THEN
+                        COALESCE(NULLIF(pt_num,null),'0')-#{ptNum} ELSE 0
+                    END,update_time=now(),update_by=#{updateBy}
+        where id = #{id}
+    </update>
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/keyequipment/DailyKeyEquipmentMapper.xml b/zhitan-system/src/main/resources/mapper/keyequipment/DailyKeyEquipmentMapper.xml
new file mode 100644
index 0000000..22c3ec2
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/keyequipment/DailyKeyEquipmentMapper.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.keyequipment.mapper.DailyKeyEquipmentMapper">
+    <resultMap id="dataItemMap" type="com.zhitan.keyequipment.domain.DailyKeyEquipment">
+        <result column="index_id" property="indexId"/>
+        <result column="index_name" property="indexName"/>
+        <result column="time_type" property="timeType"/>
+        <result column="time_code" property="timeCode"/>
+        <result column="unit_id" property="unitId"/>
+        <result column="value1" property="value1"/>
+        <result column="value2" property="value2"/>
+        <result column="value3" property="value3"/>
+        <result column="value4" property="value4"/>
+        <result column="value5" property="value5"/>
+        <result column="value6" property="value6"/>
+        <result column="value7" property="value7"/>
+        <result column="value8" property="value8"/>
+        <result column="value9" property="value9"/>
+        <result column="value10" property="value10"/>
+        <result column="value11" property="value11"/>
+        <result column="value12" property="value12"/>
+        <result column="value13" property="value13"/>
+        <result column="value14" property="value14"/>
+        <result column="value15" property="value15"/>
+        <result column="value16" property="value16"/>
+        <result column="value17" property="value17"/>
+        <result column="value18" property="value18"/>
+        <result column="value19" property="value19"/>
+        <result column="value20" property="value20"/>
+        <result column="value21" property="value21"/>
+        <result column="value22" property="value22"/>
+        <result column="value23" property="value23"/>
+        <result column="value0" property="value0"/>
+    </resultMap>
+    <select id="getdailyKeyEquipmentList" resultMap="dataItemMap">
+        SELECT
+        aa.index_id,
+        aa.index_name,
+        <foreach item="item" index="index" collection="dataList">
+            MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ) AS ${item.value},
+        </foreach>
+        aa.time_type
+        FROM
+        (
+        SELECT
+        ci.index_id,
+        ci.NAME  AS "index_name",
+        di."value",
+        di.data_time,
+        di.time_type
+        FROM
+        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+        LEFT JOIN facility_archives f ON f."id"=ci.equipment
+        WHERE
+        di.data_time >= #{beginTime}
+        AND di.data_time &lt; #{endTime}
+        AND di.index_id IN <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
+        AND di.time_type = #{timeType}
+        <if test="indexStorageId !='' and indexStorageId !=null">
+            and ci.equipment=#{indexStorageId}
+        </if>
+        ) aa
+        GROUP BY
+        aa.index_id,aa.index_name,aa.time_type
+    </select>
+
+    <select id="getListChart" resultMap="dataItemMap">
+        SELECT
+            di.index_id,
+            ci.name AS "index_name",
+            ci.unit_id,
+            di."value",
+            di.data_time,
+            di.time_type,
+            di.time_code
+        FROM
+        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+        WHERE
+            di.index_id =#{indexId}
+            AND di.data_time &lt; #{endTime}
+            AND di.data_time >= #{beginTime}
+            AND di.time_type = #{timeType}
+        order by di.data_time
+    </select>
+    <select id="getFacilityArchives" resultType="com.zhitan.basicdata.domain.FacilityArchives">
+        SELECT ID,code,facility_name AS facilityName FROM facility_archives
+    </select>
+    <select id="getPointFacility" resultType="com.zhitan.basicdata.domain.FacilityArchives">
+        SELECT ID,code,facility_name AS facilityName FROM facility_archives where point_flag='Y'
+    </select>
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/keyequipment/MonthlyKeyEquipmentMapper.xml b/zhitan-system/src/main/resources/mapper/keyequipment/MonthlyKeyEquipmentMapper.xml
new file mode 100644
index 0000000..19f8a86
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/keyequipment/MonthlyKeyEquipmentMapper.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.keyequipment.mapper.MonthlyKeyEquipmentMapper">
+    <resultMap id="dataItemMap" type="com.zhitan.keyequipment.domain.MonthlyKeyEquipment">
+        <result column="index_id" property="indexId"/>
+        <result column="index_name" property="indexName"/>
+        <result column="time_type" property="timeType"/>
+        <result column="time_code" property="timeCode"/>
+        <result column="unit_id" property="unitId"/>
+        <result column="value1" property="value1"/>
+        <result column="value2" property="value2"/>
+        <result column="value3" property="value3"/>
+        <result column="value4" property="value4"/>
+        <result column="value5" property="value5"/>
+        <result column="value6" property="value6"/>
+        <result column="value7" property="value7"/>
+        <result column="value8" property="value8"/>
+        <result column="value9" property="value9"/>
+        <result column="value10" property="value10"/>
+        <result column="value11" property="value11"/>
+        <result column="value12" property="value12"/>
+        <result column="value13" property="value13"/>
+        <result column="value14" property="value14"/>
+        <result column="value15" property="value15"/>
+        <result column="value16" property="value16"/>
+        <result column="value17" property="value17"/>
+        <result column="value18" property="value18"/>
+        <result column="value19" property="value19"/>
+        <result column="value20" property="value20"/>
+        <result column="value21" property="value21"/>
+        <result column="value22" property="value22"/>
+        <result column="value23" property="value23"/>
+        <result column="value24" property="value24"/>
+        <result column="value25" property="value25"/>
+        <result column="value26" property="value26"/>
+        <result column="value27" property="value27"/>
+        <result column="value28" property="value28"/>
+        <result column="value29" property="value29"/>
+        <result column="value30" property="value30"/>
+        <result column="value31" property="value31"/>
+    </resultMap>
+    <!--鍏ㄥ巶鑳借�楃粺璁�-->
+    <select id="getMonthlyKeyEquipmentList" resultMap="dataItemMap">
+        SELECT
+        aa.index_id,
+        aa.index_name,
+        <foreach item="item" index="index" collection="dataList">
+            MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ) AS ${item.value},
+        </foreach>
+        aa.time_type
+        FROM
+        (
+        SELECT
+        ci.index_id,
+        ci.NAME  AS "index_name",
+        di."value",
+        di.data_time,
+        di.time_type
+        FROM
+        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+        LEFT JOIN facility_archives f ON f."id"=ci.equipment
+        WHERE
+        di.data_time >= #{beginTime}
+        AND di.data_time &lt; #{endTime}
+        AND di.index_id IN <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
+        AND di.time_type = #{timeType}
+        <if test="indexStorageId !='' and indexStorageId !=null">
+            and ci.equipment=#{indexStorageId}
+        </if>
+        ) aa
+        GROUP BY
+        aa.index_id,aa.index_name,aa.time_type
+    </select>
+
+    <select id="getListChart" resultMap="dataItemMap">
+        SELECT
+            di.index_id,
+            ci.name AS "index_name",
+            ci.unit_id,
+            di."value",
+            di.data_time,
+            di.time_type,
+            di.time_code
+        FROM
+        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+        WHERE
+            di.index_id =#{indexId}
+            AND di.data_time >= #{beginTime}
+            AND di.data_time &lt; #{endTime}
+            AND di.time_type = #{timeType}
+        order by di.data_time
+    </select>
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/keyequipment/YearKeyEquipmentMapper.xml b/zhitan-system/src/main/resources/mapper/keyequipment/YearKeyEquipmentMapper.xml
new file mode 100644
index 0000000..6a2316e
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/keyequipment/YearKeyEquipmentMapper.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.keyequipment.mapper.YearKeyEquipmentMapper">
+    <resultMap id="dataItemMap" type="com.zhitan.keyequipment.domain.YearKeyEquipment">
+        <result column="index_id" property="indexId"/>
+        <result column="index_name" property="indexName"/>
+        <result column="time_type" property="timeType"/>
+        <result column="time_code" property="timeCode"/>
+        <result column="unit_id" property="unitId"/>
+        <result column="value1" property="value1"/>
+        <result column="value2" property="value2"/>
+        <result column="value3" property="value3"/>
+        <result column="value4" property="value4"/>
+        <result column="value5" property="value5"/>
+        <result column="value6" property="value6"/>
+        <result column="value7" property="value7"/>
+        <result column="value8" property="value8"/>
+        <result column="value9" property="value9"/>
+        <result column="value10" property="value10"/>
+        <result column="value11" property="value11"/>
+        <result column="value12" property="value12"/>
+    </resultMap>
+    <!--鍏ㄥ巶鑳借�楃粺璁�-->
+    <select id="getYearKeyEquipmentList" resultMap="dataItemMap">
+        SELECT
+        aa.index_id,
+        aa.index_name,
+        <foreach item="item" index="index" collection="dataList">
+            MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ) AS ${item.value},
+        </foreach>
+        aa.time_type
+        FROM
+        (
+        SELECT
+        ci.index_id,
+        ci.NAME  AS "index_name",
+        di."value",
+        di.data_time,
+        di.time_type
+        FROM
+        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+        LEFT JOIN facility_archives f ON f."id"=ci.equipment
+        WHERE
+        di.data_time >= #{beginTime}
+        AND di.data_time &lt; #{endTime}
+        AND di.index_id IN <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
+        AND di.time_type = #{timeType}
+        <if test="indexStorageId !='' and indexStorageId !=null">
+            and ci.equipment=#{indexStorageId}
+        </if>
+        ) aa
+        GROUP BY
+        aa.index_id,aa.index_name,aa.time_type
+    </select>
+
+    <select id="getListChart" resultMap="dataItemMap">
+        SELECT
+            di.index_id,
+            ci.name AS "index_name",
+            ci.unit_id,
+            di."value",
+            di.data_time,
+            di.time_type,
+            di.time_code
+        FROM
+        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+        WHERE
+            di.index_id =#{indexId}
+            AND di.data_time &lt; #{endTime}
+            AND di.data_time >= #{beginTime}
+            AND di.time_type = #{timeType}
+        order by di.data_time
+    </select>
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/meter/MeterImplementMapper.xml b/zhitan-system/src/main/resources/mapper/meter/MeterImplementMapper.xml
new file mode 100644
index 0000000..3116319
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/meter/MeterImplementMapper.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.meter.mapper.MetersMapper">
+
+    <resultMap type="MeterImplements" id="MeterImplementResult">
+        <result property="id"    column="id"    />
+        <result property="code"    column="code"    />
+        <result property="meterName"    column="meter_name"    />
+        <result property="meterType"    column="meter_type"    />
+        <result property="modelNumber"    column="model_number"    />
+        <result property="measureRange"    column="measure_range"    />
+        <result property="manufacturer"    column="manufacturer"    />
+        <result property="personCharge"    column="person_charge"    />
+        <result property="installactionLocation"    column="installaction_location"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="checkCycle"    column="check_cycle"    />
+        <result property="reminderCycle"    column="reminder_cycle"    />
+        <result property="meterStatus"    column="meter_status"    />
+        <result property="delFlage"    column="del_flage"    />
+        <result property="remark"    column="remark"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="txflage"    column="txflage"    />
+        <result property="putrunTime"    column="putrun_time"    />
+    </resultMap>
+
+
+    <sql id="selectMeterImplementVo">
+        SELECT
+            mi.meter_name
+        FROM
+            meter_implement mi
+
+    </sql>
+
+    <select id="listMeterData" resultType="com.zhitan.meter.domain.MeterImplements">
+        <include refid="selectMeterImplementVo"/>
+            WHERE
+            mi.meter_type = #{meterType}
+            GROUP BY
+            meter_name
+
+    </select>
+
+    <sql id="selectMeterConfigurationVo">
+        SELECT
+            mi."id",
+            mi.meter_name,
+            ei.index_id,
+            ei.code,
+            ei."name"
+        FROM
+            meter_implement mi
+            LEFT JOIN
+            energy_index ei
+            ON mi."id" = ei.meter_id
+
+    </sql>
+    <select id="listConfigurationData" resultType="com.zhitan.meter.domain.MeterParam" parameterType="string">
+        <include refid="selectMeterConfigurationVo"/>
+            WHERE
+                mi.meter_type = #{meterType}
+            AND ei.index_type = #{indexType}
+    </select>
+
+
+    <select id="listConfigData" resultType="com.zhitan.meter.domain.MeterConfig" parameterType="string">
+        SELECT
+            mc.id,
+            mc.table_name,
+            mc.step_min,
+            mc.step_max,
+            mc.max_value,
+            mc.min_value,
+            mc.index_type,
+            mc.table_value
+        FROM
+            meter_config mc
+        WHERE
+            mc.index_type = #{indexType}
+
+    </select>
+
+
+</mapper>
\ No newline at end of file
diff --git a/zhitan-system/src/main/resources/mapper/model/CalcFunctionMapper.xml b/zhitan-system/src/main/resources/mapper/model/CalcFunctionMapper.xml
new file mode 100644
index 0000000..d9c32f5
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/model/CalcFunctionMapper.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.model.mapper.CalcFunctionMapper">
+
+    <resultMap type="com.zhitan.model.domain.CalcFunction" id="CalcFunctionResult">
+        <result property="id" column="id"/>
+        <result property="info" column="info"/>
+        <result property="funcName" column="func_name"/>
+        <result property="funcText" column="func_text"/>
+    </resultMap>
+
+    <sql id="selectCalcFunctionVo">
+        select id, func_name, func_text, info
+        from calc_function
+    </sql>
+
+    <select id="selectCalcFunctionList" parameterType="com.zhitan.model.domain.CalcFunction" resultMap="CalcFunctionResult">
+        <include refid="selectCalcFunctionVo"/>
+        <where>
+            <if test="funcName != null  and funcName != ''">and func_name like concat('%', #{funcName}, '%')</if>
+        </where>
+    </select>
+
+    <select id="selectCalcFunctionById" parameterType="String" resultMap="CalcFunctionResult">
+        <include refid="selectCalcFunctionVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertCalcFunction" parameterType="com.zhitan.model.domain.CalcFunction">
+        insert into calc_function
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">id,</if>
+            <if test="funcName != null  and funcName != ''">func_name,</if>
+            <if test="funcText != null  and funcText != ''">func_text,</if>
+            <if test="info != null  and info != ''">info,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">#{id},</if>
+            <if test="funcName != null  and funcName != ''">#{funcName},</if>
+            <if test="funcText != null  and funcText != ''">#{funcText},</if>
+            <if test="info != null  and info != ''">#{info},</if>
+        </trim>
+    </insert>
+
+    <update id="updateCalcFunction" parameterType="com.zhitan.model.domain.CalcFunction">
+        update calc_function
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="info != null  and info != ''">info = #{info},</if>
+            <if test="funcName != null  and funcName != ''">func_name = #{funcName},</if>
+            <if test="funcText != null  and funcText != ''">func_text = #{funcText},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteCalcFunctionById" parameterType="String">
+        delete
+        from calc_function
+        where id = #{id}
+    </delete>
+
+    <delete id="deleteCalcFunctionByIds" parameterType="String">
+        delete from calc_function where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/model/DaqTemplateMapper.xml b/zhitan-system/src/main/resources/mapper/model/DaqTemplateMapper.xml
new file mode 100644
index 0000000..7259945
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/model/DaqTemplateMapper.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.model.mapper.DaqTemplateMapper">
+
+    <resultMap type="com.zhitan.model.domain.DaqTemplate" id="DaqTemplateResult">
+        <result property="id" column="id"/>
+        <result property="code" column="code"/>
+        <result property="name" column="name"/>
+        <result property="deviceType" column="device_type"/>
+        <result property="unit" column="unit"/>
+    </resultMap>
+
+    <sql id="selectDaqTemplateVo">
+        select id, code, name, device_type, unit
+        from daq_template
+    </sql>
+
+    <select id="selectDaqTemplateList" parameterType="com.zhitan.model.domain.DaqTemplate" resultMap="DaqTemplateResult">
+        <include refid="selectDaqTemplateVo"/>
+        <where>
+            <if test="code != null  and code != ''">and code = #{code}</if>
+            <if test="name != null  and name != ''">and name like concat('%', #{name}, '%')</if>
+            <if test="deviceType != null  and deviceType != ''">and device_type = #{deviceType}</if>
+        </where>
+        order by device_type, code
+    </select>
+
+    <select id="selectDaqTemplateById" parameterType="String" resultMap="DaqTemplateResult">
+        <include refid="selectDaqTemplateVo"/>
+        where id = #{id}
+    </select>
+    <select id="dapHasExist" resultType="java.lang.Integer">
+        SELECT COUNT(*)
+        FROM daq_template
+        WHERE code = #{code}
+          AND device_type = #{deviceType}
+    </select>
+    <select id="dapHasExistWhenUpdate" resultType="java.lang.Integer">
+        SELECT COUNT(*)
+        FROM daq_template
+        WHERE code = #{code}
+          AND device_type = #{deviceType}
+          AND id != #{id}
+    </select>
+    <select id="listTemplate" resultType="com.zhitan.model.domain.DaqTemplate">
+        <include refid="selectDaqTemplateVo"/>
+    </select>
+
+    <insert id="insertDaqTemplate" parameterType="com.zhitan.model.domain.DaqTemplate">
+        insert into daq_template
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">id,</if>
+            <if test="code != null  and code != ''">code,</if>
+            <if test="name != null  and name != ''">name,</if>
+            <if test="deviceType != null  and deviceType != ''">device_type,</if>
+            <if test="unit != null  and unit != ''">unit,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">#{id},</if>
+            <if test="code != null  and code != ''">#{code},</if>
+            <if test="name != null  and name != ''">#{name},</if>
+            <if test="deviceType != null  and deviceType != ''">#{deviceType},</if>
+            <if test="unit != null  and unit != ''">#{unit},</if>
+        </trim>
+    </insert>
+
+    <update id="updateDaqTemplate" parameterType="com.zhitan.model.domain.DaqTemplate">
+        update daq_template
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="code != null  and code != ''">code = #{code},</if>
+            <if test="name != null  and name != ''">name = #{name},</if>
+            <if test="deviceType != null  and deviceType != ''">device_type = #{deviceType},</if>
+            <if test="unit != null  and unit != ''">unit = #{unit},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteDaqTemplateById" parameterType="String">
+        delete
+        from daq_template
+        where id = #{id}
+    </delete>
+
+    <delete id="deleteDaqTemplateByIds" parameterType="String">
+        delete from daq_template where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml b/zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml
new file mode 100644
index 0000000..d38240b
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml
@@ -0,0 +1,380 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.model.mapper.EnergyIndexMapper">
+
+  <resultMap type="EnergyIndex" id="EnergyIndexResult">
+    <result property="indexId" column="index_id"/>
+    <result property="name" column="name"/>
+    <result property="code" column="code"/>
+    <result property="indexType" column="index_type"/>
+    <result property="indexCategory" column="index_category"/>
+    <result property="remark" column="remark"/>
+    <result property="unitId" column="unit_id"/>
+    <result property="meterId" column="meter_id"/>
+    <result property="orderNum" column="order_num"/>
+    <result property="equipment" column="equipment"/>
+    <result property="energyId" column="energy_id"/>
+    <result property="meterName" column="meter_name"/>
+  </resultMap>
+
+  <sql id="selectEnergyIndexVo">
+    select index_id,
+           name,
+           code,
+           index_type,
+           index_category,
+           remark,
+           unit_id,
+           meter_id,
+           order_num,
+           equipment,
+           energy_id
+    from energy_index
+  </sql>
+
+  <select id="selectEnergyIndexList" parameterType="EnergyIndex" resultMap="EnergyIndexResult">
+    select ni.index_id, name, code, index_type, remark, unit_id, index_category
+    from energy_index ei left join node_index ni on ei.index_id = ni.index_id
+    <where>
+      <if test="name != null  and name != ''">and name like concat('%', #{name}, '%')</if>
+      <if test="code != null  and code != ''">and code like concat('%', #{code}, '%')</if>
+      <if test="indexType != null">and index_type = #{indexType}</if>
+      <if test="nodeId != null  and nodeId != ''">and node_id = #{nodeId}</if>
+      <if test="indexCategory != null  and indexCategory != ''">and index_category =
+        #{indexCategory}
+      </if>
+    </where>
+    order by ei.order_num
+  </select>
+
+  <select id="selectEnergyIndexById" parameterType="String" resultMap="EnergyIndexResult">
+    <include refid="selectEnergyIndexVo"/>
+    where index_id = #{indexId}
+    order by order_num
+  </select>
+
+  <select id="selectEnergyIndexByIds" resultType="com.zhitan.model.domain.EnergyIndex">
+    <include refid="selectEnergyIndexVo"/>
+    where
+        index_id IN
+        <foreach collection="list" item="indexId" open="(" separator="," close=")">
+          #{indexId}
+        </foreach>
+  </select>
+
+  <select id="energyIndexHasExist" resultType="java.lang.Integer">
+    select count(*)
+    from energy_index
+    where code = #{code};
+  </select>
+  <select id="energyIndexHasExistWhenUpdate" resultType="java.lang.Integer">
+    select count(*)
+    from energy_index
+    where code = #{code}
+      AND index_id != #{indexId};
+  </select>
+  <select id="getMeterIndex" resultMap="EnergyIndexResult">
+    <include refid="selectEnergyIndexVo"/>
+    where meter_id = #{meterId}
+    order by order_num
+  </select>
+  <select id="modelHasConfig" resultType="java.lang.Integer">
+    select count(*)
+    from model_node
+    where model_code = #{modelCode};
+  </select>
+  <select id="selectCollectIndex" resultMap="EnergyIndexResult">
+    <include refid="selectEnergyIndexVo"/>
+    where meter_id = #{deviceId}
+    order by order_num
+  </select>
+  <select id="getEnergyIndexByIds" resultMap="EnergyIndexResult">
+    <include refid="selectEnergyIndexVo"/>
+    where index_id in
+    <foreach item="indexId" collection="list" open="(" separator="," close=")">
+      #{indexId}
+    </foreach>
+    order by order_num
+  </select>
+  <select id="getEnergyIndexByCodes" resultMap="EnergyIndexResult">
+    <include refid="selectEnergyIndexVo"/>
+    where code in
+    <foreach item="indexCode" collection="list" open="(" separator="," close=")">
+      #{indexCode}
+    </foreach>
+    order by order_num
+  </select>
+  <select id="getIndexByNodeAndChildrenNode" resultMap="EnergyIndexResult">
+    select ei.*
+    from energy_index ei
+           left join node_index ni on ei.index_id = ni.index_id
+    where ni.node_id in (select node_id
+                         from model_node
+                         where address like (select address
+                                             from model_node
+                                             where node_id = #{nodeId}) || '%')
+    order by ei.order_num
+  </select>
+  <select id="searchIndexByNodeAndChildrenNode" resultMap="EnergyIndexResult">
+    select ei.*
+    from energy_index ei
+           left join node_index ni on ei.index_id = ni.index_id
+    where ni.node_id in (select node_id
+                         from model_node
+                         where address like (select address
+                                             from model_node
+                                             where node_id = #{nodeId}) || '%')
+      and (ei.code like concat('%', #{filter}, '%') or ei.name like concat('%', #{filter}, '%'))
+    order by ei.order_num
+  </select>
+  <select id="selectEnergyIndex" resultMap="EnergyIndexResult">
+    select ni.index_id, name, code, index_type, remark, unit_id, index_category
+    from energy_index ei left join node_index ni on ei.index_id = ni.index_id
+    <where>
+      <if test="codeOrName != null  and codeOrName != ''">and (name like concat('%', #{codeOrName},
+        '%') or code like concat('%', #{codeOrName}, '%'))
+      </if>
+      <if test="nodeId != null  and nodeId != ''">and node_id = #{nodeId}</if>
+      <if test="indexType != null">and index_type = #{indexType}</if>
+      <if test="indexCategory != null  and indexCategory != ''">and index_category =
+        #{indexCategory}
+      </if>
+    </where>
+    order by ei.order_num
+  </select>
+
+  <insert id="insertEnergyIndex" parameterType="EnergyIndex">
+    insert into energy_index
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="indexId != null  and indexId != ''">index_id,</if>
+      <if test="name != null  and name != ''">name,</if>
+      <if test="code != null  and code != ''">code,</if>
+      <if test="indexType != null">index_type,</if>
+      <if test="indexCategory != null  and indexCategory != ''">
+        index_category,
+      </if>
+      <if test="remark != null  and remark != ''">remark,</if>
+      <if test="unitId != null  and unitId != ''">unit_id,</if>
+      <if test="orderNum != null">order_num,</if>
+      <if test="equipment != null">equipment,</if>
+      <if test="energyId != null">energy_id,</if>
+    </trim>
+    <trim prefix="values (" suffix=");" suffixOverrides=",">
+      <if test="indexId != null  and indexId != ''">
+        #{indexId},
+      </if>
+      <if test="name != null  and name != ''">#{name},</if>
+      <if test="code != null  and code != ''">#{code},</if>
+      <if test="indexType != null">
+        #{indexType},
+      </if>
+      <if test="indexCategory != null  and indexCategory != ''">
+        #{indexCategory},
+      </if>
+      <if test="remark != null  and remark != ''">#{remark},
+      </if>
+      <if test="unitId != null  and unitId != ''">#{unitId},
+      </if>
+      <if test="orderNum != null">#{orderNum},
+      </if>
+      <if test="equipment != null">#{equipment},
+      </if>
+      <if test="energyId != null">#{energyId},
+      </if>
+    </trim>
+    
+  </insert>
+  <insert id="insertNodeIndex">
+    insert into node_index (node_id, index_id) values (#{nodeId}, #{indexId});
+  </insert>
+  <insert id="insertEnergyIndices">
+    <foreach collection="energyIndices" item="energyIndex" separator=";">
+      insert into energy_index
+      <trim prefix="(" suffix=")" suffixOverrides=",">
+        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">index_id,</if>
+        <if test="energyIndex.name != null  and energyIndex.name != ''">name,</if>
+        <if test="energyIndex.code != null  and energyIndex.code != ''">code,</if>
+        <if test="energyIndex.indexType != null">index_type,</if>
+        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
+          index_category,
+        </if>
+        <if test="energyIndex.remark != null  and energyIndex.remark != ''">remark,</if>
+        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">unit_id,</if>
+        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">meter_id,</if>
+        <if test="energyIndex.orderNum != null">order_num,</if>
+      </trim>
+      <trim prefix="values (" suffix=")" suffixOverrides=",">
+        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">
+          #{energyIndex.indexId},
+        </if>
+        <if test="energyIndex.name != null  and energyIndex.name != ''">#{energyIndex.name},</if>
+        <if test="energyIndex.code != null  and energyIndex.code != ''">#{energyIndex.code},</if>
+        <if test="energyIndex.indexType != null">
+          #{energyIndex.indexType},
+        </if>
+        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
+          #{energyIndex.indexCategory},
+        </if>
+        <if test="energyIndex.remark != null  and energyIndex.remark != ''">#{energyIndex.remark},
+        </if>
+        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">#{energyIndex.unitId},
+        </if>
+        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">
+          #{energyIndex.meterId},
+        </if>
+        <if test="energyIndex.orderNum != null">#{energyIndex.orderNum},</if>
+      </trim>
+    </foreach>
+  </insert>
+  <insert id="saveEnergyIndex">
+    <foreach collection="list" item="energyIndex" separator=";">
+      insert into energy_index
+      <trim prefix="(" suffix=")" suffixOverrides=",">
+        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">index_id,</if>
+        <if test="energyIndex.name != null  and energyIndex.name != ''">name,</if>
+        <if test="energyIndex.code != null  and energyIndex.code != ''">code,</if>
+        <if test="energyIndex.indexType != null">index_type,</if>
+        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
+          index_category,
+        </if>
+        <if test="energyIndex.remark != null  and energyIndex.remark != ''">remark,</if>
+        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">unit_id,</if>
+        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">meter_id,</if>
+        <if test="energyIndex.orderNum != null">order_num,</if>
+      </trim>
+      <trim prefix="values (" suffix=")" suffixOverrides=",">
+        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">
+          #{energyIndex.indexId},
+        </if>
+        <if test="energyIndex.name != null  and energyIndex.name != ''">#{energyIndex.name},</if>
+        <if test="energyIndex.code != null  and energyIndex.code != ''">#{energyIndex.code},</if>
+        <if test="energyIndex.indexType != null">
+          #{energyIndex.indexType},
+        </if>
+        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
+          #{energyIndex.indexCategory},
+        </if>
+        <if test="energyIndex.remark != null  and energyIndex.remark != ''">#{energyIndex.remark},
+        </if>
+        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">#{energyIndex.unitId},
+        </if>
+        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">
+          #{energyIndex.meterId},
+        </if>
+        <if test="energyIndex.orderNum != null">#{energyIndex.orderNum},</if>
+      </trim>
+      ;
+      insert into node_index (node_id, index_id) values (#{energyIndex.nodeId},
+      #{energyIndex.indexId});
+    </foreach>
+  </insert>
+
+  <update id="updateEnergyIndex" parameterType="EnergyIndex">
+    update energy_index
+    <trim prefix="SET" suffixOverrides=",">
+      <if test="name != null  and name != ''">name = #{name},</if>
+      <if test="code != null  and code != ''">code = #{code},</if>
+      <if test="indexType != null">index_type = #{indexType},</if>
+      <if test="indexCategory != null  and indexCategory != ''">index_category = #{indexCategory},
+      </if>
+      <if test="remark != null  and remark != ''">remark = #{remark},</if>
+      <if test="unitId != null  and unitId != ''">unit_id = #{unitId},</if>
+      <if test="orderNum != null">order_num = #{orderNum},</if>
+      <if test="equipment != null">equipment = #{equipment},</if>
+      <if test="energyId != null">energy_id=#{energyId},</if>
+    </trim>
+    where index_id = #{indexId}
+  </update>
+
+  <delete id="deleteEnergyIndexByIds" parameterType="String">
+    delete from energy_index where index_id in
+    <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
+      #{indexId}
+    </foreach>;
+    delete from node_index where node_id = #{nodeId} and index_id in
+    <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
+      #{indexId}
+    </foreach>;
+  </delete>
+  <delete id="deleteIndexByMeterId">
+    delete
+    from energy_index
+    where meter_id = #{meterId}
+  </delete>
+  <delete id="removeNodeIndex">
+    delete from node_index where node_id = #{nodeId} and index_id in
+    <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
+      #{indexId}
+    </foreach>;
+  </delete>
+
+  <select id="getEnergyIndexMeterByCodes" resultMap="EnergyIndexResult">
+    select ei.index_id,
+        ei.name,
+        ei.code,
+        ei.index_type,
+        ei.index_category,
+        ei.remark,
+        ei.unit_id,
+        ei.meter_id,
+        ei.order_num,
+        ei.equipment,
+        ei.energy_id,
+        meter_name
+        from energy_index as ei,meter_implement as me
+    where ei.code in
+    <foreach item="indexCode" collection="list" open="(" separator="," close=")">
+      #{indexCode}
+    </foreach>
+    and ei.meter_id = me.id
+    order by ei.order_num
+  </select>
+  
+  <select id="selectEnergyIndexPage" resultMap="EnergyIndexResult">
+    select ni.index_id, name, code, index_type, remark, unit_id, index_category
+    from energy_index ei left join node_index ni on ei.index_id = ni.index_id
+    <where>
+      <if test="query.codeOrName != null  and query.codeOrName != ''">and (name like concat('%', #{query.codeOrName},
+        '%') or code like concat('%', #{query.codeOrName}, '%'))
+      </if>
+      <if test="query.indexType != null">and index_type = #{query.indexType}</if>
+      <if test="query.nodeId != null  and query.nodeId != ''">and ni.node_id = #{query.nodeId}</if>
+      <if test="query.indexCategory != null  and query.indexCategory != ''">and index_category =
+        #{query.indexCategory}
+      </if>
+    </where>
+    order by ei.order_num
+    
+  </select>
+    <select id="listIndexByMeterIds" resultType="com.zhitan.model.domain.EnergyIndex">
+      select ei.index_id,
+      name,
+      code,
+      index_type,
+      index_category,
+      remark,
+      unit_id,
+      meter_id,
+      order_num,
+      equipment,
+      energy_id
+      from energy_index ei
+      left join node_index ni on ei.index_id = ni.index_id
+      <where>
+        
+        <if test="nodeId != null  and nodeId != ''">and ni.node_id = #{nodeId}</if>
+        <if test="meterIds != null">
+          and ei.meter_id in
+          <foreach collection="meterIds" item="meterId" open="(" separator="," close=")">
+            #{meterId}
+          </foreach>
+        </if>
+      </where>
+    </select>
+  <select id="getiEnergyIndexByCode" resultType="com.zhitan.model.domain.EnergyIndex">
+    <include refid="selectEnergyIndexVo"/>
+    where code = #{cdoe}
+  </select>
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/model/IndexFormulaMapper.xml b/zhitan-system/src/main/resources/mapper/model/IndexFormulaMapper.xml
new file mode 100644
index 0000000..a2faccc
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/model/IndexFormulaMapper.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.model.mapper.IndexFormulaMapper">
+    <resultMap id="formulaMap" type="com.zhitan.model.domain.IndexFormula">
+        <result property="id" column="id"/>
+        <result property="indexId" column="index_id"/>
+        <result property="formulaText" column="formula_text"/>
+        <result property="isPvCalc" column="is_pv_calc"/>
+    </resultMap>
+    <resultMap id="formulaParamMap" type="com.zhitan.model.domain.IndexFormulaParam">
+        <result property="formulaId" column="formula_id"/>
+        <result property="paramName" column="param_name"/>
+        <result property="paramValue" column="param_value"/>
+    </resultMap>
+    <insert id="insertIndexFormula">
+    insert into index_formula (id, index_id, formula_text,is_pv_calc)
+    values (#{id}, #{indexId}, #{formulaText},#{isPvCalc});
+  </insert>
+  <insert id="saveIndexFormulaParam">
+    delete
+    from index_formula_param
+    where index_id = #{indexId};
+    <foreach collection="indexFormulaParams" item="formulaParam" separator=";">
+      insert into index_formula_param (id, formula_id,index_id, param_name, param_value) values
+      (#{formulaParam.id}, #{formulaParam.formulaId}, #{formulaParam.indexId},
+      #{formulaParam.paramName},
+      #{formulaParam.paramValue})
+    </foreach>
+  </insert>
+  <update id="updateIndexFormula">
+    update index_formula
+    set formula_text = #{formulaText},is_pv_calc = #{isPvCalc}
+    where id = #{id}
+  </update>
+  <select id="getFormula" resultMap="formulaMap">
+    select *
+    from index_formula
+    where index_id = #{indexId}
+  </select>
+  <select id="getFormulaParam" resultMap="formulaParamMap">
+    select *
+    from index_formula_param
+    where index_id = #{indexId}
+  </select>
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/model/IndexStorageMapper.xml b/zhitan-system/src/main/resources/mapper/model/IndexStorageMapper.xml
new file mode 100644
index 0000000..a69666a
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/model/IndexStorageMapper.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.model.mapper.IndexStorageMapper">
+    <resultMap id="indexStorageMap" type="com.zhitan.model.domain.IndexStorage">
+        <result property="id" column="id"/>
+        <result property="indexId" column="index_id"/>
+        <result property="timeType" column="time_type"/>
+        <result property="calcType" column="calc_type"/>
+        <result property="calcText" column="calc_text"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="createTime" column="create_time"/>
+        <result property="isPvCalc" column="is_pv_calc"/>
+    </resultMap>
+    <insert id="insertIndexStorage">
+        insert into index_storage (id, index_id, time_type, calc_type, calc_text, create_time,
+                               update_time,is_pv_calc)
+    values (#{id}, #{indexId}, #{timeType}, #{calcType}, #{calcText}, now(), now(),#{isPvCalc});
+  </insert>
+  <insert id="saveParams">
+    delete from storage_parameter where storage_id = #{storageId};
+    <foreach collection="parameterIds" item="paramId" separator=";">
+      insert into storage_parameter (storage_id, index_id)
+      values (#{storageId}, #{paramId});
+    </foreach>
+  </insert>
+  <update id="updateIndexStorage">
+    update index_storage
+    set index_id    = #{indexId},
+        calc_type   = #{calcType},
+        calc_text   = #{calcText},
+        update_time = now(),
+        is_pv_calc = #{isPvCalc}
+    where id = #{id};
+  </update>
+  <select id="getIndexStorage" resultMap="indexStorageMap">
+    select *
+    from index_storage
+    where index_id = #{indexId};
+  </select>
+  <select id="getAllCalcIndexStorage" resultMap="indexStorageMap">
+    select *
+    from index_storage
+    where calc_type = #{calcType}
+  </select>
+    <select id="getAllParameter"
+            resultType="com.zhitan.model.domain.IndexStorageParam">
+        select storage_id as storageId, index_id as indexId
+        from storage_parameter
+    </select>
+  <select id="getWithTimetype" resultMap="indexStorageMap">
+    select *
+    from index_storage
+    where index_id = #{indexId}
+      AND time_type = #{timeType};
+  </select>
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/model/ModelInfoMapper.xml b/zhitan-system/src/main/resources/mapper/model/ModelInfoMapper.xml
new file mode 100644
index 0000000..2b70da4
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/model/ModelInfoMapper.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.model.mapper.ModelInfoMapper">
+
+    <resultMap type="com.zhitan.model.domain.ModelInfo" id="ModelInfoResult">
+        <result property="modelCode" column="model_code"/>
+        <result property="modelName" column="model_name"/>
+        <result property="isShow" column="is_show"/>
+        <result property="modelType" column="model_type"/>
+    </resultMap>
+
+    <sql id="selectModelInfoVo">
+        select model_code, model_name, is_show, model_type
+        from model_info
+    </sql>
+
+    <select id="selectModelInfoList" parameterType="com.zhitan.model.domain.ModelInfo"
+            resultMap="ModelInfoResult">
+        <include refid="selectModelInfoVo"/>
+        <where>
+            <if test="modelCode != null  and modelCode != ''">and model_code like concat('%', #{modelCode}, '%')</if>
+            <if test="modelName != null  and modelName != ''">and model_name like concat('%', #{modelName}, '%')</if>
+            <if test="isShow != null">and is_show = #{isShow}</if>
+        </where>
+        order by model_code;
+    </select>
+
+    <select id="selectModelInfoById" parameterType="String" resultMap="ModelInfoResult">
+        <include refid="selectModelInfoVo"/>
+        where model_code = #{modelCode}
+    </select>
+
+    <insert id="insertModelInfo" parameterType="ModelInfo">
+        insert into model_info
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="modelCode != null  and modelCode != ''">model_code,</if>
+            <if test="modelName != null  and modelName != ''">model_name,</if>
+            <if test="modelType != null  and modelType != ''">model_type,</if>
+            is_show,
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="modelCode != null  and modelCode != ''">#{modelCode},</if>
+            <if test="modelName != null  and modelName != ''">#{modelName},</if>
+            <if test="modelType != null  and modelType != ''">#{modelType},</if>
+            1,
+        </trim>
+    </insert>
+
+    <update id="updateModelInfo" parameterType="ModelInfo">
+        update model_info
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="modelName != null  and modelName != ''">model_name = #{modelName},</if>
+            <if test="isShow != null ">is_show = #{isShow},</if>
+        </trim>
+        where model_code = #{modelCode}
+    </update>
+
+    <delete id="deleteModelInfoById" parameterType="String">
+        delete
+        from model_info
+        where model_code = #{modelCode}
+    </delete>
+
+    <delete id="deleteModelInfoByCode" parameterType="String">
+        delete
+        from model_info
+        where model_code = #{modelCode};
+    </delete>
+
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml b/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml
new file mode 100644
index 0000000..7fbb5b8
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml
@@ -0,0 +1,423 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.model.mapper.ModelNodeMapper">
+
+    <resultMap type="com.zhitan.model.domain.ModelNode" id="ModelNodeResult">
+        <result property="nodeId" column="node_id"/>
+        <result property="code" column="code"/>
+        <result property="name" column="name"/>
+        <result property="parentId" column="parent_id"/>
+        <result property="address" column="address"/>
+        <result property="modelCode" column="model_code"/>
+        <result property="nodeCategory" column="node_category"/>
+    </resultMap>
+
+    <sql id="selectModelNodeVo">
+        select node_id, code, name, parent_id, address, model_code, node_category
+        from model_node
+    </sql>
+
+    <select id="selectModelNodeList"
+            parameterType="com.zhitan.model.domain.ModelNode"
+            resultMap="ModelNodeResult">
+        <include refid="selectModelNodeVo"/>
+        <where>
+            <if test="code != null  and code != ''">and code like concat('%', #{code}, '%')</if>
+            <if test="name != null  and name != ''">and name like concat('%', #{name}, '%')</if>
+        </where>
+        order by order_num
+    </select>
+
+    <select id="selectModelNodeById" parameterType="String" resultMap="ModelNodeResult">
+        <include refid="selectModelNodeVo"/>
+        where node_id = #{nodeId}
+    </select>
+    <select id="getModelNodeByModelCode" resultMap="ModelNodeResult">
+        <include refid="selectModelNodeVo"/>
+        where model_code = #{modelCode}
+        order by order_num
+    </select>
+    <select id="getMaxOrder" resultType="java.lang.Integer">
+        select COALESCE(max(order_num), 0)
+        from model_node
+        where parent_id = #{parentId}
+    </select>
+    <select id="modelNodeHasExist" resultType="java.lang.Integer">
+        select count(*)
+        from model_node
+        where code = #{code}
+          and model_code = #{modelCode};
+    </select>
+    <select id="modelNodeHasExistWhenUpdate" resultType="java.lang.Integer">
+        select count(*)
+        from model_node
+        where code = #{code}
+          and model_code = #{modelCode}
+          AND node_id != #{nodeId};
+    </select>
+    <select id="getSettingDevice"
+            resultType="com.zhitan.basicdata.domain.MeterImplement">
+        select id, code, meter_name as meterName
+        from meter_implement m
+                 left join node_device nd on m.id = nd.device_id
+        where nd.node_id = #{nodeId};
+    </select>
+    <select id="getSettingIndex"
+            resultType="com.zhitan.model.domain.EnergyIndex">
+        select ei.index_id as indexId, code, name, index_type as indexType
+        from energy_index ei
+                 left join node_index ni on ei.index_id = ni.index_id
+        where ni.node_id = #{nodeId}
+    </select>
+    <select id="getSettingEnergy"
+            resultType="com.zhitan.basicdata.domain.SysEnergy">
+        select enerid, enersno, enername
+        from sys_energy e
+                 left join node_energy ne on e.enerid = ne.energy_id
+        where ne.node_id = #{nodeId};
+    </select>
+    <select id="getSettingProduct"
+            resultType="com.zhitan.basicdata.domain.SysProduct">
+        select productid, productsno, productname
+        from sys_product p
+                 left join node_product np on p.productid = np.product_id
+        where np.node_id = #{nodeId};
+    </select>
+    <select id="getSettingIndexByType"
+            resultType="com.zhitan.model.domain.EnergyIndex">
+        select ei.index_id as indexId, code, name, index_type as indexType
+        from energy_index ei
+                 left join node_index ni on ei.index_id = ni.index_id
+        where ni.node_id = #{nodeId}
+          and ei.index_type = #{indexType}
+        <if test="code != null  and code != ''">
+            and code like concat('%', #{code}, '%')
+        </if>
+        <if test="name != null  and name != ''">
+            and name like concat('%', #{name}, '%')
+        </if>
+    </select>
+    <select id="getModelNodeByNodeCodes" resultMap="ModelNodeResult">
+        <include refid="selectModelNodeVo"/>
+        where code in
+        <foreach item="nodeCode" collection="list" open="(" separator="," close=")">
+            #{nodeCode}
+        </foreach>
+        order by order_num
+    </select>
+    <select id="getModelNodeByModelCodeWithAuth" resultMap="ModelNodeResult">
+        <include refid="selectModelNodeVo"/>
+        where model_code = #{modelCode}
+        and (
+        node_id in (
+        select node_id from data_auth_user where user_id = #{userId} and model_code = #{modelCode}
+        )
+        or node_id in (
+        select node_id from data_auth_role where role_id in (
+        select cast(r.role_id as varchar) from sys_role r
+        left join sys_user_role ur on ur.role_id = r.role_id
+        left join sys_user u on u.user_id = ur.user_id
+        where cast(u.user_id as VARCHAR) = #{userId}
+        ) and model_code = #{modelCode}
+        )
+        )
+        order by order_num
+    </select>
+
+    <insert id="insertModelNode"
+            parameterType="com.zhitan.model.domain.ModelNode">
+        insert into model_node
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="nodeId != null  and nodeId != ''">node_id,</if>
+            <if test="code != null  and code != ''">code,</if>
+            <if test="name != null  and name != ''">name,</if>
+            <if test="parentId != null  and parentId != ''">parent_id,</if>
+            <if test="address != null  and address != ''">address,</if>
+            <if test="modelCode != null  and modelCode != ''">model_code,</if>
+            <if test="nodeCategory != null  and nodeCategory != ''">node_category,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="nodeId != null  and nodeId != ''">#{nodeId},</if>
+            <if test="code != null  and code != ''">#{code},</if>
+            <if test="name != null  and name != ''">#{name},</if>
+            <if test="parentId != null  and parentId != ''">#{parentId},</if>
+            <if test="address != null  and address != ''">#{address},</if>
+            <if test="modelCode != null  and modelCode != ''">#{modelCode},</if>
+            <if test="nodeCategory != null  and nodeCategory != ''">#{nodeCategory},</if>
+        </trim>
+    </insert>
+    <insert id="setDevice">
+        delete
+        from node_device
+        where node_id = #{nodeId};
+        <foreach collection="deviceIds" item="deviceId" separator=";">
+            insert into node_device (node_id, device_id)
+            values (#{nodeId}, #{deviceId})
+        </foreach>
+    </insert>
+    <insert id="setEnergy">
+        delete
+        from node_energy
+        where node_id = #{nodeId};
+        <foreach collection="energyIds" item="energyId" separator=";">
+            insert into node_energy (node_id, energy_id)
+            values (#{nodeId}, #{energyId})
+        </foreach>
+    </insert>
+    <insert id="setProduct">
+        delete
+        from node_product
+        where node_id = #{nodeId};
+        <foreach collection="productIds" item="productId" separator=";">
+            insert into node_product (node_id, product_id)
+            values (#{nodeId}, #{productId})
+        </foreach>
+    </insert>
+
+    <update id="updateModelNode"
+            parameterType="com.zhitan.model.domain.ModelNode">
+        update model_node
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="code != null  and code != ''">code = #{code},</if>
+            <if test="name != null  and name != ''">name = #{name},</if>
+            <if test="parentId != null  and parentId != ''">parent_id = #{parentId},</if>
+            <if test="address != null  and address != ''">address = #{address},</if>
+            <if test="modelCode != null  and modelCode != ''">model_code = #{modelCode},</if>
+            <if test="nodeCategory != null and nodeCategory != ''">node_category = #{nodeCategory},</if>
+        </trim>
+        where node_id = #{nodeId}
+    </update>
+    <update id="updateModelNodeParent">
+        update model_node
+        set parent_id = #{parentId}
+        where node_id = #{nodeId};
+
+        update model_node
+        set address = replace(address, (select address from model_node where node_id = #{nodeId}),
+                              (select address ||
+                                      (select code from model_node where node_id = #{nodeId}) ||
+                                      ','
+                               from model_node
+                               where node_id = #{parentId}))
+        where parent_id = #{nodeId}
+           or node_id = #{nodeId};
+    </update>
+    <update id="updateModelNodeOrder">
+        <foreach collection="orders" index="id" item="order" separator=";">
+            update model_node
+            set order_num = #{order}
+            where node_id = #{id}
+        </foreach>
+    </update>
+    <update id="setIndex">
+        delete
+        from node_index
+        where node_id = #{nodeId} and index_id in (select ni.index_id
+        from node_index ni left join energy_index ei on ni.index_id = ei.index_id
+        where node_id = #{nodeId} and ei.index_type = #{indexType});
+        <foreach collection="indexIds" item="indexId" separator=";">
+            insert into node_index (node_id, index_id)
+            values (#{nodeId}, #{indexId})
+        </foreach>
+    </update>
+
+    <delete id="deleteModelNodeById" parameterType="String">
+        delete
+        from model_node
+        where node_id = #{nodeId}
+    </delete>
+
+    <delete id="deleteModelNodeByIds" parameterType="String">
+        delete from model_node where node_id in
+        <foreach item="nodeId" collection="array" open="(" separator="," close=")">
+            #{nodeId}
+        </foreach>
+    </delete>
+    <delete id="delDevice">
+        delete
+        from node_device
+        where node_id = #{nodeId} and device_id in
+        <foreach item="deviceId" collection="deviceIds" open="(" separator="," close=")">
+            #{deviceId}
+        </foreach>
+    </delete>
+    <delete id="delEnergy">
+        delete
+        from node_energy
+        where node_id = #{nodeId} and energy_id in
+        <foreach item="energyId" collection="energyIds" open="(" separator="," close=")">
+            #{energyId}
+        </foreach>
+    </delete>
+    <delete id="delProduct">
+        delete
+        from node_product
+        where node_id = #{nodeId} and product_id in
+        <foreach item="productId" collection="productIds" open="(" separator="," close=")">
+            #{productId}
+        </foreach>
+    </delete>
+    <delete id="delIndex">
+        delete
+        from node_index
+        where node_id = #{nodeId} and index_id in
+        <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
+            #{indexId}
+        </foreach>
+    </delete>
+
+    <select id="getSettingIndexByWhere"
+            resultType="com.zhitan.model.domain.EnergyIndex">
+        select ei.index_id as indexId, code, name, index_type as indexType
+        from energy_index ei
+        left join node_index ni on ei.index_id = ni.index_id
+        where ni.node_id = #{nodeId}
+        <if test="indexName!=null and indexName!=''">
+            and ei.name like concat('%', #{indexName}, '%')
+        </if>
+    </select>
+
+    <select id="listIndesxByCodeList" resultType="java.lang.String">
+        SELECT
+        index_id
+        FROM
+        "node_index"
+        WHERE
+        node_id IN
+        <foreach item="nodeId" collection="nodeIds" open="(" separator="," close=")">
+            #{nodeId}
+        </foreach>
+    </select>
+
+    <select id="getModelNodeIndexIdRelationInforByCode"
+            resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
+        SELECT mn.node_id  nodeId,
+               mn."name"   "name",
+               ni.index_id indexId
+        FROM "model_node" mn
+                 LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
+        WHERE mn.model_code = #{code}
+          AND mn.parent_id IS NOT NULL
+    </select>
+
+    <select id="listModelNodeIndexIdRelationInforByParentId"
+            resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
+        SELECT mn.node_id  nodeId,
+               mn."name"   "name",
+               ni.index_id indexId
+        FROM "model_node" mn
+                 LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
+        WHERE mn.parent_id = #{parentId}
+    </select>
+
+    <select id="getModelNodeIndexIdRelationInforByNodeId"
+            resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
+        SELECT mn.node_id  nodeId,
+               mn."name"   "name",
+               ni.index_id indexId
+        FROM "model_node" mn
+                 LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
+        WHERE mn.node_id = #{nodeId}
+    </select>
+
+    <select id="getModelNodeByModelCodeByIndexCode" resultType="com.zhitan.model.domain.ModelNode">
+        SELECT node_id       nodeId,
+               code,
+               "name",
+               parent_id     parentId,
+               address,
+               model_code    modelCode,
+               node_category nodeCategory
+        FROM "model_node"
+        WHERE model_code = #{indexCode}
+          AND parent_id IS NULL LIMIT 1;
+    </select>
+    <select id="selectIndexByModelCodeAndNodeId"
+            resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
+        SELECT mn.node_id nodeId,
+               mn."name",
+               ni.index_id indexId
+        FROM model_node mn
+                 LEFT JOIN node_index ni ON ni.node_id = mn.node_id
+        WHERE mn.model_code = #{modelCode}
+          AND mn.node_id = #{nodeId}
+    </select>
+
+    <select id="getSettingDeviceIndex" resultType="com.zhitan.basicdata.domain.MeterImplement">
+        SELECT distinct
+               m."id",
+               m.code,
+               m.meter_name AS meterName,
+               m.meter_type    meterType,
+               m.wire_diameter    wireDiameter,
+               m.max_allowable_power    maxAllowablePower
+        FROM meter_implement m
+                 LEFT JOIN energy_index ei ON ei.meter_id = m."id"
+                 LEFT JOIN node_index ni ON ni.index_id = ei.index_id
+        WHERE ni.node_id = #{nodeId}
+        <if test="energyType!=null and energyType!=''">
+            AND M.energy_type = #{energyType}
+        </if>
+    </select>
+
+    <delete id="delIndexNodeIdAndIndexType">
+        delete
+        from node_index
+        where node_id = #{nodeId} and index_id in (
+            select ni.index_id
+            from node_index ni left join energy_index ei on ni.index_id = ei.index_id
+            where node_id = #{nodeId} and ei.index_type = #{indexType}
+        );
+    </delete>
+    <insert id="setIndexAndNodeId">
+        <foreach collection="indexIds" item="indexId" separator=";">
+            insert into node_index (node_id, index_id)
+            values (#{nodeId}, #{indexId})
+        </foreach>
+    </insert>
+    
+    <select id="getModelNodeIndexIdByNodeId" resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
+        SELECT mn.node_id  nodeId,
+               mn."name"   "name",
+               ni.index_id indexId,
+               ei.energy_id energyId
+        FROM "model_node" mn
+        LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
+        LEFT JOIN energy_index ei on ni.index_id = ei.index_id
+        WHERE ni.node_id = #{nodeId} 
+        <if test="energyType!=null and energyType!=''">
+            and ei.energy_id = #{energyType}
+        </if>
+    </select>
+    <select id="getModelNodeByParentId" resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
+        SELECT mn.node_id  nodeId,
+               mn."name"   "name",
+               ni.index_id indexId,
+               ei.energy_id
+        FROM "model_node" mn
+                 LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
+                 left join energy_index ei on ni.index_id = ei.index_id
+        WHERE mn.parent_id = #{parentId} and ei.index_type = 'STATISTIC'
+    </select>
+    <select id="getFirstModeNodeInfo" resultType="com.zhitan.model.domain.ModelNode">
+        <include refid="selectModelNodeVo"/>
+        where model_code = #{modelCode}  AND parent_id is null
+        order by order_num 
+    </select>
+    <select id="selectIndexByNodeIds" resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
+        SELECT mn.node_id  nodeId,
+        mn."name"   "name",
+        ni.index_id indexId,
+        ei.energy_id
+        FROM "model_node" mn
+        LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
+        left join energy_index ei on ni.index_id = ei.index_id
+        WHERE mn.model_code = #{modelCode}
+          AND mn.node_id in
+        <foreach collection="nodeIds" index="index" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </select>
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/peakvalley/ElectricityDataItemMapper.xml b/zhitan-system/src/main/resources/mapper/peakvalley/ElectricityDataItemMapper.xml
new file mode 100644
index 0000000..6680811
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/peakvalley/ElectricityDataItemMapper.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.peakvalley.mapper.PeakValleyMapper">
+
+
+    <select id="getDataStatistics"
+            resultType="com.zhitan.peakvalley.domain.ElectricityDataItem">
+        SELECT
+        index_code indexCode,
+        time_code timeCode,
+        electricity_type electricityType,
+        data_time dataTime,
+        electricity,
+        "cost",
+        time_type timeType,
+        price,
+        remark
+        FROM
+        "electricity_data_item"
+        WHERE
+        index_id IN
+        <foreach collection="indexIdSet" item="indexId" open="(" separator="," close=")">
+            #{indexId}
+        </foreach>
+        AND (data_time BETWEEN #{startTime} AND #{endTime})
+        AND time_type = #{timeType}
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/zhitan-system/src/main/resources/mapper/peakvalley/ElectricityPriceDateMapper.xml b/zhitan-system/src/main/resources/mapper/peakvalley/ElectricityPriceDateMapper.xml
new file mode 100644
index 0000000..9e56581
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/peakvalley/ElectricityPriceDateMapper.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.peakvalley.mapper.ElectricityPriceDateMapper">
+
+    <resultMap type="com.zhitan.peakvalley.domain.ElectricityPriceDate" id="ElectricityPriceDateResult">
+        <result property="id"    column="id"    />
+        <result property="beginDate"    column="begin_date"    />
+        <result property="endDate"    column="end_date"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectElectricityPriceDateVo">
+        select id, begin_date, end_date, create_by, create_time, update_by, update_time, remark from electricity_price_date
+    </sql>
+
+    <select id="selectElectricityPriceDateList" parameterType="com.zhitan.peakvalley.domain.ElectricityPriceDate" resultMap="ElectricityPriceDateResult">
+        <include refid="selectElectricityPriceDateVo"/>
+        <where>
+            <if test="beginDate != null "> and begin_date = #{beginDate}</if>
+            <if test="endDate != null "> and end_date = #{endDate}</if>
+        </where>
+    </select>
+
+    <select id="selectElectricityPriceDateById" parameterType="String" resultMap="ElectricityPriceDateResult">
+        <include refid="selectElectricityPriceDateVo"/>
+        where  id = #{id}
+    </select>
+
+    <insert id="insertElectricityPriceDate" parameterType="com.zhitan.peakvalley.domain.ElectricityPriceDate">
+        insert into electricity_price_date
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null and id != ''">id,</if>
+            <if test="beginDate != null">begin_date,</if>
+            <if test="endDate != null">end_date,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null and id != ''">#{id},</if>
+            <if test="beginDate != null">#{beginDate},</if>
+            <if test="endDate != null">#{endDate},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+        </trim>
+    </insert>
+
+    <update id="updateElectricityPriceDate" parameterType="com.zhitan.peakvalley.domain.ElectricityPriceDate">
+        update electricity_price_date
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="beginDate != null">begin_date = #{beginDate},</if>
+            <if test="endDate != null">end_date = #{endDate},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteElectricityPriceDateById" parameterType="String">
+        delete from electricity_price_date where id = #{id}
+    </delete>
+
+    <delete id="deleteElectricityPriceDateByIds" parameterType="String">
+        delete from electricity_price_date where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/zhitan-system/src/main/resources/mapper/peakvalley/EletricityPriceMapper.xml b/zhitan-system/src/main/resources/mapper/peakvalley/EletricityPriceMapper.xml
new file mode 100644
index 0000000..8ef89e6
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/peakvalley/EletricityPriceMapper.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.peakvalley.mapper.ElectricityPriceMapper">
+
+    <resultMap type="ElectricityPrice" id="ElectricityPriceResult">
+        <result property="id"    column="id"    />
+        <result property="parentId"    column="parent_id"    />
+        <result property="type"    column="type"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="stopTime"    column="stop_time"    />
+        <result property="effecticityPrice"    column="effecticity_price"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectElectricityPriceVo">
+        select id, parent_id, type, start_time, stop_time, effecticity_price, create_by, create_time, update_by, update_time, remark from electricity_price
+    </sql>
+
+    <select id="selectElectricityPriceList" parameterType="ElectricityPrice" resultMap="ElectricityPriceResult">
+        <include refid="selectElectricityPriceVo"/>
+        <where>
+            <if test="parentId != null  and parentId != ''"> and parent_id = #{parentId}</if>
+            <if test="type != null  and type != ''"> and type = #{type}</if>
+            <if test="startTime != null "> and start_time = #{startTime}</if>
+            <if test="stopTime != null "> and stop_time = #{stopTime}</if>
+            <if test="effecticityPrice != null  and effecticityPrice != ''"> and effecticity_price = #{effecticityPrice}</if>
+        </where>
+    </select>
+
+    <select id="selectElectricityPriceById" parameterType="String" resultMap="ElectricityPriceResult">
+        <include refid="selectElectricityPriceVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertElectricityPrice" parameterType="ElectricityPrice">
+        insert into electricity_price
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null and id != ''">id,</if>
+            <if test="parentId != null and parentId != ''">parent_id,</if>
+            <if test="type != null">type,</if>
+            <if test="startTime != null">start_time,</if>
+            <if test="stopTime != null">stop_time,</if>
+            <if test="effecticityPrice != null">effecticity_price,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null and id != ''">#{id},</if>
+            <if test="parentId != null and parentId != ''">#{parentId},</if>
+            <if test="type != null">#{type},</if>
+            <if test="startTime != null">#{startTime},</if>
+            <if test="stopTime != null">#{stopTime},</if>
+            <if test="effecticityPrice != null">#{effecticityPrice},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+        </trim>
+    </insert>
+
+    <update id="updateElectricityPrice" parameterType="ElectricityPrice">
+        update electricity_price
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="parentId != null and parentId != ''">parent_id = #{parentId},</if>
+            <if test="type != null">type = #{type},</if>
+            <if test="startTime != null">start_time = #{startTime},</if>
+            <if test="stopTime != null">stop_time = #{stopTime},</if>
+            <if test="effecticityPrice != null">effecticity_price = #{effecticityPrice},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteElectricityPriceById" parameterType="String">
+        delete from electricity_price where id = #{id}
+    </delete>
+
+    <delete id="deleteElectricityPriceByIds" parameterType="String">
+        delete from electricity_price where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/zhitan-system/src/main/resources/mapper/realtimedata/PeriodDataMapper.xml b/zhitan-system/src/main/resources/mapper/realtimedata/PeriodDataMapper.xml
new file mode 100644
index 0000000..f878bf7
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/realtimedata/PeriodDataMapper.xml
@@ -0,0 +1,501 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.realtimedata.mapper.PeriodDataMapper">
+  <resultMap id="dataItemMap" type="com.zhitan.realtimedata.domain.DataItem">
+    <id column="index_id" property="indexId"/>
+    <id column="time_code" property="timeCode"/>
+    <id column="index_code" property="indexCode"/>
+    <id column="index_name" property="indexName"/>
+    <result column="begin_time" property="beginTime"/>
+    <result column="end_time" property="endTime"/>
+    <result column="data_time" property="dataTime"/>
+    <result column="value" property="value"/>
+    <result column="time_type" property="timeType"/>
+    <result column="quality" property="quality"/>
+    <result column="unit_id" property="unitId"/>
+    <result column="create_time" property="createTime"/>
+    <result column="update_time" property="updateTime"/>
+    <result column="remark" property="remark"/>
+  </resultMap>
+
+  <resultMap id="statisticResultMap" type="com.zhitan.realtimedata.domain.StatisticResult">
+    <id column="index_id" property="indexId"/>
+    <id column="index_code" property="indexCode"/>
+    <id column="index_name" property="indexName"/>
+    <result column="unit_id" property="unitId"/>
+    <result column="maxvalue" property="maxValue"/>
+    <result column="minvalue" property="minValue"/>
+    <result column="avgvalue" property="avgValue"/>
+  </resultMap>
+  <delete id="delete">
+    DELETE
+    FROM data_item
+    WHERE index_id = #{indexId}
+      AND time_type = #{timeType}
+      AND data_time &gt;= #{beginTime}
+      AND data_time &lt;= #{endTime}
+  </delete>
+
+  <sql id="itemHead">
+    SELECT di.index_id,
+           di.time_code,
+           di.time_type,
+           di.begin_time,
+           di.end_time,
+           di.data_time,
+           di.value,
+           di.quality,
+           di.create_time,
+           di.update_time,
+           ci.code AS "index_code",
+           ci.name AS "index_name"
+    FROM data_item di
+           LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+  </sql>
+
+  <select id="getDataByIndex" resultMap="dataItemMap">
+    <include refid="itemHead"/>
+    WHERE di.index_id = #{indexId}
+    AND di.time_code = #{timeCode}
+  </select>
+  <select id="hasExist" resultType="java.lang.String">
+    SELECT index_id
+    FROM data_item
+    WHERE index_id = #{indexId}
+      AND time_code = #{timeCode}
+  </select>
+  <select id="getDatasByIndex" resultMap="dataItemMap">
+    <include refid="itemHead"/>
+    where di.time_code = #{timeCode}
+    AND di.index_id in
+    <foreach item="indexId" index="index" collection="indexIds"
+      open="(" separator="," close=")">
+      #{indexId}
+    </foreach>
+  </select>
+  <select id="getPeriodDatasByIndex" resultMap="dataItemMap">
+    <include refid="itemHead"/>
+    WHERE di.index_id in
+    <foreach item="indexId" index="index" collection="indexIds"
+      open="(" separator="," close=")">
+      #{indexId}
+    </foreach>
+    AND di.time_type = #{timeType}
+    AND di.data_time &gt;= #{beginTime}
+    AND di.data_time &lt; #{endTime}
+  </select>
+  <select id="dataStatisticsByIndex" resultType="java.lang.Double">
+    SELECT
+    <if test="statisticType.name() == 'Sum'">
+      sum(value)
+    </if>
+    <if test="statisticType.name() == 'Max'">
+      max(value)
+    </if>
+    <if test="statisticType.name() == 'Min'">
+      min(value)
+    </if>
+    <if test="statisticType.name() == 'Average'">
+      avg(value)
+    </if>
+    FROM data_item
+    WHERE index_id = #{indexId}
+    AND time_type = #{timeType}
+    AND data_time &gt;= #{beginTime}
+    AND data_time &lt; #{endTime}
+  </select>
+
+  <select id="dataStatisticsByIndexs" resultMap="dataItemMap">
+    SELECT
+    <if test="statisticType.name() == 'Sum'">
+      sum(value)
+    </if>
+    <if test="statisticType.name() == 'Max'">
+      max(value)
+    </if>
+    <if test="statisticType.name() == 'Min'">
+      min(value)
+    </if>
+    <if test="statisticType.name() == 'Average'">
+      avg(value)
+    </if>
+    AS value,
+    i.code as index_code,
+    i.name as index_name,
+    i.unit_id,
+    d.index_id
+    FROM data_item d
+    LEFT JOIN energy_index i ON d.index_id = i.index_id
+    WHERE d.index_id in
+    <foreach item="indexId" index="index" collection="indexIds"
+      open="(" separator="," close=")">
+      #{indexId}
+    </foreach>
+    AND time_type = #{timeType}
+    AND data_time &gt;= #{beginTime}
+    AND data_time &lt; #{endTime}
+    GROUP BY d.index_id, i.code, i.unit_id, i.name
+  </select>
+
+  <select id="dataStatisticsByCodes" resultMap="dataItemMap">
+    SELECT
+    <if test="statisticType.name() == 'Sum'">
+      sum(value)
+    </if>
+    <if test="statisticType.name() == 'Max'">
+      max(value)
+    </if>
+    <if test="statisticType.name() == 'Min'">
+      min(value)
+    </if>
+    <if test="statisticType.name() == 'Average'">
+      avg(value)
+    </if>
+    AS value,
+    i.code as index_code,
+    i.name as index_name,
+    i.unit_id,
+    d.index_id
+    FROM data_item d
+    LEFT JOIN energy_index i ON d.index_id = i.index_id
+    WHERE
+    i.code IN
+    <foreach item="indexCode" index="index" collection="indexCodes"
+      open="(" separator="," close=")">
+      #{indexCode}
+    </foreach>
+    AND time_type = #{timeType}
+    AND data_time &gt;= #{beginTime}
+    AND data_time &lt; #{endTime}
+    GROUP BY d.index_id, i.code, i.unit_id, i.name
+  </select>
+
+  <select id="dataStatisticsFilterByCodes" resultMap="dataItemMap">
+    SELECT
+    <if test="statisticType.name() == 'Sum'">
+      sum(value)
+    </if>
+    <if test="statisticType.name() == 'Max'">
+      max(value)
+    </if>
+    <if test="statisticType.name() == 'Min'">
+      min(value)
+    </if>
+    <if test="statisticType.name() == 'Average'">
+      avg(value)
+    </if>
+    AS value,
+    i.code as index_code,
+    i.name as index_name,
+    i.unit_id,
+    d.index_id
+    FROM data_item d
+    LEFT JOIN energy_index i ON d.index_id = i.index_id
+    WHERE
+    i.code IN
+    <foreach item="indexCode" index="index" collection="indexCodes"
+      open="(" separator="," close=")">
+      #{indexCode}
+    </foreach>
+    AND time_type = #{timeType}
+    AND data_time &gt;= #{beginTime}
+    AND data_time &lt; #{endTime}
+    <if test="isFilter == true">
+      AND value > 0
+    </if>
+    GROUP BY d.index_id, i.code, i.unit_id, i.name
+  </select>
+
+  <select id="statistic" resultMap="dataItemMap">
+    SELECT
+    d.index_id,
+    time_code,
+    data_time,
+    i.code as index_code,
+    i.name as index_name,
+    i.unit_id,
+    VALUE
+    FROM
+    data_item d
+    LEFT JOIN energy_index i ON d.index_id = i.index_id
+    WHERE
+    d.index_id in
+    <foreach item="indexId" index="index" collection="indexIds"
+      open="(" separator="," close=")">
+      #{indexId}
+    </foreach>
+    AND data_time &gt;= #{beginTime}
+    AND data_time &lt; #{endTime}
+    AND time_type = #{timeType}
+    GROUP BY
+    d.index_id, time_code, data_time, value, i.code, i.unit_id, i.name
+  </select>
+
+  <select id="statisticByCode" resultMap="dataItemMap">
+    SELECT
+    d.index_id,
+    time_code,
+    data_time,
+    i.code as index_code,
+    i.name as index_name,
+    i.unit_id,
+    value
+    FROM
+    data_item d
+    LEFT JOIN energy_index i ON d.index_id = i.index_id
+    WHERE
+    i.code IN
+    <foreach item="indexCode" index="index" collection="indexCodes"
+      open="(" separator="," close=")">
+      #{indexCode}
+    </foreach>
+    AND data_time &gt;= #{beginTime}
+    AND data_time &lt;= #{endTime}
+    AND time_type = #{timeType}
+    GROUP BY
+    d.index_id, time_code, data_time, value, i.code, i.unit_id, i.name
+  </select>
+
+  <select id="getStatisticDatasById" resultMap="statisticResultMap">
+    SELECT
+    d.index_id,
+    i.code as index_code,
+    i.unit_id,
+    i.name as index_name,
+    MAX(value) as "maxvalue",
+    min(value) as minvalue,
+    avg(value) as avgvalue
+    FROM
+    data_item d
+    LEFT JOIN energy_index i ON d.index_id = i.index_id
+    WHERE
+    d.index_id in
+    <foreach item="indexId" index="index" collection="indexIds"
+      open="(" separator="," close=")">
+      #{indexId}
+    </foreach>
+    AND time_type = #{timeType}
+    GROUP BY
+    d.index_id, i.code, i.unit_id, i.name
+  </select>
+
+  <select id="getStatisticDatasByCode" resultMap="statisticResultMap">
+    SELECT
+    d.index_id,
+    i.code as index_code,
+    i.name as index_name,
+    i.unit_id,
+    MAX(value) as "maxvalue",
+    min(value) as minvalue,
+    avg(value) as avgvalue
+    FROM
+    data_item d
+    LEFT JOIN energy_index i ON d.index_id = i.index_id
+    WHERE
+    i.code IN
+    <foreach item="indexCode" index="index" collection="indexCodes"
+      open="(" separator="," close=")">
+      #{indexCode}
+    </foreach>
+    AND time_type = #{timeType}
+    GROUP BY
+    d.index_id, i.code, i.unit_id, i.name
+  </select>
+
+  <insert id="insert">
+    INSERT INTO data_item (index_id,
+                           time_code,
+                           time_type,
+                           begin_time,
+                           end_time,
+                           data_time,
+                           value,
+                           quality,
+                           create_time)
+    VALUES (#{dataItem.indexId},
+            #{dataItem.timeCode},
+            #{dataItem.timeType},
+            #{dataItem.beginTime},
+            #{dataItem.endTime},
+            #{dataItem.dataTime},
+            #{dataItem.value, jdbcType = DOUBLE},
+            #{dataItem.quality},
+            now())
+  </insert>
+
+  <insert id="save">
+    insert into data_item (index_id,
+                           time_code,
+                           time_type,
+                           begin_time,
+                           end_time,
+                           data_time,
+                           value,
+                           quality,
+                           create_time)
+    select #{dataItem.indexId},
+           #{dataItem.timeCode},
+           #{dataItem.timeType},
+           #{dataItem.beginTime},
+           #{dataItem.endTime},
+           #{dataItem.dataTime},
+           #{dataItem.value, jdbcType = DOUBLE},
+           #{dataItem.quality},
+           now()
+    on conflict
+      (index_id,time_code)
+    do update
+    set value = #{dataItem.value, jdbcType = DOUBLE},
+      quality = #{dataItem.quality},
+      update_time = now();
+
+  </insert>
+  <insert id="saveDataList" parameterType="java.util.List">
+    <foreach item="dataItem" collection="dataItemVlues">
+      <if test="dataItem != null">
+        insert into data_item (index_id,
+        time_code,
+        time_type,
+        begin_time,
+        end_time,
+        data_time,
+        value,
+        quality,
+        create_time)
+        select #{dataItem.indexId},
+        #{dataItem.timeCode},
+        #{dataItem.timeType},
+        #{dataItem.beginTime},
+        #{dataItem.endTime},
+        #{dataItem.dataTime},
+        #{dataItem.value, jdbcType = DOUBLE},
+        #{dataItem.quality},
+        now()
+        on conflict(index_id,time_code)
+        do update
+        set value= #{dataItem.value, jdbcType = DOUBLE},
+        quality = #{dataItem.quality},
+        update_time = now();
+      </if>
+    </foreach>
+  </insert>
+  <insert id="insertDataList">
+    insert into data_item (index_id, time_code,
+    time_type,
+    begin_time,
+    end_time,
+    data_time,
+    value,
+    quality,
+    create_time)
+    values
+    <foreach collection="list" item="dataItem" index="index" separator=",">
+      (#{dataItem.indexId},
+        #{dataItem.timeCode},
+        #{dataItem.timeType},
+        #{dataItem.beginTime},
+        #{dataItem.endTime},
+        #{dataItem.dataTime},
+        #{dataItem.value, jdbcType = DOUBLE},
+        #{dataItem.quality},
+        now())
+    </foreach>
+  </insert>
+    <insert id="insertTOUData">
+        insert into electricity_data_item (index_id, time_code,
+                                           electricity_type,
+                                           index_code,
+                                           data_time,
+                                           begin_time,
+                                           end_time,
+                                           electricity,
+                                           cost,
+                                           price,
+                                           create_time,
+                                           time_type)
+        values (#{dataItem.indexId},
+                #{dataItem.timeCode},
+                #{dataItem.electricityType},
+                #{dataItem.indexCode},
+                #{dataItem.dataTime},
+                #{dataItem.beginTime},
+                #{dataItem.endTime},
+                #{dataItem.electricity, jdbcType = DOUBLE},
+                #{dataItem.cost, jdbcType = DOUBLE},
+                #{dataItem.price, jdbcType = DOUBLE},
+                now(),
+                #{dataItem.timeType})
+          ON CONFLICT (index_id, time_code,electricity_type)
+            DO UPDATE SET electricity = EXCLUDED.electricity,cost = EXCLUDED.cost,price = EXCLUDED.price;
+    </insert>
+  <insert id="insertTOUDataItems">
+      insert into electricity_data_item (index_id, time_code,
+      electricity_type,
+      index_code,
+      data_time,
+      begin_time,
+      end_time,
+      electricity,
+      cost,
+      price,
+      create_time,
+      time_type)
+      values
+      <foreach collection="dataItems" item="dataItem" index="index" separator=",">
+          values (#{dataItem.indexId},
+          #{dataItem.timeCode},
+          #{dataItem.electricityType},
+          #{dataItem.indexCode},
+          #{dataItem.dataTime},
+          #{dataItem.beginTime},
+          #{dataItem.endTime},
+          #{dataItem.electricity, jdbcType = DOUBLE},
+          #{dataItem.cost, jdbcType = DOUBLE},
+          #{dataItem.price, jdbcType = DOUBLE},
+          now(),
+          #{dataItem.timeType})
+      </foreach>
+      ON CONFLICT (index_id, time_code,electricity_type)
+      DO UPDATE SET electricity = EXCLUDED.electricity,cost = EXCLUDED.cost,price = EXCLUDED.price;
+  </insert>
+
+  <update id="update">
+    UPDATE data_item
+    SET value       = #{dataItem.value, jdbcType = DOUBLE},
+        quality     = #{dataItem.quality},
+        update_time = now()
+    WHERE index_id = #{dataItem.indexId}
+      AND time_code = #{dataItem.timeCode}
+  </update>
+  <select id="getPeriodDatasByIndexAndQuality" resultMap="dataItemMap">
+    SELECT index_id, time_code, time_type, begin_time, end_time, data_time, `value`, quality,
+    create_time, update_time
+    FROM data_item
+    WHERE index_id in
+    <foreach item="indexId" index="index" collection="indexIds"
+      open="(" separator="," close=")">
+      #{indexId}
+    </foreach>
+    AND time_type = #{timeType}
+    AND data_time &gt;= #{beginTime}
+    AND data_time &lt; #{endTime}
+    AND quality = #{quality}
+  </select>
+  <select id="getDataByIndexCode" resultMap="dataItemMap">
+    <include refid="itemHead"/>
+    WHERE ci.code = #{indexCode}
+    AND di.time_code = #{timeCode}
+  </select>
+  <select id="queryDataItemIsExist" resultType="java.lang.String">
+    select concat(time_code, ':', index_id)
+    from data_item where
+    <foreach collection="queryMap.keys" index="index" item="key" separator="or">
+      (time_code = #{key} and index_id in
+      <foreach collection="queryMap[key]" item="id" separator="," open="(" close=")">
+        #{id}
+      </foreach>
+      )
+    </foreach>
+  </select>
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/realtimedata/SysEquipmentFileMapper.xml b/zhitan-system/src/main/resources/mapper/realtimedata/SysEquipmentFileMapper.xml
new file mode 100644
index 0000000..43c7d9f
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/realtimedata/SysEquipmentFileMapper.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.realtimedata.mapper.SysEquipmentFileMapper">
+    <resultMap id="SysEquipmentFile"
+               type="com.zhitan.realtimedata.domain.SysEquipmentFile">
+        <result property="nodeId" column="node_id"/>
+        <result property="filePath" column="filepath"/>
+    </resultMap>
+    <resultMap id="SysSvgInfo"
+               type="com.zhitan.realtimedata.domain.SysSvgInfo">
+        <result property="id" column="id"/>
+        <result property="param" column="param"/>
+        <result property="tag" column="tag"/>
+    </resultMap>
+
+  <insert id="saveSettingInfo">
+    delete
+    from sys_svg_info
+    where node_id = #{nodeId};
+
+    <foreach collection="svgInfo" item="info" separator=";">
+      insert into sys_svg_info (id, node_id, param, tag)
+      values (#{info.id}, #{nodeId}, #{info.param}, #{info.tag});
+    </foreach>
+  </insert>
+
+  <insert id="saveEquipmentFile">
+    insert into sys_equipmentfile (node_id, filepath)
+    select #{nodeId}, #{filePath}
+    on conflict
+      (node_id)
+    do update
+    set filepath = #{filePath}
+  </insert>
+  <select id="getConfigure" resultMap="SysEquipmentFile">
+    select node_id, filepath
+    from sys_equipmentfile
+    where node_id = #{nodeId};
+  </select>
+  <select id="getConfigureTag" resultMap="SysSvgInfo">
+    select id, param, tag
+    from sys_svg_info
+    where node_id = #{nodeId}
+  </select>
+
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/system/SysConfigMapper.xml b/zhitan-system/src/main/resources/mapper/system/SysConfigMapper.xml
new file mode 100644
index 0000000..afb865f
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/system/SysConfigMapper.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysConfigMapper">
+    
+    <resultMap type="SysConfig" id="SysConfigResult">
+    	<id     property="configId"      column="config_id"      />
+        <result property="configName"    column="config_name"    />
+        <result property="configKey"     column="config_key"     />
+        <result property="configValue"   column="config_value"   />
+        <result property="configType"    column="config_type"    />
+        <result property="createBy"      column="create_by"      />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"      column="update_by"      />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+    
+    <sql id="selectConfigVo">
+        select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark 
+		from sys_config
+    </sql>
+    
+    <!-- 鏌ヨ鏉′欢 -->
+	<sql id="sqlwhereSearch">
+		<where>
+			<if test="configId !=null">
+				and config_id = #{configId}
+			</if>
+			<if test="configKey !=null and configKey != ''">
+				and config_key = #{configKey}
+			</if>
+		</where>
+	</sql>
+    
+    <select id="selectConfig" parameterType="SysConfig" resultMap="SysConfigResult">
+        <include refid="selectConfigVo"/>
+        <include refid="sqlwhereSearch"/>
+    </select>
+    
+    <select id="selectConfigList" parameterType="SysConfig" resultMap="SysConfigResult">
+        <include refid="selectConfigVo"/>
+        <where>
+			<if test="configName != null and configName != ''">
+				AND config_name like concat('%', #{configName}, '%')
+			</if>
+			<if test="configType != null and configType != ''">
+				AND config_type = #{configType}
+			</if>
+			<if test="configKey != null and configKey != ''">
+				AND config_key like concat('%', #{configKey}, '%')
+			</if>
+			<if test="beginTime != null and beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+				and create_time &gt;= to_date(#{beginTime},'yyyy-mm-dd hh24:mi:ss')
+			</if>
+			<if test="endTime != null and endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+				and create_time &lt;= to_date(#{endTime},'yyyy-mm-dd hh24:mi:ss')
+			</if>
+		</where>
+    </select>
+    
+    <select id="checkConfigKeyUnique" parameterType="String" resultMap="SysConfigResult">
+        <include refid="selectConfigVo"/>
+        where config_key = #{configKey}
+    </select>
+    
+    <insert id="insertConfig" parameterType="SysConfig">
+        insert into sys_config (
+			<if test="configName != null and configName != '' ">config_name,</if>
+			<if test="configKey != null and configKey != '' ">config_key,</if>
+			<if test="configValue != null and configValue != '' ">config_value,</if>
+			<if test="configType != null and configType != '' ">config_type,</if>
+			<if test="createBy != null and createBy != ''">create_by,</if>
+			<if test="remark != null and remark != ''">remark,</if>
+ 			create_time
+        )values(
+			<if test="configName != null and configName != ''">#{configName},</if>
+			<if test="configKey != null and configKey != ''">#{configKey},</if>
+			<if test="configValue != null and configValue != ''">#{configValue},</if>
+			<if test="configType != null and configType != ''">#{configType},</if>
+			<if test="createBy != null and createBy != ''">#{createBy},</if>
+			<if test="remark != null and remark != ''">#{remark},</if>
+        now()
+		)
+    </insert>
+	 
+    <update id="updateConfig" parameterType="SysConfig">
+        update sys_config 
+        <set>
+            <if test="configName != null and configName != ''">config_name = #{configName},</if>
+            <if test="configKey != null and configKey != ''">config_key = #{configKey},</if>
+            <if test="configValue != null and configValue != ''">config_value = #{configValue},</if>
+            <if test="configType != null and configType != ''">config_type = #{configType},</if>
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="remark != null">remark = #{remark},</if>
+ 			update_time = now()
+        </set>
+        where config_id = #{configId}
+    </update>
+	
+    <delete id="deleteConfigById" parameterType="Long">
+        delete from sys_config where config_id = #{configId}
+    </delete>
+    
+    <delete id="deleteConfigByIds" parameterType="Long">
+        delete from sys_config where config_id in 
+        <foreach item="configId" collection="array" open="(" separator="," close=")">
+        	#{configId}
+        </foreach>
+    </delete>
+    
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/system/SysDeptMapper.xml b/zhitan-system/src/main/resources/mapper/system/SysDeptMapper.xml
new file mode 100644
index 0000000..5d8823d
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysDeptMapper">
+
+    <resultMap type="SysDept" id="SysDeptResult">
+        <id property="deptId" column="dept_id"/>
+        <result property="parentId" column="parent_id"/>
+        <result property="ancestors" column="ancestors"/>
+        <result property="deptName" column="dept_name"/>
+        <result property="orderNum" column="order_num"/>
+        <result property="leader" column="leader"/>
+        <result property="phone" column="phone"/>
+        <result property="email" column="email"/>
+        <result property="status" column="status"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="parentName" column="parent_name"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <sql id="selectDeptVo">
+        select d.dept_id,
+               d.parent_id,
+               d.ancestors,
+               d.dept_name,
+               d.order_num,
+               d.leader,
+               d.phone,
+               d.email,
+               d.status,
+               d.del_flag,
+               d.create_by,
+               d.create_time
+        from sys_dept d
+    </sql>
+
+    <select id="selectDeptList" parameterType="SysDept" resultMap="SysDeptResult">
+        <include refid="selectDeptVo"/>
+        where d.del_flag = '0'
+		<if test="deptId != null and deptId != 0">
+			AND dept_id = #{deptId}
+		</if>
+        <if test="parentId != null and parentId != 0">
+            AND parent_id = #{parentId}
+        </if>
+        <if test="deptName != null and deptName != ''">
+            AND dept_name like concat('%', #{deptName}, '%')
+        </if>
+        <if test="status != null and status != ''">
+            AND status = #{status}
+        </if>
+        <!-- 鏁版嵁鑼冨洿杩囨护 -->
+		${params.dataScope}
+        order by d.parent_id, d.order_num
+    </select>
+
+    <select id="selectDeptListByRoleId" resultType="Long">
+		select d.dept_id
+        from sys_dept d
+                 left join sys_role_dept rd on d.dept_id = rd.dept_id
+        where rd.role_id = #{roleId}
+            <if test="deptCheckStrictly">
+              and d.dept_id not in (select d.parent_id from sys_dept d inner join sys_role_dept rd on d.dept_id = rd.dept_id and rd.role_id = #{roleId})
+            </if>
+        order by d.parent_id, d.order_num
+    </select>
+
+    <select id="selectDeptById" parameterType="Long" resultMap="SysDeptResult">
+        <include refid="selectDeptVo"/>
+        where dept_id = #{deptId}
+    </select>
+
+    <select id="checkDeptExistUser" parameterType="Long" resultType="int">
+        select count(1)
+        from sys_user
+        where dept_id = #{deptId}
+          and del_flag = '0'
+    </select>
+
+    <select id="hasChildByDeptId" parameterType="Long" resultType="int">
+        select count(1)
+        from sys_dept
+		where del_flag = '0' and parent_id = #{deptId} limit 1
+    </select>
+
+    <select id="selectChildrenDeptById" parameterType="Long" resultMap="SysDeptResult">
+        select *
+        from sys_dept
+        where ancestors = (select ancestors from sys_dept where dept_id = #{deptId}) || #{deptId}
+    </select>
+
+    <select id="checkDeptNameUnique" resultMap="SysDeptResult">
+        <include refid="selectDeptVo"/>
+		where dept_name=#{deptName} and parent_id = #{parentId} and del_flag = '0' limit 1
+    </select>
+
+    <insert id="insertDept" parameterType="SysDept">
+        insert into sys_dept(
+        <if test="deptId != null and deptId != 0">dept_id,</if>
+        <if test="parentId != null and parentId != 0">parent_id,</if>
+        <if test="deptName != null and deptName != ''">dept_name,</if>
+        <if test="ancestors != null and ancestors != ''">ancestors,</if>
+        <if test="orderNum != null and orderNum != ''">order_num,</if>
+        <if test="leader != null and leader != ''">leader,</if>
+        <if test="phone != null and phone != ''">phone,</if>
+        <if test="email != null and email != ''">email,</if>
+        <if test="status != null">status,</if>
+        <if test="createBy != null and createBy != ''">create_by,</if>
+        create_time
+        )values(
+        <if test="deptId != null and deptId != 0">#{deptId},</if>
+        <if test="parentId != null and parentId != 0">#{parentId},</if>
+        <if test="deptName != null and deptName != ''">#{deptName},</if>
+        <if test="ancestors != null and ancestors != ''">#{ancestors},</if>
+        <if test="orderNum != null and orderNum != ''">#{orderNum},</if>
+        <if test="leader != null and leader != ''">#{leader},</if>
+        <if test="phone != null and phone != ''">#{phone},</if>
+        <if test="email != null and email != ''">#{email},</if>
+        <if test="status != null">#{status},</if>
+        <if test="createBy != null and createBy != ''">#{createBy},</if>
+        now()
+        )
+    </insert>
+
+    <update id="updateDept" parameterType="SysDept">
+        update sys_dept
+        <set>
+            <if test="parentId != null and parentId != 0">parent_id = #{parentId},</if>
+            <if test="deptName != null and deptName != ''">dept_name = #{deptName},</if>
+            <if test="ancestors != null and ancestors != ''">ancestors = #{ancestors},</if>
+            <if test="orderNum != null and orderNum != ''">order_num = #{orderNum},</if>
+            <if test="leader != null">leader = #{leader},</if>
+            <if test="phone != null">phone = #{phone},</if>
+            <if test="email != null">email = #{email},</if>
+            <if test="status != null and status != ''">status = #{status},</if>
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+            update_time = now()
+        </set>
+        where dept_id = #{deptId}
+    </update>
+
+    <update id="updateDeptChildren" parameterType="java.util.List">
+        update sys_dept set ancestors =
+        <foreach collection="depts" item="item" index="index"
+                 separator=" " open="case dept_id" close="end">
+            when #{item.deptId} then #{item.ancestors}
+        </foreach>
+        where dept_id in
+        <foreach collection="depts" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item.deptId}
+        </foreach>
+    </update>
+
+    <update id="updateDeptStatusNormal" parameterType="Long">
+        update sys_dept set status = '0' where dept_id in
+        <foreach collection="depts" item="deptId" open="(" separator="," close=")">
+            #{deptId}
+        </foreach>
+    </update>
+    
+    <update id="updateDeptStatus" parameterType="SysDept">
+        update sys_dept
+        <set>
+            <if test="status != null and status != ''">status = #{status},</if>
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+            update_time = now()
+        </set>
+        where dept_id in (${ancestors})
+    </update>
+
+    <delete id="deleteDeptById" parameterType="Long">
+        update sys_dept
+        set del_flag = '2'
+        where dept_id = #{deptId}
+    </delete>
+
+</mapper> 
diff --git a/zhitan-system/src/main/resources/mapper/system/SysDictDataMapper.xml b/zhitan-system/src/main/resources/mapper/system/SysDictDataMapper.xml
new file mode 100644
index 0000000..4397173
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/system/SysDictDataMapper.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysDictDataMapper">
+	
+	<resultMap type="SysDictData" id="SysDictDataResult">
+		<id     property="dictCode"   column="dict_code"   />
+		<result property="dictSort"   column="dict_sort"   />
+		<result property="dictLabel"  column="dict_label"  />
+		<result property="dictValue"  column="dict_value"  />
+		<result property="dictType"   column="dict_type"   />
+		<result property="cssClass"   column="css_class"   />
+		<result property="listClass"  column="list_class"  />
+		<result property="isDefault"  column="is_default"  />
+		<result property="status"     column="status"      />
+		<result property="createBy"   column="create_by"   />
+		<result property="createTime" column="create_time" />
+		<result property="updateBy"   column="update_by"   />
+		<result property="updateTime" column="update_time" />
+	</resultMap>
+	
+	<sql id="selectDictDataVo">
+        select dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark 
+		from sys_dict_data
+    </sql>
+
+	<select id="selectDictDataList" parameterType="SysDictData" resultMap="SysDictDataResult">
+	    <include refid="selectDictDataVo"/>
+		<where>
+		    <if test="dictType != null and dictType != ''">
+				AND dict_type = #{dictType}
+			</if>
+			<if test="dictLabel != null and dictLabel != ''">
+				AND dict_label like concat('%', #{dictLabel}, '%')
+			</if>
+			<if test="status != null and status != ''">
+				AND status = #{status}
+			</if>
+			order by dict_sort
+		</where>
+	</select>
+	
+	<select id="selectDictDataByType" parameterType="SysDictData" resultMap="SysDictDataResult">
+		<include refid="selectDictDataVo"/>
+		where status = '0' and dict_type = #{dictType} order by dict_sort asc
+	</select>
+
+	<select id="selectDictLabel" resultType="String">
+		select dict_label from sys_dict_data
+		where dict_type = #{dictType} and dict_value = #{dictValue}
+	</select>
+	
+	<select id="selectDictDataById" parameterType="Long" resultMap="SysDictDataResult">
+		<include refid="selectDictDataVo"/>
+		where dict_code = #{dictCode}
+	</select>
+	
+	<select id="countDictDataByType" resultType="Integer">
+	    select count(1) from sys_dict_data where dict_type=#{dictType}  
+	</select>
+	
+	<delete id="deleteDictDataById" parameterType="Long">
+ 		delete from sys_dict_data where dict_code = #{dictCode}
+ 	</delete>
+ 	
+ 	<delete id="deleteDictDataByIds" parameterType="Long">
+ 		delete from sys_dict_data where dict_code in
+ 		<foreach collection="array" item="dictCode" open="(" separator="," close=")">
+ 			#{dictCode}
+        </foreach> 
+ 	</delete>
+	
+	<update id="updateDictData" parameterType="SysDictData">
+ 		update sys_dict_data
+ 		<set>
+ 			<if test="dictSort != null and dictSort != ''">dict_sort = #{dictSort},</if>
+ 			<if test="dictLabel != null and dictLabel != ''">dict_label = #{dictLabel},</if>
+ 			<if test="dictValue != null and dictValue != ''">dict_value = #{dictValue},</if>
+ 			<if test="dictType != null and dictType != ''">dict_type = #{dictType},</if>
+ 			<if test="cssClass != null">css_class = #{cssClass},</if>
+ 			<if test="listClass != null">list_class = #{listClass},</if>
+ 			<if test="isDefault != null and isDefault != ''">is_default = #{isDefault},</if>
+ 			<if test="status != null">status = #{status},</if>
+ 			<if test="remark != null">remark = #{remark},</if>
+ 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+ 			update_time = now()
+ 		</set>
+ 		where dict_code = #{dictCode}
+	</update>
+	
+	<update id="updateDictDataType" parameterType="String">
+ 		update sys_dict_data set dict_type = #{newDictType} where dict_type = #{oldDictType}
+	</update>
+ 	
+ 	<insert id="insertDictData" parameterType="SysDictData">
+ 		insert into sys_dict_data(
+ 			<if test="dictSort != null and dictSort != ''">dict_sort,</if>
+ 			<if test="dictLabel != null and dictLabel != ''">dict_label,</if>
+ 			<if test="dictValue != null and dictValue != ''">dict_value,</if>
+ 			<if test="dictType != null and dictType != ''">dict_type,</if>
+ 			<if test="cssClass != null and cssClass != ''">css_class,</if>
+ 			<if test="listClass != null and listClass != ''">list_class,</if>
+ 			<if test="isDefault != null and isDefault != ''">is_default,</if>
+ 			<if test="status != null">status,</if>
+ 			<if test="remark != null and remark != ''">remark,</if>
+ 			<if test="createBy != null and createBy != ''">create_by,</if>
+ 			create_time
+ 		)values(
+ 		    <if test="dictSort != null and dictSort != ''">#{dictSort},</if>
+ 		    <if test="dictLabel != null and dictLabel != ''">#{dictLabel},</if>
+ 			<if test="dictValue != null and dictValue != ''">#{dictValue},</if>
+ 			<if test="dictType != null and dictType != ''">#{dictType},</if>
+ 			<if test="cssClass != null and cssClass != ''">#{cssClass},</if>
+ 			<if test="listClass != null and listClass != ''">#{listClass},</if>
+ 			<if test="isDefault != null and isDefault != ''">#{isDefault},</if>
+ 			<if test="status != null">#{status},</if>
+ 			<if test="remark != null and remark != ''">#{remark},</if>
+ 			<if test="createBy != null and createBy != ''">#{createBy},</if>
+ 			now()
+ 		)
+	</insert>
+	
+</mapper> 
diff --git a/zhitan-system/src/main/resources/mapper/system/SysDictTypeMapper.xml b/zhitan-system/src/main/resources/mapper/system/SysDictTypeMapper.xml
new file mode 100644
index 0000000..cffebc5
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/system/SysDictTypeMapper.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysDictTypeMapper">
+
+	<resultMap type="SysDictType" id="SysDictTypeResult">
+		<id     property="dictId"     column="dict_id"     />
+		<result property="dictName"   column="dict_name"   />
+		<result property="dictType"   column="dict_type"   />
+		<result property="status"     column="status"      />
+		<result property="createBy"   column="create_by"   />
+		<result property="createTime" column="create_time" />
+		<result property="updateBy"   column="update_by"   />
+		<result property="updateTime" column="update_time" />
+	</resultMap>
+	
+	<sql id="selectDictTypeVo">
+        select dict_id, dict_name, dict_type, status, create_by, create_time, remark 
+		from sys_dict_type
+    </sql>
+
+	<select id="selectDictTypeList" parameterType="SysDictType" resultMap="SysDictTypeResult">
+	    <include refid="selectDictTypeVo"/>
+		<where>
+		    <if test="dictName != null and dictName != ''">
+				AND dict_name like concat('%', #{dictName}, '%')
+			</if>
+			<if test="status != null and status != ''">
+				AND status = #{status}
+			</if>
+			<if test="dictType != null and dictType != ''">
+				AND dict_type like concat('%', #{dictType}, '%')
+			</if>
+			<if test="beginTime != null and beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+				and to_char(create_time,'yyyymmdd') &gt;= to_char(to_date(#{beginTime}, 'yyyy-mm-dd'),'yyyymmdd')
+			</if>
+			<if test="endTime != null and endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+				and to_char(create_time,'yyyymmdd') &lt;= to_char(to_date(#{endTime}, 'yyyy-mm-dd'),'yyyymmdd')
+			</if>
+	    </where>
+	</select>
+	
+	<select id="selectDictTypeAll" resultMap="SysDictTypeResult">
+		<include refid="selectDictTypeVo"/>
+	</select>
+	
+	<select id="selectDictTypeById" parameterType="Long" resultMap="SysDictTypeResult">
+		<include refid="selectDictTypeVo"/>
+		where dict_id = #{dictId}
+	</select>
+	
+	<select id="selectDictTypeByType" parameterType="String" resultMap="SysDictTypeResult">
+		<include refid="selectDictTypeVo"/>
+		where dict_type = #{dictType}
+	</select>
+	
+	<select id="checkDictTypeUnique" parameterType="String" resultMap="SysDictTypeResult">
+		<include refid="selectDictTypeVo"/>
+		where dict_type = #{dictType}
+	</select>
+	
+	<delete id="deleteDictTypeById" parameterType="Long">
+ 		delete from sys_dict_type where dict_id = #{dictId}
+ 	</delete>
+ 	
+ 	<delete id="deleteDictTypeByIds" parameterType="Long">
+ 		delete from sys_dict_type where dict_id in
+ 		<foreach collection="array" item="dictId" open="(" separator="," close=")">
+ 			#{dictId}
+        </foreach> 
+ 	</delete>
+
+ 	<update id="updateDictType" parameterType="SysDictType">
+ 		update sys_dict_type
+ 		<set>
+ 			<if test="dictName != null and dictName != ''">dict_name = #{dictName},</if>
+ 			<if test="dictType != null and dictType != ''">dict_type = #{dictType},</if>
+ 			<if test="status != null">status = #{status},</if>
+ 			<if test="remark != null">remark = #{remark},</if>
+ 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+ 			update_time = now()
+ 		</set>
+ 		where dict_id = #{dictId}
+	</update>
+ 	
+ 	<insert id="insertDictType" parameterType="SysDictType">
+ 		insert into sys_dict_type(
+ 			<if test="dictName != null and dictName != ''">dict_name,</if>
+ 			<if test="dictType != null and dictType != ''">dict_type,</if>
+ 			<if test="status != null">status,</if>
+ 			<if test="remark != null and remark != ''">remark,</if>
+ 			<if test="createBy != null and createBy != ''">create_by,</if>
+ 			create_time
+ 		)values(
+ 			<if test="dictName != null and dictName != ''">#{dictName},</if>
+ 			<if test="dictType != null and dictType != ''">#{dictType},</if>
+ 			<if test="status != null">#{status},</if>
+ 			<if test="remark != null and remark != ''">#{remark},</if>
+ 			<if test="createBy != null and createBy != ''">#{createBy},</if>
+			now()
+ 		)
+	</insert>
+	
+</mapper> 
diff --git a/zhitan-system/src/main/resources/mapper/system/SysLoginInfoMapper.xml b/zhitan-system/src/main/resources/mapper/system/SysLoginInfoMapper.xml
new file mode 100644
index 0000000..093d852
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/system/SysLoginInfoMapper.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysLoginInfoMapper">
+
+	<resultMap type="SysLoginInfo" id="SysSysLoginInfoResult">
+		<id     property="infoId"        column="info_id"           />
+		<result property="userName"      column="user_name"         />
+		<result property="status"        column="status"            />
+		<result property="ipaddr"        column="ipaddr"            />
+		<result property="loginLocation" column="login_location"    />
+		<result property="browser"       column="browser"           />
+		<result property="os"            column="os"                />
+		<result property="msg"           column="msg"               />
+		<result property="loginTime"     column="login_time"        />
+	</resultMap>
+
+	<insert id="insertLoginInfo" parameterType="SysLoginInfo">
+		insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time)
+		values (#{userName}, #{status}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{msg}, now())
+	</insert>
+	
+	<select id="selectLoginInfoList" parameterType="SysLoginInfo" resultMap="SysSysLoginInfoResult">
+		select info_id, user_name, ipaddr, login_location, browser, os, status, msg, login_time from sys_logininfor
+		<where>
+			<if test="ipaddr != null and ipaddr != ''">
+				AND ipaddr like concat('%', #{ipaddr}, '%')
+			</if>
+			<if test="status != null and status != ''">
+				AND status = #{status}
+			</if>
+			<if test="userName != null and userName != ''">
+				AND user_name like concat('%', #{userName}, '%')
+			</if>
+			<if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+				AND login_time &gt;= #{params.beginTime}
+			</if>
+			<if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+				AND login_time &lt;= #{params.endTime}
+			</if>
+		</where>
+		order by info_id desc
+	</select>
+	
+	<delete id="deleteLoginInfoByIds" parameterType="Long">
+ 		delete from sys_logininfor where info_id in
+ 		<foreach collection="array" item="infoId" open="(" separator="," close=")">
+ 			#{infoId}
+        </foreach> 
+ 	</delete>
+    
+    <update id="cleanLoginInfo">
+        truncate table sys_logininfor
+    </update>
+    
+</mapper> 
\ No newline at end of file
diff --git a/zhitan-system/src/main/resources/mapper/system/SysMenuMapper.xml b/zhitan-system/src/main/resources/mapper/system/SysMenuMapper.xml
new file mode 100644
index 0000000..6fb3299
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/system/SysMenuMapper.xml
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+		PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+		"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysMenuMapper">
+
+	<resultMap type="SysMenu" id="SysMenuResult">
+		<id     property="menuId"         column="menu_id"        />
+		<result property="menuName"       column="menu_name"      />
+		<result property="parentName"     column="parent_name"    />
+		<result property="parentId"       column="parent_id"      />
+		<result property="orderNum"       column="order_num"      />
+		<result property="path"           column="path"           />
+		<result property="component"      column="component"      />
+		<result property="query"          column="query"          />
+		<result property="isFrame"        column="is_frame"       />
+		<result property="isCache"        column="is_cache"       />
+		<result property="menuType"       column="menu_type"      />
+		<result property="visible"        column="visible"        />
+		<result property="status"         column="status"         />
+		<result property="perms"          column="perms"          />
+		<result property="icon"           column="icon"           />
+		<result property="createBy"       column="create_by"      />
+		<result property="createTime"     column="create_time"    />
+		<result property="updateTime"     column="update_time"    />
+		<result property="updateBy"       column="update_by"      />
+		<result property="remark"         column="remark"         />
+		<result property="parameter"         column="page_parameter"         />
+	</resultMap>
+
+	<sql id="selectMenuVo">
+        select menu_id, menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, COALESCE(perms,'') as perms, icon, create_time,page_parameter
+		from sys_menu
+    </sql>
+    
+    <select id="selectMenuList" parameterType="SysMenu" resultMap="SysMenuResult">
+		<include refid="selectMenuVo"/>
+		<where>
+			<if test="menuName != null and menuName != ''">
+				AND menu_name like concat('%', #{menuName}, '%')
+			</if>
+			<if test="visible != null and visible != ''">
+				AND visible = #{visible}
+			</if>
+			<if test="status != null and status != ''">
+				AND status = #{status}
+			</if>
+		</where>
+		order by parent_id, order_num
+	</select>
+	
+	<select id="selectMenuTreeAll" resultMap="SysMenuResult">
+		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.query,m.visible, m.status, COALESCE(m.perms,'') as perms, m.is_frame, m.is_cache,m.menu_type, m.icon, m.order_num, m.create_time,m.page_parameter
+		from sys_menu m where m.menu_type in ('M', 'C') and m.status = '0'
+		order by m.parent_id, m.order_num
+	</select>
+
+	<select id="selectMenuListByUserId" parameterType="SysMenu" resultMap="SysMenuResult">
+		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.query, m.visible, m.status, COALESCE(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
+		from sys_menu m
+		left join sys_role_menu rm on m.menu_id = rm.menu_id
+		left join sys_user_role ur on rm.role_id = ur.role_id
+		left join sys_role ro on ur.role_id = ro.role_id
+		where ur.user_id = #{params.userId}
+		<if test="menuName != null and menuName != ''">
+			AND m.menu_name like concat('%', #{menuName}, '%')
+		</if>
+		<if test="visible != null and visible != ''">
+			AND m.visible = #{visible}
+		</if>
+		<if test="status != null and status != ''">
+			AND m.status = #{status}
+		</if>
+		order by m.parent_id, m.order_num
+	</select>
+    
+    <select id="selectMenuTreeByUserId" parameterType="Long" resultMap="SysMenuResult">
+		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.visible, m.status, COALESCE(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time,m.page_parameter
+		from sys_menu m
+			 left join sys_role_menu rm on m.menu_id = rm.menu_id
+			 left join sys_user_role ur on rm.role_id = ur.role_id
+			 left join sys_role ro on ur.role_id = ro.role_id
+			 left join sys_user u on ur.user_id = u.user_id
+		where u.user_id = #{userId} and m.menu_type in ('M', 'C') and m.status = '0'  AND ro.status = '0'
+		order by m.parent_id, m.order_num
+	</select>
+	
+	<select id="selectMenuListByRoleId" resultType="Long">
+		select m.menu_id
+		from sys_menu m
+            left join sys_role_menu rm on m.menu_id = rm.menu_id
+        where rm.role_id = #{roleId}
+            <if test="menuCheckStrictly">
+              and m.menu_id not in (select m.parent_id from sys_menu m inner join sys_role_menu rm on m.menu_id = rm.menu_id and rm.role_id = #{roleId})
+            </if>
+		order by m.parent_id, m.order_num
+	</select>
+	
+	<select id="selectMenuPerms" resultType="String">
+		select distinct m.perms
+		from sys_menu m
+			 left join sys_role_menu rm on m.menu_id = rm.menu_id
+			 left join sys_user_role ur on rm.role_id = ur.role_id
+	</select>
+
+	<select id="selectMenuPermsByUserId" parameterType="Long" resultType="String">
+		select distinct m.perms
+		from sys_menu m
+			 left join sys_role_menu rm on m.menu_id = rm.menu_id
+			 left join sys_user_role ur on rm.role_id = ur.role_id
+			 left join sys_role r on r.role_id = ur.role_id
+		where m.status = '0' and r.status = '0' and ur.user_id = #{userId}
+	</select>
+	
+	<select id="selectMenuPermsByRoleId" parameterType="Long" resultType="String">
+		select distinct m.perms
+		from sys_menu m
+			 left join sys_role_menu rm on m.menu_id = rm.menu_id
+		where m.status = '0' and rm.role_id = #{roleId}
+	</select>
+	
+	<select id="selectMenuById" parameterType="Long" resultMap="SysMenuResult">
+		<include refid="selectMenuVo"/>
+		where menu_id = #{menuId}
+	</select>
+	
+	<select id="hasChildByMenuId" resultType="Integer">
+	    select count(1) from sys_menu where parent_id = #{menuId}  
+	</select>
+	
+	<select id="checkMenuNameUnique" parameterType="SysMenu" resultMap="SysMenuResult">
+		<include refid="selectMenuVo"/>
+		where menu_name=#{menuName} and parent_id = #{parentId} limit 1
+	</select>
+	
+	<update id="updateMenu" parameterType="SysMenu">
+		update sys_menu
+		<set>
+			<if test="menuName != null and menuName != ''">menu_name = #{menuName},</if>
+			<if test="parentId != null and parentId != 0">parent_id = #{parentId},</if>
+			<if test="orderNum != null and orderNum != ''">order_num = #{orderNum},</if>
+			<if test="path != null and path != ''">path = #{path},</if>
+			<if test="component != null">component = #{component},</if>
+			<if test="query != null">query = #{query},</if>
+			<if test="isFrame != null and isFrame != ''">is_frame = #{isFrame},</if>
+			<if test="isCache != null and isCache != ''">is_cache = #{isCache},</if>
+			<if test="menuType != null and menuType != ''">menu_type = #{menuType},</if>
+			<if test="visible != null">visible = #{visible},</if>
+			<if test="status != null">status = #{status},</if>
+			<if test="perms !=null">perms = #{perms},</if>
+			<if test="icon !=null and icon != ''">icon = #{icon},</if>
+			<if test="remark != null and remark != ''">remark = #{remark},</if>
+			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+			<if test="parameter != null and parameter != ''">page_parameter = #{parameter},</if>
+			update_time = now()
+		</set>
+		where menu_id = #{menuId}
+	</update>
+
+	<insert id="insertMenu" parameterType="SysMenu">
+		insert into sys_menu(
+		<if test="menuId != null and menuId != 0">menu_id,</if>
+		<if test="parentId != null and parentId != 0">parent_id,</if>
+		<if test="menuName != null and menuName != ''">menu_name,</if>
+		<if test="orderNum != null and orderNum != ''">order_num,</if>
+		<if test="path != null and path != ''">path,</if>
+		<if test="component != null and component != ''">component,</if>
+		<if test="query != null and query != ''">query,</if>
+		<if test="isFrame != null and isFrame != ''">is_frame,</if>
+		<if test="isCache != null and isCache != ''">is_cache,</if>
+		<if test="menuType != null and menuType != ''">menu_type,</if>
+		<if test="visible != null">visible,</if>
+		<if test="status != null">status,</if>
+		<if test="perms !=null and perms != ''">perms,</if>
+		<if test="icon != null and icon != ''">icon,</if>
+		<if test="remark != null and remark != ''">remark,</if>
+		<if test="createBy != null and createBy != ''">create_by,</if>
+		<if test="parameter != null and parameter != ''">page_parameter,</if>
+		create_time
+		)values(
+		<if test="menuId != null and menuId != 0">#{menuId},</if>
+		<if test="parentId != null and parentId != 0">#{parentId},</if>
+		<if test="menuName != null and menuName != ''">#{menuName},</if>
+		<if test="orderNum != null and orderNum != ''">#{orderNum},</if>
+		<if test="path != null and path != ''">#{path},</if>
+		<if test="component != null and component != ''">#{component},</if>
+		<if test="query != null and query != ''">#{query},</if>
+		<if test="isFrame != null and isFrame != ''">#{isFrame},</if>
+		<if test="isCache != null and isCache != ''">#{isCache},</if>
+		<if test="menuType != null and menuType != ''">#{menuType},</if>
+		<if test="visible != null">#{visible},</if>
+		<if test="status != null">#{status},</if>
+		<if test="perms !=null and perms != ''">#{perms},</if>
+		<if test="icon != null and icon != ''">#{icon},</if>
+		<if test="remark != null and remark != ''">#{remark},</if>
+		<if test="createBy != null and createBy != ''">#{createBy},</if>
+		<if test="parameter != null and parameter != ''">#{parameter},</if>
+		now()
+		)
+	</insert>
+	
+	<delete id="deleteMenuById" parameterType="Long">
+	    delete from sys_menu where menu_id = #{menuId}
+	</delete>
+
+</mapper> 
diff --git a/zhitan-system/src/main/resources/mapper/system/SysNameConfigMapper.xml b/zhitan-system/src/main/resources/mapper/system/SysNameConfigMapper.xml
new file mode 100644
index 0000000..0817d3d
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/system/SysNameConfigMapper.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysNameConfigMapper">
+
+    <resultMap type="SysNameConfig" id="SysNameConfigResult">
+        <result property="systemName"    column="system_name"    />
+        <result property="leftLogo"    column="left_logo"    />
+        <result property="copyRight"    column="copy_right"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="id"    column="id"    />
+        <result property="homeLogo"    column="home_logo"    />
+    </resultMap>
+
+    <sql id="selectSysNameConfigVo">
+        select system_name, left_logo, copy_right, create_by, create_time, update_by, update_time, remark, id, home_logo from sys_name_config
+    </sql>
+
+    <select id="selectSysNameConfigList" parameterType="SysNameConfig" resultMap="SysNameConfigResult">
+        <include refid="selectSysNameConfigVo"/>
+        <where>
+            <if test="systemName != null  and systemName != ''"> and system_name like concat('%', #{systemName}, '%')</if>
+            <if test="leftLogo != null  and leftLogo != ''"> and left_logo = #{leftLogo}</if>
+            <if test="copyRight != null  and copyRight != ''"> and copy_right = #{copyRight}</if>
+            <if test="homeLogo != null  and homeLogo != ''"> and home_logo = #{homeLogo}</if>
+        </where>
+    </select>
+
+    <select id="selectSysNameConfigBySystemName" parameterType="String" resultMap="SysNameConfigResult">
+        <include refid="selectSysNameConfigVo"/>
+        where system_name = #{systemName}
+    </select>
+
+    <insert id="insertSysNameConfig" parameterType="SysNameConfig">
+        insert into sys_name_config
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="systemName != null">system_name,</if>
+            <if test="leftLogo != null">left_logo,</if>
+            <if test="copyRight != null">copy_right,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+            <if test="id != null and id != ''">id,</if>
+            <if test="homeLogo != null">home_logo,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="systemName != null">#{systemName},</if>
+            <if test="leftLogo != null">#{leftLogo},</if>
+            <if test="copyRight != null">#{copyRight},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="id != null and id != ''">#{id},</if>
+            <if test="homeLogo != null">#{homeLogo},</if>
+        </trim>
+    </insert>
+
+    <update id="updateSysNameConfig" parameterType="SysNameConfig">
+        update sys_name_config
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="leftLogo != null">left_logo = #{leftLogo},</if>
+            <if test="copyRight != null">copy_right = #{copyRight},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="id != null and id != ''">id = #{id},</if>
+            <if test="homeLogo != null">home_logo = #{homeLogo},</if>
+        </trim>
+        where system_name = #{systemName}
+    </update>
+
+    <delete id="deleteSysNameConfigBySystemName" parameterType="String">
+        delete from sys_name_config where system_name = #{systemName}
+    </delete>
+
+    <delete id="deleteSysNameConfigBySystemNames" parameterType="String">
+        delete from sys_name_config where system_name in
+        <foreach item="systemName" collection="array" open="(" separator="," close=")">
+            #{systemName}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/zhitan-system/src/main/resources/mapper/system/SysNoticeMapper.xml b/zhitan-system/src/main/resources/mapper/system/SysNoticeMapper.xml
new file mode 100644
index 0000000..2241e39
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/system/SysNoticeMapper.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysNoticeMapper">
+    
+    <resultMap type="SysNotice" id="SysNoticeResult">
+        <result property="noticeId"       column="notice_id"       />
+        <result property="noticeTitle"    column="notice_title"    />
+        <result property="noticeType"     column="notice_type"     />
+        <result property="noticeContent"  column="notice_content"  />
+        <result property="status"         column="status"          />
+        <result property="createBy"       column="create_by"       />
+        <result property="createTime"     column="create_time"     />
+        <result property="updateBy"       column="update_by"       />
+        <result property="updateTime"     column="update_time"     />
+        <result property="remark"         column="remark"          />
+    </resultMap>
+    
+    <sql id="selectNoticeVo">
+        select notice_id, notice_title, notice_type, notice_content, status, create_by, create_time, update_by, update_time, remark 
+		from sys_notice
+    </sql>
+    
+    <select id="selectNoticeById" parameterType="Long" resultMap="SysNoticeResult">
+        <include refid="selectNoticeVo"/>
+        where notice_id = #{noticeId}
+    </select>
+    
+    <select id="selectNoticeList" parameterType="SysNotice" resultMap="SysNoticeResult">
+        <include refid="selectNoticeVo"/>
+        <where>
+			<if test="noticeTitle != null and noticeTitle != ''">
+				AND notice_title like concat('%', #{noticeTitle}, '%')
+			</if>
+			<if test="noticeType != null and noticeType != ''">
+				AND notice_type = #{noticeType}
+			</if>
+			<if test="createBy != null and createBy != ''">
+				AND create_by like concat('%', #{createBy}, '%')
+			</if>
+		</where>
+    </select>
+    
+    <insert id="insertNotice" parameterType="SysNotice">
+        insert into sys_notice (
+			<if test="noticeTitle != null and noticeTitle != '' ">notice_title, </if>
+			<if test="noticeType != null and noticeType != '' ">notice_type, </if>
+			<if test="noticeContent != null and noticeContent != '' ">notice_content, </if>
+			<if test="status != null and status != '' ">status, </if>
+			<if test="remark != null and remark != ''">remark,</if>
+ 			<if test="createBy != null and createBy != ''">create_by,</if>
+ 			create_time
+ 		)values(
+			<if test="noticeTitle != null and noticeTitle != ''">#{noticeTitle}, </if>
+			<if test="noticeType != null and noticeType != ''">#{noticeType}, </if>
+			<if test="noticeContent != null and noticeContent != ''">#{noticeContent}, </if>
+			<if test="status != null and status != ''">#{status}, </if>
+			<if test="remark != null and remark != ''">#{remark},</if>
+ 			<if test="createBy != null and createBy != ''">#{createBy},</if>
+            now()
+		)
+    </insert>
+	 
+    <update id="updateNotice" parameterType="SysNotice">
+        update sys_notice 
+        <set>
+            <if test="noticeTitle != null and noticeTitle != ''">notice_title = #{noticeTitle}, </if>
+            <if test="noticeType != null and noticeType != ''">notice_type = #{noticeType}, </if>
+            <if test="noticeContent != null">notice_content = #{noticeContent}, </if>
+            <if test="status != null and status != ''">status = #{status}, </if>
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+ 			update_time = now()
+        </set>
+        where notice_id = #{noticeId}
+    </update>
+	
+    <delete id="deleteNoticeById" parameterType="Long">
+        delete from sys_notice where notice_id = #{noticeId}
+    </delete>
+    
+    <delete id="deleteNoticeByIds" parameterType="Long">
+        delete from sys_notice where notice_id in 
+        <foreach item="noticeId" collection="array" open="(" separator="," close=")">
+            #{noticeId}
+        </foreach>
+    </delete>
+    
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/system/SysOperLogMapper.xml b/zhitan-system/src/main/resources/mapper/system/SysOperLogMapper.xml
new file mode 100644
index 0000000..7b55d6a
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/system/SysOperLogMapper.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysOperLogMapper">
+
+	<resultMap type="SysOperLog" id="SysOperLogResult">
+		<id     property="operId"         column="oper_id"        />
+		<result property="title"          column="title"          />
+		<result property="businessType"   column="business_type"  />
+		<result property="method"         column="method"         />
+		<result property="requestMethod"  column="request_method" />
+		<result property="operatorType"   column="operator_type"  />
+		<result property="operName"       column="oper_name"      />
+		<result property="deptName"       column="dept_name"      />
+		<result property="operUrl"        column="oper_url"       />
+		<result property="operIp"         column="oper_ip"        />
+		<result property="operLocation"   column="oper_location"  />
+		<result property="operParam"      column="oper_param"     />
+		<result property="jsonResult"     column="json_result"    />
+		<result property="status"         column="status"         />
+		<result property="errorMsg"       column="error_msg"      />
+		<result property="operTime"       column="oper_time"      />
+		<result property="costTime"       column="cost_time"      />
+	</resultMap>
+
+	<sql id="selectOperLogVo">
+        select oper_id, title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, oper_time, cost_time
+        from sys_oper_log
+    </sql>
+    
+	<insert id="insertOperlog" parameterType="SysOperLog">
+		insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, cost_time, oper_time)
+        values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, #{costTime}, now())
+	</insert>
+	
+	<select id="selectOperLogList" parameterType="SysOperLog" resultMap="SysOperLogResult">
+		<include refid="selectOperLogVo"/>
+		<where>
+			<if test="operIp != null and operIp != ''">
+				AND oper_ip like concat('%', #{operIp}, '%')
+			</if>
+			<if test="title != null and title != ''">
+				AND title like concat('%', #{title}, '%')
+			</if>
+			<if test="businessType != null">
+				AND business_type = #{businessType}
+			</if>
+			<if test="businessTypes != null and businessTypes.length > 0">
+			    AND business_type in
+			    <foreach collection="businessTypes" item="businessType" open="(" separator="," close=")">
+		 			#{businessType}
+		        </foreach> 
+			</if>
+			<if test="status != null">
+				AND status = #{status}
+			</if>
+			<if test="operName != null and operName != ''">
+				AND oper_name like concat('%', #{operName}, '%')
+			</if>
+			<if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+				AND oper_time &gt;= #{params.beginTime}
+			</if>
+			<if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+				AND oper_time &lt;= #{params.endTime}
+			</if>
+		</where>
+		order by oper_id desc
+	</select>
+	
+	<delete id="deleteOperLogByIds" parameterType="Long">
+ 		delete from sys_oper_log where oper_id in
+ 		<foreach collection="array" item="operId" open="(" separator="," close=")">
+ 			#{operId}
+        </foreach> 
+ 	</delete>
+ 	
+ 	<select id="selectOperLogById" parameterType="Long" resultMap="SysOperLogResult">
+		<include refid="selectOperLogVo"/>
+		where oper_id = #{operId}
+	</select>
+	
+	<update id="cleanOperLog">
+        truncate table sys_oper_log
+    </update>
+
+</mapper> 
\ No newline at end of file
diff --git a/zhitan-system/src/main/resources/mapper/system/SysPostMapper.xml b/zhitan-system/src/main/resources/mapper/system/SysPostMapper.xml
new file mode 100644
index 0000000..b3fb9f1
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/system/SysPostMapper.xml
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysPostMapper">
+
+	<resultMap type="SysPost" id="SysPostResult">
+		<id     property="postId"        column="post_id"       />
+		<result property="postCode"      column="post_code"     />
+		<result property="postName"      column="post_name"     />
+		<result property="postSort"      column="post_sort"     />
+		<result property="status"        column="status"        />
+		<result property="createBy"      column="create_by"     />
+		<result property="createTime"    column="create_time"   />
+		<result property="updateBy"      column="update_by"     />
+		<result property="updateTime"    column="update_time"   />
+		<result property="remark"        column="remark"        />
+	</resultMap>
+	
+	<sql id="selectPostVo">
+        select post_id, post_code, post_name, post_sort, status, create_by, create_time, remark
+		from sys_post
+    </sql>
+	
+	<select id="selectPostList" parameterType="SysPost" resultMap="SysPostResult">
+	    <include refid="selectPostVo"/>
+		<where>
+			<if test="postCode != null and postCode != ''">
+				AND post_code like concat('%', #{postCode}, '%')
+			</if>
+			<if test="status != null and status != ''">
+				AND status = #{status}
+			</if>
+			<if test="postName != null and postName != ''">
+				AND post_name like concat('%', #{postName}, '%')
+			</if>
+		</where>
+		order by post_sort
+	</select>
+	
+	<select id="selectPostAll" resultMap="SysPostResult">
+		<include refid="selectPostVo"/>
+	</select>
+	
+	<select id="selectPostById" parameterType="Long" resultMap="SysPostResult">
+		<include refid="selectPostVo"/>
+		where post_id = #{postId}
+	</select>
+	
+	<select id="selectPostListByUserId" parameterType="Long" resultType="Integer">
+		select p.post_id
+        from sys_post p
+	        left join sys_user_post up on up.post_id = p.post_id
+	        left join sys_user u on u.user_id = up.user_id
+	    where u.user_id = #{userId}
+	</select>
+	
+	<select id="selectPostsByUserName" parameterType="String" resultMap="SysPostResult">
+		select p.post_id, p.post_name, p.post_code
+		from sys_post p
+			 left join sys_user_post up on up.post_id = p.post_id
+			 left join sys_user u on u.user_id = up.user_id
+		where u.user_name = #{userName}
+	</select>
+	
+	<select id="checkPostNameUnique" parameterType="String" resultMap="SysPostResult">
+		<include refid="selectPostVo"/>
+		 where post_name=#{postName}
+	</select>
+	
+	<select id="checkPostCodeUnique" parameterType="String" resultMap="SysPostResult">
+		<include refid="selectPostVo"/>
+		 where post_code=#{postCode}
+	</select>
+	
+	<update id="updatePost" parameterType="SysPost">
+ 		update sys_post
+ 		<set>
+ 			<if test="postCode != null and postCode != ''">post_code = #{postCode},</if>
+ 			<if test="postName != null and postName != ''">post_name = #{postName},</if>
+ 			<if test="postSort != null and postSort != ''">post_sort = #{postSort},</if>
+ 			<if test="status != null and status != ''">status = #{status},</if>
+ 			<if test="remark != null">remark = #{remark},</if>
+ 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+ 			update_time = now()
+ 		</set>
+ 		where post_id = #{postId}
+	</update>
+ 	
+ 	<insert id="insertPost" parameterType="SysPost" useGeneratedKeys="true" keyProperty="postId">
+ 		insert into sys_post(
+ 			<if test="postId != null and postId != 0">post_id,</if>
+ 			<if test="postCode != null and postCode != ''">post_code,</if>
+ 			<if test="postName != null and postName != ''">post_name,</if>
+ 			<if test="postSort != null and postSort != ''">post_sort,</if>
+ 			<if test="status != null and status != ''">status,</if>
+ 			<if test="remark != null and remark != ''">remark,</if>
+ 			<if test="createBy != null and createBy != ''">create_by,</if>
+ 			create_time
+ 		)values(
+ 			<if test="postId != null and postId != 0">#{postId},</if>
+ 			<if test="postCode != null and postCode != ''">#{postCode},</if>
+ 			<if test="postName != null and postName != ''">#{postName},</if>
+ 			<if test="postSort != null and postSort != ''">#{postSort},</if>
+ 			<if test="status != null and status != ''">#{status},</if>
+ 			<if test="remark != null and remark != ''">#{remark},</if>
+ 			<if test="createBy != null and createBy != ''">#{createBy},</if>
+			now()
+ 		)
+	</insert>
+	
+	<delete id="deletePostById" parameterType="Long">
+		delete from sys_post where post_id = #{postId}
+	</delete>
+	
+	<delete id="deletePostByIds" parameterType="Long">
+ 		delete from sys_post where post_id in
+ 		<foreach collection="array" item="postId" open="(" separator="," close=")">
+ 			#{postId}
+        </foreach> 
+ 	</delete>
+
+</mapper> 
diff --git a/zhitan-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml b/zhitan-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml
new file mode 100644
index 0000000..ed43ada
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysRoleDeptMapper">
+
+	<resultMap type="SysRoleDept" id="SysRoleDeptResult">
+		<result property="roleId"     column="role_id"      />
+		<result property="deptId"     column="dept_id"      />
+	</resultMap>
+
+	<delete id="deleteRoleDeptByRoleId" parameterType="Long">
+		delete from sys_role_dept where role_id=#{roleId}
+	</delete>
+	
+	<select id="selectCountRoleDeptByDeptId" resultType="Integer">
+	    select count(1) from sys_role_dept where dept_id=#{deptId}
+	</select>
+	
+	<delete id="deleteRoleDept" parameterType="Long">
+ 		delete from sys_role_dept where role_id in
+ 		<foreach collection="array" item="roleId" open="(" separator="," close=")">
+ 			#{roleId}
+        </foreach> 
+ 	</delete>
+	
+	<insert id="batchRoleDept">
+		insert into sys_role_dept(role_id, dept_id) values
+		<foreach item="item" index="index" collection="list" separator=",">
+			(#{item.roleId},#{item.deptId})
+		</foreach>
+	</insert>
+	
+</mapper> 
diff --git a/zhitan-system/src/main/resources/mapper/system/SysRoleMapper.xml b/zhitan-system/src/main/resources/mapper/system/SysRoleMapper.xml
new file mode 100644
index 0000000..8196b75
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/system/SysRoleMapper.xml
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysRoleMapper">
+
+	<resultMap type="SysRole" id="SysRoleResult">
+		<id     property="roleId"       column="role_id"        />
+		<result property="roleName"     column="role_name"      />
+		<result property="roleKey"      column="role_key"       />
+		<result property="roleSort"     column="role_sort"      />
+		<result property="dataScope"    column="data_scope"     />
+		<result property="menuCheckStrictly"  column="menu_check_strictly"   />
+		<result property="deptCheckStrictly"  column="dept_check_strictly"   />
+		<result property="status"       column="status"         />
+		<result property="delFlag"      column="del_flag"       />
+		<result property="createBy"     column="create_by"      />
+		<result property="createTime"   column="create_time"    />
+		<result property="updateBy"     column="update_by"      />
+		<result property="updateTime"   column="update_time"    />
+		<result property="remark"       column="remark"         />
+	</resultMap>
+	
+	<sql id="selectRoleVo">
+	    select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope,r.menu_check_strictly, r.dept_check_strictly,
+            r.status, r.del_flag, r.create_time, r.remark 
+        from sys_role r
+	        left join sys_user_role ur on ur.role_id = r.role_id
+	        left join sys_user u on u.user_id = ur.user_id
+	        left join sys_dept d on u.dept_id = d.dept_id
+    </sql>
+    
+    <select id="selectRoleList" parameterType="SysRole" resultMap="SysRoleResult">
+		<include refid="selectRoleVo"/>
+		where r.del_flag = '0'
+		<if test="roleId != null and roleId != 0">
+			AND r.role_id = #{roleId}
+		</if>
+		<if test="roleName != null and roleName != ''">
+			AND r.role_name like concat('%', #{roleName}, '%')
+		</if>
+		<if test="status != null and status != ''">
+			AND r.status = #{status}
+		</if>
+		<if test="roleKey != null and roleKey != ''">
+			AND r.role_key like concat('%', #{roleKey}, '%')
+		</if>
+		<if test="beginTime != null and beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+			and to_char(r.create_time,'yyyymmdd') &gt;= to_char(to_date(#{beginTime}, 'yyyy-mm-dd'),'yyyymmdd')
+		</if>
+		<if test="endTime != null and endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+			and to_char(r.create_time,'yyyymmdd') &lt;= to_char(to_date(#{endTime}, 'yyyy-mm-dd'),'yyyymmdd')
+		</if>
+		<!-- 鏁版嵁鑼冨洿杩囨护 -->
+		${params.dataScope}
+		order by r.role_sort
+	</select>
+    
+	<select id="selectRolePermissionByUserId" parameterType="Long" resultMap="SysRoleResult">
+		<include refid="selectRoleVo"/>
+		WHERE r.del_flag = '0' and ur.user_id = #{userId}
+	</select>
+	
+	<select id="selectRoleAll" resultMap="SysRoleResult">
+		<include refid="selectRoleVo"/>
+		order by r.role_sort
+	</select>
+	
+	<select id="selectRoleListByUserId" parameterType="Long" resultType="Integer">
+		select r.role_id
+        from sys_role r
+	        left join sys_user_role ur on ur.role_id = r.role_id
+	        left join sys_user u on u.user_id = ur.user_id
+	    where u.user_id = #{userId}
+	</select>
+	
+	<select id="selectRoleById" parameterType="Long" resultMap="SysRoleResult">
+		<include refid="selectRoleVo"/>
+		where r.role_id = #{roleId}
+	</select>
+	
+	<select id="selectRolesByUserName" parameterType="String" resultMap="SysRoleResult">
+		<include refid="selectRoleVo"/>
+		WHERE r.del_flag = '0' and u.user_name = #{userName}
+	</select>
+	
+	<select id="checkRoleNameUnique" parameterType="String" resultMap="SysRoleResult">
+		<include refid="selectRoleVo"/>
+		 where r.role_name=#{roleName} and r.del_flag = '0' limit 1
+	</select>
+	
+	<select id="checkRoleKeyUnique" parameterType="String" resultMap="SysRoleResult">
+		<include refid="selectRoleVo"/>
+		 where r.role_key=#{roleKey} and r.del_flag = '0' limit 1
+	</select>
+	
+ 	<insert id="insertRole" parameterType="SysRole" useGeneratedKeys="true" keyProperty="roleId">
+ 		insert into sys_role(
+ 			<if test="roleId != null and roleId != 0">role_id,</if>
+ 			<if test="roleName != null and roleName != ''">role_name,</if>
+ 			<if test="roleKey != null and roleKey != ''">role_key,</if>
+ 			<if test="roleSort != null">role_sort,</if>
+ 			<if test="dataScope != null and dataScope != ''">data_scope,</if>
+ 			<if test="menuCheckStrictly != null">menu_check_strictly,</if>
+ 			<if test="deptCheckStrictly != null">dept_check_strictly,</if>
+ 			<if test="status != null and status != ''">status,</if>
+ 			<if test="remark != null and remark != ''">remark,</if>
+ 			<if test="createBy != null and createBy != ''">create_by,</if>
+ 			create_time
+ 		)values(
+ 			<if test="roleId != null and roleId != 0">#{roleId},</if>
+ 			<if test="roleName != null and roleName != ''">#{roleName},</if>
+ 			<if test="roleKey != null and roleKey != ''">#{roleKey},</if>
+ 			<if test="roleSort != null">#{roleSort},</if>
+ 			<if test="dataScope != null and dataScope != ''">#{dataScope},</if>
+ 			<if test="menuCheckStrictly != null">#{menuCheckStrictly},</if>
+ 			<if test="deptCheckStrictly != null">#{deptCheckStrictly},</if>
+ 			<if test="status != null and status != ''">#{status},</if>
+ 			<if test="remark != null and remark != ''">#{remark},</if>
+ 			<if test="createBy != null and createBy != ''">#{createBy},</if>
+			now()
+ 		)
+	</insert>
+	
+	<update id="updateRole" parameterType="SysRole">
+ 		update sys_role
+ 		<set>
+ 			<if test="roleName != null and roleName != ''">role_name = #{roleName},</if>
+ 			<if test="roleKey != null and roleKey != ''">role_key = #{roleKey},</if>
+ 			<if test="roleSort != null">role_sort = #{roleSort},</if>
+ 			<if test="dataScope != null and dataScope != ''">data_scope = #{dataScope},</if>
+ 			<if test="menuCheckStrictly != null">menu_check_strictly = #{menuCheckStrictly},</if>
+ 			<if test="deptCheckStrictly != null">dept_check_strictly = #{deptCheckStrictly},</if>
+ 			<if test="status != null and status != ''">status = #{status},</if>
+ 			<if test="remark != null">remark = #{remark},</if>
+ 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+ 			update_time = now()
+ 		</set>
+ 		where role_id = #{roleId}
+	</update>
+	
+	<update id="updateRoleStatus" parameterType="SysRole">
+ 		update sys_user set status = #{status} where user_id = #{userId}
+	</update>
+	
+	<delete id="deleteRoleById" parameterType="Long">
+ 		delete from sys_role where role_id = #{roleId}
+ 	</delete>
+ 	
+ 	<delete id="deleteRoleByIds" parameterType="Long">
+ 	    update sys_role set del_flag = '2' where role_id in
+ 		<foreach collection="array" item="roleId" open="(" separator="," close=")">
+ 			#{roleId}
+        </foreach> 
+ 	</delete>
+ 	
+</mapper> 
diff --git a/zhitan-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml b/zhitan-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml
new file mode 100644
index 0000000..b929cfb
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysRoleMenuMapper">
+
+	<resultMap type="SysRoleMenu" id="SysRoleMenuResult">
+		<result property="roleId"     column="role_id"      />
+		<result property="menuId"     column="menu_id"      />
+	</resultMap>
+	
+	<select id="checkMenuExistRole" resultType="Integer">
+	    select count(1) from sys_role_menu where menu_id = #{menuId}  
+	</select>
+
+	<delete id="deleteRoleMenuByRoleId" parameterType="Long">
+		delete from sys_role_menu where role_id=#{roleId}
+	</delete>
+	
+	<insert id="batchRoleMenu">
+		insert into sys_role_menu(role_id, menu_id) values
+		<foreach item="item" index="index" collection="list" separator=",">
+			(#{item.roleId},#{item.menuId})
+		</foreach>
+	</insert>
+	
+</mapper> 
diff --git a/zhitan-system/src/main/resources/mapper/system/SysUserMapper.xml b/zhitan-system/src/main/resources/mapper/system/SysUserMapper.xml
new file mode 100644
index 0000000..965abd8
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysUserMapper">
+
+    <resultMap type="SysUser" id="SysUserResult">
+        <id property="userId" column="user_id"/>
+        <result property="deptId" column="dept_id"/>
+        <result property="userName" column="user_name"/>
+        <result property="nickName" column="nick_name"/>
+        <result property="email" column="email"/>
+        <result property="phoneNumber" column="phone_number"/>
+        <result property="sex" column="sex"/>
+        <result property="avatar" column="avatar"/>
+        <result property="password" column="password"/>
+        <result property="status" column="status"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="loginIp" column="login_ip"/>
+        <result property="loginDate" column="login_date"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="remark" column="remark"/>
+        <association property="dept"    javaType="SysDept"         resultMap="deptResult" />
+        <collection property="roles" javaType="java.util.List" resultMap="RoleResult"/>
+    </resultMap>
+
+    <resultMap id="deptResult" type="SysDept">
+        <id property="deptId" column="dept_id"/>
+        <result property="parentId" column="parent_id"/>
+        <result property="deptName" column="dept_name"/>
+        <result property="ancestors" column="ancestors"   />
+        <result property="orderNum" column="order_num"/>
+        <result property="leader" column="leader"/>
+        <result property="status" column="dept_status"/>
+    </resultMap>
+
+    <resultMap id="RoleResult" type="SysRole">
+        <id property="roleId" column="role_id"/>
+        <result property="roleName" column="role_name"/>
+        <result property="roleKey" column="role_key"/>
+        <result property="roleSort" column="role_sort"/>
+        <result property="dataScope" column="data_scope"/>
+        <result property="status" column="role_status"/>
+    </resultMap>
+
+    <sql id="selectUserVo">
+        select u.user_id,
+               u.dept_id,
+               u.user_name,
+               u.nick_name,
+               u.email,
+               u.avatar,
+               u.phone_number,
+               u.password,
+               u.sex,
+               u.status,
+               u.del_flag,
+               u.login_ip,
+               u.login_date,
+               u.create_by,
+               u.create_time,
+               u.remark,
+               d.dept_id,
+               d.parent_id,
+               d.ancestors,
+               d.dept_name,
+               d.order_num,
+               d.leader,
+               d.status as dept_status,
+               r.role_id,
+               r.role_name,
+               r.role_key,
+               r.role_sort,
+               r.data_scope,
+               r.status as role_status
+        from sys_user u
+                 left join sys_dept d on u.dept_id = d.dept_id
+                 left join sys_user_role ur on u.user_id = ur.user_id
+                 left join sys_role r on r.role_id = ur.role_id
+    </sql>
+
+    <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
+        select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phone_number, u.password, u.sex,
+        u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from
+        sys_user u
+        left join sys_dept d on u.dept_id = d.dept_id
+        where u.del_flag = '0'
+        <if test="userName != null and userName != ''">
+            AND u.user_name like concat('%', #{userName}, '%')
+        </if>
+        <if test="status != null and status != ''">
+            AND u.status = #{status}
+        </if>
+        <if test="phoneNumber != null and phoneNumber != ''">
+            AND u.phone_number like concat('%', #{phoneNumber}, '%')
+        </if>
+        <if test="beginTime != null and beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+            AND to_char(u.create_time,'yyyymmdd') &gt;= to_char(to_date(#{beginTime}, 'yyyy-mm-dd'),'yyyymmdd')
+        </if>
+        <if test="endTime != null and endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+            AND to_char(u.create_time,'yyyymmdd') &lt;= to_char(to_date(#{endTime}, 'yyyy-mm-dd'),'yyyymmdd')
+        </if>
+        <if test="deptId != null and deptId != 0">
+            AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE ancestors = (select
+            ancestors from sys_dept where dept_id = #{deptId}) || #{deptId} ))
+        </if>
+        <!-- 鏁版嵁鑼冨洿杩囨护 -->
+        ${dataScope}
+    </select>
+
+    <select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
+        <include refid="selectUserVo"/>
+		where u.user_name = #{userName} and u.del_flag = '0'
+    </select>
+
+    <select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
+        <include refid="selectUserVo"/>
+        where u.user_id = #{userId}
+    </select>
+
+	<select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult">
+		select user_id, user_name from sys_user where user_name = #{userName} and del_flag = '0' limit 1
+    </select>
+
+    <select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
+		select user_id, phone_number from sys_user where phone_number = #{phoneNumber} and del_flag = '0' limit 1
+    </select>
+
+    <select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
+		select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1
+    </select>
+
+    <insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
+        insert into sys_user(
+        <if test="userId != null and userId != 0">user_id,</if>
+        <if test="deptId != null and deptId != 0">dept_id,</if>
+        <if test="userName != null and userName != ''">user_name,</if>
+        <if test="nickName != null and nickName != ''">nick_name,</if>
+        <if test="email != null and email != ''">email,</if>
+        <if test="avatar != null and avatar != ''">avatar,</if>
+        <if test="phoneNumber != null and phoneNumber != ''">phone_number,</if>
+        <if test="sex != null and sex != ''">sex,</if>
+        <if test="password != null and password != ''">password,</if>
+        <if test="status != null and status != ''">status,</if>
+        <if test="createBy != null and createBy != ''">create_by,</if>
+        <if test="remark != null and remark != ''">remark,</if>
+        create_time
+        )values(
+        <if test="userId != null and userId != ''">#{userId},</if>
+        <if test="deptId != null and deptId != ''">#{deptId},</if>
+        <if test="userName != null and userName != ''">#{userName},</if>
+        <if test="nickName != null and nickName != ''">#{nickName},</if>
+        <if test="email != null and email != ''">#{email},</if>
+        <if test="avatar != null and avatar != ''">#{avatar},</if>
+        <if test="phoneNumber != null and phoneNumber != ''">#{phoneNumber},</if>
+        <if test="sex != null and sex != ''">#{sex},</if>
+        <if test="password != null and password != ''">#{password},</if>
+        <if test="status != null and status != ''">#{status},</if>
+        <if test="createBy != null and createBy != ''">#{createBy},</if>
+        <if test="remark != null and remark != ''">#{remark},</if>
+        now()
+        )
+    </insert>
+
+    <update id="updateUser" parameterType="SysUser">
+        update sys_user
+        <set>
+            <if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
+            <if test="userName != null and userName != ''">user_name = #{userName},</if>
+            <if test="nickName != null and nickName != ''">nick_name = #{nickName},</if>
+ 			<if test="email != null ">email = #{email},</if>
+ 			<if test="phoneNumber != null ">phone_number = #{phoneNumber},</if>
+            <if test="sex != null and sex != ''">sex = #{sex},</if>
+            <if test="avatar != null and avatar != ''">avatar = #{avatar},</if>
+            <if test="password != null and password != ''">password = #{password},</if>
+            <if test="status != null and status != ''">status = #{status},</if>
+            <if test="loginIp != null and loginIp != ''">login_ip = #{loginIp},</if>
+            <if test="loginDate != null">login_date = #{loginDate},</if>
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            update_time = now()
+        </set>
+        where user_id = #{userId}
+    </update>
+
+    <update id="updateUserStatus" parameterType="SysUser">
+        update sys_user
+        set status = #{status}
+        where user_id = #{userId}
+    </update>
+
+    <update id="updateUserAvatar" parameterType="SysUser">
+        update sys_user
+        set avatar = #{avatar}
+        where user_name = #{userName}
+    </update>
+
+    <update id="resetUserPwd" parameterType="SysUser">
+        update sys_user
+        set password = #{password}
+        where user_name = #{userName}
+    </update>
+
+    <delete id="deleteUserById" parameterType="Long">
+        delete
+        from sys_user
+        where user_id = #{userId}
+    </delete>
+
+    <delete id="deleteUserByIds" parameterType="Long">
+        delete
+        from sys_user
+        where user_id in
+        <foreach collection="array" item="userId" open="(" separator="," close=")">
+            #{userId}
+        </foreach>
+    </delete>
+
+</mapper> 
diff --git a/zhitan-system/src/main/resources/mapper/system/SysUserPostMapper.xml b/zhitan-system/src/main/resources/mapper/system/SysUserPostMapper.xml
new file mode 100644
index 0000000..0e2afe9
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/system/SysUserPostMapper.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysUserPostMapper">
+
+	<resultMap type="SysUserPost" id="SysUserPostResult">
+		<result property="userId"     column="user_id"      />
+		<result property="postId"     column="post_id"      />
+	</resultMap>
+
+	<delete id="deleteUserPostByUserId" parameterType="Long">
+		delete from sys_user_post where user_id=#{userId}
+	</delete>
+	
+	<select id="countUserPostById" resultType="Integer">
+	    select count(1) from sys_user_post where post_id=#{postId}  
+	</select>
+	
+	<delete id="deleteUserPost" parameterType="Long">
+ 		delete from sys_user_post where user_id in
+ 		<foreach collection="array" item="userId" open="(" separator="," close=")">
+ 			#{userId}
+        </foreach> 
+ 	</delete>
+	
+	<insert id="batchUserPost">
+		insert into sys_user_post(user_id, post_id) values
+		<foreach item="item" index="index" collection="list" separator=",">
+			(#{item.userId},#{item.postId})
+		</foreach>
+	</insert>
+	
+</mapper> 
diff --git a/zhitan-system/src/main/resources/mapper/system/SysUserRoleMapper.xml b/zhitan-system/src/main/resources/mapper/system/SysUserRoleMapper.xml
new file mode 100644
index 0000000..77b3477
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/system/SysUserRoleMapper.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysUserRoleMapper">
+
+	<resultMap type="SysUserRole" id="SysUserRoleResult">
+		<result property="userId"     column="user_id"      />
+		<result property="roleId"     column="role_id"      />
+	</resultMap>
+
+	<delete id="deleteUserRoleByUserId" parameterType="Long">
+		delete from sys_user_role where user_id=#{userId}
+	</delete>
+	
+	<select id="countUserRoleByRoleId" resultType="Integer">
+	    select count(1) from sys_user_role where role_id=#{roleId}  
+	</select>
+	
+	<delete id="deleteUserRole" parameterType="Long">
+ 		delete from sys_user_role where user_id in
+ 		<foreach collection="array" item="userId" open="(" separator="," close=")">
+ 			#{userId}
+        </foreach> 
+ 	</delete>
+	
+	<insert id="batchUserRole">
+		insert into sys_user_role(user_id, role_id) values
+		<foreach item="item" index="index" collection="list" separator=",">
+			(#{item.userId},#{item.roleId})
+		</foreach>
+	</insert>
+	
+	<delete id="deleteUserRoleInfo" parameterType="SysUserRole">
+		delete from sys_user_role where user_id=#{userId} and role_id=#{roleId}
+	</delete>
+	
+	<delete id="deleteUserRoleInfos">
+	    delete from sys_user_role where role_id=#{roleId} and user_id in
+ 	    <foreach collection="userIds" item="userId" open="(" separator="," close=")">
+ 	        #{userId}
+            </foreach> 
+	</delete>
+</mapper> 
diff --git a/zhitan-system/target/classes/mapper/alarm/AlarmItemMapper.xml b/zhitan-system/target/classes/mapper/alarm/AlarmItemMapper.xml
new file mode 100644
index 0000000..9ff1f59
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/alarm/AlarmItemMapper.xml
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.alarm.mapper.AlarmItemMapper">
+
+  <resultMap type="AlarmItem" id="AlarmItemResult">
+    <result property="id" column="id"/>
+    <result property="createTime" column="create_time"/>
+    <result property="createBy" column="create_by"/>
+    <result property="updateTime" column="update_time"/>
+    <result property="updateBy" column="update_by"/>
+    <result property="dwid" column="dwid"/>
+    <result property="startStop" column="start_stop"/>
+    <result property="timeSlot" column="time_slot"/>
+    <result property="limitType" column="limit_type"/>
+    <result property="limitVal" column="limit_val"/>
+    <result property="alarmLevel" column="alarm_level"/>
+    <result property="nodeId" column="node_id"/>
+    <result property="indexCode" column="index_code"/>
+    <result property="alarmCode" column="alarm_code"/>
+  </resultMap>
+
+  <sql id="selectAlarmItemVo">
+    select id,
+           create_time,
+           create_by,
+           update_time,
+           update_by,
+           dwid,
+           start_stop,
+           time_slot,
+           limit_type,
+           limit_val,
+           alarm_level,
+           node_id
+    from alarm_item
+  </sql>
+
+  <select id="selectAlarmItemList" parameterType="AlarmItem" resultMap="AlarmItemResult">
+    <include refid="selectAlarmItemVo"/>
+    <where>
+    </where>
+  </select>
+
+  <select id="selectAlarmItemById" parameterType="String" resultMap="AlarmItemResult">
+    <include refid="selectAlarmItemVo"/>
+    where id = #{id}
+  </select>
+
+  <insert id="insertAlarmItem" parameterType="AlarmItem">
+    insert into alarm_item
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null  and id != ''">id,</if>
+      <if test="createTime != null ">create_time,</if>
+      <if test="createBy != null  and createBy != ''">create_by,</if>
+      <if test="updateTime != null ">update_time,</if>
+      <if test="updateBy != null  and updateBy != ''">update_by,</if>
+      <if test="dwid != null  and dwid != ''">dwid,</if>
+      <if test="startStop != null  and startStop != ''">start_stop,</if>
+      <if test="timeSlot != null  and timeSlot != ''">time_slot,</if>
+      <if test="limit_type != null  and limit_type != ''">limit_type,</if>
+      <if test="limitVal != null  and limitVal != ''">limit_val,</if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null  and id != ''">#{id},</if>
+      <if test="createTime != null ">#{createTime},</if>
+      <if test="createBy != null  and createBy != ''">#{createBy},</if>
+      <if test="updateTime != null ">#{updateTime},</if>
+      <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+      <if test="dwid != null  and dwid != ''">#{dwid},</if>
+      <if test="startStop != null  and startStop != ''">#{startStop},</if>
+      <if test="timeSlot != null  and timeSlot != ''">#{timeSlot},</if>
+      <if test="limitType != null  and limitType != ''">#{limitType},</if>
+      <if test="limitVal != null  and limitVal != ''">#{limitVal},</if>
+    </trim>
+  </insert>
+
+  <update id="updateAlarmItem" parameterType="AlarmItem">
+    update alarm_item
+    <trim prefix="SET" suffixOverrides=",">
+      <if test="createTime != null ">create_time = #{createTime},</if>
+      <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
+      <if test="updateTime != null ">update_time = #{updateTime},</if>
+      <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+      <if test="dwid != null  and dwid != ''">dwid = #{dwid},</if>
+      <if test="startStop != null  and startStop != ''">start_stop = #{startStop},</if>
+      <if test="timeSlot != null  and timeSlot != ''">time_slot = #{timeSlot},</if>
+      <if test="limitType != null  and limitType != ''">limit = #{limitType},</if>
+      <if test="limitVal != null  and limitVal != ''">limit_val = #{limitVal},</if>
+    </trim>
+    where id = #{id}
+  </update>
+
+  <delete id="deleteAlarmItemById" parameterType="String">
+    delete
+    from alarm_item
+    where id = #{id}
+  </delete>
+
+  <delete id="deleteAlarmItemByIds" parameterType="String">
+    delete from alarm_item where id in
+    <foreach item="id" collection="array" open="(" separator="," close=")">
+      #{id}
+    </foreach>
+  </delete>
+
+  <select id="selectAlarmItemtingById" parameterType="String" resultMap="AlarmItemResult">
+    <include refid="selectAlarmItemVo"/>
+    where dwid = #{id}
+  </select>
+
+  <update id="updateStartStop">
+    update alarm_item SET start_stop=#{flag},update_time=now(),update_by=#{update_by} where dwid in
+    <foreach item="id" collection="ids" open="(" separator="," close=")">
+      #{id}
+    </foreach>
+  </update>
+  <select id="getStartStop" resultType="String">
+    select DISTINCT start_stop
+    from alarm_item
+    where dwid = #{indexid};
+  </select>
+
+  <update id="updateLimitVal">
+    delete from alarm_item where dwid = #{id};
+    <foreach collection="data" item="item" index="index" separator=";">
+      insert into alarm_item
+      <trim prefix="(" suffix=")" suffixOverrides=",">
+        <if test="id != null  and id != ''">id,</if>
+        <if test="item.indexId != null  and item.indexId != ''">dwid,</if>
+        <if test="item.state != null  and item.state != ''">start_stop,</if>
+        <if test="item.timeSlotVal != null  and item.timeSlotVal != ''">time_slot,</if>
+        <if test="item.limitTypeVal != null  and item.limitTypeVal != ''">limit_type,</if>
+        <if test="item.limitVal != null  and item.limitVal != ''">limit_val,</if>
+        <if test="item.alarmLevel != null  and item.alarmLevel != ''">alarm_level,</if>
+        <if test="item.nodeId != null  and item.nodeId != ''">node_id,</if>
+        <if test="id != null  and id != ''">update_time,</if>
+        <if test="id != null  and id != ''">create_time,</if>
+        <if test="id != null  and id != ''">update_by,</if>
+        <if test="id != null  and id != ''">create_by,</if>
+        <if test="id != null  and id != ''">alarm_code,</if>
+      </trim>
+      <trim prefix="values (" suffix=")" suffixOverrides=",">
+        <if test="id != null  and id != ''">#{item.id},</if>
+        <if test="item.indexId != null  and item.indexId != ''">#{item.indexId},</if>
+        <if test="item.state != null  and item.state != ''">#{item.state},</if>
+        <if test="item.timeSlotVal != null  and item.timeSlotVal != ''">#{item.timeSlotVal},</if>
+        <if test="item.limitTypeVal != null  and item.limitTypeVal != ''">#{item.limitTypeVal},</if>
+        <if test="item.limitVal != null  and item.limitVal != ''">#{item.limitVal},</if>
+        <if test="item.alarmLevel != null  and item.alarmLevel != ''">#{item.alarmLevel},</if>
+        <if test="item.nodeId != null  and item.nodeId != ''">#{item.nodeId},</if>
+        <if test="id != null  and id != ''">now(),</if>
+        <if test="id != null  and id != ''">now(),</if>
+        <if test="id != null  and id != ''">#{username},</if>
+        <if test="id != null  and id != ''">#{username},</if>
+        <if test="id != null  and id != ''">#{item.alarmCode},</if>
+      </trim>
+    </foreach>
+  </update>
+<!--  <insert id="updateLimitValNoDel">-->
+<!--    <foreach collection="data" item="item" index="index" separator=";">-->
+<!--      insert into alarm_item-->
+<!--      <trim prefix="(" suffix=")" suffixOverrides=",">-->
+<!--        <if test="id != null  and id != ''">id,</if>-->
+<!--        <if test="item.indexId != null  and item.indexId != ''">dwid,</if>-->
+<!--        <if test="item.state != null  and item.state != ''">start_stop,</if>-->
+<!--        <if test="item.timeSlotVal != null  and item.timeSlotVal != ''">time_slot,</if>-->
+<!--        <if test="item.limitTypeVal != null  and item.limitTypeVal != ''">limit_type,</if>-->
+<!--        <if test="item.limitVal != null  and item.limitVal != ''">limit_val,</if>-->
+<!--        <if test="item.alarmLevel != null  and item.alarmLevel != ''">alarm_level,</if>-->
+<!--        <if test="item.nodeId != null  and item.nodeId != ''">node_id,</if>-->
+<!--        <if test="id != null  and id != ''">update_time,</if>-->
+<!--        <if test="id != null  and id != ''">create_time,</if>-->
+<!--        <if test="id != null  and id != ''">update_by,</if>-->
+<!--        <if test="id != null  and id != ''">create_by,</if>-->
+<!--        <if test="id != null  and id != ''">alarm_code,</if>-->
+<!--      </trim>-->
+<!--      <trim prefix="values (" suffix=")" suffixOverrides=",">-->
+<!--        <if test="id != null  and id != ''">#{item.id},</if>-->
+<!--        <if test="item.indexId != null  and item.indexId != ''">#{item.indexId},</if>-->
+<!--        <if test="item.state != null  and item.state != ''">#{item.state},</if>-->
+<!--        <if test="item.timeSlotVal != null  and item.timeSlotVal != ''">#{item.timeSlotVal},</if>-->
+<!--        <if test="item.limitTypeVal != null  and item.limitTypeVal != ''">#{item.limitTypeVal},</if>-->
+<!--        <if test="item.limitVal != null  and item.limitVal != ''">#{item.limitVal},</if>-->
+<!--        <if test="item.alarmLevel != null  and item.alarmLevel != ''">#{item.alarmLevel},</if>-->
+<!--        <if test="item.nodeId != null  and item.nodeId != ''">#{item.nodeId},</if>-->
+<!--        <if test="id != null  and id != ''">now(),</if>-->
+<!--        <if test="id != null  and id != ''">now(),</if>-->
+<!--        <if test="id != null  and id != ''">#{username},</if>-->
+<!--        <if test="id != null  and id != ''">#{username},</if>-->
+<!--        <if test="id != null  and id != ''">#{item.alarm_code},</if>-->
+<!--      </trim>-->
+<!--    </foreach>-->
+<!--  </insert>-->
+  <insert id="updateLimitValNoDel">
+    insert into alarm_item (id, create_time, create_by, update_time, update_by, dwid, start_stop, time_slot,
+        limit_type,  limit_val, alarm_level, node_id, alarm_code)
+    values 
+    <foreach collection="data" item="item" index="index" separator=",">
+        (#{item.id},now(),#{username},now(),#{username},#{item.indexId},#{item.state},#{item.timeSlotVal},
+        #{item.limitTypeVal},#{item.limitVal},#{item.alarmLevel},#{item.nodeId},#{item.alarmCode})
+    </foreach>
+  </insert>
+  <select id="selectCountById" resultType="int">
+    select count(id)
+    from alarm_item
+    where dwid = #{id};
+  </select>
+  <delete id="deleteAllLimitVal">
+    delete
+    from alarm_item
+    where dwid = #{id};
+  </delete>
+  <select id="getSettingCount" resultType="int">
+    select count(id)
+    from alarm_item
+    where dwid = #{id};
+  </select>
+  <select id="getAllAlarmItem" resultMap="AlarmItemResult">
+    select ai.*, ei.code as index_code
+    from alarm_item ai
+           left join energy_index ei on ai.dwid = ei.index_id
+    where start_stop = '1';
+  </select>
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/alarm/AlarmLimitTypeMapper.xml b/zhitan-system/target/classes/mapper/alarm/AlarmLimitTypeMapper.xml
new file mode 100644
index 0000000..42f3d6e
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/alarm/AlarmLimitTypeMapper.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.alarm.mapper.AlarmLimitTypeMapper">
+
+    <resultMap type="LimitType" id="LimitTypeResult">
+        <result property="id" column="id"/>
+        <result property="limitName" column="limit_name"/>
+        <result property="limitCode" column="limit_code"/>
+        <result property="colorNumber" column="color_number"/>
+        <result property="comparatorOperator" column="comparator_operator"/>
+        <result property="createTime" column="create_time"/>
+        <result property="createBy" column="create_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="updateBy"    column="update_by"    />
+        <result property="alarmType"    column="alarm_type"    />
+    </resultMap>
+
+    <sql id="selectLimitTypeVo">
+        select id, limit_name, limit_code, color_number,comparator_operator,alarm_type,create_time, create_by, update_time, update_by from limit_type
+    </sql>
+
+    <select id="selectLimitTypeList" parameterType="LimitType" resultMap="LimitTypeResult">
+        <include refid="selectLimitTypeVo"/>
+        <where>
+            <if test="limitName != null  and limitName != ''"> and limit_name like concat('%', #{limitName}, '%')</if>
+        </where>
+        order by limit_code
+    </select>
+
+    <select id="selectLimitTypeById" parameterType="String" resultMap="LimitTypeResult">
+        <include refid="selectLimitTypeVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertLimitType" parameterType="LimitType">
+        insert into limit_type
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">id,</if>
+            <if test="limitName != null  and limitName != ''">limit_name,</if>
+            <if test="limitCode != null  and limitCode != ''">limit_code,</if>
+            <if test="colorNumber != null  and colorNumber != ''">color_number,</if>
+            <if test="createTime != null ">create_time,</if>
+            <if test="createBy != null  and createBy != ''">create_by,</if>
+            <if test="updateTime != null ">update_time,</if>
+            <if test="updateBy != null  and updateBy != ''">update_by,</if>
+            <if test="comparatorOperator != null  and comparatorOperator != ''">comparator_operator,</if>
+            <if test="alarmType != null  and alarmType != ''">alarm_type,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">#{id},</if>
+            <if test="limitName != null  and limitName != ''">#{limitName},</if>
+            <if test="limitCode != null  and limitCode != ''">#{limitCode},</if>
+            <if test="colorNumber != null  and colorNumber != ''">#{colorNumber},</if>
+            <if test="createTime != null ">#{createTime},</if>
+            <if test="createBy != null  and createBy != ''">#{createBy},</if>
+            <if test="updateTime != null ">#{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+            <if test="comparatorOperator != null  and comparatorOperator != ''">#{comparatorOperator},</if>
+            <if test="alarmType != null  and alarmType != ''">#{alarmType},</if>
+        </trim>
+    </insert>
+
+    <update id="updateLimitType" parameterType="LimitType">
+        update limit_type
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="limitName != null  and limitName != ''">limit_name = #{limitName},</if>
+            <if test="limitCode != null  and limitCode != ''">limit_code = #{limitCode},</if>
+            <if test="colorNumber != null  and colorNumber != ''">color_number = #{colorNumber},</if>
+            <if test="createTime != null ">create_time = #{createTime},</if>
+            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
+            <if test="updateTime != null ">update_time = #{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="comparatorOperator != null  and comparatorOperator != ''">comparator_operator = #{comparatorOperator},</if>
+            <if test="alarmType != null  and alarmType != ''">alarm_type = #{alarmType},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteLimitTypeById" parameterType="String">
+        delete from limit_type where id = #{id}
+    </delete>
+
+    <delete id="deleteLimitTypeByIds" parameterType="String">
+        delete from limit_type where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/alarm/HistoryAlarmMapper.xml b/zhitan-system/target/classes/mapper/alarm/HistoryAlarmMapper.xml
new file mode 100644
index 0000000..d7d6f6e
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/alarm/HistoryAlarmMapper.xml
@@ -0,0 +1,339 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.alarm.mapper.HistoryAlarmMapper">
+
+  <resultMap type="HistoryAlarm" id="HistoryAlarmResult">
+    <result property="id" column="id"/>
+    <result property="endTime" column="end_time"/>
+    <result property="indexId" column="index_id"/>
+    <result property="indexName" column="index_name"/>
+    <result property="itemId" column="item_id"/>
+    <result property="limitingValue" column="limiting_value"/>
+    <result property="alarmValue" column="alarm_value"/>
+    <result property="alarmValueQuality" column="alarm_value_quality"/>
+    <result property="beginTime" column="begin_time"/>
+    <result property="duration" column="duration"/>
+    <result property="content" column="content"/>
+  </resultMap>
+
+  <resultMap type="JkHistoryAlarm" id="JkHistoryAlarmResult">
+    <result property="modelName" column="modelname"/>
+    <result property="code" column="code"/>
+    <result property="indexName" column="indexname"/>
+    <result property="unitId" column="unit_id"/>
+    <result property="alarmLevel" column="alarm_level"/>
+    <result property="limitType" column="limit_type"/>
+    <result property="limitingValue" column="limiting_value"/>
+    <result property="alarmBeginTime" column="begin_time"/>
+    <result property="alarmValue" column="alarm_value"/>
+    <result property="indexId" column="index_id"/>
+    <result property="nodeId" column="node_id"/>
+    <result property="duration" column="duration"/>
+    <result property="alarmBeginTime" column="begin_time"/>
+    <result property="alarmEndTime" column="end_time"/>
+  </resultMap>
+
+  <sql id="selectHistoryAlarmVo">
+    select id,
+           index_id,
+           index_name,
+           item_id,
+           limiting_value,
+           alarm_value,
+           alarm_value_quality,
+           begin_time,
+           end_time,
+           duration,
+           content
+    from history_alarm
+  </sql>
+
+  <select id="selectHistoryAlarmList" parameterType="HistoryAlarm" resultMap="HistoryAlarmResult">
+    <include refid="selectHistoryAlarmVo"/>
+    <where>
+      <if test="indexName != null  and indexName != ''">and index_name like concat('%',
+        #{indexName}, '%')
+      </if>
+      <if test="itemId != null  and itemId != ''">and item_id like concat('%', #{itemId}, '%')</if>
+      <if test="limitingValue != null ">and limiting_value like concat('%', #{limitingValue}, '%')
+      </if>
+      <if test="alarmValue != null ">and alarm_value like concat('%', #{alarmValue}, '%')</if>
+      <if test="alarmValueQuality != null  and alarmValueQuality != ''">and alarm_value_quality like
+        concat('%', #{alarmValueQuality}, '%')
+      </if>
+      <if test="beginTime != null ">and begin_time like concat('%', #{beginTime}, '%')</if>
+      <if test="endTime != null ">and end_time like concat('%', #{endTime}, '%')</if>
+      <if test="duration != null ">and duration like concat('%', #{duration}, '%')</if>
+      <if test="content != null  and content != ''">and content like concat('%', #{content}, '%')
+      </if>
+    </where>
+  </select>
+
+  <select id="selectHistoryAlarmById" parameterType="String" resultMap="HistoryAlarmResult">
+    <include refid="selectHistoryAlarmVo"/>
+    where id = #{id}
+  </select>
+
+
+  <update id="updateHistoryAlarm" parameterType="HistoryAlarm">
+    delete from realtime_alarm where alarm_code = #{alarmCode};
+    insert into history_alarm
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="historyAlarm.id != null  and historyAlarm.id != ''">id,</if>
+      <if test="historyAlarm.indexId != null  and historyAlarm.indexId != ''">index_id,</if>
+      <if test="historyAlarm.indexName != null  and historyAlarm.indexName != ''">index_name,</if>
+      <if test="historyAlarm.itemId != null  and historyAlarm.itemId != ''">item_id,</if>
+      <if test="historyAlarm.limitingValue != null ">limiting_value,</if>
+      <if test="historyAlarm.alarmValue != null ">alarm_value,</if>
+      <if test="historyAlarm.alarmValueQuality != null">alarm_value_quality,</if>
+      <if test="historyAlarm.beginTime != null ">begin_time,</if>
+      <if test="historyAlarm.endTime != null ">end_time,</if>
+      <if test="historyAlarm.duration != null ">duration,</if>
+      <if test="historyAlarm.content != null  and historyAlarm.content != ''">content,</if>
+      <if test="historyAlarm.timeCode != null and historyAlarm.timeCode != ''">time_code,</if>
+      <if test="historyAlarm.alarmCode != null and historyAlarm.alarmCode != ''">alarm_code,</if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="historyAlarm.id != null  and historyAlarm.id != ''">#{historyAlarm.id},</if>
+      <if test="historyAlarm.indexId != null  and historyAlarm.indexId != ''">#{historyAlarm.indexId},</if>
+      <if test="historyAlarm.indexName != null  and historyAlarm.indexName != ''">#{historyAlarm.indexName},</if>
+      <if test="historyAlarm.itemId != null  and historyAlarm.itemId != ''">#{historyAlarm.itemId},</if>
+      <if test="historyAlarm.limitingValue != null ">#{historyAlarm.limitingValue},</if>
+      <if test="historyAlarm.alarmValue != null ">#{historyAlarm.alarmValue},</if>
+      <if test="historyAlarm.alarmValueQuality != null">#{historyAlarm.alarmValueQuality},</if>
+      <if test="historyAlarm.beginTime != null ">#{historyAlarm.beginTime},</if>
+      <if test="historyAlarm.endTime != null ">#{historyAlarm.endTime},</if>
+      <if test="historyAlarm.duration != null ">#{historyAlarm.duration},</if>
+      <if test="historyAlarm.content != null  and historyAlarm.content != ''">#{historyAlarm.content},</if>
+      <if test="historyAlarm.timeCode != null and historyAlarm.timeCode != ''">#{historyAlarm.timeCode},</if>
+      <if test="historyAlarm.alarmCode != null and historyAlarm.alarmCode != ''">#{historyAlarm.alarmCode},</if>
+    </trim>
+    ;
+  </update>
+
+  <delete id="deleteHistoryAlarmById" parameterType="String">
+    delete
+    from history_alarm
+    where id = #{id}
+  </delete>
+
+  <delete id="deleteHistoryAlarmByIds" parameterType="String">
+    delete from history_alarm where id in
+    <foreach item="id" collection="array" open="(" separator="," close=")">
+      #{id}
+    </foreach>
+  </delete>
+
+  <!--鍘嗗彶 鎶ヨ鍒楄〃椤甸潰 閲囬泦鐐� 涓婚〉闈㈠垪琛ㄦ煡璇�-->
+  <select id="selectJkHistoryAlarmList" parameterType="JkHistoryAlarm"
+    resultMap="JkHistoryAlarmResult">
+    SELECT
+    mo."name" AS modelname,
+    ei.code,
+    ei.NAME AS indexname,
+    ei.unit_id,
+    alit.alarm_level,
+    alit.limit_type,
+    bj.limiting_value,
+    bj.begin_time,
+    bj.end_time,
+    bj.alarm_value,
+    bj.duration,
+    ei.index_id,
+    ei.index_type,
+    mo.node_id
+    FROM
+    energy_index ei,
+    node_index ni,
+    model_node mo,
+    history_alarm bj ,
+    alarm_item alit
+    WHERE
+    ni.node_id IN (
+    SELECT node_id FROM model_node WHERE address LIKE (
+    SELECT address FROM model_node WHERE node_id = #{nodeId} )
+    <if test='eierarchyFlag=="ALL"'>
+      || '%'
+    </if>
+    )
+    AND ei.index_id = ni.index_id
+    AND mo.node_id = ni.node_id
+    AND bj.index_id = ei.index_id
+    AND alit.alarm_code = bj.alarm_code
+    AND alit.time_slot='LIVE'
+    <if test="indexType != null  and indexType != ''">
+        AND ei.index_type=#{indexType}
+    </if>
+    <if test="indexName != null  and indexName != ''">and ei.name like concat('%', #{indexName},
+      '%')
+    </if>
+    <if test="limitType != null  and limitType != ''">and alit.limit_type=#{limitType}</if>
+    <if test="alarmLevel != null  and alarmLevel != ''">and alit.alarm_level=#{alarmLevel}</if>
+    <if test="beginTime != null and beginTime != ''">and begin_time &gt;=
+      to_timestamp(#{beginTime},'yyyy-mm-dd hh24:mi:ss')
+    </if>
+    <if test="endTime != null and endTime != ''">and begin_time &lt;=
+      to_timestamp(#{endTime},'yyyy-mm-dd hh24:mi:ss')
+    </if>
+    order by alarm_level,mo.node_id,limit_type asc
+  </select>
+
+  <select id="selectJkHistoryAlarmListExcel" parameterType="JkHistoryAlarm"
+    resultMap="JkHistoryAlarmResult">
+    SELECT
+    mo."name" AS modelname,
+    ei.code,
+    ei.NAME AS indexname,
+    fun_getdicedata('sys_unit',ei.unit_id) as unit_id,
+    fun_getdicedata('alarm_level',alit.alarm_level) as alarm_level,
+    lt.limit_name as limit_type,
+    bj.limiting_value,
+    bj.begin_time,
+    bj.end_time,
+    bj.alarm_value,
+    bj.duration,
+    ei.index_id,
+    mo.node_id
+    FROM
+    energy_index ei,
+    node_index ni,
+    model_node mo,
+    history_alarm bj ,
+    alarm_item alit,
+    limit_type lt
+    WHERE
+    ni.node_id IN (
+    SELECT node_id FROM model_node WHERE address LIKE (
+    SELECT address FROM model_node WHERE node_id = #{nodeId} )
+    <if test='eierarchyFlag=="ALL"'>
+      || '%'
+    </if>
+    )
+    AND ei.index_id = ni.index_id
+    AND mo.node_id = ni.node_id
+    AND bj.index_id = ei.index_id
+    AND alit.alarm_code = bj.alarm_code
+    AND alit.time_slot='LIVE'
+    AND ei.index_type=#{indexType}
+    AND lt.limit_code=alit.limit_type
+    <if test="indexName != null  and indexName != ''">and ei.name like concat('%', #{indexName},
+      '%')
+    </if>
+    <if test="limitType != null  and limitType != ''">and alit.limit_type=#{limitType}</if>
+    <if test="alarmLevel != null  and alarmLevel != ''">and alit.alarm_level=#{alarmLevel}</if>
+    <if test="beginTime != null and beginTime != '' ">and begin_time &gt;=
+      to_timestamp(#{beginTime},'yyyy-mm-dd hh24:mi:ss')
+    </if>
+    <if test="endTime != null and endTime != ''">and begin_time &lt;=
+      to_timestamp(#{endTime},'yyyy-mm-dd hh24:mi:ss')
+    </if>
+    order by alarm_level,mo.node_id,limit_type asc
+  </select>
+
+  <select id="selectHistoryAlarmNoteList" parameterType="JkHistoryAlarm"
+    resultMap="JkHistoryAlarmResult">
+    SELECT
+    ei.code,
+    ei.NAME AS indexname,
+    fun_getdicedata('sys_unit',ei.unit_id) as unit_id,
+    fun_getdicedata('alarm_level',alit.alarm_level) as alarm_level,
+    lt.limit_name as limit_type,
+    bj.limiting_value,
+    bj.begin_time,
+    bj.end_time,
+    bj.alarm_value,
+    bj.duration,
+    ei.index_id
+    FROM
+    energy_index ei,
+    history_alarm bj ,
+    sys_svg_info svg,
+    alarm_item alit,
+    limit_type lt
+    WHERE
+    svg.node_id=#{nodeId}
+    AND ei.code = svg.tag
+    AND bj.index_id = ei.index_id
+    AND alit.alarm_code = bj.alarm_code
+    AND alit.time_slot='LIVE'
+    AND ei.index_type=#{indexType}
+    AND lt.limit_code=alit.limit_type
+    <if test="indexName != null  and indexName != ''">and ei.name like concat('%', #{indexName},
+      '%')
+    </if>
+    <if test="limitType != null  and limitType != ''">and alit.limit_type=#{limitType}</if>
+    <if test="alarmLevel != null  and alarmLevel != ''">and alit.alarm_level=#{alarmLevel}</if>
+    <if test="beginTime != null and beginTime != '' ">and begin_time &gt;=
+      to_timestamp(#{beginTime},'yyyy-mm-dd hh24:mi:ss')
+    </if>
+    <if test="endTime != null and endTime != ''">and begin_time &lt;=
+      to_timestamp(#{endTime},'yyyy-mm-dd hh24:mi:ss')
+    </if>
+    order by alarm_level,limit_type asc
+  </select>
+  <select id="selectJkHistoryAlarmPage" resultType="JkHistoryAlarm">
+    SELECT
+    mo."name" AS modelname,
+    ei.code,
+    ei.NAME AS indexname,
+    ei.unit_id,
+    alit.alarm_level,
+    alit.limit_type,
+    bj.limiting_value,
+    bj.begin_time,
+    bj.end_time,
+    bj.alarm_value,
+    bj.duration,
+    ei.index_id,
+    ei.index_type,
+    ei.energy_id,
+    mo.node_id
+    FROM
+    energy_index ei,
+    node_index ni,
+    model_node mo,
+    history_alarm bj ,
+    alarm_item alit
+    WHERE
+    ni.node_id IN (
+    SELECT node_id FROM model_node WHERE address LIKE (
+    SELECT address FROM model_node WHERE node_id = #{jkHistoryAlarm.nodeId} )
+    <if test='jkHistoryAlarm.eierarchyFlag=="ALL"'>
+      || '%'
+    </if>
+    )
+    AND ei.index_id = ni.index_id
+    AND mo.node_id = ni.node_id
+    AND bj.index_id = ei.index_id
+    AND alit.alarm_code = bj.alarm_code
+    AND alit.time_slot='LIVE'
+    AND ei.index_type=#{jkHistoryAlarm.indexType}
+    <if test="jkHistoryAlarm.indexName != null  and jkHistoryAlarm.indexName != ''">and ei.name like concat('%', #{jkHistoryAlarm.indexName},
+      '%')
+    </if>
+    <if test="jkHistoryAlarm.limitType != null  and jkHistoryAlarm.limitType != ''">and alit.limit_type=#{jkHistoryAlarm.limitType}</if>
+    <if test="jkHistoryAlarm.alarmLevel != null  and jkHistoryAlarm.alarmLevel != ''">and alit.alarm_level=#{jkHistoryAlarm.alarmLevel}</if>
+    <if test="jkHistoryAlarm.beginTime != null and jkHistoryAlarm.beginTime != ''">and begin_time &gt;=
+      to_timestamp(#{jkHistoryAlarm.beginTime},'yyyy-mm-dd hh24:mi:ss')
+    </if>
+    <if test="jkHistoryAlarm.endTime != null and jkHistoryAlarm.endTime != ''">and begin_time &lt;=
+      to_timestamp(#{jkHistoryAlarm.endTime},'yyyy-mm-dd hh24:mi:ss')
+    </if>
+    order by alarm_level,mo.node_id,limit_type asc
+  </select>
+  <select id="selectCountByTime" resultType="java.lang.Integer">
+    select count(0)
+    from history_alarm 
+    <where>
+      <if test="beginTime != null ">
+       and begin_time &gt;= #{beginTime}
+      </if>
+      <if test="endTime != null ">
+      and begin_time &lt;= #{endTime}
+      </if>
+    </where>
+  </select>
+
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/alarm/RealtimeAlarmMapper.xml b/zhitan-system/target/classes/mapper/alarm/RealtimeAlarmMapper.xml
new file mode 100644
index 0000000..01c252d
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/alarm/RealtimeAlarmMapper.xml
@@ -0,0 +1,238 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.alarm.mapper.RealtimeAlarmMapper">
+
+
+    <resultMap type="com.zhitan.alarm.domain.RealTimeAlarm"
+               id="RealTimeAlarmResult">
+        <result property="id" column="id"/>
+        <result property="indexId" column="index_id"/>
+        <result property="indexName" column="index_name"/>
+        <result property="itemId" column="item_id"/>
+        <result property="limitingValue" column="limiting_value"/>
+        <result property="alarmValue" column="alarm_value"/>
+        <result property="alarmValueQuality" column="alarm_value_quality"/>
+        <result property="beginTime" column="begin_time"/>
+        <result property="content" column="content"/>
+    <result property="timeCode" column="time_code"/>
+    <result property="alarmCode" column="alarm_code"/>
+        <association property="alarmItem"
+                     javaType="com.zhitan.alarm.domain.AlarmItem">
+            <result property="id" column="itemId"/>
+            <result property="timeSlot" column="time_slot"/>
+            <result property="limitType" column="limit_type"/>
+            <result property="alarmLevel" column="alarm_level"/>
+        </association>
+  </resultMap>
+
+  <resultMap type="JkRealTimeAlarmList" id="JkRealTimeAlarmListResult">
+    <result property="modelName" column="modelname"/>
+    <result property="code" column="code"/>
+    <result property="indexName" column="indexname"/>
+    <result property="unitId" column="unit_id"/>
+    <result property="alarmLevel" column="alarm_level"/>
+    <result property="limitType" column="limit_type"/>
+    <result property="limitingValue" column="limiting_value"/>
+    <result property="alarmBeginTime" column="begin_time"/>
+    <result property="alarmValue" column="alarm_value"/>
+    <result property="indexId" column="index_id"/>
+    <result property="nodeId" column="node_id"/>
+  </resultMap>
+
+
+  <select id="selectRealtimeAlarmList" parameterType="RealTimeAlarm"
+    resultMap="RealTimeAlarmResult">
+    select id, index_id, index_name, item_id, limiting_value, alarm_value, alarm_value_quality,
+    begin_time, content from realtime_alarm
+    <where>
+      <if test="indexName != null  and indexName != ''">and index_name like concat('%',
+        #{indexName}, '%')
+      </if>
+      <if test="itemId != null  and itemId != ''">and item_id like concat('%', #{itemId}, '%')</if>
+      <if test="limitingValue != null ">and limiting_value like concat('%', #{limitingValue}, '%')
+      </if>
+      <if test="alarmValue != null ">and alarm_value like concat('%', #{alarmValue}, '%')</if>
+      <if test="alarmValueQuality != null">and alarm_value_quality like
+        concat('%', #{alarmValueQuality}, '%')
+      </if>
+      <if test="beginTime != null ">and begin_time like concat('%', #{beginTime}, '%')</if>
+      <if test="content != null  and content != ''">and content like concat('%', #{content}, '%')
+      </if>
+    </where>
+  </select>
+
+  <select id="selectRealtimeAlarmById" parameterType="String" resultMap="RealTimeAlarmResult">
+    select id,
+           index_id,
+           index_name,
+           item_id,
+           limiting_value,
+           alarm_value,
+           alarm_value_quality,
+           begin_time,
+           content
+    from realtime_alarm
+    where id = #{id}
+  </select>
+
+  <insert id="insertRealtimeAlarm" parameterType="RealTimeAlarm">
+    insert into realtime_alarm
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null  and id != ''">id,</if>
+      <if test="indexId != null  and indexId != ''">index_id,</if>
+      <if test="indexName != null  and indexName != ''">index_name,</if>
+      <if test="itemId != null  and itemId != ''">item_id,</if>
+      <if test="limitingValue != null ">limiting_value,</if>
+      <if test="alarmValue != null ">alarm_value,</if>
+      <if test="alarmValueQuality != null">alarm_value_quality,</if>
+      <if test="beginTime != null ">begin_time,</if>
+      <if test="content != null  and content != ''">content,</if>
+      <if test="timeCode != null  and timeCode != ''">time_code,</if>
+      <if test="alarmCode != null  and alarmCode != ''">alarm_code,</if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null  and id != ''">#{id},</if>
+      <if test="indexId != null  and indexId != ''">#{indexId},</if>
+      <if test="indexName != null  and indexName != ''">#{indexName},</if>
+      <if test="itemId != null  and itemId != ''">#{itemId},</if>
+      <if test="limitingValue != null ">#{limitingValue},</if>
+      <if test="alarmValue != null ">#{alarmValue},</if>
+      <if test="alarmValueQuality != null">#{alarmValueQuality},</if>
+      <if test="beginTime != null ">#{beginTime},</if>
+      <if test="content != null  and content != ''">#{content},</if>
+      <if test="timeCode != null  and timeCode != ''">#{timeCode},</if>
+      <if test="alarmCode != null  and alarmCode != ''">#{alarmCode},</if>
+    </trim>
+  </insert>
+
+  <update id="updateRealtimeAlarm" parameterType="RealTimeAlarm">
+    update realtime_alarm
+    <trim prefix="SET" suffixOverrides=",">
+      <if test="indexId != null  and indexId != ''">index_id = #{indexId},</if>
+      <if test="indexName != null  and indexName != ''">index_name = #{indexName},</if>
+      <if test="itemId != null  and itemId != ''">item_id = #{itemId},</if>
+      <if test="limitingValue != null ">limiting_value = #{limitingValue},</if>
+      <if test="alarmValue != null ">alarm_value = #{alarmValue},</if>
+      <if test="alarmValueQuality != null">alarm_value_quality =
+        #{alarmValueQuality},
+      </if>
+      <if test="beginTime != null ">begin_time = #{beginTime},</if>
+      <if test="content != null  and content != ''">content = #{content},</if>
+    </trim>
+    where id = #{id}
+  </update>
+
+  <delete id="deleteRealtimeAlarmById" parameterType="String">
+    delete
+    from realtime_alarm
+    where id = #{id}
+  </delete>
+
+  <delete id="deleteRealtimeAlarmByIds" parameterType="String">
+    delete from realtime_alarm where id in
+    <foreach item="id" collection="array" open="(" separator="," close=")">
+      #{id}
+    </foreach>
+  </delete>
+
+  <!--瀹炴椂鎶ヨ鍒楄〃椤甸潰 閲囬泦鐐� 涓婚〉闈㈠垪琛ㄦ煡璇�-->
+  <select id="selectRealtimeAlarmJkList" parameterType="JkRealTimeAlarmList"
+    resultMap="JkRealTimeAlarmListResult">
+    SELECT
+    mo."name" AS modelname,
+    ei.code,
+    ei.NAME AS indexname,
+    ei.unit_id,
+    alit.alarm_level,
+    alit.limit_type,
+    bj.limiting_value,
+    bj.begin_time,
+    round(cast(bj.alarm_value as numeric ),2) as alarm_value,
+    ei.index_id,
+    mo.node_id
+    FROM
+    energy_index ei,
+    node_index ni,
+    model_node mo,
+    realtime_alarm bj ,
+    alarm_item alit
+    WHERE
+    ni.node_id IN (
+    SELECT node_id FROM model_node WHERE address LIKE (
+    SELECT address FROM model_node WHERE node_id = #{nodeId} )
+    <if test='eierarchyFlag=="ALL"'>
+      || '%'
+    </if>
+    )
+    AND ei.index_id = ni.index_id
+    AND mo.node_id = ni.node_id
+    AND bj.index_id = ei.index_id
+    AND alit.alarm_code = bj.alarm_code
+    AND alit.time_slot='LIVE'
+    AND ei.index_type=#{indexType}
+    <if test="indexName != null  and indexName != ''">and ei.name like concat('%', #{indexName},
+      '%')
+    </if>
+    <if test="limitType != null  and limitType != ''">and alit.limit_type=#{limitType}</if>
+    <if test="alarmLevel != null  and alarmLevel != ''">and alit.alarm_level=#{alarmLevel}</if>
+    order by alarm_level,mo.node_id,limit_type asc
+  </select>
+  <select id="getRealTimeAlarmByAlarmCode" resultMap="RealTimeAlarmResult">
+    select *
+    from realtime_alarm
+    where alarm_code = #{itemId}
+  </select>
+  <select id="getRealTimeAlarm" resultMap="RealTimeAlarmResult">
+    select *
+    from realtime_alarm ra
+  </select>
+  <select id="getAlarmByItemIdAndTimeCode" resultMap="RealTimeAlarmResult">
+    select *
+    from realtime_alarm
+    where item_id = #{itemId}
+      and time_code = #{timeCode}
+  </select>
+  <select id="selectRealtimeAlarmJkPage" resultMap="JkRealTimeAlarmListResult">
+    SELECT
+    mo."name" AS modelname,
+    ei.code,
+    ei.NAME AS indexname,
+    ei.unit_id,
+    alit.alarm_level,
+    alit.limit_type,
+    bj.limiting_value,
+    bj.begin_time,
+    round(cast(bj.alarm_value as numeric ),2) as alarm_value,
+    ei.index_id,
+    mo.node_id
+    FROM
+    energy_index ei,
+    node_index ni,
+    model_node mo,
+    realtime_alarm bj ,
+    alarm_item alit
+    WHERE
+    ni.node_id IN (
+    SELECT node_id FROM model_node WHERE address LIKE (
+    SELECT address FROM model_node WHERE node_id = #{realTimeAlarmList.nodeId} )
+    <if test='realTimeAlarmList.eierarchyFlag=="ALL"'>
+      || '%'
+    </if>
+    )
+    AND ei.index_id = ni.index_id
+    AND mo.node_id = ni.node_id
+    AND bj.index_id = ei.index_id
+    AND alit.alarm_code = bj.alarm_code
+    AND alit.time_slot='LIVE'
+    AND ei.index_type=#{realTimeAlarmList.indexType}
+    <if test="realTimeAlarmList.indexName != null  and realTimeAlarmList.indexName != ''">and ei.name like concat('%', #{realTimeAlarmList.indexName},
+      '%')
+    </if>
+    <if test="realTimeAlarmList.limitType != null  and realTimeAlarmList.limitType != ''">and alit.limit_type=#{realTimeAlarmList.limitType}</if>
+    <if test="realTimeAlarmList.alarmLevel != null  and realTimeAlarmList.alarmLevel != ''">and alit.alarm_level=#{realTimeAlarmList.alarmLevel}</if>
+    order by alarm_level,mo.node_id,limit_type asc
+  </select>
+
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/auxiliaryinput/ProductOutputMapper.xml b/zhitan-system/target/classes/mapper/auxiliaryinput/ProductOutputMapper.xml
new file mode 100644
index 0000000..b195d5a
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/auxiliaryinput/ProductOutputMapper.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.productoutput.mapper.ProductOutputMapper">
+
+    <resultMap type="ProductOutput" id="ProductOutputResult">
+        <result property="productOutputId"    column="product_output_id"    />
+        <result property="nodeId"    column="node_id"    />
+        <result property="nodeName"    column="node_name"    />
+        <result property="timeType"    column="time_type"    />
+        <result property="dataTime"    column="data_time"    />
+        <result property="name"    column="name"    />
+        <result property="number"    column="number"    />
+        <result property="unit"    column="unit"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="dataType"    column="data_type"    />
+        <result property="productType"    column="product_type"    />
+    </resultMap>
+
+    <sql id="selectProductOutputVo">
+        select product_output_id, node_name, node_id, time_type, data_time, name, number, unit, del_flag, create_by, create_time, update_by, update_time, remark, data_type,product_type from product_output
+    </sql>
+
+    <select id="selectProductOutputList" parameterType="ProductOutput" resultMap="ProductOutputResult">
+        <include refid="selectProductOutputVo"/>
+        <where>
+            <if test="productOutputId != null  and productOutputId != ''"> and product_output_id = #{productOutputId}</if>
+            <if test="nodeId != null  and nodeId != ''"> and node_id = #{nodeId}</if>
+            <if test="nodeName != null  and nodeName != ''"> and node_name = #{nodeName}</if>
+            <if test="timeType != null  and timeType != ''"> and time_type = #{timeType}</if>
+            <if test="dataTime != null "> and data_time = #{dataTime}</if>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="number != null  and number != ''"> and number = #{number}</if>
+            <if test="unit != null  and unit != ''"> and unit = #{unit}</if>
+            <if test="dataType != null  and dataType != ''"> and data_type = #{dataType}</if>
+            <if test="productType != null  and productType != ''"> and product_type = #{productType}</if>
+        </where>
+    </select>
+
+    <select id="selectProductOutputById" parameterType="String" resultMap="ProductOutputResult">
+        <include refid="selectProductOutputVo"/>
+        where  product_output_id = #{productOutputId}
+    </select>
+
+    <insert id="insertProductOutput" parameterType="ProductOutput">
+        insert into product_output
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="productOutputId != null">product_output_id,</if>
+            <if test="nodeId != null">node_id,</if>
+            <if test="nodeName != null">node_name,</if>
+            <if test="timeType != null">time_type,</if>
+            <if test="dataTime != null">data_time,</if>
+            <if test="name != null">name,</if>
+            <if test="number != null">number,</if>
+            <if test="unit != null">unit,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+            <if test="dataType != null">data_type,</if>
+            <if test="productType != null">product_type,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="productOutputId != null">#{productOutputId},</if>
+            <if test="nodeId != null">#{nodeId},</if>
+            <if test="nodeName != null">#{nodeName},</if>
+            <if test="timeType != null">#{timeType},</if>
+            <if test="dataTime != null">#{dataTime},</if>
+            <if test="name != null">#{name},</if>
+            <if test="number != null">#{number},</if>
+            <if test="unit != null">#{unit},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="dataType != null">#{dataType},</if>
+            <if test="productType != null">#{productType},</if>
+        </trim>
+    </insert>
+
+    <update id="updateProductOutput" parameterType="ProductOutput">
+        update product_output
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="timeType != null">time_type = #{timeType},</if>
+            <if test="dataTime != null">data_time = #{dataTime},</if>
+            <if test="name != null">name = #{name},</if>
+            <if test="number != null">number = #{number},</if>
+            <if test="unit != null">unit = #{unit},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="dataType != null">data_type = #{dataType},</if>
+            <if test="productType != null">product_type = #{productType},</if>
+        </trim>
+        where product_output_id = #{productOutputId}
+    </update>
+
+    <delete id="deleteProductOutputById" parameterType="String">
+        delete from product_output where product_output_id = #{productOutputId}
+    </delete>
+
+    <delete id="deleteProductOutputByIds" parameterType="String">
+        delete from product_output where product_output_id in
+        <foreach item="productOutputId" collection="array" open="(" separator="," close=")">
+            #{productOutputId}
+        </foreach>
+    </delete>
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/basicdata/FacilityAnnexMapper.xml b/zhitan-system/target/classes/mapper/basicdata/FacilityAnnexMapper.xml
new file mode 100644
index 0000000..fb8f4ef
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/basicdata/FacilityAnnexMapper.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.basicdata.mapper.FacilityAnnexMapper">
+    
+    <resultMap type="FacilityAnnex" id="FacilityAnnexResult">
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="id"    column="id"    />
+        <result property="facilityId"    column="facility_id"    />
+        <result property="fileName"    column="file_name"    />
+        <result property="filesuffix"    column="file_suffix"    />
+        <result property="filePath"    column="file_path"    />
+        <result property="delFlage"    column="del_flage"    />
+    </resultMap>
+
+    <sql id="selectFacilityAnnexVo">
+        select create_time, create_by, update_time, update_by, id, facility_id, file_name, file_suffix, file_path, del_flage from facility_annex
+    </sql>
+
+    <select id="selectFacilityAnnexList" parameterType="FacilityAnnex" resultMap="FacilityAnnexResult">
+        <include refid="selectFacilityAnnexVo"/>
+        <where>
+            del_flage='N'
+            <if test="fileName != null  and fileName != ''"> and file_name like concat('%', #{fileName}, '%')</if>
+            <if test="facilityId != null  and facilityId != ''"> and facility_id=#{facilityId}</if>
+        </where>
+    </select>
+    
+    <select id="selectFacilityAnnexById" parameterType="Date" resultMap="FacilityAnnexResult">
+        <include refid="selectFacilityAnnexVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertFacilityAnnex" parameterType="FacilityAnnex">
+        insert into facility_annex
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="createTime != null ">create_time,</if>
+            <if test="createBy != null  and createBy != ''">create_by,</if>
+            <if test="updateTime != null ">update_time,</if>
+            <if test="updateBy != null  and updateBy != ''">update_by,</if>
+            <if test="id != null  and id != ''">id,</if>
+            <if test="facilityId != null  and facilityId != ''">facility_id,</if>
+            <if test="fileName != null  and fileName != ''">file_name,</if>
+            <if test="filesuffix != null  and filesuffix != ''">file_suffix,</if>
+            <if test="filePath != null  and filePath != ''">file_path,</if>
+            <if test="delFlage != null  and delFlage != ''">del_flage,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="createTime != null ">#{createTime},</if>
+            <if test="createBy != null  and createBy != ''">#{createBy},</if>
+            <if test="updateTime != null ">#{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+            <if test="id != null  and id != ''">#{id},</if>
+            <if test="facilityId != null  and facilityId != ''">#{facilityId},</if>
+            <if test="fileName != null  and fileName != ''">#{fileName},</if>
+            <if test="filesuffix != null  and filesuffix != ''">#{filesuffix},</if>
+            <if test="filePath != null  and filePath != ''">#{filePath},</if>
+            <if test="delFlage != null  and delFlage != ''">#{delFlage},</if>
+         </trim>
+    </insert>
+
+    <update id="updateFacilityAnnex" parameterType="FacilityAnnex">
+        update facility_annex
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
+            <if test="updateTime != null ">update_time = #{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="id != null  and id != ''">id = #{id},</if>
+            <if test="facilityId != null  and facilityId != ''">facility_id = #{facilityId},</if>
+            <if test="fileName != null  and fileName != ''">file_name = #{fileName},</if>
+            <if test="filesuffix != null  and filesuffix != ''">file_suffix = #{filesuffix},</if>
+            <if test="filePath != null  and filePath != ''">file_path = #{filePath},</if>
+            <if test="delFlage != null  and delFlage != ''">del_flage = #{delFlage},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteFacilityAnnexById" parameterType="Date">
+        <!--delete from facility_annex where create_time = #{createTime}-->
+        update facility_annex set del_flage='Y',update_time=now() where id = #{id}
+    </delete>
+
+    <delete id="deleteFacilityAnnexByIds" parameterType="String">
+        <!--delete from facility_annex where create_time in-->
+        update facility_annex set del_flage='Y',update_time=now() where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+    
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/basicdata/FacilityArchivesMapper.xml b/zhitan-system/target/classes/mapper/basicdata/FacilityArchivesMapper.xml
new file mode 100644
index 0000000..bdebaaf
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/basicdata/FacilityArchivesMapper.xml
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.basicdata.mapper.FacilityArchivesMapper">
+
+    <resultMap type="FacilityArchives" id="FacilityArchivesResult">
+        <result property="id"    column="id"    />
+        <result property="code"    column="code"    />
+        <result property="facilityName"    column="facility_name"    />
+        <result property="facilityType"    column="facility_type"    />
+        <result property="branchFactory"    column="branch_factory"    />
+        <result property="istallationLocationn"    column="installation_location"    />
+        <result property="facilityGrade"    column="facility_grade"    />
+        <result property="ratedPower"    column="rated_power"    />
+        <result property="productionDate"    column="production_date"    />
+        <result property="putrunDate"    column="putrun_date"    />
+        <result property="manufacturer"    column="manufacturer"    />
+        <result property="personCharge"    column="person_charge"    />
+        <result property="technicalData"    column="technical_data"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="checkCycle"    column="check_cycle"    />
+        <result property="reminderCycle"    column="reminder_cycle"    />
+        <result property="remark"    column="remark"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="txflage"    column="txflage"    />
+        <result property="pointFlag"    column="point_flag"    />
+    </resultMap>
+
+    <sql id="selectFacilityArchivesVo">
+        select id, code, facility_name, facility_type, branch_factory, installation_location, facility_grade, rated_power, production_date, putrun_date, manufacturer, person_charge, technical_data, start_time, check_cycle, reminder_cycle, remark, create_time, create_by, update_time, update_by,point_flag,(start_time+check_cycle-reminder_cycle)&lt;=current_date as txflage from facility_archives
+    </sql>
+
+    <select id="selectFacilityArchivesList" parameterType="FacilityArchives" resultMap="FacilityArchivesResult">
+        <include refid="selectFacilityArchivesVo"/>
+        <where>
+            <if test="code != null  and code != ''"> and code like concat('%', #{code}, '%')</if>
+            <if test="facilityName != null  and facilityName != ''"> and facility_name like concat('%', #{facilityName}, '%')</if>
+            <if test="manufacturer != null  and manufacturer != ''"> and manufacturer like concat('%', #{manufacturer}, '%')</if>
+            <if test="facilityType != null  and facilityType != ''"> and facility_type = #{facilityType}</if>
+            <if test="branchFactory != null  and branchFactory != ''"> and branch_factory = #{branchFactory}</if>
+            <if test="istallationLocationn != null  and istallationLocationn != ''"> and installation_location like concat('%', #{istallationLocationn}, '%')</if>
+            <if test="facilityGrade != null  and facilityGrade != ''"> and facility_grade = #{facilityGrade}</if>
+            <if test="ratedPower != null  and ratedPower != ''"> and to_number(rated_power,'9999999999') >= to_number(#{ratedPower},'9999999999')</if>
+        </where>
+        order by code
+    </select>
+
+    <select id="selectFacilityArchivesById" parameterType="String" resultMap="FacilityArchivesResult">
+        <include refid="selectFacilityArchivesVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertFacilityArchives" parameterType="FacilityArchives">
+        insert into facility_archives
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">id,</if>
+            <if test="code != null  and code != ''">code,</if>
+            <if test="facilityName != null  and facilityName != ''">facility_name,</if>
+            <if test="facilityType != null  and facilityType != ''">facility_type,</if>
+            <if test="branchFactory != null  and branchFactory != ''">branch_factory,</if>
+            <if test="istallationLocationn != null  and istallationLocationn != ''">installation_location,</if>
+            <if test="facilityGrade != null  and facilityGrade != ''">facility_grade,</if>
+            <if test="ratedPower != null  and ratedPower != ''">rated_power,</if>
+            <if test="productionDate != null ">production_date,</if>
+            <if test="putrunDate != null ">putrun_date,</if>
+            <if test="manufacturer != null  and manufacturer != ''">manufacturer,</if>
+            <if test="personCharge != null  and personCharge != ''">person_charge,</if>
+            <if test="technicalData != null  and technicalData != ''">technical_data,</if>
+            <if test="startTime != null ">start_time,</if>
+            <if test="checkCycle != null ">check_cycle,</if>
+            <if test="reminderCycle != null ">reminder_cycle,</if>
+            <if test="remark != null  and remark != ''">remark,</if>
+            <if test="createTime != null ">create_time,</if>
+            <if test="createBy != null  and createBy != ''">create_by,</if>
+            <if test="updateTime != null ">update_time,</if>
+            <if test="updateBy != null  and updateBy != ''">update_by,</if>
+            <if test="pointFlag != null  and pointFlag != ''">point_flag,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">#{id},</if>
+            <if test="code != null  and code != ''">#{code},</if>
+            <if test="facilityName != null  and facilityName != ''">#{facilityName},</if>
+            <if test="facilityType != null  and facilityType != ''">#{facilityType},</if>
+            <if test="branchFactory != null  and branchFactory != ''">#{branchFactory},</if>
+            <if test="istallationLocationn != null  and istallationLocationn != ''">#{istallationLocationn},</if>
+            <if test="facilityGrade != null  and facilityGrade != ''">#{facilityGrade},</if>
+            <if test="ratedPower != null  and ratedPower != ''">#{ratedPower},</if>
+            <if test="productionDate != null ">#{productionDate},</if>
+            <if test="putrunDate != null ">#{putrunDate},</if>
+            <if test="manufacturer != null  and manufacturer != ''">#{manufacturer},</if>
+            <if test="personCharge != null  and personCharge != ''">#{personCharge},</if>
+            <if test="technicalData != null  and technicalData != ''">#{technicalData},</if>
+            <if test="startTime != null ">#{startTime},</if>
+            <if test="checkCycle != null ">#{checkCycle},</if>
+            <if test="reminderCycle != null ">#{reminderCycle},</if>
+            <if test="remark != null  and remark != ''">#{remark},</if>
+            <if test="createTime != null ">#{createTime},</if>
+            <if test="createBy != null  and createBy != ''">#{createBy},</if>
+            <if test="updateTime != null ">#{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+            <if test="pointFlag != null  and pointFlag != ''">#{pointFlag},</if>
+         </trim>
+    </insert>
+
+    <update id="updateFacilityArchives" parameterType="FacilityArchives">
+        update facility_archives
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="code != null  and code != ''">code = #{code},</if>
+            <if test="facilityName != null  and facilityName != ''">facility_name = #{facilityName},</if>
+            <if test="facilityType != null  and facilityType != ''">facility_type = #{facilityType},</if>
+            <if test="branchFactory != null  and branchFactory != ''">branch_factory = #{branchFactory},</if>
+            <if test="istallationLocationn != null  and istallationLocationn != ''">installation_location = #{istallationLocationn},</if>
+            <if test="facilityGrade != null  and facilityGrade != ''">facility_grade = #{facilityGrade},</if>
+            <if test="ratedPower != null  and ratedPower != ''">rated_power = #{ratedPower},</if>
+            <if test="productionDate != null ">production_date = #{productionDate},</if>
+            <if test="putrunDate != null ">putrun_date = #{putrunDate},</if>
+            <if test="manufacturer != null  and manufacturer != ''">manufacturer = #{manufacturer},</if>
+            <if test="personCharge != null  and personCharge != ''">person_charge = #{personCharge},</if>
+            <if test="technicalData != null  and technicalData != ''">technical_data = #{technicalData},</if>
+            <if test="startTime != null ">start_time = #{startTime},</if>
+            <if test="checkCycle != null ">check_cycle = #{checkCycle},</if>
+            <if test="reminderCycle != null ">reminder_cycle = #{reminderCycle},</if>
+            <if test="remark != null  and remark != ''">remark = #{remark},</if>
+            <if test="createTime != null ">create_time = #{createTime},</if>
+            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
+            <if test="updateTime != null ">update_time = #{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="pointFlag != null  and pointFlag != ''">point_flag = #{pointFlag},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteFacilityArchivesById" parameterType="String">
+        delete from facility_archives where id = #{id}
+    </delete>
+
+    <delete id="deleteFacilityArchivesByIds" parameterType="String">
+        delete from facility_archives where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+
+    <update id="resetFacilityArchivesByIds" parameterType="String" >
+        update facility_archives
+        set start_time = NOW()
+        where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
+    <select id="selectFacilityArchivesByCode" parameterType="FacilityArchives" resultMap="FacilityArchivesResult">
+        <include refid="selectFacilityArchivesVo"/>
+        where code = #{code}
+        <if test="id != null  and id != ''"> and id != #{id} or id is null</if>
+    </select>
+    <select id="excelFacilityArchivesList" parameterType="FacilityArchives" resultMap="FacilityArchivesResult">
+        select id, code, facility_name, fun_getDiceData('facility_type',facility_type) as facility_type,
+        fun_getDiceData('branch_factory',branch_factory) as branch_factory, installation_location,
+        fun_getDiceData('facility_grade',facility_grade) as facility_grade, rated_power, to_char(production_date,'YYYY-MM-DD') as  production_date,
+        to_char(putrun_date,'YYYY-MM-DD') as putrun_date, manufacturer, person_charge,
+          technical_data, start_time, check_cycle, reminder_cycle, remark, create_time, create_by,
+           update_time, update_by
+        from facility_archives
+        <where>
+            <if test="code != null  and code != ''"> and code like concat('%', #{code}, '%')</if>
+            <if test="facilityName != null  and facilityName != ''"> and facility_name like concat('%', #{facilityName}, '%')</if>
+            <if test="manufacturer != null  and manufacturer != ''"> and manufacturer like concat('%', #{manufacturer}, '%')</if>
+            <if test="facilityType != null  and facilityType != ''"> and facility_type = #{facilityType}</if>
+            <if test="branchFactory != null  and branchFactory != ''"> and branch_factory = #{branchFactory}</if>
+            <if test="istallationLocationn != null  and istallationLocationn != ''"> and installation_location like concat('%', #{istallationLocationn}, '%')</if>
+            <if test="facilityGrade != null  and facilityGrade != ''"> and facility_grade = #{facilityGrade}</if>
+            <if test="ratedPower != null  and ratedPower != ''"> and to_number(rated_power,'9999999999') >= #{ratedPower}</if>
+        </where>
+        order by code
+    </select>
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/basicdata/MeterAnnexMapper.xml b/zhitan-system/target/classes/mapper/basicdata/MeterAnnexMapper.xml
new file mode 100644
index 0000000..915eb5f
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/basicdata/MeterAnnexMapper.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.basicdata.mapper.MeterAnnexMapper">
+    
+    <resultMap type="MeterAnnex" id="MeterAnnexResult">
+        <result property="id"    column="id"    />
+        <result property="implementId"    column="implement_id"    />
+        <result property="fileName"    column="file_name"    />
+        <result property="fileSuffix"    column="file_suffix"    />
+        <result property="filePath"    column="file_path"    />
+        <result property="delFlage"    column="del_flage"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="updateBy"    column="update_by"    />
+    </resultMap>
+
+    <sql id="selectMeterAnnexVo">
+        select id, implement_id, file_name, file_suffix, file_path, del_flage, create_time, create_by, update_time, update_by from meter_annex
+    </sql>
+
+    <select id="selectMeterAnnexList" parameterType="MeterAnnex" resultMap="MeterAnnexResult">
+        <include refid="selectMeterAnnexVo"/>
+        <where>
+            del_flage='N'
+            <if test="fileName != null  and fileName != ''"> and file_name like concat('%', #{fileName}, '%')</if>
+            <if test="implementId != null  and implementId != ''"> and implement_id=#{implementId}</if>
+        </where>
+    </select>
+    
+    <select id="selectMeterAnnexById" parameterType="String" resultMap="MeterAnnexResult">
+        <include refid="selectMeterAnnexVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertMeterAnnex" parameterType="MeterAnnex">
+        insert into meter_annex
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">id,</if>
+            <if test="implementId != null  and implementId != ''">implement_id,</if>
+            <if test="fileName != null  and fileName != ''">file_name,</if>
+            <if test="fileSuffix != null  and fileSuffix != ''">file_suffix,</if>
+            <if test="filePath != null  and filePath != ''">file_path,</if>
+            <if test="delFlage != null  and delFlage != ''">del_flage,</if>
+            <if test="createTime != null ">create_time,</if>
+            <if test="createBy != null  and createBy != ''">create_by,</if>
+            <if test="updateTime != null ">update_time,</if>
+            <if test="updateBy != null  and updateBy != ''">update_by,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">#{id},</if>
+            <if test="implementId != null  and implementId != ''">#{implementId},</if>
+            <if test="fileName != null  and fileName != ''">#{fileName},</if>
+            <if test="fileSuffix != null  and fileSuffix != ''">#{fileSuffix},</if>
+            <if test="filePath != null  and filePath != ''">#{filePath},</if>
+            <if test="delFlage != null  and delFlage != ''">#{delFlage},</if>
+            <if test="createTime != null ">#{createTime},</if>
+            <if test="createBy != null  and createBy != ''">#{createBy},</if>
+            <if test="updateTime != null ">#{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+         </trim>
+    </insert>
+
+    <update id="updateMeterAnnex" parameterType="MeterAnnex">
+        update meter_annex
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="implementId != null  and implementId != ''">implement_id = #{implementId},</if>
+            <if test="fileName != null  and fileName != ''">file_name = #{fileName},</if>
+            <if test="fileSuffix != null  and fileSuffix != ''">file_suffix = #{fileSuffix},</if>
+            <if test="filePath != null  and filePath != ''">file_path = #{filePath},</if>
+            <if test="delFlage != null  and delFlage != ''">del_flage = #{delFlage},</if>
+            <if test="createTime != null ">create_time = #{createTime},</if>
+            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
+            <if test="updateTime != null ">update_time = #{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteMeterAnnexById" parameterType="String">
+        <!--delete from meter_annex where id = #{id}-->
+        update meter_annex set del_flage='Y' where id = #{id}
+    </delete>
+
+    <delete id="deleteMeterAnnexByIds" parameterType="String">
+        <!--delete from meter_annex where id in -->
+        update meter_annex set del_flage='Y' where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+    
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/basicdata/MeterImplementCountMapper.xml b/zhitan-system/target/classes/mapper/basicdata/MeterImplementCountMapper.xml
new file mode 100644
index 0000000..9563b33
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/basicdata/MeterImplementCountMapper.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.basicdata.mapper.MeterImplementCountMapper">
+    
+    <resultMap type="MeterImplementCount" id="MeterImplementCountResult">
+        <result property="code"    column="code"    />
+        <result property="meterName"    column="meter_name"    />
+        <result property="meterType"    column="meter_type"    />
+        <result property="modelNumber"    column="model_number"    />
+        <result property="measureRange"    column="measure_range"    />
+        <result property="id"    column="id"    />
+        <result property="manufacturer"    column="manufacturer"    />
+        <result property="personCharge"    column="person_charge"    />
+        <result property="installactionLocation"    column="installaction_location"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="checkCycle"    column="check_cycle"    />
+        <result property="reminderCycle"    column="reminder_cycle"    />
+        <result property="meterStatus"    column="meter_status"    />
+        <result property="delFlage"    column="del_flage"    />
+        <result property="remark"    column="remark"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="txflage"    column="txflage"    />
+        <result property="putrunTime"    column="putrun_time"    />
+    </resultMap>
+
+    <sql id="selectMeterImplementCountVo">
+         select id, code, meter_name, meter_type, model_number, measure_range, manufacturer, person_charge, installaction_location, start_time, check_cycle, reminder_cycle, meter_status, del_flage, remark, putrun_time, create_time, create_by, update_time, update_by,(start_time+check_cycle-reminder_cycle)&lt;=current_date as txflage from meter_implement
+    </sql>
+
+    <select id="selectMeterImplementCountList" parameterType="MeterImplementCount" resultMap="MeterImplementCountResult">
+        <include refid="selectMeterImplementCountVo"/>
+        <where>  
+            <if test="code != null  and code != ''"> and code like concat('%', #{code}, '%')</if>
+            <if test="meterName != null  and meterName != ''"> and meter_name like concat('%', #{meterName}, '%')</if>
+            <if test="meterType != null  and meterType != ''"> and meter_type = #{meterType}</if>
+            <if test="measureRange != null  and measureRange != ''"> and measure_range like concat('%', #{measureRange}, '%')</if>
+            <if test="manufacturer != null  and manufacturer != ''"> and manufacturer like concat('%', #{manufacturer}, '%')</if>
+            <if test="installactionLocation != null  and installactionLocation != ''"> and installaction_location like concat('%', #{installactionLocation}, '%')</if>
+        </where>
+    </select>
+    
+    <select id="selectMeterImplementCountById" parameterType="String" resultMap="MeterImplementCountResult">
+        <include refid="selectMeterImplementCountVo"/>
+        where code = #{code}
+    </select>
+        
+    <insert id="insertMeterImplementCount" parameterType="MeterImplementCount">
+        insert into meter_implement
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="code != null  and code != ''">code,</if>
+            <if test="meterName != null  and meterName != ''">meter_name,</if>
+            <if test="meterType != null  and meterType != ''">meter_type,</if>
+            <if test="modelNumber != null  and modelNumber != ''">model_number,</if>
+            <if test="measureRange != null  and measureRange != ''">measure_range,</if>
+            <if test="id != null  and id != ''">id,</if>
+            <if test="manufacturer != null  and manufacturer != ''">manufacturer,</if>
+            <if test="personCharge != null  and personCharge != ''">person_charge,</if>
+            <if test="installactionLocation != null  and installactionLocation != ''">installaction_location,</if>
+            <if test="startTime != null ">start_time,</if>
+            <if test="checkCycle != null ">check_cycle,</if>
+            <if test="reminderCycle != null ">reminder_cycle,</if>
+            <if test="meterStatus != null  and meterStatus != ''">meter_status,</if>
+            <if test="delFlage != null  and delFlage != ''">del_flage,</if>
+            <if test="remark != null  and remark != ''">remark,</if>
+            <if test="createTime != null ">create_time,</if>
+            <if test="createBy != null  and createBy != ''">create_by,</if>
+            <if test="updateTime != null ">update_time,</if>
+            <if test="updateBy != null  and updateBy != ''">update_by,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="code != null  and code != ''">#{code},</if>
+            <if test="meterName != null  and meterName != ''">#{meterName},</if>
+            <if test="meterType != null  and meterType != ''">#{meterType},</if>
+            <if test="modelNumber != null  and modelNumber != ''">#{modelNumber},</if>
+            <if test="measureRange != null  and measureRange != ''">#{measureRange},</if>
+            <if test="id != null  and id != ''">#{id},</if>
+            <if test="manufacturer != null  and manufacturer != ''">#{manufacturer},</if>
+            <if test="personCharge != null  and personCharge != ''">#{personCharge},</if>
+            <if test="installactionLocation != null  and installactionLocation != ''">#{installactionLocation},</if>
+            <if test="startTime != null ">#{startTime},</if>
+            <if test="checkCycle != null ">#{checkCycle},</if>
+            <if test="reminderCycle != null ">#{reminderCycle},</if>
+            <if test="meterStatus != null  and meterStatus != ''">#{meterStatus},</if>
+            <if test="delFlage != null  and delFlage != ''">#{delFlage},</if>
+            <if test="remark != null  and remark != ''">#{remark},</if>
+            <if test="createTime != null ">#{createTime},</if>
+            <if test="createBy != null  and createBy != ''">#{createBy},</if>
+            <if test="updateTime != null ">#{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+         </trim>
+    </insert>
+
+    <update id="updateMeterImplementCount" parameterType="MeterImplementCount">
+        update meter_implement
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="meterName != null  and meterName != ''">meter_name = #{meterName},</if>
+            <if test="meterType != null  and meterType != ''">meter_type = #{meterType},</if>
+            <if test="modelNumber != null  and modelNumber != ''">model_number = #{modelNumber},</if>
+            <if test="measureRange != null  and measureRange != ''">measure_range = #{measureRange},</if>
+            <if test="id != null  and id != ''">id = #{id},</if>
+            <if test="manufacturer != null  and manufacturer != ''">manufacturer = #{manufacturer},</if>
+            <if test="personCharge != null  and personCharge != ''">person_charge = #{personCharge},</if>
+            <if test="installactionLocation != null  and installactionLocation != ''">installaction_location = #{installactionLocation},</if>
+            <if test="startTime != null ">start_time = #{startTime},</if>
+            <if test="checkCycle != null ">check_cycle = #{checkCycle},</if>
+            <if test="reminderCycle != null ">reminder_cycle = #{reminderCycle},</if>
+            <if test="meterStatus != null  and meterStatus != ''">meter_status = #{meterStatus},</if>
+            <if test="delFlage != null  and delFlage != ''">del_flage = #{delFlage},</if>
+            <if test="remark != null  and remark != ''">remark = #{remark},</if>
+            <if test="createTime != null ">create_time = #{createTime},</if>
+            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
+            <if test="updateTime != null ">update_time = #{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+        </trim>
+        where code = #{code}
+    </update>
+
+    <delete id="deleteMeterImplementCountById" parameterType="String">
+        delete from meter_implement where code = #{code}
+    </delete>
+
+  <!--  <delete id="deleteMeterImplementCountByIds" parameterType="String">
+        delete from meter_implement where code in 
+        <foreach item="code" collection="array" open="(" separator="," close=")">
+            #{code}
+        </foreach>
+    </delete>-->
+
+    <update id="deleteMeterImplementCountByIds" parameterType="String" >
+        update meter_implement
+        set start_time = NOW()
+        where code in
+        <foreach item="code" collection="array" open="(" separator="," close=")">
+        #{code}
+        </foreach>
+    </update>
+    
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/basicdata/MeterImplementMapper.xml b/zhitan-system/target/classes/mapper/basicdata/MeterImplementMapper.xml
new file mode 100644
index 0000000..2ec89c1
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/basicdata/MeterImplementMapper.xml
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.basicdata.mapper.MeterImplementMapper">
+
+    <resultMap type="MeterImplement" id="MeterImplementResult">
+        <result property="id"    column="id"    />
+        <result property="code"    column="code"    />
+        <result property="meterName"    column="meter_name"    />
+        <result property="meterType"    column="meter_type"    />
+        <result property="modelNumber"    column="model_number"    />
+        <result property="measureRange"    column="measure_range"    />
+        <result property="manufacturer"    column="manufacturer"    />
+        <result property="personCharge"    column="person_charge"    />
+        <result property="installactionLocation"    column="installaction_location"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="checkCycle"    column="check_cycle"    />
+        <result property="reminderCycle"    column="reminder_cycle"    />
+        <result property="meterStatus"    column="meter_status"    />
+        <result property="delFlage"    column="del_flage"    />
+        <result property="remark"    column="remark"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="txflage"    column="txflage"    />
+        <result property="putrunTime"    column="putrun_time"    />
+        <result property="wireDiameter"    column="wire_diameter"    />
+        <result property="maxAllowablePower"    column="max_allowable_power"    />
+        <result property="gatewayId"    column="gateway_id"    />
+        <result property="gatewayName"    column="gateway_name"    />
+    </resultMap>
+    <resultMap type="MeterImplementExcel" id="MeterImplementResultExcel">
+        <result property="id"    column="id"    />
+        <result property="code"    column="code"    />
+        <result property="meterName"    column="meter_name"    />
+        <result property="meterType"    column="meter_type"    />
+        <result property="modelNumber"    column="model_number"    />
+        <result property="measureRange"    column="measure_range"    />
+        <result property="manufacturer"    column="manufacturer"    />
+        <result property="personCharge"    column="person_charge"    />
+        <result property="installactionLocation"    column="installaction_location"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="checkCycle"    column="check_cycle"    />
+        <result property="reminderCycle"    column="reminder_cycle"    />
+        <result property="meterStatus"    column="meter_status"    />
+        <result property="delFlage"    column="del_flage"    />
+        <result property="remark"    column="remark"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="energyType"    column="energy_type"    />
+        <result property="wireDiameter"    column="wire_diameter"    />
+        <result property="maxAllowablePower"    column="max_allowable_power"    />
+    </resultMap>
+    <sql id="selectMeterImplementVo">
+        select id,energy_type, code, meter_name, meter_type, model_number, measure_range, manufacturer, person_charge, installaction_location, start_time, check_cycle, reminder_cycle, meter_status, del_flage, remark, putrun_time,create_time, create_by, update_time, update_by,(start_time+check_cycle-reminder_cycle)&lt;=current_date as txflage,wire_diameter,max_allowable_power,gateway_id,gateway_name from meter_implement
+    </sql>
+
+    <select id="selectMeterImplementList" parameterType="MeterImplement" resultMap="MeterImplementResult">
+        <include refid="selectMeterImplementVo"/>
+        <where>
+            del_flage='N'
+            <if test="code != null  and code != ''"> and code like concat('%', #{code}, '%')</if>
+            <if test="meterName != null  and meterName != ''"> and meter_name like concat('%', #{meterName}, '%')</if>
+            <if test="meterType != null  and meterType != ''"> and meter_type = #{meterType}</if>
+            <if test="measureRange != null  and measureRange != ''"> and measure_range like concat('%', #{measureRange}, '%')</if>
+            <if test="manufacturer != null  and manufacturer != ''"> and manufacturer like concat('%', #{manufacturer}, '%')</if>
+            <if test="installactionLocation != null  and installactionLocation != ''"> and installaction_location like concat('%', #{installactionLocation}, '%')</if>
+        </where>
+        order by code
+    </select>
+
+    <select id="exectMeterImplementList" parameterType="MeterImplement" resultMap="MeterImplementResultExcel">
+        select id,energy_type, code, meter_name, fun_getDiceData('sys_device_type',meter_status) as meter_type, model_number, measure_range, manufacturer,
+        person_charge, installaction_location, to_char(start_time,'YYYY-MM-DD') start_time, check_cycle, reminder_cycle, fun_getDiceData('meter_status',meter_status) as meter_status,
+        del_flage, remark, create_time, create_by, update_time, update_by,wire_diameter,max_allowable_power,gateway_name
+        from meter_implement
+        <where>
+            del_flage='N'
+            <if test="code != null  and code != ''"> and code like concat('%', #{code}, '%')</if>
+            <if test="meterName != null  and meterName != ''"> and meter_name like concat('%', #{meterName}, '%')</if>
+            <if test="meterType != null  and meterType != ''"> and meter_type = #{meterType}</if>
+            <if test="measureRange != null  and measureRange != ''"> and measure_range like concat('%', #{measureRange}, '%')</if>
+            <if test="manufacturer != null  and manufacturer != ''"> and manufacturer like concat('%', #{manufacturer}, '%')</if>
+            <if test="installactionLocation != null  and installactionLocation != ''"> and installaction_location like concat('%', #{installactionLocation}, '%')</if>
+        </where>
+        order by code
+    </select>
+
+    <select id="selectMeterImplementById" parameterType="String" resultMap="MeterImplementResult">
+        <include refid="selectMeterImplementVo"/>
+        where id = #{id}
+    </select>
+
+    <select id="selectMeterImplementByCode" parameterType="MeterImplement" resultMap="MeterImplementResult">
+        <include refid="selectMeterImplementVo"/>
+        where code = #{code}
+        <if test="id != null  and id != ''"> and id != #{id} or id is null</if>
+    </select>
+
+    <select id="listMeterImplementByIds" resultMap="MeterImplementResult">
+        SELECT
+            "id",
+            energy_type,
+            code,
+            meter_name,
+            meter_type,
+            meter_status,
+            installaction_location,
+            wire_diameter,
+            max_allowable_power
+        FROM
+            "meter_implement"
+        WHERE
+            id IN
+            <foreach collection="meterIdList" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+    </select>
+    <select id="selectByNodeIdIndexId" resultType="com.zhitan.basicdata.domain.MeterImplement">
+        <include refid="selectMeterImplementVo"/>
+         mi
+        JOIN node_device nd ON mi.id = nd.device_id
+        JOIN node_index ni ON ni.node_id = nd.node_id
+        where ni.node_id= #{nodeId} and index_id= #{indexId}
+    </select>
+
+    <insert id="insertMeterImplement" parameterType="MeterImplement">
+        insert into meter_implement
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">id,</if>
+            <if test="energyType != null  and energyType != ''">energy_type,</if>
+            <if test="code != null  and code != ''">code,</if>
+            <if test="meterName != null  and meterName != ''">meter_name,</if>
+            <if test="meterType != null  and meterType != ''">meter_type,</if>
+            <if test="modelNumber != null  and modelNumber != ''">model_number,</if>
+            <if test="measureRange != null  and measureRange != ''">measure_range,</if>
+            <if test="manufacturer != null  and manufacturer != ''">manufacturer,</if>
+            <if test="personCharge != null  and personCharge != ''">person_charge,</if>
+            <if test="installactionLocation != null  and installactionLocation != ''">installaction_location,</if>
+            <if test="startTime != null ">start_time,</if>
+            <if test="putrunTime != null ">putrun_time,</if>
+            <if test="checkCycle != null ">check_cycle,</if>
+            <if test="reminderCycle != null ">reminder_cycle,</if>
+            <if test="meterStatus != null  and meterStatus != ''">meter_status,</if>
+            <if test="delFlage != null  and delFlage != ''">del_flage,</if>
+            <if test="remark != null  and remark != ''">remark,</if>
+            <if test="createTime != null ">create_time,</if>
+            <if test="createBy != null  and createBy != ''">create_by,</if>
+            <if test="updateTime != null ">update_time,</if>
+            <if test="updateBy != null  and updateBy != ''">update_by,</if>
+            <if test="wireDiameter != null  and wireDiameter != ''">wire_diameter,</if>
+            <if test="maxAllowablePower != null  and maxAllowablePower != ''">max_allowable_power,</if>
+            <if test="gatewayId != null  and gatewayId != ''">gateway_id,</if>
+            <if test="gatewayName != null and gatewayName != ''">gateway_name,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">#{id},</if>
+            <if test="energyType != null  and energyType != ''">#{energyType},</if>
+            <if test="code != null  and code != ''">#{code},</if>
+            <if test="meterName != null  and meterName != ''">#{meterName},</if>
+            <if test="meterType != null  and meterType != ''">#{meterType},</if>
+            <if test="modelNumber != null  and modelNumber != ''">#{modelNumber},</if>
+            <if test="measureRange != null  and measureRange != ''">#{measureRange},</if>
+            <if test="manufacturer != null  and manufacturer != ''">#{manufacturer},</if>
+            <if test="personCharge != null  and personCharge != ''">#{personCharge},</if>
+            <if test="installactionLocation != null  and installactionLocation != ''">#{installactionLocation},</if>
+            <if test="startTime != null ">#{startTime},</if>
+            <if test="putrunTime != null ">#{putrunTime},</if>
+            <if test="checkCycle != null ">#{checkCycle},</if>
+            <if test="reminderCycle != null ">#{reminderCycle},</if>
+            <if test="meterStatus != null  and meterStatus != ''">#{meterStatus},</if>
+            <if test="delFlage != null  and delFlage != ''">#{delFlage},</if>
+            <if test="remark != null  and remark != ''">#{remark},</if>
+            <if test="createTime != null ">#{createTime},</if>
+            <if test="createBy != null  and createBy != ''">#{createBy},</if>
+            <if test="updateTime != null ">#{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+            <if test="wireDiameter != null  and wireDiameter != ''">#{wire_diameter},</if>
+            <if test="maxAllowablePower != null  and maxAllowablePower != ''">#{max_allowable_power},</if>
+            <if test="gatewayId != null  and gatewayId != ''">#{gatewayId},</if>
+            <if test="gatewayName != null and gatewayName != ''">#{gatewayName},</if>
+         </trim>
+    </insert>
+
+    <update id="updateMeterImplement" parameterType="MeterImplement">
+        update meter_implement
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="code != null  and code != ''">code = #{code},</if>
+            <if test="energyType != null  and energyType != ''">energy_type = #{energyType},</if>
+            <if test="meterName != null  and meterName != ''">meter_name = #{meterName},</if>
+            <if test="meterType != null  and meterType != ''">meter_type = #{meterType},</if>
+            <if test="modelNumber != null  and modelNumber != ''">model_number = #{modelNumber},</if>
+            <if test="measureRange != null  and measureRange != ''">measure_range = #{measureRange},</if>
+            <if test="manufacturer != null  and manufacturer != ''">manufacturer = #{manufacturer},</if>
+            <if test="personCharge != null  and personCharge != ''">person_charge = #{personCharge},</if>
+            <if test="installactionLocation != null  and installactionLocation != ''">installaction_location = #{installactionLocation},</if>
+            <if test="startTime != null ">start_time = #{startTime},</if>
+            <if test="putrunTime != null ">putrun_time = #{putrunTime},</if>
+            <if test="checkCycle != null ">check_cycle = #{checkCycle},</if>
+            <if test="reminderCycle != null ">reminder_cycle = #{reminderCycle},</if>
+            <if test="meterStatus != null  and meterStatus != ''">meter_status = #{meterStatus},</if>
+            <if test="delFlage != null  and delFlage != ''">del_flage = #{delFlage},</if>
+            <if test="remark != null  and remark != ''">remark = #{remark},</if>
+            <if test="createTime != null ">create_time = #{createTime},</if>
+            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
+            <if test="updateTime != null ">update_time = #{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="wireDiameter != null  and wireDiameter != ''">wire_diameter = #{wireDiameter},</if>
+            <if test="maxAllowablePower != null  and maxAllowablePower != ''">max_allowable_power = #{maxAllowablePower},</if>
+            <if test="gatewayId != null and gatewayId != ''">gateway_id = #{gatewayId},</if>
+            <if test="gatewayName != null and gatewayName != ''">gateway_name = #{gatewayName},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteMeterImplementById" parameterType="String">
+        <!--update meter_implement set del_flage='Y' where id = #{id} 鍏堢敤鐗╃悊鍒犻櫎锛屽悗鏈熸湁蹇呰鍐嶆墦寮�閫昏緫鍒犻櫎-->
+        delete from meter_implement where id = #{id}
+    </delete>
+
+    <delete id="deleteMeterImplementByIds" parameterType="String">
+        <!--update meter_implement set del_flage='Y' where id in 鍏堢敤鐗╃悊鍒犻櫎锛屽悗鏈熸湁蹇呰鍐嶆墦寮�閫昏緫鍒犻櫎-->
+        delete from meter_implement where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/basicdata/SysEnerclassMapper.xml b/zhitan-system/target/classes/mapper/basicdata/SysEnerclassMapper.xml
new file mode 100644
index 0000000..42996bd
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/basicdata/SysEnerclassMapper.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.basicdata.mapper.SysEnerclassMapper">
+
+    <resultMap type="SysEnerclass" id="SysEnerclassResult">
+        <result property="enerclassid" column="enerclassid"/>
+        <result property="enerclassname" column="enerclassname"/>
+        <result property="oprMan" column="opr_man"/>
+        <result property="oprTime" column="opr_time"/>
+        <result property="modMan" column="mod_man"/>
+        <result property="modTime" column="mod_time"/>
+        <result property="note" column="note"/>
+    </resultMap>
+
+    <sql id="selectSysEnerclassVo">
+        select enerclassid, enerclassname, opr_man, opr_time, mod_man, mod_time, note from sys_enerclass
+    </sql>
+
+    <select id="selectSysEnerclassList" parameterType="SysEnerclass" resultMap="SysEnerclassResult">
+        <include refid="selectSysEnerclassVo"/>
+        <where>
+            <if test="enerclassname != null  and enerclassname != ''"> and enerclassname like concat('%', #{enerclassname}, '%')</if>
+        </where>
+    </select>
+
+    <select id="selectSysEnerclassById" parameterType="Integer" resultMap="SysEnerclassResult">
+        <include refid="selectSysEnerclassVo"/>
+        where enerclassid = #{enerclassid}
+    </select>
+
+    <insert id="insertSysEnerclass" parameterType="SysEnerclass">
+        insert into sys_enerclass
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            mod_time,
+            opr_time,
+            <if test="note != null  and note != ''">note,</if>
+            <if test="enerclassid != null ">enerclassid,</if>
+            <if test="enerclassname != null  and enerclassname != ''">enerclassname,</if>
+            <if test="oprMan != null  and oprMan != ''">opr_man,</if>
+            <if test="modMan != null  and modMan != ''">mod_man,</if>
+            <if test="remark != null  and remark != ''">remark,</if>
+            <if test="createTime != null ">create_time,</if>
+            <if test="createBy != null  and createBy != ''">create_by,</if>
+            <if test="updateTime != null ">update_time,</if>
+            <if test="updateBy != null  and updateBy != ''">update_by,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            now(),
+            now(),
+            <if test="note != null  and note != ''">#{note},</if>
+            <if test="enerclassid != null ">#{enerclassid},</if>
+            <if test="enerclassname != null  and enerclassname != ''">#{enerclassname},</if>
+            <if test="oprMan != null  and oprMan != ''">#{oprMan},</if>
+            <if test="modMan != null  and modMan != ''">#{modMan},</if>
+            <if test="remark != null  and remark != ''">#{remark},</if>
+            <if test="createTime != null ">#{createTime},</if>
+            <if test="createBy != null  and createBy != ''">#{createBy},</if>
+            <if test="updateTime != null ">#{updateTime},</if>
+            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+        </trim>
+    </insert>
+
+    <update id="updateSysEnerclass" parameterType="SysEnerclass">
+        update sys_enerclass
+        <trim prefix="SET" suffixOverrides=",">
+            mod_time = now(),
+            update_time = now(),
+            <if test="enerclassname != null  and enerclassname != ''">enerclassname = #{enerclassname},</if>
+            <if test="modMan != null  and modMan != ''">mod_man = #{modMan},</if>
+            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="note != null  and note != ''">note = #{note},</if>
+        </trim>
+        where enerclassid = #{enerclassid}
+    </update>
+
+    <delete id="deleteSysEnerclassById" parameterType="Integer">
+        delete from sys_enerclass where enerclassid = #{enerclassid}
+    </delete>
+
+    <delete id="deleteSysEnerclassByIds" parameterType="String">
+        delete from sys_enerclass where enerclassid in
+        <foreach item="enerclassid" collection="array" open="(" separator="," close=")">
+            #{enerclassid}
+        </foreach>
+    </delete>
+
+    <select id="selectSameEnergyNameNum" parameterType="String" resultType="Integer">
+        select COUNT(enerclassid) from sys_enerclass where enerclassname = #{enerclassname}
+    </select>
+
+    <select id="selectIdByName" parameterType="String" resultType="Integer">
+        select enerclassid from sys_enerclass where enerclassname = #{enerclassname}
+    </select>
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/basicdata/SysEnergyMapper.xml b/zhitan-system/target/classes/mapper/basicdata/SysEnergyMapper.xml
new file mode 100644
index 0000000..9d17b9e
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/basicdata/SysEnergyMapper.xml
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.basicdata.mapper.SysEnergyMapper">
+
+    <resultMap type="SysEnergy" id="SysEnergyResult">
+        <result property="enername"    column="enername"    />
+        <result property="muid"    column="muid"    />
+        <result property="enerclassid"    column="enerclassid"    />
+        <result property="enerclassname"    column="enerclassname"    />
+        <result property="enersno"    column="enersno"    />
+        <result property="isstorage"    column="isstorage"    />
+        <result property="oprMan"    column="opr_man"    />
+        <result property="oprTime"    column="opr_time"    />
+        <result property="modMan"    column="mod_man"    />
+        <result property="modTime"    column="mod_time"    />
+        <result property="note"    column="note"    />
+        <result property="enerid"    column="enerid"    />
+        <result property="coefficient"    column="coefficient"    />
+        <result property="execdate"    column="execdate"    />
+        <result property="price"    column="price"    />
+        <result property="emissionFactors"    column="emission_factors"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectSysEnergyVo">
+        select enername, muid, enerclassid, enersno, isstorage, opr_man, opr_time, mod_man, mod_time, note, enerid, coefficient, execdate, price, emission_factors, create_by, create_time, update_by, update_time, remark from sys_energy
+    </sql>
+    <select id="getenerclassname" resultType="SysEnerclass">
+        select enerclassid,enerclassname from sys_enerclass order by create_time
+    </select>
+
+    <select id="selectSysEnergyList" parameterType="SysEnergy" resultMap="SysEnergyResult">
+        <include refid="selectSysEnergyVo"/>
+        <where>
+            <if test="enername != null  and enername != ''"> and enername like concat('%', #{enername}, '%')</if>
+            <if test="muid != null  and muid != ''"> and muid = #{muid}</if>
+            <if test="enerclassid != null  and enerclassid != ''"> and enerclassid = #{enerclassid}</if>
+            <if test="enersno != null  and enersno != ''"> and enersno = #{enersno}</if>
+            <if test="isstorage != null  and isstorage != ''"> and isstorage = #{isstorage}</if>
+            <if test="oprMan != null  and oprMan != ''"> and opr_man = #{oprMan}</if>
+            <if test="oprTime != null "> and opr_time = #{oprTime}</if>
+            <if test="modMan != null  and modMan != ''"> and mod_man = #{modMan}</if>
+            <if test="modTime != null "> and mod_time = #{modTime}</if>
+            <if test="note != null  and note != ''"> and note = #{note}</if>
+            <if test="enerid != null  and enerid != ''"> and enerid = #{enerid}</if>
+            <if test="coefficient != null  and coefficient != ''"> and coefficient = #{coefficient}</if>
+            <if test="execdate != null "> and execdate = #{execdate}</if>
+            <if test="price != null  and price != ''"> and price = #{price}</if>
+            <if test="emissionFactors != null  and emissionFactors != ''"> and emission_factors = #{emissionFactors}</if>
+        </where>
+        order by create_time
+    </select>
+
+    <select id="selectSysEnergyById" parameterType="Integer" resultMap="SysEnergyResult">
+        <include refid="selectSysEnergyVo"/>
+        where enerid = #{enerid}
+    </select>
+
+    <insert id="insertSysEnergy" parameterType="SysEnergy">
+        insert into sys_energy
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="enername != null">enername,</if>
+            <if test="muid != null">muid,</if>
+            <if test="enerclassid != null">enerclassid,</if>
+            <if test="enersno != null">enersno,</if>
+            <if test="isstorage != null">isstorage,</if>
+            <if test="oprMan != null and oprMan != ''">opr_man,</if>
+            <if test="oprTime != null">opr_time,</if>
+            <if test="modMan != null">mod_man,</if>
+            <if test="modTime != null">mod_time,</if>
+            <if test="note != null">note,</if>
+            <if test="enerid != null and enerid != ''">enerid,</if>
+            <if test="coefficient != null">coefficient,</if>
+            <if test="execdate != null">execdate,</if>
+            <if test="price != null">price,</if>
+            <if test="emissionFactors != null">emission_factors,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="enername != null">#{enername},</if>
+            <if test="muid != null">#{muid},</if>
+            <if test="enerclassid != null">#{enerclassid},</if>
+            <if test="enersno != null">#{enersno},</if>
+            <if test="isstorage != null">#{isstorage},</if>
+            <if test="oprMan != null and oprMan != ''">#{oprMan},</if>
+            <if test="oprTime != null">now(),</if>
+            <if test="modMan != null">#{modMan},</if>
+            <if test="modTime != null">now(),,</if>
+            <if test="note != null">#{note},</if>
+            <if test="enerid != null and enerid != ''">#{enerid},</if>
+            <if test="coefficient != null">#{coefficient},</if>
+            <if test="execdate != null">#{execdate},</if>
+            <if test="price != null">#{price},</if>
+            <if test="emissionFactors != null">#{emissionFactors},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateSysEnergy" parameterType="SysEnergy">
+        update sys_energy
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="muid != null">muid = #{muid},</if>
+            <if test="enerclassid != null">enerclassid = #{enerclassid},</if>
+            <if test="enername != null">enername = #{enername},</if>
+            <if test="enersno != null">enersno = #{enersno},</if>
+            <if test="isstorage != null">isstorage = #{isstorage},</if>
+            <if test="oprMan != null and oprMan != ''">opr_man = #{oprMan},</if>
+            <if test="oprTime != null">opr_time = now(),</if>
+            <if test="modMan != null">mod_man = #{modMan},</if>
+            <if test="modTime != null">mod_time = now(),</if>
+            <if test="note != null">note = #{note},</if>
+            <if test="enerid != null and enerid != ''">enerid = #{enerid},</if>
+            <if test="coefficient != null">coefficient = #{coefficient},</if>
+            <if test="execdate != null">execdate = #{execdate},</if>
+            <if test="price != null">price = #{price},</if>
+            <if test="emissionFactors != null">emission_factors = #{emissionFactors},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where enerid = #{enerid}
+    </update>
+
+    <delete id="deleteSysEnergyById" parameterType="String">
+        delete from sys_energy where enerid = #{enerid}
+    </delete>
+
+    <delete id="deleteSysEnergyByIds" parameterType="String">
+        delete from sys_energy where enerid in
+        <foreach item="enerid" collection="array" open="(" separator="," close=")">
+            #{enerid}
+        </foreach>
+    </delete>
+
+    <select id="getEnerClassid" parameterType="String" resultType="Integer">
+        select enerclassid from sys_enerclass where enerclassname = #{enerclassname}
+    </select>
+
+    <select id="selectSameEnergyNameNum" parameterType="String" resultType="Integer">
+        select COUNT(enerid) from sys_energy where enername = #{enername}
+    </select>
+
+    <select id="selectIdByName" parameterType="String" resultType="Integer">
+        select enerid from sys_energy where enername = #{enername}
+    </select>
+
+    <select id="getPriceCountByEnerid" parameterType="SysEnergy" resultType="Integer">
+        select COUNT(objectid) from sys_price where objectid = #{enerid} and objecttype = 1 and execdate = #{execdate}
+    </select>
+
+    <insert id="insertEnergyPrice" parameterType="SysEnergy">
+        insert into sys_price
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            mod_time,
+            opr_time,
+            <if test="oprMan != null  and oprMan != ''">opr_man,</if>
+            <if test="modMan != null  and modMan != ''">mod_man,</if>
+            objectid,
+            objecttype,
+            price,
+            execdate,
+            <if test="note != null  and note != ''">note,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            now(),
+            now(),
+            <if test="oprMan != null  and oprMan != ''">#{oprMan},</if>
+            <if test="modMan != null  and modMan != ''">#{modMan},</if>
+            <if test="enerid != null ">#{enerid},</if>
+            1,
+            #{price},
+            #{execdate},
+            <if test="note != null  and note != ''">#{pricenote},</if>
+        </trim>
+    </insert>
+
+    <update id="updateEnergyPrice" parameterType="SysEnergy" >
+        update sys_price
+        <trim prefix="SET" suffixOverrides=",">
+            mod_time = now(),
+            <if test="modMan != null  and modMan != ''">mod_man = #{modMan},</if>
+            price = #{price},
+            execdate = #{execdate},
+            <if test="note != null  and note != ''">note = #{pricenote},</if>
+        </trim>
+    </update>
+
+    <select id="getCoefficientCountByEnerid" parameterType="Integer" resultType="Integer">
+        select COUNT(enerid) from sys_enercoefficient where enerid = #{enerid}
+    </select>
+
+    <select id="listAllEnergyType" resultType="EnergyTypeModel">
+        select enername, enersno from sys_energy
+    </select>
+
+    <insert id="insertEnergyCoefficient" parameterType="SysEnergy">
+        insert into sys_enercoefficient
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            mod_time,
+            opr_time,
+            <if test="oprMan != null  and oprMan != ''">opr_man,</if>
+            <if test="modMan != null  and modMan != ''">mod_man,</if>
+            enerid,
+            coefficient,
+            coefficient2,
+            carbon_emission_coefficient,
+            execdate,
+            <if test="note != null  and note != ''">note,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            now(),
+            now(),
+            <if test="oprMan != null  and oprMan != ''">#{oprMan},</if>
+            <if test="modMan != null  and modMan != ''">#{modMan},</if>
+            <if test="enerid != null ">#{enerid},</if>
+            #{coefficient},
+            #{coefficient2},
+            #{carbonEmissionCoefficient},
+            #{coefficientexecdate},
+            <if test="note != null  and note != ''">#{coefficientnote},</if>
+        </trim>
+    </insert>
+
+    <update id="updateEnergyCoefficient" parameterType="SysEnergy" >
+        update sys_enercoefficient
+        <trim prefix="SET" suffixOverrides=",">
+            mod_time = now(),
+            <if test="modMan != null  and modMan != ''">mod_man = #{modMan},</if>
+            coefficient = #{coefficient},
+            coefficient2 = #{coefficient2},
+            execdate = #{coefficientexecdate},
+            carbon_emission_coefficient = #{carbonEmissionCoefficient},
+            <if test="note != null  and note != ''">note = #{coefficientnote},</if>
+        </trim>
+        where enerid = #{enerid}
+    </update>
+
+
+    <select id="selectSysEnergyPage"  resultMap="SysEnergyResult">
+        select a.*,b.enerclassname from sys_energy a left join sys_enerclass b on a.enerclassid = b.enerclassid
+        <where>
+            <if test="sysEnergy.enername != null  and sysEnergy.enername != ''"> and a.enername like concat('%', #{sysEnergy.enername}, '%')</if>
+            <if test="sysEnergy.enerclassid != null  and sysEnergy.enerclassid != ''"> and a.enerclassid = #{sysEnergy.enerclassid}</if>
+        </where>
+        order by a.create_time
+    </select>
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/comprehensivestatistics/ComprehensiveStatisticsMapper.xml b/zhitan-system/target/classes/mapper/comprehensivestatistics/ComprehensiveStatisticsMapper.xml
new file mode 100644
index 0000000..9ace200
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/comprehensivestatistics/ComprehensiveStatisticsMapper.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.comprehensivestatistics.mapper.ComprehensiveStatisticsMapper">
+    <resultMap id="dataItemMap" type="com.zhitan.comprehensivestatistics.domain.ComprehensiveStatistics">
+        <id column="index_id" property="indexId"/>
+        <id column="time_code" property="timeCode"/>
+        <id column="index_code" property="indexCode"/>
+        <id column="index_name" property="indexName"/>
+        <result column="begin_time" property="beginTime"/>
+        <result column="end_time" property="endTime"/>
+        <result column="data_time" property="dataTime"/>
+        <result column="value" property="value"/>
+        <result column="time_type" property="timeType"/>
+        <result column="quality" property="quality"/>
+        <result column="unit_id" property="unitId"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="remark" property="remark"/>
+        <result column="name" property="name"/>
+        <result column="index_type" property="indexType"/>
+        <result column="facility_name" property="facilityName"/>
+    </resultMap>
+    <resultMap id="comprehensiveMap" type="com.zhitan.comprehensivestatistics.domain.Comprehensive">
+        <result column="index_id" property="indexId"/>
+        <result column="index_name" property="indexName"/>
+        <result column="time_type" property="timeType"/>
+        <result column="value1" property="value1"/>
+        <result column="value2" property="value2"/>
+        <result column="value3" property="value3"/>
+        <result column="value4" property="value4"/>
+        <result column="value5" property="value5"/>
+        <result column="value6" property="value6"/>
+        <result column="value7" property="value7"/>
+        <result column="value8" property="value8"/>
+        <result column="value9" property="value9"/>
+        <result column="value10" property="value10"/>
+        <result column="value11" property="value11"/>
+        <result column="value12" property="value12"/>
+        <result column="value13" property="value13"/>
+        <result column="value14" property="value14"/>
+        <result column="value15" property="value15"/>
+        <result column="value16" property="value16"/>
+        <result column="value17" property="value17"/>
+        <result column="value18" property="value18"/>
+        <result column="value19" property="value19"/>
+        <result column="value20" property="value20"/>
+        <result column="value21" property="value21"/>
+        <result column="value22" property="value22"/>
+        <result column="value23" property="value23"/>
+        <result column="value24" property="value24"/>
+        <result column="value25" property="value25"/>
+        <result column="value26" property="value26"/>
+        <result column="value27" property="value27"/>
+        <result column="value28" property="value28"/>
+        <result column="value29" property="value29"/>
+        <result column="value30" property="value30"/>
+        <result column="value31" property="value31"/>
+    </resultMap>
+
+    <sql id="itemHead">
+        SELECT di.index_id,
+               di.time_code,
+               di.time_type,
+               di.begin_time,
+               di.end_time,
+               di.data_time,
+               di.value,
+               di.quality,
+               di.create_time,
+               di.update_time,
+               ci.code AS "index_code",
+               ci.name AS "index_name",
+               ci.unit_id AS unitId,
+               f.facility_name AS facilityName
+        FROM data_item di
+               LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+               LEFT JOIN facility_archives f ON f."id"=ci.equipment
+    </sql>
+    <select id="getStatisticsEnergy" resultType="com.zhitan.basicdata.domain.SysEnergy">
+        select enerid, enersno, enername,( SELECT d.dict_label FROM sys_dict_data d WHERE dict_type = 'sys_unit' AND d.dict_code	= e.muid) muidName
+        from sys_energy e
+               left join node_energy ne on e.enerid = ne.energy_id
+        where ne.node_id = #{nodeId};
+    </select>
+    <select id="getDatasByIndex" resultMap="dataItemMap">
+        SELECT
+            e.NAME,
+            e.index_code,
+            di.index_id,
+            di.time_code,
+            di.time_type,
+            di.begin_time,
+            di.end_time,
+            di.data_time,
+            di.VALUE,
+            di.quality,
+            di.create_time,
+            di.update_time
+        FROM
+            data_item di
+            LEFT JOIN energy_statistics e ON di.index_id = e.index_id
+        where di.time_code = #{timeCode}
+            AND di.index_id in
+            <foreach item="indexId" index="index" collection="indexIds" open="(" separator="," close=")">
+                #{indexId}
+            </foreach>
+    </select>
+    <select id="getEnergyByIndex" resultMap="dataItemMap">
+       select "name",index_id from  energy_statistics where index_type=#{indexType}
+    </select>
+    <select id="getFacilityArchives" resultType="com.zhitan.basicdata.domain.FacilityArchives">
+        SELECT ID,code,facility_name AS facilityName FROM facility_archives
+    </select>
+
+    <select id="getDatasIndex" resultMap="dataItemMap">
+        SELECT di.index_id,
+        di.time_code,
+        di.time_type,
+        di.begin_time,
+        di.end_time,
+        di.data_time,
+        di.value,
+        di.quality,
+        di.create_time,
+        di.update_time,
+        ci.code AS "index_code",
+        ci.name AS "index_name",
+        ci.unit_id AS unitId,
+        f.facility_name AS "facility_name"
+        FROM data_item di
+        LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+        LEFT JOIN facility_archives f ON f."id"=ci.equipment
+        where di.time_code = #{timeCode}
+        AND di.index_id in
+        <foreach item="indexId" index="index" collection="indexIds"
+                 open="(" separator="," close=")">
+            #{indexId}
+        </foreach>
+         and ci.equipment is not null
+        ORDER BY di."value" desc
+    </select>
+
+    <select id="getDatasByList" resultMap="dataItemMap">
+        SELECT
+            e.NAME,
+            e.index_code,
+            di.index_id,
+            di.time_code,
+            di.time_type,
+            di.begin_time,
+            di.end_time,
+            di.data_time,
+            di.VALUE,
+            di.quality,
+            di.create_time,
+            di.update_time
+        FROM
+            data_item di
+            LEFT JOIN energy_statistics e ON di.index_id = e.index_id
+        where di.time_type = #{timeType}
+            AND di.data_time &gt;= #{beginTime}
+            AND di.data_time &lt; #{endTime}
+            AND di.index_id in
+            <foreach item="indexId" index="index" collection="indexIds"
+                     open="(" separator="," close=")">
+                #{indexId}
+            </foreach>
+        ORDER BY di."value" desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/zhitan-system/target/classes/mapper/comprehensivestatistics/DailyComprehensiveMapper.xml b/zhitan-system/target/classes/mapper/comprehensivestatistics/DailyComprehensiveMapper.xml
new file mode 100644
index 0000000..0380045
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/comprehensivestatistics/DailyComprehensiveMapper.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.comprehensivestatistics.mapper.DailyComprehensiveMapper">
+    <resultMap id="dataItemMap" type="com.zhitan.comprehensivestatistics.domain.DailyComprehensive">
+        <result column="index_id" property="indexId"/>
+        <result column="index_name" property="indexName"/>
+        <result column="time_type" property="timeType"/>
+        <result column="time_code" property="timeCode"/>
+        <result column="unit_id" property="unitId"/>
+        <result column="value1" property="value1"/>
+        <result column="value2" property="value2"/>
+        <result column="value3" property="value3"/>
+        <result column="value4" property="value4"/>
+        <result column="value5" property="value5"/>
+        <result column="value6" property="value6"/>
+        <result column="value7" property="value7"/>
+        <result column="value8" property="value8"/>
+        <result column="value9" property="value9"/>
+        <result column="value10" property="value10"/>
+        <result column="value11" property="value11"/>
+        <result column="value12" property="value12"/>
+        <result column="value13" property="value13"/>
+        <result column="value14" property="value14"/>
+        <result column="value15" property="value15"/>
+        <result column="value16" property="value16"/>
+        <result column="value17" property="value17"/>
+        <result column="value18" property="value18"/>
+        <result column="value19" property="value19"/>
+        <result column="value20" property="value20"/>
+        <result column="value21" property="value21"/>
+        <result column="value22" property="value22"/>
+        <result column="value23" property="value23"/>
+        <result column="value0" property="value0"/>
+    </resultMap>
+    <!--鍏ㄥ巶鑳借�楃粺璁�-->
+    <select id="getdailyComprehensiveList" resultMap="dataItemMap">
+        SELECT
+            aa.index_id,
+            aa.index_name,
+            <foreach item="item" index="index" collection="dataList">
+                COALESCE ( MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ), null ) AS ${item.value},
+            </foreach>
+            aa.time_type,
+            aa.order_num orderNum
+        FROM
+            (
+            SELECT
+                ni.index_id,
+                ei."name" AS "index_name",
+                di."value",
+                di.data_time,
+                di.time_type,
+                mn.order_num
+            FROM
+                model_node mn
+                LEFT JOIN node_index ni ON ni.node_id = mn.node_id
+                LEFT JOIN energy_index ei ON ei.index_id = ni.index_id
+                LEFT JOIN data_item di ON ni.index_id = di.index_id
+            WHERE
+                mn.parent_id = #{nodeId}
+                AND di.data_time >= #{beginTime}
+                AND di.data_time &lt; #{endTime}
+                AND di.time_type = #{timeType}
+                <if test="indexStorageId !='' and indexStorageId !=null">
+                    and ei.energy_id=#{indexStorageId}
+                </if>
+            ) aa
+        GROUP BY
+            aa.index_id, aa.index_name, aa.time_type, aa.order_num
+        ORDER BY aa.order_num ASC
+    </select>
+
+    <select id="getListChart" resultMap="dataItemMap">
+        SELECT
+            di.index_id,
+            ci.name AS "index_name",
+            ci.unit_id,
+            di."value",
+            di.data_time,
+            di.time_type,
+            di.time_code
+        FROM
+        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+        WHERE
+            di.index_id =#{indexId}
+            AND di.data_time &lt; #{endTime}
+            AND di.data_time >= #{beginTime}
+            AND di.time_type = #{timeType}
+        ORDER BY data_time ASC
+    </select>
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/dataitem/DataItemMapper.xml b/zhitan-system/target/classes/mapper/dataitem/DataItemMapper.xml
new file mode 100644
index 0000000..327e8d1
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/dataitem/DataItemMapper.xml
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.dataitem.mapper.DataItemMapper">
+    <resultMap type="StagseDataEntry" id="stagseDataEntryResult">
+        <result property="code" column="code"/>
+        <result property="name" column="name"/>
+        <result property="indexId" column="index_id"/>
+        <result property="timeType" column="time_type"/>
+        <result property="unitId" column="unit_id"/>
+        <result property="calcType" column="calc_type"/>
+        <result property="value" column="value"/>
+        <result property="timeCode" column="time_code"/>
+        <result property="dataTime" column="data_time"/>
+    </resultMap>
+
+    <select id="getSettingIndex" parameterType="StagseDataEntry" resultMap="stagseDataEntryResult">
+
+        SELECT
+        ei.index_id,
+        code,
+        NAME,
+        si.time_type,
+        ei.unit_id
+        FROM
+        energy_index ei
+        LEFT JOIN node_index ni ON ei.index_id = ni.index_id
+        LEFT JOIN index_storage si ON si.index_id = ei.index_id
+        WHERE
+        not EXISTS ( SELECT index_id FROM data_item WHERE index_id =ei.index_id and  data_time >= #{beginTime} AND data_time &lt;= #{endTime}) AND
+        ni.node_id =  #{nodeId}
+        and si.time_type = #{timeType}
+        AND si.calc_type = #{calcType}
+   </select>
+    <select id="getSettingEdit" parameterType="StagseDataEntry" resultMap="stagseDataEntryResult">
+        SELECT
+            ei.index_id,
+            code,
+            NAME,
+            si.time_type,
+            ei.unit_id,
+            di.value,
+            di.data_time
+        FROM
+            energy_index ei
+            LEFT JOIN node_index ni ON ei.index_id = ni.index_id
+            LEFT JOIN index_storage si ON si.index_id = ei.index_id
+            LEFT JOIN data_item di on di.index_id=ei.index_id
+        WHERE
+            ni.node_id = #{nodeId}
+            and si.time_type = #{timeType}
+            AND si.calc_type = #{calcType}
+            AND data_time &gt;= #{beginTime}
+            AND data_time &lt;= #{endTime}
+    </select>
+    <select id="stagseDataByCode" parameterType="StagseDataEntry" resultMap="stagseDataEntryResult">
+        SELECT
+            ei.index_id,
+            code,
+            NAME,
+            ei.unit_id,
+            di.value,
+            di.data_time,
+            di.time_type
+        FROM
+            energy_index ei
+            LEFT JOIN node_index ni ON ei.index_id = ni.index_id
+            LEFT JOIN data_item di on di.index_id=ei.index_id
+        WHERE
+            ni.node_id = #{nodeId}
+            and ei.code IN
+            <foreach item="indexCode" index="index" collection="indexCodes"
+                     open="(" separator="," close=")">
+                #{indexCode}
+            </foreach>
+            and di.time_type = #{timeType}
+            AND di.data_time &gt;= #{beginTime}
+            AND di.data_time &lt;= #{endTime}
+    </select>
+
+    <select id="getDataItemTimeRangeInforByIndexIds" resultType="com.zhitan.realtimedata.domain.DataItem">
+        SELECT
+        index_id indexId,
+        data_time dataTime,
+        "value"
+        FROM
+        "data_item"
+        WHERE
+        index_id IN
+        <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
+            #{indexId}
+        </foreach>
+            AND ( data_time &gt;= #{beginTime} AND data_time &lt; #{endTime} )
+            AND time_type = #{timeType}
+    </select>
+
+    <select id="getDataItemTimeRangeValueByIndexIds" resultType="java.math.BigDecimal">
+        SELECT
+            COALESCE (SUM ( "value" ), 0)
+        FROM
+            "data_item"
+        WHERE
+            index_id IN
+            <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
+                #{indexId}
+            </foreach>
+            AND ( data_time &gt;= #{beginTime} AND data_time &lt; #{endTime} )
+            AND time_type = #{timeType}
+    </select>
+
+    <select id="getDataItemInforByIndexIds" resultType="com.zhitan.realtimedata.domain.DataItem">
+        SELECT
+        index_id indexId,
+        data_time dataTime,
+        "value"
+        FROM
+        "data_item"
+        WHERE
+        index_id IN
+        <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
+            #{indexId}
+            </foreach>
+            AND time_code = #{timeCode}
+    </select>
+
+    <select id="getDataItemValueByIndexIds" resultType="java.math.BigDecimal">
+        SELECT
+            COALESCE (SUM ( "value" ), 0)
+        FROM
+            "data_item"
+        WHERE
+            index_id IN
+            <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
+                #{indexId}
+            </foreach>
+            AND time_code = #{timeCode}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/zhitan-system/target/classes/mapper/energyIndicators/EnergyIndicatorsMapper.xml b/zhitan-system/target/classes/mapper/energyIndicators/EnergyIndicatorsMapper.xml
new file mode 100644
index 0000000..1f377ad
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/energyIndicators/EnergyIndicatorsMapper.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.energyIndicators.mapper.EnergyIndicatorsMapper">
+
+    <resultMap type="EnergyIndicators" id="EnergyIndicatorsResult">
+        <result property="nodeId"    column="node_id"    />
+        <result property="timeType"    column="time_type"    />
+        <result property="dataTime"    column="data_time"    />
+        <result property="name"    column="name"    />
+        <result property="number"    column="number"    />
+        <result property="unit"    column="unit"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="energyType"    column="energy_type"    />
+        <result property="indicatorsType"    column="indicators_type"    />
+        <result property="energyIndicatorsId"    column="energy_indicators_id"    />
+        <result property="nodeName"    column="node_name"    />
+    </resultMap>
+
+    <sql id="selectEnergyIndicatorsVo">
+        select node_id, time_type, data_time, name, number, unit, del_flag, create_by, create_time, update_by, update_time, remark,
+               energy_type, indicators_type, energy_indicators_id, node_name from energy_indicators
+    </sql>
+
+    <select id="selectEnergyIndicatorsList" parameterType="EnergyIndicators" resultMap="EnergyIndicatorsResult">
+        <include refid="selectEnergyIndicatorsVo"/>
+        <where>
+            <if test="nodeId != null  and nodeId != ''"> and node_id = #{nodeId}</if>
+            <if test="timeType != null  and timeType != ''"> and time_type = #{timeType}</if>
+            <if test="dataTime != null  and dataTime != ''"> and data_time = #{dataTime}</if>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="number != null "> and number = #{number}</if>
+            <if test="unit != null  and unit != ''"> and unit = #{unit}</if>
+            <if test="energyType != null  and energyType != ''"> and energy_type = #{energyType}</if>
+            <if test="indicatorsType != null  and indicatorsType != ''"> and indicators_type = #{indicatorsType}</if>
+            <if test="energyIndicatorsId != null  and energyIndicatorsId != ''"> and energy_indicators_id = #{energyIndicatorsId}</if>
+            <if test="nodeName != null  and nodeName != ''"> and node_name like concat('%', #{nodeName}, '%')</if>
+        </where>
+    </select>
+
+    <select id="selectEnergyIndicatorsByNodeId" parameterType="String" resultMap="EnergyIndicatorsResult">
+        <include refid="selectEnergyIndicatorsVo"/>
+        where energy_indicators_id = #{nodeId}
+    </select>
+
+    <insert id="insertEnergyIndicators" parameterType="EnergyIndicators">
+        insert into energy_indicators
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="nodeId != null">node_id,</if>
+            <if test="timeType != null">time_type,</if>
+            <if test="dataTime != null">data_time,</if>
+            <if test="name != null">name,</if>
+            <if test="number != null">number,</if>
+            <if test="unit != null">unit,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+            <if test="energyType != null">energy_type,</if>
+            <if test="indicatorsType != null">indicators_type,</if>
+            <if test="energyIndicatorsId != null and energyIndicatorsId != ''">energy_indicators_id,</if>
+            <if test="nodeName != null">node_name,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="nodeId != null">#{nodeId},</if>
+            <if test="timeType != null">#{timeType},</if>
+            <if test="dataTime != null">#{dataTime},</if>
+            <if test="name != null">#{name},</if>
+            <if test="number != null">#{number},</if>
+            <if test="unit != null">#{unit},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="energyType != null">#{energyType},</if>
+            <if test="indicatorsType != null">#{indicatorsType},</if>
+            <if test="energyIndicatorsId != null and energyIndicatorsId != ''">#{energyIndicatorsId},</if>
+            <if test="nodeName != null">#{nodeName},</if>
+         </trim>
+    </insert>
+
+    <update id="updateEnergyIndicators" parameterType="EnergyIndicators">
+        update energy_indicators
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="timeType != null">time_type = #{timeType},</if>
+            <if test="dataTime != null">data_time = #{dataTime},</if>
+            <if test="name != null">name = #{name},</if>
+            <if test="number != null">number = #{number},</if>
+            <if test="unit != null">unit = #{unit},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="energyType != null">energy_type = #{energyType},</if>
+            <if test="indicatorsType != null">indicators_type = #{indicatorsType},</if>
+            <if test="energyIndicatorsId != null and energyIndicatorsId != ''">energy_indicators_id = #{energyIndicatorsId},</if>
+            <if test="nodeName != null">node_name = #{nodeName},</if>
+        </trim>
+        where energy_indicators_id = #{energyIndicatorsId}
+    </update>
+
+    <delete id="deleteEnergyIndicatorsByEnergyIndicatorsId" parameterType="String">
+        delete from energy_indicators where energy_indicators_id = #{energyIndicatorsId}
+    </delete>
+
+    <delete id="deleteEnergyIndicatorsByEnergyIndicatorsIds" parameterType="String">
+        delete from energy_indicators where energy_indicators_id in
+        <foreach item="energyIndicatorsId" collection="array" open="(" separator="," close=")">
+            #{energyIndicatorsId}
+        </foreach>
+    </delete>
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/gatewaysetting/GatewaySettingMapper.xml b/zhitan-system/target/classes/mapper/gatewaysetting/GatewaySettingMapper.xml
new file mode 100644
index 0000000..0b19ef1
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/gatewaysetting/GatewaySettingMapper.xml
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.gatewaysetting.mapper.GatewaySettingMapper">
+
+    <resultMap type="GatewaySetting" id="GatewaySettingResult">
+        <result property="id"    column="id"    />
+        <result property="gatewayNum"    column="gateway_num"    />
+        <result property="gatewayName"    column="gateway_name"    />
+        <result property="specsModel"    column="specs_model"    />
+        <result property="installLocation"    column="install_location"    />
+        <result property="ipAdd"    column="ip_add"    />
+        <result property="runStatus"    column="run_status"    />
+        <result property="hbtTime"    column="hbt_time"    />
+        <result property="deviceNum"    column="device_num"    />
+        <result property="ptNum"    column="pt_num"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectGatewaySettingVo">
+        select id, gateway_num, gateway_name, specs_model, install_location, ip_add, run_status, hbt_time, device_num, pt_num, create_by, create_time, update_by, update_time from gateway_setting
+    </sql>
+
+    <select id="selectGatewaySettingList" parameterType="GatewaySetting" resultMap="GatewaySettingResult">
+        <include refid="selectGatewaySettingVo"/>
+        <where>
+            <if test="gatewayNum != null  and gatewayNum != ''"> and gateway_num = #{gatewayNum}</if>
+            <if test="gatewayName != null  and gatewayName != ''"> and gateway_name like concat('%', #{gatewayName}, '%')</if>
+            <if test="specsModel != null  and specsModel != ''"> and specs_model = #{specsModel}</if>
+            <if test="installLocation != null  and installLocation != ''"> and install_location = #{installLocation}</if>
+            <if test="ipAdd != null  and ipAdd != ''"> and ip_add = #{ipAdd}</if>
+            <if test="runStatus != null  and runStatus != ''"> and run_status = #{runStatus}</if>
+            <if test="hbtTime != null "> and hbt_time = #{hbtTime}</if>
+            <if test="deviceNum != null  and deviceNum != ''"> and device_num = #{deviceNum}</if>
+            <if test="ptNum != null  and ptNum != ''"> and pt_num = #{ptNum}</if>
+        </where>
+    </select>
+
+    <select id="selectGatewaySettingById" parameterType="String" resultMap="GatewaySettingResult">
+        <include refid="selectGatewaySettingVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertGatewaySetting" parameterType="GatewaySetting">
+        insert into gateway_setting
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null and id != ''">id,</if>
+            <if test="gatewayNum != null">gateway_num,</if>
+            <if test="gatewayName != null">gateway_name,</if>
+            <if test="specsModel != null">specs_model,</if>
+            <if test="installLocation != null">install_location,</if>
+            <if test="ipAdd != null">ip_add,</if>
+            <if test="runStatus != null">run_status,</if>
+            <if test="hbtTime != null">hbt_time,</if>
+            <if test="deviceNum != null">device_num,</if>
+            <if test="ptNum != null">pt_num,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null and id != ''">#{id},</if>
+            <if test="gatewayNum != null">#{gatewayNum},</if>
+            <if test="gatewayName != null">#{gatewayName},</if>
+            <if test="specsModel != null">#{specsModel},</if>
+            <if test="installLocation != null">#{installLocation},</if>
+            <if test="ipAdd != null">#{ipAdd},</if>
+            <if test="runStatus != null">#{runStatus},</if>
+            <if test="hbtTime != null">#{hbtTime},</if>
+            <if test="deviceNum != null">#{deviceNum},</if>
+            <if test="ptNum != null">#{ptNum},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+        </trim>
+    </insert>
+
+    <update id="updateGatewaySetting" parameterType="GatewaySetting">
+        update gateway_setting
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="gatewayNum != null">gateway_num = #{gatewayNum},</if>
+            <if test="gatewayName != null">gateway_name = #{gatewayName},</if>
+            <if test="specsModel != null">specs_model = #{specsModel},</if>
+            <if test="installLocation != null">install_location = #{installLocation},</if>
+            <if test="ipAdd != null">ip_add = #{ipAdd},</if>
+            <if test="runStatus != null">run_status = #{runStatus},</if>
+            <if test="hbtTime != null">hbt_time = #{hbtTime},</if>
+            <if test="deviceNum != null">device_num = #{deviceNum},</if>
+            <if test="ptNum != null">pt_num = #{ptNum},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteGatewaySettingById" parameterType="String">
+        delete from gateway_setting where id = #{id}
+    </delete>
+
+    <delete id="deleteGatewaySettingByIds" parameterType="String">
+        delete from gateway_setting where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <select id="checkOne" resultType="int" parameterType="GatewaySetting">
+        select count(1) from gateway_setting
+        where
+        gateway_num=#{gatewayNum}
+        <if test="id!=null and id !=''">
+            and id != #{id}
+        </if>
+
+    </select>
+
+    <select id="ptNum" resultType="com.zhitan.gatewaysetting.domain.GatewaySetting" parameterType="GatewaySetting">
+            select sum(device_num) device_num,sum(pt_num) pt_num from gateway_setting
+        <where>
+        <if test="gatewayNum != null  and gatewayNum != ''"> and gateway_num = #{gatewayNum}</if>
+        <if test="gatewayName != null  and gatewayName != ''"> and gateway_name like concat('%', #{gatewayName}, '%')</if>
+        <if test="specsModel != null  and specsModel != ''"> and specs_model = #{specsModel}</if>
+        <if test="installLocation != null  and installLocation != ''"> and install_location = #{installLocation}</if>
+        <if test="ipAdd != null  and ipAdd != ''"> and ip_add = #{ipAdd}</if>
+        <if test="runStatus != null  and runStatus != ''"> and run_status = #{runStatus}</if>
+        <if test="hbtTime != null "> and hbt_time = #{hbtTime}</if>
+        <if test="deviceNum != null  and deviceNum != ''"> and device_num = #{deviceNum}</if>
+        <if test="ptNum != null  and ptNum != ''"> and pt_num = #{ptNum}</if>
+    </where>
+    </select>
+
+    <update id="addNum" parameterType="GatewaySetting">
+        update gateway_setting set device_num = COALESCE(NULLIF(device_num,null),'0')+ #{deviceNum}, pt_num = COALESCE(NULLIF(pt_num,null),'0')+#{ptNum},update_time=now(),update_by=#{updateBy}
+        where id = #{id}
+    </update>
+
+    <update id="subNum" parameterType="GatewaySetting">
+        update gateway_setting set device_num =
+            CASE
+
+                WHEN COALESCE(NULLIF(device_num,null),'0')- #{deviceNum} > 0 THEN
+                    COALESCE(NULLIF(device_num,null),'0')- #{deviceNum} ELSE 0
+                END
+            , pt_num =
+                CASE
+
+                    WHEN COALESCE(NULLIF(pt_num,null),'0')-#{ptNum} > 0 THEN
+                        COALESCE(NULLIF(pt_num,null),'0')-#{ptNum} ELSE 0
+                    END,update_time=now(),update_by=#{updateBy}
+        where id = #{id}
+    </update>
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/keyequipment/DailyKeyEquipmentMapper.xml b/zhitan-system/target/classes/mapper/keyequipment/DailyKeyEquipmentMapper.xml
new file mode 100644
index 0000000..22c3ec2
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/keyequipment/DailyKeyEquipmentMapper.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.keyequipment.mapper.DailyKeyEquipmentMapper">
+    <resultMap id="dataItemMap" type="com.zhitan.keyequipment.domain.DailyKeyEquipment">
+        <result column="index_id" property="indexId"/>
+        <result column="index_name" property="indexName"/>
+        <result column="time_type" property="timeType"/>
+        <result column="time_code" property="timeCode"/>
+        <result column="unit_id" property="unitId"/>
+        <result column="value1" property="value1"/>
+        <result column="value2" property="value2"/>
+        <result column="value3" property="value3"/>
+        <result column="value4" property="value4"/>
+        <result column="value5" property="value5"/>
+        <result column="value6" property="value6"/>
+        <result column="value7" property="value7"/>
+        <result column="value8" property="value8"/>
+        <result column="value9" property="value9"/>
+        <result column="value10" property="value10"/>
+        <result column="value11" property="value11"/>
+        <result column="value12" property="value12"/>
+        <result column="value13" property="value13"/>
+        <result column="value14" property="value14"/>
+        <result column="value15" property="value15"/>
+        <result column="value16" property="value16"/>
+        <result column="value17" property="value17"/>
+        <result column="value18" property="value18"/>
+        <result column="value19" property="value19"/>
+        <result column="value20" property="value20"/>
+        <result column="value21" property="value21"/>
+        <result column="value22" property="value22"/>
+        <result column="value23" property="value23"/>
+        <result column="value0" property="value0"/>
+    </resultMap>
+    <select id="getdailyKeyEquipmentList" resultMap="dataItemMap">
+        SELECT
+        aa.index_id,
+        aa.index_name,
+        <foreach item="item" index="index" collection="dataList">
+            MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ) AS ${item.value},
+        </foreach>
+        aa.time_type
+        FROM
+        (
+        SELECT
+        ci.index_id,
+        ci.NAME  AS "index_name",
+        di."value",
+        di.data_time,
+        di.time_type
+        FROM
+        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+        LEFT JOIN facility_archives f ON f."id"=ci.equipment
+        WHERE
+        di.data_time >= #{beginTime}
+        AND di.data_time &lt; #{endTime}
+        AND di.index_id IN <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
+        AND di.time_type = #{timeType}
+        <if test="indexStorageId !='' and indexStorageId !=null">
+            and ci.equipment=#{indexStorageId}
+        </if>
+        ) aa
+        GROUP BY
+        aa.index_id,aa.index_name,aa.time_type
+    </select>
+
+    <select id="getListChart" resultMap="dataItemMap">
+        SELECT
+            di.index_id,
+            ci.name AS "index_name",
+            ci.unit_id,
+            di."value",
+            di.data_time,
+            di.time_type,
+            di.time_code
+        FROM
+        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+        WHERE
+            di.index_id =#{indexId}
+            AND di.data_time &lt; #{endTime}
+            AND di.data_time >= #{beginTime}
+            AND di.time_type = #{timeType}
+        order by di.data_time
+    </select>
+    <select id="getFacilityArchives" resultType="com.zhitan.basicdata.domain.FacilityArchives">
+        SELECT ID,code,facility_name AS facilityName FROM facility_archives
+    </select>
+    <select id="getPointFacility" resultType="com.zhitan.basicdata.domain.FacilityArchives">
+        SELECT ID,code,facility_name AS facilityName FROM facility_archives where point_flag='Y'
+    </select>
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/keyequipment/MonthlyKeyEquipmentMapper.xml b/zhitan-system/target/classes/mapper/keyequipment/MonthlyKeyEquipmentMapper.xml
new file mode 100644
index 0000000..19f8a86
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/keyequipment/MonthlyKeyEquipmentMapper.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.keyequipment.mapper.MonthlyKeyEquipmentMapper">
+    <resultMap id="dataItemMap" type="com.zhitan.keyequipment.domain.MonthlyKeyEquipment">
+        <result column="index_id" property="indexId"/>
+        <result column="index_name" property="indexName"/>
+        <result column="time_type" property="timeType"/>
+        <result column="time_code" property="timeCode"/>
+        <result column="unit_id" property="unitId"/>
+        <result column="value1" property="value1"/>
+        <result column="value2" property="value2"/>
+        <result column="value3" property="value3"/>
+        <result column="value4" property="value4"/>
+        <result column="value5" property="value5"/>
+        <result column="value6" property="value6"/>
+        <result column="value7" property="value7"/>
+        <result column="value8" property="value8"/>
+        <result column="value9" property="value9"/>
+        <result column="value10" property="value10"/>
+        <result column="value11" property="value11"/>
+        <result column="value12" property="value12"/>
+        <result column="value13" property="value13"/>
+        <result column="value14" property="value14"/>
+        <result column="value15" property="value15"/>
+        <result column="value16" property="value16"/>
+        <result column="value17" property="value17"/>
+        <result column="value18" property="value18"/>
+        <result column="value19" property="value19"/>
+        <result column="value20" property="value20"/>
+        <result column="value21" property="value21"/>
+        <result column="value22" property="value22"/>
+        <result column="value23" property="value23"/>
+        <result column="value24" property="value24"/>
+        <result column="value25" property="value25"/>
+        <result column="value26" property="value26"/>
+        <result column="value27" property="value27"/>
+        <result column="value28" property="value28"/>
+        <result column="value29" property="value29"/>
+        <result column="value30" property="value30"/>
+        <result column="value31" property="value31"/>
+    </resultMap>
+    <!--鍏ㄥ巶鑳借�楃粺璁�-->
+    <select id="getMonthlyKeyEquipmentList" resultMap="dataItemMap">
+        SELECT
+        aa.index_id,
+        aa.index_name,
+        <foreach item="item" index="index" collection="dataList">
+            MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ) AS ${item.value},
+        </foreach>
+        aa.time_type
+        FROM
+        (
+        SELECT
+        ci.index_id,
+        ci.NAME  AS "index_name",
+        di."value",
+        di.data_time,
+        di.time_type
+        FROM
+        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+        LEFT JOIN facility_archives f ON f."id"=ci.equipment
+        WHERE
+        di.data_time >= #{beginTime}
+        AND di.data_time &lt; #{endTime}
+        AND di.index_id IN <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
+        AND di.time_type = #{timeType}
+        <if test="indexStorageId !='' and indexStorageId !=null">
+            and ci.equipment=#{indexStorageId}
+        </if>
+        ) aa
+        GROUP BY
+        aa.index_id,aa.index_name,aa.time_type
+    </select>
+
+    <select id="getListChart" resultMap="dataItemMap">
+        SELECT
+            di.index_id,
+            ci.name AS "index_name",
+            ci.unit_id,
+            di."value",
+            di.data_time,
+            di.time_type,
+            di.time_code
+        FROM
+        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+        WHERE
+            di.index_id =#{indexId}
+            AND di.data_time >= #{beginTime}
+            AND di.data_time &lt; #{endTime}
+            AND di.time_type = #{timeType}
+        order by di.data_time
+    </select>
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/keyequipment/YearKeyEquipmentMapper.xml b/zhitan-system/target/classes/mapper/keyequipment/YearKeyEquipmentMapper.xml
new file mode 100644
index 0000000..6a2316e
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/keyequipment/YearKeyEquipmentMapper.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.keyequipment.mapper.YearKeyEquipmentMapper">
+    <resultMap id="dataItemMap" type="com.zhitan.keyequipment.domain.YearKeyEquipment">
+        <result column="index_id" property="indexId"/>
+        <result column="index_name" property="indexName"/>
+        <result column="time_type" property="timeType"/>
+        <result column="time_code" property="timeCode"/>
+        <result column="unit_id" property="unitId"/>
+        <result column="value1" property="value1"/>
+        <result column="value2" property="value2"/>
+        <result column="value3" property="value3"/>
+        <result column="value4" property="value4"/>
+        <result column="value5" property="value5"/>
+        <result column="value6" property="value6"/>
+        <result column="value7" property="value7"/>
+        <result column="value8" property="value8"/>
+        <result column="value9" property="value9"/>
+        <result column="value10" property="value10"/>
+        <result column="value11" property="value11"/>
+        <result column="value12" property="value12"/>
+    </resultMap>
+    <!--鍏ㄥ巶鑳借�楃粺璁�-->
+    <select id="getYearKeyEquipmentList" resultMap="dataItemMap">
+        SELECT
+        aa.index_id,
+        aa.index_name,
+        <foreach item="item" index="index" collection="dataList">
+            MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ) AS ${item.value},
+        </foreach>
+        aa.time_type
+        FROM
+        (
+        SELECT
+        ci.index_id,
+        ci.NAME  AS "index_name",
+        di."value",
+        di.data_time,
+        di.time_type
+        FROM
+        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+        LEFT JOIN facility_archives f ON f."id"=ci.equipment
+        WHERE
+        di.data_time >= #{beginTime}
+        AND di.data_time &lt; #{endTime}
+        AND di.index_id IN <foreach item="indexId" index="index" collection="indexIds"  open="(" separator="," close=")">#{indexId} </foreach>
+        AND di.time_type = #{timeType}
+        <if test="indexStorageId !='' and indexStorageId !=null">
+            and ci.equipment=#{indexStorageId}
+        </if>
+        ) aa
+        GROUP BY
+        aa.index_id,aa.index_name,aa.time_type
+    </select>
+
+    <select id="getListChart" resultMap="dataItemMap">
+        SELECT
+            di.index_id,
+            ci.name AS "index_name",
+            ci.unit_id,
+            di."value",
+            di.data_time,
+            di.time_type,
+            di.time_code
+        FROM
+        data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+        WHERE
+            di.index_id =#{indexId}
+            AND di.data_time &lt; #{endTime}
+            AND di.data_time >= #{beginTime}
+            AND di.time_type = #{timeType}
+        order by di.data_time
+    </select>
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/meter/MeterImplementMapper.xml b/zhitan-system/target/classes/mapper/meter/MeterImplementMapper.xml
new file mode 100644
index 0000000..3116319
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/meter/MeterImplementMapper.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.meter.mapper.MetersMapper">
+
+    <resultMap type="MeterImplements" id="MeterImplementResult">
+        <result property="id"    column="id"    />
+        <result property="code"    column="code"    />
+        <result property="meterName"    column="meter_name"    />
+        <result property="meterType"    column="meter_type"    />
+        <result property="modelNumber"    column="model_number"    />
+        <result property="measureRange"    column="measure_range"    />
+        <result property="manufacturer"    column="manufacturer"    />
+        <result property="personCharge"    column="person_charge"    />
+        <result property="installactionLocation"    column="installaction_location"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="checkCycle"    column="check_cycle"    />
+        <result property="reminderCycle"    column="reminder_cycle"    />
+        <result property="meterStatus"    column="meter_status"    />
+        <result property="delFlage"    column="del_flage"    />
+        <result property="remark"    column="remark"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="txflage"    column="txflage"    />
+        <result property="putrunTime"    column="putrun_time"    />
+    </resultMap>
+
+
+    <sql id="selectMeterImplementVo">
+        SELECT
+            mi.meter_name
+        FROM
+            meter_implement mi
+
+    </sql>
+
+    <select id="listMeterData" resultType="com.zhitan.meter.domain.MeterImplements">
+        <include refid="selectMeterImplementVo"/>
+            WHERE
+            mi.meter_type = #{meterType}
+            GROUP BY
+            meter_name
+
+    </select>
+
+    <sql id="selectMeterConfigurationVo">
+        SELECT
+            mi."id",
+            mi.meter_name,
+            ei.index_id,
+            ei.code,
+            ei."name"
+        FROM
+            meter_implement mi
+            LEFT JOIN
+            energy_index ei
+            ON mi."id" = ei.meter_id
+
+    </sql>
+    <select id="listConfigurationData" resultType="com.zhitan.meter.domain.MeterParam" parameterType="string">
+        <include refid="selectMeterConfigurationVo"/>
+            WHERE
+                mi.meter_type = #{meterType}
+            AND ei.index_type = #{indexType}
+    </select>
+
+
+    <select id="listConfigData" resultType="com.zhitan.meter.domain.MeterConfig" parameterType="string">
+        SELECT
+            mc.id,
+            mc.table_name,
+            mc.step_min,
+            mc.step_max,
+            mc.max_value,
+            mc.min_value,
+            mc.index_type,
+            mc.table_value
+        FROM
+            meter_config mc
+        WHERE
+            mc.index_type = #{indexType}
+
+    </select>
+
+
+</mapper>
\ No newline at end of file
diff --git a/zhitan-system/target/classes/mapper/model/CalcFunctionMapper.xml b/zhitan-system/target/classes/mapper/model/CalcFunctionMapper.xml
new file mode 100644
index 0000000..d9c32f5
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/model/CalcFunctionMapper.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.model.mapper.CalcFunctionMapper">
+
+    <resultMap type="com.zhitan.model.domain.CalcFunction" id="CalcFunctionResult">
+        <result property="id" column="id"/>
+        <result property="info" column="info"/>
+        <result property="funcName" column="func_name"/>
+        <result property="funcText" column="func_text"/>
+    </resultMap>
+
+    <sql id="selectCalcFunctionVo">
+        select id, func_name, func_text, info
+        from calc_function
+    </sql>
+
+    <select id="selectCalcFunctionList" parameterType="com.zhitan.model.domain.CalcFunction" resultMap="CalcFunctionResult">
+        <include refid="selectCalcFunctionVo"/>
+        <where>
+            <if test="funcName != null  and funcName != ''">and func_name like concat('%', #{funcName}, '%')</if>
+        </where>
+    </select>
+
+    <select id="selectCalcFunctionById" parameterType="String" resultMap="CalcFunctionResult">
+        <include refid="selectCalcFunctionVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertCalcFunction" parameterType="com.zhitan.model.domain.CalcFunction">
+        insert into calc_function
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">id,</if>
+            <if test="funcName != null  and funcName != ''">func_name,</if>
+            <if test="funcText != null  and funcText != ''">func_text,</if>
+            <if test="info != null  and info != ''">info,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">#{id},</if>
+            <if test="funcName != null  and funcName != ''">#{funcName},</if>
+            <if test="funcText != null  and funcText != ''">#{funcText},</if>
+            <if test="info != null  and info != ''">#{info},</if>
+        </trim>
+    </insert>
+
+    <update id="updateCalcFunction" parameterType="com.zhitan.model.domain.CalcFunction">
+        update calc_function
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="info != null  and info != ''">info = #{info},</if>
+            <if test="funcName != null  and funcName != ''">func_name = #{funcName},</if>
+            <if test="funcText != null  and funcText != ''">func_text = #{funcText},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteCalcFunctionById" parameterType="String">
+        delete
+        from calc_function
+        where id = #{id}
+    </delete>
+
+    <delete id="deleteCalcFunctionByIds" parameterType="String">
+        delete from calc_function where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/model/DaqTemplateMapper.xml b/zhitan-system/target/classes/mapper/model/DaqTemplateMapper.xml
new file mode 100644
index 0000000..7259945
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/model/DaqTemplateMapper.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.model.mapper.DaqTemplateMapper">
+
+    <resultMap type="com.zhitan.model.domain.DaqTemplate" id="DaqTemplateResult">
+        <result property="id" column="id"/>
+        <result property="code" column="code"/>
+        <result property="name" column="name"/>
+        <result property="deviceType" column="device_type"/>
+        <result property="unit" column="unit"/>
+    </resultMap>
+
+    <sql id="selectDaqTemplateVo">
+        select id, code, name, device_type, unit
+        from daq_template
+    </sql>
+
+    <select id="selectDaqTemplateList" parameterType="com.zhitan.model.domain.DaqTemplate" resultMap="DaqTemplateResult">
+        <include refid="selectDaqTemplateVo"/>
+        <where>
+            <if test="code != null  and code != ''">and code = #{code}</if>
+            <if test="name != null  and name != ''">and name like concat('%', #{name}, '%')</if>
+            <if test="deviceType != null  and deviceType != ''">and device_type = #{deviceType}</if>
+        </where>
+        order by device_type, code
+    </select>
+
+    <select id="selectDaqTemplateById" parameterType="String" resultMap="DaqTemplateResult">
+        <include refid="selectDaqTemplateVo"/>
+        where id = #{id}
+    </select>
+    <select id="dapHasExist" resultType="java.lang.Integer">
+        SELECT COUNT(*)
+        FROM daq_template
+        WHERE code = #{code}
+          AND device_type = #{deviceType}
+    </select>
+    <select id="dapHasExistWhenUpdate" resultType="java.lang.Integer">
+        SELECT COUNT(*)
+        FROM daq_template
+        WHERE code = #{code}
+          AND device_type = #{deviceType}
+          AND id != #{id}
+    </select>
+    <select id="listTemplate" resultType="com.zhitan.model.domain.DaqTemplate">
+        <include refid="selectDaqTemplateVo"/>
+    </select>
+
+    <insert id="insertDaqTemplate" parameterType="com.zhitan.model.domain.DaqTemplate">
+        insert into daq_template
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">id,</if>
+            <if test="code != null  and code != ''">code,</if>
+            <if test="name != null  and name != ''">name,</if>
+            <if test="deviceType != null  and deviceType != ''">device_type,</if>
+            <if test="unit != null  and unit != ''">unit,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null  and id != ''">#{id},</if>
+            <if test="code != null  and code != ''">#{code},</if>
+            <if test="name != null  and name != ''">#{name},</if>
+            <if test="deviceType != null  and deviceType != ''">#{deviceType},</if>
+            <if test="unit != null  and unit != ''">#{unit},</if>
+        </trim>
+    </insert>
+
+    <update id="updateDaqTemplate" parameterType="com.zhitan.model.domain.DaqTemplate">
+        update daq_template
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="code != null  and code != ''">code = #{code},</if>
+            <if test="name != null  and name != ''">name = #{name},</if>
+            <if test="deviceType != null  and deviceType != ''">device_type = #{deviceType},</if>
+            <if test="unit != null  and unit != ''">unit = #{unit},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteDaqTemplateById" parameterType="String">
+        delete
+        from daq_template
+        where id = #{id}
+    </delete>
+
+    <delete id="deleteDaqTemplateByIds" parameterType="String">
+        delete from daq_template where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/model/EnergyIndexMapper.xml b/zhitan-system/target/classes/mapper/model/EnergyIndexMapper.xml
new file mode 100644
index 0000000..d38240b
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/model/EnergyIndexMapper.xml
@@ -0,0 +1,380 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.model.mapper.EnergyIndexMapper">
+
+  <resultMap type="EnergyIndex" id="EnergyIndexResult">
+    <result property="indexId" column="index_id"/>
+    <result property="name" column="name"/>
+    <result property="code" column="code"/>
+    <result property="indexType" column="index_type"/>
+    <result property="indexCategory" column="index_category"/>
+    <result property="remark" column="remark"/>
+    <result property="unitId" column="unit_id"/>
+    <result property="meterId" column="meter_id"/>
+    <result property="orderNum" column="order_num"/>
+    <result property="equipment" column="equipment"/>
+    <result property="energyId" column="energy_id"/>
+    <result property="meterName" column="meter_name"/>
+  </resultMap>
+
+  <sql id="selectEnergyIndexVo">
+    select index_id,
+           name,
+           code,
+           index_type,
+           index_category,
+           remark,
+           unit_id,
+           meter_id,
+           order_num,
+           equipment,
+           energy_id
+    from energy_index
+  </sql>
+
+  <select id="selectEnergyIndexList" parameterType="EnergyIndex" resultMap="EnergyIndexResult">
+    select ni.index_id, name, code, index_type, remark, unit_id, index_category
+    from energy_index ei left join node_index ni on ei.index_id = ni.index_id
+    <where>
+      <if test="name != null  and name != ''">and name like concat('%', #{name}, '%')</if>
+      <if test="code != null  and code != ''">and code like concat('%', #{code}, '%')</if>
+      <if test="indexType != null">and index_type = #{indexType}</if>
+      <if test="nodeId != null  and nodeId != ''">and node_id = #{nodeId}</if>
+      <if test="indexCategory != null  and indexCategory != ''">and index_category =
+        #{indexCategory}
+      </if>
+    </where>
+    order by ei.order_num
+  </select>
+
+  <select id="selectEnergyIndexById" parameterType="String" resultMap="EnergyIndexResult">
+    <include refid="selectEnergyIndexVo"/>
+    where index_id = #{indexId}
+    order by order_num
+  </select>
+
+  <select id="selectEnergyIndexByIds" resultType="com.zhitan.model.domain.EnergyIndex">
+    <include refid="selectEnergyIndexVo"/>
+    where
+        index_id IN
+        <foreach collection="list" item="indexId" open="(" separator="," close=")">
+          #{indexId}
+        </foreach>
+  </select>
+
+  <select id="energyIndexHasExist" resultType="java.lang.Integer">
+    select count(*)
+    from energy_index
+    where code = #{code};
+  </select>
+  <select id="energyIndexHasExistWhenUpdate" resultType="java.lang.Integer">
+    select count(*)
+    from energy_index
+    where code = #{code}
+      AND index_id != #{indexId};
+  </select>
+  <select id="getMeterIndex" resultMap="EnergyIndexResult">
+    <include refid="selectEnergyIndexVo"/>
+    where meter_id = #{meterId}
+    order by order_num
+  </select>
+  <select id="modelHasConfig" resultType="java.lang.Integer">
+    select count(*)
+    from model_node
+    where model_code = #{modelCode};
+  </select>
+  <select id="selectCollectIndex" resultMap="EnergyIndexResult">
+    <include refid="selectEnergyIndexVo"/>
+    where meter_id = #{deviceId}
+    order by order_num
+  </select>
+  <select id="getEnergyIndexByIds" resultMap="EnergyIndexResult">
+    <include refid="selectEnergyIndexVo"/>
+    where index_id in
+    <foreach item="indexId" collection="list" open="(" separator="," close=")">
+      #{indexId}
+    </foreach>
+    order by order_num
+  </select>
+  <select id="getEnergyIndexByCodes" resultMap="EnergyIndexResult">
+    <include refid="selectEnergyIndexVo"/>
+    where code in
+    <foreach item="indexCode" collection="list" open="(" separator="," close=")">
+      #{indexCode}
+    </foreach>
+    order by order_num
+  </select>
+  <select id="getIndexByNodeAndChildrenNode" resultMap="EnergyIndexResult">
+    select ei.*
+    from energy_index ei
+           left join node_index ni on ei.index_id = ni.index_id
+    where ni.node_id in (select node_id
+                         from model_node
+                         where address like (select address
+                                             from model_node
+                                             where node_id = #{nodeId}) || '%')
+    order by ei.order_num
+  </select>
+  <select id="searchIndexByNodeAndChildrenNode" resultMap="EnergyIndexResult">
+    select ei.*
+    from energy_index ei
+           left join node_index ni on ei.index_id = ni.index_id
+    where ni.node_id in (select node_id
+                         from model_node
+                         where address like (select address
+                                             from model_node
+                                             where node_id = #{nodeId}) || '%')
+      and (ei.code like concat('%', #{filter}, '%') or ei.name like concat('%', #{filter}, '%'))
+    order by ei.order_num
+  </select>
+  <select id="selectEnergyIndex" resultMap="EnergyIndexResult">
+    select ni.index_id, name, code, index_type, remark, unit_id, index_category
+    from energy_index ei left join node_index ni on ei.index_id = ni.index_id
+    <where>
+      <if test="codeOrName != null  and codeOrName != ''">and (name like concat('%', #{codeOrName},
+        '%') or code like concat('%', #{codeOrName}, '%'))
+      </if>
+      <if test="nodeId != null  and nodeId != ''">and node_id = #{nodeId}</if>
+      <if test="indexType != null">and index_type = #{indexType}</if>
+      <if test="indexCategory != null  and indexCategory != ''">and index_category =
+        #{indexCategory}
+      </if>
+    </where>
+    order by ei.order_num
+  </select>
+
+  <insert id="insertEnergyIndex" parameterType="EnergyIndex">
+    insert into energy_index
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="indexId != null  and indexId != ''">index_id,</if>
+      <if test="name != null  and name != ''">name,</if>
+      <if test="code != null  and code != ''">code,</if>
+      <if test="indexType != null">index_type,</if>
+      <if test="indexCategory != null  and indexCategory != ''">
+        index_category,
+      </if>
+      <if test="remark != null  and remark != ''">remark,</if>
+      <if test="unitId != null  and unitId != ''">unit_id,</if>
+      <if test="orderNum != null">order_num,</if>
+      <if test="equipment != null">equipment,</if>
+      <if test="energyId != null">energy_id,</if>
+    </trim>
+    <trim prefix="values (" suffix=");" suffixOverrides=",">
+      <if test="indexId != null  and indexId != ''">
+        #{indexId},
+      </if>
+      <if test="name != null  and name != ''">#{name},</if>
+      <if test="code != null  and code != ''">#{code},</if>
+      <if test="indexType != null">
+        #{indexType},
+      </if>
+      <if test="indexCategory != null  and indexCategory != ''">
+        #{indexCategory},
+      </if>
+      <if test="remark != null  and remark != ''">#{remark},
+      </if>
+      <if test="unitId != null  and unitId != ''">#{unitId},
+      </if>
+      <if test="orderNum != null">#{orderNum},
+      </if>
+      <if test="equipment != null">#{equipment},
+      </if>
+      <if test="energyId != null">#{energyId},
+      </if>
+    </trim>
+    
+  </insert>
+  <insert id="insertNodeIndex">
+    insert into node_index (node_id, index_id) values (#{nodeId}, #{indexId});
+  </insert>
+  <insert id="insertEnergyIndices">
+    <foreach collection="energyIndices" item="energyIndex" separator=";">
+      insert into energy_index
+      <trim prefix="(" suffix=")" suffixOverrides=",">
+        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">index_id,</if>
+        <if test="energyIndex.name != null  and energyIndex.name != ''">name,</if>
+        <if test="energyIndex.code != null  and energyIndex.code != ''">code,</if>
+        <if test="energyIndex.indexType != null">index_type,</if>
+        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
+          index_category,
+        </if>
+        <if test="energyIndex.remark != null  and energyIndex.remark != ''">remark,</if>
+        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">unit_id,</if>
+        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">meter_id,</if>
+        <if test="energyIndex.orderNum != null">order_num,</if>
+      </trim>
+      <trim prefix="values (" suffix=")" suffixOverrides=",">
+        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">
+          #{energyIndex.indexId},
+        </if>
+        <if test="energyIndex.name != null  and energyIndex.name != ''">#{energyIndex.name},</if>
+        <if test="energyIndex.code != null  and energyIndex.code != ''">#{energyIndex.code},</if>
+        <if test="energyIndex.indexType != null">
+          #{energyIndex.indexType},
+        </if>
+        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
+          #{energyIndex.indexCategory},
+        </if>
+        <if test="energyIndex.remark != null  and energyIndex.remark != ''">#{energyIndex.remark},
+        </if>
+        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">#{energyIndex.unitId},
+        </if>
+        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">
+          #{energyIndex.meterId},
+        </if>
+        <if test="energyIndex.orderNum != null">#{energyIndex.orderNum},</if>
+      </trim>
+    </foreach>
+  </insert>
+  <insert id="saveEnergyIndex">
+    <foreach collection="list" item="energyIndex" separator=";">
+      insert into energy_index
+      <trim prefix="(" suffix=")" suffixOverrides=",">
+        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">index_id,</if>
+        <if test="energyIndex.name != null  and energyIndex.name != ''">name,</if>
+        <if test="energyIndex.code != null  and energyIndex.code != ''">code,</if>
+        <if test="energyIndex.indexType != null">index_type,</if>
+        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
+          index_category,
+        </if>
+        <if test="energyIndex.remark != null  and energyIndex.remark != ''">remark,</if>
+        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">unit_id,</if>
+        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">meter_id,</if>
+        <if test="energyIndex.orderNum != null">order_num,</if>
+      </trim>
+      <trim prefix="values (" suffix=")" suffixOverrides=",">
+        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">
+          #{energyIndex.indexId},
+        </if>
+        <if test="energyIndex.name != null  and energyIndex.name != ''">#{energyIndex.name},</if>
+        <if test="energyIndex.code != null  and energyIndex.code != ''">#{energyIndex.code},</if>
+        <if test="energyIndex.indexType != null">
+          #{energyIndex.indexType},
+        </if>
+        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
+          #{energyIndex.indexCategory},
+        </if>
+        <if test="energyIndex.remark != null  and energyIndex.remark != ''">#{energyIndex.remark},
+        </if>
+        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">#{energyIndex.unitId},
+        </if>
+        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">
+          #{energyIndex.meterId},
+        </if>
+        <if test="energyIndex.orderNum != null">#{energyIndex.orderNum},</if>
+      </trim>
+      ;
+      insert into node_index (node_id, index_id) values (#{energyIndex.nodeId},
+      #{energyIndex.indexId});
+    </foreach>
+  </insert>
+
+  <update id="updateEnergyIndex" parameterType="EnergyIndex">
+    update energy_index
+    <trim prefix="SET" suffixOverrides=",">
+      <if test="name != null  and name != ''">name = #{name},</if>
+      <if test="code != null  and code != ''">code = #{code},</if>
+      <if test="indexType != null">index_type = #{indexType},</if>
+      <if test="indexCategory != null  and indexCategory != ''">index_category = #{indexCategory},
+      </if>
+      <if test="remark != null  and remark != ''">remark = #{remark},</if>
+      <if test="unitId != null  and unitId != ''">unit_id = #{unitId},</if>
+      <if test="orderNum != null">order_num = #{orderNum},</if>
+      <if test="equipment != null">equipment = #{equipment},</if>
+      <if test="energyId != null">energy_id=#{energyId},</if>
+    </trim>
+    where index_id = #{indexId}
+  </update>
+
+  <delete id="deleteEnergyIndexByIds" parameterType="String">
+    delete from energy_index where index_id in
+    <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
+      #{indexId}
+    </foreach>;
+    delete from node_index where node_id = #{nodeId} and index_id in
+    <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
+      #{indexId}
+    </foreach>;
+  </delete>
+  <delete id="deleteIndexByMeterId">
+    delete
+    from energy_index
+    where meter_id = #{meterId}
+  </delete>
+  <delete id="removeNodeIndex">
+    delete from node_index where node_id = #{nodeId} and index_id in
+    <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
+      #{indexId}
+    </foreach>;
+  </delete>
+
+  <select id="getEnergyIndexMeterByCodes" resultMap="EnergyIndexResult">
+    select ei.index_id,
+        ei.name,
+        ei.code,
+        ei.index_type,
+        ei.index_category,
+        ei.remark,
+        ei.unit_id,
+        ei.meter_id,
+        ei.order_num,
+        ei.equipment,
+        ei.energy_id,
+        meter_name
+        from energy_index as ei,meter_implement as me
+    where ei.code in
+    <foreach item="indexCode" collection="list" open="(" separator="," close=")">
+      #{indexCode}
+    </foreach>
+    and ei.meter_id = me.id
+    order by ei.order_num
+  </select>
+  
+  <select id="selectEnergyIndexPage" resultMap="EnergyIndexResult">
+    select ni.index_id, name, code, index_type, remark, unit_id, index_category
+    from energy_index ei left join node_index ni on ei.index_id = ni.index_id
+    <where>
+      <if test="query.codeOrName != null  and query.codeOrName != ''">and (name like concat('%', #{query.codeOrName},
+        '%') or code like concat('%', #{query.codeOrName}, '%'))
+      </if>
+      <if test="query.indexType != null">and index_type = #{query.indexType}</if>
+      <if test="query.nodeId != null  and query.nodeId != ''">and ni.node_id = #{query.nodeId}</if>
+      <if test="query.indexCategory != null  and query.indexCategory != ''">and index_category =
+        #{query.indexCategory}
+      </if>
+    </where>
+    order by ei.order_num
+    
+  </select>
+    <select id="listIndexByMeterIds" resultType="com.zhitan.model.domain.EnergyIndex">
+      select ei.index_id,
+      name,
+      code,
+      index_type,
+      index_category,
+      remark,
+      unit_id,
+      meter_id,
+      order_num,
+      equipment,
+      energy_id
+      from energy_index ei
+      left join node_index ni on ei.index_id = ni.index_id
+      <where>
+        
+        <if test="nodeId != null  and nodeId != ''">and ni.node_id = #{nodeId}</if>
+        <if test="meterIds != null">
+          and ei.meter_id in
+          <foreach collection="meterIds" item="meterId" open="(" separator="," close=")">
+            #{meterId}
+          </foreach>
+        </if>
+      </where>
+    </select>
+  <select id="getiEnergyIndexByCode" resultType="com.zhitan.model.domain.EnergyIndex">
+    <include refid="selectEnergyIndexVo"/>
+    where code = #{cdoe}
+  </select>
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/model/IndexFormulaMapper.xml b/zhitan-system/target/classes/mapper/model/IndexFormulaMapper.xml
new file mode 100644
index 0000000..a2faccc
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/model/IndexFormulaMapper.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.model.mapper.IndexFormulaMapper">
+    <resultMap id="formulaMap" type="com.zhitan.model.domain.IndexFormula">
+        <result property="id" column="id"/>
+        <result property="indexId" column="index_id"/>
+        <result property="formulaText" column="formula_text"/>
+        <result property="isPvCalc" column="is_pv_calc"/>
+    </resultMap>
+    <resultMap id="formulaParamMap" type="com.zhitan.model.domain.IndexFormulaParam">
+        <result property="formulaId" column="formula_id"/>
+        <result property="paramName" column="param_name"/>
+        <result property="paramValue" column="param_value"/>
+    </resultMap>
+    <insert id="insertIndexFormula">
+    insert into index_formula (id, index_id, formula_text,is_pv_calc)
+    values (#{id}, #{indexId}, #{formulaText},#{isPvCalc});
+  </insert>
+  <insert id="saveIndexFormulaParam">
+    delete
+    from index_formula_param
+    where index_id = #{indexId};
+    <foreach collection="indexFormulaParams" item="formulaParam" separator=";">
+      insert into index_formula_param (id, formula_id,index_id, param_name, param_value) values
+      (#{formulaParam.id}, #{formulaParam.formulaId}, #{formulaParam.indexId},
+      #{formulaParam.paramName},
+      #{formulaParam.paramValue})
+    </foreach>
+  </insert>
+  <update id="updateIndexFormula">
+    update index_formula
+    set formula_text = #{formulaText},is_pv_calc = #{isPvCalc}
+    where id = #{id}
+  </update>
+  <select id="getFormula" resultMap="formulaMap">
+    select *
+    from index_formula
+    where index_id = #{indexId}
+  </select>
+  <select id="getFormulaParam" resultMap="formulaParamMap">
+    select *
+    from index_formula_param
+    where index_id = #{indexId}
+  </select>
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/model/IndexStorageMapper.xml b/zhitan-system/target/classes/mapper/model/IndexStorageMapper.xml
new file mode 100644
index 0000000..a69666a
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/model/IndexStorageMapper.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.model.mapper.IndexStorageMapper">
+    <resultMap id="indexStorageMap" type="com.zhitan.model.domain.IndexStorage">
+        <result property="id" column="id"/>
+        <result property="indexId" column="index_id"/>
+        <result property="timeType" column="time_type"/>
+        <result property="calcType" column="calc_type"/>
+        <result property="calcText" column="calc_text"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="createTime" column="create_time"/>
+        <result property="isPvCalc" column="is_pv_calc"/>
+    </resultMap>
+    <insert id="insertIndexStorage">
+        insert into index_storage (id, index_id, time_type, calc_type, calc_text, create_time,
+                               update_time,is_pv_calc)
+    values (#{id}, #{indexId}, #{timeType}, #{calcType}, #{calcText}, now(), now(),#{isPvCalc});
+  </insert>
+  <insert id="saveParams">
+    delete from storage_parameter where storage_id = #{storageId};
+    <foreach collection="parameterIds" item="paramId" separator=";">
+      insert into storage_parameter (storage_id, index_id)
+      values (#{storageId}, #{paramId});
+    </foreach>
+  </insert>
+  <update id="updateIndexStorage">
+    update index_storage
+    set index_id    = #{indexId},
+        calc_type   = #{calcType},
+        calc_text   = #{calcText},
+        update_time = now(),
+        is_pv_calc = #{isPvCalc}
+    where id = #{id};
+  </update>
+  <select id="getIndexStorage" resultMap="indexStorageMap">
+    select *
+    from index_storage
+    where index_id = #{indexId};
+  </select>
+  <select id="getAllCalcIndexStorage" resultMap="indexStorageMap">
+    select *
+    from index_storage
+    where calc_type = #{calcType}
+  </select>
+    <select id="getAllParameter"
+            resultType="com.zhitan.model.domain.IndexStorageParam">
+        select storage_id as storageId, index_id as indexId
+        from storage_parameter
+    </select>
+  <select id="getWithTimetype" resultMap="indexStorageMap">
+    select *
+    from index_storage
+    where index_id = #{indexId}
+      AND time_type = #{timeType};
+  </select>
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/model/ModelInfoMapper.xml b/zhitan-system/target/classes/mapper/model/ModelInfoMapper.xml
new file mode 100644
index 0000000..2b70da4
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/model/ModelInfoMapper.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.model.mapper.ModelInfoMapper">
+
+    <resultMap type="com.zhitan.model.domain.ModelInfo" id="ModelInfoResult">
+        <result property="modelCode" column="model_code"/>
+        <result property="modelName" column="model_name"/>
+        <result property="isShow" column="is_show"/>
+        <result property="modelType" column="model_type"/>
+    </resultMap>
+
+    <sql id="selectModelInfoVo">
+        select model_code, model_name, is_show, model_type
+        from model_info
+    </sql>
+
+    <select id="selectModelInfoList" parameterType="com.zhitan.model.domain.ModelInfo"
+            resultMap="ModelInfoResult">
+        <include refid="selectModelInfoVo"/>
+        <where>
+            <if test="modelCode != null  and modelCode != ''">and model_code like concat('%', #{modelCode}, '%')</if>
+            <if test="modelName != null  and modelName != ''">and model_name like concat('%', #{modelName}, '%')</if>
+            <if test="isShow != null">and is_show = #{isShow}</if>
+        </where>
+        order by model_code;
+    </select>
+
+    <select id="selectModelInfoById" parameterType="String" resultMap="ModelInfoResult">
+        <include refid="selectModelInfoVo"/>
+        where model_code = #{modelCode}
+    </select>
+
+    <insert id="insertModelInfo" parameterType="ModelInfo">
+        insert into model_info
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="modelCode != null  and modelCode != ''">model_code,</if>
+            <if test="modelName != null  and modelName != ''">model_name,</if>
+            <if test="modelType != null  and modelType != ''">model_type,</if>
+            is_show,
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="modelCode != null  and modelCode != ''">#{modelCode},</if>
+            <if test="modelName != null  and modelName != ''">#{modelName},</if>
+            <if test="modelType != null  and modelType != ''">#{modelType},</if>
+            1,
+        </trim>
+    </insert>
+
+    <update id="updateModelInfo" parameterType="ModelInfo">
+        update model_info
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="modelName != null  and modelName != ''">model_name = #{modelName},</if>
+            <if test="isShow != null ">is_show = #{isShow},</if>
+        </trim>
+        where model_code = #{modelCode}
+    </update>
+
+    <delete id="deleteModelInfoById" parameterType="String">
+        delete
+        from model_info
+        where model_code = #{modelCode}
+    </delete>
+
+    <delete id="deleteModelInfoByCode" parameterType="String">
+        delete
+        from model_info
+        where model_code = #{modelCode};
+    </delete>
+
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/model/ModelNodeMapper.xml b/zhitan-system/target/classes/mapper/model/ModelNodeMapper.xml
new file mode 100644
index 0000000..7fbb5b8
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/model/ModelNodeMapper.xml
@@ -0,0 +1,423 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.model.mapper.ModelNodeMapper">
+
+    <resultMap type="com.zhitan.model.domain.ModelNode" id="ModelNodeResult">
+        <result property="nodeId" column="node_id"/>
+        <result property="code" column="code"/>
+        <result property="name" column="name"/>
+        <result property="parentId" column="parent_id"/>
+        <result property="address" column="address"/>
+        <result property="modelCode" column="model_code"/>
+        <result property="nodeCategory" column="node_category"/>
+    </resultMap>
+
+    <sql id="selectModelNodeVo">
+        select node_id, code, name, parent_id, address, model_code, node_category
+        from model_node
+    </sql>
+
+    <select id="selectModelNodeList"
+            parameterType="com.zhitan.model.domain.ModelNode"
+            resultMap="ModelNodeResult">
+        <include refid="selectModelNodeVo"/>
+        <where>
+            <if test="code != null  and code != ''">and code like concat('%', #{code}, '%')</if>
+            <if test="name != null  and name != ''">and name like concat('%', #{name}, '%')</if>
+        </where>
+        order by order_num
+    </select>
+
+    <select id="selectModelNodeById" parameterType="String" resultMap="ModelNodeResult">
+        <include refid="selectModelNodeVo"/>
+        where node_id = #{nodeId}
+    </select>
+    <select id="getModelNodeByModelCode" resultMap="ModelNodeResult">
+        <include refid="selectModelNodeVo"/>
+        where model_code = #{modelCode}
+        order by order_num
+    </select>
+    <select id="getMaxOrder" resultType="java.lang.Integer">
+        select COALESCE(max(order_num), 0)
+        from model_node
+        where parent_id = #{parentId}
+    </select>
+    <select id="modelNodeHasExist" resultType="java.lang.Integer">
+        select count(*)
+        from model_node
+        where code = #{code}
+          and model_code = #{modelCode};
+    </select>
+    <select id="modelNodeHasExistWhenUpdate" resultType="java.lang.Integer">
+        select count(*)
+        from model_node
+        where code = #{code}
+          and model_code = #{modelCode}
+          AND node_id != #{nodeId};
+    </select>
+    <select id="getSettingDevice"
+            resultType="com.zhitan.basicdata.domain.MeterImplement">
+        select id, code, meter_name as meterName
+        from meter_implement m
+                 left join node_device nd on m.id = nd.device_id
+        where nd.node_id = #{nodeId};
+    </select>
+    <select id="getSettingIndex"
+            resultType="com.zhitan.model.domain.EnergyIndex">
+        select ei.index_id as indexId, code, name, index_type as indexType
+        from energy_index ei
+                 left join node_index ni on ei.index_id = ni.index_id
+        where ni.node_id = #{nodeId}
+    </select>
+    <select id="getSettingEnergy"
+            resultType="com.zhitan.basicdata.domain.SysEnergy">
+        select enerid, enersno, enername
+        from sys_energy e
+                 left join node_energy ne on e.enerid = ne.energy_id
+        where ne.node_id = #{nodeId};
+    </select>
+    <select id="getSettingProduct"
+            resultType="com.zhitan.basicdata.domain.SysProduct">
+        select productid, productsno, productname
+        from sys_product p
+                 left join node_product np on p.productid = np.product_id
+        where np.node_id = #{nodeId};
+    </select>
+    <select id="getSettingIndexByType"
+            resultType="com.zhitan.model.domain.EnergyIndex">
+        select ei.index_id as indexId, code, name, index_type as indexType
+        from energy_index ei
+                 left join node_index ni on ei.index_id = ni.index_id
+        where ni.node_id = #{nodeId}
+          and ei.index_type = #{indexType}
+        <if test="code != null  and code != ''">
+            and code like concat('%', #{code}, '%')
+        </if>
+        <if test="name != null  and name != ''">
+            and name like concat('%', #{name}, '%')
+        </if>
+    </select>
+    <select id="getModelNodeByNodeCodes" resultMap="ModelNodeResult">
+        <include refid="selectModelNodeVo"/>
+        where code in
+        <foreach item="nodeCode" collection="list" open="(" separator="," close=")">
+            #{nodeCode}
+        </foreach>
+        order by order_num
+    </select>
+    <select id="getModelNodeByModelCodeWithAuth" resultMap="ModelNodeResult">
+        <include refid="selectModelNodeVo"/>
+        where model_code = #{modelCode}
+        and (
+        node_id in (
+        select node_id from data_auth_user where user_id = #{userId} and model_code = #{modelCode}
+        )
+        or node_id in (
+        select node_id from data_auth_role where role_id in (
+        select cast(r.role_id as varchar) from sys_role r
+        left join sys_user_role ur on ur.role_id = r.role_id
+        left join sys_user u on u.user_id = ur.user_id
+        where cast(u.user_id as VARCHAR) = #{userId}
+        ) and model_code = #{modelCode}
+        )
+        )
+        order by order_num
+    </select>
+
+    <insert id="insertModelNode"
+            parameterType="com.zhitan.model.domain.ModelNode">
+        insert into model_node
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="nodeId != null  and nodeId != ''">node_id,</if>
+            <if test="code != null  and code != ''">code,</if>
+            <if test="name != null  and name != ''">name,</if>
+            <if test="parentId != null  and parentId != ''">parent_id,</if>
+            <if test="address != null  and address != ''">address,</if>
+            <if test="modelCode != null  and modelCode != ''">model_code,</if>
+            <if test="nodeCategory != null  and nodeCategory != ''">node_category,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="nodeId != null  and nodeId != ''">#{nodeId},</if>
+            <if test="code != null  and code != ''">#{code},</if>
+            <if test="name != null  and name != ''">#{name},</if>
+            <if test="parentId != null  and parentId != ''">#{parentId},</if>
+            <if test="address != null  and address != ''">#{address},</if>
+            <if test="modelCode != null  and modelCode != ''">#{modelCode},</if>
+            <if test="nodeCategory != null  and nodeCategory != ''">#{nodeCategory},</if>
+        </trim>
+    </insert>
+    <insert id="setDevice">
+        delete
+        from node_device
+        where node_id = #{nodeId};
+        <foreach collection="deviceIds" item="deviceId" separator=";">
+            insert into node_device (node_id, device_id)
+            values (#{nodeId}, #{deviceId})
+        </foreach>
+    </insert>
+    <insert id="setEnergy">
+        delete
+        from node_energy
+        where node_id = #{nodeId};
+        <foreach collection="energyIds" item="energyId" separator=";">
+            insert into node_energy (node_id, energy_id)
+            values (#{nodeId}, #{energyId})
+        </foreach>
+    </insert>
+    <insert id="setProduct">
+        delete
+        from node_product
+        where node_id = #{nodeId};
+        <foreach collection="productIds" item="productId" separator=";">
+            insert into node_product (node_id, product_id)
+            values (#{nodeId}, #{productId})
+        </foreach>
+    </insert>
+
+    <update id="updateModelNode"
+            parameterType="com.zhitan.model.domain.ModelNode">
+        update model_node
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="code != null  and code != ''">code = #{code},</if>
+            <if test="name != null  and name != ''">name = #{name},</if>
+            <if test="parentId != null  and parentId != ''">parent_id = #{parentId},</if>
+            <if test="address != null  and address != ''">address = #{address},</if>
+            <if test="modelCode != null  and modelCode != ''">model_code = #{modelCode},</if>
+            <if test="nodeCategory != null and nodeCategory != ''">node_category = #{nodeCategory},</if>
+        </trim>
+        where node_id = #{nodeId}
+    </update>
+    <update id="updateModelNodeParent">
+        update model_node
+        set parent_id = #{parentId}
+        where node_id = #{nodeId};
+
+        update model_node
+        set address = replace(address, (select address from model_node where node_id = #{nodeId}),
+                              (select address ||
+                                      (select code from model_node where node_id = #{nodeId}) ||
+                                      ','
+                               from model_node
+                               where node_id = #{parentId}))
+        where parent_id = #{nodeId}
+           or node_id = #{nodeId};
+    </update>
+    <update id="updateModelNodeOrder">
+        <foreach collection="orders" index="id" item="order" separator=";">
+            update model_node
+            set order_num = #{order}
+            where node_id = #{id}
+        </foreach>
+    </update>
+    <update id="setIndex">
+        delete
+        from node_index
+        where node_id = #{nodeId} and index_id in (select ni.index_id
+        from node_index ni left join energy_index ei on ni.index_id = ei.index_id
+        where node_id = #{nodeId} and ei.index_type = #{indexType});
+        <foreach collection="indexIds" item="indexId" separator=";">
+            insert into node_index (node_id, index_id)
+            values (#{nodeId}, #{indexId})
+        </foreach>
+    </update>
+
+    <delete id="deleteModelNodeById" parameterType="String">
+        delete
+        from model_node
+        where node_id = #{nodeId}
+    </delete>
+
+    <delete id="deleteModelNodeByIds" parameterType="String">
+        delete from model_node where node_id in
+        <foreach item="nodeId" collection="array" open="(" separator="," close=")">
+            #{nodeId}
+        </foreach>
+    </delete>
+    <delete id="delDevice">
+        delete
+        from node_device
+        where node_id = #{nodeId} and device_id in
+        <foreach item="deviceId" collection="deviceIds" open="(" separator="," close=")">
+            #{deviceId}
+        </foreach>
+    </delete>
+    <delete id="delEnergy">
+        delete
+        from node_energy
+        where node_id = #{nodeId} and energy_id in
+        <foreach item="energyId" collection="energyIds" open="(" separator="," close=")">
+            #{energyId}
+        </foreach>
+    </delete>
+    <delete id="delProduct">
+        delete
+        from node_product
+        where node_id = #{nodeId} and product_id in
+        <foreach item="productId" collection="productIds" open="(" separator="," close=")">
+            #{productId}
+        </foreach>
+    </delete>
+    <delete id="delIndex">
+        delete
+        from node_index
+        where node_id = #{nodeId} and index_id in
+        <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
+            #{indexId}
+        </foreach>
+    </delete>
+
+    <select id="getSettingIndexByWhere"
+            resultType="com.zhitan.model.domain.EnergyIndex">
+        select ei.index_id as indexId, code, name, index_type as indexType
+        from energy_index ei
+        left join node_index ni on ei.index_id = ni.index_id
+        where ni.node_id = #{nodeId}
+        <if test="indexName!=null and indexName!=''">
+            and ei.name like concat('%', #{indexName}, '%')
+        </if>
+    </select>
+
+    <select id="listIndesxByCodeList" resultType="java.lang.String">
+        SELECT
+        index_id
+        FROM
+        "node_index"
+        WHERE
+        node_id IN
+        <foreach item="nodeId" collection="nodeIds" open="(" separator="," close=")">
+            #{nodeId}
+        </foreach>
+    </select>
+
+    <select id="getModelNodeIndexIdRelationInforByCode"
+            resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
+        SELECT mn.node_id  nodeId,
+               mn."name"   "name",
+               ni.index_id indexId
+        FROM "model_node" mn
+                 LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
+        WHERE mn.model_code = #{code}
+          AND mn.parent_id IS NOT NULL
+    </select>
+
+    <select id="listModelNodeIndexIdRelationInforByParentId"
+            resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
+        SELECT mn.node_id  nodeId,
+               mn."name"   "name",
+               ni.index_id indexId
+        FROM "model_node" mn
+                 LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
+        WHERE mn.parent_id = #{parentId}
+    </select>
+
+    <select id="getModelNodeIndexIdRelationInforByNodeId"
+            resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
+        SELECT mn.node_id  nodeId,
+               mn."name"   "name",
+               ni.index_id indexId
+        FROM "model_node" mn
+                 LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
+        WHERE mn.node_id = #{nodeId}
+    </select>
+
+    <select id="getModelNodeByModelCodeByIndexCode" resultType="com.zhitan.model.domain.ModelNode">
+        SELECT node_id       nodeId,
+               code,
+               "name",
+               parent_id     parentId,
+               address,
+               model_code    modelCode,
+               node_category nodeCategory
+        FROM "model_node"
+        WHERE model_code = #{indexCode}
+          AND parent_id IS NULL LIMIT 1;
+    </select>
+    <select id="selectIndexByModelCodeAndNodeId"
+            resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
+        SELECT mn.node_id nodeId,
+               mn."name",
+               ni.index_id indexId
+        FROM model_node mn
+                 LEFT JOIN node_index ni ON ni.node_id = mn.node_id
+        WHERE mn.model_code = #{modelCode}
+          AND mn.node_id = #{nodeId}
+    </select>
+
+    <select id="getSettingDeviceIndex" resultType="com.zhitan.basicdata.domain.MeterImplement">
+        SELECT distinct
+               m."id",
+               m.code,
+               m.meter_name AS meterName,
+               m.meter_type    meterType,
+               m.wire_diameter    wireDiameter,
+               m.max_allowable_power    maxAllowablePower
+        FROM meter_implement m
+                 LEFT JOIN energy_index ei ON ei.meter_id = m."id"
+                 LEFT JOIN node_index ni ON ni.index_id = ei.index_id
+        WHERE ni.node_id = #{nodeId}
+        <if test="energyType!=null and energyType!=''">
+            AND M.energy_type = #{energyType}
+        </if>
+    </select>
+
+    <delete id="delIndexNodeIdAndIndexType">
+        delete
+        from node_index
+        where node_id = #{nodeId} and index_id in (
+            select ni.index_id
+            from node_index ni left join energy_index ei on ni.index_id = ei.index_id
+            where node_id = #{nodeId} and ei.index_type = #{indexType}
+        );
+    </delete>
+    <insert id="setIndexAndNodeId">
+        <foreach collection="indexIds" item="indexId" separator=";">
+            insert into node_index (node_id, index_id)
+            values (#{nodeId}, #{indexId})
+        </foreach>
+    </insert>
+    
+    <select id="getModelNodeIndexIdByNodeId" resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
+        SELECT mn.node_id  nodeId,
+               mn."name"   "name",
+               ni.index_id indexId,
+               ei.energy_id energyId
+        FROM "model_node" mn
+        LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
+        LEFT JOIN energy_index ei on ni.index_id = ei.index_id
+        WHERE ni.node_id = #{nodeId} 
+        <if test="energyType!=null and energyType!=''">
+            and ei.energy_id = #{energyType}
+        </if>
+    </select>
+    <select id="getModelNodeByParentId" resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
+        SELECT mn.node_id  nodeId,
+               mn."name"   "name",
+               ni.index_id indexId,
+               ei.energy_id
+        FROM "model_node" mn
+                 LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
+                 left join energy_index ei on ni.index_id = ei.index_id
+        WHERE mn.parent_id = #{parentId} and ei.index_type = 'STATISTIC'
+    </select>
+    <select id="getFirstModeNodeInfo" resultType="com.zhitan.model.domain.ModelNode">
+        <include refid="selectModelNodeVo"/>
+        where model_code = #{modelCode}  AND parent_id is null
+        order by order_num 
+    </select>
+    <select id="selectIndexByNodeIds" resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
+        SELECT mn.node_id  nodeId,
+        mn."name"   "name",
+        ni.index_id indexId,
+        ei.energy_id
+        FROM "model_node" mn
+        LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
+        left join energy_index ei on ni.index_id = ei.index_id
+        WHERE mn.model_code = #{modelCode}
+          AND mn.node_id in
+        <foreach collection="nodeIds" index="index" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </select>
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/peakvalley/ElectricityDataItemMapper.xml b/zhitan-system/target/classes/mapper/peakvalley/ElectricityDataItemMapper.xml
new file mode 100644
index 0000000..6680811
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/peakvalley/ElectricityDataItemMapper.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.peakvalley.mapper.PeakValleyMapper">
+
+
+    <select id="getDataStatistics"
+            resultType="com.zhitan.peakvalley.domain.ElectricityDataItem">
+        SELECT
+        index_code indexCode,
+        time_code timeCode,
+        electricity_type electricityType,
+        data_time dataTime,
+        electricity,
+        "cost",
+        time_type timeType,
+        price,
+        remark
+        FROM
+        "electricity_data_item"
+        WHERE
+        index_id IN
+        <foreach collection="indexIdSet" item="indexId" open="(" separator="," close=")">
+            #{indexId}
+        </foreach>
+        AND (data_time BETWEEN #{startTime} AND #{endTime})
+        AND time_type = #{timeType}
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/zhitan-system/target/classes/mapper/peakvalley/ElectricityPriceDateMapper.xml b/zhitan-system/target/classes/mapper/peakvalley/ElectricityPriceDateMapper.xml
new file mode 100644
index 0000000..9e56581
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/peakvalley/ElectricityPriceDateMapper.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.peakvalley.mapper.ElectricityPriceDateMapper">
+
+    <resultMap type="com.zhitan.peakvalley.domain.ElectricityPriceDate" id="ElectricityPriceDateResult">
+        <result property="id"    column="id"    />
+        <result property="beginDate"    column="begin_date"    />
+        <result property="endDate"    column="end_date"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectElectricityPriceDateVo">
+        select id, begin_date, end_date, create_by, create_time, update_by, update_time, remark from electricity_price_date
+    </sql>
+
+    <select id="selectElectricityPriceDateList" parameterType="com.zhitan.peakvalley.domain.ElectricityPriceDate" resultMap="ElectricityPriceDateResult">
+        <include refid="selectElectricityPriceDateVo"/>
+        <where>
+            <if test="beginDate != null "> and begin_date = #{beginDate}</if>
+            <if test="endDate != null "> and end_date = #{endDate}</if>
+        </where>
+    </select>
+
+    <select id="selectElectricityPriceDateById" parameterType="String" resultMap="ElectricityPriceDateResult">
+        <include refid="selectElectricityPriceDateVo"/>
+        where  id = #{id}
+    </select>
+
+    <insert id="insertElectricityPriceDate" parameterType="com.zhitan.peakvalley.domain.ElectricityPriceDate">
+        insert into electricity_price_date
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null and id != ''">id,</if>
+            <if test="beginDate != null">begin_date,</if>
+            <if test="endDate != null">end_date,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null and id != ''">#{id},</if>
+            <if test="beginDate != null">#{beginDate},</if>
+            <if test="endDate != null">#{endDate},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+        </trim>
+    </insert>
+
+    <update id="updateElectricityPriceDate" parameterType="com.zhitan.peakvalley.domain.ElectricityPriceDate">
+        update electricity_price_date
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="beginDate != null">begin_date = #{beginDate},</if>
+            <if test="endDate != null">end_date = #{endDate},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteElectricityPriceDateById" parameterType="String">
+        delete from electricity_price_date where id = #{id}
+    </delete>
+
+    <delete id="deleteElectricityPriceDateByIds" parameterType="String">
+        delete from electricity_price_date where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/zhitan-system/target/classes/mapper/peakvalley/EletricityPriceMapper.xml b/zhitan-system/target/classes/mapper/peakvalley/EletricityPriceMapper.xml
new file mode 100644
index 0000000..8ef89e6
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/peakvalley/EletricityPriceMapper.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.peakvalley.mapper.ElectricityPriceMapper">
+
+    <resultMap type="ElectricityPrice" id="ElectricityPriceResult">
+        <result property="id"    column="id"    />
+        <result property="parentId"    column="parent_id"    />
+        <result property="type"    column="type"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="stopTime"    column="stop_time"    />
+        <result property="effecticityPrice"    column="effecticity_price"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectElectricityPriceVo">
+        select id, parent_id, type, start_time, stop_time, effecticity_price, create_by, create_time, update_by, update_time, remark from electricity_price
+    </sql>
+
+    <select id="selectElectricityPriceList" parameterType="ElectricityPrice" resultMap="ElectricityPriceResult">
+        <include refid="selectElectricityPriceVo"/>
+        <where>
+            <if test="parentId != null  and parentId != ''"> and parent_id = #{parentId}</if>
+            <if test="type != null  and type != ''"> and type = #{type}</if>
+            <if test="startTime != null "> and start_time = #{startTime}</if>
+            <if test="stopTime != null "> and stop_time = #{stopTime}</if>
+            <if test="effecticityPrice != null  and effecticityPrice != ''"> and effecticity_price = #{effecticityPrice}</if>
+        </where>
+    </select>
+
+    <select id="selectElectricityPriceById" parameterType="String" resultMap="ElectricityPriceResult">
+        <include refid="selectElectricityPriceVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertElectricityPrice" parameterType="ElectricityPrice">
+        insert into electricity_price
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null and id != ''">id,</if>
+            <if test="parentId != null and parentId != ''">parent_id,</if>
+            <if test="type != null">type,</if>
+            <if test="startTime != null">start_time,</if>
+            <if test="stopTime != null">stop_time,</if>
+            <if test="effecticityPrice != null">effecticity_price,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null and id != ''">#{id},</if>
+            <if test="parentId != null and parentId != ''">#{parentId},</if>
+            <if test="type != null">#{type},</if>
+            <if test="startTime != null">#{startTime},</if>
+            <if test="stopTime != null">#{stopTime},</if>
+            <if test="effecticityPrice != null">#{effecticityPrice},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+        </trim>
+    </insert>
+
+    <update id="updateElectricityPrice" parameterType="ElectricityPrice">
+        update electricity_price
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="parentId != null and parentId != ''">parent_id = #{parentId},</if>
+            <if test="type != null">type = #{type},</if>
+            <if test="startTime != null">start_time = #{startTime},</if>
+            <if test="stopTime != null">stop_time = #{stopTime},</if>
+            <if test="effecticityPrice != null">effecticity_price = #{effecticityPrice},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteElectricityPriceById" parameterType="String">
+        delete from electricity_price where id = #{id}
+    </delete>
+
+    <delete id="deleteElectricityPriceByIds" parameterType="String">
+        delete from electricity_price where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/zhitan-system/target/classes/mapper/realtimedata/PeriodDataMapper.xml b/zhitan-system/target/classes/mapper/realtimedata/PeriodDataMapper.xml
new file mode 100644
index 0000000..f878bf7
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/realtimedata/PeriodDataMapper.xml
@@ -0,0 +1,501 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.realtimedata.mapper.PeriodDataMapper">
+  <resultMap id="dataItemMap" type="com.zhitan.realtimedata.domain.DataItem">
+    <id column="index_id" property="indexId"/>
+    <id column="time_code" property="timeCode"/>
+    <id column="index_code" property="indexCode"/>
+    <id column="index_name" property="indexName"/>
+    <result column="begin_time" property="beginTime"/>
+    <result column="end_time" property="endTime"/>
+    <result column="data_time" property="dataTime"/>
+    <result column="value" property="value"/>
+    <result column="time_type" property="timeType"/>
+    <result column="quality" property="quality"/>
+    <result column="unit_id" property="unitId"/>
+    <result column="create_time" property="createTime"/>
+    <result column="update_time" property="updateTime"/>
+    <result column="remark" property="remark"/>
+  </resultMap>
+
+  <resultMap id="statisticResultMap" type="com.zhitan.realtimedata.domain.StatisticResult">
+    <id column="index_id" property="indexId"/>
+    <id column="index_code" property="indexCode"/>
+    <id column="index_name" property="indexName"/>
+    <result column="unit_id" property="unitId"/>
+    <result column="maxvalue" property="maxValue"/>
+    <result column="minvalue" property="minValue"/>
+    <result column="avgvalue" property="avgValue"/>
+  </resultMap>
+  <delete id="delete">
+    DELETE
+    FROM data_item
+    WHERE index_id = #{indexId}
+      AND time_type = #{timeType}
+      AND data_time &gt;= #{beginTime}
+      AND data_time &lt;= #{endTime}
+  </delete>
+
+  <sql id="itemHead">
+    SELECT di.index_id,
+           di.time_code,
+           di.time_type,
+           di.begin_time,
+           di.end_time,
+           di.data_time,
+           di.value,
+           di.quality,
+           di.create_time,
+           di.update_time,
+           ci.code AS "index_code",
+           ci.name AS "index_name"
+    FROM data_item di
+           LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+  </sql>
+
+  <select id="getDataByIndex" resultMap="dataItemMap">
+    <include refid="itemHead"/>
+    WHERE di.index_id = #{indexId}
+    AND di.time_code = #{timeCode}
+  </select>
+  <select id="hasExist" resultType="java.lang.String">
+    SELECT index_id
+    FROM data_item
+    WHERE index_id = #{indexId}
+      AND time_code = #{timeCode}
+  </select>
+  <select id="getDatasByIndex" resultMap="dataItemMap">
+    <include refid="itemHead"/>
+    where di.time_code = #{timeCode}
+    AND di.index_id in
+    <foreach item="indexId" index="index" collection="indexIds"
+      open="(" separator="," close=")">
+      #{indexId}
+    </foreach>
+  </select>
+  <select id="getPeriodDatasByIndex" resultMap="dataItemMap">
+    <include refid="itemHead"/>
+    WHERE di.index_id in
+    <foreach item="indexId" index="index" collection="indexIds"
+      open="(" separator="," close=")">
+      #{indexId}
+    </foreach>
+    AND di.time_type = #{timeType}
+    AND di.data_time &gt;= #{beginTime}
+    AND di.data_time &lt; #{endTime}
+  </select>
+  <select id="dataStatisticsByIndex" resultType="java.lang.Double">
+    SELECT
+    <if test="statisticType.name() == 'Sum'">
+      sum(value)
+    </if>
+    <if test="statisticType.name() == 'Max'">
+      max(value)
+    </if>
+    <if test="statisticType.name() == 'Min'">
+      min(value)
+    </if>
+    <if test="statisticType.name() == 'Average'">
+      avg(value)
+    </if>
+    FROM data_item
+    WHERE index_id = #{indexId}
+    AND time_type = #{timeType}
+    AND data_time &gt;= #{beginTime}
+    AND data_time &lt; #{endTime}
+  </select>
+
+  <select id="dataStatisticsByIndexs" resultMap="dataItemMap">
+    SELECT
+    <if test="statisticType.name() == 'Sum'">
+      sum(value)
+    </if>
+    <if test="statisticType.name() == 'Max'">
+      max(value)
+    </if>
+    <if test="statisticType.name() == 'Min'">
+      min(value)
+    </if>
+    <if test="statisticType.name() == 'Average'">
+      avg(value)
+    </if>
+    AS value,
+    i.code as index_code,
+    i.name as index_name,
+    i.unit_id,
+    d.index_id
+    FROM data_item d
+    LEFT JOIN energy_index i ON d.index_id = i.index_id
+    WHERE d.index_id in
+    <foreach item="indexId" index="index" collection="indexIds"
+      open="(" separator="," close=")">
+      #{indexId}
+    </foreach>
+    AND time_type = #{timeType}
+    AND data_time &gt;= #{beginTime}
+    AND data_time &lt; #{endTime}
+    GROUP BY d.index_id, i.code, i.unit_id, i.name
+  </select>
+
+  <select id="dataStatisticsByCodes" resultMap="dataItemMap">
+    SELECT
+    <if test="statisticType.name() == 'Sum'">
+      sum(value)
+    </if>
+    <if test="statisticType.name() == 'Max'">
+      max(value)
+    </if>
+    <if test="statisticType.name() == 'Min'">
+      min(value)
+    </if>
+    <if test="statisticType.name() == 'Average'">
+      avg(value)
+    </if>
+    AS value,
+    i.code as index_code,
+    i.name as index_name,
+    i.unit_id,
+    d.index_id
+    FROM data_item d
+    LEFT JOIN energy_index i ON d.index_id = i.index_id
+    WHERE
+    i.code IN
+    <foreach item="indexCode" index="index" collection="indexCodes"
+      open="(" separator="," close=")">
+      #{indexCode}
+    </foreach>
+    AND time_type = #{timeType}
+    AND data_time &gt;= #{beginTime}
+    AND data_time &lt; #{endTime}
+    GROUP BY d.index_id, i.code, i.unit_id, i.name
+  </select>
+
+  <select id="dataStatisticsFilterByCodes" resultMap="dataItemMap">
+    SELECT
+    <if test="statisticType.name() == 'Sum'">
+      sum(value)
+    </if>
+    <if test="statisticType.name() == 'Max'">
+      max(value)
+    </if>
+    <if test="statisticType.name() == 'Min'">
+      min(value)
+    </if>
+    <if test="statisticType.name() == 'Average'">
+      avg(value)
+    </if>
+    AS value,
+    i.code as index_code,
+    i.name as index_name,
+    i.unit_id,
+    d.index_id
+    FROM data_item d
+    LEFT JOIN energy_index i ON d.index_id = i.index_id
+    WHERE
+    i.code IN
+    <foreach item="indexCode" index="index" collection="indexCodes"
+      open="(" separator="," close=")">
+      #{indexCode}
+    </foreach>
+    AND time_type = #{timeType}
+    AND data_time &gt;= #{beginTime}
+    AND data_time &lt; #{endTime}
+    <if test="isFilter == true">
+      AND value > 0
+    </if>
+    GROUP BY d.index_id, i.code, i.unit_id, i.name
+  </select>
+
+  <select id="statistic" resultMap="dataItemMap">
+    SELECT
+    d.index_id,
+    time_code,
+    data_time,
+    i.code as index_code,
+    i.name as index_name,
+    i.unit_id,
+    VALUE
+    FROM
+    data_item d
+    LEFT JOIN energy_index i ON d.index_id = i.index_id
+    WHERE
+    d.index_id in
+    <foreach item="indexId" index="index" collection="indexIds"
+      open="(" separator="," close=")">
+      #{indexId}
+    </foreach>
+    AND data_time &gt;= #{beginTime}
+    AND data_time &lt; #{endTime}
+    AND time_type = #{timeType}
+    GROUP BY
+    d.index_id, time_code, data_time, value, i.code, i.unit_id, i.name
+  </select>
+
+  <select id="statisticByCode" resultMap="dataItemMap">
+    SELECT
+    d.index_id,
+    time_code,
+    data_time,
+    i.code as index_code,
+    i.name as index_name,
+    i.unit_id,
+    value
+    FROM
+    data_item d
+    LEFT JOIN energy_index i ON d.index_id = i.index_id
+    WHERE
+    i.code IN
+    <foreach item="indexCode" index="index" collection="indexCodes"
+      open="(" separator="," close=")">
+      #{indexCode}
+    </foreach>
+    AND data_time &gt;= #{beginTime}
+    AND data_time &lt;= #{endTime}
+    AND time_type = #{timeType}
+    GROUP BY
+    d.index_id, time_code, data_time, value, i.code, i.unit_id, i.name
+  </select>
+
+  <select id="getStatisticDatasById" resultMap="statisticResultMap">
+    SELECT
+    d.index_id,
+    i.code as index_code,
+    i.unit_id,
+    i.name as index_name,
+    MAX(value) as "maxvalue",
+    min(value) as minvalue,
+    avg(value) as avgvalue
+    FROM
+    data_item d
+    LEFT JOIN energy_index i ON d.index_id = i.index_id
+    WHERE
+    d.index_id in
+    <foreach item="indexId" index="index" collection="indexIds"
+      open="(" separator="," close=")">
+      #{indexId}
+    </foreach>
+    AND time_type = #{timeType}
+    GROUP BY
+    d.index_id, i.code, i.unit_id, i.name
+  </select>
+
+  <select id="getStatisticDatasByCode" resultMap="statisticResultMap">
+    SELECT
+    d.index_id,
+    i.code as index_code,
+    i.name as index_name,
+    i.unit_id,
+    MAX(value) as "maxvalue",
+    min(value) as minvalue,
+    avg(value) as avgvalue
+    FROM
+    data_item d
+    LEFT JOIN energy_index i ON d.index_id = i.index_id
+    WHERE
+    i.code IN
+    <foreach item="indexCode" index="index" collection="indexCodes"
+      open="(" separator="," close=")">
+      #{indexCode}
+    </foreach>
+    AND time_type = #{timeType}
+    GROUP BY
+    d.index_id, i.code, i.unit_id, i.name
+  </select>
+
+  <insert id="insert">
+    INSERT INTO data_item (index_id,
+                           time_code,
+                           time_type,
+                           begin_time,
+                           end_time,
+                           data_time,
+                           value,
+                           quality,
+                           create_time)
+    VALUES (#{dataItem.indexId},
+            #{dataItem.timeCode},
+            #{dataItem.timeType},
+            #{dataItem.beginTime},
+            #{dataItem.endTime},
+            #{dataItem.dataTime},
+            #{dataItem.value, jdbcType = DOUBLE},
+            #{dataItem.quality},
+            now())
+  </insert>
+
+  <insert id="save">
+    insert into data_item (index_id,
+                           time_code,
+                           time_type,
+                           begin_time,
+                           end_time,
+                           data_time,
+                           value,
+                           quality,
+                           create_time)
+    select #{dataItem.indexId},
+           #{dataItem.timeCode},
+           #{dataItem.timeType},
+           #{dataItem.beginTime},
+           #{dataItem.endTime},
+           #{dataItem.dataTime},
+           #{dataItem.value, jdbcType = DOUBLE},
+           #{dataItem.quality},
+           now()
+    on conflict
+      (index_id,time_code)
+    do update
+    set value = #{dataItem.value, jdbcType = DOUBLE},
+      quality = #{dataItem.quality},
+      update_time = now();
+
+  </insert>
+  <insert id="saveDataList" parameterType="java.util.List">
+    <foreach item="dataItem" collection="dataItemVlues">
+      <if test="dataItem != null">
+        insert into data_item (index_id,
+        time_code,
+        time_type,
+        begin_time,
+        end_time,
+        data_time,
+        value,
+        quality,
+        create_time)
+        select #{dataItem.indexId},
+        #{dataItem.timeCode},
+        #{dataItem.timeType},
+        #{dataItem.beginTime},
+        #{dataItem.endTime},
+        #{dataItem.dataTime},
+        #{dataItem.value, jdbcType = DOUBLE},
+        #{dataItem.quality},
+        now()
+        on conflict(index_id,time_code)
+        do update
+        set value= #{dataItem.value, jdbcType = DOUBLE},
+        quality = #{dataItem.quality},
+        update_time = now();
+      </if>
+    </foreach>
+  </insert>
+  <insert id="insertDataList">
+    insert into data_item (index_id, time_code,
+    time_type,
+    begin_time,
+    end_time,
+    data_time,
+    value,
+    quality,
+    create_time)
+    values
+    <foreach collection="list" item="dataItem" index="index" separator=",">
+      (#{dataItem.indexId},
+        #{dataItem.timeCode},
+        #{dataItem.timeType},
+        #{dataItem.beginTime},
+        #{dataItem.endTime},
+        #{dataItem.dataTime},
+        #{dataItem.value, jdbcType = DOUBLE},
+        #{dataItem.quality},
+        now())
+    </foreach>
+  </insert>
+    <insert id="insertTOUData">
+        insert into electricity_data_item (index_id, time_code,
+                                           electricity_type,
+                                           index_code,
+                                           data_time,
+                                           begin_time,
+                                           end_time,
+                                           electricity,
+                                           cost,
+                                           price,
+                                           create_time,
+                                           time_type)
+        values (#{dataItem.indexId},
+                #{dataItem.timeCode},
+                #{dataItem.electricityType},
+                #{dataItem.indexCode},
+                #{dataItem.dataTime},
+                #{dataItem.beginTime},
+                #{dataItem.endTime},
+                #{dataItem.electricity, jdbcType = DOUBLE},
+                #{dataItem.cost, jdbcType = DOUBLE},
+                #{dataItem.price, jdbcType = DOUBLE},
+                now(),
+                #{dataItem.timeType})
+          ON CONFLICT (index_id, time_code,electricity_type)
+            DO UPDATE SET electricity = EXCLUDED.electricity,cost = EXCLUDED.cost,price = EXCLUDED.price;
+    </insert>
+  <insert id="insertTOUDataItems">
+      insert into electricity_data_item (index_id, time_code,
+      electricity_type,
+      index_code,
+      data_time,
+      begin_time,
+      end_time,
+      electricity,
+      cost,
+      price,
+      create_time,
+      time_type)
+      values
+      <foreach collection="dataItems" item="dataItem" index="index" separator=",">
+          values (#{dataItem.indexId},
+          #{dataItem.timeCode},
+          #{dataItem.electricityType},
+          #{dataItem.indexCode},
+          #{dataItem.dataTime},
+          #{dataItem.beginTime},
+          #{dataItem.endTime},
+          #{dataItem.electricity, jdbcType = DOUBLE},
+          #{dataItem.cost, jdbcType = DOUBLE},
+          #{dataItem.price, jdbcType = DOUBLE},
+          now(),
+          #{dataItem.timeType})
+      </foreach>
+      ON CONFLICT (index_id, time_code,electricity_type)
+      DO UPDATE SET electricity = EXCLUDED.electricity,cost = EXCLUDED.cost,price = EXCLUDED.price;
+  </insert>
+
+  <update id="update">
+    UPDATE data_item
+    SET value       = #{dataItem.value, jdbcType = DOUBLE},
+        quality     = #{dataItem.quality},
+        update_time = now()
+    WHERE index_id = #{dataItem.indexId}
+      AND time_code = #{dataItem.timeCode}
+  </update>
+  <select id="getPeriodDatasByIndexAndQuality" resultMap="dataItemMap">
+    SELECT index_id, time_code, time_type, begin_time, end_time, data_time, `value`, quality,
+    create_time, update_time
+    FROM data_item
+    WHERE index_id in
+    <foreach item="indexId" index="index" collection="indexIds"
+      open="(" separator="," close=")">
+      #{indexId}
+    </foreach>
+    AND time_type = #{timeType}
+    AND data_time &gt;= #{beginTime}
+    AND data_time &lt; #{endTime}
+    AND quality = #{quality}
+  </select>
+  <select id="getDataByIndexCode" resultMap="dataItemMap">
+    <include refid="itemHead"/>
+    WHERE ci.code = #{indexCode}
+    AND di.time_code = #{timeCode}
+  </select>
+  <select id="queryDataItemIsExist" resultType="java.lang.String">
+    select concat(time_code, ':', index_id)
+    from data_item where
+    <foreach collection="queryMap.keys" index="index" item="key" separator="or">
+      (time_code = #{key} and index_id in
+      <foreach collection="queryMap[key]" item="id" separator="," open="(" close=")">
+        #{id}
+      </foreach>
+      )
+    </foreach>
+  </select>
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/realtimedata/SysEquipmentFileMapper.xml b/zhitan-system/target/classes/mapper/realtimedata/SysEquipmentFileMapper.xml
new file mode 100644
index 0000000..43c7d9f
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/realtimedata/SysEquipmentFileMapper.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.realtimedata.mapper.SysEquipmentFileMapper">
+    <resultMap id="SysEquipmentFile"
+               type="com.zhitan.realtimedata.domain.SysEquipmentFile">
+        <result property="nodeId" column="node_id"/>
+        <result property="filePath" column="filepath"/>
+    </resultMap>
+    <resultMap id="SysSvgInfo"
+               type="com.zhitan.realtimedata.domain.SysSvgInfo">
+        <result property="id" column="id"/>
+        <result property="param" column="param"/>
+        <result property="tag" column="tag"/>
+    </resultMap>
+
+  <insert id="saveSettingInfo">
+    delete
+    from sys_svg_info
+    where node_id = #{nodeId};
+
+    <foreach collection="svgInfo" item="info" separator=";">
+      insert into sys_svg_info (id, node_id, param, tag)
+      values (#{info.id}, #{nodeId}, #{info.param}, #{info.tag});
+    </foreach>
+  </insert>
+
+  <insert id="saveEquipmentFile">
+    insert into sys_equipmentfile (node_id, filepath)
+    select #{nodeId}, #{filePath}
+    on conflict
+      (node_id)
+    do update
+    set filepath = #{filePath}
+  </insert>
+  <select id="getConfigure" resultMap="SysEquipmentFile">
+    select node_id, filepath
+    from sys_equipmentfile
+    where node_id = #{nodeId};
+  </select>
+  <select id="getConfigureTag" resultMap="SysSvgInfo">
+    select id, param, tag
+    from sys_svg_info
+    where node_id = #{nodeId}
+  </select>
+
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/system/SysConfigMapper.xml b/zhitan-system/target/classes/mapper/system/SysConfigMapper.xml
new file mode 100644
index 0000000..afb865f
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/system/SysConfigMapper.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysConfigMapper">
+    
+    <resultMap type="SysConfig" id="SysConfigResult">
+    	<id     property="configId"      column="config_id"      />
+        <result property="configName"    column="config_name"    />
+        <result property="configKey"     column="config_key"     />
+        <result property="configValue"   column="config_value"   />
+        <result property="configType"    column="config_type"    />
+        <result property="createBy"      column="create_by"      />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"      column="update_by"      />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+    
+    <sql id="selectConfigVo">
+        select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark 
+		from sys_config
+    </sql>
+    
+    <!-- 鏌ヨ鏉′欢 -->
+	<sql id="sqlwhereSearch">
+		<where>
+			<if test="configId !=null">
+				and config_id = #{configId}
+			</if>
+			<if test="configKey !=null and configKey != ''">
+				and config_key = #{configKey}
+			</if>
+		</where>
+	</sql>
+    
+    <select id="selectConfig" parameterType="SysConfig" resultMap="SysConfigResult">
+        <include refid="selectConfigVo"/>
+        <include refid="sqlwhereSearch"/>
+    </select>
+    
+    <select id="selectConfigList" parameterType="SysConfig" resultMap="SysConfigResult">
+        <include refid="selectConfigVo"/>
+        <where>
+			<if test="configName != null and configName != ''">
+				AND config_name like concat('%', #{configName}, '%')
+			</if>
+			<if test="configType != null and configType != ''">
+				AND config_type = #{configType}
+			</if>
+			<if test="configKey != null and configKey != ''">
+				AND config_key like concat('%', #{configKey}, '%')
+			</if>
+			<if test="beginTime != null and beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+				and create_time &gt;= to_date(#{beginTime},'yyyy-mm-dd hh24:mi:ss')
+			</if>
+			<if test="endTime != null and endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+				and create_time &lt;= to_date(#{endTime},'yyyy-mm-dd hh24:mi:ss')
+			</if>
+		</where>
+    </select>
+    
+    <select id="checkConfigKeyUnique" parameterType="String" resultMap="SysConfigResult">
+        <include refid="selectConfigVo"/>
+        where config_key = #{configKey}
+    </select>
+    
+    <insert id="insertConfig" parameterType="SysConfig">
+        insert into sys_config (
+			<if test="configName != null and configName != '' ">config_name,</if>
+			<if test="configKey != null and configKey != '' ">config_key,</if>
+			<if test="configValue != null and configValue != '' ">config_value,</if>
+			<if test="configType != null and configType != '' ">config_type,</if>
+			<if test="createBy != null and createBy != ''">create_by,</if>
+			<if test="remark != null and remark != ''">remark,</if>
+ 			create_time
+        )values(
+			<if test="configName != null and configName != ''">#{configName},</if>
+			<if test="configKey != null and configKey != ''">#{configKey},</if>
+			<if test="configValue != null and configValue != ''">#{configValue},</if>
+			<if test="configType != null and configType != ''">#{configType},</if>
+			<if test="createBy != null and createBy != ''">#{createBy},</if>
+			<if test="remark != null and remark != ''">#{remark},</if>
+        now()
+		)
+    </insert>
+	 
+    <update id="updateConfig" parameterType="SysConfig">
+        update sys_config 
+        <set>
+            <if test="configName != null and configName != ''">config_name = #{configName},</if>
+            <if test="configKey != null and configKey != ''">config_key = #{configKey},</if>
+            <if test="configValue != null and configValue != ''">config_value = #{configValue},</if>
+            <if test="configType != null and configType != ''">config_type = #{configType},</if>
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="remark != null">remark = #{remark},</if>
+ 			update_time = now()
+        </set>
+        where config_id = #{configId}
+    </update>
+	
+    <delete id="deleteConfigById" parameterType="Long">
+        delete from sys_config where config_id = #{configId}
+    </delete>
+    
+    <delete id="deleteConfigByIds" parameterType="Long">
+        delete from sys_config where config_id in 
+        <foreach item="configId" collection="array" open="(" separator="," close=")">
+        	#{configId}
+        </foreach>
+    </delete>
+    
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/system/SysDeptMapper.xml b/zhitan-system/target/classes/mapper/system/SysDeptMapper.xml
new file mode 100644
index 0000000..5d8823d
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/system/SysDeptMapper.xml
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysDeptMapper">
+
+    <resultMap type="SysDept" id="SysDeptResult">
+        <id property="deptId" column="dept_id"/>
+        <result property="parentId" column="parent_id"/>
+        <result property="ancestors" column="ancestors"/>
+        <result property="deptName" column="dept_name"/>
+        <result property="orderNum" column="order_num"/>
+        <result property="leader" column="leader"/>
+        <result property="phone" column="phone"/>
+        <result property="email" column="email"/>
+        <result property="status" column="status"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="parentName" column="parent_name"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <sql id="selectDeptVo">
+        select d.dept_id,
+               d.parent_id,
+               d.ancestors,
+               d.dept_name,
+               d.order_num,
+               d.leader,
+               d.phone,
+               d.email,
+               d.status,
+               d.del_flag,
+               d.create_by,
+               d.create_time
+        from sys_dept d
+    </sql>
+
+    <select id="selectDeptList" parameterType="SysDept" resultMap="SysDeptResult">
+        <include refid="selectDeptVo"/>
+        where d.del_flag = '0'
+		<if test="deptId != null and deptId != 0">
+			AND dept_id = #{deptId}
+		</if>
+        <if test="parentId != null and parentId != 0">
+            AND parent_id = #{parentId}
+        </if>
+        <if test="deptName != null and deptName != ''">
+            AND dept_name like concat('%', #{deptName}, '%')
+        </if>
+        <if test="status != null and status != ''">
+            AND status = #{status}
+        </if>
+        <!-- 鏁版嵁鑼冨洿杩囨护 -->
+		${params.dataScope}
+        order by d.parent_id, d.order_num
+    </select>
+
+    <select id="selectDeptListByRoleId" resultType="Long">
+		select d.dept_id
+        from sys_dept d
+                 left join sys_role_dept rd on d.dept_id = rd.dept_id
+        where rd.role_id = #{roleId}
+            <if test="deptCheckStrictly">
+              and d.dept_id not in (select d.parent_id from sys_dept d inner join sys_role_dept rd on d.dept_id = rd.dept_id and rd.role_id = #{roleId})
+            </if>
+        order by d.parent_id, d.order_num
+    </select>
+
+    <select id="selectDeptById" parameterType="Long" resultMap="SysDeptResult">
+        <include refid="selectDeptVo"/>
+        where dept_id = #{deptId}
+    </select>
+
+    <select id="checkDeptExistUser" parameterType="Long" resultType="int">
+        select count(1)
+        from sys_user
+        where dept_id = #{deptId}
+          and del_flag = '0'
+    </select>
+
+    <select id="hasChildByDeptId" parameterType="Long" resultType="int">
+        select count(1)
+        from sys_dept
+		where del_flag = '0' and parent_id = #{deptId} limit 1
+    </select>
+
+    <select id="selectChildrenDeptById" parameterType="Long" resultMap="SysDeptResult">
+        select *
+        from sys_dept
+        where ancestors = (select ancestors from sys_dept where dept_id = #{deptId}) || #{deptId}
+    </select>
+
+    <select id="checkDeptNameUnique" resultMap="SysDeptResult">
+        <include refid="selectDeptVo"/>
+		where dept_name=#{deptName} and parent_id = #{parentId} and del_flag = '0' limit 1
+    </select>
+
+    <insert id="insertDept" parameterType="SysDept">
+        insert into sys_dept(
+        <if test="deptId != null and deptId != 0">dept_id,</if>
+        <if test="parentId != null and parentId != 0">parent_id,</if>
+        <if test="deptName != null and deptName != ''">dept_name,</if>
+        <if test="ancestors != null and ancestors != ''">ancestors,</if>
+        <if test="orderNum != null and orderNum != ''">order_num,</if>
+        <if test="leader != null and leader != ''">leader,</if>
+        <if test="phone != null and phone != ''">phone,</if>
+        <if test="email != null and email != ''">email,</if>
+        <if test="status != null">status,</if>
+        <if test="createBy != null and createBy != ''">create_by,</if>
+        create_time
+        )values(
+        <if test="deptId != null and deptId != 0">#{deptId},</if>
+        <if test="parentId != null and parentId != 0">#{parentId},</if>
+        <if test="deptName != null and deptName != ''">#{deptName},</if>
+        <if test="ancestors != null and ancestors != ''">#{ancestors},</if>
+        <if test="orderNum != null and orderNum != ''">#{orderNum},</if>
+        <if test="leader != null and leader != ''">#{leader},</if>
+        <if test="phone != null and phone != ''">#{phone},</if>
+        <if test="email != null and email != ''">#{email},</if>
+        <if test="status != null">#{status},</if>
+        <if test="createBy != null and createBy != ''">#{createBy},</if>
+        now()
+        )
+    </insert>
+
+    <update id="updateDept" parameterType="SysDept">
+        update sys_dept
+        <set>
+            <if test="parentId != null and parentId != 0">parent_id = #{parentId},</if>
+            <if test="deptName != null and deptName != ''">dept_name = #{deptName},</if>
+            <if test="ancestors != null and ancestors != ''">ancestors = #{ancestors},</if>
+            <if test="orderNum != null and orderNum != ''">order_num = #{orderNum},</if>
+            <if test="leader != null">leader = #{leader},</if>
+            <if test="phone != null">phone = #{phone},</if>
+            <if test="email != null">email = #{email},</if>
+            <if test="status != null and status != ''">status = #{status},</if>
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+            update_time = now()
+        </set>
+        where dept_id = #{deptId}
+    </update>
+
+    <update id="updateDeptChildren" parameterType="java.util.List">
+        update sys_dept set ancestors =
+        <foreach collection="depts" item="item" index="index"
+                 separator=" " open="case dept_id" close="end">
+            when #{item.deptId} then #{item.ancestors}
+        </foreach>
+        where dept_id in
+        <foreach collection="depts" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item.deptId}
+        </foreach>
+    </update>
+
+    <update id="updateDeptStatusNormal" parameterType="Long">
+        update sys_dept set status = '0' where dept_id in
+        <foreach collection="depts" item="deptId" open="(" separator="," close=")">
+            #{deptId}
+        </foreach>
+    </update>
+    
+    <update id="updateDeptStatus" parameterType="SysDept">
+        update sys_dept
+        <set>
+            <if test="status != null and status != ''">status = #{status},</if>
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+            update_time = now()
+        </set>
+        where dept_id in (${ancestors})
+    </update>
+
+    <delete id="deleteDeptById" parameterType="Long">
+        update sys_dept
+        set del_flag = '2'
+        where dept_id = #{deptId}
+    </delete>
+
+</mapper> 
diff --git a/zhitan-system/target/classes/mapper/system/SysDictDataMapper.xml b/zhitan-system/target/classes/mapper/system/SysDictDataMapper.xml
new file mode 100644
index 0000000..4397173
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/system/SysDictDataMapper.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysDictDataMapper">
+	
+	<resultMap type="SysDictData" id="SysDictDataResult">
+		<id     property="dictCode"   column="dict_code"   />
+		<result property="dictSort"   column="dict_sort"   />
+		<result property="dictLabel"  column="dict_label"  />
+		<result property="dictValue"  column="dict_value"  />
+		<result property="dictType"   column="dict_type"   />
+		<result property="cssClass"   column="css_class"   />
+		<result property="listClass"  column="list_class"  />
+		<result property="isDefault"  column="is_default"  />
+		<result property="status"     column="status"      />
+		<result property="createBy"   column="create_by"   />
+		<result property="createTime" column="create_time" />
+		<result property="updateBy"   column="update_by"   />
+		<result property="updateTime" column="update_time" />
+	</resultMap>
+	
+	<sql id="selectDictDataVo">
+        select dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark 
+		from sys_dict_data
+    </sql>
+
+	<select id="selectDictDataList" parameterType="SysDictData" resultMap="SysDictDataResult">
+	    <include refid="selectDictDataVo"/>
+		<where>
+		    <if test="dictType != null and dictType != ''">
+				AND dict_type = #{dictType}
+			</if>
+			<if test="dictLabel != null and dictLabel != ''">
+				AND dict_label like concat('%', #{dictLabel}, '%')
+			</if>
+			<if test="status != null and status != ''">
+				AND status = #{status}
+			</if>
+			order by dict_sort
+		</where>
+	</select>
+	
+	<select id="selectDictDataByType" parameterType="SysDictData" resultMap="SysDictDataResult">
+		<include refid="selectDictDataVo"/>
+		where status = '0' and dict_type = #{dictType} order by dict_sort asc
+	</select>
+
+	<select id="selectDictLabel" resultType="String">
+		select dict_label from sys_dict_data
+		where dict_type = #{dictType} and dict_value = #{dictValue}
+	</select>
+	
+	<select id="selectDictDataById" parameterType="Long" resultMap="SysDictDataResult">
+		<include refid="selectDictDataVo"/>
+		where dict_code = #{dictCode}
+	</select>
+	
+	<select id="countDictDataByType" resultType="Integer">
+	    select count(1) from sys_dict_data where dict_type=#{dictType}  
+	</select>
+	
+	<delete id="deleteDictDataById" parameterType="Long">
+ 		delete from sys_dict_data where dict_code = #{dictCode}
+ 	</delete>
+ 	
+ 	<delete id="deleteDictDataByIds" parameterType="Long">
+ 		delete from sys_dict_data where dict_code in
+ 		<foreach collection="array" item="dictCode" open="(" separator="," close=")">
+ 			#{dictCode}
+        </foreach> 
+ 	</delete>
+	
+	<update id="updateDictData" parameterType="SysDictData">
+ 		update sys_dict_data
+ 		<set>
+ 			<if test="dictSort != null and dictSort != ''">dict_sort = #{dictSort},</if>
+ 			<if test="dictLabel != null and dictLabel != ''">dict_label = #{dictLabel},</if>
+ 			<if test="dictValue != null and dictValue != ''">dict_value = #{dictValue},</if>
+ 			<if test="dictType != null and dictType != ''">dict_type = #{dictType},</if>
+ 			<if test="cssClass != null">css_class = #{cssClass},</if>
+ 			<if test="listClass != null">list_class = #{listClass},</if>
+ 			<if test="isDefault != null and isDefault != ''">is_default = #{isDefault},</if>
+ 			<if test="status != null">status = #{status},</if>
+ 			<if test="remark != null">remark = #{remark},</if>
+ 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+ 			update_time = now()
+ 		</set>
+ 		where dict_code = #{dictCode}
+	</update>
+	
+	<update id="updateDictDataType" parameterType="String">
+ 		update sys_dict_data set dict_type = #{newDictType} where dict_type = #{oldDictType}
+	</update>
+ 	
+ 	<insert id="insertDictData" parameterType="SysDictData">
+ 		insert into sys_dict_data(
+ 			<if test="dictSort != null and dictSort != ''">dict_sort,</if>
+ 			<if test="dictLabel != null and dictLabel != ''">dict_label,</if>
+ 			<if test="dictValue != null and dictValue != ''">dict_value,</if>
+ 			<if test="dictType != null and dictType != ''">dict_type,</if>
+ 			<if test="cssClass != null and cssClass != ''">css_class,</if>
+ 			<if test="listClass != null and listClass != ''">list_class,</if>
+ 			<if test="isDefault != null and isDefault != ''">is_default,</if>
+ 			<if test="status != null">status,</if>
+ 			<if test="remark != null and remark != ''">remark,</if>
+ 			<if test="createBy != null and createBy != ''">create_by,</if>
+ 			create_time
+ 		)values(
+ 		    <if test="dictSort != null and dictSort != ''">#{dictSort},</if>
+ 		    <if test="dictLabel != null and dictLabel != ''">#{dictLabel},</if>
+ 			<if test="dictValue != null and dictValue != ''">#{dictValue},</if>
+ 			<if test="dictType != null and dictType != ''">#{dictType},</if>
+ 			<if test="cssClass != null and cssClass != ''">#{cssClass},</if>
+ 			<if test="listClass != null and listClass != ''">#{listClass},</if>
+ 			<if test="isDefault != null and isDefault != ''">#{isDefault},</if>
+ 			<if test="status != null">#{status},</if>
+ 			<if test="remark != null and remark != ''">#{remark},</if>
+ 			<if test="createBy != null and createBy != ''">#{createBy},</if>
+ 			now()
+ 		)
+	</insert>
+	
+</mapper> 
diff --git a/zhitan-system/target/classes/mapper/system/SysDictTypeMapper.xml b/zhitan-system/target/classes/mapper/system/SysDictTypeMapper.xml
new file mode 100644
index 0000000..cffebc5
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/system/SysDictTypeMapper.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysDictTypeMapper">
+
+	<resultMap type="SysDictType" id="SysDictTypeResult">
+		<id     property="dictId"     column="dict_id"     />
+		<result property="dictName"   column="dict_name"   />
+		<result property="dictType"   column="dict_type"   />
+		<result property="status"     column="status"      />
+		<result property="createBy"   column="create_by"   />
+		<result property="createTime" column="create_time" />
+		<result property="updateBy"   column="update_by"   />
+		<result property="updateTime" column="update_time" />
+	</resultMap>
+	
+	<sql id="selectDictTypeVo">
+        select dict_id, dict_name, dict_type, status, create_by, create_time, remark 
+		from sys_dict_type
+    </sql>
+
+	<select id="selectDictTypeList" parameterType="SysDictType" resultMap="SysDictTypeResult">
+	    <include refid="selectDictTypeVo"/>
+		<where>
+		    <if test="dictName != null and dictName != ''">
+				AND dict_name like concat('%', #{dictName}, '%')
+			</if>
+			<if test="status != null and status != ''">
+				AND status = #{status}
+			</if>
+			<if test="dictType != null and dictType != ''">
+				AND dict_type like concat('%', #{dictType}, '%')
+			</if>
+			<if test="beginTime != null and beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+				and to_char(create_time,'yyyymmdd') &gt;= to_char(to_date(#{beginTime}, 'yyyy-mm-dd'),'yyyymmdd')
+			</if>
+			<if test="endTime != null and endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+				and to_char(create_time,'yyyymmdd') &lt;= to_char(to_date(#{endTime}, 'yyyy-mm-dd'),'yyyymmdd')
+			</if>
+	    </where>
+	</select>
+	
+	<select id="selectDictTypeAll" resultMap="SysDictTypeResult">
+		<include refid="selectDictTypeVo"/>
+	</select>
+	
+	<select id="selectDictTypeById" parameterType="Long" resultMap="SysDictTypeResult">
+		<include refid="selectDictTypeVo"/>
+		where dict_id = #{dictId}
+	</select>
+	
+	<select id="selectDictTypeByType" parameterType="String" resultMap="SysDictTypeResult">
+		<include refid="selectDictTypeVo"/>
+		where dict_type = #{dictType}
+	</select>
+	
+	<select id="checkDictTypeUnique" parameterType="String" resultMap="SysDictTypeResult">
+		<include refid="selectDictTypeVo"/>
+		where dict_type = #{dictType}
+	</select>
+	
+	<delete id="deleteDictTypeById" parameterType="Long">
+ 		delete from sys_dict_type where dict_id = #{dictId}
+ 	</delete>
+ 	
+ 	<delete id="deleteDictTypeByIds" parameterType="Long">
+ 		delete from sys_dict_type where dict_id in
+ 		<foreach collection="array" item="dictId" open="(" separator="," close=")">
+ 			#{dictId}
+        </foreach> 
+ 	</delete>
+
+ 	<update id="updateDictType" parameterType="SysDictType">
+ 		update sys_dict_type
+ 		<set>
+ 			<if test="dictName != null and dictName != ''">dict_name = #{dictName},</if>
+ 			<if test="dictType != null and dictType != ''">dict_type = #{dictType},</if>
+ 			<if test="status != null">status = #{status},</if>
+ 			<if test="remark != null">remark = #{remark},</if>
+ 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+ 			update_time = now()
+ 		</set>
+ 		where dict_id = #{dictId}
+	</update>
+ 	
+ 	<insert id="insertDictType" parameterType="SysDictType">
+ 		insert into sys_dict_type(
+ 			<if test="dictName != null and dictName != ''">dict_name,</if>
+ 			<if test="dictType != null and dictType != ''">dict_type,</if>
+ 			<if test="status != null">status,</if>
+ 			<if test="remark != null and remark != ''">remark,</if>
+ 			<if test="createBy != null and createBy != ''">create_by,</if>
+ 			create_time
+ 		)values(
+ 			<if test="dictName != null and dictName != ''">#{dictName},</if>
+ 			<if test="dictType != null and dictType != ''">#{dictType},</if>
+ 			<if test="status != null">#{status},</if>
+ 			<if test="remark != null and remark != ''">#{remark},</if>
+ 			<if test="createBy != null and createBy != ''">#{createBy},</if>
+			now()
+ 		)
+	</insert>
+	
+</mapper> 
diff --git a/zhitan-system/target/classes/mapper/system/SysLoginInfoMapper.xml b/zhitan-system/target/classes/mapper/system/SysLoginInfoMapper.xml
new file mode 100644
index 0000000..093d852
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/system/SysLoginInfoMapper.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysLoginInfoMapper">
+
+	<resultMap type="SysLoginInfo" id="SysSysLoginInfoResult">
+		<id     property="infoId"        column="info_id"           />
+		<result property="userName"      column="user_name"         />
+		<result property="status"        column="status"            />
+		<result property="ipaddr"        column="ipaddr"            />
+		<result property="loginLocation" column="login_location"    />
+		<result property="browser"       column="browser"           />
+		<result property="os"            column="os"                />
+		<result property="msg"           column="msg"               />
+		<result property="loginTime"     column="login_time"        />
+	</resultMap>
+
+	<insert id="insertLoginInfo" parameterType="SysLoginInfo">
+		insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time)
+		values (#{userName}, #{status}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{msg}, now())
+	</insert>
+	
+	<select id="selectLoginInfoList" parameterType="SysLoginInfo" resultMap="SysSysLoginInfoResult">
+		select info_id, user_name, ipaddr, login_location, browser, os, status, msg, login_time from sys_logininfor
+		<where>
+			<if test="ipaddr != null and ipaddr != ''">
+				AND ipaddr like concat('%', #{ipaddr}, '%')
+			</if>
+			<if test="status != null and status != ''">
+				AND status = #{status}
+			</if>
+			<if test="userName != null and userName != ''">
+				AND user_name like concat('%', #{userName}, '%')
+			</if>
+			<if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+				AND login_time &gt;= #{params.beginTime}
+			</if>
+			<if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+				AND login_time &lt;= #{params.endTime}
+			</if>
+		</where>
+		order by info_id desc
+	</select>
+	
+	<delete id="deleteLoginInfoByIds" parameterType="Long">
+ 		delete from sys_logininfor where info_id in
+ 		<foreach collection="array" item="infoId" open="(" separator="," close=")">
+ 			#{infoId}
+        </foreach> 
+ 	</delete>
+    
+    <update id="cleanLoginInfo">
+        truncate table sys_logininfor
+    </update>
+    
+</mapper> 
\ No newline at end of file
diff --git a/zhitan-system/target/classes/mapper/system/SysMenuMapper.xml b/zhitan-system/target/classes/mapper/system/SysMenuMapper.xml
new file mode 100644
index 0000000..6fb3299
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/system/SysMenuMapper.xml
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+		PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+		"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysMenuMapper">
+
+	<resultMap type="SysMenu" id="SysMenuResult">
+		<id     property="menuId"         column="menu_id"        />
+		<result property="menuName"       column="menu_name"      />
+		<result property="parentName"     column="parent_name"    />
+		<result property="parentId"       column="parent_id"      />
+		<result property="orderNum"       column="order_num"      />
+		<result property="path"           column="path"           />
+		<result property="component"      column="component"      />
+		<result property="query"          column="query"          />
+		<result property="isFrame"        column="is_frame"       />
+		<result property="isCache"        column="is_cache"       />
+		<result property="menuType"       column="menu_type"      />
+		<result property="visible"        column="visible"        />
+		<result property="status"         column="status"         />
+		<result property="perms"          column="perms"          />
+		<result property="icon"           column="icon"           />
+		<result property="createBy"       column="create_by"      />
+		<result property="createTime"     column="create_time"    />
+		<result property="updateTime"     column="update_time"    />
+		<result property="updateBy"       column="update_by"      />
+		<result property="remark"         column="remark"         />
+		<result property="parameter"         column="page_parameter"         />
+	</resultMap>
+
+	<sql id="selectMenuVo">
+        select menu_id, menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, COALESCE(perms,'') as perms, icon, create_time,page_parameter
+		from sys_menu
+    </sql>
+    
+    <select id="selectMenuList" parameterType="SysMenu" resultMap="SysMenuResult">
+		<include refid="selectMenuVo"/>
+		<where>
+			<if test="menuName != null and menuName != ''">
+				AND menu_name like concat('%', #{menuName}, '%')
+			</if>
+			<if test="visible != null and visible != ''">
+				AND visible = #{visible}
+			</if>
+			<if test="status != null and status != ''">
+				AND status = #{status}
+			</if>
+		</where>
+		order by parent_id, order_num
+	</select>
+	
+	<select id="selectMenuTreeAll" resultMap="SysMenuResult">
+		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.query,m.visible, m.status, COALESCE(m.perms,'') as perms, m.is_frame, m.is_cache,m.menu_type, m.icon, m.order_num, m.create_time,m.page_parameter
+		from sys_menu m where m.menu_type in ('M', 'C') and m.status = '0'
+		order by m.parent_id, m.order_num
+	</select>
+
+	<select id="selectMenuListByUserId" parameterType="SysMenu" resultMap="SysMenuResult">
+		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.query, m.visible, m.status, COALESCE(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
+		from sys_menu m
+		left join sys_role_menu rm on m.menu_id = rm.menu_id
+		left join sys_user_role ur on rm.role_id = ur.role_id
+		left join sys_role ro on ur.role_id = ro.role_id
+		where ur.user_id = #{params.userId}
+		<if test="menuName != null and menuName != ''">
+			AND m.menu_name like concat('%', #{menuName}, '%')
+		</if>
+		<if test="visible != null and visible != ''">
+			AND m.visible = #{visible}
+		</if>
+		<if test="status != null and status != ''">
+			AND m.status = #{status}
+		</if>
+		order by m.parent_id, m.order_num
+	</select>
+    
+    <select id="selectMenuTreeByUserId" parameterType="Long" resultMap="SysMenuResult">
+		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.visible, m.status, COALESCE(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time,m.page_parameter
+		from sys_menu m
+			 left join sys_role_menu rm on m.menu_id = rm.menu_id
+			 left join sys_user_role ur on rm.role_id = ur.role_id
+			 left join sys_role ro on ur.role_id = ro.role_id
+			 left join sys_user u on ur.user_id = u.user_id
+		where u.user_id = #{userId} and m.menu_type in ('M', 'C') and m.status = '0'  AND ro.status = '0'
+		order by m.parent_id, m.order_num
+	</select>
+	
+	<select id="selectMenuListByRoleId" resultType="Long">
+		select m.menu_id
+		from sys_menu m
+            left join sys_role_menu rm on m.menu_id = rm.menu_id
+        where rm.role_id = #{roleId}
+            <if test="menuCheckStrictly">
+              and m.menu_id not in (select m.parent_id from sys_menu m inner join sys_role_menu rm on m.menu_id = rm.menu_id and rm.role_id = #{roleId})
+            </if>
+		order by m.parent_id, m.order_num
+	</select>
+	
+	<select id="selectMenuPerms" resultType="String">
+		select distinct m.perms
+		from sys_menu m
+			 left join sys_role_menu rm on m.menu_id = rm.menu_id
+			 left join sys_user_role ur on rm.role_id = ur.role_id
+	</select>
+
+	<select id="selectMenuPermsByUserId" parameterType="Long" resultType="String">
+		select distinct m.perms
+		from sys_menu m
+			 left join sys_role_menu rm on m.menu_id = rm.menu_id
+			 left join sys_user_role ur on rm.role_id = ur.role_id
+			 left join sys_role r on r.role_id = ur.role_id
+		where m.status = '0' and r.status = '0' and ur.user_id = #{userId}
+	</select>
+	
+	<select id="selectMenuPermsByRoleId" parameterType="Long" resultType="String">
+		select distinct m.perms
+		from sys_menu m
+			 left join sys_role_menu rm on m.menu_id = rm.menu_id
+		where m.status = '0' and rm.role_id = #{roleId}
+	</select>
+	
+	<select id="selectMenuById" parameterType="Long" resultMap="SysMenuResult">
+		<include refid="selectMenuVo"/>
+		where menu_id = #{menuId}
+	</select>
+	
+	<select id="hasChildByMenuId" resultType="Integer">
+	    select count(1) from sys_menu where parent_id = #{menuId}  
+	</select>
+	
+	<select id="checkMenuNameUnique" parameterType="SysMenu" resultMap="SysMenuResult">
+		<include refid="selectMenuVo"/>
+		where menu_name=#{menuName} and parent_id = #{parentId} limit 1
+	</select>
+	
+	<update id="updateMenu" parameterType="SysMenu">
+		update sys_menu
+		<set>
+			<if test="menuName != null and menuName != ''">menu_name = #{menuName},</if>
+			<if test="parentId != null and parentId != 0">parent_id = #{parentId},</if>
+			<if test="orderNum != null and orderNum != ''">order_num = #{orderNum},</if>
+			<if test="path != null and path != ''">path = #{path},</if>
+			<if test="component != null">component = #{component},</if>
+			<if test="query != null">query = #{query},</if>
+			<if test="isFrame != null and isFrame != ''">is_frame = #{isFrame},</if>
+			<if test="isCache != null and isCache != ''">is_cache = #{isCache},</if>
+			<if test="menuType != null and menuType != ''">menu_type = #{menuType},</if>
+			<if test="visible != null">visible = #{visible},</if>
+			<if test="status != null">status = #{status},</if>
+			<if test="perms !=null">perms = #{perms},</if>
+			<if test="icon !=null and icon != ''">icon = #{icon},</if>
+			<if test="remark != null and remark != ''">remark = #{remark},</if>
+			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+			<if test="parameter != null and parameter != ''">page_parameter = #{parameter},</if>
+			update_time = now()
+		</set>
+		where menu_id = #{menuId}
+	</update>
+
+	<insert id="insertMenu" parameterType="SysMenu">
+		insert into sys_menu(
+		<if test="menuId != null and menuId != 0">menu_id,</if>
+		<if test="parentId != null and parentId != 0">parent_id,</if>
+		<if test="menuName != null and menuName != ''">menu_name,</if>
+		<if test="orderNum != null and orderNum != ''">order_num,</if>
+		<if test="path != null and path != ''">path,</if>
+		<if test="component != null and component != ''">component,</if>
+		<if test="query != null and query != ''">query,</if>
+		<if test="isFrame != null and isFrame != ''">is_frame,</if>
+		<if test="isCache != null and isCache != ''">is_cache,</if>
+		<if test="menuType != null and menuType != ''">menu_type,</if>
+		<if test="visible != null">visible,</if>
+		<if test="status != null">status,</if>
+		<if test="perms !=null and perms != ''">perms,</if>
+		<if test="icon != null and icon != ''">icon,</if>
+		<if test="remark != null and remark != ''">remark,</if>
+		<if test="createBy != null and createBy != ''">create_by,</if>
+		<if test="parameter != null and parameter != ''">page_parameter,</if>
+		create_time
+		)values(
+		<if test="menuId != null and menuId != 0">#{menuId},</if>
+		<if test="parentId != null and parentId != 0">#{parentId},</if>
+		<if test="menuName != null and menuName != ''">#{menuName},</if>
+		<if test="orderNum != null and orderNum != ''">#{orderNum},</if>
+		<if test="path != null and path != ''">#{path},</if>
+		<if test="component != null and component != ''">#{component},</if>
+		<if test="query != null and query != ''">#{query},</if>
+		<if test="isFrame != null and isFrame != ''">#{isFrame},</if>
+		<if test="isCache != null and isCache != ''">#{isCache},</if>
+		<if test="menuType != null and menuType != ''">#{menuType},</if>
+		<if test="visible != null">#{visible},</if>
+		<if test="status != null">#{status},</if>
+		<if test="perms !=null and perms != ''">#{perms},</if>
+		<if test="icon != null and icon != ''">#{icon},</if>
+		<if test="remark != null and remark != ''">#{remark},</if>
+		<if test="createBy != null and createBy != ''">#{createBy},</if>
+		<if test="parameter != null and parameter != ''">#{parameter},</if>
+		now()
+		)
+	</insert>
+	
+	<delete id="deleteMenuById" parameterType="Long">
+	    delete from sys_menu where menu_id = #{menuId}
+	</delete>
+
+</mapper> 
diff --git a/zhitan-system/target/classes/mapper/system/SysNameConfigMapper.xml b/zhitan-system/target/classes/mapper/system/SysNameConfigMapper.xml
new file mode 100644
index 0000000..0817d3d
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/system/SysNameConfigMapper.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysNameConfigMapper">
+
+    <resultMap type="SysNameConfig" id="SysNameConfigResult">
+        <result property="systemName"    column="system_name"    />
+        <result property="leftLogo"    column="left_logo"    />
+        <result property="copyRight"    column="copy_right"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="id"    column="id"    />
+        <result property="homeLogo"    column="home_logo"    />
+    </resultMap>
+
+    <sql id="selectSysNameConfigVo">
+        select system_name, left_logo, copy_right, create_by, create_time, update_by, update_time, remark, id, home_logo from sys_name_config
+    </sql>
+
+    <select id="selectSysNameConfigList" parameterType="SysNameConfig" resultMap="SysNameConfigResult">
+        <include refid="selectSysNameConfigVo"/>
+        <where>
+            <if test="systemName != null  and systemName != ''"> and system_name like concat('%', #{systemName}, '%')</if>
+            <if test="leftLogo != null  and leftLogo != ''"> and left_logo = #{leftLogo}</if>
+            <if test="copyRight != null  and copyRight != ''"> and copy_right = #{copyRight}</if>
+            <if test="homeLogo != null  and homeLogo != ''"> and home_logo = #{homeLogo}</if>
+        </where>
+    </select>
+
+    <select id="selectSysNameConfigBySystemName" parameterType="String" resultMap="SysNameConfigResult">
+        <include refid="selectSysNameConfigVo"/>
+        where system_name = #{systemName}
+    </select>
+
+    <insert id="insertSysNameConfig" parameterType="SysNameConfig">
+        insert into sys_name_config
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="systemName != null">system_name,</if>
+            <if test="leftLogo != null">left_logo,</if>
+            <if test="copyRight != null">copy_right,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+            <if test="id != null and id != ''">id,</if>
+            <if test="homeLogo != null">home_logo,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="systemName != null">#{systemName},</if>
+            <if test="leftLogo != null">#{leftLogo},</if>
+            <if test="copyRight != null">#{copyRight},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="id != null and id != ''">#{id},</if>
+            <if test="homeLogo != null">#{homeLogo},</if>
+        </trim>
+    </insert>
+
+    <update id="updateSysNameConfig" parameterType="SysNameConfig">
+        update sys_name_config
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="leftLogo != null">left_logo = #{leftLogo},</if>
+            <if test="copyRight != null">copy_right = #{copyRight},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="id != null and id != ''">id = #{id},</if>
+            <if test="homeLogo != null">home_logo = #{homeLogo},</if>
+        </trim>
+        where system_name = #{systemName}
+    </update>
+
+    <delete id="deleteSysNameConfigBySystemName" parameterType="String">
+        delete from sys_name_config where system_name = #{systemName}
+    </delete>
+
+    <delete id="deleteSysNameConfigBySystemNames" parameterType="String">
+        delete from sys_name_config where system_name in
+        <foreach item="systemName" collection="array" open="(" separator="," close=")">
+            #{systemName}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/zhitan-system/target/classes/mapper/system/SysNoticeMapper.xml b/zhitan-system/target/classes/mapper/system/SysNoticeMapper.xml
new file mode 100644
index 0000000..2241e39
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/system/SysNoticeMapper.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysNoticeMapper">
+    
+    <resultMap type="SysNotice" id="SysNoticeResult">
+        <result property="noticeId"       column="notice_id"       />
+        <result property="noticeTitle"    column="notice_title"    />
+        <result property="noticeType"     column="notice_type"     />
+        <result property="noticeContent"  column="notice_content"  />
+        <result property="status"         column="status"          />
+        <result property="createBy"       column="create_by"       />
+        <result property="createTime"     column="create_time"     />
+        <result property="updateBy"       column="update_by"       />
+        <result property="updateTime"     column="update_time"     />
+        <result property="remark"         column="remark"          />
+    </resultMap>
+    
+    <sql id="selectNoticeVo">
+        select notice_id, notice_title, notice_type, notice_content, status, create_by, create_time, update_by, update_time, remark 
+		from sys_notice
+    </sql>
+    
+    <select id="selectNoticeById" parameterType="Long" resultMap="SysNoticeResult">
+        <include refid="selectNoticeVo"/>
+        where notice_id = #{noticeId}
+    </select>
+    
+    <select id="selectNoticeList" parameterType="SysNotice" resultMap="SysNoticeResult">
+        <include refid="selectNoticeVo"/>
+        <where>
+			<if test="noticeTitle != null and noticeTitle != ''">
+				AND notice_title like concat('%', #{noticeTitle}, '%')
+			</if>
+			<if test="noticeType != null and noticeType != ''">
+				AND notice_type = #{noticeType}
+			</if>
+			<if test="createBy != null and createBy != ''">
+				AND create_by like concat('%', #{createBy}, '%')
+			</if>
+		</where>
+    </select>
+    
+    <insert id="insertNotice" parameterType="SysNotice">
+        insert into sys_notice (
+			<if test="noticeTitle != null and noticeTitle != '' ">notice_title, </if>
+			<if test="noticeType != null and noticeType != '' ">notice_type, </if>
+			<if test="noticeContent != null and noticeContent != '' ">notice_content, </if>
+			<if test="status != null and status != '' ">status, </if>
+			<if test="remark != null and remark != ''">remark,</if>
+ 			<if test="createBy != null and createBy != ''">create_by,</if>
+ 			create_time
+ 		)values(
+			<if test="noticeTitle != null and noticeTitle != ''">#{noticeTitle}, </if>
+			<if test="noticeType != null and noticeType != ''">#{noticeType}, </if>
+			<if test="noticeContent != null and noticeContent != ''">#{noticeContent}, </if>
+			<if test="status != null and status != ''">#{status}, </if>
+			<if test="remark != null and remark != ''">#{remark},</if>
+ 			<if test="createBy != null and createBy != ''">#{createBy},</if>
+            now()
+		)
+    </insert>
+	 
+    <update id="updateNotice" parameterType="SysNotice">
+        update sys_notice 
+        <set>
+            <if test="noticeTitle != null and noticeTitle != ''">notice_title = #{noticeTitle}, </if>
+            <if test="noticeType != null and noticeType != ''">notice_type = #{noticeType}, </if>
+            <if test="noticeContent != null">notice_content = #{noticeContent}, </if>
+            <if test="status != null and status != ''">status = #{status}, </if>
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+ 			update_time = now()
+        </set>
+        where notice_id = #{noticeId}
+    </update>
+	
+    <delete id="deleteNoticeById" parameterType="Long">
+        delete from sys_notice where notice_id = #{noticeId}
+    </delete>
+    
+    <delete id="deleteNoticeByIds" parameterType="Long">
+        delete from sys_notice where notice_id in 
+        <foreach item="noticeId" collection="array" open="(" separator="," close=")">
+            #{noticeId}
+        </foreach>
+    </delete>
+    
+</mapper>
diff --git a/zhitan-system/target/classes/mapper/system/SysOperLogMapper.xml b/zhitan-system/target/classes/mapper/system/SysOperLogMapper.xml
new file mode 100644
index 0000000..7b55d6a
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/system/SysOperLogMapper.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysOperLogMapper">
+
+	<resultMap type="SysOperLog" id="SysOperLogResult">
+		<id     property="operId"         column="oper_id"        />
+		<result property="title"          column="title"          />
+		<result property="businessType"   column="business_type"  />
+		<result property="method"         column="method"         />
+		<result property="requestMethod"  column="request_method" />
+		<result property="operatorType"   column="operator_type"  />
+		<result property="operName"       column="oper_name"      />
+		<result property="deptName"       column="dept_name"      />
+		<result property="operUrl"        column="oper_url"       />
+		<result property="operIp"         column="oper_ip"        />
+		<result property="operLocation"   column="oper_location"  />
+		<result property="operParam"      column="oper_param"     />
+		<result property="jsonResult"     column="json_result"    />
+		<result property="status"         column="status"         />
+		<result property="errorMsg"       column="error_msg"      />
+		<result property="operTime"       column="oper_time"      />
+		<result property="costTime"       column="cost_time"      />
+	</resultMap>
+
+	<sql id="selectOperLogVo">
+        select oper_id, title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, oper_time, cost_time
+        from sys_oper_log
+    </sql>
+    
+	<insert id="insertOperlog" parameterType="SysOperLog">
+		insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, cost_time, oper_time)
+        values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, #{costTime}, now())
+	</insert>
+	
+	<select id="selectOperLogList" parameterType="SysOperLog" resultMap="SysOperLogResult">
+		<include refid="selectOperLogVo"/>
+		<where>
+			<if test="operIp != null and operIp != ''">
+				AND oper_ip like concat('%', #{operIp}, '%')
+			</if>
+			<if test="title != null and title != ''">
+				AND title like concat('%', #{title}, '%')
+			</if>
+			<if test="businessType != null">
+				AND business_type = #{businessType}
+			</if>
+			<if test="businessTypes != null and businessTypes.length > 0">
+			    AND business_type in
+			    <foreach collection="businessTypes" item="businessType" open="(" separator="," close=")">
+		 			#{businessType}
+		        </foreach> 
+			</if>
+			<if test="status != null">
+				AND status = #{status}
+			</if>
+			<if test="operName != null and operName != ''">
+				AND oper_name like concat('%', #{operName}, '%')
+			</if>
+			<if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+				AND oper_time &gt;= #{params.beginTime}
+			</if>
+			<if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+				AND oper_time &lt;= #{params.endTime}
+			</if>
+		</where>
+		order by oper_id desc
+	</select>
+	
+	<delete id="deleteOperLogByIds" parameterType="Long">
+ 		delete from sys_oper_log where oper_id in
+ 		<foreach collection="array" item="operId" open="(" separator="," close=")">
+ 			#{operId}
+        </foreach> 
+ 	</delete>
+ 	
+ 	<select id="selectOperLogById" parameterType="Long" resultMap="SysOperLogResult">
+		<include refid="selectOperLogVo"/>
+		where oper_id = #{operId}
+	</select>
+	
+	<update id="cleanOperLog">
+        truncate table sys_oper_log
+    </update>
+
+</mapper> 
\ No newline at end of file
diff --git a/zhitan-system/target/classes/mapper/system/SysPostMapper.xml b/zhitan-system/target/classes/mapper/system/SysPostMapper.xml
new file mode 100644
index 0000000..b3fb9f1
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/system/SysPostMapper.xml
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysPostMapper">
+
+	<resultMap type="SysPost" id="SysPostResult">
+		<id     property="postId"        column="post_id"       />
+		<result property="postCode"      column="post_code"     />
+		<result property="postName"      column="post_name"     />
+		<result property="postSort"      column="post_sort"     />
+		<result property="status"        column="status"        />
+		<result property="createBy"      column="create_by"     />
+		<result property="createTime"    column="create_time"   />
+		<result property="updateBy"      column="update_by"     />
+		<result property="updateTime"    column="update_time"   />
+		<result property="remark"        column="remark"        />
+	</resultMap>
+	
+	<sql id="selectPostVo">
+        select post_id, post_code, post_name, post_sort, status, create_by, create_time, remark
+		from sys_post
+    </sql>
+	
+	<select id="selectPostList" parameterType="SysPost" resultMap="SysPostResult">
+	    <include refid="selectPostVo"/>
+		<where>
+			<if test="postCode != null and postCode != ''">
+				AND post_code like concat('%', #{postCode}, '%')
+			</if>
+			<if test="status != null and status != ''">
+				AND status = #{status}
+			</if>
+			<if test="postName != null and postName != ''">
+				AND post_name like concat('%', #{postName}, '%')
+			</if>
+		</where>
+		order by post_sort
+	</select>
+	
+	<select id="selectPostAll" resultMap="SysPostResult">
+		<include refid="selectPostVo"/>
+	</select>
+	
+	<select id="selectPostById" parameterType="Long" resultMap="SysPostResult">
+		<include refid="selectPostVo"/>
+		where post_id = #{postId}
+	</select>
+	
+	<select id="selectPostListByUserId" parameterType="Long" resultType="Integer">
+		select p.post_id
+        from sys_post p
+	        left join sys_user_post up on up.post_id = p.post_id
+	        left join sys_user u on u.user_id = up.user_id
+	    where u.user_id = #{userId}
+	</select>
+	
+	<select id="selectPostsByUserName" parameterType="String" resultMap="SysPostResult">
+		select p.post_id, p.post_name, p.post_code
+		from sys_post p
+			 left join sys_user_post up on up.post_id = p.post_id
+			 left join sys_user u on u.user_id = up.user_id
+		where u.user_name = #{userName}
+	</select>
+	
+	<select id="checkPostNameUnique" parameterType="String" resultMap="SysPostResult">
+		<include refid="selectPostVo"/>
+		 where post_name=#{postName}
+	</select>
+	
+	<select id="checkPostCodeUnique" parameterType="String" resultMap="SysPostResult">
+		<include refid="selectPostVo"/>
+		 where post_code=#{postCode}
+	</select>
+	
+	<update id="updatePost" parameterType="SysPost">
+ 		update sys_post
+ 		<set>
+ 			<if test="postCode != null and postCode != ''">post_code = #{postCode},</if>
+ 			<if test="postName != null and postName != ''">post_name = #{postName},</if>
+ 			<if test="postSort != null and postSort != ''">post_sort = #{postSort},</if>
+ 			<if test="status != null and status != ''">status = #{status},</if>
+ 			<if test="remark != null">remark = #{remark},</if>
+ 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+ 			update_time = now()
+ 		</set>
+ 		where post_id = #{postId}
+	</update>
+ 	
+ 	<insert id="insertPost" parameterType="SysPost" useGeneratedKeys="true" keyProperty="postId">
+ 		insert into sys_post(
+ 			<if test="postId != null and postId != 0">post_id,</if>
+ 			<if test="postCode != null and postCode != ''">post_code,</if>
+ 			<if test="postName != null and postName != ''">post_name,</if>
+ 			<if test="postSort != null and postSort != ''">post_sort,</if>
+ 			<if test="status != null and status != ''">status,</if>
+ 			<if test="remark != null and remark != ''">remark,</if>
+ 			<if test="createBy != null and createBy != ''">create_by,</if>
+ 			create_time
+ 		)values(
+ 			<if test="postId != null and postId != 0">#{postId},</if>
+ 			<if test="postCode != null and postCode != ''">#{postCode},</if>
+ 			<if test="postName != null and postName != ''">#{postName},</if>
+ 			<if test="postSort != null and postSort != ''">#{postSort},</if>
+ 			<if test="status != null and status != ''">#{status},</if>
+ 			<if test="remark != null and remark != ''">#{remark},</if>
+ 			<if test="createBy != null and createBy != ''">#{createBy},</if>
+			now()
+ 		)
+	</insert>
+	
+	<delete id="deletePostById" parameterType="Long">
+		delete from sys_post where post_id = #{postId}
+	</delete>
+	
+	<delete id="deletePostByIds" parameterType="Long">
+ 		delete from sys_post where post_id in
+ 		<foreach collection="array" item="postId" open="(" separator="," close=")">
+ 			#{postId}
+        </foreach> 
+ 	</delete>
+
+</mapper> 
diff --git a/zhitan-system/target/classes/mapper/system/SysRoleDeptMapper.xml b/zhitan-system/target/classes/mapper/system/SysRoleDeptMapper.xml
new file mode 100644
index 0000000..ed43ada
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/system/SysRoleDeptMapper.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysRoleDeptMapper">
+
+	<resultMap type="SysRoleDept" id="SysRoleDeptResult">
+		<result property="roleId"     column="role_id"      />
+		<result property="deptId"     column="dept_id"      />
+	</resultMap>
+
+	<delete id="deleteRoleDeptByRoleId" parameterType="Long">
+		delete from sys_role_dept where role_id=#{roleId}
+	</delete>
+	
+	<select id="selectCountRoleDeptByDeptId" resultType="Integer">
+	    select count(1) from sys_role_dept where dept_id=#{deptId}
+	</select>
+	
+	<delete id="deleteRoleDept" parameterType="Long">
+ 		delete from sys_role_dept where role_id in
+ 		<foreach collection="array" item="roleId" open="(" separator="," close=")">
+ 			#{roleId}
+        </foreach> 
+ 	</delete>
+	
+	<insert id="batchRoleDept">
+		insert into sys_role_dept(role_id, dept_id) values
+		<foreach item="item" index="index" collection="list" separator=",">
+			(#{item.roleId},#{item.deptId})
+		</foreach>
+	</insert>
+	
+</mapper> 
diff --git a/zhitan-system/target/classes/mapper/system/SysRoleMapper.xml b/zhitan-system/target/classes/mapper/system/SysRoleMapper.xml
new file mode 100644
index 0000000..8196b75
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/system/SysRoleMapper.xml
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysRoleMapper">
+
+	<resultMap type="SysRole" id="SysRoleResult">
+		<id     property="roleId"       column="role_id"        />
+		<result property="roleName"     column="role_name"      />
+		<result property="roleKey"      column="role_key"       />
+		<result property="roleSort"     column="role_sort"      />
+		<result property="dataScope"    column="data_scope"     />
+		<result property="menuCheckStrictly"  column="menu_check_strictly"   />
+		<result property="deptCheckStrictly"  column="dept_check_strictly"   />
+		<result property="status"       column="status"         />
+		<result property="delFlag"      column="del_flag"       />
+		<result property="createBy"     column="create_by"      />
+		<result property="createTime"   column="create_time"    />
+		<result property="updateBy"     column="update_by"      />
+		<result property="updateTime"   column="update_time"    />
+		<result property="remark"       column="remark"         />
+	</resultMap>
+	
+	<sql id="selectRoleVo">
+	    select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope,r.menu_check_strictly, r.dept_check_strictly,
+            r.status, r.del_flag, r.create_time, r.remark 
+        from sys_role r
+	        left join sys_user_role ur on ur.role_id = r.role_id
+	        left join sys_user u on u.user_id = ur.user_id
+	        left join sys_dept d on u.dept_id = d.dept_id
+    </sql>
+    
+    <select id="selectRoleList" parameterType="SysRole" resultMap="SysRoleResult">
+		<include refid="selectRoleVo"/>
+		where r.del_flag = '0'
+		<if test="roleId != null and roleId != 0">
+			AND r.role_id = #{roleId}
+		</if>
+		<if test="roleName != null and roleName != ''">
+			AND r.role_name like concat('%', #{roleName}, '%')
+		</if>
+		<if test="status != null and status != ''">
+			AND r.status = #{status}
+		</if>
+		<if test="roleKey != null and roleKey != ''">
+			AND r.role_key like concat('%', #{roleKey}, '%')
+		</if>
+		<if test="beginTime != null and beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+			and to_char(r.create_time,'yyyymmdd') &gt;= to_char(to_date(#{beginTime}, 'yyyy-mm-dd'),'yyyymmdd')
+		</if>
+		<if test="endTime != null and endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+			and to_char(r.create_time,'yyyymmdd') &lt;= to_char(to_date(#{endTime}, 'yyyy-mm-dd'),'yyyymmdd')
+		</if>
+		<!-- 鏁版嵁鑼冨洿杩囨护 -->
+		${params.dataScope}
+		order by r.role_sort
+	</select>
+    
+	<select id="selectRolePermissionByUserId" parameterType="Long" resultMap="SysRoleResult">
+		<include refid="selectRoleVo"/>
+		WHERE r.del_flag = '0' and ur.user_id = #{userId}
+	</select>
+	
+	<select id="selectRoleAll" resultMap="SysRoleResult">
+		<include refid="selectRoleVo"/>
+		order by r.role_sort
+	</select>
+	
+	<select id="selectRoleListByUserId" parameterType="Long" resultType="Integer">
+		select r.role_id
+        from sys_role r
+	        left join sys_user_role ur on ur.role_id = r.role_id
+	        left join sys_user u on u.user_id = ur.user_id
+	    where u.user_id = #{userId}
+	</select>
+	
+	<select id="selectRoleById" parameterType="Long" resultMap="SysRoleResult">
+		<include refid="selectRoleVo"/>
+		where r.role_id = #{roleId}
+	</select>
+	
+	<select id="selectRolesByUserName" parameterType="String" resultMap="SysRoleResult">
+		<include refid="selectRoleVo"/>
+		WHERE r.del_flag = '0' and u.user_name = #{userName}
+	</select>
+	
+	<select id="checkRoleNameUnique" parameterType="String" resultMap="SysRoleResult">
+		<include refid="selectRoleVo"/>
+		 where r.role_name=#{roleName} and r.del_flag = '0' limit 1
+	</select>
+	
+	<select id="checkRoleKeyUnique" parameterType="String" resultMap="SysRoleResult">
+		<include refid="selectRoleVo"/>
+		 where r.role_key=#{roleKey} and r.del_flag = '0' limit 1
+	</select>
+	
+ 	<insert id="insertRole" parameterType="SysRole" useGeneratedKeys="true" keyProperty="roleId">
+ 		insert into sys_role(
+ 			<if test="roleId != null and roleId != 0">role_id,</if>
+ 			<if test="roleName != null and roleName != ''">role_name,</if>
+ 			<if test="roleKey != null and roleKey != ''">role_key,</if>
+ 			<if test="roleSort != null">role_sort,</if>
+ 			<if test="dataScope != null and dataScope != ''">data_scope,</if>
+ 			<if test="menuCheckStrictly != null">menu_check_strictly,</if>
+ 			<if test="deptCheckStrictly != null">dept_check_strictly,</if>
+ 			<if test="status != null and status != ''">status,</if>
+ 			<if test="remark != null and remark != ''">remark,</if>
+ 			<if test="createBy != null and createBy != ''">create_by,</if>
+ 			create_time
+ 		)values(
+ 			<if test="roleId != null and roleId != 0">#{roleId},</if>
+ 			<if test="roleName != null and roleName != ''">#{roleName},</if>
+ 			<if test="roleKey != null and roleKey != ''">#{roleKey},</if>
+ 			<if test="roleSort != null">#{roleSort},</if>
+ 			<if test="dataScope != null and dataScope != ''">#{dataScope},</if>
+ 			<if test="menuCheckStrictly != null">#{menuCheckStrictly},</if>
+ 			<if test="deptCheckStrictly != null">#{deptCheckStrictly},</if>
+ 			<if test="status != null and status != ''">#{status},</if>
+ 			<if test="remark != null and remark != ''">#{remark},</if>
+ 			<if test="createBy != null and createBy != ''">#{createBy},</if>
+			now()
+ 		)
+	</insert>
+	
+	<update id="updateRole" parameterType="SysRole">
+ 		update sys_role
+ 		<set>
+ 			<if test="roleName != null and roleName != ''">role_name = #{roleName},</if>
+ 			<if test="roleKey != null and roleKey != ''">role_key = #{roleKey},</if>
+ 			<if test="roleSort != null">role_sort = #{roleSort},</if>
+ 			<if test="dataScope != null and dataScope != ''">data_scope = #{dataScope},</if>
+ 			<if test="menuCheckStrictly != null">menu_check_strictly = #{menuCheckStrictly},</if>
+ 			<if test="deptCheckStrictly != null">dept_check_strictly = #{deptCheckStrictly},</if>
+ 			<if test="status != null and status != ''">status = #{status},</if>
+ 			<if test="remark != null">remark = #{remark},</if>
+ 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+ 			update_time = now()
+ 		</set>
+ 		where role_id = #{roleId}
+	</update>
+	
+	<update id="updateRoleStatus" parameterType="SysRole">
+ 		update sys_user set status = #{status} where user_id = #{userId}
+	</update>
+	
+	<delete id="deleteRoleById" parameterType="Long">
+ 		delete from sys_role where role_id = #{roleId}
+ 	</delete>
+ 	
+ 	<delete id="deleteRoleByIds" parameterType="Long">
+ 	    update sys_role set del_flag = '2' where role_id in
+ 		<foreach collection="array" item="roleId" open="(" separator="," close=")">
+ 			#{roleId}
+        </foreach> 
+ 	</delete>
+ 	
+</mapper> 
diff --git a/zhitan-system/target/classes/mapper/system/SysRoleMenuMapper.xml b/zhitan-system/target/classes/mapper/system/SysRoleMenuMapper.xml
new file mode 100644
index 0000000..b929cfb
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/system/SysRoleMenuMapper.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysRoleMenuMapper">
+
+	<resultMap type="SysRoleMenu" id="SysRoleMenuResult">
+		<result property="roleId"     column="role_id"      />
+		<result property="menuId"     column="menu_id"      />
+	</resultMap>
+	
+	<select id="checkMenuExistRole" resultType="Integer">
+	    select count(1) from sys_role_menu where menu_id = #{menuId}  
+	</select>
+
+	<delete id="deleteRoleMenuByRoleId" parameterType="Long">
+		delete from sys_role_menu where role_id=#{roleId}
+	</delete>
+	
+	<insert id="batchRoleMenu">
+		insert into sys_role_menu(role_id, menu_id) values
+		<foreach item="item" index="index" collection="list" separator=",">
+			(#{item.roleId},#{item.menuId})
+		</foreach>
+	</insert>
+	
+</mapper> 
diff --git a/zhitan-system/target/classes/mapper/system/SysUserMapper.xml b/zhitan-system/target/classes/mapper/system/SysUserMapper.xml
new file mode 100644
index 0000000..965abd8
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/system/SysUserMapper.xml
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysUserMapper">
+
+    <resultMap type="SysUser" id="SysUserResult">
+        <id property="userId" column="user_id"/>
+        <result property="deptId" column="dept_id"/>
+        <result property="userName" column="user_name"/>
+        <result property="nickName" column="nick_name"/>
+        <result property="email" column="email"/>
+        <result property="phoneNumber" column="phone_number"/>
+        <result property="sex" column="sex"/>
+        <result property="avatar" column="avatar"/>
+        <result property="password" column="password"/>
+        <result property="status" column="status"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="loginIp" column="login_ip"/>
+        <result property="loginDate" column="login_date"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="remark" column="remark"/>
+        <association property="dept"    javaType="SysDept"         resultMap="deptResult" />
+        <collection property="roles" javaType="java.util.List" resultMap="RoleResult"/>
+    </resultMap>
+
+    <resultMap id="deptResult" type="SysDept">
+        <id property="deptId" column="dept_id"/>
+        <result property="parentId" column="parent_id"/>
+        <result property="deptName" column="dept_name"/>
+        <result property="ancestors" column="ancestors"   />
+        <result property="orderNum" column="order_num"/>
+        <result property="leader" column="leader"/>
+        <result property="status" column="dept_status"/>
+    </resultMap>
+
+    <resultMap id="RoleResult" type="SysRole">
+        <id property="roleId" column="role_id"/>
+        <result property="roleName" column="role_name"/>
+        <result property="roleKey" column="role_key"/>
+        <result property="roleSort" column="role_sort"/>
+        <result property="dataScope" column="data_scope"/>
+        <result property="status" column="role_status"/>
+    </resultMap>
+
+    <sql id="selectUserVo">
+        select u.user_id,
+               u.dept_id,
+               u.user_name,
+               u.nick_name,
+               u.email,
+               u.avatar,
+               u.phone_number,
+               u.password,
+               u.sex,
+               u.status,
+               u.del_flag,
+               u.login_ip,
+               u.login_date,
+               u.create_by,
+               u.create_time,
+               u.remark,
+               d.dept_id,
+               d.parent_id,
+               d.ancestors,
+               d.dept_name,
+               d.order_num,
+               d.leader,
+               d.status as dept_status,
+               r.role_id,
+               r.role_name,
+               r.role_key,
+               r.role_sort,
+               r.data_scope,
+               r.status as role_status
+        from sys_user u
+                 left join sys_dept d on u.dept_id = d.dept_id
+                 left join sys_user_role ur on u.user_id = ur.user_id
+                 left join sys_role r on r.role_id = ur.role_id
+    </sql>
+
+    <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
+        select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phone_number, u.password, u.sex,
+        u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from
+        sys_user u
+        left join sys_dept d on u.dept_id = d.dept_id
+        where u.del_flag = '0'
+        <if test="userName != null and userName != ''">
+            AND u.user_name like concat('%', #{userName}, '%')
+        </if>
+        <if test="status != null and status != ''">
+            AND u.status = #{status}
+        </if>
+        <if test="phoneNumber != null and phoneNumber != ''">
+            AND u.phone_number like concat('%', #{phoneNumber}, '%')
+        </if>
+        <if test="beginTime != null and beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+            AND to_char(u.create_time,'yyyymmdd') &gt;= to_char(to_date(#{beginTime}, 'yyyy-mm-dd'),'yyyymmdd')
+        </if>
+        <if test="endTime != null and endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+            AND to_char(u.create_time,'yyyymmdd') &lt;= to_char(to_date(#{endTime}, 'yyyy-mm-dd'),'yyyymmdd')
+        </if>
+        <if test="deptId != null and deptId != 0">
+            AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE ancestors = (select
+            ancestors from sys_dept where dept_id = #{deptId}) || #{deptId} ))
+        </if>
+        <!-- 鏁版嵁鑼冨洿杩囨护 -->
+        ${dataScope}
+    </select>
+
+    <select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
+        <include refid="selectUserVo"/>
+		where u.user_name = #{userName} and u.del_flag = '0'
+    </select>
+
+    <select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
+        <include refid="selectUserVo"/>
+        where u.user_id = #{userId}
+    </select>
+
+	<select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult">
+		select user_id, user_name from sys_user where user_name = #{userName} and del_flag = '0' limit 1
+    </select>
+
+    <select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
+		select user_id, phone_number from sys_user where phone_number = #{phoneNumber} and del_flag = '0' limit 1
+    </select>
+
+    <select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
+		select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1
+    </select>
+
+    <insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
+        insert into sys_user(
+        <if test="userId != null and userId != 0">user_id,</if>
+        <if test="deptId != null and deptId != 0">dept_id,</if>
+        <if test="userName != null and userName != ''">user_name,</if>
+        <if test="nickName != null and nickName != ''">nick_name,</if>
+        <if test="email != null and email != ''">email,</if>
+        <if test="avatar != null and avatar != ''">avatar,</if>
+        <if test="phoneNumber != null and phoneNumber != ''">phone_number,</if>
+        <if test="sex != null and sex != ''">sex,</if>
+        <if test="password != null and password != ''">password,</if>
+        <if test="status != null and status != ''">status,</if>
+        <if test="createBy != null and createBy != ''">create_by,</if>
+        <if test="remark != null and remark != ''">remark,</if>
+        create_time
+        )values(
+        <if test="userId != null and userId != ''">#{userId},</if>
+        <if test="deptId != null and deptId != ''">#{deptId},</if>
+        <if test="userName != null and userName != ''">#{userName},</if>
+        <if test="nickName != null and nickName != ''">#{nickName},</if>
+        <if test="email != null and email != ''">#{email},</if>
+        <if test="avatar != null and avatar != ''">#{avatar},</if>
+        <if test="phoneNumber != null and phoneNumber != ''">#{phoneNumber},</if>
+        <if test="sex != null and sex != ''">#{sex},</if>
+        <if test="password != null and password != ''">#{password},</if>
+        <if test="status != null and status != ''">#{status},</if>
+        <if test="createBy != null and createBy != ''">#{createBy},</if>
+        <if test="remark != null and remark != ''">#{remark},</if>
+        now()
+        )
+    </insert>
+
+    <update id="updateUser" parameterType="SysUser">
+        update sys_user
+        <set>
+            <if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
+            <if test="userName != null and userName != ''">user_name = #{userName},</if>
+            <if test="nickName != null and nickName != ''">nick_name = #{nickName},</if>
+ 			<if test="email != null ">email = #{email},</if>
+ 			<if test="phoneNumber != null ">phone_number = #{phoneNumber},</if>
+            <if test="sex != null and sex != ''">sex = #{sex},</if>
+            <if test="avatar != null and avatar != ''">avatar = #{avatar},</if>
+            <if test="password != null and password != ''">password = #{password},</if>
+            <if test="status != null and status != ''">status = #{status},</if>
+            <if test="loginIp != null and loginIp != ''">login_ip = #{loginIp},</if>
+            <if test="loginDate != null">login_date = #{loginDate},</if>
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            update_time = now()
+        </set>
+        where user_id = #{userId}
+    </update>
+
+    <update id="updateUserStatus" parameterType="SysUser">
+        update sys_user
+        set status = #{status}
+        where user_id = #{userId}
+    </update>
+
+    <update id="updateUserAvatar" parameterType="SysUser">
+        update sys_user
+        set avatar = #{avatar}
+        where user_name = #{userName}
+    </update>
+
+    <update id="resetUserPwd" parameterType="SysUser">
+        update sys_user
+        set password = #{password}
+        where user_name = #{userName}
+    </update>
+
+    <delete id="deleteUserById" parameterType="Long">
+        delete
+        from sys_user
+        where user_id = #{userId}
+    </delete>
+
+    <delete id="deleteUserByIds" parameterType="Long">
+        delete
+        from sys_user
+        where user_id in
+        <foreach collection="array" item="userId" open="(" separator="," close=")">
+            #{userId}
+        </foreach>
+    </delete>
+
+</mapper> 
diff --git a/zhitan-system/target/classes/mapper/system/SysUserPostMapper.xml b/zhitan-system/target/classes/mapper/system/SysUserPostMapper.xml
new file mode 100644
index 0000000..0e2afe9
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/system/SysUserPostMapper.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysUserPostMapper">
+
+	<resultMap type="SysUserPost" id="SysUserPostResult">
+		<result property="userId"     column="user_id"      />
+		<result property="postId"     column="post_id"      />
+	</resultMap>
+
+	<delete id="deleteUserPostByUserId" parameterType="Long">
+		delete from sys_user_post where user_id=#{userId}
+	</delete>
+	
+	<select id="countUserPostById" resultType="Integer">
+	    select count(1) from sys_user_post where post_id=#{postId}  
+	</select>
+	
+	<delete id="deleteUserPost" parameterType="Long">
+ 		delete from sys_user_post where user_id in
+ 		<foreach collection="array" item="userId" open="(" separator="," close=")">
+ 			#{userId}
+        </foreach> 
+ 	</delete>
+	
+	<insert id="batchUserPost">
+		insert into sys_user_post(user_id, post_id) values
+		<foreach item="item" index="index" collection="list" separator=",">
+			(#{item.userId},#{item.postId})
+		</foreach>
+	</insert>
+	
+</mapper> 
diff --git a/zhitan-system/target/classes/mapper/system/SysUserRoleMapper.xml b/zhitan-system/target/classes/mapper/system/SysUserRoleMapper.xml
new file mode 100644
index 0000000..77b3477
--- /dev/null
+++ b/zhitan-system/target/classes/mapper/system/SysUserRoleMapper.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.system.mapper.SysUserRoleMapper">
+
+	<resultMap type="SysUserRole" id="SysUserRoleResult">
+		<result property="userId"     column="user_id"      />
+		<result property="roleId"     column="role_id"      />
+	</resultMap>
+
+	<delete id="deleteUserRoleByUserId" parameterType="Long">
+		delete from sys_user_role where user_id=#{userId}
+	</delete>
+	
+	<select id="countUserRoleByRoleId" resultType="Integer">
+	    select count(1) from sys_user_role where role_id=#{roleId}  
+	</select>
+	
+	<delete id="deleteUserRole" parameterType="Long">
+ 		delete from sys_user_role where user_id in
+ 		<foreach collection="array" item="userId" open="(" separator="," close=")">
+ 			#{userId}
+        </foreach> 
+ 	</delete>
+	
+	<insert id="batchUserRole">
+		insert into sys_user_role(user_id, role_id) values
+		<foreach item="item" index="index" collection="list" separator=",">
+			(#{item.userId},#{item.roleId})
+		</foreach>
+	</insert>
+	
+	<delete id="deleteUserRoleInfo" parameterType="SysUserRole">
+		delete from sys_user_role where user_id=#{userId} and role_id=#{roleId}
+	</delete>
+	
+	<delete id="deleteUserRoleInfos">
+	    delete from sys_user_role where role_id=#{roleId} and user_id in
+ 	    <foreach collection="userIds" item="userId" open="(" separator="," close=")">
+ 	        #{userId}
+            </foreach> 
+	</delete>
+</mapper> 

--
Gitblit v1.9.3